From: Rongwei Liu <rongweil@nvidia.com>
To: <dev@dpdk.org>, <matan@nvidia.com>, <viacheslavo@nvidia.com>,
<orika@nvidia.com>, <thomas@monjalon.net>
Cc: <stable@dpdk.org>, Yongseok Koh <yskoh@mellanox.com>
Subject: [PATCH v1 2/2] net/mlx5: fix sws duplicated tag index matching
Date: Tue, 16 May 2023 08:43:29 +0300 [thread overview]
Message-ID: <20230516054329.1397016-3-rongweil@nvidia.com> (raw)
In-Reply-To: <20230516054329.1397016-1-rongweil@nvidia.com>
Duplicated matching tag index is not allowed in sws
because they are using the same matching field in the
underlayer layout.
For example: "tag index is 0 data spec 0x12 mask 0xff /
tag index is 0 data spec 0x1234 mask 0xffff" is paradoxical
matching condition and "tag index is 0 data spec 0x12 mask 0xff /
tag index is 0 data spec 0x3400 mask 0xff00" should be "tag index
is 0 data spec 0x3412 mask 0xffff"
Add checking logic against it.
Fixes: e554b672aa05 ("net/mlx5: support flow tag")
Cc: viacheslavo@nvidia.com
Cc: stable@dpdk.org
Signed-off-by: Rongwei Liu <rongweil@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
---
drivers/net/mlx5/mlx5_flow_dv.c | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 1abc4acad7..db2bf615db 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -2294,6 +2294,8 @@ flow_dv_validate_item_meta(struct rte_eth_dev *dev __rte_unused,
* Pointer to the rte_eth_dev structure.
* @param[in] item
* Item specification.
+ * @param[in] tag_bitmap
+ * Tag index bitmap.
* @param[in] attr
* Attributes of flow that includes this item.
* @param[out] error
@@ -2305,6 +2307,7 @@ flow_dv_validate_item_meta(struct rte_eth_dev *dev __rte_unused,
static int
flow_dv_validate_item_tag(struct rte_eth_dev *dev,
const struct rte_flow_item *item,
+ uint32_t *tag_bitmap,
const struct rte_flow_attr *attr __rte_unused,
struct rte_flow_error *error)
{
@@ -2348,6 +2351,12 @@ flow_dv_validate_item_tag(struct rte_eth_dev *dev,
if (ret < 0)
return ret;
MLX5_ASSERT(ret != REG_NON);
+ if (*tag_bitmap & (1 << ret))
+ return rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM_SPEC,
+ item->spec,
+ "Duplicated tag index");
+ *tag_bitmap |= 1 << ret;
return 0;
}
@@ -7290,9 +7299,10 @@ flow_dv_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr,
bool def_policy = false;
bool shared_count = false;
uint16_t udp_dport = 0;
- uint32_t tag_id = 0;
+ uint32_t tag_id = 0, tag_bitmap = 0;
const struct rte_flow_action_age *non_shared_age = NULL;
const struct rte_flow_action_count *count = NULL;
+ const struct mlx5_rte_flow_item_tag *mlx5_tag;
struct mlx5_priv *act_priv = NULL;
int aso_after_sample = 0;
@@ -7621,7 +7631,7 @@ flow_dv_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr,
last_item = MLX5_FLOW_LAYER_ICMP6;
break;
case RTE_FLOW_ITEM_TYPE_TAG:
- ret = flow_dv_validate_item_tag(dev, items,
+ ret = flow_dv_validate_item_tag(dev, items, &tag_bitmap,
attr, error);
if (ret < 0)
return ret;
@@ -7631,6 +7641,13 @@ flow_dv_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr,
last_item = MLX5_FLOW_ITEM_SQ;
break;
case MLX5_RTE_FLOW_ITEM_TYPE_TAG:
+ mlx5_tag = (const struct mlx5_rte_flow_item_tag *)items->spec;
+ if (tag_bitmap & (1 << mlx5_tag->id))
+ return rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM_SPEC,
+ items->spec,
+ "Duplicated tag index");
+ tag_bitmap |= 1 << mlx5_tag->id;
break;
case RTE_FLOW_ITEM_TYPE_GTP:
ret = flow_dv_validate_item_gtp(dev, items, item_flags,
--
2.27.0
next prev parent reply other threads:[~2023-05-16 5:44 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-16 5:43 [PATCH v1 0/2] disallow duplicated tag index Rongwei Liu
2023-05-16 5:43 ` [PATCH v1 1/2] net/mlx5: disallow duplicated tag index in pattern template Rongwei Liu
2023-05-17 17:11 ` Ori Kam
2023-05-16 5:43 ` Rongwei Liu [this message]
2023-05-24 14:05 ` [PATCH v1 0/2] disallow duplicated tag index Raslan Darawsheh
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=20230516054329.1397016-3-rongweil@nvidia.com \
--to=rongweil@nvidia.com \
--cc=dev@dpdk.org \
--cc=matan@nvidia.com \
--cc=orika@nvidia.com \
--cc=stable@dpdk.org \
--cc=thomas@monjalon.net \
--cc=viacheslavo@nvidia.com \
--cc=yskoh@mellanox.com \
/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).