1 1.20 ozaki # $NetBSD: t_flags.sh,v 1.20 2017/08/03 03:16:27 ozaki-r Exp $ 2 1.1 ozaki # 3 1.1 ozaki # Copyright (c) 2015 The NetBSD Foundation, 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.12 ozaki DEBUG=${DEBUG:-false} 35 1.1 ozaki 36 1.1 ozaki setup_local() 37 1.1 ozaki { 38 1.1 ozaki 39 1.14 ozaki rump_server_start $SOCK_LOCAL 40 1.14 ozaki rump_server_add_iface $SOCK_LOCAL shmif0 $BUS 41 1.1 ozaki 42 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 43 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.2/24 44 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up 45 1.15 ozaki atf_check -s exit:0 -o ignore rump.ifconfig -w 10 46 1.1 ozaki 47 1.1 ozaki $DEBUG && rump.ifconfig 48 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 49 1.1 ozaki } 50 1.1 ozaki 51 1.1 ozaki setup_peer() 52 1.1 ozaki { 53 1.1 ozaki 54 1.14 ozaki rump_server_start $SOCK_PEER 55 1.14 ozaki rump_server_add_iface $SOCK_PEER shmif0 $BUS 56 1.1 ozaki 57 1.1 ozaki export RUMP_SERVER=$SOCK_PEER 58 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.1/24 59 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up 60 1.15 ozaki atf_check -s exit:0 -o ignore rump.ifconfig -w 10 61 1.1 ozaki 62 1.1 ozaki $DEBUG && rump.ifconfig 63 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 64 1.1 ozaki } 65 1.1 ozaki 66 1.1 ozaki setup_gw() 67 1.1 ozaki { 68 1.1 ozaki 69 1.14 ozaki rump_server_start $SOCK_GW 70 1.14 ozaki rump_server_add_iface $SOCK_GW shmif0 $BUS 71 1.14 ozaki rump_server_add_iface $SOCK_GW shmif1 $BUS2 72 1.1 ozaki 73 1.1 ozaki export RUMP_SERVER=$SOCK_GW 74 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.254/24 75 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up 76 1.1 ozaki 77 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif1 10.0.2.1/24 78 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif1 alias 10.0.2.2/24 79 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up 80 1.1 ozaki 81 1.1 ozaki # Wait until DAD completes (10 sec at most) 82 1.1 ozaki atf_check -s exit:0 -o ignore rump.ifconfig -w 10 83 1.1 ozaki atf_check -s not-exit:0 -x "rump.ifconfig shmif1 |grep -q tentative" 84 1.1 ozaki 85 1.1 ozaki $DEBUG && rump.ifconfig 86 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 87 1.1 ozaki } 88 1.1 ozaki 89 1.10 ozaki test_lo() 90 1.1 ozaki { 91 1.1 ozaki 92 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 93 1.1 ozaki 94 1.1 ozaki # Up, Host, local 95 1.13 ozaki check_route_flags 127.0.0.1 UHl 96 1.1 ozaki } 97 1.1 ozaki 98 1.10 ozaki test_connected() 99 1.1 ozaki { 100 1.1 ozaki 101 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 102 1.1 ozaki 103 1.17 ozaki # Up, Host, local 104 1.13 ozaki check_route_flags 10.0.0.2 UHl 105 1.1 ozaki 106 1.1 ozaki # Up, Cloning 107 1.13 ozaki check_route_flags 10.0.0/24 UC 108 1.1 ozaki } 109 1.1 ozaki 110 1.10 ozaki test_default_gateway() 111 1.1 ozaki { 112 1.1 ozaki 113 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 114 1.1 ozaki 115 1.1 ozaki atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1 116 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 117 1.1 ozaki 118 1.1 ozaki # Up, Gateway, Static 119 1.13 ozaki check_route_flags default UGS 120 1.1 ozaki } 121 1.1 ozaki 122 1.10 ozaki test_static() 123 1.1 ozaki { 124 1.1 ozaki 125 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 126 1.1 ozaki 127 1.1 ozaki # Static route to host 128 1.1 ozaki atf_check -s exit:0 -o ignore rump.route add 10.0.1.1 10.0.0.1 129 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 130 1.1 ozaki 131 1.1 ozaki # Up, Gateway, Host, Static 132 1.13 ozaki check_route_flags 10.0.1.1 UGHS 133 1.1 ozaki 134 1.1 ozaki # Static route to network 135 1.1 ozaki atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.1 136 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 137 1.1 ozaki 138 1.1 ozaki # Up, Gateway, Static 139 1.13 ozaki check_route_flags 10.0.2/24 UGS 140 1.1 ozaki } 141 1.1 ozaki 142 1.10 ozaki test_blackhole() 143 1.1 ozaki { 144 1.1 ozaki 145 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 146 1.1 ozaki 147 1.5 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.0.1 148 1.5 ozaki 149 1.1 ozaki # Delete an existing route first 150 1.1 ozaki atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 151 1.19 ozaki # Should be removed too 152 1.19 ozaki atf_check -s not-exit:0 -e match:'no entry' rump.arp -n 10.0.0.1 153 1.1 ozaki 154 1.5 ozaki # Gateway must be lo0 155 1.5 ozaki atf_check -s exit:0 -o ignore \ 156 1.5 ozaki rump.route add -net 10.0.0.0/24 127.0.0.1 -blackhole 157 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 158 1.1 ozaki 159 1.1 ozaki # Up, Gateway, Blackhole, Static 160 1.13 ozaki check_route_flags 10.0.0/24 UGBS 161 1.1 ozaki 162 1.5 ozaki atf_check -s not-exit:0 -o match:'100.0% packet loss' \ 163 1.1 ozaki rump.ping -n -w 1 -c 1 10.0.0.1 164 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 165 1.1 ozaki 166 1.1 ozaki # Shouldn't be created 167 1.13 ozaki check_route_no_entry 10.0.0.1 168 1.16 ozaki atf_check -s not-exit:0 -e match:'no entry' rump.arp -n 10.0.0.1 169 1.1 ozaki } 170 1.1 ozaki 171 1.10 ozaki test_reject() 172 1.1 ozaki { 173 1.1 ozaki 174 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 175 1.1 ozaki 176 1.1 ozaki # Delete an existing route first 177 1.1 ozaki atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 178 1.1 ozaki 179 1.1 ozaki atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -reject 180 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 181 1.1 ozaki 182 1.1 ozaki # Up, Gateway, Reject, Static 183 1.13 ozaki check_route_flags 10.0.0/24 UGRS 184 1.1 ozaki 185 1.1 ozaki atf_check -s not-exit:0 -o ignore -e match:'No route to host' \ 186 1.1 ozaki rump.ping -n -w 1 -c 1 10.0.0.1 187 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 188 1.1 ozaki 189 1.1 ozaki # Shouldn't be created 190 1.13 ozaki check_route_no_entry 10.0.0.1 191 1.16 ozaki atf_check -s not-exit:0 -e match:'no entry' rump.arp -n 10.0.0.1 192 1.6 ozaki 193 1.7 ozaki # Gateway is lo0 (RTF_GATEWAY) 194 1.6 ozaki 195 1.6 ozaki # Delete an existing route first 196 1.6 ozaki atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 197 1.6 ozaki 198 1.6 ozaki atf_check -s exit:0 -o ignore \ 199 1.6 ozaki rump.route add -net 10.0.0.0/24 127.0.0.1 -reject 200 1.6 ozaki $DEBUG && rump.netstat -rn -f inet 201 1.6 ozaki 202 1.6 ozaki # Up, Gateway, Reject, Static 203 1.13 ozaki check_route_flags 10.0.0/24 UGRS 204 1.6 ozaki 205 1.6 ozaki atf_check -s not-exit:0 -o ignore -e match:'Network is unreachable' \ 206 1.6 ozaki rump.ping -n -w 1 -c 1 10.0.0.1 207 1.6 ozaki $DEBUG && rump.netstat -rn -f inet 208 1.6 ozaki 209 1.6 ozaki # Shouldn't be created 210 1.13 ozaki check_route_no_entry 10.0.0.1 211 1.16 ozaki atf_check -s not-exit:0 -e match:'no entry' rump.arp -n 10.0.0.1 212 1.7 ozaki 213 1.7 ozaki # Gateway is lo0 (RTF_HOST) 214 1.7 ozaki 215 1.7 ozaki # Delete an existing route first 216 1.7 ozaki atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 217 1.7 ozaki 218 1.7 ozaki atf_check -s exit:0 -o ignore \ 219 1.7 ozaki rump.route add -host 10.0.0.1/24 127.0.0.1 -iface -reject 220 1.7 ozaki $DEBUG && rump.netstat -rn -f inet 221 1.7 ozaki 222 1.7 ozaki # Up, Host, Reject, Static 223 1.13 ozaki check_route_flags 10.0.0.1 UHRS 224 1.7 ozaki 225 1.7 ozaki atf_check -s not-exit:0 -o ignore -e match:'No route to host' \ 226 1.7 ozaki rump.ping -n -w 1 -c 1 10.0.0.1 227 1.7 ozaki $DEBUG && rump.netstat -rn -f inet 228 1.8 ozaki 229 1.8 ozaki return 0 230 1.1 ozaki } 231 1.1 ozaki 232 1.10 ozaki test_icmp_redirect() 233 1.1 ozaki { 234 1.1 ozaki 235 1.1 ozaki ### Testing Dynamic flag ### 236 1.1 ozaki 237 1.1 ozaki # 238 1.1 ozaki # Setup a gateway 10.0.0.254. 10.0.2.1 is behind it. 239 1.1 ozaki # 240 1.1 ozaki setup_gw 241 1.1 ozaki 242 1.1 ozaki # 243 1.1 ozaki # Teach the peer that 10.0.2.* is behind 10.0.0.254 244 1.1 ozaki # 245 1.1 ozaki export RUMP_SERVER=$SOCK_PEER 246 1.1 ozaki atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.254 247 1.1 ozaki # Up, Gateway, Static 248 1.13 ozaki check_route_flags 10.0.2/24 UGS 249 1.1 ozaki 250 1.1 ozaki # 251 1.1 ozaki # Setup the default gateway to the peer, 10.0.0.1 252 1.1 ozaki # 253 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 254 1.1 ozaki atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1 255 1.1 ozaki # Up, Gateway, Static 256 1.13 ozaki check_route_flags default UGS 257 1.1 ozaki 258 1.1 ozaki # Try ping 10.0.2.1 259 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1 260 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 261 1.1 ozaki 262 1.1 ozaki # Up, Gateway, Host, Dynamic 263 1.13 ozaki check_route_flags 10.0.2.1 UGHD 264 1.13 ozaki check_route_gw 10.0.2.1 10.0.0.254 265 1.1 ozaki 266 1.1 ozaki export RUMP_SERVER=$SOCK_PEER 267 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 268 1.1 ozaki 269 1.1 ozaki ### Testing Modified flag ### 270 1.1 ozaki 271 1.1 ozaki # 272 1.1 ozaki # Teach a wrong route to 10.0.2.2 273 1.1 ozaki # 274 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 275 1.1 ozaki atf_check -s exit:0 -o ignore rump.route add 10.0.2.2 10.0.0.1 276 1.1 ozaki # Up, Gateway, Host, Static 277 1.13 ozaki check_route_flags 10.0.2.2 UGHS 278 1.13 ozaki check_route_gw 10.0.2.2 10.0.0.1 279 1.1 ozaki 280 1.1 ozaki # Try ping 10.0.2.2 281 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.2 282 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 283 1.1 ozaki 284 1.1 ozaki # Up, Gateway, Host, Modified, Static 285 1.13 ozaki check_route_flags 10.0.2.2 UGHMS 286 1.13 ozaki check_route_gw 10.0.2.2 10.0.0.254 287 1.1 ozaki } 288 1.1 ozaki 289 1.10 ozaki test_announce() 290 1.1 ozaki { 291 1.1 ozaki export RUMP_SERVER=$SOCK_LOCAL 292 1.1 ozaki 293 1.1 ozaki # Delete an existing route first 294 1.1 ozaki atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 295 1.1 ozaki 296 1.1 ozaki atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -proxy 297 1.1 ozaki $DEBUG && rump.netstat -rn -f inet 298 1.1 ozaki 299 1.1 ozaki # Up, Gateway, Static, proxy 300 1.13 ozaki check_route_flags 10.0.0/24 UGSp 301 1.1 ozaki 302 1.1 ozaki # TODO test its behavior 303 1.1 ozaki } 304 1.1 ozaki 305 1.18 ozaki test_llinfo() 306 1.18 ozaki { 307 1.18 ozaki local peer_macaddr= 308 1.18 ozaki 309 1.18 ozaki peer_macaddr=$(get_macaddr $SOCK_PEER shmif0) 310 1.18 ozaki 311 1.18 ozaki export RUMP_SERVER=$SOCK_LOCAL 312 1.18 ozaki 313 1.18 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.0.1 314 1.18 ozaki 315 1.18 ozaki # Up, Host, LLINFO 316 1.18 ozaki check_route 10.0.0.1 $peer_macaddr UHL shmif0 317 1.18 ozaki } 318 1.18 ozaki 319 1.1 ozaki add_test() 320 1.1 ozaki { 321 1.1 ozaki local name=$1 322 1.1 ozaki local desc="$2" 323 1.1 ozaki 324 1.1 ozaki atf_test_case "route_flags_${name}" cleanup 325 1.20 ozaki eval "route_flags_${name}_head() { 326 1.20 ozaki atf_set descr \"${desc}\" 327 1.20 ozaki atf_set require.progs rump_server 328 1.20 ozaki } 329 1.20 ozaki route_flags_${name}_body() { 330 1.20 ozaki setup_local 331 1.20 ozaki setup_peer 332 1.20 ozaki test_${name} 333 1.20 ozaki rump_server_destroy_ifaces 334 1.20 ozaki } 335 1.20 ozaki route_flags_${name}_cleanup() { 336 1.20 ozaki \$DEBUG && dump 337 1.20 ozaki cleanup 338 1.1 ozaki }" 339 1.1 ozaki atf_add_test_case "route_flags_${name}" 340 1.1 ozaki } 341 1.1 ozaki 342 1.1 ozaki atf_init_test_cases() 343 1.1 ozaki { 344 1.1 ozaki 345 1.10 ozaki add_test lo "Tests route flags: loop back interface" 346 1.10 ozaki add_test connected "Tests route flags: connected route" 347 1.10 ozaki add_test default_gateway "Tests route flags: default gateway" 348 1.10 ozaki add_test static "Tests route flags: static route" 349 1.10 ozaki add_test blackhole "Tests route flags: blackhole route" 350 1.10 ozaki add_test reject "Tests route flags: reject route" 351 1.10 ozaki add_test icmp_redirect "Tests route flags: icmp redirect" 352 1.10 ozaki add_test announce "Tests route flags: announce flag" 353 1.18 ozaki add_test llinfo "Tests route flags: ARP caches" 354 1.1 ozaki } 355