From 4836b537491a274cbcd9c45376fbfd20eb203b69 Mon Sep 17 00:00:00 2001 From: Michael Zingg Date: Fri, 26 Oct 2012 11:18:19 +0200 Subject: [PATCH] isisd: Fix LSPs not being regenerated after adjacency change In isisd LSP's are not regenerated after a change in adjacency if lsp-gen-interval has expired. I have tested this on Debian 6.0 with zebra and level1 isisd with point to point links. This problem is also listed in Test ISIS-18.3 on the opensourcerouting.org wiki: http://confluence.isc.org/display/osr/ANVL+ISIS+Compliance+Test+Plan http://confluence.isc.org/display/osr/ANVL+ISIS+Results --- isisd/isis_lsp.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c index f2a7923d57..d0642ff5eb 100644 --- a/isisd/isis_lsp.c +++ b/isisd/isis_lsp.c @@ -1783,7 +1783,18 @@ lsp_regenerate_schedule (struct isis_area *area, int level, int all_pseudo) } else { - lsp_regenerate (area, lvl); + /* + * lsps are not regenerated if lsp_regenerate function is called + * directly. However if the lsp_regenerate call is queued for + * later execution it works. + */ + area->lsp_regenerate_pending[lvl - 1] = 1; + if (lvl == IS_LEVEL_1) + THREAD_TIMER_ON (master, area->t_lsp_refresh[lvl - 1], + lsp_l1_refresh, area, 0); + else if (lvl == IS_LEVEL_2) + THREAD_TIMER_ON (master, area->t_lsp_refresh[lvl - 1], + lsp_l2_refresh, area, 0); } } -- 2.39.5