Module Name:    src
Committed By:   ozaki-r
Date:           Wed Nov 11 07:48:41 UTC 2015

Modified Files:
        src/distrib/sets/lists/base: mi
        src/distrib/sets/lists/debug: mi
        src/usr.sbin/rtadvd: Makefile advcap.c config.c dump.c if.c rrenum.c
            rtadvd.c timer.c

Log Message:
Introduce rump.rtadvd

It is used to write ATF tests for RA.

>From s-yamaguchi@IIJ.


To generate a diff of this commit:
cvs rdiff -u -r1.1116 -r1.1117 src/distrib/sets/lists/base/mi
cvs rdiff -u -r1.133 -r1.134 src/distrib/sets/lists/debug/mi
cvs rdiff -u -r1.17 -r1.18 src/usr.sbin/rtadvd/Makefile
cvs rdiff -u -r1.15 -r1.16 src/usr.sbin/rtadvd/advcap.c
cvs rdiff -u -r1.34 -r1.35 src/usr.sbin/rtadvd/config.c
cvs rdiff -u -r1.12 -r1.13 src/usr.sbin/rtadvd/dump.c \
    src/usr.sbin/rtadvd/timer.c
cvs rdiff -u -r1.23 -r1.24 src/usr.sbin/rtadvd/if.c
cvs rdiff -u -r1.18 -r1.19 src/usr.sbin/rtadvd/rrenum.c
cvs rdiff -u -r1.50 -r1.51 src/usr.sbin/rtadvd/rtadvd.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/base/mi
diff -u src/distrib/sets/lists/base/mi:1.1116 src/distrib/sets/lists/base/mi:1.1117
--- src/distrib/sets/lists/base/mi:1.1116	Sun Nov  8 20:00:22 2015
+++ src/distrib/sets/lists/base/mi	Wed Nov 11 07:48:41 2015
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1116 2015/11/08 20:00:22 christos Exp $
+# $NetBSD: mi,v 1.1117 2015/11/11 07:48:41 ozaki-r Exp $
 #
 # Note:	Don't delete entries from here - mark them as "obsolete" instead,
 #	unless otherwise stated below.
@@ -1828,6 +1828,7 @@
 ./usr/sbin/rpc.yppasswdd			base-nis-bin		yp
 ./usr/sbin/rpcbind				base-rpcbind-bin
 ./usr/sbin/rtadvd				base-router-bin		use_inet6
+./usr/sbin/rump.rtadvd				base-router-bin		use_inet6,rump
 ./usr/sbin/rtquery				base-netutil-bin
 ./usr/sbin/rtsold				base-obsolete		obsolete
 ./usr/sbin/rump.arp				base-netutil-bin	rump

Index: src/distrib/sets/lists/debug/mi
diff -u src/distrib/sets/lists/debug/mi:1.133 src/distrib/sets/lists/debug/mi:1.134
--- src/distrib/sets/lists/debug/mi:1.133	Sun Nov  8 20:00:22 2015
+++ src/distrib/sets/lists/debug/mi	Wed Nov 11 07:48:41 2015
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.133 2015/11/08 20:00:22 christos Exp $
+# $NetBSD: mi,v 1.134 2015/11/11 07:48:41 ozaki-r Exp $
 ./etc/mtree/set.debug                           comp-sys-root
 ./usr/lib					comp-sys-usr		compatdir
 ./usr/lib/i18n/libBIG5_g.a			comp-c-debuglib		debuglib,compatfile
@@ -1199,6 +1199,7 @@
 ./usr/libdata/debug/usr/sbin/rpc.yppasswdd.debug	comp-nis-debug		yp,debug
 ./usr/libdata/debug/usr/sbin/rpcbind.debug	comp-rpcbind-debug	debug
 ./usr/libdata/debug/usr/sbin/rtadvd.debug	comp-router-debug	use_inet6,debug
+./usr/libdata/debug/usr/sbin/rump.rtadvd.debug	comp-router-debug	use_inet6,debug,rump
 ./usr/libdata/debug/usr/sbin/rtquery.debug	comp-netutil-debug	debug
 ./usr/libdata/debug/usr/sbin/rtsold.debug	comp-obsolete		obsolete
 ./usr/libdata/debug/usr/sbin/rump.arp.debug	comp-netutil-debug	debug,rump

