summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2020-06-01 07:36:24 -0400
committerGitHub <noreply@github.com>2020-06-01 07:36:24 -0400
commit75e43de7a68c5f13a53b5a6b4dc8372b970de340 (patch)
tree10ea8729b2919b205463522fef200a987f0f13b5
parent1f0628c7d87e55c7b62103750b755ddcdc4531cc (diff)
parent810cbaf7c1240f32331781a69c3137a9b4cb86e9 (diff)
Merge pull request #6048 from sarav511/joinsup
pimd: In join suppression period, join is being sent
-rw-r--r--pimd/pim_upstream.c19
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);
}
}