From d77da853f0f055244f5442e37b690809ab951a5a Mon Sep 17 00:00:00 2001 From: Sarita Patra Date: Fri, 24 Feb 2023 02:03:34 -0800 Subject: [PATCH] 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 --- pimd/pim_upstream.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c index d63d530f93..b0f1158596 100644 --- a/pimd/pim_upstream.c +++ b/pimd/pim_upstream.c @@ -327,7 +327,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); @@ -341,7 +341,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( @@ -433,7 +433,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); @@ -485,7 +486,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);