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