diff options
Diffstat (limited to 'pimd/pim_msdp.h')
| -rw-r--r-- | pimd/pim_msdp.h | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/pimd/pim_msdp.h b/pimd/pim_msdp.h index bb7ee01ad8..a074f21b47 100644 --- a/pimd/pim_msdp.h +++ b/pimd/pim_msdp.h @@ -97,7 +97,9 @@ enum pim_msdp_peer_flags { PIM_MSDP_PEERF_NONE = 0, PIM_MSDP_PEERF_LISTENER = (1 << 0), #define PIM_MSDP_PEER_IS_LISTENER(mp) (mp->flags & PIM_MSDP_PEERF_LISTENER) - PIM_MSDP_PEERF_SA_JUST_SENT = (1 << 1) + PIM_MSDP_PEERF_SA_JUST_SENT = (1 << 1), + /** Flag to signalize that peer belongs to a group. */ + PIM_MSDP_PEERF_IN_GROUP = (1 << 2), }; struct pim_msdp_peer { @@ -205,6 +207,13 @@ struct pim_msdp { /** List of mesh groups. */ struct pim_mesh_group_list mglist; + + /** MSDP global hold time period. */ + uint32_t hold_time; + /** MSDP global keep alive period. */ + uint32_t keep_alive; + /** MSDP global connection retry period. */ + uint32_t connection_retry; }; #define PIM_MSDP_PEER_READ_ON(mp) \ @@ -222,12 +231,6 @@ struct pim_msdp { struct pim_instance; void pim_msdp_init(struct pim_instance *pim, struct thread_master *master); void pim_msdp_exit(struct pim_instance *pim); -enum pim_msdp_err pim_msdp_peer_add(struct pim_instance *pim, - struct in_addr peer, struct in_addr local, - const char *mesh_group_name, - struct pim_msdp_peer **mp_p); -enum pim_msdp_err pim_msdp_peer_del(struct pim_instance *pim, - struct in_addr peer_addr); char *pim_msdp_state_dump(enum pim_msdp_peer_state state, char *buf, int buf_size); struct pim_msdp_peer *pim_msdp_peer_find(struct pim_instance *pim, @@ -237,8 +240,6 @@ void pim_msdp_peer_pkt_rxed(struct pim_msdp_peer *mp); void pim_msdp_peer_stop_tcp_conn(struct pim_msdp_peer *mp, bool chg_state); void pim_msdp_peer_reset_tcp_conn(struct pim_msdp_peer *mp, const char *rc_str); int pim_msdp_write(struct thread *thread); -char *pim_msdp_peer_key_dump(struct pim_msdp_peer *mp, char *buf, int buf_size, - bool long_format); int pim_msdp_config_write(struct pim_instance *pim, struct vty *vty, const char *spaces); bool pim_msdp_peer_config_write(struct vty *vty, struct pim_instance *pim, @@ -288,4 +289,33 @@ struct pim_msdp_mg_mbr *pim_msdp_mg_mbr_add(struct pim_instance *pim, */ void pim_msdp_mg_mbr_del(struct pim_msdp_mg *mg, struct pim_msdp_mg_mbr *mbr); +/** + * Allocates MSDP peer data structure, adds peer to group name + * `mesh_group_name` and starts state machine. If no group name is provided then + * the peer will work standalone. + * + * \param pim PIM instance + * \param peer_addr peer address + * \param local_addr local listening address + * \param mesh_group_name mesh group name (or `NULL` for peers without group). + */ +struct pim_msdp_peer *pim_msdp_peer_add(struct pim_instance *pim, + const struct in_addr *peer_addr, + const struct in_addr *local_addr, + const char *mesh_group_name); + +/** + * Stops peer state machine and free memory. + */ +void pim_msdp_peer_del(struct pim_msdp_peer **mp); + +/** + * Changes peer source address. + * + * NOTE: + * This will cause the connection to drop and start again. + */ +void pim_msdp_peer_change_source(struct pim_msdp_peer *mp, + const struct in_addr *addr); + #endif |
