summaryrefslogtreecommitdiff
path: root/eigrpd/eigrp_interface.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2017-04-02 19:35:42 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2017-04-02 19:35:42 -0400
commit4325044689716f13f975e15660ed973b11dbdff4 (patch)
tree7a8908a8bc7d972f931369166f92c66ae22fd9ba /eigrpd/eigrp_interface.c
parent505a2c46d12bd4b128de50ca0045f68fa4c34a19 (diff)
eigrpd: When deleting interface remove connected routes from topo table
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>
Diffstat (limited to 'eigrpd/eigrp_interface.c')
-rw-r--r--eigrpd/eigrp_interface.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/eigrpd/eigrp_interface.c b/eigrpd/eigrp_interface.c
index 18573caa00..b3f80c57d8 100644
--- a/eigrpd/eigrp_interface.c
+++ b/eigrpd/eigrp_interface.c
@@ -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);