1*640235e2SEnji Cooper# $NetBSD: t_tap.sh,v 1.3 2016/08/10 22:42:21 kre Exp $ 2*640235e2SEnji Cooper# 3*640235e2SEnji Cooper# Copyright (c) 2016 Internet Initiative Japan Inc. 4*640235e2SEnji Cooper# All rights reserved. 5*640235e2SEnji Cooper# 6*640235e2SEnji Cooper# Redistribution and use in source and binary forms, with or without 7*640235e2SEnji Cooper# modification, are permitted provided that the following conditions 8*640235e2SEnji Cooper# are met: 9*640235e2SEnji Cooper# 1. Redistributions of source code must retain the above copyright 10*640235e2SEnji Cooper# notice, this list of conditions and the following disclaimer. 11*640235e2SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright 12*640235e2SEnji Cooper# notice, this list of conditions and the following disclaimer in the 13*640235e2SEnji Cooper# documentation and/or other materials provided with the distribution. 14*640235e2SEnji Cooper# 15*640235e2SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16*640235e2SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17*640235e2SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18*640235e2SEnji Cooper# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19*640235e2SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20*640235e2SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21*640235e2SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22*640235e2SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23*640235e2SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24*640235e2SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25*640235e2SEnji Cooper# POSSIBILITY OF SUCH DAMAGE. 26*640235e2SEnji Cooper# 27*640235e2SEnji Cooper 28*640235e2SEnji CooperRUMP_FLAGS="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6" 29*640235e2SEnji CooperRUMP_FLAGS="$RUMP_FLAGS -lrumpnet_shmif -lrumpnet_tap -lrumpnet_bridge -lrumpdev" 30*640235e2SEnji CooperHIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=sysctl=yes" 31*640235e2SEnji Cooper 32*640235e2SEnji CooperSOCK_LOCAL=unix://commsock1 33*640235e2SEnji CooperSOCK_REMOTE=unix://commsock2 34*640235e2SEnji CooperBUS=bus1 35*640235e2SEnji CooperIP4_LOCAL=10.0.0.1 36*640235e2SEnji CooperIP4_TAP=10.0.0.2 37*640235e2SEnji CooperIP4_REMOTE=10.0.0.3 38*640235e2SEnji CooperIP6_LOCAL=fc00::1 39*640235e2SEnji CooperIP6_TAP=fc00::2 40*640235e2SEnji CooperIP6_REMOTE=fc00::3 41*640235e2SEnji Cooper 42*640235e2SEnji CooperDEBUG=false 43*640235e2SEnji CooperTIMEOUT=1 44*640235e2SEnji Cooper 45*640235e2SEnji Cooperatf_test_case tap_create_destroy cleanup 46*640235e2SEnji Coopertap_create_destroy_head() 47*640235e2SEnji Cooper{ 48*640235e2SEnji Cooper 49*640235e2SEnji Cooper atf_set "descr" "tests of creation and deletion of tap interface" 50*640235e2SEnji Cooper atf_set "require.progs" "rump_server" 51*640235e2SEnji Cooper} 52*640235e2SEnji Cooper 53*640235e2SEnji Coopertap_create_destroy_body() 54*640235e2SEnji Cooper{ 55*640235e2SEnji Cooper 56*640235e2SEnji Cooper atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_LOCAL} 57*640235e2SEnji Cooper 58*640235e2SEnji Cooper export RUMP_SERVER=${SOCK_LOCAL} 59*640235e2SEnji Cooper 60*640235e2SEnji Cooper # Create and destroy (no address) 61*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 create 62*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 destroy 63*640235e2SEnji Cooper 64*640235e2SEnji Cooper # Create and destroy (with an IPv4 address) 65*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 create 66*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP 67*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 up 68*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 destroy 69*640235e2SEnji Cooper 70*640235e2SEnji Cooper # Create and destroy (with an IPv6 address) 71*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 create 72*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP 73*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 up 74*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 destroy 75*640235e2SEnji Cooper} 76*640235e2SEnji Cooper 77*640235e2SEnji Coopertap_create_destroy_cleanup() 78*640235e2SEnji Cooper{ 79*640235e2SEnji Cooper 80*640235e2SEnji Cooper RUMP_SERVER=${SOCK_LOCAL} rump.halt 81*640235e2SEnji Cooper} 82*640235e2SEnji Cooper 83*640235e2SEnji Cooperatf_test_case tap_stand_alone cleanup 84*640235e2SEnji Coopertap_create_destroy_head() 85*640235e2SEnji Cooper{ 86*640235e2SEnji Cooper 87*640235e2SEnji Cooper atf_set "descr" "tests of alone tap interface" 88*640235e2SEnji Cooper atf_set "require.progs" "rump_server" 89*640235e2SEnji Cooper} 90*640235e2SEnji Cooper 91*640235e2SEnji Coopertap_stand_alone_body() 92*640235e2SEnji Cooper{ 93*640235e2SEnji Cooper atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_LOCAL} 94*640235e2SEnji Cooper atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_REMOTE} 95*640235e2SEnji Cooper 96*640235e2SEnji Cooper export RUMP_SERVER=${SOCK_LOCAL} 97*640235e2SEnji Cooper 98*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 create 99*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS 100*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL 101*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL 102*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 up 103*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 create 104*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP 105*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP 106*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 up 107*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 108*640235e2SEnji Cooper 109*640235e2SEnji Cooper export RUMP_SERVER=${SOCK_REMOTE} 110*640235e2SEnji Cooper 111*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 create 112*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS 113*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE 114*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE 115*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 up 116*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 117*640235e2SEnji Cooper 118*640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_LOCAL 119*640235e2SEnji Cooper # Cannot reach to an alone tap 120*640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore \ 121*640235e2SEnji Cooper rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP 122*640235e2SEnji Cooper 123*640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL 124*640235e2SEnji Cooper # Cannot reach to an alone tap 125*640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore \ 126*640235e2SEnji Cooper rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP 127*640235e2SEnji Cooper} 128*640235e2SEnji Cooper 129*640235e2SEnji Coopertap_stand_alone_cleanup() 130*640235e2SEnji Cooper{ 131*640235e2SEnji Cooper 132*640235e2SEnji Cooper RUMP_SERVER=${SOCK_LOCAL} rump.halt 133*640235e2SEnji Cooper RUMP_SERVER=${SOCK_REMOTE} rump.halt 134*640235e2SEnji Cooper} 135*640235e2SEnji Cooper 136*640235e2SEnji Cooperatf_test_case tap_bridged cleanup 137*640235e2SEnji Coopertap_bridged_head() 138*640235e2SEnji Cooper{ 139*640235e2SEnji Cooper 140*640235e2SEnji Cooper atf_set "descr" "tests of alone tap interface" 141*640235e2SEnji Cooper atf_set "require.progs" "rump_server" 142*640235e2SEnji Cooper} 143*640235e2SEnji Cooper 144*640235e2SEnji Coopertap_bridged_body() 145*640235e2SEnji Cooper{ 146*640235e2SEnji Cooper atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_LOCAL} 147*640235e2SEnji Cooper atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${SOCK_REMOTE} 148*640235e2SEnji Cooper 149*640235e2SEnji Cooper export RUMP_SERVER=${SOCK_LOCAL} 150*640235e2SEnji Cooper 151*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 create 152*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS 153*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL 154*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL 155*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 up 156*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 create 157*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP 158*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP 159*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 up 160*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 161*640235e2SEnji Cooper 162*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig bridge0 create 163*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig bridge0 up 164*640235e2SEnji Cooper export LD_PRELOAD=/usr/lib/librumphijack.so 165*640235e2SEnji Cooper atf_check -s exit:0 brconfig bridge0 add shmif0 166*640235e2SEnji Cooper atf_check -s exit:0 brconfig bridge0 add tap0 167*640235e2SEnji Cooper unset LD_PRELOAD 168*640235e2SEnji Cooper 169*640235e2SEnji Cooper export RUMP_SERVER=${SOCK_REMOTE} 170*640235e2SEnji Cooper 171*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 create 172*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS 173*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE 174*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE 175*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 up 176*640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 177*640235e2SEnji Cooper 178*640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_LOCAL 179*640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP 180*640235e2SEnji Cooper 181*640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL 182*640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP 183*640235e2SEnji Cooper} 184*640235e2SEnji Cooper 185*640235e2SEnji Coopertap_bridged_cleanup() 186*640235e2SEnji Cooper{ 187*640235e2SEnji Cooper 188*640235e2SEnji Cooper RUMP_SERVER=${SOCK_LOCAL} rump.halt 189*640235e2SEnji Cooper RUMP_SERVER=${SOCK_REMOTE} rump.halt 190*640235e2SEnji Cooper} 191*640235e2SEnji Cooper 192*640235e2SEnji Cooperatf_init_test_cases() 193*640235e2SEnji Cooper{ 194*640235e2SEnji Cooper 195*640235e2SEnji Cooper atf_add_test_case tap_create_destroy 196*640235e2SEnji Cooper atf_add_test_case tap_stand_alone 197*640235e2SEnji Cooper atf_add_test_case tap_bridged 198*640235e2SEnji Cooper} 199