[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZYABRWdw798FbaTf@Laptop-X1>
Date: Mon, 18 Dec 2023 16:22:29 +0800
From: Hangbin Liu <liuhangbin@...il.com>
To: Ido Schimmel <idosch@...dia.com>
Cc: netdev@...r.kernel.org, bridge@...ts.linux-foundation.org,
davem@...emloft.net, kuba@...nel.org, pabeni@...hat.com,
edumazet@...gle.com, roopa@...dia.com, razor@...ckwall.org,
petrm@...dia.com
Subject: Re: [PATCH net-next 8/9] selftests: bridge_mdb: Add MDB bulk
deletion test
On Sun, Dec 17, 2023 at 10:32:43AM +0200, Ido Schimmel wrote:
> Add test cases to verify the behavior of the MDB bulk deletion
> functionality in the bridge driver.
>
> Signed-off-by: Ido Schimmel <idosch@...dia.com>
> Acked-by: Petr Machata <petrm@...dia.com>
Reviewed-by: Hangbin Liu <liuhangbin@...il.com>
> ---
> .../selftests/net/forwarding/bridge_mdb.sh | 191 +++++++++++++++++-
> 1 file changed, 189 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/net/forwarding/bridge_mdb.sh b/tools/testing/selftests/net/forwarding/bridge_mdb.sh
> index e4e3e9405056..61348f71728c 100755
> --- a/tools/testing/selftests/net/forwarding/bridge_mdb.sh
> +++ b/tools/testing/selftests/net/forwarding/bridge_mdb.sh
> @@ -803,11 +803,198 @@ cfg_test_dump()
> cfg_test_dump_common "L2" l2_grps_get
> }
>
> +# Check flush functionality with different parameters.
> +cfg_test_flush()
> +{
> + local num_entries
> +
> + # Add entries with different attributes and check that they are all
> + # flushed when the flush command is given with no parameters.
> +
> + # Different port.
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.1 vid 10
> + bridge mdb add dev br0 port $swp2 grp 239.1.1.2 vid 10
> +
> + # Different VLAN ID.
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.3 vid 10
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.4 vid 20
> +
> + # Different routing protocol.
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.5 vid 10 proto bgp
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.6 vid 10 proto zebra
> +
> + # Different state.
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.7 vid 10 permanent
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.8 vid 10 temp
> +
> + bridge mdb flush dev br0
> + num_entries=$(bridge mdb show dev br0 | wc -l)
> + [[ $num_entries -eq 0 ]]
> + check_err $? 0 "Not all entries flushed after flush all"
> +
> + # Check that when flushing by port only entries programmed with the
> + # specified port are flushed and the rest are not.
> +
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.1 vid 10
> + bridge mdb add dev br0 port $swp2 grp 239.1.1.1 vid 10
> + bridge mdb add dev br0 port br0 grp 239.1.1.1 vid 10
> +
> + bridge mdb flush dev br0 port $swp1
> +
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 | grep -q "port $swp1"
> + check_fail $? "Entry not flushed by specified port"
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 | grep -q "port $swp2"
> + check_err $? "Entry flushed by wrong port"
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 | grep -q "port br0"
> + check_err $? "Host entry flushed by wrong port"
> +
> + bridge mdb flush dev br0 port br0
> +
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 | grep -q "port br0"
> + check_fail $? "Host entry not flushed by specified port"
> +
> + bridge mdb flush dev br0
> +
> + # Check that when flushing by VLAN ID only entries programmed with the
> + # specified VLAN ID are flushed and the rest are not.
> +
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.1 vid 10
> + bridge mdb add dev br0 port $swp2 grp 239.1.1.1 vid 10
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.1 vid 20
> + bridge mdb add dev br0 port $swp2 grp 239.1.1.1 vid 20
> +
> + bridge mdb flush dev br0 vid 10
> +
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 &> /dev/null
> + check_fail $? "Entry not flushed by specified VLAN ID"
> + bridge mdb get dev br0 grp 239.1.1.1 vid 20 &> /dev/null
> + check_err $? "Entry flushed by wrong VLAN ID"
> +
> + bridge mdb flush dev br0
> +
> + # Check that all permanent entries are flushed when "permanent" is
> + # specified and that temporary entries are not.
> +
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.1 permanent vid 10
> + bridge mdb add dev br0 port $swp2 grp 239.1.1.1 temp vid 10
> +
> + bridge mdb flush dev br0 permanent
> +
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 | grep -q "port $swp1"
> + check_fail $? "Entry not flushed by \"permanent\" state"
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 | grep -q "port $swp2"
> + check_err $? "Entry flushed by wrong state (\"permanent\")"
> +
> + bridge mdb flush dev br0
> +
> + # Check that all temporary entries are flushed when "nopermanent" is
> + # specified and that permanent entries are not.
> +
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.1 permanent vid 10
> + bridge mdb add dev br0 port $swp2 grp 239.1.1.1 temp vid 10
> +
> + bridge mdb flush dev br0 nopermanent
> +
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 | grep -q "port $swp1"
> + check_err $? "Entry flushed by wrong state (\"nopermanent\")"
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 | grep -q "port $swp2"
> + check_fail $? "Entry not flushed by \"nopermanent\" state"
> +
> + bridge mdb flush dev br0
> +
> + # Check that L2 host entries are not flushed when "nopermanent" is
> + # specified, but flushed when "permanent" is specified.
> +
> + bridge mdb add dev br0 port br0 grp 01:02:03:04:05:06 permanent vid 10
> +
> + bridge mdb flush dev br0 nopermanent
> +
> + bridge mdb get dev br0 grp 01:02:03:04:05:06 vid 10 &> /dev/null
> + check_err $? "L2 host entry flushed by wrong state (\"nopermanent\")"
> +
> + bridge mdb flush dev br0 permanent
> +
> + bridge mdb get dev br0 grp 01:02:03:04:05:06 vid 10 &> /dev/null
> + check_fail $? "L2 host entry not flushed by \"permanent\" state"
> +
> + bridge mdb flush dev br0
> +
> + # Check that IPv4 host entries are not flushed when "permanent" is
> + # specified, but flushed when "nopermanent" is specified.
> +
> + bridge mdb add dev br0 port br0 grp 239.1.1.1 temp vid 10
> +
> + bridge mdb flush dev br0 permanent
> +
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 &> /dev/null
> + check_err $? "IPv4 host entry flushed by wrong state (\"permanent\")"
> +
> + bridge mdb flush dev br0 nopermanent
> +
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 &> /dev/null
> + check_fail $? "IPv4 host entry not flushed by \"nopermanent\" state"
> +
> + bridge mdb flush dev br0
> +
> + # Check that IPv6 host entries are not flushed when "permanent" is
> + # specified, but flushed when "nopermanent" is specified.
> +
> + bridge mdb add dev br0 port br0 grp ff0e::1 temp vid 10
> +
> + bridge mdb flush dev br0 permanent
> +
> + bridge mdb get dev br0 grp ff0e::1 vid 10 &> /dev/null
> + check_err $? "IPv6 host entry flushed by wrong state (\"permanent\")"
> +
> + bridge mdb flush dev br0 nopermanent
> +
> + bridge mdb get dev br0 grp ff0e::1 vid 10 &> /dev/null
> + check_fail $? "IPv6 host entry not flushed by \"nopermanent\" state"
> +
> + bridge mdb flush dev br0
> +
> + # Check that when flushing by routing protocol only entries programmed
> + # with the specified routing protocol are flushed and the rest are not.
> +
> + bridge mdb add dev br0 port $swp1 grp 239.1.1.1 vid 10 proto bgp
> + bridge mdb add dev br0 port $swp2 grp 239.1.1.1 vid 10 proto zebra
> + bridge mdb add dev br0 port br0 grp 239.1.1.1 vid 10
> +
> + bridge mdb flush dev br0 proto bgp
> +
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 | grep -q "port $swp1"
> + check_fail $? "Entry not flushed by specified routing protocol"
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 | grep -q "port $swp2"
> + check_err $? "Entry flushed by wrong routing protocol"
> + bridge mdb get dev br0 grp 239.1.1.1 vid 10 | grep -q "port br0"
> + check_err $? "Host entry flushed by wrong routing protocol"
> +
> + bridge mdb flush dev br0
> +
> + # Test that an error is returned when trying to flush using unsupported
> + # parameters.
> +
> + bridge mdb flush dev br0 src_vni 10 &> /dev/null
> + check_fail $? "Managed to flush by source VNI"
> +
> + bridge mdb flush dev br0 dst 198.51.100.1 &> /dev/null
> + check_fail $? "Managed to flush by destination IP"
> +
> + bridge mdb flush dev br0 dst_port 4789 &> /dev/null
> + check_fail $? "Managed to flush by UDP destination port"
> +
> + bridge mdb flush dev br0 vni 10 &> /dev/null
> + check_fail $? "Managed to flush by destination VNI"
> +
> + log_test "Flush tests"
> +}
> +
> cfg_test()
> {
> cfg_test_host
> cfg_test_port
> cfg_test_dump
> + cfg_test_flush
> }
>
> __fwd_test_host_ip()
> @@ -1166,8 +1353,8 @@ ctrl_test()
> ctrl_mldv2_is_in_test
> }
>
> -if ! bridge mdb help 2>&1 | grep -q "get"; then
> - echo "SKIP: iproute2 too old, missing bridge mdb get support"
> +if ! bridge mdb help 2>&1 | grep -q "flush"; then
> + echo "SKIP: iproute2 too old, missing bridge mdb flush support"
> exit $ksft_skip
> fi
>
> --
> 2.40.1
>
Powered by blists - more mailing lists