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 47/62] net/sfc: support flow item VLAN in transfer rules
Date: Tue, 20 Oct 2020 10:13:27 +0100	[thread overview]
Message-ID: <1603185222-14831-48-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>

Add support for this flow item to MAE-specific RTE flow implementation.

In a pattern, a L2 item preceding an item VLAN must have
correct "type" ("inner_type") set depending on the total
number of VLAN tags (double-tagging is supported):

"pattern eth type is X / vlan / end",
X = 0x8100, or 0x88a8, or 0x9100, or 0x9200, or 0x9300

"pattern eth type is X / vlan inner_type is 0x8100 / vlan / end"
X = 0x88a8, or 0x9100, or 0x9200, or 0x9300

Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
 doc/guides/nics/sfc_efx.rst |   2 +
 drivers/net/sfc/sfc_mae.c   | 265 +++++++++++++++++++++++++++++++++++-
 drivers/net/sfc/sfc_mae.h   |  47 +++++++
 3 files changed, 311 insertions(+), 3 deletions(-)

diff --git a/doc/guides/nics/sfc_efx.rst b/doc/guides/nics/sfc_efx.rst
index e1cacf55ff..adee0cd670 100644
--- a/doc/guides/nics/sfc_efx.rst
+++ b/doc/guides/nics/sfc_efx.rst
@@ -200,6 +200,8 @@ Supported pattern items (***transfer*** rules):
 
 - ETH
 
+- VLAN (double-tagging is supported)
+
 Supported actions (***transfer*** rules):
 
 - OF_POP_VLAN
diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c
index 14e6d33c55..cc22fee6fe 100644
--- a/drivers/net/sfc/sfc_mae.c
+++ b/drivers/net/sfc/sfc_mae.c
@@ -260,6 +260,122 @@ sfc_mae_flow_cleanup(struct sfc_adapter *sa,
 		efx_mae_match_spec_fini(sa->nic, spec_mae->match_spec);
 }
 
