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
diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c
index 0b1dac1..0470c5b 100644
--- a/isisd/isis_lsp.c
+++ b/isisd/isis_lsp.c
@@ -1789,7 +1789,18 @@
}
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);
}
}