mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 08:50:26 +00:00
ripd: clear list of peers when RIP is deconfigured
This is an old standing bug where the list of RIP peers wasn't cleared after deconfiguring RIP, which caused the existing peers to still be present on a newly configured RIP instance (except when the timed out after ~3 minutes). Fix this. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
This commit is contained in:
parent
2826309c11
commit
711915d2cd
@ -36,6 +36,7 @@ static struct rip_peer *rip_peer_new(void)
|
||||
|
||||
static void rip_peer_free(struct rip_peer *peer)
|
||||
{
|
||||
RIP_TIMER_OFF(peer->t_timeout);
|
||||
XFREE(MTYPE_RIP_PEER, peer);
|
||||
}
|
||||
|
||||
@ -174,3 +175,8 @@ int rip_peer_list_cmp(struct rip_peer *p1, struct rip_peer *p2)
|
||||
|
||||
return (htonl(p1->addr.s_addr) < htonl(p2->addr.s_addr)) ? -1 : 1;
|
||||
}
|
||||
|
||||
void rip_peer_list_del(void *arg)
|
||||
{
|
||||
rip_peer_free(arg);
|
||||
}
|
||||
|
@ -2609,6 +2609,7 @@ int rip_create(int socket)
|
||||
rip->neighbor = route_table_init();
|
||||
rip->peer_list = list_new();
|
||||
rip->peer_list->cmp = (int (*)(void *, void *))rip_peer_list_cmp;
|
||||
rip->peer_list->del = rip_peer_list_del;
|
||||
rip->distance_table = route_table_init();
|
||||
rip->distance_table->cleanup = rip_distance_table_node_cleanup;
|
||||
rip->enable_interface = vector_init(1);
|
||||
@ -3288,6 +3289,7 @@ void rip_clean(void)
|
||||
|
||||
route_table_finish(rip->table);
|
||||
route_table_finish(rip->neighbor);
|
||||
list_delete(&rip->peer_list);
|
||||
distribute_list_delete(&rip->distribute_ctx);
|
||||
|
||||
rip_clean_network();
|
||||
|
@ -449,6 +449,7 @@ extern void rip_peer_display(struct vty *);
|
||||
extern struct rip_peer *rip_peer_lookup(struct in_addr *);
|
||||
extern struct rip_peer *rip_peer_lookup_next(struct in_addr *);
|
||||
extern int rip_peer_list_cmp(struct rip_peer *p1, struct rip_peer *p2);
|
||||
extern void rip_peer_list_del(void *arg);
|
||||
|
||||
extern void rip_info_free(struct rip_info *);
|
||||
extern struct rip_distance *rip_distance_new(void);
|
||||
|
Loading…
Reference in New Issue
Block a user