Module Name:    src
Committed By:   ozaki-r
Date:           Wed Jul 29 06:07:36 UTC 2015

Modified Files:
        src/distrib/sets/lists/base: mi
        src/distrib/sets/lists/debug: mi
        src/usr.sbin/arp: Makefile arp.c
Added Files:
        src/usr.sbin/arp: arp_hostops.c arp_rumpops.c prog_ops.h

Log Message:
Introduce rump.arp

arp(8) uses RTM that requires that getpid(2) works correctly. Unfortunately
supporting getpid(2) in librumphijack will be tricky so that we rump-ify
arp(8) as well as ifconfig and route commands.

Suggested by pooka@.


To generate a diff of this commit:
cvs rdiff -u -r1.1104 -r1.1105 src/distrib/sets/lists/base/mi
cvs rdiff -u -r1.121 -r1.122 src/distrib/sets/lists/debug/mi
cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/arp/Makefile
cvs rdiff -u -r1.51 -r1.52 src/usr.sbin/arp/arp.c
cvs rdiff -u -r0 -r1.1 src/usr.sbin/arp/arp_hostops.c \
    src/usr.sbin/arp/arp_rumpops.c src/usr.sbin/arp/prog_ops.h

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.1104 src/distrib/sets/lists/base/mi:1.1105
--- src/distrib/sets/lists/base/mi:1.1104	Mon Jun 22 06:02:01 2015
+++ src/distrib/sets/lists/base/mi	Wed Jul 29 06:07:35 2015
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1104 2015/06/22 06:02:01 matt Exp $
+# $NetBSD: mi,v 1.1105 2015/07/29 06:07:35 ozaki-r Exp $
 #
 # Note:	Don't delete entries from here - mark them as "obsolete" instead,
 #	unless otherwise stated below.
@@ -1819,6 +1819,7 @@
 ./usr/sbin/rtadvd				base-router-bin		use_inet6
 ./usr/sbin/rtquery				base-netutil-bin
 ./usr/sbin/rtsold				base-obsolete		obsolete
+./usr/sbin/rump.arp				base-netutil-bin	rump
 ./usr/sbin/rump.envstat				base-sysutil-bin	rump
 ./usr/sbin/rump.powerd				base-sysutil-bin	rump
 ./usr/sbin/rump.traceroute			base-netutil-bin	rump

Index: src/distrib/sets/lists/debug/mi
diff -u src/distrib/sets/lists/debug/mi:1.121 src/distrib/sets/lists/debug/mi:1.122
--- src/distrib/sets/lists/debug/mi:1.121	Sat Jun 27 15:46:09 2015
+++ src/distrib/sets/lists/debug/mi	Wed Jul 29 06:07:35 2015
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.121 2015/06/27 15:46:09 matt Exp $
+# $NetBSD: mi,v 1.122 2015/07/29 06:07:35 ozaki-r Exp $
 
 ./etc/mtree/set.debug                           comp-sys-root
 ./usr/lib					comp-sys-usr		compatdir
@@ -1202,6 +1202,7 @@
 ./usr/libdata/debug/usr/sbin/rtadvd.debug	comp-router-debug	use_inet6,debug
 ./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
 ./usr/libdata/debug/usr/sbin/rump.envstat.debug	comp-sysutil-debug	debug,rump
 ./usr/libdata/debug/usr/sbin/rump.powerd.debug	comp-sysutil-debug	debug,rump
 ./usr/libdata/debug/usr/sbin/rump.traceroute.debug	comp-netutil-debug	debug,rump

Index: src/usr.sbin/arp/Makefile
diff -u src/usr.sbin/arp/Makefile:1.11 src/usr.sbin/arp/Makefile:1.12
--- src/usr.sbin/arp/Makefile:1.11	Wed Apr 22 15:23:02 2009
+++ src/usr.sbin/arp/Makefile	Wed Jul 29 06:07:35 2015
@@ -1,7 +1,15 @@
-#	$NetBSD: Makefile,v 1.11 2009/04/22 15:23:02 lukem Exp $
+#	$NetBSD: Makefile,v 1.12 2015/07/29 06:07:35 ozaki-r Exp $
 #	from: @(#)Makefile	8.2 (Berkeley) 4/18/94
 
