Home | History | Annotate | Line # | Download | only in ipsec
t_ipsec_l2tp.sh revision 1.7.4.1
      1  1.7.4.1  martin #	$NetBSD: t_ipsec_l2tp.sh,v 1.7.4.1 2020/04/08 14:09:12 martin Exp $
      2      1.1   ozaki #
      3      1.1   ozaki # Copyright (c) 2017 Internet Initiative Japan Inc.
      4      1.1   ozaki # All rights reserved.
      5      1.1   ozaki #
      6      1.1   ozaki # Redistribution and use in source and binary forms, with or without
      7      1.1   ozaki # modification, are permitted provided that the following conditions
      8      1.1   ozaki # are met:
      9      1.1   ozaki # 1. Redistributions of source code must retain the above copyright
     10      1.1   ozaki #    notice, this list of conditions and the following disclaimer.
     11      1.1   ozaki # 2. Redistributions in binary form must reproduce the above copyright
     12      1.1   ozaki #    notice, this list of conditions and the following disclaimer in the
     13      1.1   ozaki #    documentation and/or other materials provided with the distribution.
     14      1.1   ozaki #
     15      1.1   ozaki # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     16      1.1   ozaki # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     17      1.1   ozaki # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18      1.1   ozaki # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     19      1.1   ozaki # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     20      1.1   ozaki # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     21      1.1   ozaki # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     22      1.1   ozaki # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     23      1.1   ozaki # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     24      1.1   ozaki # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     25      1.1   ozaki # POSSIBILITY OF SUCH DAMAGE.
     26      1.1   ozaki #
     27      1.1   ozaki 
     28      1.1   ozaki SOCK_LOCAL=unix://ipsec_l2tp_local
     29      1.1   ozaki SOCK_TUN_LOCAL=unix://ipsec_l2tp_tunel_local
     30      1.1   ozaki SOCK_TUN_REMOTE=unix://ipsec_l2tp_tunnel_remote
     31      1.1   ozaki SOCK_REMOTE=unix://ipsec_l2tp_remote
     32      1.1   ozaki BUS_LOCAL=./bus_ipsec_local
     33      1.1   ozaki BUS_TUNNEL=./bus_ipsec_tunnel
     34      1.1   ozaki BUS_REMOTE=./bus_ipsec_remote
     35      1.1   ozaki 
     36      1.6   ozaki DEBUG=${DEBUG:-true}
     37      1.1   ozaki 
     38      1.1   ozaki make_l2tp_pktstr()
     39      1.1   ozaki {
     40      1.1   ozaki 	local src=$1
     41      1.1   ozaki 	local dst=$2
     42      1.1   ozaki 	local proto=$3
     43      1.1   ozaki 	local ipproto=$4
     44      1.2   ozaki 	local mode=$5
     45      1.1   ozaki 	local proto_cap= proto_str=
     46      1.1   ozaki 
     47      1.1   ozaki 	if [ $proto = esp ]; then
     48      1.1   ozaki 		proto_cap=ESP
     49      1.1   ozaki 	else
     50      1.1   ozaki 		proto_cap=AH
     51      1.1   ozaki 		if [ $ipproto = ipv4 ]; then
     52      1.2   ozaki 			if [ $mode = tunnel ]; then
     53      1.2   ozaki 				proto_str="ip-proto-115 102 \(ipip-proto-4\)"
     54      1.2   ozaki 			else
     55      1.2   ozaki 				proto_str="ip-proto-115 102"
     56      1.2   ozaki 			fi
     57      1.1   ozaki 		else
     58      1.1   ozaki 			proto_str="ip-proto-115"
     59      1.1   ozaki 		fi
     60      1.1   ozaki 	fi
     61      1.1   ozaki 
     62      1.1   ozaki 	echo "$src > $dst: $proto_cap.+$proto_str"
     63      1.1   ozaki }
     64      1.1   ozaki 
     65  1.7.4.1  martin wait_for_all_dad_completions()
     66  1.7.4.1  martin {
     67  1.7.4.1  martin 
     68  1.7.4.1  martin 	for sock in $SOCK_LOCAL $SOCK_TUN_LOCAL $SOCK_TUN_REMOTE $SOCK_REMOTE; do
     69  1.7.4.1  martin 		export RUMP_SERVER=$sock
     70  1.7.4.1  martin 		atf_check -s exit:0 rump.ifconfig -w 10
     71  1.7.4.1  martin 	done
     72  1.7.4.1  martin }
     73  1.7.4.1  martin 
     74      1.1   ozaki test_ipsec4_l2tp()
     75      1.1   ozaki {
     76      1.2   ozaki 	local mode=$1
     77      1.2   ozaki 	local proto=$2
     78      1.2   ozaki 	local algo=$3
     79      1.1   ozaki 	local ip_local=10.0.0.1
     80      1.2   ozaki 	local ip_gwlo_tun=20.0.0.1
     81      1.2   ozaki 	local ip_gwre_tun=20.0.0.2
     82      1.1   ozaki 	local ip_remote=10.0.0.2
     83      1.1   ozaki 	local subnet_local=20.0.0.0
     84      1.1   ozaki 	local subnet_remote=20.0.0.0
     85      1.1   ozaki 	local tmpfile=./tmp
     86      1.1   ozaki 	local outfile=./out
     87      1.5   ozaki 	local str=
     88      1.5   ozaki 	local algo_args="$(generate_algo_args $proto $algo)"
     89      1.1   ozaki 
     90      1.1   ozaki 	# See https://www.netbsd.org/docs/network/ipsec/#sample_vpn
     91      1.1   ozaki 	rump_server_crypto_start $SOCK_LOCAL
     92      1.1   ozaki 	rump_server_crypto_start $SOCK_TUN_LOCAL netipsec l2tp bridge
     93      1.1   ozaki 	rump_server_crypto_start $SOCK_TUN_REMOTE netipsec l2tp bridge
     94      1.1   ozaki 	rump_server_crypto_start $SOCK_REMOTE
     95      1.1   ozaki 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS_LOCAL
     96      1.1   ozaki 	rump_server_add_iface $SOCK_TUN_LOCAL shmif0 $BUS_LOCAL
     97      1.1   ozaki 	rump_server_add_iface $SOCK_TUN_LOCAL shmif1 $BUS_TUNNEL
     98      1.1   ozaki 	rump_server_add_iface $SOCK_TUN_REMOTE shmif0 $BUS_REMOTE
     99      1.1   ozaki 	rump_server_add_iface $SOCK_TUN_REMOTE shmif1 $BUS_TUNNEL
    100      1.1   ozaki 	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS_REMOTE
    101      1.1   ozaki 
    102      1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    103      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_local/24
    104      1.1   ozaki 
    105      1.1   ozaki 	export RUMP_SERVER=$SOCK_TUN_LOCAL
    106      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 up
    107      1.2   ozaki 	atf_check -s exit:0 rump.ifconfig shmif1 $ip_gwlo_tun/24
    108      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 create
    109      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 \
    110      1.2   ozaki 	    tunnel $ip_gwlo_tun $ip_gwre_tun
    111      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 session 1234 4321
    112      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 up
    113      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig bridge0 create
    114      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig bridge0 up
    115      1.1   ozaki 	atf_check -s exit:0 $HIJACKING brconfig bridge0 add l2tp0
    116      1.1   ozaki 	atf_check -s exit:0 $HIJACKING brconfig bridge0 add shmif0
    117      1.1   ozaki 
    118      1.1   ozaki 	export RUMP_SERVER=$SOCK_TUN_REMOTE
    119      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 up
    120      1.2   ozaki 	atf_check -s exit:0 rump.ifconfig shmif1 $ip_gwre_tun/24
    121      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 create
    122      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 \
    123      1.2   ozaki 	    tunnel $ip_gwre_tun $ip_gwlo_tun
    124      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 session 4321 1234
    125      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 up
    126      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig bridge0 create
    127      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig bridge0 up
    128      1.1   ozaki 	atf_check -s exit:0 $HIJACKING brconfig bridge0 add l2tp0
    129      1.1   ozaki 	atf_check -s exit:0 $HIJACKING brconfig bridge0 add shmif0
    130      1.1   ozaki 
    131      1.1   ozaki 	export RUMP_SERVER=$SOCK_REMOTE
    132      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_remote/24
    133  1.7.4.1  martin 
    134  1.7.4.1  martin 	wait_for_all_dad_completions
    135      1.1   ozaki 
    136      1.1   ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    137      1.1   ozaki 
    138      1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    139      1.1   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_remote
    140      1.1   ozaki 
    141      1.1   ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    142      1.1   ozaki 	atf_check -s exit:0 \
    143      1.2   ozaki 	    -o match:"$ip_gwlo_tun > $ip_gwre_tun: +ip-proto-115" \
    144      1.1   ozaki 	    cat $outfile
    145      1.1   ozaki 	atf_check -s exit:0 \
    146      1.2   ozaki 	    -o match:"$ip_gwre_tun > $ip_gwlo_tun: +ip-proto-115" \
    147      1.1   ozaki 	    cat $outfile
    148      1.1   ozaki 
    149      1.2   ozaki 	if [ $mode = tunnel ]; then
    150      1.2   ozaki 		export RUMP_SERVER=$SOCK_TUN_LOCAL
    151      1.2   ozaki 		# from https://www.netbsd.org/docs/network/ipsec/
    152      1.2   ozaki 		cat > $tmpfile <<-EOF
    153      1.5   ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    154      1.5   ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    155      1.2   ozaki 		spdadd $subnet_local/24 $subnet_remote/24 any -P out ipsec
    156      1.2   ozaki 		    $proto/tunnel/$ip_gwlo_tun-$ip_gwre_tun/require;
    157      1.2   ozaki 		spdadd $subnet_remote/24 $subnet_local/24 any -P in ipsec
    158      1.2   ozaki 		    $proto/tunnel/$ip_gwre_tun-$ip_gwlo_tun/require;
    159      1.2   ozaki 		EOF
    160      1.2   ozaki 		$DEBUG && cat $tmpfile
    161      1.2   ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    162      1.2   ozaki 
    163      1.2   ozaki 		export RUMP_SERVER=$SOCK_TUN_REMOTE
    164      1.2   ozaki 		cat > $tmpfile <<-EOF
    165      1.5   ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    166      1.5   ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    167      1.2   ozaki 		spdadd $subnet_remote/24 $subnet_local/24 any -P out ipsec
    168      1.2   ozaki 		    $proto/tunnel/$ip_gwre_tun-$ip_gwlo_tun/require;
    169      1.2   ozaki 		spdadd $subnet_local/24 $subnet_remote/24 any -P in ipsec
    170      1.2   ozaki 		    $proto/tunnel/$ip_gwlo_tun-$ip_gwre_tun/require;
    171      1.2   ozaki 		EOF
    172      1.2   ozaki 		$DEBUG && cat $tmpfile
    173      1.2   ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    174      1.2   ozaki 	else # transport mode
    175      1.2   ozaki 		export RUMP_SERVER=$SOCK_TUN_LOCAL
    176      1.2   ozaki 		# from https://www.netbsd.org/docs/network/ipsec/
    177      1.2   ozaki 		cat > $tmpfile <<-EOF
    178      1.5   ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    179      1.5   ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    180      1.2   ozaki 		spdadd $ip_gwlo_tun/32 $ip_gwre_tun/32 any -P out ipsec
    181      1.2   ozaki 		    $proto/transport//require;
    182      1.2   ozaki 		spdadd $ip_gwre_tun/32 $ip_gwlo_tun/32 any -P in ipsec
    183      1.2   ozaki 		    $proto/transport//require;
    184      1.2   ozaki 		EOF
    185      1.2   ozaki 		$DEBUG && cat $tmpfile
    186      1.2   ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    187      1.2   ozaki 
    188      1.2   ozaki 		export RUMP_SERVER=$SOCK_TUN_REMOTE
    189      1.2   ozaki 		cat > $tmpfile <<-EOF
    190      1.5   ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    191      1.5   ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    192      1.2   ozaki 		spdadd $ip_gwre_tun/32 $ip_gwlo_tun/32 any -P out ipsec
    193      1.2   ozaki 		    $proto/transport//require;
    194      1.2   ozaki 		spdadd $ip_gwlo_tun/32 $ip_gwre_tun/32 any -P in ipsec
    195      1.2   ozaki 		    $proto/transport//require;
    196      1.2   ozaki 		EOF
    197      1.2   ozaki 		$DEBUG && cat $tmpfile
    198      1.2   ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    199      1.2   ozaki 	fi
    200      1.2   ozaki 
    201      1.4   ozaki 	check_sa_entries $SOCK_TUN_LOCAL $ip_gwlo_tun $ip_gwre_tun
    202      1.4   ozaki 	check_sa_entries $SOCK_TUN_REMOTE $ip_gwlo_tun $ip_gwre_tun
    203      1.1   ozaki 
    204      1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    205      1.1   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_remote
    206      1.1   ozaki 
    207      1.1   ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    208      1.2   ozaki 	str=$(make_l2tp_pktstr $ip_gwlo_tun $ip_gwre_tun $proto ipv4 $mode)
    209      1.1   ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    210      1.2   ozaki 	str=$(make_l2tp_pktstr $ip_gwre_tun $ip_gwlo_tun $proto ipv4 $mode)
    211      1.1   ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    212      1.3   ozaki 
    213      1.3   ozaki 	test_flush_entries $SOCK_TUN_LOCAL
    214      1.3   ozaki 	test_flush_entries $SOCK_TUN_REMOTE
    215      1.1   ozaki }
    216      1.1   ozaki 
    217      1.1   ozaki test_ipsec6_l2tp()
    218      1.1   ozaki {
    219      1.2   ozaki 	local mode=$1
    220      1.2   ozaki 	local proto=$2
    221      1.2   ozaki 	local algo=$3
    222      1.1   ozaki 	local ip_local=fd00::1
    223      1.2   ozaki 	local ip_gwlo_tun=fc00::1
    224      1.2   ozaki 	local ip_gwre_tun=fc00::2
    225      1.1   ozaki 	local ip_remote=fd00::2
    226      1.1   ozaki 	local subnet_local=fc00::
    227      1.1   ozaki 	local subnet_remote=fc00::
    228      1.1   ozaki 	local tmpfile=./tmp
    229      1.1   ozaki 	local outfile=./out
    230      1.5   ozaki 	local str=
    231      1.5   ozaki 	local algo_args="$(generate_algo_args $proto $algo)"
    232      1.1   ozaki 
    233      1.1   ozaki 	rump_server_crypto_start $SOCK_LOCAL netinet6
    234      1.1   ozaki 	rump_server_crypto_start $SOCK_TUN_LOCAL netipsec netinet6 l2tp bridge
    235      1.1   ozaki 	rump_server_crypto_start $SOCK_TUN_REMOTE netipsec netinet6 l2tp bridge
    236      1.1   ozaki 	rump_server_crypto_start $SOCK_REMOTE netinet6
    237      1.1   ozaki 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS_LOCAL
    238      1.1   ozaki 	rump_server_add_iface $SOCK_TUN_LOCAL shmif0 $BUS_LOCAL
    239      1.1   ozaki 	rump_server_add_iface $SOCK_TUN_LOCAL shmif1 $BUS_TUNNEL
    240      1.1   ozaki 	rump_server_add_iface $SOCK_TUN_REMOTE shmif0 $BUS_REMOTE
    241      1.1   ozaki 	rump_server_add_iface $SOCK_TUN_REMOTE shmif1 $BUS_TUNNEL
    242      1.1   ozaki 	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS_REMOTE
    243      1.1   ozaki 
    244      1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    245      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip_local/64
    246      1.1   ozaki 
    247      1.1   ozaki 	export RUMP_SERVER=$SOCK_TUN_LOCAL
    248      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 up
    249      1.2   ozaki 	atf_check -s exit:0 rump.ifconfig shmif1 inet6 $ip_gwlo_tun/64
    250      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 create
    251      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 \
    252      1.2   ozaki 	    tunnel $ip_gwlo_tun $ip_gwre_tun
    253      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 session 1234 4321
    254      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 up
    255      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig bridge0 create
    256      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig bridge0 up
    257      1.1   ozaki 	atf_check -s exit:0 $HIJACKING brconfig bridge0 add l2tp0
    258      1.1   ozaki 	atf_check -s exit:0 $HIJACKING brconfig bridge0 add shmif0
    259      1.1   ozaki 
    260      1.1   ozaki 	export RUMP_SERVER=$SOCK_TUN_REMOTE
    261      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 up
    262      1.2   ozaki 	atf_check -s exit:0 rump.ifconfig shmif1 inet6 $ip_gwre_tun/64
    263      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 create
    264      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 \
    265      1.2   ozaki 	    tunnel $ip_gwre_tun $ip_gwlo_tun
    266      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 session 4321 1234
    267      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig l2tp0 up
    268      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig bridge0 create
    269      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig bridge0 up
    270      1.1   ozaki 	atf_check -s exit:0 $HIJACKING brconfig bridge0 add l2tp0
    271      1.1   ozaki 	atf_check -s exit:0 $HIJACKING brconfig bridge0 add shmif0
    272      1.1   ozaki 
    273      1.1   ozaki 	export RUMP_SERVER=$SOCK_REMOTE
    274      1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip_remote
    275  1.7.4.1  martin 
    276  1.7.4.1  martin 	wait_for_all_dad_completions
    277      1.1   ozaki 
    278      1.1   ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    279      1.1   ozaki 
    280      1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    281      1.1   ozaki 	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -n -X 3 $ip_remote
    282      1.1   ozaki 
    283      1.1   ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    284      1.1   ozaki 	atf_check -s exit:0 \
    285      1.2   ozaki 	    -o match:"$ip_gwlo_tun > $ip_gwre_tun: +ip-proto-115" \
    286      1.1   ozaki 	    cat $outfile
    287      1.1   ozaki 	atf_check -s exit:0 \
    288      1.2   ozaki 	    -o match:"$ip_gwre_tun > $ip_gwlo_tun: +ip-proto-115" \
    289      1.1   ozaki 	    cat $outfile
    290      1.1   ozaki 
    291      1.2   ozaki 	if [ $mode = tunnel ]; then
    292      1.2   ozaki 		export RUMP_SERVER=$SOCK_TUN_LOCAL
    293      1.2   ozaki 		# from https://www.netbsd.org/docs/network/ipsec/
    294      1.2   ozaki 		cat > $tmpfile <<-EOF
    295      1.5   ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    296      1.5   ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    297      1.2   ozaki 		spdadd $subnet_local/64 $subnet_remote/64 any -P out ipsec
    298      1.2   ozaki 		    $proto/tunnel/$ip_gwlo_tun-$ip_gwre_tun/require;
    299      1.2   ozaki 		spdadd $subnet_remote/64 $subnet_local/64 any -P in ipsec
    300      1.2   ozaki 		    $proto/tunnel/$ip_gwre_tun-$ip_gwlo_tun/require;
    301      1.2   ozaki 		EOF
    302      1.2   ozaki 		$DEBUG && cat $tmpfile
    303      1.2   ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    304      1.2   ozaki 
    305      1.2   ozaki 		export RUMP_SERVER=$SOCK_TUN_REMOTE
    306      1.2   ozaki 		cat > $tmpfile <<-EOF
    307      1.5   ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    308      1.5   ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    309      1.2   ozaki 		spdadd $subnet_remote/64 $subnet_local/64 any -P out ipsec
    310      1.2   ozaki 		    $proto/tunnel/$ip_gwre_tun-$ip_gwlo_tun/require;
    311      1.2   ozaki 		spdadd $subnet_local/64 $subnet_remote/64 any -P in ipsec
    312      1.2   ozaki 		    $proto/tunnel/$ip_gwlo_tun-$ip_gwre_tun/require;
    313      1.2   ozaki 		EOF
    314      1.2   ozaki 		$DEBUG && cat $tmpfile
    315      1.2   ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    316      1.2   ozaki 	else # transport mode
    317      1.2   ozaki 		export RUMP_SERVER=$SOCK_TUN_LOCAL
    318      1.2   ozaki 		# from https://www.netbsd.org/docs/network/ipsec/
    319      1.2   ozaki 		cat > $tmpfile <<-EOF
    320      1.5   ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    321      1.5   ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    322      1.2   ozaki 		spdadd $ip_gwlo_tun/128 $ip_gwre_tun/128 any -P out ipsec
    323      1.2   ozaki 		    $proto/transport//require;
    324      1.2   ozaki 		spdadd $ip_gwre_tun/128 $ip_gwlo_tun/128 any -P in ipsec
    325      1.2   ozaki 		    $proto/transport//require;
    326      1.2   ozaki 		EOF
    327      1.2   ozaki 		$DEBUG && cat $tmpfile
    328      1.2   ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    329      1.2   ozaki 
    330      1.2   ozaki 		export RUMP_SERVER=$SOCK_TUN_REMOTE
    331      1.2   ozaki 		cat > $tmpfile <<-EOF
    332      1.5   ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    333      1.5   ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    334      1.2   ozaki 		spdadd $ip_gwre_tun/128 $ip_gwlo_tun/128 any -P out ipsec
    335      1.2   ozaki 		    $proto/transport//require;
    336      1.2   ozaki 		spdadd $ip_gwlo_tun/128 $ip_gwre_tun/128 any -P in ipsec
    337      1.2   ozaki 		    $proto/transport//require;
    338      1.2   ozaki 		EOF
    339      1.2   ozaki 		$DEBUG && cat $tmpfile
    340      1.2   ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    341      1.2   ozaki 	fi
    342      1.1   ozaki 
    343      1.4   ozaki 	check_sa_entries $SOCK_TUN_LOCAL $ip_gwlo_tun $ip_gwre_tun
    344      1.4   ozaki 	check_sa_entries $SOCK_TUN_REMOTE $ip_gwlo_tun $ip_gwre_tun
    345      1.4   ozaki 
    346      1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    347      1.1   ozaki 	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -n -X 3 $ip_remote
    348      1.1   ozaki 
    349      1.1   ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    350      1.2   ozaki 	str=$(make_l2tp_pktstr $ip_gwlo_tun $ip_gwre_tun $proto ipv6 $mode)
    351      1.1   ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    352      1.2   ozaki 	str=$(make_l2tp_pktstr $ip_gwre_tun $ip_gwlo_tun $proto ipv6 $mode)
    353      1.1   ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    354      1.3   ozaki 
    355      1.3   ozaki 	test_flush_entries $SOCK_TUN_LOCAL
    356      1.3   ozaki 	test_flush_entries $SOCK_TUN_REMOTE
    357      1.1   ozaki }
    358      1.1   ozaki 
    359      1.1   ozaki test_ipsec_l2tp_common()
    360      1.1   ozaki {
    361      1.1   ozaki 	local ipproto=$1
    362      1.2   ozaki 	local mode=$2
    363      1.2   ozaki 	local proto=$3
    364      1.2   ozaki 	local algo=$4
    365      1.1   ozaki 
    366      1.1   ozaki 	if [ $ipproto = ipv4 ]; then
    367      1.2   ozaki 		test_ipsec4_l2tp $mode $proto $algo
    368      1.1   ozaki 	else
    369      1.2   ozaki 		test_ipsec6_l2tp $mode $proto $algo
    370      1.1   ozaki 	fi
    371      1.1   ozaki }
    372      1.1   ozaki 
    373      1.1   ozaki add_test_ipsec_l2tp()
    374      1.1   ozaki {
    375      1.1   ozaki 	local ipproto=$1
    376      1.2   ozaki 	local mode=$2
    377      1.2   ozaki 	local proto=$3
    378      1.2   ozaki 	local algo=$4
    379      1.1   ozaki 	local _algo=$(echo $algo | sed 's/-//g')
    380      1.1   ozaki 	local name= desc=
    381      1.1   ozaki 
    382      1.2   ozaki 	name="ipsec_l2tp_${ipproto}_${mode}_${proto}_${_algo}"
    383      1.2   ozaki 	desc="Tests of l2tp/IPsec ($ipproto) ${mode} mode with $proto ($algo)"
    384      1.1   ozaki 
    385      1.1   ozaki 	atf_test_case ${name} cleanup
    386      1.7   ozaki 	eval "
    387      1.7   ozaki 	    ${name}_head() {
    388      1.7   ozaki 	        atf_set descr \"$desc\"
    389      1.7   ozaki 	        atf_set require.progs rump_server setkey
    390      1.7   ozaki 	    }
    391      1.7   ozaki 	    ${name}_body() {
    392      1.7   ozaki 	        test_ipsec_l2tp_common $ipproto $mode $proto $algo
    393      1.7   ozaki 	        rump_server_destroy_ifaces
    394      1.7   ozaki 	    }
    395      1.7   ozaki 	    ${name}_cleanup() {
    396      1.7   ozaki 	        \$DEBUG && dump
    397      1.7   ozaki 	        cleanup
    398      1.7   ozaki 	    }
    399      1.1   ozaki 	"
    400      1.1   ozaki 	atf_add_test_case ${name}
    401      1.1   ozaki }
    402      1.1   ozaki 
    403      1.1   ozaki atf_init_test_cases()
    404      1.1   ozaki {
    405      1.1   ozaki 	local algo=
    406      1.1   ozaki 
    407      1.1   ozaki 	for algo in $ESP_ENCRYPTION_ALGORITHMS_MINIMUM; do
    408      1.2   ozaki 		add_test_ipsec_l2tp ipv4 tunnel esp $algo
    409      1.2   ozaki 		add_test_ipsec_l2tp ipv6 tunnel esp $algo
    410      1.2   ozaki 		add_test_ipsec_l2tp ipv4 transport esp $algo
    411      1.2   ozaki 		add_test_ipsec_l2tp ipv6 transport esp $algo
    412      1.1   ozaki 	done
    413      1.1   ozaki 
    414      1.1   ozaki 	for algo in $AH_AUTHENTICATION_ALGORITHMS_MINIMUM; do
    415      1.2   ozaki 		add_test_ipsec_l2tp ipv4 tunnel ah $algo
    416      1.2   ozaki 		add_test_ipsec_l2tp ipv6 tunnel ah $algo
    417      1.2   ozaki 		add_test_ipsec_l2tp ipv4 transport ah $algo
    418      1.2   ozaki 		add_test_ipsec_l2tp ipv6 transport ah $algo
    419      1.1   ozaki 	done
    420      1.1   ozaki }
    421