Home | History | Annotate | Line # | Download | only in ndp
t_ndp.sh revision 1.12.2.2
      1  1.12.2.2  pgoyette #	$NetBSD: t_ndp.sh,v 1.12.2.2 2017/03/20 06:58:01 pgoyette Exp $
      2       1.1     ozaki #
      3       1.1     ozaki # Copyright (c) 2015 The NetBSD Foundation, 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 SOCKSRC=unix://commsock1
     29       1.1     ozaki SOCKDST=unix://commsock2
     30       1.1     ozaki IP6SRC=fc00::1
     31       1.1     ozaki IP6DST=fc00::2
     32       1.1     ozaki 
     33  1.12.2.1  pgoyette DEBUG=${DEBUG:-true}
     34       1.1     ozaki TIMEOUT=1
     35       1.1     ozaki 
     36      1.12     ozaki atf_test_case ndp_cache_expiration cleanup
     37      1.12     ozaki atf_test_case ndp_commands cleanup
     38      1.12     ozaki atf_test_case ndp_cache_overwriting cleanup
     39      1.12     ozaki atf_test_case ndp_neighborgcthresh cleanup
     40      1.12     ozaki atf_test_case ndp_link_activation cleanup
     41       1.1     ozaki 
     42      1.12     ozaki ndp_cache_expiration_head()
     43       1.1     ozaki {
     44       1.1     ozaki 	atf_set "descr" "Tests for NDP cache expiration"
     45       1.1     ozaki 	atf_set "require.progs" "rump_server"
     46       1.1     ozaki }
     47       1.1     ozaki 
     48      1.12     ozaki ndp_commands_head()
     49       1.1     ozaki {
     50       1.1     ozaki 	atf_set "descr" "Tests for commands of ndp(8)"
     51       1.1     ozaki 	atf_set "require.progs" "rump_server"
     52       1.1     ozaki }
     53       1.1     ozaki 
     54      1.12     ozaki ndp_cache_overwriting_head()
     55       1.1     ozaki {
     56       1.1     ozaki 	atf_set "descr" "Tests for behavior of overwriting NDP caches"
     57       1.1     ozaki 	atf_set "require.progs" "rump_server"
     58       1.1     ozaki }
     59       1.1     ozaki 
     60      1.12     ozaki ndp_neighborgcthresh_head()
     61       1.7     ozaki {
     62       1.7     ozaki 	atf_set "descr" "Tests for GC of neighbor caches"
     63       1.7     ozaki 	atf_set "require.progs" "rump_server"
     64       1.7     ozaki }
     65       1.7     ozaki 
     66      1.12     ozaki ndp_link_activation_head()
     67       1.9     ozaki {
     68       1.9     ozaki 	atf_set "descr" "Tests for activating a new MAC address"
     69       1.9     ozaki 	atf_set "require.progs" "rump_server"
     70       1.9     ozaki }
     71       1.9     ozaki 
     72       1.1     ozaki setup_dst_server()
     73       1.1     ozaki {
     74       1.8     ozaki 	local assign_ip=$1
     75       1.8     ozaki 
     76  1.12.2.1  pgoyette 	rump_server_add_iface $SOCKDST shmif0 bus1
     77       1.1     ozaki 	export RUMP_SERVER=$SOCKDST
     78       1.8     ozaki 	if [ "$assign_ip" != no ]; then
     79       1.8     ozaki 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6DST
     80       1.8     ozaki 	fi
     81       1.1     ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 up
     82       1.1     ozaki 	atf_check -s exit:0 rump.ifconfig -w 10
     83       1.1     ozaki 
     84       1.1     ozaki 	$DEBUG && rump.ifconfig shmif0
     85       1.1     ozaki 	$DEBUG && rump.ndp -n -a
     86       1.1     ozaki }
     87       1.1     ozaki 
     88       1.1     ozaki setup_src_server()
     89       1.1     ozaki {
     90       1.1     ozaki 	$DEBUG && ulimit -c unlimited
     91       1.1     ozaki 	export RUMP_SERVER=$SOCKSRC
     92       1.1     ozaki 
     93       1.1     ozaki 	# Setup an interface
     94  1.12.2.1  pgoyette 	rump_server_add_iface $SOCKSRC shmif0 bus1
     95       1.1     ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6SRC
     96       1.1     ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 up
     97       1.1     ozaki 	atf_check -s exit:0 rump.ifconfig -w 10
     98       1.1     ozaki 
     99       1.1     ozaki 	# Sanity check
    100       1.1     ozaki 	$DEBUG && rump.ifconfig shmif0
    101       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    102       1.1     ozaki 	atf_check -s exit:0 -o ignore rump.ndp -n $IP6SRC
    103       1.1     ozaki 	atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6DST
    104       1.1     ozaki }
    105       1.1     ozaki 
    106       1.1     ozaki get_timeout()
    107       1.1     ozaki {
    108       1.1     ozaki 	local timeout=$(env RUMP_SERVER=$SOCKSRC rump.ndp -n $IP6DST |grep $IP6DST|awk '{print $4;}')
    109       1.1     ozaki 	timeout=${timeout%s}
    110       1.1     ozaki 	echo $timeout
    111       1.1     ozaki }
    112       1.1     ozaki 
    113      1.12     ozaki ndp_cache_expiration_body()
    114       1.1     ozaki {
    115  1.12.2.1  pgoyette 
    116  1.12.2.1  pgoyette 	rump_server_start $SOCKSRC netinet6
    117  1.12.2.1  pgoyette 	rump_server_start $SOCKDST netinet6
    118       1.1     ozaki 
    119       1.1     ozaki 	setup_dst_server
    120       1.1     ozaki 	setup_src_server
    121       1.1     ozaki 
    122       1.1     ozaki 	#
    123       1.1     ozaki 	# Check if a cache is expired expectedly
    124       1.1     ozaki 	#
    125       1.1     ozaki 	export RUMP_SERVER=$SOCKSRC
    126       1.3     ozaki 	atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST
    127       1.1     ozaki 
    128       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    129       1.1     ozaki 	atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC
    130       1.1     ozaki 	# Should be cached
    131       1.1     ozaki 	atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n $IP6DST
    132       1.1     ozaki 
    133       1.1     ozaki 	timeout=$(get_timeout $IP6DST)
    134       1.1     ozaki 
    135       1.1     ozaki 	atf_check -s exit:0 sleep $(($timeout + 1))
    136       1.1     ozaki 
    137       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    138       1.1     ozaki 	atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC
    139       1.1     ozaki 	# Expired but remains until GC sweaps it (1 day)
    140  1.12.2.2  pgoyette 	atf_check -s exit:0 -o match:"$ONEDAYISH" rump.ndp -n $IP6DST
    141  1.12.2.1  pgoyette 
    142  1.12.2.1  pgoyette 	rump_server_destroy_ifaces
    143       1.1     ozaki }
    144       1.1     ozaki 
    145       1.5     ozaki ifdown_dst_server()
    146       1.5     ozaki {
    147       1.5     ozaki 	export RUMP_SERVER=$SOCKDST
    148       1.5     ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 down
    149       1.5     ozaki 	export RUMP_SERVER=$SOCKSRC
    150       1.5     ozaki }
    151       1.5     ozaki 
    152      1.12     ozaki ndp_commands_body()
    153       1.1     ozaki {
    154  1.12.2.1  pgoyette 
    155  1.12.2.1  pgoyette 	rump_server_start $SOCKSRC netinet6
    156  1.12.2.1  pgoyette 	rump_server_start $SOCKDST netinet6
    157       1.1     ozaki 
    158       1.1     ozaki 	setup_dst_server
    159       1.1     ozaki 	setup_src_server
    160       1.1     ozaki 
    161       1.1     ozaki 	export RUMP_SERVER=$SOCKSRC
    162       1.1     ozaki 
    163      1.10     ozaki 	# We can delete the entry for the interface's IP address
    164      1.10     ozaki 	atf_check -s exit:0 -o match:"$IP6SRC" rump.ndp -d $IP6SRC
    165      1.10     ozaki 
    166       1.1     ozaki 	# Add and delete a static entry
    167       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    168       1.1     ozaki 	atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10
    169       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    170       1.1     ozaki 	atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::10
    171       1.2     ozaki 	atf_check -s exit:0 -o match:'deleted' rump.ndp -d fc00::10
    172       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    173       1.1     ozaki 	atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n fc00::10
    174       1.1     ozaki 
    175       1.1     ozaki 	# Add multiple entries via a file (XXX not implemented)
    176       1.1     ozaki 	#cat - > ./list <<-EOF
    177       1.1     ozaki 	#fc00::11 b2:a0:20:00:00:11
    178       1.1     ozaki 	#fc00::12 b2:a0:20:00:00:12
    179       1.1     ozaki 	#fc00::13 b2:a0:20:00:00:13
    180       1.1     ozaki 	#fc00::14 b2:a0:20:00:00:14
    181       1.1     ozaki 	#fc00::15 b2:a0:20:00:00:15
    182       1.1     ozaki 	#EOF
    183       1.1     ozaki 	#$DEBUG && rump.ndp -n -a
    184       1.1     ozaki 	#atf_check -s exit:0 -o ignore rump.ndp -f ./list
    185       1.1     ozaki 	#$DEBUG && rump.ndp -n -a
    186       1.1     ozaki 
    187       1.3     ozaki 	atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST
    188       1.1     ozaki 	atf_check -s exit:0 -o ignore rump.ndp -s fc00::11 b2:a0:20:00:00:11
    189       1.1     ozaki 	atf_check -s exit:0 -o ignore rump.ndp -s fc00::12 b2:a0:20:00:00:12
    190       1.1     ozaki 
    191       1.1     ozaki 	atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n $IP6DST
    192       1.1     ozaki 	atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::11
    193       1.1     ozaki 	atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::12
    194       1.1     ozaki 
    195       1.1     ozaki 	# Test ndp -a
    196       1.1     ozaki 	atf_check -s exit:0 -o match:'fc00::11' rump.ndp -n -a
    197       1.1     ozaki 	atf_check -s exit:0 -o match:'fc00::12' rump.ndp -n -a
    198       1.1     ozaki 
    199       1.5     ozaki 	# Ensure no packet upsets the src server
    200       1.5     ozaki 	ifdown_dst_server
    201       1.5     ozaki 
    202       1.1     ozaki 	# Flush all entries (-c)
    203       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    204       1.1     ozaki 	atf_check -s exit:0 -o ignore rump.ndp -c
    205      1.10     ozaki 	atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6SRC
    206       1.1     ozaki 	atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6DST
    207       1.1     ozaki 	# Only the static caches are not deleted
    208       1.1     ozaki 	atf_check -s exit:0 -o ignore -e ignore rump.ndp -n fc00::11
    209       1.1     ozaki 	atf_check -s exit:0 -o ignore -e ignore rump.ndp -n fc00::12
    210       1.1     ozaki 
    211       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    212      1.11     ozaki 	atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp
    213       1.1     ozaki 	rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp
    214       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    215      1.11     ozaki 	atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n fc00::10
    216       1.1     ozaki 
    217  1.12.2.1  pgoyette 	rump_server_destroy_ifaces
    218       1.1     ozaki }
    219       1.1     ozaki 
    220      1.12     ozaki ndp_cache_overwriting_body()
    221       1.1     ozaki {
    222  1.12.2.1  pgoyette 
    223  1.12.2.1  pgoyette 	rump_server_start $SOCKSRC netinet6
    224  1.12.2.1  pgoyette 	rump_server_start $SOCKDST netinet6
    225       1.1     ozaki 
    226       1.1     ozaki 	setup_dst_server
    227       1.1     ozaki 	setup_src_server
    228       1.1     ozaki 
    229       1.1     ozaki 	export RUMP_SERVER=$SOCKSRC
    230       1.1     ozaki 
    231       1.1     ozaki 	# Cannot overwrite a permanent cache
    232       1.1     ozaki 	atf_check -s not-exit:0 -e ignore rump.ndp -s $IP6SRC b2:a0:20:00:00:ff
    233       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    234       1.1     ozaki 
    235       1.3     ozaki 	atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST
    236       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    237       1.1     ozaki 	# Can overwrite a dynamic cache
    238       1.1     ozaki 	atf_check -s exit:0 -o ignore rump.ndp -s $IP6DST b2:a0:20:00:00:00
    239       1.1     ozaki 	$DEBUG && rump.ndp -n -a
    240       1.1     ozaki 	atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6DST
    241       1.1     ozaki 
    242       1.1     ozaki 	# Test temp option (XXX it doesn't work; expire time isn't set)
    243       1.1     ozaki 	#atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp
    244       1.1     ozaki 	#$DEBUG && rump.ndp -n -a
    245       1.1     ozaki 	#atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n fc00::10
    246       1.1     ozaki 	# Cannot overwrite a temp cache
    247       1.1     ozaki 	#atf_check -s not-exit:0 -e ignore rump.ndp -s fc00::10 b2:a0:20:00:00:ff
    248       1.1     ozaki 	#$DEBUG && rump.ndp -n -a
    249       1.1     ozaki 
    250  1.12.2.1  pgoyette 	rump_server_destroy_ifaces
    251       1.1     ozaki }
    252       1.1     ozaki 
    253       1.7     ozaki get_n_caches()
    254       1.7     ozaki {
    255       1.7     ozaki 
    256       1.7     ozaki 	echo $(rump.ndp -a -n |grep -v -e Neighbor -e permanent |wc -l)
    257       1.7     ozaki }
    258       1.7     ozaki 
    259      1.12     ozaki ndp_neighborgcthresh_body()
    260       1.7     ozaki {
    261       1.7     ozaki 
    262  1.12.2.1  pgoyette 	rump_server_start $SOCKSRC netinet6
    263  1.12.2.1  pgoyette 	rump_server_start $SOCKDST netinet6
    264       1.7     ozaki 
    265       1.8     ozaki 	setup_dst_server no
    266       1.7     ozaki 	setup_src_server
    267       1.7     ozaki 
    268       1.7     ozaki 	export RUMP_SERVER=$SOCKDST
    269       1.7     ozaki 	for i in $(seq 0 9); do
    270       1.7     ozaki 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6DST}$i
    271       1.7     ozaki 	done
    272       1.7     ozaki 
    273       1.7     ozaki 	export RUMP_SERVER=$SOCKSRC
    274       1.7     ozaki 
    275       1.7     ozaki 	# ping to 3 destinations
    276       1.7     ozaki 	$DEBUG && rump.ndp -n -a
    277       1.7     ozaki 	for i in $(seq 0 2); do
    278       1.7     ozaki 		atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \
    279       1.7     ozaki 		    ${IP6DST}$i
    280       1.7     ozaki 	done
    281       1.7     ozaki 	$DEBUG && rump.ndp -n -a
    282       1.7     ozaki 
    283       1.7     ozaki 	# 3 caches should be created
    284       1.7     ozaki 	atf_check_equal $(get_n_caches) 3
    285       1.7     ozaki 
    286       1.7     ozaki 	# ping to additional 3 destinations
    287       1.7     ozaki 	for i in $(seq 3 5); do
    288       1.7     ozaki 		atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \
    289       1.7     ozaki 		    ${IP6DST}$i
    290       1.7     ozaki 	done
    291       1.7     ozaki 	$DEBUG && rump.ndp -n -a
    292       1.7     ozaki 
    293       1.7     ozaki 	# 6 caches should be created in total
    294       1.7     ozaki 	atf_check_equal $(get_n_caches) 6
    295       1.7     ozaki 
    296       1.7     ozaki 	# Limit the number of neighbor caches to 5
    297       1.7     ozaki 	atf_check -s exit:0 -o ignore rump.sysctl -w \
    298       1.7     ozaki 	    net.inet6.ip6.neighborgcthresh=5
    299       1.7     ozaki 
    300       1.7     ozaki 	# ping to additional 4 destinations
    301       1.7     ozaki 	for i in $(seq 6 9); do
    302       1.7     ozaki 		atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \
    303       1.7     ozaki 		    ${IP6DST}$i
    304       1.7     ozaki 	done
    305       1.7     ozaki 
    306       1.7     ozaki 	# More than 5 caches should be created in total, but exceeded caches
    307       1.7     ozaki 	# should be GC-ed
    308       1.7     ozaki 	if [ "$(get_n_caches)" -gt 5 ]; then
    309       1.7     ozaki 		atf_fail "Neighbor caches are not GC-ed"
    310       1.7     ozaki 	fi
    311       1.7     ozaki 
    312  1.12.2.1  pgoyette 	rump_server_destroy_ifaces
    313       1.7     ozaki }
    314       1.7     ozaki 
    315       1.9     ozaki make_pkt_str_na()
    316       1.9     ozaki {
    317       1.9     ozaki 	local ip=$1
    318       1.9     ozaki 	local mac=$2
    319       1.9     ozaki 	local pkt=
    320       1.9     ozaki 	pkt="$mac > 33:33:00:00:00:01, ethertype IPv6 (0x86dd), length 86:"
    321       1.9     ozaki 	pkt="$pkt $ip > ff02::1: ICMP6, neighbor advertisement"
    322       1.9     ozaki 	echo $pkt
    323       1.9     ozaki }
    324       1.9     ozaki 
    325      1.12     ozaki ndp_link_activation_body()
    326       1.9     ozaki {
    327       1.9     ozaki 	local linklocal=
    328       1.9     ozaki 
    329  1.12.2.1  pgoyette 	rump_server_start $SOCKSRC netinet6
    330  1.12.2.1  pgoyette 	rump_server_start $SOCKDST netinet6
    331       1.9     ozaki 
    332       1.9     ozaki 	setup_dst_server
    333       1.9     ozaki 	setup_src_server
    334       1.9     ozaki 
    335       1.9     ozaki 	# flush old packets
    336  1.12.2.1  pgoyette 	extract_new_packets bus1 > ./out
    337       1.9     ozaki 
    338       1.9     ozaki 	export RUMP_SERVER=$SOCKSRC
    339       1.9     ozaki 
    340       1.9     ozaki 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
    341       1.9     ozaki 	    b2:a1:00:00:00:01
    342       1.9     ozaki 
    343       1.9     ozaki 	atf_check -s exit:0 sleep 1
    344  1.12.2.1  pgoyette 	extract_new_packets bus1 > ./out
    345       1.9     ozaki 	$DEBUG && cat ./out
    346       1.9     ozaki 
    347       1.9     ozaki 	linklocal=$(rump.ifconfig shmif0 |awk '/fe80/ {print $2;}' |awk -F % '{print $1;}')
    348       1.9     ozaki 	$DEBUG && echo $linklocal
    349       1.9     ozaki 
    350       1.9     ozaki 	pkt=$(make_pkt_str_na $linklocal b2:a1:00:00:00:01)
    351       1.9     ozaki 	atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
    352       1.9     ozaki 
    353       1.9     ozaki 	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
    354       1.9     ozaki 	    b2:a1:00:00:00:02 active
    355       1.9     ozaki 
    356       1.9     ozaki 	atf_check -s exit:0 sleep 1
    357  1.12.2.1  pgoyette 	extract_new_packets bus1 > ./out
    358       1.9     ozaki 	$DEBUG && cat ./out
    359       1.9     ozaki 
    360       1.9     ozaki 	linklocal=$(rump.ifconfig shmif0 |awk '/fe80/ {print $2;}' |awk -F % '{print $1;}')
    361       1.9     ozaki 	$DEBUG && echo $linklocal
    362       1.9     ozaki 
    363       1.9     ozaki 	pkt=$(make_pkt_str_na $linklocal b2:a1:00:00:00:02)
    364       1.9     ozaki 	atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
    365       1.1     ozaki 
    366  1.12.2.1  pgoyette 	rump_server_destroy_ifaces
    367       1.1     ozaki }
    368       1.1     ozaki 
    369      1.12     ozaki ndp_cache_expiration_cleanup()
    370       1.1     ozaki {
    371       1.1     ozaki 	$DEBUG && dump
    372       1.1     ozaki 	cleanup
    373       1.1     ozaki }
    374       1.1     ozaki 
    375      1.12     ozaki ndp_commands_cleanup()
    376       1.1     ozaki {
    377       1.1     ozaki 	$DEBUG && dump
    378       1.1     ozaki 	cleanup
    379       1.1     ozaki }
    380       1.1     ozaki 
    381      1.12     ozaki ndp_cache_overwriting_cleanup()
    382       1.1     ozaki {
    383       1.1     ozaki 	$DEBUG && dump
    384       1.1     ozaki 	cleanup
    385       1.1     ozaki }
    386       1.1     ozaki 
    387      1.12     ozaki ndp_neighborgcthresh_cleanup()
    388       1.7     ozaki {
    389       1.7     ozaki 	$DEBUG && dump
    390       1.7     ozaki 	cleanup
    391       1.7     ozaki }
    392       1.7     ozaki 
    393      1.12     ozaki ndp_link_activation_cleanup()
    394       1.9     ozaki {
    395       1.9     ozaki 	$DEBUG && dump
    396       1.9     ozaki 	cleanup
    397       1.9     ozaki }
    398       1.9     ozaki 
    399       1.1     ozaki atf_init_test_cases()
    400       1.1     ozaki {
    401      1.12     ozaki 	atf_add_test_case ndp_cache_expiration
    402      1.12     ozaki 	atf_add_test_case ndp_commands
    403      1.12     ozaki 	atf_add_test_case ndp_cache_overwriting
    404      1.12     ozaki 	atf_add_test_case ndp_neighborgcthresh
    405      1.12     ozaki 	atf_add_test_case ndp_link_activation
    406       1.1     ozaki }
    407