diff options
Diffstat (limited to 'isisd/isis_main.c')
| -rw-r--r-- | isisd/isis_main.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/isisd/isis_main.c b/isisd/isis_main.c index 4c841dffe2..78654b2f1c 100644 --- a/isisd/isis_main.c +++ b/isisd/isis_main.c @@ -83,7 +83,9 @@ struct zebra_privs_t isisd_privs = { .cap_num_i = 0}; /* isisd options */ -struct option longopts[] = {{0}}; +static const struct option longopts[] = { + {"int_num", required_argument, NULL, 'I'}, + {0}}; /* Master of threads. */ struct thread_master *master; @@ -99,6 +101,7 @@ void sigusr1(void); static __attribute__((__noreturn__)) void terminate(int i) { + isis_sr_term(); isis_zebra_stop(); exit(i); } @@ -196,13 +199,16 @@ FRR_DAEMON_INFO(isisd, ISIS, .vty_port = ISISD_VTY_PORT, int main(int argc, char **argv, char **envp) { int opt; + int instance = 1; #ifdef FABRICD frr_preinit(&fabricd_di, argc, argv); #else frr_preinit(&isisd_di, argc, argv); #endif - frr_opt_add("", longopts, ""); + frr_opt_add( + "I:", longopts, + " -I, --int_num Set instance number (label-manager)\n"); /* Command line argument treatment. */ while (1) { @@ -214,6 +220,12 @@ int main(int argc, char **argv, char **envp) switch (opt) { case 0: break; + case 'I': + instance = atoi(optarg); + if (instance < 1 || instance > (unsigned short)-1) + zlog_err("Instance %i out of range (1..%u)", + instance, (unsigned short)-1); + break; default: frr_help_exit(1); break; @@ -242,13 +254,14 @@ int main(int argc, char **argv, char **envp) isis_redist_init(); isis_route_map_init(); isis_mpls_te_init(); + isis_sr_init(); lsp_init(); mt_init(); /* create the global 'isis' instance */ isis_new(1, VRF_DEFAULT); - isis_zebra_init(master); + isis_zebra_init(master, instance); isis_bfd_init(); fabricd_init(); |
