Skip to content

Commit

Permalink
Merge branch 'mlxsw-Reorganize-trap-data'
Browse files Browse the repository at this point in the history
Ido Schimmel says:

====================
mlxsw: Reorganize trap data

This patch set does not include any functional changes. It merely
reworks the internal storage of traps, trap groups and trap policers in
mlxsw to each use a single array.

These changes allow us to get rid of the multiple arrays we currently
have for traps, which make the trap data easier to validate and extend
with more per-trap information in the future. It will also allow us to
more easily add per-ASIC traps in future submissions.

Last two patches include minor changes to devlink-trap selftests.

Tested with existing devlink-trap selftests.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed May 16, 2020
2 parents 13f15b5 + 04cc99d commit d53b116
Show file tree
Hide file tree
Showing 9 changed files with 572 additions and 323 deletions.
763 changes: 521 additions & 242 deletions drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.c

Large diffs are not rendered by default.

16 changes: 8 additions & 8 deletions drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@
#include <net/devlink.h>

struct mlxsw_sp_trap {
struct devlink_trap_policer *policers_arr; /* Registered policers */
struct mlxsw_sp_trap_policer_item *policer_items_arr;
u64 policers_count; /* Number of registered policers */
struct list_head policer_item_list;

struct mlxsw_sp_trap_group_item *group_items_arr;
u64 groups_count; /* Number of registered groups */

struct mlxsw_sp_trap_item *trap_items_arr;
u64 traps_count; /* Number of registered traps */

u64 max_policers;
unsigned long policers_usage[]; /* Usage bitmap */
};

struct mlxsw_sp_trap_policer_item {
u16 hw_id;
u32 id;
struct list_head list; /* Member of policer_item_list */
};

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ ingress_flow_action_drop_test()

RET=0

devlink_trap_drop_test ingress_flow_action_drop acl_drops $swp2 101
devlink_trap_drop_test ingress_flow_action_drop $swp2 101

log_test "ingress_flow_action_drop"

Expand All @@ -132,7 +132,7 @@ egress_flow_action_drop_test()

RET=0

devlink_trap_drop_test egress_flow_action_drop acl_drops $swp2 102
devlink_trap_drop_test egress_flow_action_drop $swp2 102

log_test "egress_flow_action_drop"

