1313535Sngie# $NetBSD: t_gif.sh,v 1.9 2016/12/21 09:46:39 ozaki-r Exp $ 2303980Sngie# 3303980Sngie# Copyright (c) 2015 Internet Initiative Japan Inc. 4303980Sngie# All rights reserved. 5303980Sngie# 6303980Sngie# Redistribution and use in source and binary forms, with or without 7303980Sngie# modification, are permitted provided that the following conditions 8303980Sngie# are met: 9303980Sngie# 1. Redistributions of source code must retain the above copyright 10303980Sngie# notice, this list of conditions and the following disclaimer. 11303980Sngie# 2. Redistributions in binary form must reproduce the above copyright 12303980Sngie# notice, this list of conditions and the following disclaimer in the 13303980Sngie# documentation and/or other materials provided with the distribution. 14303980Sngie# 15303980Sngie# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16303980Sngie# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17303980Sngie# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18303980Sngie# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19303980Sngie# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20303980Sngie# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21303980Sngie# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22303980Sngie# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23303980Sngie# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24303980Sngie# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25303980Sngie# POSSIBILITY OF SUCH DAMAGE. 26303980Sngie# 27303980Sngie 28303980SngieSOCK1=unix://commsock1 # for ROUTER1 29303980SngieSOCK2=unix://commsock2 # for ROUTER2 30303980SngieROUTER1_LANIP=192.168.1.1 31303980SngieROUTER1_LANNET=192.168.1.0/24 32303980SngieROUTER1_WANIP=10.0.0.1 33303980SngieROUTER1_GIFIP=172.16.1.1 34303980SngieROUTER1_WANIP_DUMMY=10.0.0.11 35303980SngieROUTER1_GIFIP_DUMMY=172.16.11.1 36303980SngieROUTER1_GIFIP_RECURSIVE1=172.16.101.1 37303980SngieROUTER1_GIFIP_RECURSIVE2=172.16.201.1 38303980SngieROUTER2_LANIP=192.168.2.1 39303980SngieROUTER2_LANNET=192.168.2.0/24 40303980SngieROUTER2_WANIP=10.0.0.2 41303980SngieROUTER2_GIFIP=172.16.2.1 42303980SngieROUTER2_WANIP_DUMMY=10.0.0.12 43303980SngieROUTER2_GIFIP_DUMMY=172.16.12.1 44303980SngieROUTER2_GIFIP_RECURSIVE1=172.16.102.1 45303980SngieROUTER2_GIFIP_RECURSIVE2=172.16.202.1 46303980Sngie 47303980SngieROUTER1_LANIP6=fc00:1::1 48303980SngieROUTER1_LANNET6=fc00:1::/64 49303980SngieROUTER1_WANIP6=fc00::1 50303980SngieROUTER1_GIFIP6=fc00:3::1 51303980SngieROUTER1_WANIP6_DUMMY=fc00::11 52303980SngieROUTER1_GIFIP6_DUMMY=fc00:13::1 53303980SngieROUTER1_GIFIP6_RECURSIVE1=fc00:103::1 54303980SngieROUTER1_GIFIP6_RECURSIVE2=fc00:203::1 55303980SngieROUTER2_LANIP6=fc00:2::1 56303980SngieROUTER2_LANNET6=fc00:2::/64 57303980SngieROUTER2_WANIP6=fc00::2 58303980SngieROUTER2_GIFIP6=fc00:4::1 59303980SngieROUTER2_WANIP6_DUMMY=fc00::12 60303980SngieROUTER2_GIFIP6_DUMMY=fc00:14::1 61303980SngieROUTER2_GIFIP6_RECURSIVE1=fc00:104::1 62303980SngieROUTER2_GIFIP6_RECURSIVE2=fc00:204::1 63303980Sngie 64313535SngieDEBUG=${DEBUG:-true} 65303980SngieTIMEOUT=5 66303980Sngie 67303980Sngiesetup_router() 68303980Sngie{ 69303980Sngie sock=${1} 70303980Sngie lan=${2} 71303980Sngie lan_mode=${3} 72303980Sngie wan=${4} 73303980Sngie wan_mode=${5} 74303980Sngie 75313535Sngie rump_server_add_iface $sock shmif0 bus0 76313535Sngie rump_server_add_iface $sock shmif1 bus1 77313535Sngie 78303980Sngie export RUMP_SERVER=${sock} 79303980Sngie if [ ${lan_mode} = "ipv6" ]; then 80303980Sngie atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${lan} 81303980Sngie else 82303980Sngie atf_check -s exit:0 rump.ifconfig shmif0 inet ${lan} netmask 0xffffff00 83303980Sngie fi 84303980Sngie atf_check -s exit:0 rump.ifconfig shmif0 up 85303980Sngie rump.ifconfig shmif0 86303980Sngie 87303980Sngie if [ ${wan_mode} = "ipv6" ]; then 88303980Sngie atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${wan} 89303980Sngie else 90303980Sngie atf_check -s exit:0 rump.ifconfig shmif1 inet ${wan} netmask 0xff000000 91303980Sngie fi 92303980Sngie atf_check -s exit:0 rump.ifconfig shmif1 up 93303980Sngie rump.ifconfig shmif1 94303980Sngie} 95303980Sngie 96303980Sngietest_router() 97303980Sngie{ 98303980Sngie sock=${1} 99303980Sngie lan=${2} 100303980Sngie lan_mode=${3} 101303980Sngie wan=${4} 102303980Sngie wan_mode=${5} 103303980Sngie 104303980Sngie export RUMP_SERVER=${sock} 105303980Sngie atf_check -s exit:0 -o match:shmif0 rump.ifconfig 106303980Sngie if [ ${lan_mode} = "ipv6" ]; then 107303980Sngie atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${lan} 108303980Sngie else 109303980Sngie atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${lan} 110303980Sngie fi 111303980Sngie 112303980Sngie atf_check -s exit:0 -o match:shmif1 rump.ifconfig 113303980Sngie if [ ${wan_mode} = "ipv6" ]; then 114303980Sngie atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${wan} 115303980Sngie else 116303980Sngie atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${wan} 117303980Sngie fi 118303980Sngie} 119303980Sngie 120303980Sngiesetup() 121303980Sngie{ 122303980Sngie inner=${1} 123303980Sngie outer=${2} 124303980Sngie 125313535Sngie rump_server_start $SOCK1 netinet6 gif 126313535Sngie rump_server_start $SOCK2 netinet6 gif 127303980Sngie 128303980Sngie router1_lan="" 129303980Sngie router1_lan_mode="" 130303980Sngie router2_lan="" 131303980Sngie router2_lan_mode="" 132303980Sngie if [ ${inner} = "ipv6" ]; then 133303980Sngie router1_lan=$ROUTER1_LANIP6 134303980Sngie router1_lan_mode="ipv6" 135303980Sngie router2_lan=$ROUTER2_LANIP6 136303980Sngie router2_lan_mode="ipv6" 137303980Sngie else 138303980Sngie router1_lan=$ROUTER1_LANIP 139303980Sngie router1_lan_mode="ipv4" 140303980Sngie router2_lan=$ROUTER2_LANIP 141303980Sngie router2_lan_mode="ipv4" 142303980Sngie fi 143303980Sngie 144303980Sngie if [ ${outer} = "ipv6" ]; then 145303980Sngie setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \ 146303980Sngie $ROUTER1_WANIP6 ipv6 147303980Sngie setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \ 148303980Sngie $ROUTER2_WANIP6 ipv6 149303980Sngie else 150303980Sngie setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \ 151303980Sngie $ROUTER1_WANIP ipv4 152303980Sngie setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \ 153303980Sngie $ROUTER2_WANIP ipv4 154303980Sngie fi 155303980Sngie} 156303980Sngie 157303980Sngietest_setup() 158303980Sngie{ 159303980Sngie inner=${1} 160303980Sngie outer=${2} 161303980Sngie 162303980Sngie router1_lan="" 163303980Sngie router1_lan_mode="" 164303980Sngie router2_lan="" 165303980Sngie router2_lan_mode="" 166303980Sngie if [ ${inner} = "ipv6" ]; then 167303980Sngie router1_lan=$ROUTER1_LANIP6 168303980Sngie router1_lan_mode="ipv6" 169303980Sngie router2_lan=$ROUTER2_LANIP6 170303980Sngie router2_lan_mode="ipv6" 171303980Sngie else 172303980Sngie router1_lan=$ROUTER1_LANIP 173303980Sngie router1_lan_mode="ipv4" 174303980Sngie router2_lan=$ROUTER2_LANIP 175303980Sngie router2_lan_mode="ipv4" 176303980Sngie fi 177303980Sngie if [ ${outer} = "ipv6" ]; then 178303980Sngie test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \ 179303980Sngie $ROUTER1_WANIP6 ipv6 180303980Sngie test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \ 181303980Sngie $ROUTER2_WANIP6 ipv6 182303980Sngie else 183303980Sngie test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \ 184303980Sngie $ROUTER1_WANIP ipv4 185303980Sngie test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \ 186303980Sngie $ROUTER2_WANIP ipv4 187303980Sngie fi 188303980Sngie} 189303980Sngie 190303980Sngiesetup_if_gif() 191303980Sngie{ 192303980Sngie sock=${1} 193303980Sngie addr=${2} 194303980Sngie remote=${3} 195303980Sngie inner=${4} 196303980Sngie src=${5} 197303980Sngie dst=${6} 198303980Sngie peernet=${7} 199303980Sngie 200303980Sngie export RUMP_SERVER=${sock} 201303980Sngie atf_check -s exit:0 rump.ifconfig gif0 create 202303980Sngie atf_check -s exit:0 rump.ifconfig gif0 tunnel ${src} ${dst} 203303980Sngie if [ ${inner} = "ipv6" ]; then 204303980Sngie atf_check -s exit:0 rump.ifconfig gif0 inet6 ${addr}/128 ${remote} 205303980Sngie atf_check -s exit:0 -o ignore rump.route add -inet6 ${peernet} ${addr} 206303980Sngie else 207303980Sngie atf_check -s exit:0 rump.ifconfig gif0 inet ${addr}/32 ${remote} 208303980Sngie atf_check -s exit:0 -o ignore rump.route add -inet ${peernet} ${addr} 209303980Sngie fi 210303980Sngie 211303980Sngie rump.ifconfig gif0 212303980Sngie rump.route -nL show 213303980Sngie} 214303980Sngie 215303980Sngiesetup_tunnel() 216303980Sngie{ 217303980Sngie inner=${1} 218303980Sngie outer=${2} 219303980Sngie 220303980Sngie addr="" 221303980Sngie remote="" 222303980Sngie src="" 223303980Sngie dst="" 224303980Sngie peernet="" 225303980Sngie 226303980Sngie if [ ${inner} = "ipv6" ]; then 227303980Sngie addr=$ROUTER1_GIFIP6 228303980Sngie remote=$ROUTER2_GIFIP6 229303980Sngie peernet=$ROUTER2_LANNET6 230303980Sngie else 231303980Sngie addr=$ROUTER1_GIFIP 232303980Sngie remote=$ROUTER2_GIFIP 233303980Sngie peernet=$ROUTER2_LANNET 234303980Sngie fi 235303980Sngie if [ ${outer} = "ipv6" ]; then 236303980Sngie src=$ROUTER1_WANIP6 237303980Sngie dst=$ROUTER2_WANIP6 238303980Sngie else 239303980Sngie src=$ROUTER1_WANIP 240303980Sngie dst=$ROUTER2_WANIP 241303980Sngie fi 242303980Sngie setup_if_gif $SOCK1 ${addr} ${remote} ${inner} \ 243303980Sngie ${src} ${dst} ${peernet} 244303980Sngie 245303980Sngie if [ $inner = "ipv6" ]; then 246303980Sngie addr=$ROUTER2_GIFIP6 247303980Sngie remote=$ROUTER1_GIFIP6 248303980Sngie peernet=$ROUTER1_LANNET6 249303980Sngie else 250303980Sngie addr=$ROUTER2_GIFIP 251303980Sngie remote=$ROUTER1_GIFIP 252303980Sngie peernet=$ROUTER1_LANNET 253303980Sngie fi 254303980Sngie if [ $outer = "ipv6" ]; then 255303980Sngie src=$ROUTER2_WANIP6 256303980Sngie dst=$ROUTER1_WANIP6 257303980Sngie else 258303980Sngie src=$ROUTER2_WANIP 259303980Sngie dst=$ROUTER1_WANIP 260303980Sngie fi 261303980Sngie setup_if_gif $SOCK2 ${addr} ${remote} ${inner} \ 262303980Sngie ${src} ${dst} ${peernet} 263303980Sngie} 264303980Sngie 265303980Sngietest_setup_tunnel() 266303980Sngie{ 267303980Sngie mode=${1} 268303980Sngie 269303980Sngie peernet="" 270303980Sngie opt="" 271303980Sngie if [ ${mode} = "ipv6" ]; then 272303980Sngie peernet=$ROUTER2_LANNET6 273303980Sngie opt="-inet6" 274303980Sngie else 275303980Sngie peernet=$ROUTER2_LANNET 276303980Sngie opt="-inet" 277303980Sngie fi 278303980Sngie export RUMP_SERVER=$SOCK1 279303980Sngie atf_check -s exit:0 -o match:gif0 rump.ifconfig 280303980Sngie atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet} 281303980Sngie 282303980Sngie if [ ${mode} = "ipv6" ]; then 283303980Sngie peernet=$ROUTER1_LANNET6 284303980Sngie opt="-inet6" 285303980Sngie else 286303980Sngie peernet=$ROUTER1_LANNET 287303980Sngie opt="-inet" 288303980Sngie fi 289303980Sngie export RUMP_SERVER=$SOCK2 290303980Sngie atf_check -s exit:0 -o match:gif0 rump.ifconfig 291303980Sngie atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet} 292303980Sngie} 293303980Sngie 294303980Sngieteardown_tunnel() 295303980Sngie{ 296303980Sngie export RUMP_SERVER=$SOCK1 297303980Sngie atf_check -s exit:0 rump.ifconfig gif0 deletetunnel 298303980Sngie atf_check -s exit:0 rump.ifconfig gif0 destroy 299303980Sngie 300303980Sngie export RUMP_SERVER=$SOCK2 301303980Sngie atf_check -s exit:0 rump.ifconfig gif0 deletetunnel 302303980Sngie atf_check -s exit:0 rump.ifconfig gif0 destroy 303303980Sngie} 304303980Sngie 305303980Sngiesetup_dummy_if_gif() 306303980Sngie{ 307303980Sngie sock=${1} 308303980Sngie addr=${2} 309303980Sngie remote=${3} 310303980Sngie inner=${4} 311303980Sngie src=${5} 312303980Sngie dst=${6} 313303980Sngie 314303980Sngie export RUMP_SERVER=${sock} 315303980Sngie atf_check -s exit:0 rump.ifconfig gif1 create 316303980Sngie atf_check -s exit:0 rump.ifconfig gif1 tunnel ${src} ${dst} 317303980Sngie if [ ${inner} = "ipv6" ]; then 318303980Sngie atf_check -s exit:0 rump.ifconfig gif1 inet6 ${addr}/128 ${remote} 319303980Sngie else 320303980Sngie atf_check -s exit:0 rump.ifconfig gif1 inet ${addr}/32 ${remote} 321303980Sngie fi 322303980Sngie 323303980Sngie rump.ifconfig gif1 324303980Sngie} 325303980Sngie 326303980Sngiesetup_dummy_tunnel() 327303980Sngie{ 328303980Sngie inner=${1} 329303980Sngie outer=${2} 330303980Sngie 331303980Sngie addr="" 332303980Sngie remote="" 333303980Sngie src="" 334303980Sngie dst="" 335303980Sngie 336303980Sngie if [ ${inner} = "ipv6" ]; then 337303980Sngie addr=$ROUTER1_GIFIP6_DUMMY 338303980Sngie remote=$ROUTER2_GIFIP6_DUMMY 339303980Sngie else 340303980Sngie addr=$ROUTER1_GIFIP_DUMMY 341303980Sngie remote=$ROUTER2_GIFIP_DUMMY 342303980Sngie fi 343303980Sngie if [ ${outer} = "ipv6" ]; then 344303980Sngie src=$ROUTER1_WANIP6_DUMMY 345303980Sngie dst=$ROUTER2_WANIP6_DUMMY 346303980Sngie else 347303980Sngie src=$ROUTER1_WANIP_DUMMY 348303980Sngie dst=$ROUTER2_WANIP_DUMMY 349303980Sngie fi 350303980Sngie setup_dummy_if_gif $SOCK1 ${addr} ${remote} ${inner} \ 351303980Sngie ${src} ${dst} 352303980Sngie 353303980Sngie if [ $inner = "ipv6" ]; then 354303980Sngie addr=$ROUTER2_GIFIP6_DUMMY 355303980Sngie remote=$ROUTER1_GIFIP6_DUMMY 356303980Sngie else 357303980Sngie addr=$ROUTER2_GIFIP_DUMMY 358303980Sngie remote=$ROUTER1_GIFIP_DUMMY 359303980Sngie fi 360303980Sngie if [ $outer = "ipv6" ]; then 361303980Sngie src=$ROUTER2_WANIP6_DUMMY 362303980Sngie dst=$ROUTER1_WANIP6_DUMMY 363303980Sngie else 364303980Sngie src=$ROUTER2_WANIP_DUMMY 365303980Sngie dst=$ROUTER1_WANIP_DUMMY 366303980Sngie fi 367303980Sngie setup_dummy_if_gif $SOCK2 ${addr} ${remote} ${inner} \ 368303980Sngie ${src} ${dst} 369303980Sngie} 370303980Sngie 371303980Sngietest_setup_dummy_tunnel() 372303980Sngie{ 373303980Sngie export RUMP_SERVER=$SOCK1 374303980Sngie atf_check -s exit:0 -o match:gif1 rump.ifconfig 375303980Sngie 376303980Sngie export RUMP_SERVER=$SOCK2 377303980Sngie atf_check -s exit:0 -o match:gif1 rump.ifconfig 378303980Sngie} 379303980Sngie 380303980Sngieteardown_dummy_tunnel() 381303980Sngie{ 382303980Sngie export RUMP_SERVER=$SOCK1 383303980Sngie atf_check -s exit:0 rump.ifconfig gif1 deletetunnel 384303980Sngie atf_check -s exit:0 rump.ifconfig gif1 destroy 385303980Sngie 386303980Sngie export RUMP_SERVER=$SOCK2 387303980Sngie atf_check -s exit:0 rump.ifconfig gif1 deletetunnel 388303980Sngie atf_check -s exit:0 rump.ifconfig gif1 destroy 389303980Sngie} 390303980Sngie 391303980Sngiesetup_recursive_if_gif() 392303980Sngie{ 393303980Sngie sock=${1} 394303980Sngie gif=${2} 395303980Sngie addr=${3} 396303980Sngie remote=${4} 397303980Sngie inner=${5} 398303980Sngie src=${6} 399303980Sngie dst=${7} 400303980Sngie 401303980Sngie export RUMP_SERVER=${sock} 402303980Sngie atf_check -s exit:0 rump.ifconfig ${gif} create 403303980Sngie atf_check -s exit:0 rump.ifconfig ${gif} tunnel ${src} ${dst} 404303980Sngie if [ ${inner} = "ipv6" ]; then 405303980Sngie atf_check -s exit:0 rump.ifconfig ${gif} inet6 ${addr}/128 ${remote} 406303980Sngie else 407303980Sngie atf_check -s exit:0 rump.ifconfig ${gif} inet ${addr}/32 ${remote} 408303980Sngie fi 409303980Sngie 410303980Sngie rump.ifconfig ${gif} 411303980Sngie} 412303980Sngie 413303980Sngie# test in ROUTER1 only 414303980Sngiesetup_recursive_tunnels() 415303980Sngie{ 416303980Sngie mode=${1} 417303980Sngie 418303980Sngie addr="" 419303980Sngie remote="" 420303980Sngie src="" 421303980Sngie dst="" 422303980Sngie 423303980Sngie if [ ${mode} = "ipv6" ]; then 424303980Sngie addr=$ROUTER1_GIFIP6_RECURSIVE1 425303980Sngie remote=$ROUTER2_GIFIP6_RECURSIVE1 426303980Sngie src=$ROUTER1_GIFIP6 427303980Sngie dst=$ROUTER2_GIFIP6 428303980Sngie else 429303980Sngie addr=$ROUTER1_GIFIP_RECURSIVE1 430303980Sngie remote=$ROUTER2_GIFIP_RECURSIVE1 431303980Sngie src=$ROUTER1_GIFIP 432303980Sngie dst=$ROUTER2_GIFIP 433303980Sngie fi 434303980Sngie setup_recursive_if_gif $SOCK1 gif1 ${addr} ${remote} ${mode} \ 435303980Sngie ${src} ${dst} 436303980Sngie 437303980Sngie if [ ${mode} = "ipv6" ]; then 438303980Sngie addr=$ROUTER1_GIFIP6_RECURSIVE2 439303980Sngie remote=$ROUTER2_GIFIP6_RECURSIVE2 440303980Sngie src=$ROUTER1_GIFIP6_RECURSIVE1 441303980Sngie dst=$ROUTER2_GIFIP6_RECURSIVE1 442303980Sngie else 443303980Sngie addr=$ROUTER1_GIFIP_RECURSIVE2 444303980Sngie remote=$ROUTER2_GIFIP_RECURSIVE2 445303980Sngie src=$ROUTER1_GIFIP_RECURSIVE1 446303980Sngie dst=$ROUTER2_GIFIP_RECURSIVE1 447303980Sngie fi 448303980Sngie setup_recursive_if_gif $SOCK1 gif2 ${addr} ${remote} ${mode} \ 449303980Sngie ${src} ${dst} 450303980Sngie} 451303980Sngie 452303980Sngie# test in router1 only 453303980Sngietest_recursive_check() 454303980Sngie{ 455303980Sngie mode=$1 456303980Sngie 457303980Sngie export RUMP_SERVER=$SOCK1 458303980Sngie if [ ${mode} = "ipv6" ]; then 459303980Sngie atf_check -s not-exit:0 -o ignore -e ignore \ 460303980Sngie rump.ping6 -n -X $TIMEOUT -c 1 $ROUTER2_GIFIP6_RECURSIVE2 461303980Sngie else 462303980Sngie atf_check -s not-exit:0 -o ignore -e ignore \ 463303980Sngie rump.ping -n -w $TIMEOUT -c 1 $ROUTER2_GIFIP_RECURSIVE2 464303980Sngie fi 465303980Sngie 466303980Sngie atf_check -o match:'gif0: recursively called too many times' \ 467303980Sngie -x "$HIJACKING dmesg" 468303980Sngie 469303980Sngie $HIJACKING dmesg 470303980Sngie} 471303980Sngie 472303980Sngieteardown_recursive_tunnels() 473303980Sngie{ 474303980Sngie export RUMP_SERVER=$SOCK1 475303980Sngie atf_check -s exit:0 rump.ifconfig gif1 deletetunnel 476303980Sngie atf_check -s exit:0 rump.ifconfig gif1 destroy 477303980Sngie atf_check -s exit:0 rump.ifconfig gif2 deletetunnel 478303980Sngie atf_check -s exit:0 rump.ifconfig gif2 destroy 479303980Sngie} 480303980Sngie 481303980Sngietest_ping_failure() 482303980Sngie{ 483303980Sngie mode=$1 484303980Sngie 485303980Sngie export RUMP_SERVER=$SOCK1 486303980Sngie if [ ${mode} = "ipv6" ]; then 487303980Sngie atf_check -s not-exit:0 -o ignore -e ignore \ 488303980Sngie rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \ 489303980Sngie $ROUTER2_LANIP6 490303980Sngie else 491303980Sngie atf_check -s not-exit:0 -o ignore -e ignore \ 492303980Sngie rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \ 493303980Sngie $ROUTER2_LANIP 494303980Sngie fi 495303980Sngie 496303980Sngie export RUMP_SERVER=$SOCK2 497303980Sngie if [ ${mode} = "ipv6" ]; then 498303980Sngie atf_check -s not-exit:0 -o ignore -e ignore \ 499303980Sngie rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \ 500303980Sngie $ROUTER1_LANIP6 501303980Sngie else 502303980Sngie atf_check -s not-exit:0 -o ignore -e ignore \ 503303980Sngie rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \ 504303980Sngie $ROUTER2_LANIP 505303980Sngie fi 506303980Sngie} 507303980Sngie 508303980Sngietest_ping_success() 509303980Sngie{ 510303980Sngie mode=$1 511303980Sngie 512303980Sngie export RUMP_SERVER=$SOCK1 513303980Sngie rump.ifconfig -v gif0 514303980Sngie if [ ${mode} = "ipv6" ]; then 515303980Sngie # XXX 516303980Sngie # rump.ping6 rarely fails with the message that 517303980Sngie # "failed to get receiving hop limit". 518303980Sngie # This is a known issue being analyzed. 519303980Sngie atf_check -s exit:0 -o ignore \ 520303980Sngie rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \ 521303980Sngie $ROUTER2_LANIP6 522303980Sngie else 523303980Sngie atf_check -s exit:0 -o ignore \ 524303980Sngie rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \ 525303980Sngie $ROUTER2_LANIP 526303980Sngie fi 527303980Sngie rump.ifconfig -v gif0 528303980Sngie 529303980Sngie export RUMP_SERVER=$SOCK2 530303980Sngie rump.ifconfig -v gif0 531303980Sngie if [ ${mode} = "ipv6" ]; then 532303980Sngie atf_check -s exit:0 -o ignore \ 533303980Sngie rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \ 534303980Sngie $ROUTER1_LANIP6 535303980Sngie else 536303980Sngie atf_check -s exit:0 -o ignore \ 537303980Sngie rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER2_LANIP \ 538303980Sngie $ROUTER1_LANIP 539303980Sngie fi 540303980Sngie rump.ifconfig -v gif0 541303980Sngie} 542303980Sngie 543303980Sngietest_change_tunnel_duplicate() 544303980Sngie{ 545303980Sngie mode=$1 546303980Sngie 547303980Sngie newsrc="" 548303980Sngie newdst="" 549303980Sngie if [ ${mode} = "ipv6" ]; then 550303980Sngie newsrc=$ROUTER1_WANIP6_DUMMY 551303980Sngie newdst=$ROUTER2_WANIP6_DUMMY 552303980Sngie else 553303980Sngie newsrc=$ROUTER1_WANIP_DUMMY 554303980Sngie newdst=$ROUTER2_WANIP_DUMMY 555303980Sngie fi 556303980Sngie export RUMP_SERVER=$SOCK1 557303980Sngie rump.ifconfig -v gif0 558303980Sngie rump.ifconfig -v gif1 559303980Sngie atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \ 560303980Sngie rump.ifconfig gif0 tunnel ${newsrc} ${newdst} 561303980Sngie rump.ifconfig -v gif0 562303980Sngie rump.ifconfig -v gif1 563303980Sngie 564303980Sngie if [ ${mode} = "ipv6" ]; then 565303980Sngie newsrc=$ROUTER2_WANIP6_DUMMY 566303980Sngie newdst=$ROUTER1_WANIP6_DUMMY 567303980Sngie else 568303980Sngie newsrc=$ROUTER2_WANIP_DUMMY 569303980Sngie newdst=$ROUTER1_WANIP_DUMMY 570303980Sngie fi 571303980Sngie export RUMP_SERVER=$SOCK2 572303980Sngie rump.ifconfig -v gif0 573303980Sngie rump.ifconfig -v gif1 574303980Sngie atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \ 575303980Sngie rump.ifconfig gif0 tunnel ${newsrc} ${newdst} 576303980Sngie rump.ifconfig -v gif0 577303980Sngie rump.ifconfig -v gif1 578303980Sngie} 579303980Sngie 580303980Sngietest_change_tunnel_success() 581303980Sngie{ 582303980Sngie mode=$1 583303980Sngie 584303980Sngie newsrc="" 585303980Sngie newdst="" 586303980Sngie if [ ${mode} = "ipv6" ]; then 587303980Sngie newsrc=$ROUTER1_WANIP6_DUMMY 588303980Sngie newdst=$ROUTER2_WANIP6_DUMMY 589303980Sngie else 590303980Sngie newsrc=$ROUTER1_WANIP_DUMMY 591303980Sngie newdst=$ROUTER2_WANIP_DUMMY 592303980Sngie fi 593303980Sngie export RUMP_SERVER=$SOCK1 594303980Sngie rump.ifconfig -v gif0 595303980Sngie atf_check -s exit:0 \ 596303980Sngie rump.ifconfig gif0 tunnel ${newsrc} ${newdst} 597303980Sngie rump.ifconfig -v gif0 598303980Sngie 599303980Sngie if [ ${mode} = "ipv6" ]; then 600303980Sngie newsrc=$ROUTER2_WANIP6_DUMMY 601303980Sngie newdst=$ROUTER1_WANIP6_DUMMY 602303980Sngie else 603303980Sngie newsrc=$ROUTER2_WANIP_DUMMY 604303980Sngie newdst=$ROUTER1_WANIP_DUMMY 605303980Sngie fi 606303980Sngie export RUMP_SERVER=$SOCK2 607303980Sngie rump.ifconfig -v gif0 608303980Sngie atf_check -s exit:0 \ 609303980Sngie rump.ifconfig gif0 tunnel ${newsrc} ${newdst} 610303980Sngie rump.ifconfig -v gif0 611303980Sngie} 612303980Sngie 613303980Sngiebasic_setup() 614303980Sngie{ 615303980Sngie inner=$1 616303980Sngie outer=$2 617303980Sngie 618303980Sngie setup ${inner} ${outer} 619303980Sngie test_setup ${inner} ${outer} 620303980Sngie 621303980Sngie # Enable once PR kern/49219 is fixed 622303980Sngie #test_ping_failure 623303980Sngie 624303980Sngie setup_tunnel ${inner} ${outer} 625303980Sngie sleep 1 626303980Sngie test_setup_tunnel ${inner} 627303980Sngie} 628303980Sngie 629303980Sngiebasic_test() 630303980Sngie{ 631303980Sngie inner=$1 632303980Sngie outer=$2 # not use 633303980Sngie 634303980Sngie test_ping_success ${inner} 635303980Sngie} 636303980Sngie 637303980Sngiebasic_teardown() 638303980Sngie{ 639303980Sngie inner=$1 640303980Sngie outer=$2 # not use 641303980Sngie 642303980Sngie teardown_tunnel 643303980Sngie test_ping_failure ${inner} 644303980Sngie} 645303980Sngie 646303980Sngieioctl_setup() 647303980Sngie{ 648303980Sngie inner=$1 649303980Sngie outer=$2 650303980Sngie 651303980Sngie setup ${inner} ${outer} 652303980Sngie test_setup ${inner} ${outer} 653303980Sngie 654303980Sngie # Enable once PR kern/49219 is fixed 655303980Sngie #test_ping_failure 656303980Sngie 657303980Sngie setup_tunnel ${inner} ${outer} 658303980Sngie setup_dummy_tunnel ${inner} ${outer} 659303980Sngie sleep 1 660303980Sngie test_setup_tunnel ${inner} 661303980Sngie} 662303980Sngie 663303980Sngieioctl_test() 664303980Sngie{ 665303980Sngie inner=$1 666303980Sngie outer=$2 667303980Sngie 668303980Sngie test_ping_success ${inner} 669303980Sngie 670303980Sngie test_change_tunnel_duplicate ${outer} 671303980Sngie 672303980Sngie teardown_dummy_tunnel 673303980Sngie test_change_tunnel_success ${outer} 674303980Sngie} 675303980Sngie 676303980Sngieioctl_teardown() 677303980Sngie{ 678303980Sngie inner=$1 679303980Sngie outer=$2 # not use 680303980Sngie 681303980Sngie teardown_tunnel 682303980Sngie test_ping_failure ${inner} 683303980Sngie} 684303980Sngie 685303980Sngierecursive_setup() 686303980Sngie{ 687303980Sngie inner=$1 688303980Sngie outer=$2 689303980Sngie 690303980Sngie setup ${inner} ${outer} 691303980Sngie test_setup ${inner} ${outer} 692303980Sngie 693303980Sngie # Enable once PR kern/49219 is fixed 694303980Sngie #test_ping_failure 695303980Sngie 696303980Sngie setup_tunnel ${inner} ${outer} 697303980Sngie setup_recursive_tunnels ${inner} 698303980Sngie sleep 1 699303980Sngie test_setup_tunnel ${inner} 700303980Sngie} 701303980Sngie 702303980Sngierecursive_test() 703303980Sngie{ 704303980Sngie inner=$1 705303980Sngie outer=$2 # not use 706303980Sngie 707303980Sngie test_recursive_check ${inner} 708303980Sngie} 709303980Sngie 710303980Sngierecursive_teardown() 711303980Sngie{ 712303980Sngie inner=$1 # not use 713303980Sngie outer=$2 # not use 714303980Sngie 715303980Sngie teardown_recursive_tunnels 716303980Sngie teardown_tunnel 717303980Sngie} 718303980Sngie 719303980Sngieadd_test() 720303980Sngie{ 721303980Sngie category=$1 722303980Sngie desc=$2 723303980Sngie inner=$3 724303980Sngie outer=$4 725303980Sngie 726313535Sngie name="gif_${category}_${inner}over${outer}" 727303980Sngie fulldesc="Does ${inner} over ${outer} if_gif ${desc}" 728303980Sngie 729303980Sngie atf_test_case ${name} cleanup 730303980Sngie eval "${name}_head() { \ 731303980Sngie atf_set \"descr\" \"${fulldesc}\"; \ 732303980Sngie atf_set \"require.progs\" \"rump_server\"; \ 733303980Sngie }; \ 734303980Sngie ${name}_body() { \ 735303980Sngie ${category}_setup ${inner} ${outer}; \ 736303980Sngie ${category}_test ${inner} ${outer}; \ 737303980Sngie ${category}_teardown ${inner} ${outer}; \ 738313535Sngie rump_server_destroy_ifaces; \ 739303980Sngie }; \ 740303980Sngie ${name}_cleanup() { \ 741313535Sngie $DEBUG && dump; \ 742303980Sngie cleanup; \ 743303980Sngie }" 744303980Sngie atf_add_test_case ${name} 745303980Sngie} 746303980Sngie 747303980Sngieadd_test_allproto() 748303980Sngie{ 749303980Sngie category=$1 750303980Sngie desc=$2 751303980Sngie 752303980Sngie add_test ${category} "${desc}" ipv4 ipv4 753303980Sngie add_test ${category} "${desc}" ipv4 ipv6 754303980Sngie add_test ${category} "${desc}" ipv6 ipv4 755303980Sngie add_test ${category} "${desc}" ipv6 ipv6 756303980Sngie} 757303980Sngie 758303980Sngieatf_init_test_cases() 759303980Sngie{ 760303980Sngie add_test_allproto basic "basic tests" 761303980Sngie add_test_allproto ioctl "ioctl tests" 762303980Sngie add_test_allproto recursive "recursive check tests" 763303980Sngie} 764