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>
This commit is contained in:
Sarita Patra 2023-02-24 02:03:34 -08:00
parent 689b9f10fc
commit d77da853f0

View File

@ -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);