Message ID | 20231217083244.4076193-9-idosch@nvidia.com (mailing list archive) |
---|---|
State | Accepted |
Commit | bd2dcb94c81e3408731d129e884954c36ef2f1fa |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Add MDB bulk deletion support | expand |
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@nvidia.com> > Acked-by: Petr Machata <petrm@nvidia.com> Reviewed-by: Hangbin Liu <liuhangbin@gmail.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 >
On 17/12/2023 10:32, 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@nvidia.com> > Acked-by: Petr Machata <petrm@nvidia.com> > --- > .../selftests/net/forwarding/bridge_mdb.sh | 191 +++++++++++++++++- > 1 file changed, 189 insertions(+), 2 deletions(-) > Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
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