1 # $NetBSD: t_route.sh,v 1.15 2022/09/20 02:25:07 knakahara Exp $ 2 # 3 # Copyright (c) 2016 Internet Initiative Japan Inc. 4 # All rights reserved. 5 # 6 # Redistribution and use in source and binary forms, with or without 7 # modification, are permitted provided that the following conditions 8 # are met: 9 # 1. Redistributions of source code must retain the above copyright 10 # notice, this list of conditions and the following disclaimer. 11 # 2. Redistributions in binary form must reproduce the above copyright 12 # notice, this list of conditions and the following disclaimer in the 13 # documentation and/or other materials provided with the distribution. 14 # 15 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 # POSSIBILITY OF SUCH DAMAGE. 26 # 27 28 # non_subnet_gateway 29 SOCK_CLIENT=unix://commsock1 30 SOCK_GW=unix://commsock2 31 BUS=bus1 32 33 # command_get 34 SOCKSRC=unix://commsock1 35 SOCKFWD=unix://commsock2 36 SOCKDST=unix://commsock3 37 IP4SRC=10.0.1.2 38 IP4SRCGW=10.0.1.1 39 IP4DSTGW=10.0.2.1 40 IP4DST=10.0.2.2 41 IP4DST_BCAST=10.0.2.255 42 IP6SRC=fc00:0:0:1::2 43 IP6SRCGW=fc00:0:0:1::1 44 IP6DSTGW=fc00:0:0:2::1 45 IP6DST=fc00:0:0:2::2 46 BUS_SRCGW=bus1 47 BUS_DSTGW=bus2 48 # command_add 49 SOCKHOST=unix://commsock1 50 51 DEBUG=${DEBUG:-false} 52 TIMEOUT=1 53 PING_OPTS="-n -c 1 -w $TIMEOUT" 54 55 atf_test_case route_non_subnet_gateway cleanup 56 route_non_subnet_gateway_head() 57 { 58 59 atf_set "descr" "tests of a gateway not on the local subnet" 60 atf_set "require.progs" "rump_server" 61 } 62 63 route_non_subnet_gateway_body() 64 { 65 66 rump_server_start $SOCK_CLIENT 67 rump_server_start $SOCK_GW 68 69 export RUMP_SERVER=${SOCK_GW} 70 rump_server_add_iface $SOCK_GW shmif0 $BUS 71 atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1 72 atf_check -s exit:0 rump.ifconfig shmif0 up 73 74 # The gateway knows the client 75 atf_check -s exit:0 -o match:'add net 10.0.0.1: gateway shmif0' \ 76 rump.route add -net 10.0.0.1/32 -link -cloning -iface shmif0 77 78 $DEBUG && rump.netstat -nr -f inet 79 80 export RUMP_SERVER=${SOCK_CLIENT} 81 rump_server_add_iface $SOCK_CLIENT shmif0 $BUS 82 atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.1/32 83 atf_check -s exit:0 rump.ifconfig shmif0 up 84 atf_check -s exit:0 rump.ifconfig -w 10 85 86 $DEBUG && rump.netstat -nr -f inet 87 88 # Don't know a route to the gateway yet 89 atf_check -s not-exit:0 -o match:'100.0% packet loss' \ 90 -e match:'No route to host' rump.ping $PING_OPTS 192.168.0.1 91 92 # Teach a route to the gateway 93 atf_check -s exit:0 -o match:'add net 192.168.0.1: gateway shmif0' \ 94 rump.route add -net 192.168.0.1/32 -link -cloning -iface shmif0 95 atf_check -s exit:0 -o match:'add net default: gateway 192.168.0.1' \ 96 rump.route add default -ifa 10.0.0.1 192.168.0.1 97 98 $DEBUG && rump.netstat -nr -f inet 99 100 # Be reachable to the gateway 101 atf_check -s exit:0 -o ignore rump.ping $PING_OPTS 192.168.0.1 102 103 rump_server_destroy_ifaces 104 } 105 106 route_non_subnet_gateway_cleanup() 107 { 108 109 $DEBUG && dump 110 cleanup 111 } 112 113 atf_test_case route_command_get cleanup 114 atf_test_case route_command_get6 cleanup 115 route_command_get_head() 116 { 117 118 atf_set "descr" "tests of route get command" 119 atf_set "require.progs" "rump_server" 120 } 121 122 route_command_get6_head() 123 { 124 125 atf_set "descr" "tests of route get command (IPv6)" 126 atf_set "require.progs" "rump_server" 127 } 128 129 setup_endpoint() 130 { 131 local sock=${1} 132 local addr=${2} 133 local bus=${3} 134 local mode=${4} 135 local gw=${5} 136 137 export RUMP_SERVER=${sock} 138 rump_server_add_iface $sock shmif0 $bus 139 if [ $mode = "ipv6" ]; then 140 atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr} 141 atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw} 142 else 143 atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00 144 atf_check -s exit:0 -o ignore rump.route add default ${gw} 145 fi 146 atf_check -s exit:0 rump.ifconfig shmif0 up 147 atf_check -s exit:0 rump.ifconfig -w 10 148 149 if $DEBUG; then 150 rump.ifconfig shmif0 151 rump.netstat -nr 152 fi 153 } 154 155 setup_forwarder() 156 { 157 mode=${1} 158 159 rump_server_add_iface $SOCKFWD shmif0 $BUS_SRCGW 160 rump_server_add_iface $SOCKFWD shmif1 $BUS_DSTGW 161 162 export RUMP_SERVER=$SOCKFWD 163 if [ $mode = "ipv6" ]; then 164 atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW} 165 atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW} 166 else 167 atf_check -s exit:0 rump.ifconfig shmif0 inet ${IP4SRCGW} netmask 0xffffff00 168 atf_check -s exit:0 rump.ifconfig shmif1 inet ${IP4DSTGW} netmask 0xffffff00 169 fi 170 171 atf_check -s exit:0 rump.ifconfig shmif0 up 172 atf_check -s exit:0 rump.ifconfig shmif1 up 173 atf_check -s exit:0 rump.ifconfig -w 10 174 175 if $DEBUG; then 176 rump.netstat -nr 177 if [ $mode = "ipv6" ]; then 178 rump.sysctl net.inet6.ip6.forwarding 179 else 180 rump.sysctl net.inet.ip.forwarding 181 fi 182 fi 183 } 184 185 setup_forwarding() 186 { 187 export RUMP_SERVER=$SOCKFWD 188 atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=1 189 } 190 191 setup_forwarding6() 192 { 193 export RUMP_SERVER=$SOCKFWD 194 atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=1 195 } 196 197 setup() 198 { 199 200 rump_server_start $SOCKSRC 201 rump_server_start $SOCKFWD 202 rump_server_start $SOCKDST 203 204 setup_endpoint $SOCKSRC $IP4SRC $BUS_SRCGW ipv4 $IP4SRCGW 205 setup_endpoint $SOCKDST $IP4DST $BUS_DSTGW ipv4 $IP4DSTGW 206 setup_forwarder ipv4 207 } 208 209 setup6() 210 { 211 212 rump_server_start $SOCKSRC netinet6 213 rump_server_start $SOCKFWD netinet6 214 rump_server_start $SOCKDST netinet6 215 216 setup_endpoint $SOCKSRC $IP6SRC $BUS_SRCGW ipv6 $IP6SRCGW 217 setup_endpoint $SOCKDST $IP6DST $BUS_DSTGW ipv6 $IP6DSTGW 218 setup_forwarder ipv6 219 } 220 221 test_route_get() 222 { 223 224 export RUMP_SERVER=$SOCKSRC 225 $DEBUG && rump.netstat -nr -f inet 226 $DEBUG && rump.arp -n -a 227 228 # Make sure an ARP cache to the gateway doesn't exist 229 rump.arp -d $IP4SRCGW 230 231 # Local 232 cat >./expect <<-EOF 233 route to: 10.0.1.2 234 destination: 10.0.1.2 235 local addr: 10.0.1.2 236 interface: lo0 237 flags: 0x40045<UP,HOST,DONE,LOCAL> 238 recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire 239 EOF 240 rump.route -n get $IP4SRC > ./output 241 $DEBUG && cat ./expect ./output 242 # XXX: omit the last line because expire is unstable on rump kernel. 243 sed -i '$d' ./output 244 atf_check -s exit:0 diff ./expect ./output 245 246 # Neighbor 247 cat >./expect <<-EOF 248 route to: 10.0.1.1 249 destination: 10.0.1.0 250 mask: 255.255.255.0 251 local addr: 10.0.1.2 252 interface: shmif0 253 flags: 0x141<UP,DONE,CONNECTED> 254 recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire 255 EOF 256 rump.route -n get $IP4SRCGW > ./output 257 $DEBUG && cat ./expect ./output 258 sed -i '$d' ./output 259 atf_check -s exit:0 diff ./expect ./output 260 261 # Remote host 262 cat >./expect <<-EOF 263 route to: 10.0.2.2 264 destination: default 265 mask: default 266 gateway: 10.0.1.1 267 local addr: 10.0.1.2 268 interface: shmif0 269 flags: 0x843<UP,GATEWAY,DONE,STATIC> 270 recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire 271 EOF 272 rump.route -n get $IP4DST > ./output 273 $DEBUG && cat ./expect ./output 274 sed -i '$d' ./output 275 atf_check -s exit:0 diff ./expect ./output 276 277 # Create a ARP cache 278 atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4SRCGW 279 280 # Neighbor with a cache (no different from w/o cache) 281 cat >./expect <<-EOF 282 route to: 10.0.1.1 283 destination: 10.0.1.0 284 mask: 255.255.255.0 285 local addr: 10.0.1.2 286 interface: shmif0 287 flags: 0x141<UP,DONE,CONNECTED> 288 recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire 289 EOF 290 rump.route -n get $IP4SRCGW > ./output 291 $DEBUG && cat ./expect ./output 292 sed -i '$d' ./output 293 atf_check -s exit:0 diff ./expect ./output 294 } 295 296 test_route_get6() 297 { 298 299 export RUMP_SERVER=$SOCKSRC 300 $DEBUG && rump.netstat -nr -f inet 301 $DEBUG && rump.ndp -n -a 302 303 # Make sure an ARP cache to the gateway doesn't exist 304 rump.ndp -d $IP6SRCGW 305 306 # Local 307 cat >./expect <<-EOF 308 route to: fc00:0:0:1::2 309 destination: fc00:0:0:1::2 310 local addr: fc00:0:0:1::2 311 interface: lo0 312 flags: 0x40045<UP,HOST,DONE,LOCAL> 313 recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire 314 EOF 315 rump.route -n get -inet6 $IP6SRC > ./output 316 $DEBUG && cat ./expect ./output 317 sed -i '$d' ./output 318 atf_check -s exit:0 diff ./expect ./output 319 320 # Neighbor 321 cat >./expect <<-EOF 322 route to: fc00:0:0:1::1 323 destination: fc00:0:0:1:: 324 mask: ffff:ffff:ffff:ffff:: 325 local addr: fc00:0:0:1::2 326 interface: shmif0 327 flags: 0x141<UP,DONE,CONNECTED> 328 recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire 329 EOF 330 rump.route -n get -inet6 $IP6SRCGW > ./output 331 $DEBUG && cat ./expect ./output 332 sed -i '$d' ./output 333 atf_check -s exit:0 diff ./expect ./output 334 335 # Remote host 336 cat >./expect <<-EOF 337 route to: fc00:0:0:2::2 338 destination: :: 339 mask: default 340 gateway: fc00:0:0:1::1 341 local addr: fc00:0:0:1::2 342 interface: shmif0 343 flags: 0x843<UP,GATEWAY,DONE,STATIC> 344 recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire 345 EOF 346 rump.route -n get -inet6 $IP6DST > ./output 347 $DEBUG && cat ./expect ./output 348 sed -i '$d' ./output 349 atf_check -s exit:0 diff ./expect ./output 350 351 # Create a NDP cache 352 atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6SRCGW 353 354 # Neighbor with a cache (no different from w/o cache) 355 cat >./expect <<-EOF 356 route to: fc00:0:0:1::1 357 destination: fc00:0:0:1:: 358 mask: ffff:ffff:ffff:ffff:: 359 local addr: fc00:0:0:1::2 360 interface: shmif0 361 flags: 0x141<UP,DONE,CONNECTED> 362 recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire 363 EOF 364 rump.route -n get -inet6 $IP6SRCGW > ./output 365 $DEBUG && cat ./expect ./output 366 sed -i '$d' ./output 367 atf_check -s exit:0 diff ./expect ./output 368 } 369 370 route_command_get_body() 371 { 372 373 setup 374 setup_forwarding 375 test_route_get 376 rump_server_destroy_ifaces 377 } 378 379 route_command_get6_body() 380 { 381 382 setup6 383 setup_forwarding6 384 test_route_get6 385 rump_server_destroy_ifaces 386 } 387 388 route_command_get_cleanup() 389 { 390 391 $DEBUG && dump 392 cleanup 393 } 394 395 route_command_get6_cleanup() 396 { 397 398 $DEBUG && dump 399 cleanup 400 } 401 402 atf_test_case route_default_reject cleanup 403 route_default_reject_head() 404 { 405 406 atf_set "descr" "tests for making a default route reject" 407 atf_set "require.progs" "rump_server" 408 } 409 410 route_default_reject_body() 411 { 412 413 rump_server_start $SOCKSRC netinet6 414 rump_server_add_iface $SOCKSRC shmif0 $BUS_SRCGW 415 416 export RUMP_SERVER=$SOCKSRC 417 418 # From /etc/rc.d/network 419 atf_check -s exit:0 -o match:'add net ::0.0.0.0: gateway ::1' \ 420 rump.route add -inet6 ::0.0.0.0 -prefixlen 104 ::1 -reject 421 422 atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6SRC/64 up 423 $DEBUG && rump.netstat -nr -f inet6 424 atf_check -s exit:0 -o match:"add net default: gateway $IP6SRCGW" \ 425 rump.route add -inet6 default $IP6SRCGW 426 $DEBUG && rump.netstat -nr -f inet6 427 $DEBUG && rump.route -n get -inet6 default 428 atf_check -s exit:0 -o match:'change net default' \ 429 rump.route change -inet6 default -reject 430 $DEBUG && rump.netstat -nr -f inet6 431 432 rump_server_destroy_ifaces 433 } 434 435 route_default_reject_cleanup() 436 { 437 438 $DEBUG && dump 439 cleanup 440 } 441 442 atf_test_case route_command_add cleanup 443 route_command_add_head() 444 { 445 446 atf_set "descr" "tests of route add command" 447 atf_set "require.progs" "rump_server" 448 } 449 450 route_command_add_body() 451 { 452 453 rump_server_start $SOCKHOST 454 455 export RUMP_SERVER=${SOCKHOST} 456 rump_server_add_iface $SOCKHOST shmif0 $BUS 457 atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.1/24 458 459 # Accept the route whose gateway is in a subnet of interface address 460 atf_check -s exit:0 -o ignore rump.route add \ 461 -net 10.0.1.0/24 10.0.0.2 462 atf_check -s exit:0 -o ignore rump.route add \ 463 -host 10.0.2.1 10.0.0.3 464 465 # Accept the route whose gateway is an interface 466 atf_check -s exit:0 -o ignore rump.route add \ 467 -net 10.0.3.0/24 -connected -link -iface shmif0 468 469 # Accept the route whose gateway is reachable and not RTF_GATEWAY 470 atf_check -s exit:0 -o ignore rump.route add \ 471 -net 10.0.4.0/24 10.0.3.1 472 473 # Don't accept the route whose destination is reachable and 474 # gateway is unreachable 475 atf_check -s not-exit:0 -o ignore -e match:'unreachable' rump.route add \ 476 -net 10.0.1.0/26 10.0.5.1 477 478 # Don't accept the route whose gateway is reachable and RTF_GATEWAY 479 atf_check -s not-exit:0 -o ignore -e ignore rump.route add \ 480 -net 10.0.6.0/24 10.0.1.1 481 482 rump_server_destroy_ifaces 483 } 484 485 route_command_add_cleanup() 486 { 487 488 $DEBUG && dump 489 cleanup 490 } 491 492 atf_test_case route_command_add6 cleanup 493 route_command_add6_head() 494 { 495 496 atf_set "descr" "tests of route add command (IPv6)" 497 atf_set "require.progs" "rump_server" 498 } 499 500 route_command_add6_body() 501 { 502 503 rump_server_start $SOCKHOST netinet6 504 505 export RUMP_SERVER=${SOCKHOST} 506 rump_server_add_iface $SOCKHOST shmif0 $BUS 507 atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1/64 508 509 # Accept the route whose gateway is in a subnet of interface address 510 atf_check -s exit:0 -o ignore rump.route add -inet6\ 511 -net fc00:1::0/64 fc00::2 512 atf_check -s exit:0 -o ignore rump.route add -inet6\ 513 -host fc00:2::1 fc00::3 514 515 # Accept the route whose gateway is an interface 516 atf_check -s exit:0 -o ignore rump.route add -inet6\ 517 -net fc00:3::0/64 -connected -link -iface shmif0 518 519 # Accept the route whose gateway is reachable and not RTF_GATEWAY 520 atf_check -s exit:0 -o ignore rump.route add -inet6\ 521 -net fc00:4::0/64 fc00:3::1 522 523 # Don't accept the route whose destination is reachable and 524 # gateway is unreachable 525 atf_check -s not-exit:0 -o ignore -e match:'unreachable' rump.route add \ 526 -inet6 -net fc00::4/128 fc00:5::1 527 528 # Don't accept the route whose gateway is reachable and RTF_GATEWAY 529 atf_check -s not-exit:0 -o ignore -e match:'unreachable' rump.route add \ 530 -inet6 -net fc00:6::0/64 fc00:1::1 531 532 rump_server_destroy_ifaces 533 } 534 535 route_command_add6_cleanup() 536 { 537 538 $DEBUG && dump 539 cleanup 540 } 541 542 test_route_address_removal() 543 { 544 545 rump_server_start $SOCKHOST netinet6 546 547 export RUMP_SERVER=${SOCKHOST} 548 rump_server_add_iface $SOCKHOST shmif0 $BUS 549 550 # 551 # 1. test auto removal of a route that depends a removing address 552 # 553 atf_check -s exit:0 rump.ifconfig shmif0 $af $addr1/$prefix 554 atf_check -s exit:0 -o match:"add net $alt_net(/$prefix)?: gateway $addrgw" \ 555 rump.route -n add -$af -net $alt_net/$prefix $addrgw 556 $DEBUG && rump.netstat -nr -f $af 557 atf_check -s exit:0 rump.ifconfig shmif0 $af $addr1 delete 558 $DEBUG && rump.netstat -nr -f $af 559 560 # The route should be deleted on the address removal 561 atf_check -s not-exit:0 -e match:"writing to routing socket: not in table" \ 562 rump.route -n get -$af $alt_addr 563 564 # 565 # 2. test auto update of a route that depends a removing address where 566 # there is another address with the same prefix sharing a connected 567 # route 568 # 569 atf_check -s exit:0 rump.ifconfig shmif0 $af $addr1/$prefix 570 atf_check -s exit:0 rump.ifconfig shmif0 $af $addr2/$prefix alias 571 atf_check -s exit:0 -o match:"add net $alt_net(/$prefix)?: gateway $addrgw" \ 572 rump.route -n add -$af -net $alt_net/$prefix $addrgw 573 $DEBUG && rump.netstat -nr -f $af 574 575 atf_check -s exit:0 -o match:"local addr: $addr1" \ 576 rump.route -n get -$af $addrgw 577 atf_check -s exit:0 -o match:"local addr: $addr1" \ 578 rump.route -n get -$af $alt_addr 579 580 atf_check -s exit:0 rump.ifconfig shmif0 $af $addr1 delete 581 $DEBUG && rump.netstat -nr -f $af 582 583 # local addr (rt_ifa) of the connected route should be changed 584 # on the address removal 585 atf_check -s exit:0 -o match:"local addr: $addr2" \ 586 rump.route -n get -$af $addrgw 587 # local addr (rt_ifa) of the related route should be changed 588 # on the address removal too 589 atf_check -s exit:0 -o match:"local addr: $addr2" \ 590 rump.route -n get -$af $alt_addr 591 592 # cleanup 593 atf_check -s exit:0 rump.ifconfig shmif0 $af $addr2 delete 594 595 # 596 # 3. test auto update of a route that depends a removing address where 597 # there is another address with a different (short) prefix 598 # 599 atf_check -s exit:0 rump.ifconfig shmif0 $af $addr1/$prefix 600 atf_check -s exit:0 rump.ifconfig shmif0 $af $addr2/$prefix_short alias 601 atf_check -s exit:0 -o match:"add net $alt_net(/$prefix)?: gateway $addrgw" \ 602 rump.route -n add -$af -net $alt_net/$prefix $addrgw 603 $DEBUG && rump.netstat -nr -f $af 604 605 atf_check -s exit:0 -o match:"local addr: $addr1" \ 606 rump.route -n get -$af $addrgw 607 atf_check -s exit:0 -o match:"local addr: $addr1" \ 608 rump.route -n get -$af $alt_addr 609 610 atf_check -s exit:0 rump.ifconfig shmif0 $af $addr1 delete 611 $DEBUG && rump.netstat -nr -f $af 612 613 # local addr (rt_ifa) of the connected route should be changed 614 # on the address removal 615 atf_check -s exit:0 -o match:"local addr: $addr2" \ 616 rump.route -n get -$af $addrgw 617 if [ $af = inet ]; then 618 # local addr (rt_ifa) of the related route should be changed 619 # on the address removal too 620 atf_check -s exit:0 -o match:"local addr: $addr2" \ 621 rump.route -n get -$af $alt_addr 622 else 623 # For IPv6, each address has its own connected route so the 624 # address removal just results in a removal of the related route 625 atf_check -s not-exit:0 \ 626 -e match:"writing to routing socket: not in table" \ 627 rump.route -n get -$af $alt_addr 628 fi 629 630 rump_server_destroy_ifaces 631 } 632 633 atf_test_case route_address_removal cleanup 634 route_address_removal_head() 635 { 636 637 atf_set "descr" "tests of auto removal/update of routes on address removal (IPv4)" 638 atf_set "require.progs" "rump_server" 639 } 640 641 route_address_removal_body() 642 { 643 local addr1=10.0.0.1 644 local addr2=10.0.0.2 645 local addrgw=10.0.0.3 646 local prefix=24 647 local prefix_short=16 648 local alt_net=10.0.1.0 649 local alt_addr=10.0.1.1 650 local af=inet 651 652 test_route_address_removal 653 } 654 655 route_address_removal_cleanup() 656 { 657 658 $DEBUG && dump 659 cleanup 660 } 661 662 atf_test_case route_address_removal6 cleanup 663 route_address_removal6_head() 664 { 665 666 atf_set "descr" "tests of auto removal/update of routes on address removal (IPv6)" 667 atf_set "require.progs" "rump_server" 668 } 669 670 route_address_removal6_body() 671 { 672 local addr1=fd00::1 673 local addr2=fd00::2 674 local addrgw=fd00::3 675 local prefix=64 676 local prefix_short=32 677 local alt_net=fd00:1::0 678 local alt_addr=fd00:1::1 679 local af=inet6 680 681 test_route_address_removal 682 } 683 684 route_address_removal6_cleanup() 685 { 686 687 $DEBUG && dump 688 cleanup 689 } 690 691 692 atf_init_test_cases() 693 { 694 695 atf_add_test_case route_non_subnet_gateway 696 atf_add_test_case route_command_get 697 atf_add_test_case route_command_get6 698 atf_add_test_case route_default_reject 699 atf_add_test_case route_command_add 700 atf_add_test_case route_command_add6 701 atf_add_test_case route_address_removal 702 atf_add_test_case route_address_removal6 703 } 704