Module Name:    src
Committed By:   ozaki-r
Date:           Fri Nov 25 08:51:17 UTC 2016

Modified Files:
        src/tests/net: net_common.sh
        src/tests/net/arp: t_arp.sh t_dad.sh
        src/tests/net/icmp: t_icmp6_redirect.sh t_icmp_redirect.sh
        src/tests/net/if_bridge: t_bridge.sh
        src/tests/net/if_gif: t_gif.sh
        src/tests/net/if_tap: Makefile t_tap.sh
        src/tests/net/mcast: Makefile t_mcast.sh
        src/tests/net/ndp: t_dad.sh t_ndp.sh t_ra.sh
        src/tests/net/net: t_forwarding.sh t_ipaddress.sh t_ipv6_lifetime.sh
            t_mtudisc.sh t_mtudisc6.sh t_ping6_opts.sh
        src/tests/net/route: t_flags.sh t_flags6.sh t_route.sh

Log Message:
Share rump_server start/stop and interface creation/destruction functions

The common functions store socks of rump_servers, interfaces of rump_servers
and buses that intefaces connect and allow to destroy them with common
functions without specifying which socks, interfaces and buses we should
destroy.

This change reduces lots of similar setup/cleanup codes.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/tests/net/net_common.sh
cvs rdiff -u -r1.21 -r1.22 src/tests/net/arp/t_arp.sh
cvs rdiff -u -r1.12 -r1.13 src/tests/net/arp/t_dad.sh
cvs rdiff -u -r1.6 -r1.7 src/tests/net/icmp/t_icmp6_redirect.sh
cvs rdiff -u -r1.5 -r1.6 src/tests/net/icmp/t_icmp_redirect.sh
cvs rdiff -u -r1.15 -r1.16 src/tests/net/if_bridge/t_bridge.sh
cvs rdiff -u -r1.7 -r1.8 src/tests/net/if_gif/t_gif.sh
cvs rdiff -u -r1.1 -r1.2 src/tests/net/if_tap/Makefile
cvs rdiff -u -r1.5 -r1.6 src/tests/net/if_tap/t_tap.sh
cvs rdiff -u -r1.2 -r1.3 src/tests/net/mcast/Makefile
cvs rdiff -u -r1.3 -r1.4 src/tests/net/mcast/t_mcast.sh
cvs rdiff -u -r1.11 -r1.12 src/tests/net/ndp/t_dad.sh
cvs rdiff -u -r1.16 -r1.17 src/tests/net/ndp/t_ndp.sh
cvs rdiff -u -r1.5 -r1.6 src/tests/net/ndp/t_ra.sh
cvs rdiff -u -r1.18 -r1.19 src/tests/net/net/t_forwarding.sh
cvs rdiff -u -r1.7 -r1.8 src/tests/net/net/t_ipaddress.sh \
    src/tests/net/net/t_ping6_opts.sh
cvs rdiff -u -r1.5 -r1.6 src/tests/net/net/t_ipv6_lifetime.sh
cvs rdiff -u -r1.6 -r1.7 src/tests/net/net/t_mtudisc.sh
cvs rdiff -u -r1.4 -r1.5 src/tests/net/net/t_mtudisc6.sh
cvs rdiff -u -r1.13 -r1.14 src/tests/net/route/t_flags.sh
cvs rdiff -u -r1.10 -r1.11 src/tests/net/route/t_flags6.sh
cvs rdiff -u -r1.8 -r1.9 src/tests/net/route/t_route.sh

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

Modified files:

Index: src/tests/net/net_common.sh
diff -u src/tests/net/net_common.sh:1.6 src/tests/net/net_common.sh:1.7
--- src/tests/net/net_common.sh:1.6	Thu Nov 24 11:54:57 2016
+++ src/tests/net/net_common.sh	Fri Nov 25 08:51:16 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: net_common.sh,v 1.6 2016/11/24 11:54:57 ozaki-r Exp $
+#	$NetBSD: net_common.sh,v 1.7 2016/11/25 08:51:16 ozaki-r Exp $
 #
 # Copyright (c) 2016 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -131,3 +131,162 @@ stop_httpd()
 		sleep 1
 	fi
 }
+
+BASIC_LIBS="-lrumpnet -lrumpnet_net -lrumpnet_netinet \
+    -lrumpnet_shmif -lrumpdev"
+FS_LIBS="$BASIC_LIBS -lrumpvfs -lrumpfs_ffs"
+
+# We cannot keep variables between test phases, so need to store in files
+_rump_server_socks=./.__socks
+_rump_server_ifaces=./.__ifaces
+_rump_server_buses=./.__buses
+
+_rump_server_start_common()
+{
+	local sock=$1
+	local libs=
+
+	shift 1
+	libs="$*"
+
+	atf_check -s exit:0 rump_server $libs $sock
+
+	echo $sock >> $_rump_server_socks
+	$DEBUG && cat $_rump_server_socks
+}
+
+rump_server_start()
+{
+	local sock=$1
+	local _libs=
+	local libs="$BASIC_LIBS"
+
+	shift 1
+	_libs="$*"
+
+	for lib in $_libs; do
+		libs="$libs -lrumpnet_$lib"
+	done
+
+	_rump_server_start_common $sock $libs
+
+	return 0
+}
+
+rump_server_fs_start()
+{
+	local sock=$1
+	local _libs=
+	local libs="$FS_LIBS"
+
+	shift 1
+	_libs="$*"
+
+	for lib in $_libs; do
+		libs="$libs -lrumpnet_$lib"
+	done
+
+	_rump_server_start_common $sock $libs
+
+	return 0
+}
+
+rump_server_add_iface()
+{
+	local sock=$1
+	local ifname=$2
+	local bus=$3
+	local backup=$RUMP_SERVER
+
+	export RUMP_SERVER=$sock
+	atf_check -s exit:0 rump.ifconfig $ifname create
+	atf_check -s exit:0 rump.ifconfig $ifname linkstr $bus
+	export RUMP_SERVER=$backup
+
+	echo $sock $ifname >> $_rump_server_ifaces
+	$DEBUG && cat $_rump_server_ifaces
+
+	echo $bus >> $_rump_server_buses
+	cat $_rump_server_buses |sort -u >./.__tmp
+	mv -f ./.__tmp $_rump_server_buses
+	$DEBUG && cat $_rump_server_buses
+
+	return 0
+}
+
+rump_server_destroy_ifaces()
+{
+	local backup=$RUMP_SERVER
+
+	$DEBUG && cat $_rump_server_ifaces
+	cat $_rump_server_ifaces | while read sock ifname; do
+		export RUMP_SERVER=$sock
+		if rump.ifconfig -l |grep -q $ifname; then
+			atf_check -s exit:0 rump.ifconfig $ifname destroy
+		fi
+		atf_check -s exit:0 -o ignore rump.ifconfig
+	done
+	export RUMP_SERVER=$backup
+
+	return 0
+}
+
+rump_server_halt_servers()
+{
+	local backup=$RUMP_SERVER
+
+	$DEBUG && cat $_rump_server_socks
+	for sock in $(cat $_rump_server_socks); do
+		env RUMP_SERVER=$sock rump.halt
+	done
+	export RUMP_SERVER=$backup
+
+	return 0
+}
+
+rump_server_dump_servers()
+{
+	local backup=$RUMP_SERVER
+
+	$DEBUG && cat $_rump_server_socks
+	for sock in $(cat $_rump_server_socks); do
+		echo "### Dumping $sock"
+		export RUMP_SERVER=$sock
+		rump.ifconfig
+		rump.netstat -nr
+		rump.arp -na
+		rump.ndp -na
+		$HIJACKING dmesg
+	done
+	export RUMP_SERVER=$backup
+
+	if [ -f rump_server.core ]; then
+		gdb -ex bt /usr/bin/rump_server rump_server.core
+		strings rump_server.core |grep panic
+	fi
+	return 0
+}
+
+rump_server_dump_buses()
+{
+
+	$DEBUG && cat $_rump_server_buses
+	for bus in $(cat $_rump_server_buses); do
+		echo "### Dumping $bus"
+		shmif_dumpbus -p - $bus 2>/dev/null| tcpdump -n -e -r -
+	done
+	return 0
+}
+
+cleanup()
+{
+
+	rump_server_halt_servers
+}
+
+dump()
+{
+
+	rump_server_dump_servers
+	rump_server_dump_buses
+}

Index: src/tests/net/arp/t_arp.sh
diff -u src/tests/net/arp/t_arp.sh:1.21 src/tests/net/arp/t_arp.sh:1.22
--- src/tests/net/arp/t_arp.sh:1.21	Thu Nov 24 09:07:09 2016
+++ src/tests/net/arp/t_arp.sh	Fri Nov 25 08:51:16 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_arp.sh,v 1.21 2016/11/24 09:07:09 ozaki-r Exp $
+#	$NetBSD: t_arp.sh,v 1.22 2016/11/25 08:51:16 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -25,9 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-inetlib="-lrumpnet_shmif -lrumpnet_tap -lrumpnet -lrumpnet_net -lrumpnet_netinet"
-inetserver="rump_server $inetlib -lrumpdev"
-
 SOCKSRC=unix://commsock1
 SOCKDST=unix://commsock2
 IP4SRC=10.0.1.1
@@ -105,9 +102,9 @@ arp_static_head()
 
 setup_dst_server()
 {
+
+	rump_server_add_iface $SOCKDST shmif0 bus1
 	export RUMP_SERVER=$SOCKDST
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
 	atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4DST/24
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 	atf_check -s exit:0 rump.ifconfig -w 10
@@ -126,8 +123,7 @@ setup_src_server()
 	atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.arp.keep=$keep
 
 	# Setup an interface
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
+	rump_server_add_iface $SOCKSRC shmif0 bus1
 	atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4SRC/24
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 	atf_check -s exit:0 rump.ifconfig -w 10
@@ -144,8 +140,8 @@ test_cache_expiration()
 	local arp_keep=$1
 	local bonus=2
 
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+	rump_server_start $SOCKSRC
+	rump_server_start $SOCKDST
 
 	setup_dst_server
 	setup_src_server $arp_keep
@@ -171,12 +167,16 @@ test_cache_expiration()
 
 arp_cache_expiration_5s_body()
 {
+
 	test_cache_expiration 5
+	rump_server_destroy_ifaces
 }
 
 arp_cache_expiration_10s_body()
 {
+
 	test_cache_expiration 10
+	rump_server_destroy_ifaces
 }
 
 arp_command_body()
@@ -184,8 +184,8 @@ arp_command_body()
 	local arp_keep=5
 	local bonus=2
 
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+	rump_server_start $SOCKSRC
+	rump_server_start $SOCKDST
 
 	setup_dst_server
 	setup_src_server $arp_keep
@@ -256,7 +256,7 @@ arp_command_body()
 	$DEBUG && rump.arp -n -a
 	#atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.10
 
-	return 0
+	rump_server_destroy_ifaces
 }
 
 make_pkt_str_arpreq()
@@ -272,12 +272,12 @@ arp_garp_body()
 {
 	local pkt=
 
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
+	rump_server_start $SOCKSRC
+
 	export RUMP_SERVER=$SOCKSRC
 
 	# Setup an interface
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
+	rump_server_add_iface $SOCKSRC shmif0 bus1
 	atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.1/24
 	atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.2/24 alias
 	atf_check -s exit:0 rump.ifconfig shmif0 up
@@ -303,6 +303,8 @@ arp_garp_body()
 	atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
 	pkt=$(make_pkt_str_arpreq 10.0.0.4 10.0.0.4)
 	atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+	rump_server_destroy_ifaces
 }
 
 arp_cache_overwriting_body()
