summaryrefslogtreecommitdiffstats
path: root/pimd/pim_oil.c
diff options
context:
space:
mode:
authorsaravanank <saravanank@vmware.com>2019-05-20 19:01:34 +0200
committersaravanank <saravanank@vmware.com>2019-06-13 04:07:13 +0200
commit50d06d9e561affb999a1a7c893e260f50d4fe1c6 (patch)
tree16414330039eebb90eec7457b03cecdc44277549 /pimd/pim_oil.c
parentDocker binary image on Debian Buster (#4504) (diff)
downloadfrr-50d06d9e561affb999a1a7c893e260f50d4fe1c6.tar.xz
frr-50d06d9e561affb999a1a7c893e260f50d4fe1c6.zip
pimd: fix DR at LHR scenario where non DR is connected to RP
In Scenario where receiver is present in a subnet where 2 or more pim mrouters. When IGMP query received on a DR interface and RP is reachable through non DR. Currently we are blocking to create upstream where iif == oif. So pim join not generated towards RP. We have to allow the DR router in the network to create an upstream. Signed-off-by: Saravanan K <saravanank@vmware.com>
Diffstat (limited to 'pimd/pim_oil.c')
-rw-r--r--pimd/pim_oil.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/pimd/pim_oil.c b/pimd/pim_oil.c
index 22045c2d3..1f8c2379a 100644
--- a/pimd/pim_oil.c
+++ b/pimd/pim_oil.c
@@ -344,10 +344,12 @@ int pim_channel_add_oif(struct channel_oil *channel_oil, struct interface *oif,
IGMP must be protected against adding looped MFC entries created
by both source and receiver attached to the same interface. See
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 &&
- PIM_UPSTREAM_FLAG_TEST_ALLOW_IIF_IN_OIL(
- channel_oil->up->flags)) {
+ if ((channel_oil->up &&
+ PIM_UPSTREAM_FLAG_TEST_ALLOW_IIF_IN_OIL(channel_oil->up->flags)) ||
+ ((proto_mask == PIM_OIF_FLAG_PROTO_IGMP) && PIM_I_am_DR(pim_ifp))) {
allow_iif_in_oil = true;
}