Index: src/usr.sbin/rtadvd/Makefile
diff -u src/usr.sbin/rtadvd/Makefile:1.17 src/usr.sbin/rtadvd/Makefile:1.18
--- src/usr.sbin/rtadvd/Makefile:1.17	Fri Aug 10 12:10:30 2012
+++ src/usr.sbin/rtadvd/Makefile	Wed Nov 11 07:48:41 2015
@@ -1,24 +1,31 @@
-# $NetBSD: Makefile,v 1.17 2012/08/10 12:10:30 joerg Exp $
+# $NetBSD: Makefile,v 1.18 2015/11/11 07:48:41 ozaki-r Exp $
 
 WARNS?=	4
 
 .include <bsd.own.mk>
 
-USE_FORT?= yes	# network server
+USE_FORT?=	yes	# network server
 
-PROG=	rtadvd
-SRCS=	rtadvd.c rrenum.c advcap.c if.c config.c timer.c dump.c
-
-CPPFLAGS+=-DINET6
-MAN=	rtadvd.8 rtadvd.conf.5
-LDADD+=	-lutil
-DPADD+=	${LIBUTIL}
+RUMPPRG=	rtadvd
+SRCS=		rtadvd.c rrenum.c advcap.c if.c config.c timer.c dump.c
+MAN=		rtadvd.8 rtadvd.conf.5
+
+CPPFLAGS+=	-DINET6
+LDADD+=		-lutil
+DPADD+=		${LIBUTIL}
 
 .if ${MKSHARE} != "no"
 FILESDIR=	/usr/share/examples/rtadvd
 FILES=	rtadvd.conf
 .endif
 
+.PATH:	${.CURDIR}/../../lib/libc/net
+RUMPSRCS=	getifaddrs.c getnameinfo.c if_indextoname.c if_nametoindex.c
+.if (${MKRUMP} != "no")
+CPPFLAGS+=	-DRUMP_ACTION
+.endif
+
+
 .include <bsd.prog.mk>
 
 .if defined(HAVE_GCC) || defined(HAVE_LLVM)

Index: src/usr.sbin/rtadvd/advcap.c
diff -u src/usr.sbin/rtadvd/advcap.c:1.15 src/usr.sbin/rtadvd/advcap.c:1.16
--- src/usr.sbin/rtadvd/advcap.c:1.15	Fri Jun  5 15:41:59 2015
+++ src/usr.sbin/rtadvd/advcap.c	Wed Nov 11 07:48:41 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: advcap.c,v 1.15 2015/06/05 15:41:59 roy Exp $	*/
+/*	$NetBSD: advcap.c,v 1.16 2015/11/11 07:48:41 ozaki-r Exp $	*/
 /*	$KAME: advcap.c,v 1.11 2003/05/19 09:46:50 keiichi Exp $	*/
 
 /*
@@ -46,6 +46,7 @@
 #include <errno.h>
 #include <string.h>
 #include "pathnames.h"
+#include "prog_ops.h"
 
 #ifndef __UNCONST
 #define __UNCONST(a)		((void *)(unsigned long)(const void *)(a))
@@ -159,7 +160,7 @@ getent(char *bp, char *name, char *cp)
 				break;
 			}
 			if (cp >= bp + BUFSIZ) {
-				write(2,"Remcap entry too long\n", 23);
+				prog_write(2,"Remcap entry too long\n", 23);
 				break;
 			} else
 				*cp++ = c;
@@ -195,7 +196,7 @@ tnchktc(void)
 	p = tbuf + strlen(tbuf) - 2;	/* before the last colon */
 	while (*--p != ':')
 		if (p < tbuf) {
-			write(2, "Bad remcap entry\n", 18);
+			prog_write(2, "Bad remcap entry\n", 18);
 			return (0);
 		}
 	p++;
