summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pimd/pim_nb_config.c4
-rw-r--r--pimd/pim_upstream.c22
-rw-r--r--pimd/pim_upstream.h1
3 files changed, 25 insertions, 2 deletions
diff --git a/pimd/pim_nb_config.c b/pimd/pim_nb_config.c
index da2daea7c3..4598297f93 100644
--- a/pimd/pim_nb_config.c
+++ b/pimd/pim_nb_config.c
@@ -763,8 +763,8 @@ int pim_register_suppress_time_modify(struct nb_cb_modify_args *args)
case NB_EV_ABORT:
break;
case NB_EV_APPLY:
- router->register_suppress_time =
- yang_dnode_get_uint16(args->dnode, NULL);
+ pim_update_suppress_timers(
+ yang_dnode_get_uint16(args->dnode, NULL));
break;
}
diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c
index 9899172e6c..918a9a9c7d 100644
--- a/pimd/pim_upstream.c
+++ b/pimd/pim_upstream.c
@@ -407,6 +407,28 @@ static void pim_upstream_join_timer_restart_msec(struct pim_upstream *up,
&up->t_join_timer);
}
+void pim_update_suppress_timers(uint32_t suppress_time)
+{
+ struct pim_instance *pim;
+ struct vrf *vrf;
+ unsigned int old_rp_ka_time;
+
+ /* stash the old one so we know which values were manually configured */
+ old_rp_ka_time = (3 * router->register_suppress_time
+ + router->register_probe_time);
+ router->register_suppress_time = suppress_time;
+
+ RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
+ pim = vrf->info;
+ if (!pim)
+ continue;
+
+ /* Only adjust if not manually configured */
+ if (pim->rp_keep_alive_time == old_rp_ka_time)
+ pim->rp_keep_alive_time = PIM_RP_KEEPALIVE_PERIOD;
+ }
+}
+
void pim_upstream_join_suppress(struct pim_upstream *up,
struct in_addr rpf_addr, int holdtime)
{
diff --git a/pimd/pim_upstream.h b/pimd/pim_upstream.h
index adea3cd9ef..56039d5605 100644
--- a/pimd/pim_upstream.h
+++ b/pimd/pim_upstream.h
@@ -317,6 +317,7 @@ int pim_upstream_eval_inherit_if(struct pim_upstream *up,
void pim_upstream_update_join_desired(struct pim_instance *pim,
struct pim_upstream *up);
+void pim_update_suppress_timers(uint32_t suppress_time);
void pim_upstream_join_suppress(struct pim_upstream *up,
struct in_addr rpf_addr, int holdtime);