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 <dslice@nvidia.com>
This commit is contained in:
Don Slice 2021-04-23 06:44:02 -07:00
parent bb4b6eb547
commit 3f1f8641fa
3 changed files with 25 additions and 2 deletions

View File

@ -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;
}

View File

@ -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)
{

View File

@ -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);