1 # $NetBSD: t_pppoe.sh,v 1.16 2016/12/14 03:30:30 knakahara Exp $
3 # Copyright (c) 2016 Internet Initiative Japan Inc.
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
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.
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.
28 server="rump_server -lrump -lrumpnet -lrumpnet_net -lrumpnet_netinet \
29 -lrumpnet_netinet6 -lrumpnet_shmif -lrumpdev \
31 # pppoectl doesn't work with RUMPHIJACK=sysctl=yes
32 HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so"
34 SERVER=unix://commsock1
35 CLIENT=unix://commsock2
41 AUTHNAME=foobar@baz.com
56 atf_check -s exit:0 ${server} $SERVER
57 atf_check -s exit:0 ${server} $CLIENT
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
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
69 $DEBUG && rump.ifconfig
70 $DEBUG && $HIJACKING pppoectl -d pppoe0
72 atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
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
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
84 atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
90 env RUMP_SERVER=$SERVER rump.halt
91 env RUMP_SERVER=$CLIENT rump.halt
95 wait_for_session_established()
100 for i in $(seq $n); do
101 $HIJACKING pppoectl -d pppoe0 |grep -q "state = session"
106 if [ "$dontfail" != "dontfail" ]; then
107 atf_fail "Couldn't connect to the server for $n seconds."
111 wait_for_disconnected()
116 for i in $(seq $n); do
117 $HIJACKING pppoectl -d pppoe0 | grep -q "state = initial"
119 # If PPPoE client is disconnected by PPPoE server and then
120 # the client kicks callout of pppoe_timeout(), the client
121 # state is changed to PPPOE_STATE_PADI_SENT while padi retrying.
122 $HIJACKING pppoectl -d pppoe0 | grep -q "state = PADI sent"
128 if [ "$dontfail" != "dontfail" ]; then
129 atf_fail "Couldn't disconnect for $n seconds."
138 # As pppoe client doesn't support rechallenge yet.
139 local server_optparam=""
140 if [ $auth = "chap" ]; then
141 server_optparam="norechallenge"
144 export RUMP_SERVER=$SERVER
145 local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
146 'hisauthname=$AUTHNAME' \
147 'hisauthsecret=$SECRET' \
150 atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
151 atf_check -s exit:0 rump.ifconfig pppoe0 up
154 export RUMP_SERVER=$CLIENT
155 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
156 'myauthname=$AUTHNAME' \
157 'myauthsecret=$SECRET' \
159 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
160 atf_check -s exit:0 rump.ifconfig pppoe0 up
161 $DEBUG && rump.ifconfig
162 wait_for_session_established
163 atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
166 # test for disconnection from server
167 export RUMP_SERVER=$SERVER
168 atf_check -s exit:0 rump.ifconfig pppoe0 down
169 wait_for_disconnected
170 export RUMP_SERVER=$CLIENT
171 wait_for_disconnected
172 atf_check -s not-exit:0 -o ignore -e ignore \
173 rump.ping -c 1 -w $TIMEOUT $SERVER_IP
174 atf_check -s exit:0 -o match:'PADI sent' -x "$HIJACKING pppoectl -d pppoe0"
177 # test for recoonecting
178 atf_check -s exit:0 -x "env RUMP_SERVER=$SERVER rump.ifconfig pppoe0 up"
179 export RUMP_SERVER=$CLIENT
180 wait_for_session_established
181 atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
184 # test for disconnection from client
185 export RUMP_SERVER=$CLIENT
186 atf_check -s exit:0 -x rump.ifconfig pppoe0 down
187 wait_for_disconnected
188 export RUMP_SERVER=$SERVER
189 wait_for_disconnected
190 $DEBUG && $HIJACKING pppoectl -d pppoe0
191 atf_check -s not-exit:0 -o ignore -e ignore \
192 rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
193 atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
196 # test for reconnecting
197 export RUMP_SERVER=$CLIENT
198 atf_check -s exit:0 -x rump.ifconfig pppoe0 up
199 wait_for_session_established
200 $DEBUG && rump.ifconfig pppoe0
201 $DEBUG && $HIJACKING pppoectl -d pppoe0
204 export RUMP_SERVER=$SERVER
205 atf_check -s exit:0 rump.ifconfig -w 10
206 atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
207 atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
208 $DEBUG && HIJACKING pppoectl -d pppoe0
211 # test for invalid password
212 export RUMP_SERVER=$CLIENT
213 atf_check -s exit:0 rump.ifconfig pppoe0 down
214 wait_for_disconnected
215 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
216 'myauthname=$AUTHNAME' \
217 'myauthsecret=invalidsecret' \
219 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
220 atf_check -s exit:0 rump.ifconfig pppoe0 up
221 wait_for_session_established dontfail
222 atf_check -s not-exit:0 -o ignore -e ignore \
223 rump.ping -c 1 -w $TIMEOUT $SERVER_IP
224 atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
228 atf_test_case pppoe_pap cleanup
232 atf_set "descr" "Does simple pap tests"
233 atf_set "require.progs" "rump_server pppoectl"
246 atf_test_case pppoe_chap cleanup
250 atf_set "descr" "Does simple chap tests"
251 atf_set "require.progs" "rump_server pppoectl"
269 # As pppoe client doesn't support rechallenge yet.
270 local server_optparam=""
271 if [ $auth = "chap" ]; then
272 server_optparam="norechallenge"
275 export RUMP_SERVER=$SERVER
276 local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
277 'hisauthname=$AUTHNAME' \
278 'hisauthsecret=$SECRET' \
281 atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
282 atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $SERVER_IP6/64 down
283 atf_check -s exit:0 rump.ifconfig pppoe0 up
286 export RUMP_SERVER=$CLIENT
287 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
288 'myauthname=$AUTHNAME' \
289 'myauthsecret=$SECRET' \
291 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
292 atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $CLIENT_IP6/64 down
293 atf_check -s exit:0 rump.ifconfig pppoe0 up
294 $DEBUG && rump.ifconfig
295 wait_for_session_established
296 atf_check -s exit:0 -o ignore rump.ifconfig -w 10
297 export RUMP_SERVER=$SERVER
298 atf_check -s exit:0 -o ignore rump.ifconfig -w 10
299 export RUMP_SERVER=$CLIENT
300 atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
303 # test for disconnection from server
304 export RUMP_SERVER=$SERVER
305 session_id=`$HIJACKING pppoectl -d pppoe0 | grep state`
306 atf_check -s exit:0 rump.ifconfig pppoe0 down
307 wait_for_disconnected
308 export RUMP_SERVER=$CLIENT
309 wait_for_disconnected
310 atf_check -s not-exit:0 -o ignore -e ignore \
311 rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
312 atf_check -s exit:0 -o not-match:"$session_id" -x "$HIJACKING pppoectl -d pppoe0"
315 # test for recoonecting
316 export RUMP_SERVER=$SERVER
317 atf_check -s exit:0 rump.ifconfig pppoe0 up
318 wait_for_session_established
319 atf_check -s exit:0 rump.ifconfig -w 10
320 $DEBUG && $HIJACKING pppoectl -d pppoe0
321 $DEBUG && rump.ifconfig pppoe0
322 export RUMP_SERVER=$CLIENT
323 atf_check -s exit:0 -o ignore rump.ifconfig -w 10
324 atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
327 # test for disconnection from client
328 export RUMP_SERVER=$CLIENT
329 atf_check -s exit:0 rump.ifconfig pppoe0 down
330 wait_for_disconnected
332 export RUMP_SERVER=$SERVER
333 wait_for_disconnected
334 $DEBUG && $HIJACKING pppoectl -d pppoe0
335 atf_check -s not-exit:0 -o ignore -e ignore \
336 rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
337 atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
340 # test for reconnecting
341 export RUMP_SERVER=$CLIENT
342 atf_check -s exit:0 rump.ifconfig pppoe0 up
343 wait_for_session_established
344 atf_check -s exit:0 rump.ifconfig -w 10
346 $DEBUG && rump.ifconfig pppoe0
347 $DEBUG && $HIJACKING pppoectl -d pppoe0
350 export RUMP_SERVER=$SERVER
351 atf_check -s exit:0 rump.ifconfig -w 10
352 atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
353 atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
354 $DEBUG && HIJACKING pppoectl -d pppoe0
357 # test for invalid password
358 export RUMP_SERVER=$CLIENT
359 atf_check -s exit:0 rump.ifconfig pppoe0 down
360 wait_for_disconnected
361 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
362 'myauthname=$AUTHNAME' \
363 'myauthsecret=invalidsecret' \
365 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
366 atf_check -s exit:0 rump.ifconfig pppoe0 up
367 wait_for_session_established dontfail
368 atf_check -s not-exit:0 -o ignore -e ignore \
369 rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
370 atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
374 atf_test_case pppoe6_pap cleanup
378 atf_set "descr" "Does simple pap using IPv6 tests"
379 atf_set "require.progs" "rump_server pppoectl"
392 atf_test_case pppoe6_chap cleanup
396 atf_set "descr" "Does simple chap using IPv6 tests"
397 atf_set "require.progs" "rump_server pppoectl"
405 pppoe6_chap_cleanup()
410 atf_init_test_cases()
412 atf_add_test_case pppoe_pap
413 atf_add_test_case pppoe_chap
414 atf_add_test_case pppoe6_pap
415 atf_add_test_case pppoe6_chap