]> git.puffer.fish Git - mirror/frr.git/commitdiff
eigrpd: When deleting interface remove connected routes from topo table
authorDonald Sharp <sharpd@cumulusnetworks.com>
Sun, 2 Apr 2017 23:35:42 +0000 (19:35 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Sun, 2 Apr 2017 23:35:42 +0000 (19:35 -0400)
When we are deleting an interface, remove
the connected routes associated with that interface from
the topo table.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
eigrpd/eigrp_interface.c

index 18573caa004ae8fe4192c8be3de6e54c00cded5f..b3f80c57d8af11074299fa37ab4e4afcee0aa3a4 100644 (file)
@@ -436,6 +436,9 @@ eigrp_default_iftype (struct interface *ifp)
 void
 eigrp_if_free (struct eigrp_interface *ei, int source)
 {
+  struct prefix_ipv4 dest_addr;
+  struct eigrp_prefix_entry *pe;
+  struct eigrp *eigrp = eigrp_lookup ();
 
   if (source == INTERFACE_DOWN_BY_VTY)
     {
@@ -443,6 +446,14 @@ eigrp_if_free (struct eigrp_interface *ei, int source)
       eigrp_hello_send(ei,EIGRP_HELLO_GRACEFUL_SHUTDOWN, NULL);
     }
 
+  dest_addr.family = AF_INET;
+  dest_addr.prefix = ei->connected->address->u.prefix4;
+  dest_addr.prefixlen = ei->connected->address->prefixlen;
+  apply_mask_ipv4(&dest_addr);
+  pe = eigrp_topology_table_lookup_ipv4 (eigrp->topology_table, &dest_addr);
+  if (pe)
+    eigrp_prefix_entry_delete (eigrp->topology_table, pe);
+
   eigrp_if_down (ei);
 
   list_delete (ei->nbrs);