]> git.proxmox.com Git - mirror_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)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Thu, 2 Mar 2023 06:11:17 +0000 (06:11 +0000)
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>
(cherry picked from commit 2c6a32f9be3c687fe5c52d055f21912da8364ec6)

pimd/pim_nht.c

index a33da645689ed36ed0b51f530f59e28aad122be4..16dff376e325e0a96af408e540ea44b338996206 100644 (file)
@@ -320,12 +320,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;
        }
@@ -380,12 +379,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;
 }