+static int
+sfc_mae_set_ethertypes(struct sfc_mae_parse_ctx *ctx)
+{
+	efx_mae_match_spec_t *efx_spec = ctx->match_spec_action;
+	struct sfc_mae_pattern_data *pdata = &ctx->pattern_data;
+	const efx_mae_field_id_t field_ids[] = {
+		EFX_MAE_FIELD_VLAN0_PROTO_BE,
+		EFX_MAE_FIELD_VLAN1_PROTO_BE,
+	};
+	const struct sfc_mae_ethertype *et;
+	unsigned int i;
+	int rc;
+
+	/*
+	 * In accordance with RTE flow API convention, the innermost L2
+	 * item's "type" ("inner_type") is a L3 EtherType. If there is
+	 * no L3 item, it's 0x0000/0x0000.
+	 */
+	et = &pdata->ethertypes[pdata->nb_vlan_tags];
+	rc = efx_mae_match_spec_field_set(efx_spec, EFX_MAE_FIELD_ETHER_TYPE_BE,
+					  sizeof(et->value),
+					  (const uint8_t *)&et->value,
+					  sizeof(et->mask),
+					  (const uint8_t *)&et->mask);
+	if (rc != 0)
+		return rc;
+
+	/*
+	 * sfc_mae_rule_parse_item_vlan() has already made sure
+	 * that pdata->nb_vlan_tags does not exceed this figure.
+	 */
+	RTE_BUILD_BUG_ON(SFC_MAE_MATCH_VLAN_MAX_NTAGS != 2);
+
+	for (i = 0; i < pdata->nb_vlan_tags; ++i) {
+		et = &pdata->ethertypes[i];
+
+		rc = efx_mae_match_spec_field_set(efx_spec, field_ids[i],
+						  sizeof(et->value),
+						  (const uint8_t *)&et->value,
+						  sizeof(et->mask),
+						  (const uint8_t *)&et->mask);
+		if (rc != 0)
+			return rc;
+	}
+
+	return 0;
+}
+
+static int
+sfc_mae_rule_process_pattern_data(struct sfc_mae_parse_ctx *ctx,
+				  struct rte_flow_error *error)
+{
+	struct sfc_mae_pattern_data *pdata = &ctx->pattern_data;
+	struct sfc_mae_ethertype *ethertypes = pdata->ethertypes;
+	const rte_be16_t supported_tpids[] = {
+		/* VLAN standard TPID (always the first element) */
+		RTE_BE16(RTE_ETHER_TYPE_VLAN),
+
+		/* Double-tagging TPIDs */
+		RTE_BE16(RTE_ETHER_TYPE_QINQ),
+		RTE_BE16(RTE_ETHER_TYPE_QINQ1),
+		RTE_BE16(RTE_ETHER_TYPE_QINQ2),
+		RTE_BE16(RTE_ETHER_TYPE_QINQ3),
+	};
+	unsigned int nb_supported_tpids = RTE_DIM(supported_tpids);
+	unsigned int ethertype_idx;
+	int rc;
+
+	/*
+	 * sfc_mae_rule_parse_item_vlan() has already made sure
+	 * that pdata->nb_vlan_tags does not exceed this figure.
+	 */
+	RTE_BUILD_BUG_ON(SFC_MAE_MATCH_VLAN_MAX_NTAGS != 2);
+
+	for (ethertype_idx = 0;
+	     ethertype_idx < pdata->nb_vlan_tags; ++ethertype_idx) {
+		unsigned int tpid_idx;
+
+		/* Exact match is supported only. */
+		if (ethertypes[ethertype_idx].mask != RTE_BE16(0xffff)) {
+			rc = EINVAL;
+			goto fail;
+		}
+
+		for (tpid_idx = pdata->nb_vlan_tags - ethertype_idx - 1;
+		     tpid_idx < nb_supported_tpids; ++tpid_idx) {
+			if (ethertypes[ethertype_idx].value ==
+			    supported_tpids[tpid_idx])
+				break;
+		}
+
+		if (tpid_idx == nb_supported_tpids) {
+			rc = EINVAL;
+			goto fail;
+		}
+
+		nb_supported_tpids = 1;
+	}
+
+	/*
+	 * Now, when the number of VLAN tags is known, set fields
+	 * ETHER_TYPE, VLAN0_PROTO and VLAN1_PROTO so that the first
+	 * one is either a valid L3 EtherType (or 0x0000/0x0000),
+	 * and the last two are valid TPIDs (or 0x0000/0x0000).
+	 */
+	rc = sfc_mae_set_ethertypes(ctx);
+	if (rc != 0)
+		goto fail;
+
+	return 0;
+
+fail:
+	return rte_flow_error_set(error, rc, RTE_FLOW_ERROR_TYPE_ITEM, NULL,
+				  "Failed to process pattern data");
+}
+
 static int
 sfc_mae_rule_parse_item_port_id(const struct rte_flow_item *item,
 				struct sfc_flow_parse_ctx *ctx,
@@ -486,6 +602,16 @@ sfc_mae_rule_parse_item_vf(const struct rte_flow_item *item,
 	return 0;
 }
 
+/*
+ * Having this field ID in a field locator means that this
+ * locator cannot be used to actually set the field at the
+ * time when the corresponding item gets encountered. Such
+ * fields get stashed in the parsing context instead. This
+ * is required to resolve dependencies between the stashed
+ * fields. See sfc_mae_rule_process_pattern_data().
+ */
+#define SFC_MAE_FIELD_HANDLING_DEFERRED	EFX_MAE_FIELD_NIDS
+
 struct sfc_mae_field_locator {
 	efx_mae_field_id_t		field_id;
 	size_t				size;
@@ -522,6 +648,9 @@ sfc_mae_parse_item(const struct sfc_mae_field_locator *field_locators,
 	for (i = 0; i < nb_field_locators; ++i) {
 		const struct sfc_mae_field_locator *fl = &field_locators[i];
 
+		if (fl->field_id == SFC_MAE_FIELD_HANDLING_DEFERRED)
+			continue;
+
 		rc = efx_mae_match_spec_field_set(efx_spec, fl->field_id,
 						  fl->size, spec + fl->ofst,
 						  fl->size, mask + fl->ofst);
@@ -539,7 +668,11 @@ sfc_mae_parse_item(const struct sfc_mae_field_locator *field_locators,
 
 static const struct sfc_mae_field_locator flocs_eth[] = {
 	{
-		EFX_MAE_FIELD_ETHER_TYPE_BE,
+		/*
+		 * This locator is used only for building supported fields mask.
+		 * The field is handled by sfc_mae_rule_process_pattern_data().
+		 */
+		SFC_MAE_FIELD_HANDLING_DEFERRED,
 		RTE_SIZEOF_FIELD(struct rte_flow_item_eth, type),
 		offsetof(struct rte_flow_item_eth, type),
 	},
@@ -577,14 +710,128 @@ sfc_mae_rule_parse_item_eth(const struct rte_flow_item *item,
 	if (rc != 0)
 		return rc;
 
-	/* If "spec" is not set, could be any Ethernet */
-	if (spec == NULL)
+	if (spec != NULL) {
+		struct sfc_mae_pattern_data *pdata = &ctx_mae->pattern_data;
+		struct sfc_mae_ethertype *ethertypes = pdata->ethertypes;
+		const struct rte_flow_item_eth *item_spec;
+		const struct rte_flow_item_eth *item_mask;
+
+		item_spec = (const struct rte_flow_item_eth *)spec;
+		item_mask = (const struct rte_flow_item_eth *)mask;
+
+		ethertypes[0].value = item_spec->type;
+		ethertypes[0].mask = item_mask->type;
+	} else {
+		/*
+		 * The specification is empty. This is wrong in the case
+		 * when there are more network patterns in line. Other
+		 * than that, any Ethernet can match. All of that is
+		 * checked at the end of parsing.
+		 */
 		return 0;
+	}
 
 	return sfc_mae_parse_item(flocs_eth, RTE_DIM(flocs_eth), spec, mask,
 				  ctx_mae->match_spec_action, error);
 }
 
+static const struct sfc_mae_field_locator flocs_vlan[] = {
+	/* Outermost tag */
+	{
+		EFX_MAE_FIELD_VLAN0_TCI_BE,
+		RTE_SIZEOF_FIELD(struct rte_flow_item_vlan, tci),
+		offsetof(struct rte_flow_item_vlan, tci),
+	},
+	{
+		/*
+		 * This locator is used only for building supported fields mask.
+		 * The field is handled by sfc_mae_rule_process_pattern_data().
+		 */
+		SFC_MAE_FIELD_HANDLING_DEFERRED,
+		RTE_SIZEOF_FIELD(struct rte_flow_item_vlan, inner_type),
+		offsetof(struct rte_flow_item_vlan, inner_type),
+	},
+
+	/* Innermost tag */
+	{
+		EFX_MAE_FIELD_VLAN1_TCI_BE,
+		RTE_SIZEOF_FIELD(struct rte_flow_item_vlan, tci),
+		offsetof(struct rte_flow_item_vlan, tci),
+	},
+	{
+		/*
+		 * This locator is used only for building supported fields mask.
+		 * The field is handled by sfc_mae_rule_process_pattern_data().
+		 */
+		SFC_MAE_FIELD_HANDLING_DEFERRED,
+		RTE_SIZEOF_FIELD(struct rte_flow_item_vlan, inner_type),
+		offsetof(struct rte_flow_item_vlan, inner_type),
+	},
+};
+
+static int
+sfc_mae_rule_parse_item_vlan(const struct rte_flow_item *item,
+			     struct sfc_flow_parse_ctx *ctx,
+			     struct rte_flow_error *error)
+{
+	struct sfc_mae_parse_ctx *ctx_mae = ctx->mae;
+	struct sfc_mae_pattern_data *pdata = &ctx_mae->pattern_data;
+	const struct sfc_mae_field_locator *flocs;
+	struct rte_flow_item_vlan supp_mask;
+	const uint8_t *spec = NULL;
+	const uint8_t *mask = NULL;
+	unsigned int nb_flocs;
+	int rc;
+
+	RTE_BUILD_BUG_ON(SFC_MAE_MATCH_VLAN_MAX_NTAGS != 2);
+
+	if (pdata->nb_vlan_tags == SFC_MAE_MATCH_VLAN_MAX_NTAGS) {
+		return rte_flow_error_set(error, ENOTSUP,
+				RTE_FLOW_ERROR_TYPE_ITEM, item,
+				"Can't match that many VLAN tags");
+	}
+
+	nb_flocs = RTE_DIM(flocs_vlan) / SFC_MAE_MATCH_VLAN_MAX_NTAGS;
+	flocs = flocs_vlan + pdata->nb_vlan_tags * nb_flocs;
+
+	/* If parsing fails, this can remain incremented. */
+	++pdata->nb_vlan_tags;
+
+	sfc_mae_item_build_supp_mask(flocs, nb_flocs,
+				     &supp_mask, sizeof(supp_mask));
+
+	rc = sfc_flow_parse_init(item,
+				 (const void **)&spec, (const void **)&mask,
+				 (const void *)&supp_mask,
+				 &rte_flow_item_vlan_mask,
+				 sizeof(struct rte_flow_item_vlan), error);
+	if (rc != 0)
+		return rc;
+
+	if (spec != NULL) {
+		struct sfc_mae_ethertype *ethertypes = pdata->ethertypes;
+		const struct rte_flow_item_vlan *item_spec;
+		const struct rte_flow_item_vlan *item_mask;
+
+		item_spec = (const struct rte_flow_item_vlan *)spec;
+		item_mask = (const struct rte_flow_item_vlan *)mask;
+
+		ethertypes[pdata->nb_vlan_tags].value = item_spec->inner_type;
+		ethertypes[pdata->nb_vlan_tags].mask = item_mask->inner_type;
+	} else {
+		/*
+		 * The specification is empty. This is wrong in the case
+		 * when there are more network patterns in line. Other
+		 * than that, any Ethernet can match. All of that is
+		 * checked at the end of parsing.
+		 */
+		return 0;
+	}
+
+	return sfc_mae_parse_item(flocs, nb_flocs, spec, mask,
+				  ctx_mae->match_spec_action, error);
+}
+
 static const struct sfc_flow_item sfc_flow_items[] = {
 	{
 		.type = RTE_FLOW_ITEM_TYPE_PORT_ID,
@@ -637,6 +884,13 @@ static const struct sfc_flow_item sfc_flow_items[] = {
 		.ctx_type = SFC_FLOW_PARSE_CTX_MAE,
 		.parse = sfc_mae_rule_parse_item_eth,
 	},
+	{
+		.type = RTE_FLOW_ITEM_TYPE_VLAN,
+		.prev_layer = SFC_FLOW_ITEM_L2,
+		.layer = SFC_FLOW_ITEM_L2,
+		.ctx_type = SFC_FLOW_PARSE_CTX_MAE,
+		.parse = sfc_mae_rule_parse_item_vlan,
+	},
 };
 
 int
@@ -670,6 +924,10 @@ sfc_mae_rule_parse_pattern(struct sfc_adapter *sa,
 	if (rc != 0)
 		goto fail_parse_pattern;
 
+	rc = sfc_mae_rule_process_pattern_data(&ctx_mae, error);
+	if (rc != 0)
+		goto fail_process_pattern_data;
+
 	if (!efx_mae_match_spec_is_valid(sa->nic, ctx_mae.match_spec_action)) {
 		rc = rte_flow_error_set(error, ENOTSUP,
 					RTE_FLOW_ERROR_TYPE_ITEM, NULL,
@@ -682,6 +940,7 @@ sfc_mae_rule_parse_pattern(struct sfc_adapter *sa,
 	return 0;
 
 fail_validate_match_spec_action:
+fail_process_pattern_data:
 fail_parse_pattern:
 	efx_mae_match_spec_fini(sa->nic, ctx_mae.match_spec_action);
 
diff --git a/drivers/net/sfc/sfc_mae.h b/drivers/net/sfc/sfc_mae.h
index f92e62dcbe..e4e8ab67a5 100644
--- a/drivers/net/sfc/sfc_mae.h
+++ b/drivers/net/sfc/sfc_mae.h
@@ -62,10 +62,57 @@ struct sfc_mae {
 struct sfc_adapter;
 struct sfc_flow_spec;
 
+/** This implementation supports double-tagging */
+#define SFC_MAE_MATCH_VLAN_MAX_NTAGS	(2)
+
+/** It is possible to keep track of one item ETH and two items VLAN */
+#define SFC_MAE_L2_MAX_NITEMS		(SFC_MAE_MATCH_VLAN_MAX_NTAGS + 1)
+
+/** Auxiliary entry format to keep track of L2 "type" ("inner_type") */
+struct sfc_mae_ethertype {
+	rte_be16_t	value;
+	rte_be16_t	mask;
+};
+
+struct sfc_mae_pattern_data {
+	/**
+	 * Keeps track of "type" ("inner_type") mask and value for each
+	 * parsed L2 item in a pattern. These values/masks get filled
+	 * in MAE match specification at the end of parsing. Also, this
+	 * information is used to conduct consistency checks:
+	 *
+	 * - If an item ETH is followed by a single item VLAN,
+	 *   the former must have "type" set to one of supported
+	 *   TPID values (0x8100, 0x88a8, 0x9100, 0x9200, 0x9300).
+	 *
+	 * - If an item ETH is followed by two items VLAN, the
+	 *   item ETH must have "type" set to one of supported TPID
+	 *   values (0x88a8, 0x9100, 0x9200, 0x9300), and the outermost
+	 *   VLAN item must have "inner_type" set to TPID value 0x8100.
+	 *
+	 * In turn, mapping between RTE convention (above requirements) and
+	 * MAE fields is non-trivial. The following scheme indicates
+	 * which item EtherTypes go to which MAE fields in the case
+	 * of single tag:
+	 *
+	 * ETH	(0x8100)	--> VLAN0_PROTO_BE
+	 * VLAN	(L3 EtherType)	--> ETHER_TYPE_BE
+	 *
+	 * Similarly, in the case of double tagging:
+	 *
+	 * ETH	(0x88a8)	--> VLAN0_PROTO_BE
+	 * VLAN	(0x8100)	--> VLAN1_PROTO_BE
+	 * VLAN	(L3 EtherType)	--> ETHER_TYPE_BE
+	 */
+	struct sfc_mae_ethertype	ethertypes[SFC_MAE_L2_MAX_NITEMS];
+	unsigned int			nb_vlan_tags;
+};
+
 struct sfc_mae_parse_ctx {
 	struct sfc_adapter		*sa;
 	efx_mae_match_spec_t		*match_spec_action;
 	bool				match_mport_set;
+	struct sfc_mae_pattern_data	pattern_data;
 };
 
 int sfc_mae_attach(struct sfc_adapter *sa);
-- 
2.17.1


  parent reply	other threads:[~2020-10-20  9:38 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   ` [dpdk-dev] [PATCH v2 10/62] common/sfc_efx/base: add a match spec validate API Andrew Rybchenko
2020-10-20  9:12   ` [dpdk-dev] [PATCH v2 11/62] net/sfc: validate match spec in MAE backend 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   ` Andrew Rybchenko [this message]
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-48-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.