From ca163640f1a2e0ff181ad84a7c22fc76c4da3ecf Mon Sep 17 00:00:00 2001 From: Sarita Patra Date: Tue, 18 Oct 2022 16:06:12 -0700 Subject: [PATCH] pimd, pim6d: Fix BSM packet process 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 (cherry picked from commit 2c6a32f9be3c687fe5c52d055f21912da8364ec6) --- pimd/pim_nht.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pimd/pim_nht.c b/pimd/pim_nht.c index a33da64568..16dff376e3 100644 --- a/pimd/pim_nht.c +++ b/pimd/pim_nht.c @@ -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; } -- 2.39.5