mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-04 16:57:43 +00:00

RFC 3623 specifies the Graceful Restart enhancement to the OSPF routing protocol. This PR implements support for the restarting mode, whereas the helper mode was implemented by #6811. This work is based on #6782, which implemented the pre-restart part and settled the foundations for the post-restart part (behavioral changes, GR exit conditions, and on-exit actions). 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 ospf` EXEC-level command needs to be issued before restarting the ospfd 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 ospfd 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. Co-authored-by: GalaxyGorilla <sascha@netdef.org> Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
132 lines
2.7 KiB
Plaintext
132 lines
2.7 KiB
Plaintext
#
|
|
# ospfd
|
|
#
|
|
|
|
if OSPFD
|
|
noinst_LIBRARIES += ospfd/libfrrospf.a
|
|
sbin_PROGRAMS += ospfd/ospfd
|
|
vtysh_scan += \
|
|
ospfd/ospf_bfd.c \
|
|
ospfd/ospf_dump.c \
|
|
ospfd/ospf_gr.c \
|
|
ospfd/ospf_ldp_sync.c \
|
|
ospfd/ospf_opaque.c \
|
|
ospfd/ospf_ri.c \
|
|
ospfd/ospf_routemap.c \
|
|
ospfd/ospf_te.c \
|
|
ospfd/ospf_sr.c \
|
|
ospfd/ospf_vty.c \
|
|
# end
|
|
vtysh_daemons += ospfd
|
|
if SNMP
|
|
module_LTLIBRARIES += ospfd/ospfd_snmp.la
|
|
endif
|
|
man8 += $(MANBUILD)/frr-ospfd.8
|
|
endif
|
|
|
|
ospfd_libfrrospf_a_SOURCES = \
|
|
ospfd/ospf_abr.c \
|
|
ospfd/ospf_api.c \
|
|
ospfd/ospf_apiserver.c \
|
|
ospfd/ospf_asbr.c \
|
|
ospfd/ospf_ase.c \
|
|
ospfd/ospf_bfd.c \
|
|
ospfd/ospf_dump.c \
|
|
ospfd/ospf_dump_api.c \
|
|
ospfd/ospf_errors.c \
|
|
ospfd/ospf_ext.c \
|
|
ospfd/ospf_flood.c \
|
|
ospfd/ospf_gr.c \
|
|
ospfd/ospf_ia.c \
|
|
ospfd/ospf_interface.c \
|
|
ospfd/ospf_ism.c \
|
|
ospfd/ospf_ldp_sync.c \
|
|
ospfd/ospf_lsa.c \
|
|
ospfd/ospf_lsdb.c \
|
|
ospfd/ospf_memory.c \
|
|
ospfd/ospf_neighbor.c \
|
|
ospfd/ospf_network.c \
|
|
ospfd/ospf_nsm.c \
|
|
ospfd/ospf_opaque.c \
|
|
ospfd/ospf_packet.c \
|
|
ospfd/ospf_ri.c \
|
|
ospfd/ospf_route.c \
|
|
ospfd/ospf_routemap.c \
|
|
ospfd/ospf_routemap_nb.c \
|
|
ospfd/ospf_routemap_nb_config.c \
|
|
ospfd/ospf_spf.c \
|
|
ospfd/ospf_ti_lfa.c \
|
|
ospfd/ospf_sr.c \
|
|
ospfd/ospf_te.c \
|
|
ospfd/ospf_vty.c \
|
|
ospfd/ospf_zebra.c \
|
|
ospfd/ospfd.c \
|
|
ospfd/ospf_gr_helper.c \
|
|
# end
|
|
|
|
if OSPFD
|
|
ospfdheaderdir = $(pkgincludedir)/ospfd
|
|
ospfdheader_HEADERS = \
|
|
ospfd/ospf_api.h \
|
|
ospfd/ospf_asbr.h \
|
|
ospfd/ospf_dump.h \
|
|
ospfd/ospf_dump_api.h \
|
|
ospfd/ospf_ism.h \
|
|
ospfd/ospf_lsa.h \
|
|
ospfd/ospf_lsdb.h \
|
|
ospfd/ospf_nsm.h \
|
|
ospfd/ospf_opaque.h \
|
|
ospfd/ospfd.h \
|
|
# end
|
|
endif
|
|
|
|
clippy_scan += \
|
|
ospfd/ospf_vty.c \
|
|
ospfd/ospf_ldp_sync.c \
|
|
ospfd/ospf_dump.c \
|
|
ospfd/ospf_gr.c \
|
|
# end
|
|
|
|
noinst_HEADERS += \
|
|
ospfd/ospf_abr.h \
|
|
ospfd/ospf_apiserver.h \
|
|
ospfd/ospf_ase.h \
|
|
ospfd/ospf_bfd.h \
|
|
ospfd/ospf_errors.h \
|
|
ospfd/ospf_ext.h \
|
|
ospfd/ospf_flood.h \
|
|
ospfd/ospf_ia.h \
|
|
ospfd/ospf_interface.h \
|
|
ospfd/ospf_ldp_sync.h \
|
|
ospfd/ospf_memory.h \
|
|
ospfd/ospf_neighbor.h \
|
|
ospfd/ospf_network.h \
|
|
ospfd/ospf_packet.h \
|
|
ospfd/ospf_ri.h \
|
|
ospfd/ospf_gr.h \
|
|
ospfd/ospf_route.h \
|
|
ospfd/ospf_routemap_nb.h \
|
|
ospfd/ospf_spf.h \
|
|
ospfd/ospf_ti_lfa.h \
|
|
ospfd/ospf_sr.h \
|
|
ospfd/ospf_te.h \
|
|
ospfd/ospf_vty.h \
|
|
ospfd/ospf_zebra.h \
|
|
# end
|
|
|
|
ospfd_ospfd_LDADD = ospfd/libfrrospf.a lib/libfrr.la $(LIBCAP) $(LIBM)
|
|
ospfd_ospfd_SOURCES = ospfd/ospf_main.c
|
|
|
|
ospfd_ospfd_snmp_la_SOURCES = ospfd/ospf_snmp.c
|
|
ospfd_ospfd_snmp_la_CFLAGS = $(AM_CFLAGS) $(SNMP_CFLAGS) -std=gnu11
|
|
ospfd_ospfd_snmp_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
|
|
ospfd_ospfd_snmp_la_LIBADD = lib/libfrrsnmp.la
|
|
|
|
EXTRA_DIST += \
|
|
ospfd/ChangeLog.opaque.txt \
|
|
# end
|
|
|
|
nodist_ospfd_ospfd_SOURCES = \
|
|
yang/frr-ospf-route-map.yang.c \
|
|
# end
|