@@ -208,7 +209,7 @@ tnchktc(void)
 		q++;
 	*q = 0;
 	if (++hopcount > MAXHOP) {
-		write(2, "Infinite tc= loop\n", 18);
+		prog_write(2, "Infinite tc= loop\n", 18);
 		return (0);
 	}
 	if (getent(tcbuf, tcname, remotefile) != 1) {
@@ -218,7 +219,7 @@ tnchktc(void)
 		;
 	l = p - holdtbuf + strlen(q);
 	if (l > BUFSIZ) {
-		write(2, "Remcap entry too long\n", 23);
+		prog_write(2, "Remcap entry too long\n", 23);
 		q[BUFSIZ - (p-holdtbuf)] = 0;
 	}
 	strcpy(p, q);

Index: src/usr.sbin/rtadvd/config.c
diff -u src/usr.sbin/rtadvd/config.c:1.34 src/usr.sbin/rtadvd/config.c:1.35
--- src/usr.sbin/rtadvd/config.c:1.34	Fri Jun  5 14:09:20 2015
+++ src/usr.sbin/rtadvd/config.c	Wed Nov 11 07:48:41 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: config.c,v 1.34 2015/06/05 14:09:20 roy Exp $	*/
+/*	$NetBSD: config.c,v 1.35 2015/11/11 07:48:41 ozaki-r Exp $	*/
 /*	$KAME: config.c,v 1.93 2005/10/17 14:40:02 suz Exp $	*/
 
 /*
@@ -67,6 +67,7 @@
 #include "timer.h"
 #include "if.h"
 #include "config.h"
+#include "prog_ops.h"
 
 #ifndef __arraycount
 #define __arraycount(__x)	(sizeof(__x) / sizeof(__x[0]))
@@ -445,7 +446,7 @@ getconfig(const char *intface, int exith
 		makeentry(entbuf, sizeof(entbuf), i, "vltimedecr");
 		if (agetflag(entbuf)) {
 			struct timespec now;
-			clock_gettime(CLOCK_MONOTONIC, &now);
+			prog_clock_gettime(CLOCK_MONOTONIC, &now);
 			pfx->vltimeexpire =
 				now.tv_sec + pfx->validlifetime;
 		}
@@ -465,7 +466,7 @@ getconfig(const char *intface, int exith
 		makeentry(entbuf, sizeof(entbuf), i, "pltimedecr");
 		if (agetflag(entbuf)) {
 			struct timespec now;
-			clock_gettime(CLOCK_MONOTONIC, &now);
+			prog_clock_gettime(CLOCK_MONOTONIC, &now);
 			pfx->pltimeexpire =
 				now.tv_sec + pfx->preflifetime;
 		}
@@ -502,13 +503,13 @@ getconfig(const char *intface, int exith
 		struct in6_ndireq ndi;
 		int s;
 
-		if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
+		if ((s = prog_socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
 			syslog(LOG_ERR, "<%s> socket: %m", __func__);
 			goto errexit;
 		}
 		memset(&ndi, 0, sizeof(ndi));
 		strncpy(ndi.ifname, intface, IFNAMSIZ);
-		if (ioctl(s, SIOCGIFINFO_IN6, &ndi) < 0) {
+		if (prog_ioctl(s, SIOCGIFINFO_IN6, &ndi) < 0) {
 			syslog(LOG_INFO, "<%s> ioctl:SIOCGIFINFO_IN6 at %s: %m",
 			     __func__, intface);
 		}
@@ -517,11 +518,11 @@ getconfig(const char *intface, int exith
 		ndi.ndi.chlim = tmp->hoplimit;
 		ndi.ndi.retrans = tmp->retranstimer;
 		ndi.ndi.basereachable = tmp->reachabletime;
-		if (ioctl(s, SIOCSIFINFO_IN6, &ndi) < 0) {
+		if (prog_ioctl(s, SIOCSIFINFO_IN6, &ndi) < 0) {
 			syslog(LOG_INFO, "<%s> ioctl:SIOCSIFINFO_IN6 at %s: %m",
 			     __func__, intface);
 		}
-		close(s);
+		prog_close(s);
 	}
 #endif
 
@@ -1027,12 +1028,12 @@ init_prefix(struct in6_prefixreq *ipr)
 #if 0
 	int s;
 
-	if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
+	if ((s = prog_socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
 		syslog(LOG_ERR, "<%s> socket: %m", __func__);
 		exit(1);
 	}
 
-	if (ioctl(s, SIOCGIFPREFIX_IN6, ipr) < 0) {
+	if (prog_ioctl(s, SIOCGIFPREFIX_IN6, ipr) < 0) {
 		syslog(LOG_INFO, "<%s> ioctl:SIOCGIFPREFIX: %m", __func__);
 
 		ipr->ipr_vltime = DEF_ADVVALIDLIFETIME;
@@ -1049,11 +1050,11 @@ init_prefix(struct in6_prefixreq *ipr)
 		       "This should not happen if I am router", __func__,
 		       inet_ntop(AF_INET6, &ipr->ipr_prefix.sin6_addr, ntopbuf,
 				 sizeof(ntopbuf)), ipr->ipr_origin);
-		close(s);
+		prog_close(s);
 		return 1;
 	}
 
-	close(s);
+	prog_close(s);
 	return 0;
 #else
 	ipr->ipr_vltime = DEF_ADVVALIDLIFETIME;
@@ -1218,7 +1219,7 @@ make_packet(struct rainfo *rainfo)
 			vltime = 0;
 		else {
 			if (pfx->vltimeexpire || pfx->pltimeexpire)
-				clock_gettime(CLOCK_MONOTONIC, &now);
+				prog_clock_gettime(CLOCK_MONOTONIC, &now);
 			if (pfx->vltimeexpire == 0)
 				vltime = pfx->validlifetime;
 			else
@@ -1313,7 +1314,7 @@ getinet6sysctl(int code)
 	size_t size;
 
 	size = sizeof(value);
-	if (sysctl(mib, __arraycount(mib), &value, &size, NULL, 0)
+	if (prog_sysctl(mib, __arraycount(mib), &value, &size, NULL, 0)
 	    < 0) {
 		syslog(LOG_ERR, "<%s>: failed to get ip6 sysctl(%d): %m",
 		       __func__, code);

Index: src/usr.sbin/rtadvd/dump.c
diff -u src/usr.sbin/rtadvd/dump.c:1.12 src/usr.sbin/rtadvd/dump.c:1.13
--- src/usr.sbin/rtadvd/dump.c:1.12	Fri Jun  5 14:09:20 2015
+++ src/usr.sbin/rtadvd/dump.c	Wed Nov 11 07:48:41 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: dump.c,v 1.12 2015/06/05 14:09:20 roy Exp $	*/
+/*	$NetBSD: dump.c,v 1.13 2015/11/11 07:48:41 ozaki-r Exp $	*/
 /*	$KAME: dump.c,v 1.34 2004/06/14 05:35:59 itojun Exp $	*/
 
 /*
@@ -59,6 +59,7 @@
 #include "timer.h"
 #include "if.h"
 #include "dump.h"
+#include "prog_ops.h"
 
 static FILE *fp;
 
@@ -101,7 +102,7 @@ if_dump(void)
 	char prefixbuf[INET6_ADDRSTRLEN];
 	struct timespec now;
 
-	clock_gettime(CLOCK_MONOTONIC, &now); /* XXX: unused in most cases */
+	prog_clock_gettime(CLOCK_MONOTONIC, &now); /* XXX: unused in most cases */
 	TAILQ_FOREACH(rai, &ralist, next) {
 		fprintf(fp, "%s:\n", rai->ifname);
 
Index: src/usr.sbin/rtadvd/timer.c
diff -u src/usr.sbin/rtadvd/timer.c:1.12 src/usr.sbin/rtadvd/timer.c:1.13
--- src/usr.sbin/rtadvd/timer.c:1.12	Fri Jun  5 14:09:20 2015
+++ src/usr.sbin/rtadvd/timer.c	Wed Nov 11 07:48:41 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: timer.c,v 1.12 2015/06/05 14:09:20 roy Exp $	*/
+/*	$NetBSD: timer.c,v 1.13 2015/11/11 07:48:41 ozaki-r Exp $	*/
 /*	$KAME: timer.c,v 1.11 2005/04/14 06:22:35 suz Exp $	*/
 
 /*
@@ -40,6 +40,7 @@
 #include <string.h>
 #include <search.h>
 #include "timer.h"
+#include "prog_ops.h"
 
 struct rtadvd_timer_head_t ra_timer = TAILQ_HEAD_INITIALIZER(ra_timer);
 static struct timespec tm_limit = { LONG_MAX, 1000000000L - 1 };
@@ -102,7 +103,7 @@ rtadvd_set_timer(struct timespec *tm, st
 	struct timespec now;
 
 	/* reset the timer */
-	clock_gettime(CLOCK_MONOTONIC, &now);
+	prog_clock_gettime(CLOCK_MONOTONIC, &now);
 	timespecadd(&now, tm, &timer->tm);
 
 	/* upate the next expiration time */
@@ -122,7 +123,7 @@ rtadvd_check_timer(void)
 	struct timespec now;
 	struct rtadvd_timer *tm, *tmn;
 
-	clock_gettime(CLOCK_MONOTONIC, &now);
+	prog_clock_gettime(CLOCK_MONOTONIC, &now);
 	tm_max = tm_limit;
 
 	TAILQ_FOREACH_SAFE(tm, &ra_timer, next, tmn) {
@@ -153,7 +154,7 @@ rtadvd_timer_rest(struct rtadvd_timer *t
 	static struct timespec returnval;
 	struct timespec now;
 
-	clock_gettime(CLOCK_MONOTONIC, &now);
+	prog_clock_gettime(CLOCK_MONOTONIC, &now);
 	if (timespeccmp(&timer->tm, &now, <=)) {
 		syslog(LOG_DEBUG,
 		       "<%s> a timer must be expired, but not yet",

Index: src/usr.sbin/rtadvd/if.c
diff -u src/usr.sbin/rtadvd/if.c:1.23 src/usr.sbin/rtadvd/if.c:1.24
--- src/usr.sbin/rtadvd/if.c:1.23	Fri Jun  5 15:41:59 2015
+++ src/usr.sbin/rtadvd/if.c	Wed Nov 11 07:48:41 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: if.c,v 1.23 2015/06/05 15:41:59 roy Exp $	*/
+/*	$NetBSD: if.c,v 1.24 2015/11/11 07:48:41 ozaki-r Exp $	*/
 /*	$KAME: if.c,v 1.36 2004/11/30 22:32:01 suz Exp $	*/
 
 /*
@@ -55,6 +55,7 @@
 
 #include "rtadvd.h"
 #include "if.h"
+#include "prog_ops.h"
 
 #ifndef RT_ROUNDUP
 #define RT_ROUNDUP(a)							       \
@@ -111,17 +112,17 @@ if_getmtu(const char *name)
 	struct ifreq ifr;
 	int s, mtu;
 
-	if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
+	if ((s = prog_socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
 		return 0;
 
 	memset(&ifr, 0, sizeof(ifr));
 	ifr.ifr_addr.sa_family = AF_INET6;
 	strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
-	if (ioctl(s, SIOCGIFMTU, &ifr) != -1)
+	if (prog_ioctl(s, SIOCGIFMTU, &ifr) != -1)
 		mtu = ifr.ifr_mtu;
 	else
 		mtu = 0;
-	close(s);
+	prog_close(s);
 
 	return mtu;
 }
@@ -133,20 +134,20 @@ if_getflags(int ifindex, int oifflags)
 	struct ifreq ifr;
 	int s;
 
-	if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
+	if ((s = prog_socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
 		syslog(LOG_ERR, "<%s> socket: %m", __func__);
 		return (oifflags & ~IFF_UP);
 	}
 
 	memset(&ifr, 0, sizeof(ifr));
 	if_indextoname(ifindex, ifr.ifr_name);
-	if (ioctl(s, SIOCGIFFLAGS, &ifr) < 0) {
+	if (prog_ioctl(s, SIOCGIFFLAGS, &ifr) < 0) {
 		syslog(LOG_ERR, "<%s> ioctl:SIOCGIFFLAGS: failed for %s",
 		       __func__, ifr.ifr_name);
-		close(s);
+		prog_close(s);
 		return (oifflags & ~IFF_UP);
 	}
-	close(s);
+	prog_close(s);
 	return (ifr.ifr_flags);
 }
 

Index: src/usr.sbin/rtadvd/rrenum.c
diff -u src/usr.sbin/rtadvd/rrenum.c:1.18 src/usr.sbin/rtadvd/rrenum.c:1.19
--- src/usr.sbin/rtadvd/rrenum.c:1.18	Fri Jun  5 15:41:59 2015
+++ src/usr.sbin/rtadvd/rrenum.c	Wed Nov 11 07:48:41 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: rrenum.c,v 1.18 2015/06/05 15:41:59 roy Exp $	*/
+/*	$NetBSD: rrenum.c,v 1.19 2015/11/11 07:48:41 ozaki-r Exp $	*/
 /*	$KAME: rrenum.c,v 1.14 2004/06/14 05:36:00 itojun Exp $	*/
 
 /*
@@ -53,6 +53,7 @@
 #include "rtadvd.h"
 #include "rrenum.h"
 #include "if.h"
+#include "prog_ops.h"
 
 #define	RR_ISSET_SEGNUM(segnum_bits, segnum) \
 	((((segnum_bits)[(segnum) >> 5]) & (1 << ((segnum) & 31))) != 0)
@@ -163,7 +164,7 @@ do_use_prefix(int len, struct rr_pco_mat
 		irr->irr_useprefix.sin6_len = 0; /* let it mean, no addition */
 		irr->irr_useprefix.sin6_family = 0;
 		irr->irr_useprefix.sin6_addr = in6addr_any;
-		if (ioctl(s, rrcmd2pco[rpm->rpm_code], irr) < 0 &&
+		if (prog_ioctl(s, rrcmd2pco[rpm->rpm_code], irr) < 0 &&
 		    errno != EADDRNOTAVAIL)
 			syslog(LOG_ERR, "<%s> ioctl: %m", __func__);
 		return;
@@ -194,7 +195,7 @@ do_use_prefix(int len, struct rr_pco_mat
 		irr->irr_useprefix.sin6_family = AF_INET6;
 		irr->irr_useprefix.sin6_addr = rpu->rpu_prefix;
 
-		if (ioctl(s, rrcmd2pco[rpm->rpm_code], irr) < 0 &&
+		if (prog_ioctl(s, rrcmd2pco[rpm->rpm_code], irr) < 0 &&
 		    errno != EADDRNOTAVAIL)
 			syslog(LOG_ERR, "<%s> ioctl: %m", __func__);
 
@@ -216,14 +217,14 @@ do_use_prefix(int len, struct rr_pco_mat
 					pp->validlifetime = ntohl(rpu->rpu_vltime);
 					pp->preflifetime = ntohl(rpu->rpu_pltime);
 					if (irr->irr_rrf_decrvalid) {
-						clock_gettime(CLOCK_MONOTONIC,
+						prog_clock_gettime(CLOCK_MONOTONIC,
 						    &now);
 						pp->vltimeexpire =
 							now.tv_sec + pp->validlifetime;
 					} else
 						pp->vltimeexpire = 0;
 					if (irr->irr_rrf_decrprefd) {
-						clock_gettime(CLOCK_MONOTONIC,
+						prog_clock_gettime(CLOCK_MONOTONIC,
 						    &now);
 						pp->pltimeexpire =
 							now.tv_sec + pp->preflifetime;
@@ -249,7 +250,7 @@ do_pco(struct icmp6_router_renum *rr, in
 	if ((rr_pco_check(len, rpm) != 0))
 		return 1;
 
-	if (s == -1 && (s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
+	if (s == -1 && (s = prog_socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
 		syslog(LOG_ERR, "<%s> socket: %m", __func__);
 		exit(1);
 	}

Index: src/usr.sbin/rtadvd/rtadvd.c
diff -u src/usr.sbin/rtadvd/rtadvd.c:1.50 src/usr.sbin/rtadvd/rtadvd.c:1.51
--- src/usr.sbin/rtadvd/rtadvd.c:1.50	Mon Jun 15 04:15:33 2015
+++ src/usr.sbin/rtadvd/rtadvd.c	Wed Nov 11 07:48:41 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: rtadvd.c,v 1.50 2015/06/15 04:15:33 ozaki-r Exp $	*/
+/*	$NetBSD: rtadvd.c,v 1.51 2015/11/11 07:48:41 ozaki-r Exp $	*/
 /*	$KAME: rtadvd.c,v 1.92 2005/10/17 14:40:02 suz Exp $	*/
 
 /*
@@ -67,6 +67,7 @@
 #include "if.h"
 #include "config.h"
 #include "dump.h"
+#include "prog_ops.h"
 
 struct msghdr rcvmhdr;
 static unsigned char *rcvcmsgbuf;
@@ -220,6 +221,10 @@ main(int argc, char *argv[])
 		exit(1);
 	}
 
+	if (prog_init && prog_init() == -1) {
+		err(1, "init failed");
+	}
+
 	logopt = LOG_NDELAY | LOG_PID;
 	if (fflag)
 		logopt |= LOG_PERROR;
@@ -251,7 +256,7 @@ main(int argc, char *argv[])
 		getconfig(*argv++, 1);
 
 	if (!fflag)
-		daemon(1, 0);
+		prog_daemon(1, 0);
 
 	sock_open();
 
@@ -274,17 +279,17 @@ main(int argc, char *argv[])
 		set[1].fd = -1;
 
 	syslog(LOG_INFO, "dropping privileges to %s", RTADVD_USER);
-	if (chroot(pw->pw_dir) == -1) {
+	if (prog_chroot(pw->pw_dir) == -1) {
 		syslog(LOG_ERR, "chroot: %s: %m", pw->pw_dir);
 		exit(1);
 	}
-	if (chdir("/") == -1) {
+	if (prog_chdir("/") == -1) {
 		syslog(LOG_ERR, "chdir: /: %m");
 		exit(1);
 	}
-	if (setgroups(1, &pw->pw_gid) == -1 ||
-	    setgid(pw->pw_gid) == -1 || 
-	    setuid(pw->pw_uid) == -1)
+	if (prog_setgroups(1, &pw->pw_gid) == -1 ||
+	    prog_setgid(pw->pw_gid) == -1 ||
+	    prog_setuid(pw->pw_uid) == -1)
 	{
 		syslog(LOG_ERR, "failed to drop privileges: %m");
 		exit(1);
@@ -331,7 +336,7 @@ main(int argc, char *argv[])
 			    __func__);
 		}
 
-		if ((i = poll(set, 2, timeout ? (timeout->tv_sec * 1000 +
+		if ((i = prog_poll(set, 2, timeout ? (timeout->tv_sec * 1000 +
 		    (timeout->tv_nsec + 999999) / 1000000) : INFTIM)) < 0)
 		{
 			/* EINTR would occur upon SIGUSR1 for status dump */
@@ -446,7 +451,7 @@ rtmsg_input(void)
 	int prefixchange = 0, argc;
 
 	memset(&buffer, 0, sizeof(buffer));
-	n = read(rtsock, &buffer, sizeof(buffer));
+	n = prog_read(rtsock, &buffer, sizeof(buffer));
 
 	/* We read the buffer first to clear the FD */
 	if (do_die)
@@ -716,7 +721,7 @@ rtadvd_input(void)
 	 * receive options.
 	 */
 	rcvmhdr.msg_controllen = rcvcmsgbuflen;
-	if ((i = recvmsg(sock, &rcvmhdr, 0)) < 0)
+	if ((i = prog_recvmsg(sock, &rcvmhdr, 0)) < 0)
 		return;
 
 	/* We read the buffer first to clear the FD */
@@ -1017,7 +1022,7 @@ ra_timer_set_short_delay(struct rainfo *
 	 * MIN_DELAY_BETWEEN_RAS plus the random value after the
 	 * previous advertisement was sent.
 	 */
-	clock_gettime(CLOCK_MONOTONIC, &now);
+	prog_clock_gettime(CLOCK_MONOTONIC, &now);
 	timespecsub(&now, &rai->lastsent, &tm_tmp);
 	min_delay.tv_sec = MIN_DELAY_BETWEEN_RAS;
 	min_delay.tv_nsec = 0;
@@ -1245,7 +1250,7 @@ prefix_check(struct nd_opt_prefix_info *
 		 * XXX: can we really expect that all routers on the link
 		 * have synchronized clocks?
 		 */
-		clock_gettime(CLOCK_MONOTONIC, &now);
+		prog_clock_gettime(CLOCK_MONOTONIC, &now);
 		preferred_time += now.tv_sec;
 
 		if (!pp->timer && rai->clockskew &&
@@ -1281,7 +1286,7 @@ prefix_check(struct nd_opt_prefix_info *
 
 	valid_time = ntohl(pinfo->nd_opt_pi_valid_time);
 	if (pp->vltimeexpire) {
-		clock_gettime(CLOCK_MONOTONIC, &now);
+		prog_clock_gettime(CLOCK_MONOTONIC, &now);
 		valid_time += now.tv_sec;
 
 		if (!pp->timer && rai->clockskew &&
@@ -1510,14 +1515,14 @@ sock_open(void)
 		exit(1);
 	}
 
-	if ((sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) < 0) {
+	if ((sock = prog_socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) < 0) {
 		syslog(LOG_ERR, "<%s> socket: %m", __func__);
 		exit(1);
 	}
 
 	/* RFC 4861 Section 4.2 */
 	on = 255;
-	if (setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &on,
+	if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &on,
 		       sizeof(on)) == -1) {
 		syslog(LOG_ERR, "<%s> IPV6_MULTICAST_HOPS: %m", __func__);
 		exit(1);
@@ -1526,13 +1531,13 @@ sock_open(void)
 	/* specify to tell receiving interface */
 	on = 1;
 #ifdef IPV6_RECVPKTINFO
-	if (setsockopt(sock, IPPROTO_IPV6, IPV6_RECVPKTINFO, &on,
+	if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_RECVPKTINFO, &on,
 		       sizeof(on)) < 0) {
 		syslog(LOG_ERR, "<%s> IPV6_RECVPKTINFO: %m", __func__);
 		exit(1);
 	}
 #else  /* old adv. API */
-	if (setsockopt(sock, IPPROTO_IPV6, IPV6_PKTINFO, &on,
+	if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_PKTINFO, &on,
 		       sizeof(on)) < 0) {
 		syslog(LOG_ERR, "<%s> IPV6_PKTINFO: %m", __func__);
 		exit(1);
@@ -1542,13 +1547,13 @@ sock_open(void)
 	on = 1;
 	/* specify to tell value of hoplimit field of received IP6 hdr */
 #ifdef IPV6_RECVHOPLIMIT
-	if (setsockopt(sock, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, &on,
+	if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, &on,
 		       sizeof(on)) < 0) {
 		syslog(LOG_ERR, "<%s> IPV6_RECVHOPLIMIT: %m", __func__);
 		exit(1);
 	}
 #else  /* old adv. API */
-	if (setsockopt(sock, IPPROTO_IPV6, IPV6_HOPLIMIT, &on,
+	if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_HOPLIMIT, &on,
 		       sizeof(on)) < 0) {
 		syslog(LOG_ERR, "<%s> IPV6_HOPLIMIT: %m", __func__);
 		exit(1);
@@ -1560,7 +1565,7 @@ sock_open(void)
 	ICMP6_FILTER_SETPASS(ND_ROUTER_ADVERT, &filt);
 	if (accept_rr)
 		ICMP6_FILTER_SETPASS(ICMP6_ROUTER_RENUMBERING, &filt);
-	if (setsockopt(sock, IPPROTO_ICMPV6, ICMP6_FILTER, &filt,
+	if (prog_setsockopt(sock, IPPROTO_ICMPV6, ICMP6_FILTER, &filt,
 		       sizeof(filt)) < 0) {
 		syslog(LOG_ERR, "<%s> IICMP6_FILTER: %m", __func__);
 		exit(1);
@@ -1578,7 +1583,7 @@ sock_open(void)
 	}
 	TAILQ_FOREACH(ra, &ralist, next) {
 		mreq.ipv6mr_interface = ra->ifindex;
-		if (setsockopt(sock, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq,
+		if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq,
 			       sizeof(mreq)) < 0) {
 			syslog(LOG_ERR, "<%s> IPV6_JOIN_GROUP(link) on %s: %m",
 			       __func__, ra->ifname);
@@ -1609,7 +1614,7 @@ sock_open(void)
 			}
 		} else
 			mreq.ipv6mr_interface = ra->ifindex;
-		if (setsockopt(sock, IPPROTO_IPV6, IPV6_JOIN_GROUP,
+		if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_JOIN_GROUP,
 			       &mreq, sizeof(mreq)) < 0) {
 			syslog(LOG_ERR,
 			       "<%s> IPV6_JOIN_GROUP(site) on %s: %m",
@@ -1643,7 +1648,7 @@ sock_open(void)
 static void
 rtsock_open(void)
 {
-	if ((rtsock = socket(PF_ROUTE, SOCK_RAW, 0)) < 0) {
+	if ((rtsock = prog_socket(PF_ROUTE, SOCK_RAW, 0)) < 0) {
 		syslog(LOG_ERR, "<%s> socket: %m", __func__);
 		exit(1);
 	}
@@ -1695,7 +1700,7 @@ ra_output(struct rainfo *rai)
 	       "<%s> send RA on %s, # of waitings = %d",
 	       __func__, rai->ifname, rai->waiting); 
 
-	i = sendmsg(sock, &sndmhdr, 0);
+	i = prog_sendmsg(sock, &sndmhdr, 0);
 
 	if (i < 0 || (size_t)i != rai->ra_datalen)  {
 		if (i < 0) {
@@ -1753,7 +1758,7 @@ ra_output(struct rainfo *rai)
 	rai->raoutput++;
 
 	/* update timestamp */
-	clock_gettime(CLOCK_MONOTONIC, &rai->lastsent);
+	prog_clock_gettime(CLOCK_MONOTONIC, &rai->lastsent);
 
 	/* reset waiting conter */
 	rai->waiting = 0;

Reply via email to