xref: /freebsd/contrib/netbsd-tests/net/route/t_flags.sh (revision d370fd1cd8fc69e87dc63f4f4a82e5a8b4956c93)
1*cdebaff8SEnji Cooper#	$NetBSD: t_flags.sh,v 1.15 2016/12/21 02:46:08 ozaki-r Exp $
2640235e2SEnji Cooper#
3640235e2SEnji Cooper# Copyright (c) 2015 The NetBSD Foundation, 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_PEER=unix://commsock2
30640235e2SEnji CooperSOCK_GW=unix://commsock3
31640235e2SEnji CooperBUS=bus1
32640235e2SEnji CooperBUS2=bus2
33640235e2SEnji Cooper
34*cdebaff8SEnji CooperDEBUG=${DEBUG:-false}
35640235e2SEnji Cooper
36640235e2SEnji Coopersetup_local()
37640235e2SEnji Cooper{
38640235e2SEnji Cooper
39*cdebaff8SEnji Cooper	rump_server_start $SOCK_LOCAL
40*cdebaff8SEnji Cooper	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
41640235e2SEnji Cooper
42640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_LOCAL
43640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.2/24
44640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
45*cdebaff8SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
46640235e2SEnji Cooper
47640235e2SEnji Cooper	$DEBUG && rump.ifconfig
48640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
49640235e2SEnji Cooper}
50640235e2SEnji Cooper
51640235e2SEnji Coopersetup_peer()
52640235e2SEnji Cooper{
53640235e2SEnji Cooper
54*cdebaff8SEnji Cooper	rump_server_start $SOCK_PEER
55*cdebaff8SEnji Cooper	rump_server_add_iface $SOCK_PEER shmif0 $BUS
56640235e2SEnji Cooper
57640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_PEER
58640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.1/24
59640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
60*cdebaff8SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
61640235e2SEnji Cooper
62640235e2SEnji Cooper	$DEBUG && rump.ifconfig
63640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
64640235e2SEnji Cooper}
65640235e2SEnji Cooper
66640235e2SEnji Coopersetup_gw()
67640235e2SEnji Cooper{
68640235e2SEnji Cooper
69*cdebaff8SEnji Cooper	rump_server_start $SOCK_GW
70*cdebaff8SEnji Cooper	rump_server_add_iface $SOCK_GW shmif0 $BUS
71*cdebaff8SEnji Cooper	rump_server_add_iface $SOCK_GW shmif1 $BUS2
72640235e2SEnji Cooper
73640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_GW
74640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.254/24
75640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
76640235e2SEnji Cooper
77640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 10.0.2.1/24
78640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 alias 10.0.2.2/24
79640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up
80640235e2SEnji Cooper
81640235e2SEnji Cooper	# Wait until DAD completes (10 sec at most)
82640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
83640235e2SEnji Cooper	atf_check -s not-exit:0 -x "rump.ifconfig shmif1 |grep -q tentative"
84640235e2SEnji Cooper
85640235e2SEnji Cooper	$DEBUG && rump.ifconfig
86640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
87640235e2SEnji Cooper}
88640235e2SEnji Cooper
89640235e2SEnji Coopertest_lo()
90640235e2SEnji Cooper{
91640235e2SEnji Cooper
92640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_LOCAL
93640235e2SEnji Cooper
94640235e2SEnji Cooper	# Up, Host, local
95*cdebaff8SEnji Cooper	check_route_flags 127.0.0.1 UHl
96640235e2SEnji Cooper}
97640235e2SEnji Cooper
98640235e2SEnji Coopertest_connected()
99640235e2SEnji Cooper{
100640235e2SEnji Cooper
101640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_LOCAL
102640235e2SEnji Cooper
103640235e2SEnji Cooper	# Up, Host, LLINFO, local
104*cdebaff8SEnji Cooper	check_route_flags 10.0.0.2 UHl
105640235e2SEnji Cooper
106640235e2SEnji Cooper	# Up, Cloning
107*cdebaff8SEnji Cooper	check_route_flags 10.0.0/24 UC
108640235e2SEnji Cooper}
109640235e2SEnji Cooper
110640235e2SEnji Coopertest_default_gateway()
111640235e2SEnji Cooper{
112640235e2SEnji Cooper
113640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_LOCAL
114640235e2SEnji Cooper
115640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
116640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
117640235e2SEnji Cooper
118640235e2SEnji Cooper	# Up, Gateway, Static
119*cdebaff8SEnji Cooper	check_route_flags default UGS
120640235e2SEnji Cooper}
121640235e2SEnji Cooper
122640235e2SEnji Coopertest_static()
123640235e2SEnji Cooper{
124640235e2SEnji Cooper
125640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_LOCAL
126640235e2SEnji Cooper
127640235e2SEnji Cooper	# Static route to host
128640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route add 10.0.1.1 10.0.0.1
129640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
130640235e2SEnji Cooper
131640235e2SEnji Cooper	# Up, Gateway, Host, Static
132*cdebaff8SEnji Cooper	check_route_flags 10.0.1.1 UGHS
133640235e2SEnji Cooper
134640235e2SEnji Cooper	# Static route to network
135640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.1
136640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
137640235e2SEnji Cooper
138640235e2SEnji Cooper	# Up, Gateway, Static
139*cdebaff8SEnji Cooper	check_route_flags 10.0.2/24 UGS
140640235e2SEnji Cooper}
141640235e2SEnji Cooper
142640235e2SEnji Coopertest_blackhole()
143640235e2SEnji Cooper{
144640235e2SEnji Cooper
145640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_LOCAL
146640235e2SEnji Cooper
147640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.0.1
148640235e2SEnji Cooper
149640235e2SEnji Cooper	# Delete an existing route first
150640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
151640235e2SEnji Cooper
152640235e2SEnji Cooper	# Gateway must be lo0
153640235e2SEnji Cooper	atf_check -s exit:0 -o ignore \
154640235e2SEnji Cooper	    rump.route add -net 10.0.0.0/24 127.0.0.1 -blackhole
155640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
156640235e2SEnji Cooper
157640235e2SEnji Cooper	# Up, Gateway, Blackhole, Static
158*cdebaff8SEnji Cooper	check_route_flags 10.0.0/24 UGBS
159640235e2SEnji Cooper
160640235e2SEnji Cooper	atf_check -s not-exit:0 -o match:'100.0% packet loss' \
161640235e2SEnji Cooper	    rump.ping -n -w 1 -c 1 10.0.0.1
162640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
163640235e2SEnji Cooper
164640235e2SEnji Cooper	# Shouldn't be created
165*cdebaff8SEnji Cooper	check_route_no_entry 10.0.0.1
166640235e2SEnji Cooper}
167640235e2SEnji Cooper
168640235e2SEnji Coopertest_reject()
169640235e2SEnji Cooper{
170640235e2SEnji Cooper
171640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_LOCAL
172640235e2SEnji Cooper
173640235e2SEnji Cooper	# Delete an existing route first
174640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
175640235e2SEnji Cooper
176640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -reject
177640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
178640235e2SEnji Cooper
179640235e2SEnji Cooper	# Up, Gateway, Reject, Static
180*cdebaff8SEnji Cooper	check_route_flags 10.0.0/24 UGRS
181640235e2SEnji Cooper
182640235e2SEnji Cooper	atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
183640235e2SEnji Cooper	    rump.ping -n -w 1 -c 1 10.0.0.1
184640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
185640235e2SEnji Cooper
186640235e2SEnji Cooper	# Shouldn't be created
187*cdebaff8SEnji Cooper	check_route_no_entry 10.0.0.1
188640235e2SEnji Cooper
189640235e2SEnji Cooper	# Gateway is lo0 (RTF_GATEWAY)
190640235e2SEnji Cooper
191640235e2SEnji Cooper	# Delete an existing route first
192640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
193640235e2SEnji Cooper
194640235e2SEnji Cooper	atf_check -s exit:0 -o ignore \
195640235e2SEnji Cooper	    rump.route add -net 10.0.0.0/24 127.0.0.1 -reject
196640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
197640235e2SEnji Cooper
198640235e2SEnji Cooper	# Up, Gateway, Reject, Static
199*cdebaff8SEnji Cooper	check_route_flags 10.0.0/24 UGRS
200640235e2SEnji Cooper
201640235e2SEnji Cooper	atf_check -s not-exit:0 -o ignore -e match:'Network is unreachable' \
202640235e2SEnji Cooper	    rump.ping -n -w 1 -c 1 10.0.0.1
203640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
204640235e2SEnji Cooper
205640235e2SEnji Cooper	# Shouldn't be created
206*cdebaff8SEnji Cooper	check_route_no_entry 10.0.0.1
207640235e2SEnji Cooper
208640235e2SEnji Cooper	# Gateway is lo0 (RTF_HOST)
209640235e2SEnji Cooper
210640235e2SEnji Cooper	# Delete an existing route first
211640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
212640235e2SEnji Cooper
213640235e2SEnji Cooper	atf_check -s exit:0 -o ignore \
214640235e2SEnji Cooper	    rump.route add -host 10.0.0.1/24 127.0.0.1 -iface -reject
215640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
216640235e2SEnji Cooper
217640235e2SEnji Cooper	# Up, Host, Reject, Static
218*cdebaff8SEnji Cooper	check_route_flags 10.0.0.1 UHRS
219640235e2SEnji Cooper
220640235e2SEnji Cooper	atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
221640235e2SEnji Cooper	    rump.ping -n -w 1 -c 1 10.0.0.1
222640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
223640235e2SEnji Cooper
224640235e2SEnji Cooper	return 0
225640235e2SEnji Cooper}
226640235e2SEnji Cooper
227640235e2SEnji Coopertest_icmp_redirect()
228640235e2SEnji Cooper{
229640235e2SEnji Cooper
230640235e2SEnji Cooper	### Testing Dynamic flag ###
231640235e2SEnji Cooper
232640235e2SEnji Cooper	#
233640235e2SEnji Cooper	# Setup a gateway 10.0.0.254. 10.0.2.1 is behind it.
234640235e2SEnji Cooper	#
235640235e2SEnji Cooper	setup_gw
236640235e2SEnji Cooper
237640235e2SEnji Cooper	#
238640235e2SEnji Cooper	# Teach the peer that 10.0.2.* is behind 10.0.0.254
239640235e2SEnji Cooper	#
240640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_PEER
241640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.254
242640235e2SEnji Cooper	# Up, Gateway, Static
243*cdebaff8SEnji Cooper	check_route_flags 10.0.2/24 UGS
244640235e2SEnji Cooper
245640235e2SEnji Cooper	#
246640235e2SEnji Cooper	# Setup the default gateway to the peer, 10.0.0.1
247640235e2SEnji Cooper	#
248640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_LOCAL
249640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
250640235e2SEnji Cooper	# Up, Gateway, Static
251*cdebaff8SEnji Cooper	check_route_flags default UGS
252640235e2SEnji Cooper
253640235e2SEnji Cooper	# Try ping 10.0.2.1
254640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
255640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
256640235e2SEnji Cooper
257640235e2SEnji Cooper	# Up, Gateway, Host, Dynamic
258*cdebaff8SEnji Cooper	check_route_flags 10.0.2.1 UGHD
259*cdebaff8SEnji Cooper	check_route_gw 10.0.2.1 10.0.0.254
260640235e2SEnji Cooper
261640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_PEER
262640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
263640235e2SEnji Cooper
264640235e2SEnji Cooper	### Testing Modified flag ###
265640235e2SEnji Cooper
266640235e2SEnji Cooper	#
267640235e2SEnji Cooper	# Teach a wrong route to 10.0.2.2
268640235e2SEnji Cooper	#
269640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_LOCAL
270640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route add 10.0.2.2 10.0.0.1
271640235e2SEnji Cooper	# Up, Gateway, Host, Static
272*cdebaff8SEnji Cooper	check_route_flags 10.0.2.2 UGHS
273*cdebaff8SEnji Cooper	check_route_gw 10.0.2.2 10.0.0.1
274640235e2SEnji Cooper
275640235e2SEnji Cooper	# Try ping 10.0.2.2
276640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.2
277640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
278640235e2SEnji Cooper
279640235e2SEnji Cooper	# Up, Gateway, Host, Modified, Static
280*cdebaff8SEnji Cooper	check_route_flags 10.0.2.2 UGHMS
281*cdebaff8SEnji Cooper	check_route_gw 10.0.2.2 10.0.0.254
282640235e2SEnji Cooper}
283640235e2SEnji Cooper
284640235e2SEnji Coopertest_announce()
285640235e2SEnji Cooper{
286640235e2SEnji Cooper	export RUMP_SERVER=$SOCK_LOCAL
287640235e2SEnji Cooper
288640235e2SEnji Cooper	# Delete an existing route first
289640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
290640235e2SEnji Cooper
291640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -proxy
292640235e2SEnji Cooper	$DEBUG && rump.netstat -rn -f inet
293640235e2SEnji Cooper
294640235e2SEnji Cooper	# Up, Gateway, Static, proxy
295*cdebaff8SEnji Cooper	check_route_flags 10.0.0/24 UGSp
296640235e2SEnji Cooper
297640235e2SEnji Cooper	# TODO test its behavior
298640235e2SEnji Cooper}
299640235e2SEnji Cooper
300640235e2SEnji Cooperadd_test()
301640235e2SEnji Cooper{
302640235e2SEnji Cooper	local name=$1
303640235e2SEnji Cooper	local desc="$2"
304640235e2SEnji Cooper
305640235e2SEnji Cooper	atf_test_case "route_flags_${name}" cleanup
306640235e2SEnji Cooper	eval "route_flags_${name}_head() { \
307640235e2SEnji Cooper			atf_set \"descr\" \"${desc}\"; \
308640235e2SEnji Cooper			atf_set \"require.progs\" \"rump_server\"; \
309640235e2SEnji Cooper		}; \
310640235e2SEnji Cooper	    route_flags_${name}_body() { \
311640235e2SEnji Cooper			setup_local; \
312640235e2SEnji Cooper			setup_peer; \
313640235e2SEnji Cooper			test_${name}; \
314*cdebaff8SEnji Cooper			rump_server_destroy_ifaces; \
315640235e2SEnji Cooper		}; \
316640235e2SEnji Cooper	    route_flags_${name}_cleanup() { \
317*cdebaff8SEnji Cooper			$DEBUG && dump; \
318640235e2SEnji Cooper			cleanup; \
319640235e2SEnji Cooper		}"
320640235e2SEnji Cooper	atf_add_test_case "route_flags_${name}"
321640235e2SEnji Cooper}
322640235e2SEnji Cooper
323640235e2SEnji Cooperatf_init_test_cases()
324640235e2SEnji Cooper{
325640235e2SEnji Cooper
326640235e2SEnji Cooper	add_test lo              "Tests route flags: loop back interface"
327640235e2SEnji Cooper	add_test connected       "Tests route flags: connected route"
328640235e2SEnji Cooper	add_test default_gateway "Tests route flags: default gateway"
329640235e2SEnji Cooper	add_test static          "Tests route flags: static route"
330640235e2SEnji Cooper	add_test blackhole       "Tests route flags: blackhole route"
331640235e2SEnji Cooper	add_test reject          "Tests route flags: reject route"
332640235e2SEnji Cooper	add_test icmp_redirect   "Tests route flags: icmp redirect"
333640235e2SEnji Cooper	add_test announce        "Tests route flags: announce flag"
334640235e2SEnji Cooper}
335