X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=eigrpd%2Feigrp_topology.c;h=0cb4e0e9f45c3d2086fd399393f287ab16ebf7d1;hb=91d227b7e3cb53ad8fdbcd9d4cff7f0a666918e3;hp=4e26446ebe10419fdf4741332988142321117583;hpb=0bf75bd5c996e578337e9a913bac9723ab7abf78;p=mirror_frr.git diff --git a/eigrpd/eigrp_topology.c b/eigrpd/eigrp_topology.c index 4e26446eb..0cb4e0e9f 100644 --- a/eigrpd/eigrp_topology.c +++ b/eigrpd/eigrp_topology.c @@ -37,6 +37,7 @@ #include "log.h" #include "linklist.h" #include "vty.h" +#include "lib_errors.h" #include "eigrpd/eigrp_structs.h" #include "eigrpd/eigrpd.h" @@ -117,16 +118,9 @@ struct eigrp_nexthop_entry *eigrp_nexthop_entry_new() * 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); + route_table_finish(table); } /* @@ -170,7 +164,7 @@ void eigrp_nexthop_entry_add(struct eigrp_prefix_entry *node, eigrp_zebra_route_add(node->destination, l); } - list_delete_and_null(&l); + list_delete(&l); } /* @@ -180,6 +174,8 @@ void eigrp_prefix_entry_delete(struct route_table *table, 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) @@ -195,9 +191,12 @@ void eigrp_prefix_entry_delete(struct route_table *table, */ listnode_delete(eigrp->topology_changes_internalIPV4, pe); - list_delete_and_null(&pe->entries); - list_delete_and_null(&pe->rij); + for (ALL_LIST_ELEMENTS(pe->entries, node, nnode, ne)) + eigrp_nexthop_entry_delete(pe, ne); + list_delete(&pe->entries); + list_delete(&pe->rij); eigrp_zebra_route_delete(pe->destination); + prefix_free(pe->destination); rn->info = NULL; route_unlock_node(rn); // Lookup above @@ -236,18 +235,6 @@ void eigrp_topology_delete_all(struct route_table *topology) } } -/* - * 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) @@ -289,7 +276,7 @@ struct list *eigrp_topology_get_successor(struct eigrp_prefix_entry *table_node) * If we have no successors return NULL */ if (!successors->count) { - list_delete_and_null(&successors); + list_delete(&successors); successors = NULL; } @@ -411,7 +398,8 @@ eigrp_topology_update_distance(struct eigrp_fsm_action_message *msg) } break; default: - zlog_err("%s: Please implement handler", __PRETTY_FUNCTION__); + flog_err(EC_LIB_DEVELOPMENT, "%s: Please implement handler", + __PRETTY_FUNCTION__); break; } distance_done: @@ -448,6 +436,8 @@ void eigrp_topology_update_node_flags(struct eigrp_prefix_entry *dest) struct eigrp_nexthop_entry *entry; struct eigrp *eigrp = eigrp_lookup(); + assert(eigrp); + for (ALL_LIST_ELEMENTS_RO(dest->entries, node, entry)) { if (entry->reported_distance < dest->fdistance) { // is feasible successor, can be successor @@ -491,7 +481,7 @@ void eigrp_update_routing_table(struct eigrp_prefix_entry *prefix) for (ALL_LIST_ELEMENTS_RO(successors, node, entry)) entry->flags |= EIGRP_NEXTHOP_ENTRY_INTABLE_FLAG; - list_delete_and_null(&successors); + list_delete(&successors); } else { eigrp_zebra_route_delete(prefix->destination); for (ALL_LIST_ELEMENTS_RO(prefix->entries, node, entry))