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 */