Home | History | Annotate | Line # | Download | only in if_gif
t_gif.sh revision 1.11
      1  1.11     ozaki #	$NetBSD: t_gif.sh,v 1.11 2017/08/03 03:16:26 ozaki-r Exp $
      2   1.1  knakahar #
      3   1.1  knakahar # Copyright (c) 2015 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_GIFIP=172.16.1.1
     34   1.3  knakahar ROUTER1_WANIP_DUMMY=10.0.0.11
     35   1.3  knakahar ROUTER1_GIFIP_DUMMY=172.16.11.1
     36   1.3  knakahar ROUTER1_GIFIP_RECURSIVE1=172.16.101.1
     37   1.3  knakahar ROUTER1_GIFIP_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_GIFIP=172.16.2.1
     42   1.3  knakahar ROUTER2_WANIP_DUMMY=10.0.0.12
     43   1.3  knakahar ROUTER2_GIFIP_DUMMY=172.16.12.1
     44   1.3  knakahar ROUTER2_GIFIP_RECURSIVE1=172.16.102.1
     45   1.3  knakahar ROUTER2_GIFIP_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_GIFIP6=fc00:3::1
     51   1.3  knakahar ROUTER1_WANIP6_DUMMY=fc00::11
     52   1.3  knakahar ROUTER1_GIFIP6_DUMMY=fc00:13::1
     53   1.3  knakahar ROUTER1_GIFIP6_RECURSIVE1=fc00:103::1
     54   1.3  knakahar ROUTER1_GIFIP6_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_GIFIP6=fc00:4::1
     59   1.3  knakahar ROUTER2_WANIP6_DUMMY=fc00::12
     60   1.3  knakahar ROUTER2_GIFIP6_DUMMY=fc00:14::1
     61   1.3  knakahar ROUTER2_GIFIP6_RECURSIVE1=fc00:104::1
     62   1.3  knakahar ROUTER2_GIFIP6_RECURSIVE2=fc00:204::1
     63   1.1  knakahar 
     64  1.10     ozaki DEBUG=${DEBUG:-false}
     65   1.1  knakahar TIMEOUT=5
     66   1.1  knakahar 
     67   1.1  knakahar setup_router()
     68   1.1  knakahar {
     69   1.1  knakahar 	sock=${1}
     70   1.1  knakahar 	lan=${2}
     71   1.1  knakahar 	lan_mode=${3}
     72   1.1  knakahar 	wan=${4}
     73   1.1  knakahar 	wan_mode=${5}
     74   1.1  knakahar 
     75   1.8     ozaki 	rump_server_add_iface $sock shmif0 bus0
     76   1.8     ozaki 	rump_server_add_iface $sock shmif1 bus1
     77   1.8     ozaki 
     78   1.1  knakahar 	export RUMP_SERVER=${sock}
     79   1.1  knakahar 	if [ ${lan_mode} = "ipv6" ]; then
     80   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${lan}
     81   1.1  knakahar 	else
     82   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig shmif0 inet ${lan} netmask 0xffffff00
     83   1.1  knakahar 	fi
     84   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig shmif0 up
     85   1.1  knakahar 	rump.ifconfig shmif0
     86   1.1  knakahar 
     87   1.1  knakahar 	if [ ${wan_mode} = "ipv6" ]; then
     88   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${wan}
     89   1.1  knakahar 	else
     90   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig shmif1 inet ${wan} netmask 0xff000000
     91   1.1  knakahar 	fi
     92   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig shmif1 up
     93   1.1  knakahar 	rump.ifconfig shmif1
     94   1.1  knakahar }
     95   1.1  knakahar 
     96   1.1  knakahar test_router()
     97   1.1  knakahar {
     98   1.1  knakahar 	sock=${1}
     99   1.1  knakahar 	lan=${2}
    100   1.1  knakahar 	lan_mode=${3}
    101   1.1  knakahar 	wan=${4}
    102   1.1  knakahar 	wan_mode=${5}
    103   1.1  knakahar 
    104   1.1  knakahar 	export RUMP_SERVER=${sock}
    105   1.1  knakahar 	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
    106   1.1  knakahar 	if [ ${lan_mode} = "ipv6" ]; then
    107   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${lan}
    108   1.1  knakahar 	else
    109   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${lan}
    110   1.1  knakahar 	fi
    111   1.1  knakahar 
    112   1.1  knakahar 	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
    113   1.1  knakahar 	if [ ${wan_mode} = "ipv6" ]; then
    114   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${wan}
    115   1.1  knakahar 	else
    116   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${wan}
    117   1.1  knakahar 	fi
    118   1.1  knakahar }
    119   1.1  knakahar 
    120   1.1  knakahar setup()
    121   1.1  knakahar {
    122   1.1  knakahar 	inner=${1}
    123   1.1  knakahar 	outer=${2}
    124   1.1  knakahar 
    125   1.8     ozaki 	rump_server_start $SOCK1 netinet6 gif
    126   1.8     ozaki 	rump_server_start $SOCK2 netinet6 gif
    127   1.1  knakahar 
    128   1.1  knakahar 	router1_lan=""
    129   1.1  knakahar 	router1_lan_mode=""
    130   1.1  knakahar 	router2_lan=""
    131   1.1  knakahar 	router2_lan_mode=""
    132   1.1  knakahar 	if [ ${inner} = "ipv6" ]; then
    133   1.1  knakahar 		router1_lan=$ROUTER1_LANIP6
    134   1.1  knakahar 		router1_lan_mode="ipv6"
    135   1.1  knakahar 		router2_lan=$ROUTER2_LANIP6
    136   1.1  knakahar 		router2_lan_mode="ipv6"
    137   1.1  knakahar 	else
    138   1.1  knakahar 		router1_lan=$ROUTER1_LANIP
    139   1.1  knakahar 		router1_lan_mode="ipv4"
    140   1.1  knakahar 		router2_lan=$ROUTER2_LANIP
    141   1.1  knakahar 		router2_lan_mode="ipv4"
    142   1.1  knakahar 	fi
    143   1.1  knakahar 
    144   1.1  knakahar 	if [ ${outer} = "ipv6" ]; then
    145   1.1  knakahar 		setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
    146   1.1  knakahar 			$ROUTER1_WANIP6 ipv6
    147   1.1  knakahar 		setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
    148   1.1  knakahar 			$ROUTER2_WANIP6 ipv6
    149   1.1  knakahar 	else
    150   1.1  knakahar 		setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
    151   1.1  knakahar 			$ROUTER1_WANIP ipv4
    152   1.1  knakahar 		setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
    153   1.1  knakahar 			$ROUTER2_WANIP ipv4
    154   1.1  knakahar 	fi
    155   1.1  knakahar }
    156   1.1  knakahar 
    157   1.1  knakahar test_setup()
    158   1.1  knakahar {
    159   1.1  knakahar 	inner=${1}
    160   1.1  knakahar 	outer=${2}
    161   1.1  knakahar 
    162   1.1  knakahar 	router1_lan=""
    163   1.1  knakahar 	router1_lan_mode=""
    164   1.1  knakahar 	router2_lan=""
    165   1.1  knakahar 	router2_lan_mode=""
    166   1.1  knakahar 	if [ ${inner} = "ipv6" ]; then
    167   1.1  knakahar 		router1_lan=$ROUTER1_LANIP6
    168   1.1  knakahar 		router1_lan_mode="ipv6"
    169   1.1  knakahar 		router2_lan=$ROUTER2_LANIP6
    170   1.1  knakahar 		router2_lan_mode="ipv6"
    171   1.1  knakahar 	else
    172   1.1  knakahar 		router1_lan=$ROUTER1_LANIP
    173   1.1  knakahar 		router1_lan_mode="ipv4"
    174   1.1  knakahar 		router2_lan=$ROUTER2_LANIP
    175   1.1  knakahar 		router2_lan_mode="ipv4"
    176   1.1  knakahar 	fi
    177   1.1  knakahar 	if [ ${outer} = "ipv6" ]; then
    178   1.1  knakahar 		test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
    179   1.1  knakahar 			$ROUTER1_WANIP6 ipv6
    180   1.1  knakahar 		test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
    181   1.1  knakahar 			$ROUTER2_WANIP6 ipv6
    182   1.1  knakahar 	else
    183   1.1  knakahar 		test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
    184   1.1  knakahar 			$ROUTER1_WANIP ipv4
    185   1.1  knakahar 		test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
    186   1.1  knakahar 			$ROUTER2_WANIP ipv4
    187   1.1  knakahar 	fi
    188   1.1  knakahar }
    189   1.1  knakahar 
    190   1.1  knakahar setup_if_gif()
    191   1.1  knakahar {
    192   1.1  knakahar 	sock=${1}
    193   1.1  knakahar 	addr=${2}
    194   1.1  knakahar 	remote=${3}
    195   1.1  knakahar 	inner=${4}
    196   1.1  knakahar 	src=${5}
    197   1.1  knakahar 	dst=${6}
    198   1.1  knakahar 	peernet=${7}
    199   1.1  knakahar 
    200   1.1  knakahar 	export RUMP_SERVER=${sock}
    201   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig gif0 create
    202   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig gif0 tunnel ${src} ${dst}
    203   1.1  knakahar 	if [ ${inner} = "ipv6" ]; then
    204   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig gif0 inet6 ${addr}/128 ${remote}
    205   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.route add -inet6 ${peernet} ${addr}
    206   1.1  knakahar 	else
    207   1.1  knakahar 		atf_check -s exit:0 rump.ifconfig gif0 inet ${addr}/32 ${remote}
    208   1.1  knakahar 		atf_check -s exit:0 -o ignore rump.route add -inet ${peernet} ${addr}
    209   1.1  knakahar 	fi
    210   1.1  knakahar 
    211   1.1  knakahar 	rump.ifconfig gif0
    212   1.1  knakahar 	rump.route -nL show
    213   1.1  knakahar }
    214   1.1  knakahar 
    215   1.1  knakahar setup_tunnel()
    216   1.1  knakahar {
    217   1.1  knakahar 	inner=${1}
    218   1.1  knakahar 	outer=${2}
    219   1.1  knakahar 
    220   1.1  knakahar 	addr=""
    221   1.1  knakahar 	remote=""
    222   1.1  knakahar 	src=""
    223   1.1  knakahar 	dst=""
    224   1.1  knakahar 	peernet=""
    225   1.1  knakahar 
    226   1.1  knakahar 	if [ ${inner} = "ipv6" ]; then
    227   1.1  knakahar 		addr=$ROUTER1_GIFIP6
    228   1.1  knakahar 		remote=$ROUTER2_GIFIP6
    229   1.1  knakahar 		peernet=$ROUTER2_LANNET6
    230   1.1  knakahar 	else
    231   1.1  knakahar 		addr=$ROUTER1_GIFIP
    232   1.1  knakahar 		remote=$ROUTER2_GIFIP
    233   1.1  knakahar 		peernet=$ROUTER2_LANNET
    234   1.1  knakahar 	fi
    235   1.1  knakahar 	if [ ${outer} = "ipv6" ]; then
    236   1.1  knakahar 		src=$ROUTER1_WANIP6
    237   1.1  knakahar 		dst=$ROUTER2_WANIP6
    238   1.1  knakahar 	else
    239   1.1  knakahar 		src=$ROUTER1_WANIP
    240   1.1  knakahar 		dst=$ROUTER2_WANIP
    241   1.1  knakahar 	fi
    242   1.1  knakahar 	setup_if_gif $SOCK1 ${addr} ${remote} ${inner} \
    243   1.1  knakahar 		     ${src} ${dst} ${peernet}
    244   1.1  knakahar 
    245   1.1  knakahar 	if [ $inner = "ipv6" ]; then
    246   1.1  knakahar 		addr=$ROUTER2_GIFIP6
    247   1.1  knakahar 		remote=$ROUTER1_GIFIP6
    248   1.1  knakahar 		peernet=$ROUTER1_LANNET6
    249   1.1  knakahar 	else
    250   1.1  knakahar 		addr=$ROUTER2_GIFIP
    251   1.1  knakahar 		remote=$ROUTER1_GIFIP
    252   1.1  knakahar 		peernet=$ROUTER1_LANNET
    253   1.1  knakahar 	fi
    254   1.1  knakahar 	if [ $outer = "ipv6" ]; then
    255   1.1  knakahar 		src=$ROUTER2_WANIP6
    256   1.1  knakahar 		dst=$ROUTER1_WANIP6
    257   1.1  knakahar 	else
    258   1.1  knakahar 		src=$ROUTER2_WANIP
    259   1.1  knakahar 		dst=$ROUTER1_WANIP
    260   1.1  knakahar 	fi
    261   1.1  knakahar 	setup_if_gif $SOCK2 ${addr} ${remote} ${inner} \
    262   1.1  knakahar 		     ${src} ${dst} ${peernet}
    263   1.1  knakahar }
    264   1.1  knakahar 
    265   1.1  knakahar test_setup_tunnel()
    266   1.1  knakahar {
    267   1.1  knakahar 	mode=${1}
    268   1.1  knakahar 
    269   1.1  knakahar 	peernet=""
    270   1.1  knakahar 	opt=""
    271   1.2  knakahar 	if [ ${mode} = "ipv6" ]; then
    272   1.1  knakahar 		peernet=$ROUTER2_LANNET6
    273   1.1  knakahar 		opt="-inet6"
    274   1.1  knakahar 	else
    275   1.1  knakahar 		peernet=$ROUTER2_LANNET
    276   1.1  knakahar 		opt="-inet"
    277   1.1  knakahar 	fi
    278   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    279   1.1  knakahar 	atf_check -s exit:0 -o match:gif0 rump.ifconfig
    280   1.1  knakahar 	atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
    281   1.1  knakahar 
    282   1.2  knakahar 	if [ ${mode} = "ipv6" ]; then
    283   1.1  knakahar 		peernet=$ROUTER1_LANNET6
    284   1.1  knakahar 		opt="-inet6"
    285   1.1  knakahar 	else
    286   1.1  knakahar 		peernet=$ROUTER1_LANNET
    287   1.1  knakahar 		opt="-inet"
    288   1.1  knakahar 	fi
    289   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    290   1.1  knakahar 	atf_check -s exit:0 -o match:gif0 rump.ifconfig
    291   1.1  knakahar 	atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
    292   1.1  knakahar }
    293   1.1  knakahar 
    294   1.1  knakahar teardown_tunnel()
    295   1.1  knakahar {
    296   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    297   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
    298   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig gif0 destroy
    299   1.1  knakahar 
    300   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    301   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
    302   1.1  knakahar 	atf_check -s exit:0 rump.ifconfig gif0 destroy
    303   1.1  knakahar }
    304   1.1  knakahar 
    305   1.3  knakahar setup_dummy_if_gif()
    306   1.3  knakahar {
    307   1.3  knakahar 	sock=${1}
    308   1.3  knakahar 	addr=${2}
    309   1.3  knakahar 	remote=${3}
    310   1.3  knakahar 	inner=${4}
    311   1.3  knakahar 	src=${5}
    312   1.3  knakahar 	dst=${6}
    313   1.3  knakahar 
    314   1.3  knakahar 	export RUMP_SERVER=${sock}
    315   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig gif1 create
    316   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig gif1 tunnel ${src} ${dst}
    317   1.3  knakahar 	if [ ${inner} = "ipv6" ]; then
    318   1.3  knakahar 		atf_check -s exit:0 rump.ifconfig gif1 inet6 ${addr}/128 ${remote}
    319   1.3  knakahar 	else
    320   1.3  knakahar 		atf_check -s exit:0 rump.ifconfig gif1 inet ${addr}/32 ${remote}
    321   1.3  knakahar 	fi
    322   1.3  knakahar 
    323   1.3  knakahar 	rump.ifconfig gif1
    324   1.3  knakahar }
    325   1.3  knakahar 
    326   1.3  knakahar setup_dummy_tunnel()
    327   1.3  knakahar {
    328   1.3  knakahar 	inner=${1}
    329   1.3  knakahar 	outer=${2}
    330   1.3  knakahar 
    331   1.3  knakahar 	addr=""
    332   1.3  knakahar 	remote=""
    333   1.3  knakahar 	src=""
    334   1.3  knakahar 	dst=""
    335   1.3  knakahar 
    336   1.3  knakahar 	if [ ${inner} = "ipv6" ]; then
    337   1.3  knakahar 		addr=$ROUTER1_GIFIP6_DUMMY
    338   1.3  knakahar 		remote=$ROUTER2_GIFIP6_DUMMY
    339   1.3  knakahar 	else
    340   1.3  knakahar 		addr=$ROUTER1_GIFIP_DUMMY
    341   1.3  knakahar 		remote=$ROUTER2_GIFIP_DUMMY
    342   1.3  knakahar 	fi
    343   1.3  knakahar 	if [ ${outer} = "ipv6" ]; then
    344   1.3  knakahar 		src=$ROUTER1_WANIP6_DUMMY
    345   1.3  knakahar 		dst=$ROUTER2_WANIP6_DUMMY
    346   1.3  knakahar 	else
    347   1.3  knakahar 		src=$ROUTER1_WANIP_DUMMY
    348   1.3  knakahar 		dst=$ROUTER2_WANIP_DUMMY
    349   1.3  knakahar 	fi
    350   1.3  knakahar 	setup_dummy_if_gif $SOCK1 ${addr} ${remote} ${inner} \
    351   1.3  knakahar 			   ${src} ${dst}
    352   1.3  knakahar 
    353   1.3  knakahar 	if [ $inner = "ipv6" ]; then
    354   1.3  knakahar 		addr=$ROUTER2_GIFIP6_DUMMY
    355   1.3  knakahar 		remote=$ROUTER1_GIFIP6_DUMMY
    356   1.3  knakahar 	else
    357   1.3  knakahar 		addr=$ROUTER2_GIFIP_DUMMY
    358   1.3  knakahar 		remote=$ROUTER1_GIFIP_DUMMY
    359   1.3  knakahar 	fi
    360   1.3  knakahar 	if [ $outer = "ipv6" ]; then
    361   1.3  knakahar 		src=$ROUTER2_WANIP6_DUMMY
    362   1.3  knakahar 		dst=$ROUTER1_WANIP6_DUMMY
    363   1.3  knakahar 	else
    364   1.3  knakahar 		src=$ROUTER2_WANIP_DUMMY
    365   1.3  knakahar 		dst=$ROUTER1_WANIP_DUMMY
    366   1.3  knakahar 	fi
    367   1.3  knakahar 	setup_dummy_if_gif $SOCK2 ${addr} ${remote} ${inner} \
    368   1.3  knakahar 			   ${src} ${dst}
    369   1.3  knakahar }
    370   1.3  knakahar 
    371   1.3  knakahar test_setup_dummy_tunnel()
    372   1.3  knakahar {
    373   1.3  knakahar 	export RUMP_SERVER=$SOCK1
    374   1.3  knakahar 	atf_check -s exit:0 -o match:gif1 rump.ifconfig
    375   1.3  knakahar 
    376   1.3  knakahar 	export RUMP_SERVER=$SOCK2
    377   1.3  knakahar 	atf_check -s exit:0 -o match:gif1 rump.ifconfig
    378   1.3  knakahar }
    379   1.3  knakahar 
    380   1.3  knakahar teardown_dummy_tunnel()
    381   1.3  knakahar {
    382   1.3  knakahar 	export RUMP_SERVER=$SOCK1
    383   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
    384   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig gif1 destroy
    385   1.3  knakahar 
    386   1.3  knakahar 	export RUMP_SERVER=$SOCK2
    387   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
    388   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig gif1 destroy
    389   1.3  knakahar }
    390   1.3  knakahar 
    391   1.3  knakahar setup_recursive_if_gif()
    392   1.3  knakahar {
    393   1.3  knakahar 	sock=${1}
    394   1.3  knakahar 	gif=${2}
    395   1.3  knakahar 	addr=${3}
    396   1.3  knakahar 	remote=${4}
    397   1.3  knakahar 	inner=${5}
    398   1.3  knakahar 	src=${6}
    399   1.3  knakahar 	dst=${7}
    400   1.3  knakahar 
    401   1.3  knakahar 	export RUMP_SERVER=${sock}
    402   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig ${gif} create
    403   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig ${gif} tunnel ${src} ${dst}
    404   1.3  knakahar 	if [ ${inner} = "ipv6" ]; then
    405   1.3  knakahar 		atf_check -s exit:0 rump.ifconfig ${gif} inet6 ${addr}/128 ${remote}
    406   1.3  knakahar 	else
    407   1.3  knakahar 		atf_check -s exit:0 rump.ifconfig ${gif} inet ${addr}/32 ${remote}
    408   1.3  knakahar 	fi
    409   1.3  knakahar 
    410   1.3  knakahar 	rump.ifconfig ${gif}
    411   1.3  knakahar }
    412   1.3  knakahar 
    413   1.3  knakahar # test in ROUTER1 only
    414   1.3  knakahar setup_recursive_tunnels()
    415   1.3  knakahar {
    416   1.3  knakahar 	mode=${1}
    417   1.3  knakahar 
    418   1.3  knakahar 	addr=""
    419   1.3  knakahar 	remote=""
    420   1.3  knakahar 	src=""
    421   1.3  knakahar 	dst=""
    422   1.3  knakahar 
    423   1.3  knakahar 	if [ ${mode} = "ipv6" ]; then
    424   1.3  knakahar 		addr=$ROUTER1_GIFIP6_RECURSIVE1
    425   1.3  knakahar 		remote=$ROUTER2_GIFIP6_RECURSIVE1
    426   1.3  knakahar 		src=$ROUTER1_GIFIP6
    427   1.3  knakahar 		dst=$ROUTER2_GIFIP6
    428   1.3  knakahar 	else
    429   1.3  knakahar 		addr=$ROUTER1_GIFIP_RECURSIVE1
    430   1.3  knakahar 		remote=$ROUTER2_GIFIP_RECURSIVE1
    431   1.3  knakahar 		src=$ROUTER1_GIFIP
    432   1.3  knakahar 		dst=$ROUTER2_GIFIP
    433   1.3  knakahar 	fi
    434   1.3  knakahar 	setup_recursive_if_gif $SOCK1 gif1 ${addr} ${remote} ${mode} \
    435   1.3  knakahar 		      ${src} ${dst}
    436   1.3  knakahar 
    437   1.3  knakahar 	if [ ${mode} = "ipv6" ]; then
    438   1.3  knakahar 		addr=$ROUTER1_GIFIP6_RECURSIVE2
    439   1.3  knakahar 		remote=$ROUTER2_GIFIP6_RECURSIVE2
    440   1.3  knakahar 		src=$ROUTER1_GIFIP6_RECURSIVE1
    441   1.3  knakahar 		dst=$ROUTER2_GIFIP6_RECURSIVE1
    442   1.3  knakahar 	else
    443   1.3  knakahar 		addr=$ROUTER1_GIFIP_RECURSIVE2
    444   1.3  knakahar 		remote=$ROUTER2_GIFIP_RECURSIVE2
    445   1.3  knakahar 		src=$ROUTER1_GIFIP_RECURSIVE1
    446   1.3  knakahar 		dst=$ROUTER2_GIFIP_RECURSIVE1
    447   1.3  knakahar 	fi
    448   1.3  knakahar 	setup_recursive_if_gif $SOCK1 gif2 ${addr} ${remote} ${mode} \
    449   1.3  knakahar 		      ${src} ${dst}
    450   1.3  knakahar }
    451   1.3  knakahar 
    452   1.3  knakahar # test in router1 only
    453   1.3  knakahar test_recursive_check()
    454   1.3  knakahar {
    455   1.3  knakahar 	mode=$1
    456   1.3  knakahar 
    457   1.3  knakahar 	export RUMP_SERVER=$SOCK1
    458   1.3  knakahar 	if [ ${mode} = "ipv6" ]; then
    459   1.3  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    460   1.3  knakahar 			rump.ping6 -n -X $TIMEOUT -c 1 $ROUTER2_GIFIP6_RECURSIVE2
    461   1.3  knakahar 	else
    462   1.3  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    463   1.3  knakahar 			rump.ping -n -w $TIMEOUT -c 1 $ROUTER2_GIFIP_RECURSIVE2
    464   1.3  knakahar 	fi
    465   1.3  knakahar 
    466   1.3  knakahar 	atf_check -o match:'gif0: recursively called too many times' \
    467   1.3  knakahar 		-x "$HIJACKING dmesg"
    468   1.3  knakahar 
    469   1.3  knakahar 	$HIJACKING dmesg
    470   1.3  knakahar }
    471   1.3  knakahar 
    472   1.3  knakahar teardown_recursive_tunnels()
    473   1.3  knakahar {
    474   1.3  knakahar 	export RUMP_SERVER=$SOCK1
    475   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
    476   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig gif1 destroy
    477   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig gif2 deletetunnel
    478   1.3  knakahar 	atf_check -s exit:0 rump.ifconfig gif2 destroy
    479   1.3  knakahar }
    480   1.3  knakahar 
    481   1.1  knakahar test_ping_failure()
    482   1.1  knakahar {
    483   1.1  knakahar 	mode=$1
    484   1.1  knakahar 
    485   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    486   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    487   1.1  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    488   1.1  knakahar 			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
    489   1.1  knakahar 			$ROUTER2_LANIP6
    490   1.1  knakahar 	else
    491   1.1  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    492   1.1  knakahar 			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
    493   1.1  knakahar 			$ROUTER2_LANIP
    494   1.1  knakahar 	fi
    495   1.1  knakahar 
    496   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    497   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    498   1.1  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    499   1.1  knakahar 			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
    500   1.1  knakahar 			$ROUTER1_LANIP6
    501   1.1  knakahar 	else
    502   1.1  knakahar 		atf_check -s not-exit:0 -o ignore -e ignore \
    503   1.1  knakahar 			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
    504   1.1  knakahar 			$ROUTER2_LANIP
    505   1.1  knakahar 	fi
    506   1.1  knakahar }
    507   1.1  knakahar 
    508   1.1  knakahar test_ping_success()
    509   1.1  knakahar {
    510   1.1  knakahar 	mode=$1
    511   1.1  knakahar 
    512   1.1  knakahar 	export RUMP_SERVER=$SOCK1
    513   1.1  knakahar 	rump.ifconfig -v gif0
    514   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    515   1.1  knakahar 		# XXX
    516   1.1  knakahar 		# rump.ping6 rarely fails with the message that
    517   1.1  knakahar 		# "failed to get receiving hop limit".
    518   1.1  knakahar 		# This is a known issue being analyzed.
    519   1.1  knakahar 		atf_check -s exit:0 -o ignore \
    520   1.1  knakahar 			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
    521   1.1  knakahar 			$ROUTER2_LANIP6
    522   1.1  knakahar 	else
    523   1.1  knakahar 		atf_check -s exit:0 -o ignore \
    524   1.1  knakahar 			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
    525   1.1  knakahar 			$ROUTER2_LANIP
    526   1.1  knakahar 	fi
    527   1.1  knakahar 	rump.ifconfig -v gif0
    528   1.1  knakahar 
    529   1.1  knakahar 	export RUMP_SERVER=$SOCK2
    530   1.1  knakahar 	rump.ifconfig -v gif0
    531   1.1  knakahar 	if [ ${mode} = "ipv6" ]; then
    532   1.1  knakahar 		atf_check -s exit:0 -o ignore \
    533   1.1  knakahar 			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
    534   1.1  knakahar 			$ROUTER1_LANIP6
    535   1.1  knakahar 	else
    536   1.1  knakahar 		atf_check -s exit:0 -o ignore \
    537   1.1  knakahar 			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER2_LANIP \
    538   1.1  knakahar 			$ROUTER1_LANIP
    539   1.1  knakahar 	fi
    540   1.1  knakahar 	rump.ifconfig -v gif0
    541   1.1  knakahar }
    542   1.1  knakahar 
    543   1.3  knakahar test_change_tunnel_duplicate()
    544   1.3  knakahar {
    545   1.3  knakahar 	mode=$1
    546   1.3  knakahar 
    547   1.3  knakahar 	newsrc=""
    548   1.3  knakahar 	newdst=""
    549   1.3  knakahar 	if [ ${mode} = "ipv6" ]; then
    550   1.3  knakahar 		newsrc=$ROUTER1_WANIP6_DUMMY
    551   1.3  knakahar 		newdst=$ROUTER2_WANIP6_DUMMY
    552   1.3  knakahar 	else
    553   1.3  knakahar 		newsrc=$ROUTER1_WANIP_DUMMY
    554   1.3  knakahar 		newdst=$ROUTER2_WANIP_DUMMY
    555   1.3  knakahar 	fi
    556   1.3  knakahar 	export RUMP_SERVER=$SOCK1
    557   1.3  knakahar 	rump.ifconfig -v gif0
    558   1.3  knakahar 	rump.ifconfig -v gif1
    559   1.3  knakahar 	atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
    560   1.3  knakahar 		rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
    561   1.3  knakahar 	rump.ifconfig -v gif0
    562   1.3  knakahar 	rump.ifconfig -v gif1
    563   1.3  knakahar 
    564   1.3  knakahar 	if [ ${mode} = "ipv6" ]; then
    565   1.3  knakahar 		newsrc=$ROUTER2_WANIP6_DUMMY
    566   1.3  knakahar 		newdst=$ROUTER1_WANIP6_DUMMY
    567   1.3  knakahar 	else
    568   1.3  knakahar 		newsrc=$ROUTER2_WANIP_DUMMY
    569   1.3  knakahar 		newdst=$ROUTER1_WANIP_DUMMY
    570   1.3  knakahar 	fi
    571   1.3  knakahar 	export RUMP_SERVER=$SOCK2
    572   1.3  knakahar 	rump.ifconfig -v gif0
    573   1.3  knakahar 	rump.ifconfig -v gif1
    574   1.3  knakahar 	atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
    575   1.3  knakahar 		rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
    576   1.3  knakahar 	rump.ifconfig -v gif0
    577   1.3  knakahar 	rump.ifconfig -v gif1
    578   1.3  knakahar }
    579   1.3  knakahar 
    580   1.3  knakahar test_change_tunnel_success()
    581   1.3  knakahar {
    582   1.3  knakahar 	mode=$1
    583   1.3  knakahar 
    584   1.3  knakahar 	newsrc=""
    585   1.3  knakahar 	newdst=""
    586   1.3  knakahar 	if [ ${mode} = "ipv6" ]; then
    587   1.3  knakahar 		newsrc=$ROUTER1_WANIP6_DUMMY
    588   1.3  knakahar 		newdst=$ROUTER2_WANIP6_DUMMY
    589   1.3  knakahar 	else
    590   1.3  knakahar 		newsrc=$ROUTER1_WANIP_DUMMY
    591   1.3  knakahar 		newdst=$ROUTER2_WANIP_DUMMY
    592   1.3  knakahar 	fi
    593   1.3  knakahar 	export RUMP_SERVER=$SOCK1
    594   1.3  knakahar 	rump.ifconfig -v gif0
    595   1.3  knakahar 	atf_check -s exit:0 \
    596   1.3  knakahar 		rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
    597   1.3  knakahar 	rump.ifconfig -v gif0
    598   1.3  knakahar 
    599   1.3  knakahar 	if [ ${mode} = "ipv6" ]; then
    600   1.3  knakahar 		newsrc=$ROUTER2_WANIP6_DUMMY
    601   1.3  knakahar 		newdst=$ROUTER1_WANIP6_DUMMY
    602   1.3  knakahar 	else
    603   1.3  knakahar 		newsrc=$ROUTER2_WANIP_DUMMY
    604   1.3  knakahar 		newdst=$ROUTER1_WANIP_DUMMY
    605   1.3  knakahar 	fi
    606   1.3  knakahar 	export RUMP_SERVER=$SOCK2
    607   1.3  knakahar 	rump.ifconfig -v gif0
    608   1.3  knakahar 	atf_check -s exit:0 \
    609   1.3  knakahar 		rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
    610   1.3  knakahar 	rump.ifconfig -v gif0
    611   1.3  knakahar }
    612   1.3  knakahar 
    613   1.4  knakahar basic_setup()
    614   1.1  knakahar {
    615   1.4  knakahar 	inner=$1
    616   1.4  knakahar 	outer=$2
    617   1.1  knakahar 
    618   1.4  knakahar 	setup ${inner} ${outer}
    619   1.4  knakahar 	test_setup ${inner} ${outer}
    620   1.1  knakahar 
    621   1.1  knakahar 	# Enable once PR kern/49219 is fixed
    622   1.1  knakahar 	#test_ping_failure
    623   1.1  knakahar 
    624   1.4  knakahar 	setup_tunnel ${inner} ${outer}
    625   1.1  knakahar 	sleep 1
    626   1.4  knakahar 	test_setup_tunnel ${inner}
    627   1.1  knakahar }
    628   1.1  knakahar 
    629   1.4  knakahar basic_test()
    630   1.1  knakahar {
    631   1.4  knakahar 	inner=$1
    632   1.4  knakahar 	outer=$2 # not use
    633   1.1  knakahar 
    634   1.4  knakahar 	test_ping_success ${inner}
    635   1.1  knakahar }
    636   1.1  knakahar 
    637   1.4  knakahar basic_teardown()
    638   1.1  knakahar {
    639   1.4  knakahar 	inner=$1
    640   1.4  knakahar 	outer=$2 # not use
    641   1.1  knakahar 
    642   1.1  knakahar 	teardown_tunnel
    643   1.4  knakahar 	test_ping_failure ${inner}
    644   1.1  knakahar }
    645   1.1  knakahar 
    646   1.4  knakahar ioctl_setup()
    647   1.1  knakahar {
    648   1.4  knakahar 	inner=$1
    649   1.4  knakahar 	outer=$2
    650   1.3  knakahar 
    651   1.4  knakahar 	setup ${inner} ${outer}
    652   1.4  knakahar 	test_setup ${inner} ${outer}
    653   1.3  knakahar 
    654   1.3  knakahar 	# Enable once PR kern/49219 is fixed
    655   1.3  knakahar 	#test_ping_failure
    656   1.3  knakahar 
    657   1.4  knakahar 	setup_tunnel ${inner} ${outer}
    658   1.4  knakahar 	setup_dummy_tunnel ${inner} ${outer}
    659   1.3  knakahar 	sleep 1
    660   1.4  knakahar 	test_setup_tunnel ${inner}
    661   1.3  knakahar }
    662   1.3  knakahar 
    663   1.4  knakahar ioctl_test()
    664   1.3  knakahar {
    665   1.4  knakahar 	inner=$1
    666   1.4  knakahar 	outer=$2
    667   1.3  knakahar 
    668   1.4  knakahar 	test_ping_success ${inner}
    669   1.3  knakahar 
    670   1.4  knakahar 	test_change_tunnel_duplicate ${outer}
    671   1.3  knakahar 
    672   1.3  knakahar 	teardown_dummy_tunnel
    673   1.4  knakahar 	test_change_tunnel_success ${outer}
    674   1.3  knakahar }
    675   1.3  knakahar 
    676   1.4  knakahar ioctl_teardown()
    677   1.3  knakahar {
    678   1.4  knakahar 	inner=$1
    679   1.4  knakahar 	outer=$2 # not use
    680   1.3  knakahar 
    681   1.3  knakahar 	teardown_tunnel
    682   1.4  knakahar 	test_ping_failure ${inner}
    683   1.3  knakahar }
    684   1.3  knakahar 
    685   1.4  knakahar recursive_setup()
    686   1.3  knakahar {
    687   1.4  knakahar 	inner=$1
    688   1.4  knakahar 	outer=$2
    689   1.3  knakahar 
    690   1.4  knakahar 	setup ${inner} ${outer}
    691   1.4  knakahar 	test_setup ${inner} ${outer}
    692   1.3  knakahar 
    693   1.3  knakahar 	# Enable once PR kern/49219 is fixed
    694   1.3  knakahar 	#test_ping_failure
    695   1.3  knakahar 
    696   1.4  knakahar 	setup_tunnel ${inner} ${outer}
    697   1.4  knakahar 	setup_recursive_tunnels ${inner}
    698   1.3  knakahar 	sleep 1
    699   1.4  knakahar 	test_setup_tunnel ${inner}
    700   1.3  knakahar }
    701   1.3  knakahar 
    702   1.4  knakahar recursive_test()
    703   1.3  knakahar {
    704   1.4  knakahar 	inner=$1
    705   1.4  knakahar 	outer=$2 # not use
    706   1.3  knakahar 
    707   1.4  knakahar 	test_recursive_check ${inner}
    708   1.3  knakahar }
    709   1.3  knakahar 
    710   1.4  knakahar recursive_teardown()
    711   1.3  knakahar {
    712   1.4  knakahar 	inner=$1 # not use
    713   1.4  knakahar 	outer=$2 # not use
    714   1.3  knakahar 
    715   1.3  knakahar 	teardown_recursive_tunnels
    716   1.3  knakahar 	teardown_tunnel
    717   1.3  knakahar }
    718   1.3  knakahar 
    719   1.4  knakahar add_test()
    720   1.3  knakahar {
    721   1.4  knakahar 	category=$1
    722   1.4  knakahar 	desc=$2
    723   1.4  knakahar 	inner=$3
    724   1.4  knakahar 	outer=$4
    725   1.4  knakahar 
    726   1.6     ozaki 	name="gif_${category}_${inner}over${outer}"
    727   1.4  knakahar 	fulldesc="Does ${inner} over ${outer} if_gif ${desc}"
    728   1.4  knakahar 
    729   1.4  knakahar 	atf_test_case ${name} cleanup
    730  1.11     ozaki 	eval "${name}_head() {
    731  1.11     ozaki 			atf_set descr \"${fulldesc}\"
    732  1.11     ozaki 			atf_set require.progs rump_server
    733  1.11     ozaki 		}
    734  1.11     ozaki 	    ${name}_body() {
    735  1.11     ozaki 			${category}_setup ${inner} ${outer}
    736  1.11     ozaki 			${category}_test ${inner} ${outer}
    737  1.11     ozaki 			${category}_teardown ${inner} ${outer}
    738  1.11     ozaki 			rump_server_destroy_ifaces
    739  1.11     ozaki 	    }
    740  1.11     ozaki 	    ${name}_cleanup() {
    741  1.11     ozaki 			\$DEBUG && dump
    742  1.11     ozaki 			cleanup
    743   1.4  knakahar 		}"
    744   1.4  knakahar 	atf_add_test_case ${name}
    745   1.4  knakahar }
    746   1.4  knakahar 
    747   1.4  knakahar add_test_allproto()
    748   1.4  knakahar {
    749   1.4  knakahar 	category=$1
    750   1.4  knakahar 	desc=$2
    751   1.4  knakahar 
    752   1.4  knakahar 	add_test ${category} "${desc}" ipv4 ipv4
    753   1.4  knakahar 	add_test ${category} "${desc}" ipv4 ipv6
    754   1.4  knakahar 	add_test ${category} "${desc}" ipv6 ipv4
    755   1.4  knakahar 	add_test ${category} "${desc}" ipv6 ipv6
    756   1.3  knakahar }
    757   1.3  knakahar 
    758   1.1  knakahar atf_init_test_cases()
    759   1.1  knakahar {
    760   1.4  knakahar 	add_test_allproto basic "basic tests"
    761   1.4  knakahar 	add_test_allproto ioctl "ioctl tests"
    762   1.4  knakahar 	add_test_allproto recursive "recursive check tests"
    763   1.1  knakahar }
    764