xref: /freebsd/contrib/netbsd-tests/net/if_tap/t_tap.sh (revision 640235e2c2ba32947f7c59d168437ffa1280f1e6)
1*640235e2SEnji Cooper#	$NetBSD: t_tap.sh,v 1.3 2016/08/10 22:42:21 kre Exp $
2*640235e2SEnji Cooper#
3*640235e2SEnji Cooper# Copyright (c) 2016 Internet Initiative Japan Inc.
4*640235e2SEnji Cooper# All rights reserved.
5*640235e2SEnji Cooper#
6*640235e2SEnji Cooper# Redistribution and use in source and binary forms, with or without
7*640235e2SEnji Cooper# modification, are permitted provided that the following conditions
8*640235e2SEnji Cooper# are met:
9*640235e2SEnji Cooper# 1. Redistributions of source code must retain the above copyright
10*640235e2SEnji Cooper#    notice, this list of conditions and the following disclaimer.
11*640235e2SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright
12*640235e2SEnji Cooper#    notice, this list of conditions and the following disclaimer in the
13*640235e2SEnji Cooper#    documentation and/or other materials provided with the distribution.
14*640235e2SEnji Cooper#
15*640235e2SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16*640235e2SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17*640235e2SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18*640235e2SEnji Cooper# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19*640235e2SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20*640235e2SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21*640235e2SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22*640235e2SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23*640235e2SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24*640235e2SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25*640235e2SEnji Cooper# POSSIBILITY OF SUCH DAMAGE.
26*640235e2SEnji Cooper#
27*640235e2SEnji Cooper
28*640235e2SEnji CooperRUMP_FLAGS="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6"
29*640235e2SEnji CooperRUMP_FLAGS="$RUMP_FLAGS -lrumpnet_shmif -lrumpnet_tap -lrumpnet_bridge -lrumpdev"
30*640235e2SEnji CooperHIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=sysctl=yes"
31*640235e2SEnji Cooper
32*640235e2SEnji CooperSOCK_LOCAL=unix://commsock1
33*640235e2SEnji CooperSOCK_REMOTE=unix://commsock2
34*640235e2SEnji CooperBUS=bus1
35*640235e2SEnji CooperIP4_LOCAL=10.0.0.1
36*640235e2SEnji CooperIP4_TAP=10.0.0.2
37*640235e2SEnji CooperIP4_REMOTE=10.0.0.3
38*640235e2SEnji CooperIP6_LOCAL=fc00::1
39*640235e2SEnji CooperIP6_TAP=fc00::2
40*640235e2SEnji CooperIP6_REMOTE=fc00::3
41*640235e2SEnji Cooper
42*640235e2SEnji CooperDEBUG=false
43*640235e2SEnji CooperTIMEOUT=1
44*640235e2SEnji Cooper
45*640235e2SEnji Cooperatf_test_case tap_create_destroy cleanup
46*640235e2SEnji Coopertap_create_destroy_head()
47*640235e2SEnji Cooper{
48*640235e2SEnji Cooper
49*640235e2SEnji Cooper	atf_set "descr" "tests of creation and deletion of tap interface"
50*640235e2SEnji Cooper	atf_set "require.progs" "rump_server"
51*640235e2SEnji Cooper}
52*640235e2SEnji Cooper
53*640235e2SEnji Coopertap_create_destroy_body()
54*640235e2SEnji Cooper{
55*640235e2SEnji Cooper
56*640235e2SEnji Cooper	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_LOCAL}
57*640235e2SEnji Cooper
58*640235e2SEnji Cooper	export RUMP_SERVER=${SOCK_LOCAL}
59*640235e2SEnji Cooper
60*640235e2SEnji Cooper	# Create and destroy (no address)
61*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 create
62*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 destroy
63*640235e2SEnji Cooper
64*640235e2SEnji Cooper	# Create and destroy (with an IPv4 address)
65*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 create
66*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP
67*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 up
68*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 destroy
69*640235e2SEnji Cooper
70*640235e2SEnji Cooper	# Create and destroy (with an IPv6 address)
71*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 create
72*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP
73*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 up
74*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 destroy
75*640235e2SEnji Cooper}
76*640235e2SEnji Cooper
77*640235e2SEnji Coopertap_create_destroy_cleanup()
78*640235e2SEnji Cooper{
79*640235e2SEnji Cooper
80*640235e2SEnji Cooper	RUMP_SERVER=${SOCK_LOCAL} rump.halt
81*640235e2SEnji Cooper}
82*640235e2SEnji Cooper
83*640235e2SEnji Cooperatf_test_case tap_stand_alone cleanup
84*640235e2SEnji Coopertap_create_destroy_head()
85*640235e2SEnji Cooper{
86*640235e2SEnji Cooper
87*640235e2SEnji Cooper	atf_set "descr" "tests of alone tap interface"
88*640235e2SEnji Cooper	atf_set "require.progs" "rump_server"
89*640235e2SEnji Cooper}
90*640235e2SEnji Cooper
91*640235e2SEnji Coopertap_stand_alone_body()
92*640235e2SEnji Cooper{
93*640235e2SEnji Cooper	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_LOCAL}
94*640235e2SEnji Cooper	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_REMOTE}
95*640235e2SEnji Cooper
96*640235e2SEnji Cooper	export RUMP_SERVER=${SOCK_LOCAL}
97*640235e2SEnji Cooper
98*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 create
99*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
100*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL
101*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL
102*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 up
103*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 create
104*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP
105*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP
106*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 up
107*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig -w 10
108*640235e2SEnji Cooper
109*640235e2SEnji Cooper	export RUMP_SERVER=${SOCK_REMOTE}
110*640235e2SEnji Cooper
111*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 create
112*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
113*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE
114*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE
115*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 up
116*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig -w 10
117*640235e2SEnji Cooper
118*640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_LOCAL
119*640235e2SEnji Cooper	# Cannot reach to an alone tap
120*640235e2SEnji Cooper	atf_check -s not-exit:0 -o ignore -e ignore \
121*640235e2SEnji Cooper	    rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP
122*640235e2SEnji Cooper
123*640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL
124*640235e2SEnji Cooper	# Cannot reach to an alone tap
125*640235e2SEnji Cooper	atf_check -s not-exit:0 -o ignore -e ignore \
126*640235e2SEnji Cooper	    rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP
127*640235e2SEnji Cooper}
128*640235e2SEnji Cooper
129*640235e2SEnji Coopertap_stand_alone_cleanup()
130*640235e2SEnji Cooper{
131*640235e2SEnji Cooper
132*640235e2SEnji Cooper	RUMP_SERVER=${SOCK_LOCAL} rump.halt
133*640235e2SEnji Cooper	RUMP_SERVER=${SOCK_REMOTE} rump.halt
134*640235e2SEnji Cooper}
135*640235e2SEnji Cooper
136*640235e2SEnji Cooperatf_test_case tap_bridged cleanup
137*640235e2SEnji Coopertap_bridged_head()
138*640235e2SEnji Cooper{
139*640235e2SEnji Cooper
140*640235e2SEnji Cooper	atf_set "descr" "tests of alone tap interface"
141*640235e2SEnji Cooper	atf_set "require.progs" "rump_server"
142*640235e2SEnji Cooper}
143*640235e2SEnji Cooper
144*640235e2SEnji Coopertap_bridged_body()
145*640235e2SEnji Cooper{
146*640235e2SEnji Cooper	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_LOCAL}
147*640235e2SEnji Cooper	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_REMOTE}
148*640235e2SEnji Cooper
149*640235e2SEnji Cooper	export RUMP_SERVER=${SOCK_LOCAL}
150*640235e2SEnji Cooper
151*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 create
152*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
153*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL
154*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL
155*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 up
156*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 create
157*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP
158*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP
159*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig tap0 up
160*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig -w 10
161*640235e2SEnji Cooper
162*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig bridge0 create
163*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig bridge0 up
164*640235e2SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
165*640235e2SEnji Cooper	atf_check -s exit:0 brconfig bridge0 add shmif0
166*640235e2SEnji Cooper	atf_check -s exit:0 brconfig bridge0 add tap0
167*640235e2SEnji Cooper	unset LD_PRELOAD
168*640235e2SEnji Cooper
169*640235e2SEnji Cooper	export RUMP_SERVER=${SOCK_REMOTE}
170*640235e2SEnji Cooper
171*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 create
172*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
173*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE
174*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE
175*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 up
176*640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig -w 10
177*640235e2SEnji Cooper
178*640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_LOCAL
179*640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP
180*640235e2SEnji Cooper
181*640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL
182*640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP
183*640235e2SEnji Cooper}
184*640235e2SEnji Cooper
185*640235e2SEnji Coopertap_bridged_cleanup()
186*640235e2SEnji Cooper{
187*640235e2SEnji Cooper
188*640235e2SEnji Cooper	RUMP_SERVER=${SOCK_LOCAL} rump.halt
189*640235e2SEnji Cooper	RUMP_SERVER=${SOCK_REMOTE} rump.halt
190*640235e2SEnji Cooper}
191*640235e2SEnji Cooper
192*640235e2SEnji Cooperatf_init_test_cases()
193*640235e2SEnji Cooper{
194*640235e2SEnji Cooper
195*640235e2SEnji Cooper	atf_add_test_case tap_create_destroy
196*640235e2SEnji Cooper	atf_add_test_case tap_stand_alone
197*640235e2SEnji Cooper	atf_add_test_case tap_bridged
198*640235e2SEnji Cooper}
199