]> git.proxmox.com Git - mirror_frr.git/commitdiff
pimd: pim_ifchannel_local_membership_add should not inherit if (S,G) rpf unresolved
authorgithub login name <ranjany@vmware.com>
Mon, 19 Jul 2021 10:57:25 +0000 (03:57 -0700)
committergithub login name <ranjany@vmware.com>
Mon, 19 Jul 2021 10:57:25 +0000 (03:57 -0700)
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>
pimd/pim_ifchannel.c

index 9ee06edfc191cb80d7024e0a6c4276014a4ca10b..3f985e64b4790d9d7e703f23f68a6a22c6ad0a37 100644 (file)
@@ -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)) {