All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Rybchenko <arybchenko@solarflare.com>
To: <dev@dpdk.org>
Cc: Ivan Malov <ivan.malov@oktetlabs.ru>
Subject: [dpdk-dev] [PATCH v2 10/62] common/sfc_efx/base: add a match spec validate API
Date: Tue, 20 Oct 2020 10:12:50 +0100	[thread overview]
Message-ID: <1603185222-14831-11-git-send-email-arybchenko@solarflare.com> (raw)
In-Reply-To: <1603185222-14831-1-git-send-email-arybchenko@solarflare.com>

From: Ivan Malov <ivan.malov@oktetlabs.ru>

MAE has restrictions on what kind of mask a particular field can have in a
match specification. Add an API for client drivers to check specifications.

The patch defines a field description list, whilst the list itself is
left empty. This is to provide a general idea of how field properties
will be used to validate a match specification. Particular fields
will be added to the list by follow-up patches.

Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
 drivers/common/sfc_efx/base/efx.h             |  18 ++
 drivers/common/sfc_efx/base/efx_impl.h        |  17 ++
 drivers/common/sfc_efx/base/efx_mae.c         | 262 ++++++++++++++++++
 drivers/common/sfc_efx/base/efx_mcdi.h        |   4 +
 .../sfc_efx/rte_common_sfc_efx_version.map    |   1 +
 5 files changed, 302 insertions(+)

diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h
index 40c5968ea9..094fad6367 100644
--- a/drivers/common/sfc_efx/base/efx.h
+++ b/drivers/common/sfc_efx/base/efx.h
@@ -4080,6 +4080,24 @@ efx_mae_match_spec_fini(
 	__in				efx_nic_t *enp,
 	__in				efx_mae_match_spec_t *spec);
 
+typedef enum efx_mae_field_id_e {
+	EFX_MAE_FIELD_NIDS
+} efx_mae_field_id_t;
+
+/*
+ * Make sure that match fields known by EFX have proper masks set
+ * in the match specification as per requirements of SF-122526-TC.
+ *
+ * In the case efx_mae_field_id_t lacks named identifiers for any
+ * fields which the FW maintains with support status MATCH_ALWAYS,
+ * the validation result may not be accurate.
+ */
+LIBEFX_API
+extern	__checkReturn			boolean_t
+efx_mae_match_spec_is_valid(
+	__in				efx_nic_t *enp,
+	__in				const efx_mae_match_spec_t *spec);
+
 #endif /* EFSYS_OPT_MAE */
 
 #ifdef	__cplusplus
