]> git.proxmox.com Git - mirror_frr.git/commitdiff
eigrpd: Only install up to eigrp->max_paths into rib.
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 7 Apr 2017 22:59:06 +0000 (18:59 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 7 Apr 2017 22:59:06 +0000 (18:59 -0400)
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
eigrpd/eigrp_topology.c
eigrpd/eigrp_topology.h

index 29664eaebb6faa0db15154bdf61d1951a9bafc39..8895a61f32ed28783ae5b8c688db060481753873 100644 (file)
@@ -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;
 
index 33b5c893c7f0546beabdeb9756ae274e24eff486..cb1ac793f07f2c72c7f45cb0e1779337028111ef 100644 (file)
@@ -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 *);