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 <saritap@vmware.com>
(cherry picked from commit 2c6a32f9be)
This commit is contained in:
Sarita Patra 2022-10-18 16:06:12 -07:00 committed by Mergify
parent 0320f687e6
commit ca163640f1

View 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;
}