]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd, pim6d: Fix BSM packet process
authorSarita Patra <saritap@vmware.com>
Tue, 18 Oct 2022 23:06:12 +0000 (16:06 -0700)
committerSarita Patra <saritap@vmware.com>
Fri, 24 Feb 2023 12:40:38 +0000 (04:40 -0800)
Problem 1:
When route to BSR is having nexthop secondary address,
neighborship is built with primary address,
then pim_neighbor_find() fails, which cause drop of BSM
packet.

Fix 1:
Verify pim neighborship on the BSM received interface.
Problem 2:

Problem 2:
Source IP BSM address is primary address, where
as nexthop also can be primary or secondary address.

Fix 2:
Avoiding the check (nhaddr == src_ip) for PIMV6

Issue: #11957

Signed-off-by: Sarita Patra <saritap@vmware.com>
pimd/pim_nht.c

index d73f366d4384f032e069a2a5abe8b9fb8d136734..ac8445e4ff893b163ee4f6518512623cee95039a 100644 (file)
@@ -307,12 +307,11 @@ bool pim_nht_bsr_rpf_check(struct pim_instance *pim, pim_addr bsr_addr,
                        if (if_is_loopback(ifp) && if_is_loopback(src_ifp))
                                return true;
 
-                       nbr = pim_neighbor_find(ifp, znh->nexthop_addr);
+                       nbr = pim_neighbor_find(ifp, znh->nexthop_addr, true);
                        if (!nbr)
                                continue;
 
-                       return znh->ifindex == src_ifp->ifindex &&
-                              (!pim_addr_cmp(znh->nexthop_addr, src_ip));
+                       return znh->ifindex == src_ifp->ifindex;
                }
                return false;
        }
@@ -373,12 +372,13 @@ bool pim_nht_bsr_rpf_check(struct pim_instance *pim, pim_addr bsr_addr,
                        return true;
 
                /* MRIB (IGP) may be pointing at a router where PIM is down */
-               nbr = pim_neighbor_find(ifp, nhaddr);
+
+               nbr = pim_neighbor_find(ifp, nhaddr, true);
+
                if (!nbr)
                        continue;
 
-               return nh->ifindex == src_ifp->ifindex &&
-                      (!pim_addr_cmp(nhaddr, src_ip));
+               return nh->ifindex == src_ifp->ifindex;
        }
        return false;
 }