summaryrefslogtreecommitdiff
path: root/pimd/pim_upstream.c
diff options
context:
space:
mode:
authorSarita Patra <saritap@vmware.com>2023-02-24 02:03:34 -0800
committerSarita Patra <saritap@vmware.com>2023-02-24 04:40:38 -0800
commitd77da853f0f055244f5442e37b690809ab951a5a (patch)
tree191776eeadea672cbc02438efacf3e00e940c153 /pimd/pim_upstream.c
parent689b9f10fc33387414c8077cd8cacd2eb2fc7198 (diff)
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>
Diffstat (limited to 'pimd/pim_upstream.c')
-rw-r--r--pimd/pim_upstream.c10
1 files 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);