From 3f1f8641fa83b828d1512f516f0670d43b27c227 Mon Sep 17 00:00:00 2001 From: Don Slice Date: Fri, 23 Apr 2021 06:44:02 -0700 Subject: [PATCH] pimd: adjust rp_keep_alive_time when register_suppress_time is changed The router->register_suppress_time is used to derive the rp_keep_alive_time, but when the suppress time was changed, pim was not recalculating the rp_keep_alive_time and left it at the old value. This fix applies the changes when a new suppress_time is entered (or removed.) Signed-off-by: Don Slice --- pimd/pim_nb_config.c | 4 ++-- pimd/pim_upstream.c | 22 ++++++++++++++++++++++ pimd/pim_upstream.h | 1 + 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);