Pim bug fixes (#4519)

Pim bug fixes

Co-authored-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
This commit is contained in:
David Lamparter 2019-06-25 14:08:48 +02:00 committed by GitHub
commit ea1bdfc0e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -133,7 +133,7 @@ void pim_ifchannel_delete(struct pim_ifchannel *ch)
if (ch->upstream->channel_oil) {
uint32_t mask = PIM_OIF_FLAG_PROTO_PIM;
if (ch->upstream->flags & PIM_UPSTREAM_FLAG_MASK_SRC_IGMP)
mask = PIM_OIF_FLAG_PROTO_IGMP;
mask |= PIM_OIF_FLAG_PROTO_IGMP;
/*
* A S,G RPT channel can have an empty oil, we also
@ -142,13 +142,15 @@ void pim_ifchannel_delete(struct pim_ifchannel *ch)
* 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))
if ((ch->sg.src.s_addr != INADDR_ANY) &&
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);
ch->interface,
PIM_OIF_FLAG_PROTO_STAR);
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.
@ -227,6 +229,8 @@ void pim_ifchannel_delete_all(struct interface *ifp)
while (!RB_EMPTY(pim_ifchannel_rb, &pim_ifp->ifchannel_rb)) {
ch = RB_ROOT(pim_ifchannel_rb, &pim_ifp->ifchannel_rb);
pim_ifchannel_ifjoin_switch(__PRETTY_FUNCTION__,
ch, PIM_IFJOIN_NOINFO);
pim_ifchannel_delete(ch);
}
}