summaryrefslogtreecommitdiff
path: root/eigrpd/eigrp_interface.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2025-03-23 20:28:59 -0400
committerDonald Sharp <sharpd@nvidia.com>2025-03-24 11:36:13 -0400
commit8249c046d71aa28784ec4590a985ec97862fd8a3 (patch)
treedd2dd1b6f3813ac3944bdd07ecfad48fa1d7b1db /eigrpd/eigrp_interface.c
parent5f9e26069ee1244fbcd200118a55a51d88795b3d (diff)
eigrpd: Convert the nbrs list to a typesafe hash
Convert the ei->nbrs list to a typesafe hash to facilitate quick lookups. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'eigrpd/eigrp_interface.c')
-rw-r--r--eigrpd/eigrp_interface.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/eigrpd/eigrp_interface.c b/eigrpd/eigrp_interface.c
index fb8f47e723..05012e63b2 100644
--- a/eigrpd/eigrp_interface.c
+++ b/eigrpd/eigrp_interface.c
@@ -66,7 +66,7 @@ struct eigrp_interface *eigrp_if_new(struct eigrp *eigrp, struct interface *ifp,
ei->type = EIGRP_IFTYPE_BROADCAST;
/* Initialize neighbor list. */
- ei->nbrs = list_new();
+ eigrp_nbr_hash_init(&ei->nbr_hash_head);
ei->crypt_seqnum = frr_sequence32_next();
@@ -102,7 +102,7 @@ int eigrp_if_delete_hook(struct interface *ifp)
if (!ei)
return 0;
- list_delete(&ei->nbrs);
+ eigrp_nbr_hash_fini(&ei->nbr_hash_head);
eigrp = ei->eigrp;
listnode_delete(eigrp->eiflist, ei);
@@ -327,9 +327,6 @@ int eigrp_if_up(struct eigrp_interface *ei)
int eigrp_if_down(struct eigrp_interface *ei)
{
- struct listnode *node, *nnode;
- struct eigrp_neighbor *nbr;
-
if (ei == NULL)
return 0;
@@ -340,9 +337,9 @@ int eigrp_if_down(struct eigrp_interface *ei)
/*Set infinite metrics to routes learned by this interface and start
* query process*/
- for (ALL_LIST_ELEMENTS(ei->nbrs, node, nnode, nbr)) {
- eigrp_nbr_delete(nbr);
- }
+ while (eigrp_nbr_hash_count(&ei->nbr_hash_head) > 0)
+ eigrp_nbr_delete(eigrp_nbr_hash_first(&ei->nbr_hash_head));
+
return 1;
}