summaryrefslogtreecommitdiffstats
path: root/pimd
diff options
context:
space:
mode:
authorsaravanank <saravanank@vmware.com>2020-03-17 10:01:35 +0100
committersaravanank <saravanank@vmware.com>2020-03-17 10:01:35 +0100
commitaf9106e5440317a9c8a06319de1b3298b17cfc55 (patch)
treee90d573a383fc99aa54b18afcac56868a5687c22 /pimd
parentMerge pull request #6003 from ton31337/fix/skip_kitchen_files (diff)
downloadfrr-af9106e5440317a9c8a06319de1b3298b17cfc55.tar.xz
frr-af9106e5440317a9c8a06319de1b3298b17cfc55.zip
pimd: Join not sent within prune override time when received non local prune.
RCA: Periodic join is mostly sent by nbr jp timer except for few scenarios by upstream join timer Fix: If join timer not running, we have to use nbr jp timer to calculate remaining time for next join. Signed-off-by: Saravanan K <saravanank@vmware.com>
Diffstat (limited to 'pimd')
-rw-r--r--pimd/pim_upstream.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c
index efa58c1b1..fb7840ee7 100644
--- a/pimd/pim_upstream.c
+++ b/pimd/pim_upstream.c
@@ -462,10 +462,26 @@ void pim_upstream_join_timer_decrease_to_t_override(const char *debug_label,
return;
}
- join_timer_remain_msec = pim_time_timer_remain_msec(up->t_join_timer);
t_override_msec =
pim_if_t_override_msec(up->rpf.source_nexthop.interface);
+ if (up->t_join_timer) {
+ join_timer_remain_msec =
+ pim_time_timer_remain_msec(up->t_join_timer);
+ } else {
+ /* upstream join tracked with neighbor jp timer */
+ struct pim_neighbor *nbr;
+
+ 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);
+ else
+ /* Manipulate such that override takes place */
+ join_timer_remain_msec = t_override_msec + 1;
+ }
+
if (PIM_DEBUG_PIM_TRACE) {
char rpf_str[INET_ADDRSTRLEN];
pim_inet4_dump("<rpf?>", up->rpf.rpf_addr.u.prefix4, rpf_str,