From: Donald Sharp Date: Fri, 7 Apr 2017 22:59:06 +0000 (-0400) Subject: eigrpd: Only install up to eigrp->max_paths into rib. X-Git-Tag: reindent-master-before~197^2~14 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=962251aeff2989b46e19cf7535371a160472e02f;p=matthieu%2Ffrr.git eigrpd: Only install up to eigrp->max_paths into rib. Signed-off-by: Donald Sharp --- diff --git a/eigrpd/eigrp_topology.c b/eigrpd/eigrp_topology.c index 29664eaebb..8895a61f32 100644 --- a/eigrpd/eigrp_topology.c +++ b/eigrpd/eigrp_topology.c @@ -351,6 +351,26 @@ eigrp_topology_get_successor(struct eigrp_prefix_entry *table_node) return successors; } +struct list * +eigrp_topology_get_successor_max(struct eigrp_prefix_entry *table_node, + unsigned int maxpaths) +{ + struct list *successors = eigrp_topology_get_successor(table_node); + + if (successors && successors->count > maxpaths) + { + do + { + struct listnode *node = listtail(successors); + + list_delete_node(successors, node); + + } while (successors->count > maxpaths); + } + + return successors; +} + struct eigrp_neighbor_entry * eigrp_prefix_entry_lookup(struct list *entries, struct eigrp_neighbor *nbr) { @@ -482,7 +502,8 @@ eigrp_topology_update_node_flags(struct eigrp_prefix_entry *dest) void eigrp_update_routing_table(struct eigrp_prefix_entry * prefix) { - struct list *successors = eigrp_topology_get_successor(prefix); + struct eigrp *eigrp = eigrp_lookup(); + struct list *successors = eigrp_topology_get_successor_max(prefix, eigrp->max_paths); struct listnode *node; struct eigrp_neighbor_entry *entry; diff --git a/eigrpd/eigrp_topology.h b/eigrpd/eigrp_topology.h index 33b5c893c7..cb1ac793f0 100644 --- a/eigrpd/eigrp_topology.h +++ b/eigrpd/eigrp_topology.h @@ -49,7 +49,7 @@ extern void eigrp_topology_delete_all (struct list *); extern unsigned int eigrp_topology_table_isempty (struct list *); extern struct eigrp_prefix_entry *eigrp_topology_table_lookup_ipv4 (struct list *, struct prefix_ipv4 *); extern struct list *eigrp_topology_get_successor (struct eigrp_prefix_entry *); -//extern struct eigrp_neighbor_entry *eigrp_topology_get_fsuccessor (struct eigrp_prefix_entry *); +extern struct list *eigrp_topology_get_successor_max (struct eigrp_prefix_entry *pe, unsigned int maxpaths); extern struct eigrp_neighbor_entry *eigrp_prefix_entry_lookup (struct list *, struct eigrp_neighbor *); extern struct list *eigrp_neighbor_prefixes_lookup(struct eigrp *, struct eigrp_neighbor *); extern void eigrp_topology_update_all_node_flags (struct eigrp *);