@@ -310,8 +312,8 @@ arp_cache_overwriting_body()
 	local arp_keep=5
 	local bonus=2
 
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+	rump_server_start $SOCKSRC
+	rump_server_start $SOCKDST
 
 	setup_dst_server
 	setup_src_server $arp_keep
@@ -340,7 +342,7 @@ arp_cache_overwriting_body()
 	atf_check -s exit:0 -o match:'b2:a0:20:00:00:ff' rump.arp -n 10.0.1.10
 	$DEBUG && rump.arp -n -a
 
-	return 0
+	rump_server_destroy_ifaces
 }
 
 make_pkt_str_arprep()
@@ -368,8 +370,8 @@ test_proxy_arp()
 	local opts= title= flags=
 	local type=$1
 
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+	rump_server_start $SOCKSRC
+	rump_server_start $SOCKDST tap
 
 	setup_dst_server
 	setup_src_server $arp_keep
@@ -466,12 +468,14 @@ arp_proxy_arp_pub_body()
 {
 
 	test_proxy_arp pub
+	rump_server_destroy_ifaces
 }
 
 arp_proxy_arp_pubproxy_body()
 {
 
 	test_proxy_arp pubproxy
+	rump_server_destroy_ifaces
 }
 
 arp_link_activation_body()
@@ -479,8 +483,8 @@ arp_link_activation_body()
 	local arp_keep=5
 	local bonus=2
 
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+	rump_server_start $SOCKSRC
+	rump_server_start $SOCKDST
 
 	setup_dst_server
 	setup_src_server $arp_keep
@@ -510,6 +514,8 @@ arp_link_activation_body()
 	pkt=$(make_pkt_str_arpreq $IP4SRC $IP4SRC)
 	atf_check -s exit:0 -x \
 	    "cat ./out |grep '$pkt' |grep -q 'b2:a1:00:00:00:02'"
+
+	rump_server_destroy_ifaces
 }
 
 arp_static_body()
@@ -517,8 +523,8 @@ arp_static_body()
 	local arp_keep=5
 	local macaddr_src=
 
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+	rump_server_start $SOCKSRC
+	rump_server_start $SOCKDST
 
 	setup_dst_server
 	setup_src_server $arp_keep
@@ -534,37 +540,8 @@ arp_static_body()
 	# Test receiving an ARP request with the static ARP entry (as spa/sha)
 	export RUMP_SERVER=$SOCKSRC
 	atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 $IP4DST
-}
-
-cleanup()
-{
-	env RUMP_SERVER=$SOCKSRC rump.halt
-	env RUMP_SERVER=$SOCKDST rump.halt
-}
 
-dump_src()
-{
-	export RUMP_SERVER=$SOCKSRC
-	rump.netstat -nr
-	rump.arp -n -a
-	rump.ifconfig
-	$HIJACKING dmesg
-}
-
-dump_dst()
-{
-	export RUMP_SERVER=$SOCKDST
-	rump.netstat -nr
-	rump.arp -n -a
-	rump.ifconfig
-	$HIJACKING dmesg
-}
-
-dump()
-{
-	dump_src
-	dump_dst
-	shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
+	rump_server_destroy_ifaces
 }
 
 arp_cache_expiration_5s_cleanup()
@@ -587,9 +564,8 @@ arp_command_cleanup()
 
 arp_garp_cleanup()
 {
-	$DEBUG && dump_src
-	$DEBUG && shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
-	env RUMP_SERVER=$SOCKSRC rump.halt
+	$DEBUG && dump
+	cleanup
 }
 
 arp_cache_overwriting_cleanup()

Index: src/tests/net/arp/t_dad.sh
diff -u src/tests/net/arp/t_dad.sh:1.12 src/tests/net/arp/t_dad.sh:1.13
--- src/tests/net/arp/t_dad.sh:1.12	Thu Nov 24 11:34:51 2016
+++ src/tests/net/arp/t_dad.sh	Fri Nov 25 08:51:16 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_dad.sh,v 1.12 2016/11/24 11:34:51 ozaki-r Exp $
+#	$NetBSD: t_dad.sh,v 1.13 2016/11/25 08:51:16 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -25,9 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif"
-inetserver="${inetserver} -lrumpdev"
-
 SOCKLOCAL=unix://commsock1
 SOCKPEER=unix://commsock2
 
@@ -53,10 +50,9 @@ setup_server()
 	local sock=$1
 	local ip=$2
 
-	export RUMP_SERVER=$sock
+	rump_server_add_iface $sock shmif0 bus1
 
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
+	export RUMP_SERVER=$sock
 	atf_check -s exit:0 rump.ifconfig shmif0 inet $ip/24
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 	atf_check -s exit:0 rump.ifconfig -w 10
@@ -77,11 +73,11 @@ dad_basic_body()
 {
 	local pkt=
 
-	atf_check -s exit:0 ${inetserver} $SOCKLOCAL
+	rump_server_start $SOCKLOCAL
+	rump_server_add_iface $SOCKLOCAL shmif0 bus1
+
 	export RUMP_SERVER=$SOCKLOCAL
 
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
 	atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.1/24
 	atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.2/24 alias
 	$DEBUG && rump.ifconfig shmif0
@@ -148,6 +144,8 @@ dad_basic_body()
 	atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
 	# The new address left tentative
 	atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep 10.0.0.3 |grep -iq tentative"
+
+	rump_server_destroy_ifaces
 }
 
 dad_duplicated_body()
@@ -156,8 +154,8 @@ dad_duplicated_body()
 	local localip2=10.0.1.11
 	local peerip=10.0.1.2
 
-	atf_check -s exit:0 ${inetserver} $SOCKLOCAL
-	atf_check -s exit:0 ${inetserver} $SOCKPEER
+	rump_server_start $SOCKLOCAL
+	rump_server_start $SOCKPEER
 
 	setup_server $SOCKLOCAL $localip1
 	setup_server $SOCKPEER $peerip
@@ -180,44 +178,14 @@ dad_duplicated_body()
 	atf_check -s exit:0 rump.ifconfig shmif0 inet $localip2 alias
 	atf_check -s exit:0 sleep 1
 	atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip2 |grep -iq duplicated"
-}
 
-cleanup()
-{
-	env RUMP_SERVER=$SOCKLOCAL rump.halt
-	env RUMP_SERVER=$SOCKPEER rump.halt
-}
-
-dump_local()
-{
-	export RUMP_SERVER=$SOCKLOCAL
-	rump.netstat -nr
-	rump.arp -n -a
-	rump.ifconfig
-	$HIJACKING dmesg
-}
-
-dump_peer()
-{
-	export RUMP_SERVER=$SOCKPEER
-	rump.netstat -nr
-	rump.arp -n -a
-	rump.ifconfig
-	$HIJACKING dmesg
-}
-
-dump()
-{
-	dump_local
-	dump_peer
-	shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
+	rump_server_destroy_ifaces
 }
 
 dad_basic_cleanup()
 {
-	$DEBUG && dump_local
-	$DEBUG && shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
-	env RUMP_SERVER=$SOCKLOCAL rump.halt
+	$DEBUG && dump
+	cleanup
 }
 
 dad_duplicated_cleanup()

Index: src/tests/net/icmp/t_icmp6_redirect.sh
diff -u src/tests/net/icmp/t_icmp6_redirect.sh:1.6 src/tests/net/icmp/t_icmp6_redirect.sh:1.7
--- src/tests/net/icmp/t_icmp6_redirect.sh:1.6	Thu Nov 24 09:06:09 2016
+++ src/tests/net/icmp/t_icmp6_redirect.sh	Fri Nov 25 08:51:16 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_icmp6_redirect.sh,v 1.6 2016/11/24 09:06:09 ozaki-r Exp $
+#	$NetBSD: t_icmp6_redirect.sh,v 1.7 2016/11/25 08:51:16 ozaki-r Exp $
 #
 # Copyright (c) 2015 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -24,8 +24,6 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 #
-netserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_shmif"
-netserver="${netserver} -lrumpnet_netinet -lrumpnet_netinet6 -lrumpdev"
 
 SOCK_LOCAL=unix://commsock1
 SOCK_PEER=unix://commsock2
@@ -61,23 +59,21 @@ icmp6_redirect_basic_body()
 	local gw1_lladdr1=
 	local gw2_lladdr0=
 
-	atf_check -s exit:0 ${netserver} ${SOCK_LOCAL}
-	atf_check -s exit:0 ${netserver} ${SOCK_PEER}
-	atf_check -s exit:0 ${netserver} ${SOCK_GW1}
-	atf_check -s exit:0 ${netserver} ${SOCK_GW2}
+	rump_server_start $SOCK_LOCAL netinet6
+	rump_server_start $SOCK_PEER netinet6
+	rump_server_start $SOCK_GW1 netinet6
+	rump_server_start $SOCK_GW2 netinet6
 
 	#
 	# Setup
 	#
 	# Setup gateway #1 (real gateway)
 	export RUMP_SERVER=${SOCK_GW1}
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${BUS1}
+	rump_server_add_iface $SOCK_GW1 shmif0 $BUS1
+	rump_server_add_iface $SOCK_GW1 shmif1 $BUS2
+
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_GW1}
 	atf_check -s exit:0 rump.ifconfig shmif0 up
-
-	atf_check -s exit:0 rump.ifconfig shmif1 create
-	atf_check -s exit:0 rump.ifconfig shmif1 linkstr ${BUS2}
 	atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6IF1_GW1}
 	atf_check -s exit:0 rump.ifconfig shmif1 up
 
@@ -90,8 +86,7 @@ icmp6_redirect_basic_body()
 
 	# Setup a peer behind gateway #1
 	export RUMP_SERVER=${SOCK_PEER}
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${BUS2}
+	rump_server_add_iface $SOCK_PEER shmif0 $BUS2
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_PEER}
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 	atf_check -s exit:0 -o ignore rump.route add \
@@ -100,8 +95,7 @@ icmp6_redirect_basic_body()
 
 	# Setup gateway #2 (fake gateway)
 	export RUMP_SERVER=${SOCK_GW2}
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${BUS1}
+	rump_server_add_iface $SOCK_GW2 shmif0 $BUS1
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_GW2}
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 
@@ -114,8 +108,7 @@ icmp6_redirect_basic_body()
 	gw2_lladdr0=`get_linklocal_addr ${SOCK_GW2} shmif0`
 
 	export RUMP_SERVER=${SOCK_LOCAL}
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${BUS1}
+	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS1
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_LOCAL}
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 
@@ -142,16 +135,14 @@ icmp6_redirect_basic_body()
 	atf_check -s exit:0 -o not-match:"gateway: ${gw1_lladdr0}" rump.route get \
 	    -inet6 ${IP6IF0_PEER}
 
-	unset RUMP_SERVER
+	rump_server_destroy_ifaces
 }
 
 icmp6_redirect_basic_cleanup()
 {
 
-	env RUMP_SERVER=$SOCK_LOCAL rump.halt
-	env RUMP_SERVER=$SOCK_PEER rump.halt
-	env RUMP_SERVER=$SOCK_GW1 rump.halt
-	env RUMP_SERVER=$SOCK_GW2 rump.halt
+	$DEBUG && dump
+	cleanup
 }
 
 atf_init_test_cases()

