xref: /freebsd-src/contrib/netbsd-tests/net/if_bridge/t_bridge.sh (revision d370fd1cd8fc69e87dc63f4f4a82e5a8b4956c93)
1*cdebaff8SEnji Cooper#	$NetBSD: t_bridge.sh,v 1.16 2016/11/25 08:51:16 ozaki-r Exp $
257718be8SEnji Cooper#
357718be8SEnji Cooper# Copyright (c) 2014 The NetBSD Foundation, Inc.
457718be8SEnji Cooper# All rights reserved.
557718be8SEnji Cooper#
657718be8SEnji Cooper# Redistribution and use in source and binary forms, with or without
757718be8SEnji Cooper# modification, are permitted provided that the following conditions
857718be8SEnji Cooper# are met:
957718be8SEnji Cooper# 1. Redistributions of source code must retain the above copyright
1057718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer.
1157718be8SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright
1257718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer in the
1357718be8SEnji Cooper#    documentation and/or other materials provided with the distribution.
1457718be8SEnji Cooper#
1557718be8SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
1657718be8SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
1757718be8SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1857718be8SEnji Cooper# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
1957718be8SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2057718be8SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2157718be8SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2257718be8SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2357718be8SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2457718be8SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2557718be8SEnji Cooper# POSSIBILITY OF SUCH DAMAGE.
2657718be8SEnji Cooper#
2757718be8SEnji Cooper
2857718be8SEnji CooperSOCK1=unix://commsock1
2957718be8SEnji CooperSOCK2=unix://commsock2
3057718be8SEnji CooperSOCK3=unix://commsock3
3157718be8SEnji CooperIP1=10.0.0.1
3257718be8SEnji CooperIP2=10.0.0.2
3357718be8SEnji CooperIP61=fc00::1
3457718be8SEnji CooperIP62=fc00::2
35640235e2SEnji CooperIPBR1=10.0.0.11
36640235e2SEnji CooperIPBR2=10.0.0.12
37640235e2SEnji CooperIP6BR1=fc00::11
38640235e2SEnji CooperIP6BR2=fc00::12
3957718be8SEnji Cooper
40*cdebaff8SEnji CooperDEBUG=${DEBUG:-false}
41640235e2SEnji CooperTIMEOUT=5
4257718be8SEnji Cooper
43640235e2SEnji Cooperatf_test_case bridge_ipv4 cleanup
44640235e2SEnji Cooperatf_test_case bridge_ipv6 cleanup
45640235e2SEnji Cooperatf_test_case bridge_rtable cleanup
46640235e2SEnji Cooperatf_test_case bridge_member_ipv4 cleanup
47640235e2SEnji Cooperatf_test_case bridge_member_ipv6 cleanup
48640235e2SEnji Cooper
49640235e2SEnji Cooperbridge_ipv4_head()
5057718be8SEnji Cooper{
5157718be8SEnji Cooper	atf_set "descr" "Does simple if_bridge tests"
5257718be8SEnji Cooper	atf_set "require.progs" "rump_server"
5357718be8SEnji Cooper}
5457718be8SEnji Cooper
55640235e2SEnji Cooperbridge_ipv6_head()
5657718be8SEnji Cooper{
5757718be8SEnji Cooper	atf_set "descr" "Does simple if_bridge tests (IPv6)"
5857718be8SEnji Cooper	atf_set "require.progs" "rump_server"
5957718be8SEnji Cooper}
6057718be8SEnji Cooper
61640235e2SEnji Cooperbridge_rtable_head()
62640235e2SEnji Cooper{
63640235e2SEnji Cooper	atf_set "descr" "Tests route table operations of if_bridge"
64640235e2SEnji Cooper	atf_set "require.progs" "rump_server"
65640235e2SEnji Cooper}
66640235e2SEnji Cooper
67640235e2SEnji Cooperbridge_member_ipv4_head()
68640235e2SEnji Cooper{
69640235e2SEnji Cooper	atf_set "descr" "Tests if_bridge with members with an IP address"
70640235e2SEnji Cooper	atf_set "require.progs" "rump_server"
71640235e2SEnji Cooper}
72640235e2SEnji Cooper
73640235e2SEnji Cooperbridge_member_ipv6_head()
74640235e2SEnji Cooper{
75640235e2SEnji Cooper	atf_set "descr" "Tests if_bridge with members with an IP address (IPv6)"
76640235e2SEnji Cooper	atf_set "require.progs" "rump_server"
77640235e2SEnji Cooper}
78640235e2SEnji Cooper
7957718be8SEnji Coopersetup_endpoint()
8057718be8SEnji Cooper{
8157718be8SEnji Cooper	sock=${1}
8257718be8SEnji Cooper	addr=${2}
8357718be8SEnji Cooper	bus=${3}
8457718be8SEnji Cooper	mode=${4}
8557718be8SEnji Cooper
86*cdebaff8SEnji Cooper	rump_server_add_iface $sock shmif0 $bus
8757718be8SEnji Cooper	export RUMP_SERVER=${sock}
8857718be8SEnji Cooper	if [ $mode = "ipv6" ]; then
8957718be8SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
9057718be8SEnji Cooper	else
9157718be8SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
9257718be8SEnji Cooper	fi
9357718be8SEnji Cooper
9457718be8SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 up
95*cdebaff8SEnji Cooper	$DEBUG && rump.ifconfig shmif0
9657718be8SEnji Cooper}
9757718be8SEnji Cooper
9857718be8SEnji Coopertest_endpoint()
9957718be8SEnji Cooper{
10057718be8SEnji Cooper	sock=${1}
10157718be8SEnji Cooper	addr=${2}
10257718be8SEnji Cooper	bus=${3}
10357718be8SEnji Cooper	mode=${4}
10457718be8SEnji Cooper
10557718be8SEnji Cooper	export RUMP_SERVER=${sock}
10657718be8SEnji Cooper	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
10757718be8SEnji Cooper	if [ $mode = "ipv6" ]; then
108640235e2SEnji Cooper		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr}
10957718be8SEnji Cooper	else
110640235e2SEnji Cooper		atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr}
11157718be8SEnji Cooper	fi
11257718be8SEnji Cooper}
11357718be8SEnji Cooper
11457718be8SEnji Coopertest_setup()
11557718be8SEnji Cooper{
11657718be8SEnji Cooper	test_endpoint $SOCK1 $IP1 bus1 ipv4
11757718be8SEnji Cooper	test_endpoint $SOCK3 $IP2 bus2 ipv4
11857718be8SEnji Cooper
11957718be8SEnji Cooper	export RUMP_SERVER=$SOCK2
12057718be8SEnji Cooper	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
12157718be8SEnji Cooper	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
12257718be8SEnji Cooper}
12357718be8SEnji Cooper
12457718be8SEnji Coopertest_setup6()
12557718be8SEnji Cooper{
12657718be8SEnji Cooper	test_endpoint $SOCK1 $IP61 bus1 ipv6
12757718be8SEnji Cooper	test_endpoint $SOCK3 $IP62 bus2 ipv6
12857718be8SEnji Cooper
12957718be8SEnji Cooper	export RUMP_SERVER=$SOCK2
13057718be8SEnji Cooper	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
13157718be8SEnji Cooper	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
13257718be8SEnji Cooper}
13357718be8SEnji Cooper
13457718be8SEnji Coopersetup_bridge_server()
13557718be8SEnji Cooper{
13657718be8SEnji Cooper
137*cdebaff8SEnji Cooper	rump_server_add_iface $SOCK2 shmif0 bus1
138*cdebaff8SEnji Cooper	rump_server_add_iface $SOCK2 shmif1 bus2
139*cdebaff8SEnji Cooper	export RUMP_SERVER=$SOCK2
140*cdebaff8SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 up
14157718be8SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif1 up
14257718be8SEnji Cooper}
14357718be8SEnji Cooper
14457718be8SEnji Coopersetup()
14557718be8SEnji Cooper{
146*cdebaff8SEnji Cooper
147*cdebaff8SEnji Cooper	rump_server_start $SOCK1 bridge
148*cdebaff8SEnji Cooper	rump_server_start $SOCK2 bridge
149*cdebaff8SEnji Cooper	rump_server_start $SOCK3 bridge
15057718be8SEnji Cooper
15157718be8SEnji Cooper	setup_endpoint $SOCK1 $IP1 bus1 ipv4
15257718be8SEnji Cooper	setup_endpoint $SOCK3 $IP2 bus2 ipv4
15357718be8SEnji Cooper	setup_bridge_server
15457718be8SEnji Cooper}
15557718be8SEnji Cooper
15657718be8SEnji Coopersetup6()
15757718be8SEnji Cooper{
158*cdebaff8SEnji Cooper
159*cdebaff8SEnji Cooper	rump_server_start $SOCK1 netinet6 bridge
160*cdebaff8SEnji Cooper	rump_server_start $SOCK2 netinet6 bridge
161*cdebaff8SEnji Cooper	rump_server_start $SOCK3 netinet6 bridge
16257718be8SEnji Cooper
16357718be8SEnji Cooper	setup_endpoint $SOCK1 $IP61 bus1 ipv6
16457718be8SEnji Cooper	setup_endpoint $SOCK3 $IP62 bus2 ipv6
16557718be8SEnji Cooper	setup_bridge_server
16657718be8SEnji Cooper}
16757718be8SEnji Cooper
16857718be8SEnji Coopersetup_bridge()
16957718be8SEnji Cooper{
17057718be8SEnji Cooper	export RUMP_SERVER=$SOCK2
17157718be8SEnji Cooper	atf_check -s exit:0 rump.ifconfig bridge0 create
17257718be8SEnji Cooper	atf_check -s exit:0 rump.ifconfig bridge0 up
17357718be8SEnji Cooper
17457718be8SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
17557718be8SEnji Cooper	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif0
17657718be8SEnji Cooper	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif1
17757718be8SEnji Cooper	/sbin/brconfig bridge0
17857718be8SEnji Cooper	unset LD_PRELOAD
17957718be8SEnji Cooper	rump.ifconfig shmif0
18057718be8SEnji Cooper	rump.ifconfig shmif1
18157718be8SEnji Cooper}
18257718be8SEnji Cooper
183640235e2SEnji Coopersetup_member_ip()
184640235e2SEnji Cooper{
185640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
186640235e2SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
187640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 $IPBR1/24
188640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif1 $IPBR2/24
189640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig -w 10
190640235e2SEnji Cooper	/sbin/brconfig bridge0
191640235e2SEnji Cooper	unset LD_PRELOAD
192640235e2SEnji Cooper	rump.ifconfig shmif0
193640235e2SEnji Cooper	rump.ifconfig shmif1
194640235e2SEnji Cooper}
195640235e2SEnji Cooper
196640235e2SEnji Coopersetup_member_ip6()
197640235e2SEnji Cooper{
198640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
199640235e2SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
200640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6BR1
201640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif1 inet6 $IP6BR2
202640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig -w 10
203640235e2SEnji Cooper	/sbin/brconfig bridge0
204640235e2SEnji Cooper	unset LD_PRELOAD
205640235e2SEnji Cooper	rump.ifconfig shmif0
206640235e2SEnji Cooper	rump.ifconfig shmif1
207640235e2SEnji Cooper}
208640235e2SEnji Cooper
20957718be8SEnji Cooperteardown_bridge()
21057718be8SEnji Cooper{
21157718be8SEnji Cooper	export RUMP_SERVER=$SOCK2
21257718be8SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
21357718be8SEnji Cooper	/sbin/brconfig bridge0
21457718be8SEnji Cooper	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif0
21557718be8SEnji Cooper	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif1
21657718be8SEnji Cooper	/sbin/brconfig bridge0
21757718be8SEnji Cooper	unset LD_PRELOAD
21857718be8SEnji Cooper	rump.ifconfig shmif0
21957718be8SEnji Cooper	rump.ifconfig shmif1
22057718be8SEnji Cooper}
22157718be8SEnji Cooper
22257718be8SEnji Coopertest_setup_bridge()
22357718be8SEnji Cooper{
22457718be8SEnji Cooper	export RUMP_SERVER=$SOCK2
22557718be8SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
22657718be8SEnji Cooper	atf_check -s exit:0 -o match:shmif0 /sbin/brconfig bridge0
22757718be8SEnji Cooper	atf_check -s exit:0 -o match:shmif1 /sbin/brconfig bridge0
22857718be8SEnji Cooper	/sbin/brconfig bridge0
22957718be8SEnji Cooper	unset LD_PRELOAD
23057718be8SEnji Cooper}
23157718be8SEnji Cooper
23257718be8SEnji Cooperdown_up_interfaces()
23357718be8SEnji Cooper{
23457718be8SEnji Cooper	export RUMP_SERVER=$SOCK1
23557718be8SEnji Cooper	rump.ifconfig shmif0 down
23657718be8SEnji Cooper	rump.ifconfig shmif0 up
23757718be8SEnji Cooper	export RUMP_SERVER=$SOCK3
23857718be8SEnji Cooper	rump.ifconfig shmif0 down
23957718be8SEnji Cooper	rump.ifconfig shmif0 up
24057718be8SEnji Cooper}
24157718be8SEnji Cooper
24257718be8SEnji Coopertest_ping_failure()
24357718be8SEnji Cooper{
24457718be8SEnji Cooper	export RUMP_SERVER=$SOCK1
245640235e2SEnji Cooper	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
24657718be8SEnji Cooper	export RUMP_SERVER=$SOCK3
247640235e2SEnji Cooper	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
24857718be8SEnji Cooper}
24957718be8SEnji Cooper
25057718be8SEnji Coopertest_ping_success()
25157718be8SEnji Cooper{
25257718be8SEnji Cooper	export RUMP_SERVER=$SOCK1
25357718be8SEnji Cooper	rump.ifconfig -v shmif0
254640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
25557718be8SEnji Cooper	rump.ifconfig -v shmif0
25657718be8SEnji Cooper
25757718be8SEnji Cooper	export RUMP_SERVER=$SOCK3
25857718be8SEnji Cooper	rump.ifconfig -v shmif0
259640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
26057718be8SEnji Cooper	rump.ifconfig -v shmif0
26157718be8SEnji Cooper}
26257718be8SEnji Cooper
26357718be8SEnji Coopertest_ping6_failure()
26457718be8SEnji Cooper{
26557718be8SEnji Cooper	export RUMP_SERVER=$SOCK1
266640235e2SEnji Cooper	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
26757718be8SEnji Cooper	export RUMP_SERVER=$SOCK3
268640235e2SEnji Cooper	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
26957718be8SEnji Cooper}
27057718be8SEnji Cooper
27157718be8SEnji Coopertest_ping6_success()
27257718be8SEnji Cooper{
27357718be8SEnji Cooper	export RUMP_SERVER=$SOCK1
27457718be8SEnji Cooper	rump.ifconfig -v shmif0
275640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
27657718be8SEnji Cooper	rump.ifconfig -v shmif0
27757718be8SEnji Cooper
27857718be8SEnji Cooper	export RUMP_SERVER=$SOCK3
27957718be8SEnji Cooper	rump.ifconfig -v shmif0
280640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
28157718be8SEnji Cooper	rump.ifconfig -v shmif0
28257718be8SEnji Cooper}
28357718be8SEnji Cooper
284640235e2SEnji Coopertest_ping_member()
285640235e2SEnji Cooper{
286640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
287640235e2SEnji Cooper	rump.ifconfig -v shmif0
288640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
289640235e2SEnji Cooper	rump.ifconfig -v shmif0
290640235e2SEnji Cooper	# Test for PR#48104
291640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
292640235e2SEnji Cooper	rump.ifconfig -v shmif0
293640235e2SEnji Cooper
294640235e2SEnji Cooper	export RUMP_SERVER=$SOCK3
295640235e2SEnji Cooper	rump.ifconfig -v shmif0
296640235e2SEnji Cooper	# Test for PR#48104
297640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
298640235e2SEnji Cooper	rump.ifconfig -v shmif0
299640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
300640235e2SEnji Cooper	rump.ifconfig -v shmif0
301640235e2SEnji Cooper}
302640235e2SEnji Cooper
303640235e2SEnji Coopertest_ping6_member()
304640235e2SEnji Cooper{
305640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
306640235e2SEnji Cooper	rump.ifconfig -v shmif0
307640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
308640235e2SEnji Cooper	rump.ifconfig -v shmif0
309640235e2SEnji Cooper	# Test for PR#48104
310640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
311640235e2SEnji Cooper	rump.ifconfig -v shmif0
312640235e2SEnji Cooper
313640235e2SEnji Cooper	export RUMP_SERVER=$SOCK3
314640235e2SEnji Cooper	rump.ifconfig -v shmif0
315640235e2SEnji Cooper	# Test for PR#48104
316640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
317640235e2SEnji Cooper	rump.ifconfig -v shmif0
318640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
319640235e2SEnji Cooper	rump.ifconfig -v shmif0
320640235e2SEnji Cooper}
321640235e2SEnji Cooper
322640235e2SEnji Cooperget_number_of_caches()
323640235e2SEnji Cooper{
324640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
325640235e2SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
326640235e2SEnji Cooper	echo $(($(/sbin/brconfig bridge0 |grep -A 100 "Address cache" |wc -l) - 1))
327640235e2SEnji Cooper	unset LD_PRELOAD
328640235e2SEnji Cooper}
329640235e2SEnji Cooper
330640235e2SEnji Coopertest_brconfig_maxaddr()
331640235e2SEnji Cooper{
332640235e2SEnji Cooper	addr1= addr3= n=
333640235e2SEnji Cooper
334640235e2SEnji Cooper	# Get MAC addresses of the endpoints.
335*cdebaff8SEnji Cooper	addr1=$(get_macaddr $SOCK1 shmif0)
336*cdebaff8SEnji Cooper	addr3=$(get_macaddr $SOCK3 shmif0)
337640235e2SEnji Cooper
338640235e2SEnji Cooper	# Refill the MAC addresses of the endpoints.
339640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
340640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
341640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
342640235e2SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
343640235e2SEnji Cooper	/sbin/brconfig bridge0
344640235e2SEnji Cooper	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
345640235e2SEnji Cooper	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
346640235e2SEnji Cooper
347640235e2SEnji Cooper	# Check the default # of caches is 100
348640235e2SEnji Cooper	atf_check -s exit:0 -o match:"max cache: 100" /sbin/brconfig bridge0
349640235e2SEnji Cooper
350640235e2SEnji Cooper	# Test two MAC addresses are cached
351640235e2SEnji Cooper	n=$(get_number_of_caches)
352640235e2SEnji Cooper	atf_check_equal $n 2
353640235e2SEnji Cooper
354640235e2SEnji Cooper	# Limit # of caches to one
355640235e2SEnji Cooper	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 1
356640235e2SEnji Cooper	atf_check -s exit:0 -o match:"max cache: 1" /sbin/brconfig bridge0
357640235e2SEnji Cooper	/sbin/brconfig bridge0
358640235e2SEnji Cooper
359640235e2SEnji Cooper	# Test just one address is cached
360640235e2SEnji Cooper	n=$(get_number_of_caches)
361640235e2SEnji Cooper	atf_check_equal $n 1
362640235e2SEnji Cooper
363640235e2SEnji Cooper	# Increase # of caches to two
364640235e2SEnji Cooper	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 2
365640235e2SEnji Cooper	atf_check -s exit:0 -o match:"max cache: 2" /sbin/brconfig bridge0
366640235e2SEnji Cooper	unset LD_PRELOAD
367640235e2SEnji Cooper
368640235e2SEnji Cooper	# Test we can cache two addresses again
369640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
370640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
371640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
372640235e2SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
373640235e2SEnji Cooper	/sbin/brconfig bridge0
374640235e2SEnji Cooper	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
375640235e2SEnji Cooper	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
376640235e2SEnji Cooper	unset LD_PRELOAD
377640235e2SEnji Cooper}
378640235e2SEnji Cooper
379640235e2SEnji Cooperbridge_ipv4_body()
38057718be8SEnji Cooper{
38157718be8SEnji Cooper	setup
38257718be8SEnji Cooper	test_setup
38357718be8SEnji Cooper
384640235e2SEnji Cooper	# Enable once PR kern/49219 is fixed
385640235e2SEnji Cooper	#test_ping_failure
38657718be8SEnji Cooper
387640235e2SEnji Cooper	setup_bridge
388640235e2SEnji Cooper	sleep 1
389640235e2SEnji Cooper	test_setup_bridge
39057718be8SEnji Cooper	test_ping_success
39157718be8SEnji Cooper
39257718be8SEnji Cooper	teardown_bridge
39357718be8SEnji Cooper	test_ping_failure
394*cdebaff8SEnji Cooper
395*cdebaff8SEnji Cooper	rump_server_destroy_ifaces
39657718be8SEnji Cooper}
39757718be8SEnji Cooper
398640235e2SEnji Cooperbridge_ipv6_body()
39957718be8SEnji Cooper{
40057718be8SEnji Cooper	setup6
40157718be8SEnji Cooper	test_setup6
40257718be8SEnji Cooper
403640235e2SEnji Cooper	test_ping6_failure
40457718be8SEnji Cooper
40557718be8SEnji Cooper	setup_bridge
406640235e2SEnji Cooper	sleep 1
40757718be8SEnji Cooper	test_setup_bridge
40857718be8SEnji Cooper	test_ping6_success
40957718be8SEnji Cooper
41057718be8SEnji Cooper	teardown_bridge
411640235e2SEnji Cooper	test_ping6_failure
412*cdebaff8SEnji Cooper
413*cdebaff8SEnji Cooper	rump_server_destroy_ifaces
41457718be8SEnji Cooper}
41557718be8SEnji Cooper
416640235e2SEnji Cooperbridge_rtable_body()
417640235e2SEnji Cooper{
418640235e2SEnji Cooper	addr1= addr3=
419640235e2SEnji Cooper
420640235e2SEnji Cooper	setup
421640235e2SEnji Cooper	setup_bridge
422640235e2SEnji Cooper
423640235e2SEnji Cooper	# Get MAC addresses of the endpoints.
424*cdebaff8SEnji Cooper	addr1=$(get_macaddr $SOCK1 shmif0)
425*cdebaff8SEnji Cooper	addr3=$(get_macaddr $SOCK3 shmif0)
426640235e2SEnji Cooper
427640235e2SEnji Cooper	# Confirm there is no MAC address caches.
428640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
429640235e2SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
430*cdebaff8SEnji Cooper	$DEBUG && /sbin/brconfig bridge0
431640235e2SEnji Cooper	atf_check -s exit:0 -o not-match:"$addr1" /sbin/brconfig bridge0
432640235e2SEnji Cooper	atf_check -s exit:0 -o not-match:"$addr3" /sbin/brconfig bridge0
433640235e2SEnji Cooper	unset LD_PRELOAD
434640235e2SEnji Cooper
435640235e2SEnji Cooper	# Make the bridge learn the MAC addresses of the endpoints.
436640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
437640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
438640235e2SEnji Cooper	unset RUMP_SERVER
439640235e2SEnji Cooper
440640235e2SEnji Cooper	# Tests the addresses are in the cache.
441640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
442640235e2SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
443*cdebaff8SEnji Cooper	$DEBUG && /sbin/brconfig bridge0
444640235e2SEnji Cooper	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
445640235e2SEnji Cooper	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
446640235e2SEnji Cooper
447640235e2SEnji Cooper	# Tests brconfig deladdr
448640235e2SEnji Cooper	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr1"
449640235e2SEnji Cooper	atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
450640235e2SEnji Cooper	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr3"
451640235e2SEnji Cooper	atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
452640235e2SEnji Cooper	unset LD_PRELOAD
453640235e2SEnji Cooper
454640235e2SEnji Cooper	# Refill the MAC addresses of the endpoints.
455640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
456640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
457640235e2SEnji Cooper	unset RUMP_SERVER
458640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
459640235e2SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
460*cdebaff8SEnji Cooper	$DEBUG && /sbin/brconfig bridge0
461640235e2SEnji Cooper	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
462640235e2SEnji Cooper	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
463640235e2SEnji Cooper
464640235e2SEnji Cooper	# Tests brconfig flush.
465640235e2SEnji Cooper	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 flush
466640235e2SEnji Cooper	atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
467640235e2SEnji Cooper	atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
468640235e2SEnji Cooper	unset LD_PRELOAD
469640235e2SEnji Cooper
470640235e2SEnji Cooper	# Tests brconfig timeout.
471640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
472640235e2SEnji Cooper	export LD_PRELOAD=/usr/lib/librumphijack.so
473640235e2SEnji Cooper	atf_check -s exit:0 -o match:"timeout: 1200" /sbin/brconfig bridge0
474640235e2SEnji Cooper	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 timeout 10
475640235e2SEnji Cooper	atf_check -s exit:0 -o match:"timeout: 10" /sbin/brconfig bridge0
476640235e2SEnji Cooper	unset LD_PRELOAD
477640235e2SEnji Cooper
478640235e2SEnji Cooper	# Tests brconfig maxaddr.
479640235e2SEnji Cooper	test_brconfig_maxaddr
480640235e2SEnji Cooper
481640235e2SEnji Cooper	# TODO: brconfig static/flushall/discover/learn
482640235e2SEnji Cooper	# TODO: cache expiration; it takes 5 minutes at least and we want to
483640235e2SEnji Cooper	#       wait here so long. Should we have a sysctl to change the period?
484*cdebaff8SEnji Cooper
485*cdebaff8SEnji Cooper	rump_server_destroy_ifaces
486640235e2SEnji Cooper}
487640235e2SEnji Cooper
488640235e2SEnji Cooperbridge_member_ipv4_body()
489640235e2SEnji Cooper{
490640235e2SEnji Cooper	setup
491640235e2SEnji Cooper	test_setup
492640235e2SEnji Cooper
493640235e2SEnji Cooper	# Enable once PR kern/49219 is fixed
494640235e2SEnji Cooper	#test_ping_failure
495640235e2SEnji Cooper
496640235e2SEnji Cooper	setup_bridge
497640235e2SEnji Cooper	sleep 1
498640235e2SEnji Cooper	test_setup_bridge
499640235e2SEnji Cooper	test_ping_success
500640235e2SEnji Cooper
501640235e2SEnji Cooper	setup_member_ip
502640235e2SEnji Cooper	test_ping_member
503640235e2SEnji Cooper
504640235e2SEnji Cooper	teardown_bridge
505640235e2SEnji Cooper	test_ping_failure
506*cdebaff8SEnji Cooper
507*cdebaff8SEnji Cooper	rump_server_destroy_ifaces
508640235e2SEnji Cooper}
509640235e2SEnji Cooper
510640235e2SEnji Cooperbridge_member_ipv6_body()
511640235e2SEnji Cooper{
512640235e2SEnji Cooper	setup6
513640235e2SEnji Cooper	test_setup6
514640235e2SEnji Cooper
515640235e2SEnji Cooper	test_ping6_failure
516640235e2SEnji Cooper
517640235e2SEnji Cooper	setup_bridge
518640235e2SEnji Cooper	sleep 1
519640235e2SEnji Cooper	test_setup_bridge
520640235e2SEnji Cooper	test_ping6_success
521640235e2SEnji Cooper
522640235e2SEnji Cooper	setup_member_ip6
523640235e2SEnji Cooper	test_ping6_member
524640235e2SEnji Cooper
525640235e2SEnji Cooper	teardown_bridge
526640235e2SEnji Cooper	test_ping6_failure
527*cdebaff8SEnji Cooper
528*cdebaff8SEnji Cooper	rump_server_destroy_ifaces
529640235e2SEnji Cooper}
530640235e2SEnji Cooper
531640235e2SEnji Cooperbridge_ipv4_cleanup()
53257718be8SEnji Cooper{
533*cdebaff8SEnji Cooper
534*cdebaff8SEnji Cooper	$DEBUG && dump
53557718be8SEnji Cooper	cleanup
53657718be8SEnji Cooper}
53757718be8SEnji Cooper
538640235e2SEnji Cooperbridge_ipv6_cleanup()
539640235e2SEnji Cooper{
540*cdebaff8SEnji Cooper
541*cdebaff8SEnji Cooper	$DEBUG && dump
542640235e2SEnji Cooper	cleanup
543640235e2SEnji Cooper}
544640235e2SEnji Cooper
545640235e2SEnji Cooperbridge_rtable_cleanup()
546640235e2SEnji Cooper{
547*cdebaff8SEnji Cooper
548*cdebaff8SEnji Cooper	$DEBUG && dump
549640235e2SEnji Cooper	cleanup
550640235e2SEnji Cooper}
551640235e2SEnji Cooper
552640235e2SEnji Cooperbridge_member_ipv4_cleanup()
553640235e2SEnji Cooper{
554*cdebaff8SEnji Cooper
555*cdebaff8SEnji Cooper	$DEBUG && dump
556640235e2SEnji Cooper	cleanup
557640235e2SEnji Cooper}
558640235e2SEnji Cooper
559640235e2SEnji Cooperbridge_member_ipv6_cleanup()
56057718be8SEnji Cooper{
561*cdebaff8SEnji Cooper
562*cdebaff8SEnji Cooper	$DEBUG && dump
56357718be8SEnji Cooper	cleanup
56457718be8SEnji Cooper}
56557718be8SEnji Cooper
56657718be8SEnji Cooperatf_init_test_cases()
56757718be8SEnji Cooper{
568640235e2SEnji Cooper	atf_add_test_case bridge_ipv4
569640235e2SEnji Cooper	atf_add_test_case bridge_ipv6
570640235e2SEnji Cooper	atf_add_test_case bridge_rtable
571640235e2SEnji Cooper	atf_add_test_case bridge_member_ipv4
572640235e2SEnji Cooper	atf_add_test_case bridge_member_ipv6
57357718be8SEnji Cooper}
574