xref: /netbsd-src/tests/net/if_lagg/t_lagg.sh (revision 6aa7c5ec4bb1893723403d5f23013e5637555550)
1#	$NetBSD: t_lagg.sh,v 1.11 2024/04/05 07:04:17 yamaguchi Exp $
2#
3# Copyright (c) 2021 Internet Initiative Japan 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_HOST0=unix://commsock0
29SOCK_HOST1=unix://commsock1
30SOCK_HOST2=unix://commsock2
31BUS0=bus0
32BUS1=bus1
33BUS2=bus2
34IP4ADDR0=192.168.0.1
35IP4ADDR1=192.168.0.2
36IP4ADDR2=192.168.1.1
37IP4ADDR3=192.168.1.2
38IP6ADDR0=fc00::1
39IP6ADDR1=fc00::2
40IP6ADDR2=fc00:1::1
41IP6ADDR3=fc00:1::2
42WAITTIME=20
43
44DEBUG=${DEBUG:-false}
45
46wait_state()
47{
48	local state=$1
49	local if_lagg=$2
50	local if_port=$3
51
52	local n=$WAITTIME
53	local cmd_grep="grep -q ${state}"
54
55	if [ x"$if_port" != x"" ]; then
56		cmd_grep="grep $if_port | $cmd_grep"
57	fi
58
59	for i in $(seq $n); do
60		rump.ifconfig $if_lagg | eval $cmd_grep
61		if [ $? = 0 ] ; then
62			$DEBUG && echo "wait for $i seconds."
63			return 0
64		fi
65
66		sleep 1
67	done
68
69	$DEBUG && rump.ifconfig -v $if_lagg
70	atf_fail "Couldn't be ${state} for $n seconds."
71}
72wait_for_distributing()
73{
74
75	wait_state "DISTRIBUTING" $*
76}
77
78expected_inactive()
79{
80	local if_lagg=$1
81	local if_port=$2
82
83	sleep 3 # wait a little
84	atf_check -s exit:0 -o not-match:"${if_port}.*ACTIVE" \
85	    rump.ifconfig ${if_lagg}
86}
87
88setup_l2tp_ipv4tunnel()
89{
90	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
91
92	local a_addr0=10.0.0.1
93	local a_addr1=10.0.0.2
94	local b_addr0=10.0.1.1
95	local b_addr1=10.0.1.2
96	local c_addr0=10.0.2.1
97	local c_addr1=10.0.2.2
98
99	local a_session0=1001
100	local a_session1=1002
101	local b_session0=1011
102	local b_session1=1012
103	local c_session0=1021
104	local c_session1=1022
105
106	rump_server_add_iface $SOCK_HOST0 l2tp0
107	rump_server_add_iface $SOCK_HOST0 l2tp1
108	rump_server_add_iface $SOCK_HOST0 l2tp2
109	rump_server_add_iface $SOCK_HOST1 l2tp0
110	rump_server_add_iface $SOCK_HOST1 l2tp1
111	rump_server_add_iface $SOCK_HOST1 l2tp2
112
113
114	export RUMP_SERVER=$SOCK_HOST0
115	$atf_ifconfig shmif0 $a_addr0/24
116	$atf_ifconfig l2tp0  tunnel  $a_addr0    $a_addr1
117	$atf_ifconfig l2tp0  session $a_session0 $a_session1
118
119	$atf_ifconfig shmif1 $b_addr0/24
120	$atf_ifconfig l2tp1  tunnel  $b_addr0    $b_addr1
121	$atf_ifconfig l2tp1  session $b_session0 $b_session1
122
123	$atf_ifconfig shmif2 $c_addr0/24
124	$atf_ifconfig l2tp2  tunnel  $c_addr0    $c_addr1
125	$atf_ifconfig l2tp2  session $c_session0 $c_session1
126
127	export RUMP_SERVER=$SOCK_HOST1
128	$atf_ifconfig shmif0 $a_addr1/24
129	$atf_ifconfig l2tp0  tunnel  $a_addr1    $a_addr0
130	$atf_ifconfig l2tp0  session $a_session1 $a_session0
131
132	$atf_ifconfig shmif1 $b_addr1/24
133	$atf_ifconfig l2tp1  tunnel  $b_addr1    $b_addr0
134	$atf_ifconfig l2tp1  session $b_session1 $b_session0
135
136	$atf_ifconfig shmif2 $c_addr1/24
137	$atf_ifconfig l2tp2  tunnel  $c_addr1    $c_addr0
138	$atf_ifconfig l2tp2  session $c_session1 $c_session0
139}
140
141atf_test_case lagg_ifconfig cleanup
142lagg_ifconfig_head()
143{
144
145	atf_set "descr" "tests for create, destroy, and ioctl of lagg(4)"
146	atf_set "require.progs" "rump_server"
147}
148
149lagg_ifconfig_body()
150{
151	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
152
153	rump_server_start $SOCK_HOST0 lagg
154
155	export RUMP_SERVER=$SOCK_HOST0
156	$atf_ifconfig lagg0 create
157	$atf_ifconfig lagg0 destroy
158
159	$atf_ifconfig lagg0 create
160	$atf_ifconfig shmif0 create
161
162	$atf_ifconfig lagg0 laggproto none
163	atf_check -s exit:0 -o match:'laggproto none' \
164	    rump.ifconfig lagg0
165
166	# cannot add a port while protocol is none
167	atf_check -s not-exit:0 -e ignore \
168	    rump.ifconfig lagg0 laggport shmif0
169
170	$atf_ifconfig lagg0 laggproto lacp
171	atf_check -s exit:0 -o match:'laggproto lacp' \
172	    rump.ifconfig lagg0
173
174	# add a port and an added port
175	$atf_ifconfig lagg0 laggport shmif0
176	atf_check -s not-exit:0 -e ignore \
177	    rump.ifconfig lagg0 laggport shmif0
178
179	# remove an added port and a removed port
180	$atf_ifconfig lagg0 -laggport shmif0
181	atf_check -s not-exit:0 -e ignore \
182	    rump.ifconfig lagg0 -laggport shmif0
183
184	# re-add a removed port
185	$atf_ifconfig lagg0 laggport shmif0
186
187	# detach protocol even if the I/F has ports
188	$atf_ifconfig lagg0 laggproto none
189
190	# destroy the interface while grouping ports
191	$atf_ifconfig lagg0 destroy
192
193	$atf_ifconfig lagg0 create
194	$atf_ifconfig shmif1 create
195
196	$atf_ifconfig lagg0 laggproto lacp
197	$atf_ifconfig lagg0 laggport shmif0
198	$atf_ifconfig lagg0 laggport shmif1
199
200	$atf_ifconfig lagg0 -laggport shmif0
201	$atf_ifconfig lagg0 laggport shmif0
202	$atf_ifconfig lagg0 -laggport shmif1
203	$atf_ifconfig lagg0 laggport shmif1
204
205	# destroy a LAGed port
206	atf_check -s exit:0 -o match:shmif0 rump.ifconfig lagg0
207	atf_check -s exit:0 -o match:shmif1 rump.ifconfig lagg0
208	$atf_ifconfig shmif0 destroy
209	$atf_ifconfig shmif1 destroy
210
211	$atf_ifconfig lagg0 laggproto none
212	atf_check -s exit:0 -o ignore rump.ifconfig lagg0
213}
214
215lagg_ifconfig_cleanup()
216{
217	$DEBUG && dump
218	cleanup
219}
220
221atf_test_case lagg_macaddr cleanup
222lagg_macaddr_head()
223{
224	atf_set "descr" "tests for a MAC address to assign to lagg(4)"
225	atf_set "require.progs" "rump_server"
226}
227
228lagg_macaddr_body()
229{
230	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
231	local lnkaddr0="02:00:00:00:00:01" # 02: I/G = 0, G/L = 1
232
233	rump_server_start $SOCK_HOST0 lagg
234
235	export RUMP_SERVER=$SOCK_HOST0
236	$atf_ifconfig lagg0 create
237	rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
238	rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
239
240	maddr=$(get_macaddr $SOCK_HOST0 lagg0)
241	maddr0=$(get_macaddr $SOCK_HOST0 shmif0)
242	maddr1=$(get_macaddr $SOCK_HOST0 shmif1)
243
244	$atf_ifconfig lagg0 laggproto lacp
245
246	#
247	# Copy MAC address from shmif0 that is
248	# the first port to lagg.
249	# (laggport: (none) => shmif0)
250	#
251	$atf_ifconfig lagg0 laggport shmif0
252	atf_check -s exit:0 -o match:$maddr0 rump.ifconfig lagg0
253	atf_check -s exit:0 -o match:$maddr0 rump.ifconfig shmif0
254
255	#
256	# Copy MAC address assigned to lagg0 to shmif1
257	# (laggport: shmif0 => shmif0, shmif1)
258	#
259	$atf_ifconfig lagg0 laggport shmif1
260	atf_check -s exit:0 -o match:$maddr0 rump.ifconfig lagg0
261	atf_check -s exit:0 -o match:$maddr0 rump.ifconfig shmif1
262
263	#
264	# Change MAC address on the detaching
265	# the first port (shmif0) from lagg0
266	# (laggport: shmif0, shmif1 => shmif1)
267	#
268	$atf_ifconfig lagg0 -laggport shmif0
269	atf_check -s exit:0 -o match:$maddr1 rump.ifconfig lagg0
270	atf_check -s exit:0 -o match:$maddr0 rump.ifconfig shmif0
271	atf_check -s exit:0 -o match:$maddr1 rump.ifconfig shmif1
272
273	#
274	# Copy lagg0's MAC address to shmif0 even if
275	# lagg0 had used shmif0's MAC address
276	# (laggport: shmif1 => shmif1, shmif0)
277	#
278	$atf_ifconfig lagg0 laggport shmif0
279	atf_check -s exit:0 -o match:$maddr1 rump.ifconfig lagg0
280	atf_check -s exit:0 -o match:$maddr1 rump.ifconfig shmif0
281
282	#
283	# should not change MAC address of lagg0 on detaching
284	# shmif0 that copied mac address from lagg0
285	# (laggport: shmif1, shmif0 => shmif1)
286	#
287	$atf_ifconfig lagg0 -laggport shmif0
288	atf_check -s exit:0 -o match:$maddr1 rump.ifconfig lagg0
289	atf_check -s exit:0 -o match:$maddr0 rump.ifconfig shmif0
290
291	#
292	# Use the generated MAC address
293	# when all port detached from lagg0
294	# (laggport: shmif1 => (none))
295	$atf_ifconfig lagg0 -laggport shmif1
296	atf_check -s exit:0 -o match:$maddr rump.ifconfig lagg0
297
298	#
299	# Copy the active MAC address from shmif0 to lagg0
300	# when shmif0 has two MAC addresses
301	#
302	$atf_ifconfig shmif0 link $lnkaddr0
303	$atf_ifconfig lagg0 laggport shmif0
304	atf_check -s exit:0 -o match:$maddr0 rump.ifconfig lagg0
305	atf_check -s exit:0 -o not-match:$lnkaddr0 rump.ifconfig lagg0
306	atf_check -s exit:0 -o match:$maddr0 rump.ifconfig shmif0
307	atf_check -s exit:0 -o match:$lnkaddr0 rump.ifconfig shmif0
308}
309
310lagg_macaddr_cleanup()
311{
312	$DEBUG && dump
313	cleanup
314}
315
316atf_test_case lagg_ipv6lla cleanup
317lagg_ipv6lla_head()
318{
319	atf_set "descr" "tests for a IPV6 LLA to assign to lagg(4)"
320	atf_set "require.progs" "rump_server"
321}
322
323lagg_ipv6lla_body()
324{
325	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
326
327	rump_server_start $SOCK_HOST0 netinet6 lagg
328
329	export RUMP_SERVER=$SOCK_HOST0
330	$atf_ifconfig lagg0 create
331	rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
332	rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
333
334	$atf_ifconfig lagg0 laggproto lacp
335
336	$atf_ifconfig shmif0 up
337	atf_check -s exit:0 -o match:'inet6 fe80:' rump.ifconfig shmif0
338
339	$atf_ifconfig lagg0 laggproto lacp laggport shmif0
340	atf_check -s exit:0 -o not-match:'inet6 fe80:' rump.ifconfig shmif0
341
342	$atf_ifconfig lagg0 laggport shmif1
343	$atf_ifconfig shmif1 up
344	atf_check -s exit:0 -o not-match:'inet6 fe80:' rump.ifconfig shmif1
345
346	$atf_ifconfig lagg0 -laggport shmif0
347	atf_check -s exit:0 -o match:'inet6 fe80:' rump.ifconfig shmif0
348
349	$atf_ifconfig shmif1 down
350	$atf_ifconfig lagg0 -laggport shmif1
351	atf_check -s exit:0 -o not-match:'inet fe80:' rump.ifconfig shmif1
352}
353
354lagg_ipv6lla_cleanup()
355{
356	$DEBUG && dump
357	cleanup
358}
359
360atf_test_case lagg_mtu cleanup
361lagg_mtu_head()
362{
363	atf_set "descr" "tests for MTU"
364	atf_set "require.progs" "rump_server"
365}
366
367lagg_mtu_body()
368{
369	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
370	local mtu_lagg=1500
371	local mtu_1st=1450
372	local mtu_big=1460
373	local mtu_small=1440
374
375	rump_server_start $SOCK_HOST0 lagg
376
377	export RUMP_SERVER=$SOCK_HOST0
378	rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
379	rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
380	rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
381	$atf_ifconfig lagg0 create
382	$atf_ifconfig lagg0 laggproto lacp
383	$atf_ifconfig lagg0 up
384
385	$atf_ifconfig shmif0 mtu $mtu_1st
386	$atf_ifconfig shmif1 mtu $mtu_big
387	$atf_ifconfig shmif2 mtu $mtu_small
388
389	# check initial MTU settings
390	atf_check -s exit:0 -o match:"mtu *$mtu_lagg" rump.ifconfig lagg0
391	atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0
392	atf_check -s exit:0 -o match:"mtu *$mtu_big" rump.ifconfig shmif1
393	atf_check -s exit:0 -o match:"mtu *$mtu_small" rump.ifconfig shmif2
394
395	# copy MTU to 1st added port
396	$atf_ifconfig lagg0 laggport shmif0
397	atf_check -s exit:0 -o match:"mtu *$mtu_lagg" rump.ifconfig lagg0
398	atf_check -s exit:0 -o match:"mtu *$mtu_lagg" rump.ifconfig shmif0
399
400	# copy MTU to added port
401	$atf_ifconfig lagg0 laggport shmif1
402	$atf_ifconfig lagg0 laggport shmif2
403	atf_check -s exit:0 -o match:"mtu *$mtu_lagg" rump.ifconfig lagg0
404	atf_check -s exit:0 -o match:"mtu *$mtu_lagg" rump.ifconfig shmif0
405	atf_check -s exit:0 -o match:"mtu *$mtu_lagg" rump.ifconfig shmif1
406	atf_check -s exit:0 -o match:"mtu *$mtu_lagg" rump.ifconfig shmif2
407
408	# reset MTU after detaching from lagg0
409	$atf_ifconfig lagg0 -laggport shmif2
410	atf_check -s exit:0 -o match:"mtu *$mtu_small" rump.ifconfig shmif2
411
412	# change MTU of lagg0
413	mtu_lagg=1400
414	$atf_ifconfig lagg0 mtu $mtu_lagg
415	atf_check -s exit:0 -o match:"mtu *$mtu_lagg" rump.ifconfig lagg0
416	atf_check -s exit:0 -o match:"mtu *$mtu_lagg" rump.ifconfig shmif0
417	atf_check -s exit:0 -o match:"mtu *$mtu_lagg" rump.ifconfig shmif1
418
419	# reset MTU after detching from lagg0
420	$atf_ifconfig lagg0 -laggport shmif0
421	$atf_ifconfig lagg0 -laggport shmif1
422	atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0
423	atf_check -s exit:0 -o match:"mtu *$mtu_big" rump.ifconfig shmif1
424}
425
426lagg_mtu_cleanup()
427{
428
429	$DEBUG && dump
430	cleanup
431}
432
433atf_test_case lagg_lacp_basic cleanup
434lagg_lacp_basic_head()
435{
436
437	atf_set "descr" "tests for LACP basic functions"
438	atf_set "require.progs" "rump_server"
439}
440
441lagg_lacp_basic_body()
442{
443	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
444
445	rump_server_start $SOCK_HOST0 lagg
446	rump_server_start $SOCK_HOST1 lagg
447	rump_server_start $SOCK_HOST2 lagg
448
449	export RUMP_SERVER=$SOCK_HOST0
450
451	# added running interface
452	$atf_ifconfig shmif0 create
453	$atf_ifconfig shmif0 linkstr $BUS0
454
455	$atf_ifconfig shmif1 create
456	$atf_ifconfig shmif1 linkstr $BUS1
457
458	$atf_ifconfig lagg0 create
459	$atf_ifconfig lagg0 laggproto lacp
460
461	$atf_ifconfig shmif0 up
462	$atf_ifconfig shmif1 up
463	$atf_ifconfig lagg0 up
464
465	$atf_ifconfig lagg0 laggport shmif0
466	$atf_ifconfig lagg0 laggport shmif1
467	$atf_ifconfig -w 10
468
469	$atf_ifconfig lagg0 -laggport shmif0
470	$atf_ifconfig lagg0 -laggport shmif1
471	$atf_ifconfig lagg0 down
472
473	# add the same interfaces again
474	$atf_ifconfig lagg0 up
475	$atf_ifconfig lagg0 laggport shmif0
476	$atf_ifconfig lagg0 laggport shmif1
477
478	# detach and re-attach protocol
479	$atf_ifconfig lagg0 laggproto none
480	$atf_ifconfig lagg0 laggproto lacp \
481	    laggport shmif0 laggport shmif1
482
483	$atf_ifconfig lagg0 -laggport shmif0 -laggport shmif1
484	$atf_ifconfig lagg0 destroy
485	$atf_ifconfig shmif0 destroy
486	$atf_ifconfig shmif1 destroy
487
488	# tests for a loopback condition
489	$atf_ifconfig shmif0 create
490	$atf_ifconfig shmif0 linkstr $BUS0
491	$atf_ifconfig shmif1 create
492	$atf_ifconfig shmif1 linkstr $BUS0
493	$atf_ifconfig lagg0 create
494	$atf_ifconfig lagg0 laggproto lacp \
495	    laggport shmif0 laggport shmif1
496	$atf_ifconfig shmif0 up
497	$atf_ifconfig shmif1 up
498	$atf_ifconfig lagg0 up
499
500	expected_inactive lagg0
501
502	$atf_ifconfig shmif0 down
503	$atf_ifconfig shmif0 destroy
504	$atf_ifconfig shmif1 down
505	$atf_ifconfig shmif1 destroy
506	$atf_ifconfig lagg0 down
507	$atf_ifconfig lagg0 destroy
508
509	export RUMP_SERVER=$SOCK_HOST0
510	$atf_ifconfig shmif0 create
511	$atf_ifconfig shmif0 linkstr $BUS0
512	$atf_ifconfig shmif0 up
513
514	$atf_ifconfig shmif1 create
515	$atf_ifconfig shmif1 linkstr $BUS1
516	$atf_ifconfig shmif1 up
517
518	$atf_ifconfig shmif2 create
519	$atf_ifconfig shmif2 linkstr $BUS2
520	$atf_ifconfig shmif2 up
521
522	$atf_ifconfig lagg0 create
523	$atf_ifconfig lagg0 laggproto lacp laggport shmif0 \
524	    laggport shmif1 laggport shmif2
525	$atf_ifconfig lagg0 up
526
527	export RUMP_SERVER=$SOCK_HOST1
528	$atf_ifconfig shmif0 create
529	$atf_ifconfig shmif0 linkstr $BUS0
530	$atf_ifconfig shmif0 up
531
532	$atf_ifconfig shmif1 create
533	$atf_ifconfig shmif1 linkstr $BUS1
534	$atf_ifconfig shmif1 up
535
536	$atf_ifconfig lagg0 create
537	$atf_ifconfig lagg0 laggproto lacp
538	$atf_ifconfig lagg1 create
539	$atf_ifconfig lagg1 laggproto lacp
540
541	$atf_ifconfig lagg0 laggport shmif0
542	$atf_ifconfig lagg0 up
543	wait_for_distributing lagg0 shmif0
544
545	$atf_ifconfig lagg1 laggport shmif1
546	$atf_ifconfig lagg1 up
547
548	export RUMP_SERVER=$SOCK_HOST2
549	$atf_ifconfig shmif0 create
550	$atf_ifconfig shmif0 linkstr $BUS2
551	$atf_ifconfig shmif0 up
552
553	$atf_ifconfig lagg0 create
554	$atf_ifconfig lagg0 laggproto lacp laggport shmif0
555	$atf_ifconfig lagg0 up
556
557	export RUMP_SERVER=$SOCK_HOST0
558	wait_for_distributing lagg0 shmif0
559	expected_inactive lagg0 shmif1
560	expected_inactive lagg0 shmif2
561}
562
563lagg_lacp_basic_cleanup()
564{
565
566	$DEBUG && dump
567	cleanup
568}
569
570lagg_lacp_ping()
571{
572	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
573
574	local af=$1
575	local l2proto=$2
576	local atf_ping="atf_check -s exit:0 -o ignore rump.ping -c 1"
577	local ping=rump.ping
578	local rumplib=""
579	local pfx=24
580	local addr_host0=$IP4ADDR0
581	local addr_host1=$IP4ADDR1
582
583	case $af in
584	"inet")
585		# do nothing
586		;;
587	"inet6")
588		atf_ping="atf_check -s exit:0 -o ignore rump.ping6 -c 1"
589		rumplib="netinet6"
590		pfx=64
591		addr_host0=$IP6ADDR0
592		addr_host1=$IP6ADDR1
593		;;
594	esac
595
596	case $l2proto in
597	"ether")
598		iface0=shmif0
599		iface1=shmif1
600		iface2=shmif2
601		;;
602	"l2tp")
603		rumplib="$rumplib l2tp"
604		iface0=l2tp0
605		iface1=l2tp1
606		iface2=l2tp2
607		;;
608	esac
609
610	rump_server_start $SOCK_HOST0 lagg $rumplib
611	rump_server_start $SOCK_HOST1 lagg $rumplib
612
613	rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
614	rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
615	rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
616
617	rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0
618	rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1
619	rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2
620
621	if [ x"$l2proto" = x"l2tp" ];then
622		setup_l2tp_ipv4tunnel
623	fi
624
625	export RUMP_SERVER=$SOCK_HOST0
626	$atf_ifconfig lagg0 create
627	$atf_ifconfig lagg0 laggproto lacp laggport $iface0
628	$atf_ifconfig lagg0 $af $addr_host0/$pfx
629	$atf_ifconfig $iface0 up
630	$atf_ifconfig lagg0 up
631
632	export RUMP_SERVER=$SOCK_HOST1
633	$atf_ifconfig lagg0 create
634	$atf_ifconfig lagg0 laggproto lacp laggport $iface0
635	$atf_ifconfig lagg0 $af $addr_host1/$pfx
636	$atf_ifconfig $iface0 up
637	$atf_ifconfig lagg0 up
638
639	export RUMP_SERVER=$SOCK_HOST0
640	wait_for_distributing lagg0
641	$atf_ifconfig -w 10
642
643	export RUMP_SERVER=$SOCK_HOST1
644	wait_for_distributing lagg0
645	$atf_ifconfig -w 10
646
647	$atf_ping $addr_host0
648
649	export RUMP_SERVER=$SOCK_HOST0
650	$atf_ifconfig $iface1 up
651	$atf_ifconfig lagg0 laggport $iface1 laggport $iface2
652	$atf_ifconfig $iface2 up
653
654	export RUMP_SERVER=$SOCK_HOST1
655	$atf_ifconfig $iface1 up
656	$atf_ifconfig lagg0 laggport $iface1 laggport $iface2
657	$atf_ifconfig $iface2 up
658
659	export RUMP_SERVER=$SOCK_HOST0
660	wait_for_distributing lagg0 $iface1
661	wait_for_distributing lagg0 $iface2
662
663	export RUMP_SERVER=$SOCK_HOST1
664	wait_for_distributing lagg0 $iface1
665	wait_for_distributing lagg0 $iface2
666
667	$atf_ping $addr_host0
668}
669
670atf_test_case lagg_lacp_ipv4 cleanup
671lagg_lacp_ipv4_head()
672{
673
674	atf_set "descr" "tests for IPv4 with LACP"
675	atf_set "require.progs" "rump_server"
676}
677
678lagg_lacp_ipv4_body()
679{
680
681	lagg_lacp_ping "inet" "ether"
682}
683
684lagg_lacp_ipv4_cleanup()
685{
686
687	$DEBUG && dump
688	cleanup
689}
690
691atf_test_case lagg_lacp_ipv6 cleanup
692lagg_lacp_ipv6_head()
693{
694
695	atf_set "descr" "tests for IPv6 with LACP"
696	atf_set "require.progs" "rump_server"
697}
698
699lagg_lacp_ipv6_body()
700{
701
702	lagg_lacp_ping "inet6" "ether"
703}
704
705lagg_lacp_ipv6_cleanup()
706{
707
708	$DEBUG && dump
709	cleanup
710}
711
712atf_test_case lagg_lacp_l2tp_ipv4 cleanup
713lagg_lacp_l2tp_ipv4_head()
714{
715
716	atf_set "descr" "tests for LACP over l2tp by using IPv4"
717	atf_set "require.progs" "rump_server"
718}
719
720lagg_lacp_l2tp_ipv4_body()
721{
722
723	lagg_lacp_ping "inet" "l2tp"
724}
725
726lagg_lacp_l2tp_ipv4_cleanup()
727{
728
729	$DEBUG && dump
730	cleanup
731}
732
733atf_test_case lagg_lacp_l2tp_ipv6 cleanup
734lagg_lacp_l2tp_ipv6_head()
735{
736
737	atf_set "descr" "tests for LACP over l2tp using IPv6"
738	atf_set "require.progs" "rump_server"
739}
740
741lagg_lacp_l2tp_ipv6_body()
742{
743
744	lagg_lacp_ping "inet6" "l2tp"
745}
746
747lagg_lacp_l2tp_ipv6_cleanup()
748{
749
750	$DEBUG && dump
751	cleanup
752}
753
754lagg_lacp_vlan()
755{
756	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
757
758	local af=$1
759	local l2proto=$2
760	local atf_ping="atf_check -s exit:0 -o ignore rump.ping -c 1"
761	local rumplib="vlan"
762	local pfx=24
763	local vlan0_addr_host0=$IP4ADDR0
764	local host0addr0=$IP4ADDR0
765	local host1addr0=$IP4ADDR1
766	local host0addr1=$IP4ADDR2
767	local host1addr1=$IP4ADDR3
768
769	case $af in
770	"inet")
771		# do nothing
772		;;
773	"inet6")
774		atf_ping="atf_check -s exit:0 -o ignore rump.ping6 -c 1"
775		rumplib="$rumplib netinet6"
776		pfx=64
777		host0addr0=$IP6ADDR0
778		host1addr0=$IP6ADDR1
779		host0addr1=$IP6ADDR2
780		host1addr1=$IP6ADDR3
781		;;
782	esac
783
784	case $l2proto in
785	"ether")
786		iface0=shmif0
787		iface1=shmif1
788		iface2=shmif2
789		;;
790	"l2tp")
791		rumplib="$rumplib l2tp"
792		iface0=l2tp0
793		iface1=l2tp1
794		iface2=l2tp2
795	esac
796
797	rump_server_start $SOCK_HOST0 lagg $rumplib
798	rump_server_start $SOCK_HOST1 lagg $rumplib
799
800	rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
801	rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
802	rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
803
804	rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0
805	rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1
806	rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2
807
808	if [ x"$l2proto" = x"l2tp" ]; then
809		setup_l2tp_ipv4tunnel
810	fi
811
812	for sock in $SOCK_HOST0 $SOCK_HOST1; do
813		export RUMP_SERVER=$sock
814		$atf_ifconfig lagg0 create
815		$atf_ifconfig lagg0 laggproto lacp laggport $iface0
816
817		$atf_ifconfig vlan0 create
818		$atf_ifconfig vlan0 vlan 10 vlanif lagg0
819		$atf_ifconfig vlan1 create
820		$atf_ifconfig vlan1 vlan 11 vlanif lagg0
821
822		$atf_ifconfig $iface0 up
823		$atf_ifconfig lagg0 up
824	done
825
826	export RUMP_SERVER=$SOCK_HOST0
827	wait_for_distributing lagg0
828	$atf_ifconfig vlan0 $af $host0addr0/$pfx
829	$atf_ifconfig vlan0 up
830	$atf_ifconfig vlan1 $af $host0addr1/$pfx
831	$atf_ifconfig vlan1 up
832
833	export RUMP_SERVER=$SOCK_HOST1
834	wait_for_distributing lagg0
835	$atf_ifconfig vlan0 $af $host1addr0/$pfx
836	$atf_ifconfig vlan0 up
837	$atf_ifconfig vlan1 $af $host1addr1/$pfx
838	$atf_ifconfig vlan1 up
839
840	export RUMP_SERVER=$SOCK_HOST0
841	$atf_ifconfig -w 10
842	export RUMP_SERVER=$SOCK_HOST1
843	$atf_ifconfig -w 10
844
845	export RUMP_SERVER=$SOCK_HOST0
846	$atf_ping $host1addr0
847	$atf_ping $host1addr1
848
849	$atf_ifconfig lagg0 laggport $iface1
850	$atf_ifconfig $iface1 up
851
852	export RUMP_SERVER=$SOCK_HOST1
853	$atf_ifconfig lagg0 laggport $iface1
854	$atf_ifconfig $iface1 up
855
856	export RUMP_SERVER=$SOCK_HOST0
857	wait_for_distributing lagg0 $iface1
858
859	export RUMP_SERVER=$SOCK_HOST1
860	wait_for_distributing lagg0 $iface1
861
862	$atf_ping $host0addr0
863	$atf_ping $host0addr1
864}
865
866atf_test_case lagg_lacp_vlan_ipv4 cleanup
867lagg_lacp_vlan_ipv4_head()
868{
869
870	atf_set "descr" "tests for IPv4 VLAN frames over LACP LAG"
871	atf_set "require.progs" "rump_server"
872}
873
874lagg_lacp_vlan_ipv4_body()
875{
876
877	lagg_lacp_vlan "inet" "ether"
878}
879
880lagg_lacp_vlan_ipv4_cleanup()
881{
882	$DEBUG && dump
883	cleanup
884}
885
886atf_test_case lagg_lacp_vlan_ipv6 cleanup
887lagg_lacp_vlan_ipv6_head()
888{
889
890	atf_set "descr" "tests for IPv6 VLAN frames over LACP LAG"
891	atf_set "require.progs" "rump_server"
892}
893
894lagg_lacp_vlan_ipv6_body()
895{
896
897	lagg_lacp_vlan "inet6" "ether"
898}
899
900lagg_lacp_vlan_ipv6_cleanup()
901{
902	$DEBUG && dump
903	cleanup
904}
905
906atf_test_case lagg_lacp_vlanl2tp_ipv4 cleanup
907lagg_lacp_vlanl2tp_ipv4_head()
908{
909
910	atf_set "descr" "tests for IPv4 VLAN frames over LACP L2TP LAG"
911	atf_set "require.progs" "rump_server"
912}
913
914lagg_lacp_vlanl2tp_ipv4_body()
915{
916
917	lagg_lacp_vlan "inet" "l2tp"
918}
919
920lagg_lacp_vlanl2tp_ipv4_cleanup()
921{
922
923	$DEBUG && dump
924	cleanup
925}
926
927atf_test_case lagg_lacp_vlanl2tp_ipv6 cleanup
928lagg_lacp_vlanl2tp_ipv6_head()
929{
930
931	atf_set "descr" "tests for IPv6 VLAN frames over LACP L2TP LAG"
932	atf_set "require.progs" "rump_server"
933}
934
935lagg_lacp_vlanl2tp_ipv6_body()
936{
937
938	lagg_lacp_vlan "inet6" "l2tp"
939}
940
941lagg_lacp_vlanl2tp_ipv6_cleanup()
942{
943
944	$DEBUG && dump
945	cleanup
946}
947
948atf_test_case lagg_lacp_portpri cleanup
949lagg_lacp_portpri_head()
950{
951
952	atf_set "descr" "tests for LACP port priority"
953	atf_set "require.progs" "rump_server"
954}
955
956lagg_lacp_portpri_body()
957{
958	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
959
960	rump_server_start $SOCK_HOST0 lagg
961	rump_server_start $SOCK_HOST1 lagg
962
963	rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
964	rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
965	rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
966
967	rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0
968	rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1
969	rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2
970
971	export RUMP_SERVER=$SOCK_HOST0
972	$atf_ifconfig lagg0 create
973	$atf_ifconfig lagg0 laggproto lacp
974	$atf_ifconfig lagg0 lagglacp maxports 2
975
976	$atf_ifconfig shmif0 up
977	$atf_ifconfig shmif1 up
978	$atf_ifconfig shmif2 up
979
980	$atf_ifconfig lagg0 laggport shmif0 pri 1000
981	$atf_ifconfig lagg0 laggport shmif1 pri 2000
982	$atf_ifconfig lagg0 laggport shmif2 pri 3000
983	$atf_ifconfig lagg0 up
984
985	atf_check -s exit:0 -o match:'shmif0 pri=1000' rump.ifconfig lagg0
986	atf_check -s exit:0 -o match:'shmif1 pri=2000' rump.ifconfig lagg0
987	atf_check -s exit:0 -o match:'shmif2 pri=3000' rump.ifconfig lagg0
988
989	export RUMP_SERVER=$SOCK_HOST1
990	$atf_ifconfig lagg0 create
991	$atf_ifconfig lagg0 laggproto lacp
992
993	$atf_ifconfig shmif0 up
994	$atf_ifconfig shmif1 up
995	$atf_ifconfig shmif2 up
996
997	$atf_ifconfig lagg0 laggport shmif0 pri 300
998	$atf_ifconfig lagg0 laggport shmif1 pri 200
999	$atf_ifconfig lagg0 laggport shmif2 pri 100
1000	$atf_ifconfig lagg0 up
1001
1002	atf_check -s exit:0 -o match:'shmif0 pri=300' rump.ifconfig lagg0
1003	atf_check -s exit:0 -o match:'shmif1 pri=200' rump.ifconfig lagg0
1004	atf_check -s exit:0 -o match:'shmif2 pri=100' rump.ifconfig lagg0
1005
1006	export RUMP_SERVER=$SOCK_HOST0
1007	wait_for_distributing lagg0 shmif0
1008	wait_for_distributing lagg0 shmif1
1009	wait_state "STANDBY" lagg0 shmif2
1010
1011	$atf_ifconfig shmif0 down
1012	wait_for_distributing lagg0 shmif2
1013
1014	$atf_ifconfig shmif0 up
1015	wait_for_distributing lagg0 shmif0
1016
1017	$atf_ifconfig lagg0 laggportpri shmif0 5000
1018	$atf_ifconfig lagg0 laggportpri shmif1 5000
1019	$atf_ifconfig lagg0 laggportpri shmif2 5000
1020
1021	atf_check -s exit:0 -o match:'shmif0 pri=5000' rump.ifconfig lagg0
1022	atf_check -s exit:0 -o match:'shmif1 pri=5000' rump.ifconfig lagg0
1023	atf_check -s exit:0 -o match:'shmif2 pri=5000' rump.ifconfig lagg0
1024
1025	wait_state "STANDBY" lagg0 shmif0
1026	wait_for_distributing lagg0 shmif1
1027	wait_for_distributing lagg0 shmif2
1028}
1029
1030lagg_lacp_portpri_cleanup()
1031{
1032
1033	$DEBUG && dump
1034	cleanup
1035}
1036
1037lagg_failover()
1038{
1039	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
1040
1041	local af=$1
1042	local l2proto=$2
1043	local ping="rump.ping -c 1"
1044	local rumplib=""
1045	local pfx=24
1046	local addr_host0=$IP4ADDR0
1047	local addr_host1=$IP4ADDR1
1048
1049	case $af in
1050	"inet")
1051		# do nothing
1052		;;
1053	"inet6")
1054		ping="rump.ping6 -c 1"
1055		rumplib="netinet6"
1056		pfx=64
1057		addr_host0=$IP6ADDR0
1058		addr_host1=$IP6ADDR1
1059		;;
1060	esac
1061
1062	case $l2proto in
1063	"ether")
1064		iface0="shmif0"
1065		iface1="shmif1"
1066		iface2="shmif2"
1067		;;
1068	"l2tp")
1069		rumplib="$rumplib l2tp"
1070		iface0="l2tp0"
1071		iface1="l2tp1"
1072		iface2="l2tp2"
1073		;;
1074	esac
1075
1076	local atf_ping="atf_check -s exit:0 -o ignore ${ping}"
1077
1078	rump_server_start $SOCK_HOST0 lagg $rumplib
1079	rump_server_start $SOCK_HOST1 lagg $rumplib
1080
1081	rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
1082	rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
1083	rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
1084
1085	rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0
1086	rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1
1087	rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2
1088
1089	if [ x"$l2proto" = x"l2tp" ]; then
1090		setup_l2tp_ipv4tunnel
1091	fi
1092
1093	export RUMP_SERVER=$SOCK_HOST0
1094	$atf_ifconfig lagg0 create
1095	$atf_ifconfig lagg0 laggproto failover
1096
1097	$atf_ifconfig lagg0 laggport $iface0 pri 1000
1098	$atf_ifconfig lagg0 laggport $iface1 pri 2000
1099	$atf_ifconfig lagg0 laggport $iface2 pri 3000
1100	$atf_ifconfig lagg0 $af $addr_host0/$pfx
1101
1102	export RUMP_SERVER=$SOCK_HOST1
1103	$atf_ifconfig lagg0 create
1104	$atf_ifconfig lagg0 laggproto failover
1105
1106	$atf_ifconfig lagg0 laggport $iface0 pri 1000
1107	$atf_ifconfig lagg0 laggport $iface1 pri 3000
1108	$atf_ifconfig lagg0 laggport $iface2 pri 2000
1109	$atf_ifconfig lagg0 $af $addr_host1/$pfx
1110
1111	export RUMP_SERVER=$SOCK_HOST0
1112	$atf_ifconfig $iface0 up
1113	$atf_ifconfig $iface1 up
1114	$atf_ifconfig $iface2 up
1115	$atf_ifconfig lagg0 up
1116
1117	export RUMP_SERVER=$SOCK_HOST1
1118	$atf_ifconfig $iface0 up
1119	$atf_ifconfig $iface1 up
1120	$atf_ifconfig $iface2 up
1121	$atf_ifconfig lagg0 up
1122
1123	export RUMP_SERVER=$SOCK_HOST0
1124	$atf_ifconfig -w 10
1125	wait_for_distributing lagg0 $iface0
1126	wait_state "COLLECTING" lagg0 $iface0
1127	wait_state "COLLECTING" lagg0 $iface1
1128	wait_state "COLLECTING" lagg0 $iface2
1129
1130	export RUMP_SERVER=$SOCK_HOST1
1131	$atf_ifconfig -w 10
1132	wait_for_distributing lagg0 $iface0
1133	wait_state "COLLECTING" lagg0 $iface0
1134	wait_state "COLLECTING" lagg0 $iface1
1135	wait_state "COLLECTING" lagg0 $iface2
1136
1137	export RUMP_SERVER=$SOCK_HOST0
1138	$atf_ping $addr_host1
1139
1140	$atf_ifconfig $iface0 down
1141	wait_for_distributing lagg0 $iface1
1142	wait_state "COLLECTING" lagg0 $iface1
1143	wait_state "COLLECTING" lagg0 $iface2
1144
1145	export RUMP_SERVER=$SOCK_HOST1
1146	$atf_ifconfig $iface0 down
1147	wait_for_distributing lagg0 $iface2
1148	wait_state "COLLECTING" lagg0 $iface2
1149	wait_state "COLLECTING" lagg0 $iface1
1150
1151	export RUMP_SERVER=$SOCK_HOST0
1152	$atf_ping $addr_host1
1153
1154	$atf_ifconfig lagg0 laggfailover -rx-all
1155	atf_check -s exit:0 -o not-match:'$iface2.+COLLECTING' rump.ifconfig lagg0
1156
1157	export RUMP_SERVER=$SOCK_HOST1
1158	$atf_ifconfig lagg0 laggfailover -rx-all
1159	atf_check -s exit:0 -o not-match:'$iface1.+COLLECTING' rump.ifconfig lagg0
1160
1161	export RUMP_SERVER=$SOCK_HOST0
1162	atf_check -s not-exit:0 -o ignore -e ignore $ping -c 1 $addr_host1
1163}
1164
1165atf_test_case lagg_failover_ipv4 cleanup
1166lagg_failover_ipv4_head()
1167{
1168
1169	atf_set "descr" "tests for failover using IPv4"
1170	atf_set "require.progs" "rump_server"
1171}
1172
1173lagg_failover_ipv4_body()
1174{
1175
1176	lagg_failover "inet" "ether"
1177}
1178
1179lagg_failover_ipv4_cleanup()
1180{
1181
1182	$DEBUG && dump
1183	cleanup
1184}
1185
1186atf_test_case lagg_failover_ipv6 cleanup
1187lagg_failover_ipv6_head()
1188{
1189
1190	atf_set "descr" "tests for failover using IPv6"
1191	atf_set "require.progs" "rump_server"
1192}
1193
1194lagg_failover_ipv6_body()
1195{
1196
1197	lagg_failover "inet6" "ether"
1198}
1199
1200lagg_failover_ipv6_cleanup()
1201{
1202
1203	$DEBUG && dump
1204	cleanup
1205}
1206
1207atf_test_case lagg_failover_l2tp_ipv4 cleanup
1208lagg_failover_l2tp_ipv4_head()
1209{
1210
1211	atf_set "descr" "tests for failover over l2tp using IPv4"
1212	atf_set "require.progs" "rump_server"
1213}
1214
1215lagg_failover_l2tp_ipv4_body()
1216{
1217
1218	lagg_failover "inet" "l2tp"
1219}
1220
1221lagg_failover_l2tp_ipv4_cleanup()
1222{
1223	$DEBUG && dump
1224	cleanup
1225}
1226
1227atf_test_case lagg_failover_l2tp_ipv6 cleanup
1228lagg_failover_l2tp_ipv6_head()
1229{
1230
1231	atf_set "descr" "tests for failover over l2tp using IPv6"
1232	atf_set "require.progs" "rump_server"
1233}
1234
1235lagg_failover_l2tp_ipv6_body()
1236{
1237
1238	lagg_failover "inet6" "l2tp"
1239}
1240
1241lagg_failover_l2tp_ipv6_cleanup()
1242{
1243	$DEBUG && dump
1244	cleanup
1245}
1246
1247lagg_loadbalance()
1248{
1249	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
1250
1251	local af=$1
1252	local l2proto=$2
1253	local ping="rump.ping -c 1"
1254	local rumplib=""
1255	local pfx=24
1256	local addr_host0=$IP4ADDR0
1257	local addr_host1=$IP4ADDR1
1258
1259	case $af in
1260	"inet")
1261		# do nothing
1262		;;
1263	"inet6")
1264		ping="rump.ping6 -c 1"
1265		rumplib="netinet6"
1266		pfx=64
1267		addr_host0=$IP6ADDR0
1268		addr_host1=$IP6ADDR1
1269		;;
1270	esac
1271
1272	case $l2proto in
1273	"ether")
1274		iface0=shmif0
1275		iface1=shmif1
1276		iface2=shmif2
1277		;;
1278	"l2tp")
1279		rumplib="$rumplib l2tp"
1280		iface0=l2tp0
1281		iface1=l2tp1
1282		iface2=l2tp2
1283		;;
1284	esac
1285
1286	local atf_ping="atf_check -s exit:0 -o ignore ${ping}"
1287
1288	rump_server_start $SOCK_HOST0 lagg $rumplib
1289	rump_server_start $SOCK_HOST1 lagg $rumplib
1290
1291	rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
1292	rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
1293	rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
1294
1295	rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0
1296	rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1
1297	rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2
1298
1299	if [ x"$l2proto" = x"l2tp" ]; then
1300		setup_l2tp_ipv4tunnel
1301	fi
1302
1303	export RUMP_SERVER=$SOCK_HOST0
1304	$atf_ifconfig lagg0 create
1305	$atf_ifconfig lagg0 laggproto loadbalance
1306
1307	$atf_ifconfig lagg0 laggport $iface0 pri 1000
1308	$atf_ifconfig lagg0 laggport $iface1 pri 2000
1309	$atf_ifconfig lagg0 laggport $iface2 pri 3000
1310	$atf_ifconfig lagg0 $af $addr_host0/$pfx
1311
1312	export RUMP_SERVER=$SOCK_HOST1
1313	$atf_ifconfig lagg0 create
1314	$atf_ifconfig lagg0 laggproto loadbalance
1315
1316	$atf_ifconfig lagg0 laggport $iface0 pri 1000
1317	$atf_ifconfig lagg0 laggport $iface1 pri 3000
1318	$atf_ifconfig lagg0 laggport $iface2 pri 2000
1319	$atf_ifconfig lagg0 $af $addr_host1/$pfx
1320
1321	export RUMP_SERVER=$SOCK_HOST0
1322	$atf_ifconfig $iface0 up
1323	$atf_ifconfig $iface1 up
1324	$atf_ifconfig $iface2 up
1325	$atf_ifconfig lagg0 up
1326
1327	export RUMP_SERVER=$SOCK_HOST1
1328	$atf_ifconfig $iface0 up
1329	$atf_ifconfig $iface1 up
1330	$atf_ifconfig $iface2 up
1331	$atf_ifconfig lagg0 up
1332
1333	export RUMP_SERVER=$SOCK_HOST0
1334	$atf_ifconfig -w 10
1335	wait_for_distributing lagg0 $iface0
1336	wait_state "COLLECTING" lagg0 $iface0
1337	wait_state "COLLECTING" lagg0 $iface1
1338	wait_state "COLLECTING" lagg0 $iface2
1339
1340	export RUMP_SERVER=$SOCK_HOST1
1341	$atf_ifconfig -w 10
1342	wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface0
1343	wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface1
1344	wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface2
1345
1346	export RUMP_SERVER=$SOCK_HOST0
1347	$atf_ping $addr_host1
1348
1349	$atf_ifconfig $iface0 down
1350	wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface1
1351	wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface2
1352
1353	export RUMP_SERVER=$SOCK_HOST1
1354	$atf_ifconfig $iface0 down
1355	wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface1
1356	wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface2
1357
1358	export RUMP_SERVER=$SOCK_HOST0
1359	$atf_ping $addr_host1
1360}
1361
1362atf_test_case lagg_loadbalance_ipv4 cleanup
1363lagg_loadbalance_ipv4_head()
1364{
1365
1366	atf_set "descr" "tests for loadbalance using IPv4"
1367	atf_set "require.progs" "rump_server"
1368}
1369
1370lagg_loadbalance_ipv4_body()
1371{
1372
1373	lagg_loadbalance "inet" "ether"
1374}
1375
1376lagg_loadbalance_ipv4_cleanup()
1377{
1378
1379	$DEBUG && dump
1380	cleanup
1381}
1382
1383atf_test_case lagg_loadbalance_ipv6 cleanup
1384lagg_loadbalance_ipv6_head()
1385{
1386
1387	atf_set "descr" "tests for loadbalance using IPv6"
1388	atf_set "require.progs" "rump_server"
1389}
1390
1391lagg_loadbalance_ipv6_body()
1392{
1393
1394	lagg_loadbalance "inet6" "ether"
1395}
1396
1397lagg_loadbalance_ipv6_cleanup()
1398{
1399
1400	$DEBUG && dump
1401	cleanup
1402}
1403
1404atf_test_case lagg_loadbalance_l2tp_ipv4 cleanup
1405lagg_loadbalance_l2tp_ipv4_head()
1406{
1407
1408	atf_set "descr" "tests for loadbalance over l2tp using IPv4"
1409	atf_set "require.progs" "rump_server"
1410}
1411
1412lagg_loadbalance_l2tp_ipv4_body()
1413{
1414
1415	lagg_loadbalance "inet" "l2tp"
1416}
1417
1418lagg_loadbalance_l2tp_ipv4_cleanup()
1419{
1420
1421	$DEBUG && dump
1422	cleanup
1423}
1424
1425atf_test_case lagg_loadbalance_l2tp_ipv6 cleanup
1426lagg_loadbalance_l2tp_ipv4_head()
1427{
1428
1429	atf_set "descr" "tests for loadbalance over l2tp using IPv6"
1430	atf_set "require.progs" "rump_server"
1431}
1432
1433lagg_loadbalance_l2tp_ipv6_body()
1434{
1435
1436	lagg_loadbalance "inet6" "l2tp"
1437}
1438
1439lagg_loadbalance_l2tp_ipv6_cleanup()
1440{
1441
1442	$DEBUG && dump
1443	cleanup
1444}
1445
1446atf_init_test_cases()
1447{
1448
1449	atf_add_test_case lagg_ifconfig
1450	atf_add_test_case lagg_macaddr
1451	atf_add_test_case lagg_ipv6lla
1452	atf_add_test_case lagg_mtu
1453	atf_add_test_case lagg_lacp_basic
1454	atf_add_test_case lagg_lacp_ipv4
1455	atf_add_test_case lagg_lacp_ipv6
1456	atf_add_test_case lagg_lacp_l2tp_ipv4
1457	atf_add_test_case lagg_lacp_l2tp_ipv6
1458	atf_add_test_case lagg_lacp_vlan_ipv4
1459	atf_add_test_case lagg_lacp_vlan_ipv6
1460	atf_add_test_case lagg_lacp_vlanl2tp_ipv4
1461	atf_add_test_case lagg_lacp_vlanl2tp_ipv6
1462	atf_add_test_case lagg_lacp_portpri
1463	atf_add_test_case lagg_failover_ipv4
1464	atf_add_test_case lagg_failover_ipv6
1465	atf_add_test_case lagg_failover_l2tp_ipv4
1466	atf_add_test_case lagg_failover_l2tp_ipv6
1467	atf_add_test_case lagg_loadbalance_ipv4
1468	atf_add_test_case lagg_loadbalance_ipv6
1469	atf_add_test_case lagg_loadbalance_l2tp_ipv4
1470	atf_add_test_case lagg_loadbalance_l2tp_ipv6
1471}
1472