Index: src/tests/net/icmp/t_icmp_redirect.sh
diff -u src/tests/net/icmp/t_icmp_redirect.sh:1.5 src/tests/net/icmp/t_icmp_redirect.sh:1.6
--- src/tests/net/icmp/t_icmp_redirect.sh:1.5	Thu Nov 24 09:05:16 2016
+++ src/tests/net/icmp/t_icmp_redirect.sh	Fri Nov 25 08:51:16 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_icmp_redirect.sh,v 1.5 2016/11/24 09:05:16 ozaki-r Exp $
+#	$NetBSD: t_icmp_redirect.sh,v 1.6 2016/11/25 08:51:16 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -27,8 +27,6 @@
 
 # Most codes are derived from tests/net/route/t_flags.sh
 
-netserver=\
-"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpdev"
 SOCK_LOCAL=unix://commsock1
 SOCK_PEER=unix://commsock2
 SOCK_GW=unix://commsock3
@@ -50,11 +48,10 @@ icmp_redirect_timeout_head()
 setup_local()
 {
 
-	atf_check -s exit:0 ${netserver} ${SOCK_LOCAL}
+	rump_server_start $SOCK_LOCAL
+	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
 
 	export RUMP_SERVER=$SOCK_LOCAL
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr ${BUS}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.2/24
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
 
@@ -68,11 +65,10 @@ setup_local()
 setup_peer()
 {
 
-	atf_check -s exit:0 ${netserver} ${SOCK_PEER}
+	rump_server_start $SOCK_PEER
+	rump_server_add_iface $SOCK_PEER shmif0 $BUS
 
 	export RUMP_SERVER=$SOCK_PEER
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr ${BUS}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.1/24
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
 
@@ -83,16 +79,14 @@ setup_peer()
 setup_gw()
 {
 
-	atf_check -s exit:0 ${netserver} ${SOCK_GW}
+	rump_server_start $SOCK_GW
+	rump_server_add_iface $SOCK_GW shmif0 $BUS
+	rump_server_add_iface $SOCK_GW shmif1 $BUS2
 
 	export RUMP_SERVER=$SOCK_GW
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr ${BUS}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.254/24
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
 
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 linkstr ${BUS2}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 10.0.2.1/24
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 alias 10.0.2.2/24
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up
@@ -105,12 +99,6 @@ setup_gw()
 	$DEBUG && rump.netstat -rn -f inet
 }
 
-teardown_gw()
-{
-
-	env RUMP_SERVER=$SOCK_GW rump.halt
-}
-
 icmp_redirect_timeout_body()
 {
 
@@ -158,21 +146,7 @@ icmp_redirect_timeout_body()
 	export RUMP_SERVER=$SOCK_PEER
 	$DEBUG && rump.netstat -rn -f inet
 
-	teardown_gw
-}
-
-dump()
-{
-
-	shmif_dumpbus -p - $BUS 2>/dev/null | tcpdump -n -e -r -
-	gdb -ex bt /usr/bin/rump_server rump_server.core
-}
-
-cleanup()
-{
-
-	env RUMP_SERVER=$SOCK_LOCAL rump.halt
-	env RUMP_SERVER=$SOCK_PEER rump.halt
+	rump_server_destroy_ifaces
 }
 
 icmp_redirect_timeout_cleanup()
@@ -293,8 +267,7 @@ icmp_redirect_body()
 	# A direct route shouldn't be created
 	check_route_no_entry 10.0.2.1
 
-
-	teardown_gw
+	rump_server_destroy_ifaces
 }
 
 icmp_redirect_cleanup()

Index: src/tests/net/if_bridge/t_bridge.sh
diff -u src/tests/net/if_bridge/t_bridge.sh:1.15 src/tests/net/if_bridge/t_bridge.sh:1.16
--- src/tests/net/if_bridge/t_bridge.sh:1.15	Fri Nov 25 08:10:50 2016
+++ src/tests/net/if_bridge/t_bridge.sh	Fri Nov 25 08:51:16 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_bridge.sh,v 1.15 2016/11/25 08:10:50 ozaki-r Exp $
+#	$NetBSD: t_bridge.sh,v 1.16 2016/11/25 08:51:16 ozaki-r Exp $
 #
 # Copyright (c) 2014 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -25,13 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-libs1="-lrumpnet -lrumpnet_net -lrumpnet_netinet"
-libs2="-lrumpnet_bridge -lrumpnet_shmif -lrumpdev"
-libs6="-lrumpnet_netinet6"
-
-inetserver="rump_server ${libs1} ${libs2}"
-inet6server="rump_server ${libs1} ${libs6} ${libs2}"
-
 SOCK1=unix://commsock1
 SOCK2=unix://commsock2
 SOCK3=unix://commsock3
@@ -90,9 +83,8 @@ setup_endpoint()
 	bus=${3}
 	mode=${4}
 
+	rump_server_add_iface $sock shmif0 $bus
 	export RUMP_SERVER=${sock}
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${bus}
 	if [ $mode = "ipv6" ]; then
 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
 	else
@@ -141,21 +133,20 @@ test_setup6()
 
 setup_bridge_server()
 {
+
+	rump_server_add_iface $SOCK2 shmif0 bus1
+	rump_server_add_iface $SOCK2 shmif1 bus2
 	export RUMP_SERVER=$SOCK2
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
 	atf_check -s exit:0 rump.ifconfig shmif0 up
-
-	atf_check -s exit:0 rump.ifconfig shmif1 create
-	atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus2
 	atf_check -s exit:0 rump.ifconfig shmif1 up
 }
 
 setup()
 {
-	atf_check -s exit:0 ${inetserver} $SOCK1
-	atf_check -s exit:0 ${inetserver} $SOCK2
-	atf_check -s exit:0 ${inetserver} $SOCK3
+
+	rump_server_start $SOCK1 bridge
+	rump_server_start $SOCK2 bridge
+	rump_server_start $SOCK3 bridge
 
 	setup_endpoint $SOCK1 $IP1 bus1 ipv4
 	setup_endpoint $SOCK3 $IP2 bus2 ipv4
@@ -164,9 +155,10 @@ setup()
 
 setup6()
 {
-	atf_check -s exit:0 ${inet6server} $SOCK1
-	atf_check -s exit:0 ${inet6server} $SOCK2
-	atf_check -s exit:0 ${inet6server} $SOCK3
+
+	rump_server_start $SOCK1 netinet6 bridge
+	rump_server_start $SOCK2 netinet6 bridge
+	rump_server_start $SOCK3 netinet6 bridge
 
 	setup_endpoint $SOCK1 $IP61 bus1 ipv6
 	setup_endpoint $SOCK3 $IP62 bus2 ipv6
@@ -237,19 +229,6 @@ test_setup_bridge()
 	unset LD_PRELOAD
 }
 
-cleanup()
-{
-	env RUMP_SERVER=$SOCK1 rump.halt
-	env RUMP_SERVER=$SOCK2 rump.halt
-	env RUMP_SERVER=$SOCK3 rump.halt
-}
-
-dump_bus()
-{
-	/usr/bin/shmif_dumpbus -p - bus1 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
-	/usr/bin/shmif_dumpbus -p - bus2 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
-}
-
 down_up_interfaces()
 {
 	export RUMP_SERVER=$SOCK1
@@ -412,6 +391,8 @@ bridge_ipv4_body()
 
 	teardown_bridge
 	test_ping_failure
+
+	rump_server_destroy_ifaces
 }
 
 bridge_ipv6_body()
@@ -428,6 +409,8 @@ bridge_ipv6_body()
 
 	teardown_bridge
 	test_ping6_failure
+
+	rump_server_destroy_ifaces
 }
 
 bridge_rtable_body()
@@ -498,6 +481,8 @@ bridge_rtable_body()
 	# TODO: brconfig static/flushall/discover/learn
 	# TODO: cache expiration; it takes 5 minutes at least and we want to
 	#       wait here so long. Should we have a sysctl to change the period?
+
+	rump_server_destroy_ifaces
 }
 
 bridge_member_ipv4_body()
@@ -518,6 +503,8 @@ bridge_member_ipv4_body()
 
 	teardown_bridge
 	test_ping_failure
+
+	rump_server_destroy_ifaces
 }
 
 bridge_member_ipv6_body()
@@ -537,35 +524,42 @@ bridge_member_ipv6_body()
 
 	teardown_bridge
 	test_ping6_failure
+
+	rump_server_destroy_ifaces
 }
 
 bridge_ipv4_cleanup()
 {
-	dump_bus
+
+	$DEBUG && dump
 	cleanup
 }
 
 bridge_ipv6_cleanup()
 {
-	dump_bus
+
+	$DEBUG && dump
 	cleanup
 }
 
 bridge_rtable_cleanup()
 {
-	dump_bus
+
+	$DEBUG && dump
 	cleanup
 }
 
 bridge_member_ipv4_cleanup()
 {
-	dump_bus
+
+	$DEBUG && dump
 	cleanup
 }
 
 bridge_member_ipv6_cleanup()
 {
-	dump_bus
+
+	$DEBUG && dump
 	cleanup
 }
 

Index: src/tests/net/if_gif/t_gif.sh
diff -u src/tests/net/if_gif/t_gif.sh:1.7 src/tests/net/if_gif/t_gif.sh:1.8
--- src/tests/net/if_gif/t_gif.sh:1.7	Thu Nov 24 09:03:53 2016
+++ src/tests/net/if_gif/t_gif.sh	Fri Nov 25 08:51:16 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_gif.sh,v 1.7 2016/11/24 09:03:53 ozaki-r Exp $
+#	$NetBSD: t_gif.sh,v 1.8 2016/11/25 08:51:16 ozaki-r Exp $
 #
 # Copyright (c) 2015 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -25,9 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-server="rump_server -v -lrumpdev -lrumpnet -lrumpnet_net -lrumpnet_netinet \
-		    -lrumpnet_netinet6 -lrumpnet_shmif -lrumpnet_gif"
-
 SOCK1=unix://commsock1 # for ROUTER1
 SOCK2=unix://commsock2 # for ROUTER2
 ROUTER1_LANIP=192.168.1.1
@@ -64,6 +61,7 @@ ROUTER2_GIFIP6_DUMMY=fc00:14::1
 ROUTER2_GIFIP6_RECURSIVE1=fc00:104::1
 ROUTER2_GIFIP6_RECURSIVE2=fc00:204::1
 
+DEBUG=${DEBUG:-false}
 TIMEOUT=5
 
 setup_router()
@@ -74,9 +72,10 @@ setup_router()
 	wan=${4}
 	wan_mode=${5}
 
+	rump_server_add_iface $sock shmif0 bus0
+	rump_server_add_iface $sock shmif1 bus1
+
 	export RUMP_SERVER=${sock}
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus0
 	if [ ${lan_mode} = "ipv6" ]; then
 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${lan}
 	else
@@ -85,8 +84,6 @@ setup_router()
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 	rump.ifconfig shmif0
 
-	atf_check -s exit:0 rump.ifconfig shmif1 create
-	atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus1
 	if [ ${wan_mode} = "ipv6" ]; then
 		atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${wan}
 	else
@@ -125,8 +122,8 @@ setup()
 	inner=${1}
 	outer=${2}
 
-	atf_check -s exit:0 ${server} $SOCK1
-	atf_check -s exit:0 ${server} $SOCK2
+	rump_server_start $SOCK1 netinet6 gif
+	rump_server_start $SOCK2 netinet6 gif
 
 	router1_lan=""
 	router1_lan_mode=""
@@ -481,18 +478,6 @@ teardown_recursive_tunnels()
 	atf_check -s exit:0 rump.ifconfig gif2 destroy
 }
 
