1*cdebaff8SEnji Cooper# $NetBSD: t_gif.sh,v 1.9 2016/12/21 09:46:39 ozaki-r Exp $ 2640235e2SEnji Cooper# 3640235e2SEnji Cooper# Copyright (c) 2015 Internet Initiative Japan Inc. 4640235e2SEnji Cooper# All rights reserved. 5640235e2SEnji Cooper# 6640235e2SEnji Cooper# Redistribution and use in source and binary forms, with or without 7640235e2SEnji Cooper# modification, are permitted provided that the following conditions 8640235e2SEnji Cooper# are met: 9640235e2SEnji Cooper# 1. Redistributions of source code must retain the above copyright 10640235e2SEnji Cooper# notice, this list of conditions and the following disclaimer. 11640235e2SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright 12640235e2SEnji Cooper# notice, this list of conditions and the following disclaimer in the 13640235e2SEnji Cooper# documentation and/or other materials provided with the distribution. 14640235e2SEnji Cooper# 15640235e2SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16640235e2SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17640235e2SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18640235e2SEnji Cooper# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19640235e2SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20640235e2SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21640235e2SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22640235e2SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23640235e2SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24640235e2SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25640235e2SEnji Cooper# POSSIBILITY OF SUCH DAMAGE. 26640235e2SEnji Cooper# 27640235e2SEnji Cooper 28640235e2SEnji CooperSOCK1=unix://commsock1 # for ROUTER1 29640235e2SEnji CooperSOCK2=unix://commsock2 # for ROUTER2 30640235e2SEnji CooperROUTER1_LANIP=192.168.1.1 31640235e2SEnji CooperROUTER1_LANNET=192.168.1.0/24 32640235e2SEnji CooperROUTER1_WANIP=10.0.0.1 33640235e2SEnji CooperROUTER1_GIFIP=172.16.1.1 34640235e2SEnji CooperROUTER1_WANIP_DUMMY=10.0.0.11 35640235e2SEnji CooperROUTER1_GIFIP_DUMMY=172.16.11.1 36640235e2SEnji CooperROUTER1_GIFIP_RECURSIVE1=172.16.101.1 37640235e2SEnji CooperROUTER1_GIFIP_RECURSIVE2=172.16.201.1 38640235e2SEnji CooperROUTER2_LANIP=192.168.2.1 39640235e2SEnji CooperROUTER2_LANNET=192.168.2.0/24 40640235e2SEnji CooperROUTER2_WANIP=10.0.0.2 41640235e2SEnji CooperROUTER2_GIFIP=172.16.2.1 42640235e2SEnji CooperROUTER2_WANIP_DUMMY=10.0.0.12 43640235e2SEnji CooperROUTER2_GIFIP_DUMMY=172.16.12.1 44640235e2SEnji CooperROUTER2_GIFIP_RECURSIVE1=172.16.102.1 45640235e2SEnji CooperROUTER2_GIFIP_RECURSIVE2=172.16.202.1 46640235e2SEnji Cooper 47640235e2SEnji CooperROUTER1_LANIP6=fc00:1::1 48640235e2SEnji CooperROUTER1_LANNET6=fc00:1::/64 49640235e2SEnji CooperROUTER1_WANIP6=fc00::1 50640235e2SEnji CooperROUTER1_GIFIP6=fc00:3::1 51640235e2SEnji CooperROUTER1_WANIP6_DUMMY=fc00::11 52640235e2SEnji CooperROUTER1_GIFIP6_DUMMY=fc00:13::1 53640235e2SEnji CooperROUTER1_GIFIP6_RECURSIVE1=fc00:103::1 54640235e2SEnji CooperROUTER1_GIFIP6_RECURSIVE2=fc00:203::1 55640235e2SEnji CooperROUTER2_LANIP6=fc00:2::1 56640235e2SEnji CooperROUTER2_LANNET6=fc00:2::/64 57640235e2SEnji CooperROUTER2_WANIP6=fc00::2 58640235e2SEnji CooperROUTER2_GIFIP6=fc00:4::1 59640235e2SEnji CooperROUTER2_WANIP6_DUMMY=fc00::12 60640235e2SEnji CooperROUTER2_GIFIP6_DUMMY=fc00:14::1 61640235e2SEnji CooperROUTER2_GIFIP6_RECURSIVE1=fc00:104::1 62640235e2SEnji CooperROUTER2_GIFIP6_RECURSIVE2=fc00:204::1 63640235e2SEnji Cooper 64*cdebaff8SEnji CooperDEBUG=${DEBUG:-true} 65640235e2SEnji CooperTIMEOUT=5 66640235e2SEnji Cooper 67640235e2SEnji Coopersetup_router() 68640235e2SEnji Cooper{ 69640235e2SEnji Cooper sock=${1} 70640235e2SEnji Cooper lan=${2} 71640235e2SEnji Cooper lan_mode=${3} 72640235e2SEnji Cooper wan=${4} 73640235e2SEnji Cooper wan_mode=${5} 74640235e2SEnji Cooper 75*cdebaff8SEnji Cooper rump_server_add_iface $sock shmif0 bus0 76*cdebaff8SEnji Cooper rump_server_add_iface $sock shmif1 bus1 77*cdebaff8SEnji Cooper 78640235e2SEnji Cooper export RUMP_SERVER=${sock} 79640235e2SEnji Cooper if [ ${lan_mode} = "ipv6" ]; then 80640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${lan} 81640235e2SEnji Cooper else 82640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet ${lan} netmask 0xffffff00 83640235e2SEnji Cooper fi 84640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 up 85640235e2SEnji Cooper rump.ifconfig shmif0 86640235e2SEnji Cooper 87640235e2SEnji Cooper if [ ${wan_mode} = "ipv6" ]; then 88640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${wan} 89640235e2SEnji Cooper else 90640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif1 inet ${wan} netmask 0xff000000 91640235e2SEnji Cooper fi 92640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif1 up 93640235e2SEnji Cooper rump.ifconfig shmif1 94640235e2SEnji Cooper} 95640235e2SEnji Cooper 96640235e2SEnji Coopertest_router() 97640235e2SEnji Cooper{ 98640235e2SEnji Cooper sock=${1} 99640235e2SEnji Cooper lan=${2} 100640235e2SEnji Cooper lan_mode=${3} 101640235e2SEnji Cooper wan=${4} 102640235e2SEnji Cooper wan_mode=${5} 103640235e2SEnji Cooper 104640235e2SEnji Cooper export RUMP_SERVER=${sock} 105640235e2SEnji Cooper atf_check -s exit:0 -o match:shmif0 rump.ifconfig 106640235e2SEnji Cooper if [ ${lan_mode} = "ipv6" ]; then 107640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${lan} 108640235e2SEnji Cooper else 109640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${lan} 110640235e2SEnji Cooper fi 111640235e2SEnji Cooper 112640235e2SEnji Cooper atf_check -s exit:0 -o match:shmif1 rump.ifconfig 113640235e2SEnji Cooper if [ ${wan_mode} = "ipv6" ]; then 114640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${wan} 115640235e2SEnji Cooper else 116640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${wan} 117640235e2SEnji Cooper fi 118640235e2SEnji Cooper} 119640235e2SEnji Cooper 120640235e2SEnji Coopersetup() 121640235e2SEnji Cooper{ 122640235e2SEnji Cooper inner=${1} 123640235e2SEnji Cooper outer=${2} 124640235e2SEnji Cooper 125*cdebaff8SEnji Cooper rump_server_start $SOCK1 netinet6 gif 126*cdebaff8SEnji Cooper rump_server_start $SOCK2 netinet6 gif 127640235e2SEnji Cooper 128640235e2SEnji Cooper router1_lan="" 129640235e2SEnji Cooper router1_lan_mode="" 130640235e2SEnji Cooper router2_lan="" 131640235e2SEnji Cooper router2_lan_mode="" 132640235e2SEnji Cooper if [ ${inner} = "ipv6" ]; then 133640235e2SEnji Cooper router1_lan=$ROUTER1_LANIP6 134640235e2SEnji Cooper router1_lan_mode="ipv6" 135640235e2SEnji Cooper router2_lan=$ROUTER2_LANIP6 136640235e2SEnji Cooper router2_lan_mode="ipv6" 137640235e2SEnji Cooper else 138640235e2SEnji Cooper router1_lan=$ROUTER1_LANIP 139640235e2SEnji Cooper router1_lan_mode="ipv4" 140640235e2SEnji Cooper router2_lan=$ROUTER2_LANIP 141640235e2SEnji Cooper router2_lan_mode="ipv4" 142640235e2SEnji Cooper fi 143640235e2SEnji Cooper 144640235e2SEnji Cooper if [ ${outer} = "ipv6" ]; then 145640235e2SEnji Cooper setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \ 146640235e2SEnji Cooper $ROUTER1_WANIP6 ipv6 147640235e2SEnji Cooper setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \ 148640235e2SEnji Cooper $ROUTER2_WANIP6 ipv6 149640235e2SEnji Cooper else 150640235e2SEnji Cooper setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \ 151640235e2SEnji Cooper $ROUTER1_WANIP ipv4 152640235e2SEnji Cooper setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \ 153640235e2SEnji Cooper $ROUTER2_WANIP ipv4 154640235e2SEnji Cooper fi 155640235e2SEnji Cooper} 156640235e2SEnji Cooper 157640235e2SEnji Coopertest_setup() 158640235e2SEnji Cooper{ 159640235e2SEnji Cooper inner=${1} 160640235e2SEnji Cooper outer=${2} 161640235e2SEnji Cooper 162640235e2SEnji Cooper router1_lan="" 163640235e2SEnji Cooper router1_lan_mode="" 164640235e2SEnji Cooper router2_lan="" 165640235e2SEnji Cooper router2_lan_mode="" 166640235e2SEnji Cooper if [ ${inner} = "ipv6" ]; then 167640235e2SEnji Cooper router1_lan=$ROUTER1_LANIP6 168640235e2SEnji Cooper router1_lan_mode="ipv6" 169640235e2SEnji Cooper router2_lan=$ROUTER2_LANIP6 170640235e2SEnji Cooper router2_lan_mode="ipv6" 171640235e2SEnji Cooper else 172640235e2SEnji Cooper router1_lan=$ROUTER1_LANIP 173640235e2SEnji Cooper router1_lan_mode="ipv4" 174640235e2SEnji Cooper router2_lan=$ROUTER2_LANIP 175640235e2SEnji Cooper router2_lan_mode="ipv4" 176640235e2SEnji Cooper fi 177640235e2SEnji Cooper if [ ${outer} = "ipv6" ]; then 178640235e2SEnji Cooper test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \ 179640235e2SEnji Cooper $ROUTER1_WANIP6 ipv6 180640235e2SEnji Cooper test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \ 181640235e2SEnji Cooper $ROUTER2_WANIP6 ipv6 182640235e2SEnji Cooper else 183640235e2SEnji Cooper test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \ 184640235e2SEnji Cooper $ROUTER1_WANIP ipv4 185640235e2SEnji Cooper test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \ 186640235e2SEnji Cooper $ROUTER2_WANIP ipv4 187640235e2SEnji Cooper fi 188640235e2SEnji Cooper} 189640235e2SEnji Cooper 190640235e2SEnji Coopersetup_if_gif() 191640235e2SEnji Cooper{ 192640235e2SEnji Cooper sock=${1} 193640235e2SEnji Cooper addr=${2} 194640235e2SEnji Cooper remote=${3} 195640235e2SEnji Cooper inner=${4} 196640235e2SEnji Cooper src=${5} 197640235e2SEnji Cooper dst=${6} 198640235e2SEnji Cooper peernet=${7} 199640235e2SEnji Cooper 200640235e2SEnji Cooper export RUMP_SERVER=${sock} 201640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif0 create 202640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif0 tunnel ${src} ${dst} 203640235e2SEnji Cooper if [ ${inner} = "ipv6" ]; then 204640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif0 inet6 ${addr}/128 ${remote} 205640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route add -inet6 ${peernet} ${addr} 206640235e2SEnji Cooper else 207640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif0 inet ${addr}/32 ${remote} 208640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route add -inet ${peernet} ${addr} 209640235e2SEnji Cooper fi 210640235e2SEnji Cooper 211640235e2SEnji Cooper rump.ifconfig gif0 212640235e2SEnji Cooper rump.route -nL show 213640235e2SEnji Cooper} 214640235e2SEnji Cooper 215640235e2SEnji Coopersetup_tunnel() 216640235e2SEnji Cooper{ 217640235e2SEnji Cooper inner=${1} 218640235e2SEnji Cooper outer=${2} 219640235e2SEnji Cooper 220640235e2SEnji Cooper addr="" 221640235e2SEnji Cooper remote="" 222640235e2SEnji Cooper src="" 223640235e2SEnji Cooper dst="" 224640235e2SEnji Cooper peernet="" 225640235e2SEnji Cooper 226640235e2SEnji Cooper if [ ${inner} = "ipv6" ]; then 227640235e2SEnji Cooper addr=$ROUTER1_GIFIP6 228640235e2SEnji Cooper remote=$ROUTER2_GIFIP6 229640235e2SEnji Cooper peernet=$ROUTER2_LANNET6 230640235e2SEnji Cooper else 231640235e2SEnji Cooper addr=$ROUTER1_GIFIP 232640235e2SEnji Cooper remote=$ROUTER2_GIFIP 233640235e2SEnji Cooper peernet=$ROUTER2_LANNET 234640235e2SEnji Cooper fi 235640235e2SEnji Cooper if [ ${outer} = "ipv6" ]; then 236640235e2SEnji Cooper src=$ROUTER1_WANIP6 237640235e2SEnji Cooper dst=$ROUTER2_WANIP6 238640235e2SEnji Cooper else 239640235e2SEnji Cooper src=$ROUTER1_WANIP 240640235e2SEnji Cooper dst=$ROUTER2_WANIP 241640235e2SEnji Cooper fi 242640235e2SEnji Cooper setup_if_gif $SOCK1 ${addr} ${remote} ${inner} \ 243640235e2SEnji Cooper ${src} ${dst} ${peernet} 244640235e2SEnji Cooper 245640235e2SEnji Cooper if [ $inner = "ipv6" ]; then 246640235e2SEnji Cooper addr=$ROUTER2_GIFIP6 247640235e2SEnji Cooper remote=$ROUTER1_GIFIP6 248640235e2SEnji Cooper peernet=$ROUTER1_LANNET6 249640235e2SEnji Cooper else 250640235e2SEnji Cooper addr=$ROUTER2_GIFIP 251640235e2SEnji Cooper remote=$ROUTER1_GIFIP 252640235e2SEnji Cooper peernet=$ROUTER1_LANNET 253640235e2SEnji Cooper fi 254640235e2SEnji Cooper if [ $outer = "ipv6" ]; then 255640235e2SEnji Cooper src=$ROUTER2_WANIP6 256640235e2SEnji Cooper dst=$ROUTER1_WANIP6 257640235e2SEnji Cooper else 258640235e2SEnji Cooper src=$ROUTER2_WANIP 259640235e2SEnji Cooper dst=$ROUTER1_WANIP 260640235e2SEnji Cooper fi 261640235e2SEnji Cooper setup_if_gif $SOCK2 ${addr} ${remote} ${inner} \ 262640235e2SEnji Cooper ${src} ${dst} ${peernet} 263640235e2SEnji Cooper} 264640235e2SEnji Cooper 265640235e2SEnji Coopertest_setup_tunnel() 266640235e2SEnji Cooper{ 267640235e2SEnji Cooper mode=${1} 268640235e2SEnji Cooper 269640235e2SEnji Cooper peernet="" 270640235e2SEnji Cooper opt="" 271640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 272640235e2SEnji Cooper peernet=$ROUTER2_LANNET6 273640235e2SEnji Cooper opt="-inet6" 274640235e2SEnji Cooper else 275640235e2SEnji Cooper peernet=$ROUTER2_LANNET 276640235e2SEnji Cooper opt="-inet" 277640235e2SEnji Cooper fi 278640235e2SEnji Cooper export RUMP_SERVER=$SOCK1 279640235e2SEnji Cooper atf_check -s exit:0 -o match:gif0 rump.ifconfig 280640235e2SEnji Cooper atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet} 281640235e2SEnji Cooper 282640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 283640235e2SEnji Cooper peernet=$ROUTER1_LANNET6 284640235e2SEnji Cooper opt="-inet6" 285640235e2SEnji Cooper else 286640235e2SEnji Cooper peernet=$ROUTER1_LANNET 287640235e2SEnji Cooper opt="-inet" 288640235e2SEnji Cooper fi 289640235e2SEnji Cooper export RUMP_SERVER=$SOCK2 290640235e2SEnji Cooper atf_check -s exit:0 -o match:gif0 rump.ifconfig 291640235e2SEnji Cooper atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet} 292640235e2SEnji Cooper} 293640235e2SEnji Cooper 294640235e2SEnji Cooperteardown_tunnel() 295640235e2SEnji Cooper{ 296640235e2SEnji Cooper export RUMP_SERVER=$SOCK1 297640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif0 deletetunnel 298640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif0 destroy 299640235e2SEnji Cooper 300640235e2SEnji Cooper export RUMP_SERVER=$SOCK2 301640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif0 deletetunnel 302640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif0 destroy 303640235e2SEnji Cooper} 304640235e2SEnji Cooper 305640235e2SEnji Coopersetup_dummy_if_gif() 306640235e2SEnji Cooper{ 307640235e2SEnji Cooper sock=${1} 308640235e2SEnji Cooper addr=${2} 309640235e2SEnji Cooper remote=${3} 310640235e2SEnji Cooper inner=${4} 311640235e2SEnji Cooper src=${5} 312640235e2SEnji Cooper dst=${6} 313640235e2SEnji Cooper 314640235e2SEnji Cooper export RUMP_SERVER=${sock} 315640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif1 create 316640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif1 tunnel ${src} ${dst} 317640235e2SEnji Cooper if [ ${inner} = "ipv6" ]; then 318640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif1 inet6 ${addr}/128 ${remote} 319640235e2SEnji Cooper else 320640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif1 inet ${addr}/32 ${remote} 321640235e2SEnji Cooper fi 322640235e2SEnji Cooper 323640235e2SEnji Cooper rump.ifconfig gif1 324640235e2SEnji Cooper} 325640235e2SEnji Cooper 326640235e2SEnji Coopersetup_dummy_tunnel() 327640235e2SEnji Cooper{ 328640235e2SEnji Cooper inner=${1} 329640235e2SEnji Cooper outer=${2} 330640235e2SEnji Cooper 331640235e2SEnji Cooper addr="" 332640235e2SEnji Cooper remote="" 333640235e2SEnji Cooper src="" 334640235e2SEnji Cooper dst="" 335640235e2SEnji Cooper 336640235e2SEnji Cooper if [ ${inner} = "ipv6" ]; then 337640235e2SEnji Cooper addr=$ROUTER1_GIFIP6_DUMMY 338640235e2SEnji Cooper remote=$ROUTER2_GIFIP6_DUMMY 339640235e2SEnji Cooper else 340640235e2SEnji Cooper addr=$ROUTER1_GIFIP_DUMMY 341640235e2SEnji Cooper remote=$ROUTER2_GIFIP_DUMMY 342640235e2SEnji Cooper fi 343640235e2SEnji Cooper if [ ${outer} = "ipv6" ]; then 344640235e2SEnji Cooper src=$ROUTER1_WANIP6_DUMMY 345640235e2SEnji Cooper dst=$ROUTER2_WANIP6_DUMMY 346640235e2SEnji Cooper else 347640235e2SEnji Cooper src=$ROUTER1_WANIP_DUMMY 348640235e2SEnji Cooper dst=$ROUTER2_WANIP_DUMMY 349640235e2SEnji Cooper fi 350640235e2SEnji Cooper setup_dummy_if_gif $SOCK1 ${addr} ${remote} ${inner} \ 351640235e2SEnji Cooper ${src} ${dst} 352640235e2SEnji Cooper 353640235e2SEnji Cooper if [ $inner = "ipv6" ]; then 354640235e2SEnji Cooper addr=$ROUTER2_GIFIP6_DUMMY 355640235e2SEnji Cooper remote=$ROUTER1_GIFIP6_DUMMY 356640235e2SEnji Cooper else 357640235e2SEnji Cooper addr=$ROUTER2_GIFIP_DUMMY 358640235e2SEnji Cooper remote=$ROUTER1_GIFIP_DUMMY 359640235e2SEnji Cooper fi 360640235e2SEnji Cooper if [ $outer = "ipv6" ]; then 361640235e2SEnji Cooper src=$ROUTER2_WANIP6_DUMMY 362640235e2SEnji Cooper dst=$ROUTER1_WANIP6_DUMMY 363640235e2SEnji Cooper else 364640235e2SEnji Cooper src=$ROUTER2_WANIP_DUMMY 365640235e2SEnji Cooper dst=$ROUTER1_WANIP_DUMMY 366640235e2SEnji Cooper fi 367640235e2SEnji Cooper setup_dummy_if_gif $SOCK2 ${addr} ${remote} ${inner} \ 368640235e2SEnji Cooper ${src} ${dst} 369640235e2SEnji Cooper} 370640235e2SEnji Cooper 371640235e2SEnji Coopertest_setup_dummy_tunnel() 372640235e2SEnji Cooper{ 373640235e2SEnji Cooper export RUMP_SERVER=$SOCK1 374640235e2SEnji Cooper atf_check -s exit:0 -o match:gif1 rump.ifconfig 375640235e2SEnji Cooper 376640235e2SEnji Cooper export RUMP_SERVER=$SOCK2 377640235e2SEnji Cooper atf_check -s exit:0 -o match:gif1 rump.ifconfig 378640235e2SEnji Cooper} 379640235e2SEnji Cooper 380640235e2SEnji Cooperteardown_dummy_tunnel() 381640235e2SEnji Cooper{ 382640235e2SEnji Cooper export RUMP_SERVER=$SOCK1 383640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif1 deletetunnel 384640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif1 destroy 385640235e2SEnji Cooper 386640235e2SEnji Cooper export RUMP_SERVER=$SOCK2 387640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif1 deletetunnel 388640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif1 destroy 389640235e2SEnji Cooper} 390640235e2SEnji Cooper 391640235e2SEnji Coopersetup_recursive_if_gif() 392640235e2SEnji Cooper{ 393640235e2SEnji Cooper sock=${1} 394640235e2SEnji Cooper gif=${2} 395640235e2SEnji Cooper addr=${3} 396640235e2SEnji Cooper remote=${4} 397640235e2SEnji Cooper inner=${5} 398640235e2SEnji Cooper src=${6} 399640235e2SEnji Cooper dst=${7} 400640235e2SEnji Cooper 401640235e2SEnji Cooper export RUMP_SERVER=${sock} 402640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig ${gif} create 403640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig ${gif} tunnel ${src} ${dst} 404640235e2SEnji Cooper if [ ${inner} = "ipv6" ]; then 405640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig ${gif} inet6 ${addr}/128 ${remote} 406640235e2SEnji Cooper else 407640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig ${gif} inet ${addr}/32 ${remote} 408640235e2SEnji Cooper fi 409640235e2SEnji Cooper 410640235e2SEnji Cooper rump.ifconfig ${gif} 411640235e2SEnji Cooper} 412640235e2SEnji Cooper 413640235e2SEnji Cooper# test in ROUTER1 only 414640235e2SEnji Coopersetup_recursive_tunnels() 415640235e2SEnji Cooper{ 416640235e2SEnji Cooper mode=${1} 417640235e2SEnji Cooper 418640235e2SEnji Cooper addr="" 419640235e2SEnji Cooper remote="" 420640235e2SEnji Cooper src="" 421640235e2SEnji Cooper dst="" 422640235e2SEnji Cooper 423640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 424640235e2SEnji Cooper addr=$ROUTER1_GIFIP6_RECURSIVE1 425640235e2SEnji Cooper remote=$ROUTER2_GIFIP6_RECURSIVE1 426640235e2SEnji Cooper src=$ROUTER1_GIFIP6 427640235e2SEnji Cooper dst=$ROUTER2_GIFIP6 428640235e2SEnji Cooper else 429640235e2SEnji Cooper addr=$ROUTER1_GIFIP_RECURSIVE1 430640235e2SEnji Cooper remote=$ROUTER2_GIFIP_RECURSIVE1 431640235e2SEnji Cooper src=$ROUTER1_GIFIP 432640235e2SEnji Cooper dst=$ROUTER2_GIFIP 433640235e2SEnji Cooper fi 434640235e2SEnji Cooper setup_recursive_if_gif $SOCK1 gif1 ${addr} ${remote} ${mode} \ 435640235e2SEnji Cooper ${src} ${dst} 436640235e2SEnji Cooper 437640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 438640235e2SEnji Cooper addr=$ROUTER1_GIFIP6_RECURSIVE2 439640235e2SEnji Cooper remote=$ROUTER2_GIFIP6_RECURSIVE2 440640235e2SEnji Cooper src=$ROUTER1_GIFIP6_RECURSIVE1 441640235e2SEnji Cooper dst=$ROUTER2_GIFIP6_RECURSIVE1 442640235e2SEnji Cooper else 443640235e2SEnji Cooper addr=$ROUTER1_GIFIP_RECURSIVE2 444640235e2SEnji Cooper remote=$ROUTER2_GIFIP_RECURSIVE2 445640235e2SEnji Cooper src=$ROUTER1_GIFIP_RECURSIVE1 446640235e2SEnji Cooper dst=$ROUTER2_GIFIP_RECURSIVE1 447640235e2SEnji Cooper fi 448640235e2SEnji Cooper setup_recursive_if_gif $SOCK1 gif2 ${addr} ${remote} ${mode} \ 449640235e2SEnji Cooper ${src} ${dst} 450640235e2SEnji Cooper} 451640235e2SEnji Cooper 452640235e2SEnji Cooper# test in router1 only 453640235e2SEnji Coopertest_recursive_check() 454640235e2SEnji Cooper{ 455640235e2SEnji Cooper mode=$1 456640235e2SEnji Cooper 457640235e2SEnji Cooper export RUMP_SERVER=$SOCK1 458640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 459640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore \ 460640235e2SEnji Cooper rump.ping6 -n -X $TIMEOUT -c 1 $ROUTER2_GIFIP6_RECURSIVE2 461640235e2SEnji Cooper else 462640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore \ 463640235e2SEnji Cooper rump.ping -n -w $TIMEOUT -c 1 $ROUTER2_GIFIP_RECURSIVE2 464640235e2SEnji Cooper fi 465640235e2SEnji Cooper 466640235e2SEnji Cooper atf_check -o match:'gif0: recursively called too many times' \ 467640235e2SEnji Cooper -x "$HIJACKING dmesg" 468640235e2SEnji Cooper 469640235e2SEnji Cooper $HIJACKING dmesg 470640235e2SEnji Cooper} 471640235e2SEnji Cooper 472640235e2SEnji Cooperteardown_recursive_tunnels() 473640235e2SEnji Cooper{ 474640235e2SEnji Cooper export RUMP_SERVER=$SOCK1 475640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif1 deletetunnel 476640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif1 destroy 477640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif2 deletetunnel 478640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig gif2 destroy 479640235e2SEnji Cooper} 480640235e2SEnji Cooper 481640235e2SEnji Coopertest_ping_failure() 482640235e2SEnji Cooper{ 483640235e2SEnji Cooper mode=$1 484640235e2SEnji Cooper 485640235e2SEnji Cooper export RUMP_SERVER=$SOCK1 486640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 487640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore \ 488640235e2SEnji Cooper rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \ 489640235e2SEnji Cooper $ROUTER2_LANIP6 490640235e2SEnji Cooper else 491640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore \ 492640235e2SEnji Cooper rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \ 493640235e2SEnji Cooper $ROUTER2_LANIP 494640235e2SEnji Cooper fi 495640235e2SEnji Cooper 496640235e2SEnji Cooper export RUMP_SERVER=$SOCK2 497640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 498640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore \ 499640235e2SEnji Cooper rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \ 500640235e2SEnji Cooper $ROUTER1_LANIP6 501640235e2SEnji Cooper else 502640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore \ 503640235e2SEnji Cooper rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \ 504640235e2SEnji Cooper $ROUTER2_LANIP 505640235e2SEnji Cooper fi 506640235e2SEnji Cooper} 507640235e2SEnji Cooper 508640235e2SEnji Coopertest_ping_success() 509640235e2SEnji Cooper{ 510640235e2SEnji Cooper mode=$1 511640235e2SEnji Cooper 512640235e2SEnji Cooper export RUMP_SERVER=$SOCK1 513640235e2SEnji Cooper rump.ifconfig -v gif0 514640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 515640235e2SEnji Cooper # XXX 516640235e2SEnji Cooper # rump.ping6 rarely fails with the message that 517640235e2SEnji Cooper # "failed to get receiving hop limit". 518640235e2SEnji Cooper # This is a known issue being analyzed. 519640235e2SEnji Cooper atf_check -s exit:0 -o ignore \ 520640235e2SEnji Cooper rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \ 521640235e2SEnji Cooper $ROUTER2_LANIP6 522640235e2SEnji Cooper else 523640235e2SEnji Cooper atf_check -s exit:0 -o ignore \ 524640235e2SEnji Cooper rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \ 525640235e2SEnji Cooper $ROUTER2_LANIP 526640235e2SEnji Cooper fi 527640235e2SEnji Cooper rump.ifconfig -v gif0 528640235e2SEnji Cooper 529640235e2SEnji Cooper export RUMP_SERVER=$SOCK2 530640235e2SEnji Cooper rump.ifconfig -v gif0 531640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 532640235e2SEnji Cooper atf_check -s exit:0 -o ignore \ 533640235e2SEnji Cooper rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \ 534640235e2SEnji Cooper $ROUTER1_LANIP6 535640235e2SEnji Cooper else 536640235e2SEnji Cooper atf_check -s exit:0 -o ignore \ 537640235e2SEnji Cooper rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER2_LANIP \ 538640235e2SEnji Cooper $ROUTER1_LANIP 539640235e2SEnji Cooper fi 540640235e2SEnji Cooper rump.ifconfig -v gif0 541640235e2SEnji Cooper} 542640235e2SEnji Cooper 543640235e2SEnji Coopertest_change_tunnel_duplicate() 544640235e2SEnji Cooper{ 545640235e2SEnji Cooper mode=$1 546640235e2SEnji Cooper 547640235e2SEnji Cooper newsrc="" 548640235e2SEnji Cooper newdst="" 549640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 550640235e2SEnji Cooper newsrc=$ROUTER1_WANIP6_DUMMY 551640235e2SEnji Cooper newdst=$ROUTER2_WANIP6_DUMMY 552640235e2SEnji Cooper else 553640235e2SEnji Cooper newsrc=$ROUTER1_WANIP_DUMMY 554640235e2SEnji Cooper newdst=$ROUTER2_WANIP_DUMMY 555640235e2SEnji Cooper fi 556640235e2SEnji Cooper export RUMP_SERVER=$SOCK1 557640235e2SEnji Cooper rump.ifconfig -v gif0 558640235e2SEnji Cooper rump.ifconfig -v gif1 559640235e2SEnji Cooper atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \ 560640235e2SEnji Cooper rump.ifconfig gif0 tunnel ${newsrc} ${newdst} 561640235e2SEnji Cooper rump.ifconfig -v gif0 562640235e2SEnji Cooper rump.ifconfig -v gif1 563640235e2SEnji Cooper 564640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 565640235e2SEnji Cooper newsrc=$ROUTER2_WANIP6_DUMMY 566640235e2SEnji Cooper newdst=$ROUTER1_WANIP6_DUMMY 567640235e2SEnji Cooper else 568640235e2SEnji Cooper newsrc=$ROUTER2_WANIP_DUMMY 569640235e2SEnji Cooper newdst=$ROUTER1_WANIP_DUMMY 570640235e2SEnji Cooper fi 571640235e2SEnji Cooper export RUMP_SERVER=$SOCK2 572640235e2SEnji Cooper rump.ifconfig -v gif0 573640235e2SEnji Cooper rump.ifconfig -v gif1 574640235e2SEnji Cooper atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \ 575640235e2SEnji Cooper rump.ifconfig gif0 tunnel ${newsrc} ${newdst} 576640235e2SEnji Cooper rump.ifconfig -v gif0 577640235e2SEnji Cooper rump.ifconfig -v gif1 578640235e2SEnji Cooper} 579640235e2SEnji Cooper 580640235e2SEnji Coopertest_change_tunnel_success() 581640235e2SEnji Cooper{ 582640235e2SEnji Cooper mode=$1 583640235e2SEnji Cooper 584640235e2SEnji Cooper newsrc="" 585640235e2SEnji Cooper newdst="" 586640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 587640235e2SEnji Cooper newsrc=$ROUTER1_WANIP6_DUMMY 588640235e2SEnji Cooper newdst=$ROUTER2_WANIP6_DUMMY 589640235e2SEnji Cooper else 590640235e2SEnji Cooper newsrc=$ROUTER1_WANIP_DUMMY 591640235e2SEnji Cooper newdst=$ROUTER2_WANIP_DUMMY 592640235e2SEnji Cooper fi 593640235e2SEnji Cooper export RUMP_SERVER=$SOCK1 594640235e2SEnji Cooper rump.ifconfig -v gif0 595640235e2SEnji Cooper atf_check -s exit:0 \ 596640235e2SEnji Cooper rump.ifconfig gif0 tunnel ${newsrc} ${newdst} 597640235e2SEnji Cooper rump.ifconfig -v gif0 598640235e2SEnji Cooper 599640235e2SEnji Cooper if [ ${mode} = "ipv6" ]; then 600640235e2SEnji Cooper newsrc=$ROUTER2_WANIP6_DUMMY 601640235e2SEnji Cooper newdst=$ROUTER1_WANIP6_DUMMY 602640235e2SEnji Cooper else 603640235e2SEnji Cooper newsrc=$ROUTER2_WANIP_DUMMY 604640235e2SEnji Cooper newdst=$ROUTER1_WANIP_DUMMY 605640235e2SEnji Cooper fi 606640235e2SEnji Cooper export RUMP_SERVER=$SOCK2 607640235e2SEnji Cooper rump.ifconfig -v gif0 608640235e2SEnji Cooper atf_check -s exit:0 \ 609640235e2SEnji Cooper rump.ifconfig gif0 tunnel ${newsrc} ${newdst} 610640235e2SEnji Cooper rump.ifconfig -v gif0 611640235e2SEnji Cooper} 612640235e2SEnji Cooper 613640235e2SEnji Cooperbasic_setup() 614640235e2SEnji Cooper{ 615640235e2SEnji Cooper inner=$1 616640235e2SEnji Cooper outer=$2 617640235e2SEnji Cooper 618640235e2SEnji Cooper setup ${inner} ${outer} 619640235e2SEnji Cooper test_setup ${inner} ${outer} 620640235e2SEnji Cooper 621640235e2SEnji Cooper # Enable once PR kern/49219 is fixed 622640235e2SEnji Cooper #test_ping_failure 623640235e2SEnji Cooper 624640235e2SEnji Cooper setup_tunnel ${inner} ${outer} 625640235e2SEnji Cooper sleep 1 626640235e2SEnji Cooper test_setup_tunnel ${inner} 627640235e2SEnji Cooper} 628640235e2SEnji Cooper 629640235e2SEnji Cooperbasic_test() 630640235e2SEnji Cooper{ 631640235e2SEnji Cooper inner=$1 632640235e2SEnji Cooper outer=$2 # not use 633640235e2SEnji Cooper 634640235e2SEnji Cooper test_ping_success ${inner} 635640235e2SEnji Cooper} 636640235e2SEnji Cooper 637640235e2SEnji Cooperbasic_teardown() 638640235e2SEnji Cooper{ 639640235e2SEnji Cooper inner=$1 640640235e2SEnji Cooper outer=$2 # not use 641640235e2SEnji Cooper 642640235e2SEnji Cooper teardown_tunnel 643640235e2SEnji Cooper test_ping_failure ${inner} 644640235e2SEnji Cooper} 645640235e2SEnji Cooper 646640235e2SEnji Cooperioctl_setup() 647640235e2SEnji Cooper{ 648640235e2SEnji Cooper inner=$1 649640235e2SEnji Cooper outer=$2 650640235e2SEnji Cooper 651640235e2SEnji Cooper setup ${inner} ${outer} 652640235e2SEnji Cooper test_setup ${inner} ${outer} 653640235e2SEnji Cooper 654640235e2SEnji Cooper # Enable once PR kern/49219 is fixed 655640235e2SEnji Cooper #test_ping_failure 656640235e2SEnji Cooper 657640235e2SEnji Cooper setup_tunnel ${inner} ${outer} 658640235e2SEnji Cooper setup_dummy_tunnel ${inner} ${outer} 659640235e2SEnji Cooper sleep 1 660640235e2SEnji Cooper test_setup_tunnel ${inner} 661640235e2SEnji Cooper} 662640235e2SEnji Cooper 663640235e2SEnji Cooperioctl_test() 664640235e2SEnji Cooper{ 665640235e2SEnji Cooper inner=$1 666640235e2SEnji Cooper outer=$2 667640235e2SEnji Cooper 668640235e2SEnji Cooper test_ping_success ${inner} 669640235e2SEnji Cooper 670640235e2SEnji Cooper test_change_tunnel_duplicate ${outer} 671640235e2SEnji Cooper 672640235e2SEnji Cooper teardown_dummy_tunnel 673640235e2SEnji Cooper test_change_tunnel_success ${outer} 674640235e2SEnji Cooper} 675640235e2SEnji Cooper 676640235e2SEnji Cooperioctl_teardown() 677640235e2SEnji Cooper{ 678640235e2SEnji Cooper inner=$1 679640235e2SEnji Cooper outer=$2 # not use 680640235e2SEnji Cooper 681640235e2SEnji Cooper teardown_tunnel 682640235e2SEnji Cooper test_ping_failure ${inner} 683640235e2SEnji Cooper} 684640235e2SEnji Cooper 685640235e2SEnji Cooperrecursive_setup() 686640235e2SEnji Cooper{ 687640235e2SEnji Cooper inner=$1 688640235e2SEnji Cooper outer=$2 689640235e2SEnji Cooper 690640235e2SEnji Cooper setup ${inner} ${outer} 691640235e2SEnji Cooper test_setup ${inner} ${outer} 692640235e2SEnji Cooper 693640235e2SEnji Cooper # Enable once PR kern/49219 is fixed 694640235e2SEnji Cooper #test_ping_failure 695640235e2SEnji Cooper 696640235e2SEnji Cooper setup_tunnel ${inner} ${outer} 697640235e2SEnji Cooper setup_recursive_tunnels ${inner} 698640235e2SEnji Cooper sleep 1 699640235e2SEnji Cooper test_setup_tunnel ${inner} 700640235e2SEnji Cooper} 701640235e2SEnji Cooper 702640235e2SEnji Cooperrecursive_test() 703640235e2SEnji Cooper{ 704640235e2SEnji Cooper inner=$1 705640235e2SEnji Cooper outer=$2 # not use 706640235e2SEnji Cooper 707640235e2SEnji Cooper test_recursive_check ${inner} 708640235e2SEnji Cooper} 709640235e2SEnji Cooper 710640235e2SEnji Cooperrecursive_teardown() 711640235e2SEnji Cooper{ 712640235e2SEnji Cooper inner=$1 # not use 713640235e2SEnji Cooper outer=$2 # not use 714640235e2SEnji Cooper 715640235e2SEnji Cooper teardown_recursive_tunnels 716640235e2SEnji Cooper teardown_tunnel 717640235e2SEnji Cooper} 718640235e2SEnji Cooper 719640235e2SEnji Cooperadd_test() 720640235e2SEnji Cooper{ 721640235e2SEnji Cooper category=$1 722640235e2SEnji Cooper desc=$2 723640235e2SEnji Cooper inner=$3 724640235e2SEnji Cooper outer=$4 725640235e2SEnji Cooper 726*cdebaff8SEnji Cooper name="gif_${category}_${inner}over${outer}" 727640235e2SEnji Cooper fulldesc="Does ${inner} over ${outer} if_gif ${desc}" 728640235e2SEnji Cooper 729640235e2SEnji Cooper atf_test_case ${name} cleanup 730640235e2SEnji Cooper eval "${name}_head() { \ 731640235e2SEnji Cooper atf_set \"descr\" \"${fulldesc}\"; \ 732640235e2SEnji Cooper atf_set \"require.progs\" \"rump_server\"; \ 733640235e2SEnji Cooper }; \ 734640235e2SEnji Cooper ${name}_body() { \ 735640235e2SEnji Cooper ${category}_setup ${inner} ${outer}; \ 736640235e2SEnji Cooper ${category}_test ${inner} ${outer}; \ 737640235e2SEnji Cooper ${category}_teardown ${inner} ${outer}; \ 738*cdebaff8SEnji Cooper rump_server_destroy_ifaces; \ 739640235e2SEnji Cooper }; \ 740640235e2SEnji Cooper ${name}_cleanup() { \ 741*cdebaff8SEnji Cooper $DEBUG && dump; \ 742640235e2SEnji Cooper cleanup; \ 743640235e2SEnji Cooper }" 744640235e2SEnji Cooper atf_add_test_case ${name} 745640235e2SEnji Cooper} 746640235e2SEnji Cooper 747640235e2SEnji Cooperadd_test_allproto() 748640235e2SEnji Cooper{ 749640235e2SEnji Cooper category=$1 750640235e2SEnji Cooper desc=$2 751640235e2SEnji Cooper 752640235e2SEnji Cooper add_test ${category} "${desc}" ipv4 ipv4 753640235e2SEnji Cooper add_test ${category} "${desc}" ipv4 ipv6 754640235e2SEnji Cooper add_test ${category} "${desc}" ipv6 ipv4 755640235e2SEnji Cooper add_test ${category} "${desc}" ipv6 ipv6 756640235e2SEnji Cooper} 757640235e2SEnji Cooper 758640235e2SEnji Cooperatf_init_test_cases() 759640235e2SEnji Cooper{ 760640235e2SEnji Cooper add_test_allproto basic "basic tests" 761640235e2SEnji Cooper add_test_allproto ioctl "ioctl tests" 762640235e2SEnji Cooper add_test_allproto recursive "recursive check tests" 763640235e2SEnji Cooper} 764