]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests: forwarding: bridge_mdb_max: add tests for mdb_n_entries warning
authorNikolay Aleksandrov <nikolay@nvidia.com>
Fri, 13 Feb 2026 07:00:31 +0000 (09:00 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 17 Feb 2026 12:00:14 +0000 (13:00 +0100)
Recently we were able to trigger a warning in the mdb_n_entries counting
code. Add tests that exercise different ways which used to trigger that
warning.

Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com>
Link: https://patch.msgid.link/20260213070031.1400003-3-nikolay@nvidia.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
tools/testing/selftests/net/forwarding/bridge_mdb_max.sh

index 3da9d93ab36fb9b6cea1160a9889ee4869f84623..625162fd7e8b46db16e4c0ec31be82f1d3f08d12 100755 (executable)
@@ -28,6 +28,7 @@ ALL_TESTS="
        test_8021d
        test_8021q
        test_8021qvs
+       test_mdb_count_warning
 "
 
 NUM_NETIFS=4
@@ -83,8 +84,6 @@ switch_create_8021q()
 {
        local br_flags=$1; shift
 
-       log_info "802.1q $br_flags${br_flags:+ }tests"
-
        ip link add name br0 type bridge vlan_filtering 1 vlan_default_pvid 0 \
                mcast_snooping 1 $br_flags \
                mcast_igmp_version 3 mcast_mld_version 2
@@ -106,6 +105,7 @@ switch_create_8021q()
 
 switch_create_8021qvs()
 {
+       log_info "802.1q mcast_vlan_snooping 1 tests"
        switch_create_8021q "mcast_vlan_snooping 1"
        bridge vlan global set dev br0 vid 10 mcast_igmp_version 3
        bridge vlan global set dev br0 vid 10 mcast_mld_version 2
@@ -1272,6 +1272,76 @@ test_8021qvs_toggle_vlan_snooping()
        test_toggle_vlan_snooping_permanent
 }
 
+mdb_count_check_warn()
+{
+       local msg=$1; shift
+
+       dmesg | grep -q "WARNING:.*br_multicast_port_ngroups_dec.*"
+       check_fail $? "$msg"
+}
+
+test_mdb_count_mcast_vlan_snooping_flush()
+{
+       RET=0
+
+       # check if we already have a warning
+       mdb_count_check_warn "Check MDB entries count warning before test"
+
+       bridge mdb add dev br0 port "$swp1" grp 239.0.0.1 permanent vid 10
+       ip link set dev br0 down
+       ip link set dev br0 type bridge mcast_vlan_snooping 1
+       bridge mdb flush dev br0
+
+       mdb_count_check_warn "Check MDB entries count warning after test"
+
+       ip link set dev br0 type bridge mcast_vlan_snooping 0
+       ip link set dev br0 up
+
+       log_test "MDB count warning: mcast_vlan_snooping and MDB flush"
+}
+
+test_mdb_count_mcast_snooping_flush()
+{
+       RET=0
+
+       # check if we already have a warning
+       mdb_count_check_warn "Check MDB entries count warning before test"
+
+       bridge mdb add dev br0 port "$swp1" grp 239.0.0.1 permanent vid 10
+       ip link set dev br0 type bridge mcast_snooping 0
+       ip link set dev br0 type bridge mcast_vlan_snooping 1
+       bridge mdb flush dev br0
+
+       mdb_count_check_warn "Check MDB entries count warning after test"
+
+       ip link set dev br0 type bridge mcast_vlan_snooping 0
+       ip link set dev br0 type bridge mcast_snooping 1
+
+       log_test "MDB count warning: mcast_snooping and MDB flush"
+}
+
+test_mdb_count_vlan_state_flush()
+{
+       RET=0
+
+       # check if we already have a warning
+       mdb_count_check_warn "Check MDB entries count warning before test"
+
+       bridge mdb add dev br0 port "$swp1" grp 239.0.0.1 permanent vid 10
+       ip link set dev br0 down
+       bridge vlan set vid 10 dev "$swp1" state blocking
+       ip link set dev br0 type bridge mcast_vlan_snooping 1
+       ip link set dev br0 up
+       bridge mdb flush dev br0
+
+       mdb_count_check_warn "Check MDB entries count warning after test"
+
+       bridge vlan set vid 10 dev "$swp1" state forwarding
+       ip link set dev br0 type bridge mcast_vlan_snooping 0
+
+       log_test "MDB count warning: disabled vlan state and MDB flush"
+}
+
 # test groups
 
 test_8021d()
@@ -1297,6 +1367,7 @@ test_8021q()
 {
        # Tests for vlan_filtering 1 mcast_vlan_snooping 0.
 
+       log_info "802.1q tests"
        switch_create_8021q
        setup_wait
 
@@ -1334,6 +1405,21 @@ test_8021qvs()
        switch_destroy
 }
 
+test_mdb_count_warning()
+{
+       # Tests for mdb_n_entries warning
+
+       log_info "MDB count warning tests"
+       switch_create_8021q
+       setup_wait
+
+       test_mdb_count_mcast_vlan_snooping_flush
+       test_mdb_count_mcast_snooping_flush
+       test_mdb_count_vlan_state_flush
+
+       switch_destroy
+}
+
 if ! bridge link help 2>&1 | grep -q "mcast_max_groups"; then
        echo "SKIP: iproute2 too old, missing bridge \"mcast_max_groups\" support"
        exit $ksft_skip