diff --git a/drivers/common/sfc_efx/base/efx_impl.h b/drivers/common/sfc_efx/base/efx_impl.h
index 931989f17a..2b872bb62e 100644
--- a/drivers/common/sfc_efx/base/efx_impl.h
+++ b/drivers/common/sfc_efx/base/efx_impl.h
@@ -782,8 +782,22 @@ typedef struct efx_proxy_ops_s {
 
 #if EFSYS_OPT_MAE
 
+typedef struct efx_mae_field_cap_s {
+	uint32_t			emfc_support;
+	boolean_t			emfc_mask_affects_class;
+	boolean_t			emfc_match_affects_class;
+} efx_mae_field_cap_t;
+
 typedef struct efx_mae_s {
 	uint32_t			em_max_n_action_prios;
+	/*
+	 * The number of MAE field IDs recognised by the FW implementation.
+	 * Any field ID greater than or equal to this value is unsupported.
+	 */
+	uint32_t			em_max_nfields;
+	/** Action rule match field capabilities. */
+	efx_mae_field_cap_t		*em_action_rule_field_caps;
+	size_t				em_action_rule_field_caps_size;
 } efx_mae_t;
 
 #endif /* EFSYS_OPT_MAE */
@@ -1680,6 +1694,9 @@ efx_pci_xilinx_cap_tbl_find(
 struct efx_mae_match_spec_s {
 	efx_mae_rule_type_t		emms_type;
 	uint32_t			emms_prio;
+	union emms_mask_value_pairs {
+		uint8_t			action[MAE_FIELD_MASK_VALUE_PAIRS_LEN];
+	} emms_mask_value_pairs;
 };
 
 #endif /* EFSYS_OPT_MAE */
diff --git a/drivers/common/sfc_efx/base/efx_mae.c b/drivers/common/sfc_efx/base/efx_mae.c
index b1ebc93714..9e22c3d507 100644
--- a/drivers/common/sfc_efx/base/efx_mae.c
+++ b/drivers/common/sfc_efx/base/efx_mae.c
@@ -42,8 +42,93 @@ efx_mae_get_capabilities(
 	maep->em_max_n_action_prios =
 	    MCDI_OUT_DWORD(req, MAE_GET_CAPS_OUT_ACTION_PRIOS);
 
+	maep->em_max_nfields =
+	    MCDI_OUT_DWORD(req, MAE_GET_CAPS_OUT_MATCH_FIELD_COUNT);
+
+	return (0);
+
+fail2:
+	EFSYS_PROBE(fail2);
+fail1:
+	EFSYS_PROBE1(fail1, efx_rc_t, rc);
+	return (rc);
+}
+
+static	__checkReturn			efx_rc_t
+efx_mae_get_action_rule_caps(
+	__in				efx_nic_t *enp,
+	__in				unsigned int field_ncaps,
+	__out_ecount(field_ncaps)	efx_mae_field_cap_t *field_caps)
+{
+	efx_mcdi_req_t req;
+	EFX_MCDI_DECLARE_BUF(payload,
+	    MC_CMD_MAE_GET_AR_CAPS_IN_LEN,
+	    MC_CMD_MAE_GET_AR_CAPS_OUT_LENMAX_MCDI2);
+	unsigned int mcdi_field_ncaps;
+	unsigned int i;
+	efx_rc_t rc;
+
+	if (MC_CMD_MAE_GET_AR_CAPS_OUT_LEN(field_ncaps) >
+	    MC_CMD_MAE_GET_AR_CAPS_OUT_LENMAX_MCDI2) {
+		rc = EINVAL;
+		goto fail1;
+	}
+
+	req.emr_cmd = MC_CMD_MAE_GET_AR_CAPS;
+	req.emr_in_buf = payload;
+	req.emr_in_length = MC_CMD_MAE_GET_AR_CAPS_IN_LEN;
+	req.emr_out_buf = payload;
+	req.emr_out_length = MC_CMD_MAE_GET_AR_CAPS_OUT_LEN(field_ncaps);
+
+	efx_mcdi_execute(enp, &req);
+
+	if (req.emr_rc != 0) {
+		rc = req.emr_rc;
+		goto fail2;
+	}
+
+	mcdi_field_ncaps = MCDI_OUT_DWORD(req, MAE_GET_OR_CAPS_OUT_COUNT);
+
+	if (req.emr_out_length_used <
+	    MC_CMD_MAE_GET_AR_CAPS_OUT_LEN(mcdi_field_ncaps)) {
+		rc = EMSGSIZE;
+		goto fail3;
+	}
+
+	if (mcdi_field_ncaps > field_ncaps) {
+		rc = EMSGSIZE;
+		goto fail4;
+	}
+
+	for (i = 0; i < mcdi_field_ncaps; ++i) {
+		uint32_t match_flag;
+		uint32_t mask_flag;
+
+		field_caps[i].emfc_support = MCDI_OUT_INDEXED_DWORD_FIELD(req,
+		    MAE_GET_AR_CAPS_OUT_FIELD_FLAGS, i,
+		    MAE_FIELD_FLAGS_SUPPORT_STATUS);
+
+		match_flag = MCDI_OUT_INDEXED_DWORD_FIELD(req,
+		    MAE_GET_AR_CAPS_OUT_FIELD_FLAGS, i,
+		    MAE_FIELD_FLAGS_MATCH_AFFECTS_CLASS);
+
+		field_caps[i].emfc_match_affects_class =
+		    (match_flag != 0) ? B_TRUE : B_FALSE;
+
+		mask_flag = MCDI_OUT_INDEXED_DWORD_FIELD(req,
+		    MAE_GET_AR_CAPS_OUT_FIELD_FLAGS, i,
+		    MAE_FIELD_FLAGS_MASK_AFFECTS_CLASS);
+
+		field_caps[i].emfc_mask_affects_class =
+		    (mask_flag != 0) ? B_TRUE : B_FALSE;
+	}
+
 	return (0);
 
+fail4:
+	EFSYS_PROBE(fail4);
+fail3:
+	EFSYS_PROBE(fail3);
 fail2:
 	EFSYS_PROBE(fail2);
 fail1:
@@ -56,6 +141,8 @@ efx_mae_init(
 	__in				efx_nic_t *enp)
 {
 	const efx_nic_cfg_t *encp = efx_nic_cfg_get(enp);
+	efx_mae_field_cap_t *ar_fcaps;
+	size_t ar_fcaps_size;
 	efx_mae_t *maep;
 	efx_rc_t rc;
 
@@ -76,8 +163,27 @@ efx_mae_init(
 	if (rc != 0)
 		goto fail3;
 
+	ar_fcaps_size = maep->em_max_nfields * sizeof (*ar_fcaps);
+	EFSYS_KMEM_ALLOC(enp->en_esip, ar_fcaps_size, ar_fcaps);
+	if (ar_fcaps == NULL) {
+		rc = ENOMEM;
+		goto fail4;
+	}
+
+	maep->em_action_rule_field_caps_size = ar_fcaps_size;
+	maep->em_action_rule_field_caps = ar_fcaps;
+
+	rc = efx_mae_get_action_rule_caps(enp, maep->em_max_nfields, ar_fcaps);
+	if (rc != 0)
+		goto fail5;
+
 	return (0);
 
+fail5:
+	EFSYS_PROBE(fail5);
+	EFSYS_KMEM_FREE(enp->en_esip, ar_fcaps_size, ar_fcaps);
+fail4:
+	EFSYS_PROBE(fail4);
 fail3:
 	EFSYS_PROBE(fail3);
 	EFSYS_KMEM_FREE(enp->en_esip, sizeof (struct efx_mae_s), enp->en_maep);
@@ -99,6 +205,8 @@ efx_mae_fini(
 	if (encp->enc_mae_supported == B_FALSE)
 		return;
 
+	EFSYS_KMEM_FREE(enp->en_esip, maep->em_action_rule_field_caps_size,
+	    maep->em_action_rule_field_caps);
 	EFSYS_KMEM_FREE(enp->en_esip, sizeof (*maep), maep);
 	enp->en_maep = NULL;
 }
@@ -172,4 +280,158 @@ efx_mae_match_spec_fini(
 	EFSYS_KMEM_FREE(enp->en_esip, sizeof (*spec), spec);
 }
 
+/* Named identifiers which are valid indices to efx_mae_field_cap_t */
+typedef enum efx_mae_field_cap_id_e {
+	EFX_MAE_FIELD_CAP_NIDS
+} efx_mae_field_cap_id_t;
+
+typedef enum efx_mae_field_endianness_e {
+	EFX_MAE_FIELD_LE = 0,
+	EFX_MAE_FIELD_BE,
+
+	EFX_MAE_FIELD_ENDIANNESS_NTYPES
+} efx_mae_field_endianness_t;
+
+/*
+ * The following structure is a means to describe an MAE field.
+ * The information in it is meant to be used internally by
+ * APIs for addressing a given field in a mask-value pairs
+ * structure and for validation purposes.
+ */
+typedef struct efx_mae_mv_desc_s {
+	efx_mae_field_cap_id_t		emmd_field_cap_id;
+
+	size_t				emmd_value_size;
+	size_t				emmd_value_offset;
+	size_t				emmd_mask_size;
+	size_t				emmd_mask_offset;
+
+	efx_mae_field_endianness_t	emmd_endianness;
+} efx_mae_mv_desc_t;
+
+/* Indices to this array are provided by efx_mae_field_id_t */
+static const efx_mae_mv_desc_t __efx_mae_action_rule_mv_desc_set[] = {
+};
+
+#define	EFX_MASK_BIT_IS_SET(_mask, _mask_page_nbits, _bit)		\
+	    ((_mask)[(_bit) / (_mask_page_nbits)] &			\
+		    (1ULL << ((_bit) & ((_mask_page_nbits) - 1))))
+
+static inline				boolean_t
+efx_mask_is_prefix(
+	__in				size_t mask_nbytes,
+	__in_bcount(mask_nbytes)	const uint8_t *maskp)
+{
+	boolean_t prev_bit_is_set = B_TRUE;
+	unsigned int i;
+
+	for (i = 0; i < 8 * mask_nbytes; ++i) {
+		boolean_t bit_is_set = EFX_MASK_BIT_IS_SET(maskp, 8, i);
+
+		if (!prev_bit_is_set && bit_is_set)
+			return B_FALSE;
+
+		prev_bit_is_set = bit_is_set;
+	}
+
+	return B_TRUE;
+}
+
+static inline				boolean_t
+efx_mask_is_all_ones(
+	__in				size_t mask_nbytes,
+	__in_bcount(mask_nbytes)	const uint8_t *maskp)
+{
+	unsigned int i;
+	uint8_t t = ~0;
+
+	for (i = 0; i < mask_nbytes; ++i)
+		t &= maskp[i];
+
+	return (t == (uint8_t)(~0));
+}
+
+static inline				boolean_t
+efx_mask_is_all_zeros(
+	__in				size_t mask_nbytes,
+	__in_bcount(mask_nbytes)	const uint8_t *maskp)
+{
+	unsigned int i;
+	uint8_t t = 0;
+
+	for (i = 0; i < mask_nbytes; ++i)
+		t |= maskp[i];
+
+	return (t == 0);
+}
+
+	__checkReturn			boolean_t
+efx_mae_match_spec_is_valid(
+	__in				efx_nic_t *enp,
+	__in				const efx_mae_match_spec_t *spec)
+{
+	efx_mae_t *maep = enp->en_maep;
+	unsigned int field_ncaps = maep->em_max_nfields;
+	const efx_mae_field_cap_t *field_caps;
+	const efx_mae_mv_desc_t *desc_setp;
+	unsigned int desc_set_nentries;
+	boolean_t is_valid = B_TRUE;
+	efx_mae_field_id_t field_id;
+	const uint8_t *mvp;
+
+	switch (spec->emms_type) {
+	case EFX_MAE_RULE_ACTION:
+		field_caps = maep->em_action_rule_field_caps;
+		desc_setp = __efx_mae_action_rule_mv_desc_set;
+		desc_set_nentries =
+		    EFX_ARRAY_SIZE(__efx_mae_action_rule_mv_desc_set);
+		mvp = spec->emms_mask_value_pairs.action;
+		break;
+	default:
+		return (B_FALSE);
+	}
+
+	if (field_caps == NULL)
+		return (B_FALSE);
+
+	for (field_id = 0; field_id < desc_set_nentries; ++field_id) {
+		const efx_mae_mv_desc_t *descp = &desc_setp[field_id];
+		efx_mae_field_cap_id_t field_cap_id = descp->emmd_field_cap_id;
+		const uint8_t *m_buf = mvp + descp->emmd_mask_offset;
+		size_t m_size = descp->emmd_mask_size;
+
+		if (m_size == 0)
+			continue; /* Skip array gap */
+
+		if (field_cap_id >= field_ncaps)
+			break;
+
+		switch (field_caps[field_cap_id].emfc_support) {
+		case MAE_FIELD_SUPPORTED_MATCH_MASK:
+			is_valid = B_TRUE;
+			break;
+		case MAE_FIELD_SUPPORTED_MATCH_PREFIX:
+			is_valid = efx_mask_is_prefix(m_size, m_buf);
+			break;
+		case MAE_FIELD_SUPPORTED_MATCH_OPTIONAL:
+			is_valid = (efx_mask_is_all_ones(m_size, m_buf) ||
+			    efx_mask_is_all_zeros(m_size, m_buf));
+			break;
+		case MAE_FIELD_SUPPORTED_MATCH_ALWAYS:
+			is_valid = efx_mask_is_all_ones(m_size, m_buf);
+			break;
+		case MAE_FIELD_SUPPORTED_MATCH_NEVER:
+		case MAE_FIELD_UNSUPPORTED:
+		default:
+			is_valid = efx_mask_is_all_zeros(m_size, m_buf);
+			break;
+		}
+
+		if (is_valid == B_FALSE)
+			break;
+	}
+
+	return (is_valid);
+}
+
 #endif /* EFSYS_OPT_MAE */
diff --git a/drivers/common/sfc_efx/base/efx_mcdi.h b/drivers/common/sfc_efx/base/efx_mcdi.h
index 77a3d636e2..9dd0a23862 100644
--- a/drivers/common/sfc_efx/base/efx_mcdi.h
+++ b/drivers/common/sfc_efx/base/efx_mcdi.h
@@ -421,6 +421,10 @@ efx_mcdi_phy_module_get_info(
 	EFX_DWORD_FIELD(*MCDI_OUT2(_emr, efx_dword_t, _ofst),		\
 			MC_CMD_ ## _field)
 
+#define	MCDI_OUT_INDEXED_DWORD_FIELD(_emr, _ofst, _idx, _field)		\
+	EFX_DWORD_FIELD(*(MCDI_OUT2(_emr, efx_dword_t, _ofst) +		\
+			(_idx)), _field)
+
 #define	MCDI_EV_FIELD(_eqp, _field)					\
 	EFX_QWORD_FIELD(*_eqp, MCDI_EVENT_ ## _field)
 
diff --git a/drivers/common/sfc_efx/rte_common_sfc_efx_version.map b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map
index 57a6c96b3e..0e6d44b6dc 100644
--- a/drivers/common/sfc_efx/rte_common_sfc_efx_version.map
+++ b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map
@@ -90,6 +90,7 @@ INTERNAL {
 	efx_mae_init;
 	efx_mae_match_spec_fini;
 	efx_mae_match_spec_init;
+	efx_mae_match_spec_is_valid;
 
 	efx_mcdi_fini;
 	efx_mcdi_get_proxy_handle;
-- 
2.17.1


  parent reply	other threads:[~2020-10-20  9:22 UTC|newest]

Thread overview: 133+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-20  8:47 [dpdk-dev] [PATCH 00/62] net/sfc: support flow API transfer rules Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 01/62] common/sfc_efx/base: add MAE definitions to MCDI Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 02/62] common/sfc_efx/base: indicate support for MAE Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 03/62] net/sfc: add a stub for attaching to MAE Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 04/62] common/sfc_efx/base: add MAE init/fini APIs Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 05/62] drivers: init/fini MAE on attach/detach Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 06/62] common/sfc_efx/base: add an MAE limit query API Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 07/62] net/sfc: add the concept of MAE (transfer) rules Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 08/62] common/sfc_efx/base: add match spec init/fini APIs Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 09/62] net/sfc: add pattern parsing stub to MAE backend Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 10/62] common/sfc_efx/base: add a match spec validate API Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 11/62] net/sfc: validate match spec in MAE backend Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 12/62] common/sfc_efx/base: add a match specs class comparison API Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 13/62] net/sfc: add verify method to flow validate path Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 14/62] common/sfc_efx/base: add action set spec init/fini APIs Andrew Rybchenko
2020-10-27  8:56   ` Ali Alnubani
2020-10-20  8:47 ` [dpdk-dev] [PATCH 15/62] net/sfc: add actions parsing stub to MAE backend Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 16/62] common/sfc_efx/base: support setting a PPORT in a match spec Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 17/62] net/sfc: support flow item PHY PORT in MAE backend Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 18/62] common/sfc_efx/base: add MAE match fields for Ethernet Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 19/62] net/sfc: support flow item ETH in MAE backend Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 20/62] common/sfc_efx/base: support adding DELIVER action to a set Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 21/62] net/sfc: support flow action PHY PORT in MAE backend Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 22/62] common/sfc_efx/base: add MAE action set provisioning APIs Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 23/62] common/sfc_efx/base: add MAE action rule " Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 24/62] net/sfc: implement flow insert/remove in MAE backend Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 25/62] common/sfc_efx/base: support adding VLAN POP action to a set Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 26/62] net/sfc: support flow action OF POP VLAN in MAE backend Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 27/62] common/sfc_efx/base: support adding VLAN PUSH action Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 28/62] net/sfc: add facilities to handle bundles of actions Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 29/62] net/sfc: support VLAN PUSH actions in MAE backend Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 30/62] common/sfc_efx/base: support adding FLAG action to a set Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 31/62] net/sfc: support flow action FLAG in MAE backend Andrew Rybchenko
2020-10-20  8:47 ` [dpdk-dev] [PATCH 32/62] common/sfc_efx/base: support adding MARK action to a set Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 33/62] net/sfc: support flow action MARK in MAE backend Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 34/62] common/sfc_efx/base: add named constant for invalid VF Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 35/62] common/sfc_efx/base: add an API to get MPORT of a PF/VF Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 36/62] net/sfc: support flow items PF and VF in transfer rules Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 37/62] net/sfc: support flow actions " Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 38/62] common/sfc_efx/base: add an API for adding action DROP Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 39/62] net/sfc: support flow action DROP in transfer rules Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 40/62] common/sfc_efx/base: refactor version / boot info get helper Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 41/62] common/sfc_efx/base: add an API for querying board info Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 42/62] net/sfc: add HW switch ID helpers Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 43/62] net/sfc: support the concept of RTE switch domains/ports Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 44/62] net/sfc: support flow action PORT ID in transfer rules Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 45/62] net/sfc: support flow item " Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 46/62] common/sfc_efx/base: add MAE match fields for VLAN Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 47/62] net/sfc: support flow item VLAN in transfer rules Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 48/62] common/sfc_efx/base: add MAE match fields for IPv4 Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 49/62] net/sfc: support flow item IPV4 in transfer rules Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 50/62] common/sfc_efx/base: add MAE match fields for IPv6 Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 51/62] net/sfc: support flow item IPV6 in transfer rules Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 52/62] common/sfc_efx/base: add MAE match fields for TCP and UDP Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 53/62] net/sfc: support flow item TCP in transfer rules Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 54/62] net/sfc: support flow item UDP " Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 55/62] common/sfc_efx/base: indicate MAE support for encapsulation Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 56/62] common/sfc_efx/base: add MAE encap. match fields Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 57/62] common/sfc_efx/base: add MAE match field VNET ID for tunnels Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 58/62] common/sfc_efx/base: add an API to compare match specs Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 59/62] common/sfc_efx/base: validate and compare outer " Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 60/62] common/sfc_efx/base: support outer rule provisioning Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 61/62] net/sfc: support encap. flow items in transfer rules Andrew Rybchenko
2020-10-20  8:48 ` [dpdk-dev] [PATCH 62/62] doc: advertise flow API transfer rules support in net/sfc Andrew Rybchenko
2020-10-20  8:55 ` [dpdk-dev] [PATCH 00/62] net/sfc: support flow API transfer rules Andrew Rybchenko
2020-10-20  9:12 ` [dpdk-dev] [PATCH v2 " Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 01/62] common/sfc_efx/base: add MAE definitions to MCDI Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 02/62] common/sfc_efx/base: indicate support for MAE Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 03/62] net/sfc: add a stub for attaching to MAE Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 04/62] common/sfc_efx/base: add MAE init/fini APIs Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 05/62] drivers: init/fini MAE on attach/detach Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 06/62] common/sfc_efx/base: add an MAE limit query API Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 07/62] net/sfc: add the concept of MAE (transfer) rules Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 08/62] common/sfc_efx/base: add match spec init/fini APIs Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 09/62] net/sfc: add pattern parsing stub to MAE backend Andrew Rybchenko
2020-10-20  9:12   ` Andrew Rybchenko [this message]
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 11/62] net/sfc: validate match spec in " Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 12/62] common/sfc_efx/base: add a match specs class comparison API Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 13/62] net/sfc: add verify method to flow validate path Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 14/62] common/sfc_efx/base: add action set spec init/fini APIs Andrew Rybchenko
2020-10-27  9:13     ` Ali Alnubani
2020-10-27 11:39       ` Ferruh Yigit
2020-10-27 12:03         ` Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 15/62] net/sfc: add actions parsing stub to MAE backend Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 16/62] common/sfc_efx/base: support setting a PPORT in a match spec Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 17/62] net/sfc: support flow item PHY PORT in MAE backend Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 18/62] common/sfc_efx/base: add MAE match fields for Ethernet Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 19/62] net/sfc: support flow item ETH in MAE backend Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 20/62] common/sfc_efx/base: support adding DELIVER action to a set Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 21/62] net/sfc: support flow action PHY PORT in MAE backend Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 22/62] common/sfc_efx/base: add MAE action set provisioning APIs Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 23/62] common/sfc_efx/base: add MAE action rule " Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 24/62] net/sfc: implement flow insert/remove in MAE backend Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 25/62] common/sfc_efx/base: support adding VLAN POP action to a set Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 26/62] net/sfc: support flow action OF POP VLAN in MAE backend Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 27/62] common/sfc_efx/base: support adding VLAN PUSH action Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 28/62] net/sfc: add facilities to handle bundles of actions Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 29/62] net/sfc: support VLAN PUSH actions in MAE backend Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 30/62] common/sfc_efx/base: support adding FLAG action to a set Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 31/62] net/sfc: support flow action FLAG in MAE backend Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 32/62] common/sfc_efx/base: support adding MARK action to a set Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 33/62] net/sfc: support flow action MARK in MAE backend Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 34/62] common/sfc_efx/base: add named constant for invalid VF Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 35/62] common/sfc_efx/base: add an API to get MPORT of a PF/VF Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 36/62] net/sfc: support flow items PF and VF in transfer rules Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 37/62] net/sfc: support flow actions " Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 38/62] common/sfc_efx/base: add an API for adding action DROP Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 39/62] net/sfc: support flow action DROP in transfer rules Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 40/62] common/sfc_efx/base: refactor version / boot info get helper Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 41/62] common/sfc_efx/base: add an API for querying board info Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 42/62] net/sfc: add HW switch ID helpers Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 43/62] net/sfc: support the concept of RTE switch domains/ports Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 44/62] net/sfc: support flow action PORT ID in transfer rules Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 45/62] net/sfc: support flow item " Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 46/62] common/sfc_efx/base: add MAE match fields for VLAN Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 47/62] net/sfc: support flow item VLAN in transfer rules Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 48/62] common/sfc_efx/base: add MAE match fields for IPv4 Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 49/62] net/sfc: support flow item IPV4 in transfer rules Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 50/62] common/sfc_efx/base: add MAE match fields for IPv6 Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 51/62] net/sfc: support flow item IPV6 in transfer rules Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 52/62] common/sfc_efx/base: add MAE match fields for TCP and UDP Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 53/62] net/sfc: support flow item TCP in transfer rules Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 54/62] net/sfc: support flow item UDP " Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 55/62] common/sfc_efx/base: indicate MAE support for encapsulation Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 56/62] common/sfc_efx/base: add MAE encap. match fields Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 57/62] common/sfc_efx/base: add MAE match field VNET ID for tunnels Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 58/62] common/sfc_efx/base: add an API to compare match specs Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 59/62] common/sfc_efx/base: validate and compare outer " Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 60/62] common/sfc_efx/base: support outer rule provisioning Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 61/62] net/sfc: support encap. flow items in transfer rules Andrew Rybchenko
2020-10-20  9:13   ` [dpdk-dev] [PATCH v2 62/62] doc: advertise flow API transfer rules support in net/sfc Andrew Rybchenko
2020-10-21 11:13   ` [dpdk-dev] [PATCH v2 00/62] net/sfc: support flow API transfer rules Ferruh Yigit
2020-10-21 12:49     ` Andrew Rybchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1603185222-14831-11-git-send-email-arybchenko@solarflare.com \
    --to=arybchenko@solarflare.com \
    --cc=dev@dpdk.org \
    --cc=ivan.malov@oktetlabs.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.