File tree Expand file tree Collapse file tree 3 files changed +38
-1
lines changed
tools/testing/selftests/net Expand file tree Collapse file tree 3 files changed +38
-1
lines changed Original file line number Diff line number Diff 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}
442449EXPORT_SYMBOL (vlan_vids_del_by_dev );
443450
Original file line number Diff line number Diff line change @@ -91,6 +91,7 @@ TEST_PROGS += test_bridge_neigh_suppress.sh
9191TEST_PROGS += test_vxlan_nolocalbypass.sh
9292TEST_PROGS += test_bridge_backup_port.sh
9393TEST_PROGS += fdb_flush.sh
94+ TEST_PROGS += vlan_hw_filter.sh
9495
9596TEST_FILES := settings
9697
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments