xref: /netbsd-src/tests/net/if_pppoe/t_pppoe.sh (revision 8ccc16d5e64e0c71060ae91ee5fe3669926afb29)
1#	$NetBSD: t_pppoe.sh,v 1.33 2021/06/01 05:18:33 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_ifconfig()
43{
44
45	atf_check -s exit:0 rump.ifconfig $*
46}
47
48atf_pppoectl()
49{
50
51	atf_check -s exit:0 -x "$HIJACKING pppoectl $*"
52}
53
54atf_test_case pppoe_create_destroy cleanup
55pppoe_create_destroy_head()
56{
57
58	atf_set "descr" "Test creating/destroying pppoe interfaces"
59	atf_set "require.progs" "rump_server"
60}
61
62pppoe_create_destroy_body()
63{
64
65	rump_server_start $CLIENT netinet6 pppoe
66
67	test_create_destroy_common $CLIENT pppoe0 true
68}
69
70pppoe_create_destroy_cleanup()
71{
72
73	$DEBUG && dump
74	cleanup
75}
76
77setup_ifaces()
78{
79
80	rump_server_add_iface $SERVER shmif0 $BUS
81	rump_server_add_iface $CLIENT shmif0 $BUS
82	rump_server_add_iface $SERVER pppoe0
83	rump_server_add_iface $CLIENT pppoe0
84
85	export RUMP_SERVER=$SERVER
86	atf_ifconfig shmif0 up
87	$inet && atf_ifconfig pppoe0 \
88	    inet $SERVER_IP $CLIENT_IP down
89	atf_ifconfig pppoe0 link0
90
91	$DEBUG && rump.ifconfig pppoe0 debug
92	$DEBUG && rump.ifconfig
93	$DEBUG && $HIJACKING pppoectl -d pppoe0
94	unset RUMP_SERVER
95
96	export RUMP_SERVER=$CLIENT
97	atf_ifconfig shmif0 up
98
99	$inet && atf_ifconfig pppoe0 \
100	    inet 0.0.0.0 0.0.0.1 down
101
102	$DEBUG && rump.ifconfig pppoe0 debug
103	$DEBUG && rump.ifconfig
104	$DEBUG && $HIJACKING pppoectl -d pppoe0
105	unset RUMP_SERVER
106}
107
108setup()
109{
110	inet=true
111
112	if [ $# -ne 0 ]; then
113		eval $@
114	fi
115
116	rump_server_start $SERVER netinet6 pppoe
117	rump_server_start $CLIENT netinet6 pppoe
118
119	setup_ifaces
120
121	export RUMP_SERVER=$SERVER
122	atf_pppoectl -e shmif0 pppoe0
123	unset RUMP_SERVER
124
125	export RUMP_SERVER=$CLIENT
126	atf_pppoectl -e shmif0 pppoe0
127	unset RUMP_SERVER
128}
129
130wait_for_opened()
131{
132	local cp=$1
133	local dontfail=$2
134	local n=$WAITTIME
135
136	for i in $(seq $n); do
137		$HIJACKING pppoectl -dd pppoe0 | grep -q "$cp state: opened"
138		if [ $? = 0 ]; then
139			rump.ifconfig -w 10
140			return
141		fi
142		sleep 1
143	done
144
145	if [ "$dontfail" != "dontfail" ]; then
146		atf_fail "Couldn't connect to the server for $n seconds."
147	fi
148}
149
150wait_for_disconnected()
151{
152	local dontfail=$1
153	local n=$WAITTIME
154
155	for i in $(seq $n); do
156		# If PPPoE client is disconnected by PPPoE server, then
157		# the LCP state will of the client is in a starting to send PADI.
158		$HIJACKING pppoectl -dd pppoe0 | grep -q \
159		    -e "LCP state: initial" -e "LCP state: starting"
160		[ $? = 0 ] && return
161
162		sleep 1
163	done
164
165	if [ "$dontfail" != "dontfail" ]; then
166		atf_fail "Couldn't disconnect for $n seconds."
167	fi
168}
169
170run_test()
171{
172	local auth=$1
173	local cp="IPCP"
174	setup
175
176	# As pppoe client doesn't support rechallenge yet.
177	local server_optparam=""
178	if [ $auth = "chap" ]; then
179		server_optparam="norechallenge"
180	fi
181
182	export RUMP_SERVER=$SERVER
183	atf_pppoectl pppoe0 "hisauthproto=$auth" \
184	    "hisauthname=$AUTHNAME" "hisauthsecret=$SECRET" \
185	    "myauthproto=none" $server_optparam
186	atf_ifconfig pppoe0 up
187	unset RUMP_SERVER
188
189	export RUMP_SERVER=$CLIENT
190	atf_pppoectl pppoe0 \
191	    "myauthname=$AUTHNAME" "myauthsecret=$SECRET" \
192	    "myauthproto=$auth" "hisauthproto=none"
193	atf_ifconfig pppoe0 up
194	$DEBUG && rump.ifconfig
195	wait_for_opened $cp
196	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
197	unset RUMP_SERVER
198
199	# test for disconnection from server
200	export RUMP_SERVER=$SERVER
201	atf_ifconfig pppoe0 down
202	wait_for_disconnected
203	export RUMP_SERVER=$CLIENT
204	wait_for_disconnected
205	atf_check -s not-exit:0 -o ignore -e ignore \
206	    rump.ping -c 1 -w $TIMEOUT $SERVER_IP
207	atf_check -s exit:0 -o match:'(PADI sent)|(initial)' \
208	    -x "$HIJACKING pppoectl -d pppoe0"
209	unset RUMP_SERVER
210
211	# test for reconnecting
212	atf_check -s exit:0 -x "env RUMP_SERVER=$SERVER rump.ifconfig pppoe0 up"
213	export RUMP_SERVER=$CLIENT
214	wait_for_opened $cp
215	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
216	unset RUMP_SERVER
217
218	# test for disconnection from client
219	export RUMP_SERVER=$CLIENT
220	atf_ifconfig pppoe0 down
221	wait_for_disconnected
222	export RUMP_SERVER=$SERVER
223	wait_for_disconnected
224	$DEBUG && $HIJACKING pppoectl -d pppoe0
225	atf_check -s not-exit:0 -o ignore -e ignore \
226	    rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
227	atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
228	unset RUMP_SERVER
229
230	# test for reconnecting
231	export RUMP_SERVER=$CLIENT
232	atf_ifconfig pppoe0 up
233	wait_for_opened $cp
234	$DEBUG && rump.ifconfig pppoe0
235	$DEBUG && $HIJACKING pppoectl -d pppoe0
236	unset RUMP_SERVER
237
238	export RUMP_SERVER=$SERVER
239	atf_ifconfig -w 10
240	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
241	atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
242	$DEBUG && $HIJACKING pppoectl -d pppoe0
243	unset RUMP_SERVER
244
245	# test for invalid password
246	export RUMP_SERVER=$CLIENT
247	atf_ifconfig pppoe0 down
248	wait_for_disconnected
249	atf_pppoectl pppoe0 "myauthproto=$auth" \
250			    "myauthname=$AUTHNAME" \
251			    "myauthsecret=invalidsecret" \
252			    "hisauthproto=none" \
253			    "max-auth-failure=1"
254	atf_ifconfig pppoe0 up
255	wait_for_opened $cp dontfail
256	atf_check -s not-exit:0 -o ignore -e ignore \
257	    rump.ping -c 1 -w $TIMEOUT $SERVER_IP
258	atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
259	unset RUMP_SERVER
260}
261
262atf_test_case pppoe_pap cleanup
263
264pppoe_pap_head()
265{
266	atf_set "descr" "Does simple pap tests"
267	atf_set "require.progs" "rump_server pppoectl"
268}
269
270pppoe_pap_body()
271{
272	run_test pap
273}
274
275pppoe_pap_cleanup()
276{
277
278	$DEBUG && dump
279	cleanup
280}
281
282atf_test_case pppoe_chap cleanup
283
284pppoe_chap_head()
285{
286	atf_set "descr" "Does simple chap tests"
287	atf_set "require.progs" "rump_server pppoectl"
288}
289
290pppoe_chap_body()
291{
292	run_test chap
293}
294
295pppoe_chap_cleanup()
296{
297
298	$DEBUG && dump
299	cleanup
300}
301
302run_test6()
303{
304	local auth=$1
305	local cp="IPv6CP"
306	setup "inet=false"
307
308	# As pppoe client doesn't support rechallenge yet.
309	local server_optparam=""
310	if [ $auth = "chap" ]; then
311		server_optparam="norechallenge"
312	fi
313
314	export RUMP_SERVER=$SERVER
315	atf_pppoectl pppoe0 \
316	    "hisauthname=$AUTHNAME" "hisauthsecret=$SECRET" \
317	    "hisauthproto=$auth" "myauthproto=none" \
318	    $server_optparam
319	atf_ifconfig pppoe0 inet6 $SERVER_IP6/64 down
320	atf_ifconfig pppoe0 up
321	unset RUMP_SERVER
322
323	export RUMP_SERVER=$CLIENT
324	atf_pppoectl pppoe0 \
325	    "myauthname=$AUTHNAME" "myauthsecret=$SECRET" \
326	    "myauthproto=$auth" "hisauthproto=none"
327	atf_ifconfig pppoe0 inet6 $CLIENT_IP6/64 down
328	atf_ifconfig pppoe0 up
329	$DEBUG && rump.ifconfig
330	wait_for_opened $cp
331	atf_ifconfig -w 10
332	export RUMP_SERVER=$SERVER
333	rump.ifconfig -w 10
334	export RUMP_SERVER=$CLIENT
335	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
336	unset RUMP_SERVER
337
338	# test for disconnection from server
339	export RUMP_SERVER=$SERVER
340	session_id=`$HIJACKING pppoectl -d pppoe0 | grep state`
341	atf_ifconfig pppoe0 down
342	wait_for_disconnected
343	export RUMP_SERVER=$CLIENT
344	wait_for_disconnected
345	atf_check -s not-exit:0 -o ignore -e ignore \
346	    rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
347	atf_check -s exit:0 -o not-match:"$session_id" -x "$HIJACKING pppoectl -d pppoe0"
348	unset RUMP_SERVER
349
350	# test for reconnecting
351	export RUMP_SERVER=$SERVER
352	atf_ifconfig pppoe0 up
353	wait_for_opened $cp
354	atf_ifconfig -w 10
355	$DEBUG && $HIJACKING pppoectl -d pppoe0
356	$DEBUG && rump.ifconfig pppoe0
357	export RUMP_SERVER=$CLIENT
358	atf_ifconfig -w 10
359	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
360	unset RUMP_SERVER
361
362	# test for disconnection from client
363	export RUMP_SERVER=$CLIENT
364	atf_ifconfig pppoe0 down
365	wait_for_disconnected
366
367	export RUMP_SERVER=$SERVER
368	wait_for_disconnected
369	$DEBUG && $HIJACKING pppoectl -d pppoe0
370	atf_check -s not-exit:0 -o ignore -e ignore \
371	    rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
372	atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
373	unset RUMP_SERVER
374
375	# test for reconnecting
376	export RUMP_SERVER=$CLIENT
377	atf_ifconfig pppoe0 up
378	wait_for_opened $cp
379	atf_ifconfig -w 10
380
381	$DEBUG && rump.ifconfig pppoe0
382	$DEBUG && $HIJACKING pppoectl -d pppoe0
383	unset RUMP_SERVER
384
385	export RUMP_SERVER=$SERVER
386	atf_ifconfig -w 10
387	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
388	atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
389	$DEBUG && HIJACKING pppoectl -d pppoe0
390	unset RUMP_SERVER
391
392	# test for invalid password
393	export RUMP_SERVER=$CLIENT
394	atf_ifconfig pppoe0 down
395	wait_for_disconnected
396	atf_pppoectl pppoe0 \
397	    "myauthname=$AUTHNAME" "myauthsecret=invalidsecret" \
398	    "myauthproto=$auth" "hisauthproto=none" \
399	    "max-auth-failure=1"
400	atf_ifconfig pppoe0 up
401	wait_for_opened $cp dontfail
402	atf_check -s not-exit:0 -o ignore -e ignore \
403	    rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
404	atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
405	unset RUMP_SERVER
406}
407
408atf_test_case pppoe6_pap cleanup
409
410pppoe6_pap_head()
411{
412	atf_set "descr" "Does simple pap using IPv6 tests"
413	atf_set "require.progs" "rump_server pppoectl"
414}
415
416pppoe6_pap_body()
417{
418	run_test6 pap
419}
420
421pppoe6_pap_cleanup()
422{
423
424	$DEBUG && dump
425	cleanup
426}
427
428atf_test_case pppoe6_chap cleanup
429
430pppoe6_chap_head()
431{
432	atf_set "descr" "Does simple chap using IPv6 tests"
433	atf_set "require.progs" "rump_server pppoectl"
434}
435
436pppoe6_chap_body()
437{
438	run_test6 chap
439}
440
441pppoe6_chap_cleanup()
442{
443
444	$DEBUG && dump
445	cleanup
446}
447
448atf_test_case pppoe_params cleanup
449
450dump_bus()
451{
452
453	shmif_dumpbus -p - ${BUS} | tcpdump -n -e -r -
454}
455
456setup_auth_conf()
457{
458	local auth=chap
459	local server_optparam="norechallenge"
460
461	export RUMP_SERVER=$SERVER
462	atf_ifconfig pppoe0 link0
463	atf_pppoectl pppoe0 \
464	    "hisauthname=$AUTHNAME" "hisauthsecret=$SECRET" \
465	    "hisauthproto=$auth"  "myauthproto=none" \
466	    $server_optparam
467	unset RUMP_SERVER
468
469	export RUMP_SERVER=$CLIENT
470	$inet && atf_ifconfig pppoe0 \
471	    inet 0.0.0.0 0.0.0.1 down
472	atf_pppoectl pppoe0 \
473	    "myauthname=$AUTHNAME" "myauthsecret=$SECRET" \
474	    "myauthproto=$auth" "hisauthproto=none"
475
476	$DEBUG && rump.ifconfig
477	unset RUMP_SERVER
478}
479
480pppoe_params_head()
481{
482	atf_set "descr" "Set and clear access concentrator name and service name"
483	atf_set "require.progs" "rump_server pppoectl"
484}
485
486pppoe_params_body()
487{
488	local dumpcmd
489	local cp="LCP"
490
491	dumpcmd="shmif_dumpbus -p - ${BUS}"
492	dumpcmd="${dumpcmd} | tcpdump -n -e -r -"
493
494	rump_server_start $SERVER netinet6 pppoe
495	rump_server_start $CLIENT netinet6 pppoe
496
497	setup_ifaces
498	setup_auth_conf
499
500	export RUMP_SERVER=$SERVER
501	atf_pppoectl -e shmif0 pppoe0
502	atf_ifconfig pppoe0 up
503	unset RUMP_SERVER
504
505	export RUMP_SERVER=$CLIENT
506	atf_pppoectl -e shmif0 pppoe0
507	atf_ifconfig pppoe0 up
508	$DEBUG && rump.ifconfig
509	wait_for_opened $cp
510	unset RUMP_SERVER
511
512	$DEBUG && dump_bus
513	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
514	    -x "${dumpcmd} | grep PADI"
515	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
516	    -x "${dumpcmd} | grep PADR"
517	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
518	    -x "${dumpcmd} | grep PADI"
519
520	# set Remote access concentrator name (AC-NAME, -a option)
521	export RUMP_SERVER=$CLIENT
522	atf_ifconfig pppoe0 down
523	wait_for_disconnected
524	atf_pppoectl -e shmif0 -a ACNAME-TEST0 pppoe0
525	atf_ifconfig pppoe0 up
526	$DEBUG && rump.ifconfig
527	wait_for_opened $cp
528	unset RUMP_SERVER
529
530	$DEBUG && dump_bus
531	atf_check -s exit:0 -o match:'\[AC-Name "ACNAME-TEST0"\]' -e ignore \
532	    -x "${dumpcmd} | grep PADI"
533
534	# change AC-NAME
535	export RUMP_SERVER=$CLIENT
536	atf_ifconfig pppoe0 down
537	wait_for_disconnected
538	atf_pppoectl -e shmif0 -a ACNAME-TEST1 pppoe0
539	atf_ifconfig pppoe0 up
540	$DEBUG && rump.ifconfig
541	wait_for_opened $cp
542	unset RUMP_SERVER
543
544	$DEBUG && dump_bus
545	atf_check -s exit:0 -o match:'\[AC-Name "ACNAME-TEST1"\]' -e ignore \
546	    -x "${dumpcmd} | grep PADI"
547
548	# clear AC-NAME
549	rump_server_destroy_ifaces
550	rm ${BUS} 2> /dev/null
551	setup_ifaces
552	setup_auth_conf
553
554	export RUMP_SERVER=$SERVER
555	atf_pppoectl -e shmif0 pppoe0
556	atf_ifconfig pppoe0 up
557	unset RUMP_SERVER
558
559	export RUMP_SERVER=$CLIENT
560	atf_ifconfig pppoe0 down
561	wait_for_disconnected
562	atf_pppoectl -a ACNAME-TEST2 -e shmif0 pppoe0
563	atf_pppoectl -e shmif0 pppoe0
564	atf_ifconfig pppoe0 up
565	$DEBUG && rump.ifconfig
566	wait_for_opened $cp
567	unset RUMP_SERVER
568
569	$DEBUG && dump_bus
570	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
571	    -x "${dumpcmd} | grep PADI"
572	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
573	    -x "${dumpcmd} | grep PADR"
574	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
575	    -x "${dumpcmd} | grep PADI"
576
577	# store 0 length string in AC-NAME
578	export RUMP_SERVER=$CLIENT
579	atf_ifconfig pppoe0 down
580	wait_for_disconnected
581	atf_pppoectl -a \"\" -e shmif0 pppoe0
582	atf_ifconfig pppoe0 up
583	$DEBUG && rump.ifconfig
584	wait_for_opened $cp
585	unset RUMP_SERVER
586
587	atf_check -s exit:0 -o match:'\[AC-Name\]' -e ignore \
588	    -x "${dumpcmd} | grep PADI"
589
590	# set Service Name (Service-Name, -s option)
591	rump_server_destroy_ifaces
592	rm ${BUS} 2> /dev/null
593	setup_ifaces
594	setup_auth_conf
595
596	export RUMP_SERVER=$SERVER
597	atf_pppoectl -e shmif0 pppoe0
598	atf_ifconfig pppoe0 up
599	unset RUMP_SERVER
600
601	export RUMP_SERVER=$CLIENT
602	atf_ifconfig pppoe0 down
603	wait_for_disconnected
604	atf_pppoectl -e shmif0 -s SNAME-TEST0 pppoe0
605	atf_ifconfig pppoe0 up
606	$DEBUG && rump.ifconfig
607	wait_for_opened $cp
608	unset RUMP_SERVER
609
610	$DEBUG && dump_bus
611	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST0"\]' -e ignore \
612	    -x "${dumpcmd} | grep PADI"
613	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST0"\]' -e ignore \
614	    -x "${dumpcmd} | grep PADR"
615	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
616	    -x "${dumpcmd} | grep PADI"
617
618	# change Service-Name
619	export RUMP_SERVER=$CLIENT
620	atf_ifconfig pppoe0 down
621	wait_for_disconnected
622	atf_pppoectl -e shmif0 -s SNAME-TEST1 pppoe0
623	atf_ifconfig pppoe0 up
624	$DEBUG && rump.ifconfig
625	wait_for_opened $cp
626	unset RUMP_SERVER
627
628	$DEBUG && dump_bus
629	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST1"\]' -e ignore \
630	    -x "${dumpcmd} | grep PADI"
631	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST1"\]' -e ignore \
632	    -x "${dumpcmd} | grep PADR"
633
634	# clear Service-Name
635	rump_server_destroy_ifaces
636	rm ${BUS} 2> /dev/null
637	setup_ifaces
638	setup_auth_conf
639
640	export RUMP_SERVER=$SERVER
641	atf_pppoectl -e shmif0 pppoe0
642	atf_ifconfig pppoe0 up
643	unset RUMP_SERVER
644
645	export RUMP_SERVER=$CLIENT
646	atf_ifconfig pppoe0 down
647	wait_for_disconnected
648	atf_pppoectl -s SNAME-TEST2 -e shmif0 pppoe0
649	atf_pppoectl -e shmif0 pppoe0
650	atf_ifconfig pppoe0 up
651	$DEBUG && rump.ifconfig
652	wait_for_opened $cp
653	unset RUMP_SERVER
654
655	$DEBUG && dump_bus
656	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
657	    -x "${dumpcmd} | grep PADI"
658	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
659	    -x "${dumpcmd} | grep PADR"
660	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
661	    -x "${dumpcmd} | grep PADI"
662
663	# set AC-NAME and Service-Name
664	rump_server_destroy_ifaces
665	rm ${BUS} 2> /dev/null
666	setup_ifaces
667	setup_auth_conf
668
669	export RUMP_SERVER=$SERVER
670	atf_pppoectl -e shmif0 pppoe0
671	atf_ifconfig pppoe0 up
672	unset RUMP_SERVER
673
674	export RUMP_SERVER=$CLIENT
675	atf_ifconfig pppoe0 down
676	wait_for_disconnected
677	atf_pppoectl -e shmif0 -a ACNAME-TEST3 -s SNAME-TEST3 pppoe0
678	atf_ifconfig pppoe0 up
679	$DEBUG && rump.ifconfig
680	wait_for_opened $cp
681	unset RUMP_SERVER
682
683	$DEBUG && dump_bus
684	atf_check -s exit:0 \
685	    -o match:'\[Service-Name "SNAME-TEST3"\] \[AC-Name "ACNAME-TEST3"\]' \
686	    -e ignore \
687	    -x "${dumpcmd} | grep PADI"
688	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST3"\]' -e ignore \
689	    -x "${dumpcmd} | grep PADR"
690
691	# change AC-NAME
692	export RUMP_SERVER=$CLIENT
693	atf_ifconfig pppoe0 down
694	wait_for_disconnected
695	atf_pppoectl -e shmif0 -a ACNAME-TEST4 pppoe0
696	atf_ifconfig pppoe0 up
697	$DEBUG && rump.ifconfig
698	wait_for_opened $cp
699	unset RUMP_SERVER
700
701	$DEBUG && dump_bus
702	atf_check -s exit:0 \
703	    -o match:'\[Service-Name\] \[AC-Name "ACNAME-TEST4"\]' \
704	    -e ignore \
705	    -x "${dumpcmd} | grep PADI"
706	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
707	    -x "${dumpcmd} | grep PADR"
708
709	# change Service-Name
710	export RUMP_SERVER=$CLIENT
711	atf_ifconfig pppoe0 down
712	wait_for_disconnected
713	atf_pppoectl -e shmif0 -a ACNAME-TEST5 -s SNAME-TEST5 pppoe0
714	atf_pppoectl -e shmif0 -s SNAME-TEST6 pppoe0
715	atf_ifconfig pppoe0 up
716	$DEBUG && rump.ifconfig
717	wait_for_opened $cp
718	unset RUMP_SERVER
719
720	$DEBUG && dump_bus
721	atf_check -s exit:0 \
722	    -o match:'\[Service-Name "SNAME-TEST6"\]' \
723	    -e ignore \
724	    -x "${dumpcmd} | grep PADI"
725	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST6"\]' -e ignore \
726	    -x "${dumpcmd} | grep PADR"
727	atf_check -s exit:0 -o not-match:'\[AC-Name "ACNAME-TEST5\]"' -e ignore \
728	    -x "${dumpcmd} | grep PADI"
729
730	export RUMP_SERVER=$CLIENT
731	atf_ifconfig pppoe0 down
732	export RUMP_SERVER=$SERVER
733	wait_for_disconnected
734
735	# ipcp & ipv6cp are enabled by default
736	export RUMP_SERVER=$CLIENT
737	atf_check -s exit:0 -o match:'ipcp: enable' \
738	    -x "$HIJACKING pppoectl pppoe0"
739	atf_check -s exit:0 -o match:'ipv6cp: enable' \
740	    -x "$HIJACKING pppoectl pppoe0"
741
742	# ipcp enable & ipv6cp disable
743	atf_pppoectl pppoe0 noipv6cp
744	atf_ifconfig pppoe0 up
745	wait_for_opened "IPCP"
746	atf_check -s exit:0 -o match:'IPv6CP state: closed' \
747	    -x "$HIJACKING pppoectl -dd pppoe0"
748
749	atf_ifconfig pppoe0 down
750	export RUMP_SERVER=$SERVER
751	wait_for_disconnected
752
753	# ipcp disable & ipv6cp enable
754	export RUMP_SERVER=$CLIENT
755	atf_pppoectl pppoe0 noipcp ipv6cp
756	atf_ifconfig pppoe0 up
757	wait_for_opened "IPv6CP"
758	atf_check -s exit:0 -o match:'IPCP state: closed' \
759	    -x "$HIJACKING pppoectl -dd pppoe0"
760}
761
762pppoe_params_cleanup()
763{
764
765	$DEBUG && dump
766	cleanup
767}
768
769pppoe_passiveauthproto()
770{
771	local auth=$1
772	local cp="IPCP"
773	setup
774
775	local server_optparam=""
776	if [ $auth = "chap" ]; then
777		server_optparam="norechallenge"
778	fi
779
780	export RUMP_SERVER=$SERVER
781	atf_pppoectl pppoe0 \
782	    "hisauthname=$AUTHNAME" "hisauthsecret=$SECRET" \
783	    "hisauthproto=$auth" "myauthproto=none" \
784	    $server_optparam
785	atf_ifconfig pppoe0 up
786
787	export RUMP_SERVER=$CLIENT
788	atf_pppoectl pppoe0 \
789	    "myauthname=$AUTHNAME" "myauthsecret=$SECRET" \
790	    "myauthproto=none" "hisauthproto=none" \
791	    "passiveauthproto"
792	atf_ifconfig pppoe0 up
793	$DEBUG && rump.ifconfig
794	wait_for_opened $cp
795	atf_ifconfig -w 10
796	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
797}
798
799atf_test_case pppoe_passiveauthproto_pap cleanup
800pppoe_passiveauthproto_pap_head()
801{
802
803	atf_set "descr" "Test for passiveauthproto option on PAP"
804	atf_set "require.progs" "rump_server"
805}
806
807pppoe_passiveauthproto_pap_body()
808{
809
810	pppoe_passiveauthproto "pap"
811}
812
813pppoe_passiveauthproto_pap_cleanup()
814{
815
816	$DEBUG && dump
817	cleanup
818}
819
820atf_test_case pppoe_passiveauthproto_chap cleanup
821pppoe_passiveauthproto_chap_head()
822{
823
824	atf_set "descr" "Test for passiveauthproto option on chap"
825	atf_set "require.progs" "rump_server"
826}
827
828pppoe_passiveauthproto_chap_body()
829{
830
831	pppoe_passiveauthproto "chap"
832}
833
834pppoe_passiveauthproto_chap_cleanup()
835{
836
837	$DEBUG && dump
838	cleanup
839}
840
841atf_test_case pppoe_mtu cleanup
842pppoe_mtu_head()
843{
844
845	atf_set "descr" "Test for mtu"
846	atf_set "require.progs" "rump_server"
847}
848
849pppoe_mtu_body()
850{
851	local auth=chap
852	local cp="IPCP"
853	setup
854
855	export RUMP_SERVER=$SERVER
856	atf_pppoectl pppoe0 \
857	    "hisauthname=$AUTHNAME" "hisauthsecret=$SECRET" \
858	    "hisauthproto=$auth" "myauthproto=none" \
859	    norechallenge
860	atf_ifconfig pppoe0 mtu 1400
861	atf_ifconfig pppoe0 up
862
863	export RUMP_SERVER=$CLIENT
864	atf_pppoectl pppoe0 \
865	    "myauthname=$AUTHNAME" "myauthsecret=$SECRET" \
866	    "myauthproto=$auth" "hisauthproto=none"
867	atf_ifconfig pppoe0 mtu 1450
868	atf_ifconfig pppoe0 up
869
870	wait_for_opened $cp
871	atf_ifconfig -w 10
872
873	export RUMP_SERVER=$SERVER
874	atf_check -s exit:0 -o match:'mtu 1400' rump.ifconfig pppoe0
875
876	export RUMP_SERVER=$CLIENT
877	atf_check -s exit:0 -o match:'mtu 1400' rump.ifconfig pppoe0
878
879	# mtu can set to 1460 but it is not applied.
880	atf_ifconfig pppoe0 mtu 1460
881	atf_check -s exit:0 -o match:'mtu 1400' rump.ifconfig pppoe0
882
883	export RUMP_SERVER=$SERVER
884	atf_ifconfig pppoe0 mtu 1470
885	atf_ifconfig pppoe0 down
886	atf_ifconfig pppoe0 up
887	wait_for_opened $cp
888	atf_ifconfig -w 10
889
890	# mtu 1460 is applied after LCP negotiation
891	atf_check -s exit:0 -o match:'mtu 1460' rump.ifconfig pppoe0
892
893	export RUMP_SERVER=$CLIENT
894	atf_check -s exit:0 -o match:'mtu 1460' rump.ifconfig pppoe0
895
896	rump.ifconfig pppoe0 mtu 1500
897	atf_check -s exit:0 -o ignore \
898	    -e match:'SIOCSIFMTU: Invalid argument' \
899	    rump.ifconfig pppoe0 mtu 1501
900}
901
902pppoe_mtu_cleanup()
903{
904
905	$DEBUG && dump
906	cleanup
907}
908
909atf_init_test_cases()
910{
911
912	atf_add_test_case pppoe_create_destroy
913	atf_add_test_case pppoe_params
914	atf_add_test_case pppoe_pap
915	atf_add_test_case pppoe_chap
916	atf_add_test_case pppoe6_pap
917	atf_add_test_case pppoe6_chap
918	atf_add_test_case pppoe_passiveauthproto_pap
919	atf_add_test_case pppoe_passiveauthproto_chap
920	atf_add_test_case pppoe_mtu
921}
922