mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 05:44:11 +00:00
selftests: bridge_mdb: Add MDB bulk deletion test
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> Acked-by: Nikolay Aleksandrov <razor@blackwall.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2601e9c4b1
commit
bd2dcb94c8
1 changed files with 189 additions and 2 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue