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