Merge pull request #4518 from sarav511/dr_lhr

pimd: fix DR at LHR scenario where non DR is connected to RP
This commit is contained in:
Donald Sharp 2019-06-21 19:33:14 -04:00 committed by GitHub
commit 4bcf44412a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 6 deletions

View File

@ -364,10 +364,12 @@ int pim_channel_add_oif(struct channel_oil *channel_oil, struct interface *oif,
IGMP must be protected against adding looped MFC entries created IGMP must be protected against adding looped MFC entries created
by both source and receiver attached to the same interface. See by both source and receiver attached to the same interface. See
TODO T22. TODO T22.
We shall allow igmp to create upstream when it is DR for the intf.
Assume RP reachable via non DR.
*/ */
if (channel_oil->up && if ((channel_oil->up &&
PIM_UPSTREAM_FLAG_TEST_ALLOW_IIF_IN_OIL( PIM_UPSTREAM_FLAG_TEST_ALLOW_IIF_IN_OIL(channel_oil->up->flags)) ||
channel_oil->up->flags)) { ((proto_mask == PIM_OIF_FLAG_PROTO_IGMP) && PIM_I_am_DR(pim_ifp))) {
allow_iif_in_oil = true; allow_iif_in_oil = true;
} }

View File

@ -1045,10 +1045,12 @@ void igmp_source_forward_start(struct pim_instance *pim,
* Protect IGMP against adding looped MFC * Protect IGMP against adding looped MFC
* entries created by both source and receiver * entries created by both source and receiver
* attached to the same interface. See TODO * attached to the same interface. See TODO
* T22. * T22. Block only when the intf is non DR
* DR must create upstream.
*/ */
if (input_iface_vif_index == if ((input_iface_vif_index ==
pim_oif->mroute_vif_index) { pim_oif->mroute_vif_index) &&
!(PIM_I_am_DR(pim_oif))) {
/* ignore request for looped MFC entry /* ignore request for looped MFC entry
*/ */
if (PIM_DEBUG_IGMP_TRACE) { if (PIM_DEBUG_IGMP_TRACE) {