Merge pull request #4214 from donaldsharp/s_g_channel_deletion

pimd: Deletion of a ifchannel does not immediately mean remove from OIL
This commit is contained in:
Jafar Al-Gharaibeh 2019-05-10 09:49:24 -05:00 committed by GitHub
commit 60f678ae0d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 5 deletions

View File

@ -135,9 +135,20 @@ void pim_ifchannel_delete(struct pim_ifchannel *ch)
if (ch->upstream->flags & PIM_UPSTREAM_FLAG_MASK_SRC_IGMP)
mask = PIM_OIF_FLAG_PROTO_IGMP;
/* SGRpt entry could have empty oil */
pim_channel_del_oif(ch->upstream->channel_oil, ch->interface,
mask);
/*
* A S,G RPT channel can have an empty oil, we also
* need to take into account the fact that a ifchannel
* might have been suppressing a *,G ifchannel from
* being inherited. So let's figure out what
* needs to be done here
*/
if (pim_upstream_evaluate_join_desired_interface(
ch->upstream, ch, ch->parent))
pim_channel_add_oif(ch->upstream->channel_oil,
ch->interface, mask);
else
pim_channel_del_oif(ch->upstream->channel_oil,
ch->interface, mask);
/*
* Do we have any S,G's that are inheriting?
* Nuke from on high too.

View File

@ -1296,8 +1296,16 @@ void pim_forward_stop(struct pim_ifchannel *ch, bool install_it)
install_it, up->channel_oil->installed);
}
pim_channel_del_oif(up->channel_oil, ch->interface,
PIM_OIF_FLAG_PROTO_PIM);
/*
* If a channel is being removed, check to see if we still need
* to inherit the interface. If so make sure it is added in
*/
if (pim_upstream_evaluate_join_desired_interface(up, ch, ch->parent))
pim_channel_add_oif(up->channel_oil, ch->interface,
PIM_OIF_FLAG_PROTO_PIM);
else
pim_channel_del_oif(up->channel_oil, ch->interface,
PIM_OIF_FLAG_PROTO_PIM);
if (install_it && !up->channel_oil->installed)
pim_mroute_add(up->channel_oil, __PRETTY_FUNCTION__);