pimd: -z command-line switch to specify zebra socket path.
diff --git a/doc/pimd.8 b/doc/pimd.8
index 3995cfe..0dd170a 100644
--- a/doc/pimd.8
+++ b/doc/pimd.8
@@ -12,6 +12,9 @@
.B \-i
.I pid-file
] [
+.B \-z
+.I path
+] [
.B \-P
.I port-number
] [
@@ -52,6 +55,10 @@
\fB\fIpid-file\fR. The init system uses the recorded PID to stop or
restart pimd. The likely default is \fB\fI/var/run/pimd.pid\fR.
.TP
+\fB\-z\fR, \fB\-\-socket \fR\fIpath\fR
+Specify the socket path for contacting the zebra daemon.
+The likely default is \fB\fI/var/run/zserv.api\fR.
+.TP
\fB\-P\fR, \fB\-\-vty_port \fR\fIport-number\fR
Specify the port that the pimd VTY will listen on. This defaults to
2611, as specified in \fB\fI/etc/services\fR.
@@ -80,6 +87,16 @@
.B pimd
config file.
.TP
+.BI /var/run/pimd.pid
+The default location of the
+.B pimd
+pid file.
+.TP
+.BI /var/run/zserv.api
+The default location of the
+.B zebra
+unix socket file.
+.TP
.BI $(PWD)/pimd.log
If the
.B pimd
diff --git a/lib/zclient.c b/lib/zclient.c
index c3a4905..9361436 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -229,7 +229,7 @@
#ifdef HAVE_TCP_ZEBRA
zclient->sock = zclient_socket ();
#else
- zclient->sock = zclient_socket_un (zclient_serv_path ? zclient_serv_path : ZEBRA_SERV_PATH);
+ zclient->sock = zclient_socket_un (zclient_serv_path_get());
#endif
return zclient->sock;
}
@@ -1053,6 +1053,11 @@
}
}
+const char *const zclient_serv_path_get()
+{
+ return zclient_serv_path ? zclient_serv_path : ZEBRA_SERV_PATH;
+}
+
void
zclient_serv_path_set (char *path)
{
diff --git a/lib/zclient.h b/lib/zclient.h
index 6a5e626..c7d4d22 100644
--- a/lib/zclient.h
+++ b/lib/zclient.h
@@ -136,6 +136,7 @@
extern int zclient_socket_un (const char *path);
extern int zclient_socket_connect (struct zclient *);
extern void zclient_serv_path_set (char *path);
+extern const char *const zclient_serv_path_get (void);
/* Send redistribute command to zebra daemon. Do not update zclient state. */
extern int zebra_redistribute_send (int command, struct zclient *, int type);
diff --git a/pimd/pim_main.c b/pimd/pim_main.c
index 64d7787..b314df2 100644
--- a/pimd/pim_main.c
+++ b/pimd/pim_main.c
@@ -98,6 +98,7 @@
-d, --daemon Run in daemon mode\n\
-f, --config_file Set configuration file name\n\
-i, --pid_file Set process identifier file name\n\
+-z, --socket Set path of zebra socket\n\
-A, --vty_addr Set vty's bind address\n\
-P, --vty_port Set vty's port number\n\
-v, --version Print program version\n\
@@ -125,6 +126,7 @@
int vty_port = -1;
int daemon_mode = 0;
char *config_file = NULL;
+ char *zebra_sock_path = NULL;
struct thread thread;
umask(0027);
@@ -138,7 +140,7 @@
while (1) {
int opt;
- opt = getopt_long (argc, argv, "df:i:A:P:vZh", longopts, 0);
+ opt = getopt_long (argc, argv, "df:i:z:A:P:vZh", longopts, 0);
if (opt == EOF)
break;
@@ -155,6 +157,9 @@
case 'i':
pid_file = optarg;
break;
+ case 'z':
+ zebra_sock_path = optarg;
+ break;
case 'A':
vty_addr = optarg;
break;
@@ -298,10 +303,11 @@
zlog_notice("!HAVE_CLOCK_MONOTONIC");
#endif
+
/*
Initialize zclient "update" and "lookup" sockets
*/
- pim_zebra_init();
+ pim_zebra_init(zebra_sock_path);
while (thread_fetch(master, &thread))
thread_call(&thread);
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c
index 44046db..321e317 100644
--- a/pimd/pim_zebra.c
+++ b/pimd/pim_zebra.c
@@ -642,14 +642,17 @@
return 0;
}
-void pim_zebra_init()
+void pim_zebra_init(char *zebra_sock_path)
{
int i;
+ if (zebra_sock_path)
+ zclient_serv_path_set(zebra_sock_path);
+
#ifdef HAVE_TCP_ZEBRA
zlog_notice("zclient update contacting ZEBRA daemon at socket TCP %s,%d", "127.0.0.1", ZEBRA_PORT);
#else
- zlog_notice("zclient update contacting ZEBRA daemon at socket UNIX %s", ZEBRA_SERV_PATH);
+ zlog_notice("zclient update contacting ZEBRA daemon at socket UNIX %s", zclient_serv_path_get());
#endif
/* Socket for receiving updates from Zebra daemon */
diff --git a/pimd/pim_zebra.h b/pimd/pim_zebra.h
index 474e7a2..d624c86 100644
--- a/pimd/pim_zebra.h
+++ b/pimd/pim_zebra.h
@@ -26,7 +26,7 @@
#include "pim_igmp.h"
#include "pim_ifchannel.h"
-void pim_zebra_init(void);
+void pim_zebra_init(char *zebra_sock_path);
void pim_scan_oil(void);
diff --git a/pimd/pim_zlookup.c b/pimd/pim_zlookup.c
index be0499e..ed47e67 100644
--- a/pimd/pim_zlookup.c
+++ b/pimd/pim_zlookup.c
@@ -66,16 +66,19 @@
__PRETTY_FUNCTION__, "127.0.0.1", ZEBRA_PORT);
}
#else
- zlog_debug("%s: FIXME blocking connect: zclient_socket_un()",
- __PRETTY_FUNCTION__);
- zlookup->sock = zclient_socket_un(ZEBRA_SERV_PATH);
- if (zlookup->sock < 0) {
- zlog_warn("%s: failure connecting UNIX socket %s",
- __PRETTY_FUNCTION__, ZEBRA_SERV_PATH);
- }
- else if (zclient_debug) {
- zlog_notice("%s: connected UNIX socket %s",
- __PRETTY_FUNCTION__, ZEBRA_SERV_PATH);
+ {
+ const char *const path = zclient_serv_path_get();
+ zlog_debug("%s: FIXME blocking connect: zclient_socket_un()",
+ __PRETTY_FUNCTION__);
+ zlookup->sock = zclient_socket_un(path);
+ if (zlookup->sock < 0) {
+ zlog_warn("%s: failure connecting UNIX socket %s",
+ __PRETTY_FUNCTION__, path);
+ }
+ else if (zclient_debug) {
+ zlog_notice("%s: connected UNIX socket %s",
+ __PRETTY_FUNCTION__, path);
+ }
}
#endif /* HAVE_TCP_ZEBRA */