Home | History | Annotate | Line # | Download | only in ipsec
t_ipsec_misc.sh revision 1.25
      1  1.25  andvar #	$NetBSD: t_ipsec_misc.sh,v 1.25 2022/01/07 22:59:32 andvar 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_local
     29   1.1   ozaki SOCK_PEER=unix://ipsec_peer
     30   1.1   ozaki BUS=./bus_ipsec
     31   1.1   ozaki 
     32   1.4   ozaki DEBUG=${DEBUG:-true}
     33   1.1   ozaki 
     34   1.1   ozaki setup_sasp()
     35   1.1   ozaki {
     36   1.1   ozaki 	local proto=$1
     37   1.1   ozaki 	local algo_args="$2"
     38   1.1   ozaki 	local ip_local=$3
     39   1.1   ozaki 	local ip_peer=$4
     40   1.1   ozaki 	local lifetime=$5
     41   1.8   ozaki 	local update=$6
     42   1.1   ozaki 	local tmpfile=./tmp
     43  1.23   ozaki 	local saadd=add
     44  1.23   ozaki 	local saadd_algo_args="$algo_args"
     45   1.8   ozaki 	local extra=
     46   1.8   ozaki 
     47  1.23   ozaki 	if [ "$update" = getspi ]; then
     48  1.23   ozaki 		saadd=getspi
     49  1.23   ozaki 		saadd_algo_args=
     50  1.23   ozaki 	fi
     51  1.23   ozaki 
     52  1.23   ozaki 	if [ "$update" = sa -o "$update" = getspi ]; then
     53   1.8   ozaki 		extra="update $ip_local $ip_peer $proto 10000 $algo_args;
     54   1.8   ozaki 		       update $ip_peer $ip_local $proto 10001 $algo_args;"
     55   1.8   ozaki 	elif [ "$update" = sp ]; then
     56   1.8   ozaki 		extra="spdupdate $ip_local $ip_peer any -P out ipsec $proto/transport//require;"
     57   1.8   ozaki 	fi
     58   1.1   ozaki 
     59   1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
     60   1.1   ozaki 	cat > $tmpfile <<-EOF
     61  1.23   ozaki 	$saadd $ip_local $ip_peer $proto 10000 -lh $lifetime -ls $lifetime $saadd_algo_args;
     62  1.23   ozaki 	$saadd $ip_peer $ip_local $proto 10001 -lh $lifetime -ls $lifetime $saadd_algo_args;
     63   1.1   ozaki 	spdadd $ip_local $ip_peer any -P out ipsec $proto/transport//require;
     64   1.8   ozaki 	$extra
     65   1.1   ozaki 	EOF
     66   1.1   ozaki 	$DEBUG && cat $tmpfile
     67   1.1   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
     68   1.3   ozaki 	# XXX it can be expired if $lifetime is very short
     69   1.3   ozaki 	#check_sa_entries $SOCK_LOCAL $ip_local $ip_peer
     70   1.1   ozaki 
     71   1.8   ozaki 	if [ "$update" = sp ]; then
     72   1.8   ozaki 		extra="spdupdate $ip_peer $ip_local any -P out ipsec $proto/transport//require;"
     73   1.8   ozaki 	fi
     74   1.8   ozaki 
     75   1.1   ozaki 	export RUMP_SERVER=$SOCK_PEER
     76   1.1   ozaki 	cat > $tmpfile <<-EOF
     77  1.23   ozaki 	$saadd $ip_local $ip_peer $proto 10000 -lh $lifetime -ls $lifetime $saadd_algo_args;
     78  1.23   ozaki 	$saadd $ip_peer $ip_local $proto 10001 -lh $lifetime -ls $lifetime $saadd_algo_args;
     79   1.1   ozaki 	spdadd $ip_peer $ip_local any -P out ipsec $proto/transport//require;
     80   1.8   ozaki 	$extra
     81   1.1   ozaki 	EOF
     82   1.1   ozaki 	$DEBUG && cat $tmpfile
     83   1.1   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
     84   1.3   ozaki 	# XXX it can be expired if $lifetime is very short
     85   1.3   ozaki 	#check_sa_entries $SOCK_PEER $ip_local $ip_peer
     86   1.1   ozaki }
     87   1.1   ozaki 
     88  1.22   ozaki test_sad_disapper_until()
     89  1.22   ozaki {
     90  1.22   ozaki 	local time=$1
     91  1.22   ozaki 	local check_dead_sa=$2
     92  1.22   ozaki 	local setkey_opts=
     93  1.22   ozaki 	local n=$time
     94  1.22   ozaki 	local tmpfile=./__tmp
     95  1.22   ozaki 	local sock= ok=
     96  1.22   ozaki 
     97  1.22   ozaki 	if $check_dead_sa; then
     98  1.22   ozaki 		setkey_opts="-D -a"
     99  1.22   ozaki 	else
    100  1.22   ozaki 		setkey_opts="-D"
    101  1.22   ozaki 	fi
    102  1.22   ozaki 
    103  1.22   ozaki 	while [ $n -ne 0 ]; do
    104  1.22   ozaki 		ok=0
    105  1.22   ozaki 		sleep 1
    106  1.22   ozaki 		for sock in $SOCK_LOCAL $SOCK_PEER; do
    107  1.22   ozaki 			export RUMP_SERVER=$sock
    108  1.22   ozaki 			$HIJACKING setkey $setkey_opts > $tmpfile
    109  1.22   ozaki 			$DEBUG && cat $tmpfile
    110  1.22   ozaki 			if grep -q 'No SAD entries.' $tmpfile; then
    111  1.22   ozaki 				ok=$((ok + 1))
    112  1.22   ozaki 			fi
    113  1.22   ozaki 		done
    114  1.22   ozaki 		if [ $ok -eq 2 ]; then
    115  1.22   ozaki 			return
    116  1.22   ozaki 		fi
    117  1.22   ozaki 
    118  1.22   ozaki 		n=$((n - 1))
    119  1.22   ozaki 	done
    120  1.22   ozaki 
    121  1.22   ozaki 	atf_fail "SAs didn't disappear after $time sec."
    122  1.22   ozaki }
    123  1.22   ozaki 
    124   1.1   ozaki test_ipsec4_lifetime()
    125   1.1   ozaki {
    126   1.1   ozaki 	local proto=$1
    127   1.1   ozaki 	local algo=$2
    128   1.1   ozaki 	local ip_local=10.0.0.1
    129   1.1   ozaki 	local ip_peer=10.0.0.2
    130   1.1   ozaki 	local outfile=./out
    131   1.1   ozaki 	local proto_cap=$(echo $proto | tr 'a-z' 'A-Z')
    132   1.1   ozaki 	local algo_args="$(generate_algo_args $proto $algo)"
    133   1.1   ozaki 	local lifetime=3
    134  1.21   ozaki 	local buffertime=2
    135   1.1   ozaki 
    136   1.1   ozaki 	rump_server_crypto_start $SOCK_LOCAL netipsec
    137   1.1   ozaki 	rump_server_crypto_start $SOCK_PEER netipsec
    138   1.1   ozaki 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
    139   1.1   ozaki 	rump_server_add_iface $SOCK_PEER shmif0 $BUS
    140   1.1   ozaki 
    141   1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    142   1.1   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    143   1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_local/24
    144   1.1   ozaki 	#atf_check -s exit:0 -o ignore rump.sysctl -w net.key.debug=0xff
    145   1.1   ozaki 
    146   1.1   ozaki 	export RUMP_SERVER=$SOCK_PEER
    147   1.1   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    148   1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_peer/24
    149   1.1   ozaki 	#atf_check -s exit:0 -o ignore rump.sysctl -w net.key.debug=0xff
    150   1.1   ozaki 
    151   1.1   ozaki 	extract_new_packets $BUS > $outfile
    152   1.1   ozaki 
    153   1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    154   1.1   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    155   1.1   ozaki 
    156   1.1   ozaki 	extract_new_packets $BUS > $outfile
    157   1.1   ozaki 	atf_check -s exit:0 -o match:"$ip_local > $ip_peer: ICMP echo request" \
    158   1.1   ozaki 	    cat $outfile
    159   1.1   ozaki 	atf_check -s exit:0 -o match:"$ip_peer > $ip_local: ICMP echo reply" \
    160   1.1   ozaki 	    cat $outfile
    161   1.1   ozaki 
    162   1.1   ozaki 	# Set up SAs with lifetime 1 sec.
    163   1.1   ozaki 	setup_sasp $proto "$algo_args" $ip_local $ip_peer 1
    164   1.1   ozaki 
    165   1.1   ozaki 	# Check the SAs have been expired
    166  1.22   ozaki 	test_sad_disapper_until $((1 + $buffertime)) false
    167   1.1   ozaki 
    168   1.1   ozaki 	# Clean up SPs
    169   1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    170   1.1   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -F -P
    171   1.1   ozaki 	export RUMP_SERVER=$SOCK_PEER
    172   1.1   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -F -P
    173   1.1   ozaki 
    174   1.1   ozaki 	# Set up SAs with lifetime with $lifetime
    175   1.1   ozaki 	setup_sasp $proto "$algo_args" $ip_local $ip_peer $lifetime
    176   1.1   ozaki 
    177   1.1   ozaki 	# Use the SAs; this will create a reference from an SP to an SA
    178   1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    179   1.1   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    180   1.1   ozaki 
    181   1.1   ozaki 	extract_new_packets $BUS > $outfile
    182   1.1   ozaki 	atf_check -s exit:0 -o match:"$ip_local > $ip_peer: $proto_cap" \
    183   1.1   ozaki 	    cat $outfile
    184   1.1   ozaki 	atf_check -s exit:0 -o match:"$ip_peer > $ip_local: $proto_cap" \
    185   1.1   ozaki 	    cat $outfile
    186   1.1   ozaki 
    187  1.22   ozaki 	# Check the SAs have been expired
    188  1.22   ozaki 	test_sad_disapper_until $((lifetime + $buffertime)) true
    189   1.1   ozaki 
    190   1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    191   1.1   ozaki 	atf_check -s not-exit:0 -o match:'0 packets received' \
    192   1.1   ozaki 	    rump.ping -c 1 -n -w 1 $ip_peer
    193   1.1   ozaki 
    194   1.1   ozaki 	test_flush_entries $SOCK_LOCAL
    195   1.1   ozaki 	test_flush_entries $SOCK_PEER
    196   1.1   ozaki }
    197   1.1   ozaki 
    198   1.1   ozaki test_ipsec6_lifetime()
    199   1.1   ozaki {
    200   1.1   ozaki 	local proto=$1
    201   1.1   ozaki 	local algo=$2
    202   1.1   ozaki 	local ip_local=fd00::1
    203   1.1   ozaki 	local ip_peer=fd00::2
    204   1.1   ozaki 	local outfile=./out
    205   1.1   ozaki 	local proto_cap=$(echo $proto | tr 'a-z' 'A-Z')
    206   1.1   ozaki 	local algo_args="$(generate_algo_args $proto $algo)"
    207   1.1   ozaki 	local lifetime=3
    208  1.21   ozaki 	local buffertime=2
    209   1.1   ozaki 
    210   1.1   ozaki 	rump_server_crypto_start $SOCK_LOCAL netinet6 netipsec
    211   1.1   ozaki 	rump_server_crypto_start $SOCK_PEER netinet6 netipsec
    212   1.1   ozaki 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
    213   1.1   ozaki 	rump_server_add_iface $SOCK_PEER shmif0 $BUS
    214   1.1   ozaki 
    215   1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    216   1.1   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.dad_count=0
    217   1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip_local
    218   1.1   ozaki 
    219   1.1   ozaki 	export RUMP_SERVER=$SOCK_PEER
    220   1.1   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.dad_count=0
    221   1.1   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip_peer
    222   1.1   ozaki 
    223   1.1   ozaki 	extract_new_packets $BUS > $outfile
    224   1.1   ozaki 
    225   1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    226   1.1   ozaki 	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -n -X 3 $ip_peer
    227   1.1   ozaki 
    228   1.1   ozaki 	extract_new_packets $BUS > $outfile
    229   1.1   ozaki 	atf_check -s exit:0 -o match:"$ip_local > $ip_peer: ICMP6, echo request" \
    230   1.1   ozaki 	    cat $outfile
    231   1.1   ozaki 	atf_check -s exit:0 -o match:"$ip_peer > $ip_local: ICMP6, echo reply" \
    232   1.1   ozaki 	    cat $outfile
    233   1.1   ozaki 
    234   1.1   ozaki 	# Set up SAs with lifetime 1 sec.
    235   1.1   ozaki 	setup_sasp $proto "$algo_args" $ip_local $ip_peer 1
    236   1.1   ozaki 
    237   1.1   ozaki 	# Check the SAs have been expired
    238  1.22   ozaki 	test_sad_disapper_until $((1 + $buffertime)) false
    239   1.1   ozaki 
    240   1.1   ozaki 	# Clean up SPs
    241   1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    242   1.1   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -F -P
    243   1.1   ozaki 	export RUMP_SERVER=$SOCK_PEER
    244   1.1   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -F -P
    245   1.1   ozaki 
    246   1.1   ozaki 	# Set up SAs with lifetime with $lifetime
    247   1.1   ozaki 	setup_sasp $proto "$algo_args" $ip_local $ip_peer $lifetime
    248   1.1   ozaki 
    249   1.1   ozaki 	# Use the SAs; this will create a reference from an SP to an SA
    250   1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    251   1.1   ozaki 	atf_check -s exit:0 -o ignore rump.ping6 -c 1 -n -X 3 $ip_peer
    252   1.1   ozaki 
    253   1.1   ozaki 	extract_new_packets $BUS > $outfile
    254   1.1   ozaki 	atf_check -s exit:0 -o match:"$ip_local > $ip_peer: $proto_cap" \
    255   1.1   ozaki 	    cat $outfile
    256   1.1   ozaki 	atf_check -s exit:0 -o match:"$ip_peer > $ip_local: $proto_cap" \
    257   1.1   ozaki 	    cat $outfile
    258   1.1   ozaki 
    259  1.22   ozaki 	# Check the SAs have been expired
    260  1.22   ozaki 	test_sad_disapper_until $((lifetime + $buffertime)) true
    261   1.1   ozaki 
    262   1.1   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    263   1.1   ozaki 	atf_check -s not-exit:0 -o match:'0 packets received' \
    264   1.1   ozaki 	    rump.ping6 -c 1 -n -X 1 $ip_peer
    265   1.1   ozaki 
    266   1.1   ozaki 	test_flush_entries $SOCK_LOCAL
    267   1.1   ozaki 	test_flush_entries $SOCK_PEER
    268   1.1   ozaki }
    269   1.1   ozaki 
    270   1.1   ozaki test_lifetime_common()
    271   1.1   ozaki {
    272   1.1   ozaki 	local ipproto=$1
    273   1.1   ozaki 	local proto=$2
    274   1.1   ozaki 	local algo=$3
    275   1.1   ozaki 
    276   1.1   ozaki 	if [ $ipproto = ipv4 ]; then
    277   1.1   ozaki 		test_ipsec4_lifetime $proto $algo
    278   1.1   ozaki 	else
    279   1.1   ozaki 		test_ipsec6_lifetime $proto $algo
    280   1.1   ozaki 	fi
    281   1.1   ozaki }
    282   1.1   ozaki 
    283   1.1   ozaki add_test_lifetime()
    284   1.1   ozaki {
    285   1.1   ozaki 	local ipproto=$1
    286   1.1   ozaki 	local proto=$2
    287   1.1   ozaki 	local algo=$3
    288   1.1   ozaki 	local _algo=$(echo $algo | sed 's/-//g')
    289   1.1   ozaki 	local name= desc=
    290   1.1   ozaki 
    291   1.1   ozaki 	name="ipsec_lifetime_${ipproto}_${proto}_${_algo}"
    292   1.1   ozaki 	desc="Tests of lifetime of IPsec ($ipproto) with $proto ($algo)"
    293   1.1   ozaki 
    294   1.1   ozaki 	atf_test_case ${name} cleanup
    295  1.18   ozaki 	eval "
    296  1.18   ozaki 	    ${name}_head() {
    297  1.18   ozaki 	        atf_set descr \"$desc\"
    298  1.18   ozaki 	        atf_set require.progs rump_server setkey
    299  1.18   ozaki 	    }
    300  1.18   ozaki 	    ${name}_body() {
    301  1.18   ozaki 	        test_lifetime_common $ipproto $proto $algo
    302  1.18   ozaki 	        rump_server_destroy_ifaces
    303  1.18   ozaki 	    }
    304  1.18   ozaki 	    ${name}_cleanup() {
    305  1.18   ozaki 	        \$DEBUG && dump
    306  1.18   ozaki 	        cleanup
    307  1.18   ozaki 	    }
    308   1.1   ozaki 	"
    309   1.1   ozaki 	atf_add_test_case ${name}
    310   1.1   ozaki }
    311   1.1   ozaki 
    312   1.8   ozaki test_update()
    313   1.8   ozaki {
    314   1.8   ozaki 	local proto=$1
    315   1.8   ozaki 	local algo=$2
    316   1.8   ozaki 	local update=$3
    317   1.8   ozaki 	local ip_local=10.0.0.1
    318   1.8   ozaki 	local ip_peer=10.0.0.2
    319   1.8   ozaki 	local algo_args="$(generate_algo_args $proto $algo)"
    320   1.8   ozaki 	local proto_cap=$(echo $proto | tr 'a-z' 'A-Z')
    321   1.8   ozaki 	local outfile=./out
    322   1.8   ozaki 
    323   1.8   ozaki 	rump_server_crypto_start $SOCK_LOCAL netipsec
    324   1.8   ozaki 	rump_server_crypto_start $SOCK_PEER netipsec
    325   1.8   ozaki 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
    326   1.8   ozaki 	rump_server_add_iface $SOCK_PEER shmif0 $BUS
    327   1.8   ozaki 
    328   1.8   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    329   1.8   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    330   1.8   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_local/24
    331   1.8   ozaki 
    332   1.8   ozaki 	export RUMP_SERVER=$SOCK_PEER
    333   1.8   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    334   1.8   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_peer/24
    335   1.8   ozaki 
    336   1.8   ozaki 	setup_sasp $proto "$algo_args" $ip_local $ip_peer 100 $update
    337   1.8   ozaki 
    338   1.8   ozaki 	extract_new_packets $BUS > $outfile
    339   1.8   ozaki 
    340   1.8   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    341   1.8   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    342   1.8   ozaki 
    343   1.8   ozaki 	extract_new_packets $BUS > $outfile
    344   1.8   ozaki 	atf_check -s exit:0 -o match:"$ip_local > $ip_peer: $proto_cap" \
    345   1.8   ozaki 	    cat $outfile
    346   1.8   ozaki 	atf_check -s exit:0 -o match:"$ip_peer > $ip_local: $proto_cap" \
    347   1.8   ozaki 	    cat $outfile
    348   1.8   ozaki }
    349   1.8   ozaki 
    350   1.8   ozaki add_test_update()
    351   1.8   ozaki {
    352   1.8   ozaki 	local proto=$1
    353   1.8   ozaki 	local algo=$2
    354   1.8   ozaki 	local update=$3
    355   1.8   ozaki 	local _update=$(echo $update |tr 'a-z' 'A-Z')
    356   1.8   ozaki 	local _algo=$(echo $algo | sed 's/-//g')
    357   1.8   ozaki 	local name= desc=
    358   1.8   ozaki 
    359  1.25  andvar 	desc="Tests trying to update $_update of $proto ($algo)"
    360   1.8   ozaki 	name="ipsec_update_${update}_${proto}_${_algo}"
    361   1.8   ozaki 
    362   1.8   ozaki 	atf_test_case ${name} cleanup
    363  1.18   ozaki 	eval "
    364  1.18   ozaki 	    ${name}_head() {
    365  1.18   ozaki 	        atf_set descr \"$desc\"
    366  1.18   ozaki 	        atf_set require.progs rump_server setkey
    367  1.18   ozaki 	    }
    368  1.18   ozaki 	    ${name}_body() {
    369  1.18   ozaki 	        test_update $proto $algo $update
    370  1.18   ozaki 	        rump_server_destroy_ifaces
    371  1.18   ozaki 	    }
    372  1.18   ozaki 	    ${name}_cleanup() {
    373  1.18   ozaki 	        \$DEBUG && dump
    374  1.18   ozaki 	        cleanup
    375  1.18   ozaki 	    }
    376   1.8   ozaki 	"
    377   1.8   ozaki 	atf_add_test_case ${name}
    378   1.8   ozaki }
    379   1.8   ozaki 
    380  1.23   ozaki test_getspi_update()
    381  1.23   ozaki {
    382  1.23   ozaki 	local proto=$1
    383  1.23   ozaki 	local algo=$2
    384  1.23   ozaki 	local ip_local=10.0.0.1
    385  1.23   ozaki 	local ip_peer=10.0.0.2
    386  1.23   ozaki 	local algo_args="$(generate_algo_args $proto $algo)"
    387  1.23   ozaki 	local proto_cap=$(echo $proto | tr 'a-z' 'A-Z')
    388  1.23   ozaki 	local outfile=./out
    389  1.23   ozaki 
    390  1.23   ozaki 	rump_server_crypto_start $SOCK_LOCAL netipsec
    391  1.23   ozaki 	rump_server_crypto_start $SOCK_PEER netipsec
    392  1.23   ozaki 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
    393  1.23   ozaki 	rump_server_add_iface $SOCK_PEER shmif0 $BUS
    394  1.23   ozaki 
    395  1.23   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    396  1.23   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    397  1.23   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_local/24
    398  1.23   ozaki 
    399  1.23   ozaki 	export RUMP_SERVER=$SOCK_PEER
    400  1.23   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    401  1.23   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_peer/24
    402  1.23   ozaki 
    403  1.23   ozaki 	setup_sasp $proto "$algo_args" $ip_local $ip_peer 100 getspi
    404  1.23   ozaki 
    405  1.23   ozaki 	extract_new_packets $BUS > $outfile
    406  1.23   ozaki 
    407  1.23   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    408  1.23   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    409  1.23   ozaki 
    410  1.23   ozaki 	extract_new_packets $BUS > $outfile
    411  1.23   ozaki 	atf_check -s exit:0 -o match:"$ip_local > $ip_peer: $proto_cap" \
    412  1.23   ozaki 	    cat $outfile
    413  1.23   ozaki 	atf_check -s exit:0 -o match:"$ip_peer > $ip_local: $proto_cap" \
    414  1.23   ozaki 	    cat $outfile
    415  1.23   ozaki }
    416  1.23   ozaki 
    417  1.23   ozaki add_test_getspi_update()
    418  1.23   ozaki {
    419  1.23   ozaki 	local proto=$1
    420  1.23   ozaki 	local algo=$2
    421  1.23   ozaki 	local _algo=$(echo $algo | sed 's/-//g')
    422  1.23   ozaki 	local name= desc=
    423  1.23   ozaki 
    424  1.25  andvar 	desc="Tests trying to getspi and update SA of $proto ($algo)"
    425  1.23   ozaki 	name="ipsec_getspi_update_sa_${proto}_${_algo}"
    426  1.23   ozaki 
    427  1.23   ozaki 	atf_test_case ${name} cleanup
    428  1.23   ozaki 	eval "
    429  1.23   ozaki 	    ${name}_head() {
    430  1.23   ozaki 	        atf_set descr \"$desc\"
    431  1.23   ozaki 	        atf_set require.progs rump_server setkey
    432  1.23   ozaki 	    }
    433  1.23   ozaki 	    ${name}_body() {
    434  1.23   ozaki 	        test_getspi_update $proto $algo
    435  1.23   ozaki 	        rump_server_destroy_ifaces
    436  1.23   ozaki 	    }
    437  1.23   ozaki 	    ${name}_cleanup() {
    438  1.23   ozaki 	        \$DEBUG && dump
    439  1.23   ozaki 	        cleanup
    440  1.23   ozaki 	    }
    441  1.23   ozaki 	"
    442  1.23   ozaki 	atf_add_test_case ${name}
    443  1.23   ozaki }
    444  1.23   ozaki 
    445   1.9   ozaki add_sa()
    446   1.9   ozaki {
    447   1.9   ozaki 	local proto=$1
    448   1.9   ozaki 	local algo_args="$2"
    449   1.9   ozaki 	local ip_local=$3
    450   1.9   ozaki 	local ip_peer=$4
    451   1.9   ozaki 	local lifetime=$5
    452   1.9   ozaki 	local spi=$6
    453   1.9   ozaki 	local tmpfile=./tmp
    454   1.9   ozaki 	local extra=
    455   1.9   ozaki 
    456   1.9   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    457   1.9   ozaki 	cat > $tmpfile <<-EOF
    458   1.9   ozaki 	add $ip_local $ip_peer $proto $((spi)) -lh $lifetime -ls $lifetime $algo_args;
    459   1.9   ozaki 	add $ip_peer $ip_local $proto $((spi + 1)) -lh $lifetime -ls $lifetime $algo_args;
    460   1.9   ozaki 	$extra
    461   1.9   ozaki 	EOF
    462   1.9   ozaki 	$DEBUG && cat $tmpfile
    463   1.9   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    464   1.9   ozaki 	$DEBUG && $HIJACKING setkey -D
    465   1.9   ozaki 	# XXX it can be expired if $lifetime is very short
    466   1.9   ozaki 	#check_sa_entries $SOCK_LOCAL $ip_local $ip_peer
    467   1.9   ozaki 
    468   1.9   ozaki 	export RUMP_SERVER=$SOCK_PEER
    469   1.9   ozaki 	cat > $tmpfile <<-EOF
    470   1.9   ozaki 	add $ip_local $ip_peer $proto $((spi)) -lh $lifetime -ls $lifetime $algo_args;
    471   1.9   ozaki 	add $ip_peer $ip_local $proto $((spi + 1)) -lh $lifetime -ls $lifetime $algo_args;
    472   1.9   ozaki 	$extra
    473   1.9   ozaki 	EOF
    474   1.9   ozaki 	$DEBUG && cat $tmpfile
    475   1.9   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    476   1.9   ozaki 	$DEBUG && $HIJACKING setkey -D
    477   1.9   ozaki 	# XXX it can be expired if $lifetime is very short
    478   1.9   ozaki 	#check_sa_entries $SOCK_PEER $ip_local $ip_peer
    479   1.9   ozaki }
    480   1.9   ozaki 
    481  1.13   ozaki delete_sa()
    482  1.13   ozaki {
    483  1.13   ozaki 	local proto=$1
    484  1.13   ozaki 	local ip_local=$2
    485  1.13   ozaki 	local ip_peer=$3
    486  1.13   ozaki 	local spi=$4
    487  1.13   ozaki 	local tmpfile=./tmp
    488  1.13   ozaki 	local extra=
    489  1.13   ozaki 
    490  1.13   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    491  1.13   ozaki 	cat > $tmpfile <<-EOF
    492  1.13   ozaki 	delete $ip_local $ip_peer $proto $((spi));
    493  1.13   ozaki 	delete $ip_peer $ip_local $proto $((spi + 1));
    494  1.13   ozaki 	EOF
    495  1.13   ozaki 	$DEBUG && cat $tmpfile
    496  1.13   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    497  1.13   ozaki 	$DEBUG && $HIJACKING setkey -D
    498  1.13   ozaki 
    499  1.13   ozaki 	export RUMP_SERVER=$SOCK_PEER
    500  1.13   ozaki 	cat > $tmpfile <<-EOF
    501  1.13   ozaki 	delete $ip_local $ip_peer $proto $((spi));
    502  1.13   ozaki 	delete $ip_peer $ip_local $proto $((spi + 1));
    503  1.13   ozaki 	EOF
    504  1.13   ozaki 	$DEBUG && cat $tmpfile
    505  1.13   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    506  1.13   ozaki 	$DEBUG && $HIJACKING setkey -D
    507  1.13   ozaki }
    508  1.13   ozaki 
    509   1.9   ozaki check_packet_spi()
    510   1.9   ozaki {
    511   1.9   ozaki 	local outfile=$1
    512   1.9   ozaki 	local ip_local=$2
    513   1.9   ozaki 	local ip_peer=$3
    514   1.9   ozaki 	local proto=$4
    515   1.9   ozaki 	local spi=$5
    516   1.9   ozaki 	local spistr=
    517   1.9   ozaki 
    518   1.9   ozaki 	$DEBUG && cat $outfile
    519   1.9   ozaki 	spistr=$(printf "%08x" $spi)
    520   1.9   ozaki 	atf_check -s exit:0 \
    521   1.9   ozaki 	    -o match:"$ip_local > $ip_peer: $proto_cap\(spi=0x$spistr," \
    522   1.9   ozaki 	    cat $outfile
    523   1.9   ozaki 	spistr=$(printf "%08x" $((spi + 1)))
    524   1.9   ozaki 	atf_check -s exit:0 \
    525   1.9   ozaki 	    -o match:"$ip_peer > $ip_local: $proto_cap\(spi=0x$spistr," \
    526   1.9   ozaki 	    cat $outfile
    527   1.9   ozaki }
    528   1.9   ozaki 
    529  1.12   ozaki wait_sa_disappeared()
    530  1.12   ozaki {
    531  1.12   ozaki 	local spi=$1
    532  1.12   ozaki 	local i=
    533  1.12   ozaki 
    534  1.12   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    535  1.12   ozaki 	for i in $(seq 1 10); do
    536  1.12   ozaki 		$HIJACKING setkey -D |grep -q "spi=$spi"
    537  1.12   ozaki 		[ $? != 0 ] && break
    538  1.12   ozaki 		sleep 1
    539  1.12   ozaki 	done
    540  1.12   ozaki 	if [ $i -eq 10 ]; then
    541  1.12   ozaki 		atf_fail "SA (spi=$spi) didn't disappear in 10s"
    542  1.12   ozaki 	fi
    543  1.12   ozaki 	export RUMP_SERVER=$SOCK_PEER
    544  1.12   ozaki 	for i in $(seq 1 10); do
    545  1.12   ozaki 		$HIJACKING setkey -D |grep -q "spi=$spi"
    546  1.12   ozaki 		[ $? != 0 ] && break
    547  1.12   ozaki 		sleep 1
    548  1.12   ozaki 	done
    549  1.12   ozaki 	if [ $i -eq 10 ]; then
    550  1.12   ozaki 		atf_fail "SA (spi=$spi) didn't disappear in 10s"
    551  1.12   ozaki 	fi
    552  1.12   ozaki }
    553  1.12   ozaki 
    554   1.9   ozaki test_spi()
    555   1.9   ozaki {
    556   1.9   ozaki 	local proto=$1
    557   1.9   ozaki 	local algo=$2
    558  1.10   ozaki 	local preferred=$3
    559  1.13   ozaki 	local method=$4
    560   1.9   ozaki 	local ip_local=10.0.0.1
    561   1.9   ozaki 	local ip_peer=10.0.0.2
    562   1.9   ozaki 	local algo_args="$(generate_algo_args $proto $algo)"
    563   1.9   ozaki 	local proto_cap=$(echo $proto | tr 'a-z' 'A-Z')
    564   1.9   ozaki 	local outfile=./out
    565   1.9   ozaki 	local spistr=
    566  1.14   ozaki 	local longtime= shorttime=
    567  1.14   ozaki 
    568  1.24  martin 	if [ $method = timeout ]; then
    569  1.24  martin 		atf_skip \
    570  1.24  martin 	   "PR 55632: test fails randomly, leaving spurious rump_server around"
    571  1.24  martin 	fi
    572  1.16   ozaki 	if [ $method = timeout -a $preferred = new ]; then
    573  1.16   ozaki 		skip_if_qemu
    574  1.16   ozaki 	fi
    575  1.16   ozaki 
    576  1.14   ozaki 	if [ $method = delete ]; then
    577  1.14   ozaki 		shorttime=100
    578  1.14   ozaki 		longtime=100
    579  1.14   ozaki 	else
    580  1.14   ozaki 		shorttime=3
    581  1.14   ozaki 		longtime=6
    582  1.14   ozaki 	fi
    583   1.9   ozaki 
    584   1.9   ozaki 	rump_server_crypto_start $SOCK_LOCAL netipsec
    585   1.9   ozaki 	rump_server_crypto_start $SOCK_PEER netipsec
    586   1.9   ozaki 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
    587   1.9   ozaki 	rump_server_add_iface $SOCK_PEER shmif0 $BUS
    588   1.9   ozaki 
    589   1.9   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    590   1.9   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    591   1.9   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_local/24
    592   1.9   ozaki 	if [ $preferred = old ]; then
    593   1.9   ozaki 		atf_check -s exit:0 rump.sysctl -q -w net.key.prefered_oldsa=1
    594   1.9   ozaki 	fi
    595   1.9   ozaki 
    596   1.9   ozaki 	export RUMP_SERVER=$SOCK_PEER
    597   1.9   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    598   1.9   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_peer/24
    599   1.9   ozaki 	if [ $preferred = old ]; then
    600   1.9   ozaki 		atf_check -s exit:0 rump.sysctl -q -w net.key.prefered_oldsa=1
    601   1.9   ozaki 	fi
    602   1.9   ozaki 
    603   1.9   ozaki 	setup_sasp $proto "$algo_args" $ip_local $ip_peer 100
    604   1.9   ozaki 
    605   1.9   ozaki 	extract_new_packets $BUS > $outfile
    606   1.9   ozaki 
    607   1.9   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    608   1.9   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    609   1.9   ozaki 	extract_new_packets $BUS > $outfile
    610   1.9   ozaki 	check_packet_spi $outfile $ip_local $ip_peer $proto_cap 10000
    611   1.9   ozaki 
    612   1.9   ozaki 	# Add a new SA with a different SPI
    613  1.14   ozaki 	add_sa $proto "$algo_args" $ip_local $ip_peer $longtime 10010
    614   1.9   ozaki 
    615   1.9   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    616   1.9   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    617   1.9   ozaki 	extract_new_packets $BUS > $outfile
    618   1.9   ozaki 	if [ $preferred = old ]; then
    619   1.9   ozaki 		check_packet_spi $outfile $ip_local $ip_peer $proto_cap 10000
    620   1.9   ozaki 	else
    621   1.9   ozaki 		# The new SA is preferred
    622   1.9   ozaki 		check_packet_spi $outfile $ip_local $ip_peer $proto_cap 10010
    623   1.9   ozaki 	fi
    624   1.9   ozaki 
    625   1.9   ozaki 	# Add another SA with a different SPI
    626  1.14   ozaki 	add_sa $proto "$algo_args" $ip_local $ip_peer $shorttime 10020
    627   1.9   ozaki 
    628   1.9   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    629   1.9   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    630   1.9   ozaki 	extract_new_packets $BUS > $outfile
    631   1.9   ozaki 	if [ $preferred = old ]; then
    632   1.9   ozaki 		check_packet_spi $outfile $ip_local $ip_peer $proto_cap 10000
    633   1.9   ozaki 	else
    634   1.9   ozaki 		# The newest SA is preferred
    635   1.9   ozaki 		check_packet_spi $outfile $ip_local $ip_peer $proto_cap 10020
    636   1.9   ozaki 	fi
    637   1.9   ozaki 
    638  1.13   ozaki 	if [ $method = delete ]; then
    639  1.13   ozaki 		delete_sa $proto $ip_local $ip_peer 10020
    640  1.13   ozaki 	else
    641  1.13   ozaki 		wait_sa_disappeared 10020
    642  1.13   ozaki 	fi
    643   1.9   ozaki 
    644   1.9   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    645   1.9   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    646   1.9   ozaki 	extract_new_packets $BUS > $outfile
    647   1.9   ozaki 	if [ $preferred = old ]; then
    648   1.9   ozaki 		check_packet_spi $outfile $ip_local $ip_peer $proto_cap 10000
    649   1.9   ozaki 	else
    650   1.9   ozaki 		# The newest one is removed and the second one is used
    651   1.9   ozaki 		check_packet_spi $outfile $ip_local $ip_peer $proto_cap 10010
    652   1.9   ozaki 	fi
    653   1.9   ozaki 
    654  1.13   ozaki 	if [ $method = delete ]; then
    655  1.13   ozaki 		delete_sa $proto $ip_local $ip_peer 10010
    656  1.13   ozaki 	else
    657  1.13   ozaki 		wait_sa_disappeared 10010
    658  1.13   ozaki 	fi
    659   1.9   ozaki 
    660   1.9   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    661   1.9   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    662   1.9   ozaki 	extract_new_packets $BUS > $outfile
    663   1.9   ozaki 	if [ $preferred = old ]; then
    664   1.9   ozaki 		check_packet_spi $outfile $ip_local $ip_peer $proto_cap 10000
    665   1.9   ozaki 	else
    666   1.9   ozaki 		# The second one is removed and the original one is used
    667   1.9   ozaki 		check_packet_spi $outfile $ip_local $ip_peer $proto_cap 10000
    668   1.9   ozaki 	fi
    669   1.9   ozaki }
    670   1.9   ozaki 
    671   1.9   ozaki add_test_spi()
    672   1.9   ozaki {
    673   1.9   ozaki 	local proto=$1
    674   1.9   ozaki 	local algo=$2
    675   1.9   ozaki 	local preferred=$3
    676  1.13   ozaki 	local method=$4
    677   1.9   ozaki 	local _algo=$(echo $algo | sed 's/-//g')
    678   1.9   ozaki 	local name= desc=
    679   1.9   ozaki 
    680  1.13   ozaki 	desc="Tests SAs with different SPIs of $proto ($algo) ($preferred SA preferred) ($method)"
    681  1.13   ozaki 	name="ipsec_spi_${proto}_${_algo}_preferred_${preferred}_${method}"
    682   1.9   ozaki 
    683   1.9   ozaki 	atf_test_case ${name} cleanup
    684  1.18   ozaki 	eval "
    685  1.18   ozaki 	    ${name}_head() {
    686  1.18   ozaki 	        atf_set descr \"$desc\"
    687  1.18   ozaki 	        atf_set require.progs rump_server setkey
    688  1.18   ozaki 	    }
    689  1.18   ozaki 	    ${name}_body() {
    690  1.18   ozaki 	        test_spi $proto $algo $preferred $method
    691  1.18   ozaki 	        rump_server_destroy_ifaces
    692  1.18   ozaki 	    }
    693  1.18   ozaki 	    ${name}_cleanup() {
    694  1.18   ozaki 	        \$DEBUG && dump
    695  1.18   ozaki 	        cleanup
    696  1.18   ozaki 	    }
    697   1.9   ozaki 	"
    698   1.9   ozaki 	atf_add_test_case ${name}
    699   1.9   ozaki }
    700   1.9   ozaki 
    701  1.17   ozaki setup_sp()
    702  1.17   ozaki {
    703  1.17   ozaki 	local proto=$1
    704  1.17   ozaki 	local algo_args="$2"
    705  1.17   ozaki 	local ip_local=$3
    706  1.17   ozaki 	local ip_peer=$4
    707  1.17   ozaki 	local tmpfile=./tmp
    708  1.17   ozaki 
    709  1.17   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    710  1.17   ozaki 	cat > $tmpfile <<-EOF
    711  1.17   ozaki 	spdadd $ip_local $ip_peer any -P out ipsec $proto/transport//require;
    712  1.19   ozaki 	spdadd $ip_peer $ip_local any -P in ipsec $proto/transport//require;
    713  1.17   ozaki 	EOF
    714  1.17   ozaki 	$DEBUG && cat $tmpfile
    715  1.17   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    716  1.17   ozaki 	check_sp_entries $SOCK_LOCAL $ip_local $ip_peer
    717  1.17   ozaki 
    718  1.17   ozaki 	export RUMP_SERVER=$SOCK_PEER
    719  1.17   ozaki 	cat > $tmpfile <<-EOF
    720  1.17   ozaki 	spdadd $ip_peer $ip_local any -P out ipsec $proto/transport//require;
    721  1.19   ozaki 	spdadd $ip_local $ip_peer any -P in ipsec $proto/transport//require;
    722  1.17   ozaki 	EOF
    723  1.17   ozaki 	$DEBUG && cat $tmpfile
    724  1.17   ozaki 	atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
    725  1.17   ozaki 	check_sp_entries $SOCK_PEER $ip_peer $ip_local
    726  1.17   ozaki }
    727  1.17   ozaki 
    728  1.17   ozaki test_nosa()
    729  1.17   ozaki {
    730  1.17   ozaki 	local proto=$1
    731  1.17   ozaki 	local algo=$2
    732  1.17   ozaki 	local update=$3
    733  1.17   ozaki 	local ip_local=10.0.0.1
    734  1.17   ozaki 	local ip_peer=10.0.0.2
    735  1.17   ozaki 	local algo_args="$(generate_algo_args $proto $algo)"
    736  1.17   ozaki 	local proto_cap=$(echo $proto | tr 'a-z' 'A-Z')
    737  1.17   ozaki 	local outfile=./out
    738  1.17   ozaki 
    739  1.17   ozaki 	rump_server_crypto_start $SOCK_LOCAL netipsec
    740  1.17   ozaki 	rump_server_crypto_start $SOCK_PEER netipsec
    741  1.17   ozaki 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
    742  1.17   ozaki 	rump_server_add_iface $SOCK_PEER shmif0 $BUS
    743  1.17   ozaki 
    744  1.17   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    745  1.17   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    746  1.17   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_local/24
    747  1.17   ozaki 
    748  1.17   ozaki 	export RUMP_SERVER=$SOCK_PEER
    749  1.17   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    750  1.17   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_peer/24
    751  1.17   ozaki 
    752  1.17   ozaki 	setup_sp $proto "$algo_args" $ip_local $ip_peer
    753  1.17   ozaki 
    754  1.17   ozaki 	extract_new_packets $BUS > $outfile
    755  1.17   ozaki 
    756  1.17   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    757  1.17   ozaki 	# It doesn't work because there is no SA
    758  1.17   ozaki 	atf_check -s not-exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    759  1.17   ozaki }
    760  1.17   ozaki 
    761  1.17   ozaki add_test_nosa()
    762  1.17   ozaki {
    763  1.17   ozaki 	local proto=$1
    764  1.17   ozaki 	local algo=$2
    765  1.17   ozaki 	local _algo=$(echo $algo | sed 's/-//g')
    766  1.17   ozaki 	local name= desc=
    767  1.17   ozaki 
    768  1.17   ozaki 	desc="Tests SPs with no relevant SAs with $proto ($algo)"
    769  1.17   ozaki 	name="ipsec_nosa_${proto}_${_algo}"
    770  1.17   ozaki 
    771  1.17   ozaki 	atf_test_case ${name} cleanup
    772  1.18   ozaki 	eval "
    773  1.18   ozaki 	    ${name}_head() {
    774  1.18   ozaki 	        atf_set descr \"$desc\"
    775  1.18   ozaki 	        atf_set require.progs rump_server setkey
    776  1.18   ozaki 	    }
    777  1.18   ozaki 	    ${name}_body() {
    778  1.18   ozaki 	        test_nosa $proto $algo
    779  1.18   ozaki 	        rump_server_destroy_ifaces
    780  1.18   ozaki 	    }
    781  1.18   ozaki 	    ${name}_cleanup() {
    782  1.18   ozaki 	        \$DEBUG && dump
    783  1.18   ozaki 	        cleanup
    784  1.18   ozaki 	    }
    785  1.17   ozaki 	"
    786  1.17   ozaki 	atf_add_test_case ${name}
    787  1.17   ozaki }
    788  1.17   ozaki 
    789  1.20   ozaki test_multiple_sa()
    790  1.20   ozaki {
    791  1.20   ozaki 	local proto=$1
    792  1.20   ozaki 	local algo=$2
    793  1.20   ozaki 	local update=$3
    794  1.20   ozaki 	local ip_local=10.0.0.1
    795  1.20   ozaki 	local ip_peer=10.0.0.2
    796  1.20   ozaki 	local ip_peer2=10.0.0.3
    797  1.20   ozaki 	local algo_args="$(generate_algo_args $proto $algo)"
    798  1.20   ozaki 	local proto_cap=$(echo $proto | tr 'a-z' 'A-Z')
    799  1.20   ozaki 	local outfile=./out
    800  1.20   ozaki 
    801  1.20   ozaki 	rump_server_crypto_start $SOCK_LOCAL netipsec
    802  1.20   ozaki 	rump_server_crypto_start $SOCK_PEER netipsec
    803  1.20   ozaki 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
    804  1.20   ozaki 	rump_server_add_iface $SOCK_PEER shmif0 $BUS
    805  1.20   ozaki 
    806  1.20   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    807  1.20   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    808  1.20   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_local/24
    809  1.20   ozaki 
    810  1.20   ozaki 	export RUMP_SERVER=$SOCK_PEER
    811  1.20   ozaki 	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
    812  1.20   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_peer/24
    813  1.20   ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 $ip_peer2/24 alias
    814  1.20   ozaki 
    815  1.20   ozaki 	setup_sp $proto "$algo_args" "$ip_local" "0.0.0.0/0"
    816  1.20   ozaki 
    817  1.20   ozaki 	extract_new_packets $BUS > $outfile
    818  1.20   ozaki 
    819  1.20   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    820  1.20   ozaki 	# There is no SA, so ping should fail
    821  1.20   ozaki 	atf_check -s not-exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    822  1.20   ozaki 	atf_check -s not-exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer2
    823  1.20   ozaki 
    824  1.20   ozaki 	add_sa $proto "$algo_args" $ip_local $ip_peer 100 10000
    825  1.20   ozaki 
    826  1.20   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    827  1.20   ozaki 	# There is only an SA for $ip_peer, so ping to $ip_peer2 should fail
    828  1.20   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    829  1.20   ozaki 	atf_check -s not-exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer2
    830  1.20   ozaki 
    831  1.20   ozaki 	add_sa $proto "$algo_args" $ip_local $ip_peer2 100 10010
    832  1.20   ozaki 
    833  1.20   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    834  1.20   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer
    835  1.20   ozaki 	atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 $ip_peer2
    836  1.20   ozaki 
    837  1.20   ozaki 	export RUMP_SERVER=$SOCK_LOCAL
    838  1.20   ozaki 	atf_check -s exit:0 -o match:"$proto/transport//require" \
    839  1.20   ozaki 	    $HIJACKING setkey -D -P
    840  1.20   ozaki 	# Check if the policy isn't modified accidentally
    841  1.20   ozaki 	atf_check -s exit:0 -o not-match:"$proto/transport/.+\-.+/require" \
    842  1.20   ozaki 	    $HIJACKING setkey -D -P
    843  1.20   ozaki 	export RUMP_SERVER=$SOCK_PEER
    844  1.20   ozaki 	atf_check -s exit:0 -o match:"$proto/transport//require" \
    845  1.20   ozaki 	    $HIJACKING setkey -D -P
    846  1.20   ozaki 	# Check if the policy isn't modified accidentally
    847  1.20   ozaki 	atf_check -s exit:0 -o not-match:"$proto/transport/.+\-.+/require" \
    848  1.20   ozaki 	    $HIJACKING setkey -D -P
    849  1.20   ozaki }
    850  1.20   ozaki 
    851  1.20   ozaki add_test_multiple_sa()
    852  1.20   ozaki {
    853  1.20   ozaki 	local proto=$1
    854  1.20   ozaki 	local algo=$2
    855  1.20   ozaki 	local _algo=$(echo $algo | sed 's/-//g')
    856  1.20   ozaki 	local name= desc=
    857  1.20   ozaki 
    858  1.20   ozaki 	desc="Tests multiple SAs with $proto ($algo)"
    859  1.20   ozaki 	name="ipsec_multiple_sa_${proto}_${_algo}"
    860  1.20   ozaki 
    861  1.20   ozaki 	atf_test_case ${name} cleanup
    862  1.20   ozaki 	eval "
    863  1.20   ozaki 	    ${name}_head() {
    864  1.20   ozaki 	        atf_set descr \"$desc\"
    865  1.20   ozaki 	        atf_set require.progs rump_server setkey
    866  1.20   ozaki 	    }
    867  1.20   ozaki 	    ${name}_body() {
    868  1.20   ozaki 	        test_multiple_sa $proto $algo
    869  1.20   ozaki 	        rump_server_destroy_ifaces
    870  1.20   ozaki 	    }
    871  1.20   ozaki 	    ${name}_cleanup() {
    872  1.20   ozaki 	        \$DEBUG && dump
    873  1.20   ozaki 	        cleanup
    874  1.20   ozaki 	    }
    875  1.20   ozaki 	"
    876  1.20   ozaki 	atf_add_test_case ${name}
    877  1.20   ozaki }
    878  1.20   ozaki 
    879   1.1   ozaki atf_init_test_cases()
    880   1.1   ozaki {
    881   1.1   ozaki 	local algo=
    882   1.1   ozaki 
    883   1.1   ozaki 	for algo in $ESP_ENCRYPTION_ALGORITHMS_MINIMUM; do
    884   1.1   ozaki 		add_test_lifetime ipv4 esp $algo
    885   1.1   ozaki 		add_test_lifetime ipv6 esp $algo
    886   1.8   ozaki 		add_test_update esp $algo sa
    887   1.8   ozaki 		add_test_update esp $algo sp
    888  1.23   ozaki 		add_test_getspi_update esp $algo
    889  1.13   ozaki 		add_test_spi esp $algo new delete
    890  1.13   ozaki 		add_test_spi esp $algo old delete
    891  1.13   ozaki 		add_test_spi esp $algo new timeout
    892  1.13   ozaki 		add_test_spi esp $algo old timeout
    893  1.17   ozaki 		add_test_nosa esp $algo
    894  1.20   ozaki 		add_test_multiple_sa esp $algo
    895   1.1   ozaki 	done
    896   1.1   ozaki 	for algo in $AH_AUTHENTICATION_ALGORITHMS_MINIMUM; do
    897   1.1   ozaki 		add_test_lifetime ipv4 ah $algo
    898   1.1   ozaki 		add_test_lifetime ipv6 ah $algo
    899   1.8   ozaki 		add_test_update ah $algo sa
    900   1.8   ozaki 		add_test_update ah $algo sp
    901  1.23   ozaki 		add_test_getspi_update ah $algo
    902  1.13   ozaki 		add_test_spi ah $algo new delete
    903  1.13   ozaki 		add_test_spi ah $algo old delete
    904  1.13   ozaki 		add_test_spi ah $algo new timeout
    905  1.13   ozaki 		add_test_spi ah $algo old timeout
    906  1.17   ozaki 		add_test_nosa ah $algo
    907  1.20   ozaki 		add_test_multiple_sa ah $algo
    908   1.1   ozaki 	done
    909   1.1   ozaki }
    910