1*cdebaff8SEnji Cooper# $NetBSD: t_ndp.sh,v 1.17 2016/11/25 08:51:17 ozaki-r Exp $ 2640235e2SEnji Cooper# 3640235e2SEnji Cooper# Copyright (c) 2015 The NetBSD Foundation, Inc. 4640235e2SEnji Cooper# All rights reserved. 5640235e2SEnji Cooper# 6640235e2SEnji Cooper# Redistribution and use in source and binary forms, with or without 7640235e2SEnji Cooper# modification, are permitted provided that the following conditions 8640235e2SEnji Cooper# are met: 9640235e2SEnji Cooper# 1. Redistributions of source code must retain the above copyright 10640235e2SEnji Cooper# notice, this list of conditions and the following disclaimer. 11640235e2SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright 12640235e2SEnji Cooper# notice, this list of conditions and the following disclaimer in the 13640235e2SEnji Cooper# documentation and/or other materials provided with the distribution. 14640235e2SEnji Cooper# 15640235e2SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16640235e2SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17640235e2SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18640235e2SEnji Cooper# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19640235e2SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20640235e2SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21640235e2SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22640235e2SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23640235e2SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24640235e2SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25640235e2SEnji Cooper# POSSIBILITY OF SUCH DAMAGE. 26640235e2SEnji Cooper# 27640235e2SEnji Cooper 28640235e2SEnji CooperSOCKSRC=unix://commsock1 29640235e2SEnji CooperSOCKDST=unix://commsock2 30640235e2SEnji CooperIP6SRC=fc00::1 31640235e2SEnji CooperIP6DST=fc00::2 32640235e2SEnji Cooper 33*cdebaff8SEnji CooperDEBUG=${DEBUG:-true} 34640235e2SEnji CooperTIMEOUT=1 35640235e2SEnji Cooper 36640235e2SEnji Cooperatf_test_case ndp_cache_expiration cleanup 37640235e2SEnji Cooperatf_test_case ndp_commands cleanup 38640235e2SEnji Cooperatf_test_case ndp_cache_overwriting cleanup 39640235e2SEnji Cooperatf_test_case ndp_neighborgcthresh cleanup 40640235e2SEnji Cooperatf_test_case ndp_link_activation cleanup 41640235e2SEnji Cooper 42640235e2SEnji Cooperndp_cache_expiration_head() 43640235e2SEnji Cooper{ 44640235e2SEnji Cooper atf_set "descr" "Tests for NDP cache expiration" 45640235e2SEnji Cooper atf_set "require.progs" "rump_server" 46640235e2SEnji Cooper} 47640235e2SEnji Cooper 48640235e2SEnji Cooperndp_commands_head() 49640235e2SEnji Cooper{ 50640235e2SEnji Cooper atf_set "descr" "Tests for commands of ndp(8)" 51640235e2SEnji Cooper atf_set "require.progs" "rump_server" 52640235e2SEnji Cooper} 53640235e2SEnji Cooper 54640235e2SEnji Cooperndp_cache_overwriting_head() 55640235e2SEnji Cooper{ 56640235e2SEnji Cooper atf_set "descr" "Tests for behavior of overwriting NDP caches" 57640235e2SEnji Cooper atf_set "require.progs" "rump_server" 58640235e2SEnji Cooper} 59640235e2SEnji Cooper 60640235e2SEnji Cooperndp_neighborgcthresh_head() 61640235e2SEnji Cooper{ 62640235e2SEnji Cooper atf_set "descr" "Tests for GC of neighbor caches" 63640235e2SEnji Cooper atf_set "require.progs" "rump_server" 64640235e2SEnji Cooper} 65640235e2SEnji Cooper 66640235e2SEnji Cooperndp_link_activation_head() 67640235e2SEnji Cooper{ 68640235e2SEnji Cooper atf_set "descr" "Tests for activating a new MAC address" 69640235e2SEnji Cooper atf_set "require.progs" "rump_server" 70640235e2SEnji Cooper} 71640235e2SEnji Cooper 72640235e2SEnji Coopersetup_dst_server() 73640235e2SEnji Cooper{ 74640235e2SEnji Cooper local assign_ip=$1 75640235e2SEnji Cooper 76*cdebaff8SEnji Cooper rump_server_add_iface $SOCKDST shmif0 bus1 77640235e2SEnji Cooper export RUMP_SERVER=$SOCKDST 78640235e2SEnji Cooper if [ "$assign_ip" != no ]; then 79640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6DST 80640235e2SEnji Cooper fi 81640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 up 82640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 83640235e2SEnji Cooper 84640235e2SEnji Cooper $DEBUG && rump.ifconfig shmif0 85640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 86640235e2SEnji Cooper} 87640235e2SEnji Cooper 88640235e2SEnji Coopersetup_src_server() 89640235e2SEnji Cooper{ 90640235e2SEnji Cooper $DEBUG && ulimit -c unlimited 91640235e2SEnji Cooper export RUMP_SERVER=$SOCKSRC 92640235e2SEnji Cooper 93640235e2SEnji Cooper # Setup an interface 94*cdebaff8SEnji Cooper rump_server_add_iface $SOCKSRC shmif0 bus1 95640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6SRC 96640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 up 97640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 98640235e2SEnji Cooper 99640235e2SEnji Cooper # Sanity check 100640235e2SEnji Cooper $DEBUG && rump.ifconfig shmif0 101640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 102640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ndp -n $IP6SRC 103640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6DST 104640235e2SEnji Cooper} 105640235e2SEnji Cooper 106640235e2SEnji Cooperget_timeout() 107640235e2SEnji Cooper{ 108640235e2SEnji Cooper local timeout=$(env RUMP_SERVER=$SOCKSRC rump.ndp -n $IP6DST |grep $IP6DST|awk '{print $4;}') 109640235e2SEnji Cooper timeout=${timeout%s} 110640235e2SEnji Cooper echo $timeout 111640235e2SEnji Cooper} 112640235e2SEnji Cooper 113640235e2SEnji Cooperndp_cache_expiration_body() 114640235e2SEnji Cooper{ 115*cdebaff8SEnji Cooper 116*cdebaff8SEnji Cooper rump_server_start $SOCKSRC netinet6 117*cdebaff8SEnji Cooper rump_server_start $SOCKDST netinet6 118640235e2SEnji Cooper 119640235e2SEnji Cooper setup_dst_server 120640235e2SEnji Cooper setup_src_server 121640235e2SEnji Cooper 122640235e2SEnji Cooper # 123640235e2SEnji Cooper # Check if a cache is expired expectedly 124640235e2SEnji Cooper # 125640235e2SEnji Cooper export RUMP_SERVER=$SOCKSRC 126640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST 127640235e2SEnji Cooper 128640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 129640235e2SEnji Cooper atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC 130640235e2SEnji Cooper # Should be cached 131640235e2SEnji Cooper atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n $IP6DST 132640235e2SEnji Cooper 133640235e2SEnji Cooper timeout=$(get_timeout $IP6DST) 134640235e2SEnji Cooper 135640235e2SEnji Cooper atf_check -s exit:0 sleep $(($timeout + 1)) 136640235e2SEnji Cooper 137640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 138640235e2SEnji Cooper atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC 139640235e2SEnji Cooper # Expired but remains until GC sweaps it (1 day) 140640235e2SEnji Cooper atf_check -s exit:0 -o match:'(1d0h0m|23h59m)' rump.ndp -n $IP6DST 141*cdebaff8SEnji Cooper 142*cdebaff8SEnji Cooper rump_server_destroy_ifaces 143640235e2SEnji Cooper} 144640235e2SEnji Cooper 145640235e2SEnji Cooperifdown_dst_server() 146640235e2SEnji Cooper{ 147640235e2SEnji Cooper export RUMP_SERVER=$SOCKDST 148640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 down 149640235e2SEnji Cooper export RUMP_SERVER=$SOCKSRC 150640235e2SEnji Cooper} 151640235e2SEnji Cooper 152640235e2SEnji Cooperndp_commands_body() 153640235e2SEnji Cooper{ 154*cdebaff8SEnji Cooper 155*cdebaff8SEnji Cooper rump_server_start $SOCKSRC netinet6 156*cdebaff8SEnji Cooper rump_server_start $SOCKDST netinet6 157640235e2SEnji Cooper 158640235e2SEnji Cooper setup_dst_server 159640235e2SEnji Cooper setup_src_server 160640235e2SEnji Cooper 161640235e2SEnji Cooper export RUMP_SERVER=$SOCKSRC 162640235e2SEnji Cooper 163640235e2SEnji Cooper # We can delete the entry for the interface's IP address 164640235e2SEnji Cooper atf_check -s exit:0 -o match:"$IP6SRC" rump.ndp -d $IP6SRC 165640235e2SEnji Cooper 166640235e2SEnji Cooper # Add and delete a static entry 167640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 168640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 169640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 170640235e2SEnji Cooper atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::10 171640235e2SEnji Cooper atf_check -s exit:0 -o match:'deleted' rump.ndp -d fc00::10 172640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 173640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n fc00::10 174640235e2SEnji Cooper 175640235e2SEnji Cooper # Add multiple entries via a file (XXX not implemented) 176640235e2SEnji Cooper #cat - > ./list <<-EOF 177640235e2SEnji Cooper #fc00::11 b2:a0:20:00:00:11 178640235e2SEnji Cooper #fc00::12 b2:a0:20:00:00:12 179640235e2SEnji Cooper #fc00::13 b2:a0:20:00:00:13 180640235e2SEnji Cooper #fc00::14 b2:a0:20:00:00:14 181640235e2SEnji Cooper #fc00::15 b2:a0:20:00:00:15 182640235e2SEnji Cooper #EOF 183640235e2SEnji Cooper #$DEBUG && rump.ndp -n -a 184640235e2SEnji Cooper #atf_check -s exit:0 -o ignore rump.ndp -f ./list 185640235e2SEnji Cooper #$DEBUG && rump.ndp -n -a 186640235e2SEnji Cooper 187640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST 188640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ndp -s fc00::11 b2:a0:20:00:00:11 189640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ndp -s fc00::12 b2:a0:20:00:00:12 190640235e2SEnji Cooper 191640235e2SEnji Cooper atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n $IP6DST 192640235e2SEnji Cooper atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::11 193640235e2SEnji Cooper atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::12 194640235e2SEnji Cooper 195640235e2SEnji Cooper # Test ndp -a 196640235e2SEnji Cooper atf_check -s exit:0 -o match:'fc00::11' rump.ndp -n -a 197640235e2SEnji Cooper atf_check -s exit:0 -o match:'fc00::12' rump.ndp -n -a 198640235e2SEnji Cooper 199640235e2SEnji Cooper # Ensure no packet upsets the src server 200640235e2SEnji Cooper ifdown_dst_server 201640235e2SEnji Cooper 202640235e2SEnji Cooper # Flush all entries (-c) 203640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 204640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ndp -c 205640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6SRC 206640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6DST 207640235e2SEnji Cooper # Only the static caches are not deleted 208640235e2SEnji Cooper atf_check -s exit:0 -o ignore -e ignore rump.ndp -n fc00::11 209640235e2SEnji Cooper atf_check -s exit:0 -o ignore -e ignore rump.ndp -n fc00::12 210640235e2SEnji Cooper 211640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 212640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp 213640235e2SEnji Cooper rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp 214640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 215640235e2SEnji Cooper atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n fc00::10 216640235e2SEnji Cooper 217*cdebaff8SEnji Cooper rump_server_destroy_ifaces 218640235e2SEnji Cooper} 219640235e2SEnji Cooper 220640235e2SEnji Cooperndp_cache_overwriting_body() 221640235e2SEnji Cooper{ 222*cdebaff8SEnji Cooper 223*cdebaff8SEnji Cooper rump_server_start $SOCKSRC netinet6 224*cdebaff8SEnji Cooper rump_server_start $SOCKDST netinet6 225640235e2SEnji Cooper 226640235e2SEnji Cooper setup_dst_server 227640235e2SEnji Cooper setup_src_server 228640235e2SEnji Cooper 229640235e2SEnji Cooper export RUMP_SERVER=$SOCKSRC 230640235e2SEnji Cooper 231640235e2SEnji Cooper # Cannot overwrite a permanent cache 232640235e2SEnji Cooper atf_check -s not-exit:0 -e ignore rump.ndp -s $IP6SRC b2:a0:20:00:00:ff 233640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 234640235e2SEnji Cooper 235640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST 236640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 237640235e2SEnji Cooper # Can overwrite a dynamic cache 238640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ndp -s $IP6DST b2:a0:20:00:00:00 239640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 240640235e2SEnji Cooper atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6DST 241640235e2SEnji Cooper 242640235e2SEnji Cooper # Test temp option (XXX it doesn't work; expire time isn't set) 243640235e2SEnji Cooper #atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp 244640235e2SEnji Cooper #$DEBUG && rump.ndp -n -a 245640235e2SEnji Cooper #atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n fc00::10 246640235e2SEnji Cooper # Cannot overwrite a temp cache 247640235e2SEnji Cooper #atf_check -s not-exit:0 -e ignore rump.ndp -s fc00::10 b2:a0:20:00:00:ff 248640235e2SEnji Cooper #$DEBUG && rump.ndp -n -a 249640235e2SEnji Cooper 250*cdebaff8SEnji Cooper rump_server_destroy_ifaces 251640235e2SEnji Cooper} 252640235e2SEnji Cooper 253640235e2SEnji Cooperget_n_caches() 254640235e2SEnji Cooper{ 255640235e2SEnji Cooper 256640235e2SEnji Cooper echo $(rump.ndp -a -n |grep -v -e Neighbor -e permanent |wc -l) 257640235e2SEnji Cooper} 258640235e2SEnji Cooper 259640235e2SEnji Cooperndp_neighborgcthresh_body() 260640235e2SEnji Cooper{ 261640235e2SEnji Cooper 262*cdebaff8SEnji Cooper rump_server_start $SOCKSRC netinet6 263*cdebaff8SEnji Cooper rump_server_start $SOCKDST netinet6 264640235e2SEnji Cooper 265640235e2SEnji Cooper setup_dst_server no 266640235e2SEnji Cooper setup_src_server 267640235e2SEnji Cooper 268640235e2SEnji Cooper export RUMP_SERVER=$SOCKDST 269640235e2SEnji Cooper for i in $(seq 0 9); do 270640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6DST}$i 271640235e2SEnji Cooper done 272640235e2SEnji Cooper 273640235e2SEnji Cooper export RUMP_SERVER=$SOCKSRC 274640235e2SEnji Cooper 275640235e2SEnji Cooper # ping to 3 destinations 276640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 277640235e2SEnji Cooper for i in $(seq 0 2); do 278640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \ 279640235e2SEnji Cooper ${IP6DST}$i 280640235e2SEnji Cooper done 281640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 282640235e2SEnji Cooper 283640235e2SEnji Cooper # 3 caches should be created 284640235e2SEnji Cooper atf_check_equal $(get_n_caches) 3 285640235e2SEnji Cooper 286640235e2SEnji Cooper # ping to additional 3 destinations 287640235e2SEnji Cooper for i in $(seq 3 5); do 288640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \ 289640235e2SEnji Cooper ${IP6DST}$i 290640235e2SEnji Cooper done 291640235e2SEnji Cooper $DEBUG && rump.ndp -n -a 292640235e2SEnji Cooper 293640235e2SEnji Cooper # 6 caches should be created in total 294640235e2SEnji Cooper atf_check_equal $(get_n_caches) 6 295640235e2SEnji Cooper 296640235e2SEnji Cooper # Limit the number of neighbor caches to 5 297640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.sysctl -w \ 298640235e2SEnji Cooper net.inet6.ip6.neighborgcthresh=5 299640235e2SEnji Cooper 300640235e2SEnji Cooper # ping to additional 4 destinations 301640235e2SEnji Cooper for i in $(seq 6 9); do 302640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \ 303640235e2SEnji Cooper ${IP6DST}$i 304640235e2SEnji Cooper done 305640235e2SEnji Cooper 306640235e2SEnji Cooper # More than 5 caches should be created in total, but exceeded caches 307640235e2SEnji Cooper # should be GC-ed 308640235e2SEnji Cooper if [ "$(get_n_caches)" -gt 5 ]; then 309640235e2SEnji Cooper atf_fail "Neighbor caches are not GC-ed" 310640235e2SEnji Cooper fi 311640235e2SEnji Cooper 312*cdebaff8SEnji Cooper rump_server_destroy_ifaces 313640235e2SEnji Cooper} 314640235e2SEnji Cooper 315640235e2SEnji Coopermake_pkt_str_na() 316640235e2SEnji Cooper{ 317640235e2SEnji Cooper local ip=$1 318640235e2SEnji Cooper local mac=$2 319640235e2SEnji Cooper local pkt= 320640235e2SEnji Cooper pkt="$mac > 33:33:00:00:00:01, ethertype IPv6 (0x86dd), length 86:" 321640235e2SEnji Cooper pkt="$pkt $ip > ff02::1: ICMP6, neighbor advertisement" 322640235e2SEnji Cooper echo $pkt 323640235e2SEnji Cooper} 324640235e2SEnji Cooper 325640235e2SEnji Cooperndp_link_activation_body() 326640235e2SEnji Cooper{ 327640235e2SEnji Cooper local linklocal= 328640235e2SEnji Cooper 329*cdebaff8SEnji Cooper rump_server_start $SOCKSRC netinet6 330*cdebaff8SEnji Cooper rump_server_start $SOCKDST netinet6 331640235e2SEnji Cooper 332640235e2SEnji Cooper setup_dst_server 333640235e2SEnji Cooper setup_src_server 334640235e2SEnji Cooper 335640235e2SEnji Cooper # flush old packets 336*cdebaff8SEnji Cooper extract_new_packets bus1 > ./out 337640235e2SEnji Cooper 338640235e2SEnji Cooper export RUMP_SERVER=$SOCKSRC 339640235e2SEnji Cooper 340640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \ 341640235e2SEnji Cooper b2:a1:00:00:00:01 342640235e2SEnji Cooper 343640235e2SEnji Cooper atf_check -s exit:0 sleep 1 344*cdebaff8SEnji Cooper extract_new_packets bus1 > ./out 345640235e2SEnji Cooper $DEBUG && cat ./out 346640235e2SEnji Cooper 347640235e2SEnji Cooper linklocal=$(rump.ifconfig shmif0 |awk '/fe80/ {print $2;}' |awk -F % '{print $1;}') 348640235e2SEnji Cooper $DEBUG && echo $linklocal 349640235e2SEnji Cooper 350640235e2SEnji Cooper pkt=$(make_pkt_str_na $linklocal b2:a1:00:00:00:01) 351640235e2SEnji Cooper atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'" 352640235e2SEnji Cooper 353640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \ 354640235e2SEnji Cooper b2:a1:00:00:00:02 active 355640235e2SEnji Cooper 356640235e2SEnji Cooper atf_check -s exit:0 sleep 1 357*cdebaff8SEnji Cooper extract_new_packets bus1 > ./out 358640235e2SEnji Cooper $DEBUG && cat ./out 359640235e2SEnji Cooper 360640235e2SEnji Cooper linklocal=$(rump.ifconfig shmif0 |awk '/fe80/ {print $2;}' |awk -F % '{print $1;}') 361640235e2SEnji Cooper $DEBUG && echo $linklocal 362640235e2SEnji Cooper 363640235e2SEnji Cooper pkt=$(make_pkt_str_na $linklocal b2:a1:00:00:00:02) 364640235e2SEnji Cooper atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'" 365640235e2SEnji Cooper 366*cdebaff8SEnji Cooper rump_server_destroy_ifaces 367640235e2SEnji Cooper} 368640235e2SEnji Cooper 369640235e2SEnji Cooperndp_cache_expiration_cleanup() 370640235e2SEnji Cooper{ 371640235e2SEnji Cooper $DEBUG && dump 372640235e2SEnji Cooper cleanup 373640235e2SEnji Cooper} 374640235e2SEnji Cooper 375640235e2SEnji Cooperndp_commands_cleanup() 376640235e2SEnji Cooper{ 377640235e2SEnji Cooper $DEBUG && dump 378640235e2SEnji Cooper cleanup 379640235e2SEnji Cooper} 380640235e2SEnji Cooper 381640235e2SEnji Cooperndp_cache_overwriting_cleanup() 382640235e2SEnji Cooper{ 383640235e2SEnji Cooper $DEBUG && dump 384640235e2SEnji Cooper cleanup 385640235e2SEnji Cooper} 386640235e2SEnji Cooper 387640235e2SEnji Cooperndp_neighborgcthresh_cleanup() 388640235e2SEnji Cooper{ 389640235e2SEnji Cooper $DEBUG && dump 390640235e2SEnji Cooper cleanup 391640235e2SEnji Cooper} 392640235e2SEnji Cooper 393640235e2SEnji Cooperndp_link_activation_cleanup() 394640235e2SEnji Cooper{ 395640235e2SEnji Cooper $DEBUG && dump 396640235e2SEnji Cooper cleanup 397640235e2SEnji Cooper} 398640235e2SEnji Cooper 399640235e2SEnji Cooperatf_init_test_cases() 400640235e2SEnji Cooper{ 401640235e2SEnji Cooper atf_add_test_case ndp_cache_expiration 402640235e2SEnji Cooper atf_add_test_case ndp_commands 403640235e2SEnji Cooper atf_add_test_case ndp_cache_overwriting 404640235e2SEnji Cooper atf_add_test_case ndp_neighborgcthresh 405640235e2SEnji Cooper atf_add_test_case ndp_link_activation 406640235e2SEnji Cooper} 407