During shutdown we were not properly cleaning up some memory
as reported by valgrind. Additionally during cleanup operations
I noticed that there were some dead/unused functions remove/reduce.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* Freeing topology table list
*/
void eigrp_topology_free(struct route_table *table)
* Freeing topology table list
*/
void eigrp_topology_free(struct route_table *table)
-{
- route_table_finish(table);
-}
-
-/*
- * Deleting all topology nodes in table
- */
-void eigrp_topology_cleanup(struct route_table *table)
{
eigrp_topology_delete_all(table);
{
eigrp_topology_delete_all(table);
+ route_table_finish(table);
struct eigrp_prefix_entry *pe)
{
struct eigrp *eigrp = eigrp_lookup();
struct eigrp_prefix_entry *pe)
{
struct eigrp *eigrp = eigrp_lookup();
+ struct eigrp_nexthop_entry *ne;
+ struct listnode *node, *nnode;
struct route_node *rn;
if (!eigrp)
struct route_node *rn;
if (!eigrp)
*/
listnode_delete(eigrp->topology_changes_internalIPV4, pe);
*/
listnode_delete(eigrp->topology_changes_internalIPV4, pe);
+ for (ALL_LIST_ELEMENTS(pe->entries, node, nnode, ne))
+ eigrp_nexthop_entry_delete(pe, ne);
list_delete_and_null(&pe->entries);
list_delete_and_null(&pe->rij);
eigrp_zebra_route_delete(pe->destination);
list_delete_and_null(&pe->entries);
list_delete_and_null(&pe->rij);
eigrp_zebra_route_delete(pe->destination);
+ prefix_free(pe->destination);
rn->info = NULL;
route_unlock_node(rn); // Lookup above
rn->info = NULL;
route_unlock_node(rn); // Lookup above
-/*
- * Return 0 if topology is not empty
- * otherwise return 1
- */
-unsigned int eigrp_topology_table_isempty(struct list *topology)
-{
- if (topology->count)
- return 1;
- else
- return 0;
-}
-
struct eigrp_prefix_entry *
eigrp_topology_table_lookup_ipv4(struct route_table *table,
struct prefix *address)
struct eigrp_prefix_entry *
eigrp_topology_table_lookup_ipv4(struct route_table *table,
struct prefix *address)
extern struct eigrp_prefix_entry *eigrp_prefix_entry_new(void);
extern struct eigrp_nexthop_entry *eigrp_nexthop_entry_new(void);
extern void eigrp_topology_free(struct route_table *table);
extern struct eigrp_prefix_entry *eigrp_prefix_entry_new(void);
extern struct eigrp_nexthop_entry *eigrp_nexthop_entry_new(void);
extern void eigrp_topology_free(struct route_table *table);
-extern void eigrp_topology_cleanup(struct route_table *table);
extern void eigrp_prefix_entry_add(struct route_table *table,
struct eigrp_prefix_entry *pe);
extern void eigrp_nexthop_entry_add(struct eigrp_prefix_entry *,
extern void eigrp_prefix_entry_add(struct route_table *table,
struct eigrp_prefix_entry *pe);
extern void eigrp_nexthop_entry_add(struct eigrp_prefix_entry *,
extern void eigrp_nexthop_entry_delete(struct eigrp_prefix_entry *,
struct eigrp_nexthop_entry *);
extern void eigrp_topology_delete_all(struct route_table *table);
extern void eigrp_nexthop_entry_delete(struct eigrp_prefix_entry *,
struct eigrp_nexthop_entry *);
extern void eigrp_topology_delete_all(struct route_table *table);
-extern unsigned int eigrp_topology_table_isempty(struct list *);
extern struct eigrp_prefix_entry *
eigrp_topology_table_lookup_ipv4(struct route_table *table, struct prefix *p);
extern struct list *eigrp_topology_get_successor(struct eigrp_prefix_entry *);
extern struct eigrp_prefix_entry *
eigrp_topology_table_lookup_ipv4(struct route_table *table, struct prefix *p);
extern struct list *eigrp_topology_get_successor(struct eigrp_prefix_entry *);
struct eigrp_master *eigrp_om;
struct eigrp_master *eigrp_om;
-static void eigrp_delete(struct eigrp *);
static struct eigrp *eigrp_new(const char *);
static struct eigrp *eigrp_new(const char *);
-static void eigrp_add(struct eigrp *);
extern struct zclient *zclient;
extern struct in_addr router_id_zebra;
extern struct zclient *zclient;
extern struct in_addr router_id_zebra;
-static void eigrp_add(struct eigrp *eigrp)
-{
- listnode_add(eigrp_om->eigrp, eigrp);
-}
-
-static void eigrp_delete(struct eigrp *eigrp)
-{
- listnode_delete(eigrp_om->eigrp, eigrp);
-}
-
struct eigrp *eigrp_get(const char *AS)
{
struct eigrp *eigrp;
struct eigrp *eigrp_get(const char *AS)
{
struct eigrp *eigrp;
eigrp = eigrp_lookup();
if (eigrp == NULL) {
eigrp = eigrp_new(AS);
eigrp = eigrp_lookup();
if (eigrp == NULL) {
eigrp = eigrp_new(AS);
+ listnode_add(eigrp_om->eigrp, eigrp);
list_delete_and_null(&eigrp->eiflist);
list_delete_and_null(&eigrp->oi_write_q);
list_delete_and_null(&eigrp->eiflist);
list_delete_and_null(&eigrp->oi_write_q);
- eigrp_topology_cleanup(eigrp->topology_table);
eigrp_topology_free(eigrp->topology_table);
eigrp_nbr_delete(eigrp->neighbor_self);
eigrp_topology_free(eigrp->topology_table);
eigrp_nbr_delete(eigrp->neighbor_self);
list_delete_and_null(&eigrp->topology_changes_externalIPV4);
list_delete_and_null(&eigrp->topology_changes_internalIPV4);
list_delete_and_null(&eigrp->topology_changes_externalIPV4);
list_delete_and_null(&eigrp->topology_changes_internalIPV4);
+ listnode_delete(eigrp_om->eigrp, eigrp);
+ stream_free(eigrp->ibuf);
XFREE(MTYPE_EIGRP_TOP, eigrp);
}
XFREE(MTYPE_EIGRP_TOP, eigrp);
}