diff options
| author | Emanuele Di Pascale <emanuele@voltanet.io> | 2021-03-17 13:24:19 +0100 |
|---|---|---|
| committer | Emanuele Di Pascale <emanuele@voltanet.io> | 2021-03-19 10:37:58 +0100 |
| commit | d2232b3e210fbc5faad95d09ddaf11cb5e88bc94 (patch) | |
| tree | b2f6969255050b5e827fba39269bd10500f2dd53 | |
| parent | 44544f191cffd8817f3bc945daec499191cffa01 (diff) | |
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>
| -rw-r--r-- | isisd/isis_lsp.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c index 06a5a69e3f..d610495de6 100644 --- a/isisd/isis_lsp.c +++ b/isisd/isis_lsp.c @@ -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); } } |
