Home | History | Annotate | Line # | Download | only in ipsec
      1  1.10    rin #	$NetBSD: t_ipsec_gif.sh,v 1.10 2023/08/22 05:40:50 rin 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_gif_local
     29   1.1  ozaki SOCK_TUN_LOCAL=unix://ipsec_gif_tunel_local
     30   1.1  ozaki SOCK_TUN_REMOTE=unix://ipsec_gif_tunnel_remote
     31   1.1  ozaki SOCK_REMOTE=unix://ipsec_gif_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_gif_pktstr()
     39   1.1  ozaki {
     40   1.1  ozaki 	local src=$1
     41   1.1  ozaki 	local dst=$2
     42   1.1  ozaki 	local src_inner=$3
     43   1.1  ozaki 	local dst_inner=$4
     44   1.1  ozaki 	local proto=$5
     45   1.1  ozaki 	local ipproto=$6
     46   1.1  ozaki 	local proto_cap= inner_str=
     47   1.1  ozaki 
     48   1.1  ozaki 	if [ $proto = esp ]; then
     49   1.1  ozaki 		proto_cap=ESP
     50   1.1  ozaki 	else
     51   1.1  ozaki 		proto_cap=AH
     52  1.10    rin 		inner_str="$src_inner > $dst_inner"
     53   1.1  ozaki 	fi
     54   1.1  ozaki 
     55   1.1  ozaki 	echo "$src > $dst: $proto_cap.+$inner_str"
     56   1.1  ozaki }
     57   1.1  ozaki 
     58   1.9  ozaki wait_for_all_dad_completions()
     59   1.9  ozaki {
     60   1.9  ozaki 
     61   1.9  ozaki 	for sock in $SOCK_LOCAL $SOCK_TUN_LOCAL $SOCK_TUN_REMOTE $SOCK_REMOTE; do
     62   1.9  ozaki 		export RUMP_SERVER=$sock
     63   1.9  ozaki 		atf_check -s exit:0 rump.ifconfig -w 10
     64   1.9  ozaki 	done
     65   1.9  ozaki }
     66   1.9  ozaki 
     67   1.1  ozaki test_ipsec4_gif()
     68   1.1  ozaki {
     69   1.2  ozaki 	local mode=$1
     70   1.2  ozaki 	local proto=$2
     71   1.2  ozaki 	local algo=$3
     72   1.1  ozaki 	local ip_local=10.0.1.2
     73   1.1  ozaki 	local ip_gw_local=10.0.1.1
     74   1.2  ozaki 	local ip_gwlo_tun=20.0.0.1
     75   1.2  ozaki 	local ip_gwlo_gif=20.1.0.1
     76   1.2  ozaki 	local ip_gwre_gif=20.1.0.2
     77   1.2  ozaki 	local ip_gwre_tun=20.0.0.2
     78   1.1  ozaki 	local ip_gw_remote=10.0.2.1
     79   1.1  ozaki 	local ip_remote=10.0.2.2
     80   1.1  ozaki 	local subnet_local=10.0.1.0
     81   1.1  ozaki 	local subnet_remote=10.0.2.0
     82   1.1  ozaki 	local tmpfile=./tmp
     83   1.1  ozaki 	local outfile=./out
     84   1.5  ozaki 	local str=
     85   1.5  ozaki 	local algo_args="$(generate_algo_args $proto $algo)"
     86   1.1  ozaki 
     87   1.1  ozaki 	rump_server_crypto_start $SOCK_LOCAL
     88   1.1  ozaki 	rump_server_crypto_start $SOCK_TUN_LOCAL netipsec gif
     89   1.1  ozaki 	rump_server_crypto_start $SOCK_TUN_REMOTE netipsec gif
     90   1.1  ozaki 	rump_server_crypto_start $SOCK_REMOTE
     91   1.1  ozaki 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS_LOCAL
     92   1.1  ozaki 	rump_server_add_iface $SOCK_TUN_LOCAL shmif0 $BUS_LOCAL
     93   1.1  ozaki 	rump_server_add_iface $SOCK_TUN_LOCAL shmif1 $BUS_TUNNEL
     94   1.1  ozaki 	rump_server_add_iface $SOCK_TUN_REMOTE shmif0 $BUS_REMOTE
     95   1.1  ozaki 	rump_server_add_iface $SOCK_TUN_REMOTE shmif1 $BUS_TUNNEL
     96   1.1  ozaki 	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS_REMOTE
     97   1.1  ozaki 
     98   1.1  ozaki 	export RUMP_SERVER=$SOCK_LOCAL
     99   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_local/24
    100   1.1  ozaki 	atf_check -s exit:0 -o ignore \
    101   1.1  ozaki 	    rump.route -n add -net $subnet_remote $ip_gw_local
    102   1.1  ozaki 
    103   1.1  ozaki 	export RUMP_SERVER=$SOCK_TUN_LOCAL
    104   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_gw_local/24
    105   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig shmif1 $ip_gwlo_tun/24
    106   1.8  ozaki 	rump_server_add_iface $SOCK_TUN_LOCAL gif0
    107   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig gif0 \
    108   1.2  ozaki 	    tunnel $ip_gwlo_tun $ip_gwre_tun
    109   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig gif0 \
    110   1.2  ozaki 	    inet $ip_gwlo_gif/32 $ip_gwre_gif
    111   1.1  ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=1
    112   1.1  ozaki 	atf_check -s exit:0 -o ignore \
    113   1.2  ozaki 	    rump.route -n add -net $subnet_remote $ip_gwre_gif
    114   1.1  ozaki 
    115   1.1  ozaki 	export RUMP_SERVER=$SOCK_TUN_REMOTE
    116   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_gw_remote/24
    117   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig shmif1 $ip_gwre_tun/24
    118   1.8  ozaki 	rump_server_add_iface $SOCK_TUN_REMOTE gif0
    119   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig gif0 \
    120   1.2  ozaki 	    tunnel $ip_gwre_tun $ip_gwlo_tun
    121   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig gif0 \
    122   1.2  ozaki 	    inet $ip_gwre_gif/32 $ip_gwlo_gif
    123   1.1  ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=1
    124   1.1  ozaki 	atf_check -s exit:0 -o ignore \
    125   1.2  ozaki 	    rump.route -n add -net $subnet_local $ip_gwlo_gif
    126   1.1  ozaki 
    127   1.1  ozaki 	export RUMP_SERVER=$SOCK_REMOTE
    128   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_remote/24
    129   1.9  ozaki 
    130   1.9  ozaki 	wait_for_all_dad_completions
    131   1.9  ozaki 
    132   1.1  ozaki 	atf_check -s exit:0 -o ignore \
    133   1.1  ozaki 	    rump.route -n add -net $subnet_local $ip_gw_remote
    134   1.1  ozaki 
    135   1.1  ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    136   1.1  ozaki 
    137   1.1  ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    138   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_remote
    139   1.1  ozaki 
    140   1.1  ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    141   1.2  ozaki 	str="$ip_gwlo_tun > $ip_gwre_tun:"
    142   1.1  ozaki 	str="$str $ip_local > $ip_remote: ICMP echo request,"
    143   1.1  ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    144   1.2  ozaki 	str="$ip_gwre_tun > $ip_gwlo_tun:"
    145   1.1  ozaki 	str="$str $ip_remote > $ip_local: ICMP echo reply,"
    146   1.1  ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    147   1.1  ozaki 
    148   1.2  ozaki 	if [ $mode = tunnel ]; then
    149   1.2  ozaki 		export RUMP_SERVER=$SOCK_TUN_LOCAL
    150   1.2  ozaki 		# from https://www.netbsd.org/docs/network/ipsec/
    151   1.2  ozaki 		cat > $tmpfile <<-EOF
    152   1.5  ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    153   1.5  ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    154   1.2  ozaki 		spdadd $subnet_local/24 $subnet_remote/24 any -P out ipsec
    155   1.2  ozaki 		    $proto/tunnel/$ip_gwlo_tun-$ip_gwre_tun/require;
    156   1.2  ozaki 		spdadd $subnet_remote/24 $subnet_local/24 any -P in ipsec
    157   1.2  ozaki 		    $proto/tunnel/$ip_gwre_tun-$ip_gwlo_tun/require;
    158   1.2  ozaki 		EOF
    159   1.2  ozaki 		$DEBUG && cat $tmpfile
    160   1.2  ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    161   1.2  ozaki 
    162   1.2  ozaki 		export RUMP_SERVER=$SOCK_TUN_REMOTE
    163   1.2  ozaki 		cat > $tmpfile <<-EOF
    164   1.5  ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    165   1.5  ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    166   1.2  ozaki 		spdadd $subnet_remote/24 $subnet_local/24 any -P out ipsec
    167   1.2  ozaki 		    $proto/tunnel/$ip_gwre_tun-$ip_gwlo_tun/require;
    168   1.2  ozaki 		spdadd $subnet_local/24 $subnet_remote/24 any -P in ipsec
    169   1.2  ozaki 		    $proto/tunnel/$ip_gwlo_tun-$ip_gwre_tun/require;
    170   1.2  ozaki 		EOF
    171   1.2  ozaki 		$DEBUG && cat $tmpfile
    172   1.2  ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    173   1.2  ozaki 	else # transport mode
    174   1.2  ozaki 		export RUMP_SERVER=$SOCK_TUN_LOCAL
    175   1.2  ozaki 		# from https://www.netbsd.org/docs/network/ipsec/
    176   1.2  ozaki 		cat > $tmpfile <<-EOF
    177   1.5  ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    178   1.5  ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    179   1.2  ozaki 		spdadd $ip_gwlo_tun/32 $ip_gwre_tun/32 any -P out ipsec
    180   1.2  ozaki 		    $proto/transport//require;
    181   1.2  ozaki 		spdadd $ip_gwre_tun/32 $ip_gwlo_tun/32 any -P in ipsec
    182   1.2  ozaki 		    $proto/transport//require;
    183   1.2  ozaki 		EOF
    184   1.2  ozaki 		$DEBUG && cat $tmpfile
    185   1.2  ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    186   1.2  ozaki 
    187   1.2  ozaki 		export RUMP_SERVER=$SOCK_TUN_REMOTE
    188   1.2  ozaki 		cat > $tmpfile <<-EOF
    189   1.5  ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    190   1.5  ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    191   1.2  ozaki 		spdadd $ip_gwre_tun/32 $ip_gwlo_tun/32 any -P out ipsec
    192   1.2  ozaki 		    $proto/transport//require;
    193   1.2  ozaki 		spdadd $ip_gwlo_tun/32 $ip_gwre_tun/32 any -P in ipsec
    194   1.2  ozaki 		    $proto/transport//require;
    195   1.2  ozaki 		EOF
    196   1.2  ozaki 		$DEBUG && cat $tmpfile
    197   1.2  ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    198   1.2  ozaki 	fi
    199   1.1  ozaki 
    200   1.4  ozaki 	check_sa_entries $SOCK_TUN_LOCAL $ip_gwlo_tun $ip_gwre_tun
    201   1.4  ozaki 	check_sa_entries $SOCK_TUN_REMOTE $ip_gwlo_tun $ip_gwre_tun
    202   1.4  ozaki 
    203   1.1  ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    204   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_remote
    205   1.1  ozaki 
    206   1.1  ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    207   1.2  ozaki 	str=$(make_gif_pktstr $ip_gwlo_tun $ip_gwre_tun \
    208   1.1  ozaki 	    $ip_local $ip_remote $proto ipv4)
    209   1.1  ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    210   1.2  ozaki 	str=$(make_gif_pktstr $ip_gwre_tun $ip_gwlo_tun \
    211   1.1  ozaki 	    $ip_remote $ip_local $proto ipv4)
    212   1.1  ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    213   1.3  ozaki 
    214   1.3  ozaki 	test_flush_entries $SOCK_TUN_LOCAL
    215   1.3  ozaki 	test_flush_entries $SOCK_TUN_REMOTE
    216   1.1  ozaki }
    217   1.1  ozaki 
    218   1.1  ozaki test_ipsec6_gif()
    219   1.1  ozaki {
    220   1.2  ozaki 	local mode=$1
    221   1.2  ozaki 	local proto=$2
    222   1.2  ozaki 	local algo=$3
    223   1.1  ozaki 	local ip_local=fd00:1::2
    224   1.1  ozaki 	local ip_gw_local=fd00:1::1
    225   1.2  ozaki 	local ip_gwlo_tun=fc00::1
    226   1.2  ozaki 	local ip_gwlo_gif=fc01::1
    227   1.2  ozaki 	local ip_gwre_gif=fc01::2
    228   1.2  ozaki 	local ip_gwre_tun=fc00::2
    229   1.1  ozaki 	local ip_gw_remote=fd00:2::1
    230   1.1  ozaki 	local ip_remote=fd00:2::2
    231   1.1  ozaki 	local subnet_local=fd00:1::
    232   1.1  ozaki 	local subnet_remote=fd00:2::
    233   1.1  ozaki 	local tmpfile=./tmp
    234   1.1  ozaki 	local outfile=./out
    235   1.5  ozaki 	local str=
    236   1.5  ozaki 	local algo_args="$(generate_algo_args $proto $algo)"
    237   1.1  ozaki 
    238   1.1  ozaki 	rump_server_crypto_start $SOCK_LOCAL netinet6
    239   1.1  ozaki 	rump_server_crypto_start $SOCK_TUN_LOCAL netipsec netinet6 gif
    240   1.1  ozaki 	rump_server_crypto_start $SOCK_TUN_REMOTE netipsec netinet6 gif
    241   1.1  ozaki 	rump_server_crypto_start $SOCK_REMOTE netinet6
    242   1.1  ozaki 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS_LOCAL
    243   1.1  ozaki 	rump_server_add_iface $SOCK_TUN_LOCAL shmif0 $BUS_LOCAL
    244   1.1  ozaki 	rump_server_add_iface $SOCK_TUN_LOCAL shmif1 $BUS_TUNNEL
    245   1.1  ozaki 	rump_server_add_iface $SOCK_TUN_REMOTE shmif0 $BUS_REMOTE
    246   1.1  ozaki 	rump_server_add_iface $SOCK_TUN_REMOTE shmif1 $BUS_TUNNEL
    247   1.1  ozaki 	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS_REMOTE
    248   1.1  ozaki 
    249   1.1  ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    250   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip_local/64
    251   1.1  ozaki 	atf_check -s exit:0 -o ignore \
    252   1.1  ozaki 	    rump.route -n add -inet6 -net $subnet_remote/64 $ip_gw_local
    253   1.1  ozaki 
    254   1.1  ozaki 	export RUMP_SERVER=$SOCK_TUN_LOCAL
    255   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip_gw_local/64
    256   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig shmif1 inet6 $ip_gwlo_tun/64
    257   1.8  ozaki 	rump_server_add_iface $SOCK_TUN_LOCAL gif0
    258   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig gif0 \
    259   1.2  ozaki 	    tunnel $ip_gwlo_tun $ip_gwre_tun
    260   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig gif0 \
    261   1.2  ozaki 	    inet6 $ip_gwlo_gif/128 $ip_gwre_gif
    262   1.1  ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=1
    263   1.1  ozaki 	atf_check -s exit:0 -o ignore \
    264   1.2  ozaki 	    rump.route -n add -inet6 -net $subnet_remote/64 $ip_gwlo_gif
    265   1.1  ozaki 
    266   1.1  ozaki 	export RUMP_SERVER=$SOCK_TUN_REMOTE
    267   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip_gw_remote/64
    268   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig shmif1 inet6 $ip_gwre_tun/64
    269   1.8  ozaki 	rump_server_add_iface $SOCK_TUN_REMOTE gif0
    270   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig gif0 \
    271   1.2  ozaki 	    tunnel $ip_gwre_tun $ip_gwlo_tun
    272   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig gif0 \
    273   1.2  ozaki 	    inet6 $ip_gwre_gif/128 $ip_gwlo_gif
    274   1.1  ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=1
    275   1.1  ozaki 	atf_check -s exit:0 -o ignore \
    276   1.2  ozaki 	    rump.route -n add -inet6 -net $subnet_local/64 $ip_gwre_gif
    277   1.1  ozaki 
    278   1.1  ozaki 	export RUMP_SERVER=$SOCK_REMOTE
    279   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip_remote
    280   1.9  ozaki 
    281   1.9  ozaki 	wait_for_all_dad_completions
    282   1.9  ozaki 
    283   1.1  ozaki 	atf_check -s exit:0 -o ignore \
    284   1.1  ozaki 	    rump.route -n add -inet6 -net $subnet_local/64 $ip_gw_remote
    285   1.1  ozaki 
    286   1.1  ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    287   1.1  ozaki 
    288   1.1  ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    289   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -n -X 3 $ip_remote
    290   1.1  ozaki 
    291   1.1  ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    292   1.2  ozaki 	str="$ip_gwlo_tun > $ip_gwre_tun:"
    293   1.1  ozaki 	str="$str $ip_local > $ip_remote: ICMP6, echo request"
    294   1.1  ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    295   1.2  ozaki 	str="$ip_gwre_tun > $ip_gwlo_tun:"
    296   1.1  ozaki 	str="$str $ip_remote > $ip_local: ICMP6, echo reply,"
    297   1.1  ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    298   1.1  ozaki 
    299   1.2  ozaki 	if [ $mode = tunnel ]; then
    300   1.2  ozaki 		export RUMP_SERVER=$SOCK_TUN_LOCAL
    301   1.2  ozaki 		# from https://www.netbsd.org/docs/network/ipsec/
    302   1.2  ozaki 		cat > $tmpfile <<-EOF
    303   1.5  ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    304   1.5  ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    305   1.2  ozaki 		spdadd $subnet_local/64 $subnet_remote/64 any -P out ipsec
    306   1.2  ozaki 		    $proto/tunnel/$ip_gwlo_tun-$ip_gwre_tun/require;
    307   1.2  ozaki 		spdadd $subnet_remote/64 $subnet_local/64 any -P in ipsec
    308   1.2  ozaki 		    $proto/tunnel/$ip_gwre_tun-$ip_gwlo_tun/require;
    309   1.2  ozaki 		EOF
    310   1.2  ozaki 		$DEBUG && cat $tmpfile
    311   1.2  ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    312   1.2  ozaki 
    313   1.2  ozaki 		export RUMP_SERVER=$SOCK_TUN_REMOTE
    314   1.2  ozaki 		cat > $tmpfile <<-EOF
    315   1.5  ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    316   1.5  ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    317   1.2  ozaki 		spdadd $subnet_remote/64 $subnet_local/64 any -P out ipsec
    318   1.2  ozaki 		    $proto/tunnel/$ip_gwre_tun-$ip_gwlo_tun/require;
    319   1.2  ozaki 		spdadd $subnet_local/64 $subnet_remote/64 any -P in ipsec
    320   1.2  ozaki 		    $proto/tunnel/$ip_gwlo_tun-$ip_gwre_tun/require;
    321   1.2  ozaki 		EOF
    322   1.2  ozaki 		$DEBUG && cat $tmpfile
    323   1.2  ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    324   1.2  ozaki 	else # transport mode
    325   1.2  ozaki 		export RUMP_SERVER=$SOCK_TUN_LOCAL
    326   1.2  ozaki 		# from https://www.netbsd.org/docs/network/ipsec/
    327   1.2  ozaki 		cat > $tmpfile <<-EOF
    328   1.5  ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    329   1.5  ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    330   1.2  ozaki 		spdadd $ip_gwlo_tun/128 $ip_gwre_tun/128 any -P out ipsec
    331   1.2  ozaki 		    $proto/transport//require;
    332   1.2  ozaki 		spdadd $ip_gwre_tun/128 $ip_gwlo_tun/128 any -P in ipsec
    333   1.2  ozaki 		    $proto/transport//require;
    334   1.2  ozaki 		EOF
    335   1.2  ozaki 		$DEBUG && cat $tmpfile
    336   1.2  ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    337   1.2  ozaki 
    338   1.2  ozaki 		export RUMP_SERVER=$SOCK_TUN_REMOTE
    339   1.2  ozaki 		cat > $tmpfile <<-EOF
    340   1.5  ozaki 		add $ip_gwlo_tun $ip_gwre_tun $proto 10000 $algo_args;
    341   1.5  ozaki 		add $ip_gwre_tun $ip_gwlo_tun $proto 10001 $algo_args;
    342   1.2  ozaki 		spdadd $ip_gwre_tun/128 $ip_gwlo_tun/128 any -P out ipsec
    343   1.2  ozaki 		    $proto/transport//require;
    344   1.2  ozaki 		spdadd $ip_gwlo_tun/128 $ip_gwre_tun/128 any -P in ipsec
    345   1.2  ozaki 		    $proto/transport//require;
    346   1.2  ozaki 		EOF
    347   1.2  ozaki 		$DEBUG && cat $tmpfile
    348   1.2  ozaki 		atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    349   1.2  ozaki 	fi
    350   1.2  ozaki 
    351   1.4  ozaki 	check_sa_entries $SOCK_TUN_LOCAL $ip_gwlo_tun $ip_gwre_tun
    352   1.4  ozaki 	check_sa_entries $SOCK_TUN_REMOTE $ip_gwlo_tun $ip_gwre_tun
    353   1.1  ozaki 
    354   1.1  ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    355   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -n -X 3 $ip_remote
    356   1.1  ozaki 
    357   1.1  ozaki 	extract_new_packets $BUS_TUNNEL > $outfile
    358   1.2  ozaki 	str=$(make_gif_pktstr $ip_gwlo_tun $ip_gwre_tun \
    359   1.1  ozaki 	    $ip_local $ip_remote $proto ipv6)
    360   1.1  ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    361   1.2  ozaki 	str=$(make_gif_pktstr $ip_gwre_tun $ip_gwlo_tun \
    362   1.1  ozaki 	    $ip_remote $ip_local $proto ipv6)
    363   1.1  ozaki 	atf_check -s exit:0 -o match:"$str" cat $outfile
    364   1.3  ozaki 
    365   1.3  ozaki 	test_flush_entries $SOCK_TUN_LOCAL
    366   1.3  ozaki 	test_flush_entries $SOCK_TUN_REMOTE
    367   1.1  ozaki }
    368   1.1  ozaki 
    369   1.1  ozaki test_ipsec_gif_common()
    370   1.1  ozaki {
    371   1.1  ozaki 	local ipproto=$1
    372   1.2  ozaki 	local mode=$2
    373   1.2  ozaki 	local proto=$3
    374   1.2  ozaki 	local algo=$4
    375   1.1  ozaki 
    376   1.1  ozaki 	if [ $ipproto = ipv4 ]; then
    377   1.2  ozaki 		test_ipsec4_gif $mode $proto $algo
    378   1.1  ozaki 	else
    379   1.2  ozaki 		test_ipsec6_gif $mode $proto $algo
    380   1.1  ozaki 	fi
    381   1.1  ozaki }
    382   1.1  ozaki 
    383   1.1  ozaki add_test_ipsec_gif()
    384   1.1  ozaki {
    385   1.1  ozaki 	local ipproto=$1
    386   1.2  ozaki 	local mode=$2
    387   1.2  ozaki 	local proto=$3
    388   1.2  ozaki 	local algo=$4
    389   1.1  ozaki 	local _algo=$(echo $algo | sed 's/-//g')
    390   1.1  ozaki 	local name= desc=
    391   1.1  ozaki 
    392   1.2  ozaki 	name="ipsec_gif_${ipproto}_${mode}_${proto}_${_algo}"
    393   1.2  ozaki 	desc="Tests of gif/IPsec ($ipproto) ${mode} mode with $proto ($algo)"
    394   1.1  ozaki 
    395   1.1  ozaki 	atf_test_case ${name} cleanup
    396   1.7  ozaki 	eval "
    397   1.7  ozaki 	    ${name}_head() {
    398   1.7  ozaki 	        atf_set descr \"$desc\"
    399   1.7  ozaki 	        atf_set require.progs rump_server setkey
    400   1.7  ozaki 	    }
    401   1.7  ozaki 	    ${name}_body() {
    402   1.7  ozaki 	        test_ipsec_gif_common $ipproto $mode $proto $algo
    403   1.7  ozaki 	        rump_server_destroy_ifaces
    404   1.7  ozaki 	    }
    405   1.7  ozaki 	    ${name}_cleanup() {
    406   1.7  ozaki 	        \$DEBUG && dump
    407   1.7  ozaki 	        cleanup
    408   1.7  ozaki 	    }
    409   1.1  ozaki 	"
    410   1.1  ozaki 	atf_add_test_case ${name}
    411   1.1  ozaki }
    412   1.1  ozaki 
    413   1.1  ozaki atf_init_test_cases()
    414   1.1  ozaki {
    415   1.1  ozaki 	local algo=
    416   1.1  ozaki 
    417   1.1  ozaki 	for algo in $ESP_ENCRYPTION_ALGORITHMS_MINIMUM; do
    418   1.2  ozaki 		add_test_ipsec_gif ipv4 tunnel esp $algo
    419   1.2  ozaki 		add_test_ipsec_gif ipv6 tunnel esp $algo
    420   1.2  ozaki 		add_test_ipsec_gif ipv4 transport esp $algo
    421   1.2  ozaki 		add_test_ipsec_gif ipv6 transport esp $algo
    422   1.1  ozaki 	done
    423   1.1  ozaki 
    424   1.1  ozaki 	for algo in $AH_AUTHENTICATION_ALGORITHMS_MINIMUM; do
    425   1.2  ozaki 		add_test_ipsec_gif ipv4 tunnel ah $algo
    426   1.2  ozaki 		add_test_ipsec_gif ipv6 tunnel ah $algo
    427   1.2  ozaki 		add_test_ipsec_gif ipv4 transport ah $algo
    428   1.2  ozaki 		add_test_ipsec_gif ipv6 transport ah $algo
    429   1.1  ozaki 	done
    430   1.1  ozaki }
    431