Module Name:    src
Committed By:   ozaki-r
Date:           Sat Mar 11 04:24:52 UTC 2017

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/tests/net/if_bridge: Makefile t_bridge.sh
Added Files:
        src/tests/net/if_bridge: t_rtable.sh

Log Message:
Separate tests for learning table of bridge


To generate a diff of this commit:
cvs rdiff -u -r1.727 -r1.728 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.2 -r1.3 src/tests/net/if_bridge/Makefile
cvs rdiff -u -r1.16 -r1.17 src/tests/net/if_bridge/t_bridge.sh
cvs rdiff -u -r0 -r1.1 src/tests/net/if_bridge/t_rtable.sh

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.727 src/distrib/sets/lists/tests/mi:1.728
--- src/distrib/sets/lists/tests/mi:1.727	Mon Mar  6 21:03:56 2017
+++ src/distrib/sets/lists/tests/mi	Sat Mar 11 04:24:52 2017
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.727 2017/03/06 21:03:56 christos Exp $
+# $NetBSD: mi,v 1.728 2017/03/11 04:24:52 ozaki-r Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -3250,6 +3250,7 @@
 ./usr/tests/net/if_bridge/Atffile		tests-net-tests		atf,rump
 ./usr/tests/net/if_bridge/Kyuafile		tests-net-tests		atf,rump,kyua
 ./usr/tests/net/if_bridge/t_bridge		tests-net-tests		atf,rump
+./usr/tests/net/if_bridge/t_rtable		tests-net-tests		atf,rump
 ./usr/tests/net/if_gif				tests-net-tests		compattestfile,atf
 ./usr/tests/net/if_gif/Atffile			tests-net-tests		atf,rump
 ./usr/tests/net/if_gif/Kyuafile			tests-net-tests		atf,rump,kyua

Index: src/tests/net/if_bridge/Makefile
diff -u src/tests/net/if_bridge/Makefile:1.2 src/tests/net/if_bridge/Makefile:1.3
--- src/tests/net/if_bridge/Makefile:1.2	Thu Nov 24 09:07:09 2016
+++ src/tests/net/if_bridge/Makefile	Sat Mar 11 04:24:52 2017
@@ -1,11 +1,11 @@
-# $NetBSD: Makefile,v 1.2 2016/11/24 09:07:09 ozaki-r Exp $
+# $NetBSD: Makefile,v 1.3 2017/03/11 04:24:52 ozaki-r Exp $
 #
 
 .include <bsd.own.mk>
 
 TESTSDIR=	${TESTSBASE}/net/if_bridge
 
-.for name in bridge
+.for name in bridge rtable
 TESTS_SH+=		t_${name}
 TESTS_SH_SRC_t_${name}=	../net_common.sh t_${name}.sh
 .endfor

Index: src/tests/net/if_bridge/t_bridge.sh
diff -u src/tests/net/if_bridge/t_bridge.sh:1.16 src/tests/net/if_bridge/t_bridge.sh:1.17
--- src/tests/net/if_bridge/t_bridge.sh:1.16	Fri Nov 25 08:51:16 2016
+++ src/tests/net/if_bridge/t_bridge.sh	Sat Mar 11 04:24:52 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: t_bridge.sh,v 1.16 2016/11/25 08:51:16 ozaki-r Exp $
+#	$NetBSD: t_bridge.sh,v 1.17 2017/03/11 04:24:52 ozaki-r Exp $
 #
 # Copyright (c) 2014 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -42,7 +42,6 @@ TIMEOUT=5
 
 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
 
@@ -58,12 +57,6 @@ bridge_ipv6_head()
 	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"
@@ -319,63 +312,6 @@ test_ping6_member()
 	rump.ifconfig -v shmif0
 }
 
-get_number_of_caches()
-{
-	export RUMP_SERVER=$SOCK2
-	export LD_PRELOAD=/usr/lib/librumphijack.so
-	echo $(($(/sbin/brconfig bridge0 |grep -A 100 "Address cache" |wc -l) - 1))
-	unset LD_PRELOAD
-}
-
-test_brconfig_maxaddr()
-{
-	addr1= addr3= n=
-
-	# Get MAC addresses of the endpoints.
-	addr1=$(get_macaddr $SOCK1 shmif0)
-	addr3=$(get_macaddr $SOCK3 shmif0)
-
-	# 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
@@ -413,78 +349,6 @@ bridge_ipv6_body()
 	rump_server_destroy_ifaces
 }
 
