]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospf6d: fix refreshing of NSSA/AS-external LSAs after a graceful restart
authorRenato Westphal <renato@opensourcerouting.org>
Wed, 1 Mar 2023 20:31:56 +0000 (17:31 -0300)
committerRenato Westphal <renato@opensourcerouting.org>
Thu, 2 Mar 2023 22:38:03 +0000 (19:38 -0300)
This commit fixes a bug where self-originated NSSA/AS-External LSAs
would age out about one hour after exiting from the GR mode. The
reason is because received self-originated LSAs aren't registered
for periodic refreshing, so that needs to be done manually. Fix
this by explicitly reoriginating all NSSA/AS-External LSAs while
exiting from the GR mode.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
ospf6d/ospf6_gr.c

index 768b5e033345c4b1a932703782525d6a8ba1e88e..2e8bb025fb54a3e2e95f711cd939e46d396009ae 100644 (file)
@@ -127,6 +127,7 @@ static void ospf6_gr_restart_exit(struct ospf6 *ospf6, const char *reason)
 {
        struct ospf6_area *area;
        struct listnode *onode, *anode;
+       struct ospf6_route *route;
 
        if (IS_DEBUG_OSPF6_GR)
                zlog_debug("GR: exiting graceful restart: %s", reason);
@@ -162,6 +163,16 @@ static void ospf6_gr_restart_exit(struct ospf6 *ospf6, const char *reason)
                }
        }
 
+       /*
+        * While all self-originated NSSA and AS-external LSAs were already
+        * learned from the helping neighbors, we need to reoriginate them in
+        * order to ensure they will be refreshed periodically.
+        */
+       for (route = ospf6_route_head(ospf6->external_table); route;
+            route = ospf6_route_next(route))
+               ospf6_handle_external_lsa_origination(ospf6, route,
+                                                     &route->prefix);
+
        /*
         * 3) The router reruns its OSPF routing calculations, this time
         *    installing the results into the system forwarding table, and