-cleanup()
-{
-	env RUMP_SERVER=$SOCK1 rump.halt
-	env RUMP_SERVER=$SOCK2 rump.halt
-}
-
-dump_bus()
-{
-	/usr/bin/shmif_dumpbus -p - bus0 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
-	/usr/bin/shmif_dumpbus -p - bus1 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
-}
-
 test_ping_failure()
 {
 	mode=$1
@@ -750,9 +735,10 @@ add_test()
 			${category}_setup ${inner} ${outer}; \
 			${category}_test ${inner} ${outer}; \
 			${category}_teardown ${inner} ${outer}; \
+			rump_server_destroy_ifaces; \
 	    }; \
 	    ${name}_cleanup() { \
-			dump_bus; \
+			$DEBUG && dump; \
 			cleanup; \
 		}"
 	atf_add_test_case ${name}

Index: src/tests/net/if_tap/Makefile
diff -u src/tests/net/if_tap/Makefile:1.1 src/tests/net/if_tap/Makefile:1.2
--- src/tests/net/if_tap/Makefile:1.1	Fri Mar  4 02:44:45 2016
+++ src/tests/net/if_tap/Makefile	Fri Nov 25 08:51:16 2016
@@ -1,10 +1,13 @@
-# $NetBSD: Makefile,v 1.1 2016/03/04 02:44:45 ozaki-r Exp $
+# $NetBSD: Makefile,v 1.2 2016/11/25 08:51:16 ozaki-r Exp $
 #
 
 .include <bsd.own.mk>
 
 TESTSDIR=	${TESTSBASE}/net/if_tap
 
-TESTS_SH=	t_tap
+.for name in tap
+TESTS_SH+=		t_${name}
+TESTS_SH_SRC_t_${name}=	../net_common.sh t_${name}.sh
+.endfor
 
 .include <bsd.test.mk>

Index: src/tests/net/if_tap/t_tap.sh
diff -u src/tests/net/if_tap/t_tap.sh:1.5 src/tests/net/if_tap/t_tap.sh:1.6
--- src/tests/net/if_tap/t_tap.sh:1.5	Thu Nov 24 09:03:53 2016
+++ src/tests/net/if_tap/t_tap.sh	Fri Nov 25 08:51:16 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_tap.sh,v 1.5 2016/11/24 09:03:53 ozaki-r Exp $
+#	$NetBSD: t_tap.sh,v 1.6 2016/11/25 08:51:16 ozaki-r Exp $
 #
 # Copyright (c) 2016 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -25,9 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-RUMP_FLAGS="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6"
-RUMP_FLAGS="$RUMP_FLAGS -lrumpnet_shmif -lrumpnet_tap -lrumpnet_bridge -lrumpdev"
-
 SOCK_LOCAL=unix://commsock1
 SOCK_REMOTE=unix://commsock2
 BUS=bus1
@@ -52,7 +49,7 @@ tap_create_destroy_head()
 tap_create_destroy_body()
 {
 
-	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_LOCAL}
+	rump_server_start $SOCK_LOCAL netinet6 tap
 
 	export RUMP_SERVER=${SOCK_LOCAL}
 
@@ -76,7 +73,8 @@ tap_create_destroy_body()
 tap_create_destroy_cleanup()
 {
 
-	RUMP_SERVER=${SOCK_LOCAL} rump.halt
+	$DEBUG && dump
+	cleanup
 }
 
 atf_test_case tap_stand_alone cleanup
@@ -89,13 +87,14 @@ tap_create_destroy_head()
 
 tap_stand_alone_body()
 {
-	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_LOCAL}
-	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_REMOTE}
 
-	export RUMP_SERVER=${SOCK_LOCAL}
+	rump_server_start $SOCK_LOCAL netinet6 tap
+	rump_server_start $SOCK_REMOTE netinet6 tap
 
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
+	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
+
+	export RUMP_SERVER=${SOCK_LOCAL}
 	atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL
 	atf_check -s exit:0 rump.ifconfig shmif0 up
@@ -107,8 +106,6 @@ tap_stand_alone_body()
 
 	export RUMP_SERVER=${SOCK_REMOTE}
 
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
 	atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE
 	atf_check -s exit:0 rump.ifconfig shmif0 up
@@ -123,13 +120,15 @@ tap_stand_alone_body()
 	# Cannot reach to an alone tap
 	atf_check -s not-exit:0 -o ignore -e ignore \
 	    rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP
+
+	rump_server_destroy_ifaces
 }
 
 tap_stand_alone_cleanup()
 {
 
-	RUMP_SERVER=${SOCK_LOCAL} rump.halt
-	RUMP_SERVER=${SOCK_REMOTE} rump.halt
+	$DEBUG && dump
+	cleanup
 }
 
 atf_test_case tap_bridged cleanup
@@ -142,13 +141,15 @@ tap_bridged_head()
 
 tap_bridged_body()
 {
-	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_LOCAL}
-	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_REMOTE}
+
+	rump_server_start $SOCK_LOCAL netinet6 tap bridge
+	rump_server_start $SOCK_REMOTE netinet6 tap
+
+	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
 
 	export RUMP_SERVER=${SOCK_LOCAL}
 
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
 	atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL
 	atf_check -s exit:0 rump.ifconfig shmif0 up
@@ -167,8 +168,6 @@ tap_bridged_body()
 
 	export RUMP_SERVER=${SOCK_REMOTE}
 
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
 	atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE
 	atf_check -s exit:0 rump.ifconfig shmif0 up
@@ -179,13 +178,15 @@ tap_bridged_body()
 
 	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
 }
 
 tap_bridged_cleanup()
 {
 
-	RUMP_SERVER=${SOCK_LOCAL} rump.halt
-	RUMP_SERVER=${SOCK_REMOTE} rump.halt
+	$DEBUG && dump
+	cleanup
 }
 
 atf_init_test_cases()

Index: src/tests/net/mcast/Makefile
diff -u src/tests/net/mcast/Makefile:1.2 src/tests/net/mcast/Makefile:1.3
--- src/tests/net/mcast/Makefile:1.2	Tue May 26 00:42:07 2015
+++ src/tests/net/mcast/Makefile	Fri Nov 25 08:51:16 2016
@@ -1,11 +1,14 @@
-# $NetBSD: Makefile,v 1.2 2015/05/26 00:42:07 ozaki-r Exp $
+# $NetBSD: Makefile,v 1.3 2016/11/25 08:51:16 ozaki-r Exp $
 #
 
 .include <bsd.own.mk>
 
 TESTSDIR=	${TESTSBASE}/net/mcast
 
-TESTS_SH=	t_mcast
+.for name in mcast
+TESTS_SH+=		t_${name}
+TESTS_SH_SRC_t_${name}=	../net_common.sh t_${name}.sh
+.endfor
 
 PROGS=		mcast
 MAN.mcast=	# empty

Index: src/tests/net/mcast/t_mcast.sh
diff -u src/tests/net/mcast/t_mcast.sh:1.3 src/tests/net/mcast/t_mcast.sh:1.4
--- src/tests/net/mcast/t_mcast.sh:1.3	Mon Nov  7 05:25:37 2016
+++ src/tests/net/mcast/t_mcast.sh	Fri Nov 25 08:51:16 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_mcast.sh,v 1.3 2016/11/07 05:25:37 ozaki-r Exp $
+#	$NetBSD: t_mcast.sh,v 1.4 2016/11/25 08:51:16 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -25,9 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-netserver="rump_server -lrumpnet -lrumpnet_net"
-netserver="$netserver -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_shmif"
-netserver="$netserver -lrumpdev"
 export RUMP_SERVER=unix://commsock
 
 DEBUG=${DEBUG:-false}
@@ -38,9 +35,8 @@ run_test()
 	local opts="$2"
 	local mcast="$(atf_get_srcdir)/mcast"
 
-	atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
+	rump_server_start $RUMP_SERVER netinet6
+	rump_server_add_iface $RUMP_SERVER shmif0 bus1
 	atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.2/24
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2/64
 	atf_check -s exit:0 rump.ifconfig shmif0 up
@@ -79,11 +75,11 @@ add_test()
 		}; \
 	    mcast_${name}_body() { \
 			run_test \"${name}\" \"${opts}\"; \
+			rump_server_destroy_ifaces; \
 		}; \
 	    mcast_${name}_cleanup() { \
-			${DEBUG} && /usr/bin/shmif_dumpbus -p - bus1 2>/dev/null | \
-			/usr/sbin/tcpdump -n -e -r -; \
-			env RUMP_SERVER=unix://commsock rump.halt; \
+			${DEBUG} && dump; \
+			cleanup; \
 		}"
 	atf_add_test_case "mcast_${name}"
 }

Index: src/tests/net/ndp/t_dad.sh
diff -u src/tests/net/ndp/t_dad.sh:1.11 src/tests/net/ndp/t_dad.sh:1.12
--- src/tests/net/ndp/t_dad.sh:1.11	Thu Nov 24 09:03:53 2016
+++ src/tests/net/ndp/t_dad.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_dad.sh,v 1.11 2016/11/24 09:03:53 ozaki-r Exp $
+#	$NetBSD: t_dad.sh,v 1.12 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -25,10 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet"
-inetserver="$inetserver -lrumpnet_netinet6 -lrumpnet_shmif"
-inetserver="$inetserver -lrumpdev"
-
 SOCKLOCAL=unix://commsock1
 SOCKPEER=unix://commsock2
 
@@ -63,10 +59,9 @@ setup_server()
 	local sock=$1
 	local ip=$2
 
-	export RUMP_SERVER=$sock
+	rump_server_add_iface $sock shmif0 bus1
 
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
+	export RUMP_SERVER=$sock
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 	atf_check -s exit:0 rump.ifconfig -w 10
@@ -91,11 +86,10 @@ dad_basic_body()
 	local localip2=fc00::2
 	local localip3=fc00::3
 
-	atf_check -s exit:0 ${inetserver} $SOCKLOCAL
-	export RUMP_SERVER=$SOCKLOCAL
+	rump_server_start $SOCKLOCAL netinet6
+	rump_server_add_iface $SOCKLOCAL shmif0 bus1
 
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
+	export RUMP_SERVER=$SOCKLOCAL
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip1
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip2
 	$DEBUG && rump.ifconfig shmif0
@@ -156,6 +150,8 @@ dad_basic_body()
 
 	# The new address left tentative
 	atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip3 |grep -q tentative"
+
+	rump_server_destroy_ifaces
 }
 
 dad_duplicated_body()
@@ -164,8 +160,8 @@ dad_duplicated_body()
 	local localip2=fc00::11
 	local peerip=fc00::2
 
-	atf_check -s exit:0 ${inetserver} $SOCKLOCAL
-	atf_check -s exit:0 ${inetserver} $SOCKPEER
+	rump_server_start $SOCKLOCAL netinet6
+	rump_server_start $SOCKPEER netinet6
 
 	setup_server $SOCKLOCAL $localip1
 	setup_server $SOCKPEER $peerip
@@ -191,6 +187,8 @@ dad_duplicated_body()
 	atf_check -s exit:0 sleep 1
 	atf_check -s exit:0 -o not-match:"$localip2.+$duplicated" \
 	    rump.ifconfig shmif0
+
+	rump_server_destroy_ifaces
 }
 
 dad_count_test()
@@ -225,15 +223,15 @@ dad_count_body()
 	local localip1=fc00::1
 	local localip2=fc00::2
 
-	atf_check -s exit:0 ${inetserver} $SOCKLOCAL
+	rump_server_start $SOCKLOCAL netinet6
+	rump_server_add_iface $SOCKLOCAL shmif0 bus1
+
 	export RUMP_SERVER=$SOCKLOCAL
 
 	# Check default value
 	atf_check -s exit:0 -o match:"1" rump.sysctl -n net.inet6.ip6.dad_count
 
 	# Setup interface
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 	atf_check -s exit:0 sleep 2
 	rump.ifconfig shmif0 > ./out
