t_pppoe.sh revision 1.16.2.1 1 # $NetBSD: t_pppoe.sh,v 1.16.2.1 2017/04/21 16:54:12 bouyer 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
28 SERVER=unix://pppoe_server
29 CLIENT=unix://pppoe_client
30
31 SERVER_IP=10.3.3.1
32 CLIENT_IP=10.3.3.3
33 SERVER_IP6=fc00::1
34 CLIENT_IP6=fc00::3
35 AUTHNAME=foobar@baz.com
36 SECRET=oink
37 BUS=bus0
38 TIMEOUT=3
39 WAITTIME=10
40 DEBUG=${DEBUG:-false}
41
42 setup()
43 {
44 inet=true
45
46 if [ $# -ne 0 ]; then
47 eval $@
48 fi
49
50 rump_server_start $SERVER netinet6 pppoe
51 rump_server_start $CLIENT netinet6 pppoe
52
53 rump_server_add_iface $SERVER shmif0 $BUS
54 rump_server_add_iface $CLIENT shmif0 $BUS
55
56 export RUMP_SERVER=$SERVER
57 atf_check -s exit:0 rump.ifconfig shmif0 up
58
59 atf_check -s exit:0 rump.ifconfig pppoe0 create
60 $inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
61 inet $SERVER_IP $CLIENT_IP down
62 atf_check -s exit:0 rump.ifconfig pppoe0 link0
63
64 $DEBUG && rump.ifconfig
65 $DEBUG && $HIJACKING pppoectl -d pppoe0
66
67 atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
68 unset RUMP_SERVER
69
70 export RUMP_SERVER=$CLIENT
71 atf_check -s exit:0 rump.ifconfig shmif0 up
72
73 atf_check -s exit:0 rump.ifconfig pppoe0 create
74 $inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
75 inet 0.0.0.0 0.0.0.1 down
76
77 atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
78 unset RUMP_SERVER
79 }
80
81 wait_for_session_established()
82 {
83 local dontfail=$1
84 local n=$WAITTIME
85
86 for i in $(seq $n); do
87 $HIJACKING pppoectl -d pppoe0 |grep -q "state = session"
88 [ $? = 0 ] && return
89 sleep 1
90 done
91
92 if [ "$dontfail" != "dontfail" ]; then
93 atf_fail "Couldn't connect to the server for $n seconds."
94 fi
95 }
96
97 wait_for_disconnected()
98 {
99 local dontfail=$1
100 local n=$WAITTIME
101
102 for i in $(seq $n); do
103 $HIJACKING pppoectl -d pppoe0 | grep -q "state = initial"
104 [ $? = 0 ] && return
105 # If PPPoE client is disconnected by PPPoE server and then
106 # the client kicks callout of pppoe_timeout(), the client
107 # state is changed to PPPOE_STATE_PADI_SENT while padi retrying.
108 $HIJACKING pppoectl -d pppoe0 | grep -q "state = PADI sent"
109 [ $? = 0 ] && return
110
111 sleep 1
112 done
113
114 if [ "$dontfail" != "dontfail" ]; then
115 atf_fail "Couldn't disconnect for $n seconds."
116 fi
117 }
118
119 run_test()
120 {
121 local auth=$1
122 setup
123
124 # As pppoe client doesn't support rechallenge yet.
125 local server_optparam=""
126 if [ $auth = "chap" ]; then
127 server_optparam="norechallenge"
128 fi
129
130 export RUMP_SERVER=$SERVER
131 local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
132 'hisauthname=$AUTHNAME' \
133 'hisauthsecret=$SECRET' \
134 'myauthproto=none' \
135 $server_optparam"
136 atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
137 atf_check -s exit:0 rump.ifconfig pppoe0 up
138 unset RUMP_SERVER
139
140 export RUMP_SERVER=$CLIENT
141 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
142 'myauthname=$AUTHNAME' \
143 'myauthsecret=$SECRET' \
144 'hisauthproto=none'"
145 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
146 atf_check -s exit:0 rump.ifconfig pppoe0 up
147 $DEBUG && rump.ifconfig
148 wait_for_session_established
149 atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
150 unset RUMP_SERVER
151
152 # test for disconnection from server
153 export RUMP_SERVER=$SERVER
154 atf_check -s exit:0 rump.ifconfig pppoe0 down
155 wait_for_disconnected
156 export RUMP_SERVER=$CLIENT
157 wait_for_disconnected
158 atf_check -s not-exit:0 -o ignore -e ignore \
159 rump.ping -c 1 -w $TIMEOUT $SERVER_IP
160 atf_check -s exit:0 -o match:'PADI sent' -x "$HIJACKING pppoectl -d pppoe0"
161 unset RUMP_SERVER
162
163 # test for recoonecting
164 atf_check -s exit:0 -x "env RUMP_SERVER=$SERVER rump.ifconfig pppoe0 up"
165 export RUMP_SERVER=$CLIENT
166 wait_for_session_established
167 atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
168 unset RUMP_SERVER
169
170 # test for disconnection from client
171 export RUMP_SERVER=$CLIENT
172 atf_check -s exit:0 -x rump.ifconfig pppoe0 down
173 wait_for_disconnected
174 export RUMP_SERVER=$SERVER
175 wait_for_disconnected
176 $DEBUG && $HIJACKING pppoectl -d pppoe0
177 atf_check -s not-exit:0 -o ignore -e ignore \
178 rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
179 atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
180 unset RUMP_SERVER
181
182 # test for reconnecting
183 export RUMP_SERVER=$CLIENT
184 atf_check -s exit:0 -x rump.ifconfig pppoe0 up
185 wait_for_session_established
186 $DEBUG && rump.ifconfig pppoe0
187 $DEBUG && $HIJACKING pppoectl -d pppoe0
188 unset RUMP_SERVER
189
190 export RUMP_SERVER=$SERVER
191 atf_check -s exit:0 rump.ifconfig -w 10
192 atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
193 atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
194 $DEBUG && HIJACKING pppoectl -d pppoe0
195 unset RUMP_SERVER
196
197 # test for invalid password
198 export RUMP_SERVER=$CLIENT
199 atf_check -s exit:0 rump.ifconfig pppoe0 down
200 wait_for_disconnected
201 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
202 'myauthname=$AUTHNAME' \
203 'myauthsecret=invalidsecret' \
204 'hisauthproto=none'"
205 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
206 atf_check -s exit:0 rump.ifconfig pppoe0 up
207 wait_for_session_established dontfail
208 atf_check -s not-exit:0 -o ignore -e ignore \
209 rump.ping -c 1 -w $TIMEOUT $SERVER_IP
210 atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
211 unset RUMP_SERVER
212 }
213
214 atf_test_case pppoe_pap cleanup
215
216 pppoe_pap_head()
217 {
218 atf_set "descr" "Does simple pap tests"
219 atf_set "require.progs" "rump_server pppoectl"
220 }
221
222 pppoe_pap_body()
223 {
224 run_test pap
225 }
226
227 pppoe_pap_cleanup()
228 {
229
230 $DEBUG && dump
231 cleanup
232 }
233
234 atf_test_case pppoe_chap cleanup
235
236 pppoe_chap_head()
237 {
238 atf_set "descr" "Does simple chap tests"
239 atf_set "require.progs" "rump_server pppoectl"
240 }
241
242 pppoe_chap_body()
243 {
244 run_test chap
245 }
246
247 pppoe_chap_cleanup()
248 {
249
250 $DEBUG && dump
251 cleanup
252 }
253
254 run_test6()
255 {
256 local auth=$1
257 setup "inet=false"
258
259 # As pppoe client doesn't support rechallenge yet.
260 local server_optparam=""
261 if [ $auth = "chap" ]; then
262 server_optparam="norechallenge"
263 fi
264
265 export RUMP_SERVER=$SERVER
266 local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
267 'hisauthname=$AUTHNAME' \
268 'hisauthsecret=$SECRET' \
269 'myauthproto=none' \
270 $server_optparam"
271 atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
272 atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $SERVER_IP6/64 down
273 atf_check -s exit:0 rump.ifconfig pppoe0 up
274 unset RUMP_SERVER
275
276 export RUMP_SERVER=$CLIENT
277 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
278 'myauthname=$AUTHNAME' \
279 'myauthsecret=$SECRET' \
280 'hisauthproto=none'"
281 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
282 atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $CLIENT_IP6/64 down
283 atf_check -s exit:0 rump.ifconfig pppoe0 up
284 $DEBUG && rump.ifconfig
285 wait_for_session_established
286 atf_check -s exit:0 -o ignore rump.ifconfig -w 10
287 export RUMP_SERVER=$SERVER
288 atf_check -s exit:0 -o ignore rump.ifconfig -w 10
289 export RUMP_SERVER=$CLIENT
290 atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
291 unset RUMP_SERVER
292
293 # test for disconnection from server
294 export RUMP_SERVER=$SERVER
295 session_id=`$HIJACKING pppoectl -d pppoe0 | grep state`
296 atf_check -s exit:0 rump.ifconfig pppoe0 down
297 wait_for_disconnected
298 export RUMP_SERVER=$CLIENT
299 wait_for_disconnected
300 atf_check -s not-exit:0 -o ignore -e ignore \
301 rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
302 atf_check -s exit:0 -o not-match:"$session_id" -x "$HIJACKING pppoectl -d pppoe0"
303 unset RUMP_SERVER
304
305 # test for recoonecting
306 export RUMP_SERVER=$SERVER
307 atf_check -s exit:0 rump.ifconfig pppoe0 up
308 wait_for_session_established
309 atf_check -s exit:0 rump.ifconfig -w 10
310 $DEBUG && $HIJACKING pppoectl -d pppoe0
311 $DEBUG && rump.ifconfig pppoe0
312 export RUMP_SERVER=$CLIENT
313 atf_check -s exit:0 -o ignore rump.ifconfig -w 10
314 atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
315 unset RUMP_SERVER
316
317 # test for disconnection from client
318 export RUMP_SERVER=$CLIENT
319 atf_check -s exit:0 rump.ifconfig pppoe0 down
320 wait_for_disconnected
321
322 export RUMP_SERVER=$SERVER
323 wait_for_disconnected
324 $DEBUG && $HIJACKING pppoectl -d pppoe0
325 atf_check -s not-exit:0 -o ignore -e ignore \
326 rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
327 atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
328 unset RUMP_SERVER
329
330 # test for reconnecting
331 export RUMP_SERVER=$CLIENT
332 atf_check -s exit:0 rump.ifconfig pppoe0 up
333 wait_for_session_established
334 atf_check -s exit:0 rump.ifconfig -w 10
335
336 $DEBUG && rump.ifconfig pppoe0
337 $DEBUG && $HIJACKING pppoectl -d pppoe0
338 unset RUMP_SERVER
339
340 export RUMP_SERVER=$SERVER
341 atf_check -s exit:0 rump.ifconfig -w 10
342 atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
343 atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
344 $DEBUG && HIJACKING pppoectl -d pppoe0
345 unset RUMP_SERVER
346
347 # test for invalid password
348 export RUMP_SERVER=$CLIENT
349 atf_check -s exit:0 rump.ifconfig pppoe0 down
350 wait_for_disconnected
351 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
352 'myauthname=$AUTHNAME' \
353 'myauthsecret=invalidsecret' \
354 'hisauthproto=none'"
355 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
356 atf_check -s exit:0 rump.ifconfig pppoe0 up
357 wait_for_session_established dontfail
358 atf_check -s not-exit:0 -o ignore -e ignore \
359 rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
360 atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
361 unset RUMP_SERVER
362 }
363
364 atf_test_case pppoe6_pap cleanup
365
366 pppoe6_pap_head()
367 {
368 atf_set "descr" "Does simple pap using IPv6 tests"
369 atf_set "require.progs" "rump_server pppoectl"
370 }
371
372 pppoe6_pap_body()
373 {
374 run_test6 pap
375 }
376
377 pppoe6_pap_cleanup()
378 {
379
380 $DEBUG && dump
381 cleanup
382 }
383
384 atf_test_case pppoe6_chap cleanup
385
386 pppoe6_chap_head()
387 {
388 atf_set "descr" "Does simple chap using IPv6 tests"
389 atf_set "require.progs" "rump_server pppoectl"
390 }
391
392 pppoe6_chap_body()
393 {
394 run_test6 chap
395 }
396
397 pppoe6_chap_cleanup()
398 {
399
400 $DEBUG && dump
401 cleanup
402 }
403
404 atf_init_test_cases()
405 {
406 atf_add_test_case pppoe_pap
407 atf_add_test_case pppoe_chap
408 atf_add_test_case pppoe6_pap
409 atf_add_test_case pppoe6_chap
410 }
411