-PROG=	arp
-MAN=	arp.4 arp.8
+.include <bsd.own.mk>
+
+RUMPPRG=	arp
+MAN=		arp.4 arp.8
+
+.PATH:		${.CURDIR}/../../lib/libc/net
+RUMPSRCS=	getifaddrs.c getnameinfo.c
+.if (${MKRUMP} != "no")
+CPPFLAGS+= 	-DRUMP_ACTION
+.endif
 
 .include <bsd.prog.mk>

Index: src/usr.sbin/arp/arp.c
diff -u src/usr.sbin/arp/arp.c:1.51 src/usr.sbin/arp/arp.c:1.52
--- src/usr.sbin/arp/arp.c:1.51	Fri Jun  7 17:18:33 2013
+++ src/usr.sbin/arp/arp.c	Wed Jul 29 06:07:35 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: arp.c,v 1.51 2013/06/07 17:18:33 christos Exp $ */
+/*	$NetBSD: arp.c,v 1.52 2015/07/29 06:07:35 ozaki-r Exp $ */
 
 /*
  * Copyright (c) 1984, 1993
@@ -42,7 +42,7 @@ __COPYRIGHT("@(#) Copyright (c) 1984, 19
 #if 0
 static char sccsid[] = "@(#)arp.c	8.3 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: arp.c,v 1.51 2013/06/07 17:18:33 christos Exp $");
+__RCSID("$NetBSD: arp.c,v 1.52 2015/07/29 06:07:35 ozaki-r Exp $");
 #endif
 #endif /* not lint */
 
