diff options
author | Renato Botelho <renato@netgate.com> | 2017-02-23 06:28:41 -0300 |
---|---|---|
committer | Renato Botelho <renato@netgate.com> | 2017-02-23 06:28:41 -0300 |
commit | 82ceeb2ea625cd9bff60f2863b9a0830f55b7905 (patch) | |
tree | 263ca9347bf664a4489743f9302e699ce14de1df /contrib/netbsd-tests/net/ndp | |
parent | 4a05f5440acda223e6a0ec5157bc32ecc0f09ff9 (diff) | |
parent | d20dd8b36e7a565be7bfbb22aade51c8ffd753e9 (diff) | |
download | FreeBSD-src-devel.zip FreeBSD-src-devel.tar.gz |
Merge remote-tracking branch 'origin/stable/10' into develdevel
Diffstat (limited to 'contrib/netbsd-tests/net/ndp')
-rwxr-xr-x | contrib/netbsd-tests/net/ndp/t_dad.sh | 276 | ||||
-rwxr-xr-x | contrib/netbsd-tests/net/ndp/t_ndp.sh | 406 | ||||
-rwxr-xr-x | contrib/netbsd-tests/net/ndp/t_ra.sh | 687 |
3 files changed, 1369 insertions, 0 deletions
diff --git a/contrib/netbsd-tests/net/ndp/t_dad.sh b/contrib/netbsd-tests/net/ndp/t_dad.sh new file mode 100755 index 0000000..50ec933 --- /dev/null +++ b/contrib/netbsd-tests/net/ndp/t_dad.sh @@ -0,0 +1,276 @@ +# $NetBSD: t_dad.sh,v 1.12 2016/11/25 08:51:17 ozaki-r Exp $ +# +# Copyright (c) 2015 The NetBSD Foundation, 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. +# + +SOCKLOCAL=unix://commsock1 +SOCKPEER=unix://commsock2 + +DEBUG=${DEBUG:-false} + +duplicated="[Dd][Uu][Pp][Ll][Ii][Cc][Aa][Tt][Ee][Dd]" + +atf_test_case dad_basic cleanup +atf_test_case dad_duplicated cleanup +atf_test_case dad_count cleanup + +dad_basic_head() +{ + atf_set "descr" "Tests for IPv6 DAD basic behavior" + atf_set "require.progs" "rump_server" +} + +dad_duplicated_head() +{ + atf_set "descr" "Tests for IPv6 DAD duplicated state" + atf_set "require.progs" "rump_server" +} + +dad_count_head() +{ + atf_set "descr" "Tests for IPv6 DAD count behavior" + atf_set "require.progs" "rump_server" +} + +setup_server() +{ + local sock=$1 + local ip=$2 + + rump_server_add_iface $sock shmif0 bus1 + + export RUMP_SERVER=$sock + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip + atf_check -s exit:0 rump.ifconfig shmif0 up + atf_check -s exit:0 rump.ifconfig -w 10 + + $DEBUG && rump.ifconfig shmif0 +} + +make_ns_pkt_str() +{ + local id=$1 + local target=$2 + pkt="33:33:ff:00:00:0${id}, ethertype IPv6 (0x86dd), length 78: ::" + pkt="$pkt > ff02::1:ff00:${id}: ICMP6, neighbor solicitation," + pkt="$pkt who has $target, length 24" + echo $pkt +} + +dad_basic_body() +{ + local pkt= + local localip1=fc00::1 + local localip2=fc00::2 + local localip3=fc00::3 + + rump_server_start $SOCKLOCAL netinet6 + rump_server_add_iface $SOCKLOCAL shmif0 bus1 + + export RUMP_SERVER=$SOCKLOCAL + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip1 + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip2 + $DEBUG && rump.ifconfig shmif0 + + atf_check -s exit:0 rump.ifconfig shmif0 up + rump.ifconfig shmif0 > ./out + $DEBUG && cat ./out + + # The primary address doesn't start with tentative state + atf_check -s not-exit:0 -x "cat ./out |grep $localip1 |grep -q tentative" + # The alias address starts with tentative state + # XXX we have no stable way to check this, so skip for now + #atf_check -s exit:0 -x "cat ./out |grep $localip2 |grep -q tentative" + + atf_check -s exit:0 sleep 2 + extract_new_packets bus1 > ./out + $DEBUG && cat ./out + + # Check DAD probe packets (Neighbor Solicitation Message) + pkt=$(make_ns_pkt_str 2 $localip2) + atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'" + # No DAD for the primary address + pkt=$(make_ns_pkt_str 1 $localip1) + atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'" + + # Waiting for DAD complete + atf_check -s exit:0 rump.ifconfig -w 10 + extract_new_packets bus1 > ./out + $DEBUG && cat ./out + + # IPv6 DAD doesn't announce (Neighbor Advertisement Message) + + # The alias address left tentative + atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip2 |grep -q tentative" + + # + # Add a new address on the fly + # + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip3 + + # The new address starts with tentative state + # XXX we have no stable way to check this, so skip for now + #atf_check -s exit:0 -x "rump.ifconfig shmif0 |grep $localip3 |grep -q tentative" + + # Check DAD probe packets (Neighbor Solicitation Message) + atf_check -s exit:0 sleep 2 + extract_new_packets bus1 > ./out + $DEBUG && cat ./out + pkt=$(make_ns_pkt_str 3 $localip3) + atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'" + + # Waiting for DAD complete + atf_check -s exit:0 rump.ifconfig -w 10 + extract_new_packets bus1 > ./out + $DEBUG && cat ./out + + # IPv6 DAD doesn't announce (Neighbor Advertisement Message) + + # The new address left tentative + atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip3 |grep -q tentative" + + rump_server_destroy_ifaces +} + +dad_duplicated_body() +{ + local localip1=fc00::1 + local localip2=fc00::11 + local peerip=fc00::2 + + rump_server_start $SOCKLOCAL netinet6 + rump_server_start $SOCKPEER netinet6 + + setup_server $SOCKLOCAL $localip1 + setup_server $SOCKPEER $peerip + + export RUMP_SERVER=$SOCKLOCAL + + # The primary address isn't marked as duplicated + atf_check -s exit:0 -o not-match:"$localip1.+$duplicated" \ + rump.ifconfig shmif0 + + # + # Add a new address duplicated with the peer server + # + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $peerip + atf_check -s exit:0 sleep 1 + + # The new address is marked as duplicated + atf_check -s exit:0 -o match:"$peerip.+$duplicated" \ + rump.ifconfig shmif0 + + # A unique address isn't marked as duplicated + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip2 + atf_check -s exit:0 sleep 1 + atf_check -s exit:0 -o not-match:"$localip2.+$duplicated" \ + rump.ifconfig shmif0 + + rump_server_destroy_ifaces +} + +dad_count_test() +{ + local pkt= + local count=$1 + local id=$2 + local target=$3 + + # + # Set DAD count to $count + # + atf_check -s exit:0 rump.sysctl -w -q net.inet6.ip6.dad_count=$count + + # Add a new address + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $target + + # Waiting for DAD complete + atf_check -s exit:0 rump.ifconfig -w 20 + + # Check the number of DAD probe packets (Neighbor Solicitation Message) + atf_check -s exit:0 sleep 2 + extract_new_packets bus1 > ./out + $DEBUG && cat ./out + pkt=$(make_ns_pkt_str $id $target) + atf_check -s exit:0 -o match:"$count" \ + -x "cat ./out |grep '$pkt' | wc -l | tr -d ' '" +} + +dad_count_body() +{ + local localip1=fc00::1 + local localip2=fc00::2 + + rump_server_start $SOCKLOCAL netinet6 + rump_server_add_iface $SOCKLOCAL shmif0 bus1 + + export RUMP_SERVER=$SOCKLOCAL + + # Check default value + atf_check -s exit:0 -o match:"1" rump.sysctl -n net.inet6.ip6.dad_count + + # Setup interface + atf_check -s exit:0 rump.ifconfig shmif0 up + atf_check -s exit:0 sleep 2 + rump.ifconfig shmif0 > ./out + $DEBUG && cat ./out + + # + # Set and test DAD count (count=1) + # + dad_count_test 1 1 $localip1 + + # + # Set and test DAD count (count=8) + # + dad_count_test 8 2 $localip2 + + rump_server_destroy_ifaces +} + +dad_basic_cleanup() +{ + $DEBUG && dump + cleanup +} + +dad_duplicated_cleanup() +{ + $DEBUG && dump + cleanup +} + +dad_count_cleanup() +{ + $DEBUG && dump + cleanup +} + +atf_init_test_cases() +{ + atf_add_test_case dad_basic + atf_add_test_case dad_duplicated + atf_add_test_case dad_count +} diff --git a/contrib/netbsd-tests/net/ndp/t_ndp.sh b/contrib/netbsd-tests/net/ndp/t_ndp.sh new file mode 100755 index 0000000..aa96390 --- /dev/null +++ b/contrib/netbsd-tests/net/ndp/t_ndp.sh @@ -0,0 +1,406 @@ +# $NetBSD: t_ndp.sh,v 1.17 2016/11/25 08:51:17 ozaki-r Exp $ +# +# Copyright (c) 2015 The NetBSD Foundation, 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. +# + +SOCKSRC=unix://commsock1 +SOCKDST=unix://commsock2 +IP6SRC=fc00::1 +IP6DST=fc00::2 + +DEBUG=${DEBUG:-true} +TIMEOUT=1 + +atf_test_case ndp_cache_expiration cleanup +atf_test_case ndp_commands cleanup +atf_test_case ndp_cache_overwriting cleanup +atf_test_case ndp_neighborgcthresh cleanup +atf_test_case ndp_link_activation cleanup + +ndp_cache_expiration_head() +{ + atf_set "descr" "Tests for NDP cache expiration" + atf_set "require.progs" "rump_server" +} + +ndp_commands_head() +{ + atf_set "descr" "Tests for commands of ndp(8)" + atf_set "require.progs" "rump_server" +} + +ndp_cache_overwriting_head() +{ + atf_set "descr" "Tests for behavior of overwriting NDP caches" + atf_set "require.progs" "rump_server" +} + +ndp_neighborgcthresh_head() +{ + atf_set "descr" "Tests for GC of neighbor caches" + atf_set "require.progs" "rump_server" +} + +ndp_link_activation_head() +{ + atf_set "descr" "Tests for activating a new MAC address" + atf_set "require.progs" "rump_server" +} + +setup_dst_server() +{ + local assign_ip=$1 + + rump_server_add_iface $SOCKDST shmif0 bus1 + export RUMP_SERVER=$SOCKDST + if [ "$assign_ip" != no ]; then + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6DST + fi + atf_check -s exit:0 rump.ifconfig shmif0 up + atf_check -s exit:0 rump.ifconfig -w 10 + + $DEBUG && rump.ifconfig shmif0 + $DEBUG && rump.ndp -n -a +} + +setup_src_server() +{ + $DEBUG && ulimit -c unlimited + export RUMP_SERVER=$SOCKSRC + + # Setup an interface + rump_server_add_iface $SOCKSRC shmif0 bus1 + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6SRC + atf_check -s exit:0 rump.ifconfig shmif0 up + atf_check -s exit:0 rump.ifconfig -w 10 + + # Sanity check + $DEBUG && rump.ifconfig shmif0 + $DEBUG && rump.ndp -n -a + atf_check -s exit:0 -o ignore rump.ndp -n $IP6SRC + atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6DST +} + +get_timeout() +{ + local timeout=$(env RUMP_SERVER=$SOCKSRC rump.ndp -n $IP6DST |grep $IP6DST|awk '{print $4;}') + timeout=${timeout%s} + echo $timeout +} + +ndp_cache_expiration_body() +{ + + rump_server_start $SOCKSRC netinet6 + rump_server_start $SOCKDST netinet6 + + setup_dst_server + setup_src_server + + # + # Check if a cache is expired expectedly + # + export RUMP_SERVER=$SOCKSRC + atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST + + $DEBUG && rump.ndp -n -a + atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC + # Should be cached + atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n $IP6DST + + timeout=$(get_timeout $IP6DST) + + atf_check -s exit:0 sleep $(($timeout + 1)) + + $DEBUG && rump.ndp -n -a + atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC + # Expired but remains until GC sweaps it (1 day) + atf_check -s exit:0 -o match:'(1d0h0m|23h59m)' rump.ndp -n $IP6DST + + rump_server_destroy_ifaces +} + +ifdown_dst_server() +{ + export RUMP_SERVER=$SOCKDST + atf_check -s exit:0 rump.ifconfig shmif0 down + export RUMP_SERVER=$SOCKSRC +} + +ndp_commands_body() +{ + + rump_server_start $SOCKSRC netinet6 + rump_server_start $SOCKDST netinet6 + + setup_dst_server + setup_src_server + + export RUMP_SERVER=$SOCKSRC + + # We can delete the entry for the interface's IP address + atf_check -s exit:0 -o match:"$IP6SRC" rump.ndp -d $IP6SRC + + # Add and delete a static entry + $DEBUG && rump.ndp -n -a + atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 + $DEBUG && rump.ndp -n -a + atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::10 + atf_check -s exit:0 -o match:'deleted' rump.ndp -d fc00::10 + $DEBUG && rump.ndp -n -a + atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n fc00::10 + + # Add multiple entries via a file (XXX not implemented) + #cat - > ./list <<-EOF + #fc00::11 b2:a0:20:00:00:11 + #fc00::12 b2:a0:20:00:00:12 + #fc00::13 b2:a0:20:00:00:13 + #fc00::14 b2:a0:20:00:00:14 + #fc00::15 b2:a0:20:00:00:15 + #EOF + #$DEBUG && rump.ndp -n -a + #atf_check -s exit:0 -o ignore rump.ndp -f ./list + #$DEBUG && rump.ndp -n -a + + atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST + atf_check -s exit:0 -o ignore rump.ndp -s fc00::11 b2:a0:20:00:00:11 + atf_check -s exit:0 -o ignore rump.ndp -s fc00::12 b2:a0:20:00:00:12 + + atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n $IP6DST + atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::11 + atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::12 + + # Test ndp -a + atf_check -s exit:0 -o match:'fc00::11' rump.ndp -n -a + atf_check -s exit:0 -o match:'fc00::12' rump.ndp -n -a + + # Ensure no packet upsets the src server + ifdown_dst_server + + # Flush all entries (-c) + $DEBUG && rump.ndp -n -a + atf_check -s exit:0 -o ignore rump.ndp -c + atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6SRC + atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6DST + # Only the static caches are not deleted + atf_check -s exit:0 -o ignore -e ignore rump.ndp -n fc00::11 + atf_check -s exit:0 -o ignore -e ignore rump.ndp -n fc00::12 + + $DEBUG && rump.ndp -n -a + atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp + rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp + $DEBUG && rump.ndp -n -a + atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n fc00::10 + + rump_server_destroy_ifaces +} + +ndp_cache_overwriting_body() +{ + + rump_server_start $SOCKSRC netinet6 + rump_server_start $SOCKDST netinet6 + + setup_dst_server + setup_src_server + + export RUMP_SERVER=$SOCKSRC + + # Cannot overwrite a permanent cache + atf_check -s not-exit:0 -e ignore rump.ndp -s $IP6SRC b2:a0:20:00:00:ff + $DEBUG && rump.ndp -n -a + + atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST + $DEBUG && rump.ndp -n -a + # Can overwrite a dynamic cache + atf_check -s exit:0 -o ignore rump.ndp -s $IP6DST b2:a0:20:00:00:00 + $DEBUG && rump.ndp -n -a + atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6DST + + # Test temp option (XXX it doesn't work; expire time isn't set) + #atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp + #$DEBUG && rump.ndp -n -a + #atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n fc00::10 + # Cannot overwrite a temp cache + #atf_check -s not-exit:0 -e ignore rump.ndp -s fc00::10 b2:a0:20:00:00:ff + #$DEBUG && rump.ndp -n -a + + rump_server_destroy_ifaces +} + +get_n_caches() +{ + + echo $(rump.ndp -a -n |grep -v -e Neighbor -e permanent |wc -l) +} + +ndp_neighborgcthresh_body() +{ + + rump_server_start $SOCKSRC netinet6 + rump_server_start $SOCKDST netinet6 + + setup_dst_server no + setup_src_server + + export RUMP_SERVER=$SOCKDST + for i in $(seq 0 9); do + atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6DST}$i + done + + export RUMP_SERVER=$SOCKSRC + + # ping to 3 destinations + $DEBUG && rump.ndp -n -a + for i in $(seq 0 2); do + atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \ + ${IP6DST}$i + done + $DEBUG && rump.ndp -n -a + + # 3 caches should be created + atf_check_equal $(get_n_caches) 3 + + # ping to additional 3 destinations + for i in $(seq 3 5); do + atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \ + ${IP6DST}$i + done + $DEBUG && rump.ndp -n -a + + # 6 caches should be created in total + atf_check_equal $(get_n_caches) 6 + + # Limit the number of neighbor caches to 5 + atf_check -s exit:0 -o ignore rump.sysctl -w \ + net.inet6.ip6.neighborgcthresh=5 + + # ping to additional 4 destinations + for i in $(seq 6 9); do + atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \ + ${IP6DST}$i + done + + # More than 5 caches should be created in total, but exceeded caches + # should be GC-ed + if [ "$(get_n_caches)" -gt 5 ]; then + atf_fail "Neighbor caches are not GC-ed" + fi + + rump_server_destroy_ifaces +} + +make_pkt_str_na() +{ + local ip=$1 + local mac=$2 + local pkt= + pkt="$mac > 33:33:00:00:00:01, ethertype IPv6 (0x86dd), length 86:" + pkt="$pkt $ip > ff02::1: ICMP6, neighbor advertisement" + echo $pkt +} + +ndp_link_activation_body() +{ + local linklocal= + + rump_server_start $SOCKSRC netinet6 + rump_server_start $SOCKDST netinet6 + + setup_dst_server + setup_src_server + + # flush old packets + extract_new_packets bus1 > ./out + + export RUMP_SERVER=$SOCKSRC + + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \ + b2:a1:00:00:00:01 + + atf_check -s exit:0 sleep 1 + extract_new_packets bus1 > ./out + $DEBUG && cat ./out + + linklocal=$(rump.ifconfig shmif0 |awk '/fe80/ {print $2;}' |awk -F % '{print $1;}') + $DEBUG && echo $linklocal + + pkt=$(make_pkt_str_na $linklocal b2:a1:00:00:00:01) + atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'" + + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \ + b2:a1:00:00:00:02 active + + atf_check -s exit:0 sleep 1 + extract_new_packets bus1 > ./out + $DEBUG && cat ./out + + linklocal=$(rump.ifconfig shmif0 |awk '/fe80/ {print $2;}' |awk -F % '{print $1;}') + $DEBUG && echo $linklocal + + pkt=$(make_pkt_str_na $linklocal b2:a1:00:00:00:02) + atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'" + + rump_server_destroy_ifaces +} + +ndp_cache_expiration_cleanup() +{ + $DEBUG && dump + cleanup +} + +ndp_commands_cleanup() +{ + $DEBUG && dump + cleanup +} + +ndp_cache_overwriting_cleanup() +{ + $DEBUG && dump + cleanup +} + +ndp_neighborgcthresh_cleanup() +{ + $DEBUG && dump + cleanup +} + +ndp_link_activation_cleanup() +{ + $DEBUG && dump + cleanup +} + +atf_init_test_cases() +{ + atf_add_test_case ndp_cache_expiration + atf_add_test_case ndp_commands + atf_add_test_case ndp_cache_overwriting + atf_add_test_case ndp_neighborgcthresh + atf_add_test_case ndp_link_activation +} diff --git a/contrib/netbsd-tests/net/ndp/t_ra.sh b/contrib/netbsd-tests/net/ndp/t_ra.sh new file mode 100755 index 0000000..b234570 --- /dev/null +++ b/contrib/netbsd-tests/net/ndp/t_ra.sh @@ -0,0 +1,687 @@ +# $NetBSD: t_ra.sh,v 1.20 2017/01/11 03:15:44 ozaki-r Exp $ +# +# Copyright (c) 2015 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. +# + +RUMPSRV=unix://r1 +RUMPSRV1_2=unix://r12 +RUMPCLI=unix://r2 +RUMPSRV3=unix://r3 +RUMPSRV4=unix://r4 +IP6SRV=fc00:1::1 +IP6SRV1_2=fc00:1::2 +IP6SRV_PREFIX=fc00:1: +IP6CLI=fc00:2::2 +IP6SRV3=fc00:3::1 +IP6SRV3_PREFIX=fc00:3: +IP6SRV4=fc00:4::1 +IP6SRV4_PREFIX=fc00:4: +PIDFILE=./rump.rtadvd.pid +PIDFILE1_2=./rump.rtadvd.pid12 +PIDFILE3=./rump.rtadvd.pid3 +PIDFILE4=./rump.rtadvd.pid4 +CONFIG=./rtadvd.conf +WAITTIME=2 +DEBUG=${DEBUG:-true} + +init_server() +{ + + export RUMP_SERVER=$1 + atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.forwarding=1 + export LD_PRELOAD=/usr/lib/librumphijack.so + atf_check -s exit:0 mkdir -p /rump/var/chroot/rtadvd + unset LD_PRELOAD + unset RUMP_SERVER +} + +setup_shmif0() +{ + local sock=$1 + local IP6ADDR=$2 + + rump_server_add_iface $sock shmif0 bus1 + + export RUMP_SERVER=$sock + atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6ADDR} + atf_check -s exit:0 rump.ifconfig shmif0 up + atf_check -s exit:0 rump.ifconfig -w 10 + + $DEBUG && rump.ifconfig +} + +wait_term() +{ + local PIDFILE=${1} + shift + + while [ -f ${PIDFILE} ] + do + sleep 0.2 + done + + return 0 +} + +create_rtadvdconfig() +{ + + cat << _EOF > ${CONFIG} +shmif0:\ + :mtu#1300:maxinterval#4:mininterval#3: +_EOF +} + +start_rtadvd() +{ + local sock=$1 + local pidfile=$2 + + export RUMP_SERVER=$sock + atf_check -s exit:0 rump.rtadvd -c ${CONFIG} -p $pidfile shmif0 + while [ ! -f $pidfile ]; do + sleep 0.2 + done + unset RUMP_SERVER +} + +check_entries() +{ + local cli=$1 + local srv=$2 + local addr_prefix=$3 + local mac_srv= ll_srv= + + ll_srv=$(get_linklocal_addr $srv shmif0) + mac_srv=$(get_macaddr $srv shmif0) + + export RUMP_SERVER=$cli + $DEBUG && dump_entries + atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r + atf_check -s exit:0 -o match:'advertised' rump.ndp -p + atf_check -s exit:0 -o match:"${ll_srv}%shmif0 \(reachable\)" rump.ndp -p + atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 + atf_check -s exit:0 \ + -o match:"$ll_srv%shmif0 +$mac_srv +shmif0 +(23h59m|1d0h0m)..s S R" \ + rump.ndp -n -a + atf_check -s exit:0 -o match:$addr_prefix rump.ndp -n -a + atf_check -s exit:0 -o match:"$addr_prefix.+<AUTOCONF>" \ + rump.ifconfig shmif0 inet6 + unset RUMP_SERVER +} + +dump_entries() +{ + + echo ndp -n -a + rump.ndp -n -a + echo ndp -p + rump.ndp -p + echo ndp -r + rump.ndp -r +} + +atf_test_case ra_basic cleanup +ra_basic_head() +{ + + atf_set "descr" "Tests for basic functions of router advaertisement(RA)" + atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" +} + +ra_basic_body() +{ + + rump_server_fs_start $RUMPSRV netinet6 + rump_server_start $RUMPCLI netinet6 + + setup_shmif0 ${RUMPSRV} ${IP6SRV} + init_server $RUMPSRV + + setup_shmif0 ${RUMPCLI} ${IP6CLI} + export RUMP_SERVER=${RUMPCLI} + $DEBUG && rump.ndp -n -a + atf_check -s exit:0 -o match:'= 0' rump.sysctl net.inet6.ip6.accept_rtadv + unset RUMP_SERVER + + create_rtadvdconfig + start_rtadvd $RUMPSRV $PIDFILE + sleep $WAITTIME + + export RUMP_SERVER=${RUMPCLI} + atf_check -s exit:0 -o empty rump.ndp -r + atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p + atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0 + atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a + atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a + atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 + unset RUMP_SERVER + + atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + + export RUMP_SERVER=${RUMPCLI} + atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 + unset RUMP_SERVER + + start_rtadvd $RUMPSRV $PIDFILE + sleep $WAITTIME + + check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX + + atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + + rump_server_destroy_ifaces +} + +ra_basic_cleanup() +{ + + if [ -f ${PIDFILE} ]; then + kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + fi + + $DEBUG && dump + cleanup +} + +atf_test_case ra_flush_prefix_entries cleanup +ra_flush_prefix_entries_head() +{ + + atf_set "descr" "Tests for flushing prefixes (ndp -P)" + atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" +} + +ra_flush_prefix_entries_body() +{ + + rump_server_fs_start $RUMPSRV netinet6 + rump_server_start $RUMPCLI netinet6 + + setup_shmif0 ${RUMPSRV} ${IP6SRV} + setup_shmif0 ${RUMPCLI} ${IP6CLI} + + init_server $RUMPSRV + + create_rtadvdconfig + + export RUMP_SERVER=${RUMPCLI} + atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 + unset RUMP_SERVER + + start_rtadvd $RUMPSRV $PIDFILE + sleep $WAITTIME + + check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX + + export RUMP_SERVER=${RUMPCLI} + + # Terminate rtadvd to prevent new RA messages from coming + # Note that ifconfig down; kill -TERM doesn't work + kill -KILL `cat ${PIDFILE}` + + # Flush all the entries in the prefix list + atf_check -s exit:0 rump.ndp -P + + $DEBUG && dump_entries + atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r + atf_check -s exit:0 -o empty rump.ndp -p + atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 + atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a + atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a + atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 + unset RUMP_SERVER + + rump_server_destroy_ifaces +} + +ra_flush_prefix_entries_cleanup() +{ + + $DEBUG && dump + cleanup +} + +atf_test_case ra_flush_defrouter_entries cleanup +ra_flush_defrouter_entries_head() +{ + + atf_set "descr" "Tests for flushing default routers (ndp -R)" + atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" +} + +ra_flush_defrouter_entries_body() +{ + + rump_server_fs_start $RUMPSRV netinet6 + rump_server_start $RUMPCLI netinet6 + + setup_shmif0 ${RUMPSRV} ${IP6SRV} + setup_shmif0 ${RUMPCLI} ${IP6CLI} + + init_server $RUMPSRV + + create_rtadvdconfig + + export RUMP_SERVER=${RUMPCLI} + atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 + unset RUMP_SERVER + + start_rtadvd $RUMPSRV $PIDFILE + sleep $WAITTIME + + check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX + + export RUMP_SERVER=${RUMPCLI} + + # Terminate rtadvd to prevent new RA messages from coming + # Note that ifconfig down; kill -TERM doesn't work + kill -KILL `cat ${PIDFILE}` + + # Flush all the entries in the default router list + atf_check -s exit:0 rump.ndp -R + + $DEBUG && dump_entries + atf_check -s exit:0 -o empty rump.ndp -r + atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p + atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 + atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a + atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a + atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6 + unset RUMP_SERVER + + rump_server_destroy_ifaces +} + +ra_flush_defrouter_entries_cleanup() +{ + + $DEBUG && dump + cleanup +} + +atf_test_case ra_delete_address cleanup +ra_delete_address_head() +{ + + atf_set "descr" "Tests for deleting auto-configured address" + atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" +} + +ra_delete_address_body() +{ + + rump_server_fs_start $RUMPSRV netinet6 + rump_server_start $RUMPCLI netinet6 + + setup_shmif0 ${RUMPSRV} ${IP6SRV} + setup_shmif0 ${RUMPCLI} ${IP6CLI} + + init_server $RUMPSRV + + create_rtadvdconfig + + export RUMP_SERVER=${RUMPCLI} + atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 + unset RUMP_SERVER + + start_rtadvd $RUMPSRV $PIDFILE + sleep $WAITTIME + + check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX + + export RUMP_SERVER=${RUMPCLI} + $DEBUG && rump.ifconfig shmif0 + atf_check -s exit:0 rump.ifconfig shmif0 inet6 \ + $(rump.ifconfig shmif0 |awk '/AUTOCONF/ {print $2}') delete + unset RUMP_SERVER + + atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + + rump_server_destroy_ifaces +} + +ra_delete_address_cleanup() +{ + + if [ -f ${PIDFILE} ]; then + kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + fi + + $DEBUG && dump + cleanup +} + +atf_test_case ra_multiple_routers cleanup +ra_multiple_routers_head() +{ + + atf_set "descr" "Tests for multiple routers" + atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" +} + +ra_multiple_routers_body() +{ + local n= + + rump_server_fs_start $RUMPSRV netinet6 + rump_server_fs_start $RUMPSRV3 netinet6 + rump_server_start $RUMPCLI netinet6 + + setup_shmif0 ${RUMPSRV} ${IP6SRV} + setup_shmif0 ${RUMPSRV3} ${IP6SRV3} + setup_shmif0 ${RUMPCLI} ${IP6CLI} + + init_server $RUMPSRV + init_server $RUMPSRV3 + + create_rtadvdconfig + + export RUMP_SERVER=${RUMPCLI} + atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 + unset RUMP_SERVER + + start_rtadvd $RUMPSRV $PIDFILE + start_rtadvd $RUMPSRV3 $PIDFILE3 + sleep $WAITTIME + + check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX + check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX + + export RUMP_SERVER=$RUMPCLI + # Two prefixes are advertised by differnt two routers + n=$(rump.ndp -p |grep 'advertised by' |wc -l) + atf_check_equal $n 2 + unset RUMP_SERVER + + atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}` + wait_term ${PIDFILE3} + + rump_server_destroy_ifaces +} + +ra_multiple_routers_cleanup() +{ + + if [ -f ${PIDFILE} ]; then + kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + fi + if [ -f ${PIDFILE3} ]; then + kill -TERM `cat ${PIDFILE3}` + wait_term ${PIDFILE3} + fi + + $DEBUG && dump + cleanup +} + +atf_test_case ra_multiple_routers_single_prefix cleanup +ra_multiple_routers_single_prefix_head() +{ + + atf_set "descr" "Tests for multiple routers with a single prefix" + atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" +} + +ra_multiple_routers_single_prefix_body() +{ + local n= + + rump_server_fs_start $RUMPSRV netinet6 + rump_server_fs_start $RUMPSRV1_2 netinet6 + rump_server_start $RUMPCLI netinet6 + + setup_shmif0 ${RUMPSRV} ${IP6SRV} + setup_shmif0 ${RUMPSRV1_2} ${IP6SRV1_2} + setup_shmif0 ${RUMPCLI} ${IP6CLI} + + init_server $RUMPSRV + init_server $RUMPSRV1_2 + + create_rtadvdconfig + + export RUMP_SERVER=${RUMPCLI} + atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 + unset RUMP_SERVER + + start_rtadvd $RUMPSRV $PIDFILE + start_rtadvd $RUMPSRV1_2 $PIDFILE1_2 + sleep $WAITTIME + + check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX + check_entries $RUMPCLI $RUMPSRV1_2 $IP6SRV_PREFIX + + export RUMP_SERVER=$RUMPCLI + # One prefix is advertised by differnt two routers + n=$(rump.ndp -p |grep 'advertised by' |wc -l) + atf_check_equal $n 1 + unset RUMP_SERVER + + atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + atf_check -s exit:0 kill -TERM `cat ${PIDFILE1_2}` + wait_term ${PIDFILE1_2} + + rump_server_destroy_ifaces +} + +ra_multiple_routers_single_prefix_cleanup() +{ + + if [ -f ${PIDFILE} ]; then + kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + fi + if [ -f ${PIDFILE1_2} ]; then + kill -TERM `cat ${PIDFILE1_2}` + wait_term ${PIDFILE1_2} + fi + + $DEBUG && dump + cleanup +} + +atf_test_case ra_multiple_routers_maxifprefixes cleanup +ra_multiple_routers_maxifprefixes_head() +{ + + atf_set "descr" "Tests for exceeding the number of maximum prefixes" + atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" +} + +ra_multiple_routers_maxifprefixes_body() +{ + local n= + + rump_server_fs_start $RUMPSRV netinet6 + rump_server_fs_start $RUMPSRV3 netinet6 + rump_server_fs_start $RUMPSRV4 netinet6 + rump_server_start $RUMPCLI netinet6 + + setup_shmif0 ${RUMPSRV} ${IP6SRV} + setup_shmif0 ${RUMPSRV3} ${IP6SRV3} + setup_shmif0 ${RUMPSRV4} ${IP6SRV4} + setup_shmif0 ${RUMPCLI} ${IP6CLI} + + init_server $RUMPSRV + init_server $RUMPSRV3 + init_server $RUMPSRV4 + + create_rtadvdconfig + + export RUMP_SERVER=${RUMPCLI} + atf_check -s exit:0 -o match:'0.->.1' \ + rump.sysctl -w net.inet6.ip6.accept_rtadv=1 + # Limit the maximum number of prefix entries to 2 + atf_check -s exit:0 -o match:'16.->.2' \ + rump.sysctl -w net.inet6.ip6.maxifprefixes=2 + unset RUMP_SERVER + + start_rtadvd $RUMPSRV $PIDFILE + start_rtadvd $RUMPSRV3 $PIDFILE3 + sleep $WAITTIME + + check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX + check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX + + start_rtadvd $RUMPSRV4 $PIDFILE4 + sleep $WAITTIME + + export RUMP_SERVER=${RUMPCLI} + $DEBUG && dump_entries + # There should remain two prefixes + n=$(rump.ndp -p |grep 'advertised by' |wc -l) + atf_check_equal $n 2 + # TODO check other conditions + unset RUMP_SERVER + + atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}` + wait_term ${PIDFILE3} + atf_check -s exit:0 kill -TERM `cat ${PIDFILE4}` + wait_term ${PIDFILE4} + + rump_server_destroy_ifaces +} + +ra_multiple_routers_maxifprefixes_cleanup() +{ + + if [ -f ${PIDFILE} ]; then + kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + fi + if [ -f ${PIDFILE3} ]; then + kill -TERM `cat ${PIDFILE3}` + wait_term ${PIDFILE3} + fi + if [ -f ${PIDFILE4} ]; then + kill -TERM `cat ${PIDFILE4}` + wait_term ${PIDFILE4} + fi + + $DEBUG && dump + cleanup +} + +atf_test_case ra_temporary_address cleanup +ra_temporary_address_head() +{ + + atf_set "descr" "Tests for IPv6 temporary address" + atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" +} + +ra_temporary_address_body() +{ + + rump_server_fs_start $RUMPSRV netinet6 + rump_server_start $RUMPCLI netinet6 + + setup_shmif0 ${RUMPSRV} ${IP6SRV} + init_server $RUMPSRV + + setup_shmif0 ${RUMPCLI} ${IP6CLI} + export RUMP_SERVER=${RUMPCLI} + $DEBUG && rump.ndp -n -a + atf_check -s exit:0 -o match:'= 0' \ + rump.sysctl net.inet6.ip6.accept_rtadv + atf_check -s exit:0 -o match:'= 0' \ + rump.sysctl net.inet6.ip6.use_tempaddr + unset RUMP_SERVER + + create_rtadvdconfig + start_rtadvd $RUMPSRV $PIDFILE + sleep $WAITTIME + + export RUMP_SERVER=${RUMPCLI} + atf_check -s exit:0 -o empty rump.ndp -r + atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p + atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0 + atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a + atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a + atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 + unset RUMP_SERVER + + atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + + export RUMP_SERVER=${RUMPCLI} + atf_check -s exit:0 -o match:'0.->.1' \ + rump.sysctl -w net.inet6.ip6.accept_rtadv=1 + atf_check -s exit:0 -o match:'0.->.1' \ + rump.sysctl -w net.inet6.ip6.use_tempaddr=1 + unset RUMP_SERVER + + start_rtadvd $RUMPSRV $PIDFILE + sleep $WAITTIME + + check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX + + # Check temporary address + export RUMP_SERVER=${RUMPCLI} + atf_check -s exit:0 -o match:"$IP6SRV_PREFIX.+<AUTOCONF,TEMPORARY>" \ + rump.ifconfig shmif0 inet6 + unset RUMP_SERVER + + atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + + rump_server_destroy_ifaces +} + +ra_temporary_address_cleanup() +{ + + if [ -f ${PIDFILE} ]; then + kill -TERM `cat ${PIDFILE}` + wait_term ${PIDFILE} + fi + + $DEBUG && dump + cleanup +} + +atf_init_test_cases() +{ + + atf_add_test_case ra_basic + atf_add_test_case ra_flush_prefix_entries + atf_add_test_case ra_flush_defrouter_entries + atf_add_test_case ra_delete_address + atf_add_test_case ra_multiple_routers + atf_add_test_case ra_multiple_routers_single_prefix + atf_add_test_case ra_multiple_routers_maxifprefixes + atf_add_test_case ra_temporary_address +} |