summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2019-03-29 03:08:37 +0100
committerDonald Sharp <sharpd@cumulusnetworks.com>2019-03-29 17:44:05 +0100
commit9d6c33eadfde3baf29bee3bc72cd06ae5ea8a196 (patch)
treee1dbea776fce13e34db0578e85bec6d64e0f077b
parentMerge pull request #4026 from donaldsharp/pim_interface_fixup (diff)
downloadfrr-9d6c33eadfde3baf29bee3bc72cd06ae5ea8a196.tar.xz
frr-9d6c33eadfde3baf29bee3bc72cd06ae5ea8a196.zip
bfdd, nhrpd, pimd: When deleting an interface clean up
When we delete an interface, we need to set the interface ifindex to an internal value so that we don't end up in a state where the re-addition of the same ifindex, due to a rename operation, causes an infinite loop. Fixes:#4007 Fix-Suggested-by: Saravanan K Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
-rw-r--r--bfdd/ptm_adapter.c2
-rw-r--r--nhrpd/nhrp_interface.c6
-rw-r--r--pimd/pim_zebra.c2
3 files changed, 8 insertions, 2 deletions
diff --git a/bfdd/ptm_adapter.c b/bfdd/ptm_adapter.c
index b44d13f13..8d80b9468 100644
--- a/bfdd/ptm_adapter.c
+++ b/bfdd/ptm_adapter.c
@@ -613,6 +613,8 @@ static int bfdd_interface_update(int cmd, struct zclient *zc,
bfdd_sessions_disable_interface(ifp);
+ if_set_index(ifp, IFINDEX_INTERNAL);
+
return 0;
}
diff --git a/nhrpd/nhrp_interface.c b/nhrpd/nhrp_interface.c
index ccca100db..b33eaa047 100644
--- a/nhrpd/nhrp_interface.c
+++ b/nhrpd/nhrp_interface.c
@@ -327,9 +327,11 @@ int nhrp_interface_delete(int cmd, struct zclient *client, zebra_size_t length,
return 0;
debugf(NHRP_DEBUG_IF, "if-delete: %s", ifp->name);
- if_set_index(ifp, ifp->ifindex);
+
nhrp_interface_update(ifp);
- /* if_delete(ifp); */
+
+ if_set_index(ifp, IFINDEX_INTERNAL);
+
return 0;
}
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c
index 78cccd587..753efb950 100644
--- a/pimd/pim_zebra.c
+++ b/pimd/pim_zebra.c
@@ -150,6 +150,8 @@ static int pim_zebra_if_del(int command, struct zclient *zclient,
if (!if_is_operative(ifp))
pim_if_addr_del_all(ifp);
+ if_set_index(ifp, IFINDEX_INTERNAL);
+
return 0;
}