1314817Sngie# $NetBSD: t_ra.sh,v 1.24 2017/01/13 08:11:01 ozaki-r Exp $ 2303980Sngie# 3303980Sngie# Copyright (c) 2015 Internet Initiative Japan Inc. 4303980Sngie# All rights reserved. 5303980Sngie# 6303980Sngie# Redistribution and use in source and binary forms, with or without 7303980Sngie# modification, are permitted provided that the following conditions 8303980Sngie# are met: 9303980Sngie# 1. Redistributions of source code must retain the above copyright 10303980Sngie# notice, this list of conditions and the following disclaimer. 11303980Sngie# 2. Redistributions in binary form must reproduce the above copyright 12303980Sngie# notice, this list of conditions and the following disclaimer in the 13303980Sngie# documentation and/or other materials provided with the distribution. 14303980Sngie# 15303980Sngie# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16303980Sngie# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17303980Sngie# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18303980Sngie# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19303980Sngie# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20303980Sngie# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21303980Sngie# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22303980Sngie# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23303980Sngie# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24303980Sngie# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25303980Sngie# POSSIBILITY OF SUCH DAMAGE. 26303980Sngie# 27303980Sngie 28303980SngieRUMPSRV=unix://r1 29313535SngieRUMPSRV1_2=unix://r12 30303980SngieRUMPCLI=unix://r2 31313535SngieRUMPSRV3=unix://r3 32313535SngieRUMPSRV4=unix://r4 33303980SngieIP6SRV=fc00:1::1 34313535SngieIP6SRV1_2=fc00:1::2 35313535SngieIP6SRV_PREFIX=fc00:1: 36303980SngieIP6CLI=fc00:2::2 37313535SngieIP6SRV3=fc00:3::1 38313535SngieIP6SRV3_PREFIX=fc00:3: 39313535SngieIP6SRV4=fc00:4::1 40313535SngieIP6SRV4_PREFIX=fc00:4: 41313535SngiePIDFILE=./rump.rtadvd.pid 42313535SngiePIDFILE1_2=./rump.rtadvd.pid12 43313535SngiePIDFILE3=./rump.rtadvd.pid3 44313535SngiePIDFILE4=./rump.rtadvd.pid4 45303980SngieCONFIG=./rtadvd.conf 46313535SngieWAITTIME=2 47313535SngieDEBUG=${DEBUG:-true} 48303980Sngie 49313535Sngieinit_server() 50313535Sngie{ 51313535Sngie 52313535Sngie export RUMP_SERVER=$1 53313535Sngie atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.forwarding=1 54313535Sngie export LD_PRELOAD=/usr/lib/librumphijack.so 55313535Sngie atf_check -s exit:0 mkdir -p /rump/var/chroot/rtadvd 56313535Sngie unset LD_PRELOAD 57313535Sngie unset RUMP_SERVER 58313535Sngie} 59313535Sngie 60303980Sngiesetup_shmif0() 61303980Sngie{ 62313535Sngie local sock=$1 63313535Sngie local IP6ADDR=$2 64303980Sngie 65313535Sngie rump_server_add_iface $sock shmif0 bus1 66313535Sngie 67313535Sngie export RUMP_SERVER=$sock 68303980Sngie atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6ADDR} 69303980Sngie atf_check -s exit:0 rump.ifconfig shmif0 up 70313535Sngie atf_check -s exit:0 rump.ifconfig -w 10 71303980Sngie 72303980Sngie $DEBUG && rump.ifconfig 73303980Sngie} 74303980Sngie 75303980Sngiewait_term() 76303980Sngie{ 77303980Sngie local PIDFILE=${1} 78303980Sngie shift 79303980Sngie 80303980Sngie while [ -f ${PIDFILE} ] 81303980Sngie do 82303980Sngie sleep 0.2 83303980Sngie done 84303980Sngie 85303980Sngie return 0 86303980Sngie} 87303980Sngie 88303980Sngiecreate_rtadvdconfig() 89303980Sngie{ 90303980Sngie 91303980Sngie cat << _EOF > ${CONFIG} 92303980Sngieshmif0:\ 93303980Sngie :mtu#1300:maxinterval#4:mininterval#3: 94303980Sngie_EOF 95303980Sngie} 96303980Sngie 97313535Sngiestart_rtadvd() 98303980Sngie{ 99313535Sngie local sock=$1 100313535Sngie local pidfile=$2 101303980Sngie 102313535Sngie export RUMP_SERVER=$sock 103313535Sngie atf_check -s exit:0 rump.rtadvd -c ${CONFIG} -p $pidfile shmif0 104313535Sngie while [ ! -f $pidfile ]; do 105313535Sngie sleep 0.2 106313535Sngie done 107313535Sngie unset RUMP_SERVER 108313535Sngie} 109313535Sngie 110313535Sngiecheck_entries() 111313535Sngie{ 112313535Sngie local cli=$1 113313535Sngie local srv=$2 114313535Sngie local addr_prefix=$3 115313535Sngie local mac_srv= ll_srv= 116313535Sngie 117313535Sngie ll_srv=$(get_linklocal_addr $srv shmif0) 118313535Sngie mac_srv=$(get_macaddr $srv shmif0) 119313535Sngie 120313535Sngie export RUMP_SERVER=$cli 121313535Sngie $DEBUG && dump_entries 122313535Sngie atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r 123313535Sngie atf_check -s exit:0 -o match:'advertised' rump.ndp -p 124313535Sngie atf_check -s exit:0 -o match:"${ll_srv}%shmif0 \(reachable\)" rump.ndp -p 125313535Sngie atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 126313535Sngie atf_check -s exit:0 \ 127313535Sngie -o match:"$ll_srv%shmif0 +$mac_srv +shmif0 +(23h59m|1d0h0m)..s S R" \ 128313535Sngie rump.ndp -n -a 129313535Sngie atf_check -s exit:0 -o match:$addr_prefix rump.ndp -n -a 130314817Sngie atf_check -s exit:0 \ 131314817Sngie -o match:"$addr_prefix.+<(TENTATIVE,)?AUTOCONF>" \ 132313535Sngie rump.ifconfig shmif0 inet6 133313535Sngie unset RUMP_SERVER 134313535Sngie} 135313535Sngie 136313535Sngiedump_entries() 137313535Sngie{ 138313535Sngie 139313535Sngie echo ndp -n -a 140313535Sngie rump.ndp -n -a 141313535Sngie echo ndp -p 142313535Sngie rump.ndp -p 143313535Sngie echo ndp -r 144313535Sngie rump.ndp -r 145313535Sngie} 146313535Sngie 147313535Sngieatf_test_case ra_basic cleanup 148313535Sngiera_basic_head() 149313535Sngie{ 150313535Sngie 151303980Sngie atf_set "descr" "Tests for basic functions of router advaertisement(RA)" 152303980Sngie atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 153303980Sngie} 154303980Sngie 155313535Sngiera_basic_body() 156303980Sngie{ 157303980Sngie 158313535Sngie rump_server_fs_start $RUMPSRV netinet6 159313535Sngie rump_server_start $RUMPCLI netinet6 160303980Sngie 161313535Sngie setup_shmif0 ${RUMPSRV} ${IP6SRV} 162313535Sngie init_server $RUMPSRV 163303980Sngie 164313535Sngie setup_shmif0 ${RUMPCLI} ${IP6CLI} 165303980Sngie export RUMP_SERVER=${RUMPCLI} 166303980Sngie $DEBUG && rump.ndp -n -a 167303980Sngie atf_check -s exit:0 -o match:'= 0' rump.sysctl net.inet6.ip6.accept_rtadv 168303980Sngie unset RUMP_SERVER 169303980Sngie 170303980Sngie create_rtadvdconfig 171313535Sngie start_rtadvd $RUMPSRV $PIDFILE 172313535Sngie sleep $WAITTIME 173303980Sngie 174303980Sngie export RUMP_SERVER=${RUMPCLI} 175303980Sngie atf_check -s exit:0 -o empty rump.ndp -r 176303980Sngie atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p 177303980Sngie atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0 178303980Sngie atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a 179303980Sngie atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a 180303980Sngie atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 181303980Sngie unset RUMP_SERVER 182303980Sngie 183303980Sngie atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 184303980Sngie wait_term ${PIDFILE} 185303980Sngie 186303980Sngie export RUMP_SERVER=${RUMPCLI} 187303980Sngie atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 188303980Sngie unset RUMP_SERVER 189303980Sngie 190313535Sngie start_rtadvd $RUMPSRV $PIDFILE 191313535Sngie sleep $WAITTIME 192313535Sngie 193313535Sngie check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 194313535Sngie 195313535Sngie atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 196313535Sngie wait_term ${PIDFILE} 197313535Sngie 198313535Sngie rump_server_destroy_ifaces 199313535Sngie} 200313535Sngie 201313535Sngiera_basic_cleanup() 202313535Sngie{ 203313535Sngie 204313535Sngie if [ -f ${PIDFILE} ]; then 205313535Sngie kill -TERM `cat ${PIDFILE}` 206313535Sngie wait_term ${PIDFILE} 207313535Sngie fi 208313535Sngie 209313535Sngie $DEBUG && dump 210313535Sngie cleanup 211313535Sngie} 212313535Sngie 213313535Sngieatf_test_case ra_flush_prefix_entries cleanup 214313535Sngiera_flush_prefix_entries_head() 215313535Sngie{ 216313535Sngie 217313535Sngie atf_set "descr" "Tests for flushing prefixes (ndp -P)" 218313535Sngie atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 219313535Sngie} 220313535Sngie 221313535Sngiera_flush_prefix_entries_body() 222313535Sngie{ 223313535Sngie 224313535Sngie rump_server_fs_start $RUMPSRV netinet6 225313535Sngie rump_server_start $RUMPCLI netinet6 226313535Sngie 227313535Sngie setup_shmif0 ${RUMPSRV} ${IP6SRV} 228313535Sngie setup_shmif0 ${RUMPCLI} ${IP6CLI} 229313535Sngie 230313535Sngie init_server $RUMPSRV 231313535Sngie 232313535Sngie create_rtadvdconfig 233313535Sngie 234313535Sngie export RUMP_SERVER=${RUMPCLI} 235313535Sngie atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 236303980Sngie unset RUMP_SERVER 237303980Sngie 238313535Sngie start_rtadvd $RUMPSRV $PIDFILE 239313535Sngie sleep $WAITTIME 240313535Sngie 241313535Sngie check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 242313535Sngie 243303980Sngie export RUMP_SERVER=${RUMPCLI} 244313535Sngie 245313535Sngie # Terminate rtadvd to prevent new RA messages from coming 246313535Sngie # Note that ifconfig down; kill -TERM doesn't work 247313535Sngie kill -KILL `cat ${PIDFILE}` 248313535Sngie 249313535Sngie # Flush all the entries in the prefix list 250313535Sngie atf_check -s exit:0 rump.ndp -P 251313535Sngie 252313535Sngie $DEBUG && dump_entries 253303980Sngie atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r 254313535Sngie atf_check -s exit:0 -o empty rump.ndp -p 255303980Sngie atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 256313535Sngie atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a 257303980Sngie atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a 258313535Sngie atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 259313535Sngie unset RUMP_SERVER 260313535Sngie 261313535Sngie rump_server_destroy_ifaces 262313535Sngie} 263313535Sngie 264313535Sngiera_flush_prefix_entries_cleanup() 265313535Sngie{ 266313535Sngie 267313535Sngie $DEBUG && dump 268313535Sngie cleanup 269313535Sngie} 270313535Sngie 271313535Sngieatf_test_case ra_flush_defrouter_entries cleanup 272313535Sngiera_flush_defrouter_entries_head() 273313535Sngie{ 274313535Sngie 275313535Sngie atf_set "descr" "Tests for flushing default routers (ndp -R)" 276313535Sngie atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 277313535Sngie} 278313535Sngie 279313535Sngiera_flush_defrouter_entries_body() 280313535Sngie{ 281313535Sngie 282313535Sngie rump_server_fs_start $RUMPSRV netinet6 283313535Sngie rump_server_start $RUMPCLI netinet6 284313535Sngie 285313535Sngie setup_shmif0 ${RUMPSRV} ${IP6SRV} 286313535Sngie setup_shmif0 ${RUMPCLI} ${IP6CLI} 287313535Sngie 288313535Sngie init_server $RUMPSRV 289313535Sngie 290313535Sngie create_rtadvdconfig 291313535Sngie 292313535Sngie export RUMP_SERVER=${RUMPCLI} 293313535Sngie atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 294313535Sngie unset RUMP_SERVER 295313535Sngie 296313535Sngie start_rtadvd $RUMPSRV $PIDFILE 297313535Sngie sleep $WAITTIME 298313535Sngie 299313535Sngie check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 300313535Sngie 301313535Sngie export RUMP_SERVER=${RUMPCLI} 302313535Sngie 303313535Sngie # Terminate rtadvd to prevent new RA messages from coming 304313535Sngie # Note that ifconfig down; kill -TERM doesn't work 305313535Sngie kill -KILL `cat ${PIDFILE}` 306313535Sngie 307313535Sngie # Flush all the entries in the default router list 308313535Sngie atf_check -s exit:0 rump.ndp -R 309313535Sngie 310313535Sngie $DEBUG && dump_entries 311313535Sngie atf_check -s exit:0 -o empty rump.ndp -r 312313535Sngie atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p 313313535Sngie atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 314313535Sngie atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a 315313535Sngie atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a 316303980Sngie atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6 317303980Sngie unset RUMP_SERVER 318303980Sngie 319313535Sngie rump_server_destroy_ifaces 320313535Sngie} 321313535Sngie 322313535Sngiera_flush_defrouter_entries_cleanup() 323313535Sngie{ 324313535Sngie 325313535Sngie $DEBUG && dump 326313535Sngie cleanup 327313535Sngie} 328313535Sngie 329313535Sngieatf_test_case ra_delete_address cleanup 330313535Sngiera_delete_address_head() 331313535Sngie{ 332313535Sngie 333313535Sngie atf_set "descr" "Tests for deleting auto-configured address" 334313535Sngie atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 335313535Sngie} 336313535Sngie 337313535Sngiera_delete_address_body() 338313535Sngie{ 339313535Sngie 340313535Sngie rump_server_fs_start $RUMPSRV netinet6 341313535Sngie rump_server_start $RUMPCLI netinet6 342313535Sngie 343313535Sngie setup_shmif0 ${RUMPSRV} ${IP6SRV} 344313535Sngie setup_shmif0 ${RUMPCLI} ${IP6CLI} 345313535Sngie 346313535Sngie init_server $RUMPSRV 347313535Sngie 348313535Sngie create_rtadvdconfig 349313535Sngie 350313535Sngie export RUMP_SERVER=${RUMPCLI} 351313535Sngie atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 352313535Sngie unset RUMP_SERVER 353313535Sngie 354313535Sngie start_rtadvd $RUMPSRV $PIDFILE 355313535Sngie sleep $WAITTIME 356313535Sngie 357313535Sngie check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 358313535Sngie 359313535Sngie export RUMP_SERVER=${RUMPCLI} 360313535Sngie $DEBUG && rump.ifconfig shmif0 361313535Sngie atf_check -s exit:0 rump.ifconfig shmif0 inet6 \ 362313535Sngie $(rump.ifconfig shmif0 |awk '/AUTOCONF/ {print $2}') delete 363313535Sngie unset RUMP_SERVER 364313535Sngie 365303980Sngie atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 366303980Sngie wait_term ${PIDFILE} 367303980Sngie 368313535Sngie rump_server_destroy_ifaces 369303980Sngie} 370303980Sngie 371313535Sngiera_delete_address_cleanup() 372303980Sngie{ 373303980Sngie 374303980Sngie if [ -f ${PIDFILE} ]; then 375303980Sngie kill -TERM `cat ${PIDFILE}` 376303980Sngie wait_term ${PIDFILE} 377303980Sngie fi 378303980Sngie 379313535Sngie $DEBUG && dump 380313535Sngie cleanup 381303980Sngie} 382303980Sngie 383313535Sngieatf_test_case ra_multiple_routers cleanup 384313535Sngiera_multiple_routers_head() 385313535Sngie{ 386313535Sngie 387313535Sngie atf_set "descr" "Tests for multiple routers" 388313535Sngie atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 389313535Sngie} 390313535Sngie 391313535Sngiera_multiple_routers_body() 392313535Sngie{ 393313535Sngie local n= 394313535Sngie 395313535Sngie rump_server_fs_start $RUMPSRV netinet6 396313535Sngie rump_server_fs_start $RUMPSRV3 netinet6 397313535Sngie rump_server_start $RUMPCLI netinet6 398313535Sngie 399313535Sngie setup_shmif0 ${RUMPSRV} ${IP6SRV} 400313535Sngie setup_shmif0 ${RUMPSRV3} ${IP6SRV3} 401313535Sngie setup_shmif0 ${RUMPCLI} ${IP6CLI} 402313535Sngie 403313535Sngie init_server $RUMPSRV 404313535Sngie init_server $RUMPSRV3 405313535Sngie 406313535Sngie create_rtadvdconfig 407313535Sngie 408313535Sngie export RUMP_SERVER=${RUMPCLI} 409313535Sngie atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 410313535Sngie unset RUMP_SERVER 411313535Sngie 412313535Sngie start_rtadvd $RUMPSRV $PIDFILE 413313535Sngie start_rtadvd $RUMPSRV3 $PIDFILE3 414313535Sngie sleep $WAITTIME 415313535Sngie 416313535Sngie check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 417313535Sngie check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX 418313535Sngie 419313535Sngie export RUMP_SERVER=$RUMPCLI 420313535Sngie # Two prefixes are advertised by differnt two routers 421313535Sngie n=$(rump.ndp -p |grep 'advertised by' |wc -l) 422313535Sngie atf_check_equal $n 2 423313535Sngie unset RUMP_SERVER 424313535Sngie 425313535Sngie atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 426313535Sngie wait_term ${PIDFILE} 427313535Sngie atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}` 428313535Sngie wait_term ${PIDFILE3} 429313535Sngie 430313535Sngie rump_server_destroy_ifaces 431313535Sngie} 432313535Sngie 433313535Sngiera_multiple_routers_cleanup() 434313535Sngie{ 435313535Sngie 436313535Sngie if [ -f ${PIDFILE} ]; then 437313535Sngie kill -TERM `cat ${PIDFILE}` 438313535Sngie wait_term ${PIDFILE} 439313535Sngie fi 440313535Sngie if [ -f ${PIDFILE3} ]; then 441313535Sngie kill -TERM `cat ${PIDFILE3}` 442313535Sngie wait_term ${PIDFILE3} 443313535Sngie fi 444313535Sngie 445313535Sngie $DEBUG && dump 446313535Sngie cleanup 447313535Sngie} 448313535Sngie 449313535Sngieatf_test_case ra_multiple_routers_single_prefix cleanup 450313535Sngiera_multiple_routers_single_prefix_head() 451313535Sngie{ 452313535Sngie 453313535Sngie atf_set "descr" "Tests for multiple routers with a single prefix" 454313535Sngie atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 455313535Sngie} 456313535Sngie 457313535Sngiera_multiple_routers_single_prefix_body() 458313535Sngie{ 459313535Sngie local n= 460313535Sngie 461313535Sngie rump_server_fs_start $RUMPSRV netinet6 462313535Sngie rump_server_fs_start $RUMPSRV1_2 netinet6 463313535Sngie rump_server_start $RUMPCLI netinet6 464313535Sngie 465313535Sngie setup_shmif0 ${RUMPSRV} ${IP6SRV} 466313535Sngie setup_shmif0 ${RUMPSRV1_2} ${IP6SRV1_2} 467313535Sngie setup_shmif0 ${RUMPCLI} ${IP6CLI} 468313535Sngie 469313535Sngie init_server $RUMPSRV 470313535Sngie init_server $RUMPSRV1_2 471313535Sngie 472313535Sngie create_rtadvdconfig 473313535Sngie 474313535Sngie export RUMP_SERVER=${RUMPCLI} 475313535Sngie atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 476313535Sngie unset RUMP_SERVER 477313535Sngie 478313535Sngie start_rtadvd $RUMPSRV $PIDFILE 479313535Sngie start_rtadvd $RUMPSRV1_2 $PIDFILE1_2 480313535Sngie sleep $WAITTIME 481313535Sngie 482313535Sngie check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 483313535Sngie check_entries $RUMPCLI $RUMPSRV1_2 $IP6SRV_PREFIX 484313535Sngie 485313535Sngie export RUMP_SERVER=$RUMPCLI 486313535Sngie # One prefix is advertised by differnt two routers 487313535Sngie n=$(rump.ndp -p |grep 'advertised by' |wc -l) 488313535Sngie atf_check_equal $n 1 489313535Sngie unset RUMP_SERVER 490313535Sngie 491313535Sngie atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 492313535Sngie wait_term ${PIDFILE} 493313535Sngie atf_check -s exit:0 kill -TERM `cat ${PIDFILE1_2}` 494313535Sngie wait_term ${PIDFILE1_2} 495313535Sngie 496313535Sngie rump_server_destroy_ifaces 497313535Sngie} 498313535Sngie 499313535Sngiera_multiple_routers_single_prefix_cleanup() 500313535Sngie{ 501313535Sngie 502313535Sngie if [ -f ${PIDFILE} ]; then 503313535Sngie kill -TERM `cat ${PIDFILE}` 504313535Sngie wait_term ${PIDFILE} 505313535Sngie fi 506313535Sngie if [ -f ${PIDFILE1_2} ]; then 507313535Sngie kill -TERM `cat ${PIDFILE1_2}` 508313535Sngie wait_term ${PIDFILE1_2} 509313535Sngie fi 510313535Sngie 511313535Sngie $DEBUG && dump 512313535Sngie cleanup 513313535Sngie} 514313535Sngie 515313535Sngieatf_test_case ra_multiple_routers_maxifprefixes cleanup 516313535Sngiera_multiple_routers_maxifprefixes_head() 517313535Sngie{ 518313535Sngie 519313535Sngie atf_set "descr" "Tests for exceeding the number of maximum prefixes" 520313535Sngie atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 521313535Sngie} 522313535Sngie 523313535Sngiera_multiple_routers_maxifprefixes_body() 524313535Sngie{ 525313535Sngie local n= 526313535Sngie 527313535Sngie rump_server_fs_start $RUMPSRV netinet6 528313535Sngie rump_server_fs_start $RUMPSRV3 netinet6 529313535Sngie rump_server_fs_start $RUMPSRV4 netinet6 530313535Sngie rump_server_start $RUMPCLI netinet6 531313535Sngie 532313535Sngie setup_shmif0 ${RUMPSRV} ${IP6SRV} 533313535Sngie setup_shmif0 ${RUMPSRV3} ${IP6SRV3} 534313535Sngie setup_shmif0 ${RUMPSRV4} ${IP6SRV4} 535313535Sngie setup_shmif0 ${RUMPCLI} ${IP6CLI} 536313535Sngie 537313535Sngie init_server $RUMPSRV 538313535Sngie init_server $RUMPSRV3 539313535Sngie init_server $RUMPSRV4 540313535Sngie 541313535Sngie create_rtadvdconfig 542313535Sngie 543313535Sngie export RUMP_SERVER=${RUMPCLI} 544313535Sngie atf_check -s exit:0 -o match:'0.->.1' \ 545313535Sngie rump.sysctl -w net.inet6.ip6.accept_rtadv=1 546313535Sngie # Limit the maximum number of prefix entries to 2 547313535Sngie atf_check -s exit:0 -o match:'16.->.2' \ 548313535Sngie rump.sysctl -w net.inet6.ip6.maxifprefixes=2 549313535Sngie unset RUMP_SERVER 550313535Sngie 551313535Sngie start_rtadvd $RUMPSRV $PIDFILE 552313535Sngie start_rtadvd $RUMPSRV3 $PIDFILE3 553313535Sngie sleep $WAITTIME 554313535Sngie 555313535Sngie check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 556313535Sngie check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX 557313535Sngie 558313535Sngie start_rtadvd $RUMPSRV4 $PIDFILE4 559313535Sngie sleep $WAITTIME 560313535Sngie 561313535Sngie export RUMP_SERVER=${RUMPCLI} 562313535Sngie $DEBUG && dump_entries 563313535Sngie # There should remain two prefixes 564313535Sngie n=$(rump.ndp -p |grep 'advertised by' |wc -l) 565313535Sngie atf_check_equal $n 2 566313535Sngie # TODO check other conditions 567313535Sngie unset RUMP_SERVER 568313535Sngie 569313535Sngie atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 570313535Sngie wait_term ${PIDFILE} 571313535Sngie atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}` 572313535Sngie wait_term ${PIDFILE3} 573313535Sngie atf_check -s exit:0 kill -TERM `cat ${PIDFILE4}` 574313535Sngie wait_term ${PIDFILE4} 575313535Sngie 576313535Sngie rump_server_destroy_ifaces 577313535Sngie} 578313535Sngie 579313535Sngiera_multiple_routers_maxifprefixes_cleanup() 580313535Sngie{ 581313535Sngie 582313535Sngie if [ -f ${PIDFILE} ]; then 583313535Sngie kill -TERM `cat ${PIDFILE}` 584313535Sngie wait_term ${PIDFILE} 585313535Sngie fi 586313535Sngie if [ -f ${PIDFILE3} ]; then 587313535Sngie kill -TERM `cat ${PIDFILE3}` 588313535Sngie wait_term ${PIDFILE3} 589313535Sngie fi 590313535Sngie if [ -f ${PIDFILE4} ]; then 591313535Sngie kill -TERM `cat ${PIDFILE4}` 592313535Sngie wait_term ${PIDFILE4} 593313535Sngie fi 594313535Sngie 595313535Sngie $DEBUG && dump 596313535Sngie cleanup 597313535Sngie} 598313535Sngie 599313535Sngieatf_test_case ra_temporary_address cleanup 600313535Sngiera_temporary_address_head() 601313535Sngie{ 602313535Sngie 603313535Sngie atf_set "descr" "Tests for IPv6 temporary address" 604313535Sngie atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 605313535Sngie} 606313535Sngie 607314817Sngiecheck_echo_request_pkt() 608314817Sngie{ 609314817Sngie local pkt="$2 > $3: .+ echo request" 610314817Sngie 611314817Sngie extract_new_packets $1 > ./out 612314817Sngie $DEBUG && echo $pkt 613314817Sngie $DEBUG && cat ./out 614314817Sngie atf_check -s exit:0 -o match:"$pkt" cat ./out 615314817Sngie} 616314817Sngie 617313535Sngiera_temporary_address_body() 618313535Sngie{ 619314817Sngie local ip_auto= ip_temp= 620313535Sngie 621313535Sngie rump_server_fs_start $RUMPSRV netinet6 622313535Sngie rump_server_start $RUMPCLI netinet6 623313535Sngie 624314817Sngie setup_shmif0 $RUMPSRV $IP6SRV 625313535Sngie init_server $RUMPSRV 626314817Sngie setup_shmif0 $RUMPCLI $IP6CLI 627313535Sngie 628314817Sngie export RUMP_SERVER=$RUMPCLI 629313535Sngie atf_check -s exit:0 -o match:'0.->.1' \ 630313535Sngie rump.sysctl -w net.inet6.ip6.accept_rtadv=1 631313535Sngie atf_check -s exit:0 -o match:'0.->.1' \ 632313535Sngie rump.sysctl -w net.inet6.ip6.use_tempaddr=1 633313535Sngie unset RUMP_SERVER 634313535Sngie 635314817Sngie create_rtadvdconfig 636313535Sngie start_rtadvd $RUMPSRV $PIDFILE 637313535Sngie sleep $WAITTIME 638313535Sngie 639313535Sngie check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 640313535Sngie 641314817Sngie export RUMP_SERVER=$RUMPCLI 642314817Sngie 643313535Sngie # Check temporary address 644314817Sngie atf_check -s exit:0 \ 645314817Sngie -o match:"$IP6SRV_PREFIX.+<(TENTATIVE,)?AUTOCONF,TEMPORARY>" \ 646313535Sngie rump.ifconfig shmif0 inet6 647314817Sngie 648314817Sngie # 649314817Sngie # Testing net.inet6.ip6.prefer_tempaddr 650314817Sngie # 651314817Sngie atf_check -s exit:0 rump.ifconfig -w 10 652314817Sngie $DEBUG && rump.ifconfig shmif0 653314817Sngie ip_auto=$(rump.ifconfig shmif0 |awk '/<AUTOCONF>/ {sub(/\/[0-9]*/, ""); print $2;}') 654314817Sngie ip_temp=$(rump.ifconfig shmif0 |awk '/<AUTOCONF,TEMPORARY>/ {sub(/\/[0-9]*/, ""); print $2;}') 655314817Sngie $DEBUG && echo $ip_auto $ip_temp 656314817Sngie 657314817Sngie # Ignore old packets 658314817Sngie extract_new_packets bus1 > /dev/null 659314817Sngie 660314817Sngie atf_check -s exit:0 -o ignore rump.ping6 -n -X 2 -c 1 $IP6SRV 661314817Sngie # autoconf (non-temporal) address should be used as the source address 662314817Sngie check_echo_request_pkt bus1 $ip_auto $IP6SRV 663314817Sngie 664314817Sngie # Enable net.inet6.ip6.prefer_tempaddr 665314817Sngie atf_check -s exit:0 -o match:'0.->.1' \ 666314817Sngie rump.sysctl -w net.inet6.ip6.prefer_tempaddr=1 667314817Sngie 668314817Sngie atf_check -s exit:0 -o ignore rump.ping6 -n -X 2 -c 1 $IP6SRV 669314817Sngie # autoconf, temporal address should be used as the source address 670314817Sngie check_echo_request_pkt bus1 $ip_temp $IP6SRV 671314817Sngie 672313535Sngie unset RUMP_SERVER 673313535Sngie 674313535Sngie atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 675314817Sngie wait_term $PIDFILE 676313535Sngie 677313535Sngie rump_server_destroy_ifaces 678313535Sngie} 679313535Sngie 680313535Sngiera_temporary_address_cleanup() 681313535Sngie{ 682313535Sngie 683313535Sngie if [ -f ${PIDFILE} ]; then 684313535Sngie kill -TERM `cat ${PIDFILE}` 685313535Sngie wait_term ${PIDFILE} 686313535Sngie fi 687313535Sngie 688313535Sngie $DEBUG && dump 689313535Sngie cleanup 690313535Sngie} 691313535Sngie 692303980Sngieatf_init_test_cases() 693303980Sngie{ 694303980Sngie 695313535Sngie atf_add_test_case ra_basic 696313535Sngie atf_add_test_case ra_flush_prefix_entries 697313535Sngie atf_add_test_case ra_flush_defrouter_entries 698313535Sngie atf_add_test_case ra_delete_address 699313535Sngie atf_add_test_case ra_multiple_routers 700313535Sngie atf_add_test_case ra_multiple_routers_single_prefix 701313535Sngie atf_add_test_case ra_multiple_routers_maxifprefixes 702313535Sngie atf_add_test_case ra_temporary_address 703303980Sngie} 704