t_bridge.sh revision 1.18
1#	$NetBSD: t_bridge.sh,v 1.18 2018/02/01 05:22:01 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_create_destroy cleanup
44atf_test_case bridge_ipv4 cleanup
45atf_test_case bridge_ipv6 cleanup
46atf_test_case bridge_member_ipv4 cleanup
47atf_test_case bridge_member_ipv6 cleanup
48
49bridge_create_destroy_head()
50{
51
52	atf_set "descr" "Test creating/destroying bridge interfaces"
53	atf_set "require.progs" "rump_server"
54}
55
56bridge_ipv4_head()
57{
58	atf_set "descr" "Does simple if_bridge tests"
59	atf_set "require.progs" "rump_server"
60}
61
62bridge_ipv6_head()
63{
64	atf_set "descr" "Does simple if_bridge tests (IPv6)"
65	atf_set "require.progs" "rump_server"
66}
67
68bridge_member_ipv4_head()
69{
70	atf_set "descr" "Tests if_bridge with members with an IP address"
71	atf_set "require.progs" "rump_server"
72}
73
74bridge_member_ipv6_head()
75{
76	atf_set "descr" "Tests if_bridge with members with an IP address (IPv6)"
77	atf_set "require.progs" "rump_server"
78}
79
80setup_endpoint()
81{
82	sock=${1}
83	addr=${2}
84	bus=${3}
85	mode=${4}
86
87	rump_server_add_iface $sock shmif0 $bus
88	export RUMP_SERVER=${sock}
89	if [ $mode = "ipv6" ]; then
90		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
91	else
92		atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
93	fi
94
95	atf_check -s exit:0 rump.ifconfig shmif0 up
96	$DEBUG && rump.ifconfig shmif0
97}
98
99test_endpoint()
100{
101	sock=${1}
102	addr=${2}
103	bus=${3}
104	mode=${4}
105
106	export RUMP_SERVER=${sock}
107	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
108	if [ $mode = "ipv6" ]; then
109		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr}
110	else
111		atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr}
112	fi
113}
114
115test_setup()
116{
117	test_endpoint $SOCK1 $IP1 bus1 ipv4
118	test_endpoint $SOCK3 $IP2 bus2 ipv4
119
120	export RUMP_SERVER=$SOCK2
121	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
122	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
123}
124
125test_setup6()
126{
127	test_endpoint $SOCK1 $IP61 bus1 ipv6
128	test_endpoint $SOCK3 $IP62 bus2 ipv6
129
130	export RUMP_SERVER=$SOCK2
131	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
132	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
133}
134
135setup_bridge_server()
136{
137
138	rump_server_add_iface $SOCK2 shmif0 bus1
139	rump_server_add_iface $SOCK2 shmif1 bus2
140	export RUMP_SERVER=$SOCK2
141	atf_check -s exit:0 rump.ifconfig shmif0 up
142	atf_check -s exit:0 rump.ifconfig shmif1 up
143}
144
145setup()
146{
147
148	rump_server_start $SOCK1 bridge
149	rump_server_start $SOCK2 bridge
150	rump_server_start $SOCK3 bridge
151
152	setup_endpoint $SOCK1 $IP1 bus1 ipv4
153	setup_endpoint $SOCK3 $IP2 bus2 ipv4
154	setup_bridge_server
155}
156
157setup6()
158{
159
160	rump_server_start $SOCK1 netinet6 bridge
161	rump_server_start $SOCK2 netinet6 bridge
162	rump_server_start $SOCK3 netinet6 bridge
163
164	setup_endpoint $SOCK1 $IP61 bus1 ipv6
165	setup_endpoint $SOCK3 $IP62 bus2 ipv6
166	setup_bridge_server
167}
168
169setup_bridge()
170{
171	export RUMP_SERVER=$SOCK2
172	atf_check -s exit:0 rump.ifconfig bridge0 create
173	atf_check -s exit:0 rump.ifconfig bridge0 up
174
175	export LD_PRELOAD=/usr/lib/librumphijack.so
176	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif0
177	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif1
178	/sbin/brconfig bridge0
179	unset LD_PRELOAD
180	rump.ifconfig shmif0
181	rump.ifconfig shmif1
182}
183
184setup_member_ip()
185{
186	export RUMP_SERVER=$SOCK2
187	export LD_PRELOAD=/usr/lib/librumphijack.so
188	atf_check -s exit:0 rump.ifconfig shmif0 $IPBR1/24
189	atf_check -s exit:0 rump.ifconfig shmif1 $IPBR2/24
190	atf_check -s exit:0 rump.ifconfig -w 10
191	/sbin/brconfig bridge0
192	unset LD_PRELOAD
193	rump.ifconfig shmif0
194	rump.ifconfig shmif1
195}
196
197setup_member_ip6()
198{
199	export RUMP_SERVER=$SOCK2
200	export LD_PRELOAD=/usr/lib/librumphijack.so
201	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6BR1
202	atf_check -s exit:0 rump.ifconfig shmif1 inet6 $IP6BR2
203	atf_check -s exit:0 rump.ifconfig -w 10
204	/sbin/brconfig bridge0
205	unset LD_PRELOAD
206	rump.ifconfig shmif0
207	rump.ifconfig shmif1
208}
209
210teardown_bridge()
211{
212	export RUMP_SERVER=$SOCK2
213	export LD_PRELOAD=/usr/lib/librumphijack.so
214	/sbin/brconfig bridge0
215	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif0
216	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif1
217	/sbin/brconfig bridge0
218	unset LD_PRELOAD
219	rump.ifconfig shmif0
220	rump.ifconfig shmif1
221}
222
223test_setup_bridge()
224{
225	export RUMP_SERVER=$SOCK2
226	export LD_PRELOAD=/usr/lib/librumphijack.so
227	atf_check -s exit:0 -o match:shmif0 /sbin/brconfig bridge0
228	atf_check -s exit:0 -o match:shmif1 /sbin/brconfig bridge0
229	/sbin/brconfig bridge0
230	unset LD_PRELOAD
231}
232
233down_up_interfaces()
234{
235	export RUMP_SERVER=$SOCK1
236	rump.ifconfig shmif0 down
237	rump.ifconfig shmif0 up
238	export RUMP_SERVER=$SOCK3
239	rump.ifconfig shmif0 down
240	rump.ifconfig shmif0 up
241}
242
243test_ping_failure()
244{
245	export RUMP_SERVER=$SOCK1
246	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
247	export RUMP_SERVER=$SOCK3
248	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
249}
250
251test_ping_success()
252{
253	export RUMP_SERVER=$SOCK1
254	rump.ifconfig -v shmif0
255	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
256	rump.ifconfig -v shmif0
257
258	export RUMP_SERVER=$SOCK3
259	rump.ifconfig -v shmif0
260	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
261	rump.ifconfig -v shmif0
262}
263
264test_ping6_failure()
265{
266	export RUMP_SERVER=$SOCK1
267	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
268	export RUMP_SERVER=$SOCK3
269	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
270}
271
272test_ping6_success()
273{
274	export RUMP_SERVER=$SOCK1
275	rump.ifconfig -v shmif0
276	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
277	rump.ifconfig -v shmif0
278
279	export RUMP_SERVER=$SOCK3
280	rump.ifconfig -v shmif0
281	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
282	rump.ifconfig -v shmif0
283}
284
285test_ping_member()
286{
287	export RUMP_SERVER=$SOCK1
288	rump.ifconfig -v shmif0
289	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
290	rump.ifconfig -v shmif0
291	# Test for PR#48104
292	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
293	rump.ifconfig -v shmif0
294
295	export RUMP_SERVER=$SOCK3
296	rump.ifconfig -v shmif0
297	# Test for PR#48104
298	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
299	rump.ifconfig -v shmif0
300	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
301	rump.ifconfig -v shmif0
302}
303
304test_ping6_member()
305{
306	export RUMP_SERVER=$SOCK1
307	rump.ifconfig -v shmif0
308	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
309	rump.ifconfig -v shmif0
310	# Test for PR#48104
311	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
312	rump.ifconfig -v shmif0
313
314	export RUMP_SERVER=$SOCK3
315	rump.ifconfig -v shmif0
316	# Test for PR#48104
317	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
318	rump.ifconfig -v shmif0
319	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
320	rump.ifconfig -v shmif0
321}
322
323bridge_create_destroy_body()
324{
325
326	rump_server_start $SOCK1 bridge
327
328	test_create_destroy_common $SOCK1 bridge0
329}
330
331bridge_ipv4_body()
332{
333	setup
334	test_setup
335
336	# Enable once PR kern/49219 is fixed
337	#test_ping_failure
338
339	setup_bridge
340	sleep 1
341	test_setup_bridge
342	test_ping_success
343
344	teardown_bridge
345	test_ping_failure
346
347	rump_server_destroy_ifaces
348}
349
350bridge_ipv6_body()
351{
352	setup6
353	test_setup6
354
355	test_ping6_failure
356
357	setup_bridge
358	sleep 1
359	test_setup_bridge
360	test_ping6_success
361
362	teardown_bridge
363	test_ping6_failure
364
365	rump_server_destroy_ifaces
366}
367
368bridge_member_ipv4_body()
369{
370	setup
371	test_setup
372
373	# Enable once PR kern/49219 is fixed
374	#test_ping_failure
375
376	setup_bridge
377	sleep 1
378	test_setup_bridge
379	test_ping_success
380
381	setup_member_ip
382	test_ping_member
383
384	teardown_bridge
385	test_ping_failure
386
387	rump_server_destroy_ifaces
388}
389
390bridge_member_ipv6_body()
391{
392	setup6
393	test_setup6
394
395	test_ping6_failure
396
397	setup_bridge
398	sleep 1
399	test_setup_bridge
400	test_ping6_success
401
402	setup_member_ip6
403	test_ping6_member
404
405	teardown_bridge
406	test_ping6_failure
407
408	rump_server_destroy_ifaces
409}
410
411bridge_create_destroy_cleanup()
412{
413
414	$DEBUG && dump
415	cleanup
416}
417
418bridge_ipv4_cleanup()
419{
420
421	$DEBUG && dump
422	cleanup
423}
424
425bridge_ipv6_cleanup()
426{
427
428	$DEBUG && dump
429	cleanup
430}
431
432bridge_member_ipv4_cleanup()
433{
434
435	$DEBUG && dump
436	cleanup
437}
438
439bridge_member_ipv6_cleanup()
440{
441
442	$DEBUG && dump
443	cleanup
444}
445
446atf_init_test_cases()
447{
448
449	atf_add_test_case bridge_create_destroy
450	atf_add_test_case bridge_ipv4
451	atf_add_test_case bridge_ipv6
452	atf_add_test_case bridge_member_ipv4
453	atf_add_test_case bridge_member_ipv6
454}
455