1 1.45 rin # $NetBSD: net_common.sh,v 1.45 2024/08/09 02:20:13 rin Exp $ 2 1.1 ozaki # 3 1.1 ozaki # Copyright (c) 2016 Internet Initiative Japan Inc. 4 1.1 ozaki # All rights reserved. 5 1.1 ozaki # 6 1.1 ozaki # Redistribution and use in source and binary forms, with or without 7 1.1 ozaki # modification, are permitted provided that the following conditions 8 1.1 ozaki # are met: 9 1.1 ozaki # 1. Redistributions of source code must retain the above copyright 10 1.1 ozaki # notice, this list of conditions and the following disclaimer. 11 1.1 ozaki # 2. Redistributions in binary form must reproduce the above copyright 12 1.1 ozaki # notice, this list of conditions and the following disclaimer in the 13 1.1 ozaki # documentation and/or other materials provided with the distribution. 14 1.1 ozaki # 15 1.1 ozaki # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16 1.1 ozaki # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 1.1 ozaki # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 1.1 ozaki # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19 1.1 ozaki # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 1.1 ozaki # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 1.1 ozaki # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 1.1 ozaki # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 1.1 ozaki # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 1.1 ozaki # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 1.1 ozaki # POSSIBILITY OF SUCH DAMAGE. 26 1.1 ozaki # 27 1.1 ozaki 28 1.1 ozaki # 29 1.1 ozaki # Common utility functions for tests/net 30 1.1 ozaki # 31 1.1 ozaki 32 1.41 christos export PATH="/sbin:/usr/sbin:/bin:/usr/bin" 33 1.41 christos 34 1.12 ozaki HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so \ 35 1.12 ozaki RUMPHIJACK=path=/rump,socket=all:nolocal,sysctl=yes" 36 1.14 ozaki ONEDAYISH="(23h5[0-9]m|1d0h0m)[0-9]+s ?" 37 1.2 ozaki 38 1.1 ozaki extract_new_packets() 39 1.1 ozaki { 40 1.1 ozaki local bus=$1 41 1.1 ozaki local old=./.__old 42 1.1 ozaki 43 1.1 ozaki if [ ! -f $old ]; then 44 1.1 ozaki old=/dev/null 45 1.1 ozaki fi 46 1.1 ozaki 47 1.25 kre shmif_dumpbus -p - $bus 2>/dev/null | 48 1.1 ozaki tcpdump -n -e -r - 2>/dev/null > ./.__new 49 1.25 kre diff -u $old ./.__new | grep '^+' | cut -d '+' -f 2 > ./.__diff 50 1.1 ozaki mv -f ./.__new ./.__old 51 1.1 ozaki cat ./.__diff 52 1.1 ozaki } 53 1.1 ozaki 54 1.3 ozaki check_route() 55 1.3 ozaki { 56 1.3 ozaki local target=$1 57 1.3 ozaki local gw=$2 58 1.3 ozaki local flags=${3:-\.\+} 59 1.3 ozaki local ifname=${4:-\.\+} 60 1.3 ozaki 61 1.25 kre target=$(echo $target | sed 's/\./\\./g') 62 1.3 ozaki if [ "$gw" = "" ]; then 63 1.3 ozaki gw=".+" 64 1.3 ozaki else 65 1.25 kre gw=$(echo $gw | sed 's/\./\\./g') 66 1.3 ozaki fi 67 1.3 ozaki 68 1.3 ozaki atf_check -s exit:0 -e ignore \ 69 1.3 ozaki -o match:"^$target +$gw +$flags +- +- +.+ +$ifname" \ 70 1.3 ozaki rump.netstat -rn 71 1.3 ozaki } 72 1.3 ozaki 73 1.3 ozaki check_route_flags() 74 1.3 ozaki { 75 1.3 ozaki 76 1.3 ozaki check_route "$1" "" "$2" "" 77 1.3 ozaki } 78 1.3 ozaki 79 1.3 ozaki check_route_gw() 80 1.3 ozaki { 81 1.3 ozaki 82 1.3 ozaki check_route "$1" "$2" "" "" 83 1.3 ozaki } 84 1.3 ozaki 85 1.3 ozaki check_route_no_entry() 86 1.3 ozaki { 87 1.25 kre local target=$(echo "$1" | sed 's/\./\\./g') 88 1.3 ozaki 89 1.25 kre atf_check -s exit:0 -e ignore -o not-match:"^$target" rump.netstat -rn 90 1.3 ozaki } 91 1.4 ozaki 92 1.4 ozaki get_linklocal_addr() 93 1.4 ozaki { 94 1.4 ozaki 95 1.25 kre RUMP_SERVER=${1} rump.ifconfig ${2} inet6 | 96 1.4 ozaki awk "/fe80/ {sub(/%$2/, \"\"); sub(/\\/[0-9]*/, \"\"); print \$2;}" 97 1.4 ozaki 98 1.4 ozaki return 0 99 1.4 ozaki } 100 1.5 ozaki 101 1.5 ozaki get_macaddr() 102 1.5 ozaki { 103 1.5 ozaki 104 1.25 kre RUMP_SERVER=${1} rump.ifconfig ${2} | awk '/address/ {print $2;}' 105 1.5 ozaki } 106 1.6 ozaki 107 1.6 ozaki HTTPD_PID=./.__httpd.pid 108 1.6 ozaki start_httpd() 109 1.6 ozaki { 110 1.6 ozaki local sock=$1 111 1.6 ozaki local ip=$2 112 1.6 ozaki local backup=$RUMP_SERVER 113 1.6 ozaki 114 1.6 ozaki export RUMP_SERVER=$sock 115 1.6 ozaki 116 1.6 ozaki # start httpd in daemon mode 117 1.6 ozaki atf_check -s exit:0 env LD_PRELOAD=/usr/lib/librumphijack.so \ 118 1.6 ozaki /usr/libexec/httpd -P $HTTPD_PID -i $ip -b -s $(pwd) 119 1.6 ozaki 120 1.6 ozaki export RUMP_SERVER=$backup 121 1.6 ozaki 122 1.6 ozaki sleep 3 123 1.6 ozaki } 124 1.6 ozaki 125 1.6 ozaki stop_httpd() 126 1.6 ozaki { 127 1.6 ozaki 128 1.6 ozaki if [ -f $HTTPD_PID ]; then 129 1.6 ozaki kill -9 $(cat $HTTPD_PID) 130 1.6 ozaki rm -f $HTTPD_PID 131 1.6 ozaki sleep 1 132 1.6 ozaki fi 133 1.6 ozaki } 134 1.7 ozaki 135 1.12 ozaki NC_PID=./.__nc.pid 136 1.12 ozaki start_nc_server() 137 1.12 ozaki { 138 1.12 ozaki local sock=$1 139 1.12 ozaki local port=$2 140 1.12 ozaki local outfile=$3 141 1.16 ozaki local proto=${4:-ipv4} 142 1.44 ozaki local extra_opts="$5" 143 1.12 ozaki local backup=$RUMP_SERVER 144 1.25 kre local opts= 145 1.12 ozaki 146 1.12 ozaki export RUMP_SERVER=$sock 147 1.12 ozaki 148 1.16 ozaki if [ $proto = ipv4 ]; then 149 1.16 ozaki opts="-l -4" 150 1.16 ozaki else 151 1.16 ozaki opts="-l -6" 152 1.16 ozaki fi 153 1.44 ozaki opts="$opts $extra_opts" 154 1.16 ozaki 155 1.25 kre env LD_PRELOAD=/usr/lib/librumphijack.so nc $opts $port > $outfile & 156 1.25 kre echo $! > $NC_PID 157 1.12 ozaki 158 1.19 ozaki if [ $proto = ipv4 ]; then 159 1.19 ozaki $DEBUG && rump.netstat -a -f inet 160 1.19 ozaki else 161 1.19 ozaki $DEBUG && rump.netstat -a -f inet6 162 1.19 ozaki fi 163 1.12 ozaki 164 1.12 ozaki export RUMP_SERVER=$backup 165 1.12 ozaki 166 1.12 ozaki sleep 1 167 1.12 ozaki } 168 1.12 ozaki 169 1.12 ozaki stop_nc_server() 170 1.12 ozaki { 171 1.12 ozaki 172 1.12 ozaki if [ -f $NC_PID ]; then 173 1.12 ozaki kill -9 $(cat $NC_PID) 174 1.12 ozaki rm -f $NC_PID 175 1.12 ozaki sleep 1 176 1.12 ozaki fi 177 1.12 ozaki } 178 1.12 ozaki 179 1.31 bad BASIC_LIBS="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif" 180 1.31 bad FS_LIBS="$BASIC_LIBS -lrumpdev -lrumpvfs -lrumpfs_ffs" 181 1.31 bad CRYPTO_LIBS="$BASIC_LIBS -lrumpdev -lrumpdev_opencrypto \ 182 1.15 ozaki -lrumpkern_z -lrumpkern_crypto" 183 1.31 bad NPF_LIBS="$BASIC_LIBS -lrumpdev -lrumpvfs -lrumpdev_bpf -lrumpnet_npf" 184 1.31 bad CRYPTO_NPF_LIBS="$CRYPTO_LIBS -lrumpvfs -lrumpdev_bpf -lrumpnet_npf" 185 1.42 yamaguch BPF_LIBS="$BASIC_LIBS -lrumpdev -lrumpvfs -lrumpdev_bpf" 186 1.7 ozaki 187 1.7 ozaki # We cannot keep variables between test phases, so need to store in files 188 1.7 ozaki _rump_server_socks=./.__socks 189 1.7 ozaki _rump_server_ifaces=./.__ifaces 190 1.7 ozaki _rump_server_buses=./.__buses 191 1.39 ozaki _rump_server_macaddrs=./.__macaddrs 192 1.7 ozaki 193 1.17 ozaki DEBUG_SYSCTL_ENTRIES="net.inet.arp.debug net.inet6.icmp6.nd6_debug \ 194 1.17 ozaki net.inet.ipsec.debug" 195 1.17 ozaki 196 1.18 ozaki IPSEC_KEY_DEBUG=${IPSEC_KEY_DEBUG:-false} 197 1.18 ozaki 198 1.7 ozaki _rump_server_start_common() 199 1.7 ozaki { 200 1.7 ozaki local sock=$1 201 1.17 ozaki local backup=$RUMP_SERVER 202 1.7 ozaki 203 1.7 ozaki shift 1 204 1.7 ozaki 205 1.25 kre atf_check -s exit:0 rump_server "$@" "$sock" 206 1.7 ozaki 207 1.17 ozaki if $DEBUG; then 208 1.17 ozaki # Enable debugging features in the kernel 209 1.17 ozaki export RUMP_SERVER=$sock 210 1.17 ozaki for ent in $DEBUG_SYSCTL_ENTRIES; do 211 1.17 ozaki if rump.sysctl -q $ent; then 212 1.17 ozaki atf_check -s exit:0 rump.sysctl -q -w $ent=1 213 1.17 ozaki fi 214 1.17 ozaki done 215 1.17 ozaki export RUMP_SERVER=$backup 216 1.17 ozaki fi 217 1.18 ozaki if $IPSEC_KEY_DEBUG; then 218 1.18 ozaki # Enable debugging features in the kernel 219 1.18 ozaki export RUMP_SERVER=$sock 220 1.18 ozaki if rump.sysctl -q net.key.debug; then 221 1.18 ozaki atf_check -s exit:0 \ 222 1.18 ozaki rump.sysctl -q -w net.key.debug=0xffff 223 1.18 ozaki fi 224 1.18 ozaki export RUMP_SERVER=$backup 225 1.18 ozaki fi 226 1.17 ozaki 227 1.7 ozaki echo $sock >> $_rump_server_socks 228 1.7 ozaki $DEBUG && cat $_rump_server_socks 229 1.7 ozaki } 230 1.7 ozaki 231 1.7 ozaki rump_server_start() 232 1.7 ozaki { 233 1.7 ozaki local sock=$1 234 1.25 kre local lib= 235 1.7 ozaki local libs="$BASIC_LIBS" 236 1.7 ozaki 237 1.7 ozaki shift 1 238 1.7 ozaki 239 1.25 kre for lib 240 1.25 kre do 241 1.7 ozaki libs="$libs -lrumpnet_$lib" 242 1.7 ozaki done 243 1.7 ozaki 244 1.7 ozaki _rump_server_start_common $sock $libs 245 1.7 ozaki 246 1.7 ozaki return 0 247 1.7 ozaki } 248 1.7 ozaki 249 1.7 ozaki rump_server_fs_start() 250 1.7 ozaki { 251 1.7 ozaki local sock=$1 252 1.25 kre local lib= 253 1.7 ozaki local libs="$FS_LIBS" 254 1.7 ozaki 255 1.7 ozaki shift 1 256 1.7 ozaki 257 1.25 kre for lib 258 1.25 kre do 259 1.7 ozaki libs="$libs -lrumpnet_$lib" 260 1.7 ozaki done 261 1.7 ozaki 262 1.7 ozaki _rump_server_start_common $sock $libs 263 1.7 ozaki 264 1.7 ozaki return 0 265 1.7 ozaki } 266 1.7 ozaki 267 1.15 ozaki rump_server_crypto_start() 268 1.15 ozaki { 269 1.15 ozaki local sock=$1 270 1.25 kre local lib= 271 1.15 ozaki local libs="$CRYPTO_LIBS" 272 1.15 ozaki 273 1.15 ozaki shift 1 274 1.15 ozaki 275 1.25 kre for lib 276 1.25 kre do 277 1.15 ozaki libs="$libs -lrumpnet_$lib" 278 1.15 ozaki done 279 1.15 ozaki 280 1.15 ozaki _rump_server_start_common $sock $libs 281 1.15 ozaki 282 1.15 ozaki return 0 283 1.15 ozaki } 284 1.15 ozaki 285 1.23 ozaki rump_server_npf_start() 286 1.23 ozaki { 287 1.23 ozaki local sock=$1 288 1.25 kre local lib= 289 1.23 ozaki local libs="$NPF_LIBS" 290 1.23 ozaki 291 1.23 ozaki shift 1 292 1.23 ozaki 293 1.25 kre for lib 294 1.25 kre do 295 1.23 ozaki libs="$libs -lrumpnet_$lib" 296 1.23 ozaki done 297 1.23 ozaki 298 1.23 ozaki _rump_server_start_common $sock $libs 299 1.23 ozaki 300 1.23 ozaki return 0 301 1.23 ozaki } 302 1.23 ozaki 303 1.29 knakahar rump_server_crypto_npf_start() 304 1.29 knakahar { 305 1.29 knakahar local sock=$1 306 1.29 knakahar local lib= 307 1.29 knakahar local libs="$CRYPTO_NPF_LIBS" 308 1.29 knakahar 309 1.29 knakahar shift 1 310 1.29 knakahar 311 1.29 knakahar for lib 312 1.29 knakahar do 313 1.29 knakahar libs="$libs -lrumpnet_$lib" 314 1.29 knakahar done 315 1.29 knakahar 316 1.29 knakahar _rump_server_start_common $sock $libs 317 1.29 knakahar 318 1.29 knakahar return 0 319 1.29 knakahar } 320 1.29 knakahar 321 1.42 yamaguch rump_server_bpf_start() 322 1.42 yamaguch { 323 1.42 yamaguch local sock=$1 324 1.42 yamaguch local lib= 325 1.42 yamaguch local libs="$BPF_LIBS" 326 1.42 yamaguch 327 1.42 yamaguch shift 1 328 1.42 yamaguch 329 1.42 yamaguch for lib 330 1.42 yamaguch do 331 1.42 yamaguch libs="$libs -lrumpnet_$lib" 332 1.42 yamaguch done 333 1.42 yamaguch 334 1.42 yamaguch _rump_server_start_common $sock $libs 335 1.42 yamaguch 336 1.42 yamaguch return 0 337 1.42 yamaguch } 338 1.42 yamaguch 339 1.7 ozaki rump_server_add_iface() 340 1.7 ozaki { 341 1.7 ozaki local sock=$1 342 1.7 ozaki local ifname=$2 343 1.7 ozaki local bus=$3 344 1.7 ozaki local backup=$RUMP_SERVER 345 1.39 ozaki local macaddr= 346 1.7 ozaki 347 1.7 ozaki export RUMP_SERVER=$sock 348 1.7 ozaki atf_check -s exit:0 rump.ifconfig $ifname create 349 1.33 ozaki if [ -n "$bus" ]; then 350 1.33 ozaki atf_check -s exit:0 rump.ifconfig $ifname linkstr $bus 351 1.33 ozaki fi 352 1.40 christos 353 1.39 ozaki macaddr=$(get_macaddr $sock $ifname) 354 1.40 christos if [ -n "$macaddr" ]; then 355 1.40 christos if [ -f $_rump_server_macaddrs ]; then 356 1.40 christos atf_check -s not-exit:0 \ 357 1.40 christos grep -q $macaddr $_rump_server_macaddrs 358 1.40 christos fi 359 1.40 christos echo $macaddr >> $_rump_server_macaddrs 360 1.40 christos fi 361 1.40 christos 362 1.7 ozaki export RUMP_SERVER=$backup 363 1.7 ozaki 364 1.7 ozaki echo $sock $ifname >> $_rump_server_ifaces 365 1.7 ozaki $DEBUG && cat $_rump_server_ifaces 366 1.7 ozaki 367 1.7 ozaki echo $bus >> $_rump_server_buses 368 1.7 ozaki cat $_rump_server_buses |sort -u >./.__tmp 369 1.7 ozaki mv -f ./.__tmp $_rump_server_buses 370 1.7 ozaki $DEBUG && cat $_rump_server_buses 371 1.7 ozaki 372 1.7 ozaki return 0 373 1.7 ozaki } 374 1.7 ozaki 375 1.34 ozaki rump_server_check_poolleaks() 376 1.34 ozaki { 377 1.34 ozaki local target=$1 378 1.34 ozaki 379 1.36 ozaki # XXX rumphijack doesn't work with a binary with suid/sgid bits like 380 1.36 ozaki # vmstat. Use a copied one to drop sgid bit as a workaround until 381 1.36 ozaki # vmstat stops using kvm(3) for /dev/kmem and the sgid bit. 382 1.36 ozaki cp /usr/bin/vmstat ./vmstat 383 1.36 ozaki reqs=$($HIJACKING ./vmstat -mv | awk "/$target/ {print \$3;}") 384 1.36 ozaki rels=$($HIJACKING ./vmstat -mv | awk "/$target/ {print \$5;}") 385 1.36 ozaki rm -f ./vmstat 386 1.34 ozaki atf_check_equal '$target$reqs' '$target$rels' 387 1.34 ozaki } 388 1.34 ozaki 389 1.37 ozaki # 390 1.37 ozaki # rump_server_check_memleaks detects memory leaks. It can detect leaks of pool 391 1.37 ozaki # objects that are guaranteed to be all deallocated at this point, i.e., all 392 1.37 ozaki # created interfaces are destroyed. Currently only llentpl satisfies this 393 1.37 ozaki # constraint. This mechanism can't be applied to objects allocated through 394 1.37 ozaki # pool_cache(9) because it doesn't track released objects explicitly. 395 1.37 ozaki # 396 1.34 ozaki rump_server_check_memleaks() 397 1.34 ozaki { 398 1.34 ozaki 399 1.36 ozaki rump_server_check_poolleaks llentrypl 400 1.34 ozaki # This doesn't work for objects allocated through pool_cache 401 1.34 ozaki #rump_server_check_poolleaks mbpl 402 1.34 ozaki #rump_server_check_poolleaks mclpl 403 1.34 ozaki #rump_server_check_poolleaks socket 404 1.34 ozaki } 405 1.34 ozaki 406 1.7 ozaki rump_server_destroy_ifaces() 407 1.7 ozaki { 408 1.7 ozaki local backup=$RUMP_SERVER 409 1.28 ozaki local output=ignore 410 1.34 ozaki local reqs= rels= 411 1.7 ozaki 412 1.7 ozaki $DEBUG && cat $_rump_server_ifaces 413 1.10 ozaki 414 1.10 ozaki # Try to dump states before destroying interfaces 415 1.10 ozaki for sock in $(cat $_rump_server_socks); do 416 1.10 ozaki export RUMP_SERVER=$sock 417 1.27 ozaki if $DEBUG; then 418 1.27 ozaki output=save:/dev/stdout 419 1.27 ozaki fi 420 1.27 ozaki atf_check -s exit:0 -o $output rump.ifconfig 421 1.27 ozaki atf_check -s exit:0 -o $output rump.netstat -nr 422 1.11 ozaki # XXX still need hijacking 423 1.27 ozaki atf_check -s exit:0 -o $output $HIJACKING rump.netstat -nai 424 1.27 ozaki atf_check -s exit:0 -o $output rump.arp -na 425 1.27 ozaki atf_check -s exit:0 -o $output rump.ndp -na 426 1.27 ozaki atf_check -s exit:0 -o $output $HIJACKING ifmcstat 427 1.10 ozaki done 428 1.10 ozaki 429 1.9 ozaki # XXX using pipe doesn't work. See PR bin/51667 430 1.9 ozaki #cat $_rump_server_ifaces | while read sock ifname; do 431 1.33 ozaki # Destroy interfaces in the reverse order 432 1.33 ozaki tac $_rump_server_ifaces > __ifaces 433 1.9 ozaki while read sock ifname; do 434 1.7 ozaki export RUMP_SERVER=$sock 435 1.7 ozaki if rump.ifconfig -l |grep -q $ifname; then 436 1.38 ozaki if $DEBUG; then 437 1.38 ozaki rump.ifconfig -v $ifname 438 1.38 ozaki fi 439 1.7 ozaki atf_check -s exit:0 rump.ifconfig $ifname destroy 440 1.7 ozaki fi 441 1.7 ozaki atf_check -s exit:0 -o ignore rump.ifconfig 442 1.33 ozaki done < __ifaces 443 1.33 ozaki rm -f __ifaces 444 1.33 ozaki 445 1.34 ozaki for sock in $(cat $_rump_server_socks); do 446 1.34 ozaki export RUMP_SERVER=$sock 447 1.34 ozaki rump_server_check_memleaks 448 1.34 ozaki done 449 1.34 ozaki 450 1.7 ozaki export RUMP_SERVER=$backup 451 1.7 ozaki 452 1.7 ozaki return 0 453 1.7 ozaki } 454 1.7 ozaki 455 1.7 ozaki rump_server_halt_servers() 456 1.7 ozaki { 457 1.7 ozaki local backup=$RUMP_SERVER 458 1.7 ozaki 459 1.7 ozaki $DEBUG && cat $_rump_server_socks 460 1.7 ozaki for sock in $(cat $_rump_server_socks); do 461 1.7 ozaki env RUMP_SERVER=$sock rump.halt 462 1.7 ozaki done 463 1.7 ozaki export RUMP_SERVER=$backup 464 1.7 ozaki 465 1.7 ozaki return 0 466 1.7 ozaki } 467 1.7 ozaki 468 1.30 ozaki extract_rump_server_core() 469 1.30 ozaki { 470 1.30 ozaki 471 1.30 ozaki if [ -f rump_server.core ]; then 472 1.30 ozaki gdb -ex bt /usr/bin/rump_server rump_server.core 473 1.32 ozaki # Extract kernel logs including a panic message 474 1.32 ozaki strings rump_server.core |grep -E '^\[.+\] ' 475 1.30 ozaki fi 476 1.30 ozaki } 477 1.30 ozaki 478 1.30 ozaki dump_kernel_stats() 479 1.30 ozaki { 480 1.30 ozaki local sock=$1 481 1.30 ozaki 482 1.30 ozaki echo "### Dumping $sock" 483 1.30 ozaki export RUMP_SERVER=$sock 484 1.30 ozaki rump.ifconfig -av 485 1.30 ozaki rump.netstat -nr 486 1.30 ozaki # XXX still need hijacking 487 1.30 ozaki $HIJACKING rump.netstat -nai 488 1.36 ozaki # XXX workaround for vmstat with the sgid bit 489 1.36 ozaki cp /usr/bin/vmstat ./vmstat 490 1.36 ozaki $HIJACKING ./vmstat -m 491 1.36 ozaki rm -f ./vmstat 492 1.30 ozaki rump.arp -na 493 1.30 ozaki rump.ndp -na 494 1.30 ozaki $HIJACKING ifmcstat 495 1.30 ozaki $HIJACKING dmesg 496 1.30 ozaki } 497 1.30 ozaki 498 1.7 ozaki rump_server_dump_servers() 499 1.7 ozaki { 500 1.7 ozaki local backup=$RUMP_SERVER 501 1.7 ozaki 502 1.7 ozaki $DEBUG && cat $_rump_server_socks 503 1.7 ozaki for sock in $(cat $_rump_server_socks); do 504 1.30 ozaki dump_kernel_stats $sock 505 1.7 ozaki done 506 1.7 ozaki export RUMP_SERVER=$backup 507 1.7 ozaki 508 1.30 ozaki extract_rump_server_core 509 1.7 ozaki return 0 510 1.7 ozaki } 511 1.7 ozaki 512 1.7 ozaki rump_server_dump_buses() 513 1.7 ozaki { 514 1.7 ozaki 515 1.8 ozaki if [ ! -f $_rump_server_buses ]; then 516 1.8 ozaki return 0 517 1.8 ozaki fi 518 1.8 ozaki 519 1.7 ozaki $DEBUG && cat $_rump_server_buses 520 1.7 ozaki for bus in $(cat $_rump_server_buses); do 521 1.7 ozaki echo "### Dumping $bus" 522 1.7 ozaki shmif_dumpbus -p - $bus 2>/dev/null| tcpdump -n -e -r - 523 1.7 ozaki done 524 1.7 ozaki return 0 525 1.7 ozaki } 526 1.7 ozaki 527 1.7 ozaki cleanup() 528 1.7 ozaki { 529 1.7 ozaki 530 1.45 rin if [ -f $_rump_server_socks ]; then 531 1.45 rin rump_server_halt_servers 532 1.45 rin fi 533 1.7 ozaki } 534 1.7 ozaki 535 1.7 ozaki dump() 536 1.7 ozaki { 537 1.7 ozaki 538 1.7 ozaki rump_server_dump_servers 539 1.7 ozaki rump_server_dump_buses 540 1.7 ozaki } 541 1.20 ozaki 542 1.20 ozaki skip_if_qemu() 543 1.20 ozaki { 544 1.43 hannken if drvctl -l qemufwcfg0 >/dev/null 2>&1 545 1.20 ozaki then 546 1.20 ozaki atf_skip "unreliable under qemu, skip until PR kern/43997 fixed" 547 1.20 ozaki fi 548 1.20 ozaki } 549 1.26 ozaki 550 1.26 ozaki test_create_destroy_common() 551 1.26 ozaki { 552 1.26 ozaki local sock=$1 553 1.26 ozaki local ifname=$2 554 1.26 ozaki local test_address=${3:-false} 555 1.26 ozaki local ipv4="10.0.0.1/24" 556 1.26 ozaki local ipv6="fc00::1" 557 1.26 ozaki 558 1.26 ozaki export RUMP_SERVER=$sock 559 1.26 ozaki 560 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname create 561 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname destroy 562 1.26 ozaki 563 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname create 564 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname up 565 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname down 566 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname destroy 567 1.26 ozaki 568 1.26 ozaki # Destroy while UP 569 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname create 570 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname up 571 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname destroy 572 1.26 ozaki 573 1.26 ozaki if ! $test_address; then 574 1.26 ozaki return 575 1.26 ozaki fi 576 1.26 ozaki 577 1.26 ozaki # With an IPv4 address 578 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname create 579 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname inet $ipv4 580 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname up 581 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname destroy 582 1.26 ozaki 583 1.26 ozaki # With an IPv6 address 584 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname create 585 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname inet6 $ipv6 586 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname up 587 1.26 ozaki atf_check -s exit:0 rump.ifconfig $ifname destroy 588 1.26 ozaki 589 1.26 ozaki unset RUMP_SERVER 590 1.26 ozaki } 591