1# $NetBSD: t_arp.sh,v 1.16 2016/06/21 05:04:16 ozaki-r Exp $ 2# 3# Copyright (c) 2015 The NetBSD Foundation, 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 28inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif" 29inetserver="$inetserver -lrumpdev -lrumpnet_tap" 30HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=sysctl=yes" 31 32SOCKSRC=unix://commsock1 33SOCKDST=unix://commsock2 34IP4SRC=10.0.1.1 35IP4DST=10.0.1.2 36IP4DST_PROXYARP1=10.0.1.3 37IP4DST_PROXYARP2=10.0.1.4 38 39DEBUG=false 40TIMEOUT=1 41 42atf_test_case arp_cache_expiration_5s cleanup 43atf_test_case arp_cache_expiration_10s cleanup 44atf_test_case arp_command cleanup 45atf_test_case arp_garp cleanup 46atf_test_case arp_cache_overwriting cleanup 47atf_test_case arp_proxy_arp_pub cleanup 48atf_test_case arp_proxy_arp_pubproxy cleanup 49atf_test_case arp_link_activation cleanup 50atf_test_case arp_static cleanup 51 52arp_cache_expiration_5s_head() 53{ 54 atf_set "descr" "Tests for ARP cache expiration (5s)" 55 atf_set "require.progs" "rump_server" 56} 57 58arp_cache_expiration_10s_head() 59{ 60 atf_set "descr" "Tests for ARP cache expiration (10s)" 61 atf_set "require.progs" "rump_server" 62} 63 64arp_command_head() 65{ 66 atf_set "descr" "Tests for arp_commands of arp(8)" 67 atf_set "require.progs" "rump_server" 68} 69 70arp_garp_head() 71{ 72 atf_set "descr" "Tests for GARP" 73 atf_set "require.progs" "rump_server" 74} 75 76arp_cache_overwriting_head() 77{ 78 atf_set "descr" "Tests for behavior of overwriting ARP caches" 79 atf_set "require.progs" "rump_server" 80} 81 82arp_proxy_arp_pub_head() 83{ 84 atf_set "descr" "Tests for Proxy ARP (pub)" 85 atf_set "require.progs" "rump_server" 86} 87 88arp_proxy_arp_pubproxy_head() 89{ 90 atf_set "descr" "Tests for Proxy ARP (pub proxy)" 91 atf_set "require.progs" "rump_server" 92} 93 94arp_link_activation_head() 95{ 96 atf_set "descr" "Tests for activating a new MAC address" 97 atf_set "require.progs" "rump_server" 98} 99 100arp_static_head() 101{ 102 103 atf_set "descr" "Tests for static ARP entries" 104 atf_set "require.progs" "rump_server" 105} 106 107setup_dst_server() 108{ 109 export RUMP_SERVER=$SOCKDST 110 atf_check -s exit:0 rump.ifconfig shmif0 create 111 atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1 112 atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4DST/24 113 atf_check -s exit:0 rump.ifconfig shmif0 up 114 atf_check -s exit:0 rump.ifconfig -w 10 115 116 $DEBUG && rump.ifconfig shmif0 117 $DEBUG && rump.arp -n -a 118} 119 120setup_src_server() 121{ 122 local keep=$1 123 124 export RUMP_SERVER=$SOCKSRC 125 126 # Adjust ARP parameters 127 atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.arp.keep=$keep 128 129 # Setup an interface 130 atf_check -s exit:0 rump.ifconfig shmif0 create 131 atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1 132 atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4SRC/24 133 atf_check -s exit:0 rump.ifconfig shmif0 up 134 atf_check -s exit:0 rump.ifconfig -w 10 135 136 # Sanity check 137 $DEBUG && rump.ifconfig shmif0 138 $DEBUG && rump.arp -n -a 139 atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC 140 atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST 141} 142 143test_cache_expiration() 144{ 145 local arp_keep=$1 146 local bonus=2 147 148 atf_check -s exit:0 ${inetserver} $SOCKSRC 149 atf_check -s exit:0 ${inetserver} $SOCKDST 150 151 setup_dst_server 152 setup_src_server $arp_keep 153 154 # 155 # Check if a cache is expired expectedly 156 # 157 export RUMP_SERVER=$SOCKSRC 158 atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST 159 160 $DEBUG && rump.arp -n -a 161 atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC 162 # Should be cached 163 atf_check -s exit:0 -o ignore rump.arp -n $IP4DST 164 165 atf_check -s exit:0 sleep $(($arp_keep + $bonus)) 166 167 $DEBUG && rump.arp -n -a 168 atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC 169 # Should be expired 170 atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST 171} 172 173arp_cache_expiration_5s_body() 174{ 175 test_cache_expiration 5 176} 177 178arp_cache_expiration_10s_body() 179{ 180 test_cache_expiration 10 181} 182 183arp_command_body() 184{ 185 local arp_keep=5 186 local bonus=2 187 188 atf_check -s exit:0 ${inetserver} $SOCKSRC 189 atf_check -s exit:0 ${inetserver} $SOCKDST 190 191 setup_dst_server 192 setup_src_server $arp_keep 193 194 export RUMP_SERVER=$SOCKSRC 195 196 # We can delete the entry for the interface's IP address 197 atf_check -s exit:0 -o ignore rump.arp -d $IP4SRC 198 199 # Add and delete a static entry 200 $DEBUG && rump.arp -n -a 201 atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10 202 $DEBUG && rump.arp -n -a 203 atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10 204 atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.10 205 atf_check -s exit:0 -o ignore rump.arp -d 10.0.1.10 206 $DEBUG && rump.arp -n -a 207 atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.10 208 209 # Add multiple entries via a file 210 cat - > ./list <<-EOF 211 10.0.1.11 b2:a0:20:00:00:11 212 10.0.1.12 b2:a0:20:00:00:12 213 10.0.1.13 b2:a0:20:00:00:13 214 10.0.1.14 b2:a0:20:00:00:14 215 10.0.1.15 b2:a0:20:00:00:15 216 EOF 217 $DEBUG && rump.arp -n -a 218 atf_check -s exit:0 -o ignore rump.arp -f ./list 219 $DEBUG && rump.arp -n -a 220 atf_check -s exit:0 -o match:'b2:a0:20:00:00:11' rump.arp -n 10.0.1.11 221 atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.11 222 atf_check -s exit:0 -o match:'b2:a0:20:00:00:12' rump.arp -n 10.0.1.12 223 atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.12 224 atf_check -s exit:0 -o match:'b2:a0:20:00:00:13' rump.arp -n 10.0.1.13 225 atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.13 226 atf_check -s exit:0 -o match:'b2:a0:20:00:00:14' rump.arp -n 10.0.1.14 227 atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.14 228 atf_check -s exit:0 -o match:'b2:a0:20:00:00:15' rump.arp -n 10.0.1.15 229 atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.15 230 231 # Test arp -a 232 atf_check -s exit:0 -o match:'10.0.1.11' rump.arp -n -a 233 atf_check -s exit:0 -o match:'10.0.1.12' rump.arp -n -a 234 atf_check -s exit:0 -o match:'10.0.1.13' rump.arp -n -a 235 atf_check -s exit:0 -o match:'10.0.1.14' rump.arp -n -a 236 atf_check -s exit:0 -o match:'10.0.1.15' rump.arp -n -a 237 238 # Flush all entries 239 $DEBUG && rump.arp -n -a 240 atf_check -s exit:0 -o ignore rump.arp -d -a 241 atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.11 242 atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.12 243 atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.13 244 atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.14 245 atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.15 246 atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.1 247 248 # Test temp option 249 $DEBUG && rump.arp -n -a 250 atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10 temp 251 $DEBUG && rump.arp -n -a 252 atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10 253 atf_check -s exit:0 -o not-match:'permanent' rump.arp -n 10.0.1.10 254 255 # Hm? the cache doesn't expire... 256 atf_check -s exit:0 sleep $(($arp_keep + $bonus)) 257 $DEBUG && rump.arp -n -a 258 #atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.10 259 260 return 0 261} 262 263make_pkt_str_arpreq() 264{ 265 local target=$1 266 local sender=$2 267 pkt="> ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42:" 268 pkt="$pkt Request who-has $target tell $sender, length 28" 269 echo $pkt 270} 271 272arp_garp_body() 273{ 274 local pkt= 275 276 atf_check -s exit:0 ${inetserver} $SOCKSRC 277 export RUMP_SERVER=$SOCKSRC 278 279 # Setup an interface 280 atf_check -s exit:0 rump.ifconfig shmif0 create 281 atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1 282 atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.1/24 283 atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.2/24 alias 284 atf_check -s exit:0 rump.ifconfig shmif0 up 285 $DEBUG && rump.ifconfig shmif0 286 287 atf_check -s exit:0 sleep 1 288 shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - > ./out 289 290 # A GARP packet is sent for the primary address 291 pkt=$(make_pkt_str_arpreq 10.0.0.1 10.0.0.1) 292 atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'" 293 # No GARP packet is sent for the alias address 294 pkt=$(make_pkt_str_arpreq 10.0.0.2 10.0.0.2) 295 atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'" 296 297 atf_check -s exit:0 rump.ifconfig -w 10 298 atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.3/24 299 atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.4/24 alias 300 301 # No GARP packets are sent during IFF_UP 302 shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - > ./out 303 pkt=$(make_pkt_str_arpreq 10.0.0.3 10.0.0.3) 304 atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'" 305 pkt=$(make_pkt_str_arpreq 10.0.0.4 10.0.0.4) 306 atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'" 307} 308 309arp_cache_overwriting_body() 310{ 311 local arp_keep=5 312 local bonus=2 313 314 atf_check -s exit:0 ${inetserver} $SOCKSRC 315 atf_check -s exit:0 ${inetserver} $SOCKDST 316 317 setup_dst_server 318 setup_src_server $arp_keep 319 320 export RUMP_SERVER=$SOCKSRC 321 322 # Cannot overwrite a permanent cache 323 atf_check -s not-exit:0 -e match:'File exists' \ 324 rump.arp -s $IP4SRC b2:a0:20:00:00:ff 325 $DEBUG && rump.arp -n -a 326 327 atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST 328 $DEBUG && rump.arp -n -a 329 # Can overwrite a dynamic cache 330 atf_check -s exit:0 -o ignore rump.arp -s $IP4DST b2:a0:20:00:00:00 331 $DEBUG && rump.arp -n -a 332 atf_check -s exit:0 -o match:'b2:a0:20:00:00:00' rump.arp -n $IP4DST 333 atf_check -s exit:0 -o match:'permanent' rump.arp -n $IP4DST 334 335 atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10 temp 336 $DEBUG && rump.arp -n -a 337 atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10 338 atf_check -s exit:0 -o not-match:'permanent' rump.arp -n 10.0.1.10 339 # Can overwrite a temp cache 340 atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:ff 341 atf_check -s exit:0 -o match:'b2:a0:20:00:00:ff' rump.arp -n 10.0.1.10 342 $DEBUG && rump.arp -n -a 343 344 return 0 345} 346 347make_pkt_str_arprep() 348{ 349 local ip=$1 350 local mac=$2 351 pkt="ethertype ARP (0x0806), length 42: " 352 pkt="Reply $ip is-at $mac, length 28" 353 echo $pkt 354} 355 356make_pkt_str_garp() 357{ 358 local ip=$1 359 local mac=$2 360 local pkt= 361 pkt="$mac > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806)," 362 pkt="$pkt length 42: Request who-has $ip tell $ip, length 28" 363 echo $pkt 364} 365 366extract_new_packets() 367{ 368 local old=./old 369 370 if [ ! -f $old ]; then 371 old=/dev/null 372 fi 373 374 shmif_dumpbus -p - bus1 2>/dev/null| \ 375 tcpdump -n -e -r - 2>/dev/null > ./new 376 diff -u $old ./new |grep '^+' |cut -d '+' -f 2 > ./diff 377 mv -f ./new ./old 378 cat ./diff 379} 380 381test_proxy_arp() 382{ 383 local arp_keep=5 384 local opts= title= flags= 385 local type=$1 386 387 atf_check -s exit:0 ${inetserver} $SOCKSRC 388 atf_check -s exit:0 ${inetserver} $SOCKDST 389 390 setup_dst_server 391 setup_src_server $arp_keep 392 393 export RUMP_SERVER=$SOCKDST 394 atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=1 395 macaddr_dst=$(rump.ifconfig shmif0 |awk '/address/ {print $2;}') 396 397 if [ "$type" = "pub" ]; then 398 opts="pub" 399 title="permanent published" 400 else 401 opts="pub proxy" 402 title='permanent published \(proxy only\)' 403 fi 404 405 # 406 # Test#1: First setup an endpoint then create proxy arp entry 407 # 408 export RUMP_SERVER=$SOCKDST 409 atf_check -s exit:0 rump.ifconfig tap1 create 410 atf_check -s exit:0 rump.ifconfig tap1 $IP4DST_PROXYARP1/24 up 411 atf_check -s exit:0 rump.ifconfig -w 10 412 413 # Try to ping (should fail w/o proxy arp) 414 export RUMP_SERVER=$SOCKSRC 415 atf_check -s not-exit:0 -o ignore -e ignore \ 416 rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1 417 418 # Flushing 419 extract_new_packets > ./out 420 421 # Set up proxy ARP entry 422 export RUMP_SERVER=$SOCKDST 423 atf_check -s exit:0 -o ignore \ 424 rump.arp -s $IP4DST_PROXYARP1 $macaddr_dst $opts 425 atf_check -s exit:0 -o match:"$title" rump.arp -n $IP4DST_PROXYARP1 426 427 # Try to ping 428 export RUMP_SERVER=$SOCKSRC 429 if [ "$type" = "pub" ]; then 430 # XXX fails 431 atf_check -s not-exit:0 -o ignore -e ignore \ 432 rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1 433 else 434 atf_check -s exit:0 -o ignore \ 435 rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1 436 fi 437 438 extract_new_packets > ./out 439 $DEBUG && cat ./out 440 441 pkt1=$(make_pkt_str_arprep $IP4DST_PROXYARP1 $macaddr_dst) 442 pkt2=$(make_pkt_str_garp $IP4DST_PROXYARP1 $macaddr_dst) 443 if [ "$type" = "pub" ]; then 444 atf_check -s not-exit:0 -x \ 445 "cat ./out |grep -q -e '$pkt1' -e '$pkt2'" 446 else 447 atf_check -s exit:0 -x "cat ./out |grep -q -e '$pkt1' -e '$pkt2'" 448 fi 449 450 # 451 # Test#2: Create proxy arp entry then set up an endpoint 452 # 453 export RUMP_SERVER=$SOCKDST 454 atf_check -s exit:0 -o ignore \ 455 rump.arp -s $IP4DST_PROXYARP2 $macaddr_dst $opts 456 atf_check -s exit:0 -o match:"$title" rump.arp -n $IP4DST_PROXYARP2 457 $DEBUG && rump.netstat -nr -f inet 458 459 # Try to ping (should fail because no endpoint exists) 460 export RUMP_SERVER=$SOCKSRC 461 atf_check -s not-exit:0 -o ignore -e ignore \ 462 rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP2 463 464 extract_new_packets > ./out 465 $DEBUG && cat ./out 466 467 # ARP reply should be sent 468 pkt=$(make_pkt_str_arprep $IP4DST_PROXYARP2 $macaddr_dst) 469 atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'" 470 471 export RUMP_SERVER=$SOCKDST 472 atf_check -s exit:0 rump.ifconfig tap2 create 473 atf_check -s exit:0 rump.ifconfig tap2 $IP4DST_PROXYARP2/24 up 474 atf_check -s exit:0 rump.ifconfig -w 10 475 476 # Try to ping 477 export RUMP_SERVER=$SOCKSRC 478 atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP2 479} 480 481arp_proxy_arp_pub_body() 482{ 483 484 test_proxy_arp pub 485} 486 487arp_proxy_arp_pubproxy_body() 488{ 489 490 test_proxy_arp pubproxy 491} 492 493arp_link_activation_body() 494{ 495 local arp_keep=5 496 local bonus=2 497 498 atf_check -s exit:0 ${inetserver} $SOCKSRC 499 atf_check -s exit:0 ${inetserver} $SOCKDST 500 501 setup_dst_server 502 setup_src_server $arp_keep 503 504 # flush old packets 505 extract_new_packets > ./out 506 507 export RUMP_SERVER=$SOCKSRC 508 509 atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \ 510 b2:a1:00:00:00:01 511 512 atf_check -s exit:0 sleep 1 513 extract_new_packets > ./out 514 $DEBUG && cat ./out 515 516 pkt=$(make_pkt_str_arpreq $IP4SRC $IP4SRC) 517 atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'" 518 519 atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \ 520 b2:a1:00:00:00:02 active 521 522 atf_check -s exit:0 sleep 1 523 extract_new_packets > ./out 524 $DEBUG && cat ./out 525 526 pkt=$(make_pkt_str_arpreq $IP4SRC $IP4SRC) 527 atf_check -s exit:0 -x \ 528 "cat ./out |grep '$pkt' |grep -q 'b2:a1:00:00:00:02'" 529} 530 531arp_static_body() 532{ 533 local arp_keep=5 534 local macaddr_src= 535 536 atf_check -s exit:0 ${inetserver} $SOCKSRC 537 atf_check -s exit:0 ${inetserver} $SOCKDST 538 539 setup_dst_server 540 setup_src_server $arp_keep 541 542 export RUMP_SERVER=$SOCKSRC 543 macaddr_src=$(rump.ifconfig shmif0 |awk '/address/ {print $2;}') 544 545 # Set a (valid) static ARP entry for the src server 546 export RUMP_SERVER=$SOCKDST 547 $DEBUG && rump.arp -n -a 548 atf_check -s exit:0 -o ignore rump.arp -s $IP4SRC $macaddr_src 549 $DEBUG && rump.arp -n -a 550 551 # Test receiving an ARP request with the static ARP entry (as spa/sha) 552 export RUMP_SERVER=$SOCKSRC 553 atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 $IP4DST 554} 555 556cleanup() 557{ 558 env RUMP_SERVER=$SOCKSRC rump.halt 559 env RUMP_SERVER=$SOCKDST rump.halt 560} 561 562dump_src() 563{ 564 export RUMP_SERVER=$SOCKSRC 565 rump.netstat -nr 566 rump.arp -n -a 567 rump.ifconfig 568 $HIJACKING dmesg 569} 570 571dump_dst() 572{ 573 export RUMP_SERVER=$SOCKDST 574 rump.netstat -nr 575 rump.arp -n -a 576 rump.ifconfig 577 $HIJACKING dmesg 578} 579 580dump() 581{ 582 dump_src 583 dump_dst 584 shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - 585} 586 587arp_cache_expiration_5s_cleanup() 588{ 589 $DEBUG && dump 590 cleanup 591} 592 593arp_cache_expiration_10s_cleanup() 594{ 595 $DEBUG && dump 596 cleanup 597} 598 599arp_command_cleanup() 600{ 601 $DEBUG && dump 602 cleanup 603} 604 605arp_garp_cleanup() 606{ 607 $DEBUG && dump_src 608 $DEBUG && shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - 609 env RUMP_SERVER=$SOCKSRC rump.halt 610} 611 612arp_cache_overwriting_cleanup() 613{ 614 $DEBUG && dump 615 cleanup 616} 617 618arp_proxy_arp_pub_cleanup() 619{ 620 $DEBUG && dump 621 cleanup 622} 623 624arp_proxy_arp_pubproxy_cleanup() 625{ 626 $DEBUG && dump 627 cleanup 628} 629 630arp_link_activation_cleanup() 631{ 632 $DEBUG && dump 633 cleanup 634} 635 636arp_static_cleanup() 637{ 638 $DEBUG && dump 639 cleanup 640} 641 642atf_init_test_cases() 643{ 644 atf_add_test_case arp_cache_expiration_5s 645 atf_add_test_case arp_cache_expiration_10s 646 atf_add_test_case arp_command 647 atf_add_test_case arp_garp 648 atf_add_test_case arp_cache_overwriting 649 atf_add_test_case arp_proxy_arp_pub 650 atf_add_test_case arp_proxy_arp_pubproxy 651 atf_add_test_case arp_link_activation 652 atf_add_test_case arp_static 653} 654