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