Print this page
OS-4807 arp(1M) and ndp(1M) should use zone_get_nroot()
*** 38,47 ****
--- 38,48 ----
#include <netinet/in.h>
#include <arpa/inet.h>
#include <inet/ip.h>
#include <net/if_dl.h>
#include <net/route.h>
+ #include <zone.h>
typedef struct sockaddr_in6 sin6_t;
#define BUF_SIZE 2048
typedef struct rtmsg_pkt {
*** 93,110 ****
static int ndp_set(int, struct lifreq *, void *);
static int ndp_set_nce(char *, char *, char *[], int);
static int ndp_set_file(char *);
static char *ndp_iface = NULL;
- static char *netstat_path = "/usr/bin/netstat";
static pid_t ndp_pid;
static boolean_t ndp_noresolve = B_FALSE; /* Don't lookup addresses */
static boolean_t ndp_run = B_TRUE;
#define MAX_ATTEMPTS 5
#define MAX_OPTS 5
#define WORDSEPS " \t\r\n"
/*
* Macros borrowed from route(1M) for working with PF_ROUTE messages
*/
#define RT_ADVANCE(x, n) ((x) += ndp_salen(n))
--- 94,111 ----
static int ndp_set(int, struct lifreq *, void *);
static int ndp_set_nce(char *, char *, char *[], int);
static int ndp_set_file(char *);
static char *ndp_iface = NULL;
static pid_t ndp_pid;
static boolean_t ndp_noresolve = B_FALSE; /* Don't lookup addresses */
static boolean_t ndp_run = B_TRUE;
#define MAX_ATTEMPTS 5
#define MAX_OPTS 5
#define WORDSEPS " \t\r\n"
+ #define NETSTAT_PATH "/usr/bin/netstat"
/*
* Macros borrowed from route(1M) for working with PF_ROUTE messages
*/
#define RT_ADVANCE(x, n) ((x) += ndp_salen(n))
*** 765,774 ****
--- 766,781 ----
* Print out all NDP entries
*/
static void
ndp_get_all(void)
{
+ char netstat_path[MAXPATHLEN];
+ const char *zroot = zone_get_nroot();
+
+ (void) snprintf(netstat_path, sizeof (netstat_path), "%s%s", zroot != NULL ?
+ zroot : "", NETSTAT_PATH);
+
(void) execl(netstat_path, "netstat",
(ndp_noresolve ? "-np" : "-p"),
"-f", "inet6", (char *)0);
ndp_fatal("Coudn't exec %s: %s", netstat_path, strerror(errno));
}