]> git.puffer.fish Git - mirror/frr.git/commitdiff
isisd: Fix issues with purged fragments 3303/head
authorChristian Franke <chris@opensourcerouting.org>
Fri, 9 Nov 2018 15:38:38 +0000 (16:38 +0100)
committerChristian Franke <chris@opensourcerouting.org>
Sat, 10 Nov 2018 17:04:43 +0000 (18:04 +0100)
Purged fragments would always be reoriginated by isisd. They
should only be purged once and never be reoriginated.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
isisd/isis_lsp.c

index bb090f42edda55fef18c9956f2d8331108d1b2fb..613a41d595b538185677a9ce7c2e2e34680ae431 100644 (file)
@@ -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