Expand Down
33 changes: 13 additions & 20 deletions tools/testing/selftests/drivers/net/mlxsw/devlink_trap_l2_drops.sh
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ source_mac_is_multicast_test()
{
local trap_name="source_mac_is_multicast"
local smac=01:02:03:04:05:06
local group_name="l2_drops"
local mz_pid

tc filter add dev $swp2 egress protocol ip pref 1 handle 101 \
Expand All @@ -107,7 +106,7 @@ source_mac_is_multicast_test()

RET=0

devlink_trap_drop_test $trap_name $group_name $swp2 101
devlink_trap_drop_test $trap_name $swp2 101

log_test "Source MAC is multicast"

Expand All @@ -118,7 +117,6 @@ __vlan_tag_mismatch_test()
{
local trap_name="vlan_tag_mismatch"
local dmac=de:ad:be:ef:13:37
local group_name="l2_drops"
local opt=$1; shift
local mz_pid

Expand All @@ -132,15 +130,15 @@ __vlan_tag_mismatch_test()
$MZ $h1 "$opt" -c 0 -p 100 -a own -b $dmac -t ip -d 1msec -q &
mz_pid=$!

devlink_trap_drop_test $trap_name $group_name $swp2 101
devlink_trap_drop_test $trap_name $swp2 101

# Add PVID and make sure packets are no longer dropped.
bridge vlan add vid 1 dev $swp1 pvid untagged master
devlink_trap_action_set $trap_name "trap"

devlink_trap_stats_idle_test $trap_name
check_err $? "Trap stats not idle when packets should not be dropped"
devlink_trap_group_stats_idle_test $group_name
devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
check_err $? "Trap group stats not idle with when packets should not be dropped"

tc_check_packets "dev $swp2 egress" 101 0
Expand Down Expand Up @@ -179,7 +177,6 @@ ingress_vlan_filter_test()
{
local trap_name="ingress_vlan_filter"
local dmac=de:ad:be:ef:13:37
local group_name="l2_drops"
local mz_pid
local vid=10

Expand All @@ -193,7 +190,7 @@ ingress_vlan_filter_test()
$MZ $h1 -Q $vid -c 0 -p 100 -a own -b $dmac -t ip -d 1msec -q &
mz_pid=$!

devlink_trap_drop_test $trap_name $group_name $swp2 101
devlink_trap_drop_test $trap_name $swp2 101

# Add the VLAN on the bridge port and make sure packets are no longer
# dropped.
Expand All @@ -202,7 +199,7 @@ ingress_vlan_filter_test()

devlink_trap_stats_idle_test $trap_name
check_err $? "Trap stats not idle when packets should not be dropped"
devlink_trap_group_stats_idle_test $group_name
devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
check_err $? "Trap group stats not idle with when packets should not be dropped"

tc_check_packets "dev $swp2 egress" 101 0
Expand All @@ -222,7 +219,6 @@ __ingress_stp_filter_test()
{
local trap_name="ingress_spanning_tree_filter"
local dmac=de:ad:be:ef:13:37
local group_name="l2_drops"
local state=$1; shift
local mz_pid
local vid=20
Expand All @@ -237,7 +233,7 @@ __ingress_stp_filter_test()
$MZ $h1 -Q $vid -c 0 -p 100 -a own -b $dmac -t ip -d 1msec -q &
mz_pid=$!

devlink_trap_drop_test $trap_name $group_name $swp2 101
devlink_trap_drop_test $trap_name $swp2 101

# Change STP state to forwarding and make sure packets are no longer
# dropped.
Expand All @@ -246,7 +242,7 @@ __ingress_stp_filter_test()

devlink_trap_stats_idle_test $trap_name
check_err $? "Trap stats not idle when packets should not be dropped"
devlink_trap_group_stats_idle_test $group_name
devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
check_err $? "Trap group stats not idle with when packets should not be dropped"

tc_check_packets "dev $swp2 egress" 101 0
Expand Down Expand Up @@ -292,7 +288,6 @@ port_list_is_empty_uc_test()
{
local trap_name="port_list_is_empty"
local dmac=de:ad:be:ef:13:37
local group_name="l2_drops"
local mz_pid

# Disable unicast flooding on both ports, so that packets cannot egress
Expand All @@ -308,15 +303,15 @@ port_list_is_empty_uc_test()
$MZ $h1 -c 0 -p 100 -a own -b $dmac -t ip -d 1msec -q &
mz_pid=$!

devlink_trap_drop_test $trap_name $group_name $swp2 101
devlink_trap_drop_test $trap_name $swp2 101

# Allow packets to be flooded to one port.
ip link set dev $swp2 type bridge_slave flood on
devlink_trap_action_set $trap_name "trap"

devlink_trap_stats_idle_test $trap_name
check_err $? "Trap stats not idle when packets should not be dropped"
devlink_trap_group_stats_idle_test $group_name
devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
check_err $? "Trap group stats not idle with when packets should not be dropped"

tc_check_packets "dev $swp2 egress" 101 0
Expand All @@ -335,7 +330,6 @@ port_list_is_empty_mc_test()
{
local trap_name="port_list_is_empty"
local dmac=01:00:5e:00:00:01
local group_name="l2_drops"
local dip=239.0.0.1
local mz_pid

Expand All @@ -354,15 +348,15 @@ port_list_is_empty_mc_test()
$MZ $h1 -c 0 -p 100 -a own -b $dmac -t ip -B $dip -d 1msec -q &
mz_pid=$!

devlink_trap_drop_test $trap_name $group_name $swp2 101
devlink_trap_drop_test $trap_name $swp2 101

# Allow packets to be flooded to one port.
ip link set dev $swp2 type bridge_slave mcast_flood on
devlink_trap_action_set $trap_name "trap"

devlink_trap_stats_idle_test $trap_name
check_err $? "Trap stats not idle when packets should not be dropped"
devlink_trap_group_stats_idle_test $group_name
devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
check_err $? "Trap group stats not idle with when packets should not be dropped"

tc_check_packets "dev $swp2 egress" 101 0
Expand All @@ -387,7 +381,6 @@ port_loopback_filter_uc_test()
{
local trap_name="port_loopback_filter"
local dmac=de:ad:be:ef:13:37
local group_name="l2_drops"
local mz_pid

# Make sure packets can only egress the input port.
Expand All @@ -401,15 +394,15 @@ port_loopback_filter_uc_test()
$MZ $h1 -c 0 -p 100 -a own -b $dmac -t ip -d 1msec -q &
mz_pid=$!

devlink_trap_drop_test $trap_name $group_name $swp2 101
devlink_trap_drop_test $trap_name $swp2 101

# Allow packets to be flooded.
ip link set dev $swp2 type bridge_slave flood on
devlink_trap_action_set $trap_name "trap"

devlink_trap_stats_idle_test $trap_name
check_err $? "Trap stats not idle when packets should not be dropped"
devlink_trap_group_stats_idle_test $group_name
devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
check_err $? "Trap group stats not idle with when packets should not be dropped"

tc_check_packets "dev $swp2 egress" 101 0
Expand Down
Loading

0 comments on commit d53b116

Please sign in to comment.