xref: /netbsd-src/tests/net/if_bridge/t_bridge.sh (revision fe76e013a16002b6276da331dfc7e18c89a4199f)
1*fe76e013Sozaki-r#	$NetBSD: t_bridge.sh,v 1.21 2024/09/03 08:01:38 ozaki-r Exp $
25937935bSozaki-r#
35937935bSozaki-r# Copyright (c) 2014 The NetBSD Foundation, Inc.
45937935bSozaki-r# All rights reserved.
55937935bSozaki-r#
65937935bSozaki-r# Redistribution and use in source and binary forms, with or without
75937935bSozaki-r# modification, are permitted provided that the following conditions
85937935bSozaki-r# are met:
95937935bSozaki-r# 1. Redistributions of source code must retain the above copyright
105937935bSozaki-r#    notice, this list of conditions and the following disclaimer.
115937935bSozaki-r# 2. Redistributions in binary form must reproduce the above copyright
125937935bSozaki-r#    notice, this list of conditions and the following disclaimer in the
135937935bSozaki-r#    documentation and/or other materials provided with the distribution.
145937935bSozaki-r#
155937935bSozaki-r# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
165937935bSozaki-r# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
175937935bSozaki-r# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
185937935bSozaki-r# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
195937935bSozaki-r# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
205937935bSozaki-r# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
215937935bSozaki-r# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
225937935bSozaki-r# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
235937935bSozaki-r# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
245937935bSozaki-r# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
255937935bSozaki-r# POSSIBILITY OF SUCH DAMAGE.
265937935bSozaki-r#
275937935bSozaki-r
285937935bSozaki-rSOCK1=unix://commsock1
295937935bSozaki-rSOCK2=unix://commsock2
305937935bSozaki-rSOCK3=unix://commsock3
315937935bSozaki-rIP1=10.0.0.1
325937935bSozaki-rIP2=10.0.0.2
335937935bSozaki-rIP61=fc00::1
345937935bSozaki-rIP62=fc00::2
35978c966bSozaki-rIPBR1=10.0.0.11
36978c966bSozaki-rIPBR2=10.0.0.12
37978c966bSozaki-rIP6BR1=fc00::11
38978c966bSozaki-rIP6BR2=fc00::12
395937935bSozaki-r
40731c5c34Sozaki-rDEBUG=${DEBUG:-false}
413030e5a0Sozaki-rTIMEOUT=5
423030e5a0Sozaki-r
435937935bSozaki-rsetup_endpoint()
445937935bSozaki-r{
455937935bSozaki-r	sock=${1}
465937935bSozaki-r	addr=${2}
475937935bSozaki-r	bus=${3}
485937935bSozaki-r	mode=${4}
495937935bSozaki-r
505a83ceeaSozaki-r	rump_server_add_iface $sock shmif0 $bus
515937935bSozaki-r	export RUMP_SERVER=${sock}
525937935bSozaki-r	if [ $mode = "ipv6" ]; then
535937935bSozaki-r		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
545937935bSozaki-r	else
555937935bSozaki-r		atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
565937935bSozaki-r	fi
575937935bSozaki-r
585937935bSozaki-r	atf_check -s exit:0 rump.ifconfig shmif0 up
59731c5c34Sozaki-r	$DEBUG && rump.ifconfig shmif0
605937935bSozaki-r}
615937935bSozaki-r
625937935bSozaki-rtest_endpoint()
635937935bSozaki-r{
645937935bSozaki-r	sock=${1}
655937935bSozaki-r	addr=${2}
665937935bSozaki-r	bus=${3}
675937935bSozaki-r	mode=${4}
685937935bSozaki-r
695937935bSozaki-r	export RUMP_SERVER=${sock}
705937935bSozaki-r	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
715937935bSozaki-r	if [ $mode = "ipv6" ]; then
727284c531Sozaki-r		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr}
735937935bSozaki-r	else
743030e5a0Sozaki-r		atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr}
755937935bSozaki-r	fi
765937935bSozaki-r}
775937935bSozaki-r
785937935bSozaki-rtest_setup()
795937935bSozaki-r{
805937935bSozaki-r	test_endpoint $SOCK1 $IP1 bus1 ipv4
815937935bSozaki-r	test_endpoint $SOCK3 $IP2 bus2 ipv4
825937935bSozaki-r
835937935bSozaki-r	export RUMP_SERVER=$SOCK2
845937935bSozaki-r	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
855937935bSozaki-r	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
865937935bSozaki-r}
875937935bSozaki-r
885937935bSozaki-rtest_setup6()
895937935bSozaki-r{
905937935bSozaki-r	test_endpoint $SOCK1 $IP61 bus1 ipv6
915937935bSozaki-r	test_endpoint $SOCK3 $IP62 bus2 ipv6
925937935bSozaki-r
935937935bSozaki-r	export RUMP_SERVER=$SOCK2
945937935bSozaki-r	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
955937935bSozaki-r	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
965937935bSozaki-r}
975937935bSozaki-r
985937935bSozaki-rsetup_bridge_server()
995937935bSozaki-r{
1005937935bSozaki-r
1015a83ceeaSozaki-r	rump_server_add_iface $SOCK2 shmif0 bus1
1025a83ceeaSozaki-r	rump_server_add_iface $SOCK2 shmif1 bus2
1035a83ceeaSozaki-r	export RUMP_SERVER=$SOCK2
1045a83ceeaSozaki-r	atf_check -s exit:0 rump.ifconfig shmif0 up
1055937935bSozaki-r	atf_check -s exit:0 rump.ifconfig shmif1 up
1065937935bSozaki-r}
1075937935bSozaki-r
1085937935bSozaki-rsetup()
1095937935bSozaki-r{
1105a83ceeaSozaki-r
1115a83ceeaSozaki-r	rump_server_start $SOCK1 bridge
1125a83ceeaSozaki-r	rump_server_start $SOCK2 bridge
1135a83ceeaSozaki-r	rump_server_start $SOCK3 bridge
1145937935bSozaki-r
1155937935bSozaki-r	setup_endpoint $SOCK1 $IP1 bus1 ipv4
1165937935bSozaki-r	setup_endpoint $SOCK3 $IP2 bus2 ipv4
1175937935bSozaki-r	setup_bridge_server
1185937935bSozaki-r}
1195937935bSozaki-r
1205937935bSozaki-rsetup6()
1215937935bSozaki-r{
1225a83ceeaSozaki-r
1235a83ceeaSozaki-r	rump_server_start $SOCK1 netinet6 bridge
1245a83ceeaSozaki-r	rump_server_start $SOCK2 netinet6 bridge
1255a83ceeaSozaki-r	rump_server_start $SOCK3 netinet6 bridge
1265937935bSozaki-r
1275937935bSozaki-r	setup_endpoint $SOCK1 $IP61 bus1 ipv6
1285937935bSozaki-r	setup_endpoint $SOCK3 $IP62 bus2 ipv6
1295937935bSozaki-r	setup_bridge_server
1305937935bSozaki-r}
1315937935bSozaki-r
1325937935bSozaki-rsetup_bridge()
1335937935bSozaki-r{
1345937935bSozaki-r	export RUMP_SERVER=$SOCK2
135ce0ae1dfSozaki-r	rump_server_add_iface $SOCK2 bridge0
1365937935bSozaki-r	atf_check -s exit:0 rump.ifconfig bridge0 up
1375937935bSozaki-r
1385937935bSozaki-r	export LD_PRELOAD=/usr/lib/librumphijack.so
1395937935bSozaki-r	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif0
1405937935bSozaki-r	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif1
1415937935bSozaki-r	/sbin/brconfig bridge0
1425937935bSozaki-r	unset LD_PRELOAD
1435937935bSozaki-r	rump.ifconfig shmif0
1445937935bSozaki-r	rump.ifconfig shmif1
1455937935bSozaki-r}
1465937935bSozaki-r
147978c966bSozaki-rsetup_member_ip()
148978c966bSozaki-r{
149978c966bSozaki-r	export RUMP_SERVER=$SOCK2
150978c966bSozaki-r	export LD_PRELOAD=/usr/lib/librumphijack.so
151978c966bSozaki-r	atf_check -s exit:0 rump.ifconfig shmif0 $IPBR1/24
152978c966bSozaki-r	atf_check -s exit:0 rump.ifconfig shmif1 $IPBR2/24
153978c966bSozaki-r	atf_check -s exit:0 rump.ifconfig -w 10
154978c966bSozaki-r	/sbin/brconfig bridge0
155978c966bSozaki-r	unset LD_PRELOAD
156978c966bSozaki-r	rump.ifconfig shmif0
157978c966bSozaki-r	rump.ifconfig shmif1
158978c966bSozaki-r}
159978c966bSozaki-r
160978c966bSozaki-rsetup_member_ip6()
161978c966bSozaki-r{
162978c966bSozaki-r	export RUMP_SERVER=$SOCK2
163978c966bSozaki-r	export LD_PRELOAD=/usr/lib/librumphijack.so
164978c966bSozaki-r	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6BR1
165978c966bSozaki-r	atf_check -s exit:0 rump.ifconfig shmif1 inet6 $IP6BR2
166978c966bSozaki-r	atf_check -s exit:0 rump.ifconfig -w 10
167978c966bSozaki-r	/sbin/brconfig bridge0
168978c966bSozaki-r	unset LD_PRELOAD
169978c966bSozaki-r	rump.ifconfig shmif0
170978c966bSozaki-r	rump.ifconfig shmif1
171978c966bSozaki-r}
172978c966bSozaki-r
1735937935bSozaki-rteardown_bridge()
1745937935bSozaki-r{
1755937935bSozaki-r	export RUMP_SERVER=$SOCK2
1765937935bSozaki-r	export LD_PRELOAD=/usr/lib/librumphijack.so
1775937935bSozaki-r	/sbin/brconfig bridge0
1785937935bSozaki-r	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif0
1795937935bSozaki-r	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif1
1805937935bSozaki-r	/sbin/brconfig bridge0
1815937935bSozaki-r	unset LD_PRELOAD
1825937935bSozaki-r	rump.ifconfig shmif0
1835937935bSozaki-r	rump.ifconfig shmif1
1845937935bSozaki-r}
1855937935bSozaki-r
1865937935bSozaki-rtest_setup_bridge()
1875937935bSozaki-r{
1885937935bSozaki-r	export RUMP_SERVER=$SOCK2
1895937935bSozaki-r	export LD_PRELOAD=/usr/lib/librumphijack.so
1905937935bSozaki-r	atf_check -s exit:0 -o match:shmif0 /sbin/brconfig bridge0
1915937935bSozaki-r	atf_check -s exit:0 -o match:shmif1 /sbin/brconfig bridge0
1925937935bSozaki-r	/sbin/brconfig bridge0
1935937935bSozaki-r	unset LD_PRELOAD
1945937935bSozaki-r}
1955937935bSozaki-r
1965937935bSozaki-rdown_up_interfaces()
1975937935bSozaki-r{
1985937935bSozaki-r	export RUMP_SERVER=$SOCK1
1995937935bSozaki-r	rump.ifconfig shmif0 down
2005937935bSozaki-r	rump.ifconfig shmif0 up
2015937935bSozaki-r	export RUMP_SERVER=$SOCK3
2025937935bSozaki-r	rump.ifconfig shmif0 down
2035937935bSozaki-r	rump.ifconfig shmif0 up
2045937935bSozaki-r}
2055937935bSozaki-r
2065937935bSozaki-rtest_ping_failure()
2075937935bSozaki-r{
2085937935bSozaki-r	export RUMP_SERVER=$SOCK1
2093030e5a0Sozaki-r	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
2105937935bSozaki-r	export RUMP_SERVER=$SOCK3
2113030e5a0Sozaki-r	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
2125937935bSozaki-r}
2135937935bSozaki-r
2145937935bSozaki-rtest_ping_success()
2155937935bSozaki-r{
2165937935bSozaki-r	export RUMP_SERVER=$SOCK1
2175937935bSozaki-r	rump.ifconfig -v shmif0
2183030e5a0Sozaki-r	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
2195937935bSozaki-r	rump.ifconfig -v shmif0
2205937935bSozaki-r
2215937935bSozaki-r	export RUMP_SERVER=$SOCK3
2225937935bSozaki-r	rump.ifconfig -v shmif0
2233030e5a0Sozaki-r	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
2245937935bSozaki-r	rump.ifconfig -v shmif0
2255937935bSozaki-r}
2265937935bSozaki-r
2275937935bSozaki-rtest_ping6_failure()
2285937935bSozaki-r{
2295937935bSozaki-r	export RUMP_SERVER=$SOCK1
2307284c531Sozaki-r	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
2315937935bSozaki-r	export RUMP_SERVER=$SOCK3
2327284c531Sozaki-r	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
2335937935bSozaki-r}
2345937935bSozaki-r
2355937935bSozaki-rtest_ping6_success()
2365937935bSozaki-r{
2375937935bSozaki-r	export RUMP_SERVER=$SOCK1
2385937935bSozaki-r	rump.ifconfig -v shmif0
2397284c531Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
2405937935bSozaki-r	rump.ifconfig -v shmif0
2415937935bSozaki-r
2425937935bSozaki-r	export RUMP_SERVER=$SOCK3
2435937935bSozaki-r	rump.ifconfig -v shmif0
2447284c531Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
2455937935bSozaki-r	rump.ifconfig -v shmif0
2465937935bSozaki-r}
2475937935bSozaki-r
248978c966bSozaki-rtest_ping_member()
249978c966bSozaki-r{
250978c966bSozaki-r	export RUMP_SERVER=$SOCK1
251978c966bSozaki-r	rump.ifconfig -v shmif0
252978c966bSozaki-r	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
253978c966bSozaki-r	rump.ifconfig -v shmif0
2547dd2779bSozaki-r	# Test for PR#48104
2557dd2779bSozaki-r	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
256978c966bSozaki-r	rump.ifconfig -v shmif0
257978c966bSozaki-r
258978c966bSozaki-r	export RUMP_SERVER=$SOCK3
259978c966bSozaki-r	rump.ifconfig -v shmif0
2607dd2779bSozaki-r	# Test for PR#48104
2617dd2779bSozaki-r	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
262978c966bSozaki-r	rump.ifconfig -v shmif0
263978c966bSozaki-r	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
264978c966bSozaki-r	rump.ifconfig -v shmif0
265978c966bSozaki-r}
266978c966bSozaki-r
267978c966bSozaki-rtest_ping6_member()
268978c966bSozaki-r{
269978c966bSozaki-r	export RUMP_SERVER=$SOCK1
270978c966bSozaki-r	rump.ifconfig -v shmif0
2717284c531Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
272978c966bSozaki-r	rump.ifconfig -v shmif0
2737dd2779bSozaki-r	# Test for PR#48104
2747284c531Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
275978c966bSozaki-r	rump.ifconfig -v shmif0
276978c966bSozaki-r
277978c966bSozaki-r	export RUMP_SERVER=$SOCK3
278978c966bSozaki-r	rump.ifconfig -v shmif0
2797dd2779bSozaki-r	# Test for PR#48104
2807284c531Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
281978c966bSozaki-r	rump.ifconfig -v shmif0
2827284c531Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
283978c966bSozaki-r	rump.ifconfig -v shmif0
284978c966bSozaki-r}
285978c966bSozaki-r
28607e5cdcfSozaki-rtest_create_destroy()
28795dd9007Sozaki-r{
28895dd9007Sozaki-r
28995dd9007Sozaki-r	rump_server_start $SOCK1 bridge
29095dd9007Sozaki-r
29195dd9007Sozaki-r	test_create_destroy_common $SOCK1 bridge0
29295dd9007Sozaki-r}
29395dd9007Sozaki-r
29407e5cdcfSozaki-rtest_ipv4()
2955937935bSozaki-r{
2965937935bSozaki-r	setup
2975937935bSozaki-r	test_setup
2985937935bSozaki-r
2998192754cSozaki-r	# Enable once PR kern/49219 is fixed
3008192754cSozaki-r	#test_ping_failure
3015937935bSozaki-r
3029fbb6a24Sozaki-r	setup_bridge
3039fbb6a24Sozaki-r	sleep 1
3049fbb6a24Sozaki-r	test_setup_bridge
3055937935bSozaki-r	test_ping_success
3065937935bSozaki-r
3075937935bSozaki-r	teardown_bridge
3085937935bSozaki-r	test_ping_failure
3095a83ceeaSozaki-r
3105a83ceeaSozaki-r	rump_server_destroy_ifaces
3115937935bSozaki-r}
3125937935bSozaki-r
31307e5cdcfSozaki-rtest_ipv6()
3145937935bSozaki-r{
3155937935bSozaki-r	setup6
3165937935bSozaki-r	test_setup6
3175937935bSozaki-r
3189fbb6a24Sozaki-r	test_ping6_failure
3195937935bSozaki-r
3205937935bSozaki-r	setup_bridge
3219fbb6a24Sozaki-r	sleep 1
3225937935bSozaki-r	test_setup_bridge
3235937935bSozaki-r	test_ping6_success
3245937935bSozaki-r
3255937935bSozaki-r	teardown_bridge
3269fbb6a24Sozaki-r	test_ping6_failure
3275a83ceeaSozaki-r
3285a83ceeaSozaki-r	rump_server_destroy_ifaces
3295937935bSozaki-r}
3305937935bSozaki-r
33107e5cdcfSozaki-rtest_member_ipv4()
332978c966bSozaki-r{
333978c966bSozaki-r	setup
334978c966bSozaki-r	test_setup
335978c966bSozaki-r
336978c966bSozaki-r	# Enable once PR kern/49219 is fixed
337978c966bSozaki-r	#test_ping_failure
338978c966bSozaki-r
339978c966bSozaki-r	setup_bridge
340978c966bSozaki-r	sleep 1
341978c966bSozaki-r	test_setup_bridge
342978c966bSozaki-r	test_ping_success
343978c966bSozaki-r
344978c966bSozaki-r	setup_member_ip
345978c966bSozaki-r	test_ping_member
346978c966bSozaki-r
347978c966bSozaki-r	teardown_bridge
348978c966bSozaki-r	test_ping_failure
3495a83ceeaSozaki-r
3505a83ceeaSozaki-r	rump_server_destroy_ifaces
351978c966bSozaki-r}
352978c966bSozaki-r
35307e5cdcfSozaki-rtest_member_ipv6()
354978c966bSozaki-r{
355978c966bSozaki-r	setup6
356978c966bSozaki-r	test_setup6
357978c966bSozaki-r
358978c966bSozaki-r	test_ping6_failure
359978c966bSozaki-r
360978c966bSozaki-r	setup_bridge
361978c966bSozaki-r	sleep 1
362978c966bSozaki-r	test_setup_bridge
363978c966bSozaki-r	test_ping6_success
364978c966bSozaki-r
365978c966bSozaki-r	setup_member_ip6
366978c966bSozaki-r	test_ping6_member
367978c966bSozaki-r
368978c966bSozaki-r	teardown_bridge
369978c966bSozaki-r	test_ping6_failure
3705a83ceeaSozaki-r
3715a83ceeaSozaki-r	rump_server_destroy_ifaces
372978c966bSozaki-r}
373978c966bSozaki-r
374*fe76e013Sozaki-rBUS_SHMIF0=./bus0
375*fe76e013Sozaki-rBUS_SHMIF1=./bus1
376*fe76e013Sozaki-rBUS_SHMIF2=./bus2
377*fe76e013Sozaki-r
378*fe76e013Sozaki-runpack_file()
379*fe76e013Sozaki-r{
380*fe76e013Sozaki-r
381*fe76e013Sozaki-r	atf_check -s exit:0 uudecode $(atf_get_srcdir)/${1}.uue
382*fe76e013Sozaki-r}
383*fe76e013Sozaki-r
384*fe76e013Sozaki-rreset_if_stats()
385*fe76e013Sozaki-r{
386*fe76e013Sozaki-r
387*fe76e013Sozaki-r	for ifname in shmif0 shmif1 shmif2
388*fe76e013Sozaki-r	do
389*fe76e013Sozaki-r		atf_check -s exit:0 -o ignore rump.ifconfig -z $ifname
390*fe76e013Sozaki-r	done
391*fe76e013Sozaki-r}
392*fe76e013Sozaki-r
393*fe76e013Sozaki-rtest_protection()
394*fe76e013Sozaki-r{
395*fe76e013Sozaki-r
396*fe76e013Sozaki-r	unpack_file unicast.pcap
397*fe76e013Sozaki-r	unpack_file broadcast.pcap
398*fe76e013Sozaki-r
399*fe76e013Sozaki-r	rump_server_start $SOCK1 bridge
400*fe76e013Sozaki-r	rump_server_add_iface $SOCK1 shmif0 $BUS_SHMIF0
401*fe76e013Sozaki-r	rump_server_add_iface $SOCK1 shmif1 $BUS_SHMIF1
402*fe76e013Sozaki-r	rump_server_add_iface $SOCK1 shmif2 $BUS_SHMIF2
403*fe76e013Sozaki-r
404*fe76e013Sozaki-r	export RUMP_SERVER=$SOCK1
405*fe76e013Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif0 up
406*fe76e013Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif1 up
407*fe76e013Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif2 up
408*fe76e013Sozaki-r
409*fe76e013Sozaki-r	atf_check -s exit:0 rump.ifconfig bridge0 create
410*fe76e013Sozaki-r	atf_check -s exit:0 rump.ifconfig bridge0 up
411*fe76e013Sozaki-r
412*fe76e013Sozaki-r	atf_check -s exit:0 $HIJACKING brconfig bridge0 add shmif0 add shmif1 add shmif2
413*fe76e013Sozaki-r	$DEBUG && rump.ifconfig
414*fe76e013Sozaki-r
415*fe76e013Sozaki-r	# Protected interfaces: -
416*fe76e013Sozaki-r	# Learning: -
417*fe76e013Sozaki-r	# Input: unicast through shmif0
418*fe76e013Sozaki-r	# Output: shmif1, shmif2
419*fe76e013Sozaki-r	reset_if_stats
420*fe76e013Sozaki-r	atf_check -s exit:0 -o ignore shmif_pcapin unicast.pcap ${BUS_SHMIF0}
421*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0
422*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif1
423*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif2
424*fe76e013Sozaki-r	$DEBUG && rump.ifconfig -v bridge0
425*fe76e013Sozaki-r
426*fe76e013Sozaki-r	# Protected interfaces: -
427*fe76e013Sozaki-r	# Learning: -
428*fe76e013Sozaki-r	# Input: broadcast through shmif0
429*fe76e013Sozaki-r	# Output: shmif1, shmif2
430*fe76e013Sozaki-r	reset_if_stats
431*fe76e013Sozaki-r	atf_check -s exit:0 -o ignore shmif_pcapin broadcast.pcap ${BUS_SHMIF0}
432*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0
433*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif1
434*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif2
435*fe76e013Sozaki-r	$DEBUG && rump.ifconfig -v bridge0
436*fe76e013Sozaki-r
437*fe76e013Sozaki-r	# Protect shmif0 and shmif2
438*fe76e013Sozaki-r	atf_check -s exit:0 $HIJACKING brconfig bridge0 protect shmif0
439*fe76e013Sozaki-r	atf_check -s exit:0 $HIJACKING brconfig bridge0 protect shmif2
440*fe76e013Sozaki-r	atf_check -s exit:0 \
441*fe76e013Sozaki-r	    -o match:"shmif0.+PROTECTED" \
442*fe76e013Sozaki-r	    -o match:"shmif2.+PROTECTED" \
443*fe76e013Sozaki-r	    -o not-match:"shmif1.+PROTECTED" \
444*fe76e013Sozaki-r	    $HIJACKING brconfig bridge0
445*fe76e013Sozaki-r
446*fe76e013Sozaki-r	# Protected interfaces: shmif0 shmif2
447*fe76e013Sozaki-r	# Learning: -
448*fe76e013Sozaki-r	# Input: unicast through shmif0
449*fe76e013Sozaki-r	# Output: shmif1
450*fe76e013Sozaki-r	reset_if_stats
451*fe76e013Sozaki-r	atf_check -s exit:0 -o ignore shmif_pcapin unicast.pcap ${BUS_SHMIF0}
452*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0
453*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif1
454*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 0 packet" rump.ifconfig -v shmif2
455*fe76e013Sozaki-r	$DEBUG && rump.ifconfig -v bridge0
456*fe76e013Sozaki-r
457*fe76e013Sozaki-r	# Protected interfaces: shmif0 shmif2
458*fe76e013Sozaki-r	# Learning: -
459*fe76e013Sozaki-r	# Input: broadcast through shmif0
460*fe76e013Sozaki-r	# Output: shmif1
461*fe76e013Sozaki-r	reset_if_stats
462*fe76e013Sozaki-r	atf_check -s exit:0 -o ignore shmif_pcapin broadcast.pcap ${BUS_SHMIF0}
463*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0
464*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif1
465*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 0 packet" rump.ifconfig -v shmif2
466*fe76e013Sozaki-r	$DEBUG && rump.ifconfig -v bridge0
467*fe76e013Sozaki-r
468*fe76e013Sozaki-r	# Insert a route 00:aa:aa:aa:aa:aa shmif2 to test forwarding path of known-unicast-frame
469*fe76e013Sozaki-r	atf_check -s exit:0 $HIJACKING brconfig bridge0 static shmif2 00:aa:aa:aa:aa:aa
470*fe76e013Sozaki-r	atf_check -s exit:0 -o match:'00:aa:aa:aa:aa:aa shmif2 0 flags=1<STATIC>' \
471*fe76e013Sozaki-r	    $HIJACKING brconfig bridge0
472*fe76e013Sozaki-r	$DEBUG && $HIJACKING brconfig bridge0
473*fe76e013Sozaki-r
474*fe76e013Sozaki-r	# Protected interfaces: shmif0 shmif2
475*fe76e013Sozaki-r	# Learning: 00:aa:aa:aa:aa:aa shmif2
476*fe76e013Sozaki-r	# Input: broadcast through shmif0
477*fe76e013Sozaki-r	# Output: -
478*fe76e013Sozaki-r	reset_if_stats
479*fe76e013Sozaki-r	atf_check -s exit:0 -o ignore shmif_pcapin unicast.pcap ${BUS_SHMIF0}
480*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0
481*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 0 packet" rump.ifconfig -v shmif1
482*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 0 packet" rump.ifconfig -v shmif2
483*fe76e013Sozaki-r	$DEBUG && rump.ifconfig -v bridge0
484*fe76e013Sozaki-r
485*fe76e013Sozaki-r	# Unprotect shmif2
486*fe76e013Sozaki-r	atf_check -s exit:0 $HIJACKING brconfig bridge0 -protect shmif2
487*fe76e013Sozaki-r	atf_check -s exit:0 \
488*fe76e013Sozaki-r	    -o match:"shmif0.+PROTECTED" \
489*fe76e013Sozaki-r	    -o not-match:"shmif2.+PROTECTED" \
490*fe76e013Sozaki-r	    -o not-match:"shmif1.+PROTECTED" \
491*fe76e013Sozaki-r	    $HIJACKING brconfig bridge0
492*fe76e013Sozaki-r
493*fe76e013Sozaki-r	# Protected interfaces: shmif0
494*fe76e013Sozaki-r	# Learning: 00:aa:aa:aa:aa:aa shmif2
495*fe76e013Sozaki-r	# Input: broadcast through shmif0
496*fe76e013Sozaki-r	# Output: shmif2
497*fe76e013Sozaki-r	reset_if_stats
498*fe76e013Sozaki-r	atf_check -s exit:0 -o ignore shmif_pcapin unicast.pcap ${BUS_SHMIF0}
499*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0
500*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 0 packet" rump.ifconfig -v shmif1
501*fe76e013Sozaki-r	atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif2
502*fe76e013Sozaki-r	$DEBUG && rump.ifconfig -v bridge0
503*fe76e013Sozaki-r
504*fe76e013Sozaki-r	rump_server_destroy_ifaces
505*fe76e013Sozaki-r}
506*fe76e013Sozaki-r
50707e5cdcfSozaki-radd_test()
50895dd9007Sozaki-r{
50907e5cdcfSozaki-r	local name=$1
51007e5cdcfSozaki-r	local desc="$2"
51195dd9007Sozaki-r
51207e5cdcfSozaki-r	atf_test_case "bridge_${name}" cleanup
51307e5cdcfSozaki-r	eval "bridge_${name}_head() {
51407e5cdcfSozaki-r			atf_set descr \"${desc}\"
51507e5cdcfSozaki-r			atf_set require.progs rump_server
51695dd9007Sozaki-r		}
51707e5cdcfSozaki-r	    bridge_${name}_body() {
51807e5cdcfSozaki-r			test_${name}
5195937935bSozaki-r		}
52007e5cdcfSozaki-r	    bridge_${name}_cleanup() {
52107e5cdcfSozaki-r			\$DEBUG && dump
5225937935bSozaki-r			cleanup
52307e5cdcfSozaki-r		}"
52407e5cdcfSozaki-r	atf_add_test_case "bridge_${name}"
525978c966bSozaki-r}
526978c966bSozaki-r
5275937935bSozaki-ratf_init_test_cases()
5285937935bSozaki-r{
52995dd9007Sozaki-r
53007e5cdcfSozaki-r	add_test create_destroy "Tests creating/destroying bridge interfaces"
53107e5cdcfSozaki-r	add_test ipv4           "Does basic if_bridge tests (IPv4)"
53207e5cdcfSozaki-r	add_test ipv6           "Does basic if_bridge tests (IPv6)"
53307e5cdcfSozaki-r	add_test member_ipv4    "Tests if_bridge with members with an IP address (IPv4)"
53407e5cdcfSozaki-r	add_test member_ipv6    "Tests if_bridge with members with an IP address (IPv6)"
535*fe76e013Sozaki-r	add_test protection     "Tests interface protection"
5365937935bSozaki-r}
537