isisd: avoid lsp_sched loop when unstable

no point in scheduling an LSP refresh immediately if we know it is
going to be postponed again due to the network still being in its
instability grace period

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
This commit is contained in:
Emanuele Di Pascale 2021-03-17 13:24:19 +01:00
parent 44544f191c
commit d2232b3e21

View File

@ -1561,18 +1561,28 @@ int _lsp_regenerate_schedule(struct isis_area *area, int level,
/*
* Schedule LSP refresh ASAP
*/
timeout = 0;
if (area->bfd_signalled_down) {
sched_debug(
"ISIS (%s): Scheduling immediately due to BDF 'down' message.",
area->area_tag);
area->bfd_signalled_down = false;
area->bfd_force_spf_refresh = true;
timeout = 0;
} else {
sched_debug(
"ISIS (%s): Last generation was more than lsp_gen_interval ago. Scheduling for execution now.",
area->area_tag);
int64_t time_since_last = monotime_since(
&area->last_lsp_refresh_event[lvl - 1],
NULL);
timeout = time_since_last < 100000L
? (100000L - time_since_last)/1000
: 0;
if (timeout > 0)
sched_debug(
"ISIS (%s): Last generation was more than lsp_gen_interval ago. Scheduling for execution in %ld ms due to the instability timer.",
area->area_tag, timeout);
else
sched_debug(
"ISIS (%s): Last generation was more than lsp_gen_interval ago. Scheduling for execution now.",
area->area_tag);
}
}