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/route | |
parent | 4a05f5440acda223e6a0ec5157bc32ecc0f09ff9 (diff) | |
parent | d20dd8b36e7a565be7bfbb22aade51c8ffd753e9 (diff) | |
download | FreeBSD-src-82ceeb2ea625cd9bff60f2863b9a0830f55b7905.zip FreeBSD-src-82ceeb2ea625cd9bff60f2863b9a0830f55b7905.tar.gz |
Merge remote-tracking branch 'origin/stable/10' into develdevel
Diffstat (limited to 'contrib/netbsd-tests/net/route')
-rwxr-xr-x | contrib/netbsd-tests/net/route/t_change.sh | 255 | ||||
-rwxr-xr-x | contrib/netbsd-tests/net/route/t_flags.sh | 334 | ||||
-rwxr-xr-x | contrib/netbsd-tests/net/route/t_flags6.sh | 268 | ||||
-rwxr-xr-x | contrib/netbsd-tests/net/route/t_route.sh | 406 |
4 files changed, 1255 insertions, 8 deletions
diff --git a/contrib/netbsd-tests/net/route/t_change.sh b/contrib/netbsd-tests/net/route/t_change.sh index 3618aee..260cad0 100755 --- a/contrib/netbsd-tests/net/route/t_change.sh +++ b/contrib/netbsd-tests/net/route/t_change.sh @@ -1,4 +1,4 @@ -# $NetBSD: t_change.sh,v 1.4 2013/02/19 21:08:25 joerg Exp $ +# $NetBSD: t_change.sh,v 1.9 2016/11/07 05:25:37 ozaki-r Exp $ # # Copyright (c) 2011 The NetBSD Foundation, Inc. # All rights reserved. @@ -26,18 +26,21 @@ # netserver=\ -"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet" +"rump_server -lrumpdev -lrumpnet -lrumpnet_net \ + -lrumpnet_netinet -lrumpnet_shmif" export RUMP_SERVER=unix://commsock -atf_test_case reject2blackhole cleanup -reject2blackhole_head() +DEBUG=${DEBUG:-false} + +atf_test_case route_change_reject2blackhole cleanup +route_change_reject2blackhole_head() { atf_set "descr" "Change a reject route to blackhole" atf_set "require.progs" "rump_server" } -reject2blackhole_body() +route_change_reject2blackhole_body() { atf_check -s exit:0 ${netserver} ${RUMP_SERVER} @@ -49,10 +52,242 @@ reject2blackhole_body() atf_check -s exit:0 -o ignore \ rump.route change 207.46.197.32 127.0.0.1 -blackhole atf_check -s exit:0 -o match:' UGHBS ' -e ignore -x \ - "rump.netstat -rn -f inet | grep ^207.46| grep ^207.46" + "rump.netstat -rn -f inet | grep ^207.46" +} + +route_change_reject2blackhole_cleanup() +{ + + env RUMP_SERVER=unix://commsock rump.halt +} + +atf_test_case route_change_gateway cleanup +route_change_gateway_head() +{ + + atf_set "descr" "Change the gateway of a route" + atf_set "require.progs" "rump_server" +} + +route_change_gateway_body() +{ + + atf_check -s exit:0 ${netserver} ${RUMP_SERVER} + + atf_check -s exit:0 rump.ifconfig shmif0 create + atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus + atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up + + atf_check -s exit:0 -o ignore \ + rump.route add -net 192.168.0.0/24 10.0.0.1 + atf_check -s exit:0 -o match:'10.0.0.1' -x \ + "rump.route -n show -inet | grep ^192.168" + atf_check -s exit:0 -o ignore \ + rump.route change -net 192.168.0.0/24 10.0.0.254 + atf_check -s exit:0 -o match:'10.0.0.254' -x \ + "rump.route -n show -inet | grep ^192.168" +} + +route_change_gateway_cleanup() +{ + + env RUMP_SERVER=unix://commsock rump.halt +} + +atf_test_case route_change_ifa cleanup +route_change_ifa_head() +{ + + atf_set "descr" "Change the ifa (local address) of a route" + atf_set "require.progs" "rump_server" +} + +route_change_ifa_body() +{ + + atf_check -s exit:0 ${netserver} ${RUMP_SERVER} + + atf_check -s exit:0 rump.ifconfig shmif0 create + atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus + atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 + atf_check -s exit:0 rump.ifconfig shmif0 alias 10.0.0.11/24 + atf_check -s exit:0 rump.ifconfig shmif0 up + + atf_check -s exit:0 -o ignore \ + rump.route add -net 192.168.0.0/24 10.0.0.1 + atf_check -s exit:0 -o match:'10.0.0.1' -x \ + "rump.route -n show -inet | grep ^192.168" + $DEBUG && rump.route -n show -inet + cat >./expect <<-EOF + route to: 192.168.0.1 +destination: 192.168.0.0 + mask: 255.255.255.0 + gateway: 10.0.0.1 + local addr: 10.0.0.10 + interface: shmif0 + flags: <UP,GATEWAY,DONE,STATIC> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get 192.168.0.1 > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output + + # Change the local address of the route + atf_check -s exit:0 -o ignore \ + rump.route change -net 192.168.0.0/24 10.0.0.1 -ifa 10.0.0.11 + $DEBUG && rump.route -n show -inet + cat >./expect <<-EOF + route to: 192.168.0.1 +destination: 192.168.0.0 + mask: 255.255.255.0 + gateway: 10.0.0.1 + local addr: 10.0.0.11 + interface: shmif0 + flags: <UP,GATEWAY,DONE,STATIC> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get 192.168.0.1 > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output +} + +route_change_ifa_cleanup() +{ + + env RUMP_SERVER=unix://commsock rump.halt +} + +atf_test_case route_change_ifp cleanup +route_change_ifp_head() +{ + + atf_set "descr" "Change a route based on an interface (ifp)" + atf_set "require.progs" "rump_server" +} + +route_change_ifp_body() +{ + + atf_check -s exit:0 ${netserver} ${RUMP_SERVER} + + atf_check -s exit:0 rump.ifconfig shmif0 create + atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus + atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up + + atf_check -s exit:0 rump.ifconfig shmif1 create + atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus + atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24 up + + atf_check -s exit:0 -o ignore \ + rump.route add -net 192.168.0.0/24 10.0.0.1 + atf_check -s exit:0 -o match:'10.0.0.1' -x \ + "rump.route -n show -inet | grep ^192.168" + $DEBUG && rump.route -n show -inet + cat >./expect <<-EOF + route to: 192.168.0.1 +destination: 192.168.0.0 + mask: 255.255.255.0 + gateway: 10.0.0.1 + local addr: 10.0.0.10 + interface: shmif0 + flags: <UP,GATEWAY,DONE,STATIC> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get 192.168.0.1 > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output + + # Change a route based on an interface + atf_check -s exit:0 -o ignore \ + rump.route change -net 192.168.0.0/24 10.0.0.1 -ifp shmif1 + $DEBUG && rump.route -n show -inet + cat >./expect <<-EOF + route to: 192.168.0.1 +destination: 192.168.0.0 + mask: 255.255.255.0 + gateway: 10.0.0.1 + local addr: 10.0.0.11 + interface: shmif1 + flags: <UP,GATEWAY,DONE,STATIC> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get 192.168.0.1 > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output +} + +route_change_ifp_cleanup() +{ + + env RUMP_SERVER=unix://commsock rump.halt +} + +atf_test_case route_change_ifp_ifa cleanup +route_change_ifp_head() +{ + + atf_set "descr" "Change a route with -ifp and -ifa" + atf_set "require.progs" "rump_server" +} + +route_change_ifp_ifa_body() +{ + + atf_check -s exit:0 ${netserver} ${RUMP_SERVER} + + atf_check -s exit:0 rump.ifconfig shmif0 create + atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus + atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up + + atf_check -s exit:0 rump.ifconfig shmif1 create + atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus + atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24 up + + atf_check -s exit:0 -o ignore \ + rump.route add -net 192.168.0.0/24 10.0.0.1 + atf_check -s exit:0 -o match:'10.0.0.1' -x \ + "rump.route -n show -inet | grep ^192.168" + $DEBUG && rump.route -n show -inet + cat >./expect <<-EOF + route to: 192.168.0.1 +destination: 192.168.0.0 + mask: 255.255.255.0 + gateway: 10.0.0.1 + local addr: 10.0.0.10 + interface: shmif0 + flags: <UP,GATEWAY,DONE,STATIC> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get 192.168.0.1 > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output + + # Change a route with -ifa and -ifp + atf_check -s exit:0 -o ignore \ + rump.route change -net 192.168.0.0/24 -ifa 10.0.0.1 -ifp shmif1 + $DEBUG && rump.route -n show -inet + cat >./expect <<-EOF + route to: 192.168.0.1 +destination: 192.168.0.0 + mask: 255.255.255.0 + gateway: 10.0.0.1 + local addr: 10.0.0.11 + interface: shmif1 + flags: <UP,GATEWAY,DONE,STATIC> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get 192.168.0.1 > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output } -reject2blackhole_cleanup() +route_change_ifp_ifa_cleanup() { env RUMP_SERVER=unix://commsock rump.halt @@ -61,5 +296,9 @@ reject2blackhole_cleanup() atf_init_test_cases() { - atf_add_test_case reject2blackhole + atf_add_test_case route_change_reject2blackhole + atf_add_test_case route_change_gateway + atf_add_test_case route_change_ifa + atf_add_test_case route_change_ifp + atf_add_test_case route_change_ifp_ifa } diff --git a/contrib/netbsd-tests/net/route/t_flags.sh b/contrib/netbsd-tests/net/route/t_flags.sh new file mode 100755 index 0000000..457e3f5 --- /dev/null +++ b/contrib/netbsd-tests/net/route/t_flags.sh @@ -0,0 +1,334 @@ +# $NetBSD: t_flags.sh,v 1.15 2016/12/21 02:46:08 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. +# + +SOCK_LOCAL=unix://commsock1 +SOCK_PEER=unix://commsock2 +SOCK_GW=unix://commsock3 +BUS=bus1 +BUS2=bus2 + +DEBUG=${DEBUG:-false} + +setup_local() +{ + + rump_server_start $SOCK_LOCAL + rump_server_add_iface $SOCK_LOCAL shmif0 $BUS + + export RUMP_SERVER=$SOCK_LOCAL + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.2/24 + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up + atf_check -s exit:0 -o ignore rump.ifconfig -w 10 + + $DEBUG && rump.ifconfig + $DEBUG && rump.netstat -rn -f inet +} + +setup_peer() +{ + + rump_server_start $SOCK_PEER + rump_server_add_iface $SOCK_PEER shmif0 $BUS + + export RUMP_SERVER=$SOCK_PEER + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.1/24 + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up + atf_check -s exit:0 -o ignore rump.ifconfig -w 10 + + $DEBUG && rump.ifconfig + $DEBUG && rump.netstat -rn -f inet +} + +setup_gw() +{ + + rump_server_start $SOCK_GW + rump_server_add_iface $SOCK_GW shmif0 $BUS + rump_server_add_iface $SOCK_GW shmif1 $BUS2 + + export RUMP_SERVER=$SOCK_GW + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.254/24 + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up + + atf_check -s exit:0 -o ignore rump.ifconfig shmif1 10.0.2.1/24 + atf_check -s exit:0 -o ignore rump.ifconfig shmif1 alias 10.0.2.2/24 + atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up + + # Wait until DAD completes (10 sec at most) + atf_check -s exit:0 -o ignore rump.ifconfig -w 10 + atf_check -s not-exit:0 -x "rump.ifconfig shmif1 |grep -q tentative" + + $DEBUG && rump.ifconfig + $DEBUG && rump.netstat -rn -f inet +} + +test_lo() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + # Up, Host, local + check_route_flags 127.0.0.1 UHl +} + +test_connected() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + # Up, Host, LLINFO, local + check_route_flags 10.0.0.2 UHl + + # Up, Cloning + check_route_flags 10.0.0/24 UC +} + +test_default_gateway() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1 + $DEBUG && rump.netstat -rn -f inet + + # Up, Gateway, Static + check_route_flags default UGS +} + +test_static() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + # Static route to host + atf_check -s exit:0 -o ignore rump.route add 10.0.1.1 10.0.0.1 + $DEBUG && rump.netstat -rn -f inet + + # Up, Gateway, Host, Static + check_route_flags 10.0.1.1 UGHS + + # Static route to network + atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.1 + $DEBUG && rump.netstat -rn -f inet + + # Up, Gateway, Static + check_route_flags 10.0.2/24 UGS +} + +test_blackhole() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.0.1 + + # Delete an existing route first + atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 + + # Gateway must be lo0 + atf_check -s exit:0 -o ignore \ + rump.route add -net 10.0.0.0/24 127.0.0.1 -blackhole + $DEBUG && rump.netstat -rn -f inet + + # Up, Gateway, Blackhole, Static + check_route_flags 10.0.0/24 UGBS + + atf_check -s not-exit:0 -o match:'100.0% packet loss' \ + rump.ping -n -w 1 -c 1 10.0.0.1 + $DEBUG && rump.netstat -rn -f inet + + # Shouldn't be created + check_route_no_entry 10.0.0.1 +} + +test_reject() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + # Delete an existing route first + atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 + + atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -reject + $DEBUG && rump.netstat -rn -f inet + + # Up, Gateway, Reject, Static + check_route_flags 10.0.0/24 UGRS + + atf_check -s not-exit:0 -o ignore -e match:'No route to host' \ + rump.ping -n -w 1 -c 1 10.0.0.1 + $DEBUG && rump.netstat -rn -f inet + + # Shouldn't be created + check_route_no_entry 10.0.0.1 + + # Gateway is lo0 (RTF_GATEWAY) + + # Delete an existing route first + atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 + + atf_check -s exit:0 -o ignore \ + rump.route add -net 10.0.0.0/24 127.0.0.1 -reject + $DEBUG && rump.netstat -rn -f inet + + # Up, Gateway, Reject, Static + check_route_flags 10.0.0/24 UGRS + + atf_check -s not-exit:0 -o ignore -e match:'Network is unreachable' \ + rump.ping -n -w 1 -c 1 10.0.0.1 + $DEBUG && rump.netstat -rn -f inet + + # Shouldn't be created + check_route_no_entry 10.0.0.1 + + # Gateway is lo0 (RTF_HOST) + + # Delete an existing route first + atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 + + atf_check -s exit:0 -o ignore \ + rump.route add -host 10.0.0.1/24 127.0.0.1 -iface -reject + $DEBUG && rump.netstat -rn -f inet + + # Up, Host, Reject, Static + check_route_flags 10.0.0.1 UHRS + + atf_check -s not-exit:0 -o ignore -e match:'No route to host' \ + rump.ping -n -w 1 -c 1 10.0.0.1 + $DEBUG && rump.netstat -rn -f inet + + return 0 +} + +test_icmp_redirect() +{ + + ### Testing Dynamic flag ### + + # + # Setup a gateway 10.0.0.254. 10.0.2.1 is behind it. + # + setup_gw + + # + # Teach the peer that 10.0.2.* is behind 10.0.0.254 + # + export RUMP_SERVER=$SOCK_PEER + atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.254 + # Up, Gateway, Static + check_route_flags 10.0.2/24 UGS + + # + # Setup the default gateway to the peer, 10.0.0.1 + # + export RUMP_SERVER=$SOCK_LOCAL + atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1 + # Up, Gateway, Static + check_route_flags default UGS + + # Try ping 10.0.2.1 + atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1 + $DEBUG && rump.netstat -rn -f inet + + # Up, Gateway, Host, Dynamic + check_route_flags 10.0.2.1 UGHD + check_route_gw 10.0.2.1 10.0.0.254 + + export RUMP_SERVER=$SOCK_PEER + $DEBUG && rump.netstat -rn -f inet + + ### Testing Modified flag ### + + # + # Teach a wrong route to 10.0.2.2 + # + export RUMP_SERVER=$SOCK_LOCAL + atf_check -s exit:0 -o ignore rump.route add 10.0.2.2 10.0.0.1 + # Up, Gateway, Host, Static + check_route_flags 10.0.2.2 UGHS + check_route_gw 10.0.2.2 10.0.0.1 + + # Try ping 10.0.2.2 + atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.2 + $DEBUG && rump.netstat -rn -f inet + + # Up, Gateway, Host, Modified, Static + check_route_flags 10.0.2.2 UGHMS + check_route_gw 10.0.2.2 10.0.0.254 +} + +test_announce() +{ + export RUMP_SERVER=$SOCK_LOCAL + + # Delete an existing route first + atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 + + atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -proxy + $DEBUG && rump.netstat -rn -f inet + + # Up, Gateway, Static, proxy + check_route_flags 10.0.0/24 UGSp + + # TODO test its behavior +} + +add_test() +{ + local name=$1 + local desc="$2" + + atf_test_case "route_flags_${name}" cleanup + eval "route_flags_${name}_head() { \ + atf_set \"descr\" \"${desc}\"; \ + atf_set \"require.progs\" \"rump_server\"; \ + }; \ + route_flags_${name}_body() { \ + setup_local; \ + setup_peer; \ + test_${name}; \ + rump_server_destroy_ifaces; \ + }; \ + route_flags_${name}_cleanup() { \ + $DEBUG && dump; \ + cleanup; \ + }" + atf_add_test_case "route_flags_${name}" +} + +atf_init_test_cases() +{ + + add_test lo "Tests route flags: loop back interface" + add_test connected "Tests route flags: connected route" + add_test default_gateway "Tests route flags: default gateway" + add_test static "Tests route flags: static route" + add_test blackhole "Tests route flags: blackhole route" + add_test reject "Tests route flags: reject route" + add_test icmp_redirect "Tests route flags: icmp redirect" + add_test announce "Tests route flags: announce flag" +} diff --git a/contrib/netbsd-tests/net/route/t_flags6.sh b/contrib/netbsd-tests/net/route/t_flags6.sh new file mode 100755 index 0000000..e570829 --- /dev/null +++ b/contrib/netbsd-tests/net/route/t_flags6.sh @@ -0,0 +1,268 @@ +# $NetBSD: t_flags6.sh,v 1.12 2016/12/21 02:46:08 ozaki-r Exp $ +# +# Copyright (c) 2016 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. +# + +SOCK_LOCAL=unix://commsock1 +SOCK_PEER=unix://commsock2 +SOCK_GW=unix://commsock3 +BUS=bus1 +BUS2=bus2 + +IP6_LOCAL=fc00::2 +IP6_PEER=fc00::1 + +DEBUG=${DEBUG:-false} + +setup_local() +{ + + rump_server_start $SOCK_LOCAL netinet6 + rump_server_add_iface $SOCK_LOCAL shmif0 $BUS + + export RUMP_SERVER=$SOCK_LOCAL + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $IP6_LOCAL + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up + atf_check -s exit:0 -o ignore rump.ifconfig -w 10 + + $DEBUG && rump.ifconfig + $DEBUG && rump.netstat -rn -f inet6 +} + +setup_peer() +{ + + rump_server_start $SOCK_PEER netinet6 + rump_server_add_iface $SOCK_PEER shmif0 $BUS + + export RUMP_SERVER=$SOCK_PEER + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $IP6_PEER + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up + atf_check -s exit:0 -o ignore rump.ifconfig -w 10 + + $DEBUG && rump.ifconfig + $DEBUG && rump.netstat -rn -f inet6 +} + +test_lo6() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + # Up, Host, local + check_route_flags fe80::1 UHl + + # Up, Host, local + check_route_flags ::1 UHl +} + +test_connected6() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + # Up, Host, local + check_route_flags $IP6_LOCAL UHl + + # Up, Connected + check_route_flags fc00::/64 UC +} + +test_default_gateway6() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + atf_check -s exit:0 -o ignore rump.route add -inet6 default $IP6_PEER + $DEBUG && rump.netstat -rn -f inet6 + + # Up, Gateway, Static + check_route_flags default UGS +} + +test_static6() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + # Static route to host + atf_check -s exit:0 -o ignore \ + rump.route add -inet6 fc00::1:1 $IP6_PEER + $DEBUG && rump.netstat -rn -f inet6 + + # Up, Gateway, Host, Static + check_route_flags fc00::1:1 UGHS + + # Static route to network + atf_check -s exit:0 -o ignore \ + rump.route add -inet6 -net fc00::/24 $IP6_PEER + $DEBUG && rump.netstat -rn -f inet6 + + # Up, Gateway, Static + check_route_flags fc00::/24 UGS +} + +test_blackhole6() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + atf_check -s exit:0 -o ignore rump.ping6 -n -X 1 -c 1 $IP6_PEER + + # Delete an existing route first + atf_check -s exit:0 -o ignore \ + rump.route delete -inet6 -net fc00::/64 + + # Gateway must be lo0 + atf_check -s exit:0 -o ignore \ + rump.route add -inet6 -net fc00::/64 ::1 -blackhole + $DEBUG && rump.netstat -rn -f inet6 + + # Up, Gateway, Blackhole, Static + check_route_flags fc00::/64 UGBS + + atf_check -s not-exit:0 -o match:'100.0% packet loss' \ + rump.ping6 -n -X 1 -c 1 $IP6_PEER + $DEBUG && rump.netstat -rn -f inet6 + + # Shouldn't be created + check_route_no_entry $IP6_PEER +} + +test_reject6() +{ + + export RUMP_SERVER=$SOCK_LOCAL + + # Delete an existing route first + atf_check -s exit:0 -o ignore \ + rump.route delete -inet6 -net fc00::/64 + + atf_check -s exit:0 -o ignore \ + rump.route add -inet6 -net fc00::/64 $IP6_PEER -reject + $DEBUG && rump.netstat -rn -f inet6 + + # Up, Gateway, Reject, Static + check_route_flags fc00::/64 UGRS + + atf_check -s not-exit:0 -o ignore -e match:'No route to host' \ + rump.ping6 -n -X 1 -c 1 $IP6_PEER + $DEBUG && rump.netstat -rn -f inet6 + + # Shouldn't be created + check_route_no_entry $IP6_PEER + + # Gateway is lo0 (RTF_GATEWAY) + + # Delete an existing route first + atf_check -s exit:0 -o ignore \ + rump.route delete -inet6 -net fc00::/64 + + atf_check -s exit:0 -o ignore \ + rump.route add -inet6 -net fc00::/64 ::1 -reject + $DEBUG && rump.netstat -rn -f inet6 + + # Up, Gateway, Reject, Static + check_route_flags fc00::/64 UGRS + + atf_check -s not-exit:0 -o ignore -e match:'Network is unreachable' \ + rump.ping6 -n -X 1 -c 1 $IP6_PEER + $DEBUG && rump.netstat -rn -f inet6 + + # Shouldn't be created + check_route_no_entry $IP6_PEER + + # Gateway is lo0 (RTF_HOST) + + # Delete an existing route first + atf_check -s exit:0 -o ignore \ + rump.route delete -inet6 -net fc00::/64 + + atf_check -s exit:0 -o ignore \ + rump.route add -inet6 -host fc00::/64 ::1 -iface -reject + $DEBUG && rump.netstat -rn -f inet6 + + # Up, Host, Reject, Static + check_route_flags fc00:: UHRS + + atf_check -s not-exit:0 -o ignore -e match:'No route to host' \ + rump.ping6 -n -X 1 -c 1 $IP6_PEER + $DEBUG && rump.netstat -rn -f inet6 + + return 0 +} + +test_announce6() +{ + export RUMP_SERVER=$SOCK_LOCAL + + # Delete an existing route first + atf_check -s exit:0 -o ignore \ + rump.route delete -inet6 -net fc00::/64 + + atf_check -s exit:0 -o ignore \ + rump.route add -inet6 -net fc00::/64 $IP6_PEER -proxy + $DEBUG && rump.netstat -rn -f inet6 + + # Up, Gateway, Static, proxy + check_route_flags fc00::/64 UGSp + + # TODO test its behavior +} + +add_test() +{ + local name=$1 + local desc="$2" + + atf_test_case "route_flags_${name}" cleanup + eval "route_flags_${name}_head() { \ + atf_set \"descr\" \"${desc}\"; \ + atf_set \"require.progs\" \"rump_server\"; \ + }; \ + route_flags_${name}_body() { \ + setup_local; \ + setup_peer; \ + test_${name}; \ + rump_server_destroy_ifaces; \ + }; \ + route_flags_${name}_cleanup() { \ + $DEBUG && dump; \ + cleanup; \ + }" + atf_add_test_case "route_flags_${name}" +} + +atf_init_test_cases() +{ + + add_test lo6 "Tests route flags: loop back interface" + add_test connected6 "Tests route flags: connected route" + add_test default_gateway6 "Tests route flags: default gateway" + add_test static6 "Tests route flags: static route" + add_test blackhole6 "Tests route flags: blackhole route" + add_test reject6 "Tests route flags: reject route" + add_test announce6 "Tests route flags: announce flag" +} diff --git a/contrib/netbsd-tests/net/route/t_route.sh b/contrib/netbsd-tests/net/route/t_route.sh new file mode 100755 index 0000000..053f48f --- /dev/null +++ b/contrib/netbsd-tests/net/route/t_route.sh @@ -0,0 +1,406 @@ +# $NetBSD: t_route.sh,v 1.10 2016/12/21 02:46:08 ozaki-r Exp $ +# +# Copyright (c) 2016 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. +# + +# non_subnet_gateway +SOCK_CLIENT=unix://commsock1 +SOCK_GW=unix://commsock2 +BUS=bus1 + +# command_get +SOCKSRC=unix://commsock1 +SOCKFWD=unix://commsock2 +SOCKDST=unix://commsock3 +IP4SRC=10.0.1.2 +IP4SRCGW=10.0.1.1 +IP4DSTGW=10.0.2.1 +IP4DST=10.0.2.2 +IP4DST_BCAST=10.0.2.255 +IP6SRC=fc00:0:0:1::2 +IP6SRCGW=fc00:0:0:1::1 +IP6DSTGW=fc00:0:0:2::1 +IP6DST=fc00:0:0:2::2 +BUS_SRCGW=bus1 +BUS_DSTGW=bus2 + +DEBUG=${DEBUG:-false} +TIMEOUT=1 +PING_OPTS="-n -c 1 -w $TIMEOUT" + +atf_test_case route_non_subnet_gateway cleanup +route_non_subnet_gateway_head() +{ + + atf_set "descr" "tests of a gateway not on the local subnet" + atf_set "require.progs" "rump_server" +} + +route_non_subnet_gateway_body() +{ + + rump_server_start $SOCK_CLIENT + rump_server_start $SOCK_GW + + export RUMP_SERVER=${SOCK_GW} + rump_server_add_iface $SOCK_GW shmif0 $BUS + atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1 + atf_check -s exit:0 rump.ifconfig shmif0 up + + # The gateway knows the client + atf_check -s exit:0 -o match:'add net 10.0.0.1: gateway shmif0' \ + rump.route add -net 10.0.0.1/32 -link -cloning -iface shmif0 + + $DEBUG && rump.netstat -nr -f inet + + export RUMP_SERVER=${SOCK_CLIENT} + rump_server_add_iface $SOCK_CLIENT shmif0 $BUS + atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.1/32 + atf_check -s exit:0 rump.ifconfig shmif0 up + atf_check -s exit:0 rump.ifconfig -w 10 + + $DEBUG && rump.netstat -nr -f inet + + # Don't know a route to the gateway yet + atf_check -s not-exit:0 -o match:'100.0% packet loss' \ + -e match:'No route to host' rump.ping $PING_OPTS 192.168.0.1 + + # Teach a route to the gateway + atf_check -s exit:0 -o match:'add net 192.168.0.1: gateway shmif0' \ + rump.route add -net 192.168.0.1/32 -link -cloning -iface shmif0 + atf_check -s exit:0 -o match:'add net default: gateway 192.168.0.1' \ + rump.route add default -ifa 10.0.0.1 192.168.0.1 + + $DEBUG && rump.netstat -nr -f inet + + # Be reachable to the gateway + atf_check -s exit:0 -o ignore rump.ping $PING_OPTS 192.168.0.1 + + rump_server_destroy_ifaces +} + +route_non_subnet_gateway_cleanup() +{ + + $DEBUG && dump + cleanup +} + +atf_test_case route_command_get cleanup +atf_test_case route_command_get6 cleanup +route_command_get_head() +{ + + atf_set "descr" "tests of route get command" + atf_set "require.progs" "rump_server" +} + +route_command_get6_head() +{ + + atf_set "descr" "tests of route get command (IPv6)" + atf_set "require.progs" "rump_server" +} + +setup_endpoint() +{ + local sock=${1} + local addr=${2} + local bus=${3} + local mode=${4} + local gw=${5} + + export RUMP_SERVER=${sock} + rump_server_add_iface $sock shmif0 $bus + if [ $mode = "ipv6" ]; then + atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr} + atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw} + else + atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00 + atf_check -s exit:0 -o ignore rump.route add default ${gw} + fi + atf_check -s exit:0 rump.ifconfig shmif0 up + atf_check -s exit:0 rump.ifconfig -w 10 + + if $DEBUG; then + rump.ifconfig shmif0 + rump.netstat -nr + fi +} + +setup_forwarder() +{ + mode=${1} + + rump_server_add_iface $SOCKFWD shmif0 $BUS_SRCGW + rump_server_add_iface $SOCKFWD shmif1 $BUS_DSTGW + + export RUMP_SERVER=$SOCKFWD + if [ $mode = "ipv6" ]; then + atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW} + atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW} + else + atf_check -s exit:0 rump.ifconfig shmif0 inet ${IP4SRCGW} netmask 0xffffff00 + atf_check -s exit:0 rump.ifconfig shmif1 inet ${IP4DSTGW} netmask 0xffffff00 + fi + + atf_check -s exit:0 rump.ifconfig shmif0 up + atf_check -s exit:0 rump.ifconfig shmif1 up + atf_check -s exit:0 rump.ifconfig -w 10 + + if $DEBUG; then + rump.netstat -nr + if [ $mode = "ipv6" ]; then + rump.sysctl net.inet6.ip6.forwarding + else + rump.sysctl net.inet.ip.forwarding + fi + fi +} + +setup_forwarding() +{ + export RUMP_SERVER=$SOCKFWD + atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=1 +} + +setup_forwarding6() +{ + export RUMP_SERVER=$SOCKFWD + atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=1 +} + +setup() +{ + + rump_server_start $SOCKSRC + rump_server_start $SOCKFWD + rump_server_start $SOCKDST + + setup_endpoint $SOCKSRC $IP4SRC $BUS_SRCGW ipv4 $IP4SRCGW + setup_endpoint $SOCKDST $IP4DST $BUS_DSTGW ipv4 $IP4DSTGW + setup_forwarder ipv4 +} + +setup6() +{ + + rump_server_start $SOCKSRC netinet6 + rump_server_start $SOCKFWD netinet6 + rump_server_start $SOCKDST netinet6 + + setup_endpoint $SOCKSRC $IP6SRC $BUS_SRCGW ipv6 $IP6SRCGW + setup_endpoint $SOCKDST $IP6DST $BUS_DSTGW ipv6 $IP6DSTGW + setup_forwarder ipv6 +} + +test_route_get() +{ + + export RUMP_SERVER=$SOCKSRC + $DEBUG && rump.netstat -nr -f inet + $DEBUG && rump.arp -n -a + + # Make sure an ARP cache to the gateway doesn't exist + rump.arp -d $IP4SRCGW + + # Local + cat >./expect <<-EOF + route to: 10.0.1.2 +destination: 10.0.1.2 + local addr: 10.0.1.2 + interface: lo0 + flags: <UP,HOST,DONE,LLINFO,LOCAL> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get $IP4SRC > ./output + $DEBUG && cat ./expect ./output + # XXX: omit the last line because expire is unstable on rump kernel. + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output + + # Neighbor + cat >./expect <<-EOF + route to: 10.0.1.1 +destination: 10.0.1.0 + mask: 255.255.255.0 + local addr: 10.0.1.2 + interface: shmif0 + flags: <UP,DONE,CONNECTED> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get $IP4SRCGW > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output + + # Remote host + cat >./expect <<-EOF + route to: 10.0.2.2 +destination: default + mask: default + gateway: 10.0.1.1 + local addr: 10.0.1.2 + interface: shmif0 + flags: <UP,GATEWAY,DONE,STATIC> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get $IP4DST > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output + + # Create a ARP cache + atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4SRCGW + + # Neighbor with a cache (no different from w/o cache) + cat >./expect <<-EOF + route to: 10.0.1.1 +destination: 10.0.1.0 + mask: 255.255.255.0 + local addr: 10.0.1.2 + interface: shmif0 + flags: <UP,DONE,CONNECTED> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get $IP4SRCGW > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output +} + +test_route_get6() +{ + + export RUMP_SERVER=$SOCKSRC + $DEBUG && rump.netstat -nr -f inet + $DEBUG && rump.ndp -n -a + + # Make sure an ARP cache to the gateway doesn't exist + rump.ndp -d $IP6SRCGW + + # Local + cat >./expect <<-EOF + route to: fc00:0:0:1::2 +destination: fc00:0:0:1::2 + local addr: fc00:0:0:1::2 + interface: lo0 + flags: <UP,HOST,DONE,LLINFO,LOCAL> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get -inet6 $IP6SRC > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output + + # Neighbor + cat >./expect <<-EOF + route to: fc00:0:0:1::1 +destination: fc00:0:0:1:: + mask: ffff:ffff:ffff:ffff:: + local addr: fc00:0:0:1::2 + interface: shmif0 + flags: <UP,DONE,CONNECTED> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get -inet6 $IP6SRCGW > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output + + # Remote host + cat >./expect <<-EOF + route to: fc00:0:0:2::2 +destination: :: + mask: default + gateway: fc00:0:0:1::1 + local addr: fc00:0:0:1::2 + interface: shmif0 + flags: <UP,GATEWAY,DONE,STATIC> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get -inet6 $IP6DST > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output + + # Create a NDP cache + atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6SRCGW + + # Neighbor with a cache (no different from w/o cache) + cat >./expect <<-EOF + route to: fc00:0:0:1::1 +destination: fc00:0:0:1:: + mask: ffff:ffff:ffff:ffff:: + local addr: fc00:0:0:1::2 + interface: shmif0 + flags: <UP,DONE,CONNECTED> + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire + EOF + rump.route -n get -inet6 $IP6SRCGW > ./output + $DEBUG && cat ./expect ./output + sed -i '$d' ./output + atf_check -s exit:0 diff ./expect ./output +} + +route_command_get_body() +{ + + setup + setup_forwarding + test_route_get + rump_server_destroy_ifaces +} + +route_command_get6_body() +{ + + setup6 + setup_forwarding6 + test_route_get6 + rump_server_destroy_ifaces +} + +route_command_get_cleanup() +{ + + $DEBUG && dump + cleanup +} + +route_command_get6_cleanup() +{ + + $DEBUG && dump + cleanup +} + +atf_init_test_cases() +{ + + atf_add_test_case route_non_subnet_gateway + atf_add_test_case route_command_get + atf_add_test_case route_command_get6 +} |