@@ -248,46 +246,14 @@ dad_count_body()
 	# Set and test DAD count (count=8)
 	#
 	dad_count_test 8 2 $localip2
-}
-
-cleanup()
-{
-	gdb -ex bt /usr/bin/rump_server rump_server.core
-	gdb -ex bt /usr/sbin/arp arp.core
-	env RUMP_SERVER=$SOCKLOCAL rump.halt
-	env RUMP_SERVER=$SOCKPEER rump.halt
-}
 
-dump_local()
-{
-	export RUMP_SERVER=$SOCKLOCAL
-	rump.netstat -nr
-	rump.arp -n -a
-	rump.ifconfig
-	$HIJACKING dmesg
-}
-
-dump_peer()
-{
-	export RUMP_SERVER=$SOCKPEER
-	rump.netstat -nr
-	rump.arp -n -a
-	rump.ifconfig
-	$HIJACKING dmesg
-}
-
-dump()
-{
-	dump_local
-	dump_peer
-	shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
+	rump_server_destroy_ifaces
 }
 
 dad_basic_cleanup()
 {
-	$DEBUG && dump_local
-	$DEBUG && shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
-	env RUMP_SERVER=$SOCKLOCAL rump.halt
+	$DEBUG && dump
+	cleanup
 }
 
 dad_duplicated_cleanup()
@@ -298,9 +264,8 @@ dad_duplicated_cleanup()
 
 dad_count_cleanup()
 {
-	$DEBUG && dump_local
-	$DEBUG && shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
-	env RUMP_SERVER=$SOCKLOCAL rump.halt
+	$DEBUG && dump
+	cleanup
 }
 
 atf_init_test_cases()

Index: src/tests/net/ndp/t_ndp.sh
diff -u src/tests/net/ndp/t_ndp.sh:1.16 src/tests/net/ndp/t_ndp.sh:1.17
--- src/tests/net/ndp/t_ndp.sh:1.16	Thu Nov 24 09:03:53 2016
+++ src/tests/net/ndp/t_ndp.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_ndp.sh,v 1.16 2016/11/24 09:03:53 ozaki-r Exp $
+#	$NetBSD: t_ndp.sh,v 1.17 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -25,10 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet"
-inetserver="$inetserver -lrumpnet_netinet6 -lrumpnet_shmif"
-inetserver="$inetserver -lrumpdev"
-
 SOCKSRC=unix://commsock1
 SOCKDST=unix://commsock2
 IP6SRC=fc00::1
@@ -77,9 +73,8 @@ setup_dst_server()
 {
 	local assign_ip=$1
 
+	rump_server_add_iface $SOCKDST shmif0 bus1
 	export RUMP_SERVER=$SOCKDST
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
 	if [ "$assign_ip" != no ]; then
 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6DST
 	fi
@@ -96,8 +91,7 @@ setup_src_server()
 	export RUMP_SERVER=$SOCKSRC
 
 	# Setup an interface
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
+	rump_server_add_iface $SOCKSRC shmif0 bus1
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6SRC
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 	atf_check -s exit:0 rump.ifconfig -w 10
@@ -118,8 +112,9 @@ get_timeout()
 
 ndp_cache_expiration_body()
 {
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+
+	rump_server_start $SOCKSRC netinet6
+	rump_server_start $SOCKDST netinet6
 
 	setup_dst_server
 	setup_src_server
@@ -143,6 +138,8 @@ ndp_cache_expiration_body()
 	atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC
 	# Expired but remains until GC sweaps it (1 day)
 	atf_check -s exit:0 -o match:'(1d0h0m|23h59m)' rump.ndp -n $IP6DST
+
+	rump_server_destroy_ifaces
 }
 
 ifdown_dst_server()
@@ -154,8 +151,9 @@ ifdown_dst_server()
 
 ndp_commands_body()
 {
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+
+	rump_server_start $SOCKSRC netinet6
+	rump_server_start $SOCKDST netinet6
 
 	setup_dst_server
 	setup_src_server
@@ -216,13 +214,14 @@ ndp_commands_body()
 	$DEBUG && rump.ndp -n -a
 	atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n fc00::10
 
-	return 0
+	rump_server_destroy_ifaces
 }
 
 ndp_cache_overwriting_body()
 {
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+
+	rump_server_start $SOCKSRC netinet6
+	rump_server_start $SOCKDST netinet6
 
 	setup_dst_server
 	setup_src_server
@@ -248,7 +247,7 @@ ndp_cache_overwriting_body()
 	#atf_check -s not-exit:0 -e ignore rump.ndp -s fc00::10 b2:a0:20:00:00:ff
 	#$DEBUG && rump.ndp -n -a
 
-	return 0
+	rump_server_destroy_ifaces
 }
 
 get_n_caches()
@@ -260,8 +259,8 @@ get_n_caches()
 ndp_neighborgcthresh_body()
 {
 
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+	rump_server_start $SOCKSRC netinet6
+	rump_server_start $SOCKDST netinet6
 
 	setup_dst_server no
 	setup_src_server
@@ -310,7 +309,7 @@ ndp_neighborgcthresh_body()
 		atf_fail "Neighbor caches are not GC-ed"
 	fi
 
-	return 0
+	rump_server_destroy_ifaces
 }
 
 make_pkt_str_na()
@@ -327,8 +326,8 @@ ndp_link_activation_body()
 {
 	local linklocal=
 
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+	rump_server_start $SOCKSRC netinet6
+	rump_server_start $SOCKDST netinet6
 
 	setup_dst_server
 	setup_src_server
@@ -363,39 +362,8 @@ ndp_link_activation_body()
 
 	pkt=$(make_pkt_str_na $linklocal b2:a1:00:00:00:02)
 	atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
-}
-
-cleanup()
-{
-	env RUMP_SERVER=$SOCKSRC rump.halt
-	env RUMP_SERVER=$SOCKDST rump.halt
-}
-
-dump_src()
-{
-	export RUMP_SERVER=$SOCKSRC
-	rump.netstat -nr
-	rump.ndp -n -a
-	rump.ifconfig
-	$HIJACKING dmesg
-}
-
-dump_dst()
-{
-	export RUMP_SERVER=$SOCKDST
-	rump.netstat -nr
-	rump.ndp -n -a
-	rump.ifconfig
-	$HIJACKING dmesg
-}
 
-dump()
-{
-	dump_src
-	dump_dst
-	shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
-	$DEBUG && gdb -ex bt /usr/bin/rump_server rump_server.core
-	$DEBUG && gdb -ex bt /usr/sbin/rump.ndp rump.ndp.core
+	rump_server_destroy_ifaces
 }
 
 ndp_cache_expiration_cleanup()

Index: src/tests/net/ndp/t_ra.sh
diff -u src/tests/net/ndp/t_ra.sh:1.5 src/tests/net/ndp/t_ra.sh:1.6
--- src/tests/net/ndp/t_ra.sh:1.5	Mon Nov  7 05:25:37 2016
+++ src/tests/net/ndp/t_ra.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_ra.sh,v 1.5 2016/11/07 05:25:37 ozaki-r Exp $
+#	$NetBSD: t_ra.sh,v 1.6 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2015 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -25,10 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-RUMPFLAGS="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6"
-RUMPFLAGS="${RUMPFLAGS} -lrumpnet_shmif -lrumpdev"
-RUMPFLAGS="${RUMPFLAGS} -lrumpvfs -lrumpfs_ffs"
-
 RUMPSRV=unix://r1
 RUMPCLI=unix://r2
 IP6SRV=fc00:1::1
@@ -39,11 +35,12 @@ DEBUG=${DEBUG:-true}
 
 setup_shmif0()
 {
-	local IP6ADDR=${1}
-	shift
+	local sock=$1
+	local IP6ADDR=$2
 
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
+	rump_server_add_iface $sock shmif0 bus1
+
+	export RUMP_SERVER=$sock
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6ADDR}
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 
@@ -83,19 +80,19 @@ ra_basic_head()
 ra_basic_body()
 {
 
-	atf_check -s exit:0 rump_server ${RUMPFLAGS} ${RUMPSRV}
-	atf_check -s exit:0 rump_server ${RUMPFLAGS} ${RUMPCLI}
+	rump_server_fs_start $RUMPSRV netinet6
+	rump_server_start $RUMPCLI netinet6
 
+	setup_shmif0 ${RUMPSRV} ${IP6SRV}
 	export RUMP_SERVER=${RUMPSRV}
-	setup_shmif0 ${IP6SRV}
 	atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.forwarding=1
 	export LD_PRELOAD=/usr/lib/librumphijack.so
 	atf_check -s exit:0 mkdir -p /rump/var/chroot/rtadvd
 	unset LD_PRELOAD
 	unset RUMP_SERVER
 
+	setup_shmif0 ${RUMPCLI} ${IP6CLI}
 	export RUMP_SERVER=${RUMPCLI}
-	setup_shmif0 ${IP6CLI}
 	$DEBUG && rump.ndp -n -a
 	atf_check -s exit:0 -o match:'= 0' rump.sysctl net.inet6.ip6.accept_rtadv
 	unset RUMP_SERVER
@@ -144,7 +141,7 @@ ra_basic_body()
 	atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
 	wait_term ${PIDFILE}
 
-	return 0
+	rump_server_destroy_ifaces
 }
 
 ra_basic_cleanup()
@@ -155,8 +152,8 @@ ra_basic_cleanup()
 		wait_term ${PIDFILE}
 	fi
 
-	env RUMP_SERVER=${RUMPSRV} rump.halt
-	env RUMP_SERVER=${RUMPCLI} rump.halt
+	$DEBUG && dump
+	cleanup
 }
 
 atf_init_test_cases()

Index: src/tests/net/net/t_forwarding.sh
diff -u src/tests/net/net/t_forwarding.sh:1.18 src/tests/net/net/t_forwarding.sh:1.19
--- src/tests/net/net/t_forwarding.sh:1.18	Fri Nov 25 08:10:12 2016
+++ src/tests/net/net/t_forwarding.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_forwarding.sh,v 1.18 2016/11/25 08:10:12 ozaki-r Exp $
+#	$NetBSD: t_forwarding.sh,v 1.19 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -25,9 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpdev"
-inet6server="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_shmif -lrumpdev"
-
 SOCKSRC=unix://commsock1
 SOCKFWD=unix://commsock2
 SOCKDST=unix://commsock3
@@ -89,9 +86,9 @@ setup_endpoint()
 	mode=${4}
 	gw=${5}
 
+	rump_server_add_iface $sock shmif0 $bus
+
 	export RUMP_SERVER=${sock}
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${bus}
 	if [ $mode = "ipv6" ]; then
 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
 		atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw}
@@ -127,12 +124,10 @@ setup_forwarder()
 {
 	mode=${1}
 
-	export RUMP_SERVER=$SOCKFWD
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
+	rump_server_add_iface $SOCKFWD shmif0 bus1
+	rump_server_add_iface $SOCKFWD shmif1 bus2
 
-	atf_check -s exit:0 rump.ifconfig shmif1 create
-	atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus2
+	export RUMP_SERVER=$SOCKFWD
 
 	if [ $mode = "ipv6" ]; then
 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW}
