summaryrefslogtreecommitdiff
path: root/pimd/pim_ifchannel.c
diff options
context:
space:
mode:
authorgithub login name <ranjany@vmware.com>2021-07-19 03:57:25 -0700
committergithub login name <ranjany@vmware.com>2021-07-19 03:57:25 -0700
commit660b04429437416d71ec22dcc8bb798fdf45bec6 (patch)
treec26379a9c85a5643da0873e5e05fd3ed88e7aa4c /pimd/pim_ifchannel.c
parentfb8e437bcd53b123f1edc5ee86a163b9ff36aa07 (diff)
pimd: pim_ifchannel_local_membership_add should not inherit if (S,G) rpf unresolved
Problem: S,G entry has iif = oif in FHR is LHR case. Setup:- R11-----R2----R4 R11 :- FHR and LHR R2 :- RP R4 :- LHR Issue :- 1) shut mapped interface in R11 2) wait for 5 min 3) do FRR restart 5) No shut of mapped interface OIL is added for local interface also where OIL is same as IIF and duplicate traffic observed on R4 receives in Ixia RCA: pim_ifchannel_local_membership_add adds inherited oif from starg when iif for SG is unavailable. When rpf for that SG resolves to this inherited oif from starg, iif is also in oif. This results in dup traffic. Fix: If iif is not available, do not inherit from starg. Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
Diffstat (limited to 'pimd/pim_ifchannel.c')
-rw-r--r--pimd/pim_ifchannel.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/pimd/pim_ifchannel.c b/pimd/pim_ifchannel.c
index 9ee06edfc1..3f985e64b4 100644
--- a/pimd/pim_ifchannel.c
+++ b/pimd/pim_ifchannel.c
@@ -1232,6 +1232,16 @@ int pim_ifchannel_local_membership_add(struct interface *ifp,
__FILE__, __func__, child->sg_str,
ifp->name, up->sg_str);
+ if (!child->rpf.source_nexthop.interface) {
+ /* when iif unknown, do not inherit */
+ if (PIM_DEBUG_EVENTS)
+ zlog_debug(
+ "Skipped (S,G)=%s(%s) from %s: no iif",
+ child->sg_str, ifp->name,
+ up->sg_str);
+ continue;
+ }
+
ch = pim_ifchannel_find(ifp, &child->sg);
if (pim_upstream_evaluate_join_desired_interface(
child, ch, starch)) {