]> git.proxmox.com Git - mirror_frr.git/commit - configure.ac
ospf6d: introduce support for Graceful Restart (restarting mode)
authorRenato Westphal <renato@opensourcerouting.org>
Fri, 2 Jul 2021 16:01:32 +0000 (13:01 -0300)
committerRenato Westphal <renato@opensourcerouting.org>
Thu, 16 Sep 2021 15:26:48 +0000 (12:26 -0300)
commit711650980337fad6f70fd1e3bc17bf21428b7a62
tree0440d27c923db83330c8135337b130104c44bc6a
parent1a898463a3a496ae1fa70562ea7addec9a435e49
ospf6d: introduce support for Graceful Restart (restarting mode)

RFC 5187 specifies the Graceful Restart enhancement to the OSPFv3
routing protocol. This commit implements support for the GR
restarting mode.

Here's a quick summary of how the GR restarting mode works:
* GR can be enabled on a per-instance basis using the `graceful-restart
  [grace-period (1-1800)]` command;
* To perform a graceful shutdown, the `graceful-restart prepare ipv6
  ospf` EXEC-level command needs to be issued before restarting the
  ospf6d daemon (there's no specific requirement on how the daemon
  should be restarted);
* `graceful-restart prepare ospf` will initiate the graceful restart
  for all GR-enabled instances by taking the following actions:
  o Flooding Grace-LSAs over all interfaces
  o Freezing the OSPF routes in the RIB
  o Saving the end of the grace period in non-volatile memory (a JSON
    file stored in `$frr_statedir`)
* Once ospf6d is started again, it will follow the procedures
  described in RFC 3623 until it detects it's time to exit the graceful
  restart (either successfully or unsuccessfully).

Testing done:
* New topotest featuring a multi-area OSPF topology (including stub
  and NSSA areas);
* Successful interop tests against IOS-XR routers acting as helpers.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
21 files changed:
configure.ac
doc/user/ospf6d.rst
ospf6d/ospf6_asbr.c
ospf6d/ospf6_flood.c
ospf6d/ospf6_flood.h
ospf6d/ospf6_gr.c [new file with mode: 0644]
ospf6d/ospf6_gr.h
ospf6d/ospf6_gr_helper.c
ospf6d/ospf6_intra.c
ospf6d/ospf6_intra.h
ospf6d/ospf6_message.c
ospf6d/ospf6_neighbor.c
ospf6d/ospf6_neighbor.h
ospf6d/ospf6_spf.c
ospf6d/ospf6_spf.h
ospf6d/ospf6_top.c
ospf6d/ospf6_top.h
ospf6d/ospf6_zebra.c
ospf6d/ospf6_zebra.h
ospf6d/ospf6d.c
ospf6d/subdir.am