t_ra.sh revision 313535
11556Srgrimes# $NetBSD: t_ra.sh,v 1.20 2017/01/11 03:15:44 ozaki-r Exp $ 21556Srgrimes# 31556Srgrimes# Copyright (c) 2015 Internet Initiative Japan Inc. 41556Srgrimes# All rights reserved. 51556Srgrimes# 61556Srgrimes# Redistribution and use in source and binary forms, with or without 71556Srgrimes# modification, are permitted provided that the following conditions 81556Srgrimes# are met: 91556Srgrimes# 1. Redistributions of source code must retain the above copyright 101556Srgrimes# notice, this list of conditions and the following disclaimer. 111556Srgrimes# 2. Redistributions in binary form must reproduce the above copyright 121556Srgrimes# notice, this list of conditions and the following disclaimer in the 131556Srgrimes# documentation and/or other materials provided with the distribution. 141556Srgrimes# 151556Srgrimes# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 161556Srgrimes# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 171556Srgrimes# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 181556Srgrimes# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 191556Srgrimes# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 201556Srgrimes# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 211556Srgrimes# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 221556Srgrimes# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 231556Srgrimes# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 241556Srgrimes# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 251556Srgrimes# POSSIBILITY OF SUCH DAMAGE. 261556Srgrimes# 271556Srgrimes 281556SrgrimesRUMPSRV=unix://r1 291556SrgrimesRUMPSRV1_2=unix://r12 3090143SmarkmRUMPCLI=unix://r2 311556SrgrimesRUMPSRV3=unix://r3 3228052SsteveRUMPSRV4=unix://r4 3390143SmarkmIP6SRV=fc00:1::1 3428052SsteveIP6SRV1_2=fc00:1::2 3599110SobrienIP6SRV_PREFIX=fc00:1: 3699110SobrienIP6CLI=fc00:2::2 371556SrgrimesIP6SRV3=fc00:3::1 381556SrgrimesIP6SRV3_PREFIX=fc00:3: 391556SrgrimesIP6SRV4=fc00:4::1 401556SrgrimesIP6SRV4_PREFIX=fc00:4: 411556SrgrimesPIDFILE=./rump.rtadvd.pid 4228054SstevePIDFILE1_2=./rump.rtadvd.pid12 4328054SstevePIDFILE3=./rump.rtadvd.pid3 441556SrgrimesPIDFILE4=./rump.rtadvd.pid4 451556SrgrimesCONFIG=./rtadvd.conf 461556SrgrimesWAITTIME=2 471556SrgrimesDEBUG=${DEBUG:-true} 481556Srgrimes 491556Srgrimesinit_server() 501556Srgrimes{ 511556Srgrimes 521556Srgrimes export RUMP_SERVER=$1 53109504Sjmallett atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.forwarding=1 5490110Simp export LD_PRELOAD=/usr/lib/librumphijack.so 551556Srgrimes atf_check -s exit:0 mkdir -p /rump/var/chroot/rtadvd 561556Srgrimes unset LD_PRELOAD 5769896Smckusick unset RUMP_SERVER 581556Srgrimes} 591556Srgrimes 60130827Sgadsetup_shmif0() 61130827Sgad{ 621556Srgrimes local sock=$1 631556Srgrimes local IP6ADDR=$2 641556Srgrimes 65110411Ssobomax rump_server_add_iface $sock shmif0 bus1 6690143Smarkm 67225868Strasz export RUMP_SERVER=$sock 68225868Strasz atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6ADDR} 69225868Strasz atf_check -s exit:0 rump.ifconfig shmif0 up 70225868Strasz atf_check -s exit:0 rump.ifconfig -w 10 71225868Strasz 7297958Sjmallett $DEBUG && rump.ifconfig 73225868Strasz} 74225868Strasz 75225868Straszwait_term() 76225868Strasz{ 77225868Strasz local PIDFILE=${1} 7897850Sjmallett shift 79235851Skib 80225868Strasz while [ -f ${PIDFILE} ] 81225868Strasz do 82240645Szont sleep 0.2 83225868Strasz done 84225868Strasz 85225868Strasz return 0 86225868Strasz} 87225868Strasz 88225868Straszcreate_rtadvdconfig() 89225868Strasz{ 90267904Spluknet 91254943Swill cat << _EOF > ${CONFIG} 92225868Straszshmif0:\ 93267904Spluknet :mtu#1300:maxinterval#4:mininterval#3: 94225868Strasz_EOF 95225868Strasz} 96225868Strasz 97225868Straszstart_rtadvd() 98225868Strasz{ 99331471Sjhb local sock=$1 100225868Strasz local pidfile=$2 101225868Strasz 102225868Strasz export RUMP_SERVER=$sock 103225868Strasz atf_check -s exit:0 rump.rtadvd -c ${CONFIG} -p $pidfile shmif0 104225868Strasz while [ ! -f $pidfile ]; do 105225868Strasz sleep 0.2 106225868Strasz done 107225868Strasz unset RUMP_SERVER 108225868Strasz} 109225868Strasz 110225868Straszcheck_entries() 111225868Strasz{ 112225868Strasz local cli=$1 113225868Strasz local srv=$2 114225868Strasz local addr_prefix=$3 115225868Strasz local mac_srv= ll_srv= 116225868Strasz 117225868Strasz ll_srv=$(get_linklocal_addr $srv shmif0) 118225868Strasz mac_srv=$(get_macaddr $srv shmif0) 119225868Strasz 120225868Strasz export RUMP_SERVER=$cli 121225868Strasz $DEBUG && dump_entries 122225868Strasz atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r 123225868Strasz atf_check -s exit:0 -o match:'advertised' rump.ndp -p 124225868Strasz atf_check -s exit:0 -o match:"${ll_srv}%shmif0 \(reachable\)" rump.ndp -p 125225868Strasz atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 126225868Strasz atf_check -s exit:0 \ 127225868Strasz -o match:"$ll_srv%shmif0 +$mac_srv +shmif0 +(23h59m|1d0h0m)..s S R" \ 128225868Strasz rump.ndp -n -a 129225868Strasz atf_check -s exit:0 -o match:$addr_prefix rump.ndp -n -a 130225868Strasz atf_check -s exit:0 -o match:"$addr_prefix.+<AUTOCONF>" \ 131225868Strasz rump.ifconfig shmif0 inet6 132225868Strasz unset RUMP_SERVER 133225868Strasz} 134225868Strasz 135225868Straszdump_entries() 136225868Strasz{ 137225868Strasz 138225868Strasz echo ndp -n -a 139225868Strasz rump.ndp -n -a 140225868Strasz echo ndp -p 141225868Strasz rump.ndp -p 142225868Strasz echo ndp -r 143225868Strasz rump.ndp -r 144225868Strasz} 145225868Strasz 14690143Smarkmatf_test_case ra_basic cleanup 147225868Straszra_basic_head() 148225868Strasz{ 149240645Szont 150225868Strasz atf_set "descr" "Tests for basic functions of router advaertisement(RA)" 151225868Strasz atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 152225868Strasz} 153225868Strasz 154225868Straszra_basic_body() 155225868Strasz{ 156225868Strasz 157225868Strasz rump_server_fs_start $RUMPSRV netinet6 158225868Strasz rump_server_start $RUMPCLI netinet6 159225868Strasz 160225868Strasz setup_shmif0 ${RUMPSRV} ${IP6SRV} 161225868Strasz init_server $RUMPSRV 162225868Strasz 163225868Strasz setup_shmif0 ${RUMPCLI} ${IP6CLI} 164225868Strasz export RUMP_SERVER=${RUMPCLI} 165225868Strasz $DEBUG && rump.ndp -n -a 166225868Strasz atf_check -s exit:0 -o match:'= 0' rump.sysctl net.inet6.ip6.accept_rtadv 167225868Strasz unset RUMP_SERVER 168225868Strasz 169225868Strasz create_rtadvdconfig 170225868Strasz start_rtadvd $RUMPSRV $PIDFILE 171225868Strasz sleep $WAITTIME 172225868Strasz 173225868Strasz export RUMP_SERVER=${RUMPCLI} 174225868Strasz atf_check -s exit:0 -o empty rump.ndp -r 175225868Strasz atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p 176225868Strasz atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0 1771556Srgrimes atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a 1781556Srgrimes atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a 1791556Srgrimes atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 18090110Simp unset RUMP_SERVER 1811556Srgrimes 1821556Srgrimes atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 1831556Srgrimes wait_term ${PIDFILE} 18490143Smarkm 1851556Srgrimes export RUMP_SERVER=${RUMPCLI} 1861556Srgrimes atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 1871556Srgrimes unset RUMP_SERVER 1881556Srgrimes 1891556Srgrimes start_rtadvd $RUMPSRV $PIDFILE 1901556Srgrimes sleep $WAITTIME 1911556Srgrimes 1921556Srgrimes check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 1931556Srgrimes 1941556Srgrimes atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 1951556Srgrimes wait_term ${PIDFILE} 1961556Srgrimes 1971556Srgrimes rump_server_destroy_ifaces 1981556Srgrimes} 1991556Srgrimes 2001556Srgrimesra_basic_cleanup() 201109502Sjmallett{ 2021556Srgrimes 20390143Smarkm if [ -f ${PIDFILE} ]; then 2041556Srgrimes kill -TERM `cat ${PIDFILE}` 20598050Sjmallett wait_term ${PIDFILE} 20690143Smarkm fi 20790143Smarkm 208109504Sjmallett $DEBUG && dump 2091556Srgrimes cleanup 2101556Srgrimes} 2111556Srgrimes 21297944Sjmallettatf_test_case ra_flush_prefix_entries cleanup 21398050Sjmallettra_flush_prefix_entries_head() 21498050Sjmallett{ 21598050Sjmallett 21697944Sjmallett atf_set "descr" "Tests for flushing prefixes (ndp -P)" 21798050Sjmallett atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 21898050Sjmallett} 21998050Sjmallett 22098050Sjmallettra_flush_prefix_entries_body() 22198050Sjmallett{ 22298050Sjmallett 22398050Sjmallett rump_server_fs_start $RUMPSRV netinet6 22498050Sjmallett rump_server_start $RUMPCLI netinet6 225109504Sjmallett 2261556Srgrimes setup_shmif0 ${RUMPSRV} ${IP6SRV} 227109502Sjmallett setup_shmif0 ${RUMPCLI} ${IP6CLI} 228109502Sjmallett 229109502Sjmallett init_server $RUMPSRV 230109502Sjmallett 231109502Sjmallett create_rtadvdconfig 232109502Sjmallett 233109502Sjmallett export RUMP_SERVER=${RUMPCLI} 234109502Sjmallett atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 235109502Sjmallett unset RUMP_SERVER 236109502Sjmallett 2371556Srgrimes start_rtadvd $RUMPSRV $PIDFILE 23897877Sjmallett sleep $WAITTIME 239109504Sjmallett 240109504Sjmallett check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 241109504Sjmallett 242109504Sjmallett export RUMP_SERVER=${RUMPCLI} 243109504Sjmallett 244109504Sjmallett # Terminate rtadvd to prevent new RA messages from coming 24597848Sjmallett # Note that ifconfig down; kill -TERM doesn't work 24697848Sjmallett kill -KILL `cat ${PIDFILE}` 24797877Sjmallett 24897848Sjmallett # Flush all the entries in the prefix list 249130999Sgad atf_check -s exit:0 rump.ndp -P 2501556Srgrimes 25190143Smarkm $DEBUG && dump_entries 252130999Sgad atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r 253104026Sjmallett atf_check -s exit:0 -o empty rump.ndp -p 254104026Sjmallett atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 255104026Sjmallett atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a 256104026Sjmallett atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a 2571556Srgrimes atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 2581556Srgrimes unset RUMP_SERVER 2591556Srgrimes 260109504Sjmallett rump_server_destroy_ifaces 2611556Srgrimes} 262156423Sgad 2631556Srgrimesra_flush_prefix_entries_cleanup() 264156423Sgad{ 2651556Srgrimes 2661556Srgrimes $DEBUG && dump 2671556Srgrimes cleanup 2681556Srgrimes} 2691556Srgrimes 2701556Srgrimesatf_test_case ra_flush_defrouter_entries cleanup 2711556Srgrimesra_flush_defrouter_entries_head() 2721556Srgrimes{ 2731556Srgrimes 274156423Sgad atf_set "descr" "Tests for flushing default routers (ndp -R)" 275157559Sgad atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 276157559Sgad} 277157559Sgad 278157559Sgadra_flush_defrouter_entries_body() 279156423Sgad{ 280157559Sgad 281157559Sgad rump_server_fs_start $RUMPSRV netinet6 282157559Sgad rump_server_start $RUMPCLI netinet6 283157559Sgad 284157559Sgad setup_shmif0 ${RUMPSRV} ${IP6SRV} 285157559Sgad setup_shmif0 ${RUMPCLI} ${IP6CLI} 286157559Sgad 287157559Sgad init_server $RUMPSRV 288157559Sgad 289157559Sgad create_rtadvdconfig 290157559Sgad 291189078Sattilio export RUMP_SERVER=${RUMPCLI} 292189078Sattilio atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 293157559Sgad unset RUMP_SERVER 294157559Sgad 295199351Snetchild start_rtadvd $RUMPSRV $PIDFILE 296157559Sgad sleep $WAITTIME 2971556Srgrimes 2981556Srgrimes check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 2991556Srgrimes 3001556Srgrimes export RUMP_SERVER=${RUMPCLI} 3011556Srgrimes 302109504Sjmallett # Terminate rtadvd to prevent new RA messages from coming 303109504Sjmallett # Note that ifconfig down; kill -TERM doesn't work 304109504Sjmallett kill -KILL `cat ${PIDFILE}` 3051556Srgrimes 3061556Srgrimes # Flush all the entries in the default router list 3071556Srgrimes atf_check -s exit:0 rump.ndp -R 3081556Srgrimes 30990110Simp $DEBUG && dump_entries 3101556Srgrimes atf_check -s exit:0 -o empty rump.ndp -r 31190143Smarkm atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p 3121556Srgrimes atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 313 atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a 314 atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a 315 atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6 316 unset RUMP_SERVER 317 318 rump_server_destroy_ifaces 319} 320 321ra_flush_defrouter_entries_cleanup() 322{ 323 324 $DEBUG && dump 325 cleanup 326} 327 328atf_test_case ra_delete_address cleanup 329ra_delete_address_head() 330{ 331 332 atf_set "descr" "Tests for deleting auto-configured address" 333 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 334} 335 336ra_delete_address_body() 337{ 338 339 rump_server_fs_start $RUMPSRV netinet6 340 rump_server_start $RUMPCLI netinet6 341 342 setup_shmif0 ${RUMPSRV} ${IP6SRV} 343 setup_shmif0 ${RUMPCLI} ${IP6CLI} 344 345 init_server $RUMPSRV 346 347 create_rtadvdconfig 348 349 export RUMP_SERVER=${RUMPCLI} 350 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 351 unset RUMP_SERVER 352 353 start_rtadvd $RUMPSRV $PIDFILE 354 sleep $WAITTIME 355 356 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 357 358 export RUMP_SERVER=${RUMPCLI} 359 $DEBUG && rump.ifconfig shmif0 360 atf_check -s exit:0 rump.ifconfig shmif0 inet6 \ 361 $(rump.ifconfig shmif0 |awk '/AUTOCONF/ {print $2}') delete 362 unset RUMP_SERVER 363 364 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 365 wait_term ${PIDFILE} 366 367 rump_server_destroy_ifaces 368} 369 370ra_delete_address_cleanup() 371{ 372 373 if [ -f ${PIDFILE} ]; then 374 kill -TERM `cat ${PIDFILE}` 375 wait_term ${PIDFILE} 376 fi 377 378 $DEBUG && dump 379 cleanup 380} 381 382atf_test_case ra_multiple_routers cleanup 383ra_multiple_routers_head() 384{ 385 386 atf_set "descr" "Tests for multiple routers" 387 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 388} 389 390ra_multiple_routers_body() 391{ 392 local n= 393 394 rump_server_fs_start $RUMPSRV netinet6 395 rump_server_fs_start $RUMPSRV3 netinet6 396 rump_server_start $RUMPCLI netinet6 397 398 setup_shmif0 ${RUMPSRV} ${IP6SRV} 399 setup_shmif0 ${RUMPSRV3} ${IP6SRV3} 400 setup_shmif0 ${RUMPCLI} ${IP6CLI} 401 402 init_server $RUMPSRV 403 init_server $RUMPSRV3 404 405 create_rtadvdconfig 406 407 export RUMP_SERVER=${RUMPCLI} 408 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 409 unset RUMP_SERVER 410 411 start_rtadvd $RUMPSRV $PIDFILE 412 start_rtadvd $RUMPSRV3 $PIDFILE3 413 sleep $WAITTIME 414 415 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 416 check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX 417 418 export RUMP_SERVER=$RUMPCLI 419 # Two prefixes are advertised by differnt two routers 420 n=$(rump.ndp -p |grep 'advertised by' |wc -l) 421 atf_check_equal $n 2 422 unset RUMP_SERVER 423 424 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 425 wait_term ${PIDFILE} 426 atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}` 427 wait_term ${PIDFILE3} 428 429 rump_server_destroy_ifaces 430} 431 432ra_multiple_routers_cleanup() 433{ 434 435 if [ -f ${PIDFILE} ]; then 436 kill -TERM `cat ${PIDFILE}` 437 wait_term ${PIDFILE} 438 fi 439 if [ -f ${PIDFILE3} ]; then 440 kill -TERM `cat ${PIDFILE3}` 441 wait_term ${PIDFILE3} 442 fi 443 444 $DEBUG && dump 445 cleanup 446} 447 448atf_test_case ra_multiple_routers_single_prefix cleanup 449ra_multiple_routers_single_prefix_head() 450{ 451 452 atf_set "descr" "Tests for multiple routers with a single prefix" 453 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 454} 455 456ra_multiple_routers_single_prefix_body() 457{ 458 local n= 459 460 rump_server_fs_start $RUMPSRV netinet6 461 rump_server_fs_start $RUMPSRV1_2 netinet6 462 rump_server_start $RUMPCLI netinet6 463 464 setup_shmif0 ${RUMPSRV} ${IP6SRV} 465 setup_shmif0 ${RUMPSRV1_2} ${IP6SRV1_2} 466 setup_shmif0 ${RUMPCLI} ${IP6CLI} 467 468 init_server $RUMPSRV 469 init_server $RUMPSRV1_2 470 471 create_rtadvdconfig 472 473 export RUMP_SERVER=${RUMPCLI} 474 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 475 unset RUMP_SERVER 476 477 start_rtadvd $RUMPSRV $PIDFILE 478 start_rtadvd $RUMPSRV1_2 $PIDFILE1_2 479 sleep $WAITTIME 480 481 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 482 check_entries $RUMPCLI $RUMPSRV1_2 $IP6SRV_PREFIX 483 484 export RUMP_SERVER=$RUMPCLI 485 # One prefix is advertised by differnt two routers 486 n=$(rump.ndp -p |grep 'advertised by' |wc -l) 487 atf_check_equal $n 1 488 unset RUMP_SERVER 489 490 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 491 wait_term ${PIDFILE} 492 atf_check -s exit:0 kill -TERM `cat ${PIDFILE1_2}` 493 wait_term ${PIDFILE1_2} 494 495 rump_server_destroy_ifaces 496} 497 498ra_multiple_routers_single_prefix_cleanup() 499{ 500 501 if [ -f ${PIDFILE} ]; then 502 kill -TERM `cat ${PIDFILE}` 503 wait_term ${PIDFILE} 504 fi 505 if [ -f ${PIDFILE1_2} ]; then 506 kill -TERM `cat ${PIDFILE1_2}` 507 wait_term ${PIDFILE1_2} 508 fi 509 510 $DEBUG && dump 511 cleanup 512} 513 514atf_test_case ra_multiple_routers_maxifprefixes cleanup 515ra_multiple_routers_maxifprefixes_head() 516{ 517 518 atf_set "descr" "Tests for exceeding the number of maximum prefixes" 519 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 520} 521 522ra_multiple_routers_maxifprefixes_body() 523{ 524 local n= 525 526 rump_server_fs_start $RUMPSRV netinet6 527 rump_server_fs_start $RUMPSRV3 netinet6 528 rump_server_fs_start $RUMPSRV4 netinet6 529 rump_server_start $RUMPCLI netinet6 530 531 setup_shmif0 ${RUMPSRV} ${IP6SRV} 532 setup_shmif0 ${RUMPSRV3} ${IP6SRV3} 533 setup_shmif0 ${RUMPSRV4} ${IP6SRV4} 534 setup_shmif0 ${RUMPCLI} ${IP6CLI} 535 536 init_server $RUMPSRV 537 init_server $RUMPSRV3 538 init_server $RUMPSRV4 539 540 create_rtadvdconfig 541 542 export RUMP_SERVER=${RUMPCLI} 543 atf_check -s exit:0 -o match:'0.->.1' \ 544 rump.sysctl -w net.inet6.ip6.accept_rtadv=1 545 # Limit the maximum number of prefix entries to 2 546 atf_check -s exit:0 -o match:'16.->.2' \ 547 rump.sysctl -w net.inet6.ip6.maxifprefixes=2 548 unset RUMP_SERVER 549 550 start_rtadvd $RUMPSRV $PIDFILE 551 start_rtadvd $RUMPSRV3 $PIDFILE3 552 sleep $WAITTIME 553 554 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 555 check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX 556 557 start_rtadvd $RUMPSRV4 $PIDFILE4 558 sleep $WAITTIME 559 560 export RUMP_SERVER=${RUMPCLI} 561 $DEBUG && dump_entries 562 # There should remain two prefixes 563 n=$(rump.ndp -p |grep 'advertised by' |wc -l) 564 atf_check_equal $n 2 565 # TODO check other conditions 566 unset RUMP_SERVER 567 568 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 569 wait_term ${PIDFILE} 570 atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}` 571 wait_term ${PIDFILE3} 572 atf_check -s exit:0 kill -TERM `cat ${PIDFILE4}` 573 wait_term ${PIDFILE4} 574 575 rump_server_destroy_ifaces 576} 577 578ra_multiple_routers_maxifprefixes_cleanup() 579{ 580 581 if [ -f ${PIDFILE} ]; then 582 kill -TERM `cat ${PIDFILE}` 583 wait_term ${PIDFILE} 584 fi 585 if [ -f ${PIDFILE3} ]; then 586 kill -TERM `cat ${PIDFILE3}` 587 wait_term ${PIDFILE3} 588 fi 589 if [ -f ${PIDFILE4} ]; then 590 kill -TERM `cat ${PIDFILE4}` 591 wait_term ${PIDFILE4} 592 fi 593 594 $DEBUG && dump 595 cleanup 596} 597 598atf_test_case ra_temporary_address cleanup 599ra_temporary_address_head() 600{ 601 602 atf_set "descr" "Tests for IPv6 temporary address" 603 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 604} 605 606ra_temporary_address_body() 607{ 608 609 rump_server_fs_start $RUMPSRV netinet6 610 rump_server_start $RUMPCLI netinet6 611 612 setup_shmif0 ${RUMPSRV} ${IP6SRV} 613 init_server $RUMPSRV 614 615 setup_shmif0 ${RUMPCLI} ${IP6CLI} 616 export RUMP_SERVER=${RUMPCLI} 617 $DEBUG && rump.ndp -n -a 618 atf_check -s exit:0 -o match:'= 0' \ 619 rump.sysctl net.inet6.ip6.accept_rtadv 620 atf_check -s exit:0 -o match:'= 0' \ 621 rump.sysctl net.inet6.ip6.use_tempaddr 622 unset RUMP_SERVER 623 624 create_rtadvdconfig 625 start_rtadvd $RUMPSRV $PIDFILE 626 sleep $WAITTIME 627 628 export RUMP_SERVER=${RUMPCLI} 629 atf_check -s exit:0 -o empty rump.ndp -r 630 atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p 631 atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0 632 atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a 633 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a 634 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 635 unset RUMP_SERVER 636 637 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 638 wait_term ${PIDFILE} 639 640 export RUMP_SERVER=${RUMPCLI} 641 atf_check -s exit:0 -o match:'0.->.1' \ 642 rump.sysctl -w net.inet6.ip6.accept_rtadv=1 643 atf_check -s exit:0 -o match:'0.->.1' \ 644 rump.sysctl -w net.inet6.ip6.use_tempaddr=1 645 unset RUMP_SERVER 646 647 start_rtadvd $RUMPSRV $PIDFILE 648 sleep $WAITTIME 649 650 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 651 652 # Check temporary address 653 export RUMP_SERVER=${RUMPCLI} 654 atf_check -s exit:0 -o match:"$IP6SRV_PREFIX.+<AUTOCONF,TEMPORARY>" \ 655 rump.ifconfig shmif0 inet6 656 unset RUMP_SERVER 657 658 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 659 wait_term ${PIDFILE} 660 661 rump_server_destroy_ifaces 662} 663 664ra_temporary_address_cleanup() 665{ 666 667 if [ -f ${PIDFILE} ]; then 668 kill -TERM `cat ${PIDFILE}` 669 wait_term ${PIDFILE} 670 fi 671 672 $DEBUG && dump 673 cleanup 674} 675 676atf_init_test_cases() 677{ 678 679 atf_add_test_case ra_basic 680 atf_add_test_case ra_flush_prefix_entries 681 atf_add_test_case ra_flush_defrouter_entries 682 atf_add_test_case ra_delete_address 683 atf_add_test_case ra_multiple_routers 684 atf_add_test_case ra_multiple_routers_single_prefix 685 atf_add_test_case ra_multiple_routers_maxifprefixes 686 atf_add_test_case ra_temporary_address 687} 688