1#	$NetBSD: t_change.sh,v 1.14 2019/05/13 17:55:09 bad Exp $
2#
3# Copyright (c) 2011 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
28netserver=\
29"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif"
30export RUMP_SERVER=unix://commsock
31
32DEBUG=${DEBUG:-false}
33
34route_cleanup_common()
35{
36
37	$DEBUG && dump_kernel_stats unix://commsock
38	$DEBUG && extract_rump_server_core
39	env RUMP_SERVER=unix://commsock rump.halt
40}
41
42atf_test_case route_change_reject2blackhole cleanup
43route_change_reject2blackhole_head()
44{
45
46	atf_set "descr" "Change a reject route to blackhole"
47	atf_set "require.progs" "rump_server"
48}
49
50route_change_reject2blackhole_body()
51{
52
53	atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
54
55	atf_check -s exit:0 -o ignore \
56	    rump.route add 207.46.197.32 127.0.0.1 -reject
57	atf_check -s exit:0 -o match:UGHR -x \
58	    "rump.route -n show -inet | grep ^207.46"
59	atf_check -s exit:0 -o ignore \
60	    rump.route change 207.46.197.32 127.0.0.1 -blackhole
61	atf_check -s exit:0 -o match:' UGHBS ' -e ignore -x \
62	    "rump.netstat -rn -f inet | grep ^207.46"
63}
64
65route_change_reject2blackhole_cleanup()
66{
67
68	route_cleanup_common
69}
70
71atf_test_case route_change_gateway cleanup
72route_change_gateway_head()
73{
74
75	atf_set "descr" "Change the gateway of a route"
76	atf_set "require.progs" "rump_server"
77}
78
79route_change_gateway_body()
80{
81
82	atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
83
84	atf_check -s exit:0 rump.ifconfig shmif0 create
85	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
86	atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up
87
88	atf_check -s exit:0 -o ignore \
89	    rump.route add -net 192.168.0.0/24 10.0.0.1
90	atf_check -s exit:0 -o match:'10.0.0.1' -x \
91	    "rump.route -n show -inet | grep ^192.168"
92	atf_check -s exit:0 -o ignore \
93	    rump.route change -net 192.168.0.0/24 10.0.0.254
94	atf_check -s exit:0 -o match:'10.0.0.254' -x \
95	    "rump.route -n show -inet | grep ^192.168"
96}
97
98route_change_gateway_cleanup()
99{
100
101	route_cleanup_common
102}
103
104atf_test_case route_change_ifa cleanup
105route_change_ifa_head()
106{
107
108	atf_set "descr" "Change the ifa (local address) of a route"
109	atf_set "require.progs" "rump_server"
110}
111
112route_change_ifa_body()
113{
114
115	atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
116
117	atf_check -s exit:0 rump.ifconfig shmif0 create
118	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
119	atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24
120	atf_check -s exit:0 rump.ifconfig shmif0 alias 10.0.0.11/24
121	atf_check -s exit:0 rump.ifconfig shmif0 up
122
123	atf_check -s exit:0 -o ignore \
124	    rump.route add -net 192.168.0.0/24 10.0.0.1
125	atf_check -s exit:0 -o match:'10.0.0.1' -x \
126	    "rump.route -n show -inet | grep ^192.168"
127	$DEBUG && rump.route -n show -inet
128	cat >./expect <<-EOF
129   route to: 192.168.0.1
130destination: 192.168.0.0
131       mask: 255.255.255.0
132    gateway: 10.0.0.1
133 local addr: 10.0.0.10
134  interface: shmif0
135      flags: 0x843<UP,GATEWAY,DONE,STATIC>
136 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
137	EOF
138	rump.route -n get 192.168.0.1 > ./output
139	$DEBUG && cat ./expect ./output
140	sed -i '$d' ./output
141	atf_check -s exit:0 diff ./expect ./output
142
143	# Change the local address of the route
144	atf_check -s exit:0 -o ignore \
145	    rump.route change -net 192.168.0.0/24 10.0.0.1 -ifa 10.0.0.11
146	$DEBUG && rump.route -n show -inet
147	cat >./expect <<-EOF
148   route to: 192.168.0.1
149destination: 192.168.0.0
150       mask: 255.255.255.0
151    gateway: 10.0.0.1
152 local addr: 10.0.0.11
153  interface: shmif0
154      flags: 0x843<UP,GATEWAY,DONE,STATIC>
155 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
156	EOF
157	rump.route -n get 192.168.0.1 > ./output
158	$DEBUG && cat ./expect ./output
159	sed -i '$d' ./output
160	atf_check -s exit:0 diff ./expect ./output
161}
162
163route_change_ifa_cleanup()
164{
165
166	route_cleanup_common
167}
168
169atf_test_case route_change_ifp cleanup
170route_change_ifp_head()
171{
172
173	atf_set "descr" "Change a route based on an interface (ifp)"
174	atf_set "require.progs" "rump_server"
175}
176
177route_change_ifp_body()
178{
179
180	atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
181
182	atf_check -s exit:0 rump.ifconfig shmif0 create
183	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
184	atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up
185
186	atf_check -s exit:0 rump.ifconfig shmif1 create
187	atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus
188	atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24 up
189
190	atf_check -s exit:0 -o ignore \
191	    rump.route add -net 192.168.0.0/24 10.0.0.1
192	atf_check -s exit:0 -o match:'10.0.0.1' -x \
193	    "rump.route -n show -inet | grep ^192.168"
194	$DEBUG && rump.route -n show -inet
195	cat >./expect <<-EOF
196   route to: 192.168.0.1
197destination: 192.168.0.0
198       mask: 255.255.255.0
199    gateway: 10.0.0.1
200 local addr: 10.0.0.10
201  interface: shmif0
202      flags: 0x843<UP,GATEWAY,DONE,STATIC>
203 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
204	EOF
205	rump.route -n get 192.168.0.1 > ./output
206	$DEBUG && cat ./expect ./output
207	sed -i '$d' ./output
208	atf_check -s exit:0 diff ./expect ./output
209
210	# Change a route based on an interface
211	atf_check -s exit:0 -o ignore \
212	    rump.route change -net 192.168.0.0/24 10.0.0.1 -ifp shmif1
213	$DEBUG && rump.route -n show -inet
214	cat >./expect <<-EOF
215   route to: 192.168.0.1
216destination: 192.168.0.0
217       mask: 255.255.255.0
218    gateway: 10.0.0.1
219 local addr: 10.0.0.11
220  interface: shmif1
221      flags: 0x843<UP,GATEWAY,DONE,STATIC>
222 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
223	EOF
224	rump.route -n get 192.168.0.1 > ./output
225	$DEBUG && cat ./expect ./output
226	sed -i '$d' ./output
227	atf_check -s exit:0 diff ./expect ./output
228}
229
230route_change_ifp_cleanup()
231{
232
233	route_cleanup_common
234}
235
236atf_test_case route_change_ifp_ifa cleanup
237route_change_ifp_head()
238{
239
240	atf_set "descr" "Change a route with -ifp and -ifa"
241	atf_set "require.progs" "rump_server"
242}
243
244route_change_ifp_ifa_body()
245{
246
247	atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
248
249	atf_check -s exit:0 rump.ifconfig shmif0 create
250	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
251	atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up
252
253	atf_check -s exit:0 rump.ifconfig shmif1 create
254	atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus
255	atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24 up
256
257	atf_check -s exit:0 -o ignore \
258	    rump.route add -net 192.168.0.0/24 10.0.0.1
259	atf_check -s exit:0 -o match:'10.0.0.1' -x \
260	    "rump.route -n show -inet | grep ^192.168"
261	$DEBUG && rump.route -n show -inet
262	cat >./expect <<-EOF
263   route to: 192.168.0.1
264destination: 192.168.0.0
265       mask: 255.255.255.0
266    gateway: 10.0.0.1
267 local addr: 10.0.0.10
268  interface: shmif0
269      flags: 0x843<UP,GATEWAY,DONE,STATIC>
270 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
271	EOF
272	rump.route -n get 192.168.0.1 > ./output
273	$DEBUG && cat ./expect ./output
274	sed -i '$d' ./output
275	atf_check -s exit:0 diff ./expect ./output
276
277	# Change a route with -ifa and -ifp
278	atf_check -s exit:0 -o ignore \
279	    rump.route change -net 192.168.0.0/24 -ifa 10.0.0.1 -ifp shmif1
280	$DEBUG && rump.route -n show -inet
281	cat >./expect <<-EOF
282   route to: 192.168.0.1
283destination: 192.168.0.0
284       mask: 255.255.255.0
285    gateway: 10.0.0.1
286 local addr: 10.0.0.11
287  interface: shmif1
288      flags: 0x843<UP,GATEWAY,DONE,STATIC>
289 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
290	EOF
291	rump.route -n get 192.168.0.1 > ./output
292	$DEBUG && cat ./expect ./output
293	sed -i '$d' ./output
294	atf_check -s exit:0 diff ./expect ./output
295}
296
297route_change_ifp_ifa_cleanup()
298{
299
300	route_cleanup_common
301}
302
303atf_test_case route_change_flags cleanup
304route_change_flags_head()
305{
306
307	atf_set "descr" "Change flags of a route"
308	atf_set "require.progs" "rump_server"
309}
310
311route_change_flags_body()
312{
313
314	atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
315
316	atf_check -s exit:0 rump.ifconfig shmif0 create
317	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
318	atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up
319
320	check_route 10.0.0/24 '' UC shmif0
321	# Set reject flag
322	atf_check -s exit:0 -o ignore \
323	    rump.route change -net 10.0.0.0/24 -reject
324	check_route 10.0.0/24 '' URCS shmif0
325	# Clear reject flag
326	atf_check -s exit:0 -o ignore \
327	    rump.route change -net 10.0.0.0/24 -noreject
328	check_route 10.0.0/24 '' UCS shmif0
329
330	# TODO other flags
331}
332
333route_change_flags_cleanup()
334{
335
336	route_cleanup_common
337}
338
339atf_test_case route_change_default_flags cleanup
340route_change_default_flags_head()
341{
342
343	atf_set "descr" "Change flags of the default route"
344	atf_set "require.progs" "rump_server"
345}
346
347route_change_default_flags_body()
348{
349
350	atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
351
352	atf_check -s exit:0 rump.ifconfig shmif0 create
353	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
354	atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up
355
356	atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
357	check_route default 10.0.0.1 UGS shmif0
358	# Set reject flag
359	atf_check -s exit:0 -o ignore rump.route change default -reject
360	check_route default 10.0.0.1 UGRS shmif0
361	# Clear reject flag
362	atf_check -s exit:0 -o ignore rump.route change default -noreject
363	check_route default 10.0.0.1 UGS shmif0
364
365	# TODO other flags
366}
367
368route_change_default_flags_cleanup()
369{
370
371	route_cleanup_common
372}
373
374atf_init_test_cases()
375{
376
377	atf_add_test_case route_change_reject2blackhole
378	atf_add_test_case route_change_gateway
379	atf_add_test_case route_change_ifa
380	atf_add_test_case route_change_ifp
381	atf_add_test_case route_change_ifp_ifa
382	atf_add_test_case route_change_flags
383	atf_add_test_case route_change_default_flags
384}
385