1*cdebaff8SEnji Cooper# $NetBSD: t_tap.sh,v 1.6 2016/11/25 08:51:16 ozaki-r Exp $ 2640235e2SEnji Cooper# 3640235e2SEnji Cooper# Copyright (c) 2016 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 CooperSOCK_LOCAL=unix://commsock1 29640235e2SEnji CooperSOCK_REMOTE=unix://commsock2 30640235e2SEnji CooperBUS=bus1 31640235e2SEnji CooperIP4_LOCAL=10.0.0.1 32640235e2SEnji CooperIP4_TAP=10.0.0.2 33640235e2SEnji CooperIP4_REMOTE=10.0.0.3 34640235e2SEnji CooperIP6_LOCAL=fc00::1 35640235e2SEnji CooperIP6_TAP=fc00::2 36640235e2SEnji CooperIP6_REMOTE=fc00::3 37640235e2SEnji Cooper 38*cdebaff8SEnji CooperDEBUG=${DEBUG:-false} 39640235e2SEnji CooperTIMEOUT=1 40640235e2SEnji Cooper 41640235e2SEnji Cooperatf_test_case tap_create_destroy cleanup 42640235e2SEnji Coopertap_create_destroy_head() 43640235e2SEnji Cooper{ 44640235e2SEnji Cooper 45640235e2SEnji Cooper atf_set "descr" "tests of creation and deletion of tap interface" 46640235e2SEnji Cooper atf_set "require.progs" "rump_server" 47640235e2SEnji Cooper} 48640235e2SEnji Cooper 49640235e2SEnji Coopertap_create_destroy_body() 50640235e2SEnji Cooper{ 51640235e2SEnji Cooper 52*cdebaff8SEnji Cooper rump_server_start $SOCK_LOCAL netinet6 tap 53640235e2SEnji Cooper 54640235e2SEnji Cooper export RUMP_SERVER=${SOCK_LOCAL} 55640235e2SEnji Cooper 56640235e2SEnji Cooper # Create and destroy (no address) 57640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 create 58640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 destroy 59640235e2SEnji Cooper 60640235e2SEnji Cooper # Create and destroy (with an IPv4 address) 61640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 create 62640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP 63640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 up 64640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 destroy 65640235e2SEnji Cooper 66640235e2SEnji Cooper # Create and destroy (with an IPv6 address) 67640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 create 68640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP 69640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 up 70640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 destroy 71640235e2SEnji Cooper} 72640235e2SEnji Cooper 73640235e2SEnji Coopertap_create_destroy_cleanup() 74640235e2SEnji Cooper{ 75640235e2SEnji Cooper 76*cdebaff8SEnji Cooper $DEBUG && dump 77*cdebaff8SEnji Cooper cleanup 78640235e2SEnji Cooper} 79640235e2SEnji Cooper 80640235e2SEnji Cooperatf_test_case tap_stand_alone cleanup 81640235e2SEnji Coopertap_create_destroy_head() 82640235e2SEnji Cooper{ 83640235e2SEnji Cooper 84640235e2SEnji Cooper atf_set "descr" "tests of alone tap interface" 85640235e2SEnji Cooper atf_set "require.progs" "rump_server" 86640235e2SEnji Cooper} 87640235e2SEnji Cooper 88640235e2SEnji Coopertap_stand_alone_body() 89640235e2SEnji Cooper{ 90*cdebaff8SEnji Cooper 91*cdebaff8SEnji Cooper rump_server_start $SOCK_LOCAL netinet6 tap 92*cdebaff8SEnji Cooper rump_server_start $SOCK_REMOTE netinet6 tap 93*cdebaff8SEnji Cooper 94*cdebaff8SEnji Cooper rump_server_add_iface $SOCK_LOCAL shmif0 $BUS 95*cdebaff8SEnji Cooper rump_server_add_iface $SOCK_REMOTE shmif0 $BUS 96640235e2SEnji Cooper 97640235e2SEnji Cooper export RUMP_SERVER=${SOCK_LOCAL} 98640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL 99640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL 100640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 up 101640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 create 102640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP 103640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP 104640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 up 105640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 106640235e2SEnji Cooper 107640235e2SEnji Cooper export RUMP_SERVER=${SOCK_REMOTE} 108640235e2SEnji Cooper 109640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE 110640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE 111640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 up 112640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 113640235e2SEnji Cooper 114640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_LOCAL 115640235e2SEnji Cooper # Cannot reach to an alone tap 116640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore \ 117640235e2SEnji Cooper rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP 118640235e2SEnji Cooper 119640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL 120640235e2SEnji Cooper # Cannot reach to an alone tap 121640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e ignore \ 122640235e2SEnji Cooper rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP 123*cdebaff8SEnji Cooper 124*cdebaff8SEnji Cooper rump_server_destroy_ifaces 125640235e2SEnji Cooper} 126640235e2SEnji Cooper 127640235e2SEnji Coopertap_stand_alone_cleanup() 128640235e2SEnji Cooper{ 129640235e2SEnji Cooper 130*cdebaff8SEnji Cooper $DEBUG && dump 131*cdebaff8SEnji Cooper cleanup 132640235e2SEnji Cooper} 133640235e2SEnji Cooper 134640235e2SEnji Cooperatf_test_case tap_bridged cleanup 135640235e2SEnji Coopertap_bridged_head() 136640235e2SEnji Cooper{ 137640235e2SEnji Cooper 138640235e2SEnji Cooper atf_set "descr" "tests of alone tap interface" 139640235e2SEnji Cooper atf_set "require.progs" "rump_server" 140640235e2SEnji Cooper} 141640235e2SEnji Cooper 142640235e2SEnji Coopertap_bridged_body() 143640235e2SEnji Cooper{ 144*cdebaff8SEnji Cooper 145*cdebaff8SEnji Cooper rump_server_start $SOCK_LOCAL netinet6 tap bridge 146*cdebaff8SEnji Cooper rump_server_start $SOCK_REMOTE netinet6 tap 147*cdebaff8SEnji Cooper 148*cdebaff8SEnji Cooper rump_server_add_iface $SOCK_LOCAL shmif0 $BUS 149*cdebaff8SEnji Cooper rump_server_add_iface $SOCK_REMOTE shmif0 $BUS 150640235e2SEnji Cooper 151640235e2SEnji Cooper export RUMP_SERVER=${SOCK_LOCAL} 152640235e2SEnji Cooper 153640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL 154640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL 155640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 up 156640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 create 157640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP 158640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP 159640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig tap0 up 160640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 161640235e2SEnji Cooper 162640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig bridge0 create 163640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig bridge0 up 164640235e2SEnji Cooper export LD_PRELOAD=/usr/lib/librumphijack.so 165640235e2SEnji Cooper atf_check -s exit:0 brconfig bridge0 add shmif0 166640235e2SEnji Cooper atf_check -s exit:0 brconfig bridge0 add tap0 167640235e2SEnji Cooper unset LD_PRELOAD 168640235e2SEnji Cooper 169640235e2SEnji Cooper export RUMP_SERVER=${SOCK_REMOTE} 170640235e2SEnji Cooper 171640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE 172640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE 173640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig shmif0 up 174640235e2SEnji Cooper atf_check -s exit:0 rump.ifconfig -w 10 175640235e2SEnji Cooper 176640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_LOCAL 177640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP 178640235e2SEnji Cooper 179640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL 180640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP 181*cdebaff8SEnji Cooper 182*cdebaff8SEnji Cooper rump_server_destroy_ifaces 183640235e2SEnji Cooper} 184640235e2SEnji Cooper 185640235e2SEnji Coopertap_bridged_cleanup() 186640235e2SEnji Cooper{ 187640235e2SEnji Cooper 188*cdebaff8SEnji Cooper $DEBUG && dump 189*cdebaff8SEnji Cooper cleanup 190640235e2SEnji Cooper} 191640235e2SEnji Cooper 192640235e2SEnji Cooperatf_init_test_cases() 193640235e2SEnji Cooper{ 194640235e2SEnji Cooper 195640235e2SEnji Cooper atf_add_test_case tap_create_destroy 196640235e2SEnji Cooper atf_add_test_case tap_stand_alone 197640235e2SEnji Cooper atf_add_test_case tap_bridged 198640235e2SEnji Cooper} 199