Commit | Line | Data |
---|---|---|
3446dcd7 PM |
1 | #!/bin/bash |
2 | # SPDX-License-Identifier: GPL-2.0 | |
3 | ||
4 | # +-----------------------+ +------------------------+ | |
5 | # | H1 (vrf) | | H2 (vrf) | | |
6 | # | + $h1.10 | | + $h2.10 | | |
7 | # | | 192.0.2.1/28 | | | 192.0.2.2/28 | | |
8 | # | | 2001:db8:1::1/64 | | | 2001:db8:1::2/64 | | |
9 | # | | | | | | | |
10 | # | | + $h1.20 | | | + $h2.20 | | |
11 | # | \ | 198.51.100.1/24 | | \ | 198.51.100.2/24 | | |
12 | # | \ | 2001:db8:2::1/64 | | \ | 2001:db8:2::2/64 | | |
13 | # | \| | | \| | | |
14 | # | + $h1 | | + $h2 | | |
15 | # +----|------------------+ +----|-------------------+ | |
16 | # | | | |
17 | # +----|--------------------------------------------------|-------------------+ | |
18 | # | SW | | | | |
19 | # | +--|--------------------------------------------------|-----------------+ | | |
20 | # | | + $swp1 BR0 (802.1q) + $swp2 | | | |
21 | # | | vid 10 vid 10 | | | |
22 | # | | vid 20 vid 20 | | | |
23 | # | | | | | |
24 | # | +-----------------------------------------------------------------------+ | | |
25 | # +---------------------------------------------------------------------------+ | |
26 | ||
27 | ALL_TESTS=" | |
28 | test_8021d | |
29 | test_8021q | |
30 | test_8021qvs | |
31 | " | |
32 | ||
33 | NUM_NETIFS=4 | |
34 | source lib.sh | |
35 | source tc_common.sh | |
36 | ||
37 | h1_create() | |
38 | { | |
39 | simple_if_init $h1 | |
40 | vlan_create $h1 10 v$h1 192.0.2.1/28 2001:db8:1::1/64 | |
41 | vlan_create $h1 20 v$h1 198.51.100.1/24 2001:db8:2::1/64 | |
42 | } | |
43 | ||
44 | h1_destroy() | |
45 | { | |
46 | vlan_destroy $h1 20 | |
47 | vlan_destroy $h1 10 | |
48 | simple_if_fini $h1 | |
49 | } | |
50 | ||
51 | h2_create() | |
52 | { | |
53 | simple_if_init $h2 | |
54 | vlan_create $h2 10 v$h2 192.0.2.2/28 | |
55 | vlan_create $h2 20 v$h2 198.51.100.2/24 | |
56 | } | |
57 | ||
58 | h2_destroy() | |
59 | { | |
60 | vlan_destroy $h2 20 | |
61 | vlan_destroy $h2 10 | |
62 | simple_if_fini $h2 | |
63 | } | |
64 | ||
65 | switch_create_8021d() | |
66 | { | |
67 | log_info "802.1d tests" | |
68 | ||
69 | ip link add name br0 type bridge vlan_filtering 0 \ | |
70 | mcast_snooping 1 \ | |
71 | mcast_igmp_version 3 mcast_mld_version 2 | |
72 | ip link set dev br0 up | |
73 | ||
74 | ip link set dev $swp1 master br0 | |
75 | ip link set dev $swp1 up | |
76 | bridge link set dev $swp1 fastleave on | |
77 | ||
78 | ip link set dev $swp2 master br0 | |
79 | ip link set dev $swp2 up | |
80 | } | |
81 | ||
82 | switch_create_8021q() | |
83 | { | |
84 | local br_flags=$1; shift | |
85 | ||
86 | log_info "802.1q $br_flags${br_flags:+ }tests" | |
87 | ||
88 | ip link add name br0 type bridge vlan_filtering 1 vlan_default_pvid 0 \ | |
89 | mcast_snooping 1 $br_flags \ | |
90 | mcast_igmp_version 3 mcast_mld_version 2 | |
91 | bridge vlan add vid 10 dev br0 self | |
92 | bridge vlan add vid 20 dev br0 self | |
93 | ip link set dev br0 up | |
94 | ||
95 | ip link set dev $swp1 master br0 | |
96 | ip link set dev $swp1 up | |
97 | bridge link set dev $swp1 fastleave on | |
98 | bridge vlan add vid 10 dev $swp1 | |
99 | bridge vlan add vid 20 dev $swp1 | |
100 | ||
101 | ip link set dev $swp2 master br0 | |
102 | ip link set dev $swp2 up | |
103 | bridge vlan add vid 10 dev $swp2 | |
104 | bridge vlan add vid 20 dev $swp2 | |
105 | } | |
106 | ||
107 | switch_create_8021qvs() | |
108 | { | |
109 | switch_create_8021q "mcast_vlan_snooping 1" | |
110 | bridge vlan global set dev br0 vid 10 mcast_igmp_version 3 | |
111 | bridge vlan global set dev br0 vid 10 mcast_mld_version 2 | |
112 | bridge vlan global set dev br0 vid 20 mcast_igmp_version 3 | |
113 | bridge vlan global set dev br0 vid 20 mcast_mld_version 2 | |
114 | } | |
115 | ||
116 | switch_destroy() | |
117 | { | |
118 | ip link set dev $swp2 down | |
119 | ip link set dev $swp2 nomaster | |
120 | ||
121 | ip link set dev $swp1 down | |
122 | ip link set dev $swp1 nomaster | |
123 | ||
124 | ip link set dev br0 down | |
125 | ip link del dev br0 | |
126 | } | |
127 | ||
128 | setup_prepare() | |
129 | { | |
130 | h1=${NETIFS[p1]} | |
131 | swp1=${NETIFS[p2]} | |
132 | ||
133 | swp2=${NETIFS[p3]} | |
134 | h2=${NETIFS[p4]} | |
135 | ||
136 | vrf_prepare | |
137 | forwarding_enable | |
138 | ||
139 | h1_create | |
140 | h2_create | |
141 | } | |
142 | ||
143 | cleanup() | |
144 | { | |
145 | pre_cleanup | |
146 | ||
147 | switch_destroy 2>/dev/null | |
148 | h2_destroy | |
149 | h1_destroy | |
150 | ||
151 | forwarding_restore | |
152 | vrf_cleanup | |
153 | } | |
154 | ||
155 | cfg_src_list() | |
156 | { | |
157 | local IPs=("$@") | |
158 | local IPstr=$(echo ${IPs[@]} | tr '[:space:]' , | sed 's/,$//') | |
159 | ||
160 | echo ${IPstr:+source_list }${IPstr} | |
161 | } | |
162 | ||
163 | cfg_group_op() | |
164 | { | |
165 | local op=$1; shift | |
166 | local locus=$1; shift | |
167 | local GRP=$1; shift | |
168 | local state=$1; shift | |
169 | local IPs=("$@") | |
170 | ||
171 | local source_list=$(cfg_src_list ${IPs[@]}) | |
172 | ||
173 | # Everything besides `bridge mdb' uses the "dev X vid Y" syntax, | |
174 | # so we use it here as well and convert. | |
175 | local br_locus=$(echo "$locus" | sed 's/^dev /port /') | |
176 | ||
177 | bridge mdb $op dev br0 $br_locus grp $GRP $state \ | |
178 | filter_mode include $source_list | |
179 | } | |
180 | ||
181 | cfg4_entries_op() | |
182 | { | |
183 | local op=$1; shift | |
184 | local locus=$1; shift | |
185 | local state=$1; shift | |
186 | local n=$1; shift | |
187 | local grp=${1:-1}; shift | |
188 | ||
189 | local GRP=239.1.1.${grp} | |
190 | local IPs=$(seq -f 192.0.2.%g 1 $((n - 1))) | |
191 | cfg_group_op "$op" "$locus" "$GRP" "$state" ${IPs[@]} | |
192 | } | |
193 | ||
194 | cfg4_entries_add() | |
195 | { | |
196 | cfg4_entries_op add "$@" | |
197 | } | |
198 | ||
199 | cfg4_entries_del() | |
200 | { | |
201 | cfg4_entries_op del "$@" | |
202 | } | |
203 | ||
204 | cfg6_entries_op() | |
205 | { | |
206 | local op=$1; shift | |
207 | local locus=$1; shift | |
208 | local state=$1; shift | |
209 | local n=$1; shift | |
210 | local grp=${1:-1}; shift | |
211 | ||
212 | local GRP=ff0e::${grp} | |
213 | local IPs=$(printf "2001:db8:1::%x\n" $(seq 1 $((n - 1)))) | |
214 | cfg_group_op "$op" "$locus" "$GRP" "$state" ${IPs[@]} | |
215 | } | |
216 | ||
217 | cfg6_entries_add() | |
218 | { | |
219 | cfg6_entries_op add "$@" | |
220 | } | |
221 | ||
222 | cfg6_entries_del() | |
223 | { | |
224 | cfg6_entries_op del "$@" | |
225 | } | |
226 | ||
227 | locus_dev_peer() | |
228 | { | |
229 | local dev_kw=$1; shift | |
230 | local dev=$1; shift | |
231 | local vid_kw=$1; shift | |
232 | local vid=$1; shift | |
233 | ||
234 | echo "$h1.${vid:-10}" | |
235 | } | |
236 | ||
237 | locus_dev() | |
238 | { | |
239 | local dev_kw=$1; shift | |
240 | local dev=$1; shift | |
241 | ||
242 | echo $dev | |
243 | } | |
244 | ||
245 | ctl4_entries_add() | |
246 | { | |
247 | local locus=$1; shift | |
248 | local state=$1; shift | |
249 | local n=$1; shift | |
250 | local grp=${1:-1}; shift | |
251 | ||
252 | local IPs=$(seq -f 192.0.2.%g 1 $((n - 1))) | |
253 | local peer=$(locus_dev_peer $locus) | |
254 | local GRP=239.1.1.${grp} | |
cb034948 IS |
255 | local dmac=01:00:5e:01:01:$(printf "%02x" $grp) |
256 | $MZ $peer -a own -b $dmac -c 1 -A 192.0.2.1 -B $GRP \ | |
3446dcd7 PM |
257 | -t ip proto=2,p=$(igmpv3_is_in_get $GRP $IPs) -q |
258 | sleep 1 | |
259 | ||
260 | local nn=$(bridge mdb show dev br0 | grep $GRP | wc -l) | |
261 | if ((nn != n)); then | |
262 | echo mcast_max_groups > /dev/stderr | |
263 | false | |
264 | fi | |
265 | } | |
266 | ||
267 | ctl4_entries_del() | |
268 | { | |
269 | local locus=$1; shift | |
270 | local state=$1; shift | |
271 | local n=$1; shift | |
272 | local grp=${1:-1}; shift | |
273 | ||
274 | local peer=$(locus_dev_peer $locus) | |
275 | local GRP=239.1.1.${grp} | |
cb034948 IS |
276 | local dmac=01:00:5e:00:00:02 |
277 | $MZ $peer -a own -b $dmac -c 1 -A 192.0.2.1 -B 224.0.0.2 \ | |
3446dcd7 PM |
278 | -t ip proto=2,p=$(igmpv2_leave_get $GRP) -q |
279 | sleep 1 | |
280 | ! bridge mdb show dev br0 | grep -q $GRP | |
281 | } | |
282 | ||
283 | ctl6_entries_add() | |
284 | { | |
285 | local locus=$1; shift | |
286 | local state=$1; shift | |
287 | local n=$1; shift | |
288 | local grp=${1:-1}; shift | |
289 | ||
290 | local IPs=$(printf "2001:db8:1::%x\n" $(seq 1 $((n - 1)))) | |
291 | local peer=$(locus_dev_peer $locus) | |
292 | local SIP=fe80::1 | |
293 | local GRP=ff0e::${grp} | |
cb034948 | 294 | local dmac=33:33:00:00:00:$(printf "%02x" $grp) |
3446dcd7 | 295 | local p=$(mldv2_is_in_get $SIP $GRP $IPs) |
cb034948 IS |
296 | $MZ -6 $peer -a own -b $dmac -c 1 -A $SIP -B $GRP \ |
297 | -t ip hop=1,next=0,p="$p" -q | |
3446dcd7 PM |
298 | sleep 1 |
299 | ||
300 | local nn=$(bridge mdb show dev br0 | grep $GRP | wc -l) | |
301 | if ((nn != n)); then | |
302 | echo mcast_max_groups > /dev/stderr | |
303 | false | |
304 | fi | |
305 | } | |
306 | ||
307 | ctl6_entries_del() | |
308 | { | |
309 | local locus=$1; shift | |
310 | local state=$1; shift | |
311 | local n=$1; shift | |
312 | local grp=${1:-1}; shift | |
313 | ||
314 | local peer=$(locus_dev_peer $locus) | |
315 | local SIP=fe80::1 | |
316 | local GRP=ff0e::${grp} | |
cb034948 | 317 | local dmac=33:33:00:00:00:$(printf "%02x" $grp) |
3446dcd7 | 318 | local p=$(mldv1_done_get $SIP $GRP) |
cb034948 IS |
319 | $MZ -6 $peer -a own -b $dmac -c 1 -A $SIP -B $GRP \ |
320 | -t ip hop=1,next=0,p="$p" -q | |
3446dcd7 PM |
321 | sleep 1 |
322 | ! bridge mdb show dev br0 | grep -q $GRP | |
323 | } | |
324 | ||
325 | bridge_maxgroups_errmsg_check_cfg() | |
326 | { | |
327 | local msg=$1; shift | |
328 | local needle=$1; shift | |
329 | ||
330 | echo "$msg" | grep -q mcast_max_groups | |
331 | check_err $? "Adding MDB entries failed for the wrong reason: $msg" | |
332 | } | |
333 | ||
334 | bridge_maxgroups_errmsg_check_cfg4() | |
335 | { | |
336 | bridge_maxgroups_errmsg_check_cfg "$@" | |
337 | } | |
338 | ||
339 | bridge_maxgroups_errmsg_check_cfg6() | |
340 | { | |
341 | bridge_maxgroups_errmsg_check_cfg "$@" | |
342 | } | |
343 | ||
344 | bridge_maxgroups_errmsg_check_ctl4() | |
345 | { | |
346 | : | |
347 | } | |
348 | ||
349 | bridge_maxgroups_errmsg_check_ctl6() | |
350 | { | |
351 | : | |
352 | } | |
353 | ||
354 | bridge_port_ngroups_get() | |
355 | { | |
356 | local locus=$1; shift | |
357 | ||
358 | bridge -j -d link show $locus | | |
359 | jq '.[].mcast_n_groups' | |
360 | } | |
361 | ||
362 | bridge_port_maxgroups_get() | |
363 | { | |
364 | local locus=$1; shift | |
365 | ||
366 | bridge -j -d link show $locus | | |
367 | jq '.[].mcast_max_groups' | |
368 | } | |
369 | ||
370 | bridge_port_maxgroups_set() | |
371 | { | |
372 | local locus=$1; shift | |
373 | local max=$1; shift | |
374 | ||
375 | bridge link set dev $(locus_dev $locus) mcast_max_groups $max | |
376 | } | |
377 | ||
378 | bridge_port_vlan_ngroups_get() | |
379 | { | |
380 | local locus=$1; shift | |
381 | ||
382 | bridge -j -d vlan show $locus | | |
383 | jq '.[].vlans[].mcast_n_groups' | |
384 | } | |
385 | ||
386 | bridge_port_vlan_maxgroups_get() | |
387 | { | |
388 | local locus=$1; shift | |
389 | ||
390 | bridge -j -d vlan show $locus | | |
391 | jq '.[].vlans[].mcast_max_groups' | |
392 | } | |
393 | ||
394 | bridge_port_vlan_maxgroups_set() | |
395 | { | |
396 | local locus=$1; shift | |
397 | local max=$1; shift | |
398 | ||
399 | bridge vlan set $locus mcast_max_groups $max | |
400 | } | |
401 | ||
402 | test_ngroups_reporting() | |
403 | { | |
404 | local CFG=$1; shift | |
405 | local context=$1; shift | |
406 | local locus=$1; shift | |
407 | ||
408 | RET=0 | |
409 | ||
410 | local n0=$(bridge_${context}_ngroups_get "$locus") | |
411 | ${CFG}_entries_add "$locus" temp 5 | |
412 | check_err $? "Couldn't add MDB entries" | |
413 | local n1=$(bridge_${context}_ngroups_get "$locus") | |
414 | ||
415 | ((n1 == n0 + 5)) | |
416 | check_err $? "Number of groups was $n0, now is $n1, but $((n0 + 5)) expected" | |
417 | ||
418 | ${CFG}_entries_del "$locus" temp 5 | |
419 | check_err $? "Couldn't delete MDB entries" | |
420 | local n2=$(bridge_${context}_ngroups_get "$locus") | |
421 | ||
422 | ((n2 == n0)) | |
423 | check_err $? "Number of groups was $n0, now is $n2, but should be back to $n0" | |
424 | ||
425 | log_test "$CFG: $context: ngroups reporting" | |
426 | } | |
427 | ||
428 | test_8021d_ngroups_reporting_cfg4() | |
429 | { | |
430 | test_ngroups_reporting cfg4 port "dev $swp1" | |
431 | } | |
432 | ||
433 | test_8021d_ngroups_reporting_ctl4() | |
434 | { | |
435 | test_ngroups_reporting ctl4 port "dev $swp1" | |
436 | } | |
437 | ||
438 | test_8021d_ngroups_reporting_cfg6() | |
439 | { | |
440 | test_ngroups_reporting cfg6 port "dev $swp1" | |
441 | } | |
442 | ||
443 | test_8021d_ngroups_reporting_ctl6() | |
444 | { | |
445 | test_ngroups_reporting ctl6 port "dev $swp1" | |
446 | } | |
447 | ||
448 | test_8021q_ngroups_reporting_cfg4() | |
449 | { | |
450 | test_ngroups_reporting cfg4 port "dev $swp1 vid 10" | |
451 | } | |
452 | ||
453 | test_8021q_ngroups_reporting_ctl4() | |
454 | { | |
455 | test_ngroups_reporting ctl4 port "dev $swp1 vid 10" | |
456 | } | |
457 | ||
458 | test_8021q_ngroups_reporting_cfg6() | |
459 | { | |
460 | test_ngroups_reporting cfg6 port "dev $swp1 vid 10" | |
461 | } | |
462 | ||
463 | test_8021q_ngroups_reporting_ctl6() | |
464 | { | |
465 | test_ngroups_reporting ctl6 port "dev $swp1 vid 10" | |
466 | } | |
467 | ||
468 | test_8021qvs_ngroups_reporting_cfg4() | |
469 | { | |
470 | test_ngroups_reporting cfg4 port_vlan "dev $swp1 vid 10" | |
471 | } | |
472 | ||
473 | test_8021qvs_ngroups_reporting_ctl4() | |
474 | { | |
475 | test_ngroups_reporting ctl4 port_vlan "dev $swp1 vid 10" | |
476 | } | |
477 | ||
478 | test_8021qvs_ngroups_reporting_cfg6() | |
479 | { | |
480 | test_ngroups_reporting cfg6 port_vlan "dev $swp1 vid 10" | |
481 | } | |
482 | ||
483 | test_8021qvs_ngroups_reporting_ctl6() | |
484 | { | |
485 | test_ngroups_reporting ctl6 port_vlan "dev $swp1 vid 10" | |
486 | } | |
487 | ||
488 | test_ngroups_cross_vlan() | |
489 | { | |
490 | local CFG=$1; shift | |
491 | ||
492 | local locus1="dev $swp1 vid 10" | |
493 | local locus2="dev $swp1 vid 20" | |
494 | ||
495 | RET=0 | |
496 | ||
497 | local n10=$(bridge_port_vlan_ngroups_get "$locus1") | |
498 | local n20=$(bridge_port_vlan_ngroups_get "$locus2") | |
499 | ${CFG}_entries_add "$locus1" temp 5 111 | |
500 | check_err $? "Couldn't add MDB entries to VLAN 10" | |
501 | local n11=$(bridge_port_vlan_ngroups_get "$locus1") | |
502 | local n21=$(bridge_port_vlan_ngroups_get "$locus2") | |
503 | ||
504 | ((n11 == n10 + 5)) | |
505 | check_err $? "Number of groups at VLAN 10 was $n10, now is $n11, but 5 entries added on VLAN 10, $((n10 + 5)) expected" | |
506 | ||
507 | ((n21 == n20)) | |
508 | check_err $? "Number of groups at VLAN 20 was $n20, now is $n21, but no change expected on VLAN 20" | |
509 | ||
510 | ${CFG}_entries_add "$locus2" temp 5 112 | |
511 | check_err $? "Couldn't add MDB entries to VLAN 20" | |
512 | local n12=$(bridge_port_vlan_ngroups_get "$locus1") | |
513 | local n22=$(bridge_port_vlan_ngroups_get "$locus2") | |
514 | ||
515 | ((n12 == n11)) | |
516 | check_err $? "Number of groups at VLAN 10 was $n11, now is $n12, but no change expected on VLAN 10" | |
517 | ||
518 | ((n22 == n21 + 5)) | |
519 | check_err $? "Number of groups at VLAN 20 was $n21, now is $n22, but 5 entries added on VLAN 20, $((n21 + 5)) expected" | |
520 | ||
521 | ${CFG}_entries_del "$locus1" temp 5 111 | |
522 | check_err $? "Couldn't delete MDB entries from VLAN 10" | |
523 | ${CFG}_entries_del "$locus2" temp 5 112 | |
524 | check_err $? "Couldn't delete MDB entries from VLAN 20" | |
525 | local n13=$(bridge_port_vlan_ngroups_get "$locus1") | |
526 | local n23=$(bridge_port_vlan_ngroups_get "$locus2") | |
527 | ||
528 | ((n13 == n10)) | |
529 | check_err $? "Number of groups at VLAN 10 was $n10, now is $n13, but should be back to $n10" | |
530 | ||
531 | ((n23 == n20)) | |
532 | check_err $? "Number of groups at VLAN 20 was $n20, now is $n23, but should be back to $n20" | |
533 | ||
534 | log_test "$CFG: port_vlan: isolation of port and per-VLAN ngroups" | |
535 | } | |
536 | ||
537 | test_8021qvs_ngroups_cross_vlan_cfg4() | |
538 | { | |
539 | test_ngroups_cross_vlan cfg4 | |
540 | } | |
541 | ||
542 | test_8021qvs_ngroups_cross_vlan_ctl4() | |
543 | { | |
544 | test_ngroups_cross_vlan ctl4 | |
545 | } | |
546 | ||
547 | test_8021qvs_ngroups_cross_vlan_cfg6() | |
548 | { | |
549 | test_ngroups_cross_vlan cfg6 | |
550 | } | |
551 | ||
552 | test_8021qvs_ngroups_cross_vlan_ctl6() | |
553 | { | |
554 | test_ngroups_cross_vlan ctl6 | |
555 | } | |
556 | ||
557 | test_maxgroups_zero() | |
558 | { | |
559 | local CFG=$1; shift | |
560 | local context=$1; shift | |
561 | local locus=$1; shift | |
562 | ||
563 | RET=0 | |
564 | local max | |
565 | ||
566 | max=$(bridge_${context}_maxgroups_get "$locus") | |
567 | ((max == 0)) | |
568 | check_err $? "Max groups on $locus should be 0, but $max reported" | |
569 | ||
570 | bridge_${context}_maxgroups_set "$locus" 100 | |
571 | check_err $? "Failed to set max to 100" | |
572 | max=$(bridge_${context}_maxgroups_get "$locus") | |
573 | ((max == 100)) | |
574 | check_err $? "Max groups expected to be 100, but $max reported" | |
575 | ||
576 | bridge_${context}_maxgroups_set "$locus" 0 | |
577 | check_err $? "Couldn't set maximum to 0" | |
578 | ||
579 | # Test that setting 0 explicitly still serves as infinity. | |
580 | ${CFG}_entries_add "$locus" temp 5 | |
581 | check_err $? "Adding 5 MDB entries failed but should have passed" | |
582 | ${CFG}_entries_del "$locus" temp 5 | |
583 | check_err $? "Couldn't delete MDB entries" | |
584 | ||
585 | log_test "$CFG: $context maxgroups: reporting and treatment of 0" | |
586 | } | |
587 | ||
588 | test_8021d_maxgroups_zero_cfg4() | |
589 | { | |
590 | test_maxgroups_zero cfg4 port "dev $swp1" | |
591 | } | |
592 | ||
593 | test_8021d_maxgroups_zero_ctl4() | |
594 | { | |
595 | test_maxgroups_zero ctl4 port "dev $swp1" | |
596 | } | |
597 | ||
598 | test_8021d_maxgroups_zero_cfg6() | |
599 | { | |
600 | test_maxgroups_zero cfg6 port "dev $swp1" | |
601 | } | |
602 | ||
603 | test_8021d_maxgroups_zero_ctl6() | |
604 | { | |
605 | test_maxgroups_zero ctl6 port "dev $swp1" | |
606 | } | |
607 | ||
608 | test_8021q_maxgroups_zero_cfg4() | |
609 | { | |
610 | test_maxgroups_zero cfg4 port "dev $swp1 vid 10" | |
611 | } | |
612 | ||
613 | test_8021q_maxgroups_zero_ctl4() | |
614 | { | |
615 | test_maxgroups_zero ctl4 port "dev $swp1 vid 10" | |
616 | } | |
617 | ||
618 | test_8021q_maxgroups_zero_cfg6() | |
619 | { | |
620 | test_maxgroups_zero cfg6 port "dev $swp1 vid 10" | |
621 | } | |
622 | ||
623 | test_8021q_maxgroups_zero_ctl6() | |
624 | { | |
625 | test_maxgroups_zero ctl6 port "dev $swp1 vid 10" | |
626 | } | |
627 | ||
628 | test_8021qvs_maxgroups_zero_cfg4() | |
629 | { | |
630 | test_maxgroups_zero cfg4 port_vlan "dev $swp1 vid 10" | |
631 | } | |
632 | ||
633 | test_8021qvs_maxgroups_zero_ctl4() | |
634 | { | |
635 | test_maxgroups_zero ctl4 port_vlan "dev $swp1 vid 10" | |
636 | } | |
637 | ||
638 | test_8021qvs_maxgroups_zero_cfg6() | |
639 | { | |
640 | test_maxgroups_zero cfg6 port_vlan "dev $swp1 vid 10" | |
641 | } | |
642 | ||
643 | test_8021qvs_maxgroups_zero_ctl6() | |
644 | { | |
645 | test_maxgroups_zero ctl6 port_vlan "dev $swp1 vid 10" | |
646 | } | |
647 | ||
648 | test_maxgroups_zero_cross_vlan() | |
649 | { | |
650 | local CFG=$1; shift | |
651 | ||
652 | local locus0="dev $swp1" | |
653 | local locus1="dev $swp1 vid 10" | |
654 | local locus2="dev $swp1 vid 20" | |
655 | local max | |
656 | ||
657 | RET=0 | |
658 | ||
659 | bridge_port_vlan_maxgroups_set "$locus1" 100 | |
660 | check_err $? "$locus1: Failed to set max to 100" | |
661 | ||
662 | max=$(bridge_port_maxgroups_get "$locus0") | |
663 | ((max == 0)) | |
664 | check_err $? "$locus0: Max groups expected to be 0, but $max reported" | |
665 | ||
666 | max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
667 | ((max == 0)) | |
668 | check_err $? "$locus2: Max groups expected to be 0, but $max reported" | |
669 | ||
670 | bridge_port_vlan_maxgroups_set "$locus2" 100 | |
671 | check_err $? "$locus2: Failed to set max to 100" | |
672 | ||
673 | max=$(bridge_port_maxgroups_get "$locus0") | |
674 | ((max == 0)) | |
675 | check_err $? "$locus0: Max groups expected to be 0, but $max reported" | |
676 | ||
677 | max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
678 | ((max == 100)) | |
679 | check_err $? "$locus2: Max groups expected to be 100, but $max reported" | |
680 | ||
681 | bridge_port_maxgroups_set "$locus0" 100 | |
682 | check_err $? "$locus0: Failed to set max to 100" | |
683 | ||
684 | max=$(bridge_port_maxgroups_get "$locus0") | |
685 | ((max == 100)) | |
686 | check_err $? "$locus0: Max groups expected to be 100, but $max reported" | |
687 | ||
688 | max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
689 | ((max == 100)) | |
690 | check_err $? "$locus2: Max groups expected to be 100, but $max reported" | |
691 | ||
692 | bridge_port_vlan_maxgroups_set "$locus1" 0 | |
693 | check_err $? "$locus1: Failed to set max to 0" | |
694 | ||
695 | max=$(bridge_port_maxgroups_get "$locus0") | |
696 | ((max == 100)) | |
697 | check_err $? "$locus0: Max groups expected to be 100, but $max reported" | |
698 | ||
699 | max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
700 | ((max == 100)) | |
701 | check_err $? "$locus2: Max groups expected to be 100, but $max reported" | |
702 | ||
703 | bridge_port_vlan_maxgroups_set "$locus2" 0 | |
704 | check_err $? "$locus2: Failed to set max to 0" | |
705 | ||
706 | max=$(bridge_port_maxgroups_get "$locus0") | |
707 | ((max == 100)) | |
708 | check_err $? "$locus0: Max groups expected to be 100, but $max reported" | |
709 | ||
710 | max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
711 | ((max == 0)) | |
712 | check_err $? "$locus2: Max groups expected to be 0 but $max reported" | |
713 | ||
714 | bridge_port_maxgroups_set "$locus0" 0 | |
715 | check_err $? "$locus0: Failed to set max to 0" | |
716 | ||
717 | max=$(bridge_port_maxgroups_get "$locus0") | |
718 | ((max == 0)) | |
719 | check_err $? "$locus0: Max groups expected to be 0, but $max reported" | |
720 | ||
721 | max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
722 | ((max == 0)) | |
723 | check_err $? "$locus2: Max groups expected to be 0, but $max reported" | |
724 | ||
725 | log_test "$CFG: port_vlan maxgroups: isolation of port and per-VLAN maximums" | |
726 | } | |
727 | ||
728 | test_8021qvs_maxgroups_zero_cross_vlan_cfg4() | |
729 | { | |
730 | test_maxgroups_zero_cross_vlan cfg4 | |
731 | } | |
732 | ||
733 | test_8021qvs_maxgroups_zero_cross_vlan_ctl4() | |
734 | { | |
735 | test_maxgroups_zero_cross_vlan ctl4 | |
736 | } | |
737 | ||
738 | test_8021qvs_maxgroups_zero_cross_vlan_cfg6() | |
739 | { | |
740 | test_maxgroups_zero_cross_vlan cfg6 | |
741 | } | |
742 | ||
743 | test_8021qvs_maxgroups_zero_cross_vlan_ctl6() | |
744 | { | |
745 | test_maxgroups_zero_cross_vlan ctl6 | |
746 | } | |
747 | ||
748 | test_maxgroups_too_low() | |
749 | { | |
750 | local CFG=$1; shift | |
751 | local context=$1; shift | |
752 | local locus=$1; shift | |
753 | ||
754 | RET=0 | |
755 | ||
756 | local n=$(bridge_${context}_ngroups_get "$locus") | |
757 | local msg | |
758 | ||
759 | ${CFG}_entries_add "$locus" temp 5 111 | |
760 | check_err $? "$locus: Couldn't add MDB entries" | |
761 | ||
762 | bridge_${context}_maxgroups_set "$locus" $((n+2)) | |
763 | check_err $? "$locus: Setting maxgroups to $((n+2)) failed" | |
764 | ||
765 | msg=$(${CFG}_entries_add "$locus" temp 2 112 2>&1) | |
766 | check_fail $? "$locus: Adding more entries passed when max<n" | |
767 | bridge_maxgroups_errmsg_check_cfg "$msg" | |
768 | ||
769 | ${CFG}_entries_del "$locus" temp 5 111 | |
770 | check_err $? "$locus: Couldn't delete MDB entries" | |
771 | ||
772 | ${CFG}_entries_add "$locus" temp 2 112 | |
773 | check_err $? "$locus: Adding more entries failed" | |
774 | ||
775 | ${CFG}_entries_del "$locus" temp 2 112 | |
776 | check_err $? "$locus: Deleting more entries failed" | |
777 | ||
778 | bridge_${context}_maxgroups_set "$locus" 0 | |
779 | check_err $? "$locus: Couldn't set maximum to 0" | |
780 | ||
781 | log_test "$CFG: $context maxgroups: configure below ngroups" | |
782 | } | |
783 | ||
784 | test_8021d_maxgroups_too_low_cfg4() | |
785 | { | |
786 | test_maxgroups_too_low cfg4 port "dev $swp1" | |
787 | } | |
788 | ||
789 | test_8021d_maxgroups_too_low_ctl4() | |
790 | { | |
791 | test_maxgroups_too_low ctl4 port "dev $swp1" | |
792 | } | |
793 | ||
794 | test_8021d_maxgroups_too_low_cfg6() | |
795 | { | |
796 | test_maxgroups_too_low cfg6 port "dev $swp1" | |
797 | } | |
798 | ||
799 | test_8021d_maxgroups_too_low_ctl6() | |
800 | { | |
801 | test_maxgroups_too_low ctl6 port "dev $swp1" | |
802 | } | |
803 | ||
804 | test_8021q_maxgroups_too_low_cfg4() | |
805 | { | |
806 | test_maxgroups_too_low cfg4 port "dev $swp1 vid 10" | |
807 | } | |
808 | ||
809 | test_8021q_maxgroups_too_low_ctl4() | |
810 | { | |
811 | test_maxgroups_too_low ctl4 port "dev $swp1 vid 10" | |
812 | } | |
813 | ||
814 | test_8021q_maxgroups_too_low_cfg6() | |
815 | { | |
816 | test_maxgroups_too_low cfg6 port "dev $swp1 vid 10" | |
817 | } | |
818 | ||
819 | test_8021q_maxgroups_too_low_ctl6() | |
820 | { | |
821 | test_maxgroups_too_low ctl6 port "dev $swp1 vid 10" | |
822 | } | |
823 | ||
824 | test_8021qvs_maxgroups_too_low_cfg4() | |
825 | { | |
826 | test_maxgroups_too_low cfg4 port_vlan "dev $swp1 vid 10" | |
827 | } | |
828 | ||
829 | test_8021qvs_maxgroups_too_low_ctl4() | |
830 | { | |
831 | test_maxgroups_too_low ctl4 port_vlan "dev $swp1 vid 10" | |
832 | } | |
833 | ||
834 | test_8021qvs_maxgroups_too_low_cfg6() | |
835 | { | |
836 | test_maxgroups_too_low cfg6 port_vlan "dev $swp1 vid 10" | |
837 | } | |
838 | ||
839 | test_8021qvs_maxgroups_too_low_ctl6() | |
840 | { | |
841 | test_maxgroups_too_low ctl6 port_vlan "dev $swp1 vid 10" | |
842 | } | |
843 | ||
844 | test_maxgroups_too_many_entries() | |
845 | { | |
846 | local CFG=$1; shift | |
847 | local context=$1; shift | |
848 | local locus=$1; shift | |
849 | ||
850 | RET=0 | |
851 | ||
852 | local n=$(bridge_${context}_ngroups_get "$locus") | |
853 | local msg | |
854 | ||
855 | # Configure a low maximum | |
856 | bridge_${context}_maxgroups_set "$locus" $((n+1)) | |
857 | check_err $? "$locus: Couldn't set maximum" | |
858 | ||
859 | # Try to add more entries than the configured maximum | |
860 | msg=$(${CFG}_entries_add "$locus" temp 5 2>&1) | |
861 | check_fail $? "Adding 5 MDB entries passed, but should have failed" | |
862 | bridge_maxgroups_errmsg_check_${CFG} "$msg" | |
863 | ||
864 | # When adding entries through the control path, as many as possible | |
865 | # get created. That's consistent with the mcast_hash_max behavior. | |
866 | # So there, drop the entries explicitly. | |
867 | if [[ ${CFG%[46]} == ctl ]]; then | |
868 | ${CFG}_entries_del "$locus" temp 17 2>&1 | |
869 | fi | |
870 | ||
871 | local n2=$(bridge_${context}_ngroups_get "$locus") | |
872 | ((n2 == n)) | |
873 | check_err $? "Number of groups was $n, but after a failed attempt to add MDB entries it changed to $n2" | |
874 | ||
875 | bridge_${context}_maxgroups_set "$locus" 0 | |
876 | check_err $? "$locus: Couldn't set maximum to 0" | |
877 | ||
878 | log_test "$CFG: $context maxgroups: add too many MDB entries" | |
879 | } | |
880 | ||
881 | test_8021d_maxgroups_too_many_entries_cfg4() | |
882 | { | |
883 | test_maxgroups_too_many_entries cfg4 port "dev $swp1" | |
884 | } | |
885 | ||
886 | test_8021d_maxgroups_too_many_entries_ctl4() | |
887 | { | |
888 | test_maxgroups_too_many_entries ctl4 port "dev $swp1" | |
889 | } | |
890 | ||
891 | test_8021d_maxgroups_too_many_entries_cfg6() | |
892 | { | |
893 | test_maxgroups_too_many_entries cfg6 port "dev $swp1" | |
894 | } | |
895 | ||
896 | test_8021d_maxgroups_too_many_entries_ctl6() | |
897 | { | |
898 | test_maxgroups_too_many_entries ctl6 port "dev $swp1" | |
899 | } | |
900 | ||
901 | test_8021q_maxgroups_too_many_entries_cfg4() | |
902 | { | |
903 | test_maxgroups_too_many_entries cfg4 port "dev $swp1 vid 10" | |
904 | } | |
905 | ||
906 | test_8021q_maxgroups_too_many_entries_ctl4() | |
907 | { | |
908 | test_maxgroups_too_many_entries ctl4 port "dev $swp1 vid 10" | |
909 | } | |
910 | ||
911 | test_8021q_maxgroups_too_many_entries_cfg6() | |
912 | { | |
913 | test_maxgroups_too_many_entries cfg6 port "dev $swp1 vid 10" | |
914 | } | |
915 | ||
916 | test_8021q_maxgroups_too_many_entries_ctl6() | |
917 | { | |
918 | test_maxgroups_too_many_entries ctl6 port "dev $swp1 vid 10" | |
919 | } | |
920 | ||
921 | test_8021qvs_maxgroups_too_many_entries_cfg4() | |
922 | { | |
923 | test_maxgroups_too_many_entries cfg4 port_vlan "dev $swp1 vid 10" | |
924 | } | |
925 | ||
926 | test_8021qvs_maxgroups_too_many_entries_ctl4() | |
927 | { | |
928 | test_maxgroups_too_many_entries ctl4 port_vlan "dev $swp1 vid 10" | |
929 | } | |
930 | ||
931 | test_8021qvs_maxgroups_too_many_entries_cfg6() | |
932 | { | |
933 | test_maxgroups_too_many_entries cfg6 port_vlan "dev $swp1 vid 10" | |
934 | } | |
935 | ||
936 | test_8021qvs_maxgroups_too_many_entries_ctl6() | |
937 | { | |
938 | test_maxgroups_too_many_entries ctl6 port_vlan "dev $swp1 vid 10" | |
939 | } | |
940 | ||
941 | test_maxgroups_too_many_cross_vlan() | |
942 | { | |
943 | local CFG=$1; shift | |
944 | ||
945 | RET=0 | |
946 | ||
947 | local locus0="dev $swp1" | |
948 | local locus1="dev $swp1 vid 10" | |
949 | local locus2="dev $swp1 vid 20" | |
950 | local n1=$(bridge_port_vlan_ngroups_get "$locus1") | |
951 | local n2=$(bridge_port_vlan_ngroups_get "$locus2") | |
952 | local msg | |
953 | ||
954 | if ((n1 > n2)); then | |
955 | local tmp=$n1 | |
956 | n1=$n2 | |
957 | n2=$tmp | |
958 | ||
959 | tmp="$locus1" | |
960 | locus1="$locus2" | |
961 | locus2="$tmp" | |
962 | fi | |
963 | ||
964 | # Now 0 <= n1 <= n2. | |
965 | ${CFG}_entries_add "$locus2" temp 5 112 | |
966 | check_err $? "Couldn't add 5 entries" | |
967 | ||
968 | n2=$(bridge_port_vlan_ngroups_get "$locus2") | |
969 | # Now 0 <= n1 < n2-1. | |
970 | ||
971 | # Setting locus1'maxgroups to n2-1 should pass. The number is | |
972 | # smaller than both the absolute number of MDB entries, and in | |
973 | # particular than number of locus2's number of entries, but it is | |
974 | # large enough to cover locus1's entries. Thus we check that | |
975 | # individual VLAN's ngroups are independent. | |
976 | bridge_port_vlan_maxgroups_set "$locus1" $((n2-1)) | |
977 | check_err $? "Setting ${locus1}'s maxgroups to $((n2-1)) failed" | |
978 | ||
979 | msg=$(${CFG}_entries_add "$locus1" temp $n2 111 2>&1) | |
980 | check_fail $? "$locus1: Adding $n2 MDB entries passed, but should have failed" | |
981 | bridge_maxgroups_errmsg_check_${CFG} "$msg" | |
982 | ||
983 | bridge_port_maxgroups_set "$locus0" $((n1 + n2 + 2)) | |
984 | check_err $? "$locus0: Couldn't set maximum" | |
985 | ||
986 | msg=$(${CFG}_entries_add "$locus1" temp 5 111 2>&1) | |
987 | check_fail $? "$locus1: Adding 5 MDB entries passed, but should have failed" | |
988 | bridge_maxgroups_errmsg_check_${CFG} "$msg" | |
989 | ||
990 | # IGMP/MLD packets can cause several entries to be added, before | |
991 | # the maximum is hit and the rest is then bounced. Remove what was | |
992 | # committed, if anything. | |
993 | ${CFG}_entries_del "$locus1" temp 5 111 2>/dev/null | |
994 | ||
995 | ${CFG}_entries_add "$locus1" temp 2 111 | |
996 | check_err $? "$locus1: Adding 2 MDB entries failed, but should have passed" | |
997 | ||
998 | ${CFG}_entries_del "$locus1" temp 2 111 | |
999 | check_err $? "Couldn't delete MDB entries" | |
1000 | ||
1001 | ${CFG}_entries_del "$locus2" temp 5 112 | |
1002 | check_err $? "Couldn't delete MDB entries" | |
1003 | ||
1004 | bridge_port_vlan_maxgroups_set "$locus1" 0 | |
1005 | check_err $? "$locus1: Couldn't set maximum to 0" | |
1006 | ||
1007 | bridge_port_maxgroups_set "$locus0" 0 | |
1008 | check_err $? "$locus0: Couldn't set maximum to 0" | |
1009 | ||
1010 | log_test "$CFG: port_vlan maxgroups: isolation of port and per-VLAN ngroups" | |
1011 | } | |
1012 | ||
1013 | test_8021qvs_maxgroups_too_many_cross_vlan_cfg4() | |
1014 | { | |
1015 | test_maxgroups_too_many_cross_vlan cfg4 | |
1016 | } | |
1017 | ||
1018 | test_8021qvs_maxgroups_too_many_cross_vlan_ctl4() | |
1019 | { | |
1020 | test_maxgroups_too_many_cross_vlan ctl4 | |
1021 | } | |
1022 | ||
1023 | test_8021qvs_maxgroups_too_many_cross_vlan_cfg6() | |
1024 | { | |
1025 | test_maxgroups_too_many_cross_vlan cfg6 | |
1026 | } | |
1027 | ||
1028 | test_8021qvs_maxgroups_too_many_cross_vlan_ctl6() | |
1029 | { | |
1030 | test_maxgroups_too_many_cross_vlan ctl6 | |
1031 | } | |
1032 | ||
1033 | test_vlan_attributes() | |
1034 | { | |
1035 | local locus=$1; shift | |
1036 | local expect=$1; shift | |
1037 | ||
1038 | RET=0 | |
1039 | ||
1040 | local max=$(bridge_port_vlan_maxgroups_get "$locus") | |
1041 | local n=$(bridge_port_vlan_ngroups_get "$locus") | |
1042 | ||
1043 | eval "[[ $max $expect ]]" | |
1044 | check_err $? "$locus: maxgroups attribute expected to be $expect, but was $max" | |
1045 | ||
1046 | eval "[[ $n $expect ]]" | |
1047 | check_err $? "$locus: ngroups attribute expected to be $expect, but was $n" | |
1048 | ||
1049 | log_test "port_vlan: presence of ngroups and maxgroups attributes" | |
1050 | } | |
1051 | ||
1052 | test_8021q_vlan_attributes() | |
1053 | { | |
1054 | test_vlan_attributes "dev $swp1 vid 10" "== null" | |
1055 | } | |
1056 | ||
1057 | test_8021qvs_vlan_attributes() | |
1058 | { | |
1059 | test_vlan_attributes "dev $swp1 vid 10" "-ge 0" | |
1060 | } | |
1061 | ||
1062 | test_toggle_vlan_snooping() | |
1063 | { | |
1064 | local mode=$1; shift | |
1065 | ||
1066 | RET=0 | |
1067 | ||
1068 | local CFG=cfg4 | |
1069 | local context=port_vlan | |
1070 | local locus="dev $swp1 vid 10" | |
1071 | ||
1072 | ${CFG}_entries_add "$locus" $mode 5 | |
1073 | check_err $? "Couldn't add MDB entries" | |
1074 | ||
1075 | bridge_${context}_maxgroups_set "$locus" 100 | |
1076 | check_err $? "Failed to set max to 100" | |
1077 | ||
1078 | ip link set dev br0 type bridge mcast_vlan_snooping 0 | |
1079 | sleep 1 | |
1080 | ip link set dev br0 type bridge mcast_vlan_snooping 1 | |
1081 | ||
1082 | local n=$(bridge_${context}_ngroups_get "$locus") | |
1083 | local nn=$(bridge mdb show dev br0 | grep $swp1 | wc -l) | |
1084 | ((nn == n)) | |
1085 | check_err $? "mcast_n_groups expected to be $nn, but $n reported" | |
1086 | ||
1087 | local max=$(bridge_${context}_maxgroups_get "$locus") | |
1088 | ((max == 100)) | |
1089 | check_err $? "Max groups expected to be 100 but $max reported" | |
1090 | ||
1091 | bridge_${context}_maxgroups_set "$locus" 0 | |
1092 | check_err $? "Failed to set max to 0" | |
1093 | ||
1094 | log_test "$CFG: $context: $mode: mcast_vlan_snooping toggle" | |
1095 | } | |
1096 | ||
1097 | test_toggle_vlan_snooping_temp() | |
1098 | { | |
1099 | test_toggle_vlan_snooping temp | |
1100 | } | |
1101 | ||
1102 | test_toggle_vlan_snooping_permanent() | |
1103 | { | |
1104 | test_toggle_vlan_snooping permanent | |
1105 | } | |
1106 | ||
1107 | # ngroup test suites | |
1108 | ||
1109 | test_8021d_ngroups_cfg4() | |
1110 | { | |
1111 | test_8021d_ngroups_reporting_cfg4 | |
1112 | } | |
1113 | ||
1114 | test_8021d_ngroups_ctl4() | |
1115 | { | |
1116 | test_8021d_ngroups_reporting_ctl4 | |
1117 | } | |
1118 | ||
1119 | test_8021d_ngroups_cfg6() | |
1120 | { | |
1121 | test_8021d_ngroups_reporting_cfg6 | |
1122 | } | |
1123 | ||
1124 | test_8021d_ngroups_ctl6() | |
1125 | { | |
1126 | test_8021d_ngroups_reporting_ctl6 | |
1127 | } | |
1128 | ||
1129 | test_8021q_ngroups_cfg4() | |
1130 | { | |
1131 | test_8021q_ngroups_reporting_cfg4 | |
1132 | } | |
1133 | ||
1134 | test_8021q_ngroups_ctl4() | |
1135 | { | |
1136 | test_8021q_ngroups_reporting_ctl4 | |
1137 | } | |
1138 | ||
1139 | test_8021q_ngroups_cfg6() | |
1140 | { | |
1141 | test_8021q_ngroups_reporting_cfg6 | |
1142 | } | |
1143 | ||
1144 | test_8021q_ngroups_ctl6() | |
1145 | { | |
1146 | test_8021q_ngroups_reporting_ctl6 | |
1147 | } | |
1148 | ||
1149 | test_8021qvs_ngroups_cfg4() | |
1150 | { | |
1151 | test_8021qvs_ngroups_reporting_cfg4 | |
1152 | test_8021qvs_ngroups_cross_vlan_cfg4 | |
1153 | } | |
1154 | ||
1155 | test_8021qvs_ngroups_ctl4() | |
1156 | { | |
1157 | test_8021qvs_ngroups_reporting_ctl4 | |
1158 | test_8021qvs_ngroups_cross_vlan_ctl4 | |
1159 | } | |
1160 | ||
1161 | test_8021qvs_ngroups_cfg6() | |
1162 | { | |
1163 | test_8021qvs_ngroups_reporting_cfg6 | |
1164 | test_8021qvs_ngroups_cross_vlan_cfg6 | |
1165 | } | |
1166 | ||
1167 | test_8021qvs_ngroups_ctl6() | |
1168 | { | |
1169 | test_8021qvs_ngroups_reporting_ctl6 | |
1170 | test_8021qvs_ngroups_cross_vlan_ctl6 | |
1171 | } | |
1172 | ||
1173 | # maxgroups test suites | |
1174 | ||
1175 | test_8021d_maxgroups_cfg4() | |
1176 | { | |
1177 | test_8021d_maxgroups_zero_cfg4 | |
1178 | test_8021d_maxgroups_too_low_cfg4 | |
1179 | test_8021d_maxgroups_too_many_entries_cfg4 | |
1180 | } | |
1181 | ||
1182 | test_8021d_maxgroups_ctl4() | |
1183 | { | |
1184 | test_8021d_maxgroups_zero_ctl4 | |
1185 | test_8021d_maxgroups_too_low_ctl4 | |
1186 | test_8021d_maxgroups_too_many_entries_ctl4 | |
1187 | } | |
1188 | ||
1189 | test_8021d_maxgroups_cfg6() | |
1190 | { | |
1191 | test_8021d_maxgroups_zero_cfg6 | |
1192 | test_8021d_maxgroups_too_low_cfg6 | |
1193 | test_8021d_maxgroups_too_many_entries_cfg6 | |
1194 | } | |
1195 | ||
1196 | test_8021d_maxgroups_ctl6() | |
1197 | { | |
1198 | test_8021d_maxgroups_zero_ctl6 | |
1199 | test_8021d_maxgroups_too_low_ctl6 | |
1200 | test_8021d_maxgroups_too_many_entries_ctl6 | |
1201 | } | |
1202 | ||
1203 | test_8021q_maxgroups_cfg4() | |
1204 | { | |
1205 | test_8021q_maxgroups_zero_cfg4 | |
1206 | test_8021q_maxgroups_too_low_cfg4 | |
1207 | test_8021q_maxgroups_too_many_entries_cfg4 | |
1208 | } | |
1209 | ||
1210 | test_8021q_maxgroups_ctl4() | |
1211 | { | |
1212 | test_8021q_maxgroups_zero_ctl4 | |
1213 | test_8021q_maxgroups_too_low_ctl4 | |
1214 | test_8021q_maxgroups_too_many_entries_ctl4 | |
1215 | } | |
1216 | ||
1217 | test_8021q_maxgroups_cfg6() | |
1218 | { | |
1219 | test_8021q_maxgroups_zero_cfg6 | |
1220 | test_8021q_maxgroups_too_low_cfg6 | |
1221 | test_8021q_maxgroups_too_many_entries_cfg6 | |
1222 | } | |
1223 | ||
1224 | test_8021q_maxgroups_ctl6() | |
1225 | { | |
1226 | test_8021q_maxgroups_zero_ctl6 | |
1227 | test_8021q_maxgroups_too_low_ctl6 | |
1228 | test_8021q_maxgroups_too_many_entries_ctl6 | |
1229 | } | |
1230 | ||
1231 | test_8021qvs_maxgroups_cfg4() | |
1232 | { | |
1233 | test_8021qvs_maxgroups_zero_cfg4 | |
1234 | test_8021qvs_maxgroups_zero_cross_vlan_cfg4 | |
1235 | test_8021qvs_maxgroups_too_low_cfg4 | |
1236 | test_8021qvs_maxgroups_too_many_entries_cfg4 | |
1237 | test_8021qvs_maxgroups_too_many_cross_vlan_cfg4 | |
1238 | } | |
1239 | ||
1240 | test_8021qvs_maxgroups_ctl4() | |
1241 | { | |
1242 | test_8021qvs_maxgroups_zero_ctl4 | |
1243 | test_8021qvs_maxgroups_zero_cross_vlan_ctl4 | |
1244 | test_8021qvs_maxgroups_too_low_ctl4 | |
1245 | test_8021qvs_maxgroups_too_many_entries_ctl4 | |
1246 | test_8021qvs_maxgroups_too_many_cross_vlan_ctl4 | |
1247 | } | |
1248 | ||
1249 | test_8021qvs_maxgroups_cfg6() | |
1250 | { | |
1251 | test_8021qvs_maxgroups_zero_cfg6 | |
1252 | test_8021qvs_maxgroups_zero_cross_vlan_cfg6 | |
1253 | test_8021qvs_maxgroups_too_low_cfg6 | |
1254 | test_8021qvs_maxgroups_too_many_entries_cfg6 | |
1255 | test_8021qvs_maxgroups_too_many_cross_vlan_cfg6 | |
1256 | } | |
1257 | ||
1258 | test_8021qvs_maxgroups_ctl6() | |
1259 | { | |
1260 | test_8021qvs_maxgroups_zero_ctl6 | |
1261 | test_8021qvs_maxgroups_zero_cross_vlan_ctl6 | |
1262 | test_8021qvs_maxgroups_too_low_ctl6 | |
1263 | test_8021qvs_maxgroups_too_many_entries_ctl6 | |
1264 | test_8021qvs_maxgroups_too_many_cross_vlan_ctl6 | |
1265 | } | |
1266 | ||
1267 | # other test suites | |
1268 | ||
1269 | test_8021qvs_toggle_vlan_snooping() | |
1270 | { | |
1271 | test_toggle_vlan_snooping_temp | |
1272 | test_toggle_vlan_snooping_permanent | |
1273 | } | |
1274 | ||
1275 | # test groups | |
1276 | ||
1277 | test_8021d() | |
1278 | { | |
1279 | # Tests for vlan_filtering 0 mcast_vlan_snooping 0. | |
1280 | ||
1281 | switch_create_8021d | |
1282 | setup_wait | |
1283 | ||
1284 | test_8021d_ngroups_cfg4 | |
1285 | test_8021d_ngroups_ctl4 | |
1286 | test_8021d_ngroups_cfg6 | |
1287 | test_8021d_ngroups_ctl6 | |
1288 | test_8021d_maxgroups_cfg4 | |
1289 | test_8021d_maxgroups_ctl4 | |
1290 | test_8021d_maxgroups_cfg6 | |
1291 | test_8021d_maxgroups_ctl6 | |
1292 | ||
1293 | switch_destroy | |
1294 | } | |
1295 | ||
1296 | test_8021q() | |
1297 | { | |
1298 | # Tests for vlan_filtering 1 mcast_vlan_snooping 0. | |
1299 | ||
1300 | switch_create_8021q | |
1301 | setup_wait | |
1302 | ||
1303 | test_8021q_vlan_attributes | |
1304 | test_8021q_ngroups_cfg4 | |
1305 | test_8021q_ngroups_ctl4 | |
1306 | test_8021q_ngroups_cfg6 | |
1307 | test_8021q_ngroups_ctl6 | |
1308 | test_8021q_maxgroups_cfg4 | |
1309 | test_8021q_maxgroups_ctl4 | |
1310 | test_8021q_maxgroups_cfg6 | |
1311 | test_8021q_maxgroups_ctl6 | |
1312 | ||
1313 | switch_destroy | |
1314 | } | |
1315 | ||
1316 | test_8021qvs() | |
1317 | { | |
1318 | # Tests for vlan_filtering 1 mcast_vlan_snooping 1. | |
1319 | ||
1320 | switch_create_8021qvs | |
1321 | setup_wait | |
1322 | ||
1323 | test_8021qvs_vlan_attributes | |
1324 | test_8021qvs_ngroups_cfg4 | |
1325 | test_8021qvs_ngroups_ctl4 | |
1326 | test_8021qvs_ngroups_cfg6 | |
1327 | test_8021qvs_ngroups_ctl6 | |
1328 | test_8021qvs_maxgroups_cfg4 | |
1329 | test_8021qvs_maxgroups_ctl4 | |
1330 | test_8021qvs_maxgroups_cfg6 | |
1331 | test_8021qvs_maxgroups_ctl6 | |
1332 | test_8021qvs_toggle_vlan_snooping | |
1333 | ||
1334 | switch_destroy | |
1335 | } | |
1336 | ||
6bdf3d97 IS |
1337 | if ! bridge link help 2>&1 | grep -q "mcast_max_groups"; then |
1338 | echo "SKIP: iproute2 too old, missing bridge \"mcast_max_groups\" support" | |
1339 | exit $ksft_skip | |
1340 | fi | |
1341 | ||
3446dcd7 PM |
1342 | trap cleanup EXIT |
1343 | ||
1344 | setup_prepare | |
1345 | tests_run | |
1346 | ||
1347 | exit $EXIT_STATUS |