-bridge_rtable_body()
-{
-	addr1= addr3=
-
-	setup
-	setup_bridge
-
-	# Get MAC addresses of the endpoints.
-	addr1=$(get_macaddr $SOCK1 shmif0)
-	addr3=$(get_macaddr $SOCK3 shmif0)
-
-	# Confirm there is no MAC address caches.
-	export RUMP_SERVER=$SOCK2
-	export LD_PRELOAD=/usr/lib/librumphijack.so
-	$DEBUG && /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
-	$DEBUG && /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
-	$DEBUG && /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?
-
-	rump_server_destroy_ifaces
-}
-
 bridge_member_ipv4_body()
 {
 	setup
@@ -542,13 +406,6 @@ bridge_ipv6_cleanup()
 	cleanup
 }
 
-bridge_rtable_cleanup()
-{
-
-	$DEBUG && dump
-	cleanup
-}
-
 bridge_member_ipv4_cleanup()
 {
 
@@ -567,7 +424,6 @@ atf_init_test_cases()
 {
 	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
 }

Added files:

Index: src/tests/net/if_bridge/t_rtable.sh
diff -u /dev/null src/tests/net/if_bridge/t_rtable.sh:1.1
--- /dev/null	Sat Mar 11 04:24:52 2017
+++ src/tests/net/if_bridge/t_rtable.sh	Sat Mar 11 04:24:52 2017
@@ -0,0 +1,353 @@
+#	$NetBSD: t_rtable.sh,v 1.1 2017/03/11 04:24:52 ozaki-r Exp $
+#
+# Copyright (c) 2017 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK1=unix://commsock1
+SOCK2=unix://commsock2
+SOCK3=unix://commsock3
+IP1=10.0.0.1
+IP2=10.0.0.2
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=5
+
+setup_endpoint()
+{
+	local sock=${1}
+	local addr=${2}
+	local bus=${3}
+	local mode=${4}
+
+	rump_server_add_iface $sock shmif0 $bus
+	export RUMP_SERVER=${sock}
+	if [ $mode = "ipv6" ]; then
+		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
+	else
+		atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
+	fi
+
+	atf_check -s exit:0 rump.ifconfig shmif0 up
+	$DEBUG && rump.ifconfig shmif0
+}
+
+setup_bridge_server()
+{
+
+	rump_server_add_iface $SOCK2 shmif0 bus1
+	rump_server_add_iface $SOCK2 shmif1 bus2
+	export RUMP_SERVER=$SOCK2
+	atf_check -s exit:0 rump.ifconfig shmif0 up
+	atf_check -s exit:0 rump.ifconfig shmif1 up
+}
+
+setup()
+{
+
+	rump_server_start $SOCK1 bridge
+	rump_server_start $SOCK2 bridge
+	rump_server_start $SOCK3 bridge
+
+	setup_endpoint $SOCK1 $IP1 bus1 ipv4
+	setup_endpoint $SOCK3 $IP2 bus2 ipv4
+	setup_bridge_server
+}
+
+setup_bridge()
+{
+
+	export RUMP_SERVER=$SOCK2
+	atf_check -s exit:0 rump.ifconfig bridge0 create
+	atf_check -s exit:0 rump.ifconfig bridge0 up
+
+	export LD_PRELOAD=/usr/lib/librumphijack.so
+	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif0
+	atf_check -s exit:0 /sbin/brconfig bridge0 add shmif1
+	/sbin/brconfig bridge0
+	unset LD_PRELOAD
+	rump.ifconfig shmif0
+	rump.ifconfig shmif1
+}
+
+get_number_of_caches()
+{
+
+	export RUMP_SERVER=$SOCK2
+	export LD_PRELOAD=/usr/lib/librumphijack.so
+	echo $(($(/sbin/brconfig bridge0 |grep -A 100 "Address cache" |wc -l) - 1))
+	unset LD_PRELOAD
+}
+
+
+atf_test_case bridge_rtable_basic cleanup
+bridge_rtable_basic_head()
+{
+
+	atf_set "descr" "Tests basic opearaions of bridge's learning table"
+	atf_set "require.progs" "rump_server"
+}
+
+bridge_rtable_basic_body()
+{
+	local addr1= addr3=
+
+	setup
+	setup_bridge
+
+	# Get MAC addresses of the endpoints.
+	addr1=$(get_macaddr $SOCK1 shmif0)
+	addr3=$(get_macaddr $SOCK3 shmif0)
+
+	# Confirm there is no MAC address caches.
+	export RUMP_SERVER=$SOCK2
+	export LD_PRELOAD=/usr/lib/librumphijack.so
+	$DEBUG && /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
+	$DEBUG && /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
+
+	rump_server_destroy_ifaces
+}
+
+bridge_rtable_basic_cleanup()
+{
+
+	$DEBUG && dump
+	cleanup
+}
+
+
+atf_test_case bridge_rtable_flush cleanup
+bridge_rtable_flush_head()
+{
+
+	atf_set "descr" "Tests brconfig flush"
+	atf_set "require.progs" "rump_server"
+}
+
+bridge_rtable_flush_body()
+{
+	local addr1= addr3=
+
+	setup
+	setup_bridge
+
+	# Get MAC addresses of the endpoints.
+	addr1=$(get_macaddr $SOCK1 shmif0)
+	addr3=$(get_macaddr $SOCK3 shmif0)
+
+	# 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
+	$DEBUG && /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
+
+	rump_server_destroy_ifaces
+}
+
+bridge_rtable_flush_cleanup()
+{
+
+	$DEBUG && dump
+	cleanup
+}
+
+
+atf_test_case bridge_rtable_timeout cleanup
+bridge_rtable_timeout_head()
+{
+
+	atf_set "descr" "Tests cache timeout of bridge's learning table"
+	atf_set "require.progs" "rump_server"
+}
+
+bridge_rtable_timeout_body()
+{
+	local addr1= addr3=
+	local timeout=5
+
+	setup
+	setup_bridge
+
+	# Get MAC addresses of the endpoints.
+	addr1=$(get_macaddr $SOCK1 shmif0)
+	addr3=$(get_macaddr $SOCK3 shmif0)
+
+	# 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 $timeout
+	atf_check -s exit:0 -o match:"timeout: $timeout" /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
+	$DEBUG && /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
+
+	# TODO: cache expiration
+	# The initial timeout value of a cache is changed to $timeout and
+	# after $timeout elapsed the cache is ready to be sweeped. However,
+	# the GC of rtable runs every 5 minutes and the cache remains until
+	# then. Should we have a sysctl to change the period?
+
+	#sleep $(($timeout + 2))
+	#
+	## Tests the addresses are not in the cache.
+	#export RUMP_SERVER=$SOCK2
+	#export LD_PRELOAD=/usr/lib/librumphijack.so
+	#$DEBUG && /sbin/brconfig bridge0
+	#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
+
+	rump_server_destroy_ifaces
+}
+
+bridge_rtable_timeout_cleanup()
+{
+
+	$DEBUG && dump
+	cleanup
+}
+
+
+atf_test_case bridge_rtable_maxaddr cleanup
+bridge_rtable_maxaddr_head()
+{
+
+	atf_set "descr" "Tests brconfig maxaddr"
+	atf_set "require.progs" "rump_server"
+}
+
+bridge_rtable_maxaddr_body()
+{
+	local addr1= addr3=
+
+	setup
+	setup_bridge
+
+	# Get MAC addresses of the endpoints.
+	addr1=$(get_macaddr $SOCK1 shmif0)
+	addr3=$(get_macaddr $SOCK3 shmif0)
+
+	# Fill 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
+
+	rump_server_destroy_ifaces
+}
+
+bridge_rtable_maxaddr_cleanup()
+{
+
+	$DEBUG && dump
+	cleanup
+}
+
+
+atf_init_test_cases()
+{
+
+	atf_add_test_case bridge_rtable_basic
+	atf_add_test_case bridge_rtable_flush
+	atf_add_test_case bridge_rtable_timeout
+	atf_add_test_case bridge_rtable_maxaddr
+	# TODO: brconfig static/flushall/discover/learn
+}

Reply via email to