@@ -157,9 +152,9 @@ setup_forwarder()
 
 setup()
 {
-	atf_check -s exit:0 ${inetserver} $SOCKSRC
-	atf_check -s exit:0 ${inetserver} $SOCKFWD
-	atf_check -s exit:0 ${inetserver} $SOCKDST
+	rump_server_start $SOCKSRC
+	rump_server_start $SOCKFWD
+	rump_server_start $SOCKDST
 
 	setup_endpoint $SOCKSRC $IP4SRC bus1 ipv4 $IP4SRCGW
 	setup_endpoint $SOCKDST $IP4DST bus2 ipv4 $IP4DSTGW
@@ -168,9 +163,9 @@ setup()
 
 setup6()
 {
-	atf_check -s exit:0 ${inet6server} $SOCKSRC
-	atf_check -s exit:0 ${inet6server} $SOCKFWD
-	atf_check -s exit:0 ${inet6server} $SOCKDST
+	rump_server_start $SOCKSRC netinet6
+	rump_server_start $SOCKFWD netinet6
+	rump_server_start $SOCKDST netinet6
 
 	setup_endpoint $SOCKSRC $IP6SRC bus1 ipv6 $IP6SRCGW
 	setup_endpoint $SOCKDST $IP6DST bus2 ipv6 $IP6DSTGW
@@ -267,15 +262,8 @@ teardown_icmp_bmcastecho()
 
 teardown_interfaces()
 {
-	export RUMP_SERVER=$SOCKSRC
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 destroy
-
-	export RUMP_SERVER=$SOCKFWD
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 destroy
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 destroy
 
-	export RUMP_SERVER=$SOCKDST
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 destroy
+	rump_server_destroy_ifaces
 }
 
 test_setup_forwarding()
@@ -304,23 +292,6 @@ test_teardown_forwarding6()
 	    rump.sysctl net.inet6.ip6.forwarding
 }
 
-cleanup()
-{
-	env RUMP_SERVER=$SOCKSRC rump.halt
-	env RUMP_SERVER=$SOCKFWD rump.halt
-	env RUMP_SERVER=$SOCKDST rump.halt
-}
-
-dump()
-{
-	env RUMP_SERVER=$SOCKSRC rump.netstat -nr
-	env RUMP_SERVER=$SOCKFWD rump.netstat -nr
-	env RUMP_SERVER=$SOCKDST rump.netstat -nr
-
-	/usr/bin/shmif_dumpbus -p - bus1 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
-	/usr/bin/shmif_dumpbus -p - bus2 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
-}
-
 test_ping_failure()
 {
 	export RUMP_SERVER=$SOCKSRC
@@ -518,33 +489,33 @@ ipforwarding_misc_body()
 
 ipforwarding_v4_cleanup()
 {
-	dump
+	$DEBUG && dump
 	cleanup
 }
 
 ipforwarding_v6_cleanup()
 {
-	dump
+	$DEBUG && dump
 	cleanup
 }
 
 ipforwarding_fastforward_v4_cleanup()
 {
-	dump
+	$DEBUG && dump
 	stop_httpd
 	cleanup
 }
 
 ipforwarding_fastforward_v6_cleanup()
 {
-	dump
+	$DEBUG && dump
 	stop_httpd
 	cleanup
 }
 
 ipforwarding_misc_cleanup()
 {
-	dump
+	$DEBUG && dump
 	stop_httpd
 	cleanup
 }

Index: src/tests/net/net/t_ipaddress.sh
diff -u src/tests/net/net/t_ipaddress.sh:1.7 src/tests/net/net/t_ipaddress.sh:1.8
--- src/tests/net/net/t_ipaddress.sh:1.7	Thu Nov 24 09:05:17 2016
+++ src/tests/net/net/t_ipaddress.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_ipaddress.sh,v 1.7 2016/11/24 09:05:17 ozaki-r Exp $
+#	$NetBSD: t_ipaddress.sh,v 1.8 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2015 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -25,8 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-SERVER="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpdev"
-SERVER6="$SERVER -lrumpnet_netinet6"
 SOCK_LOCAL=unix://commsock1
 BUS=bus
 
@@ -37,11 +35,11 @@ test_same_address()
 	local ip=10.0.0.1
 	local net=10.0.0/24
 
-	atf_check -s exit:0 ${SERVER} ${SOCK_LOCAL}
+	rump_server_start $SOCK_LOCAL
+	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
 	export RUMP_SERVER=$SOCK_LOCAL
 
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr ${BUS}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 $ip/24
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
 	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
@@ -75,6 +73,8 @@ test_same_address()
 
 	check_route_no_entry $ip
 	check_route_no_entry $net
+
+	rump_server_destroy_ifaces
 }
 
 test_same_address6()
@@ -82,11 +82,11 @@ test_same_address6()
 	local ip=fc00::1
 	local net=fc00::/64
 
-	atf_check -s exit:0 ${SERVER6} ${SOCK_LOCAL}
+	rump_server_start $SOCK_LOCAL netinet6
+	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
 	export RUMP_SERVER=$SOCK_LOCAL
 
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr ${BUS}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $ip
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
 	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
@@ -120,11 +120,16 @@ test_same_address6()
 
 	check_route_no_entry $ip
 	check_route_no_entry $net
+
+	rump_server_destroy_ifaces
 }
 
 test_auto_linklocal()
 {
-	atf_check -s exit:0 ${SERVER6} ${SOCK_LOCAL}
+
+	rump_server_start $SOCK_LOCAL netinet6
+	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
 	export RUMP_SERVER=$SOCK_LOCAL
 
 	#
@@ -134,8 +139,6 @@ test_auto_linklocal()
 	# Check default value
 	atf_check -s exit:0 -o match:"1" rump.sysctl -n net.inet6.ip6.auto_linklocal
 
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr ${BUS}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
 	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
 
@@ -149,8 +152,7 @@ test_auto_linklocal()
 	#
 	atf_check -s exit:0 -o ignore rump.sysctl -w -q net.inet6.ip6.auto_linklocal=0
 
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 linkstr ${BUS}
+	rump_server_add_iface $SOCK_LOCAL shmif1 $BUS
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up
 	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
 
@@ -158,13 +160,8 @@ test_auto_linklocal()
 
 	# IPv6 link-local address is not set
 	atf_check -s exit:0 -o not-match:"inet6 fe80::" rump.ifconfig shmif1
-}
-
-cleanup()
-{
 
-	$DEBUG && shmif_dumpbus -p - $BUS 2>/dev/null | tcpdump -n -e -r -
-	env RUMP_SERVER=$SOCK_LOCAL rump.halt
+	rump_server_destroy_ifaces
 }
 
 add_test()
@@ -181,6 +178,7 @@ add_test()
 			test_${name}; \
 		}; \
 	    ipaddr_${name}_cleanup() { \
+			$DEBUG && dump \
 			cleanup; \
 		}"
 	atf_add_test_case "ipaddr_${name}"
Index: src/tests/net/net/t_ping6_opts.sh
diff -u src/tests/net/net/t_ping6_opts.sh:1.7 src/tests/net/net/t_ping6_opts.sh:1.8
--- src/tests/net/net/t_ping6_opts.sh:1.7	Thu Nov 24 09:07:09 2016
+++ src/tests/net/net/t_ping6_opts.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_ping6_opts.sh,v 1.7 2016/11/24 09:07:09 ozaki-r Exp $
+#	$NetBSD: t_ping6_opts.sh,v 1.8 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2016 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -25,9 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-RUMP_LIBS="-lrumpdev -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif"
-RUMP_LIBS_IPV6="$RUMP_LIBS -lrumpnet_netinet6"
-
 SOCKSRC=unix://commsock1
 SOCKFWD=unix://commsock2
 SOCKDST=unix://commsock3
@@ -54,9 +51,9 @@ setup_endpoint()
 	local bus=${3}
 	local gw=${4}
 
+	rump_server_add_iface $sock shmif0 $bus
+
 	export RUMP_SERVER=${sock}
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${bus}
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
 	atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw}
 	atf_check -s exit:0 rump.ifconfig shmif0 up
@@ -71,12 +68,10 @@ setup_endpoint()
 setup_forwarder()
 {
 
-	export RUMP_SERVER=$SOCKFWD
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS_SRCGW
+	rump_server_add_iface $SOCKFWD shmif0 $BUS_SRCGW
+	rump_server_add_iface $SOCKFWD shmif1 $BUS_DSTGW
 
-	atf_check -s exit:0 rump.ifconfig shmif1 create
-	atf_check -s exit:0 rump.ifconfig shmif1 linkstr $BUS_DSTGW
+	export RUMP_SERVER=$SOCKFWD
 
 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW}
 	atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW}
@@ -100,9 +95,9 @@ setup_forwarding6()
 setup6()
 {
 
-	atf_check -s exit:0 rump_server $RUMP_LIBS_IPV6 $SOCKSRC
-	atf_check -s exit:0 rump_server $RUMP_LIBS_IPV6 $SOCKFWD
-	atf_check -s exit:0 rump_server $RUMP_LIBS_IPV6 $SOCKDST
+	rump_server_start $SOCKSRC netinet6
+	rump_server_start $SOCKFWD netinet6
+	rump_server_start $SOCKDST netinet6
 
 	setup_endpoint $SOCKSRC $IP6SRC $BUS_SRCGW $IP6SRCGW
 	setup_endpoint $SOCKDST $IP6DST $BUS_DSTGW $IP6DSTGW
@@ -143,29 +138,6 @@ check_echo_request_pkt_with_macaddr_and_
 	atf_check -s exit:0 -o match:"$pkt" cat ./out
 }
 
-dump()
-{
-
-	env RUMP_SERVER=$SOCKSRC rump.ifconfig
-	env RUMP_SERVER=$SOCKFWD rump.ifconfig
-	env RUMP_SERVER=$SOCKDST rump.ifconfig
-
-	env RUMP_SERVER=$SOCKSRC rump.netstat -nr
-	env RUMP_SERVER=$SOCKFWD rump.netstat -nr
-	env RUMP_SERVER=$SOCKDST rump.netstat -nr
-
-	shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
-	shmif_dumpbus -p - bus2 2>/dev/null| tcpdump -n -e -r -
-}
-
-cleanup()
-{
-
-	env RUMP_SERVER=$SOCKSRC rump.halt
-	env RUMP_SERVER=$SOCKFWD rump.halt
-	env RUMP_SERVER=$SOCKDST rump.halt
-}
-
 #
 # Tests
 #
@@ -201,6 +173,8 @@ ping6_opts_sourceaddr_body()
 	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
 	    -S $IP6SRC2 $IP6DST
 	check_echo_request_pkt $IP6SRC2 $IP6DST
+
+	rump_server_destroy_ifaces
 }
 
 ping6_opts_sourceaddr_cleanup()
@@ -234,8 +208,7 @@ ping6_opts_interface_body()
 	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $gw_lladdr
 	check_echo_request_pkt $shmif0_lladdr $gw_lladdr
 
-	atf_check -s exit:0 rump.ifconfig shmif1 create
-	atf_check -s exit:0 rump.ifconfig shmif1 linkstr $BUS_SRCGW
+	rump_server_add_iface $SOCKSRC shmif1 $BUS_SRCGW
 	atf_check -s exit:0 rump.ifconfig shmif1 up
 	atf_check -s exit:0 rump.ifconfig -w 10
 	shmif1_lladdr=$(get_linklocal_addr ${SOCKSRC} shmif1)
@@ -251,6 +224,8 @@ ping6_opts_interface_body()
 	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
 	    -I shmif1 $gw_lladdr
 	check_echo_request_pkt $shmif1_lladdr $gw_lladdr
+
+	rump_server_destroy_ifaces
 }
 
 ping6_opts_interface_cleanup()
@@ -285,9 +260,8 @@ ping6_opts_gateway_body()
 	check_echo_request_pkt_with_macaddr \
 	    $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
 
