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