@@ -76,6 +76,8 @@ __RCSID("$NetBSD: arp.c,v 1.51 2013/06/0
 #include <unistd.h>
 #include <ifaddrs.h>
 
+#include "prog_ops.h"
+
 static int is_llinfo(const struct sockaddr_dl *, int);
 static int delete(const char *, const char *);
 static void dump(uint32_t);
@@ -126,8 +128,6 @@ main(int argc, char **argv)
 
 	setprogname(argv[0]);
 
-	pid = getpid();
-
 	while ((ch = getopt(argc, argv, "andsfv")) != -1)
 		switch((char)ch) {
 		case 'a':
@@ -155,6 +155,11 @@ main(int argc, char **argv)
 	if (!op && aflag)
 		op = 'a';
 
+	if (prog_init && prog_init() == -1)
+		err(1, "init failed");
+
+	pid = prog_getpid();
+
 	switch((char)op) {
 	case 'a':
 		dump(0);
@@ -232,7 +237,7 @@ getsocket(void)
 {
 	if (s >= 0)
 		return;
-	s = socket(PF_ROUTE, SOCK_RAW, 0);
+	s = prog_socket(PF_ROUTE, SOCK_RAW, 0);
 	if (s < 0)
 		err(1, "socket");
 }
@@ -464,13 +469,13 @@ dump(uint32_t addr)
 	mib[3] = AF_INET;
 	mib[4] = NET_RT_FLAGS;
 	mib[5] = RTF_LLINFO;
-	if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
+	if (prog_sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
 		err(1, "route-sysctl-estimate");
 	if (needed == 0)
 		return;
 	if ((buf = malloc(needed)) == NULL)
 		err(1, "malloc");
-	if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
+	if (prog_sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
 		err(1, "actual retrieval of routing table");
 	lim = buf + needed;
 	for (next = buf; next < lim; next += rtm->rtm_msglen) {
@@ -539,13 +544,13 @@ delete_all(void)
 	mib[3] = AF_INET;
 	mib[4] = NET_RT_FLAGS;
 	mib[5] = RTF_LLINFO;
-	if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
+	if (prog_sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
 		err(1, "route-sysctl-estimate");
 	if (needed == 0)
 		return;
 	if ((buf = malloc(needed)) == NULL)
 		err(1, "malloc");
-	if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
+	if (prog_sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
 		err(1, "actual retrieval of routing table");
 	lim = buf + needed;
 	for (next = buf; next < lim; next += rtm->rtm_msglen) {
@@ -676,14 +681,14 @@ doit:
 	l = rtm->rtm_msglen;
 	rtm->rtm_seq = ++seq;
 	rtm->rtm_type = cmd;
-	if (write(s, &m_rtmsg, (size_t)l) < 0) {
+	if (prog_write(s, &m_rtmsg, (size_t)l) < 0) {
 		if (errno != ESRCH || cmd != RTM_DELETE) {
 			warn("writing to routing socket");
 			return (-1);
 		}
 	}
 	do {
-		l = read(s, &m_rtmsg, sizeof(m_rtmsg));
+		l = prog_read(s, &m_rtmsg, sizeof(m_rtmsg));
 	} while (l > 0 && (rtm->rtm_seq != seq || rtm->rtm_pid != pid));
 	if (l < 0)
 		warn("read from routing socket");

Added files:

Index: src/usr.sbin/arp/arp_hostops.c
diff -u /dev/null src/usr.sbin/arp/arp_hostops.c:1.1
--- /dev/null	Wed Jul 29 06:07:36 2015
+++ src/usr.sbin/arp/arp_hostops.c	Wed Jul 29 06:07:35 2015
@@ -0,0 +1,52 @@
+/*	$NetBSD: arp_hostops.c,v 1.1 2015/07/29 06:07:35 ozaki-r Exp $	*/
+
+/*
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: arp_hostops.c,v 1.1 2015/07/29 06:07:35 ozaki-r Exp $");
+#endif /* !lint */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/sysctl.h>
+
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "prog_ops.h"
+
+const struct prog_ops prog_ops = {
+	.op_socket = socket,
+	.op_open = open,
+	.op_getpid = getpid,
+
+	.op_read = read,
+	.op_write = write,
+
+	.op_sysctl = sysctl,
+};
Index: src/usr.sbin/arp/arp_rumpops.c
diff -u /dev/null src/usr.sbin/arp/arp_rumpops.c:1.1
--- /dev/null	Wed Jul 29 06:07:36 2015
+++ src/usr.sbin/arp/arp_rumpops.c	Wed Jul 29 06:07:35 2015
@@ -0,0 +1,56 @@
+/*	$NetBSD: arp_rumpops.c,v 1.1 2015/07/29 06:07:35 ozaki-r Exp $	*/
+
+/*
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: arp_rumpops.c,v 1.1 2015/07/29 06:07:35 ozaki-r Exp $");
+#endif /* !lint */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <unistd.h>
+
+#include <rump/rump.h>
+#include <rump/rump_syscalls.h>
+#include <rump/rumpclient.h>
+
+#include "prog_ops.h"
+
+const struct prog_ops prog_ops = {
+	.op_init =	rumpclient_init,
+
+	.op_socket =	rump_sys_socket,
+	.op_open =	rump_sys_open,
+	.op_getpid =	rump_sys_getpid,
+
+	.op_read =	rump_sys_read,
+	.op_write =	rump_sys_write,
+
+	.op_sysctl =	rump_sys___sysctl,
+};
Index: src/usr.sbin/arp/prog_ops.h
diff -u /dev/null src/usr.sbin/arp/prog_ops.h:1.1
--- /dev/null	Wed Jul 29 06:07:36 2015
+++ src/usr.sbin/arp/prog_ops.h	Wed Jul 29 06:07:35 2015
@@ -0,0 +1,68 @@
+/*      $NetBSD: prog_ops.h,v 1.1 2015/07/29 06:07:35 ozaki-r Exp $	*/
+
+/*
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _PROG_OPS_H_
+#define _PROG_OPS_H_
+
+#include <sys/types.h>
+
+#ifndef CRUNCHOPS
+/* XXX: Keep same order with netstat! */
+struct prog_ops {
+	int (*op_init)(void);
+
+	int (*op_sysctl)(const int *, u_int, void *, size_t *,
+			 const void *, size_t);
+
+	int (*op_socket)(int, int, int);
+	int (*op_open)(const char *, int, ...);
+	pid_t (*op_getpid)(void);
+
+	ssize_t (*op_read)(int, void *, size_t);
+	ssize_t (*op_write)(int, const void *, size_t);
+};
+extern const struct prog_ops prog_ops;
+
+#define prog_init prog_ops.op_init
+#define prog_socket prog_ops.op_socket
+#define prog_open prog_ops.op_open
+#define prog_getpid prog_ops.op_getpid
+#define prog_read prog_ops.op_read
+#define prog_write prog_ops.op_write
+#define prog_sysctl prog_ops.op_sysctl
+#else
+#define prog_init ((int (*)(void))NULL)
+#define prog_socket socket
+#define prog_open open
+#define prog_getpid getpid
+#define prog_read read
+#define prog_write write
+#define prog_sysctl sysctl
+#endif
+
+#endif /* _PROG_OPS_H_ */

Reply via email to