selftests: net: add team_bridge_macvlan rx_mode test

Add a test that exercises the ndo_change_rx_flags path through a
macvlan -> bridge -> team -> dummy stack. This triggers dev_uc_add
under addr_list_lock which flips promiscuity on the lower device.
With the new work queue approach, this must not deadlock.

Link: https://lore.kernel.org/netdev/20260214033859.43857-1-jiayuan.chen@linux.dev/
Reviewed-by: Breno Leitao <leitao@debian.org>
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
Link: https://patch.msgid.link/20260416185712.2155425-15-sdf@fomichev.me
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Stanislav Fomichev
2026-04-16 11:57:11 -07:00
committed by Paolo Abeni
parent 3cbd229388
commit ee514cdb07
2 changed files with 45 additions and 0 deletions

View File

@@ -101,6 +101,7 @@ CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_SCH_NETEM=y
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_TEAM=y
CONFIG_NET_VRF=y
CONFIG_NF_CONNTRACK=m
CONFIG_NF_CONNTRACK_OVS=y

View File

@@ -23,6 +23,7 @@ ALL_TESTS="
kci_test_encap
kci_test_macsec
kci_test_macsec_vlan
kci_test_team_bridge_macvlan
kci_test_ipsec
kci_test_ipsec_offload
kci_test_fdb_get
@@ -636,6 +637,49 @@ kci_test_macsec_vlan()
end_test "PASS: macsec_vlan"
}
# Test ndo_change_rx_flags call from dev_uc_add under addr_list_lock spinlock.
# When we are flipping the promisc, make sure it runs on the work queue.
#
# https://lore.kernel.org/netdev/20260214033859.43857-1-jiayuan.chen@linux.dev/
# With (more conventional) macvlan instead of macsec.
# macvlan -> bridge -> team -> dummy
kci_test_team_bridge_macvlan()
{
local vlan="test_macv1"
local bridge="test_br1"
local team="test_team1"
local dummy="test_dummy1"
local ret=0
run_cmd ip link add $team type team
if [ $ret -ne 0 ]; then
end_test "SKIP: team_bridge_macvlan: can't add team interface"
return $ksft_skip
fi
run_cmd ip link add $dummy type dummy
run_cmd ip link set $dummy master $team
run_cmd ip link set $team up
run_cmd ip link add $bridge type bridge vlan_filtering 1
run_cmd ip link set $bridge up
run_cmd ip link set $team master $bridge
run_cmd ip link add link $bridge name $vlan \
address 00:aa:bb:cc:dd:ee type macvlan mode bridge
run_cmd ip link set $vlan up
run_cmd ip link del $vlan
run_cmd ip link del $bridge
run_cmd ip link del $team
run_cmd ip link del $dummy
if [ $ret -ne 0 ]; then
end_test "FAIL: team_bridge_macvlan"
return 1
fi
end_test "PASS: team_bridge_macvlan"
}
#-------------------------------------------------------------------
# Example commands
# ip x s add proto esp src 14.0.0.52 dst 14.0.0.70 \