summaryrefslogtreecommitdiffstats
path: root/ospfd/ospf_main.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ospfd/ospf_main.c48
1 files changed, 43 insertions, 5 deletions
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index dd00024..6a4a9a1 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -45,6 +45,16 @@
#include "ospfd/ospf_ldp_sync.h"
#include "ospfd/ospf_routemap_nb.h"
+#define OSPFD_STATE_NAME "%s/ospfd.json", frr_libstatedir
+#define OSPFD_INST_STATE_NAME(i) "%s/ospfd-%d.json", frr_runstatedir, i
+
+/* this one includes the path... because the instance number was in the path
+ * before :( ... which totally didn't have a mkdir anywhere.
+ */
+#define OSPFD_COMPAT_STATE_NAME "%s/ospfd-gr.json", frr_libstatedir
+#define OSPFD_COMPAT_INST_STATE_NAME(i) \
+ "%s-%d/ospfd-gr.json", frr_runstatedir, i
+
/* ospfd privileges */
zebra_capabilities_t _caps_p[] = {ZCAP_NET_RAW, ZCAP_BIND, ZCAP_NET_ADMIN,
ZCAP_SYS_ADMIN};
@@ -89,6 +99,7 @@ static void sigint(void)
zlog_notice("Terminating on signal");
bfd_protocol_integration_set_shutdown(true);
ospf_terminate();
+
exit(0);
}
@@ -125,15 +136,31 @@ static const struct frr_yang_module_info *const ospfd_yang_modules[] = {
&frr_ospf_route_map_info,
};
-FRR_DAEMON_INFO(ospfd, OSPF, .vty_port = OSPF_VTY_PORT,
+/* actual paths filled in main() */
+static char state_path[512];
+static char state_compat_path[512];
+static char *state_paths[] = {
+ state_path,
+ state_compat_path,
+ NULL,
+};
- .proghelp = "Implementation of the OSPFv2 routing protocol.",
+/* clang-format off */
+FRR_DAEMON_INFO(ospfd, OSPF,
+ .vty_port = OSPF_VTY_PORT,
+ .proghelp = "Implementation of the OSPFv2 routing protocol.",
- .signals = ospf_signals, .n_signals = array_size(ospf_signals),
+ .signals = ospf_signals,
+ .n_signals = array_size(ospf_signals),
- .privs = &ospfd_privs, .yang_modules = ospfd_yang_modules,
- .n_yang_modules = array_size(ospfd_yang_modules),
+ .privs = &ospfd_privs,
+
+ .yang_modules = ospfd_yang_modules,
+ .n_yang_modules = array_size(ospfd_yang_modules),
+
+ .state_paths = state_paths,
);
+/* clang-format on */
/** Max wait time for config to load before accepting hellos */
#define OSPF_PRE_CONFIG_MAX_WAIT_SECONDS 600
@@ -207,6 +234,17 @@ int main(int argc, char **argv)
exit(1);
}
+ if (ospf_instance) {
+ snprintf(state_path, sizeof(state_path),
+ OSPFD_INST_STATE_NAME(ospf_instance));
+ snprintf(state_compat_path, sizeof(state_compat_path),
+ OSPFD_COMPAT_INST_STATE_NAME(ospf_instance));
+ } else {
+ snprintf(state_path, sizeof(state_path), OSPFD_STATE_NAME);
+ snprintf(state_compat_path, sizeof(state_compat_path),
+ OSPFD_COMPAT_STATE_NAME);
+ }
+
/* OSPF master init. */
ospf_master_init(frr_init());