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