1 1.16 ozaki # $NetBSD: t_flags6.sh,v 1.16 2017/08/03 03:16:27 ozaki-r Exp $ 2 1.1 ozaki # 3 1.1 ozaki # Copyright (c) 2016 Internet Initiative Japan Inc. 4 1.1 ozaki # All rights reserved. 5 1.1 ozaki # 6 1.1 ozaki # Redistribution and use in source and binary forms, with or without 7 1.1 ozaki # modification, are permitted provided that the following conditions 8 1.1 ozaki # are met: 9 1.1 ozaki # 1. Redistributions of source code must retain the above copyright 10 1.1 ozaki # notice, this list of conditions and the following disclaimer. 11 1.1 ozaki # 2. Redistributions in binary form must reproduce the above copyright 12 1.1 ozaki # notice, this list of conditions and the following disclaimer in the 13 1.1 ozaki # documentation and/or other materials provided with the distribution. 14 1.1 ozaki # 15 1.1 ozaki # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16 1.1 ozaki # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 1.1 ozaki # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 1.1 ozaki # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19 1.1 ozaki # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 1.1 ozaki # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 1.1 ozaki # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 1.1 ozaki # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 1.1 ozaki # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 1.1 ozaki # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 1.1 ozaki # POSSIBILITY OF SUCH DAMAGE. 26 1.1 ozaki # 27 1.1 ozaki 28 1.1 ozaki SOCK_LOCAL=unix://commsock1 29 1.1 ozaki SOCK_PEER=unix://commsock2 30 1.1 ozaki SOCK_GW=unix://commsock3 31 1.1 ozaki BUS=bus1 32 1.1 ozaki BUS2=bus2 33 1.1 ozaki 34 1.1 ozaki IP6_LOCAL=fc00::2 35 1.1 ozaki IP6_PEER=fc00::1 36 1.1 ozaki 37 1.9 ozaki DEBUG=${DEBUG:-false} 38 1.1 ozaki 39 1.1 ozaki setup_local() 40 1.1 ozaki { 41 1.1 ozaki 42 1.11 ozaki rump_server_start $SOCK_LOCAL netinet6 43 1.11 ozaki rump_server_add_iface $SOCK_LOCAL shmif0 $BUS 44 1.1 ozaki 45 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 46 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $IP6_LOCAL 47 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up 48 1.12 ozaki atf_check -s exit:0 -o ignore rump.ifconfig -w 10 49 1.1 ozaki 50 1.1 ozaki $DEBUG && rump.ifconfig 51 1.1 ozaki $DEBUG && rump.netstat -rn -f inet6 52 1.1 ozaki } 53 1.1 ozaki 54 1.1 ozaki setup_peer() 55 1.1 ozaki { 56 1.1 ozaki 57 1.11 ozaki rump_server_start $SOCK_PEER netinet6 58 1.11 ozaki rump_server_add_iface $SOCK_PEER shmif0 $BUS 59 1.1 ozaki 60 1.1 ozaki export RUMP_SERVER=$SOCK_PEER 61 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $IP6_PEER 62 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up 63 1.12 ozaki atf_check -s exit:0 -o ignore rump.ifconfig -w 10 64 1.1 ozaki 65 1.1 ozaki $DEBUG && rump.ifconfig 66 1.1 ozaki $DEBUG && rump.netstat -rn -f inet6 67 1.1 ozaki } 68 1.1 ozaki 69 1.6 ozaki test_lo6() 70 1.1 ozaki { 71 1.1 ozaki 72 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 73 1.1 ozaki 74 1.1 ozaki # Up, Host, local 75 1.10 ozaki check_route_flags fe80::1 UHl 76 1.1 ozaki 77 1.8 roy # Up, Host, local 78 1.10 ozaki check_route_flags ::1 UHl 79 1.1 ozaki } 80 1.1 ozaki 81 1.6 ozaki test_connected6() 82 1.1 ozaki { 83 1.1 ozaki 84 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 85 1.1 ozaki 86 1.1 ozaki # Up, Host, local 87 1.10 ozaki check_route_flags $IP6_LOCAL UHl 88 1.1 ozaki 89 1.1 ozaki # Up, Connected 90 1.10 ozaki check_route_flags fc00::/64 UC 91 1.1 ozaki } 92 1.1 ozaki 93 1.6 ozaki test_default_gateway6() 94 1.1 ozaki { 95 1.1 ozaki 96 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 97 1.1 ozaki 98 1.1 ozaki atf_check -s exit:0 -o ignore rump.route add -inet6 default $IP6_PEER 99 1.1 ozaki $DEBUG && rump.netstat -rn -f inet6 100 1.1 ozaki 101 1.1 ozaki # Up, Gateway, Static 102 1.10 ozaki check_route_flags default UGS 103 1.1 ozaki } 104 1.1 ozaki 105 1.6 ozaki test_static6() 106 1.1 ozaki { 107 1.1 ozaki 108 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 109 1.1 ozaki 110 1.1 ozaki # Static route to host 111 1.1 ozaki atf_check -s exit:0 -o ignore \ 112 1.1 ozaki rump.route add -inet6 fc00::1:1 $IP6_PEER 113 1.1 ozaki $DEBUG && rump.netstat -rn -f inet6 114 1.1 ozaki 115 1.1 ozaki # Up, Gateway, Host, Static 116 1.10 ozaki check_route_flags fc00::1:1 UGHS 117 1.1 ozaki 118 1.1 ozaki # Static route to network 119 1.1 ozaki atf_check -s exit:0 -o ignore \ 120 1.1 ozaki rump.route add -inet6 -net fc00::/24 $IP6_PEER 121 1.1 ozaki $DEBUG && rump.netstat -rn -f inet6 122 1.1 ozaki 123 1.1 ozaki # Up, Gateway, Static 124 1.10 ozaki check_route_flags fc00::/24 UGS 125 1.1 ozaki } 126 1.1 ozaki 127 1.6 ozaki test_blackhole6() 128 1.1 ozaki { 129 1.1 ozaki 130 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 131 1.1 ozaki 132 1.2 ozaki atf_check -s exit:0 -o ignore rump.ping6 -n -X 1 -c 1 $IP6_PEER 133 1.2 ozaki 134 1.1 ozaki # Delete an existing route first 135 1.1 ozaki atf_check -s exit:0 -o ignore \ 136 1.1 ozaki rump.route delete -inet6 -net fc00::/64 137 1.15 ozaki # Should be removed too 138 1.15 ozaki atf_check -s not-exit:0 -o ignore -e match:'no entry' \ 139 1.15 ozaki rump.ndp -n $IP6_PEER 140 1.1 ozaki 141 1.2 ozaki # Gateway must be lo0 142 1.1 ozaki atf_check -s exit:0 -o ignore \ 143 1.2 ozaki rump.route add -inet6 -net fc00::/64 ::1 -blackhole 144 1.1 ozaki $DEBUG && rump.netstat -rn -f inet6 145 1.1 ozaki 146 1.1 ozaki # Up, Gateway, Blackhole, Static 147 1.10 ozaki check_route_flags fc00::/64 UGBS 148 1.1 ozaki 149 1.2 ozaki atf_check -s not-exit:0 -o match:'100.0% packet loss' \ 150 1.1 ozaki rump.ping6 -n -X 1 -c 1 $IP6_PEER 151 1.1 ozaki $DEBUG && rump.netstat -rn -f inet6 152 1.1 ozaki 153 1.1 ozaki # Shouldn't be created 154 1.10 ozaki check_route_no_entry $IP6_PEER 155 1.13 ozaki atf_check -s not-exit:0 -o ignore -e match:'no entry' \ 156 1.13 ozaki rump.ndp -n $IP6_PEER 157 1.1 ozaki } 158 1.1 ozaki 159 1.6 ozaki test_reject6() 160 1.1 ozaki { 161 1.1 ozaki 162 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 163 1.1 ozaki 164 1.1 ozaki # Delete an existing route first 165 1.1 ozaki atf_check -s exit:0 -o ignore \ 166 1.1 ozaki rump.route delete -inet6 -net fc00::/64 167 1.1 ozaki 168 1.1 ozaki atf_check -s exit:0 -o ignore \ 169 1.1 ozaki rump.route add -inet6 -net fc00::/64 $IP6_PEER -reject 170 1.1 ozaki $DEBUG && rump.netstat -rn -f inet6 171 1.1 ozaki 172 1.1 ozaki # Up, Gateway, Reject, Static 173 1.10 ozaki check_route_flags fc00::/64 UGRS 174 1.1 ozaki 175 1.1 ozaki atf_check -s not-exit:0 -o ignore -e match:'No route to host' \ 176 1.1 ozaki rump.ping6 -n -X 1 -c 1 $IP6_PEER 177 1.1 ozaki $DEBUG && rump.netstat -rn -f inet6 178 1.1 ozaki 179 1.1 ozaki # Shouldn't be created 180 1.10 ozaki check_route_no_entry $IP6_PEER 181 1.13 ozaki atf_check -s not-exit:0 -o ignore -e match:'no entry' \ 182 1.13 ozaki rump.ndp -n $IP6_PEER 183 1.3 ozaki 184 1.4 ozaki # Gateway is lo0 (RTF_GATEWAY) 185 1.3 ozaki 186 1.3 ozaki # Delete an existing route first 187 1.3 ozaki atf_check -s exit:0 -o ignore \ 188 1.3 ozaki rump.route delete -inet6 -net fc00::/64 189 1.3 ozaki 190 1.3 ozaki atf_check -s exit:0 -o ignore \ 191 1.3 ozaki rump.route add -inet6 -net fc00::/64 ::1 -reject 192 1.3 ozaki $DEBUG && rump.netstat -rn -f inet6 193 1.3 ozaki 194 1.3 ozaki # Up, Gateway, Reject, Static 195 1.10 ozaki check_route_flags fc00::/64 UGRS 196 1.3 ozaki 197 1.3 ozaki atf_check -s not-exit:0 -o ignore -e match:'Network is unreachable' \ 198 1.3 ozaki rump.ping6 -n -X 1 -c 1 $IP6_PEER 199 1.3 ozaki $DEBUG && rump.netstat -rn -f inet6 200 1.3 ozaki 201 1.3 ozaki # Shouldn't be created 202 1.10 ozaki check_route_no_entry $IP6_PEER 203 1.13 ozaki atf_check -s not-exit:0 -o ignore -e match:'no entry' \ 204 1.13 ozaki rump.ndp -n $IP6_PEER 205 1.4 ozaki 206 1.4 ozaki # Gateway is lo0 (RTF_HOST) 207 1.4 ozaki 208 1.4 ozaki # Delete an existing route first 209 1.4 ozaki atf_check -s exit:0 -o ignore \ 210 1.4 ozaki rump.route delete -inet6 -net fc00::/64 211 1.4 ozaki 212 1.4 ozaki atf_check -s exit:0 -o ignore \ 213 1.4 ozaki rump.route add -inet6 -host fc00::/64 ::1 -iface -reject 214 1.4 ozaki $DEBUG && rump.netstat -rn -f inet6 215 1.4 ozaki 216 1.4 ozaki # Up, Host, Reject, Static 217 1.10 ozaki check_route_flags fc00:: UHRS 218 1.4 ozaki 219 1.4 ozaki atf_check -s not-exit:0 -o ignore -e match:'No route to host' \ 220 1.4 ozaki rump.ping6 -n -X 1 -c 1 $IP6_PEER 221 1.4 ozaki $DEBUG && rump.netstat -rn -f inet6 222 1.5 ozaki 223 1.5 ozaki return 0 224 1.1 ozaki } 225 1.1 ozaki 226 1.6 ozaki test_announce6() 227 1.1 ozaki { 228 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 229 1.1 ozaki 230 1.1 ozaki # Delete an existing route first 231 1.1 ozaki atf_check -s exit:0 -o ignore \ 232 1.1 ozaki rump.route delete -inet6 -net fc00::/64 233 1.1 ozaki 234 1.1 ozaki atf_check -s exit:0 -o ignore \ 235 1.1 ozaki rump.route add -inet6 -net fc00::/64 $IP6_PEER -proxy 236 1.1 ozaki $DEBUG && rump.netstat -rn -f inet6 237 1.1 ozaki 238 1.1 ozaki # Up, Gateway, Static, proxy 239 1.10 ozaki check_route_flags fc00::/64 UGSp 240 1.1 ozaki 241 1.1 ozaki # TODO test its behavior 242 1.1 ozaki } 243 1.1 ozaki 244 1.14 ozaki test_llinfo6() 245 1.14 ozaki { 246 1.14 ozaki local peer_macaddr= 247 1.14 ozaki 248 1.14 ozaki peer_macaddr=$(get_macaddr $SOCK_PEER shmif0) 249 1.14 ozaki 250 1.14 ozaki export RUMP_SERVER=$SOCK_LOCAL 251 1.14 ozaki 252 1.14 ozaki atf_check -s exit:0 -o ignore rump.ping6 -n -X 1 -c 1 $IP6_PEER 253 1.14 ozaki 254 1.14 ozaki # Up, Host, LLINFO 255 1.14 ozaki check_route $IP6_PEER $peer_macaddr UHL shmif0 256 1.14 ozaki } 257 1.14 ozaki 258 1.1 ozaki add_test() 259 1.1 ozaki { 260 1.1 ozaki local name=$1 261 1.1 ozaki local desc="$2" 262 1.1 ozaki 263 1.1 ozaki atf_test_case "route_flags_${name}" cleanup 264 1.16 ozaki eval "route_flags_${name}_head() { 265 1.16 ozaki atf_set descr \"${desc}\" 266 1.16 ozaki atf_set require.progs rump_server 267 1.16 ozaki } 268 1.16 ozaki route_flags_${name}_body() { 269 1.16 ozaki setup_local 270 1.16 ozaki setup_peer 271 1.16 ozaki test_${name} 272 1.16 ozaki rump_server_destroy_ifaces 273 1.16 ozaki } 274 1.16 ozaki route_flags_${name}_cleanup() { 275 1.16 ozaki \$DEBUG && dump 276 1.16 ozaki cleanup 277 1.1 ozaki }" 278 1.1 ozaki atf_add_test_case "route_flags_${name}" 279 1.1 ozaki } 280 1.1 ozaki 281 1.1 ozaki atf_init_test_cases() 282 1.1 ozaki { 283 1.1 ozaki 284 1.6 ozaki add_test lo6 "Tests route flags: loop back interface" 285 1.6 ozaki add_test connected6 "Tests route flags: connected route" 286 1.6 ozaki add_test default_gateway6 "Tests route flags: default gateway" 287 1.6 ozaki add_test static6 "Tests route flags: static route" 288 1.6 ozaki add_test blackhole6 "Tests route flags: blackhole route" 289 1.6 ozaki add_test reject6 "Tests route flags: reject route" 290 1.6 ozaki add_test announce6 "Tests route flags: announce flag" 291 1.14 ozaki add_test llinfo6 "Tests route flags: announce llinfo" 292 1.1 ozaki } 293