Commit d53b1162 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'mlxsw-Reorganize-trap-data'



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: default avatarDavid S. Miller <davem@davemloft.net>
parents 13f15b59 04cc99d9
Loading
Loading
Loading
Loading
+521 −242

File changed.

Preview size limit exceeded, changes collapsed.

+8 −8
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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"

@@ -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"

+13 −20
Original line number Diff line number Diff line
@@ -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 \
@@ -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"

@@ -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

@@ -132,7 +130,7 @@ __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
@@ -140,7 +138,7 @@ __vlan_tag_mismatch_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
@@ -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

@@ -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.
@@ -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
@@ -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
@@ -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.
@@ -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
@@ -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
@@ -308,7 +303,7 @@ 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
@@ -316,7 +311,7 @@ port_list_is_empty_uc_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
@@ -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

@@ -354,7 +348,7 @@ 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
@@ -362,7 +356,7 @@ port_list_is_empty_mc_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
@@ -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.
@@ -401,7 +394,7 @@ 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
@@ -409,7 +402,7 @@ port_loopback_filter_uc_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
+11 −24
Original line number Diff line number Diff line
@@ -161,7 +161,6 @@ ping_check()
non_ip_test()
{
	local trap_name="non_ip"
	local group_name="l3_drops"
	local mz_pid

	RET=0
@@ -176,7 +175,7 @@ non_ip_test()
		00:00 de:ad:be:ef" &
	mz_pid=$!

	devlink_trap_drop_test $trap_name $group_name $rp2 101
	devlink_trap_drop_test $trap_name $rp2 101

	log_test "Non IP"

@@ -190,7 +189,6 @@ __uc_dip_over_mc_dmac_test()
	local dip=$1; shift
	local flags=${1:-""}; shift
	local trap_name="uc_dip_over_mc_dmac"
	local group_name="l3_drops"
	local dmac=01:02:03:04:05:06
	local mz_pid

@@ -206,7 +204,7 @@ __uc_dip_over_mc_dmac_test()
		-B $dip -d 1msec -q &
	mz_pid=$!

	devlink_trap_drop_test $trap_name $group_name $rp2 101
	devlink_trap_drop_test $trap_name $rp2 101

	log_test "Unicast destination IP over multicast destination MAC: $desc"

@@ -227,7 +225,6 @@ __sip_is_loopback_test()
	local dip=$1; shift
	local flags=${1:-""}; shift
	local trap_name="sip_is_loopback_address"
	local group_name="l3_drops"
	local mz_pid

	RET=0
@@ -242,7 +239,7 @@ __sip_is_loopback_test()
		-b $rp1mac -B $dip -d 1msec -q &
	mz_pid=$!

	devlink_trap_drop_test $trap_name $group_name $rp2 101
	devlink_trap_drop_test $trap_name $rp2 101

	log_test "Source IP is loopback address: $desc"

@@ -262,7 +259,6 @@ __dip_is_loopback_test()
	local dip=$1; shift
	local flags=${1:-""}; shift
	local trap_name="dip_is_loopback_address"
	local group_name="l3_drops"
	local mz_pid

	RET=0
@@ -277,7 +273,7 @@ __dip_is_loopback_test()
		-B $dip -d 1msec -q &
	mz_pid=$!

	devlink_trap_drop_test $trap_name $group_name $rp2 101
	devlink_trap_drop_test $trap_name $rp2 101

	log_test "Destination IP is loopback address: $desc"

@@ -298,7 +294,6 @@ __sip_is_mc_test()
	local dip=$1; shift
	local flags=${1:-""}; shift
	local trap_name="sip_is_mc"
	local group_name="l3_drops"
	local mz_pid

	RET=0
@@ -313,7 +308,7 @@ __sip_is_mc_test()
		-b $rp1mac -B $dip -d 1msec -q &
	mz_pid=$!

	devlink_trap_drop_test $trap_name $group_name $rp2 101
	devlink_trap_drop_test $trap_name $rp2 101

	log_test "Source IP is multicast: $desc"

@@ -329,7 +324,6 @@ sip_is_mc_test()
ipv4_sip_is_limited_bc_test()
{
	local trap_name="ipv4_sip_is_limited_bc"
	local group_name="l3_drops"
	local sip=255.255.255.255
	local mz_pid

@@ -345,7 +339,7 @@ ipv4_sip_is_limited_bc_test()
		-B $h2_ipv4 -d 1msec -q &
	mz_pid=$!

	devlink_trap_drop_test $trap_name $group_name $rp2 101
	devlink_trap_drop_test $trap_name $rp2 101

	log_test "IPv4 source IP is limited broadcast"

@@ -382,7 +376,6 @@ __ipv4_header_corrupted_test()
	local ihl=$1; shift
	local checksum=$1; shift
	local trap_name="ip_header_corrupted"
	local group_name="l3_drops"
	local payload
	local mz_pid

@@ -399,7 +392,7 @@ __ipv4_header_corrupted_test()
	$MZ $h1 -c 0 -d 1msec -a $h1mac -b $rp1mac -q p=$payload &
	mz_pid=$!

	devlink_trap_drop_test $trap_name $group_name $rp2 101
	devlink_trap_drop_test $trap_name $rp2 101

	log_test "IP header corrupted: $desc: IPv4"

@@ -429,7 +422,6 @@ __ipv6_header_corrupted_test()
	local desc=$1; shift
	local ipver=$1; shift
	local trap_name="ip_header_corrupted"
	local group_name="l3_drops"
	local payload
	local mz_pid

@@ -446,7 +438,7 @@ __ipv6_header_corrupted_test()
	$MZ $h1 -c 0 -d 1msec -a $h1mac -b $rp1mac -q p=$payload &
	mz_pid=$!

	devlink_trap_drop_test $trap_name $group_name $rp2 101
	devlink_trap_drop_test $trap_name $rp2 101

	log_test "IP header corrupted: $desc: IPv6"

@@ -469,7 +461,6 @@ ip_header_corrupted_test()
ipv6_mc_dip_reserved_scope_test()
{
	local trap_name="ipv6_mc_dip_reserved_scope"
	local group_name="l3_drops"
	local dip=FF00::
	local mz_pid

@@ -485,7 +476,7 @@ ipv6_mc_dip_reserved_scope_test()
		"33:33:00:00:00:00" -B $dip -d 1msec -q &
	mz_pid=$!

	devlink_trap_drop_test $trap_name $group_name $rp2 101
	devlink_trap_drop_test $trap_name $rp2 101

	log_test "IPv6 multicast destination IP reserved scope"

@@ -495,7 +486,6 @@ ipv6_mc_dip_reserved_scope_test()
ipv6_mc_dip_interface_local_scope_test()
{
	local trap_name="ipv6_mc_dip_interface_local_scope"
	local group_name="l3_drops"
	local dip=FF01::
	local mz_pid

@@ -511,7 +501,7 @@ ipv6_mc_dip_interface_local_scope_test()
		"33:33:00:00:00:00" -B $dip -d 1msec -q &
	mz_pid=$!

	devlink_trap_drop_test $trap_name $group_name $rp2 101
	devlink_trap_drop_test $trap_name $rp2 101

	log_test "IPv6 multicast destination IP interface-local scope"

@@ -526,7 +516,6 @@ __blackhole_route_test()
	local dip=$1; shift
	local ip_proto=${1:-"icmp"}; shift
	local trap_name="blackhole_route"
	local group_name="l3_drops"
	local mz_pid

	RET=0
@@ -542,7 +531,7 @@ __blackhole_route_test()
		-B $dip -d 1msec -q &
	mz_pid=$!

	devlink_trap_drop_test $trap_name $group_name $rp2 101
	devlink_trap_drop_test $trap_name $rp2 101
	log_test "Blackhole route: IPv$flags"

	devlink_trap_drop_cleanup $mz_pid $rp2 $proto 1 101
@@ -558,7 +547,6 @@ blackhole_route_test()
irif_disabled_test()
{
	local trap_name="irif_disabled"
	local group_name="l3_drops"
	local t0_packets t0_bytes
	local t1_packets t1_bytes
	local mz_pid
@@ -613,7 +601,6 @@ irif_disabled_test()
erif_disabled_test()
{
	local trap_name="erif_disabled"
	local group_name="l3_drops"
	local t0_packets t0_bytes
	local t1_packets t1_bytes
	local mz_pid
Loading