Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/tests/net/if_tap tap(4): update the test so that we can open...
details: https://anonhg.NetBSD.org/src/rev/6f74e924e2bb
branches: trunk
changeset: 1014728:6f74e924e2bb
user: roy <roy%NetBSD.org@localhost>
date: Wed Sep 30 14:43:15 2020 +0000
description:
tap(4): update the test so that we can open the tap to ping across a bridge
ping with tap closed to ensure it fails
ping with tap open to ensure it works
diffstat:
tests/net/if_tap/Makefile | 7 +++-
tests/net/if_tap/rump_open_tap.c | 79 ++++++++++++++++++++++++++++++++++++++++
tests/net/if_tap/t_tap.sh | 28 ++++++++++++--
3 files changed, 109 insertions(+), 5 deletions(-)
diffs (180 lines):
diff -r 2baf17c65f2e -r 6f74e924e2bb tests/net/if_tap/Makefile
--- a/tests/net/if_tap/Makefile Wed Sep 30 08:43:47 2020 +0000
+++ b/tests/net/if_tap/Makefile Wed Sep 30 14:43:15 2020 +0000
@@ -1,8 +1,13 @@
-# $NetBSD: Makefile,v 1.2 2016/11/25 08:51:16 ozaki-r Exp $
+# $NetBSD: Makefile,v 1.3 2020/09/30 14:43:15 roy Exp $
#
.include <bsd.own.mk>
+PROG= rump_open_tap
+MAN=
+DPADD= ${LIBRUMPRES}
+LDADD= -lrumpres
+
TESTSDIR= ${TESTSBASE}/net/if_tap
.for name in tap
diff -r 2baf17c65f2e -r 6f74e924e2bb tests/net/if_tap/rump_open_tap.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/net/if_tap/rump_open_tap.c Wed Sep 30 14:43:15 2020 +0000
@@ -0,0 +1,79 @@
+/* $NetBSD: rump_open_tap.c,v 1.1 2020/09/30 14:43:15 roy Exp $ */
+
+/*
+ * Copyright (c) 2020 The NetBSD Foundation, Inc.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Roy Marples.
+ *
+ * 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 AUTHOR ``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 AUTHOR 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>
+__RCSID("$NetBSD: rump_open_tap.c,v 1.1 2020/09/30 14:43:15 roy Exp $");
+
+#include <err.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <rump/rump_syscalls.h>
+#include <rump/rumpclient.h>
+
+int
+main(int argc, char **argv)
+{
+ int fd;
+
+ if (argc < 2)
+ errx(EXIT_FAILURE, "No path specified");
+
+ rumpclient_init();
+
+ fd = rump_sys_open(argv[1], O_RDWR);
+ if (fd == -1)
+ err(EXIT_FAILURE, "open: %s", argv[1]);
+
+ if (argc > 2) {
+ FILE *fp;
+ pid_t pid;
+
+ fp = fopen(argv[2], "w");
+ if (fp == NULL)
+ err(EXIT_FAILURE, "fopen: %s", argv[2]);
+
+ pid = fork();
+ switch (pid) {
+ case -1:
+ err(EXIT_FAILURE, "fork");
+ case 0:
+ break;
+ default:
+ fprintf(fp, "%d\n", pid);
+ exit(EXIT_SUCCESS);
+ }
+ }
+
+ /* Spin with the fd open */
+ for (;;)
+ sleep(100);
+}
diff -r 2baf17c65f2e -r 6f74e924e2bb tests/net/if_tap/t_tap.sh
--- a/tests/net/if_tap/t_tap.sh Wed Sep 30 08:43:47 2020 +0000
+++ b/tests/net/if_tap/t_tap.sh Wed Sep 30 14:43:15 2020 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: t_tap.sh,v 1.10 2019/08/19 03:22:05 ozaki-r Exp $
+# $NetBSD: t_tap.sh,v 1.11 2020/09/30 14:43:15 roy Exp $
#
# Copyright (c) 2016 Internet Initiative Japan Inc.
# All rights reserved.
@@ -34,6 +34,7 @@
IP6_LOCAL=fc00::1
IP6_TAP=fc00::2
IP6_REMOTE=fc00::3
+TAP_PID=./.__tap.pid
DEBUG=${DEBUG:-false}
TIMEOUT=1
@@ -130,6 +131,7 @@
tap_bridged_body()
{
+ local src="$(atf_get_srcdir)"
rump_server_fs_start $SOCK_LOCAL netinet6 tap bridge
rump_server_fs_start $SOCK_REMOTE netinet6 tap
@@ -146,7 +148,6 @@
atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP
atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP
atf_check -s exit:0 rump.ifconfig tap0 up
- atf_check -s exit:0 rump.ifconfig -w 10
rump_server_add_iface $SOCK_LOCAL bridge0
atf_check -s exit:0 rump.ifconfig bridge0 up
@@ -155,6 +156,8 @@
atf_check -s exit:0 brconfig bridge0 add tap0
unset LD_PRELOAD
+ atf_check -s exit:0 rump.ifconfig -w 10
+
export RUMP_SERVER=${SOCK_REMOTE}
atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE
@@ -162,10 +165,22 @@
atf_check -s exit:0 rump.ifconfig shmif0 up
atf_check -s exit:0 rump.ifconfig -w 10
+ # shmif0 on the server bridge is active, we expect this to work
atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_LOCAL
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL
+
+ # The tap is not open, we expect this to fail
+ atf_check -s not-exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP
+ atf_check -s not-exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP
+
+ # Open the tap on the server
+ export RUMP_SERVER=${SOCK_LOCAL}
+ atf_check -s exit:0 "$src"/rump_open_tap /dev/tap0 $TAP_PID
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ # Now we can ping the tap address
+ export RUMP_SERVER=${SOCK_LOCAL}
atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP
-
- atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL
atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP
rump_server_destroy_ifaces
@@ -174,6 +189,11 @@
tap_bridged_cleanup()
{
+ if [ -f $TAP_PID ]; then
+ kill -9 $(cat $TAP_PID)
+ rm -f $TAP_PID
+ sleep 1
+ fi
$DEBUG && dump
cleanup
}
Home |
Main Index |
Thread Index |
Old Index