t_ra.sh revision 1.12
1# $NetBSD: t_ra.sh,v 1.12 2016/12/16 09:11:18 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 29RUMPCLI=unix://r2 30RUMPSRV3=unix://r3 31IP6SRV=fc00:1::1 32IP6SRV_PREFIX=fc00:1: 33IP6CLI=fc00:2::2 34IP6SRV3=fc00:3::1 35IP6SRV3_PREFIX=fc00:3: 36PIDFILE=./rump.rtadvd.pid 37PIDFILE3=./rump.rtadvd.pid3 38CONFIG=./rtadvd.conf 39DEBUG=${DEBUG:-true} 40 41init_server() 42{ 43 44 export RUMP_SERVER=$1 45 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.forwarding=1 46 export LD_PRELOAD=/usr/lib/librumphijack.so 47 atf_check -s exit:0 mkdir -p /rump/var/chroot/rtadvd 48 unset LD_PRELOAD 49 unset RUMP_SERVER 50} 51 52setup_shmif0() 53{ 54 local sock=$1 55 local IP6ADDR=$2 56 57 rump_server_add_iface $sock shmif0 bus1 58 59 export RUMP_SERVER=$sock 60 atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6ADDR} 61 atf_check -s exit:0 rump.ifconfig shmif0 up 62 atf_check -s exit:0 rump.ifconfig -w 10 63 64 $DEBUG && rump.ifconfig 65} 66 67wait_term() 68{ 69 local PIDFILE=${1} 70 shift 71 72 while [ -f ${PIDFILE} ] 73 do 74 sleep 0.2 75 done 76 77 return 0 78} 79 80create_rtadvdconfig() 81{ 82 83 cat << _EOF > ${CONFIG} 84shmif0:\ 85 :mtu#1300:maxinterval#4:mininterval#3: 86_EOF 87} 88 89start_rtadvd() 90{ 91 local sock=$1 92 local pidfile=$2 93 94 export RUMP_SERVER=$sock 95 atf_check -s exit:0 rump.rtadvd -c ${CONFIG} -p $pidfile shmif0 96 atf_check -s exit:0 sleep 3 97 atf_check -s exit:0 -o ignore -e empty cat $pidfile 98 unset RUMP_SERVER 99} 100 101check_entries() 102{ 103 local cli=$1 104 local srv=$2 105 local addr_prefix=$3 106 local mac_srv= ll_srv= 107 108 ll_srv=$(get_linklocal_addr $srv shmif0) 109 mac_srv=$(get_macaddr $srv shmif0) 110 111 export RUMP_SERVER=$cli 112 $DEBUG && dump_entries 113 atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r 114 atf_check -s exit:0 -o match:'advertised' rump.ndp -p 115 atf_check -s exit:0 -o match:"${ll_srv}%shmif0 \(reachable\)" rump.ndp -p 116 atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 117 atf_check -s exit:0 \ 118 -o match:"$ll_srv%shmif0 +$mac_srv +shmif0 +(23h59m|1d0h0m)..s S R" \ 119 rump.ndp -n -a 120 atf_check -s exit:0 -o match:$addr_prefix rump.ndp -n -a 121 atf_check -s exit:0 -o match:$addr_prefix rump.ifconfig shmif0 inet6 122 unset RUMP_SERVER 123} 124 125dump_entries() 126{ 127 128 echo ndp -n -a 129 rump.ndp -n -a 130 echo ndp -p 131 rump.ndp -p 132 echo ndp -r 133 rump.ndp -r 134} 135 136atf_test_case ra_basic cleanup 137ra_basic_head() 138{ 139 140 atf_set "descr" "Tests for basic functions of router advaertisement(RA)" 141 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 142} 143 144ra_basic_body() 145{ 146 147 rump_server_fs_start $RUMPSRV netinet6 148 rump_server_start $RUMPCLI netinet6 149 150 setup_shmif0 ${RUMPSRV} ${IP6SRV} 151 init_server $RUMPSRV 152 153 setup_shmif0 ${RUMPCLI} ${IP6CLI} 154 export RUMP_SERVER=${RUMPCLI} 155 $DEBUG && rump.ndp -n -a 156 atf_check -s exit:0 -o match:'= 0' rump.sysctl net.inet6.ip6.accept_rtadv 157 unset RUMP_SERVER 158 159 create_rtadvdconfig 160 start_rtadvd $RUMPSRV $PIDFILE 161 162 export RUMP_SERVER=${RUMPCLI} 163 atf_check -s exit:0 -o empty rump.ndp -r 164 atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p 165 atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0 166 atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a 167 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a 168 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 169 unset RUMP_SERVER 170 171 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 172 wait_term ${PIDFILE} 173 174 export RUMP_SERVER=${RUMPCLI} 175 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 176 unset RUMP_SERVER 177 178 start_rtadvd $RUMPSRV $PIDFILE 179 180 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 181 182 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 183 wait_term ${PIDFILE} 184 185 rump_server_destroy_ifaces 186} 187 188ra_basic_cleanup() 189{ 190 191 if [ -f ${PIDFILE} ]; then 192 kill -TERM `cat ${PIDFILE}` 193 wait_term ${PIDFILE} 194 fi 195 196 $DEBUG && dump 197 cleanup 198} 199 200atf_test_case ra_flush_prefix_entries cleanup 201ra_flush_prefix_entries_head() 202{ 203 204 atf_set "descr" "Tests for flushing prefixes (ndp -P)" 205 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 206} 207 208ra_flush_prefix_entries_body() 209{ 210 211 rump_server_fs_start $RUMPSRV netinet6 212 rump_server_start $RUMPCLI netinet6 213 214 setup_shmif0 ${RUMPSRV} ${IP6SRV} 215 setup_shmif0 ${RUMPCLI} ${IP6CLI} 216 217 init_server $RUMPSRV 218 219 create_rtadvdconfig 220 221 export RUMP_SERVER=${RUMPCLI} 222 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 223 unset RUMP_SERVER 224 225 start_rtadvd $RUMPSRV $PIDFILE 226 227 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 228 229 export RUMP_SERVER=${RUMPCLI} 230 231 # Terminate rtadvd to prevent new RA messages from coming 232 # Note that ifconfig down; kill -TERM doesn't work 233 kill -KILL `cat ${PIDFILE}` 234 235 # Flush all the entries in the prefix list 236 atf_check -s exit:0 rump.ndp -P 237 238 $DEBUG && dump_entries 239 atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r 240 atf_check -s exit:0 -o empty rump.ndp -p 241 atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 242 atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a 243 atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a 244 atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6 245 unset RUMP_SERVER 246 247 rump_server_destroy_ifaces 248} 249 250ra_flush_prefix_entries_cleanup() 251{ 252 253 $DEBUG && dump 254 cleanup 255} 256 257atf_test_case ra_flush_defrouter_entries cleanup 258ra_flush_defrouter_entries_head() 259{ 260 261 atf_set "descr" "Tests for flushing default routers (ndp -R)" 262 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 263} 264 265ra_flush_defrouter_entries_body() 266{ 267 268 rump_server_fs_start $RUMPSRV netinet6 269 rump_server_start $RUMPCLI netinet6 270 271 setup_shmif0 ${RUMPSRV} ${IP6SRV} 272 setup_shmif0 ${RUMPCLI} ${IP6CLI} 273 274 init_server $RUMPSRV 275 276 create_rtadvdconfig 277 278 export RUMP_SERVER=${RUMPCLI} 279 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 280 unset RUMP_SERVER 281 282 start_rtadvd $RUMPSRV $PIDFILE 283 284 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 285 286 export RUMP_SERVER=${RUMPCLI} 287 288 # Terminate rtadvd to prevent new RA messages from coming 289 # Note that ifconfig down; kill -TERM doesn't work 290 kill -KILL `cat ${PIDFILE}` 291 292 # Flush all the entries in the default router list 293 atf_check -s exit:0 rump.ndp -R 294 295 $DEBUG && dump_entries 296 atf_check -s exit:0 -o empty rump.ndp -r 297 atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p 298 atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0 299 atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a 300 atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a 301 atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6 302 unset RUMP_SERVER 303 304 rump_server_destroy_ifaces 305} 306 307ra_flush_defrouter_entries_cleanup() 308{ 309 310 $DEBUG && dump 311 cleanup 312} 313 314atf_test_case ra_delete_address cleanup 315ra_delete_address_head() 316{ 317 318 atf_set "descr" "Tests for deleting auto-configured address" 319 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 320} 321 322ra_delete_address_body() 323{ 324 325 rump_server_fs_start $RUMPSRV netinet6 326 rump_server_start $RUMPCLI netinet6 327 328 setup_shmif0 ${RUMPSRV} ${IP6SRV} 329 setup_shmif0 ${RUMPCLI} ${IP6CLI} 330 331 init_server $RUMPSRV 332 333 create_rtadvdconfig 334 335 export RUMP_SERVER=${RUMPCLI} 336 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 337 unset RUMP_SERVER 338 339 start_rtadvd $RUMPSRV $PIDFILE 340 341 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 342 343 export RUMP_SERVER=${RUMPCLI} 344 $DEBUG && rump.ifconfig shmif0 345 atf_check -s exit:0 rump.ifconfig shmif0 inet6 \ 346 $(rump.ifconfig shmif0 |awk '/AUTOCONF/ {print $2}') delete 347 unset RUMP_SERVER 348 349 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 350 wait_term ${PIDFILE} 351 352 rump_server_destroy_ifaces 353} 354 355ra_delete_address_cleanup() 356{ 357 358 if [ -f ${PIDFILE} ]; then 359 kill -TERM `cat ${PIDFILE}` 360 wait_term ${PIDFILE} 361 fi 362 363 $DEBUG && dump 364 cleanup 365} 366 367atf_test_case ra_multiple_routers cleanup 368ra_multiple_routers_head() 369{ 370 371 atf_set "descr" "Tests for deleting auto-configured address" 372 atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig" 373} 374 375ra_multiple_routers_body() 376{ 377 378 rump_server_fs_start $RUMPSRV netinet6 379 rump_server_fs_start $RUMPSRV3 netinet6 380 rump_server_start $RUMPCLI netinet6 381 382 setup_shmif0 ${RUMPSRV} ${IP6SRV} 383 setup_shmif0 ${RUMPSRV3} ${IP6SRV3} 384 setup_shmif0 ${RUMPCLI} ${IP6CLI} 385 386 init_server $RUMPSRV 387 init_server $RUMPSRV3 388 389 create_rtadvdconfig 390 391 export RUMP_SERVER=${RUMPCLI} 392 atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1 393 unset RUMP_SERVER 394 395 start_rtadvd $RUMPSRV $PIDFILE 396 start_rtadvd $RUMPSRV3 $PIDFILE3 397 398 check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX 399 check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX 400 401 atf_check -s exit:0 kill -TERM `cat ${PIDFILE}` 402 wait_term ${PIDFILE} 403 atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}` 404 wait_term ${PIDFILE3} 405 406 rump_server_destroy_ifaces 407} 408 409ra_multiple_routers_cleanup() 410{ 411 412 if [ -f ${PIDFILE} ]; then 413 kill -TERM `cat ${PIDFILE}` 414 wait_term ${PIDFILE} 415 fi 416 if [ -f ${PIDFILE3} ]; then 417 kill -TERM `cat ${PIDFILE3}` 418 wait_term ${PIDFILE3} 419 fi 420 421 $DEBUG && dump 422 cleanup 423} 424 425atf_init_test_cases() 426{ 427 428 atf_add_test_case ra_basic 429 atf_add_test_case ra_flush_prefix_entries 430 atf_add_test_case ra_flush_defrouter_entries 431 atf_add_test_case ra_delete_address 432 atf_add_test_case ra_multiple_routers 433} 434