xref: /netbsd-src/tests/net/if_pppoe/t_pppoe.sh (revision e5d758f832e07a177fa24707c434b7ce26d0f762)
1#	$NetBSD: t_pppoe.sh,v 1.24 2020/11/25 10:35:07 yamaguchi Exp $
2#
3# Copyright (c) 2016 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
28SERVER=unix://pppoe_server
29CLIENT=unix://pppoe_client
30
31SERVER_IP=10.3.3.1
32CLIENT_IP=10.3.3.3
33SERVER_IP6=fc00::1
34CLIENT_IP6=fc00::3
35AUTHNAME=foobar@baz.com
36SECRET=oink
37BUS=bus0
38TIMEOUT=3
39WAITTIME=10
40DEBUG=${DEBUG:-false}
41
42atf_test_case pppoe_create_destroy cleanup
43pppoe_create_destroy_head()
44{
45
46	atf_set "descr" "Test creating/destroying pppoe interfaces"
47	atf_set "require.progs" "rump_server"
48}
49
50pppoe_create_destroy_body()
51{
52
53	rump_server_start $CLIENT netinet6 pppoe
54
55	test_create_destroy_common $CLIENT pppoe0 true
56}
57
58pppoe_create_destroy_cleanup()
59{
60
61	$DEBUG && dump
62	cleanup
63}
64
65setup_ifaces()
66{
67
68	rump_server_add_iface $SERVER shmif0 $BUS
69	rump_server_add_iface $CLIENT shmif0 $BUS
70	rump_server_add_iface $SERVER pppoe0
71	rump_server_add_iface $CLIENT pppoe0
72
73	export RUMP_SERVER=$SERVER
74	atf_check -s exit:0 rump.ifconfig shmif0 up
75	$inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
76	    inet $SERVER_IP $CLIENT_IP down
77	atf_check -s exit:0 rump.ifconfig pppoe0 link0
78
79	$DEBUG && rump.ifconfig
80	$DEBUG && $HIJACKING pppoectl -d pppoe0
81	unset RUMP_SERVER
82
83	export RUMP_SERVER=$CLIENT
84	atf_check -s exit:0 rump.ifconfig shmif0 up
85
86	$inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
87	    inet 0.0.0.0 0.0.0.1 down
88
89	$DEBUG && rump.ifconfig
90	$DEBUG && $HIJACKING pppoectl -d pppoe0
91	unset RUMP_SERVER
92}
93
94setup()
95{
96	inet=true
97
98	if [ $# -ne 0 ]; then
99		eval $@
100	fi
101
102	rump_server_start $SERVER netinet6 pppoe
103	rump_server_start $CLIENT netinet6 pppoe
104
105	setup_ifaces
106
107	export RUMP_SERVER=$SERVER
108	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
109	unset RUMP_SERVER
110
111	export RUMP_SERVER=$CLIENT
112	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
113	unset RUMP_SERVER
114}
115
116wait_for_opened()
117{
118	local cp=$1
119	local dontfail=$2
120	local n=$WAITTIME
121
122	for i in $(seq $n); do
123		$HIJACKING pppoectl -dd pppoe0 | grep -q "$cp state: opened"
124		if [ $? = 0 ]; then
125			rump.ifconfig -w 10
126			return
127		fi
128		sleep 1
129	done
130
131	if [ "$dontfail" != "dontfail" ]; then
132		atf_fail "Couldn't connect to the server for $n seconds."
133	fi
134}
135
136wait_for_disconnected()
137{
138	local dontfail=$1
139	local n=$WAITTIME
140
141	for i in $(seq $n); do
142		# If PPPoE client is disconnected by PPPoE server, then
143		# the LCP state will of the client is in a starting to send PADI.
144		$HIJACKING pppoectl -dd pppoe0 | grep -q \
145		    -e "LCP state: initial" -e "LCP state: starting"
146		[ $? = 0 ] && return
147
148		sleep 1
149	done
150
151	if [ "$dontfail" != "dontfail" ]; then
152		atf_fail "Couldn't disconnect for $n seconds."
153	fi
154}
155
156run_test()
157{
158	local auth=$1
159	local cp="IPCP"
160	setup
161
162	# As pppoe client doesn't support rechallenge yet.
163	local server_optparam=""
164	if [ $auth = "chap" ]; then
165		server_optparam="norechallenge"
166	fi
167
168	export RUMP_SERVER=$SERVER
169	local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
170				    'hisauthname=$AUTHNAME' \
171				    'hisauthsecret=$SECRET' \
172				    'myauthproto=none' \
173				    $server_optparam"
174	atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
175	atf_check -s exit:0 rump.ifconfig pppoe0 up
176	unset RUMP_SERVER
177
178	export RUMP_SERVER=$CLIENT
179	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
180				    'myauthname=$AUTHNAME' \
181				    'myauthsecret=$SECRET' \
182				    'hisauthproto=none'"
183	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
184	atf_check -s exit:0 rump.ifconfig pppoe0 up
185	$DEBUG && rump.ifconfig
186	wait_for_opened $cp
187	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
188	unset RUMP_SERVER
189
190	# test for disconnection from server
191	export RUMP_SERVER=$SERVER
192	atf_check -s exit:0 rump.ifconfig pppoe0 down
193	wait_for_disconnected
194	export RUMP_SERVER=$CLIENT
195	wait_for_disconnected
196	atf_check -s not-exit:0 -o ignore -e ignore \
197	    rump.ping -c 1 -w $TIMEOUT $SERVER_IP
198	atf_check -s exit:0 -o match:'PADI sent' -x "$HIJACKING pppoectl -d pppoe0"
199	unset RUMP_SERVER
200
201	# test for reconnecting
202	atf_check -s exit:0 -x "env RUMP_SERVER=$SERVER rump.ifconfig pppoe0 up"
203	export RUMP_SERVER=$CLIENT
204	wait_for_opened $cp
205	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
206	unset RUMP_SERVER
207
208	# test for disconnection from client
209	export RUMP_SERVER=$CLIENT
210	atf_check -s exit:0 -x rump.ifconfig pppoe0 down
211	wait_for_disconnected
212	export RUMP_SERVER=$SERVER
213	wait_for_disconnected
214	$DEBUG && $HIJACKING pppoectl -d pppoe0
215	atf_check -s not-exit:0 -o ignore -e ignore \
216	    rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
217	atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
218	unset RUMP_SERVER
219
220	# test for reconnecting
221	export RUMP_SERVER=$CLIENT
222	atf_check -s exit:0 -x rump.ifconfig pppoe0 up
223	wait_for_opened $cp
224	$DEBUG && rump.ifconfig pppoe0
225	$DEBUG && $HIJACKING pppoectl -d pppoe0
226	unset RUMP_SERVER
227
228	export RUMP_SERVER=$SERVER
229	atf_check -s exit:0 rump.ifconfig -w 10
230	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
231	atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
232	$DEBUG && HIJACKING pppoectl -d pppoe0
233	unset RUMP_SERVER
234
235	# test for invalid password
236	export RUMP_SERVER=$CLIENT
237	atf_check -s exit:0 rump.ifconfig pppoe0 down
238	wait_for_disconnected
239	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
240				    'myauthname=$AUTHNAME' \
241				    'myauthsecret=invalidsecret' \
242				    'hisauthproto=none' \
243				    'max-auth-failure=1'"
244	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
245	atf_check -s exit:0 rump.ifconfig pppoe0 up
246	wait_for_opened $cp dontfail
247	atf_check -s not-exit:0 -o ignore -e ignore \
248	    rump.ping -c 1 -w $TIMEOUT $SERVER_IP
249	atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
250	unset RUMP_SERVER
251}
252
253atf_test_case pppoe_pap cleanup
254
255pppoe_pap_head()
256{
257	atf_set "descr" "Does simple pap tests"
258	atf_set "require.progs" "rump_server pppoectl"
259}
260
261pppoe_pap_body()
262{
263	run_test pap
264}
265
266pppoe_pap_cleanup()
267{
268
269	$DEBUG && dump
270	cleanup
271}
272
273atf_test_case pppoe_chap cleanup
274
275pppoe_chap_head()
276{
277	atf_set "descr" "Does simple chap tests"
278	atf_set "require.progs" "rump_server pppoectl"
279}
280
281pppoe_chap_body()
282{
283	run_test chap
284}
285
286pppoe_chap_cleanup()
287{
288
289	$DEBUG && dump
290	cleanup
291}
292
293run_test6()
294{
295	local auth=$1
296	local cp="IPv6CP"
297	setup "inet=false"
298
299	# As pppoe client doesn't support rechallenge yet.
300	local server_optparam=""
301	if [ $auth = "chap" ]; then
302		server_optparam="norechallenge"
303	fi
304
305	export RUMP_SERVER=$SERVER
306	local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
307				    'hisauthname=$AUTHNAME' \
308				    'hisauthsecret=$SECRET' \
309				    'myauthproto=none' \
310				    $server_optparam"
311	atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
312	atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $SERVER_IP6/64 down
313	atf_check -s exit:0 rump.ifconfig pppoe0 up
314	unset RUMP_SERVER
315
316	export RUMP_SERVER=$CLIENT
317	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
318				    'myauthname=$AUTHNAME' \
319				    'myauthsecret=$SECRET' \
320				    'hisauthproto=none'"
321	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
322	atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $CLIENT_IP6/64 down
323	atf_check -s exit:0 rump.ifconfig pppoe0 up
324	$DEBUG && rump.ifconfig
325	wait_for_opened $cp
326	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
327	export RUMP_SERVER=$SERVER
328	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
329	export RUMP_SERVER=$CLIENT
330	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
331	unset RUMP_SERVER
332
333	# test for disconnection from server
334	export RUMP_SERVER=$SERVER
335	session_id=`$HIJACKING pppoectl -d pppoe0 | grep state`
336	atf_check -s exit:0 rump.ifconfig pppoe0 down
337	wait_for_disconnected
338	export RUMP_SERVER=$CLIENT
339	wait_for_disconnected
340	atf_check -s not-exit:0 -o ignore -e ignore \
341	    rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
342	atf_check -s exit:0 -o not-match:"$session_id" -x "$HIJACKING pppoectl -d pppoe0"
343	unset RUMP_SERVER
344
345	# test for reconnecting
346	export RUMP_SERVER=$SERVER
347	atf_check -s exit:0 rump.ifconfig pppoe0 up
348	wait_for_opened $cp
349	atf_check -s exit:0 rump.ifconfig -w 10
350	$DEBUG && $HIJACKING pppoectl -d pppoe0
351	$DEBUG && rump.ifconfig pppoe0
352	export RUMP_SERVER=$CLIENT
353	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
354	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
355	unset RUMP_SERVER
356
357	# test for disconnection from client
358	export RUMP_SERVER=$CLIENT
359	atf_check -s exit:0 rump.ifconfig pppoe0 down
360	wait_for_disconnected
361
362	export RUMP_SERVER=$SERVER
363	wait_for_disconnected
364	$DEBUG && $HIJACKING pppoectl -d pppoe0
365	atf_check -s not-exit:0 -o ignore -e ignore \
366	    rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
367	atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
368	unset RUMP_SERVER
369
370	# test for reconnecting
371	export RUMP_SERVER=$CLIENT
372	atf_check -s exit:0 rump.ifconfig pppoe0 up
373	wait_for_opened $cp
374	atf_check -s exit:0 rump.ifconfig -w 10
375
376	$DEBUG && rump.ifconfig pppoe0
377	$DEBUG && $HIJACKING pppoectl -d pppoe0
378	unset RUMP_SERVER
379
380	export RUMP_SERVER=$SERVER
381	atf_check -s exit:0 rump.ifconfig -w 10
382	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
383	atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
384	$DEBUG && HIJACKING pppoectl -d pppoe0
385	unset RUMP_SERVER
386
387	# test for invalid password
388	export RUMP_SERVER=$CLIENT
389	atf_check -s exit:0 rump.ifconfig pppoe0 down
390	wait_for_disconnected
391	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
392				    'myauthname=$AUTHNAME' \
393				    'myauthsecret=invalidsecret' \
394				    'hisauthproto=none' \
395				    'max-auth-failure=1'"
396	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
397	atf_check -s exit:0 rump.ifconfig pppoe0 up
398	wait_for_opened $cp dontfail
399	atf_check -s not-exit:0 -o ignore -e ignore \
400	    rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
401	atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
402	unset RUMP_SERVER
403}
404
405atf_test_case pppoe6_pap cleanup
406
407pppoe6_pap_head()
408{
409	atf_set "descr" "Does simple pap using IPv6 tests"
410	atf_set "require.progs" "rump_server pppoectl"
411}
412
413pppoe6_pap_body()
414{
415	run_test6 pap
416}
417
418pppoe6_pap_cleanup()
419{
420
421	$DEBUG && dump
422	cleanup
423}
424
425atf_test_case pppoe6_chap cleanup
426
427pppoe6_chap_head()
428{
429	atf_set "descr" "Does simple chap using IPv6 tests"
430	atf_set "require.progs" "rump_server pppoectl"
431}
432
433pppoe6_chap_body()
434{
435	run_test6 chap
436}
437
438pppoe6_chap_cleanup()
439{
440
441	$DEBUG && dump
442	cleanup
443}
444
445atf_test_case pppoe_params cleanup
446
447dump_bus()
448{
449
450	shmif_dumpbus -p - ${BUS} | tcpdump -n -e -r -
451}
452
453setup_auth_conf()
454{
455	local auth=chap
456
457	export RUMP_SERVER=$SERVER
458	local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
459				    'hisauthname=$AUTHNAME' \
460				    'hisauthsecret=$SECRET' \
461				    'myauthproto=none' \
462				    $server_optparam"
463
464	atf_check -s exit:0 rump.ifconfig pppoe0 link0
465	atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
466	unset RUMP_SERVER
467
468	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
469				    'myauthname=$AUTHNAME' \
470				    'myauthsecret=$SECRET' \
471				    'hisauthproto=none'"
472
473	export RUMP_SERVER=$CLIENT
474	$inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
475	    inet 0.0.0.0 0.0.0.1 down
476	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
477	$DEBUG && rump.ifconfig
478	unset RUMP_SERVER
479}
480
481pppoe_params_head()
482{
483	atf_set "descr" "Set and clear access concentrator name and service name"
484	atf_set "require.progs" "rump_server pppoectl"
485}
486
487pppoe_params_body()
488{
489	local dumpcmd
490	local cp="LCP"
491
492	dumpcmd="shmif_dumpbus -p - ${BUS}"
493	dumpcmd="${dumpcmd} | tcpdump -n -e -r -"
494
495	rump_server_start $SERVER netinet6 pppoe
496	rump_server_start $CLIENT netinet6 pppoe
497
498	setup_ifaces
499	setup_auth_conf
500
501	export RUMP_SERVER=$SERVER
502	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
503	atf_check -s exit:0 rump.ifconfig pppoe0 up
504	unset RUMP_SERVER
505
506	export RUMP_SERVER=$CLIENT
507	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
508	atf_check -s exit:0 rump.ifconfig pppoe0 up
509	$DEBUG && rump.ifconfig
510	wait_for_opened $cp
511	unset RUMP_SERVER
512
513	$DEBUG && dump_bus
514	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
515	    -x "${dumpcmd} | grep PADI"
516	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
517	    -x "${dumpcmd} | grep PADR"
518	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
519	    -x "${dumpcmd} | grep PADI"
520
521	# set Remote access concentrator name (AC-NAME, -a option)
522	export RUMP_SERVER=$CLIENT
523	atf_check -s exit:0 rump.ifconfig pppoe0 down
524	wait_for_disconnected
525	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 -a ACNAME-TEST0 pppoe0"
526	atf_check -s exit:0 rump.ifconfig pppoe0 up
527	$DEBUG && rump.ifconfig
528	wait_for_opened $cp
529	unset RUMP_SERVER
530
531	$DEBUG && dump_bus
532	atf_check -s exit:0 -o match:'\[AC-Name "ACNAME-TEST0"\]' -e ignore \
533	    -x "${dumpcmd} | grep PADI"
534
535	# change AC-NAME
536	export RUMP_SERVER=$CLIENT
537	atf_check -s exit:0 rump.ifconfig pppoe0 down
538	wait_for_disconnected
539	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 -a ACNAME-TEST1 pppoe0"
540	atf_check -s exit:0 rump.ifconfig pppoe0 up
541	$DEBUG && rump.ifconfig
542	wait_for_opened $cp
543	unset RUMP_SERVER
544
545	$DEBUG && dump_bus
546	atf_check -s exit:0 -o match:'\[AC-Name "ACNAME-TEST1"\]' -e ignore \
547	    -x "${dumpcmd} | grep PADI"
548
549	# clear AC-NAME
550	rump_server_destroy_ifaces
551	rm ${BUS} 2> /dev/null
552	setup_ifaces
553	setup_auth_conf
554
555	export RUMP_SERVER=$SERVER
556	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
557	atf_check -s exit:0 rump.ifconfig pppoe0 up
558	unset RUMP_SERVER
559
560	export RUMP_SERVER=$CLIENT
561	atf_check -s exit:0 rump.ifconfig pppoe0 down
562	wait_for_disconnected
563	atf_check -s exit:0 -x "$HIJACKING pppoectl -a ACNAME-TEST2 -e shmif0 pppoe0"
564	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
565	atf_check -s exit:0 rump.ifconfig pppoe0 up
566	$DEBUG && rump.ifconfig
567	wait_for_opened $cp
568	unset RUMP_SERVER
569
570	$DEBUG && dump_bus
571	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
572	    -x "${dumpcmd} | grep PADI"
573	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
574	    -x "${dumpcmd} | grep PADR"
575	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
576	    -x "${dumpcmd} | grep PADI"
577
578	# store 0 length string in AC-NAME
579	export RUMP_SERVER=$CLIENT
580	atf_check -s exit:0 rump.ifconfig pppoe0 down
581	wait_for_disconnected
582	atf_check -s exit:0 -x "$HIJACKING pppoectl -a \"\" -e shmif0 pppoe0"
583	atf_check -s exit:0 rump.ifconfig pppoe0 up
584	$DEBUG && rump.ifconfig
585	wait_for_opened $cp
586	unset RUMP_SERVER
587
588	atf_check -s exit:0 -o match:'\[AC-Name\]' -e ignore \
589	    -x "${dumpcmd} | grep PADI"
590
591	# set Service Name (Service-Name, -s option)
592	rump_server_destroy_ifaces
593	rm ${BUS} 2> /dev/null
594	setup_ifaces
595	setup_auth_conf
596
597	export RUMP_SERVER=$SERVER
598	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
599	atf_check -s exit:0 rump.ifconfig pppoe0 up
600	unset RUMP_SERVER
601
602	export RUMP_SERVER=$CLIENT
603	atf_check -s exit:0 rump.ifconfig pppoe0 down
604	wait_for_disconnected
605	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 -s SNAME-TEST0 pppoe0"
606	atf_check -s exit:0 rump.ifconfig pppoe0 up
607	$DEBUG && rump.ifconfig
608	wait_for_opened $cp
609	unset RUMP_SERVER
610
611	$DEBUG && dump_bus
612	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST0"\]' -e ignore \
613	    -x "${dumpcmd} | grep PADI"
614	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST0"\]' -e ignore \
615	    -x "${dumpcmd} | grep PADR"
616	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
617	    -x "${dumpcmd} | grep PADI"
618
619	# change Service-Name
620	export RUMP_SERVER=$CLIENT
621	atf_check -s exit:0 rump.ifconfig pppoe0 down
622	wait_for_disconnected
623	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 -s SNAME-TEST1 pppoe0"
624	atf_check -s exit:0 rump.ifconfig pppoe0 up
625	$DEBUG && rump.ifconfig
626	wait_for_opened $cp
627	unset RUMP_SERVER
628
629	$DEBUG && dump_bus
630	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST1"\]' -e ignore \
631	    -x "${dumpcmd} | grep PADI"
632	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST1"\]' -e ignore \
633	    -x "${dumpcmd} | grep PADR"
634
635	# clear Service-Name
636	rump_server_destroy_ifaces
637	rm ${BUS} 2> /dev/null
638	setup_ifaces
639	setup_auth_conf
640
641	export RUMP_SERVER=$SERVER
642	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
643	atf_check -s exit:0 rump.ifconfig pppoe0 up
644	unset RUMP_SERVER
645
646	export RUMP_SERVER=$CLIENT
647	atf_check -s exit:0 rump.ifconfig pppoe0 down
648	wait_for_disconnected
649	atf_check -s exit:0 -x "$HIJACKING pppoectl -s SNAME-TEST2 -e shmif0 pppoe0"
650	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
651	atf_check -s exit:0 rump.ifconfig pppoe0 up
652	$DEBUG && rump.ifconfig
653	wait_for_opened $cp
654	unset RUMP_SERVER
655
656	$DEBUG && dump_bus
657	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
658	    -x "${dumpcmd} | grep PADI"
659	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
660	    -x "${dumpcmd} | grep PADR"
661	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
662	    -x "${dumpcmd} | grep PADI"
663
664	# set AC-NAME and Service-Name
665	rump_server_destroy_ifaces
666	rm ${BUS} 2> /dev/null
667	setup_ifaces
668	setup_auth_conf
669
670	export RUMP_SERVER=$SERVER
671	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
672	atf_check -s exit:0 rump.ifconfig pppoe0 up
673	unset RUMP_SERVER
674
675	export RUMP_SERVER=$CLIENT
676	atf_check -s exit:0 rump.ifconfig pppoe0 down
677	wait_for_disconnected
678	atf_check -s exit:0 -x \
679	    "$HIJACKING pppoectl -e shmif0 -a ACNAME-TEST3 -s SNAME-TEST3 pppoe0"
680	atf_check -s exit:0 rump.ifconfig pppoe0 up
681	$DEBUG && rump.ifconfig
682	wait_for_opened $cp
683	unset RUMP_SERVER
684
685	$DEBUG && dump_bus
686	atf_check -s exit:0 \
687	    -o match:'\[Service-Name "SNAME-TEST3"\] \[AC-Name "ACNAME-TEST3"\]' \
688	    -e ignore \
689	    -x "${dumpcmd} | grep PADI"
690	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST3"\]' -e ignore \
691	    -x "${dumpcmd} | grep PADR"
692
693	# change AC-NAME
694	export RUMP_SERVER=$CLIENT
695	atf_check -s exit:0 rump.ifconfig pppoe0 down
696	wait_for_disconnected
697	atf_check -s exit:0 -x \
698	    "$HIJACKING pppoectl -e shmif0 -a ACNAME-TEST4 pppoe0"
699	atf_check -s exit:0 rump.ifconfig pppoe0 up
700	$DEBUG && rump.ifconfig
701	wait_for_opened $cp
702	unset RUMP_SERVER
703
704	$DEBUG && dump_bus
705	atf_check -s exit:0 \
706	    -o match:'\[Service-Name\] \[AC-Name "ACNAME-TEST4"\]' \
707	    -e ignore \
708	    -x "${dumpcmd} | grep PADI"
709	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
710	    -x "${dumpcmd} | grep PADR"
711
712	# change Service-Name
713	export RUMP_SERVER=$CLIENT
714	atf_check -s exit:0 rump.ifconfig pppoe0 down
715	wait_for_disconnected
716	atf_check -s exit:0 -x \
717	    "$HIJACKING pppoectl -e shmif0 -a ACNAME-TEST5 -s SNAME-TEST5 pppoe0"
718	atf_check -s exit:0 -x \
719	    "$HIJACKING pppoectl -e shmif0 -s SNAME-TEST6 pppoe0"
720	atf_check -s exit:0 rump.ifconfig pppoe0 up
721	$DEBUG && rump.ifconfig
722	wait_for_opened $cp
723	unset RUMP_SERVER
724
725	$DEBUG && dump_bus
726	atf_check -s exit:0 \
727	    -o match:'\[Service-Name "SNAME-TEST6"\]' \
728	    -e ignore \
729	    -x "${dumpcmd} | grep PADI"
730	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST6"\]' -e ignore \
731	    -x "${dumpcmd} | grep PADR"
732	atf_check -s exit:0 -o not-match:'\[AC-Name "ACNAME-TEST5\]"' -e ignore \
733	    -x "${dumpcmd} | grep PADI"
734}
735
736pppoe_params_cleanup()
737{
738
739	$DEBUG && dump
740	cleanup
741}
742atf_init_test_cases()
743{
744
745	atf_add_test_case pppoe_create_destroy
746	atf_add_test_case pppoe_params
747	atf_add_test_case pppoe_pap
748	atf_add_test_case pppoe_chap
749	atf_add_test_case pppoe6_pap
750	atf_add_test_case pppoe6_chap
751}
752