Home | History | Annotate | Line # | Download | only in if_pppoe
      1 #	$NetBSD: t_pppoe_unnumbered.sh,v 1.1 2022/11/25 08:43:16 knakahara Exp $
      2 #
      3 # Copyright (c) 2022 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.0.0.1
     32 CLIENT_IP=10.1.1.1
     33 AUTHNAME=foobar@baz.com
     34 SECRET=oink
     35 BUS_G=bus_global
     36 BUS_CLIENT_L=bus_client_local
     37 TIMEOUT=3
     38 WAITTIME=10
     39 DEBUG=${DEBUG:-false}
     40 
     41 atf_ifconfig()
     42 {
     43 
     44 	atf_check -s exit:0 rump.ifconfig $*
     45 }
     46 
     47 atf_pppoectl()
     48 {
     49 
     50 	atf_check -s exit:0 -x "$HIJACKING pppoectl $*"
     51 }
     52 
     53 setup_ifaces()
     54 {
     55 
     56 	rump_server_add_iface $SERVER shmif0 $BUS_G
     57 	rump_server_add_iface $CLIENT shmif0 $BUS_G
     58 	rump_server_add_iface $CLIENT shmif1 $BUS_CLIENT_L
     59 	rump_server_add_iface $SERVER pppoe0
     60 	rump_server_add_iface $CLIENT pppoe0
     61 
     62 	export RUMP_SERVER=$SERVER
     63 
     64 	atf_ifconfig shmif0 up
     65 	$inet && atf_ifconfig pppoe0 \
     66 	    inet $SERVER_IP $CLIENT_IP down
     67 	atf_ifconfig pppoe0 link0
     68 
     69 	$DEBUG && rump.ifconfig pppoe0 debug
     70 	$DEBUG && rump.ifconfig
     71 	$DEBUG && $HIJACKING pppoectl -d pppoe0
     72 	unset RUMP_SERVER
     73 
     74 	export RUMP_SERVER=$CLIENT
     75 	atf_ifconfig shmif0 up
     76 
     77 	$inet && atf_ifconfig pppoe0 \
     78 	    inet $CLIENT_IP/32 0.0.0.1 down
     79 
     80 	$DEBUG && rump.ifconfig pppoe0 debug
     81 	$DEBUG && rump.ifconfig
     82 	$DEBUG && $HIJACKING pppoectl -d pppoe0
     83 
     84 	atf_ifconfig shmif1 inet $CLIENT_IP/29
     85 	unset RUMP_SERVER
     86 }
     87 
     88 setup()
     89 {
     90 	inet=true
     91 
     92 	if [ $# -ne 0 ]; then
     93 		eval $@
     94 	fi
     95 
     96 	rump_server_start $SERVER pppoe
     97 	rump_server_start $CLIENT pppoe
     98 
     99 	setup_ifaces
    100 
    101 	export RUMP_SERVER=$SERVER
    102 	atf_pppoectl -e shmif0 pppoe0
    103 	unset RUMP_SERVER
    104 
    105 	export RUMP_SERVER=$CLIENT
    106 	atf_pppoectl -e shmif0 pppoe0
    107 	unset RUMP_SERVER
    108 }
    109 
    110 wait_for_opened()
    111 {
    112 	local cp=$1
    113 	local dontfail=$2
    114 	local n=$WAITTIME
    115 
    116 	for i in $(seq $n); do
    117 		$HIJACKING pppoectl -dd pppoe0 | grep -q "$cp state: opened"
    118 		if [ $? = 0 ]; then
    119 			rump.ifconfig -w 10
    120 			return
    121 		fi
    122 		sleep 1
    123 	done
    124 
    125 	if [ "$dontfail" != "dontfail" ]; then
    126 		atf_fail "Couldn't connect to the server for $n seconds."
    127 	fi
    128 }
    129 
    130 wait_for_disconnected()
    131 {
    132 	local dontfail=$1
    133 	local n=$WAITTIME
    134 
    135 	for i in $(seq $n); do
    136 		# If PPPoE client is disconnected by PPPoE server, then
    137 		# the LCP state will of the client is in a starting to send PADI.
    138 		$HIJACKING pppoectl -dd pppoe0 | grep -q \
    139 		    -e "LCP state: initial" -e "LCP state: starting"
    140 		[ $? = 0 ] && return
    141 
    142 		sleep 1
    143 	done
    144 
    145 	if [ "$dontfail" != "dontfail" ]; then
    146 		atf_fail "Couldn't disconnect for $n seconds."
    147 	fi
    148 }
    149 
    150 run_test_unnumbered()
    151 {
    152 	local auth="chap"
    153 	local cp="IPCP"
    154 	setup
    155 
    156 	# As pppoe client doesn't support rechallenge yet.
    157 	local server_optparam=""
    158 	if [ $auth = "chap" ]; then
    159 		server_optparam="norechallenge"
    160 	fi
    161 
    162 	export RUMP_SERVER=$SERVER
    163 	atf_pppoectl pppoe0 "hisauthproto=$auth" \
    164 	    "hisauthname=$AUTHNAME" "hisauthsecret=$SECRET" \
    165 	    "myauthproto=none" $server_optparam
    166 	atf_ifconfig pppoe0 up
    167 	unset RUMP_SERVER
    168 
    169 	export RUMP_SERVER=$CLIENT
    170 	atf_pppoectl pppoe0 \
    171 	    "myauthname=$AUTHNAME" "myauthsecret=$SECRET" \
    172 	    "myauthproto=$auth" "hisauthproto=none"
    173 	atf_ifconfig pppoe0 unnumbered
    174 	atf_ifconfig pppoe0 up
    175 	$DEBUG && rump.ifconfig
    176 	$DEBUG && rump.route -nL show
    177 	wait_for_opened $cp
    178 	atf_check -s exit:0 -o ignore \
    179 		  rump.route add -inet default -ifp pppoe0 $CLIENT_IP
    180 	atf_check -s exit:0 -o ignore \
    181 		  rump.ping -c 1 -w $TIMEOUT -I $CLIENT_IP $SERVER_IP
    182 	unset RUMP_SERVER
    183 
    184 	# test for disconnection from client just in case
    185 	export RUMP_SERVER=$CLIENT
    186 	atf_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"
    194 	unset RUMP_SERVER
    195 }
    196 
    197 atf_test_case pppoe_unnumbered cleanup
    198 
    199 pppoe_unnumbered_head()
    200 {
    201 
    202 	atf_set "descr" "Does pppoe unnumbered tests"
    203 	atf_set "require.progs" "rump_server pppoectl"
    204 }
    205 
    206 pppoe_unnumbered_body()
    207 {
    208 
    209 	run_test_unnumbered
    210 }
    211 
    212 pppoe_unnumbered_cleanup()
    213 {
    214 
    215 	$DEBUG && dump
    216 	cleanup
    217 }
    218 
    219 atf_init_test_cases()
    220 {
    221 
    222 	atf_add_test_case pppoe_unnumbered
    223 }
    224