Home | History | Annotate | Line # | Download | only in if_pppoe
t_pppoe.sh revision 1.25
      1 #	$NetBSD: t_pppoe.sh,v 1.25 2021/04/23 03:07:19 yamaguchi 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 pppoe_create_destroy cleanup
     43 pppoe_create_destroy_head()
     44 {
     45 
     46 	atf_set "descr" "Test creating/destroying pppoe interfaces"
     47 	atf_set "require.progs" "rump_server"
     48 }
     49 
     50 pppoe_create_destroy_body()
     51 {
     52 
     53 	rump_server_start $CLIENT netinet6 pppoe
     54 
     55 	test_create_destroy_common $CLIENT pppoe0 true
     56 }
     57 
     58 pppoe_create_destroy_cleanup()
     59 {
     60 
     61 	$DEBUG && dump
     62 	cleanup
     63 }
     64 
     65 setup_ifaces()
     66 {
     67 
     68 	rump_server_add_iface $SERVER shmif0 $BUS
     69 	rump_server_add_iface $CLIENT shmif0 $BUS
     70 	rump_server_add_iface $SERVER pppoe0
     71 	rump_server_add_iface $CLIENT pppoe0
     72 
     73 	export RUMP_SERVER=$SERVER
     74 	atf_check -s exit:0 rump.ifconfig shmif0 up
     75 	$inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
     76 	    inet $SERVER_IP $CLIENT_IP down
     77 	atf_check -s exit:0 rump.ifconfig pppoe0 link0
     78 
     79 	$DEBUG && rump.ifconfig
     80 	$DEBUG && $HIJACKING pppoectl -d pppoe0
     81 	unset RUMP_SERVER
     82 
     83 	export RUMP_SERVER=$CLIENT
     84 	atf_check -s exit:0 rump.ifconfig shmif0 up
     85 
     86 	$inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
     87 	    inet 0.0.0.0 0.0.0.1 down
     88 
     89 	$DEBUG && rump.ifconfig
     90 	$DEBUG && $HIJACKING pppoectl -d pppoe0
     91 	unset RUMP_SERVER
     92 }
     93 
     94 setup()
     95 {
     96 	inet=true
     97 
     98 	if [ $# -ne 0 ]; then
     99 		eval $@
    100 	fi
    101 
    102 	rump_server_start $SERVER netinet6 pppoe
    103 	rump_server_start $CLIENT netinet6 pppoe
    104 
    105 	setup_ifaces
    106 
    107 	export RUMP_SERVER=$SERVER
    108 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
    109 	unset RUMP_SERVER
    110 
    111 	export RUMP_SERVER=$CLIENT
    112 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
    113 	unset RUMP_SERVER
    114 }
    115 
    116 wait_for_opened()
    117 {
    118 	local cp=$1
    119 	local dontfail=$2
    120 	local n=$WAITTIME
    121 
    122 	for i in $(seq $n); do
    123 		$HIJACKING pppoectl -dd pppoe0 | grep -q "$cp state: opened"
    124 		if [ $? = 0 ]; then
    125 			rump.ifconfig -w 10
    126 			return
    127 		fi
    128 		sleep 1
    129 	done
    130 
    131 	if [ "$dontfail" != "dontfail" ]; then
    132 		atf_fail "Couldn't connect to the server for $n seconds."
    133 	fi
    134 }
    135 
    136 wait_for_disconnected()
    137 {
    138 	local dontfail=$1
    139 	local n=$WAITTIME
    140 
    141 	for i in $(seq $n); do
    142 		# If PPPoE client is disconnected by PPPoE server, then
    143 		# the LCP state will of the client is in a starting to send PADI.
    144 		$HIJACKING pppoectl -dd pppoe0 | grep -q \
    145 		    -e "LCP state: initial" -e "LCP state: starting"
    146 		[ $? = 0 ] && return
    147 
    148 		sleep 1
    149 	done
    150 
    151 	if [ "$dontfail" != "dontfail" ]; then
    152 		atf_fail "Couldn't disconnect for $n seconds."
    153 	fi
    154 }
    155 
    156 run_test()
    157 {
    158 	local auth=$1
    159 	local cp="IPCP"
    160 	setup
    161 
    162 	# As pppoe client doesn't support rechallenge yet.
    163 	local server_optparam=""
    164 	if [ $auth = "chap" ]; then
    165 		server_optparam="norechallenge"
    166 	fi
    167 
    168 	export RUMP_SERVER=$SERVER
    169 	local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
    170 				    'hisauthname=$AUTHNAME' \
    171 				    'hisauthsecret=$SECRET' \
    172 				    'myauthproto=none' \
    173 				    $server_optparam"
    174 	atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
    175 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    176 	unset RUMP_SERVER
    177 
    178 	export RUMP_SERVER=$CLIENT
    179 	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
    180 				    'myauthname=$AUTHNAME' \
    181 				    'myauthsecret=$SECRET' \
    182 				    'hisauthproto=none'"
    183 	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
    184 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    185 	$DEBUG && rump.ifconfig
    186 	wait_for_opened $cp
    187 	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
    188 	unset RUMP_SERVER
    189 
    190 	# test for disconnection from server
    191 	export RUMP_SERVER=$SERVER
    192 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    193 	wait_for_disconnected
    194 	export RUMP_SERVER=$CLIENT
    195 	wait_for_disconnected
    196 	atf_check -s not-exit:0 -o ignore -e ignore \
    197 	    rump.ping -c 1 -w $TIMEOUT $SERVER_IP
    198 	atf_check -s exit:0 -o match:'PADI sent' -x "$HIJACKING pppoectl -d pppoe0"
    199 	unset RUMP_SERVER
    200 
    201 	# test for reconnecting
    202 	atf_check -s exit:0 -x "env RUMP_SERVER=$SERVER rump.ifconfig pppoe0 up"
    203 	export RUMP_SERVER=$CLIENT
    204 	wait_for_opened $cp
    205 	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
    206 	unset RUMP_SERVER
    207 
    208 	# test for disconnection from client
    209 	export RUMP_SERVER=$CLIENT
    210 	atf_check -s exit:0 -x rump.ifconfig pppoe0 down
    211 	wait_for_disconnected
    212 	export RUMP_SERVER=$SERVER
    213 	wait_for_disconnected
    214 	$DEBUG && $HIJACKING pppoectl -d pppoe0
    215 	atf_check -s not-exit:0 -o ignore -e ignore \
    216 	    rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
    217 	atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
    218 	unset RUMP_SERVER
    219 
    220 	# test for reconnecting
    221 	export RUMP_SERVER=$CLIENT
    222 	atf_check -s exit:0 -x rump.ifconfig pppoe0 up
    223 	wait_for_opened $cp
    224 	$DEBUG && rump.ifconfig pppoe0
    225 	$DEBUG && $HIJACKING pppoectl -d pppoe0
    226 	unset RUMP_SERVER
    227 
    228 	export RUMP_SERVER=$SERVER
    229 	atf_check -s exit:0 rump.ifconfig -w 10
    230 	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
    231 	atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
    232 	$DEBUG && HIJACKING pppoectl -d pppoe0
    233 	unset RUMP_SERVER
    234 
    235 	# test for invalid password
    236 	export RUMP_SERVER=$CLIENT
    237 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    238 	wait_for_disconnected
    239 	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
    240 				    'myauthname=$AUTHNAME' \
    241 				    'myauthsecret=invalidsecret' \
    242 				    'hisauthproto=none' \
    243 				    'max-auth-failure=1'"
    244 	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
    245 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    246 	wait_for_opened $cp dontfail
    247 	atf_check -s not-exit:0 -o ignore -e ignore \
    248 	    rump.ping -c 1 -w $TIMEOUT $SERVER_IP
    249 	atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
    250 	unset RUMP_SERVER
    251 }
    252 
    253 atf_test_case pppoe_pap cleanup
    254 
    255 pppoe_pap_head()
    256 {
    257 	atf_set "descr" "Does simple pap tests"
    258 	atf_set "require.progs" "rump_server pppoectl"
    259 }
    260 
    261 pppoe_pap_body()
    262 {
    263 	run_test pap
    264 }
    265 
    266 pppoe_pap_cleanup()
    267 {
    268 
    269 	$DEBUG && dump
    270 	cleanup
    271 }
    272 
    273 atf_test_case pppoe_chap cleanup
    274 
    275 pppoe_chap_head()
    276 {
    277 	atf_set "descr" "Does simple chap tests"
    278 	atf_set "require.progs" "rump_server pppoectl"
    279 }
    280 
    281 pppoe_chap_body()
    282 {
    283 	run_test chap
    284 }
    285 
    286 pppoe_chap_cleanup()
    287 {
    288 
    289 	$DEBUG && dump
    290 	cleanup
    291 }
    292 
    293 run_test6()
    294 {
    295 	local auth=$1
    296 	local cp="IPv6CP"
    297 	setup "inet=false"
    298 
    299 	# As pppoe client doesn't support rechallenge yet.
    300 	local server_optparam=""
    301 	if [ $auth = "chap" ]; then
    302 		server_optparam="norechallenge"
    303 	fi
    304 
    305 	export RUMP_SERVER=$SERVER
    306 	local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
    307 				    'hisauthname=$AUTHNAME' \
    308 				    'hisauthsecret=$SECRET' \
    309 				    'myauthproto=none' \
    310 				    $server_optparam"
    311 	atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
    312 	atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $SERVER_IP6/64 down
    313 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    314 	unset RUMP_SERVER
    315 
    316 	export RUMP_SERVER=$CLIENT
    317 	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
    318 				    'myauthname=$AUTHNAME' \
    319 				    'myauthsecret=$SECRET' \
    320 				    'hisauthproto=none'"
    321 	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
    322 	atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $CLIENT_IP6/64 down
    323 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    324 	$DEBUG && rump.ifconfig
    325 	wait_for_opened $cp
    326 	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
    327 	export RUMP_SERVER=$SERVER
    328 	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
    329 	export RUMP_SERVER=$CLIENT
    330 	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
    331 	unset RUMP_SERVER
    332 
    333 	# test for disconnection from server
    334 	export RUMP_SERVER=$SERVER
    335 	session_id=`$HIJACKING pppoectl -d pppoe0 | grep state`
    336 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    337 	wait_for_disconnected
    338 	export RUMP_SERVER=$CLIENT
    339 	wait_for_disconnected
    340 	atf_check -s not-exit:0 -o ignore -e ignore \
    341 	    rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
    342 	atf_check -s exit:0 -o not-match:"$session_id" -x "$HIJACKING pppoectl -d pppoe0"
    343 	unset RUMP_SERVER
    344 
    345 	# test for reconnecting
    346 	export RUMP_SERVER=$SERVER
    347 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    348 	wait_for_opened $cp
    349 	atf_check -s exit:0 rump.ifconfig -w 10
    350 	$DEBUG && $HIJACKING pppoectl -d pppoe0
    351 	$DEBUG && rump.ifconfig pppoe0
    352 	export RUMP_SERVER=$CLIENT
    353 	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
    354 	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
    355 	unset RUMP_SERVER
    356 
    357 	# test for disconnection from client
    358 	export RUMP_SERVER=$CLIENT
    359 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    360 	wait_for_disconnected
    361 
    362 	export RUMP_SERVER=$SERVER
    363 	wait_for_disconnected
    364 	$DEBUG && $HIJACKING pppoectl -d pppoe0
    365 	atf_check -s not-exit:0 -o ignore -e ignore \
    366 	    rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
    367 	atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
    368 	unset RUMP_SERVER
    369 
    370 	# test for reconnecting
    371 	export RUMP_SERVER=$CLIENT
    372 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    373 	wait_for_opened $cp
    374 	atf_check -s exit:0 rump.ifconfig -w 10
    375 
    376 	$DEBUG && rump.ifconfig pppoe0
    377 	$DEBUG && $HIJACKING pppoectl -d pppoe0
    378 	unset RUMP_SERVER
    379 
    380 	export RUMP_SERVER=$SERVER
    381 	atf_check -s exit:0 rump.ifconfig -w 10
    382 	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
    383 	atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
    384 	$DEBUG && HIJACKING pppoectl -d pppoe0
    385 	unset RUMP_SERVER
    386 
    387 	# test for invalid password
    388 	export RUMP_SERVER=$CLIENT
    389 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    390 	wait_for_disconnected
    391 	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
    392 				    'myauthname=$AUTHNAME' \
    393 				    'myauthsecret=invalidsecret' \
    394 				    'hisauthproto=none' \
    395 				    'max-auth-failure=1'"
    396 	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
    397 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    398 	wait_for_opened $cp dontfail
    399 	atf_check -s not-exit:0 -o ignore -e ignore \
    400 	    rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
    401 	atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
    402 	unset RUMP_SERVER
    403 }
    404 
    405 atf_test_case pppoe6_pap cleanup
    406 
    407 pppoe6_pap_head()
    408 {
    409 	atf_set "descr" "Does simple pap using IPv6 tests"
    410 	atf_set "require.progs" "rump_server pppoectl"
    411 }
    412 
    413 pppoe6_pap_body()
    414 {
    415 	run_test6 pap
    416 }
    417 
    418 pppoe6_pap_cleanup()
    419 {
    420 
    421 	$DEBUG && dump
    422 	cleanup
    423 }
    424 
    425 atf_test_case pppoe6_chap cleanup
    426 
    427 pppoe6_chap_head()
    428 {
    429 	atf_set "descr" "Does simple chap using IPv6 tests"
    430 	atf_set "require.progs" "rump_server pppoectl"
    431 }
    432 
    433 pppoe6_chap_body()
    434 {
    435 	run_test6 chap
    436 }
    437 
    438 pppoe6_chap_cleanup()
    439 {
    440 
    441 	$DEBUG && dump
    442 	cleanup
    443 }
    444 
    445 atf_test_case pppoe_params cleanup
    446 
    447 dump_bus()
    448 {
    449 
    450 	shmif_dumpbus -p - ${BUS} | tcpdump -n -e -r -
    451 }
    452 
    453 setup_auth_conf()
    454 {
    455 	local auth=chap
    456 
    457 	export RUMP_SERVER=$SERVER
    458 	local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
    459 				    'hisauthname=$AUTHNAME' \
    460 				    'hisauthsecret=$SECRET' \
    461 				    'myauthproto=none' \
    462 				    $server_optparam"
    463 
    464 	atf_check -s exit:0 rump.ifconfig pppoe0 link0
    465 	atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
    466 	unset RUMP_SERVER
    467 
    468 	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
    469 				    'myauthname=$AUTHNAME' \
    470 				    'myauthsecret=$SECRET' \
    471 				    'hisauthproto=none'"
    472 
    473 	export RUMP_SERVER=$CLIENT
    474 	$inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
    475 	    inet 0.0.0.0 0.0.0.1 down
    476 	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
    477 	$DEBUG && rump.ifconfig
    478 	unset RUMP_SERVER
    479 }
    480 
    481 pppoe_params_head()
    482 {
    483 	atf_set "descr" "Set and clear access concentrator name and service name"
    484 	atf_set "require.progs" "rump_server pppoectl"
    485 }
    486 
    487 pppoe_params_body()
    488 {
    489 	local dumpcmd
    490 	local cp="LCP"
    491 
    492 	dumpcmd="shmif_dumpbus -p - ${BUS}"
    493 	dumpcmd="${dumpcmd} | tcpdump -n -e -r -"
    494 
    495 	rump_server_start $SERVER netinet6 pppoe
    496 	rump_server_start $CLIENT netinet6 pppoe
    497 
    498 	setup_ifaces
    499 	setup_auth_conf
    500 
    501 	export RUMP_SERVER=$SERVER
    502 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
    503 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    504 	unset RUMP_SERVER
    505 
    506 	export RUMP_SERVER=$CLIENT
    507 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
    508 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    509 	$DEBUG && rump.ifconfig
    510 	wait_for_opened $cp
    511 	unset RUMP_SERVER
    512 
    513 	$DEBUG && dump_bus
    514 	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
    515 	    -x "${dumpcmd} | grep PADI"
    516 	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
    517 	    -x "${dumpcmd} | grep PADR"
    518 	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
    519 	    -x "${dumpcmd} | grep PADI"
    520 
    521 	# set Remote access concentrator name (AC-NAME, -a option)
    522 	export RUMP_SERVER=$CLIENT
    523 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    524 	wait_for_disconnected
    525 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 -a ACNAME-TEST0 pppoe0"
    526 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    527 	$DEBUG && rump.ifconfig
    528 	wait_for_opened $cp
    529 	unset RUMP_SERVER
    530 
    531 	$DEBUG && dump_bus
    532 	atf_check -s exit:0 -o match:'\[AC-Name "ACNAME-TEST0"\]' -e ignore \
    533 	    -x "${dumpcmd} | grep PADI"
    534 
    535 	# change AC-NAME
    536 	export RUMP_SERVER=$CLIENT
    537 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    538 	wait_for_disconnected
    539 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 -a ACNAME-TEST1 pppoe0"
    540 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    541 	$DEBUG && rump.ifconfig
    542 	wait_for_opened $cp
    543 	unset RUMP_SERVER
    544 
    545 	$DEBUG && dump_bus
    546 	atf_check -s exit:0 -o match:'\[AC-Name "ACNAME-TEST1"\]' -e ignore \
    547 	    -x "${dumpcmd} | grep PADI"
    548 
    549 	# clear AC-NAME
    550 	rump_server_destroy_ifaces
    551 	rm ${BUS} 2> /dev/null
    552 	setup_ifaces
    553 	setup_auth_conf
    554 
    555 	export RUMP_SERVER=$SERVER
    556 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
    557 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    558 	unset RUMP_SERVER
    559 
    560 	export RUMP_SERVER=$CLIENT
    561 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    562 	wait_for_disconnected
    563 	atf_check -s exit:0 -x "$HIJACKING pppoectl -a ACNAME-TEST2 -e shmif0 pppoe0"
    564 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
    565 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    566 	$DEBUG && rump.ifconfig
    567 	wait_for_opened $cp
    568 	unset RUMP_SERVER
    569 
    570 	$DEBUG && dump_bus
    571 	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
    572 	    -x "${dumpcmd} | grep PADI"
    573 	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
    574 	    -x "${dumpcmd} | grep PADR"
    575 	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
    576 	    -x "${dumpcmd} | grep PADI"
    577 
    578 	# store 0 length string in AC-NAME
    579 	export RUMP_SERVER=$CLIENT
    580 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    581 	wait_for_disconnected
    582 	atf_check -s exit:0 -x "$HIJACKING pppoectl -a \"\" -e shmif0 pppoe0"
    583 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    584 	$DEBUG && rump.ifconfig
    585 	wait_for_opened $cp
    586 	unset RUMP_SERVER
    587 
    588 	atf_check -s exit:0 -o match:'\[AC-Name\]' -e ignore \
    589 	    -x "${dumpcmd} | grep PADI"
    590 
    591 	# set Service Name (Service-Name, -s option)
    592 	rump_server_destroy_ifaces
    593 	rm ${BUS} 2> /dev/null
    594 	setup_ifaces
    595 	setup_auth_conf
    596 
    597 	export RUMP_SERVER=$SERVER
    598 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
    599 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    600 	unset RUMP_SERVER
    601 
    602 	export RUMP_SERVER=$CLIENT
    603 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    604 	wait_for_disconnected
    605 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 -s SNAME-TEST0 pppoe0"
    606 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    607 	$DEBUG && rump.ifconfig
    608 	wait_for_opened $cp
    609 	unset RUMP_SERVER
    610 
    611 	$DEBUG && dump_bus
    612 	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST0"\]' -e ignore \
    613 	    -x "${dumpcmd} | grep PADI"
    614 	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST0"\]' -e ignore \
    615 	    -x "${dumpcmd} | grep PADR"
    616 	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
    617 	    -x "${dumpcmd} | grep PADI"
    618 
    619 	# change Service-Name
    620 	export RUMP_SERVER=$CLIENT
    621 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    622 	wait_for_disconnected
    623 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 -s SNAME-TEST1 pppoe0"
    624 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    625 	$DEBUG && rump.ifconfig
    626 	wait_for_opened $cp
    627 	unset RUMP_SERVER
    628 
    629 	$DEBUG && dump_bus
    630 	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST1"\]' -e ignore \
    631 	    -x "${dumpcmd} | grep PADI"
    632 	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST1"\]' -e ignore \
    633 	    -x "${dumpcmd} | grep PADR"
    634 
    635 	# clear Service-Name
    636 	rump_server_destroy_ifaces
    637 	rm ${BUS} 2> /dev/null
    638 	setup_ifaces
    639 	setup_auth_conf
    640 
    641 	export RUMP_SERVER=$SERVER
    642 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
    643 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    644 	unset RUMP_SERVER
    645 
    646 	export RUMP_SERVER=$CLIENT
    647 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    648 	wait_for_disconnected
    649 	atf_check -s exit:0 -x "$HIJACKING pppoectl -s SNAME-TEST2 -e shmif0 pppoe0"
    650 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
    651 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    652 	$DEBUG && rump.ifconfig
    653 	wait_for_opened $cp
    654 	unset RUMP_SERVER
    655 
    656 	$DEBUG && dump_bus
    657 	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
    658 	    -x "${dumpcmd} | grep PADI"
    659 	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
    660 	    -x "${dumpcmd} | grep PADR"
    661 	atf_check -s exit:0 -o not-match:'AC-Name' -e ignore \
    662 	    -x "${dumpcmd} | grep PADI"
    663 
    664 	# set AC-NAME and Service-Name
    665 	rump_server_destroy_ifaces
    666 	rm ${BUS} 2> /dev/null
    667 	setup_ifaces
    668 	setup_auth_conf
    669 
    670 	export RUMP_SERVER=$SERVER
    671 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
    672 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    673 	unset RUMP_SERVER
    674 
    675 	export RUMP_SERVER=$CLIENT
    676 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    677 	wait_for_disconnected
    678 	atf_check -s exit:0 -x \
    679 	    "$HIJACKING pppoectl -e shmif0 -a ACNAME-TEST3 -s SNAME-TEST3 pppoe0"
    680 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    681 	$DEBUG && rump.ifconfig
    682 	wait_for_opened $cp
    683 	unset RUMP_SERVER
    684 
    685 	$DEBUG && dump_bus
    686 	atf_check -s exit:0 \
    687 	    -o match:'\[Service-Name "SNAME-TEST3"\] \[AC-Name "ACNAME-TEST3"\]' \
    688 	    -e ignore \
    689 	    -x "${dumpcmd} | grep PADI"
    690 	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST3"\]' -e ignore \
    691 	    -x "${dumpcmd} | grep PADR"
    692 
    693 	# change AC-NAME
    694 	export RUMP_SERVER=$CLIENT
    695 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    696 	wait_for_disconnected
    697 	atf_check -s exit:0 -x \
    698 	    "$HIJACKING pppoectl -e shmif0 -a ACNAME-TEST4 pppoe0"
    699 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    700 	$DEBUG && rump.ifconfig
    701 	wait_for_opened $cp
    702 	unset RUMP_SERVER
    703 
    704 	$DEBUG && dump_bus
    705 	atf_check -s exit:0 \
    706 	    -o match:'\[Service-Name\] \[AC-Name "ACNAME-TEST4"\]' \
    707 	    -e ignore \
    708 	    -x "${dumpcmd} | grep PADI"
    709 	atf_check -s exit:0 -o match:'\[Service-Name\]' -e ignore \
    710 	    -x "${dumpcmd} | grep PADR"
    711 
    712 	# change Service-Name
    713 	export RUMP_SERVER=$CLIENT
    714 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    715 	wait_for_disconnected
    716 	atf_check -s exit:0 -x \
    717 	    "$HIJACKING pppoectl -e shmif0 -a ACNAME-TEST5 -s SNAME-TEST5 pppoe0"
    718 	atf_check -s exit:0 -x \
    719 	    "$HIJACKING pppoectl -e shmif0 -s SNAME-TEST6 pppoe0"
    720 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    721 	$DEBUG && rump.ifconfig
    722 	wait_for_opened $cp
    723 	unset RUMP_SERVER
    724 
    725 	$DEBUG && dump_bus
    726 	atf_check -s exit:0 \
    727 	    -o match:'\[Service-Name "SNAME-TEST6"\]' \
    728 	    -e ignore \
    729 	    -x "${dumpcmd} | grep PADI"
    730 	atf_check -s exit:0 -o match:'\[Service-Name "SNAME-TEST6"\]' -e ignore \
    731 	    -x "${dumpcmd} | grep PADR"
    732 	atf_check -s exit:0 -o not-match:'\[AC-Name "ACNAME-TEST5\]"' -e ignore \
    733 	    -x "${dumpcmd} | grep PADI"
    734 }
    735 
    736 pppoe_params_cleanup()
    737 {
    738 
    739 	$DEBUG && dump
    740 	cleanup
    741 }
    742 
    743 pppoe_passiveauthproto()
    744 {
    745 	local auth=$1
    746 	local cp="IPCP"
    747 	setup
    748 
    749 	local server_optparam=""
    750 	if [ $auth = "chap" ]; then
    751 		server_optparam="norechallenge"
    752 	fi
    753 
    754 	export RUMP_SERVER=$SERVER
    755 	local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
    756 				    'hisauthname=$AUTHNAME' \
    757 				    'hisauthsecret=$SECRET' \
    758 				    'myauthproto=none' \
    759 				    $server_optparam"
    760 	atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
    761 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    762 
    763 	export RUMP_SERVER=$CLIENT
    764 	local setup_clientparam="pppoectl pppoe0 myauthproto=none \
    765 				    'myauthname=$AUTHNAME' \
    766 				    'myauthsecret=$SECRET' \
    767 				    'hisauthproto=none' \
    768 				    'passiveauthproto'"
    769 	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
    770 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    771 	$DEBUG && rump.ifconfig
    772 	wait_for_opened $cp
    773 	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
    774 }
    775 
    776 atf_test_case pppoe_passiveauthproto_pap cleanup
    777 pppoe_passiveauthproto_pap_head()
    778 {
    779 
    780 	atf_set "descr" "Test for passiveauthproto option on PAP"
    781 	atf_set "require.progs" "rump_server"
    782 }
    783 
    784 pppoe_passiveauthproto_pap_body()
    785 {
    786 
    787 	pppoe_passiveauthproto "pap"
    788 }
    789 
    790 pppoe_passiveauthproto_pap_cleanup()
    791 {
    792 
    793 	$DEBUG && dump
    794 	cleanup
    795 }
    796 
    797 atf_test_case pppoe_passiveauthproto_chap cleanup
    798 pppoe_passiveauthproto_chap_head()
    799 {
    800 
    801 	atf_set "descr" "Test for passiveauthproto option on chap"
    802 	atf_set "require.progs" "rump_server"
    803 }
    804 
    805 pppoe_passiveauthproto_chap_body()
    806 {
    807 
    808 	pppoe_passiveauthproto "chap"
    809 }
    810 
    811 pppoe_passiveauthproto_chap_cleanup()
    812 {
    813 
    814 	$DEBUG && dump
    815 	cleanup
    816 }
    817 
    818 atf_init_test_cases()
    819 {
    820 
    821 	atf_add_test_case pppoe_create_destroy
    822 	atf_add_test_case pppoe_params
    823 	atf_add_test_case pppoe_pap
    824 	atf_add_test_case pppoe_chap
    825 	atf_add_test_case pppoe6_pap
    826 	atf_add_test_case pppoe6_chap
    827 	atf_add_test_case pppoe_passiveauthproto_pap
    828 	atf_add_test_case pppoe_passiveauthproto_chap
    829 }
    830