t_ra.sh revision 1.29
1# $NetBSD: t_ra.sh,v 1.29 2017/06/22 09:56:48 ozaki-r Exp $ 2# 3# Copyright (c) 2015 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 28RUMPSRV=unix://r1 29RUMPSRV1_2=unix://r12 30RUMPCLI=unix://r2 31RUMPSRV3=unix://r3 32RUMPSRV4=unix://r4 33IP6SRV=fc00:1::1 34IP6SRV1_2=fc00:1::2 35IP6SRV_PREFIX=fc00:1: 36IP6CLI=fc00:2::2 37IP6SRV3=fc00:3::1 38IP6SRV3_PREFIX=fc00:3: 39IP6SRV4=fc00:4::1 40IP6SRV4_PREFIX=fc00:4: 41PIDFILE=./rump.rtadvd.pid 42PIDFILE1_2=./rump.rtadvd.pid12 43PIDFILE3=./rump.rtadvd.pid3 44PIDFILE4=./rump.rtadvd.pid4 45CONFIG=./rtadvd.conf 46WAITTIME=2 47DEBUG=${DEBUG:-false} 48 49init_server() 50{ 51 52 export RUMP_SERVER=$1 53 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.forwarding=1 54 export LD_PRELOAD=/usr/lib/librumphijack.so 55 atf_check -s exit:0 mkdir -p /rump/var/chroot/rtadvd 56 unset LD_PRELOAD 57 unset RUMP_SERVER 58} 59 60setup_shmif0() 61{ 62 local sock=$1 63 local IP6ADDR=$2 64 65 rump_server_add_iface $sock shmif0 bus1 66 67 export RUMP_SERVER=$sock 68 atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6ADDR} 69 atf_check -s exit:0 rump.ifconfig shmif0 up 70 atf_check -s exit:0 rump.ifconfig -w 10 71 72 $DEBUG && rump.ifconfig 73} 74 75wait_term() 76{ 77 local PIDFILE=${1} 78 shift 79 80 while [ -f ${PIDFILE} ] 81 do 82 sleep 0.2 83 done 84 85 return 0 86} 87 88create_rtadvdconfig() 89{ 90 91 cat << _EOF > ${CONFIG} 92shmif0:\ 93 :mtu#1300:maxinterval#4:mininterval#3: 94_EOF 95} 96 97create_rtadvdconfig_rltime() 98{ 99 local time=$1 100 101 cat << _EOF > ${CONFIG} 102shmif0:\ 103 :mtu#1300:maxinterval#4:mininterval#3:rltime#$time: 104_EOF 105 $DEBUG && cat ${CONFIG} 106} 107 108create_rtadvdconfig_vltime() 109{ 110 local addr=$1 111 local time=$2 112 113 cat << _EOF > ${CONFIG} 114shmif0:\ 115 :mtu#1300:maxinterval#4:mininterval#3:addr="$addr":vltime#$time: 116_EOF 117 $DEBUG && cat ${CONFIG} 118} 119 120start_rtadvd() 121{ 122 local sock=$1 123 local pidfile=$2 124 125 export RUMP_SERVER=$sock 126 atf_check -s exit:0 rump.rtadvd -c ${CONFIG} -p $pidfile shmif0 127 while [ ! -f $pidfile ]; do 128 sleep 0.2 129 done 130 unset RUMP_SERVER 131} 132 133check_entries() 134{ 135 local cli=$1 136 local srv=$2 137 local addr_prefix=$3 138 local mac_srv= ll_srv= 139 140 ll_srv=$(get_linklocal_addr $srv shmif0) 141 mac_srv=$(get_macaddr $srv shmif0) 142 143 export RUMP_SERVER=$cli 144 $DEBUG && dump_entries 145 atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r 146 atf_check -s exit:0 -o match:'advertised' rump.ndp -p 147 atf_check -s exit:0 -o match:"${ll_srv}%shmif0 \(reachable\)" rump.ndp -p 148 atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 149 atf_check -s exit:0 \ 150 -o match:"$ll_srv%shmif0 +$mac_srv +shmif0 +$ONEDAYISH S R" \ 151 rump.ndp -n -a 152 atf_check -s exit:0 -o not-match:$addr_prefix rump.ndp -n -a 153 atf_check -s exit:0 \ 154 -o match:"$addr_prefix.+<(TENTATIVE,)?AUTOCONF>" \ 155 rump.ifconfig shmif0 inet6 156 unset RUMP_SERVER 157} 158 159dump_entries() 160{ 161 162 echo ndp -n -a 163 rump.ndp -n -a 164 echo ndp -p 165 rump.ndp -p 166 echo ndp -r 167 rump.ndp -r 168} 169 170atf_test_case ra_basic cleanup 171ra_basic_head() 172{ 173 174 atf_set "descr" "Tests for basic functions of router advaertisement(RA)" 175 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 176} 177 178ra_basic_body() 179{ 180 181 rump_server_fs_start $RUMPSRV netinet6 182 rump_server_start $RUMPCLI netinet6 183 184 setup_shmif0 ${RUMPSRV} ${IP6SRV} 185 init_server $RUMPSRV 186 187 setup_shmif0 ${RUMPCLI} ${IP6CLI} 188 export RUMP_SERVER=${RUMPCLI} 189 $DEBUG && rump.ndp -n -a 190 atf_check -s exit:0 -o match:'= 0' rump.sysctl net.inet6.ip6.accept_rtadv 191 unset RUMP_SERVER 192 193 create_rtadvdconfig 194 start_rtadvd $RUMPSRV $PIDFILE 195 sleep $WAITTIME 196 197 export RUMP_SERVER=${RUMPCLI} 198 atf_check -s exit:0 -o empty rump.ndp -r 199 atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p 200 atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0 201 atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a 202 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a 203 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 204 unset RUMP_SERVER 205 206 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 207 wait_term ${PIDFILE} 208 209 export RUMP_SERVER=${RUMPCLI} 210 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 211 unset RUMP_SERVER 212 213 start_rtadvd $RUMPSRV $PIDFILE 214 sleep $WAITTIME 215 216 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 217 218 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 219 wait_term ${PIDFILE} 220 221 rump_server_destroy_ifaces 222} 223 224ra_basic_cleanup() 225{ 226 227 if [ -f ${PIDFILE} ]; then 228 kill -TERM `cat ${PIDFILE}` 229 wait_term ${PIDFILE} 230 fi 231 232 $DEBUG && dump 233 cleanup 234} 235 236atf_test_case ra_flush_prefix_entries cleanup 237ra_flush_prefix_entries_head() 238{ 239 240 atf_set "descr" "Tests for flushing prefixes (ndp -P)" 241 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 242} 243 244ra_flush_prefix_entries_body() 245{ 246 247 rump_server_fs_start $RUMPSRV netinet6 248 rump_server_start $RUMPCLI netinet6 249 250 setup_shmif0 ${RUMPSRV} ${IP6SRV} 251 setup_shmif0 ${RUMPCLI} ${IP6CLI} 252 253 init_server $RUMPSRV 254 255 create_rtadvdconfig 256 257 export RUMP_SERVER=${RUMPCLI} 258 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 259 unset RUMP_SERVER 260 261 start_rtadvd $RUMPSRV $PIDFILE 262 sleep $WAITTIME 263 264 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 265 266 export RUMP_SERVER=${RUMPCLI} 267 268 # Terminate rtadvd to prevent new RA messages from coming 269 # Note that ifconfig down; kill -TERM doesn't work 270 kill -KILL `cat ${PIDFILE}` 271 272 # Flush all the entries in the prefix list 273 atf_check -s exit:0 rump.ndp -P 274 275 $DEBUG && dump_entries 276 atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r 277 atf_check -s exit:0 -o empty rump.ndp -p 278 atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 279 atf_check -s exit:0 -o match:"$ONEDAYISH S R" rump.ndp -n -a 280 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a 281 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 282 unset RUMP_SERVER 283 284 rump_server_destroy_ifaces 285} 286 287ra_flush_prefix_entries_cleanup() 288{ 289 290 $DEBUG && dump 291 cleanup 292} 293 294atf_test_case ra_flush_defrouter_entries cleanup 295ra_flush_defrouter_entries_head() 296{ 297 298 atf_set "descr" "Tests for flushing default routers (ndp -R)" 299 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 300} 301 302ra_flush_defrouter_entries_body() 303{ 304 305 rump_server_fs_start $RUMPSRV netinet6 306 rump_server_start $RUMPCLI netinet6 307 308 setup_shmif0 ${RUMPSRV} ${IP6SRV} 309 setup_shmif0 ${RUMPCLI} ${IP6CLI} 310 311 init_server $RUMPSRV 312 313 create_rtadvdconfig 314 315 export RUMP_SERVER=${RUMPCLI} 316 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 317 unset RUMP_SERVER 318 319 start_rtadvd $RUMPSRV $PIDFILE 320 sleep $WAITTIME 321 322 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 323 324 export RUMP_SERVER=${RUMPCLI} 325 326 # Terminate rtadvd to prevent new RA messages from coming 327 # Note that ifconfig down; kill -TERM doesn't work 328 kill -KILL `cat ${PIDFILE}` 329 330 # Flush all the entries in the default router list 331 atf_check -s exit:0 rump.ndp -R 332 333 $DEBUG && dump_entries 334 atf_check -s exit:0 -o empty rump.ndp -r 335 atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p 336 atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 337 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a 338 atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6 339 unset RUMP_SERVER 340 341 rump_server_destroy_ifaces 342} 343 344ra_flush_defrouter_entries_cleanup() 345{ 346 347 $DEBUG && dump 348 cleanup 349} 350 351atf_test_case ra_delete_address cleanup 352ra_delete_address_head() 353{ 354 355 atf_set "descr" "Tests for deleting auto-configured address" 356 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 357} 358 359ra_delete_address_body() 360{ 361 362 rump_server_fs_start $RUMPSRV netinet6 363 rump_server_start $RUMPCLI netinet6 364 365 setup_shmif0 ${RUMPSRV} ${IP6SRV} 366 setup_shmif0 ${RUMPCLI} ${IP6CLI} 367 368 init_server $RUMPSRV 369 370 create_rtadvdconfig 371 372 export RUMP_SERVER=${RUMPCLI} 373 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 374 unset RUMP_SERVER 375 376 start_rtadvd $RUMPSRV $PIDFILE 377 sleep $WAITTIME 378 379 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 380 381 export RUMP_SERVER=${RUMPCLI} 382 $DEBUG && rump.ifconfig shmif0 383 atf_check -s exit:0 rump.ifconfig shmif0 inet6 \ 384 $(rump.ifconfig shmif0 |awk '/AUTOCONF/ {print $2}') delete 385 unset RUMP_SERVER 386 387 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 388 wait_term ${PIDFILE} 389 390 rump_server_destroy_ifaces 391} 392 393ra_delete_address_cleanup() 394{ 395 396 if [ -f ${PIDFILE} ]; then 397 kill -TERM `cat ${PIDFILE}` 398 wait_term ${PIDFILE} 399 fi 400 401 $DEBUG && dump 402 cleanup 403} 404 405atf_test_case ra_multiple_routers cleanup 406ra_multiple_routers_head() 407{ 408 409 atf_set "descr" "Tests for multiple routers" 410 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 411} 412 413ra_multiple_routers_body() 414{ 415 local n= 416 417 rump_server_fs_start $RUMPSRV netinet6 418 rump_server_fs_start $RUMPSRV3 netinet6 419 rump_server_start $RUMPCLI netinet6 420 421 setup_shmif0 ${RUMPSRV} ${IP6SRV} 422 setup_shmif0 ${RUMPSRV3} ${IP6SRV3} 423 setup_shmif0 ${RUMPCLI} ${IP6CLI} 424 425 init_server $RUMPSRV 426 init_server $RUMPSRV3 427 428 create_rtadvdconfig 429 430 export RUMP_SERVER=${RUMPCLI} 431 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 432 unset RUMP_SERVER 433 434 start_rtadvd $RUMPSRV $PIDFILE 435 start_rtadvd $RUMPSRV3 $PIDFILE3 436 sleep $WAITTIME 437 438 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 439 check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX 440 441 export RUMP_SERVER=$RUMPCLI 442 # Two prefixes are advertised by differnt two routers 443 n=$(rump.ndp -p |grep 'advertised by' |wc -l) 444 atf_check_equal $n 2 445 unset RUMP_SERVER 446 447 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 448 wait_term ${PIDFILE} 449 atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}` 450 wait_term ${PIDFILE3} 451 452 rump_server_destroy_ifaces 453} 454 455ra_multiple_routers_cleanup() 456{ 457 458 if [ -f ${PIDFILE} ]; then 459 kill -TERM `cat ${PIDFILE}` 460 wait_term ${PIDFILE} 461 fi 462 if [ -f ${PIDFILE3} ]; then 463 kill -TERM `cat ${PIDFILE3}` 464 wait_term ${PIDFILE3} 465 fi 466 467 $DEBUG && dump 468 cleanup 469} 470 471atf_test_case ra_multiple_routers_single_prefix cleanup 472ra_multiple_routers_single_prefix_head() 473{ 474 475 atf_set "descr" "Tests for multiple routers with a single prefix" 476 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 477} 478 479ra_multiple_routers_single_prefix_body() 480{ 481 local n= 482 483 rump_server_fs_start $RUMPSRV netinet6 484 rump_server_fs_start $RUMPSRV1_2 netinet6 485 rump_server_start $RUMPCLI netinet6 486 487 setup_shmif0 ${RUMPSRV} ${IP6SRV} 488 setup_shmif0 ${RUMPSRV1_2} ${IP6SRV1_2} 489 setup_shmif0 ${RUMPCLI} ${IP6CLI} 490 491 init_server $RUMPSRV 492 init_server $RUMPSRV1_2 493 494 create_rtadvdconfig 495 496 export RUMP_SERVER=${RUMPCLI} 497 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 498 unset RUMP_SERVER 499 500 start_rtadvd $RUMPSRV $PIDFILE 501 start_rtadvd $RUMPSRV1_2 $PIDFILE1_2 502 sleep $WAITTIME 503 504 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 505 check_entries $RUMPCLI $RUMPSRV1_2 $IP6SRV_PREFIX 506 507 export RUMP_SERVER=$RUMPCLI 508 # One prefix is advertised by differnt two routers 509 n=$(rump.ndp -p |grep 'advertised by' |wc -l) 510 atf_check_equal $n 1 511 unset RUMP_SERVER 512 513 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 514 wait_term ${PIDFILE} 515 atf_check -s exit:0 kill -TERM `cat ${PIDFILE1_2}` 516 wait_term ${PIDFILE1_2} 517 518 rump_server_destroy_ifaces 519} 520 521ra_multiple_routers_single_prefix_cleanup() 522{ 523 524 if [ -f ${PIDFILE} ]; then 525 kill -TERM `cat ${PIDFILE}` 526 wait_term ${PIDFILE} 527 fi 528 if [ -f ${PIDFILE1_2} ]; then 529 kill -TERM `cat ${PIDFILE1_2}` 530 wait_term ${PIDFILE1_2} 531 fi 532 533 $DEBUG && dump 534 cleanup 535} 536 537atf_test_case ra_multiple_routers_maxifprefixes cleanup 538ra_multiple_routers_maxifprefixes_head() 539{ 540 541 atf_set "descr" "Tests for exceeding the number of maximum prefixes" 542 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 543} 544 545ra_multiple_routers_maxifprefixes_body() 546{ 547 local n= 548 549 rump_server_fs_start $RUMPSRV netinet6 550 rump_server_fs_start $RUMPSRV3 netinet6 551 rump_server_fs_start $RUMPSRV4 netinet6 552 rump_server_start $RUMPCLI netinet6 553 554 setup_shmif0 ${RUMPSRV} ${IP6SRV} 555 setup_shmif0 ${RUMPSRV3} ${IP6SRV3} 556 setup_shmif0 ${RUMPSRV4} ${IP6SRV4} 557 setup_shmif0 ${RUMPCLI} ${IP6CLI} 558 559 init_server $RUMPSRV 560 init_server $RUMPSRV3 561 init_server $RUMPSRV4 562 563 create_rtadvdconfig 564 565 export RUMP_SERVER=${RUMPCLI} 566 atf_check -s exit:0 -o match:'0.->.1' \ 567 rump.sysctl -w net.inet6.ip6.accept_rtadv=1 568 # Limit the maximum number of prefix entries to 2 569 atf_check -s exit:0 -o match:'16.->.2' \ 570 rump.sysctl -w net.inet6.ip6.maxifprefixes=2 571 unset RUMP_SERVER 572 573 start_rtadvd $RUMPSRV $PIDFILE 574 start_rtadvd $RUMPSRV3 $PIDFILE3 575 sleep $WAITTIME 576 577 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 578 check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX 579 580 start_rtadvd $RUMPSRV4 $PIDFILE4 581 sleep $WAITTIME 582 583 export RUMP_SERVER=${RUMPCLI} 584 $DEBUG && dump_entries 585 # There should remain two prefixes 586 n=$(rump.ndp -p |grep 'advertised by' |wc -l) 587 atf_check_equal $n 2 588 # TODO check other conditions 589 unset RUMP_SERVER 590 591 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 592 wait_term ${PIDFILE} 593 atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}` 594 wait_term ${PIDFILE3} 595 atf_check -s exit:0 kill -TERM `cat ${PIDFILE4}` 596 wait_term ${PIDFILE4} 597 598 rump_server_destroy_ifaces 599} 600 601ra_multiple_routers_maxifprefixes_cleanup() 602{ 603 604 if [ -f ${PIDFILE} ]; then 605 kill -TERM `cat ${PIDFILE}` 606 wait_term ${PIDFILE} 607 fi 608 if [ -f ${PIDFILE3} ]; then 609 kill -TERM `cat ${PIDFILE3}` 610 wait_term ${PIDFILE3} 611 fi 612 if [ -f ${PIDFILE4} ]; then 613 kill -TERM `cat ${PIDFILE4}` 614 wait_term ${PIDFILE4} 615 fi 616 617 $DEBUG && dump 618 cleanup 619} 620 621atf_test_case ra_temporary_address cleanup 622ra_temporary_address_head() 623{ 624 625 atf_set "descr" "Tests for IPv6 temporary address" 626 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 627} 628 629check_echo_request_pkt() 630{ 631 local pkt="$2 > $3: .+ echo request" 632 633 extract_new_packets $1 > ./out 634 $DEBUG && echo $pkt 635 $DEBUG && cat ./out 636 atf_check -s exit:0 -o match:"$pkt" cat ./out 637} 638 639ra_temporary_address_body() 640{ 641 local ip_auto= ip_temp= 642 643 rump_server_fs_start $RUMPSRV netinet6 644 rump_server_start $RUMPCLI netinet6 645 646 setup_shmif0 $RUMPSRV $IP6SRV 647 init_server $RUMPSRV 648 setup_shmif0 $RUMPCLI $IP6CLI 649 650 export RUMP_SERVER=$RUMPCLI 651 atf_check -s exit:0 -o match:'0.->.1' \ 652 rump.sysctl -w net.inet6.ip6.accept_rtadv=1 653 atf_check -s exit:0 -o match:'0.->.1' \ 654 rump.sysctl -w net.inet6.ip6.use_tempaddr=1 655 unset RUMP_SERVER 656 657 create_rtadvdconfig 658 start_rtadvd $RUMPSRV $PIDFILE 659 sleep $WAITTIME 660 661 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 662 663 export RUMP_SERVER=$RUMPCLI 664 665 # Check temporary address 666 atf_check -s exit:0 \ 667 -o match:"$IP6SRV_PREFIX.+<(TENTATIVE,)?AUTOCONF,TEMPORARY>" \ 668 rump.ifconfig shmif0 inet6 669 670 # 671 # Testing net.inet6.ip6.prefer_tempaddr 672 # 673 atf_check -s exit:0 rump.ifconfig -w 10 674 $DEBUG && rump.ifconfig shmif0 675 ip_auto=$(rump.ifconfig shmif0 |awk '/<AUTOCONF>/ {sub(/\/[0-9]*/, ""); print $2;}') 676 ip_temp=$(rump.ifconfig shmif0 |awk '/<AUTOCONF,TEMPORARY>/ {sub(/\/[0-9]*/, ""); print $2;}') 677 $DEBUG && echo $ip_auto $ip_temp 678 679 # Ignore old packets 680 extract_new_packets bus1 > /dev/null 681 682 atf_check -s exit:0 -o ignore rump.ping6 -n -X 2 -c 1 $IP6SRV 683 # autoconf (non-temporal) address should be used as the source address 684 check_echo_request_pkt bus1 $ip_auto $IP6SRV 685 686 # Enable net.inet6.ip6.prefer_tempaddr 687 atf_check -s exit:0 -o match:'0.->.1' \ 688 rump.sysctl -w net.inet6.ip6.prefer_tempaddr=1 689 690 atf_check -s exit:0 -o ignore rump.ping6 -n -X 2 -c 1 $IP6SRV 691 # autoconf, temporal address should be used as the source address 692 check_echo_request_pkt bus1 $ip_temp $IP6SRV 693 694 unset RUMP_SERVER 695 696 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 697 wait_term $PIDFILE 698 699 rump_server_destroy_ifaces 700} 701 702ra_temporary_address_cleanup() 703{ 704 705 if [ -f ${PIDFILE} ]; then 706 kill -TERM `cat ${PIDFILE}` 707 wait_term ${PIDFILE} 708 fi 709 710 $DEBUG && dump 711 cleanup 712} 713 714atf_test_case ra_defrouter_expiration cleanup 715ra_defrouter_expiration_head() 716{ 717 718 atf_set "descr" "Tests for default router expiration" 719 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 720} 721 722ra_defrouter_expiration_body() 723{ 724 local expire_time=5 725 726 rump_server_fs_start $RUMPSRV netinet6 727 rump_server_start $RUMPCLI netinet6 728 729 setup_shmif0 ${RUMPSRV} ${IP6SRV} 730 setup_shmif0 ${RUMPCLI} ${IP6CLI} 731 732 init_server $RUMPSRV 733 734 create_rtadvdconfig_rltime $expire_time 735 736 export RUMP_SERVER=${RUMPCLI} 737 atf_check -s exit:0 -o match:'0.->.1' \ 738 rump.sysctl -w net.inet6.ip6.accept_rtadv=1 739 unset RUMP_SERVER 740 741 start_rtadvd $RUMPSRV $PIDFILE 742 sleep $WAITTIME 743 744 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 745 746 export RUMP_SERVER=${RUMPCLI} 747 748 # Terminate rtadvd to prevent new RA messages from coming 749 # Note that ifconfig down; kill -TERM doesn't work 750 kill -KILL `cat ${PIDFILE}` 751 752 # Wait until the default routers and prefix entries are expired 753 sleep $expire_time 754 755 $DEBUG && dump_entries 756 757 # Give nd6_timer a chance to sweep default routers and prefix entries 758 sleep 2 759 760 $DEBUG && dump_entries 761 atf_check -s exit:0 -o not-match:'if=shmif0' rump.ndp -r 762 atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p 763 atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 764 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a 765 atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6 766 unset RUMP_SERVER 767 768 rump_server_destroy_ifaces 769} 770 771ra_defrouter_expiration_cleanup() 772{ 773 774 $DEBUG && dump 775 cleanup 776} 777 778atf_test_case ra_prefix_expiration cleanup 779ra_prefix_expiration_head() 780{ 781 782 atf_set "descr" "Tests for prefix expiration" 783 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 784} 785 786ra_prefix_expiration_body() 787{ 788 local expire_time=5 789 790 rump_server_fs_start $RUMPSRV netinet6 791 rump_server_start $RUMPCLI netinet6 792 793 setup_shmif0 ${RUMPSRV} ${IP6SRV} 794 setup_shmif0 ${RUMPCLI} ${IP6CLI} 795 796 init_server $RUMPSRV 797 798 create_rtadvdconfig_vltime "${IP6SRV_PREFIX}:" $expire_time 799 800 export RUMP_SERVER=${RUMPCLI} 801 atf_check -s exit:0 -o match:'0.->.1' \ 802 rump.sysctl -w net.inet6.ip6.accept_rtadv=1 803 unset RUMP_SERVER 804 805 start_rtadvd $RUMPSRV $PIDFILE 806 sleep $WAITTIME 807 808 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 809 810 export RUMP_SERVER=${RUMPCLI} 811 812 # Terminate rtadvd to prevent new RA messages from coming 813 # Note that ifconfig down; kill -TERM doesn't work 814 kill -KILL `cat ${PIDFILE}` 815 816 # Wait until the default routers and prefix entries are expired 817 sleep $expire_time 818 819 $DEBUG && dump_entries 820 821 # Give nd6_timer a chance to sweep default routers and prefix entries 822 sleep 2 823 824 $DEBUG && dump_entries 825 atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r 826 atf_check -s exit:0 -o empty rump.ndp -p 827 atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 828 atf_check -s exit:0 -o match:"$ONEDAYISH S R" rump.ndp -n -a 829 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a 830 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 831 unset RUMP_SERVER 832 833 rump_server_destroy_ifaces 834} 835 836ra_prefix_expiration_cleanup() 837{ 838 839 $DEBUG && dump 840 cleanup 841} 842 843atf_init_test_cases() 844{ 845 846 atf_add_test_case ra_basic 847 atf_add_test_case ra_flush_prefix_entries 848 atf_add_test_case ra_flush_defrouter_entries 849 atf_add_test_case ra_delete_address 850 atf_add_test_case ra_multiple_routers 851 atf_add_test_case ra_multiple_routers_single_prefix 852 atf_add_test_case ra_multiple_routers_maxifprefixes 853 atf_add_test_case ra_temporary_address 854 atf_add_test_case ra_defrouter_expiration 855 atf_add_test_case ra_prefix_expiration 856} 857