From: Michael Baum <michaelba@nvidia.com>
To: <dev@dpdk.org>
Cc: Ori Kam <orika@nvidia.com>,
Aman Singh <aman.deep.singh@intel.com>,
"Yuying Zhang" <yuying.zhang@intel.com>,
Ferruh Yigit <ferruh.yigit@amd.com>,
"Thomas Monjalon" <thomas@monjalon.net>
Subject: [PATCH v1 5/7] ethdev: add GENEVE TLV option modification support
Date: Tue, 16 May 2023 09:37:45 +0300 [thread overview]
Message-ID: <20230516063747.3047758-6-michaelba@nvidia.com> (raw)
In-Reply-To: <20230516063747.3047758-1-michaelba@nvidia.com>
Add modify field support for GENEVE option fields:
- "RTE_FLOW_FIELD_GENEVE_OPT_TYPE"
- "RTE_FLOW_FIELD_GENEVE_OPT_CLASS"
- "RTE_FLOW_FIELD_GENEVE_OPT_DATA"
Each GENEVE TLV option is identified by both its "class" and "type", so
2 new fields were added to "rte_flow_action_modify_data" structure to
help specify which option to modify.
To get room for those 2 new fields, the "level" field move to use
"uint8_t" which is more than enough for encapsulation level.
Signed-off-by: Michael Baum <michaelba@nvidia.com>
---
app/test-pmd/cmdline_flow.c | 48 +++++++++++++++++++++++-
doc/guides/prog_guide/rte_flow.rst | 12 ++++++
doc/guides/rel_notes/release_23_07.rst | 3 ++
lib/ethdev/rte_flow.h | 51 +++++++++++++++++++++++++-
4 files changed, 112 insertions(+), 2 deletions(-)
diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 58939ec321..8c1dea53c0 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -636,11 +636,15 @@ enum index {
ACTION_MODIFY_FIELD_DST_TYPE_VALUE,
ACTION_MODIFY_FIELD_DST_LEVEL,
ACTION_MODIFY_FIELD_DST_LEVEL_VALUE,
+ ACTION_MODIFY_FIELD_DST_TYPE_ID,
+ ACTION_MODIFY_FIELD_DST_CLASS_ID,
ACTION_MODIFY_FIELD_DST_OFFSET,
ACTION_MODIFY_FIELD_SRC_TYPE,
ACTION_MODIFY_FIELD_SRC_TYPE_VALUE,
ACTION_MODIFY_FIELD_SRC_LEVEL,
ACTION_MODIFY_FIELD_SRC_LEVEL_VALUE,
+ ACTION_MODIFY_FIELD_SRC_TYPE_ID,
+ ACTION_MODIFY_FIELD_SRC_CLASS_ID,
ACTION_MODIFY_FIELD_SRC_OFFSET,
ACTION_MODIFY_FIELD_SRC_VALUE,
ACTION_MODIFY_FIELD_SRC_POINTER,
@@ -854,7 +858,9 @@ static const char *const modify_field_ids[] = {
"ipv4_ecn", "ipv6_ecn", "gtp_psc_qfi", "meter_color",
"ipv6_proto",
"flex_item",
- "hash_result", NULL
+ "hash_result",
+ "geneve_opt_type", "geneve_opt_class", "geneve_opt_data",
+ NULL
};
static const char *const meter_colors[] = {
@@ -2295,6 +2301,8 @@ static const enum index next_action_sample[] = {
static const enum index action_modify_field_dst[] = {
ACTION_MODIFY_FIELD_DST_LEVEL,
+ ACTION_MODIFY_FIELD_DST_TYPE_ID,
+ ACTION_MODIFY_FIELD_DST_CLASS_ID,
ACTION_MODIFY_FIELD_DST_OFFSET,
ACTION_MODIFY_FIELD_SRC_TYPE,
ZERO,
@@ -2302,6 +2310,8 @@ static const enum index action_modify_field_dst[] = {
static const enum index action_modify_field_src[] = {
ACTION_MODIFY_FIELD_SRC_LEVEL,
+ ACTION_MODIFY_FIELD_SRC_TYPE_ID,
+ ACTION_MODIFY_FIELD_SRC_CLASS_ID,
ACTION_MODIFY_FIELD_SRC_OFFSET,
ACTION_MODIFY_FIELD_SRC_VALUE,
ACTION_MODIFY_FIELD_SRC_POINTER,
@@ -6388,6 +6398,24 @@ static const struct token token_list[] = {
.call = parse_vc_modify_field_level,
.comp = comp_none,
},
+ [ACTION_MODIFY_FIELD_DST_TYPE_ID] = {
+ .name = "dst_type_id",
+ .help = "destination field type ID",
+ .next = NEXT(action_modify_field_dst,
+ NEXT_ENTRY(COMMON_UNSIGNED)),
+ .args = ARGS(ARGS_ENTRY(struct rte_flow_action_modify_field,
+ dst.type)),
+ .call = parse_vc_conf,
+ },
+ [ACTION_MODIFY_FIELD_DST_CLASS_ID] = {
+ .name = "dst_class",
+ .help = "destination field class ID",
+ .next = NEXT(action_modify_field_dst,
+ NEXT_ENTRY(COMMON_UNSIGNED)),
+ .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_action_modify_field,
+ dst.class_id)),
+ .call = parse_vc_conf,
+ },
[ACTION_MODIFY_FIELD_DST_OFFSET] = {
.name = "dst_offset",
.help = "destination field bit offset",
@@ -6423,6 +6451,24 @@ static const struct token token_list[] = {
.call = parse_vc_modify_field_level,
.comp = comp_none,
},
+ [ACTION_MODIFY_FIELD_SRC_TYPE_ID] = {
+ .name = "src_type_id",
+ .help = "source field type ID",
+ .next = NEXT(action_modify_field_src,
+ NEXT_ENTRY(COMMON_UNSIGNED)),
+ .args = ARGS(ARGS_ENTRY(struct rte_flow_action_modify_field,
+ src.type)),
+ .call = parse_vc_conf,
+ },
+ [ACTION_MODIFY_FIELD_SRC_CLASS_ID] = {
+ .name = "src_class",
+ .help = "source field class ID",
+ .next = NEXT(action_modify_field_src,
+ NEXT_ENTRY(COMMON_UNSIGNED)),
+ .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_action_modify_field,
+ src.class_id)),
+ .call = parse_vc_conf,
+ },
[ACTION_MODIFY_FIELD_SRC_OFFSET] = {
.name = "src_offset",
.help = "source field bit offset",
diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index 25b57bf86d..cd38f0de46 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -2937,6 +2937,14 @@ as well as any tag element in the tag array:
For the tag array (in case of multiple tags are supported and present)
``level`` translates directly into the array index.
+``type`` is used to specify (along with ``class_id``) the Geneve option which
+is being modified.
+This field is relevant only for ``RTE_FLOW_FIELD_GENEVE_OPT_XXXX`` type.
+
+``class_id`` is used to specify (along with ``type``) the Geneve option which
+is being modified.
+This field is relevant only for ``RTE_FLOW_FIELD_GENEVE_OPT_XXXX`` type.
+
``flex_handle`` is used to specify the flex item pointer which is being
modified. ``flex_handle`` and ``level`` are mutually exclusive.
@@ -2994,6 +3002,10 @@ value as sequence of bytes {xxx, xxx, 0x85, xxx, xxx, xxx}.
+-----------------+----------------------------------------------------------+
| ``level`` | encapsulation level of a packet field or tag array index |
+-----------------+----------------------------------------------------------+
+ | ``type`` | geneve option type |
+ +-----------------+----------------------------------------------------------+
+ | ``class_id`` | geneve option class ID |
+ +-----------------+----------------------------------------------------------+
| ``flex_handle`` | flex item handle of a packet field |
+-----------------+----------------------------------------------------------+
| ``offset`` | number of bits to skip at the beginning |
diff --git a/doc/guides/rel_notes/release_23_07.rst b/doc/guides/rel_notes/release_23_07.rst
index a9b1293689..ce1755096f 100644
--- a/doc/guides/rel_notes/release_23_07.rst
+++ b/doc/guides/rel_notes/release_23_07.rst
@@ -84,6 +84,9 @@ API Changes
Also, make sure to start the actual text at the margin.
=======================================================
+* The ``level`` field in experimental structure
+ ``struct rte_flow_action_modify_data`` was reduced to 8 bits.
+
ABI Changes
-----------
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index 713ba8b65c..b82eb0c0a8 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -3773,6 +3773,9 @@ enum rte_flow_field_id {
RTE_FLOW_FIELD_IPV6_PROTO, /**< IPv6 next header. */
RTE_FLOW_FIELD_FLEX_ITEM, /**< Flex item. */
RTE_FLOW_FIELD_HASH_RESULT, /**< Hash result. */
+ RTE_FLOW_FIELD_GENEVE_OPT_TYPE, /**< GENEVE option type */
+ RTE_FLOW_FIELD_GENEVE_OPT_CLASS,/**< GENEVE option class */
+ RTE_FLOW_FIELD_GENEVE_OPT_DATA /**< GENEVE option data */
};
/**
@@ -3788,7 +3791,53 @@ struct rte_flow_action_modify_data {
struct {
/** Encapsulation level or tag index or flex item handle. */
union {
- uint32_t level;
+ struct {
+ /**
+ * Packet encapsulation level containing
+ * the field modify to.
+ *
+ * - @p 0 requests the default behavior.
+ * Depending on the packet type, it
+ * can mean outermost, innermost or
+ * anything in between.
+ *
+ * It basically stands for the
+ * innermost encapsulation level
+ * modification can be performed on
+ * according to PMD and device
+ * capabilities.
+ *
+ * - @p 1 requests modification to be
+ * performed on the outermost packet
+ * encapsulation level.
+ *
+ * - @p 2 and subsequent values request
+ * modification to be performed on
+ * the specified inner packet
+ * encapsulation level, from
+ * outermost to innermost (lower to
+ * higher values).
+ *
+ * Values other than @p 0 are not
+ * necessarily supported.
+ *
+ * For RTE_FLOW_FIELD_TAG it represents
+ * the tag element in the tag array.
+ */
+ uint8_t level;
+ /**
+ * Geneve option type. relevant only
+ * for RTE_FLOW_FIELD_GENEVE_OPT_XXXX
+ * modification type.
+ */
+ uint8_t type;
+ /**
+ * Geneve option class. relevant only
+ * for RTE_FLOW_FIELD_GENEVE_OPT_XXXX
+ * modification type.
+ */
+ rte_be16_t class_id;
+ };
struct rte_flow_item_flex_handle *flex_handle;
};
/** Number of bits to skip from a field. */
--
2.25.1
next prev parent reply other threads:[~2023-05-16 6:38 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-16 6:37 [PATCH v1 0/7] ethdev: modify field API for multiple headers Michael Baum
2023-05-16 6:37 ` [PATCH v1 1/7] doc: fix blank lines in modify field action description Michael Baum
2023-05-16 6:37 ` [PATCH v1 2/7] doc: fix blank line in asynchronous operations description Michael Baum
2023-05-17 17:13 ` Ori Kam
2023-05-16 6:37 ` [PATCH v1 3/7] doc: fix wrong indentation in RSS action description Michael Baum
2023-05-18 6:18 ` Ori Kam
2023-05-16 6:37 ` [PATCH v1 4/7] net/mlx5: reduce modify field encapsulation level size Michael Baum
2023-05-16 6:37 ` Michael Baum [this message]
2023-05-16 6:37 ` [PATCH v1 6/7] ethdev: add MPLS header modification support Michael Baum
2023-05-16 6:37 ` [PATCH v1 7/7] net/mlx5: add MPLS modify field support Michael Baum
2023-05-18 17:40 ` [PATCH v2 0/5] ethdev: modify field API for multiple headers Michael Baum
2023-05-18 17:40 ` [PATCH v2 1/5] doc: fix blank lines in modify field action description Michael Baum
2023-05-21 10:07 ` Ori Kam
2023-05-18 17:40 ` [PATCH v2 2/5] doc: fix blank line in asynchronous operations description Michael Baum
2023-05-21 10:07 ` Ori Kam
2023-05-18 17:40 ` [PATCH v2 3/5] doc: fix wrong indentation in RSS action description Michael Baum
2023-05-21 10:08 ` Ori Kam
2023-05-18 17:40 ` [PATCH v2 4/5] ethdev: add GENEVE TLV option modification support Michael Baum
2023-05-21 18:52 ` Ori Kam
2023-05-18 17:40 ` [PATCH v2 5/5] ethdev: add MPLS header " Michael Baum
2023-05-21 19:03 ` Ori Kam
2023-05-22 12:04 ` Michael Baum
2023-05-22 19:27 ` [PATCH v3 0/5] ethdev: modify field API for multiple headers Michael Baum
2023-05-22 19:28 ` [PATCH v3 1/5] doc: fix blank lines in modify field action description Michael Baum
2023-05-22 19:28 ` [PATCH v3 2/5] doc: fix blank line in asynchronous operations description Michael Baum
2023-05-22 19:28 ` [PATCH v3 3/5] doc: fix wrong indentation in RSS action description Michael Baum
2023-05-22 19:28 ` [PATCH v3 4/5] ethdev: add GENEVE TLV option modification support Michael Baum
2023-05-22 19:28 ` [PATCH v3 5/5] ethdev: add MPLS header " Michael Baum
2023-05-23 10:40 ` [PATCH v3 0/5] ethdev: modify field API for multiple headers Ori Kam
2023-05-23 12:48 ` [PATCH v4 " Michael Baum
2023-05-23 12:48 ` [PATCH v4 1/5] doc: fix blank lines in modify field action description Michael Baum
2023-05-23 12:48 ` [PATCH v4 2/5] doc: fix blank line in asynchronous operations description Michael Baum
2023-05-23 12:48 ` [PATCH v4 3/5] doc: fix wrong indentation in RSS action description Michael Baum
2023-05-23 12:48 ` [PATCH v4 4/5] ethdev: add GENEVE TLV option modification support Michael Baum
2023-05-23 12:48 ` [PATCH v4 5/5] ethdev: add MPLS header " Michael Baum
2023-05-23 21:31 ` [PATCH v5 0/5] ethdev: modify field API for multiple headers Michael Baum
2023-05-23 21:31 ` [PATCH v5 1/5] doc: fix blank lines in modify field action description Michael Baum
2023-05-23 21:31 ` [PATCH v5 2/5] doc: fix blank line in asynchronous operations description Michael Baum
2023-05-23 21:31 ` [PATCH v5 3/5] doc: fix wrong indentation in RSS action description Michael Baum
2023-05-23 21:31 ` [PATCH v5 4/5] ethdev: add GENEVE TLV option modification support Michael Baum
2023-05-23 21:31 ` [PATCH v5 5/5] ethdev: add MPLS header " Michael Baum
2023-06-01 11:54 ` Ferruh Yigit
2023-06-01 11:54 ` [PATCH v5 0/5] ethdev: modify field API for multiple headers 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=20230516063747.3047758-6-michaelba@nvidia.com \
--to=michaelba@nvidia.com \
--cc=aman.deep.singh@intel.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@amd.com \
--cc=orika@nvidia.com \
--cc=thomas@monjalon.net \
--cc=yuying.zhang@intel.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).