From 4e99f309329a7971f2568e00f5193a81967323a4 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 30 May 2019 18:51:00 -0400 Subject: [PATCH 1/6] lib: Allow -N to modify the zapi domain socket When using -z, allow that to override the zapi domain socket path. If using -N add the namespace name to the path to $frr_statedir//zserv.api. If you don't specify the -N or -z option then it is $frr_statedir/zserv.api Signed-off-by: Donald Sharp --- configure.ac | 2 +- lib/libfrr.c | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index c228ff0c9..ea38dbb6c 100755 --- a/configure.ac +++ b/configure.ac @@ -2203,7 +2203,7 @@ AC_MSG_RESULT([${frr_statedir}]) AC_SUBST([frr_statedir]) AC_DEFINE_UNQUOTED([LDPD_SOCKET], ["$frr_statedir/ldpd.sock"], [ldpd control socket]) -AC_DEFINE_UNQUOTED([ZEBRA_SERV_PATH], ["$frr_statedir/zserv.api"], [zebra api socket]) +AC_DEFINE_UNQUOTED([ZEBRA_SERV_PATH], ["$frr_statedir%s%s/zserv.api"], [zebra api socket]) AC_DEFINE_UNQUOTED([BFDD_CONTROL_SOCKET], ["$frr_statedir/bfdd.sock"], [bfdd control socket]) AC_DEFINE_UNQUOTED([DAEMON_VTY_DIR], ["$frr_statedir"], [daemon vty directory]) AC_DEFINE_UNQUOTED([DAEMON_DB_DIR], ["$frr_statedir"], [daemon database directory]) diff --git a/lib/libfrr.c b/lib/libfrr.c index c9a1e4632..ae33609d9 100644 --- a/lib/libfrr.c +++ b/lib/libfrr.c @@ -179,7 +179,7 @@ bool frr_zclient_addr(struct sockaddr_storage *sa, socklen_t *sa_len, memset(sa, 0, sizeof(*sa)); if (!path) - path = ZEBRA_SERV_PATH; + path = frr_zclientpath; if (!strncmp(path, ZAPI_TCP_PATHNAME, strlen(ZAPI_TCP_PATHNAME))) { /* note: this functionality is disabled at bottom */ @@ -319,8 +319,6 @@ void frr_preinit(struct frr_daemon_info *daemon, int argc, char **argv) strlcpy(frr_protoname, di->logname, sizeof(frr_protoname)); strlcpy(frr_protonameinst, di->logname, sizeof(frr_protonameinst)); - strlcpy(frr_zclientpath, ZEBRA_SERV_PATH, sizeof(frr_zclientpath)); - di->cli_mode = FRR_CLI_CLASSIC; } @@ -407,6 +405,9 @@ static int frr_opt(int opt) break; } di->pathspace = optarg; + + snprintf(frr_zclientpath, sizeof(frr_zclientpath), + ZEBRA_SERV_PATH, "/", di->pathspace); break; #ifdef HAVE_SQLITE3 case OPTION_DB_FILE: @@ -512,6 +513,9 @@ int frr_getopt(int argc, char *const argv[], int *longindex) int opt; int lidx; + snprintf(frr_zclientpath, sizeof(frr_zclientpath), + ZEBRA_SERV_PATH, "", ""); + comb_next_lo->name = NULL; do { From 89277ebf76312c53c71194d6ea8dd65f6e0fa11a Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 30 May 2019 19:10:35 -0400 Subject: [PATCH 2/6] bfdd: Allow -N to influence BFDD_CONTROL_SOCKET When selecting to run bfdd with -N allow the namespace passed in to be added to the $frr_statedir//bfdd.sock If --bfdctl is passed in that will override the -N option. If neither --bfdctl or -N is passed in then the default of $frr_statedir/bfdd.sock is used. Signed-off-by: Donald Sharp --- bfdd/bfdd.c | 12 ++++++++++-- configure.ac | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/bfdd/bfdd.c b/bfdd/bfdd.c index 218f0883c..69033ba43 100644 --- a/bfdd/bfdd.c +++ b/bfdd/bfdd.c @@ -158,7 +158,8 @@ static void bg_init(void) int main(int argc, char *argv[]) { - const char *ctl_path = BFDD_CONTROL_SOCKET; + char ctl_path[512]; + bool ctlsockused = false; int opt; /* Initialize system sockets. */ @@ -168,6 +169,8 @@ int main(int argc, char *argv[]) frr_opt_add("", longopts, " --bfdctl Specify bfdd control socket\n"); + snprintf(ctl_path, sizeof(ctl_path), BFDD_CONTROL_SOCKET, + "", ""); while (true) { opt = frr_getopt(argc, argv, NULL); if (opt == EOF) @@ -175,7 +178,8 @@ int main(int argc, char *argv[]) switch (opt) { case OPTION_CTLSOCK: - ctl_path = optarg; + strlcpy(ctl_path, optarg, sizeof(ctl_path)); + ctlsockused = true; break; default: @@ -184,6 +188,10 @@ int main(int argc, char *argv[]) } } + if (bfdd_di.pathspace && !ctlsockused) + snprintf(ctl_path, sizeof(ctl_path), BFDD_CONTROL_SOCKET, + "/", bfdd_di.pathspace); + #if 0 /* TODO add support for JSON configuration files. */ parse_config(conf); #endif diff --git a/configure.ac b/configure.ac index ea38dbb6c..5d17071fb 100755 --- a/configure.ac +++ b/configure.ac @@ -2204,7 +2204,7 @@ AC_SUBST([frr_statedir]) AC_DEFINE_UNQUOTED([LDPD_SOCKET], ["$frr_statedir/ldpd.sock"], [ldpd control socket]) AC_DEFINE_UNQUOTED([ZEBRA_SERV_PATH], ["$frr_statedir%s%s/zserv.api"], [zebra api socket]) -AC_DEFINE_UNQUOTED([BFDD_CONTROL_SOCKET], ["$frr_statedir/bfdd.sock"], [bfdd control socket]) +AC_DEFINE_UNQUOTED([BFDD_CONTROL_SOCKET], ["$frr_statedir%s%s/bfdd.sock"], [bfdd control socket]) AC_DEFINE_UNQUOTED([DAEMON_VTY_DIR], ["$frr_statedir"], [daemon vty directory]) AC_DEFINE_UNQUOTED([DAEMON_DB_DIR], ["$frr_statedir"], [daemon database directory]) From 0d675e49461483c6609c88221d036e751cd7e6d8 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 30 May 2019 19:23:15 -0400 Subject: [PATCH 3/6] ldpd: Allow for -N to influence location of LDPD_SOCKET If --ctl_socket is used this will override any other option and will be used If -N is used, then we will setup the LDPD_SOCKET in $frr_statedir//ldpd.sock If neither option is used, then we will use $frr_statedir/ldpd.sock Signed-off-by: Donald Sharp --- configure.ac | 2 +- ldpd/ldpd.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 5d17071fb..631d847b9 100755 --- a/configure.ac +++ b/configure.ac @@ -2202,7 +2202,7 @@ fi AC_MSG_RESULT([${frr_statedir}]) AC_SUBST([frr_statedir]) -AC_DEFINE_UNQUOTED([LDPD_SOCKET], ["$frr_statedir/ldpd.sock"], [ldpd control socket]) +AC_DEFINE_UNQUOTED([LDPD_SOCKET], ["$frr_statedir%s%s/ldpd.sock"], [ldpd control socket]) AC_DEFINE_UNQUOTED([ZEBRA_SERV_PATH], ["$frr_statedir%s%s/zserv.api"], [zebra api socket]) AC_DEFINE_UNQUOTED([BFDD_CONTROL_SOCKET], ["$frr_statedir%s%s/bfdd.sock"], [bfdd control socket]) AC_DEFINE_UNQUOTED([DAEMON_VTY_DIR], ["$frr_statedir"], [daemon vty directory]) diff --git a/ldpd/ldpd.c b/ldpd/ldpd.c index 771d3b745..5aaa2ec32 100644 --- a/ldpd/ldpd.c +++ b/ldpd/ldpd.c @@ -116,7 +116,7 @@ struct zebra_privs_t ldpd_privs = }; /* CTL Socket path */ -char ctl_sock_path[MAXPATHLEN] = LDPD_SOCKET; +char ctl_sock_path[MAXPATHLEN]; /* LDPd options. */ #define OPTION_CTLSOCK 1001 @@ -219,6 +219,10 @@ main(int argc, char *argv[]) int pipe_parent2lde[2], pipe_parent2lde_sync[2]; char *ctl_sock_name; struct thread *thread = NULL; + bool ctl_sock_used = false; + + snprintf(ctl_sock_path, sizeof(ctl_sock_path), LDPD_SOCKET, + "", ""); ldpd_process = PROC_MAIN; log_procname = log_procnames[ldpd_process]; @@ -244,6 +248,7 @@ main(int argc, char *argv[]) case 0: break; case OPTION_CTLSOCK: + ctl_sock_used = true; ctl_sock_name = strrchr(LDPD_SOCKET, '/'); if (ctl_sock_name) /* skip '/' */ @@ -277,6 +282,10 @@ main(int argc, char *argv[]) } } + if (ldpd_di.pathspace && !ctl_sock_used) + snprintf(ctl_sock_path, sizeof(ctl_sock_path), LDPD_SOCKET, + "/", ldpd_di.pathspace); + strlcpy(init.user, ldpd_privs.user, sizeof(init.user)); strlcpy(init.group, ldpd_privs.group, sizeof(init.group)); strlcpy(init.ctl_sock_path, ctl_sock_path, sizeof(init.ctl_sock_path)); From 3c649c719f327725ebd85643ff07f18e95ecb2b5 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 30 May 2019 19:38:00 -0400 Subject: [PATCH 4/6] *: Convert to using frr_vtydir instead of DAEMON_VTY_DIR In a variety of places we are using DAEMON_VTY_DIR, convert to use frr_vtydir. This will allow us in a future commit to have the -N namespace option be automatically used. Signed-off-by: Donald Sharp --- babeld/babel_main.c | 5 ++++- watchfrr/watchfrr.c | 5 ++++- zebra/kernel_netlink.c | 3 +-- zebra/zapi_msg.c | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/babeld/babel_main.c b/babeld/babel_main.c index eaff97a49..6e2d4ecea 100644 --- a/babeld/babel_main.c +++ b/babeld/babel_main.c @@ -68,7 +68,7 @@ const unsigned char ones[16] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; -static const char *state_file = DAEMON_VTY_DIR "/babel-state"; +static char state_file[512]; unsigned char protocol_group[16]; /* babel's link-local multicast address */ int protocol_port; /* babel's port */ @@ -187,6 +187,9 @@ main(int argc, char **argv) } } + snprintf(state_file, sizeof(state_file), "%s/%s", + frr_vtydir, "babel-state"); + /* create the threads handler */ master = frr_init (); diff --git a/watchfrr/watchfrr.c b/watchfrr/watchfrr.c index 34f8dabdf..f0ce88a5b 100644 --- a/watchfrr/watchfrr.c +++ b/watchfrr/watchfrr.c @@ -648,6 +648,7 @@ static void daemon_send_ready(int exitcode) { FILE *fp; static int sent = 0; + char started[512]; if (sent) return; @@ -669,7 +670,9 @@ static void daemon_send_ready(int exitcode) frr_detach(); - fp = fopen(DAEMON_VTY_DIR "/watchfrr.started", "w"); + snprintf(started, sizeof(started), "%s%s", frr_vtydir, + "watchfrr.started"); + fp = fopen(started, "w"); if (fp) fclose(fp); #if defined HAVE_SYSTEMD diff --git a/zebra/kernel_netlink.c b/zebra/kernel_netlink.c index fe37a3335..387a3531b 100644 --- a/zebra/kernel_netlink.c +++ b/zebra/kernel_netlink.c @@ -340,8 +340,7 @@ static void netlink_write_incoming(const char *buf, const unsigned int size, char fname[MAXPATHLEN]; FILE *f; - snprintf(fname, MAXPATHLEN, "%s/%s_%u", DAEMON_VTY_DIR, "netlink", - counter); + snprintf(fname, MAXPATHLEN, "%s/%s_%u", frr_vtydir, "netlink", counter); frr_elevate_privs(&zserv_privs) { f = fopen(fname, "w"); } diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c index 49e43f494..61200806b 100644 --- a/zebra/zapi_msg.c +++ b/zebra/zapi_msg.c @@ -2526,7 +2526,7 @@ static void zserv_write_incoming(struct stream *orig, uint16_t command) copy = stream_dup(orig); stream_set_getp(copy, 0); - snprintf(fname, MAXPATHLEN, "%s/%u", DAEMON_VTY_DIR, command); + snprintf(fname, MAXPATHLEN, "%s/%u", frr_vtydir, command); frr_elevate_privs(&zserv_privs) { fd = open(fname, O_CREAT | O_WRONLY | O_EXCL, 0644); From 43e587c1d10175519f16abe0779cc11f7f789c15 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 30 May 2019 19:55:26 -0400 Subject: [PATCH 5/6] *: Convert over to all -N namespace to change DAEMON_VTY_DIR When the user specifies -N namespace allow it to influence the frr_vtydir(DAEMON_VTY_DIR) to have namespace in it's path like so: $frrstate_dir/ Signed-off-by: Donald Sharp --- babeld/babel_main.c | 2 +- configure.ac | 2 +- lib/libfrr.c | 40 ++++++++++++++++++++++++++++------------ lib/libfrr.h | 6 +++++- vtysh/vtysh_main.c | 2 ++ watchfrr/watchfrr.c | 2 +- 6 files changed, 38 insertions(+), 16 deletions(-) diff --git a/babeld/babel_main.c b/babeld/babel_main.c index 6e2d4ecea..a3f2b4e7d 100644 --- a/babeld/babel_main.c +++ b/babeld/babel_main.c @@ -68,7 +68,7 @@ const unsigned char ones[16] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; -static char state_file[512]; +static char state_file[1024]; unsigned char protocol_group[16]; /* babel's link-local multicast address */ int protocol_port; /* babel's port */ diff --git a/configure.ac b/configure.ac index 631d847b9..e94cb541e 100755 --- a/configure.ac +++ b/configure.ac @@ -2205,7 +2205,7 @@ AC_SUBST([frr_statedir]) AC_DEFINE_UNQUOTED([LDPD_SOCKET], ["$frr_statedir%s%s/ldpd.sock"], [ldpd control socket]) AC_DEFINE_UNQUOTED([ZEBRA_SERV_PATH], ["$frr_statedir%s%s/zserv.api"], [zebra api socket]) AC_DEFINE_UNQUOTED([BFDD_CONTROL_SOCKET], ["$frr_statedir%s%s/bfdd.sock"], [bfdd control socket]) -AC_DEFINE_UNQUOTED([DAEMON_VTY_DIR], ["$frr_statedir"], [daemon vty directory]) +AC_DEFINE_UNQUOTED([DAEMON_VTY_DIR], ["$frr_statedir%s%s"], [daemon vty directory]) AC_DEFINE_UNQUOTED([DAEMON_DB_DIR], ["$frr_statedir"], [daemon database directory]) dnl autoconf does this, but it does it too late... diff --git a/lib/libfrr.c b/lib/libfrr.c index ae33609d9..ed784fc73 100644 --- a/lib/libfrr.c +++ b/lib/libfrr.c @@ -46,7 +46,7 @@ DEFINE_KOOH(frr_early_fini, (), ()) DEFINE_KOOH(frr_fini, (), ()) const char frr_sysconfdir[] = SYSCONFDIR; -const char frr_vtydir[] = DAEMON_VTY_DIR; +char frr_vtydir[256]; #ifdef HAVE_SQLITE3 const char frr_dbdir[] = DAEMON_DB_DIR; #endif @@ -57,7 +57,7 @@ char frr_protonameinst[256] = "NONE"; char config_default[512]; char frr_zclientpath[256]; -static char pidfile_default[512]; +static char pidfile_default[1024]; #ifdef HAVE_SQLITE3 static char dbfile_default[512]; #endif @@ -285,6 +285,11 @@ bool frr_zclient_addr(struct sockaddr_storage *sa, socklen_t *sa_len, static struct frr_daemon_info *di = NULL; +void frr_init_vtydir(void) +{ + snprintf(frr_vtydir, sizeof(frr_vtydir), DAEMON_VTY_DIR, "", ""); +} + void frr_preinit(struct frr_daemon_info *daemon, int argc, char **argv) { di = daemon; @@ -307,10 +312,13 @@ void frr_preinit(struct frr_daemon_info *daemon, int argc, char **argv) if (di->flags & FRR_DETACH_LATER) nodetach_daemon = true; + frr_init_vtydir(); snprintf(config_default, sizeof(config_default), "%s/%s.conf", frr_sysconfdir, di->name); snprintf(pidfile_default, sizeof(pidfile_default), "%s/%s.pid", frr_vtydir, di->name); + snprintf(frr_zclientpath, sizeof(frr_zclientpath), + ZEBRA_SERV_PATH, "", ""); #ifdef HAVE_SQLITE3 snprintf(dbfile_default, sizeof(dbfile_default), "%s/%s.db", frr_dbdir, di->name); @@ -398,6 +406,10 @@ static int frr_opt(int opt) errors++; break; } + if (di->zpathspace) + fprintf(stderr, + "-N option overriden by -z for zebra named socket path\n"); + if (strchr(optarg, '/') || strchr(optarg, '.')) { fprintf(stderr, "slashes or dots are not permitted in the --pathspace option.\n"); @@ -406,8 +418,13 @@ static int frr_opt(int opt) } di->pathspace = optarg; - snprintf(frr_zclientpath, sizeof(frr_zclientpath), - ZEBRA_SERV_PATH, "/", di->pathspace); + if (!di->zpathspace) + snprintf(frr_zclientpath, sizeof(frr_zclientpath), + ZEBRA_SERV_PATH, "/", di->pathspace); + snprintf(frr_vtydir, sizeof(frr_vtydir), DAEMON_VTY_DIR, "/", + di->pathspace); + snprintf(pidfile_default, sizeof(pidfile_default), "%s/%s.pid", + frr_vtydir, di->name); break; #ifdef HAVE_SQLITE3 case OPTION_DB_FILE: @@ -427,6 +444,10 @@ static int frr_opt(int opt) di->terminal = 1; break; case 'z': + di->zpathspace = true; + if (di->pathspace) + fprintf(stderr, + "-z option overrides -N option for zebra named socket path\n"); if (di->flags & FRR_NO_ZCLIENT) return 1; strlcpy(frr_zclientpath, optarg, sizeof(frr_zclientpath)); @@ -513,9 +534,6 @@ int frr_getopt(int argc, char *const argv[], int *longindex) int opt; int lidx; - snprintf(frr_zclientpath, sizeof(frr_zclientpath), - ZEBRA_SERV_PATH, "", ""); - comb_next_lo->name = NULL; do { @@ -599,8 +617,8 @@ struct thread_master *frr_init(void) snprintf(config_default, sizeof(config_default), "%s%s%s%s.conf", frr_sysconfdir, p_pathspace, di->name, p_instance); - snprintf(pidfile_default, sizeof(pidfile_default), "%s/%s%s%s.pid", - frr_vtydir, p_pathspace, di->name, p_instance); + snprintf(pidfile_default, sizeof(pidfile_default), "%s/%s%s.pid", + frr_vtydir, di->name, p_instance); #ifdef HAVE_SQLITE3 snprintf(dbfile_default, sizeof(dbfile_default), "%s/%s%s%s.db", frr_dbdir, p_pathspace, di->name, p_instance); @@ -884,9 +902,7 @@ static void frr_vty_serv(void) const char *dir; char defvtydir[256]; - snprintf(defvtydir, sizeof(defvtydir), "%s%s%s", frr_vtydir, - di->pathspace ? "/" : "", - di->pathspace ? di->pathspace : ""); + snprintf(defvtydir, sizeof(defvtydir), "%s", frr_vtydir); dir = di->vty_sock_path ? di->vty_sock_path : defvtydir; diff --git a/lib/libfrr.h b/lib/libfrr.h index d17495e04..e2b3db74a 100644 --- a/lib/libfrr.h +++ b/lib/libfrr.h @@ -81,7 +81,10 @@ struct frr_daemon_info { #endif const char *vty_path; const char *module_path; + const char *pathspace; + bool zpathspace; + const char *early_logging; const char *early_loglevel; @@ -120,6 +123,7 @@ struct frr_daemon_info { .version = FRR_VERSION, ) \ /* end */ +extern void frr_init_vtydir(void); extern void frr_preinit(struct frr_daemon_info *daemon, int argc, char **argv); extern void frr_opt_add(const char *optstr, const struct option *longopts, const char *helpstr); @@ -150,7 +154,7 @@ extern void frr_fini(void); extern char config_default[512]; extern char frr_zclientpath[256]; extern const char frr_sysconfdir[]; -extern const char frr_vtydir[]; +extern char frr_vtydir[256]; extern const char frr_moduledir[]; extern char frr_protoname[]; diff --git a/vtysh/vtysh_main.c b/vtysh/vtysh_main.c index 2e4510a45..966746018 100644 --- a/vtysh/vtysh_main.c +++ b/vtysh/vtysh_main.c @@ -332,6 +332,8 @@ int main(int argc, char **argv, char **env) progname = ((p = strrchr(argv[0], '/')) ? ++p : argv[0]); strlcpy(sysconfdir, frr_sysconfdir, sizeof(sysconfdir)); + + frr_init_vtydir(); strlcpy(vtydir, frr_vtydir, sizeof(vtydir)); /* Option handling. */ diff --git a/watchfrr/watchfrr.c b/watchfrr/watchfrr.c index f0ce88a5b..1cc7722f4 100644 --- a/watchfrr/watchfrr.c +++ b/watchfrr/watchfrr.c @@ -648,7 +648,7 @@ static void daemon_send_ready(int exitcode) { FILE *fp; static int sent = 0; - char started[512]; + char started[1024]; if (sent) return; From 6ed859503d1688151910fc7e33c944ab6ed3e5bc Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 30 May 2019 20:16:46 -0400 Subject: [PATCH 6/6] doc: Update the documentation to reflect -N changes The -N option is now used to control the location of various control files and sockets. Update the documentation to reflect this. Signed-off-by: Donald Sharp --- doc/user/basic.rst | 6 ++++++ doc/user/bfd.rst | 3 +++ doc/user/ldpd.rst | 6 ++++++ doc/user/zebra.rst | 6 ++++++ 4 files changed, 21 insertions(+) diff --git a/doc/user/basic.rst b/doc/user/basic.rst index bc9a7d643..3d3a75d4b 100644 --- a/doc/user/basic.rst +++ b/doc/user/basic.rst @@ -479,6 +479,12 @@ These options apply to all |PACKAGE_NAME| daemons. Set the user and group to run as. +.. option:: -N + + Set the namespace that the daemon will run in. A "/" will + be added to all files that use the statedir. If you have "/var/run/frr" + as the default statedir then it will become "/var/run/frr/". + .. option:: -v, --version Print program version. diff --git a/doc/user/bfd.rst b/doc/user/bfd.rst index 33bc77049..32ca5707d 100644 --- a/doc/user/bfd.rst +++ b/doc/user/bfd.rst @@ -47,6 +47,9 @@ may also be specified (:ref:`common-invocation-options`). #define BFDD_CONTROL_SOCKET "|INSTALL_PREFIX_STATE|/bfdd.sock" + This option overrides the location addition that the -N option provides + to the bfdd.sock + .. _bfd-commands: diff --git a/doc/user/ldpd.rst b/doc/user/ldpd.rst index 85d280343..977195d6a 100644 --- a/doc/user/ldpd.rst +++ b/doc/user/ldpd.rst @@ -24,6 +24,12 @@ Running Ldpd The *ldpd* daemon can be invoked with any of the common options (:ref:`common-invocation-options`). +..option:: --ctl_socket + + This option allows you to override the path to the ldpd.sock file + used to control this daemon. If specified this option overrides + the -N option path addition. + The *zebra* daemon must be running before *ldpd* is invoked. Configuration of *ldpd* is done in its configuration file diff --git a/doc/user/zebra.rst b/doc/user/zebra.rst index 40d894929..eefc5802a 100644 --- a/doc/user/zebra.rst +++ b/doc/user/zebra.rst @@ -58,6 +58,12 @@ Besides the common invocation options (:ref:`common-invocation-options`), the .. seealso:: :ref:`zebra-vrf` +.. option:: -z , --socket + + If this option is supplied on the cli, the path to the zebra + control socket(zapi), is used. This option overrides a -N + option if handed to it on the cli. + .. option:: --v6-rr-semantics The linux kernel is receiving the ability to use the same route