t_ra.sh revision 1.26
1# $NetBSD: t_ra.sh,v 1.26 2017/03/03 07:34:04 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:-true} 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 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 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 match:"$ONEDAYISH S R" rump.ndp -n -a 338 atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a 339 atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6 340 unset RUMP_SERVER 341 342 rump_server_destroy_ifaces 343} 344 345ra_flush_defrouter_entries_cleanup() 346{ 347 348 $DEBUG && dump 349 cleanup 350} 351 352atf_test_case ra_delete_address cleanup 353ra_delete_address_head() 354{ 355 356 atf_set "descr" "Tests for deleting auto-configured address" 357 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 358} 359 360ra_delete_address_body() 361{ 362 363 rump_server_fs_start $RUMPSRV netinet6 364 rump_server_start $RUMPCLI netinet6 365 366 setup_shmif0 ${RUMPSRV} ${IP6SRV} 367 setup_shmif0 ${RUMPCLI} ${IP6CLI} 368 369 init_server $RUMPSRV 370 371 create_rtadvdconfig 372 373 export RUMP_SERVER=${RUMPCLI} 374 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 375 unset RUMP_SERVER 376 377 start_rtadvd $RUMPSRV $PIDFILE 378 sleep $WAITTIME 379 380 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 381 382 export RUMP_SERVER=${RUMPCLI} 383 $DEBUG && rump.ifconfig shmif0 384 atf_check -s exit:0 rump.ifconfig shmif0 inet6 \ 385 $(rump.ifconfig shmif0 |awk '/AUTOCONF/ {print $2}') delete 386 unset RUMP_SERVER 387 388 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 389 wait_term ${PIDFILE} 390 391 rump_server_destroy_ifaces 392} 393 394ra_delete_address_cleanup() 395{ 396 397 if [ -f ${PIDFILE} ]; then 398 kill -TERM `cat ${PIDFILE}` 399 wait_term ${PIDFILE} 400 fi 401 402 $DEBUG && dump 403 cleanup 404} 405 406atf_test_case ra_multiple_routers cleanup 407ra_multiple_routers_head() 408{ 409 410 atf_set "descr" "Tests for multiple routers" 411 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 412} 413 414ra_multiple_routers_body() 415{ 416 local n= 417 418 rump_server_fs_start $RUMPSRV netinet6 419 rump_server_fs_start $RUMPSRV3 netinet6 420 rump_server_start $RUMPCLI netinet6 421 422 setup_shmif0 ${RUMPSRV} ${IP6SRV} 423 setup_shmif0 ${RUMPSRV3} ${IP6SRV3} 424 setup_shmif0 ${RUMPCLI} ${IP6CLI} 425 426 init_server $RUMPSRV 427 init_server $RUMPSRV3 428 429 create_rtadvdconfig 430 431 export RUMP_SERVER=${RUMPCLI} 432 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 433 unset RUMP_SERVER 434 435 start_rtadvd $RUMPSRV $PIDFILE 436 start_rtadvd $RUMPSRV3 $PIDFILE3 437 sleep $WAITTIME 438 439 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 440 check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX 441 442 export RUMP_SERVER=$RUMPCLI 443 # Two prefixes are advertised by differnt two routers 444 n=$(rump.ndp -p |grep 'advertised by' |wc -l) 445 atf_check_equal $n 2 446 unset RUMP_SERVER 447 448 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 449 wait_term ${PIDFILE} 450 atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}` 451 wait_term ${PIDFILE3} 452 453 rump_server_destroy_ifaces 454} 455 456ra_multiple_routers_cleanup() 457{ 458 459 if [ -f ${PIDFILE} ]; then 460 kill -TERM `cat ${PIDFILE}` 461 wait_term ${PIDFILE} 462 fi 463 if [ -f ${PIDFILE3} ]; then 464 kill -TERM `cat ${PIDFILE3}` 465 wait_term ${PIDFILE3} 466 fi 467 468 $DEBUG && dump 469 cleanup 470} 471 472atf_test_case ra_multiple_routers_single_prefix cleanup 473ra_multiple_routers_single_prefix_head() 474{ 475 476 atf_set "descr" "Tests for multiple routers with a single prefix" 477 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 478} 479 480ra_multiple_routers_single_prefix_body() 481{ 482 local n= 483 484 rump_server_fs_start $RUMPSRV netinet6 485 rump_server_fs_start $RUMPSRV1_2 netinet6 486 rump_server_start $RUMPCLI netinet6 487 488 setup_shmif0 ${RUMPSRV} ${IP6SRV} 489 setup_shmif0 ${RUMPSRV1_2} ${IP6SRV1_2} 490 setup_shmif0 ${RUMPCLI} ${IP6CLI} 491 492 init_server $RUMPSRV 493 init_server $RUMPSRV1_2 494 495 create_rtadvdconfig 496 497 export RUMP_SERVER=${RUMPCLI} 498 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 499 unset RUMP_SERVER 500 501 start_rtadvd $RUMPSRV $PIDFILE 502 start_rtadvd $RUMPSRV1_2 $PIDFILE1_2 503 sleep $WAITTIME 504 505 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 506 check_entries $RUMPCLI $RUMPSRV1_2 $IP6SRV_PREFIX 507 508 export RUMP_SERVER=$RUMPCLI 509 # One prefix is advertised by differnt two routers 510 n=$(rump.ndp -p |grep 'advertised by' |wc -l) 511 atf_check_equal $n 1 512 unset RUMP_SERVER 513 514 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 515 wait_term ${PIDFILE} 516 atf_check -s exit:0 kill -TERM `cat ${PIDFILE1_2}` 517 wait_term ${PIDFILE1_2} 518 519 rump_server_destroy_ifaces 520} 521 522ra_multiple_routers_single_prefix_cleanup() 523{ 524 525 if [ -f ${PIDFILE} ]; then 526 kill -TERM `cat ${PIDFILE}` 527 wait_term ${PIDFILE} 528 fi 529 if [ -f ${PIDFILE1_2} ]; then 530 kill -TERM `cat ${PIDFILE1_2}` 531 wait_term ${PIDFILE1_2} 532 fi 533 534 $DEBUG && dump 535 cleanup 536} 537 538atf_test_case ra_multiple_routers_maxifprefixes cleanup 539ra_multiple_routers_maxifprefixes_head() 540{ 541 542 atf_set "descr" "Tests for exceeding the number of maximum prefixes" 543 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 544} 545 546ra_multiple_routers_maxifprefixes_body() 547{ 548 local n= 549 550 rump_server_fs_start $RUMPSRV netinet6 551 rump_server_fs_start $RUMPSRV3 netinet6 552 rump_server_fs_start $RUMPSRV4 netinet6 553 rump_server_start $RUMPCLI netinet6 554 555 setup_shmif0 ${RUMPSRV} ${IP6SRV} 556 setup_shmif0 ${RUMPSRV3} ${IP6SRV3} 557 setup_shmif0 ${RUMPSRV4} ${IP6SRV4} 558 setup_shmif0 ${RUMPCLI} ${IP6CLI} 559 560 init_server $RUMPSRV 561 init_server $RUMPSRV3 562 init_server $RUMPSRV4 563 564 create_rtadvdconfig 565 566 export RUMP_SERVER=${RUMPCLI} 567 atf_check -s exit:0 -o match:'0.->.1' \ 568 rump.sysctl -w net.inet6.ip6.accept_rtadv=1 569 # Limit the maximum number of prefix entries to 2 570 atf_check -s exit:0 -o match:'16.->.2' \ 571 rump.sysctl -w net.inet6.ip6.maxifprefixes=2 572 unset RUMP_SERVER 573 574 start_rtadvd $RUMPSRV $PIDFILE 575 start_rtadvd $RUMPSRV3 $PIDFILE3 576 sleep $WAITTIME 577 578 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 579 check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX 580 581 start_rtadvd $RUMPSRV4 $PIDFILE4 582 sleep $WAITTIME 583 584 export RUMP_SERVER=${RUMPCLI} 585 $DEBUG && dump_entries 586 # There should remain two prefixes 587 n=$(rump.ndp -p |grep 'advertised by' |wc -l) 588 atf_check_equal $n 2 589 # TODO check other conditions 590 unset RUMP_SERVER 591 592 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 593 wait_term ${PIDFILE} 594 atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}` 595 wait_term ${PIDFILE3} 596 atf_check -s exit:0 kill -TERM `cat ${PIDFILE4}` 597 wait_term ${PIDFILE4} 598 599 rump_server_destroy_ifaces 600} 601 602ra_multiple_routers_maxifprefixes_cleanup() 603{ 604 605 if [ -f ${PIDFILE} ]; then 606 kill -TERM `cat ${PIDFILE}` 607 wait_term ${PIDFILE} 608 fi 609 if [ -f ${PIDFILE3} ]; then 610 kill -TERM `cat ${PIDFILE3}` 611 wait_term ${PIDFILE3} 612 fi 613 if [ -f ${PIDFILE4} ]; then 614 kill -TERM `cat ${PIDFILE4}` 615 wait_term ${PIDFILE4} 616 fi 617 618 $DEBUG && dump 619 cleanup 620} 621 622atf_test_case ra_temporary_address cleanup 623ra_temporary_address_head() 624{ 625 626 atf_set "descr" "Tests for IPv6 temporary address" 627 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 628} 629 630check_echo_request_pkt() 631{ 632 local pkt="$2 > $3: .+ echo request" 633 634 extract_new_packets $1 > ./out 635 $DEBUG && echo $pkt 636 $DEBUG && cat ./out 637 atf_check -s exit:0 -o match:"$pkt" cat ./out 638} 639 640ra_temporary_address_body() 641{ 642 local ip_auto= ip_temp= 643 644 rump_server_fs_start $RUMPSRV netinet6 645 rump_server_start $RUMPCLI netinet6 646 647 setup_shmif0 $RUMPSRV $IP6SRV 648 init_server $RUMPSRV 649 setup_shmif0 $RUMPCLI $IP6CLI 650 651 export RUMP_SERVER=$RUMPCLI 652 atf_check -s exit:0 -o match:'0.->.1' \ 653 rump.sysctl -w net.inet6.ip6.accept_rtadv=1 654 atf_check -s exit:0 -o match:'0.->.1' \ 655 rump.sysctl -w net.inet6.ip6.use_tempaddr=1 656 unset RUMP_SERVER 657 658 create_rtadvdconfig 659 start_rtadvd $RUMPSRV $PIDFILE 660 sleep $WAITTIME 661 662 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 663 664 export RUMP_SERVER=$RUMPCLI 665 666 # Check temporary address 667 atf_check -s exit:0 \ 668 -o match:"$IP6SRV_PREFIX.+<(TENTATIVE,)?AUTOCONF,TEMPORARY>" \ 669 rump.ifconfig shmif0 inet6 670 671 # 672 # Testing net.inet6.ip6.prefer_tempaddr 673 # 674 atf_check -s exit:0 rump.ifconfig -w 10 675 $DEBUG && rump.ifconfig shmif0 676 ip_auto=$(rump.ifconfig shmif0 |awk '/<AUTOCONF>/ {sub(/\/[0-9]*/, ""); print $2;}') 677 ip_temp=$(rump.ifconfig shmif0 |awk '/<AUTOCONF,TEMPORARY>/ {sub(/\/[0-9]*/, ""); print $2;}') 678 $DEBUG && echo $ip_auto $ip_temp 679 680 # Ignore old packets 681 extract_new_packets bus1 > /dev/null 682 683 atf_check -s exit:0 -o ignore rump.ping6 -n -X 2 -c 1 $IP6SRV 684 # autoconf (non-temporal) address should be used as the source address 685 check_echo_request_pkt bus1 $ip_auto $IP6SRV 686 687 # Enable net.inet6.ip6.prefer_tempaddr 688 atf_check -s exit:0 -o match:'0.->.1' \ 689 rump.sysctl -w net.inet6.ip6.prefer_tempaddr=1 690 691 atf_check -s exit:0 -o ignore rump.ping6 -n -X 2 -c 1 $IP6SRV 692 # autoconf, temporal address should be used as the source address 693 check_echo_request_pkt bus1 $ip_temp $IP6SRV 694 695 unset RUMP_SERVER 696 697 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 698 wait_term $PIDFILE 699 700 rump_server_destroy_ifaces 701} 702 703ra_temporary_address_cleanup() 704{ 705 706 if [ -f ${PIDFILE} ]; then 707 kill -TERM `cat ${PIDFILE}` 708 wait_term ${PIDFILE} 709 fi 710 711 $DEBUG && dump 712 cleanup 713} 714 715atf_test_case ra_defrouter_expiration cleanup 716ra_defrouter_expiration_head() 717{ 718 719 atf_set "descr" "Tests for default router expiration" 720 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 721} 722 723ra_defrouter_expiration_body() 724{ 725 local expire_time=5 726 727 rump_server_fs_start $RUMPSRV netinet6 728 rump_server_start $RUMPCLI netinet6 729 730 setup_shmif0 ${RUMPSRV} ${IP6SRV} 731 setup_shmif0 ${RUMPCLI} ${IP6CLI} 732 733 init_server $RUMPSRV 734 735 create_rtadvdconfig_rltime $expire_time 736 737 export RUMP_SERVER=${RUMPCLI} 738 atf_check -s exit:0 -o match:'0.->.1' \ 739 rump.sysctl -w net.inet6.ip6.accept_rtadv=1 740 unset RUMP_SERVER 741 742 start_rtadvd $RUMPSRV $PIDFILE 743 sleep $WAITTIME 744 745 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 746 747 export RUMP_SERVER=${RUMPCLI} 748 749 # Terminate rtadvd to prevent new RA messages from coming 750 # Note that ifconfig down; kill -TERM doesn't work 751 kill -KILL `cat ${PIDFILE}` 752 753 # Wait until the default routers and prefix entries are expired 754 sleep $expire_time 755 756 $DEBUG && dump_entries 757 758 # Give nd6_timer a chance to sweep default routers and prefix entries 759 sleep 2 760 761 $DEBUG && dump_entries 762 atf_check -s exit:0 -o not-match:'if=shmif0' rump.ndp -r 763 atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p 764 atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 765 atf_check -s exit:0 -o match:"$ONEDAYISH S R" rump.ndp -n -a 766 atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a 767 atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6 768 unset RUMP_SERVER 769 770 rump_server_destroy_ifaces 771} 772 773ra_defrouter_expiration_cleanup() 774{ 775 776 $DEBUG && dump 777 cleanup 778} 779 780atf_test_case ra_prefix_expiration cleanup 781ra_prefix_expiration_head() 782{ 783 784 atf_set "descr" "Tests for prefix expiration" 785 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 786} 787 788ra_prefix_expiration_body() 789{ 790 local expire_time=5 791 792 rump_server_fs_start $RUMPSRV netinet6 793 rump_server_start $RUMPCLI netinet6 794 795 setup_shmif0 ${RUMPSRV} ${IP6SRV} 796 setup_shmif0 ${RUMPCLI} ${IP6CLI} 797 798 init_server $RUMPSRV 799 800 create_rtadvdconfig_vltime "${IP6SRV_PREFIX}:" $expire_time 801 802 export RUMP_SERVER=${RUMPCLI} 803 atf_check -s exit:0 -o match:'0.->.1' \ 804 rump.sysctl -w net.inet6.ip6.accept_rtadv=1 805 unset RUMP_SERVER 806 807 start_rtadvd $RUMPSRV $PIDFILE 808 sleep $WAITTIME 809 810 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 811 812 export RUMP_SERVER=${RUMPCLI} 813 814 # Terminate rtadvd to prevent new RA messages from coming 815 # Note that ifconfig down; kill -TERM doesn't work 816 kill -KILL `cat ${PIDFILE}` 817 818 # Wait until the default routers and prefix entries are expired 819 sleep $expire_time 820 821 $DEBUG && dump_entries 822 823 # Give nd6_timer a chance to sweep default routers and prefix entries 824 sleep 2 825 826 $DEBUG && dump_entries 827 atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r 828 atf_check -s exit:0 -o empty rump.ndp -p 829 atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 830 atf_check -s exit:0 -o match:"$ONEDAYISH S R" rump.ndp -n -a 831 atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a 832 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 833 unset RUMP_SERVER 834 835 rump_server_destroy_ifaces 836} 837 838ra_prefix_expiration_cleanup() 839{ 840 841 $DEBUG && dump 842 cleanup 843} 844 845atf_init_test_cases() 846{ 847 848 atf_add_test_case ra_basic 849 atf_add_test_case ra_flush_prefix_entries 850 atf_add_test_case ra_flush_defrouter_entries 851 atf_add_test_case ra_delete_address 852 atf_add_test_case ra_multiple_routers 853 atf_add_test_case ra_multiple_routers_single_prefix 854 atf_add_test_case ra_multiple_routers_maxifprefixes 855 atf_add_test_case ra_temporary_address 856 atf_add_test_case ra_defrouter_expiration 857 atf_add_test_case ra_prefix_expiration 858} 859