diff options
Diffstat (limited to 'contrib/netbsd-tests/net/if_bridge/t_bridge.sh')
-rwxr-xr-x | contrib/netbsd-tests/net/if_bridge/t_bridge.sh | 352 |
1 files changed, 316 insertions, 36 deletions
diff --git a/contrib/netbsd-tests/net/if_bridge/t_bridge.sh b/contrib/netbsd-tests/net/if_bridge/t_bridge.sh index 5fbafc7fb36a..769893d44781 100755 --- a/contrib/netbsd-tests/net/if_bridge/t_bridge.sh +++ b/contrib/netbsd-tests/net/if_bridge/t_bridge.sh @@ -1,5 +1,4 @@ -#! /usr/bin/atf-sh -# $NetBSD: t_bridge.sh,v 1.1 2014/09/18 15:13:27 ozaki-r Exp $ +# $NetBSD: t_bridge.sh,v 1.13 2016/08/10 22:37:07 kre Exp $ # # Copyright (c) 2014 The NetBSD Foundation, Inc. # All rights reserved. @@ -26,8 +25,12 @@ # POSSIBILITY OF SUCH DAMAGE. # -inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_bridge -lrumpnet_shmif" -inet6server="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_bridge -lrumpnet_shmif" +libs1="-lrumpnet -lrumpnet_net -lrumpnet_netinet" +libs2="-lrumpnet_bridge -lrumpnet_shmif -lrumpdev" +libs6="-lrumpnet_netinet6" + +inetserver="rump_server ${libs1} ${libs2}" +inet6server="rump_server ${libs1} ${libs6} ${libs2}" SOCK1=unix://commsock1 SOCK2=unix://commsock2 @@ -36,22 +39,49 @@ IP1=10.0.0.1 IP2=10.0.0.2 IP61=fc00::1 IP62=fc00::2 +IPBR1=10.0.0.11 +IPBR2=10.0.0.12 +IP6BR1=fc00::11 +IP6BR2=fc00::12 + +TIMEOUT=5 -atf_test_case basic cleanup -atf_test_case basic6 cleanup +atf_test_case bridge_ipv4 cleanup +atf_test_case bridge_ipv6 cleanup +atf_test_case bridge_rtable cleanup +atf_test_case bridge_member_ipv4 cleanup +atf_test_case bridge_member_ipv6 cleanup -basic_head() +bridge_ipv4_head() { atf_set "descr" "Does simple if_bridge tests" atf_set "require.progs" "rump_server" } -basic6_head() +bridge_ipv6_head() { atf_set "descr" "Does simple if_bridge tests (IPv6)" atf_set "require.progs" "rump_server" } +bridge_rtable_head() +{ + atf_set "descr" "Tests route table operations of if_bridge" + atf_set "require.progs" "rump_server" +} + +bridge_member_ipv4_head() +{ + atf_set "descr" "Tests if_bridge with members with an IP address" + atf_set "require.progs" "rump_server" +} + +bridge_member_ipv6_head() +{ + atf_set "descr" "Tests if_bridge with members with an IP address (IPv6)" + atf_set "require.progs" "rump_server" +} + setup_endpoint() { sock=${1} @@ -82,11 +112,9 @@ test_endpoint() export RUMP_SERVER=${sock} atf_check -s exit:0 -o match:shmif0 rump.ifconfig if [ $mode = "ipv6" ]; then - export LD_PRELOAD=/usr/lib/librumphijack.so - atf_check -s exit:0 -o ignore ping6 -n -c 1 ${addr} - unset LD_PRELOAD + atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr} else - atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 ${addr} + atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr} fi } @@ -167,6 +195,32 @@ setup_bridge() rump.ifconfig shmif1 } +setup_member_ip() +{ + export RUMP_SERVER=$SOCK2 + export LD_PRELOAD=/usr/lib/librumphijack.so + atf_check -s exit:0 rump.ifconfig shmif0 $IPBR1/24 + atf_check -s exit:0 rump.ifconfig shmif1 $IPBR2/24 + atf_check -s exit:0 rump.ifconfig -w 10 + /sbin/brconfig bridge0 + unset LD_PRELOAD + rump.ifconfig shmif0 + rump.ifconfig shmif1 +} + +setup_member_ip6() +{ + export RUMP_SERVER=$SOCK2 + export LD_PRELOAD=/usr/lib/librumphijack.so + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6BR1 + atf_check -s exit:0 rump.ifconfig shmif1 inet6 $IP6BR2 + atf_check -s exit:0 rump.ifconfig -w 10 + /sbin/brconfig bridge0 + unset LD_PRELOAD + rump.ifconfig shmif0 + rump.ifconfig shmif1 +} + teardown_bridge() { export RUMP_SERVER=$SOCK2 @@ -216,90 +270,313 @@ down_up_interfaces() test_ping_failure() { export RUMP_SERVER=$SOCK1 - atf_check -s not-exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP2 + atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2 export RUMP_SERVER=$SOCK3 - atf_check -s not-exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP1 + atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1 } test_ping_success() { export RUMP_SERVER=$SOCK1 rump.ifconfig -v shmif0 - atf_check -s exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP2 + atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2 rump.ifconfig -v shmif0 export RUMP_SERVER=$SOCK3 rump.ifconfig -v shmif0 - atf_check -s exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP1 + atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1 rump.ifconfig -v shmif0 } test_ping6_failure() { - export LD_PRELOAD=/usr/lib/librumphijack.so export RUMP_SERVER=$SOCK1 - atf_check -s not-exit:0 -o ignore ping6 -q -n -c 1 $IP62 + atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62 export RUMP_SERVER=$SOCK3 - atf_check -s not-exit:0 -o ignore ping6 -q -n -c 1 $IP61 - unset LD_PRELOAD + atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61 } test_ping6_success() { export RUMP_SERVER=$SOCK1 rump.ifconfig -v shmif0 - export LD_PRELOAD=/usr/lib/librumphijack.so - atf_check -s exit:0 -o ignore ping6 -q -n -c 1 $IP62 - unset LD_PRELOAD + atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62 + rump.ifconfig -v shmif0 + + export RUMP_SERVER=$SOCK3 + rump.ifconfig -v shmif0 + atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61 + rump.ifconfig -v shmif0 +} + +test_ping_member() +{ + export RUMP_SERVER=$SOCK1 + rump.ifconfig -v shmif0 + atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1 + rump.ifconfig -v shmif0 + # Test for PR#48104 + atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2 rump.ifconfig -v shmif0 export RUMP_SERVER=$SOCK3 rump.ifconfig -v shmif0 + # Test for PR#48104 + atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1 + rump.ifconfig -v shmif0 + atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2 + rump.ifconfig -v shmif0 +} + +test_ping6_member() +{ + export RUMP_SERVER=$SOCK1 + rump.ifconfig -v shmif0 + atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1 + rump.ifconfig -v shmif0 + # Test for PR#48104 + atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2 + rump.ifconfig -v shmif0 + + export RUMP_SERVER=$SOCK3 + rump.ifconfig -v shmif0 + # Test for PR#48104 + atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1 + rump.ifconfig -v shmif0 + atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2 + rump.ifconfig -v shmif0 +} + +get_number_of_caches() +{ + export RUMP_SERVER=$SOCK2 export LD_PRELOAD=/usr/lib/librumphijack.so - atf_check -s exit:0 -o ignore ping6 -q -n -c 1 $IP61 + echo $(($(/sbin/brconfig bridge0 |grep -A 100 "Address cache" |wc -l) - 1)) unset LD_PRELOAD - rump.ifconfig -v shmif0 } -basic_body() +test_brconfig_maxaddr() +{ + addr1= addr3= n= + + # Get MAC addresses of the endpoints. + export RUMP_SERVER=$SOCK1 + addr1=$(rump.ifconfig shmif0 |awk '/address:/ { print $2;}') + export RUMP_SERVER=$SOCK3 + addr3=$(rump.ifconfig shmif0 |awk '/address:/ { print $2;}') + unset RUMP_SERVER + + # Refill the MAC addresses of the endpoints. + export RUMP_SERVER=$SOCK1 + atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2 + export RUMP_SERVER=$SOCK2 + export LD_PRELOAD=/usr/lib/librumphijack.so + /sbin/brconfig bridge0 + atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0 + atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0 + + # Check the default # of caches is 100 + atf_check -s exit:0 -o match:"max cache: 100" /sbin/brconfig bridge0 + + # Test two MAC addresses are cached + n=$(get_number_of_caches) + atf_check_equal $n 2 + + # Limit # of caches to one + atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 1 + atf_check -s exit:0 -o match:"max cache: 1" /sbin/brconfig bridge0 + /sbin/brconfig bridge0 + + # Test just one address is cached + n=$(get_number_of_caches) + atf_check_equal $n 1 + + # Increase # of caches to two + atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 2 + atf_check -s exit:0 -o match:"max cache: 2" /sbin/brconfig bridge0 + unset LD_PRELOAD + + # Test we can cache two addresses again + export RUMP_SERVER=$SOCK1 + atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2 + export RUMP_SERVER=$SOCK2 + export LD_PRELOAD=/usr/lib/librumphijack.so + /sbin/brconfig bridge0 + atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0 + atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0 + unset LD_PRELOAD +} + +bridge_ipv4_body() { setup test_setup + # Enable once PR kern/49219 is fixed + #test_ping_failure + setup_bridge + sleep 1 test_setup_bridge - test_ping_success teardown_bridge test_ping_failure } -basic6_body() +bridge_ipv6_body() { setup6 test_setup6 - # TODO: enable once ping6 implements timeout feature - #test_ping6_failure + test_ping6_failure setup_bridge + sleep 1 test_setup_bridge + test_ping6_success + + teardown_bridge + test_ping6_failure +} + +bridge_rtable_body() +{ + addr1= addr3= + + setup + setup_bridge + + # Get MAC addresses of the endpoints. + export RUMP_SERVER=$SOCK1 + addr1=$(rump.ifconfig shmif0 |awk '/address:/ { print $2;}') + export RUMP_SERVER=$SOCK3 + addr3=$(rump.ifconfig shmif0 |awk '/address:/ { print $2;}') + unset RUMP_SERVER + + # Confirm there is no MAC address caches. + export RUMP_SERVER=$SOCK2 + export LD_PRELOAD=/usr/lib/librumphijack.so + /sbin/brconfig bridge0 + atf_check -s exit:0 -o not-match:"$addr1" /sbin/brconfig bridge0 + atf_check -s exit:0 -o not-match:"$addr3" /sbin/brconfig bridge0 + unset LD_PRELOAD + + # Make the bridge learn the MAC addresses of the endpoints. + export RUMP_SERVER=$SOCK1 + atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2 + unset RUMP_SERVER + + # Tests the addresses are in the cache. + export RUMP_SERVER=$SOCK2 + export LD_PRELOAD=/usr/lib/librumphijack.so + /sbin/brconfig bridge0 + atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0 + atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0 + + # Tests brconfig deladdr + atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr1" + atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0 + atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr3" + atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0 + unset LD_PRELOAD + # Refill the MAC addresses of the endpoints. + export RUMP_SERVER=$SOCK1 + atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2 + unset RUMP_SERVER + export RUMP_SERVER=$SOCK2 + export LD_PRELOAD=/usr/lib/librumphijack.so + /sbin/brconfig bridge0 + atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0 + atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0 + + # Tests brconfig flush. + atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 flush + atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0 + atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0 + unset LD_PRELOAD + + # Tests brconfig timeout. + export RUMP_SERVER=$SOCK2 + export LD_PRELOAD=/usr/lib/librumphijack.so + atf_check -s exit:0 -o match:"timeout: 1200" /sbin/brconfig bridge0 + atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 timeout 10 + atf_check -s exit:0 -o match:"timeout: 10" /sbin/brconfig bridge0 + unset LD_PRELOAD + + # Tests brconfig maxaddr. + test_brconfig_maxaddr + + # TODO: brconfig static/flushall/discover/learn + # TODO: cache expiration; it takes 5 minutes at least and we want to + # wait here so long. Should we have a sysctl to change the period? +} + +bridge_member_ipv4_body() +{ + setup + test_setup + + # Enable once PR kern/49219 is fixed + #test_ping_failure + + setup_bridge + sleep 1 + test_setup_bridge + test_ping_success + + setup_member_ip + test_ping_member + + teardown_bridge + test_ping_failure +} + +bridge_member_ipv6_body() +{ + setup6 + test_setup6 + + test_ping6_failure + + setup_bridge + sleep 1 + test_setup_bridge test_ping6_success + setup_member_ip6 + test_ping6_member + teardown_bridge - # TODO: enable once ping6 implements timeout feature - #test_ping6_failure + test_ping6_failure +} + +bridge_ipv4_cleanup() +{ + dump_bus + cleanup +} + +bridge_ipv6_cleanup() +{ + dump_bus + cleanup +} + +bridge_rtable_cleanup() +{ + dump_bus + cleanup } -basic_cleanup() +bridge_member_ipv4_cleanup() { dump_bus cleanup } -basic6_cleanup() +bridge_member_ipv6_cleanup() { dump_bus cleanup @@ -307,6 +584,9 @@ basic6_cleanup() atf_init_test_cases() { - atf_add_test_case basic - atf_add_test_case basic6 + atf_add_test_case bridge_ipv4 + atf_add_test_case bridge_ipv6 + atf_add_test_case bridge_rtable + atf_add_test_case bridge_member_ipv4 + atf_add_test_case bridge_member_ipv6 } |