summaryrefslogtreecommitdiffstats
path: root/isisd
diff options
context:
space:
mode:
authorPeter Szilagyi <peszilagyi@gmail.com>2009-04-13 13:31:14 +0200
committerDavid Lamparter <equinox@diac24.net>2010-02-03 05:09:28 +0100
commitf3274113224c7e2681ef9ecd6c4a753b8ed01daa (patch)
tree10cc1b09c3392390a15e7e8bbb45f927a4440ec7 /isisd
parent10860f3ba4ab6a39bf41c01e90b06122f347765a (diff)
downloadquagga-f3274113224c7e2681ef9ecd6c4a753b8ed01daa.tar.bz2
quagga-f3274113224c7e2681ef9ecd6c4a753b8ed01daa.tar.xz
isisd: fixes 5/7: send proper LSP after DIS election
After an IS has been elected as the Designated IS for a LAN, it did not refresh the content of the pseudo-node after a new node has been connected to the same LAN. Instead, the periodically reoriginated pseudo-node LSP still contained only those IS neighbors that were already present when the DIS election process was commenced. The fix for the problem schedules an LSP regeneration rather than just reoriginating the same LSP with the old content. Signed-off-by: Fritz Reichmann <fritz@reichmann.nl>
Diffstat (limited to 'isisd')
-rw-r--r--isisd/isis_pdu.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/isisd/isis_pdu.c b/isisd/isis_pdu.c
index 4c602eea..3d2629a8 100644
--- a/isisd/isis_pdu.c
+++ b/isisd/isis_pdu.c
@@ -1187,6 +1187,7 @@ dontcheckadj:
/* 7.3.15.1 e) 1) LSP newer than the one in db or no LSP in db */
if ((!lsp || comp == LSP_NEWER))
{
+ int regenerate = (lsp == NULL);
/* i */
if (lsp)
{
@@ -1232,6 +1233,9 @@ dontcheckadj:
if (circuit->circ_type != CIRCUIT_T_BROADCAST)
ISIS_SET_FLAG (lsp->SSNflags, circuit);
/* FIXME: v) */
+ if (regenerate && circuit->u.bc.is_dr[level - 1]) {
+ lsp_l1_pseudo_generate (circuit);
+ }
}
/* 7.3.15.1 e) 2) LSP equal to the one in db */
else if (comp == LSP_EQUAL)