12973Sjlahoda#	$NetBSD: t_bridge.sh,v 1.16 2016/11/25 08:51:16 ozaki-r Exp $
22973Sjlahoda#
32973Sjlahoda# Copyright (c) 2014 The NetBSD Foundation, Inc.
42973Sjlahoda# All rights reserved.
52973Sjlahoda#
62973Sjlahoda# Redistribution and use in source and binary forms, with or without
72973Sjlahoda# modification, are permitted provided that the following conditions
82973Sjlahoda# are met:
92973Sjlahoda# 1. Redistributions of source code must retain the above copyright
102973Sjlahoda#    notice, this list of conditions and the following disclaimer.
112973Sjlahoda# 2. Redistributions in binary form must reproduce the above copyright
122973Sjlahoda#    notice, this list of conditions and the following disclaimer in the
132973Sjlahoda#    documentation and/or other materials provided with the distribution.
142973Sjlahoda#
152973Sjlahoda# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
162973Sjlahoda# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
172973Sjlahoda# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
182973Sjlahoda# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
192973Sjlahoda# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
202973Sjlahoda# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
212973Sjlahoda# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
222973Sjlahoda# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
232973Sjlahoda# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
242973Sjlahoda# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
252973Sjlahoda# POSSIBILITY OF SUCH DAMAGE.
262973Sjlahoda#
272973Sjlahoda
282973SjlahodaSOCK1=unix://commsock1
292973SjlahodaSOCK2=unix://commsock2
302973SjlahodaSOCK3=unix://commsock3
312973SjlahodaIP1=10.0.0.1
322973SjlahodaIP2=10.0.0.2
332973SjlahodaIP61=fc00::1
342973SjlahodaIP62=fc00::2
352973SjlahodaIPBR1=10.0.0.11
362973SjlahodaIPBR2=10.0.0.12
372973SjlahodaIP6BR1=fc00::11
382973SjlahodaIP6BR2=fc00::12
392973Sjlahoda
402973SjlahodaDEBUG=${DEBUG:-false}
412973SjlahodaTIMEOUT=5
422973Sjlahoda
432973Sjlahodaatf_test_case bridge_ipv4 cleanup
442973Sjlahodaatf_test_case bridge_ipv6 cleanup
452973Sjlahodaatf_test_case bridge_rtable cleanup
462973Sjlahodaatf_test_case bridge_member_ipv4 cleanup
472973Sjlahodaatf_test_case bridge_member_ipv6 cleanup
482973Sjlahoda
492973Sjlahodabridge_ipv4_head()
502973Sjlahoda{
512973Sjlahoda	atf_set "descr" "Does simple if_bridge tests"
522973Sjlahoda	atf_set "require.progs" "rump_server"
532973Sjlahoda}
542973Sjlahoda
552973Sjlahodabridge_ipv6_head()
562973Sjlahoda{
572973Sjlahoda	atf_set "descr" "Does simple if_bridge tests (IPv6)"
582973Sjlahoda	atf_set "require.progs" "rump_server"
592973Sjlahoda}
602973Sjlahoda
612973Sjlahodabridge_rtable_head()
622973Sjlahoda{
632973Sjlahoda	atf_set "descr" "Tests route table operations of if_bridge"
642973Sjlahoda	atf_set "require.progs" "rump_server"
652973Sjlahoda}
662973Sjlahoda
672973Sjlahodabridge_member_ipv4_head()
682973Sjlahoda{
692973Sjlahoda	atf_set "descr" "Tests if_bridge with members with an IP address"
702973Sjlahoda	atf_set "require.progs" "rump_server"
712973Sjlahoda}
722973Sjlahoda
732973Sjlahodabridge_member_ipv6_head()
742973Sjlahoda{
752973Sjlahoda	atf_set "descr" "Tests if_bridge with members with an IP address (IPv6)"
762973Sjlahoda	atf_set "require.progs" "rump_server"
772973Sjlahoda}
782973Sjlahoda
792973Sjlahodasetup_endpoint()
802973Sjlahoda{
812973Sjlahoda	sock=${1}
822973Sjlahoda	addr=${2}
832973Sjlahoda	bus=${3}
842973Sjlahoda	mode=${4}
852973Sjlahoda
862973Sjlahoda	rump_server_add_iface $sock shmif0 $bus
872973Sjlahoda	export RUMP_SERVER=${sock}
882973Sjlahoda	if [ $mode = "ipv6" ]; then
892973Sjlahoda		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
902973Sjlahoda	else
912973Sjlahoda		atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
922973Sjlahoda	fi
932973Sjlahoda
942973Sjlahoda	atf_check -s exit:0 rump.ifconfig shmif0 up
952973Sjlahoda	$DEBUG && rump.ifconfig shmif0
962973Sjlahoda}
972973Sjlahoda
982973Sjlahodatest_endpoint()
992973Sjlahoda{
1002973Sjlahoda	sock=${1}
1012973Sjlahoda	addr=${2}
1022973Sjlahoda	bus=${3}
1032973Sjlahoda	mode=${4}
1042973Sjlahoda
1052973Sjlahoda	export RUMP_SERVER=${sock}
1062973Sjlahoda	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
1072973Sjlahoda	if [ $mode = "ipv6" ]; then
1082973Sjlahoda		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr}
1092973Sjlahoda	else
1102973Sjlahoda		atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr}
1112973Sjlahoda	fi
1122973Sjlahoda}
1132973Sjlahoda
1142973Sjlahodatest_setup()
1152973Sjlahoda{
1162973Sjlahoda	test_endpoint $SOCK1 $IP1 bus1 ipv4
1172973Sjlahoda	test_endpoint $SOCK3 $IP2 bus2 ipv4
1182973Sjlahoda
1192973Sjlahoda	export RUMP_SERVER=$SOCK2
1202973Sjlahoda	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
1212973Sjlahoda	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
1222973Sjlahoda}
1232973Sjlahoda
1242973Sjlahodatest_setup6()
1252973Sjlahoda{
1262973Sjlahoda	test_endpoint $SOCK1 $IP61 bus1 ipv6
1272973Sjlahoda	test_endpoint $SOCK3 $IP62 bus2 ipv6
1282973Sjlahoda
1292973Sjlahoda	export RUMP_SERVER=$SOCK2
1302973Sjlahoda	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
1312973Sjlahoda	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
1322973Sjlahoda}
1332973Sjlahoda
1342973Sjlahodasetup_bridge_server()
1352973Sjlahoda{
1362973Sjlahoda
1372973Sjlahoda	rump_server_add_iface $SOCK2 shmif0 bus1
1382973Sjlahoda	rump_server_add_iface $SOCK2 shmif1 bus2
1392973Sjlahoda	export RUMP_SERVER=$SOCK2
1402973Sjlahoda	atf_check -s exit:0 rump.ifconfig shmif0 up
1412973Sjlahoda	atf_check -s exit:0 rump.ifconfig shmif1 up
1422973Sjlahoda}
1432973Sjlahoda
1442973Sjlahodasetup()
1452973Sjlahoda{
1462973Sjlahoda
1472973Sjlahoda	rump_server_start $SOCK1 bridge
1482973Sjlahoda	rump_server_start $SOCK2 bridge
1492973Sjlahoda	rump_server_start $SOCK3 bridge
1502973Sjlahoda
1512973Sjlahoda	setup_endpoint $SOCK1 $IP1 bus1 ipv4
1522973Sjlahoda	setup_endpoint $SOCK3 $IP2 bus2 ipv4
1532973Sjlahoda	setup_bridge_server
1542973Sjlahoda}
1552973Sjlahoda
1562973Sjlahodasetup6()
1572973Sjlahoda{
1582973Sjlahoda
1592973Sjlahoda	rump_server_start $SOCK1 netinet6 bridge
1602973Sjlahoda	rump_server_start $SOCK2 netinet6 bridge
1612973Sjlahoda	rump_server_start $SOCK3 netinet6 bridge
1622973Sjlahoda
1632973Sjlahoda	setup_endpoint $SOCK1 $IP61 bus1 ipv6
1642973Sjlahoda	setup_endpoint $SOCK3 $IP62 bus2 ipv6
1652973Sjlahoda	setup_bridge_server
1662973Sjlahoda}
1672973Sjlahoda
1682973Sjlahodasetup_bridge()
1692973Sjlahoda{
1702973Sjlahoda	export RUMP_SERVER=$SOCK2
1712973Sjlahoda	atf_check -s exit:0 rump.ifconfig bridge0 create
1722973Sjlahoda	atf_check -s exit:0 rump.ifconfig bridge0 up
1732973Sjlahoda
1742973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
1752973Sjlahoda	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif0
1762973Sjlahoda	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif1
1772973Sjlahoda	/sbin/brconfig bridge0
1782973Sjlahoda	unset LD_PRELOAD
1792973Sjlahoda	rump.ifconfig shmif0
1802973Sjlahoda	rump.ifconfig shmif1
1812973Sjlahoda}
1822973Sjlahoda
1832973Sjlahodasetup_member_ip()
1842973Sjlahoda{
1852973Sjlahoda	export RUMP_SERVER=$SOCK2
1862973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
1872973Sjlahoda	atf_check -s exit:0 rump.ifconfig shmif0 $IPBR1/24
1882973Sjlahoda	atf_check -s exit:0 rump.ifconfig shmif1 $IPBR2/24
1892973Sjlahoda	atf_check -s exit:0 rump.ifconfig -w 10
1902973Sjlahoda	/sbin/brconfig bridge0
1912973Sjlahoda	unset LD_PRELOAD
1922973Sjlahoda	rump.ifconfig shmif0
1932973Sjlahoda	rump.ifconfig shmif1
1942973Sjlahoda}
1952973Sjlahoda
1962973Sjlahodasetup_member_ip6()
1972973Sjlahoda{
1982973Sjlahoda	export RUMP_SERVER=$SOCK2
1992973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
2002973Sjlahoda	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6BR1
2012973Sjlahoda	atf_check -s exit:0 rump.ifconfig shmif1 inet6 $IP6BR2
2022973Sjlahoda	atf_check -s exit:0 rump.ifconfig -w 10
2032973Sjlahoda	/sbin/brconfig bridge0
2042973Sjlahoda	unset LD_PRELOAD
2052973Sjlahoda	rump.ifconfig shmif0
2062973Sjlahoda	rump.ifconfig shmif1
2072973Sjlahoda}
2082973Sjlahoda
2092973Sjlahodateardown_bridge()
2102973Sjlahoda{
2112973Sjlahoda	export RUMP_SERVER=$SOCK2
2122973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
2132973Sjlahoda	/sbin/brconfig bridge0
2142973Sjlahoda	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif0
2152973Sjlahoda	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif1
2162973Sjlahoda	/sbin/brconfig bridge0
2172973Sjlahoda	unset LD_PRELOAD
2182973Sjlahoda	rump.ifconfig shmif0
2192973Sjlahoda	rump.ifconfig shmif1
2202973Sjlahoda}
2212973Sjlahoda
2222973Sjlahodatest_setup_bridge()
2232973Sjlahoda{
2242973Sjlahoda	export RUMP_SERVER=$SOCK2
2252973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
2262973Sjlahoda	atf_check -s exit:0 -o match:shmif0 /sbin/brconfig bridge0
2272973Sjlahoda	atf_check -s exit:0 -o match:shmif1 /sbin/brconfig bridge0
2282973Sjlahoda	/sbin/brconfig bridge0
2292973Sjlahoda	unset LD_PRELOAD
2302973Sjlahoda}
2312973Sjlahoda
2322973Sjlahodadown_up_interfaces()
2332973Sjlahoda{
2342973Sjlahoda	export RUMP_SERVER=$SOCK1
2352973Sjlahoda	rump.ifconfig shmif0 down
2362973Sjlahoda	rump.ifconfig shmif0 up
2372973Sjlahoda	export RUMP_SERVER=$SOCK3
2382973Sjlahoda	rump.ifconfig shmif0 down
2392973Sjlahoda	rump.ifconfig shmif0 up
2402973Sjlahoda}
2412973Sjlahoda
2422973Sjlahodatest_ping_failure()
2432973Sjlahoda{
2442973Sjlahoda	export RUMP_SERVER=$SOCK1
2452973Sjlahoda	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
2462973Sjlahoda	export RUMP_SERVER=$SOCK3
2472973Sjlahoda	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
2482973Sjlahoda}
2492973Sjlahoda
2502973Sjlahodatest_ping_success()
2512973Sjlahoda{
2522973Sjlahoda	export RUMP_SERVER=$SOCK1
2532973Sjlahoda	rump.ifconfig -v shmif0
2542973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
2552973Sjlahoda	rump.ifconfig -v shmif0
2562973Sjlahoda
2572973Sjlahoda	export RUMP_SERVER=$SOCK3
2582973Sjlahoda	rump.ifconfig -v shmif0
2592973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
2602973Sjlahoda	rump.ifconfig -v shmif0
2612973Sjlahoda}
2622973Sjlahoda
2632973Sjlahodatest_ping6_failure()
2642973Sjlahoda{
2652973Sjlahoda	export RUMP_SERVER=$SOCK1
2662973Sjlahoda	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
2672973Sjlahoda	export RUMP_SERVER=$SOCK3
2682973Sjlahoda	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
2692973Sjlahoda}
2702973Sjlahoda
2712973Sjlahodatest_ping6_success()
2722973Sjlahoda{
2732973Sjlahoda	export RUMP_SERVER=$SOCK1
2742973Sjlahoda	rump.ifconfig -v shmif0
2752973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
2762973Sjlahoda	rump.ifconfig -v shmif0
2772973Sjlahoda
2782973Sjlahoda	export RUMP_SERVER=$SOCK3
2792973Sjlahoda	rump.ifconfig -v shmif0
2802973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
2812973Sjlahoda	rump.ifconfig -v shmif0
2822973Sjlahoda}
2832973Sjlahoda
2842973Sjlahodatest_ping_member()
2852973Sjlahoda{
2862973Sjlahoda	export RUMP_SERVER=$SOCK1
2872973Sjlahoda	rump.ifconfig -v shmif0
2882973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
2892973Sjlahoda	rump.ifconfig -v shmif0
2902973Sjlahoda	# Test for PR#48104
2912973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
2922973Sjlahoda	rump.ifconfig -v shmif0
2932973Sjlahoda
2942973Sjlahoda	export RUMP_SERVER=$SOCK3
2952973Sjlahoda	rump.ifconfig -v shmif0
2962973Sjlahoda	# Test for PR#48104
2972973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
2982973Sjlahoda	rump.ifconfig -v shmif0
2992973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
3002973Sjlahoda	rump.ifconfig -v shmif0
3012973Sjlahoda}
3022973Sjlahoda
3032973Sjlahodatest_ping6_member()
3042973Sjlahoda{
3052973Sjlahoda	export RUMP_SERVER=$SOCK1
3062973Sjlahoda	rump.ifconfig -v shmif0
3072973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
3082973Sjlahoda	rump.ifconfig -v shmif0
3092973Sjlahoda	# Test for PR#48104
3102973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
3112973Sjlahoda	rump.ifconfig -v shmif0
3122973Sjlahoda
3132973Sjlahoda	export RUMP_SERVER=$SOCK3
3142973Sjlahoda	rump.ifconfig -v shmif0
3152973Sjlahoda	# Test for PR#48104
3162973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
3172973Sjlahoda	rump.ifconfig -v shmif0
3182973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
3192973Sjlahoda	rump.ifconfig -v shmif0
3202973Sjlahoda}
3212973Sjlahoda
3222973Sjlahodaget_number_of_caches()
3232973Sjlahoda{
3242973Sjlahoda	export RUMP_SERVER=$SOCK2
3252973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
3262973Sjlahoda	echo $(($(/sbin/brconfig bridge0 |grep -A 100 "Address cache" |wc -l) - 1))
3272973Sjlahoda	unset LD_PRELOAD
3282973Sjlahoda}
3292973Sjlahoda
3302973Sjlahodatest_brconfig_maxaddr()
3312973Sjlahoda{
3322973Sjlahoda	addr1= addr3= n=
3332973Sjlahoda
3342973Sjlahoda	# Get MAC addresses of the endpoints.
3352973Sjlahoda	addr1=$(get_macaddr $SOCK1 shmif0)
3362973Sjlahoda	addr3=$(get_macaddr $SOCK3 shmif0)
3372973Sjlahoda
3382973Sjlahoda	# Refill the MAC addresses of the endpoints.
3392973Sjlahoda	export RUMP_SERVER=$SOCK1
3402973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
3412973Sjlahoda	export RUMP_SERVER=$SOCK2
3422973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
3432973Sjlahoda	/sbin/brconfig bridge0
3442973Sjlahoda	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
3452973Sjlahoda	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
3462973Sjlahoda
3472973Sjlahoda	# Check the default # of caches is 100
3482973Sjlahoda	atf_check -s exit:0 -o match:"max cache: 100" /sbin/brconfig bridge0
3492973Sjlahoda
3502973Sjlahoda	# Test two MAC addresses are cached
3512973Sjlahoda	n=$(get_number_of_caches)
3522973Sjlahoda	atf_check_equal $n 2
3532973Sjlahoda
3542973Sjlahoda	# Limit # of caches to one
3552973Sjlahoda	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 1
3562973Sjlahoda	atf_check -s exit:0 -o match:"max cache: 1" /sbin/brconfig bridge0
3572973Sjlahoda	/sbin/brconfig bridge0
3582973Sjlahoda
3592973Sjlahoda	# Test just one address is cached
3602973Sjlahoda	n=$(get_number_of_caches)
3612973Sjlahoda	atf_check_equal $n 1
3622973Sjlahoda
3632973Sjlahoda	# Increase # of caches to two
3642973Sjlahoda	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 2
3652973Sjlahoda	atf_check -s exit:0 -o match:"max cache: 2" /sbin/brconfig bridge0
3662973Sjlahoda	unset LD_PRELOAD
3672973Sjlahoda
3682973Sjlahoda	# Test we can cache two addresses again
3692973Sjlahoda	export RUMP_SERVER=$SOCK1
3702973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
3712973Sjlahoda	export RUMP_SERVER=$SOCK2
3722973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
3732973Sjlahoda	/sbin/brconfig bridge0
3742973Sjlahoda	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
3752973Sjlahoda	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
3762973Sjlahoda	unset LD_PRELOAD
3772973Sjlahoda}
3782973Sjlahoda
3792973Sjlahodabridge_ipv4_body()
3802973Sjlahoda{
3812973Sjlahoda	setup
3822973Sjlahoda	test_setup
3832973Sjlahoda
3842973Sjlahoda	# Enable once PR kern/49219 is fixed
3852973Sjlahoda	#test_ping_failure
3862973Sjlahoda
3872973Sjlahoda	setup_bridge
3882973Sjlahoda	sleep 1
3892973Sjlahoda	test_setup_bridge
3902973Sjlahoda	test_ping_success
3912973Sjlahoda
3922973Sjlahoda	teardown_bridge
3932973Sjlahoda	test_ping_failure
3942973Sjlahoda
3952973Sjlahoda	rump_server_destroy_ifaces
3962973Sjlahoda}
3972973Sjlahoda
3982973Sjlahodabridge_ipv6_body()
3992973Sjlahoda{
4002973Sjlahoda	setup6
4012973Sjlahoda	test_setup6
4022973Sjlahoda
4032973Sjlahoda	test_ping6_failure
4042973Sjlahoda
4052973Sjlahoda	setup_bridge
4062973Sjlahoda	sleep 1
4072973Sjlahoda	test_setup_bridge
4082973Sjlahoda	test_ping6_success
4092973Sjlahoda
4102973Sjlahoda	teardown_bridge
4112973Sjlahoda	test_ping6_failure
4122973Sjlahoda
4132973Sjlahoda	rump_server_destroy_ifaces
4142973Sjlahoda}
4152973Sjlahoda
4162973Sjlahodabridge_rtable_body()
4172973Sjlahoda{
4182973Sjlahoda	addr1= addr3=
4192973Sjlahoda
4202973Sjlahoda	setup
4212973Sjlahoda	setup_bridge
4222973Sjlahoda
4232973Sjlahoda	# Get MAC addresses of the endpoints.
4242973Sjlahoda	addr1=$(get_macaddr $SOCK1 shmif0)
4252973Sjlahoda	addr3=$(get_macaddr $SOCK3 shmif0)
4262973Sjlahoda
4272973Sjlahoda	# Confirm there is no MAC address caches.
4282973Sjlahoda	export RUMP_SERVER=$SOCK2
4292973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
4302973Sjlahoda	$DEBUG && /sbin/brconfig bridge0
4312973Sjlahoda	atf_check -s exit:0 -o not-match:"$addr1" /sbin/brconfig bridge0
4322973Sjlahoda	atf_check -s exit:0 -o not-match:"$addr3" /sbin/brconfig bridge0
4332973Sjlahoda	unset LD_PRELOAD
4342973Sjlahoda
4352973Sjlahoda	# Make the bridge learn the MAC addresses of the endpoints.
4362973Sjlahoda	export RUMP_SERVER=$SOCK1
4372973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
4382973Sjlahoda	unset RUMP_SERVER
4392973Sjlahoda
4402973Sjlahoda	# Tests the addresses are in the cache.
4412973Sjlahoda	export RUMP_SERVER=$SOCK2
4422973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
4432973Sjlahoda	$DEBUG && /sbin/brconfig bridge0
4442973Sjlahoda	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
4452973Sjlahoda	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
4462973Sjlahoda
4472973Sjlahoda	# Tests brconfig deladdr
4482973Sjlahoda	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr1"
4492973Sjlahoda	atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
4502973Sjlahoda	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr3"
4512973Sjlahoda	atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
4522973Sjlahoda	unset LD_PRELOAD
4532973Sjlahoda
4542973Sjlahoda	# Refill the MAC addresses of the endpoints.
4552973Sjlahoda	export RUMP_SERVER=$SOCK1
4562973Sjlahoda	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
4572973Sjlahoda	unset RUMP_SERVER
4582973Sjlahoda	export RUMP_SERVER=$SOCK2
4592973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
4602973Sjlahoda	$DEBUG && /sbin/brconfig bridge0
4612973Sjlahoda	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
4622973Sjlahoda	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
4632973Sjlahoda
4642973Sjlahoda	# Tests brconfig flush.
4652973Sjlahoda	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 flush
4662973Sjlahoda	atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
4672973Sjlahoda	atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
4682973Sjlahoda	unset LD_PRELOAD
4692973Sjlahoda
4702973Sjlahoda	# Tests brconfig timeout.
4712973Sjlahoda	export RUMP_SERVER=$SOCK2
4722973Sjlahoda	export LD_PRELOAD=/usr/lib/librumphijack.so
4732973Sjlahoda	atf_check -s exit:0 -o match:"timeout: 1200" /sbin/brconfig bridge0
4742973Sjlahoda	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 timeout 10
4752973Sjlahoda	atf_check -s exit:0 -o match:"timeout: 10" /sbin/brconfig bridge0
4762973Sjlahoda	unset LD_PRELOAD
4772973Sjlahoda
4782973Sjlahoda	# Tests brconfig maxaddr.
4792973Sjlahoda	test_brconfig_maxaddr
4802973Sjlahoda
4812973Sjlahoda	# TODO: brconfig static/flushall/discover/learn
4822973Sjlahoda	# TODO: cache expiration; it takes 5 minutes at least and we want to
4832973Sjlahoda	#       wait here so long. Should we have a sysctl to change the period?
4842973Sjlahoda
4852973Sjlahoda	rump_server_destroy_ifaces
4862973Sjlahoda}
4872973Sjlahoda
4882973Sjlahodabridge_member_ipv4_body()
4892973Sjlahoda{
4902973Sjlahoda	setup
4912973Sjlahoda	test_setup
4922973Sjlahoda
4932973Sjlahoda	# Enable once PR kern/49219 is fixed
4942973Sjlahoda	#test_ping_failure
4952973Sjlahoda
4962973Sjlahoda	setup_bridge
4972973Sjlahoda	sleep 1
4982973Sjlahoda	test_setup_bridge
4992973Sjlahoda	test_ping_success
5002973Sjlahoda
5012973Sjlahoda	setup_member_ip
5022973Sjlahoda	test_ping_member
5032973Sjlahoda
5042973Sjlahoda	teardown_bridge
5052973Sjlahoda	test_ping_failure
5062973Sjlahoda
5072973Sjlahoda	rump_server_destroy_ifaces
5082973Sjlahoda}
5092973Sjlahoda
5102973Sjlahodabridge_member_ipv6_body()
5112973Sjlahoda{
5122973Sjlahoda	setup6
5132973Sjlahoda	test_setup6
5142973Sjlahoda
5152973Sjlahoda	test_ping6_failure
5162973Sjlahoda
5172973Sjlahoda	setup_bridge
5182973Sjlahoda	sleep 1
5192973Sjlahoda	test_setup_bridge
5202973Sjlahoda	test_ping6_success
5212973Sjlahoda
5222973Sjlahoda	setup_member_ip6
5232973Sjlahoda	test_ping6_member
5242973Sjlahoda
5252973Sjlahoda	teardown_bridge
5262973Sjlahoda	test_ping6_failure
5272973Sjlahoda
5282973Sjlahoda	rump_server_destroy_ifaces
5292973Sjlahoda}
5302973Sjlahoda
5312973Sjlahodabridge_ipv4_cleanup()
5322973Sjlahoda{
5332973Sjlahoda
5342973Sjlahoda	$DEBUG && dump
5352973Sjlahoda	cleanup
5362973Sjlahoda}
5372973Sjlahoda
5382973Sjlahodabridge_ipv6_cleanup()
5392973Sjlahoda{
5402973Sjlahoda
5412973Sjlahoda	$DEBUG && dump
5422973Sjlahoda	cleanup
5432973Sjlahoda}
5442973Sjlahoda
5452973Sjlahodabridge_rtable_cleanup()
5462973Sjlahoda{
5472973Sjlahoda
5482973Sjlahoda	$DEBUG && dump
5492973Sjlahoda	cleanup
5502973Sjlahoda}
5512973Sjlahoda
5522973Sjlahodabridge_member_ipv4_cleanup()
5532973Sjlahoda{
5542973Sjlahoda
5552973Sjlahoda	$DEBUG && dump
5562973Sjlahoda	cleanup
5572973Sjlahoda}
5582973Sjlahoda
5592973Sjlahodabridge_member_ipv6_cleanup()
5602973Sjlahoda{
5612973Sjlahoda
5622973Sjlahoda	$DEBUG && dump
5632973Sjlahoda	cleanup
5642973Sjlahoda}
5652973Sjlahoda
5662973Sjlahodaatf_init_test_cases()
5672973Sjlahoda{
5682973Sjlahoda	atf_add_test_case bridge_ipv4
5692973Sjlahoda	atf_add_test_case bridge_ipv6
5702973Sjlahoda	atf_add_test_case bridge_rtable
5712973Sjlahoda	atf_add_test_case bridge_member_ipv4
5722973Sjlahoda	atf_add_test_case bridge_member_ipv6
5732973Sjlahoda}
5742973Sjlahoda