diff options
Diffstat (limited to '')
-rw-r--r-- | ospfd/ospf_main.c | 48 |
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()); |