xref: /freebsd/contrib/netbsd-tests/net/ndp/t_ndp.sh (revision d370fd1cd8fc69e87dc63f4f4a82e5a8b4956c93)
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