xref: /netbsd-src/tests/net/if/t_ifconfig.sh (revision 2e0bf311b34bf9507e08ee74157213840e9994d3)
1# $NetBSD: t_ifconfig.sh,v 1.22 2021/08/17 22:00:33 andvar 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
28RUMP_SERVER1=unix://./r1
29RUMP_SERVER2=unix://./r2
30
31RUMP_FLAGS=\
32"-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_shmif"
33RUMP_FLAGS="${RUMP_FLAGS}"
34
35TIMEOUT=3
36
37anycast="[Aa][Nn][Yy][Cc][Aa][Ss][Tt]"
38deprecated="[Dd][Ee][Pp][Rr][Ee][Cc][Aa][Tt][Ee][Dd]"
39
40atf_test_case ifconfig_create_destroy cleanup
41ifconfig_create_destroy_head()
42{
43
44	atf_set "descr" "tests of ifconfig create and destroy"
45	atf_set "require.progs" "rump_server"
46}
47
48ifconfig_create_destroy_body()
49{
50	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1}
51
52	export RUMP_SERVER=${RUMP_SERVER1}
53
54	# Create and destroy (no address)
55	atf_check -s exit:0 rump.ifconfig shmif0 create
56	atf_check -s exit:0 rump.ifconfig shmif0 destroy
57
58	# Create and destroy (with an IPv4 address)
59	atf_check -s exit:0 rump.ifconfig shmif0 create
60	atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
61	atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1/24
62	atf_check -s exit:0 rump.ifconfig shmif0 up
63	atf_check -s exit:0 rump.ifconfig shmif0 destroy
64
65	# Create and destroy (with an IPv6 address)
66	atf_check -s exit:0 rump.ifconfig shmif0 create
67	atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
68	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1
69	atf_check -s exit:0 rump.ifconfig shmif0 up
70	atf_check -s exit:0 rump.ifconfig shmif0 destroy
71
72	# Check if ifconfig (ioctl) works after a failure of ifconfig destroy
73	atf_check -s exit:0 -o ignore rump.ifconfig lo0
74	atf_check -s not-exit:0 -e ignore rump.ifconfig lo0 destroy
75	atf_check -s exit:0 -o ignore rump.ifconfig lo0
76
77	unset RUMP_SERVER
78}
79
80ifconfig_create_destroy_cleanup()
81{
82
83	RUMP_SERVER=${RUMP_SERVER1} rump.halt
84}
85
86atf_test_case ifconfig_options cleanup
87ifconfig_options_head()
88{
89
90	atf_set "descr" "tests of ifconfig options"
91	atf_set "require.progs" "rump_server"
92}
93
94ifconfig_options_body()
95{
96
97	export RUMP_SERVER=${RUMP_SERVER1}
98	atf_check -s exit:0 rump_server $RUMP_FLAGS $RUMP_SERVER1
99
100	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
101	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr bus1
102	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet 10.0.0.1/24
103	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 fc00::1/64
104	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
105	atf_check -s exit:0 -o ignore rump.ifconfig -w 10
106	$DEBUG && rump.ifconfig shmif0
107
108	# ifconfig [-N] interface address_family
109	#   -N resolves hostnames
110	atf_check -s exit:0 -o match:'inet 127.0.0.1' rump.ifconfig lo0 inet
111	atf_check -s exit:0 -o match:'inet localhost' rump.ifconfig -N lo0 inet
112	atf_check -s exit:0 -o match:'inet6 ::1' rump.ifconfig lo0 inet6
113	atf_check -s exit:0 -o match:'inet6 localhost' rump.ifconfig -N lo0 inet6
114	atf_check -s not-exit:0 -e match:'not supported' rump.ifconfig lo0 atalk
115	atf_check -s not-exit:0 -e match:'not supported' rump.ifconfig -N lo0 atalk
116	atf_check -s exit:0 -o ignore rump.ifconfig lo0 link
117	atf_check -s exit:0 -o ignore rump.ifconfig -N lo0 link
118
119	# ifconfig [-hLmNvz] interface
120	#   -h -v shows statistics in human readable format
121	atf_check -s exit:0 -o ignore rump.ifconfig -h -v lo0
122	#   -L shows IPv6 lifetime
123	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 fc00::2 \
124	    pltime 100
125	$DEBUG && rump.ifconfig -L shmif0
126	atf_check -s exit:0 -o match:'pltime' rump.ifconfig -L shmif0
127	atf_check -s exit:0 -o match:'vltime' rump.ifconfig -L shmif0
128	#   -m shows all of the supported media (not supported in shmif)
129	$DEBUG && rump.ifconfig -m shmif0
130	atf_check -s exit:0 -o ignore rump.ifconfig -m shmif0
131	atf_check -s exit:0 -o match:'localhost' rump.ifconfig -N lo0
132	atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -v lo0
133	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT localhost
134	#   -z clears and shows statistics at that point
135	atf_check -s exit:0 -o match:'2 packets' rump.ifconfig -z lo0
136	atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -v lo0
137
138	# ifconfig -a [-bdhLNmsuvz]
139	#   -a shows all interfaces in the system
140	$DEBUG && rump.ifconfig -a
141	atf_check -s exit:0 -o match:'shmif0' -o match:'lo0' rump.ifconfig -a
142	#   -a -b shows only broadcast interfaces
143	atf_check -s exit:0 -o match:'shmif0' -o not-match:'lo0' rump.ifconfig -a -b
144	#   -a -d shows only down interfaces
145	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down
146	atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -a -d
147	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
148	atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig -a -d
149	atf_check -s exit:0 -o match:'pltime' rump.ifconfig -a -L
150	atf_check -s exit:0 -o match:'vltime' rump.ifconfig -a -L
151	atf_check -s exit:0 -o match:'localhost' rump.ifconfig -a -N
152	atf_check -s exit:0 -o ignore rump.ifconfig -a -m
153	#   -a -s shows only interfaces connected to a network
154	#   (shmif is always connected)
155	$DEBUG && rump.ifconfig -a -s
156	atf_check -s exit:0 -o ignore rump.ifconfig -a -s
157	#   -a -u shows only up interfaces
158	atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -a -u
159	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down
160	atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig -a -u
161	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
162	atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -a -v
163	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT localhost
164	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down
165	atf_check -s exit:0 -o match:'2 packets' rump.ifconfig -a -z
166	atf_check -s exit:0 -o not-match:'2 packets' rump.ifconfig -a -v
167	atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -a -v
168	atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
169
170	# ifconfig -l [-bdsu]
171	#   -l shows only interface names
172	atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l
173	atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l
174	atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -b
175	atf_check -s exit:0 -o not-match:'lo0' rump.ifconfig -l -b
176	atf_check -s exit:0 -o ignore rump.ifconfig -l -d
177	atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l -s
178	atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -s
179	atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l -u
180	atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -u
181
182	# ifconfig -s interface
183	#   -s interface exists with 0 / 1 if connected / disconnected
184	atf_check -s exit:0 -o empty rump.ifconfig -s lo0
185	atf_check -s exit:0 -o empty rump.ifconfig -s shmif0
186
187	# ifconfig -C
188	#   -C shows all of the interface cloners available on the system
189	atf_check -s exit:0 -o match:'shmif carp lo' rump.ifconfig -C
190
191	unset RUMP_SERVER
192}
193
194ifconfig_options_cleanup()
195{
196
197	env RUMP_SERVER=${RUMP_SERVER1} rump.halt
198}
199
200
201atf_test_case ifconfig_parameters cleanup
202ifconfig_parameters_head()
203{
204	atf_set "descr" "tests of interface parameters"
205	atf_set "require.progs" "rump_server"
206}
207
208ifconfig_parameters_body()
209{
210	local interval=
211
212	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1}
213	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER2}
214
215	export RUMP_SERVER=${RUMP_SERVER1}
216	atf_check -s exit:0 rump.ifconfig shmif0 create
217	atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
218	atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1/24
219	atf_check -s exit:0 rump.ifconfig shmif0 up
220	unset RUMP_SERVER
221
222	export RUMP_SERVER=${RUMP_SERVER2}
223	atf_check -s exit:0 rump.ifconfig shmif0 create
224	atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
225	atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.2/24
226	atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.3/24 alias
227	atf_check -s exit:0 rump.ifconfig shmif0 up
228	unset RUMP_SERVER
229
230	export RUMP_SERVER=${RUMP_SERVER1}
231
232	# active
233	atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:01 active
234	atf_check -s exit:0 -o match:'address:.b2:a0:75:00:00:01' \
235	    rump.ifconfig shmif0
236	# down, up
237	atf_check -s exit:0 rump.ifconfig shmif0 down
238	atf_check -s not-exit:0 -o ignore -e ignore rump.ping -c 1 \
239	    -w $TIMEOUT -n 192.168.0.2
240	atf_check -s exit:0 rump.ifconfig shmif0 up
241	atf_check -s exit:0 rump.ifconfig -w 10
242	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT -n 192.168.0.2
243
244	# alias
245	atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1/24 alias
246	atf_check -s exit:0 -o match:'192.168.1.1/24' rump.ifconfig shmif0
247	atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1/24 -alias
248	atf_check -s exit:0 -o not-match:'192.168.1.1/24' rump.ifconfig shmif0
249	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1
250	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2
251	atf_check -s exit:0 -o match:'fc00::1' rump.ifconfig shmif0 inet6
252	atf_check -s exit:0 -o match:'fc00::2' rump.ifconfig shmif0 inet6
253
254	# delete
255	atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1 alias
256	atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1 delete
257	atf_check -s exit:0 -o not-match:'192.168.1.1' rump.ifconfig shmif0 inet
258	atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.1 delete
259	atf_check -s exit:0 -o not-match:'192.168.0.1' rump.ifconfig shmif0 inet
260	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1 delete
261	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2 delete
262	atf_check -s exit:0 -o not-match:'fc00::1' rump.ifconfig shmif0 inet6
263	atf_check -s exit:0 -o not-match:'fc00::2' rump.ifconfig shmif0 inet6
264	# can delete inactive link
265	atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:02
266	atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:02 delete
267	# cannot delete active link
268	atf_check -s not-exit:0 -e match:'SIOCDLIFADDR: Device busy' \
269	    rump.ifconfig shmif0 link b2:a0:75:00:00:01 delete
270
271	atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.1/24
272
273	# arp
274	atf_check -s exit:0 rump.ifconfig shmif0 -arp
275	atf_check -s not-exit:0 -o ignore -e ignore \
276	    rump.ping -c 1 -w $TIMEOUT -n 192.168.0.3
277	atf_check -s exit:0 -o not-match:'192.168.0.3' rump.arp -an
278	# The entry shouldn't appear in the routing table anymore
279	atf_check -s exit:0 -o not-match:'192.168.0.3' rump.netstat -nr
280
281	# netmask
282	atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 netmask 255.255.255.0 alias
283	atf_check -s exit:0 -o match:'172.16.0/24' rump.netstat -rn -f inet
284	atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 delete
285
286	# broadcast (does it not work?)
287	atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 \
288	    broadcast 255.255.255.255 alias
289	atf_check -s exit:0 -o match:'broadcast 255.255.255.255' \
290	    rump.ifconfig shmif0 inet
291
292	# metric (external only)
293	atf_check -s exit:0 rump.ifconfig shmif0 metric 10
294	atf_check -s exit:0 rump.ifconfig shmif0 metric 0
295
296	# prefixlen
297	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1 prefixlen 70
298	atf_check -s exit:0 -o match:'fc00::/70' rump.netstat -rn -f inet6
299
300	# anycast
301	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2 anycast
302	atf_check -s exit:0 -o match:"fc00::2.+$anycast" rump.ifconfig shmif0 inet6
303
304	# deprecated
305	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 deprecated
306	# Not deprecated immediately. Need to wait nd6_timer that does it is scheduled.
307	interval=$(sysctl -n net.inet6.icmp6.nd6_prune)
308	atf_check -s exit:0 sleep $((interval + 1))
309	atf_check -s exit:0 -o match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
310	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 -deprecated
311	atf_check -s exit:0 -o not-match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
312
313	# pltime
314	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 pltime 3
315	atf_check -s exit:0 -o not-match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
316	atf_check -s exit:0 sleep 5
317	atf_check -s exit:0 -o match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
318
319	# eui64
320	atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00:1::0 eui64
321	atf_check -s exit:0 -o match:'fc00:1::' rump.ifconfig shmif0 inet6
322
323	unset RUMP_SERVER
324}
325
326ifconfig_parameters_cleanup()
327{
328	env RUMP_SERVER=${RUMP_SERVER1} rump.halt
329	env RUMP_SERVER=${RUMP_SERVER2} rump.halt
330}
331
332ifconfig_up_down_common()
333{
334	local family=$1
335	local ip=$2
336
337	if [ $family = inet6 ]; then
338		rump_server_start $RUMP_SERVER1 netinet6
339	else
340		rump_server_start $RUMP_SERVER1
341	fi
342	rump_server_add_iface $RUMP_SERVER1 shmif0 bus1
343
344	export RUMP_SERVER=$RUMP_SERVER1
345	rump.ifconfig shmif0
346
347	# Set the same number of trials to make the following test
348	# work for both IPv4 and IPv6
349	if [ $family = inet6 ]; then
350		atf_check -s exit:0 -o ignore \
351		    rump.sysctl -w net.inet6.ip6.dad_count=5
352	else
353		atf_check -s exit:0 -o ignore \
354		    rump.sysctl -w net.inet.ip.dad_count=5
355	fi
356
357	#
358	# Assign an address and up the interface at once
359	#
360	atf_check -s exit:0 rump.ifconfig shmif0 $family $ip/24 up
361	# UP
362	atf_check -s exit:0 \
363	    -o match:'shmif0.*UP.*RUNNING' rump.ifconfig shmif0
364	# The address is TENTATIVE
365	atf_check -s exit:0 \
366	    -o match:"$ip.*TENTATIVE" rump.ifconfig shmif0
367	# Waiting for DAD completion
368	atf_check -s exit:0 rump.ifconfig -w 10
369	# The address left TENTATIVE
370	atf_check -s exit:0 \
371	    -o not-match:"$ip.*TENTATIVE" rump.ifconfig shmif0
372
373	#
374	# ifconfig down
375	#
376	atf_check -s exit:0 rump.ifconfig shmif0 down
377	atf_check -s exit:0 \
378	    -o not-match:'shmif0.*UP.*RUNNING' rump.ifconfig shmif0
379	# The address becomes DETATCHED
380	atf_check -s exit:0 \
381	    -o match:"$ip.*DETACHED" rump.ifconfig shmif0
382	# ifconfig up
383	atf_check -s exit:0 rump.ifconfig shmif0 up
384	# The address becomes TENTATIVE
385	atf_check -s exit:0 \
386	    -o match:"$ip.*TENTATIVE" rump.ifconfig shmif0
387	# Waiting for DAD completion
388	atf_check -s exit:0 rump.ifconfig -w 10
389	# The address left TENTATIVE
390	atf_check -s exit:0 \
391	    -o not-match:"$ip.*TENTATIVE" rump.ifconfig shmif0
392
393	# Clean up
394	atf_check -s exit:0 rump.ifconfig shmif0 $family $ip delete
395
396	#
397	# Assign an address
398	#
399	atf_check -s exit:0 rump.ifconfig shmif0 $family $ip/24
400	# UP automatically
401	atf_check -s exit:0 \
402	    -o match:'shmif0.*UP.*RUNNING' rump.ifconfig shmif0
403	# Need some delay
404	sleep 1
405	# The IP becomes TENTATIVE
406	atf_check -s exit:0 \
407	    -o match:"$ip.*TENTATIVE" rump.ifconfig shmif0
408	# Waiting for DAD completion
409	atf_check -s exit:0 rump.ifconfig -w 10
410	# The address left TENTATIVE
411	atf_check -s exit:0 \
412	    -o not-match:"$ip.*TENTATIVE" rump.ifconfig shmif0
413
414	rump_server_destroy_ifaces
415}
416
417atf_test_case ifconfig_up_down_ipv4 cleanup
418ifconfig_up_down_ipv4_head()
419{
420	atf_set "descr" "tests of interface up/down (IPv4)"
421	atf_set "require.progs" "rump_server"
422}
423
424ifconfig_up_down_ipv4_body()
425{
426
427	ifconfig_up_down_common inet 10.0.0.1
428}
429
430ifconfig_up_down_ipv4_cleanup()
431{
432
433	$DEBUG && dump
434	cleanup
435}
436
437atf_test_case ifconfig_up_down_ipv6 cleanup
438ifconfig_up_down_ipv6_head()
439{
440	atf_set "descr" "tests of interface up/down (IPv6)"
441	atf_set "require.progs" "rump_server"
442}
443
444ifconfig_up_down_ipv6_body()
445{
446
447	ifconfig_up_down_common inet6 fc00::1
448}
449
450ifconfig_up_down_ipv6_cleanup()
451{
452
453	$DEBUG && dump
454	cleanup
455}
456
457atf_test_case ifconfig_number cleanup
458ifconfig_number_head()
459{
460	atf_set "descr" "tests of passing a number (if_index) to ifconfig"
461	atf_set "require.progs" "rump_server"
462}
463
464ifconfig_number_body()
465{
466
467	rump_server_start $RUMP_SERVER1
468	rump_server_add_iface $RUMP_SERVER1 shmif0 bus1
469
470	export RUMP_SERVER=$RUMP_SERVER1
471	atf_check -s not-exit:0 -e match:'Device not configured' rump.ifconfig 0
472	atf_check -s exit:0 rump.ifconfig 1 # lo0
473	atf_check -s exit:0 rump.ifconfig 2 # shmif0
474	atf_check -s not-exit:0 -e match:'Device not configured' rump.ifconfig 3
475
476	rump_server_destroy_ifaces
477}
478
479ifconfig_number_cleanup()
480{
481
482	$DEBUG && dump
483	cleanup
484}
485
486atf_test_case ifconfig_description cleanup
487ifconfig_description_head()
488{
489	atf_set "descr" "tests of setting and unsetting interface description"
490	atf_set "require.progs" "rump_server"
491}
492
493ifconfig_description_body()
494{
495
496	rump_server_start $RUMP_SERVER1
497
498	export RUMP_SERVER=$RUMP_SERVER1
499	for descr in description descr; do
500		atf_check -s exit:0 rump.ifconfig lo0 $descr DESCRIPTION-TEST
501		atf_check -s exit:0 -o match:"DESCRIPTION-TEST" rump.ifconfig lo0
502		atf_check -s exit:0 rump.ifconfig lo0 $descr DESCRIPTION-TEST-MODIFIED
503		atf_check -s exit:0 -o match:"DESCRIPTION-TEST-MODIFIED" rump.ifconfig lo0
504		atf_check -s exit:0 rump.ifconfig lo0 -$descr
505		atf_check -s exit:0 -o not-match:'DESCRIPTION-TEST-MODIFIED' rump.ifconfig lo0
506
507		atf_check -s exit:0 rump.ifconfig lo0 $descr `printf "%063d" 0`
508		atf_check -s not-exit:0 -e match:"description too long" rump.ifconfig lo0 $descr `printf "%064d" 0`
509		atf_check -s exit:0 rump.ifconfig lo0 $descr ""
510	done
511}
512
513ifconfig_description_cleanup()
514{
515
516	$DEBUG && dump
517	cleanup
518}
519
520atf_init_test_cases()
521{
522
523	atf_add_test_case ifconfig_create_destroy
524	atf_add_test_case ifconfig_options
525	atf_add_test_case ifconfig_parameters
526	atf_add_test_case ifconfig_up_down_ipv4
527	atf_add_test_case ifconfig_up_down_ipv6
528	atf_add_test_case ifconfig_number
529	atf_add_test_case ifconfig_description
530}
531