Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3#
4# Test bridge VLAN range grouping. VLANs are collapsed into a range entry in
5# the dump if they have the same per-VLAN options. These tests verify that
6# VLANs with different per-VLAN option values are not grouped together.
7
8# shellcheck disable=SC1091,SC2034,SC2154,SC2317
9source lib.sh
10
11ALL_TESTS="
12 vlan_range_neigh_suppress
13 vlan_range_mcast_max_groups
14 vlan_range_mcast_n_groups
15 vlan_range_mcast_enabled
16"
17
18setup_prepare()
19{
20 setup_ns NS
21 defer cleanup_all_ns
22
23 ip -n "$NS" link add name br0 type bridge vlan_filtering 1 \
24 vlan_default_pvid 0 mcast_snooping 1 mcast_vlan_snooping 1
25 ip -n "$NS" link set dev br0 up
26
27 ip -n "$NS" link add name dummy0 type dummy
28 ip -n "$NS" link set dev dummy0 master br0
29 ip -n "$NS" link set dev dummy0 up
30}
31
32vlan_range_neigh_suppress()
33{
34 RET=0
35
36 # Add two new consecutive VLANs for range grouping test
37 bridge -n "$NS" vlan add vid 10 dev dummy0
38 defer bridge -n "$NS" vlan del vid 10 dev dummy0
39
40 bridge -n "$NS" vlan add vid 11 dev dummy0
41 defer bridge -n "$NS" vlan del vid 11 dev dummy0
42
43 # Configure different neigh_suppress values and verify no range grouping
44 bridge -n "$NS" vlan set vid 10 dev dummy0 neigh_suppress on
45 check_err $? "Failed to set neigh_suppress for VLAN 10"
46
47 bridge -n "$NS" vlan set vid 11 dev dummy0 neigh_suppress off
48 check_err $? "Failed to set neigh_suppress for VLAN 11"
49
50 # Verify VLANs are not shown as a range, but individual entries exist
51 bridge -n "$NS" -d vlan show dev dummy0 | grep -q "10-11"
52 check_fail $? "VLANs with different neigh_suppress incorrectly grouped"
53
54 bridge -n "$NS" -d vlan show dev dummy0 | grep -Eq "^\S+\s+10$|^\s+10$"
55 check_err $? "VLAN 10 individual entry not found"
56
57 bridge -n "$NS" -d vlan show dev dummy0 | grep -Eq "^\S+\s+11$|^\s+11$"
58 check_err $? "VLAN 11 individual entry not found"
59
60 # Configure same neigh_suppress value and verify range grouping
61 bridge -n "$NS" vlan set vid 11 dev dummy0 neigh_suppress on
62 check_err $? "Failed to set neigh_suppress for VLAN 11"
63
64 bridge -n "$NS" -d vlan show dev dummy0 | grep -q "10-11"
65 check_err $? "VLANs with same neigh_suppress not grouped"
66
67 log_test "VLAN range grouping with neigh_suppress"
68}
69
70vlan_range_mcast_max_groups()
71{
72 RET=0
73
74 # Add two new consecutive VLANs for range grouping test
75 bridge -n "$NS" vlan add vid 10 dev dummy0
76 defer bridge -n "$NS" vlan del vid 10 dev dummy0
77
78 bridge -n "$NS" vlan add vid 11 dev dummy0
79 defer bridge -n "$NS" vlan del vid 11 dev dummy0
80
81 # Configure different mcast_max_groups values and verify no range grouping
82 bridge -n "$NS" vlan set vid 10 dev dummy0 mcast_max_groups 100
83 check_err $? "Failed to set mcast_max_groups for VLAN 10"
84
85 bridge -n "$NS" vlan set vid 11 dev dummy0 mcast_max_groups 200
86 check_err $? "Failed to set mcast_max_groups for VLAN 11"
87
88 # Verify VLANs are not shown as a range, but individual entries exist
89 bridge -n "$NS" -d vlan show dev dummy0 | grep -q "10-11"
90 check_fail $? "VLANs with different mcast_max_groups incorrectly grouped"
91
92 bridge -n "$NS" -d vlan show dev dummy0 | grep -Eq "^\S+\s+10$|^\s+10$"
93 check_err $? "VLAN 10 individual entry not found"
94
95 bridge -n "$NS" -d vlan show dev dummy0 | grep -Eq "^\S+\s+11$|^\s+11$"
96 check_err $? "VLAN 11 individual entry not found"
97
98 # Configure same mcast_max_groups value and verify range grouping
99 bridge -n "$NS" vlan set vid 11 dev dummy0 mcast_max_groups 100
100 check_err $? "Failed to set mcast_max_groups for VLAN 11"
101
102 bridge -n "$NS" -d vlan show dev dummy0 | grep -q "10-11"
103 check_err $? "VLANs with same mcast_max_groups not grouped"
104
105 log_test "VLAN range grouping with mcast_max_groups"
106}
107
108vlan_range_mcast_n_groups()
109{
110 RET=0
111
112 # Add two new consecutive VLANs for range grouping test
113 bridge -n "$NS" vlan add vid 10 dev dummy0
114 defer bridge -n "$NS" vlan del vid 10 dev dummy0
115
116 bridge -n "$NS" vlan add vid 11 dev dummy0
117 defer bridge -n "$NS" vlan del vid 11 dev dummy0
118
119 # Add different numbers of multicast groups to each VLAN
120 bridge -n "$NS" mdb add dev br0 port dummy0 grp 239.1.1.1 vid 10
121 check_err $? "Failed to add mdb entry to VLAN 10"
122 defer bridge -n "$NS" mdb del dev br0 port dummy0 grp 239.1.1.1 vid 10
123
124 bridge -n "$NS" mdb add dev br0 port dummy0 grp 239.1.1.2 vid 10
125 check_err $? "Failed to add second mdb entry to VLAN 10"
126 defer bridge -n "$NS" mdb del dev br0 port dummy0 grp 239.1.1.2 vid 10
127
128 bridge -n "$NS" mdb add dev br0 port dummy0 grp 239.1.1.1 vid 11
129 check_err $? "Failed to add mdb entry to VLAN 11"
130 defer bridge -n "$NS" mdb del dev br0 port dummy0 grp 239.1.1.1 vid 11
131
132 # Verify VLANs are not shown as a range due to different mcast_n_groups
133 bridge -n "$NS" -d vlan show dev dummy0 | grep -q "10-11"
134 check_fail $? "VLANs with different mcast_n_groups incorrectly grouped"
135
136 bridge -n "$NS" -d vlan show dev dummy0 | grep -Eq "^\S+\s+10$|^\s+10$"
137 check_err $? "VLAN 10 individual entry not found"
138
139 bridge -n "$NS" -d vlan show dev dummy0 | grep -Eq "^\S+\s+11$|^\s+11$"
140 check_err $? "VLAN 11 individual entry not found"
141
142 # Add another group to VLAN 11 to match VLAN 10's count
143 bridge -n "$NS" mdb add dev br0 port dummy0 grp 239.1.1.2 vid 11
144 check_err $? "Failed to add second mdb entry to VLAN 11"
145 defer bridge -n "$NS" mdb del dev br0 port dummy0 grp 239.1.1.2 vid 11
146
147 bridge -n "$NS" -d vlan show dev dummy0 | grep -q "10-11"
148 check_err $? "VLANs with same mcast_n_groups not grouped"
149
150 log_test "VLAN range grouping with mcast_n_groups"
151}
152
153vlan_range_mcast_enabled()
154{
155 RET=0
156
157 # Add two new consecutive VLANs for range grouping test
158 bridge -n "$NS" vlan add vid 10 dev br0 self
159 defer bridge -n "$NS" vlan del vid 10 dev br0 self
160
161 bridge -n "$NS" vlan add vid 11 dev br0 self
162 defer bridge -n "$NS" vlan del vid 11 dev br0 self
163
164 bridge -n "$NS" vlan add vid 10 dev dummy0
165 defer bridge -n "$NS" vlan del vid 10 dev dummy0
166
167 bridge -n "$NS" vlan add vid 11 dev dummy0
168 defer bridge -n "$NS" vlan del vid 11 dev dummy0
169
170 # Configure different mcast_snooping for bridge VLANs
171 # Port VLANs inherit BR_VLFLAG_MCAST_ENABLED from bridge VLANs
172 bridge -n "$NS" vlan global set dev br0 vid 10 mcast_snooping 1
173 bridge -n "$NS" vlan global set dev br0 vid 11 mcast_snooping 0
174
175 # Verify port VLANs are not grouped due to different mcast_enabled
176 bridge -n "$NS" -d vlan show dev dummy0 | grep -q "10-11"
177 check_fail $? "VLANs with different mcast_enabled incorrectly grouped"
178
179 bridge -n "$NS" -d vlan show dev dummy0 | grep -Eq "^\S+\s+10$|^\s+10$"
180 check_err $? "VLAN 10 individual entry not found"
181
182 bridge -n "$NS" -d vlan show dev dummy0 | grep -Eq "^\S+\s+11$|^\s+11$"
183 check_err $? "VLAN 11 individual entry not found"
184
185 # Configure same mcast_snooping and verify range grouping
186 bridge -n "$NS" vlan global set dev br0 vid 11 mcast_snooping 1
187
188 bridge -n "$NS" -d vlan show dev dummy0 | grep -q "10-11"
189 check_err $? "VLANs with same mcast_enabled not grouped"
190
191 log_test "VLAN range grouping with mcast_enabled"
192}
193
194# Verify the newest tested option is supported
195if ! bridge vlan help 2>&1 | grep -q "neigh_suppress"; then
196 echo "SKIP: iproute2 too old, missing per-VLAN neighbor suppression support"
197 exit "$ksft_skip"
198fi
199
200trap defer_scopes_cleanup EXIT
201setup_prepare
202tests_run
203
204exit "$EXIT_STATUS"