summaryrefslogtreecommitdiff
path: root/lib/libfrr.c
diff options
context:
space:
mode:
authorRafael Zalamena <rzalamena@users.noreply.github.com>2019-06-05 11:30:19 -0300
committerGitHub <noreply@github.com>2019-06-05 11:30:19 -0300
commit9e8238f5d6afdadd72fb81d3c324c17f53b19e7a (patch)
tree716de8a9378b2d4dccb5962927244f5a45003178 /lib/libfrr.c
parentd4e48b7d01c82f7bb4dab23a6d140cca6eb87a3e (diff)
parent6ed859503d1688151910fc7e33c944ab6ed3e5bc (diff)
Merge pull request #4431 from donaldsharp/mad_gainz
Switch over to `-N FOO` adding FOO to the various directories/files we open up
Diffstat (limited to 'lib/libfrr.c')
-rw-r--r--lib/libfrr.c40
1 files changed, 30 insertions, 10 deletions
diff --git a/lib/libfrr.c b/lib/libfrr.c
index c9a1e46320..ed784fc73a 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
@@ -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 */
@@ -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);
@@ -319,8 +327,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;
}
@@ -400,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");
@@ -407,6 +417,14 @@ static int frr_opt(int opt)
break;
}
di->pathspace = optarg;
+
+ 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:
@@ -426,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));
@@ -595,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);
@@ -880,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;