pimd, pim6d: Fix join prune handling

When upstream RPF address is secondary address, and
neighborship is built with primary address,
then pim_neighbor_find() fails.

Verify the upstream  RPF address is present in the
neighbor primary and secondary address list.

Signed-off-by: Sarita Patra <saritap@vmware.com>
(cherry picked from commit d77da853f0)
This commit is contained in:
Sarita Patra 2023-02-24 02:03:34 -08:00 committed by Mergify
parent cb8d50ecd9
commit 0770149af7

View File

@ -340,7 +340,7 @@ static void join_timer_stop(struct pim_upstream *up)
if (up->rpf.source_nexthop.interface)
nbr = pim_neighbor_find(up->rpf.source_nexthop.interface,
up->rpf.rpf_addr);
up->rpf.rpf_addr, true);
if (nbr)
pim_jp_agg_remove_group(nbr->upstream_jp_agg, up, nbr);
@ -354,7 +354,7 @@ void join_timer_start(struct pim_upstream *up)
if (up->rpf.source_nexthop.interface) {
nbr = pim_neighbor_find(up->rpf.source_nexthop.interface,
up->rpf.rpf_addr);
up->rpf.rpf_addr, true);
if (PIM_DEBUG_PIM_EVENTS) {
zlog_debug(
@ -446,7 +446,8 @@ void pim_upstream_join_suppress(struct pim_upstream *up, pim_addr rpf,
else {
/* Remove it from jp agg from the nbr for suppression */
nbr = pim_neighbor_find(up->rpf.source_nexthop.interface,
up->rpf.rpf_addr);
up->rpf.rpf_addr, true);
if (nbr) {
join_timer_remain_msec =
pim_time_timer_remain_msec(nbr->jp_timer);
@ -498,7 +499,8 @@ void pim_upstream_join_timer_decrease_to_t_override(const char *debug_label,
struct pim_neighbor *nbr;
nbr = pim_neighbor_find(up->rpf.source_nexthop.interface,
up->rpf.rpf_addr);
up->rpf.rpf_addr, true);
if (nbr)
join_timer_remain_msec =
pim_time_timer_remain_msec(nbr->jp_timer);