From d2232b3e210fbc5faad95d09ddaf11cb5e88bc94 Mon Sep 17 00:00:00 2001 From: Emanuele Di Pascale Date: Wed, 17 Mar 2021 13:24:19 +0100 Subject: [PATCH] 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 --- isisd/isis_lsp.c | 20 +++++++++++++++----- 1 file 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); } } -- 2.39.5