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