t_lagg.sh revision 1.8 1 # $NetBSD: t_lagg.sh,v 1.8 2022/03/31 03:26:33 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
28 SOCK_HOST0=unix://commsock0
29 SOCK_HOST1=unix://commsock1
30 SOCK_HOST2=unix://commsock2
31 BUS0=bus0
32 BUS1=bus1
33 BUS2=bus2
34 IP4ADDR0=192.168.0.1
35 IP4ADDR1=192.168.0.2
36 IP4ADDR2=192.168.1.1
37 IP4ADDR3=192.168.1.2
38 IP6ADDR0=fc00::1
39 IP6ADDR1=fc00::2
40 IP6ADDR2=fc00:1::1
41 IP6ADDR3=fc00:1::2
42 WAITTIME=20
43
44 DEBUG=${DEBUG:-false}
45
46 wait_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 }
72 wait_for_distributing()
73 {
74
75 wait_state "DISTRIBUTING" $*
76 }
77
78 expected_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
88 setup_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
141 atf_test_case lagg_ifconfig cleanup
142 lagg_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
149 lagg_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
215 lagg_ifconfig_cleanup()
216 {
217 $DEBG && dump
218 cleanup
219 }
220
221 atf_test_case lagg_macaddr cleanup
222 lagg_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
228 lagg_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
310 lagg_macaddr_cleanup()
311 {
312 $DEBUG && dump
313 cleanup
314 }
315
316 atf_test_case lagg_ipv6lla cleanup
317 lagg_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
323 lagg_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
354 lagg_ipv6lla_cleanup()
355 {
356 $DEBUG && dump
357 cleanup
358 }
359
360 atf_test_case lagg_mtu cleanup
361 lagg_mtu_head()
362 {
363 atf_set "descr" "tests for MTU"
364 atf_set "require.progs" "rump_server"
365 }
366
367 lagg_mtu_body()
368 {
369 local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
370 local mtu_1st=1450
371 local mtu_big=1460
372 local mtu_small=1440
373
374 rump_server_start $SOCK_HOST0 lagg
375
376 export RUMP_SERVER=$SOCK_HOST0
377 rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
378 rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
379 rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
380 $atf_ifconfig lagg0 create
381 $atf_ifconfig lagg0 laggproto lacp
382
383 $atf_ifconfig shmif0 mtu $mtu_1st
384 $atf_ifconfig shmif1 mtu $mtu_big
385 $atf_ifconfig shmif2 mtu $mtu_small
386
387 atf_check -s exit:0 -o match:"mtu *1500" rump.ifconfig lagg0
388 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0
389 atf_check -s exit:0 -o match:"mtu *$mtu_big" rump.ifconfig shmif1
390 atf_check -s exit:0 -o match:"mtu *$mtu_small" rump.ifconfig shmif2
391
392 # copy MTU from 1st port
393 $atf_ifconfig lagg0 laggport shmif0
394 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig lagg0
395 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0
396
397 # copy MTU to added port
398 $atf_ifconfig lagg0 laggport shmif1
399 $atf_ifconfig lagg0 laggport shmif2
400 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig lagg0
401 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0
402 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif1
403 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif2
404
405 # reset MTU after detaching from lagg0
406 $atf_ifconfig lagg0 -laggport shmif2
407 atf_check -s exit:0 -o match:"mtu *$mtu_small" rump.ifconfig shmif2
408
409 # change MTU of lagg0
410 $atf_ifconfig lagg0 mtu 1500
411 atf_check -s exit:0 -o match:"mtu *1500" rump.ifconfig lagg0
412 atf_check -s exit:0 -o match:"mtu *1500" rump.ifconfig shmif0
413 atf_check -s exit:0 -o match:"mtu *1500" rump.ifconfig shmif1
414
415 # reset MTU after detching from lagg0
416 $atf_ifconfig lagg0 -laggport shmif0
417 $atf_ifconfig lagg0 -laggport shmif1
418 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0
419 atf_check -s exit:0 -o match:"mtu *$mtu_big" rump.ifconfig shmif1
420
421 # MTU should not be changed
422 atf_check -s exit:0 -o match:"mtu *1500" rump.ifconfig lagg0
423
424 # copy MTU from 1st port even when MTU of lagg0 is changhed
425 $atf_ifconfig lagg0 mtu 1400
426 atf_check -s exit:0 -o match:"mtu *1400" rump.ifconfig lagg0
427 $atf_ifconfig lagg0 laggport shmif0
428 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig lagg0
429 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0
430
431 # MTU of lagg0 need not reset
432 $atf_ifconfig lagg0 -laggport shmif0
433 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig lagg0
434 atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0
435 }
436
437 lagg_mtu_cleanup()
438 {
439
440 $DEBUG && dump
441 cleanup
442 }
443
444 atf_test_case lagg_lacp_basic cleanup
445 lagg_lacp_basic_head()
446 {
447
448 atf_set "descr" "tests for LACP basic functions"
449 atf_set "require.progs" "rump_server"
450 }
451
452 lagg_lacp_basic_body()
453 {
454 local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
455
456 rump_server_start $SOCK_HOST0 lagg
457 rump_server_start $SOCK_HOST1 lagg
458 rump_server_start $SOCK_HOST2 lagg
459
460 export RUMP_SERVER=$SOCK_HOST0
461
462 # added running interface
463 $atf_ifconfig shmif0 create
464 $atf_ifconfig shmif0 linkstr $BUS0
465
466 $atf_ifconfig shmif1 create
467 $atf_ifconfig shmif1 linkstr $BUS1
468
469 $atf_ifconfig lagg0 create
470 $atf_ifconfig lagg0 laggproto lacp
471
472 $atf_ifconfig shmif0 up
473 $atf_ifconfig shmif1 up
474 $atf_ifconfig lagg0 up
475
476 $atf_ifconfig lagg0 laggport shmif0
477 $atf_ifconfig lagg0 laggport shmif1
478 $atf_ifconfig -w 10
479
480 $atf_ifconfig lagg0 -laggport shmif0
481 $atf_ifconfig lagg0 -laggport shmif1
482 $atf_ifconfig lagg0 down
483
484 # add the same interfaces again
485 $atf_ifconfig lagg0 up
486 $atf_ifconfig lagg0 laggport shmif0
487 $atf_ifconfig lagg0 laggport shmif1
488
489 # detach and re-attach protocol
490 $atf_ifconfig lagg0 laggproto none
491 $atf_ifconfig lagg0 laggproto lacp \
492 laggport shmif0 laggport shmif1
493
494 $atf_ifconfig lagg0 -laggport shmif0 -laggport shmif1
495 $atf_ifconfig lagg0 destroy
496 $atf_ifconfig shmif0 destroy
497 $atf_ifconfig shmif1 destroy
498
499 # tests for a loopback condition
500 $atf_ifconfig shmif0 create
501 $atf_ifconfig shmif0 linkstr $BUS0
502 $atf_ifconfig shmif1 create
503 $atf_ifconfig shmif1 linkstr $BUS0
504 $atf_ifconfig lagg0 create
505 $atf_ifconfig lagg0 laggproto lacp \
506 laggport shmif0 laggport shmif1
507 $atf_ifconfig shmif0 up
508 $atf_ifconfig shmif1 up
509 $atf_ifconfig lagg0 up
510
511 expected_inactive lagg0
512
513 $atf_ifconfig shmif0 down
514 $atf_ifconfig shmif0 destroy
515 $atf_ifconfig shmif1 down
516 $atf_ifconfig shmif1 destroy
517 $atf_ifconfig lagg0 down
518 $atf_ifconfig lagg0 destroy
519
520 export RUMP_SERVER=$SOCK_HOST0
521 $atf_ifconfig shmif0 create
522 $atf_ifconfig shmif0 linkstr $BUS0
523 $atf_ifconfig shmif0 up
524
525 $atf_ifconfig shmif1 create
526 $atf_ifconfig shmif1 linkstr $BUS1
527 $atf_ifconfig shmif1 up
528
529 $atf_ifconfig shmif2 create
530 $atf_ifconfig shmif2 linkstr $BUS2
531 $atf_ifconfig shmif2 up
532
533 $atf_ifconfig lagg0 create
534 $atf_ifconfig lagg0 laggproto lacp laggport shmif0 \
535 laggport shmif1 laggport shmif2
536 $atf_ifconfig lagg0 up
537
538 export RUMP_SERVER=$SOCK_HOST1
539 $atf_ifconfig shmif0 create
540 $atf_ifconfig shmif0 linkstr $BUS0
541 $atf_ifconfig shmif0 up
542
543 $atf_ifconfig shmif1 create
544 $atf_ifconfig shmif1 linkstr $BUS1
545 $atf_ifconfig shmif1 up
546
547 $atf_ifconfig lagg0 create
548 $atf_ifconfig lagg0 laggproto lacp
549 $atf_ifconfig lagg1 create
550 $atf_ifconfig lagg1 laggproto lacp
551
552 $atf_ifconfig lagg0 laggport shmif0
553 $atf_ifconfig lagg0 up
554 wait_for_distributing lagg0 shmif0
555
556 $atf_ifconfig lagg1 laggport shmif1
557 $atf_ifconfig lagg1 up
558
559 export RUMP_SERVER=$SOCK_HOST2
560 $atf_ifconfig shmif0 create
561 $atf_ifconfig shmif0 linkstr $BUS2
562 $atf_ifconfig shmif0 up
563
564 $atf_ifconfig lagg0 create
565 $atf_ifconfig lagg0 laggproto lacp laggport shmif0
566 $atf_ifconfig lagg0 up
567
568 export RUMP_SERVER=$SOCK_HOST0
569 wait_for_distributing lagg0 shmif0
570 expected_inactive lagg0 shmif1
571 expected_inactive lagg0 shmif2
572 }
573
574 lagg_lacp_basic_cleanup()
575 {
576
577 $DEBUG && dump
578 cleanup
579 }
580
581 lagg_lacp_ping()
582 {
583 local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
584
585 local af=$1
586 local l2proto=$2
587 local atf_ping="atf_check -s exit:0 -o ignore rump.ping -c 1"
588 local ping=rump.ping
589 local rumplib=""
590 local pfx=24
591 local addr_host0=$IP4ADDR0
592 local addr_host1=$IP4ADDR1
593
594 case $af in
595 "inet")
596 # do nothing
597 ;;
598 "inet6")
599 atf_ping="atf_check -s exit:0 -o ignore rump.ping6 -c 1"
600 rumplib="netinet6"
601 pfx=64
602 addr_host0=$IP6ADDR0
603 addr_host1=$IP6ADDR1
604 ;;
605 esac
606
607 case $l2proto in
608 "ether")
609 iface0=shmif0
610 iface1=shmif1
611 iface2=shmif2
612 ;;
613 "l2tp")
614 rumplib="$rumplib l2tp"
615 iface0=l2tp0
616 iface1=l2tp1
617 iface2=l2tp2
618 ;;
619 esac
620
621 rump_server_start $SOCK_HOST0 lagg $rumplib
622 rump_server_start $SOCK_HOST1 lagg $rumplib
623
624 rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
625 rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
626 rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
627
628 rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0
629 rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1
630 rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2
631
632 if [ x"$l2proto" = x"l2tp" ];then
633 setup_l2tp_ipv4tunnel
634 fi
635
636 export RUMP_SERVER=$SOCK_HOST0
637 $atf_ifconfig lagg0 create
638 $atf_ifconfig lagg0 laggproto lacp laggport $iface0
639 $atf_ifconfig lagg0 $af $addr_host0/$pfx
640 $atf_ifconfig $iface0 up
641 $atf_ifconfig lagg0 up
642
643 export RUMP_SERVER=$SOCK_HOST1
644 $atf_ifconfig lagg0 create
645 $atf_ifconfig lagg0 laggproto lacp laggport $iface0
646 $atf_ifconfig lagg0 $af $addr_host1/$pfx
647 $atf_ifconfig $iface0 up
648 $atf_ifconfig lagg0 up
649
650 export RUMP_SERVER=$SOCK_HOST0
651 wait_for_distributing lagg0
652 $atf_ifconfig -w 10
653
654 export RUMP_SERVER=$SOCK_HOST1
655 wait_for_distributing lagg0
656 $atf_ifconfig -w 10
657
658 $atf_ping $addr_host0
659
660 export RUMP_SERVER=$SOCK_HOST0
661 $atf_ifconfig $iface1 up
662 $atf_ifconfig lagg0 laggport $iface1 laggport $iface2
663 $atf_ifconfig $iface2 up
664
665 export RUMP_SERVER=$SOCK_HOST1
666 $atf_ifconfig $iface1 up
667 $atf_ifconfig lagg0 laggport $iface1 laggport $iface2
668 $atf_ifconfig $iface2 up
669
670 export RUMP_SERVER=$SOCK_HOST0
671 wait_for_distributing lagg0 $iface1
672 wait_for_distributing lagg0 $iface2
673
674 export RUMP_SERVER=$SOCK_HOST1
675 wait_for_distributing lagg0 $iface1
676 wait_for_distributing lagg0 $iface2
677
678 $atf_ping $addr_host0
679 }
680
681 atf_test_case lagg_lacp_ipv4 cleanup
682 lagg_lacp_ipv4_head()
683 {
684
685 atf_set "descr" "tests for IPv4 with LACP"
686 atf_set "require.progs" "rump_server"
687 }
688
689 lagg_lacp_ipv4_body()
690 {
691
692 lagg_lacp_ping "inet" "ether"
693 }
694
695 lagg_lacp_ipv4_cleanup()
696 {
697
698 $DEBUG && dump
699 cleanup
700 }
701
702 atf_test_case lagg_lacp_ipv6 cleanup
703 lagg_lacp_ipv6_head()
704 {
705
706 atf_set "descr" "tests for IPv6 with LACP"
707 atf_set "require.progs" "rump_server"
708 }
709
710 lagg_lacp_ipv6_body()
711 {
712
713 lagg_lacp_ping "inet6" "ether"
714 }
715
716 lagg_lacp_ipv6_cleanup()
717 {
718
719 $DEBUG && dump
720 cleanup
721 }
722
723 atf_test_case lagg_lacp_l2tp_ipv4 cleanup
724 lagg_lacp_l2tp_ipv4_head()
725 {
726
727 atf_set "descr" "tests for LACP over l2tp by using IPv4"
728 atf_set "require.progs" "rump_server"
729 }
730
731 lagg_lacp_l2tp_ipv4_body()
732 {
733
734 lagg_lacp_ping "inet" "l2tp"
735 }
736
737 lagg_lacp_l2tp_ipv4_cleanup()
738 {
739
740 $DEBUG && dump
741 cleanup
742 }
743
744 atf_test_case lagg_lacp_l2tp_ipv6 cleanup
745 lagg_lacp_l2tp_ipv6_head()
746 {
747
748 atf_set "descr" "tests for LACP over l2tp using IPv6"
749 atf_set "require.progs" "rump_server"
750 }
751
752 lagg_lacp_l2tp_ipv6_body()
753 {
754
755 lagg_lacp_ping "inet6" "l2tp"
756 }
757
758 lagg_lacp_l2tp_ipv6_cleanup()
759 {
760
761 $DEBUG && dump
762 cleanup
763 }
764
765 lagg_lacp_vlan()
766 {
767 local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
768
769 local af=$1
770 local l2proto=$2
771 local atf_ping="atf_check -s exit:0 -o ignore rump.ping -c 1"
772 local rumplib="vlan"
773 local pfx=24
774 local vlan0_addr_host0=$IP4ADDR0
775 local host0addr0=$IP4ADDR0
776 local host1addr0=$IP4ADDR1
777 local host0addr1=$IP4ADDR2
778 local host1addr1=$IP4ADDR3
779
780 case $af in
781 "inet")
782 # do nothing
783 ;;
784 "inet6")
785 atf_ping="atf_check -s exit:0 -o ignore rump.ping6 -c 1"
786 rumplib="$rumplib netinet6"
787 pfx=64
788 host0addr0=$IP6ADDR0
789 host1addr0=$IP6ADDR1
790 host0addr1=$IP6ADDR2
791 host1addr1=$IP6ADDR3
792 ;;
793 esac
794
795 case $l2proto in
796 "ether")
797 iface0=shmif0
798 iface1=shmif1
799 iface2=shmif2
800 ;;
801 "l2tp")
802 rumplib="$rumplib l2tp"
803 iface0=l2tp0
804 iface1=l2tp1
805 iface2=l2tp2
806 esac
807
808 rump_server_start $SOCK_HOST0 lagg $rumplib
809 rump_server_start $SOCK_HOST1 lagg $rumplib
810
811 rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
812 rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
813 rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
814
815 rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0
816 rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1
817 rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2
818
819 if [ x"$l2proto" = x"l2tp" ]; then
820 setup_l2tp_ipv4tunnel
821 fi
822
823 for sock in $SOCK_HOST0 $SOCK_HOST1; do
824 export RUMP_SERVER=$sock
825 $atf_ifconfig lagg0 create
826 $atf_ifconfig lagg0 laggproto lacp laggport $iface0
827
828 $atf_ifconfig vlan0 create
829 $atf_ifconfig vlan0 vlan 10 vlanif lagg0
830 $atf_ifconfig vlan1 create
831 $atf_ifconfig vlan1 vlan 11 vlanif lagg0
832
833 $atf_ifconfig $iface0 up
834 $atf_ifconfig lagg0 up
835 done
836
837 export RUMP_SERVER=$SOCK_HOST0
838 wait_for_distributing lagg0
839 $atf_ifconfig vlan0 $af $host0addr0/$pfx
840 $atf_ifconfig vlan0 up
841 $atf_ifconfig vlan1 $af $host0addr1/$pfx
842 $atf_ifconfig vlan1 up
843
844 export RUMP_SERVER=$SOCK_HOST1
845 wait_for_distributing lagg0
846 $atf_ifconfig vlan0 $af $host1addr0/$pfx
847 $atf_ifconfig vlan0 up
848 $atf_ifconfig vlan1 $af $host1addr1/$pfx
849 $atf_ifconfig vlan1 up
850
851 export RUMP_SERVER=$SOCK_HOST0
852 $atf_ifconfig -w 10
853 export RUMP_SERVER=$SOCK_HOST1
854 $atf_ifconfig -w 10
855
856 export RUMP_SERVER=$SOCK_HOST0
857 $atf_ping $host1addr0
858 $atf_ping $host1addr1
859
860 $atf_ifconfig lagg0 laggport $iface1
861 $atf_ifconfig $iface1 up
862
863 export RUMP_SERVER=$SOCK_HOST1
864 $atf_ifconfig lagg0 laggport $iface1
865 $atf_ifconfig $iface1 up
866
867 export RUMP_SERVER=$SOCK_HOST0
868 wait_for_distributing lagg0 $iface1
869
870 export RUMP_SERVER=$SOCK_HOST1
871 wait_for_distributing lagg0 $iface1
872
873 $atf_ping $host0addr0
874 $atf_ping $host0addr1
875 }
876
877 atf_test_case lagg_lacp_vlan_ipv4 cleanup
878 lagg_lacp_vlan_ipv4_head()
879 {
880
881 atf_set "descr" "tests for IPv4 VLAN frames over LACP LAG"
882 atf_set "require.progs" "rump_server"
883 }
884
885 lagg_lacp_vlan_ipv4_body()
886 {
887
888 lagg_lacp_vlan "inet" "ether"
889 }
890
891 lagg_lacp_vlan_ipv4_cleanup()
892 {
893 $DEBUG && dump
894 cleanup
895 }
896
897 atf_test_case lagg_lacp_vlan_ipv6 cleanup
898 lagg_lacp_vlan_ipv6_head()
899 {
900
901 atf_set "descr" "tests for IPv6 VLAN frames over LACP LAG"
902 atf_set "require.progs" "rump_server"
903 }
904
905 lagg_lacp_vlan_ipv6_body()
906 {
907
908 lagg_lacp_vlan "inet6" "ether"
909 }
910
911 lagg_lacp_vlan_ipv6_cleanup()
912 {
913 $DEBUG && dump
914 cleanup
915 }
916
917 atf_test_case lagg_lacp_vlanl2tp_ipv4 cleanup
918 lagg_lacp_vlanl2tp_ipv4_head()
919 {
920
921 atf_set "descr" "tests for IPv4 VLAN frames over LACP L2TP LAG"
922 atf_set "require.progs" "rump_server"
923 }
924
925 lagg_lacp_vlanl2tp_ipv4_body()
926 {
927
928 lagg_lacp_vlan "inet" "l2tp"
929 }
930
931 lagg_lacp_vlanl2tp_ipv4_cleanup()
932 {
933
934 $DEBUG && dump
935 cleanup
936 }
937
938 atf_test_case lagg_lacp_vlanl2tp_ipv6 cleanup
939 lagg_lacp_vlanl2tp_ipv6_head()
940 {
941
942 atf_set "descr" "tests for IPv6 VLAN frames over LACP L2TP LAG"
943 atf_set "require.progs" "rump_server"
944 }
945
946 lagg_lacp_vlanl2tp_ipv6_body()
947 {
948
949 lagg_lacp_vlan "inet6" "l2tp"
950 }
951
952 lagg_lacp_vlanl2tp_ipv6_cleanup()
953 {
954
955 $DEBUG && dump
956 cleanup
957 }
958
959 atf_test_case lagg_lacp_portpri cleanup
960 lagg_lacp_portpri_head()
961 {
962
963 atf_set "descr" "tests for LACP port priority"
964 atf_set "require.progs" "rump_server"
965 }
966
967 lagg_lacp_portpri_body()
968 {
969 local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
970
971 rump_server_start $SOCK_HOST0 lagg
972 rump_server_start $SOCK_HOST1 lagg
973
974 rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
975 rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
976 rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
977
978 rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0
979 rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1
980 rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2
981
982 export RUMP_SERVER=$SOCK_HOST0
983 $atf_ifconfig lagg0 create
984 $atf_ifconfig lagg0 laggproto lacp
985 $atf_ifconfig lagg0 lagglacp maxports 2
986
987 $atf_ifconfig shmif0 up
988 $atf_ifconfig shmif1 up
989 $atf_ifconfig shmif2 up
990
991 $atf_ifconfig lagg0 laggport shmif0 pri 1000
992 $atf_ifconfig lagg0 laggport shmif1 pri 2000
993 $atf_ifconfig lagg0 laggport shmif2 pri 3000
994 $atf_ifconfig lagg0 up
995
996 atf_check -s exit:0 -o match:'shmif0 pri=1000' rump.ifconfig lagg0
997 atf_check -s exit:0 -o match:'shmif1 pri=2000' rump.ifconfig lagg0
998 atf_check -s exit:0 -o match:'shmif2 pri=3000' rump.ifconfig lagg0
999
1000 export RUMP_SERVER=$SOCK_HOST1
1001 $atf_ifconfig lagg0 create
1002 $atf_ifconfig lagg0 laggproto lacp
1003
1004 $atf_ifconfig shmif0 up
1005 $atf_ifconfig shmif1 up
1006 $atf_ifconfig shmif2 up
1007
1008 $atf_ifconfig lagg0 laggport shmif0 pri 300
1009 $atf_ifconfig lagg0 laggport shmif1 pri 200
1010 $atf_ifconfig lagg0 laggport shmif2 pri 100
1011 $atf_ifconfig lagg0 up
1012
1013 atf_check -s exit:0 -o match:'shmif0 pri=300' rump.ifconfig lagg0
1014 atf_check -s exit:0 -o match:'shmif1 pri=200' rump.ifconfig lagg0
1015 atf_check -s exit:0 -o match:'shmif2 pri=100' rump.ifconfig lagg0
1016
1017 export RUMP_SERVER=$SOCK_HOST0
1018 wait_for_distributing lagg0 shmif0
1019 wait_for_distributing lagg0 shmif1
1020 wait_state "STANDBY" lagg0 shmif2
1021
1022 $atf_ifconfig shmif0 down
1023 wait_for_distributing lagg0 shmif2
1024
1025 $atf_ifconfig shmif0 up
1026 wait_for_distributing lagg0 shmif0
1027
1028 $atf_ifconfig lagg0 laggportpri shmif0 5000
1029 $atf_ifconfig lagg0 laggportpri shmif1 5000
1030 $atf_ifconfig lagg0 laggportpri shmif2 5000
1031
1032 atf_check -s exit:0 -o match:'shmif0 pri=5000' rump.ifconfig lagg0
1033 atf_check -s exit:0 -o match:'shmif1 pri=5000' rump.ifconfig lagg0
1034 atf_check -s exit:0 -o match:'shmif2 pri=5000' rump.ifconfig lagg0
1035
1036 wait_state "STANDBY" lagg0 shmif0
1037 wait_for_distributing lagg0 shmif1
1038 wait_for_distributing lagg0 shmif2
1039 }
1040
1041 lagg_lacp_portpri_cleanup()
1042 {
1043
1044 $DEBUG && dump
1045 cleanup
1046 }
1047
1048 lagg_failover()
1049 {
1050 local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
1051
1052 local af=$1
1053 local l2proto=$2
1054 local ping="rump.ping -c 1"
1055 local rumplib=""
1056 local pfx=24
1057 local addr_host0=$IP4ADDR0
1058 local addr_host1=$IP4ADDR1
1059
1060 case $af in
1061 "inet")
1062 # do nothing
1063 ;;
1064 "inet6")
1065 ping="rump.ping6 -c 1"
1066 rumplib="netinet6"
1067 pfx=64
1068 addr_host0=$IP6ADDR0
1069 addr_host1=$IP6ADDR1
1070 ;;
1071 esac
1072
1073 case $l2proto in
1074 "ether")
1075 iface0="shmif0"
1076 iface1="shmif1"
1077 iface2="shmif2"
1078 ;;
1079 "l2tp")
1080 rumplib="$rumplib l2tp"
1081 iface0="l2tp0"
1082 iface1="l2tp1"
1083 iface2="l2tp2"
1084 ;;
1085 esac
1086
1087 local atf_ping="atf_check -s exit:0 -o ignore ${ping}"
1088
1089 rump_server_start $SOCK_HOST0 lagg $rumplib
1090 rump_server_start $SOCK_HOST1 lagg $rumplib
1091
1092 rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
1093 rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
1094 rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
1095
1096 rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0
1097 rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1
1098 rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2
1099
1100 if [ x"$l2proto" = x"l2tp" ]; then
1101 setup_l2tp_ipv4tunnel
1102 fi
1103
1104 export RUMP_SERVER=$SOCK_HOST0
1105 $atf_ifconfig lagg0 create
1106 $atf_ifconfig lagg0 laggproto failover
1107
1108 $atf_ifconfig lagg0 laggport $iface0 pri 1000
1109 $atf_ifconfig lagg0 laggport $iface1 pri 2000
1110 $atf_ifconfig lagg0 laggport $iface2 pri 3000
1111 $atf_ifconfig lagg0 $af $addr_host0/$pfx
1112
1113 export RUMP_SERVER=$SOCK_HOST1
1114 $atf_ifconfig lagg0 create
1115 $atf_ifconfig lagg0 laggproto failover
1116
1117 $atf_ifconfig lagg0 laggport $iface0 pri 1000
1118 $atf_ifconfig lagg0 laggport $iface1 pri 3000
1119 $atf_ifconfig lagg0 laggport $iface2 pri 2000
1120 $atf_ifconfig lagg0 $af $addr_host1/$pfx
1121
1122 export RUMP_SERVER=$SOCK_HOST0
1123 $atf_ifconfig $iface0 up
1124 $atf_ifconfig $iface1 up
1125 $atf_ifconfig $iface2 up
1126 $atf_ifconfig lagg0 up
1127
1128 export RUMP_SERVER=$SOCK_HOST1
1129 $atf_ifconfig $iface0 up
1130 $atf_ifconfig $iface1 up
1131 $atf_ifconfig $iface2 up
1132 $atf_ifconfig lagg0 up
1133
1134 export RUMP_SERVER=$SOCK_HOST0
1135 $atf_ifconfig -w 10
1136 wait_for_distributing lagg0 $iface0
1137 wait_state "COLLECTING" lagg0 $iface0
1138 wait_state "COLLECTING" lagg0 $iface1
1139 wait_state "COLLECTING" lagg0 $iface2
1140
1141 export RUMP_SERVER=$SOCK_HOST1
1142 $atf_ifconfig -w 10
1143 wait_for_distributing lagg0 $iface0
1144 wait_state "COLLECTING" lagg0 $iface0
1145 wait_state "COLLECTING" lagg0 $iface1
1146 wait_state "COLLECTING" lagg0 $iface2
1147
1148 export RUMP_SERVER=$SOCK_HOST0
1149 $atf_ping $addr_host1
1150
1151 $atf_ifconfig $iface0 down
1152 wait_for_distributing lagg0 $iface1
1153 wait_state "COLLECTING" lagg0 $iface1
1154 wait_state "COLLECTING" lagg0 $iface2
1155
1156 export RUMP_SERVER=$SOCK_HOST1
1157 $atf_ifconfig $iface0 down
1158 wait_for_distributing lagg0 $iface2
1159 wait_state "COLLECTING" lagg0 $iface2
1160 wait_state "COLLECTING" lagg0 $iface1
1161
1162 export RUMP_SERVER=$SOCK_HOST0
1163 $atf_ping $addr_host1
1164
1165 $atf_ifconfig lagg0 laggfailover -rx-all
1166 atf_check -s exit:0 -o not-match:'$iface2.+COLLECTING' rump.ifconfig lagg0
1167
1168 export RUMP_SERVER=$SOCK_HOST1
1169 $atf_ifconfig lagg0 laggfailover -rx-all
1170 atf_check -s exit:0 -o not-match:'$iface1.+COLLECTING' rump.ifconfig lagg0
1171
1172 export RUMP_SERVER=$SOCK_HOST0
1173 atf_check -s not-exit:0 -o ignore -e ignore $ping -c 1 $addr_host1
1174 }
1175
1176 atf_test_case lagg_failover_ipv4 cleanup
1177 lagg_failover_ipv4_head()
1178 {
1179
1180 atf_set "descr" "tests for failover using IPv4"
1181 atf_set "require.progs" "rump_server"
1182 }
1183
1184 lagg_failover_ipv4_body()
1185 {
1186
1187 lagg_failover "inet" "ether"
1188 }
1189
1190 lagg_failover_ipv4_cleanup()
1191 {
1192
1193 $DEBUG && dump
1194 cleanup
1195 }
1196
1197 atf_test_case lagg_failover_ipv6 cleanup
1198 lagg_failover_ipv6_head()
1199 {
1200
1201 atf_set "descr" "tests for failover using IPv6"
1202 atf_set "require.progs" "rump_server"
1203 }
1204
1205 lagg_failover_ipv6_body()
1206 {
1207
1208 lagg_failover "inet6" "ether"
1209 }
1210
1211 lagg_failover_ipv6_cleanup()
1212 {
1213
1214 $DEBUG && dump
1215 cleanup
1216 }
1217
1218 atf_test_case lagg_failover_l2tp_ipv4 cleanup
1219 lagg_failover_l2tp_ipv4_head()
1220 {
1221
1222 atf_set "descr" "tests for failover over l2tp using IPv4"
1223 atf_set "require.progs" "rump_server"
1224 }
1225
1226 lagg_failover_l2tp_ipv4_body()
1227 {
1228
1229 lagg_failover "inet" "l2tp"
1230 }
1231
1232 lagg_failover_l2tp_ipv4_cleanup()
1233 {
1234 $DEBUG && dump
1235 cleanup
1236 }
1237
1238 atf_test_case lagg_failover_l2tp_ipv6 cleanup
1239 lagg_failover_l2tp_ipv6_head()
1240 {
1241
1242 atf_set "descr" "tests for failover over l2tp using IPv6"
1243 atf_set "require.progs" "rump_server"
1244 }
1245
1246 lagg_failover_l2tp_ipv6_body()
1247 {
1248
1249 lagg_failover "inet6" "l2tp"
1250 }
1251
1252 lagg_failover_l2tp_ipv6_cleanup()
1253 {
1254 $DEBUG && dump
1255 cleanup
1256 }
1257
1258 lagg_loadbalance()
1259 {
1260 local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
1261
1262 local af=$1
1263 local l2proto=$2
1264 local ping="rump.ping -c 1"
1265 local rumplib=""
1266 local pfx=24
1267 local addr_host0=$IP4ADDR0
1268 local addr_host1=$IP4ADDR1
1269
1270 case $af in
1271 "inet")
1272 # do nothing
1273 ;;
1274 "inet6")
1275 ping="rump.ping6 -c 1"
1276 rumplib="netinet6"
1277 pfx=64
1278 addr_host0=$IP6ADDR0
1279 addr_host1=$IP6ADDR1
1280 ;;
1281 esac
1282
1283 case $l2proto in
1284 "ether")
1285 iface0=shmif0
1286 iface1=shmif1
1287 iface2=shmif2
1288 ;;
1289 "l2tp")
1290 rumplib="$rumplib l2tp"
1291 iface0=l2tp0
1292 iface1=l2tp1
1293 iface2=l2tp2
1294 ;;
1295 esac
1296
1297 local atf_ping="atf_check -s exit:0 -o ignore ${ping}"
1298
1299 rump_server_start $SOCK_HOST0 lagg $rumplib
1300 rump_server_start $SOCK_HOST1 lagg $rumplib
1301
1302 rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0
1303 rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1
1304 rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2
1305
1306 rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0
1307 rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1
1308 rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2
1309
1310 if [ x"$l2proto" = x"l2tp" ]; then
1311 setup_l2tp_ipv4tunnel
1312 fi
1313
1314 export RUMP_SERVER=$SOCK_HOST0
1315 $atf_ifconfig lagg0 create
1316 $atf_ifconfig lagg0 laggproto loadbalance
1317
1318 $atf_ifconfig lagg0 laggport $iface0 pri 1000
1319 $atf_ifconfig lagg0 laggport $iface1 pri 2000
1320 $atf_ifconfig lagg0 laggport $iface2 pri 3000
1321 $atf_ifconfig lagg0 $af $addr_host0/$pfx
1322
1323 export RUMP_SERVER=$SOCK_HOST1
1324 $atf_ifconfig lagg0 create
1325 $atf_ifconfig lagg0 laggproto loadbalance
1326
1327 $atf_ifconfig lagg0 laggport $iface0 pri 1000
1328 $atf_ifconfig lagg0 laggport $iface1 pri 3000
1329 $atf_ifconfig lagg0 laggport $iface2 pri 2000
1330 $atf_ifconfig lagg0 $af $addr_host1/$pfx
1331
1332 export RUMP_SERVER=$SOCK_HOST0
1333 $atf_ifconfig $iface0 up
1334 $atf_ifconfig $iface1 up
1335 $atf_ifconfig $iface2 up
1336 $atf_ifconfig lagg0 up
1337
1338 export RUMP_SERVER=$SOCK_HOST1
1339 $atf_ifconfig $iface0 up
1340 $atf_ifconfig $iface1 up
1341 $atf_ifconfig $iface2 up
1342 $atf_ifconfig lagg0 up
1343
1344 export RUMP_SERVER=$SOCK_HOST0
1345 $atf_ifconfig -w 10
1346 wait_for_distributing lagg0 $iface0
1347 wait_state "COLLECTING" lagg0 $iface0
1348 wait_state "COLLECTING" lagg0 $iface1
1349 wait_state "COLLECTING" lagg0 $iface2
1350
1351 export RUMP_SERVER=$SOCK_HOST1
1352 $atf_ifconfig -w 10
1353 wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface0
1354 wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface1
1355 wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface2
1356
1357 export RUMP_SERVER=$SOCK_HOST0
1358 $atf_ping $addr_host1
1359
1360 $atf_ifconfig $iface0 down
1361 wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface1
1362 wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface2
1363
1364 export RUMP_SERVER=$SOCK_HOST1
1365 $atf_ifconfig $iface0 down
1366 wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface1
1367 wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface2
1368
1369 export RUMP_SERVER=$SOCK_HOST0
1370 $atf_ping $addr_host1
1371 }
1372
1373 atf_test_case lagg_loadbalance_ipv4 cleanup
1374 lagg_loadbalance_ipv4_head()
1375 {
1376
1377 atf_set "descr" "tests for loadbalance using IPv4"
1378 atf_set "require.progs" "rump_server"
1379 }
1380
1381 lagg_loadbalance_ipv4_body()
1382 {
1383
1384 lagg_loadbalance "inet" "ether"
1385 }
1386
1387 lagg_loadbalance_ipv4_cleanup()
1388 {
1389
1390 $DEBUG && dump
1391 cleanup
1392 }
1393
1394 atf_test_case lagg_loadbalance_ipv6 cleanup
1395 lagg_loadbalance_ipv6_head()
1396 {
1397
1398 atf_set "descr" "tests for loadbalance using IPv6"
1399 atf_set "require.progs" "rump_server"
1400 }
1401
1402 lagg_loadbalance_ipv6_body()
1403 {
1404
1405 lagg_loadbalance "inet6" "ether"
1406 }
1407
1408 lagg_loadbalance_ipv6_cleanup()
1409 {
1410
1411 $DEBUG && dump
1412 cleanup
1413 }
1414
1415 atf_test_case lagg_loadbalance_l2tp_ipv4 cleanup
1416 lagg_loadbalance_l2tp_ipv4_head()
1417 {
1418
1419 atf_set "descr" "tests for loadbalance over l2tp using IPv4"
1420 atf_set "require.progs" "rump_server"
1421 }
1422
1423 lagg_loadbalance_l2tp_ipv4_body()
1424 {
1425
1426 lagg_loadbalance "inet" "l2tp"
1427 }
1428
1429 lagg_loadbalance_l2tp_ipv4_cleanup()
1430 {
1431
1432 $DEBUG && dump
1433 cleanup
1434 }
1435
1436 atf_test_case lagg_loadbalance_l2tp_ipv6 cleanup
1437 lagg_loadbalance_l2tp_ipv4_head()
1438 {
1439
1440 atf_set "descr" "tests for loadbalance over l2tp using IPv6"
1441 atf_set "require.progs" "rump_server"
1442 }
1443
1444 lagg_loadbalance_l2tp_ipv6_body()
1445 {
1446
1447 lagg_loadbalance "inet6" "l2tp"
1448 }
1449
1450 lagg_loadbalance_l2tp_ipv6_cleanup()
1451 {
1452
1453 $DEBUG && dump
1454 cleanup
1455 }
1456
1457 atf_init_test_cases()
1458 {
1459
1460 atf_add_test_case lagg_ifconfig
1461 atf_add_test_case lagg_macaddr
1462 atf_add_test_case lagg_ipv6lla
1463 atf_add_test_case lagg_mtu
1464 atf_add_test_case lagg_lacp_basic
1465 atf_add_test_case lagg_lacp_ipv4
1466 atf_add_test_case lagg_lacp_ipv6
1467 atf_add_test_case lagg_lacp_l2tp_ipv4
1468 atf_add_test_case lagg_lacp_l2tp_ipv6
1469 atf_add_test_case lagg_lacp_vlan_ipv4
1470 atf_add_test_case lagg_lacp_vlan_ipv6
1471 atf_add_test_case lagg_lacp_vlanl2tp_ipv4
1472 atf_add_test_case lagg_lacp_vlanl2tp_ipv6
1473 atf_add_test_case lagg_lacp_portpri
1474 atf_add_test_case lagg_failover_ipv4
1475 atf_add_test_case lagg_failover_ipv6
1476 atf_add_test_case lagg_failover_l2tp_ipv4
1477 atf_add_test_case lagg_failover_l2tp_ipv6
1478 atf_add_test_case lagg_loadbalance_ipv4
1479 atf_add_test_case lagg_loadbalance_ipv6
1480 atf_add_test_case lagg_loadbalance_l2tp_ipv4
1481 atf_add_test_case lagg_loadbalance_l2tp_ipv6
1482 }
1483