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>
static void rip_peer_free(struct rip_peer *peer)
{
+ RIP_TIMER_OFF(peer->t_timeout);
XFREE(MTYPE_RIP_PEER, peer);
}
return (htonl(p1->addr.s_addr) < htonl(p2->addr.s_addr)) ? -1 : 1;
}
+
+void rip_peer_list_del(void *arg)
+{
+ rip_peer_free(arg);
+}
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);
route_table_finish(rip->table);
route_table_finish(rip->neighbor);
+ list_delete(&rip->peer_list);
distribute_list_delete(&rip->distribute_ctx);
rip_clean_network();
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);