patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
To: stable@dpdk.org
Cc: ktraynor@redhat.com, orika@nvidia.com, Ori Kam <orika@mellanox.com>
Subject: [dpdk-stable] [PATCH v2] [18.11] net/mlx5: fix selection between encap and decap
Date: Tue,  8 Dec 2020 12:47:15 +0000	[thread overview]
Message-ID: <1607431635-3030-1-git-send-email-viacheslavo@nvidia.com> (raw)

From: Ori Kam <orika@mellanox.com>

[ upstream commit 9e0d81c1a13cac520a535f259e7d3c9132770e14 ]

The current raw_encap function selects if to decap or encap
based on the egress/ingress attribute. This concepts doesn't work
in case of FDB since all flows are considered ingress.

To solve this issue we moved to check the encap size.
if the encap size is larger then eth + ipv4 it means we are
trying to encap.

Fixes: 8ba9eee4ce32 ("net/mlx5: add raw data encap/decap to Direct Verbs")

Signed-off-by: Ori Kam <orika@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
---
 drivers/net/mlx5/mlx5_flow_dv.c | 28 +++++++++++++---------------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 17a298e..3363f90 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -37,6 +37,8 @@
 
 #ifdef HAVE_IBV_FLOW_DV_SUPPORT
 
+#define MLX5_ENCAPSULATION_DECISION_SIZE (sizeof(struct ether_hdr) + \
+					  sizeof(struct ipv4_hdr))
 /**
  * Validate VLAN item.
  *
@@ -302,6 +304,8 @@
 				  const struct rte_flow_attr *attr,
 				  struct rte_flow_error *error)
 {
+	const struct rte_flow_action_raw_decap *decap = action->conf;
+
 	if (action_flags & MLX5_FLOW_ACTION_DROP)
 		return rte_flow_error_set(error, EINVAL,
 					  RTE_FLOW_ERROR_TYPE_ACTION, NULL,
@@ -317,22 +321,16 @@
 					  "can only have a single decap"
 					  " action in a flow");
 	/* decap action is valid on egress only if it is followed by encap */
-	if (attr->egress) {
-		for (; action->type != RTE_FLOW_ACTION_TYPE_END &&
-		       action->type != RTE_FLOW_ACTION_TYPE_RAW_ENCAP;
-		       action++) {
-		}
-		if (action->type != RTE_FLOW_ACTION_TYPE_RAW_ENCAP)
-			return rte_flow_error_set
-					(error, ENOTSUP,
-					 RTE_FLOW_ERROR_TYPE_ATTR_EGRESS,
-					 NULL, "decap action not supported"
-					 " for egress");
+	if (attr->egress && decap &&
+	    decap->size > MLX5_ENCAPSULATION_DECISION_SIZE) {
+		return rte_flow_error_set(error, ENOTSUP,
+					  RTE_FLOW_ERROR_TYPE_ATTR_EGRESS,
+					  NULL, "decap action not supported"
+					  " for egress");
 	}
 	return 0;
 }
 
-
 /**
  * Find existing encap/decap resource or create and register a new one.
  *
@@ -749,9 +747,9 @@
 	encap_data = (const struct rte_flow_action_raw_encap *)action->conf;
 	res.size = encap_data->size;
 	memcpy(res.buf, encap_data->data, res.size);
-	res.reformat_type = attr->egress ?
-		MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L3_TUNNEL :
-		MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L3_TUNNEL_TO_L2;
+	res.reformat_type = res.size < MLX5_ENCAPSULATION_DECISION_SIZE ?
+		MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L3_TUNNEL_TO_L2 :
+		MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L3_TUNNEL;
 	res.ft_type = attr->egress ? MLX5DV_FLOW_TABLE_TYPE_NIC_TX :
 				     MLX5DV_FLOW_TABLE_TYPE_NIC_RX;
 	if (flow_dv_encap_decap_resource_register(dev, &res, dev_flow, error))
-- 
1.8.3.1


             reply	other threads:[~2020-12-08 12:47 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-08 12:47 Viacheslav Ovsiienko [this message]
2020-12-08 13:38 ` Kevin Traynor

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=1607431635-3030-1-git-send-email-viacheslavo@nvidia.com \
    --to=viacheslavo@nvidia.com \
    --cc=ktraynor@redhat.com \
    --cc=orika@mellanox.com \
    --cc=orika@nvidia.com \
    --cc=stable@dpdk.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).