+	rump_server_add_iface $SOCKFWD shmif2 $BUS_SRCGW
 	export RUMP_SERVER=$SOCKFWD
-	atf_check -s exit:0 rump.ifconfig shmif2 create
-	atf_check -s exit:0 rump.ifconfig shmif2 linkstr $BUS_SRCGW
 	atf_check -s exit:0 rump.ifconfig shmif2 inet6 $IP6SRCGW2
 	atf_check -s exit:0 rump.ifconfig -w 10
 	gw_shmif2_macaddr=$(get_macaddr ${SOCKFWD} shmif2)
@@ -307,6 +281,8 @@ ping6_opts_gateway_body()
 	    -g $IP6SRCGW2 $IP6DST
 	check_echo_request_pkt_with_macaddr \
 	    $my_macaddr $gw_shmif2_macaddr $IP6SRC $IP6DST
+
+	rump_server_destroy_ifaces
 }
 
 ping6_opts_gateway_cleanup()
@@ -341,9 +317,8 @@ ping6_opts_hops_body()
 	check_echo_request_pkt_with_macaddr \
 	    $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
 
+	rump_server_add_iface $SOCKFWD shmif2 $BUS_SRCGW
 	export RUMP_SERVER=$SOCKFWD
-	atf_check -s exit:0 rump.ifconfig shmif2 create
-	atf_check -s exit:0 rump.ifconfig shmif2 linkstr $BUS_SRCGW
 	atf_check -s exit:0 rump.ifconfig shmif2 inet6 $IP6SRCGW2
 	atf_check -s exit:0 rump.ifconfig -w 10
 	gw_shmif2_macaddr=$(get_macaddr ${SOCKFWD} shmif2)
@@ -384,6 +359,8 @@ ping6_opts_hops_body()
 	    -g $IP6SRCGW $IP6SRCGW2 $IP6DST
 	check_echo_request_pkt_with_macaddr_and_rthdr0 \
 	    $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6SRCGW2 $IP6DST
+
+	rump_server_destroy_ifaces
 }
 
 ping6_opts_hops_cleanup()

Index: src/tests/net/net/t_ipv6_lifetime.sh
diff -u src/tests/net/net/t_ipv6_lifetime.sh:1.5 src/tests/net/net/t_ipv6_lifetime.sh:1.6
--- src/tests/net/net/t_ipv6_lifetime.sh:1.5	Mon Nov  7 05:25:37 2016
+++ src/tests/net/net/t_ipv6_lifetime.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_ipv6_lifetime.sh,v 1.5 2016/11/07 05:25:37 ozaki-r Exp $
+#	$NetBSD: t_ipv6_lifetime.sh,v 1.6 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -25,9 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-INET6SERVER="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpdev"
-INET6SERVER="$INET6SERVER -lrumpnet_netinet6 -lrumpnet_shmif"
-
 SOCK=unix://sock
 BUS=./bus
 
@@ -49,11 +46,11 @@ basic_body()
 	local bonus=2
 	local ip="fc00::1"
 
-	atf_check -s exit:0 ${INET6SERVER} $SOCK
+	rump_server_start $SOCK netinet6
+	rump_server_add_iface $SOCK shmif0 $BUS
+
 	export RUMP_SERVER=$SOCK
 
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 
 	# A normal IP address doesn't contain preferred/valid lifetime
@@ -115,19 +112,7 @@ basic_body()
 	# Shouldn't remain anymore
 	atf_check -s exit:0 -o not-match:"$ip" rump.ifconfig -L shmif0
 
-	return 0
-}
-
-cleanup()
-{
-	env RUMP_SERVER=$SOCK rump.halt
-}
-
-dump()
-{
-	env RUMP_SERVER=$SOCK rump.ifconfig
-	env RUMP_SERVER=$SOCK rump.netstat -nr
-	shmif_dumpbus -p - $BUS 2>/dev/null| tcpdump -n -e -r -
+	rump_server_destroy_ifaces
 }
 
 basic_cleanup()

Index: src/tests/net/net/t_mtudisc.sh
diff -u src/tests/net/net/t_mtudisc.sh:1.6 src/tests/net/net/t_mtudisc.sh:1.7
--- src/tests/net/net/t_mtudisc.sh:1.6	Thu Nov 24 11:54:57 2016
+++ src/tests/net/net/t_mtudisc.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_mtudisc.sh,v 1.6 2016/11/24 11:54:57 ozaki-r Exp $
+#	$NetBSD: t_mtudisc.sh,v 1.7 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2016 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -25,10 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet"
-inetserver="$inetserver -lrumpnet_netinet6 -lrumpnet_shmif"
-inetserver="$inetserver -lrumpdev"
-
 SOCKLOCAL=unix://commsock1
 SOCKGATEWAY=unix://commsock2
 SOCKREMOTE=unix://commsock3
@@ -51,10 +47,9 @@ setup_server()
 	local bus=$3
 	local ip=$4
 
-	export RUMP_SERVER=$sock
+	rump_server_add_iface $sock $if $bus
 
-	atf_check -s exit:0 rump.ifconfig $if create
-	atf_check -s exit:0 rump.ifconfig $if linkstr $bus
+	export RUMP_SERVER=$sock
 	atf_check -s exit:0 rump.ifconfig $if $ip
 	atf_check -s exit:0 rump.ifconfig $if up
 	atf_check -s exit:0 rump.ifconfig -w 10
@@ -94,9 +89,9 @@ mtudisc_basic_body()
 	local remote_ip=10.0.1.2
 	local prefixlen=24
 
-	atf_check -s exit:0 ${inetserver} $SOCKLOCAL
-	atf_check -s exit:0 ${inetserver} $SOCKGATEWAY
-	atf_check -s exit:0 ${inetserver} $SOCKREMOTE
+	rump_server_start $SOCKLOCAL
+	rump_server_start $SOCKGATEWAY
+	rump_server_start $SOCKREMOTE
 
 	#
 	# Setup servers
@@ -181,43 +176,14 @@ mtudisc_basic_body()
 		-o match:"^10.0.0.2 +10.0.1.1 +UGHS +- +- +1280 +shmif0" \
 		rump.netstat -nr -f inet
 
-}
-
-cleanup()
-{
-	gdb -ex bt /usr/bin/rump_server rump_server.core
-	gdb -ex bt /usr/sbin/arp arp.core
-	env RUMP_SERVER=$SOCKLOCAL rump.halt
-	env RUMP_SERVER=$SOCKGATEWAY rump.halt
-	env RUMP_SERVER=$SOCKREMOTE rump.halt
-}
-
-dump_server()
-{
-	local sock=$1
-	export RUMP_SERVER=$sock
-	rump.netstat -nr
-	rump.arp -n -a
-	rump.ifconfig
-	$HIJACKING dmesg
-}
-
-dump()
-{
-	dump_server $SOCKLOCAL
-	dump_server $SOCKGATEWAY
-	dump_server $SOCKREMOTE
-	shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
-	shmif_dumpbus -p - bus2 2>/dev/null| tcpdump -n -e -r -
+	rump_server_destroy_ifaces
 }
 
 mtudisc_basic_cleanup()
 {
 	$DEBUG && dump
 	stop_httpd
-	env RUMP_SERVER=$SOCKLOCAL rump.halt
-	env RUMP_SERVER=$SOCKGATEWAY rump.halt
-	env RUMP_SERVER=$SOCKREMOTE rump.halt
+	cleanup
 }
 
 atf_init_test_cases()

Index: src/tests/net/net/t_mtudisc6.sh
diff -u src/tests/net/net/t_mtudisc6.sh:1.4 src/tests/net/net/t_mtudisc6.sh:1.5
--- src/tests/net/net/t_mtudisc6.sh:1.4	Thu Nov 24 11:54:57 2016
+++ src/tests/net/net/t_mtudisc6.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_mtudisc6.sh,v 1.4 2016/11/24 11:54:57 ozaki-r Exp $
+#	$NetBSD: t_mtudisc6.sh,v 1.5 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2016 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -25,10 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet"
-inetserver="$inetserver -lrumpnet_netinet6 -lrumpnet_shmif"
-inetserver="$inetserver -lrumpdev"
-
 SOCKLOCAL=unix://commsock1
 SOCKGATEWAY=unix://commsock2
 SOCKREMOTE=unix://commsock3
@@ -52,10 +48,9 @@ setup_server()
 	local bus=$3
 	local ip=$4
 
-	export RUMP_SERVER=$sock
+	rump_server_add_iface $sock $if $bus
 
-	atf_check -s exit:0 rump.ifconfig $if create
-	atf_check -s exit:0 rump.ifconfig $if linkstr $bus
+	export RUMP_SERVER=$sock
 	atf_check -s exit:0 rump.ifconfig $if inet6 $ip
 	atf_check -s exit:0 rump.ifconfig $if up
 	atf_check -s exit:0 rump.ifconfig -w 10
@@ -95,9 +90,9 @@ mtudisc6_basic_body()
 	local remote_ip=fc00:0:0:2::2
 	local prefixlen=64
 
-	atf_check -s exit:0 ${inetserver} $SOCKLOCAL
-	atf_check -s exit:0 ${inetserver} $SOCKGATEWAY
-	atf_check -s exit:0 ${inetserver} $SOCKREMOTE
+	rump_server_start $SOCKLOCAL netinet6
+	rump_server_start $SOCKGATEWAY netinet6
+	rump_server_start $SOCKREMOTE netinet6
 
 	#
 	# Setup servers
@@ -165,27 +160,8 @@ mtudisc6_basic_body()
 	atf_check -s exit:0 \
 	    -o match:"^$local_ip +$gateway_remote_ip +UGHS +- +- +1280 +shmif0" \
 	    rump.netstat -nr -f inet6
-}
-
-dump_server()
-{
-	local sock=$1
-
-	export RUMP_SERVER=$sock
-	rump.netstat -nr -f inet6
-	rump.ndp -n -a
-	rump.ifconfig
-	$HIJACKING dmesg
-}
-
-dump()
-{
 
-	dump_server $SOCKLOCAL
-	dump_server $SOCKGATEWAY
-	dump_server $SOCKREMOTE
-	shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
-	shmif_dumpbus -p - bus2 2>/dev/null| tcpdump -n -e -r -
+	rump_server_destroy_ifaces
 }
 
 mtudisc6_basic_cleanup()
@@ -193,9 +169,7 @@ mtudisc6_basic_cleanup()
 
 	$DEBUG && dump
 	stop_httpd
-	env RUMP_SERVER=$SOCKLOCAL rump.halt
-	env RUMP_SERVER=$SOCKGATEWAY rump.halt
-	env RUMP_SERVER=$SOCKREMOTE rump.halt
+	cleanup
 }
 
 atf_init_test_cases()

Index: src/tests/net/route/t_flags.sh
diff -u src/tests/net/route/t_flags.sh:1.13 src/tests/net/route/t_flags.sh:1.14
--- src/tests/net/route/t_flags.sh:1.13	Thu Nov 24 09:05:17 2016
+++ src/tests/net/route/t_flags.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_flags.sh,v 1.13 2016/11/24 09:05:17 ozaki-r Exp $
+#	$NetBSD: t_flags.sh,v 1.14 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -25,9 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-netserver=\
-"rump_server -lrumpdev -lrumpnet -lrumpnet_net -lrumpnet_netinet \
-	-lrumpnet_shmif"
 SOCK_LOCAL=unix://commsock1
 SOCK_PEER=unix://commsock2
 SOCK_GW=unix://commsock3
