xref: /freebsd/contrib/netbsd-tests/net/ndp/t_ra.sh (revision 8b25e8410533a6e69cceff910546b2dc485a5059)
1#	$NetBSD: t_ra.sh,v 1.20 2017/01/11 03:15:44 ozaki-r Exp $
2#
3# Copyright (c) 2015 Internet Initiative Japan 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
28RUMPSRV=unix://r1
29RUMPSRV1_2=unix://r12
30RUMPCLI=unix://r2
31RUMPSRV3=unix://r3
32RUMPSRV4=unix://r4
33IP6SRV=fc00:1::1
34IP6SRV1_2=fc00:1::2
35IP6SRV_PREFIX=fc00:1:
36IP6CLI=fc00:2::2
37IP6SRV3=fc00:3::1
38IP6SRV3_PREFIX=fc00:3:
39IP6SRV4=fc00:4::1
40IP6SRV4_PREFIX=fc00:4:
41PIDFILE=./rump.rtadvd.pid
42PIDFILE1_2=./rump.rtadvd.pid12
43PIDFILE3=./rump.rtadvd.pid3
44PIDFILE4=./rump.rtadvd.pid4
45CONFIG=./rtadvd.conf
46WAITTIME=2
47DEBUG=${DEBUG:-true}
48
49init_server()
50{
51
52	export RUMP_SERVER=$1
53	atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.forwarding=1
54	export LD_PRELOAD=/usr/lib/librumphijack.so
55	atf_check -s exit:0 mkdir -p /rump/var/chroot/rtadvd
56	unset LD_PRELOAD
57	unset RUMP_SERVER
58}
59
60setup_shmif0()
61{
62	local sock=$1
63	local IP6ADDR=$2
64
65	rump_server_add_iface $sock shmif0 bus1
66
67	export RUMP_SERVER=$sock
68	atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6ADDR}
69	atf_check -s exit:0 rump.ifconfig shmif0 up
70	atf_check -s exit:0 rump.ifconfig -w 10
71
72	$DEBUG && rump.ifconfig
73}
74
75wait_term()
76{
77	local PIDFILE=${1}
78	shift
79
80	while [ -f ${PIDFILE} ]
81	do
82		sleep 0.2
83	done
84
85	return 0
86}
87
88create_rtadvdconfig()
89{
90
91	cat << _EOF > ${CONFIG}
92shmif0:\
93	:mtu#1300:maxinterval#4:mininterval#3:
94_EOF
95}
96
97start_rtadvd()
98{
99	local sock=$1
100	local pidfile=$2
101
102	export RUMP_SERVER=$sock
103	atf_check -s exit:0 rump.rtadvd -c ${CONFIG} -p $pidfile shmif0
104	while [ ! -f $pidfile ]; do
105		sleep 0.2
106	done
107	unset RUMP_SERVER
108}
109
110check_entries()
111{
112	local cli=$1
113	local srv=$2
114	local addr_prefix=$3
115	local mac_srv= ll_srv=
116
117	ll_srv=$(get_linklocal_addr $srv shmif0)
118	mac_srv=$(get_macaddr $srv shmif0)
119
120	export RUMP_SERVER=$cli
121	$DEBUG && dump_entries
122	atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r
123	atf_check -s exit:0 -o match:'advertised' rump.ndp -p
124	atf_check -s exit:0 -o match:"${ll_srv}%shmif0 \(reachable\)" rump.ndp -p
125	atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
126	atf_check -s exit:0 \
127	    -o match:"$ll_srv%shmif0 +$mac_srv +shmif0 +(23h59m|1d0h0m)..s S R" \
128	    rump.ndp -n -a
129	atf_check -s exit:0 -o match:$addr_prefix rump.ndp -n -a
130	atf_check -s exit:0 -o match:"$addr_prefix.+<AUTOCONF>" \
131	    rump.ifconfig shmif0 inet6
132	unset RUMP_SERVER
133}
134
135dump_entries()
136{
137
138	echo ndp -n -a
139	rump.ndp -n -a
140	echo ndp -p
141	rump.ndp -p
142	echo ndp -r
143	rump.ndp -r
144}
145
146atf_test_case ra_basic cleanup
147ra_basic_head()
148{
149
150	atf_set "descr" "Tests for basic functions of router advaertisement(RA)"
151	atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
152}
153
154ra_basic_body()
155{
156
157	rump_server_fs_start $RUMPSRV netinet6
158	rump_server_start $RUMPCLI netinet6
159
160	setup_shmif0 ${RUMPSRV} ${IP6SRV}
161	init_server $RUMPSRV
162
163	setup_shmif0 ${RUMPCLI} ${IP6CLI}
164	export RUMP_SERVER=${RUMPCLI}
165	$DEBUG && rump.ndp -n -a
166	atf_check -s exit:0 -o match:'= 0' rump.sysctl net.inet6.ip6.accept_rtadv
167	unset RUMP_SERVER
168
169	create_rtadvdconfig
170	start_rtadvd $RUMPSRV $PIDFILE
171	sleep $WAITTIME
172
173	export RUMP_SERVER=${RUMPCLI}
174	atf_check -s exit:0 -o empty rump.ndp -r
175	atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p
176	atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0
177	atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a
178	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a
179	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
180	unset RUMP_SERVER
181
182	atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
183	wait_term ${PIDFILE}
184
185	export RUMP_SERVER=${RUMPCLI}
186	atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
187	unset RUMP_SERVER
188
189	start_rtadvd $RUMPSRV $PIDFILE
190	sleep $WAITTIME
191
192	check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
193
194	atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
195	wait_term ${PIDFILE}
196
197	rump_server_destroy_ifaces
198}
199
200ra_basic_cleanup()
201{
202
203	if [ -f ${PIDFILE} ]; then
204		kill -TERM `cat ${PIDFILE}`
205		wait_term ${PIDFILE}
206	fi
207
208	$DEBUG && dump
209	cleanup
210}
211
212atf_test_case ra_flush_prefix_entries cleanup
213ra_flush_prefix_entries_head()
214{
215
216	atf_set "descr" "Tests for flushing prefixes (ndp -P)"
217	atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
218}
219
220ra_flush_prefix_entries_body()
221{
222
223	rump_server_fs_start $RUMPSRV netinet6
224	rump_server_start $RUMPCLI netinet6
225
226	setup_shmif0 ${RUMPSRV} ${IP6SRV}
227	setup_shmif0 ${RUMPCLI} ${IP6CLI}
228
229	init_server $RUMPSRV
230
231	create_rtadvdconfig
232
233	export RUMP_SERVER=${RUMPCLI}
234	atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
235	unset RUMP_SERVER
236
237	start_rtadvd $RUMPSRV $PIDFILE
238	sleep $WAITTIME
239
240	check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
241
242	export RUMP_SERVER=${RUMPCLI}
243
244	# Terminate rtadvd to prevent new RA messages from coming
245	# Note that ifconfig down; kill -TERM doesn't work
246	kill -KILL `cat ${PIDFILE}`
247
248	# Flush all the entries in the prefix list
249	atf_check -s exit:0 rump.ndp -P
250
251	$DEBUG && dump_entries
252	atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r
253	atf_check -s exit:0 -o empty rump.ndp -p
254	atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
255	atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a
256	atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a
257	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
258	unset RUMP_SERVER
259
260	rump_server_destroy_ifaces
261}
262
263ra_flush_prefix_entries_cleanup()
264{
265
266	$DEBUG && dump
267	cleanup
268}
269
270atf_test_case ra_flush_defrouter_entries cleanup
271ra_flush_defrouter_entries_head()
272{
273
274	atf_set "descr" "Tests for flushing default routers (ndp -R)"
275	atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
276}
277
278ra_flush_defrouter_entries_body()
279{
280
281	rump_server_fs_start $RUMPSRV netinet6
282	rump_server_start $RUMPCLI netinet6
283
284	setup_shmif0 ${RUMPSRV} ${IP6SRV}
285	setup_shmif0 ${RUMPCLI} ${IP6CLI}
286
287	init_server $RUMPSRV
288
289	create_rtadvdconfig
290
291	export RUMP_SERVER=${RUMPCLI}
292	atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
293	unset RUMP_SERVER
294
295	start_rtadvd $RUMPSRV $PIDFILE
296	sleep $WAITTIME
297
298	check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
299
300	export RUMP_SERVER=${RUMPCLI}
301
302	# Terminate rtadvd to prevent new RA messages from coming
303	# Note that ifconfig down; kill -TERM doesn't work
304	kill -KILL `cat ${PIDFILE}`
305
306	# Flush all the entries in the default router list
307	atf_check -s exit:0 rump.ndp -R
308
309	$DEBUG && dump_entries
310	atf_check -s exit:0 -o empty rump.ndp -r
311	atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p
312	atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
313	atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a
314	atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a
315	atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6
316	unset RUMP_SERVER
317
318	rump_server_destroy_ifaces
319}
320
321ra_flush_defrouter_entries_cleanup()
322{
323
324	$DEBUG && dump
325	cleanup
326}
327
328atf_test_case ra_delete_address cleanup
329ra_delete_address_head()
330{
331
332	atf_set "descr" "Tests for deleting auto-configured address"
333	atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
334}
335
336ra_delete_address_body()
337{
338
339	rump_server_fs_start $RUMPSRV netinet6
340	rump_server_start $RUMPCLI netinet6
341
342	setup_shmif0 ${RUMPSRV} ${IP6SRV}
343	setup_shmif0 ${RUMPCLI} ${IP6CLI}
344
345	init_server $RUMPSRV
346
347	create_rtadvdconfig
348
349	export RUMP_SERVER=${RUMPCLI}
350	atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
351	unset RUMP_SERVER
352
353	start_rtadvd $RUMPSRV $PIDFILE
354	sleep $WAITTIME
355
356	check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
357
358	export RUMP_SERVER=${RUMPCLI}
359	$DEBUG && rump.ifconfig shmif0
360	atf_check -s exit:0 rump.ifconfig shmif0 inet6 \
361	    $(rump.ifconfig shmif0 |awk '/AUTOCONF/ {print $2}') delete
362	unset RUMP_SERVER
363
364	atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
365	wait_term ${PIDFILE}
366
367	rump_server_destroy_ifaces
368}
369
370ra_delete_address_cleanup()
371{
372
373	if [ -f ${PIDFILE} ]; then
374		kill -TERM `cat ${PIDFILE}`
375		wait_term ${PIDFILE}
376	fi
377
378	$DEBUG && dump
379	cleanup
380}
381
382atf_test_case ra_multiple_routers cleanup
383ra_multiple_routers_head()
384{
385
386	atf_set "descr" "Tests for multiple routers"
387	atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
388}
389
390ra_multiple_routers_body()
391{
392	local n=
393
394	rump_server_fs_start $RUMPSRV netinet6
395	rump_server_fs_start $RUMPSRV3 netinet6
396	rump_server_start $RUMPCLI netinet6
397
398	setup_shmif0 ${RUMPSRV} ${IP6SRV}
399	setup_shmif0 ${RUMPSRV3} ${IP6SRV3}
400	setup_shmif0 ${RUMPCLI} ${IP6CLI}
401
402	init_server $RUMPSRV
403	init_server $RUMPSRV3
404
405	create_rtadvdconfig
406
407	export RUMP_SERVER=${RUMPCLI}
408	atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
409	unset RUMP_SERVER
410
411	start_rtadvd $RUMPSRV $PIDFILE
412	start_rtadvd $RUMPSRV3 $PIDFILE3
413	sleep $WAITTIME
414
415	check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
416	check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX
417
418	export RUMP_SERVER=$RUMPCLI
419	# Two prefixes are advertised by differnt two routers
420	n=$(rump.ndp -p |grep 'advertised by' |wc -l)
421	atf_check_equal $n 2
422	unset RUMP_SERVER
423
424	atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
425	wait_term ${PIDFILE}
426	atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}`
427	wait_term ${PIDFILE3}
428
429	rump_server_destroy_ifaces
430}
431
432ra_multiple_routers_cleanup()
433{
434
435	if [ -f ${PIDFILE} ]; then
436		kill -TERM `cat ${PIDFILE}`
437		wait_term ${PIDFILE}
438	fi
439	if [ -f ${PIDFILE3} ]; then
440		kill -TERM `cat ${PIDFILE3}`
441		wait_term ${PIDFILE3}
442	fi
443
444	$DEBUG && dump
445	cleanup
446}
447
448atf_test_case ra_multiple_routers_single_prefix cleanup
449ra_multiple_routers_single_prefix_head()
450{
451
452	atf_set "descr" "Tests for multiple routers with a single prefix"
453	atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
454}
455
456ra_multiple_routers_single_prefix_body()
457{
458	local n=
459
460	rump_server_fs_start $RUMPSRV netinet6
461	rump_server_fs_start $RUMPSRV1_2 netinet6
462	rump_server_start $RUMPCLI netinet6
463
464	setup_shmif0 ${RUMPSRV} ${IP6SRV}
465	setup_shmif0 ${RUMPSRV1_2} ${IP6SRV1_2}
466	setup_shmif0 ${RUMPCLI} ${IP6CLI}
467
468	init_server $RUMPSRV
469	init_server $RUMPSRV1_2
470
471	create_rtadvdconfig
472
473	export RUMP_SERVER=${RUMPCLI}
474	atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
475	unset RUMP_SERVER
476
477	start_rtadvd $RUMPSRV $PIDFILE
478	start_rtadvd $RUMPSRV1_2 $PIDFILE1_2
479	sleep $WAITTIME
480
481	check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
482	check_entries $RUMPCLI $RUMPSRV1_2 $IP6SRV_PREFIX
483
484	export RUMP_SERVER=$RUMPCLI
485	# One prefix is advertised by differnt two routers
486	n=$(rump.ndp -p |grep 'advertised by' |wc -l)
487	atf_check_equal $n 1
488	unset RUMP_SERVER
489
490	atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
491	wait_term ${PIDFILE}
492	atf_check -s exit:0 kill -TERM `cat ${PIDFILE1_2}`
493	wait_term ${PIDFILE1_2}
494
495	rump_server_destroy_ifaces
496}
497
498ra_multiple_routers_single_prefix_cleanup()
499{
500
501	if [ -f ${PIDFILE} ]; then
502		kill -TERM `cat ${PIDFILE}`
503		wait_term ${PIDFILE}
504	fi
505	if [ -f ${PIDFILE1_2} ]; then
506		kill -TERM `cat ${PIDFILE1_2}`
507		wait_term ${PIDFILE1_2}
508	fi
509
510	$DEBUG && dump
511	cleanup
512}
513
514atf_test_case ra_multiple_routers_maxifprefixes cleanup
515ra_multiple_routers_maxifprefixes_head()
516{
517
518	atf_set "descr" "Tests for exceeding the number of maximum prefixes"
519	atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
520}
521
522ra_multiple_routers_maxifprefixes_body()
523{
524	local n=
525
526	rump_server_fs_start $RUMPSRV netinet6
527	rump_server_fs_start $RUMPSRV3 netinet6
528	rump_server_fs_start $RUMPSRV4 netinet6
529	rump_server_start $RUMPCLI netinet6
530
531	setup_shmif0 ${RUMPSRV} ${IP6SRV}
532	setup_shmif0 ${RUMPSRV3} ${IP6SRV3}
533	setup_shmif0 ${RUMPSRV4} ${IP6SRV4}
534	setup_shmif0 ${RUMPCLI} ${IP6CLI}
535
536	init_server $RUMPSRV
537	init_server $RUMPSRV3
538	init_server $RUMPSRV4
539
540	create_rtadvdconfig
541
542	export RUMP_SERVER=${RUMPCLI}
543	atf_check -s exit:0 -o match:'0.->.1' \
544	    rump.sysctl -w net.inet6.ip6.accept_rtadv=1
545	# Limit the maximum number of prefix entries to 2
546	atf_check -s exit:0 -o match:'16.->.2' \
547	    rump.sysctl -w net.inet6.ip6.maxifprefixes=2
548	unset RUMP_SERVER
549
550	start_rtadvd $RUMPSRV $PIDFILE
551	start_rtadvd $RUMPSRV3 $PIDFILE3
552	sleep $WAITTIME
553
554	check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
555	check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX
556
557	start_rtadvd $RUMPSRV4 $PIDFILE4
558	sleep $WAITTIME
559
560	export RUMP_SERVER=${RUMPCLI}
561	$DEBUG && dump_entries
562	# There should remain two prefixes
563	n=$(rump.ndp -p |grep 'advertised by' |wc -l)
564	atf_check_equal $n 2
565	# TODO check other conditions
566	unset RUMP_SERVER
567
568	atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
569	wait_term ${PIDFILE}
570	atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}`
571	wait_term ${PIDFILE3}
572	atf_check -s exit:0 kill -TERM `cat ${PIDFILE4}`
573	wait_term ${PIDFILE4}
574
575	rump_server_destroy_ifaces
576}
577
578ra_multiple_routers_maxifprefixes_cleanup()
579{
580
581	if [ -f ${PIDFILE} ]; then
582		kill -TERM `cat ${PIDFILE}`
583		wait_term ${PIDFILE}
584	fi
585	if [ -f ${PIDFILE3} ]; then
586		kill -TERM `cat ${PIDFILE3}`
587		wait_term ${PIDFILE3}
588	fi
589	if [ -f ${PIDFILE4} ]; then
590		kill -TERM `cat ${PIDFILE4}`
591		wait_term ${PIDFILE4}
592	fi
593
594	$DEBUG && dump
595	cleanup
596}
597
598atf_test_case ra_temporary_address cleanup
599ra_temporary_address_head()
600{
601
602	atf_set "descr" "Tests for IPv6 temporary address"
603	atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
604}
605
606ra_temporary_address_body()
607{
608
609	rump_server_fs_start $RUMPSRV netinet6
610	rump_server_start $RUMPCLI netinet6
611
612	setup_shmif0 ${RUMPSRV} ${IP6SRV}
613	init_server $RUMPSRV
614
615	setup_shmif0 ${RUMPCLI} ${IP6CLI}
616	export RUMP_SERVER=${RUMPCLI}
617	$DEBUG && rump.ndp -n -a
618	atf_check -s exit:0 -o match:'= 0' \
619	    rump.sysctl net.inet6.ip6.accept_rtadv
620	atf_check -s exit:0 -o match:'= 0' \
621	    rump.sysctl net.inet6.ip6.use_tempaddr
622	unset RUMP_SERVER
623
624	create_rtadvdconfig
625	start_rtadvd $RUMPSRV $PIDFILE
626	sleep $WAITTIME
627
628	export RUMP_SERVER=${RUMPCLI}
629	atf_check -s exit:0 -o empty rump.ndp -r
630	atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p
631	atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0
632	atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a
633	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a
634	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
635	unset RUMP_SERVER
636
637	atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
638	wait_term ${PIDFILE}
639
640	export RUMP_SERVER=${RUMPCLI}
641	atf_check -s exit:0 -o match:'0.->.1' \
642	    rump.sysctl -w net.inet6.ip6.accept_rtadv=1
643	atf_check -s exit:0 -o match:'0.->.1' \
644	    rump.sysctl -w net.inet6.ip6.use_tempaddr=1
645	unset RUMP_SERVER
646
647	start_rtadvd $RUMPSRV $PIDFILE
648	sleep $WAITTIME
649
650	check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
651
652	# Check temporary address
653	export RUMP_SERVER=${RUMPCLI}
654	atf_check -s exit:0 -o match:"$IP6SRV_PREFIX.+<AUTOCONF,TEMPORARY>" \
655	    rump.ifconfig shmif0 inet6
656	unset RUMP_SERVER
657
658	atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
659	wait_term ${PIDFILE}
660
661	rump_server_destroy_ifaces
662}
663
664ra_temporary_address_cleanup()
665{
666
667	if [ -f ${PIDFILE} ]; then
668		kill -TERM `cat ${PIDFILE}`
669		wait_term ${PIDFILE}
670	fi
671
672	$DEBUG && dump
673	cleanup
674}
675
676atf_init_test_cases()
677{
678
679	atf_add_test_case ra_basic
680	atf_add_test_case ra_flush_prefix_entries
681	atf_add_test_case ra_flush_defrouter_entries
682	atf_add_test_case ra_delete_address
683	atf_add_test_case ra_multiple_routers
684	atf_add_test_case ra_multiple_routers_single_prefix
685	atf_add_test_case ra_multiple_routers_maxifprefixes
686	atf_add_test_case ra_temporary_address
687}
688