From 8f27aa27298c26fc3f278bae896cf49afda3c58f Mon Sep 17 00:00:00 2001 From: Christian Franke Date: Fri, 9 Nov 2018 16:38:38 +0100 Subject: [PATCH] isisd: Fix issues with purged fragments Purged fragments would always be reoriginated by isisd. They should only be purged once and never be reoriginated. Signed-off-by: Christian Franke --- 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 bb090f42ed..613a41d595 100644 --- a/isisd/isis_lsp.c +++ b/isisd/isis_lsp.c @@ -406,8 +406,12 @@ static void lsp_seqno_update(struct isis_lsp *lsp0) for (ALL_LIST_ELEMENTS_RO(lsp0->lspu.frags, node, lsp)) { if (lsp->tlvs) lsp_inc_seqno(lsp, 0); - else + else if (lsp->hdr.rem_lifetime) { + /* Purge should only be applied when the fragment has + * non-zero remaining lifetime. + */ lsp_purge(lsp, lsp0->level, NULL); + } } return; @@ -1306,6 +1310,13 @@ static int lsp_regenerate(struct isis_area *area, int level) lsp->last_generated = time(NULL); lsp_flood(lsp, NULL); for (ALL_LIST_ELEMENTS_RO(lsp->lspu.frags, node, frag)) { + if (!frag->tlvs) { + /* Updating and flooding should only affect fragments + * carrying data + */ + continue; + } + frag->hdr.lsp_bits = lsp_bits_generate( level, area->overload_bit, area->attached_bit); /* Set the lifetime values of all the fragments to the same -- 2.39.5