diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-03-28 22:08:37 -0400 | 
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-03-29 14:19:05 -0400 | 
| commit | 69dd2e5ea613e079887233d75fbce5f7c4107592 (patch) | |
| tree | 02134dfd84ca71dc529eb44aa6297756b9c2849a | |
| parent | 35dd52481a2563916247b4d039df070e1ecf5124 (diff) | |
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-- | nhrpd/nhrp_interface.c | 6 | ||||
| -rw-r--r-- | pimd/pim_zebra.c | 2 | 
2 files changed, 6 insertions, 2 deletions
diff --git a/nhrpd/nhrp_interface.c b/nhrpd/nhrp_interface.c index 3a42712748..13297aa344 100644 --- a/nhrpd/nhrp_interface.c +++ b/nhrpd/nhrp_interface.c @@ -323,9 +323,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 ad60e8e3a6..30d66c835b 100644 --- a/pimd/pim_zebra.c +++ b/pimd/pim_zebra.c @@ -152,6 +152,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;  }  | 
