All of lore.kernel.org
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 1/2] net/sfc: extend logging in MAE backend of RTE flow support
@ 2021-07-07 10:56 Ivan Malov
  2021-07-07 10:56 ` [dpdk-dev] [PATCH 2/2] net/sfc: improve " Ivan Malov
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Ivan Malov @ 2021-07-07 10:56 UTC (permalink / raw)
  To: dev; +Cc: Andrew Rybchenko, Andy Moreton

Extra log statements will provide more details to the user
in the case of errors discovered in the pattern or actions.

Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
 drivers/net/sfc/sfc_mae.c | 92 +++++++++++++++++++++++++++++++--------
 1 file changed, 74 insertions(+), 18 deletions(-)

diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c
index 61e795db9b..56b949ddf7 100644
--- a/drivers/net/sfc/sfc_mae.c
+++ b/drivers/net/sfc/sfc_mae.c
@@ -752,6 +752,8 @@ sfc_mae_rule_process_pattern_data(struct sfc_mae_parse_ctx *ctx,
 
 	for (ethertype_idx = 0;
 	     ethertype_idx < pdata->nb_vlan_tags; ++ethertype_idx) {
+		rte_be16_t tpid_v = ethertypes[ethertype_idx].value;
+		rte_be16_t tpid_m = ethertypes[ethertype_idx].mask;
 		unsigned int tpid_idx;
 
 		/*
@@ -771,19 +773,22 @@ sfc_mae_rule_process_pattern_data(struct sfc_mae_parse_ctx *ctx,
 		}
 
 		/* Exact match is supported only. */
-		if (ethertypes[ethertype_idx].mask != RTE_BE16(0xffff)) {
+		if (tpid_m != RTE_BE16(0xffff)) {
+			sfc_info(ctx->sa, "TPID mask must be 0x0 or 0xffff; got 0x%04x",
+				 rte_be_to_cpu_16(tpid_m));
 			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])
+			if (tpid_v == supported_tpids[tpid_idx])
 				break;
 		}
 
 		if (tpid_idx == nb_supported_tpids) {
+			sfc_info(ctx->sa, "TPID 0x%04x is unsupported",
+				 rte_be_to_cpu_16(tpid_v));
 			rc = EINVAL;
 			goto fail;
 		}
@@ -793,14 +798,19 @@ sfc_mae_rule_process_pattern_data(struct sfc_mae_parse_ctx *ctx,
 
 	if (pdata->innermost_ethertype_restriction.mask == RTE_BE16(0xffff)) {
 		struct sfc_mae_ethertype *et = &ethertypes[ethertype_idx];
+		rte_be16_t enforced_et;
+
+		enforced_et = pdata->innermost_ethertype_restriction.value;
 
 		if (et->mask == 0) {
 			et->mask = RTE_BE16(0xffff);
-			et->value =
-			    pdata->innermost_ethertype_restriction.value;
+			et->value = enforced_et;
 		} else if (et->mask != RTE_BE16(0xffff) ||
-			   et->value !=
-			   pdata->innermost_ethertype_restriction.value) {
+			   et->value != enforced_et) {
+			sfc_info(ctx->sa, "L3 EtherType must be 0x0/0x0 or 0x%04x/0xffff; got 0x%04x/0x%04x",
+				 rte_be_to_cpu_16(enforced_et),
+				 rte_be_to_cpu_16(et->value),
+				 rte_be_to_cpu_16(et->mask));
 			rc = EINVAL;
 			goto fail;
 		}
@@ -820,10 +830,14 @@ sfc_mae_rule_process_pattern_data(struct sfc_mae_parse_ctx *ctx,
 		if (pdata->l3_next_proto_mask == 0) {
 			pdata->l3_next_proto_mask = 0xff;
 			pdata->l3_next_proto_value =
-			    pdata->l3_next_proto_restriction_value;
+				pdata->l3_next_proto_restriction_value;
 		} else if (pdata->l3_next_proto_mask != 0xff ||
 			   pdata->l3_next_proto_value !=
 			   pdata->l3_next_proto_restriction_value) {
+			sfc_info(ctx->sa, "L3 next protocol must be 0x0/0x0 or 0x%02x/0xff; got 0x%02x/0x%02x",
+				 pdata->l3_next_proto_restriction_value,
+				 pdata->l3_next_proto_value,
+				 pdata->l3_next_proto_mask);
 			rc = EINVAL;
 			goto fail;
 		}
@@ -2374,6 +2388,7 @@ sfc_mae_rule_parse_action_vxlan_encap(
 	size_t next_proto_ofst = 0;
 	size_t ethertype_ofst = 0;
 	uint64_t exp_items;
+	int rc;
 
 	if (pattern == NULL) {
 		return rte_flow_error_set(error, EINVAL,
@@ -2593,14 +2608,27 @@ sfc_mae_rule_parse_action_vxlan_encap(
 	/* Take care of the masks. */
 	sfc_mae_header_force_item_masks(buf, parsed_items, nb_parsed_items);
 
-	return (spec != NULL) ? efx_mae_action_set_populate_encap(spec) : 0;
+	rc = efx_mae_action_set_populate_encap(spec);
+	if (rc != 0) {
+		rc = rte_flow_error_set(error, rc, RTE_FLOW_ERROR_TYPE_ACTION,
+				NULL, "Failed to request action ENCAP");
+	}
+
+	return rc;
 }
 
 static int
-sfc_mae_rule_parse_action_mark(const struct rte_flow_action_mark *conf,
+sfc_mae_rule_parse_action_mark(struct sfc_adapter *sa,
+			       const struct rte_flow_action_mark *conf,
 			       efx_mae_actions_t *spec)
 {
-	return efx_mae_action_set_populate_mark(spec, conf->id);
+	int rc;
+
+	rc = efx_mae_action_set_populate_mark(spec, conf->id);
+	if (rc != 0)
+		sfc_err(sa, "failed to request action MARK: %s", strerror(rc));
+
+	return rc;
 }
 
 static int
@@ -2618,10 +2646,19 @@ sfc_mae_rule_parse_action_phy_port(struct sfc_adapter *sa,
 		phy_port = conf->index;
 
 	rc = efx_mae_mport_by_phy_port(phy_port, &mport);
-	if (rc != 0)
+	if (rc != 0) {
+		sfc_err(sa, "failed to convert phys. port ID %u to m-port selector: %s",
+			phy_port, strerror(rc));
 		return rc;
+	}
 
-	return efx_mae_action_set_populate_deliver(spec, &mport);
+	rc = efx_mae_action_set_populate_deliver(spec, &mport);
+	if (rc != 0) {
+		sfc_err(sa, "failed to request action DELIVER with m-port selector 0x%08x: %s",
+			mport.sel, strerror(rc));
+	}
+
+	return rc;
 }
 
 static int
@@ -2642,10 +2679,20 @@ sfc_mae_rule_parse_action_pf_vf(struct sfc_adapter *sa,
 		vf = vf_conf->id;
 
 	rc = efx_mae_mport_by_pcie_function(encp->enc_pf, vf, &mport);
-	if (rc != 0)
+	if (rc != 0) {
+		sfc_err(sa, "failed to convert PF %u VF %d to m-port: %s",
+			encp->enc_pf, (vf != EFX_PCI_VF_INVALID) ? (int)vf : -1,
+			strerror(rc));
 		return rc;
+	}
+
+	rc = efx_mae_action_set_populate_deliver(spec, &mport);
+	if (rc != 0) {
+		sfc_err(sa, "failed to request action DELIVER with m-port selector 0x%08x: %s",
+			mport.sel, strerror(rc));
+	}
 
-	return efx_mae_action_set_populate_deliver(spec, &mport);
+	return rc;
 }
 
 static int
@@ -2666,10 +2713,19 @@ sfc_mae_rule_parse_action_port_id(struct sfc_adapter *sa,
 
 	rc = sfc_mae_switch_port_by_ethdev(mae->switch_domain_id,
 					   port_id, &mport);
-	if (rc != 0)
+	if (rc != 0) {
+		sfc_err(sa, "failed to find MAE switch port SW entry for RTE ethdev port %u: %s",
+			port_id, strerror(rc));
 		return rc;
+	}
 
-	return efx_mae_action_set_populate_deliver(spec, &mport);
+	rc = efx_mae_action_set_populate_deliver(spec, &mport);
+	if (rc != 0) {
+		sfc_err(sa, "failed to request action DELIVER with m-port selector 0x%08x: %s",
+			mport.sel, strerror(rc));
+	}
+
+	return rc;
 }
 
 static int
@@ -2729,7 +2785,7 @@ sfc_mae_rule_parse_action(struct sfc_adapter *sa,
 	case RTE_FLOW_ACTION_TYPE_MARK:
 		SFC_BUILD_SET_OVERFLOW(RTE_FLOW_ACTION_TYPE_MARK,
 				       bundle->actions_mask);
-		rc = sfc_mae_rule_parse_action_mark(action->conf, spec);
+		rc = sfc_mae_rule_parse_action_mark(sa, action->conf, spec);
 		break;
 	case RTE_FLOW_ACTION_TYPE_PHY_PORT:
 		SFC_BUILD_SET_OVERFLOW(RTE_FLOW_ACTION_TYPE_PHY_PORT,
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-07-23 21:31 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-07-07 10:56 [dpdk-dev] [PATCH 1/2] net/sfc: extend logging in MAE backend of RTE flow support Ivan Malov
2021-07-07 10:56 ` [dpdk-dev] [PATCH 2/2] net/sfc: improve " Ivan Malov
2021-07-15 12:55   ` David Marchand
2021-07-15 13:43     ` Thomas Monjalon
2021-07-16  2:20 ` [dpdk-dev] [PATCH v2 0/2] RTE flow support logging improvements Ivan Malov
2021-07-16  2:20   ` [dpdk-dev] [PATCH v2 1/2] net/sfc: extend logging in MAE backend of RTE flow support Ivan Malov
2021-07-20 15:45     ` David Marchand
2021-07-16  2:20   ` [dpdk-dev] [PATCH v2 2/2] net/sfc: improve " Ivan Malov
2021-07-21  4:15 ` [dpdk-dev] [PATCH v3 0/2] RTE flow support logging improvements Ivan Malov
2021-07-21  4:15   ` [dpdk-dev] [PATCH v3 1/2] net/sfc: extend logging in MAE backend of RTE flow support Ivan Malov
2021-07-21  4:15   ` [dpdk-dev] [PATCH v3 2/2] net/sfc: improve " Ivan Malov
2021-07-23 21:31   ` [dpdk-dev] [PATCH v3 0/2] RTE flow support logging improvements Thomas Monjalon

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.