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