t_bridge.sh revision 1.17
1#	$NetBSD: t_bridge.sh,v 1.17 2017/03/11 04:24:52 ozaki-r Exp $
2#
3# Copyright (c) 2014 The NetBSD Foundation, Inc.
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10#    notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright
12#    notice, this list of conditions and the following disclaimer in the
13#    documentation and/or other materials provided with the distribution.
14#
15# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25# POSSIBILITY OF SUCH DAMAGE.
26#
27
28SOCK1=unix://commsock1
29SOCK2=unix://commsock2
30SOCK3=unix://commsock3
31IP1=10.0.0.1
32IP2=10.0.0.2
33IP61=fc00::1
34IP62=fc00::2
35IPBR1=10.0.0.11
36IPBR2=10.0.0.12
37IP6BR1=fc00::11
38IP6BR2=fc00::12
39
40DEBUG=${DEBUG:-false}
41TIMEOUT=5
42
43atf_test_case bridge_ipv4 cleanup
44atf_test_case bridge_ipv6 cleanup
45atf_test_case bridge_member_ipv4 cleanup
46atf_test_case bridge_member_ipv6 cleanup
47
48bridge_ipv4_head()
49{
50	atf_set "descr" "Does simple if_bridge tests"
51	atf_set "require.progs" "rump_server"
52}
53
54bridge_ipv6_head()
55{
56	atf_set "descr" "Does simple if_bridge tests (IPv6)"
57	atf_set "require.progs" "rump_server"
58}
59
60bridge_member_ipv4_head()
61{
62	atf_set "descr" "Tests if_bridge with members with an IP address"
63	atf_set "require.progs" "rump_server"
64}
65
66bridge_member_ipv6_head()
67{
68	atf_set "descr" "Tests if_bridge with members with an IP address (IPv6)"
69	atf_set "require.progs" "rump_server"
70}
71
72setup_endpoint()
73{
74	sock=${1}
75	addr=${2}
76	bus=${3}
77	mode=${4}
78
79	rump_server_add_iface $sock shmif0 $bus
80	export RUMP_SERVER=${sock}
81	if [ $mode = "ipv6" ]; then
82		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
83	else
84		atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
85	fi
86
87	atf_check -s exit:0 rump.ifconfig shmif0 up
88	$DEBUG && rump.ifconfig shmif0
89}
90
91test_endpoint()
92{
93	sock=${1}
94	addr=${2}
95	bus=${3}
96	mode=${4}
97
98	export RUMP_SERVER=${sock}
99	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
100	if [ $mode = "ipv6" ]; then
101		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr}
102	else
103		atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr}
104	fi
105}
106
107test_setup()
108{
109	test_endpoint $SOCK1 $IP1 bus1 ipv4
110	test_endpoint $SOCK3 $IP2 bus2 ipv4
111
112	export RUMP_SERVER=$SOCK2
113	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
114	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
115}
116
117test_setup6()
118{
119	test_endpoint $SOCK1 $IP61 bus1 ipv6
120	test_endpoint $SOCK3 $IP62 bus2 ipv6
121
122	export RUMP_SERVER=$SOCK2
123	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
124	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
125}
126
127setup_bridge_server()
128{
129
130	rump_server_add_iface $SOCK2 shmif0 bus1
131	rump_server_add_iface $SOCK2 shmif1 bus2
132	export RUMP_SERVER=$SOCK2
133	atf_check -s exit:0 rump.ifconfig shmif0 up
134	atf_check -s exit:0 rump.ifconfig shmif1 up
135}
136
137setup()
138{
139
140	rump_server_start $SOCK1 bridge
141	rump_server_start $SOCK2 bridge
142	rump_server_start $SOCK3 bridge
143
144	setup_endpoint $SOCK1 $IP1 bus1 ipv4
145	setup_endpoint $SOCK3 $IP2 bus2 ipv4
146	setup_bridge_server
147}
148
149setup6()
150{
151
152	rump_server_start $SOCK1 netinet6 bridge
153	rump_server_start $SOCK2 netinet6 bridge
154	rump_server_start $SOCK3 netinet6 bridge
155
156	setup_endpoint $SOCK1 $IP61 bus1 ipv6
157	setup_endpoint $SOCK3 $IP62 bus2 ipv6
158	setup_bridge_server
159}
160
161setup_bridge()
162{
163	export RUMP_SERVER=$SOCK2
164	atf_check -s exit:0 rump.ifconfig bridge0 create
165	atf_check -s exit:0 rump.ifconfig bridge0 up
166
167	export LD_PRELOAD=/usr/lib/librumphijack.so
168	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif0
169	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif1
170	/sbin/brconfig bridge0
171	unset LD_PRELOAD
172	rump.ifconfig shmif0
173	rump.ifconfig shmif1
174}
175
176setup_member_ip()
177{
178	export RUMP_SERVER=$SOCK2
179	export LD_PRELOAD=/usr/lib/librumphijack.so
180	atf_check -s exit:0 rump.ifconfig shmif0 $IPBR1/24
181	atf_check -s exit:0 rump.ifconfig shmif1 $IPBR2/24
182	atf_check -s exit:0 rump.ifconfig -w 10
183	/sbin/brconfig bridge0
184	unset LD_PRELOAD
185	rump.ifconfig shmif0
186	rump.ifconfig shmif1
187}
188
189setup_member_ip6()
190{
191	export RUMP_SERVER=$SOCK2
192	export LD_PRELOAD=/usr/lib/librumphijack.so
193	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6BR1
194	atf_check -s exit:0 rump.ifconfig shmif1 inet6 $IP6BR2
195	atf_check -s exit:0 rump.ifconfig -w 10
196	/sbin/brconfig bridge0
197	unset LD_PRELOAD
198	rump.ifconfig shmif0
199	rump.ifconfig shmif1
200}
201
202teardown_bridge()
203{
204	export RUMP_SERVER=$SOCK2
205	export LD_PRELOAD=/usr/lib/librumphijack.so
206	/sbin/brconfig bridge0
207	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif0
208	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif1
209	/sbin/brconfig bridge0
210	unset LD_PRELOAD
211	rump.ifconfig shmif0
212	rump.ifconfig shmif1
213}
214
215test_setup_bridge()
216{
217	export RUMP_SERVER=$SOCK2
218	export LD_PRELOAD=/usr/lib/librumphijack.so
219	atf_check -s exit:0 -o match:shmif0 /sbin/brconfig bridge0
220	atf_check -s exit:0 -o match:shmif1 /sbin/brconfig bridge0
221	/sbin/brconfig bridge0
222	unset LD_PRELOAD
223}
224
225down_up_interfaces()
226{
227	export RUMP_SERVER=$SOCK1
228	rump.ifconfig shmif0 down
229	rump.ifconfig shmif0 up
230	export RUMP_SERVER=$SOCK3
231	rump.ifconfig shmif0 down
232	rump.ifconfig shmif0 up
233}
234
235test_ping_failure()
236{
237	export RUMP_SERVER=$SOCK1
238	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
239	export RUMP_SERVER=$SOCK3
240	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
241}
242
243test_ping_success()
244{
245	export RUMP_SERVER=$SOCK1
246	rump.ifconfig -v shmif0
247	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
248	rump.ifconfig -v shmif0
249
250	export RUMP_SERVER=$SOCK3
251	rump.ifconfig -v shmif0
252	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
253	rump.ifconfig -v shmif0
254}
255
256test_ping6_failure()
257{
258	export RUMP_SERVER=$SOCK1
259	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
260	export RUMP_SERVER=$SOCK3
261	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
262}
263
264test_ping6_success()
265{
266	export RUMP_SERVER=$SOCK1
267	rump.ifconfig -v shmif0
268	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
269	rump.ifconfig -v shmif0
270
271	export RUMP_SERVER=$SOCK3
272	rump.ifconfig -v shmif0
273	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
274	rump.ifconfig -v shmif0
275}
276
277test_ping_member()
278{
279	export RUMP_SERVER=$SOCK1
280	rump.ifconfig -v shmif0
281	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
282	rump.ifconfig -v shmif0
283	# Test for PR#48104
284	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
285	rump.ifconfig -v shmif0
286
287	export RUMP_SERVER=$SOCK3
288	rump.ifconfig -v shmif0
289	# Test for PR#48104
290	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
291	rump.ifconfig -v shmif0
292	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
293	rump.ifconfig -v shmif0
294}
295
296test_ping6_member()
297{
298	export RUMP_SERVER=$SOCK1
299	rump.ifconfig -v shmif0
300	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
301	rump.ifconfig -v shmif0
302	# Test for PR#48104
303	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
304	rump.ifconfig -v shmif0
305
306	export RUMP_SERVER=$SOCK3
307	rump.ifconfig -v shmif0
308	# Test for PR#48104
309	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
310	rump.ifconfig -v shmif0
311	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
312	rump.ifconfig -v shmif0
313}
314
315bridge_ipv4_body()
316{
317	setup
318	test_setup
319
320	# Enable once PR kern/49219 is fixed
321	#test_ping_failure
322
323	setup_bridge
324	sleep 1
325	test_setup_bridge
326	test_ping_success
327
328	teardown_bridge
329	test_ping_failure
330
331	rump_server_destroy_ifaces
332}
333
334bridge_ipv6_body()
335{
336	setup6
337	test_setup6
338
339	test_ping6_failure
340
341	setup_bridge
342	sleep 1
343	test_setup_bridge
344	test_ping6_success
345
346	teardown_bridge
347	test_ping6_failure
348
349	rump_server_destroy_ifaces
350}
351
352bridge_member_ipv4_body()
353{
354	setup
355	test_setup
356
357	# Enable once PR kern/49219 is fixed
358	#test_ping_failure
359
360	setup_bridge
361	sleep 1
362	test_setup_bridge
363	test_ping_success
364
365	setup_member_ip
366	test_ping_member
367
368	teardown_bridge
369	test_ping_failure
370
371	rump_server_destroy_ifaces
372}
373
374bridge_member_ipv6_body()
375{
376	setup6
377	test_setup6
378
379	test_ping6_failure
380
381	setup_bridge
382	sleep 1
383	test_setup_bridge
384	test_ping6_success
385
386	setup_member_ip6
387	test_ping6_member
388
389	teardown_bridge
390	test_ping6_failure
391
392	rump_server_destroy_ifaces
393}
394
395bridge_ipv4_cleanup()
396{
397
398	$DEBUG && dump
399	cleanup
400}
401
402bridge_ipv6_cleanup()
403{
404
405	$DEBUG && dump
406	cleanup
407}
408
409bridge_member_ipv4_cleanup()
410{
411
412	$DEBUG && dump
413	cleanup
414}
415
416bridge_member_ipv6_cleanup()
417{
418
419	$DEBUG && dump
420	cleanup
421}
422
423atf_init_test_cases()
424{
425	atf_add_test_case bridge_ipv4
426	atf_add_test_case bridge_ipv6
427	atf_add_test_case bridge_member_ipv4
428	atf_add_test_case bridge_member_ipv6
429}
430