ldpd: Allow for -N <namespace> to influence location of LDPD_SOCKET

If --ctl_socket is used this will override any other option and will
be used

If -N <namespace> is used, then we will setup the LDPD_SOCKET
in $frr_statedir/<namespace>/ldpd.sock

If neither option is used, then we will use $frr_statedir/ldpd.sock

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2019-05-30 19:23:15 -04:00
parent 89277ebf76
commit 0d675e4946
2 changed files with 11 additions and 2 deletions

View File

@ -2202,7 +2202,7 @@ fi
AC_MSG_RESULT([${frr_statedir}]) AC_MSG_RESULT([${frr_statedir}])
AC_SUBST([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([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([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"], [daemon vty directory])

View File

@ -116,7 +116,7 @@ struct zebra_privs_t ldpd_privs =
}; };
/* CTL Socket path */ /* CTL Socket path */
char ctl_sock_path[MAXPATHLEN] = LDPD_SOCKET; char ctl_sock_path[MAXPATHLEN];
/* LDPd options. */ /* LDPd options. */
#define OPTION_CTLSOCK 1001 #define OPTION_CTLSOCK 1001
@ -219,6 +219,10 @@ main(int argc, char *argv[])
int pipe_parent2lde[2], pipe_parent2lde_sync[2]; int pipe_parent2lde[2], pipe_parent2lde_sync[2];
char *ctl_sock_name; char *ctl_sock_name;
struct thread *thread = NULL; struct thread *thread = NULL;
bool ctl_sock_used = false;
snprintf(ctl_sock_path, sizeof(ctl_sock_path), LDPD_SOCKET,
"", "");
ldpd_process = PROC_MAIN; ldpd_process = PROC_MAIN;
log_procname = log_procnames[ldpd_process]; log_procname = log_procnames[ldpd_process];
@ -244,6 +248,7 @@ main(int argc, char *argv[])
case 0: case 0:
break; break;
case OPTION_CTLSOCK: case OPTION_CTLSOCK:
ctl_sock_used = true;
ctl_sock_name = strrchr(LDPD_SOCKET, '/'); ctl_sock_name = strrchr(LDPD_SOCKET, '/');
if (ctl_sock_name) if (ctl_sock_name)
/* skip '/' */ /* 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.user, ldpd_privs.user, sizeof(init.user));
strlcpy(init.group, ldpd_privs.group, sizeof(init.group)); strlcpy(init.group, ldpd_privs.group, sizeof(init.group));
strlcpy(init.ctl_sock_path, ctl_sock_path, sizeof(init.ctl_sock_path)); strlcpy(init.ctl_sock_path, ctl_sock_path, sizeof(init.ctl_sock_path));