Home | History | Annotate | Line # | Download | only in if_ipsec
t_ipsec.sh revision 1.11
      1  1.11  knakahar #	$NetBSD: t_ipsec.sh,v 1.11 2020/08/05 01:10:50 knakahara Exp $
      2   1.1  knakahar #
      3   1.1  knakahar # Copyright (c) 2017 Internet Initiative Japan Inc.
      4   1.1  knakahar # All rights reserved.
      5   1.1  knakahar #
      6   1.1  knakahar # Redistribution and use in source and binary forms, with or without
      7   1.1  knakahar # modification, are permitted provided that the following conditions
      8   1.1  knakahar # are met:
      9   1.1  knakahar # 1. Redistributions of source code must retain the above copyright
     10   1.1  knakahar #    notice, this list of conditions and the following disclaimer.
     11   1.1  knakahar # 2. Redistributions in binary form must reproduce the above copyright
     12   1.1  knakahar #    notice, this list of conditions and the following disclaimer in the
     13   1.1  knakahar #    documentation and/or other materials provided with the distribution.
     14   1.1  knakahar #
     15   1.1  knakahar # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     16   1.1  knakahar # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     17   1.1  knakahar # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18   1.1  knakahar # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     19   1.1  knakahar # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     20   1.1  knakahar # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     21   1.1  knakahar # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     22   1.1  knakahar # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     23   1.1  knakahar # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     24   1.1  knakahar # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     25   1.1  knakahar # POSSIBILITY OF SUCH DAMAGE.
     26   1.1  knakahar #
     27   1.1  knakahar 
     28   1.1  knakahar SOCK1=unix://commsock1 # for ROUTER1
     29   1.1  knakahar SOCK2=unix://commsock2 # for ROUTER2
     30   1.1  knakahar ROUTER1_LANIP=192.168.1.1
     31   1.1  knakahar ROUTER1_LANNET=192.168.1.0/24
     32   1.1  knakahar ROUTER1_WANIP=10.0.0.1
     33   1.1  knakahar ROUTER1_IPSECIP=172.16.1.1
     34   1.1  knakahar ROUTER1_WANIP_DUMMY=10.0.0.11
     35   1.1  knakahar ROUTER1_IPSECIP_DUMMY=172.16.11.1
     36   1.1  knakahar ROUTER1_IPSECIP_RECURSIVE1=172.16.101.1
     37   1.1  knakahar ROUTER1_IPSECIP_RECURSIVE2=172.16.201.1
     38   1.1  knakahar ROUTER2_LANIP=192.168.2.1
     39   1.1  knakahar ROUTER2_LANNET=192.168.2.0/24
     40   1.1  knakahar ROUTER2_WANIP=10.0.0.2
     41   1.1  knakahar ROUTER2_IPSECIP=172.16.2.1
     42   1.1  knakahar ROUTER2_WANIP_DUMMY=10.0.0.12
     43   1.1  knakahar ROUTER2_IPSECIP_DUMMY=172.16.12.1
     44   1.1  knakahar ROUTER2_IPSECIP_RECURSIVE1=172.16.102.1
     45   1.1  knakahar ROUTER2_IPSECIP_RECURSIVE2=172.16.202.1
     46   1.1  knakahar 
     47   1.1  knakahar ROUTER1_LANIP6=fc00:1::1
     48   1.1  knakahar ROUTER1_LANNET6=fc00:1::/64
     49   1.1  knakahar ROUTER1_WANIP6=fc00::1
     50   1.1  knakahar ROUTER1_IPSECIP6=fc00:3::1
     51   1.1  knakahar ROUTER1_WANIP6_DUMMY=fc00::11
     52   1.1  knakahar ROUTER1_IPSECIP6_DUMMY=fc00:13::1
     53   1.1  knakahar ROUTER1_IPSECIP6_RECURSIVE1=fc00:103::1
     54   1.1  knakahar ROUTER1_IPSECIP6_RECURSIVE2=fc00:203::1
     55   1.1  knakahar ROUTER2_LANIP6=fc00:2::1
     56   1.1  knakahar ROUTER2_LANNET6=fc00:2::/64
     57   1.1  knakahar ROUTER2_WANIP6=fc00::2
     58   1.1  knakahar ROUTER2_IPSECIP6=fc00:4::1
     59   1.1  knakahar ROUTER2_WANIP6_DUMMY=fc00::12
     60   1.1  knakahar ROUTER2_IPSECIP6_DUMMY=fc00:14::1
     61   1.1  knakahar ROUTER2_IPSECIP6_RECURSIVE1=fc00:104::1
     62   1.1  knakahar ROUTER2_IPSECIP6_RECURSIVE2=fc00:204::1
     63   1.1  knakahar 
     64   1.1  knakahar DEBUG=${DEBUG:-false}
     65   1.8  knakahar TIMEOUT=7
     66   1.1  knakahar 
     67   1.3     ozaki atf_test_case ipsecif_create_destroy cleanup
     68   1.3     ozaki ipsecif_create_destroy_head()
     69   1.3     ozaki {
     70   1.3     ozaki 
     71   1.3     ozaki 	atf_set "descr" "Test creating/destroying gif interfaces"
     72   1.3     ozaki 	atf_set "require.progs" "rump_server"
     73   1.3     ozaki }
     74   1.3     ozaki 
     75   1.3     ozaki ipsecif_create_destroy_body()
     76   1.3     ozaki {
     77   1.3     ozaki 
     78   1.3     ozaki 	rump_server_start $SOCK1 ipsec
     79   1.3     ozaki 
     80   1.3     ozaki 	test_create_destroy_common $SOCK1 ipsec0
     81   1.3     ozaki }
     82   1.3     ozaki 
     83   1.3     ozaki ipsecif_create_destroy_cleanup()
     84   1.3     ozaki {
     85   1.3     ozaki 
     86   1.3     ozaki 	$DEBUG && dump
     87   1.3     ozaki 	cleanup
     88   1.3     ozaki }
     89   1.3     ozaki 
     90   1.1  knakahar setup_router()
     91   1.1  knakahar {
     92   1.1  knakahar 	local sock=${1}
     93   1.1  knakahar 	local lan=${2}
     94   1.1  knakahar 	local lan_mode=${3}
     95   1.1  knakahar 	local wan=${4}
     96   1.1  knakahar 	local wan_mode=${5}
     97   1.1  knakahar 
     98   1.1  knakahar 	rump_server_add_iface $sock shmif0 bus0
     99   1.1  knakahar 	rump_server_add_iface $sock shmif1 bus1
    100   1.1  knakahar 
    101   1.1  knakahar 	export RUMP_SERVER=${sock}
    102   1.9  knakahar 
    103   1.9  knakahar 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    104   1.9  knakahar 	atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.dad_count=0
    105   1.9  knakahar 
    106   1.1  knakahar 	if [ ${lan_mode} = "ipv6" ]; then
    107   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${lan}
    108   1.1  knakahar 	else
    109   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig shmif0 inet ${lan} netmask 0xffffff00
    110   1.1  knakahar 	fi
    111   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig shmif0 up
    112   1.5  knakahar 	$DEBUG && rump.ifconfig shmif0
    113   1.1  knakahar 
    114   1.1  knakahar 	if [ ${wan_mode} = "ipv6" ]; then
    115   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${wan}
    116   1.1  knakahar 	else
    117   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig shmif1 inet ${wan} netmask 0xff000000
    118   1.1  knakahar 	fi
    119   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig shmif1 up
    120   1.9  knakahar 	atf_check -s exit:0 rump.ifconfig -w 10
    121   1.5  knakahar 	$DEBUG && rump.ifconfig shmif1
    122   1.6  knakahar 
    123   1.1  knakahar 	unset RUMP_SERVER
    124   1.1  knakahar }
    125   1.1  knakahar 
    126   1.1  knakahar test_router()
    127   1.1  knakahar {
    128   1.1  knakahar 	local sock=${1}
    129   1.1  knakahar 	local lan=${2}
    130   1.1  knakahar 	local lan_mode=${3}
    131   1.1  knakahar 	local wan=${4}
    132   1.1  knakahar 	local wan_mode=${5}
    133   1.1  knakahar 
    134   1.1  knakahar 	export RUMP_SERVER=${sock}
    135   1.1  knakahar 	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
    136   1.1  knakahar 	if [ ${lan_mode} = "ipv6" ]; then
    137   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${lan}
    138   1.1  knakahar 	else
    139   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${lan}
    140   1.1  knakahar 	fi
    141   1.1  knakahar 
    142   1.1  knakahar 	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
    143   1.1  knakahar 	if [ ${wan_mode} = "ipv6" ]; then
    144   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${wan}
    145   1.1  knakahar 	else
    146   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${wan}
    147   1.1  knakahar 	fi
    148   1.1  knakahar 	unset RUMP_SERVER
    149   1.1  knakahar }
    150   1.1  knakahar 
    151   1.1  knakahar setup()
    152   1.1  knakahar {
    153   1.1  knakahar 	local inner=${1}
    154   1.1  knakahar 	local outer=${2}
    155   1.1  knakahar 
    156   1.1  knakahar 	rump_server_crypto_start $SOCK1 netipsec netinet6 ipsec
    157   1.1  knakahar 	rump_server_crypto_start $SOCK2 netipsec netinet6 ipsec
    158   1.1  knakahar 
    159   1.1  knakahar 	router1_lan=""
    160   1.1  knakahar 	router1_lan_mode=""
    161   1.1  knakahar 	router2_lan=""
    162   1.1  knakahar 	router2_lan_mode=""
    163   1.1  knakahar 	if [ ${inner} = "ipv6" ]; then
    164   1.1  knakahar 		router1_lan=$ROUTER1_LANIP6
    165   1.1  knakahar 		router1_lan_mode="ipv6"
    166   1.1  knakahar 		router2_lan=$ROUTER2_LANIP6
    167   1.1  knakahar 		router2_lan_mode="ipv6"
    168   1.1  knakahar 	else
    169   1.1  knakahar 		router1_lan=$ROUTER1_LANIP
    170   1.1  knakahar 		router1_lan_mode="ipv4"
    171   1.1  knakahar 		router2_lan=$ROUTER2_LANIP
    172   1.1  knakahar 		router2_lan_mode="ipv4"
    173   1.1  knakahar 	fi
    174   1.1  knakahar 
    175   1.1  knakahar 	if [ ${outer} = "ipv6" ]; then
    176   1.1  knakahar 		setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
    177   1.1  knakahar 			$ROUTER1_WANIP6 ipv6
    178   1.1  knakahar 		setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
    179   1.1  knakahar 			$ROUTER2_WANIP6 ipv6
    180   1.1  knakahar 	else
    181   1.1  knakahar 		setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
    182   1.1  knakahar 			$ROUTER1_WANIP ipv4
    183   1.1  knakahar 		setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
    184   1.1  knakahar 			$ROUTER2_WANIP ipv4
    185   1.1  knakahar 	fi
    186   1.1  knakahar }
    187   1.1  knakahar 
    188   1.1  knakahar test_setup()
    189   1.1  knakahar {
    190   1.1  knakahar 	local inner=${1}
    191   1.1  knakahar 	local outer=${2}
    192   1.1  knakahar 
    193   1.1  knakahar 	local router1_lan=""
    194   1.1  knakahar 	local router1_lan_mode=""
    195   1.1  knakahar 	local router2_lan=""
    196   1.1  knakahar 	local router2_lan_mode=""
    197   1.1  knakahar 	if [ ${inner} = "ipv6" ]; then
    198   1.1  knakahar 		router1_lan=$ROUTER1_LANIP6
    199   1.1  knakahar 		router1_lan_mode="ipv6"
    200   1.1  knakahar 		router2_lan=$ROUTER2_LANIP6
    201   1.1  knakahar 		router2_lan_mode="ipv6"
    202   1.1  knakahar 	else
    203   1.1  knakahar 		router1_lan=$ROUTER1_LANIP
    204   1.1  knakahar 		router1_lan_mode="ipv4"
    205   1.1  knakahar 		router2_lan=$ROUTER2_LANIP
    206   1.1  knakahar 		router2_lan_mode="ipv4"
    207   1.1  knakahar 	fi
    208   1.1  knakahar 	if [ ${outer} = "ipv6" ]; then
    209   1.1  knakahar 		test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
    210   1.1  knakahar 			$ROUTER1_WANIP6 ipv6
    211   1.1  knakahar 		test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
    212   1.1  knakahar 			$ROUTER2_WANIP6 ipv6
    213   1.1  knakahar 	else
    214   1.1  knakahar 		test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
    215   1.1  knakahar 			$ROUTER1_WANIP ipv4
    216   1.1  knakahar 		test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
    217   1.1  knakahar 			$ROUTER2_WANIP ipv4
    218   1.1  knakahar 	fi
    219   1.1  knakahar }
    220   1.1  knakahar 
    221   1.1  knakahar get_if_ipsec_unique()
    222   1.1  knakahar {
    223   1.1  knakahar 	local sock=${1}
    224   1.1  knakahar 	local src=${2}
    225   1.1  knakahar 	local proto=${3}
    226   1.1  knakahar 	local unique=""
    227   1.1  knakahar 
    228   1.1  knakahar 	export RUMP_SERVER=${sock}
    229   1.1  knakahar 	unique=`$HIJACKING setkey -DP | grep -A2 "^${src}.*(${proto})$" | grep unique | sed 's/.*unique#//'`
    230   1.1  knakahar 	unset RUMP_SERVER
    231   1.1  knakahar 
    232   1.1  knakahar 	echo $unique
    233   1.1  knakahar }
    234   1.1  knakahar 
    235   1.1  knakahar setup_if_ipsec()
    236   1.1  knakahar {
    237   1.1  knakahar 	local sock=${1}
    238   1.1  knakahar 	local addr=${2}
    239   1.1  knakahar 	local remote=${3}
    240   1.1  knakahar 	local inner=${4}
    241   1.1  knakahar 	local src=${5}
    242   1.1  knakahar 	local dst=${6}
    243   1.1  knakahar 	local peernet=${7}
    244   1.1  knakahar 
    245   1.1  knakahar 	export RUMP_SERVER=${sock}
    246  1.10     ozaki 	rump_server_add_iface $sock ipsec0
    247   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec0 tunnel ${src} ${dst}
    248   1.1  knakahar 	if [ ${inner} = "ipv6" ]; then
    249   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig ipsec0 inet6 ${addr}/128 ${remote}
    250   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.route add -inet6 ${peernet} ${addr}
    251   1.1  knakahar 	else
    252   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig ipsec0 inet ${addr}/32 ${remote}
    253   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.route add -inet ${peernet} ${addr}
    254   1.1  knakahar 	fi
    255   1.1  knakahar 
    256   1.9  knakahar 	atf_check -s exit:0 rump.ifconfig -w 10
    257   1.9  knakahar 
    258   1.5  knakahar 	$DEBUG && rump.ifconfig ipsec0
    259   1.5  knakahar 	$DEBUG && rump.route -nL show
    260   1.1  knakahar }
    261   1.1  knakahar 
    262   1.1  knakahar setup_if_ipsec_sa()
    263   1.1  knakahar {
    264   1.1  knakahar 	local sock=${1}
    265   1.1  knakahar 	local src=${2}
    266   1.1  knakahar 	local dst=${3}
    267   1.1  knakahar 	local mode=${4}
    268   1.1  knakahar 	local proto=${5}
    269   1.1  knakahar 	local algo=${6}
    270   1.1  knakahar 	local dir=${7}
    271   1.1  knakahar 
    272   1.1  knakahar 	local tmpfile=./tmp
    273   1.1  knakahar 	local inunique=""
    274   1.1  knakahar 	local outunique=""
    275   1.1  knakahar 	local inid=""
    276   1.1  knakahar 	local outid=""
    277   1.1  knakahar 	local algo_args="$(generate_algo_args $proto $algo)"
    278   1.1  knakahar 
    279   1.1  knakahar 	inunique=`get_if_ipsec_unique ${sock} ${dst} ${mode}`
    280   1.4  knakahar 	atf_check -s exit:0 test "X$inunique" != "X"
    281   1.1  knakahar 	outunique=`get_if_ipsec_unique ${sock} ${src} ${mode}`
    282   1.4  knakahar 	atf_check -s exit:0 test "X$outunique" != "X"
    283   1.1  knakahar 
    284   1.1  knakahar 	if [ ${dir} = "1to2" ] ; then
    285   1.1  knakahar 	    if [ ${mode} = "ipv6" ] ; then
    286   1.1  knakahar 		inid="10010"
    287   1.1  knakahar 		outid="10011"
    288   1.1  knakahar 	    else
    289   1.1  knakahar 		inid="10000"
    290   1.1  knakahar 		outid="10001"
    291   1.1  knakahar 	    fi
    292   1.1  knakahar 	else
    293   1.1  knakahar 	    if [ ${mode} = "ipv6" ] ; then
    294   1.1  knakahar 		inid="10011"
    295   1.1  knakahar 		outid="10010"
    296   1.1  knakahar 	    else
    297   1.1  knakahar 		inid="10001"
    298   1.1  knakahar 		outid="10000"
    299   1.1  knakahar 	    fi
    300   1.1  knakahar 	fi
    301   1.1  knakahar 
    302   1.1  knakahar 	cat > $tmpfile <<-EOF
    303  1.11  knakahar 	add $dst $src $proto $inid -u $inunique -m transport $algo_args;
    304  1.11  knakahar 	add $src $dst $proto $outid -u $outunique -m transport $algo_args;
    305   1.1  knakahar 	EOF
    306   1.1  knakahar 	$DEBUG && cat $tmpfile
    307   1.1  knakahar 	export RUMP_SERVER=$sock
    308   1.1  knakahar 	atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    309   1.1  knakahar 	$DEBUG && $HIJACKING setkey -D
    310   1.1  knakahar 	$DEBUG && $HIJACKING setkey -DP
    311   1.1  knakahar 	unset RUMP_SERVER
    312   1.1  knakahar }
    313   1.1  knakahar 
    314   1.1  knakahar setup_tunnel()
    315   1.1  knakahar {
    316   1.1  knakahar 	local inner=${1}
    317   1.1  knakahar 	local outer=${2}
    318   1.1  knakahar 	local proto=${3}
    319   1.1  knakahar 	local algo=${4}
    320   1.1  knakahar 
    321   1.1  knakahar 	local addr=""
    322   1.1  knakahar 	local remote=""
    323   1.1  knakahar 	local src=""
    324   1.1  knakahar 	local dst=""
    325   1.1  knakahar 	local peernet=""
    326   1.1  knakahar 
    327   1.1  knakahar 	if [ ${inner} = "ipv6" ]; then
    328   1.1  knakahar 		addr=$ROUTER1_IPSECIP6
    329   1.1  knakahar 		remote=$ROUTER2_IPSECIP6
    330   1.1  knakahar 		peernet=$ROUTER2_LANNET6
    331   1.1  knakahar 	else
    332   1.1  knakahar 		addr=$ROUTER1_IPSECIP
    333   1.1  knakahar 		remote=$ROUTER2_IPSECIP
    334   1.1  knakahar 		peernet=$ROUTER2_LANNET
    335   1.1  knakahar 	fi
    336   1.1  knakahar 	if [ ${outer} = "ipv6" ]; then
    337   1.1  knakahar 		src=$ROUTER1_WANIP6
    338   1.1  knakahar 		dst=$ROUTER2_WANIP6
    339   1.1  knakahar 	else
    340   1.1  knakahar 		src=$ROUTER1_WANIP
    341   1.1  knakahar 		dst=$ROUTER2_WANIP
    342   1.1  knakahar 	fi
    343   1.1  knakahar 	setup_if_ipsec $SOCK1 ${addr} ${remote} ${inner} \
    344   1.1  knakahar 		     ${src} ${dst} ${peernet}
    345   1.1  knakahar 
    346   1.1  knakahar 	if [ $inner = "ipv6" -a $outer = "ipv4" ]; then
    347   1.1  knakahar 	    setup_if_ipsec_sa $SOCK1 ${src} ${dst} ${outer} ${proto} ${algo} "1to2"
    348   1.1  knakahar 	fi
    349   1.1  knakahar 	setup_if_ipsec_sa $SOCK1 ${src} ${dst} ${inner} ${proto} ${algo} "1to2"
    350   1.1  knakahar 
    351   1.1  knakahar 	if [ $inner = "ipv6" ]; then
    352   1.1  knakahar 		addr=$ROUTER2_IPSECIP6
    353   1.1  knakahar 		remote=$ROUTER1_IPSECIP6
    354   1.1  knakahar 		peernet=$ROUTER1_LANNET6
    355   1.1  knakahar 	else
    356   1.1  knakahar 		addr=$ROUTER2_IPSECIP
    357   1.1  knakahar 		remote=$ROUTER1_IPSECIP
    358   1.1  knakahar 		peernet=$ROUTER1_LANNET
    359   1.1  knakahar 	fi
    360   1.1  knakahar 	if [ $outer = "ipv6" ]; then
    361   1.1  knakahar 		src=$ROUTER2_WANIP6
    362   1.1  knakahar 		dst=$ROUTER1_WANIP6
    363   1.1  knakahar 	else
    364   1.1  knakahar 		src=$ROUTER2_WANIP
    365   1.1  knakahar 		dst=$ROUTER1_WANIP
    366   1.1  knakahar 	fi
    367   1.1  knakahar 	setup_if_ipsec $SOCK2 ${addr} ${remote} ${inner} \
    368   1.1  knakahar 		     ${src} ${dst} ${peernet} ${proto} ${algo}
    369   1.1  knakahar 	if [ $inner = "ipv6" -a $outer = "ipv4" ]; then
    370   1.1  knakahar 	    setup_if_ipsec_sa $SOCK2 ${src} ${dst} ${outer} ${proto} ${algo} "2to1"
    371   1.1  knakahar 	fi
    372   1.1  knakahar 	setup_if_ipsec_sa $SOCK2 ${src} ${dst} ${inner} ${proto} ${algo} "2to1"
    373   1.1  knakahar }
    374   1.1  knakahar 
    375   1.1  knakahar test_setup_tunnel()
    376   1.1  knakahar {
    377   1.1  knakahar 	local mode=${1}
    378   1.1  knakahar 
    379   1.1  knakahar 	local peernet=""
    380   1.1  knakahar 	local opt=""
    381   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    382   1.1  knakahar 		peernet=$ROUTER2_LANNET6
    383   1.1  knakahar 		opt="-inet6"
    384   1.1  knakahar 	else
    385   1.1  knakahar 		peernet=$ROUTER2_LANNET
    386   1.1  knakahar 		opt="-inet"
    387   1.1  knakahar 	fi
    388   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    389   1.1  knakahar 	atf_check -s exit:0 -o match:ipsec0 rump.ifconfig
    390   1.1  knakahar 	atf_check -s exit:0 -o match:ipsec0 rump.route -nL get ${opt} ${peernet}
    391   1.1  knakahar 
    392   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    393   1.1  knakahar 		peernet=$ROUTER1_LANNET6
    394   1.1  knakahar 		opt="-inet6"
    395   1.1  knakahar 	else
    396   1.1  knakahar 		peernet=$ROUTER1_LANNET
    397   1.1  knakahar 		opt="-inet"
    398   1.1  knakahar 	fi
    399   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    400   1.1  knakahar 	atf_check -s exit:0 -o match:ipsec0 rump.ifconfig
    401   1.1  knakahar 	atf_check -s exit:0 -o match:ipsec0 rump.route -nL get ${opt} ${peernet}
    402   1.1  knakahar }
    403   1.1  knakahar 
    404   1.1  knakahar teardown_tunnel()
    405   1.1  knakahar {
    406   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    407   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec0 deletetunnel
    408   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec0 destroy
    409   1.1  knakahar 	$HIJACKING setkey -F
    410   1.1  knakahar 
    411   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    412   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec0 deletetunnel
    413   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec0 destroy
    414   1.1  knakahar 	$HIJACKING setkey -F
    415   1.1  knakahar 
    416   1.1  knakahar 	unset RUMP_SERVER
    417   1.1  knakahar }
    418   1.1  knakahar 
    419   1.1  knakahar setup_dummy_if_ipsec()
    420   1.1  knakahar {
    421   1.1  knakahar 	local sock=${1}
    422   1.1  knakahar 	local addr=${2}
    423   1.1  knakahar 	local remote=${3}
    424   1.1  knakahar 	local inner=${4}
    425   1.1  knakahar 	local src=${5}
    426   1.1  knakahar 	local dst=${6}
    427   1.1  knakahar 
    428   1.1  knakahar 	export RUMP_SERVER=${sock}
    429  1.10     ozaki 	rump_server_add_iface $sock ipsec1
    430   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec1 tunnel ${src} ${dst}
    431   1.1  knakahar 	if [ ${inner} = "ipv6" ]; then
    432   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig ipsec1 inet6 ${addr}/128 ${remote}
    433   1.1  knakahar 	else
    434   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig ipsec1 inet ${addr}/32 ${remote}
    435   1.1  knakahar 	fi
    436   1.9  knakahar 	atf_check -s exit:0 rump.ifconfig -w 10
    437   1.1  knakahar 
    438   1.5  knakahar 	$DEBUG && rump.ifconfig ipsec1
    439   1.1  knakahar 	unset RUMP_SERVER
    440   1.1  knakahar }
    441   1.1  knakahar 
    442   1.1  knakahar setup_dummy_if_ipsec_sa()
    443   1.1  knakahar {
    444   1.1  knakahar 	local sock=${1}
    445   1.1  knakahar 	local src=${2}
    446   1.1  knakahar 	local dst=${3}
    447   1.1  knakahar 	local mode=${4}
    448   1.1  knakahar 	local proto=${5}
    449   1.1  knakahar 	local algo=${6}
    450   1.1  knakahar 	local dir=${7}
    451   1.1  knakahar 
    452   1.1  knakahar 	local tmpfile=./tmp
    453   1.1  knakahar 	local inunique=""
    454   1.1  knakahar 	local outunique=""
    455   1.1  knakahar 	local inid=""
    456   1.1  knakahar 	local outid=""
    457   1.1  knakahar 	local algo_args="$(generate_algo_args $proto $algo)"
    458   1.1  knakahar 
    459   1.1  knakahar 	inunique=`get_if_ipsec_unique ${sock} ${dst} ${mode}`
    460   1.4  knakahar 	atf_check -s exit:0 test "X$inunique" != "X"
    461   1.1  knakahar 	outunique=`get_if_ipsec_unique ${sock} ${src} ${mode}`
    462   1.4  knakahar 	atf_check -s exit:0 test "X$outunique" != "X"
    463   1.1  knakahar 
    464   1.1  knakahar 	if [ ${dir} = "1to2" ] ; then
    465   1.1  knakahar 	    inid="20000"
    466   1.1  knakahar 	    outid="20001"
    467   1.1  knakahar 	else
    468   1.1  knakahar 	    inid="20001"
    469   1.1  knakahar 	    outid="20000"
    470   1.1  knakahar 	fi
    471   1.1  knakahar 
    472   1.1  knakahar 	cat > $tmpfile <<-EOF
    473   1.1  knakahar     	add $dst $src $proto $inid -u $inunique $algo_args;
    474   1.1  knakahar     	add $src $dst $proto $outid -u $outunique $algo_args;
    475   1.1  knakahar 	EOF
    476   1.1  knakahar 	$DEBUG && cat $tmpfile
    477   1.1  knakahar 	export RUMP_SERVER=$sock
    478   1.1  knakahar 	atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    479   1.1  knakahar 	$DEBUG && $HIJACKING setkey -D
    480   1.1  knakahar 	$DEBUG && $HIJACKING setkey -DP
    481   1.1  knakahar 	unset RUMP_SERVER
    482   1.1  knakahar }
    483   1.1  knakahar 
    484   1.1  knakahar setup_dummy_tunnel()
    485   1.1  knakahar {
    486   1.1  knakahar 	local inner=${1}
    487   1.1  knakahar 	local outer=${2}
    488   1.1  knakahar 	local proto=${3}
    489   1.1  knakahar 	local algo=${4}
    490   1.1  knakahar 
    491   1.1  knakahar 	local addr=""
    492   1.1  knakahar 	local remote=""
    493   1.1  knakahar 	local src=""
    494   1.1  knakahar 	local dst=""
    495   1.1  knakahar 
    496   1.1  knakahar 	if [ ${inner} = "ipv6" ]; then
    497   1.1  knakahar 		addr=$ROUTER1_IPSECIP6_DUMMY
    498   1.1  knakahar 		remote=$ROUTER2_IPSECIP6_DUMMY
    499   1.1  knakahar 	else
    500   1.1  knakahar 		addr=$ROUTER1_IPSECIP_DUMMY
    501   1.1  knakahar 		remote=$ROUTER2_IPSECIP_DUMMY
    502   1.1  knakahar 	fi
    503   1.1  knakahar 	if [ ${outer} = "ipv6" ]; then
    504   1.1  knakahar 		src=$ROUTER1_WANIP6_DUMMY
    505   1.1  knakahar 		dst=$ROUTER2_WANIP6_DUMMY
    506   1.1  knakahar 	else
    507   1.1  knakahar 		src=$ROUTER1_WANIP_DUMMY
    508   1.1  knakahar 		dst=$ROUTER2_WANIP_DUMMY
    509   1.1  knakahar 	fi
    510   1.1  knakahar 	setup_dummy_if_ipsec $SOCK1 ${addr} ${remote} ${inner} \
    511   1.1  knakahar 			   ${src} ${dst} ${proto} ${algo} "1to2"
    512   1.1  knakahar 	setup_dummy_if_ipsec_sa $SOCK1 ${src} ${dst} ${inner} ${proto} ${algo} "1to2"
    513   1.1  knakahar 
    514   1.1  knakahar 	if [ $inner = "ipv6" ]; then
    515   1.1  knakahar 		addr=$ROUTER2_IPSECIP6_DUMMY
    516   1.1  knakahar 		remote=$ROUTER1_IPSECIP6_DUMMY
    517   1.1  knakahar 	else
    518   1.1  knakahar 		addr=$ROUTER2_IPSECIP_DUMMY
    519   1.1  knakahar 		remote=$ROUTER1_IPSECIP_DUMMY
    520   1.1  knakahar 	fi
    521   1.1  knakahar 	if [ $outer = "ipv6" ]; then
    522   1.1  knakahar 		src=$ROUTER2_WANIP6_DUMMY
    523   1.1  knakahar 		dst=$ROUTER1_WANIP6_DUMMY
    524   1.1  knakahar 	else
    525   1.1  knakahar 		src=$ROUTER2_WANIP_DUMMY
    526   1.1  knakahar 		dst=$ROUTER1_WANIP_DUMMY
    527   1.1  knakahar 	fi
    528   1.1  knakahar 	setup_dummy_if_ipsec $SOCK2 ${addr} ${remote} ${inner} \
    529   1.1  knakahar 			   ${src} ${dst} ${proto} ${algo} "2to1"
    530   1.1  knakahar 	setup_dummy_if_ipsec_sa $SOCK2 ${src} ${dst} ${inner} ${proto} ${algo} "2to1"
    531   1.1  knakahar }
    532   1.1  knakahar 
    533   1.1  knakahar test_setup_dummy_tunnel()
    534   1.1  knakahar {
    535   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    536   1.1  knakahar 	atf_check -s exit:0 -o match:ipsec1 rump.ifconfig
    537   1.1  knakahar 
    538   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    539   1.1  knakahar 	atf_check -s exit:0 -o match:ipsec1 rump.ifconfig
    540   1.1  knakahar 
    541   1.1  knakahar 	unset RUMP_SERVER
    542   1.1  knakahar }
    543   1.1  knakahar 
    544   1.1  knakahar teardown_dummy_tunnel()
    545   1.1  knakahar {
    546   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    547   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec1 deletetunnel
    548   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec1 destroy
    549   1.1  knakahar 
    550   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    551   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec1 deletetunnel
    552   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec1 destroy
    553   1.1  knakahar 
    554   1.1  knakahar 	unset RUMP_SERVER
    555   1.1  knakahar }
    556   1.1  knakahar 
    557   1.1  knakahar setup_recursive_if_ipsec()
    558   1.1  knakahar {
    559   1.1  knakahar 	local sock=${1}
    560   1.1  knakahar 	local ipsec=${2}
    561   1.1  knakahar 	local addr=${3}
    562   1.1  knakahar 	local remote=${4}
    563   1.1  knakahar 	local inner=${5}
    564   1.1  knakahar 	local src=${6}
    565   1.1  knakahar 	local dst=${7}
    566   1.1  knakahar 	local proto=${8}
    567   1.1  knakahar 	local algo=${9}
    568   1.1  knakahar 	local dir=${10}
    569   1.1  knakahar 
    570   1.1  knakahar 	export RUMP_SERVER=${sock}
    571  1.10     ozaki 	rump_server_add_iface $sock $ipsec
    572   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ${ipsec} tunnel ${src} ${dst}
    573   1.1  knakahar 	if [ ${inner} = "ipv6" ]; then
    574   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig ${ipsec} inet6 ${addr}/128 ${remote}
    575   1.1  knakahar 	else
    576   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig ${ipsec} inet ${addr}/32 ${remote}
    577   1.1  knakahar 	fi
    578   1.9  knakahar 	atf_check -s exit:0 rump.ifconfig -w 10
    579   1.1  knakahar 	setup_if_ipsec_sa $sock ${src} ${dst} ${inner} ${proto} ${algo} ${dir}
    580   1.1  knakahar 
    581   1.1  knakahar 	export RUMP_SERVER=${sock}
    582   1.5  knakahar 	$DEBUG && rump.ifconfig ${ipsec}
    583   1.1  knakahar 	unset RUMP_SERVER
    584   1.1  knakahar }
    585   1.1  knakahar 
    586   1.1  knakahar # test in ROUTER1 only
    587   1.1  knakahar setup_recursive_tunnels()
    588   1.1  knakahar {
    589   1.1  knakahar 	local mode=${1}
    590   1.1  knakahar 	local proto=${2}
    591   1.1  knakahar 	local algo=${3}
    592   1.1  knakahar 
    593   1.1  knakahar 	local addr=""
    594   1.1  knakahar 	local remote=""
    595   1.1  knakahar 	local src=""
    596   1.1  knakahar 	local dst=""
    597   1.1  knakahar 
    598   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    599   1.1  knakahar 		addr=$ROUTER1_IPSECIP6_RECURSIVE1
    600   1.1  knakahar 		remote=$ROUTER2_IPSECIP6_RECURSIVE1
    601   1.1  knakahar 		src=$ROUTER1_IPSECIP6
    602   1.1  knakahar 		dst=$ROUTER2_IPSECIP6
    603   1.1  knakahar 	else
    604   1.1  knakahar 		addr=$ROUTER1_IPSECIP_RECURSIVE1
    605   1.1  knakahar 		remote=$ROUTER2_IPSECIP_RECURSIVE1
    606   1.1  knakahar 		src=$ROUTER1_IPSECIP
    607   1.1  knakahar 		dst=$ROUTER2_IPSECIP
    608   1.1  knakahar 	fi
    609   1.1  knakahar 	setup_recursive_if_ipsec $SOCK1 ipsec1 ${addr} ${remote} ${mode} \
    610   1.1  knakahar 		      ${src} ${dst} ${proto} ${algo} "1to2"
    611   1.1  knakahar 
    612   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    613   1.1  knakahar 		addr=$ROUTER1_IPSECIP6_RECURSIVE2
    614   1.1  knakahar 		remote=$ROUTER2_IPSECIP6_RECURSIVE2
    615   1.1  knakahar 		src=$ROUTER1_IPSECIP6_RECURSIVE1
    616   1.1  knakahar 		dst=$ROUTER2_IPSECIP6_RECURSIVE1
    617   1.1  knakahar 	else
    618   1.1  knakahar 		addr=$ROUTER1_IPSECIP_RECURSIVE2
    619   1.1  knakahar 		remote=$ROUTER2_IPSECIP_RECURSIVE2
    620   1.1  knakahar 		src=$ROUTER1_IPSECIP_RECURSIVE1
    621   1.1  knakahar 		dst=$ROUTER2_IPSECIP_RECURSIVE1
    622   1.1  knakahar 	fi
    623   1.1  knakahar 	setup_recursive_if_ipsec $SOCK1 ipsec2 ${addr} ${remote} ${mode} \
    624   1.1  knakahar 		      ${src} ${dst} ${proto} ${algo} "1to2"
    625   1.1  knakahar }
    626   1.1  knakahar 
    627   1.1  knakahar # test in router1 only
    628   1.1  knakahar test_recursive_check()
    629   1.1  knakahar {
    630   1.1  knakahar 	local mode=$1
    631   1.1  knakahar 
    632   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    633   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    634   1.1  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    635   1.1  knakahar 			rump.ping6 -n -X $TIMEOUT -c 1 $ROUTER2_IPSECIP6_RECURSIVE2
    636   1.1  knakahar 	else
    637   1.1  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    638   1.1  knakahar 			rump.ping -n -w $TIMEOUT -c 1 $ROUTER2_IPSECIP_RECURSIVE2
    639   1.1  knakahar 	fi
    640   1.1  knakahar 
    641   1.1  knakahar 	atf_check -o match:'ipsec0: recursively called too many times' \
    642   1.1  knakahar 		-x "$HIJACKING dmesg"
    643   1.1  knakahar 
    644   1.1  knakahar 	$HIJACKING dmesg
    645   1.1  knakahar 
    646   1.1  knakahar 	unset RUMP_SERVER
    647   1.1  knakahar }
    648   1.1  knakahar 
    649   1.1  knakahar teardown_recursive_tunnels()
    650   1.1  knakahar {
    651   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    652   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec1 deletetunnel
    653   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec1 destroy
    654   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec2 deletetunnel
    655   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig ipsec2 destroy
    656   1.1  knakahar 	unset RUMP_SERVER
    657   1.1  knakahar }
    658   1.1  knakahar 
    659   1.1  knakahar test_ping_failure()
    660   1.1  knakahar {
    661   1.1  knakahar 	local mode=$1
    662   1.1  knakahar 
    663   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    664   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    665   1.1  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    666   1.1  knakahar 			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
    667   1.1  knakahar 			$ROUTER2_LANIP6
    668   1.1  knakahar 	else
    669   1.1  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    670   1.1  knakahar 			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
    671   1.1  knakahar 			$ROUTER2_LANIP
    672   1.1  knakahar 	fi
    673   1.1  knakahar 
    674   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    675   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    676   1.1  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    677   1.1  knakahar 			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
    678   1.1  knakahar 			$ROUTER1_LANIP6
    679   1.1  knakahar 	else
    680   1.1  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    681   1.1  knakahar 			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
    682   1.1  knakahar 			$ROUTER2_LANIP
    683   1.1  knakahar 	fi
    684   1.1  knakahar 
    685   1.1  knakahar 	unset RUMP_SERVER
    686   1.1  knakahar }
    687   1.1  knakahar 
    688   1.1  knakahar test_ping_success()
    689   1.1  knakahar {
    690   1.1  knakahar 	mode=$1
    691   1.1  knakahar 
    692   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    693   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    694   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    695   1.1  knakahar 		# XXX
    696   1.1  knakahar 		# rump.ping6 rarely fails with the message that
    697   1.1  knakahar 		# "failed to get receiving hop limit".
    698   1.1  knakahar 		# This is a known issue being analyzed.
    699   1.1  knakahar 		atf_check -s exit:0 -o ignore \
    700   1.1  knakahar 			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
    701   1.1  knakahar 			$ROUTER2_LANIP6
    702   1.1  knakahar 	else
    703   1.1  knakahar 		atf_check -s exit:0 -o ignore \
    704   1.1  knakahar 			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
    705   1.1  knakahar 			$ROUTER2_LANIP
    706   1.1  knakahar 	fi
    707   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    708   1.1  knakahar 
    709   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    710   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    711   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    712   1.1  knakahar 		atf_check -s exit:0 -o ignore \
    713   1.1  knakahar 			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
    714   1.1  knakahar 			$ROUTER1_LANIP6
    715   1.1  knakahar 	else
    716   1.1  knakahar 		atf_check -s exit:0 -o ignore \
    717   1.1  knakahar 			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER2_LANIP \
    718   1.1  knakahar 			$ROUTER1_LANIP
    719   1.1  knakahar 	fi
    720   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    721   1.1  knakahar 
    722   1.1  knakahar 	unset RUMP_SERVER
    723   1.1  knakahar }
    724   1.1  knakahar 
    725   1.1  knakahar test_change_tunnel_duplicate()
    726   1.1  knakahar {
    727   1.1  knakahar 	local mode=$1
    728   1.1  knakahar 
    729   1.1  knakahar 	local newsrc=""
    730   1.1  knakahar 	local newdst=""
    731   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    732   1.1  knakahar 		newsrc=$ROUTER1_WANIP6_DUMMY
    733   1.1  knakahar 		newdst=$ROUTER2_WANIP6_DUMMY
    734   1.1  knakahar 	else
    735   1.1  knakahar 		newsrc=$ROUTER1_WANIP_DUMMY
    736   1.1  knakahar 		newdst=$ROUTER2_WANIP_DUMMY
    737   1.1  knakahar 	fi
    738   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    739   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    740   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec1
    741   1.1  knakahar 	atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
    742   1.1  knakahar 		rump.ifconfig ipsec0 tunnel ${newsrc} ${newdst}
    743   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    744   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec1
    745   1.1  knakahar 
    746   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    747   1.1  knakahar 		newsrc=$ROUTER2_WANIP6_DUMMY
    748   1.1  knakahar 		newdst=$ROUTER1_WANIP6_DUMMY
    749   1.1  knakahar 	else
    750   1.1  knakahar 		newsrc=$ROUTER2_WANIP_DUMMY
    751   1.1  knakahar 		newdst=$ROUTER1_WANIP_DUMMY
    752   1.1  knakahar 	fi
    753   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    754   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    755   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec1
    756   1.1  knakahar 	atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
    757   1.1  knakahar 		rump.ifconfig ipsec0 tunnel ${newsrc} ${newdst}
    758   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    759   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec1
    760   1.1  knakahar 
    761   1.1  knakahar 	unset RUMP_SERVER
    762   1.1  knakahar }
    763   1.1  knakahar 
    764   1.1  knakahar test_change_tunnel_success()
    765   1.1  knakahar {
    766   1.1  knakahar 	local mode=$1
    767   1.1  knakahar 
    768   1.1  knakahar 	local newsrc=""
    769   1.1  knakahar 	local newdst=""
    770   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    771   1.1  knakahar 		newsrc=$ROUTER1_WANIP6_DUMMY
    772   1.1  knakahar 		newdst=$ROUTER2_WANIP6_DUMMY
    773   1.1  knakahar 	else
    774   1.1  knakahar 		newsrc=$ROUTER1_WANIP_DUMMY
    775   1.1  knakahar 		newdst=$ROUTER2_WANIP_DUMMY
    776   1.1  knakahar 	fi
    777   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    778   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    779   1.1  knakahar 	atf_check -s exit:0 \
    780   1.1  knakahar 		rump.ifconfig ipsec0 tunnel ${newsrc} ${newdst}
    781   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    782   1.1  knakahar 
    783   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    784   1.1  knakahar 		newsrc=$ROUTER2_WANIP6_DUMMY
    785   1.1  knakahar 		newdst=$ROUTER1_WANIP6_DUMMY
    786   1.1  knakahar 	else
    787   1.1  knakahar 		newsrc=$ROUTER2_WANIP_DUMMY
    788   1.1  knakahar 		newdst=$ROUTER1_WANIP_DUMMY
    789   1.1  knakahar 	fi
    790   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    791   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    792   1.1  knakahar 	atf_check -s exit:0 \
    793   1.1  knakahar 		rump.ifconfig ipsec0 tunnel ${newsrc} ${newdst}
    794   1.5  knakahar 	$DEBUG && rump.ifconfig -v ipsec0
    795   1.1  knakahar 
    796   1.1  knakahar 	unset RUMP_SERVER
    797   1.1  knakahar }
    798   1.1  knakahar 
    799   1.1  knakahar basic_setup()
    800   1.1  knakahar {
    801   1.1  knakahar 	local inner=$1
    802   1.1  knakahar 	local outer=$2
    803   1.1  knakahar 	local proto=$3
    804   1.1  knakahar 	local algo=$4
    805   1.1  knakahar 
    806   1.1  knakahar 	setup ${inner} ${outer}
    807   1.1  knakahar 	test_setup ${inner} ${outer}
    808   1.1  knakahar 
    809   1.1  knakahar 	# Enable once PR kern/49219 is fixed
    810   1.1  knakahar 	#test_ping_failure
    811   1.1  knakahar 
    812   1.1  knakahar 	setup_tunnel ${inner} ${outer} ${proto} ${algo}
    813   1.1  knakahar 	sleep 1
    814   1.1  knakahar 	test_setup_tunnel ${inner}
    815   1.1  knakahar }
    816   1.1  knakahar 
    817   1.1  knakahar basic_test()
    818   1.1  knakahar {
    819   1.1  knakahar 	local inner=$1
    820   1.1  knakahar 	local outer=$2 # not use
    821   1.1  knakahar 
    822   1.1  knakahar 	test_ping_success ${inner}
    823   1.1  knakahar }
    824   1.1  knakahar 
    825   1.1  knakahar basic_teardown()
    826   1.1  knakahar {
    827   1.1  knakahar 	local inner=$1
    828   1.1  knakahar 	local outer=$2 # not use
    829   1.1  knakahar 
    830   1.1  knakahar 	teardown_tunnel
    831   1.1  knakahar 	test_ping_failure ${inner}
    832   1.1  knakahar }
    833   1.1  knakahar 
    834   1.1  knakahar ioctl_setup()
    835   1.1  knakahar {
    836   1.1  knakahar 	local inner=$1
    837   1.1  knakahar 	local outer=$2
    838   1.1  knakahar 	local proto=$3
    839   1.1  knakahar 	local algo=$4
    840   1.1  knakahar 
    841   1.1  knakahar 	setup ${inner} ${outer}
    842   1.1  knakahar 	test_setup ${inner} ${outer}
    843   1.1  knakahar 
    844   1.1  knakahar 	# Enable once PR kern/49219 is fixed
    845   1.1  knakahar 	#test_ping_failure
    846   1.1  knakahar 
    847   1.1  knakahar 	setup_tunnel ${inner} ${outer} ${proto} ${algo}
    848   1.1  knakahar 	setup_dummy_tunnel ${inner} ${outer} ${proto} ${algo}
    849   1.1  knakahar 	sleep 1
    850   1.1  knakahar 	test_setup_tunnel ${inner}
    851   1.1  knakahar }
    852   1.1  knakahar 
    853   1.1  knakahar ioctl_test()
    854   1.1  knakahar {
    855   1.1  knakahar 	local inner=$1
    856   1.1  knakahar 	local outer=$2
    857   1.1  knakahar 
    858   1.1  knakahar 	test_ping_success ${inner}
    859   1.1  knakahar 
    860   1.1  knakahar 	test_change_tunnel_duplicate ${outer}
    861   1.1  knakahar 
    862   1.1  knakahar 	teardown_dummy_tunnel
    863   1.1  knakahar 	test_change_tunnel_success ${outer}
    864   1.1  knakahar }
    865   1.1  knakahar 
    866   1.1  knakahar ioctl_teardown()
    867   1.1  knakahar {
    868   1.1  knakahar 	local inner=$1
    869   1.1  knakahar 	local outer=$2 # not use
    870   1.1  knakahar 
    871   1.1  knakahar 	teardown_tunnel
    872   1.1  knakahar 	test_ping_failure ${inner}
    873   1.1  knakahar }
    874   1.1  knakahar 
    875   1.1  knakahar recursive_setup()
    876   1.1  knakahar {
    877   1.1  knakahar 	local inner=$1
    878   1.1  knakahar 	local outer=$2
    879   1.1  knakahar 	local proto=$3
    880   1.1  knakahar 	local algo=$4
    881   1.1  knakahar 
    882   1.1  knakahar 	setup ${inner} ${outer}
    883   1.1  knakahar 	test_setup ${inner} ${outer}
    884   1.1  knakahar 
    885   1.1  knakahar 	# Enable once PR kern/49219 is fixed
    886   1.1  knakahar 	#test_ping_failure
    887   1.1  knakahar 
    888   1.1  knakahar 	setup_tunnel ${inner} ${outer} ${proto} ${algo}
    889   1.1  knakahar 	setup_recursive_tunnels ${inner} ${proto} ${algo}
    890   1.1  knakahar 	sleep 1
    891   1.1  knakahar 	test_setup_tunnel ${inner}
    892   1.1  knakahar }
    893   1.1  knakahar 
    894   1.1  knakahar recursive_test()
    895   1.1  knakahar {
    896   1.1  knakahar 	local inner=$1
    897   1.1  knakahar 	local outer=$2 # not use
    898   1.1  knakahar 
    899   1.1  knakahar 	test_recursive_check ${inner}
    900   1.1  knakahar }
    901   1.1  knakahar 
    902   1.1  knakahar recursive_teardown()
    903   1.1  knakahar {
    904   1.1  knakahar 	local inner=$1 # not use
    905   1.1  knakahar 	local outer=$2 # not use
    906   1.1  knakahar 
    907   1.1  knakahar 	teardown_recursive_tunnels
    908   1.1  knakahar 	teardown_tunnel
    909   1.1  knakahar }
    910   1.1  knakahar 
    911   1.1  knakahar add_test()
    912   1.1  knakahar {
    913   1.1  knakahar 	local category=$1
    914   1.1  knakahar 	local desc=$2
    915   1.1  knakahar 	local inner=$3
    916   1.1  knakahar 	local outer=$4
    917   1.1  knakahar 	local proto=$5
    918   1.1  knakahar 	local algo=$6
    919   1.1  knakahar 	local _algo=$(echo $algo | sed 's/-//g')
    920   1.1  knakahar 
    921   1.2     ozaki 	name="ipsecif_${category}_${inner}over${outer}_${proto}_${_algo}"
    922   1.1  knakahar 	fulldesc="Does ${inner} over ${outer} if_ipsec ${desc}"
    923   1.1  knakahar 
    924   1.1  knakahar 	atf_test_case ${name} cleanup
    925   1.1  knakahar 	eval "${name}_head() {
    926   1.1  knakahar 			atf_set descr \"${fulldesc}\"
    927   1.1  knakahar 			atf_set require.progs rump_server setkey
    928   1.1  knakahar 		}
    929   1.1  knakahar 	    ${name}_body() {
    930   1.1  knakahar 			${category}_setup ${inner} ${outer} ${proto} ${algo}
    931   1.1  knakahar 			${category}_test ${inner} ${outer}
    932   1.1  knakahar 			${category}_teardown ${inner} ${outer}
    933   1.1  knakahar 			rump_server_destroy_ifaces
    934   1.1  knakahar 	    }
    935   1.1  knakahar 	    ${name}_cleanup() {
    936   1.1  knakahar 			\$DEBUG && dump
    937   1.1  knakahar 			cleanup
    938   1.1  knakahar 		}"
    939   1.1  knakahar 	atf_add_test_case ${name}
    940   1.1  knakahar }
    941   1.1  knakahar 
    942   1.1  knakahar add_test_allproto()
    943   1.1  knakahar {
    944   1.1  knakahar 	local category=$1
    945   1.1  knakahar 	local desc=$2
    946   1.1  knakahar 
    947   1.1  knakahar 	for algo in $ESP_ENCRYPTION_ALGORITHMS_MINIMUM; do
    948   1.1  knakahar 		add_test ${category} "${desc}" ipv4 ipv4 esp $algo
    949   1.1  knakahar 		add_test ${category} "${desc}" ipv4 ipv6 esp $algo
    950   1.1  knakahar 		add_test ${category} "${desc}" ipv6 ipv4 esp $algo
    951   1.1  knakahar 		add_test ${category} "${desc}" ipv6 ipv6 esp $algo
    952   1.1  knakahar 	done
    953   1.1  knakahar 
    954   1.1  knakahar 	# ah does not support yet
    955   1.1  knakahar }
    956   1.1  knakahar 
    957   1.1  knakahar atf_init_test_cases()
    958   1.1  knakahar {
    959   1.3     ozaki 
    960   1.3     ozaki 	atf_add_test_case ipsecif_create_destroy
    961   1.3     ozaki 
    962   1.1  knakahar 	add_test_allproto basic "basic tests"
    963   1.1  knakahar 	add_test_allproto ioctl "ioctl tests"
    964   1.1  knakahar 	add_test_allproto recursive "recursive check tests"
    965   1.1  knakahar }
    966