]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests: net: add team_bridge_macvlan rx_mode test
authorStanislav Fomichev <sdf.kernel@gmail.com>
Thu, 16 Apr 2026 18:57:11 +0000 (11:57 -0700)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 21 Apr 2026 10:50:25 +0000 (12:50 +0200)
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>
tools/testing/selftests/net/config
tools/testing/selftests/net/rtnetlink.sh

index 2a390cae41bf2e61998c7f6fc5c62247ebea0db1..94d722770420dbcff891e0a2a45c80e2be1eadf2 100644 (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
index 5a5ff88321d578db9abcbae7b893739cdcf82c9e..c499953d4885a7a3b78de3e8a84cf46ea652e9da 100755 (executable)
@@ -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 \