@@ -39,11 +36,10 @@ DEBUG=${DEBUG:-false}
 setup_local()
 {
 
-	atf_check -s exit:0 ${netserver} ${SOCK_LOCAL}
+	rump_server_start $SOCK_LOCAL
+	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
 
 	export RUMP_SERVER=$SOCK_LOCAL
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr ${BUS}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.2/24
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
 
@@ -54,11 +50,10 @@ setup_local()
 setup_peer()
 {
 
-	atf_check -s exit:0 ${netserver} ${SOCK_PEER}
+	rump_server_start $SOCK_PEER
+	rump_server_add_iface $SOCK_PEER shmif0 $BUS
 
 	export RUMP_SERVER=$SOCK_PEER
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr ${BUS}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.1/24
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
 
@@ -69,16 +64,14 @@ setup_peer()
 setup_gw()
 {
 
-	atf_check -s exit:0 ${netserver} ${SOCK_GW}
+	rump_server_start $SOCK_GW
+	rump_server_add_iface $SOCK_GW shmif0 $BUS
+	rump_server_add_iface $SOCK_GW shmif1 $BUS2
 
 	export RUMP_SERVER=$SOCK_GW
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr ${BUS}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.254/24
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
 
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 linkstr ${BUS2}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 10.0.2.1/24
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 alias 10.0.2.2/24
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up
@@ -91,12 +84,6 @@ setup_gw()
 	$DEBUG && rump.netstat -rn -f inet
 }
 
-teardown_gw()
-{
-
-	env RUMP_SERVER=$SOCK_GW rump.halt
-}
-
 test_lo()
 {
 
@@ -290,8 +277,6 @@ test_icmp_redirect()
 	# Up, Gateway, Host, Modified, Static
 	check_route_flags 10.0.2.2 UGHMS
 	check_route_gw 10.0.2.2 10.0.0.254
-
-	teardown_gw
 }
 
 test_announce()
@@ -310,14 +295,6 @@ test_announce()
 	# TODO test its behavior
 }
 
-cleanup()
-{
-	$DEBUG && /usr/bin/shmif_dumpbus -p - $BUS 2>/dev/null | \
-	    /usr/sbin/tcpdump -n -e -r -
-	env RUMP_SERVER=$SOCK_LOCAL rump.halt
-	env RUMP_SERVER=$SOCK_PEER rump.halt
-}
-
 add_test()
 {
 	local name=$1
@@ -332,8 +309,10 @@ add_test()
 			setup_local; \
 			setup_peer; \
 			test_${name}; \
+			rump_server_destroy_ifaces; \
 		}; \
 	    route_flags_${name}_cleanup() { \
+			$DEBUG && dump; \
 			cleanup; \
 		}"
 	atf_add_test_case "route_flags_${name}"

Index: src/tests/net/route/t_flags6.sh
diff -u src/tests/net/route/t_flags6.sh:1.10 src/tests/net/route/t_flags6.sh:1.11
--- src/tests/net/route/t_flags6.sh:1.10	Thu Nov 24 09:05:17 2016
+++ src/tests/net/route/t_flags6.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_flags6.sh,v 1.10 2016/11/24 09:05:17 ozaki-r Exp $
+#	$NetBSD: t_flags6.sh,v 1.11 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2016 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -25,9 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-RUMP_OPTS="-lrumpdev -lrumpnet -lrumpnet_net"
-RUMP_OPTS="$RUMP_OPTS -lrumpnet_netinet -lrumpnet_netinet6"
-RUMP_OPTS="$RUMP_OPTS -lrumpnet_shmif"
 SOCK_LOCAL=unix://commsock1
 SOCK_PEER=unix://commsock2
 SOCK_GW=unix://commsock3
@@ -42,11 +39,10 @@ DEBUG=${DEBUG:-false}
 setup_local()
 {
 
-	atf_check -s exit:0 rump_server ${RUMP_OPTS} ${SOCK_LOCAL}
+	rump_server_start $SOCK_LOCAL netinet6
+	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
 
 	export RUMP_SERVER=$SOCK_LOCAL
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr ${BUS}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $IP6_LOCAL
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
 
@@ -57,11 +53,10 @@ setup_local()
 setup_peer()
 {
 
-	atf_check -s exit:0 rump_server ${RUMP_OPTS} ${SOCK_PEER}
+	rump_server_start $SOCK_PEER netinet6
+	rump_server_add_iface $SOCK_PEER shmif0 $BUS
 
 	export RUMP_SERVER=$SOCK_PEER
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
-	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr ${BUS}
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $IP6_PEER
 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
 
@@ -235,14 +230,6 @@ test_announce6()
 	# TODO test its behavior
 }
 
-cleanup()
-{
-	$DEBUG && /usr/bin/shmif_dumpbus -p - $BUS 2>/dev/null | \
-	    /usr/sbin/tcpdump -n -e -r -
-	env RUMP_SERVER=$SOCK_LOCAL rump.halt
-	env RUMP_SERVER=$SOCK_PEER rump.halt
-}
-
 add_test()
 {
 	local name=$1
@@ -257,8 +244,10 @@ add_test()
 			setup_local; \
 			setup_peer; \
 			test_${name}; \
+			rump_server_destroy_ifaces; \
 		}; \
 	    route_flags_${name}_cleanup() { \
+			$DEBUG && dump; \
 			cleanup; \
 		}"
 	atf_add_test_case "route_flags_${name}"

Index: src/tests/net/route/t_route.sh
diff -u src/tests/net/route/t_route.sh:1.8 src/tests/net/route/t_route.sh:1.9
--- src/tests/net/route/t_route.sh:1.8	Mon Nov  7 05:25:37 2016
+++ src/tests/net/route/t_route.sh	Fri Nov 25 08:51:17 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: t_route.sh,v 1.8 2016/11/07 05:25:37 ozaki-r Exp $
+#	$NetBSD: t_route.sh,v 1.9 2016/11/25 08:51:17 ozaki-r Exp $
 #
 # Copyright (c) 2016 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -25,9 +25,6 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-RUMP_LIBS="-lrumpdev -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif"
-RUMP_LIBS_IPV6="$RUMP_LIBS -lrumpnet_netinet6"
-
 # non_subnet_gateway
 SOCK_CLIENT=unix://commsock1
 SOCK_GW=unix://commsock2
@@ -64,13 +61,11 @@ route_non_subnet_gateway_head()
 route_non_subnet_gateway_body()
 {
 
-	atf_check -s exit:0 rump_server ${RUMP_LIBS} ${SOCK_CLIENT}
-	atf_check -s exit:0 rump_server ${RUMP_LIBS} ${SOCK_GW}
+	rump_server_start $SOCK_CLIENT
+	rump_server_start $SOCK_GW
 
 	export RUMP_SERVER=${SOCK_GW}
-
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
+	rump_server_add_iface $SOCK_GW shmif0 $BUS
 	atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 
@@ -81,9 +76,7 @@ route_non_subnet_gateway_body()
 	$DEBUG && rump.netstat -nr -f inet
 
 	export RUMP_SERVER=${SOCK_CLIENT}
-
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
+	rump_server_add_iface $SOCK_CLIENT shmif0 $BUS
 	atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.1/32
 	atf_check -s exit:0 rump.ifconfig shmif0 up
 
@@ -104,15 +97,14 @@ route_non_subnet_gateway_body()
 	# Be reachable to the gateway
 	atf_check -s exit:0 -o ignore rump.ping $PING_OPTS 192.168.0.1
 
-	unset RUMP_SERVER
+	rump_server_destroy_ifaces
 }
 
 route_non_subnet_gateway_cleanup()
 {
 
-	$DEBUG && shmif_dumpbus -p - $BUS 2>/dev/null | tcpdump -n -e -r -
-	env RUMP_SERVER=$SOCK_CLIENT rump.halt
-	env RUMP_SERVER=$SOCK_GW rump.halt
+	$DEBUG && dump
+	cleanup
 }
 
 atf_test_case route_command_get cleanup
@@ -140,8 +132,7 @@ setup_endpoint()
 	local gw=${5}
 
 	export RUMP_SERVER=${sock}
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${bus}
+	rump_server_add_iface $sock shmif0 $bus
 	if [ $mode = "ipv6" ]; then
 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
 		atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw}
@@ -161,13 +152,10 @@ setup_forwarder()
 {
 	mode=${1}
 
-	export RUMP_SERVER=$SOCKFWD
-	atf_check -s exit:0 rump.ifconfig shmif0 create
-	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS_SRCGW
-
-	atf_check -s exit:0 rump.ifconfig shmif1 create
-	atf_check -s exit:0 rump.ifconfig shmif1 linkstr $BUS_DSTGW
+	rump_server_add_iface $SOCKFWD shmif0 $BUS_SRCGW
+	rump_server_add_iface $SOCKFWD shmif1 $BUS_DSTGW
 
+	export RUMP_SERVER=$SOCKFWD
 	if [ $mode = "ipv6" ]; then
 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW}
 		atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW}
@@ -204,9 +192,9 @@ setup_forwarding6()
 setup()
 {
 
-	atf_check -s exit:0 rump_server $RUMP_LIBS $SOCKSRC
-	atf_check -s exit:0 rump_server $RUMP_LIBS $SOCKFWD
-	atf_check -s exit:0 rump_server $RUMP_LIBS $SOCKDST
+	rump_server_start $SOCKSRC
+	rump_server_start $SOCKFWD
+	rump_server_start $SOCKDST
 
 	setup_endpoint $SOCKSRC $IP4SRC $BUS_SRCGW ipv4 $IP4SRCGW
 	setup_endpoint $SOCKDST $IP4DST $BUS_DSTGW ipv4 $IP4DSTGW
@@ -216,9 +204,9 @@ setup()
 setup6()
 {
 
-	atf_check -s exit:0 rump_server $RUMP_LIBS_IPV6 $SOCKSRC
-	atf_check -s exit:0 rump_server $RUMP_LIBS_IPV6 $SOCKFWD
-	atf_check -s exit:0 rump_server $RUMP_LIBS_IPV6 $SOCKDST
+	rump_server_start $SOCKSRC netinet6
+	rump_server_start $SOCKFWD netinet6
+	rump_server_start $SOCKDST netinet6
 
 	setup_endpoint $SOCKSRC $IP6SRC $BUS_SRCGW ipv6 $IP6SRCGW
 	setup_endpoint $SOCKDST $IP6DST $BUS_DSTGW ipv6 $IP6DSTGW
@@ -380,6 +368,7 @@ route_command_get_body()
 	setup
 	setup_forwarding
 	test_route_get
+	rump_server_destroy_ifaces
 }
 
 route_command_get6_body()
@@ -388,36 +377,20 @@ route_command_get6_body()
 	setup6
 	setup_forwarding6
 	test_route_get6
-}
-
-dump()
-{
-
-	env RUMP_SERVER=$SOCKSRC rump.netstat -nr
-	env RUMP_SERVER=$SOCKFWD rump.netstat -nr
-	env RUMP_SERVER=$SOCKDST rump.netstat -nr
-
-	shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
-	shmif_dumpbus -p - bus2 2>/dev/null| tcpdump -n -e -r -
-}
-
-cleanup()
-{
-
-	env RUMP_SERVER=$SOCKSRC rump.halt
-	env RUMP_SERVER=$SOCKFWD rump.halt
-	env RUMP_SERVER=$SOCKDST rump.halt
+	rump_server_destroy_ifaces
 }
 
 route_command_get_cleanup()
 {
+
 	$DEBUG && dump
 	cleanup
 }
 
 route_command_get6_cleanup()
 {
-	dump
+
+	$DEBUG && dump
 	cleanup
 }
 

Reply via email to