Skip to content

Commit 8353c2a

Browse files
author
Paolo Abeni
committed
Merge branch 'check-vlan-filter-feature-in-vlan_vids_add_by_dev-and-vlan_vids_del_by_dev'
Liu Jian says: ==================== check vlan filter feature in vlan_vids_add_by_dev() and vlan_vids_del_by_dev() v2->v3: Filter using vlan_hw_filter_capable(). Add one basic test. ==================== Link: https://lore.kernel.org/r/20231216075219.2379123-1-liujian56@huawei.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2 parents fa94a0c + 2258b66 commit 8353c2a

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

net/8021q/vlan_core.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,8 @@ int vlan_vids_add_by_dev(struct net_device *dev,
407407
return 0;
408408

409409
list_for_each_entry(vid_info, &vlan_info->vid_list, list) {
410+
if (!vlan_hw_filter_capable(by_dev, vid_info->proto))
411+
continue;
410412
err = vlan_vid_add(dev, vid_info->proto, vid_info->vid);
411413
if (err)
412414
goto unwind;
@@ -417,6 +419,8 @@ int vlan_vids_add_by_dev(struct net_device *dev,
417419
list_for_each_entry_continue_reverse(vid_info,
418420
&vlan_info->vid_list,
419421
list) {
422+
if (!vlan_hw_filter_capable(by_dev, vid_info->proto))
423+
continue;
420424
vlan_vid_del(dev, vid_info->proto, vid_info->vid);
421425
}
422426

@@ -436,8 +440,11 @@ void vlan_vids_del_by_dev(struct net_device *dev,
436440
if (!vlan_info)
437441
return;
438442

439-
list_for_each_entry(vid_info, &vlan_info->vid_list, list)
443+
list_for_each_entry(vid_info, &vlan_info->vid_list, list) {
444+
if (!vlan_hw_filter_capable(by_dev, vid_info->proto))
445+
continue;
440446
vlan_vid_del(dev, vid_info->proto, vid_info->vid);
447+
}
441448
}
442449
EXPORT_SYMBOL(vlan_vids_del_by_dev);
443450

tools/testing/selftests/net/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ TEST_PROGS += test_bridge_neigh_suppress.sh
9191
TEST_PROGS += test_vxlan_nolocalbypass.sh
9292
TEST_PROGS += test_bridge_backup_port.sh
9393
TEST_PROGS += fdb_flush.sh
94+
TEST_PROGS += vlan_hw_filter.sh
9495

9596
TEST_FILES := settings
9697

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/bin/sh
2+
# SPDX-License-Identifier: GPL-2.0
3+
4+
readonly NETNS="ns-$(mktemp -u XXXXXX)"
5+
6+
ret=0
7+
8+
cleanup() {
9+
ip netns del $NETNS
10+
}
11+
12+
trap cleanup EXIT
13+
14+
fail() {
15+
echo "ERROR: ${1:-unexpected return code} (ret: $_)" >&2
16+
ret=1
17+
}
18+
19+
ip netns add ${NETNS}
20+
ip netns exec ${NETNS} ip link add bond0 type bond mode 0
21+
ip netns exec ${NETNS} ip link add bond_slave_1 type veth peer veth2
22+
ip netns exec ${NETNS} ip link set bond_slave_1 master bond0
23+
ip netns exec ${NETNS} ethtool -K bond0 rx-vlan-filter off
24+
ip netns exec ${NETNS} ip link add link bond_slave_1 name bond_slave_1.0 type vlan id 0
25+
ip netns exec ${NETNS} ip link add link bond0 name bond0.0 type vlan id 0
26+
ip netns exec ${NETNS} ip link set bond_slave_1 nomaster
27+
ip netns exec ${NETNS} ip link del veth2 || fail "Please check vlan HW filter function"
28+
29+
exit $ret

0 commit comments

Comments
 (0)