Home | History | Annotate | Line # | Download | only in if_bridge
t_bridge.sh revision 1.12
      1 #	$NetBSD: t_bridge.sh,v 1.12 2016/06/21 05:04:16 ozaki-r Exp $
      2 #
      3 # Copyright (c) 2014 The NetBSD Foundation, Inc.
      4 # All rights reserved.
      5 #
      6 # Redistribution and use in source and binary forms, with or without
      7 # modification, are permitted provided that the following conditions
      8 # are met:
      9 # 1. Redistributions of source code must retain the above copyright
     10 #    notice, this list of conditions and the following disclaimer.
     11 # 2. Redistributions in binary form must reproduce the above copyright
     12 #    notice, this list of conditions and the following disclaimer in the
     13 #    documentation and/or other materials provided with the distribution.
     14 #
     15 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     16 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     17 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     19 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     25 # POSSIBILITY OF SUCH DAMAGE.
     26 #
     27 
     28 inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_bridge -lrumpnet_shmif"
     29 inet6server="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_bridge -lrumpnet_shmif"
     30 
     31 SOCK1=unix://commsock1
     32 SOCK2=unix://commsock2
     33 SOCK3=unix://commsock3
     34 IP1=10.0.0.1
     35 IP2=10.0.0.2
     36 IP61=fc00::1
     37 IP62=fc00::2
     38 IPBR1=10.0.0.11
     39 IPBR2=10.0.0.12
     40 IP6BR1=fc00::11
     41 IP6BR2=fc00::12
     42 
     43 TIMEOUT=5
     44 
     45 atf_test_case bridge_ipv4 cleanup
     46 atf_test_case bridge_ipv6 cleanup
     47 atf_test_case bridge_rtable cleanup
     48 atf_test_case bridge_member_ipv4 cleanup
     49 atf_test_case bridge_member_ipv6 cleanup
     50 
     51 bridge_ipv4_head()
     52 {
     53 	atf_set "descr" "Does simple if_bridge tests"
     54 	atf_set "require.progs" "rump_server"
     55 }
     56 
     57 bridge_ipv6_head()
     58 {
     59 	atf_set "descr" "Does simple if_bridge tests (IPv6)"
     60 	atf_set "require.progs" "rump_server"
     61 }
     62 
     63 bridge_rtable_head()
     64 {
     65 	atf_set "descr" "Tests route table operations of if_bridge"
     66 	atf_set "require.progs" "rump_server"
     67 }
     68 
     69 bridge_member_ipv4_head()
     70 {
     71 	atf_set "descr" "Tests if_bridge with members with an IP address"
     72 	atf_set "require.progs" "rump_server"
     73 }
     74 
     75 bridge_member_ipv6_head()
     76 {
     77 	atf_set "descr" "Tests if_bridge with members with an IP address (IPv6)"
     78 	atf_set "require.progs" "rump_server"
     79 }
     80 
     81 setup_endpoint()
     82 {
     83 	sock=${1}
     84 	addr=${2}
     85 	bus=${3}
     86 	mode=${4}
     87 
     88 	export RUMP_SERVER=${sock}
     89 	atf_check -s exit:0 rump.ifconfig shmif0 create
     90 	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${bus}
     91 	if [ $mode = "ipv6" ]; then
     92 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
     93 	else
     94 		atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
     95 	fi
     96 
     97 	atf_check -s exit:0 rump.ifconfig shmif0 up
     98 	rump.ifconfig shmif0
     99 }
    100 
    101 test_endpoint()
    102 {
    103 	sock=${1}
    104 	addr=${2}
    105 	bus=${3}
    106 	mode=${4}
    107 
    108 	export RUMP_SERVER=${sock}
    109 	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
    110 	if [ $mode = "ipv6" ]; then
    111 		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr}
    112 	else
    113 		atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr}
    114 	fi
    115 }
    116 
    117 show_endpoint()
    118 {
    119 	sock=${1}
    120 
    121 	export RUMP_SERVER=${sock}
    122 	rump.ifconfig -v shmif0
    123 }
    124 
    125 test_setup()
    126 {
    127 	test_endpoint $SOCK1 $IP1 bus1 ipv4
    128 	test_endpoint $SOCK3 $IP2 bus2 ipv4
    129 
    130 	export RUMP_SERVER=$SOCK2
    131 	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
    132 	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
    133 }
    134 
    135 test_setup6()
    136 {
    137 	test_endpoint $SOCK1 $IP61 bus1 ipv6
    138 	test_endpoint $SOCK3 $IP62 bus2 ipv6
    139 
    140 	export RUMP_SERVER=$SOCK2
    141 	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
    142 	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
    143 }
    144 
    145 setup_bridge_server()
    146 {
    147 	export RUMP_SERVER=$SOCK2
    148 	atf_check -s exit:0 rump.ifconfig shmif0 create
    149 	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
    150 	atf_check -s exit:0 rump.ifconfig shmif0 up
    151 
    152 	atf_check -s exit:0 rump.ifconfig shmif1 create
    153 	atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus2
    154 	atf_check -s exit:0 rump.ifconfig shmif1 up
    155 }
    156 
    157 setup()
    158 {
    159 	atf_check -s exit:0 ${inetserver} $SOCK1
    160 	atf_check -s exit:0 ${inetserver} $SOCK2
    161 	atf_check -s exit:0 ${inetserver} $SOCK3
    162 
    163 	setup_endpoint $SOCK1 $IP1 bus1 ipv4
    164 	setup_endpoint $SOCK3 $IP2 bus2 ipv4
    165 	setup_bridge_server
    166 }
    167 
    168 setup6()
    169 {
    170 	atf_check -s exit:0 ${inet6server} $SOCK1
    171 	atf_check -s exit:0 ${inet6server} $SOCK2
    172 	atf_check -s exit:0 ${inet6server} $SOCK3
    173 
    174 	setup_endpoint $SOCK1 $IP61 bus1 ipv6
    175 	setup_endpoint $SOCK3 $IP62 bus2 ipv6
    176 	setup_bridge_server
    177 }
    178 
    179 setup_bridge()
    180 {
    181 	export RUMP_SERVER=$SOCK2
    182 	atf_check -s exit:0 rump.ifconfig bridge0 create
    183 	atf_check -s exit:0 rump.ifconfig bridge0 up
    184 
    185 	export LD_PRELOAD=/usr/lib/librumphijack.so
    186 	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif0
    187 	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif1
    188 	/sbin/brconfig bridge0
    189 	unset LD_PRELOAD
    190 	rump.ifconfig shmif0
    191 	rump.ifconfig shmif1
    192 }
    193 
    194 setup_member_ip()
    195 {
    196 	export RUMP_SERVER=$SOCK2
    197 	export LD_PRELOAD=/usr/lib/librumphijack.so
    198 	atf_check -s exit:0 rump.ifconfig shmif0 $IPBR1/24
    199 	atf_check -s exit:0 rump.ifconfig shmif1 $IPBR2/24
    200 	atf_check -s exit:0 rump.ifconfig -w 10
    201 	/sbin/brconfig bridge0
    202 	unset LD_PRELOAD
    203 	rump.ifconfig shmif0
    204 	rump.ifconfig shmif1
    205 }
    206 
    207 setup_member_ip6()
    208 {
    209 	export RUMP_SERVER=$SOCK2
    210 	export LD_PRELOAD=/usr/lib/librumphijack.so
    211 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6BR1
    212 	atf_check -s exit:0 rump.ifconfig shmif1 inet6 $IP6BR2
    213 	atf_check -s exit:0 rump.ifconfig -w 10
    214 	/sbin/brconfig bridge0
    215 	unset LD_PRELOAD
    216 	rump.ifconfig shmif0
    217 	rump.ifconfig shmif1
    218 }
    219 
    220 teardown_bridge()
    221 {
    222 	export RUMP_SERVER=$SOCK2
    223 	export LD_PRELOAD=/usr/lib/librumphijack.so
    224 	/sbin/brconfig bridge0
    225 	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif0
    226 	atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif1
    227 	/sbin/brconfig bridge0
    228 	unset LD_PRELOAD
    229 	rump.ifconfig shmif0
    230 	rump.ifconfig shmif1
    231 }
    232 
    233 test_setup_bridge()
    234 {
    235 	export RUMP_SERVER=$SOCK2
    236 	export LD_PRELOAD=/usr/lib/librumphijack.so
    237 	atf_check -s exit:0 -o match:shmif0 /sbin/brconfig bridge0
    238 	atf_check -s exit:0 -o match:shmif1 /sbin/brconfig bridge0
    239 	/sbin/brconfig bridge0
    240 	unset LD_PRELOAD
    241 }
    242 
    243 cleanup()
    244 {
    245 	env RUMP_SERVER=$SOCK1 rump.halt
    246 	env RUMP_SERVER=$SOCK2 rump.halt
    247 	env RUMP_SERVER=$SOCK3 rump.halt
    248 }
    249 
    250 dump_bus()
    251 {
    252 	/usr/bin/shmif_dumpbus -p - bus1 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
    253 	/usr/bin/shmif_dumpbus -p - bus2 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
    254 }
    255 
    256 down_up_interfaces()
    257 {
    258 	export RUMP_SERVER=$SOCK1
    259 	rump.ifconfig shmif0 down
    260 	rump.ifconfig shmif0 up
    261 	export RUMP_SERVER=$SOCK3
    262 	rump.ifconfig shmif0 down
    263 	rump.ifconfig shmif0 up
    264 }
    265 
    266 test_ping_failure()
    267 {
    268 	export RUMP_SERVER=$SOCK1
    269 	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
    270 	export RUMP_SERVER=$SOCK3
    271 	atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
    272 }
    273 
    274 test_ping_success()
    275 {
    276 	export RUMP_SERVER=$SOCK1
    277 	rump.ifconfig -v shmif0
    278 	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
    279 	rump.ifconfig -v shmif0
    280 
    281 	export RUMP_SERVER=$SOCK3
    282 	rump.ifconfig -v shmif0
    283 	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
    284 	rump.ifconfig -v shmif0
    285 }
    286 
    287 test_ping6_failure()
    288 {
    289 	export RUMP_SERVER=$SOCK1
    290 	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
    291 	export RUMP_SERVER=$SOCK3
    292 	atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
    293 }
    294 
    295 test_ping6_success()
    296 {
    297 	export RUMP_SERVER=$SOCK1
    298 	rump.ifconfig -v shmif0
    299 	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
    300 	rump.ifconfig -v shmif0
    301 
    302 	export RUMP_SERVER=$SOCK3
    303 	rump.ifconfig -v shmif0
    304 	atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
    305 	rump.ifconfig -v shmif0
    306 }
    307 
    308 test_ping_member()
    309 {
    310 	export RUMP_SERVER=$SOCK1
    311 	rump.ifconfig -v shmif0
    312 	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
    313 	rump.ifconfig -v shmif0
    314 	# Test for PR#48104
    315 	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
    316 	rump.ifconfig -v shmif0
    317 
    318 	export RUMP_SERVER=$SOCK3
    319 	rump.ifconfig -v shmif0
    320 	# Test for PR#48104
    321 	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
    322 	rump.ifconfig -v shmif0
    323 	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
    324 	rump.ifconfig -v shmif0
    325 }
    326 
    327 test_ping6_member()
    328 {
    329 	export RUMP_SERVER=$SOCK1
    330 	rump.ifconfig -v shmif0
    331 	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
    332 	rump.ifconfig -v shmif0
    333 	# Test for PR#48104
    334 	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
    335 	rump.ifconfig -v shmif0
    336 
    337 	export RUMP_SERVER=$SOCK3
    338 	rump.ifconfig -v shmif0
    339 	# Test for PR#48104
    340 	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
    341 	rump.ifconfig -v shmif0
    342 	atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
    343 	rump.ifconfig -v shmif0
    344 }
    345 
    346 get_number_of_caches()
    347 {
    348 	export RUMP_SERVER=$SOCK2
    349 	export LD_PRELOAD=/usr/lib/librumphijack.so
    350 	echo $(($(/sbin/brconfig bridge0 |grep -A 100 "Address cache" |wc -l) - 1))
    351 	unset LD_PRELOAD
    352 }
    353 
    354 test_brconfig_maxaddr()
    355 {
    356 	addr1= addr3= n=
    357 
    358 	# Get MAC addresses of the endpoints.
    359 	export RUMP_SERVER=$SOCK1
    360 	addr1=$(rump.ifconfig shmif0 |awk '/address:/ { print $2;}')
    361 	export RUMP_SERVER=$SOCK3
    362 	addr3=$(rump.ifconfig shmif0 |awk '/address:/ { print $2;}')
    363 	unset RUMP_SERVER
    364 
    365 	# Refill the MAC addresses of the endpoints.
    366 	export RUMP_SERVER=$SOCK1
    367 	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
    368 	export RUMP_SERVER=$SOCK2
    369 	export LD_PRELOAD=/usr/lib/librumphijack.so
    370 	/sbin/brconfig bridge0
    371 	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
    372 	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
    373 
    374 	# Check the default # of caches is 100
    375 	atf_check -s exit:0 -o match:"max cache: 100" /sbin/brconfig bridge0
    376 
    377 	# Test two MAC addresses are cached
    378 	n=$(get_number_of_caches)
    379 	atf_check_equal $n 2
    380 
    381 	# Limit # of caches to one
    382 	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 1
    383 	atf_check -s exit:0 -o match:"max cache: 1" /sbin/brconfig bridge0
    384 	/sbin/brconfig bridge0
    385 
    386 	# Test just one address is cached
    387 	n=$(get_number_of_caches)
    388 	atf_check_equal $n 1
    389 
    390 	# Increase # of caches to two
    391 	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 2
    392 	atf_check -s exit:0 -o match:"max cache: 2" /sbin/brconfig bridge0
    393 	unset LD_PRELOAD
    394 
    395 	# Test we can cache two addresses again
    396 	export RUMP_SERVER=$SOCK1
    397 	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
    398 	export RUMP_SERVER=$SOCK2
    399 	export LD_PRELOAD=/usr/lib/librumphijack.so
    400 	/sbin/brconfig bridge0
    401 	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
    402 	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
    403 	unset LD_PRELOAD
    404 }
    405 
    406 bridge_ipv4_body()
    407 {
    408 	setup
    409 	test_setup
    410 
    411 	# Enable once PR kern/49219 is fixed
    412 	#test_ping_failure
    413 
    414 	setup_bridge
    415 	sleep 1
    416 	test_setup_bridge
    417 	test_ping_success
    418 
    419 	teardown_bridge
    420 	test_ping_failure
    421 }
    422 
    423 bridge_ipv6_body()
    424 {
    425 	setup6
    426 	test_setup6
    427 
    428 	test_ping6_failure
    429 
    430 	setup_bridge
    431 	sleep 1
    432 	test_setup_bridge
    433 	test_ping6_success
    434 
    435 	teardown_bridge
    436 	test_ping6_failure
    437 }
    438 
    439 bridge_rtable_body()
    440 {
    441 	addr1= addr3=
    442 
    443 	setup
    444 	setup_bridge
    445 
    446 	# Get MAC addresses of the endpoints.
    447 	export RUMP_SERVER=$SOCK1
    448 	addr1=$(rump.ifconfig shmif0 |awk '/address:/ { print $2;}')
    449 	export RUMP_SERVER=$SOCK3
    450 	addr3=$(rump.ifconfig shmif0 |awk '/address:/ { print $2;}')
    451 	unset RUMP_SERVER
    452 
    453 	# Confirm there is no MAC address caches.
    454 	export RUMP_SERVER=$SOCK2
    455 	export LD_PRELOAD=/usr/lib/librumphijack.so
    456 	/sbin/brconfig bridge0
    457 	atf_check -s exit:0 -o not-match:"$addr1" /sbin/brconfig bridge0
    458 	atf_check -s exit:0 -o not-match:"$addr3" /sbin/brconfig bridge0
    459 	unset LD_PRELOAD
    460 
    461 	# Make the bridge learn the MAC addresses of the endpoints.
    462 	export RUMP_SERVER=$SOCK1
    463 	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
    464 	unset RUMP_SERVER
    465 
    466 	# Tests the addresses are in the cache.
    467 	export RUMP_SERVER=$SOCK2
    468 	export LD_PRELOAD=/usr/lib/librumphijack.so
    469 	/sbin/brconfig bridge0
    470 	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
    471 	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
    472 
    473 	# Tests brconfig deladdr
    474 	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr1"
    475 	atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
    476 	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr3"
    477 	atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
    478 	unset LD_PRELOAD
    479 
    480 	# Refill the MAC addresses of the endpoints.
    481 	export RUMP_SERVER=$SOCK1
    482 	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
    483 	unset RUMP_SERVER
    484 	export RUMP_SERVER=$SOCK2
    485 	export LD_PRELOAD=/usr/lib/librumphijack.so
    486 	/sbin/brconfig bridge0
    487 	atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
    488 	atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
    489 
    490 	# Tests brconfig flush.
    491 	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 flush
    492 	atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
    493 	atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
    494 	unset LD_PRELOAD
    495 
    496 	# Tests brconfig timeout.
    497 	export RUMP_SERVER=$SOCK2
    498 	export LD_PRELOAD=/usr/lib/librumphijack.so
    499 	atf_check -s exit:0 -o match:"timeout: 1200" /sbin/brconfig bridge0
    500 	atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 timeout 10
    501 	atf_check -s exit:0 -o match:"timeout: 10" /sbin/brconfig bridge0
    502 	unset LD_PRELOAD
    503 
    504 	# Tests brconfig maxaddr.
    505 	test_brconfig_maxaddr
    506 
    507 	# TODO: brconfig static/flushall/discover/learn
    508 	# TODO: cache expiration; it takes 5 minutes at least and we want to
    509 	#       wait here so long. Should we have a sysctl to change the period?
    510 }
    511 
    512 bridge_member_ipv4_body()
    513 {
    514 	setup
    515 	test_setup
    516 
    517 	# Enable once PR kern/49219 is fixed
    518 	#test_ping_failure
    519 
    520 	setup_bridge
    521 	sleep 1
    522 	test_setup_bridge
    523 	test_ping_success
    524 
    525 	setup_member_ip
    526 	test_ping_member
    527 
    528 	teardown_bridge
    529 	test_ping_failure
    530 }
    531 
    532 bridge_member_ipv6_body()
    533 {
    534 	setup6
    535 	test_setup6
    536 
    537 	test_ping6_failure
    538 
    539 	setup_bridge
    540 	sleep 1
    541 	test_setup_bridge
    542 	test_ping6_success
    543 
    544 	setup_member_ip6
    545 	test_ping6_member
    546 
    547 	teardown_bridge
    548 	test_ping6_failure
    549 }
    550 
    551 bridge_ipv4_cleanup()
    552 {
    553 	dump_bus
    554 	cleanup
    555 }
    556 
    557 bridge_ipv6_cleanup()
    558 {
    559 	dump_bus
    560 	cleanup
    561 }
    562 
    563 bridge_rtable_cleanup()
    564 {
    565 	dump_bus
    566 	cleanup
    567 }
    568 
    569 bridge_member_ipv4_cleanup()
    570 {
    571 	dump_bus
    572 	cleanup
    573 }
    574 
    575 bridge_member_ipv6_cleanup()
    576 {
    577 	dump_bus
    578 	cleanup
    579 }
    580 
    581 atf_init_test_cases()
    582 {
    583 	atf_add_test_case bridge_ipv4
    584 	atf_add_test_case bridge_ipv6
    585 	atf_add_test_case bridge_rtable
    586 	atf_add_test_case bridge_member_ipv4
    587 	atf_add_test_case bridge_member_ipv6
    588 }
    589