1*63d1fd59SEnji Cooper# $NetBSD: t_tun.sh,v 1.4 2016/11/07 05:25:37 ozaki-r Exp $ 2*63d1fd59SEnji Cooper# 3*63d1fd59SEnji Cooper# Copyright (c) 2016 Internet Initiative Japan Inc. 4*63d1fd59SEnji Cooper# All rights reserved. 5*63d1fd59SEnji Cooper# 6*63d1fd59SEnji Cooper# Redistribution and use in source and binary forms, with or without 7*63d1fd59SEnji Cooper# modification, are permitted provided that the following conditions 8*63d1fd59SEnji Cooper# are met: 9*63d1fd59SEnji Cooper# 1. Redistributions of source code must retain the above copyright 10*63d1fd59SEnji Cooper# notice, this list of conditions and the following disclaimer. 11*63d1fd59SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright 12*63d1fd59SEnji Cooper# notice, this list of conditions and the following disclaimer in the 13*63d1fd59SEnji Cooper# documentation and/or other materials provided with the distribution. 14*63d1fd59SEnji Cooper# 15*63d1fd59SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16*63d1fd59SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17*63d1fd59SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18*63d1fd59SEnji Cooper# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19*63d1fd59SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20*63d1fd59SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21*63d1fd59SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22*63d1fd59SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23*63d1fd59SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24*63d1fd59SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25*63d1fd59SEnji Cooper# POSSIBILITY OF SUCH DAMAGE. 26*63d1fd59SEnji Cooper# 27*63d1fd59SEnji Cooper 28*63d1fd59SEnji CooperRUMP_FLAGS="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6" 29*63d1fd59SEnji CooperRUMP_FLAGS="$RUMP_FLAGS -lrumpnet_shmif -lrumpnet_tun -lrumpdev" 30*63d1fd59SEnji Cooper 31*63d1fd59SEnji CooperBUS=bus 32*63d1fd59SEnji CooperSOCK_LOCAL=unix://commsock1 33*63d1fd59SEnji CooperSOCK_REMOTE=unix://commsock2 34*63d1fd59SEnji CooperIP_LOCAL=10.0.0.1 35*63d1fd59SEnji CooperIP_REMOTE=10.0.0.2 36*63d1fd59SEnji Cooper 37*63d1fd59SEnji CooperDEBUG=${DEBUG:-true} 38*63d1fd59SEnji Cooper 39*63d1fd59SEnji Cooperatf_test_case tun_create_destroy cleanup 40*63d1fd59SEnji Coopertun_create_destroy_head() 41*63d1fd59SEnji Cooper{ 42*63d1fd59SEnji Cooper 43*63d1fd59SEnji Cooper atf_set "descr" "tests of creation and deletion of tun interface" 44*63d1fd59SEnji Cooper atf_set "require.progs" "rump_server" 45*63d1fd59SEnji Cooper} 46*63d1fd59SEnji Cooper 47*63d1fd59SEnji Coopertun_create_destroy_body() 48*63d1fd59SEnji Cooper{ 49*63d1fd59SEnji Cooper 50*63d1fd59SEnji Cooper atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_LOCAL} 51*63d1fd59SEnji Cooper 52*63d1fd59SEnji Cooper export RUMP_SERVER=${SOCK_LOCAL} 53*63d1fd59SEnji Cooper 54*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig tun0 create 55*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig tun0 up 56*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig tun0 down 57*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig tun0 destroy 58*63d1fd59SEnji Cooper} 59*63d1fd59SEnji Cooper 60*63d1fd59SEnji Coopertun_create_destroy_cleanup() 61*63d1fd59SEnji Cooper{ 62*63d1fd59SEnji Cooper 63*63d1fd59SEnji Cooper RUMP_SERVER=${SOCK_LOCAL} rump.halt 64*63d1fd59SEnji Cooper} 65*63d1fd59SEnji Cooper 66*63d1fd59SEnji Cooperatf_test_case tun_setup cleanup 67*63d1fd59SEnji Coopertun_setup_head() 68*63d1fd59SEnji Cooper{ 69*63d1fd59SEnji Cooper 70*63d1fd59SEnji Cooper atf_set "descr" "tests of setting up a tunnel" 71*63d1fd59SEnji Cooper atf_set "require.progs" "rump_server" 72*63d1fd59SEnji Cooper} 73*63d1fd59SEnji Cooper 74*63d1fd59SEnji Coopercheck_route_entry() 75*63d1fd59SEnji Cooper{ 76*63d1fd59SEnji Cooper local ip=$(echo $1 |sed 's/\./\\./g') 77*63d1fd59SEnji Cooper local gw=$2 78*63d1fd59SEnji Cooper local flags=$3 79*63d1fd59SEnji Cooper local iface=$4 80*63d1fd59SEnji Cooper 81*63d1fd59SEnji Cooper atf_check -s exit:0 -o match:" $flags " -e ignore -x \ 82*63d1fd59SEnji Cooper "rump.netstat -rn -f inet | grep ^'$ip'" 83*63d1fd59SEnji Cooper atf_check -s exit:0 -o match:" $gw " -e ignore -x \ 84*63d1fd59SEnji Cooper "rump.netstat -rn -f inet | grep ^'$ip'" 85*63d1fd59SEnji Cooper atf_check -s exit:0 -o match:" $iface" -e ignore -x \ 86*63d1fd59SEnji Cooper "rump.netstat -rn -f inet | grep ^'$ip'" 87*63d1fd59SEnji Cooper} 88*63d1fd59SEnji Cooper 89*63d1fd59SEnji Coopertun_setup_body() 90*63d1fd59SEnji Cooper{ 91*63d1fd59SEnji Cooper 92*63d1fd59SEnji Cooper atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_LOCAL} 93*63d1fd59SEnji Cooper atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_REMOTE} 94*63d1fd59SEnji Cooper 95*63d1fd59SEnji Cooper export RUMP_SERVER=${SOCK_LOCAL} 96*63d1fd59SEnji Cooper 97*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 create 98*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS 99*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 ${IP_LOCAL}/24 up 100*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 101*63d1fd59SEnji Cooper 102*63d1fd59SEnji Cooper export RUMP_SERVER=${SOCK_REMOTE} 103*63d1fd59SEnji Cooper 104*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 create 105*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS 106*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 ${IP_REMOTE}/24 up 107*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 108*63d1fd59SEnji Cooper 109*63d1fd59SEnji Cooper export RUMP_SERVER=${SOCK_LOCAL} 110*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig tun0 create 111*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig tun0 ${IP_LOCAL} ${IP_REMOTE} up 112*63d1fd59SEnji Cooper atf_check -s exit:0 \ 113*63d1fd59SEnji Cooper -o match:"inet ${IP_LOCAL}/32 -> ${IP_REMOTE}" rump.ifconfig tun0 114*63d1fd59SEnji Cooper $DEBUG && rump.netstat -nr -f inet 115*63d1fd59SEnji Cooper check_route_entry ${IP_REMOTE} ${IP_LOCAL} UH tun0 116*63d1fd59SEnji Cooper 117*63d1fd59SEnji Cooper export RUMP_SERVER=${SOCK_REMOTE} 118*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig tun0 create 119*63d1fd59SEnji Cooper atf_check -s exit:0 rump.ifconfig tun0 ${IP_REMOTE} ${IP_LOCAL} up 120*63d1fd59SEnji Cooper atf_check -s exit:0 \ 121*63d1fd59SEnji Cooper -o match:"inet ${IP_REMOTE}/32 -> ${IP_LOCAL}" rump.ifconfig tun0 122*63d1fd59SEnji Cooper $DEBUG && rump.netstat -nr -f inet 123*63d1fd59SEnji Cooper check_route_entry ${IP_LOCAL} ${IP_REMOTE} UH tun0 124*63d1fd59SEnji Cooper} 125*63d1fd59SEnji Cooper 126*63d1fd59SEnji Coopertun_setup_cleanup() 127*63d1fd59SEnji Cooper{ 128*63d1fd59SEnji Cooper 129*63d1fd59SEnji Cooper RUMP_SERVER=${SOCK_LOCAL} rump.halt 130*63d1fd59SEnji Cooper RUMP_SERVER=${SOCK_REMOTE} rump.halt 131*63d1fd59SEnji Cooper} 132*63d1fd59SEnji Cooper 133*63d1fd59SEnji Cooperatf_init_test_cases() 134*63d1fd59SEnji Cooper{ 135*63d1fd59SEnji Cooper 136*63d1fd59SEnji Cooper atf_add_test_case tun_create_destroy 137*63d1fd59SEnji Cooper atf_add_test_case tun_setup 138*63d1fd59SEnji Cooper} 139