]> git.proxmox.com Git - mirror_frr.git/blobdiff - ospf6d/ospf6_intra.c
ospf6d: introduce support for Graceful Restart (restarting mode)
[mirror_frr.git] / ospf6d / ospf6_intra.c
index 06a950156bf4a60d3fd618169b4d09cdd362290d..bea8cf0edd3ccd330f038621ef233d89e2a1f939 100644 (file)
@@ -47,6 +47,7 @@
 #include "ospf6_flood.h"
 #include "ospf6d.h"
 #include "ospf6_spf.h"
+#include "ospf6_gr.h"
 
 unsigned char conf_debug_ospf6_brouter = 0;
 uint32_t conf_debug_ospf6_brouter_specific_router_id;
@@ -249,6 +250,13 @@ int ospf6_router_lsa_originate(struct thread *thread)
        oa = (struct ospf6_area *)THREAD_ARG(thread);
        oa->thread_router_lsa = NULL;
 
+       if (oa->ospf6->gr_info.restart_in_progress) {
+               if (IS_DEBUG_OSPF6_GR)
+                       zlog_debug(
+                               "Graceful Restart in progress, don't originate LSA");
+               return 0;
+       }
+
        if (IS_OSPF6_DEBUG_ORIGINATE(ROUTER))
                zlog_debug("Originate Router-LSA for Area %s", oa->name);
 
@@ -532,6 +540,13 @@ int ospf6_network_lsa_originate(struct thread *thread)
           by ospf6_lsa_refresh (), and does not come here. */
        assert(oi->area);
 
+       if (oi->area->ospf6->gr_info.restart_in_progress) {
+               if (IS_DEBUG_OSPF6_GR)
+                       zlog_debug(
+                               "Graceful Restart in progress, don't originate LSA");
+               return 0;
+       }
+
        old = ospf6_lsdb_lookup(htons(OSPF6_LSTYPE_NETWORK),
                                htonl(oi->interface->ifindex),
                                oi->area->ospf6->router_id, oi->area->lsdb);
@@ -773,6 +788,14 @@ int ospf6_link_lsa_originate(struct thread *thread)
 
        assert(oi->area);
 
+       if (oi->area->ospf6->gr_info.restart_in_progress) {
+               if (IS_DEBUG_OSPF6_GR)
+                       zlog_debug(
+                               "Graceful Restart in progress, don't originate LSA");
+               return 0;
+       }
+
+
        /* find previous LSA */
        old = ospf6_lsdb_lookup(htons(OSPF6_LSTYPE_LINK),
                                htonl(oi->interface->ifindex),
@@ -1009,6 +1032,13 @@ int ospf6_intra_prefix_lsa_originate_stub(struct thread *thread)
        oa = (struct ospf6_area *)THREAD_ARG(thread);
        oa->thread_intra_prefix_lsa = NULL;
 
+       if (oa->ospf6->gr_info.restart_in_progress) {
+               if (IS_DEBUG_OSPF6_GR)
+                       zlog_debug(
+                               "Graceful Restart in progress, don't originate LSA");
+               return 0;
+       }
+
        /* find previous LSA */
        old = ospf6_lsdb_lookup(htons(OSPF6_LSTYPE_INTRA_PREFIX), htonl(0),
                                oa->ospf6->router_id, oa->lsdb);
@@ -1243,6 +1273,13 @@ int ospf6_intra_prefix_lsa_originate_transit(struct thread *thread)
 
        assert(oi->area);
 
+       if (oi->area->ospf6->gr_info.restart_in_progress) {
+               if (IS_DEBUG_OSPF6_GR)
+                       zlog_debug(
+                               "Graceful Restart in progress, don't originate LSA");
+               return 0;
+       }
+
        /* find previous LSA */
        old = ospf6_lsdb_lookup(htons(OSPF6_LSTYPE_INTRA_PREFIX),
                                htonl(oi->interface->ifindex),