diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2020-06-01 07:36:24 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-01 07:36:24 -0400 |
| commit | 75e43de7a68c5f13a53b5a6b4dc8372b970de340 (patch) | |
| tree | 10ea8729b2919b205463522fef200a987f0f13b5 | |
| parent | 1f0628c7d87e55c7b62103750b755ddcdc4531cc (diff) | |
| parent | 810cbaf7c1240f32331781a69c3137a9b4cb86e9 (diff) | |
Merge pull request #6048 from sarav511/joinsup
pimd: In join suppression period, join is being sent
| -rw-r--r-- | pimd/pim_upstream.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c index cf5ea2fa53..8d462b1698 100644 --- a/pimd/pim_upstream.c +++ b/pimd/pim_upstream.c @@ -414,7 +414,8 @@ void pim_upstream_join_suppress(struct pim_upstream *up, struct in_addr rpf_addr, int holdtime) { long t_joinsuppress_msec; - long join_timer_remain_msec; + long join_timer_remain_msec = 0; + struct pim_neighbor *nbr = NULL; if (!up->rpf.source_nexthop.interface) { if (PIM_DEBUG_PIM_TRACE) @@ -427,7 +428,18 @@ void pim_upstream_join_suppress(struct pim_upstream *up, MIN(pim_if_t_suppressed_msec(up->rpf.source_nexthop.interface), 1000 * holdtime); - join_timer_remain_msec = pim_time_timer_remain_msec(up->t_join_timer); + if (up->t_join_timer) + join_timer_remain_msec = + pim_time_timer_remain_msec(up->t_join_timer); + else { + /* Remove it from jp agg from the nbr for suppression */ + nbr = pim_neighbor_find(up->rpf.source_nexthop.interface, + up->rpf.rpf_addr.u.prefix4); + if (nbr) { + join_timer_remain_msec = + pim_time_timer_remain_msec(nbr->jp_timer); + } + } if (PIM_DEBUG_PIM_TRACE) { char rpf_str[INET_ADDRSTRLEN]; @@ -446,6 +458,9 @@ void pim_upstream_join_suppress(struct pim_upstream *up, t_joinsuppress_msec); } + if (nbr) + pim_jp_agg_remove_group(nbr->upstream_jp_agg, up, nbr); + pim_upstream_join_timer_restart_msec(up, t_joinsuppress_msec); } } |
