From: Shiri Kuzin <shirik@nvidia.com>
To: dev@dpdk.org
Cc: viacheslavo@nvidia.com, adrien.mazarguil@6wind.com,
orika@nvidia.com, ferruh.yigit@intel.com, thomas@monjalon.net,
rasland@nvidia.com
Subject: [dpdk-dev] [PATCH 5/6] net/mlx5: add GTP PSC item translation
Date: Mon, 28 Dec 2020 21:44:31 +0200 [thread overview]
Message-ID: <20201228194432.30512-6-shirik@nvidia.com> (raw)
In-Reply-To: <20201228194432.30512-1-shirik@nvidia.com>
This patch adds the translation function which
sets the qfi, PDU type.
The next extension header which indicates the following
extension header type is set to 0x85 - a PDU session
container.
Signed-off-by: Shiri Kuzin <shirik@nvidia.com>
---
drivers/net/mlx5/mlx5_flow_dv.c | 85 +++++++++++++++++++++++++++++++++
1 file changed, 85 insertions(+)
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 3f6d44a265..7a85ad0887 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -7903,6 +7903,81 @@ flow_dv_translate_item_gtp(void *matcher, void *key,
rte_be_to_cpu_32(gtp_v->teid & gtp_m->teid));
}
+/**
+ * Add GTP PSC item to matcher.
+ *
+ * @param[in, out] matcher
+ * Flow matcher.
+ * @param[in, out] key
+ * Flow matcher value.
+ * @param[in] item
+ * Flow pattern to translate.
+ */
+static int
+flow_dv_translate_item_gtp_psc(void *matcher, void *key,
+ const struct rte_flow_item *item)
+{
+ const struct rte_flow_item_gtp_psc *gtp_psc_m = item->mask;
+ const struct rte_flow_item_gtp_psc *gtp_psc_v = item->spec;
+ void *misc3_m = MLX5_ADDR_OF(fte_match_param, matcher,
+ misc_parameters_3);
+ void *misc3_v = MLX5_ADDR_OF(fte_match_param, key, misc_parameters_3);
+ union {
+ uint32_t w32;
+ struct {
+ uint16_t seq_num;
+ uint8_t npdu_num;
+ uint8_t next_ext_header_type;
+ };
+ } dw_2;
+ uint8_t gtp_flags;
+
+ /* Always set E-flag match on one, regardless of GTP item settings. */
+ gtp_flags = MLX5_GET(fte_match_set_misc3, misc3_m, gtpu_msg_flags);
+ gtp_flags |= MLX5_GTP_EXT_HEADER_FLAG;
+ MLX5_SET(fte_match_set_misc3, misc3_m, gtpu_msg_flags, gtp_flags);
+ gtp_flags = MLX5_GET(fte_match_set_misc3, misc3_v, gtpu_msg_flags);
+ gtp_flags |= MLX5_GTP_EXT_HEADER_FLAG;
+ MLX5_SET(fte_match_set_misc3, misc3_v, gtpu_msg_flags, gtp_flags);
+ /*Set next extension header type. */
+ dw_2.seq_num = 0;
+ dw_2.npdu_num = 0;
+ dw_2.next_ext_header_type = 0xff;
+ MLX5_SET(fte_match_set_misc3, misc3_m, gtpu_dw_2,
+ rte_cpu_to_be_32(dw_2.w32));
+ dw_2.seq_num = 0;
+ dw_2.npdu_num = 0;
+ dw_2.next_ext_header_type = 0x85;
+ MLX5_SET(fte_match_set_misc3, misc3_v, gtpu_dw_2,
+ rte_cpu_to_be_32(dw_2.w32));
+ if (gtp_psc_v) {
+ union {
+ uint32_t w32;
+ struct {
+ uint8_t len;
+ uint8_t pdu_type;
+ uint8_t qfi;
+ uint8_t reserved;
+ };
+ } dw_0;
+
+ /*Set extension header PDU type and Qos. */
+ if (!gtp_psc_m)
+ gtp_psc_m = &rte_flow_item_gtp_psc_mask;
+ dw_0.w32 = 0;
+ dw_0.pdu_type = gtp_psc_m->pdu_type;
+ dw_0.qfi = gtp_psc_m->qfi;
+ MLX5_SET(fte_match_set_misc3, misc3_m, gtpu_first_ext_dw_0,
+ rte_cpu_to_be_32(dw_0.w32));
+ dw_0.w32 = 0;
+ dw_0.pdu_type = gtp_psc_v->pdu_type & gtp_psc_m->pdu_type;
+ dw_0.qfi = gtp_psc_v->qfi & gtp_psc_m->qfi;
+ MLX5_SET(fte_match_set_misc3, misc3_v, gtpu_first_ext_dw_0,
+ rte_cpu_to_be_32(dw_0.w32));
+ }
+ return 0;
+}
+
/**
* Add eCPRI item to matcher and to the value.
*
@@ -10585,6 +10660,16 @@ flow_dv_translate(struct rte_eth_dev *dev,
matcher.priority = MLX5_TUNNEL_PRIO_GET(rss_desc);
last_item = MLX5_FLOW_LAYER_GTP;
break;
+ case RTE_FLOW_ITEM_TYPE_GTP_PSC:
+ ret = flow_dv_translate_item_gtp_psc(match_mask,
+ match_value,
+ items);
+ if (ret)
+ return rte_flow_error_set(error, -ret,
+ RTE_FLOW_ERROR_TYPE_ITEM, NULL,
+ "cannot create GTP PSC item");
+ last_item = MLX5_FLOW_LAYER_GTP_PSC;
+ break;
case RTE_FLOW_ITEM_TYPE_ECPRI:
if (!mlx5_flex_parser_ecpri_exist(dev)) {
/* Create it only the first time to be used. */
--
2.21.0
next prev parent reply other threads:[~2020-12-28 19:46 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-28 19:44 [dpdk-dev] [PATCH 0/6] add GTP PSC extension header support Shiri Kuzin
2020-12-28 19:44 ` [dpdk-dev] [PATCH 1/6] ethdev: update GTP headers Shiri Kuzin
2020-12-29 10:15 ` Ori Kam
2020-12-28 19:44 ` [dpdk-dev] [PATCH 2/6] app/testpmd: add GTP PSC option support in raw sets Shiri Kuzin
2020-12-29 10:18 ` Ori Kam
2020-12-28 19:44 ` [dpdk-dev] [PATCH 3/6] common/mlx5: add matcher fields for GTP extensions Shiri Kuzin
2020-12-28 19:44 ` [dpdk-dev] [PATCH 4/6] net/mlx5: add GTP PSC flow validation Shiri Kuzin
2020-12-28 19:44 ` Shiri Kuzin [this message]
2020-12-28 19:44 ` [dpdk-dev] [PATCH 6/6] doc: update GTP extension header support Shiri Kuzin
2021-01-11 18:21 ` [dpdk-dev] [PATCH v2 0/6] add GTP PSC " Shiri Kuzin
2021-01-11 18:21 ` [dpdk-dev] [PATCH v2 1/6] ethdev: update GTP headers Shiri Kuzin
2021-01-15 1:15 ` Ferruh Yigit
2021-01-11 18:21 ` [dpdk-dev] [PATCH v2 2/6] app/testpmd: add GTP PSC option support in raw sets Shiri Kuzin
2021-01-11 18:21 ` [dpdk-dev] [PATCH v2 3/6] common/mlx5: add matcher fields for GTP extensions Shiri Kuzin
2021-01-11 18:21 ` [dpdk-dev] [PATCH v2 4/6] net/mlx5: add GTP PSC flow validation Shiri Kuzin
2021-01-11 18:21 ` [dpdk-dev] [PATCH v2 5/6] net/mlx5: add GTP PSC item translation Shiri Kuzin
2021-01-11 18:21 ` [dpdk-dev] [PATCH v2 6/6] doc: update GTP extension header support Shiri Kuzin
2021-01-15 1:16 ` [dpdk-dev] [PATCH v2 0/6] add GTP PSC " Ferruh Yigit
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=20201228194432.30512-6-shirik@nvidia.com \
--to=shirik@nvidia.com \
--cc=adrien.mazarguil@6wind.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=orika@nvidia.com \
--cc=rasland@nvidia.com \
--cc=thomas@monjalon.net \
--cc=viacheslavo@nvidia.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).