xref: /netbsd-src/tests/net/route/t_flags.sh (revision 3f30ca4e9f4d8db1147cd69b679114b037c6e370)
1#	$NetBSD: t_flags.sh,v 1.20 2017/08/03 03:16:27 ozaki-r Exp $
2#
3# Copyright (c) 2015 The NetBSD Foundation, Inc.
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10#    notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright
12#    notice, this list of conditions and the following disclaimer in the
13#    documentation and/or other materials provided with the distribution.
14#
15# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25# POSSIBILITY OF SUCH DAMAGE.
26#
27
28SOCK_LOCAL=unix://commsock1
29SOCK_PEER=unix://commsock2
30SOCK_GW=unix://commsock3
31BUS=bus1
32BUS2=bus2
33
34DEBUG=${DEBUG:-false}
35
36setup_local()
37{
38
39	rump_server_start $SOCK_LOCAL
40	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
41
42	export RUMP_SERVER=$SOCK_LOCAL
43	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.2/24
44	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
45	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
46
47	$DEBUG && rump.ifconfig
48	$DEBUG && rump.netstat -rn -f inet
49}
50
51setup_peer()
52{
53
54	rump_server_start $SOCK_PEER
55	rump_server_add_iface $SOCK_PEER shmif0 $BUS
56
57	export RUMP_SERVER=$SOCK_PEER
58	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.1/24
59	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
60	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
61
62	$DEBUG && rump.ifconfig
63	$DEBUG && rump.netstat -rn -f inet
64}
65
66setup_gw()
67{
68
69	rump_server_start $SOCK_GW
70	rump_server_add_iface $SOCK_GW shmif0 $BUS
71	rump_server_add_iface $SOCK_GW shmif1 $BUS2
72
73	export RUMP_SERVER=$SOCK_GW
74	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.254/24
75	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
76
77	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 10.0.2.1/24
78	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 alias 10.0.2.2/24
79	atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up
80
81	# Wait until DAD completes (10 sec at most)
82	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
83	atf_check -s not-exit:0 -x "rump.ifconfig shmif1 |grep -q tentative"
84
85	$DEBUG && rump.ifconfig
86	$DEBUG && rump.netstat -rn -f inet
87}
88
89test_lo()
90{
91
92	export RUMP_SERVER=$SOCK_LOCAL
93
94	# Up, Host, local
95	check_route_flags 127.0.0.1 UHl
96}
97
98test_connected()
99{
100
101	export RUMP_SERVER=$SOCK_LOCAL
102
103	# Up, Host, local
104	check_route_flags 10.0.0.2 UHl
105
106	# Up, Cloning
107	check_route_flags 10.0.0/24 UC
108}
109
110test_default_gateway()
111{
112
113	export RUMP_SERVER=$SOCK_LOCAL
114
115	atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
116	$DEBUG && rump.netstat -rn -f inet
117
118	# Up, Gateway, Static
119	check_route_flags default UGS
120}
121
122test_static()
123{
124
125	export RUMP_SERVER=$SOCK_LOCAL
126
127	# Static route to host
128	atf_check -s exit:0 -o ignore rump.route add 10.0.1.1 10.0.0.1
129	$DEBUG && rump.netstat -rn -f inet
130
131	# Up, Gateway, Host, Static
132	check_route_flags 10.0.1.1 UGHS
133
134	# Static route to network
135	atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.1
136	$DEBUG && rump.netstat -rn -f inet
137
138	# Up, Gateway, Static
139	check_route_flags 10.0.2/24 UGS
140}
141
142test_blackhole()
143{
144
145	export RUMP_SERVER=$SOCK_LOCAL
146
147	atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.0.1
148
149	# Delete an existing route first
150	atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
151	# Should be removed too
152	atf_check -s not-exit:0 -e match:'no entry' rump.arp -n 10.0.0.1
153
154	# Gateway must be lo0
155	atf_check -s exit:0 -o ignore \
156	    rump.route add -net 10.0.0.0/24 127.0.0.1 -blackhole
157	$DEBUG && rump.netstat -rn -f inet
158
159	# Up, Gateway, Blackhole, Static
160	check_route_flags 10.0.0/24 UGBS
161
162	atf_check -s not-exit:0 -o match:'100.0% packet loss' \
163	    rump.ping -n -w 1 -c 1 10.0.0.1
164	$DEBUG && rump.netstat -rn -f inet
165
166	# Shouldn't be created
167	check_route_no_entry 10.0.0.1
168	atf_check -s not-exit:0 -e match:'no entry' rump.arp -n 10.0.0.1
169}
170
171test_reject()
172{
173
174	export RUMP_SERVER=$SOCK_LOCAL
175
176	# Delete an existing route first
177	atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
178
179	atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -reject
180	$DEBUG && rump.netstat -rn -f inet
181
182	# Up, Gateway, Reject, Static
183	check_route_flags 10.0.0/24 UGRS
184
185	atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
186	    rump.ping -n -w 1 -c 1 10.0.0.1
187	$DEBUG && rump.netstat -rn -f inet
188
189	# Shouldn't be created
190	check_route_no_entry 10.0.0.1
191	atf_check -s not-exit:0 -e match:'no entry' rump.arp -n 10.0.0.1
192
193	# Gateway is lo0 (RTF_GATEWAY)
194
195	# Delete an existing route first
196	atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
197
198	atf_check -s exit:0 -o ignore \
199	    rump.route add -net 10.0.0.0/24 127.0.0.1 -reject
200	$DEBUG && rump.netstat -rn -f inet
201
202	# Up, Gateway, Reject, Static
203	check_route_flags 10.0.0/24 UGRS
204
205	atf_check -s not-exit:0 -o ignore -e match:'Network is unreachable' \
206	    rump.ping -n -w 1 -c 1 10.0.0.1
207	$DEBUG && rump.netstat -rn -f inet
208
209	# Shouldn't be created
210	check_route_no_entry 10.0.0.1
211	atf_check -s not-exit:0 -e match:'no entry' rump.arp -n 10.0.0.1
212
213	# Gateway is lo0 (RTF_HOST)
214
215	# Delete an existing route first
216	atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
217
218	atf_check -s exit:0 -o ignore \
219	    rump.route add -host 10.0.0.1/24 127.0.0.1 -iface -reject
220	$DEBUG && rump.netstat -rn -f inet
221
222	# Up, Host, Reject, Static
223	check_route_flags 10.0.0.1 UHRS
224
225	atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
226	    rump.ping -n -w 1 -c 1 10.0.0.1
227	$DEBUG && rump.netstat -rn -f inet
228
229	return 0
230}
231
232test_icmp_redirect()
233{
234
235	### Testing Dynamic flag ###
236
237	#
238	# Setup a gateway 10.0.0.254. 10.0.2.1 is behind it.
239	#
240	setup_gw
241
242	#
243	# Teach the peer that 10.0.2.* is behind 10.0.0.254
244	#
245	export RUMP_SERVER=$SOCK_PEER
246	atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.254
247	# Up, Gateway, Static
248	check_route_flags 10.0.2/24 UGS
249
250	#
251	# Setup the default gateway to the peer, 10.0.0.1
252	#
253	export RUMP_SERVER=$SOCK_LOCAL
254	atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
255	# Up, Gateway, Static
256	check_route_flags default UGS
257
258	# Try ping 10.0.2.1
259	atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
260	$DEBUG && rump.netstat -rn -f inet
261
262	# Up, Gateway, Host, Dynamic
263	check_route_flags 10.0.2.1 UGHD
264	check_route_gw 10.0.2.1 10.0.0.254
265
266	export RUMP_SERVER=$SOCK_PEER
267	$DEBUG && rump.netstat -rn -f inet
268
269	### Testing Modified flag ###
270
271	#
272	# Teach a wrong route to 10.0.2.2
273	#
274	export RUMP_SERVER=$SOCK_LOCAL
275	atf_check -s exit:0 -o ignore rump.route add 10.0.2.2 10.0.0.1
276	# Up, Gateway, Host, Static
277	check_route_flags 10.0.2.2 UGHS
278	check_route_gw 10.0.2.2 10.0.0.1
279
280	# Try ping 10.0.2.2
281	atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.2
282	$DEBUG && rump.netstat -rn -f inet
283
284	# Up, Gateway, Host, Modified, Static
285	check_route_flags 10.0.2.2 UGHMS
286	check_route_gw 10.0.2.2 10.0.0.254
287}
288
289test_announce()
290{
291	export RUMP_SERVER=$SOCK_LOCAL
292
293	# Delete an existing route first
294	atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
295
296	atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -proxy
297	$DEBUG && rump.netstat -rn -f inet
298
299	# Up, Gateway, Static, proxy
300	check_route_flags 10.0.0/24 UGSp
301
302	# TODO test its behavior
303}
304
305test_llinfo()
306{
307	local peer_macaddr=
308
309	peer_macaddr=$(get_macaddr $SOCK_PEER shmif0)
310
311	export RUMP_SERVER=$SOCK_LOCAL
312
313	atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.0.1
314
315	# Up, Host, LLINFO
316	check_route 10.0.0.1 $peer_macaddr UHL shmif0
317}
318
319add_test()
320{
321	local name=$1
322	local desc="$2"
323
324	atf_test_case "route_flags_${name}" cleanup
325	eval "route_flags_${name}_head() {
326			atf_set descr \"${desc}\"
327			atf_set require.progs rump_server
328		}
329	    route_flags_${name}_body() {
330			setup_local
331			setup_peer
332			test_${name}
333			rump_server_destroy_ifaces
334		}
335	    route_flags_${name}_cleanup() {
336			\$DEBUG && dump
337			cleanup
338		}"
339	atf_add_test_case "route_flags_${name}"
340}
341
342atf_init_test_cases()
343{
344
345	add_test lo              "Tests route flags: loop back interface"
346	add_test connected       "Tests route flags: connected route"
347	add_test default_gateway "Tests route flags: default gateway"
348	add_test static          "Tests route flags: static route"
349	add_test blackhole       "Tests route flags: blackhole route"
350	add_test reject          "Tests route flags: reject route"
351	add_test icmp_redirect   "Tests route flags: icmp redirect"
352	add_test announce        "Tests route flags: announce flag"
353	add_test llinfo          "Tests route flags: ARP caches"
354}
355