From: Declan Doherty <declan.doherty@intel.com>
To: dev@dpdk.org
Cc: Alex Rosenbaum <alexr@mellanox.com>,
Ferruh Yigit <ferruh.yigit@intel.com>,
Thomas Monjalon <thomas@monjalon.net>,
Shahaf Shuler <shahafs@mellanox.com>,
Qi Zhang <qi.z.zhang@intel.com>,
Alejandro Lucero <alejandro.lucero@netronome.com>,
Andrew Rybchenko <arybchenko@solarflare.com>,
Mohammad Abdul Awal <mohammad.abdul.awal@intel.com>,
Remy Horton <remy.horton@intel.com>,
John McNamara <john.mcnamara@intel.com>,
Rony Efraim <ronye@mellanox.com>,
Jingjing Wu <jingjing.wu@intel.com>,
Wenzhuo Lu <wenzhuo.lu@intel.com>,
Yuanhan Liu <yliu@fridaylinux.org>,
Bruce Richardson <bruce.richardson@intel.com>,
Declan Doherty <declan.doherty@intel.com>
Subject: [PATCH v2 4/4] ethdev: Add metadata flow and action items support
Date: Thu, 5 Apr 2018 14:51:48 +0100 [thread overview]
Message-ID: <20180405135148.16388-5-declan.doherty@intel.com> (raw)
In-Reply-To: <20180405135148.16388-1-declan.doherty@intel.com>
Introduces a new action type RTE_FLOW_ACTION_TYPE_METADATA which enables
metadata extraction from a packet into a specified metadata container
for consumption on further pipeline stages or for propagation to the host
interface.
As complementary function to the new metadata action type this patch also
introduces a new flow item type which enables flow patterns to specify a
specific metadata container as a matching criteria for a flow rule.
Signed-off-by: Declan Doherty <declan.doherty@intel.com>
---
doc/guides/prog_guide/rte_flow.rst | 85 ++++++++++++++++++++++++++++++++++++++
lib/librte_ether/rte_flow.h | 54 +++++++++++++++++++++++-
2 files changed, 138 insertions(+), 1 deletion(-)
diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index 362231829..48e84b374 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -1580,6 +1580,91 @@ group on that device.
+--------------+---------------------------------+
+
+Action: ``METADATA``
+^^^^^^^^^^^^^^^^^^^^
+
+Action extracts data from packet into user specified metadata field in pipeline
+for use in downstream processing stages or for propagation to host interface.
+
+The pattern mask is used to define the data which is to be extracted from the
+packet. The mask pattern types defined in the action metadata pattern must
+match the flow pattern definitions up to the last flow item from which data is
+to be extracted.
+
+- Non-terminating by default.
+
+.. _table_rte_flow_action_metadata:
+
+.. table:: METADATA
+
+ +--------------+---------------------------+
+ | Field | Value |
+ +==============+===========================+
+ | ``id`` | Metadata field Identifier |
+ +--------------+---------------------------+
+ | ``pattern`` | Extraction mask pattern |
+ +--------------+---------------------------+
+
+The example below demonstrates how the extraction mask to extract the source/
+destination IPv4 address, the UDP destination port and and the VxLAN VNI can be
+specified.
+
+.. _table_rte_flow_action_metadata_example:
+
+.. table:: IPv4 VxLAN metadata extraction
+
+ +-------+--------------------------+-----------------------------------+
+ | Index | Flow Item Type | Flow Mask |
+ +=======+==========================+===================================+
+ | 0 | RTE_FLOW_ITEM_TYPE_ETH | .dst = "\x00\x00\x00\x00\x00\x00" |
+ | | +-----------------------------------+
+ | | | .src = "\x00\x00\x00\x00\x00\x00" |
+ | | +-----------------------------------+
+ | | | .type = RTE_BE16(0x0) |
+ +-------+--------------------------+-----------------------------------+
+ | 1 | RTE_FLOW_ITEM_TYPE_IPV4 | .src_addr = RTE_BE32(0xffffffff) |
+ | | +-----------------------------------+
+ | | | .dst_addr = RTE_BE32(0xffffffff) |
+ +-------+--------------------------+-----------------------------------+
+ | 2 | RTE_FLOW_ITEM_TYPE_UDP | .src_port = RTE_BE16(0x0) |
+ | | +-----------------------------------+
+ | | | .dst_port = RTE_BE16(0xffff) |
+ +-------+--------------------------+-----------------------------------+
+ | 3 | RTE_FLOW_ITEM_TYPE_VXLAN | .vni = "\xff\xff\xff" |
+ +-------+--------------------------+-----------------------------------+
+ | 4 | RTE_FLOW_ITEM_TYPE_END | NULL |
+ +-------+--------------------------+-----------------------------------+
+
+If only the VxLAN VNI extraction was required then the extraction mask would be
+as follows.
+
+.. _table_rte_flow_action_metadata_example_2:
+
+.. table:: VxLAN VNI metadata extraction
+
+ +-------+--------------------------+-----------------------------------+
+ | Index | Flow Item Type | Flow Mask |
+ +=======+==========================+===================================+
+ | 0 | RTE_FLOW_ITEM_TYPE_ETH | .dst = "\x00\x00\x00\x00\x00\x00" |
+ | | +-----------------------------------+
+ | | | .src = "\x00\x00\x00\x00\x00\x00" |
+ | | +-----------------------------------+
+ | | | .type = RTE_BE16(0x0) |
+ +-------+--------------------------+-----------------------------------+
+ | 1 | RTE_FLOW_ITEM_TYPE_IPV4 | .src_addr = RTE_BE32(0x0) |
+ | | +-----------------------------------+
+ | | | .dst_addr = RTE_BE32(0x0) |
+ +-------+--------------------------+-----------------------------------+
+ | 2 | RTE_FLOW_ITEM_TYPE_UDP | .src_port = RTE_BE16(0x0) |
+ | | +-----------------------------------+
+ | | | .dst_port = RTE_BE16(0x0) |
+ +-------+--------------------------+-----------------------------------+
+ | 3 | RTE_FLOW_ITEM_TYPE_VXLAN | .vni = "\xff\xff\xff" |
+ +-------+--------------------------+-----------------------------------+
+ | 4 | RTE_FLOW_ITEM_TYPE_END | NULL |
+ +-------+--------------------------+-----------------------------------+
+
Negative types
~~~~~~~~~~~~~~
diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h
index 55951b6ca..be1b0348b 100644
--- a/lib/librte_ether/rte_flow.h
+++ b/lib/librte_ether/rte_flow.h
@@ -323,6 +323,13 @@ enum rte_flow_item_type {
* See struct rte_flow_item_geneve.
*/
RTE_FLOW_ITEM_TYPE_GENEVE,
+
+ /**
+ * Matches specified pipeline metadata field.
+ *
+ * See struct rte_flow_item_metadata.
+ */
+ RTE_FLOW_ITEM_TYPE_METADATA
};
/**
@@ -814,6 +821,17 @@ static const struct rte_flow_item_geneve rte_flow_item_geneve_mask = {
};
#endif
+/**
+ * RTE_FLOW_ITEM_TYPE_METADATA
+ *
+ * Allow arbitrary pipeline metadata to be used in specification flow pattern
+ */
+struct rte_flow_item_metadata {
+ uint32_t id; /**< field identifier */
+ uint32_t size; /**< field size */
+ uint8_t bytes[]; /**< field value */
+};
+
/**
* Matching pattern item definition.
*
@@ -1054,7 +1072,17 @@ enum rte_flow_action_type {
*
* See struct rte_flow_action_group.
*/
- RTE_FLOW_ACTION_TYPE_GROUP
+ RTE_FLOW_ACTION_TYPE_GROUP,
+
+ /**
+ * [META]
+ *
+ * Set specific metadata field associated with packet which is then
+ * available to further pipeline stages.
+ *
+ * See struct rte_flow_action_metadata.
+ */
+ RTE_FLOW_ACTION_TYPE_METADATA
};
/**
@@ -1252,6 +1280,30 @@ struct rte_flow_action_group {
uint32_t id;
};
+/**
+ * RTE_FLOW_ACTION_TYPE_METADATA
+ *
+ * Action extracts data from packet into specified metadata field in pipeline
+ * for use in downstream processing stages or for propagation to host interface.
+ *
+ * Pattern mask is use to define the extraction data for packet. The mask
+ * pattern types defined in the action metadata pattern must match the flow
+ * pattern definitions up to the last item from which data is to be extracted.
+ *
+ * Non-terminating by default.
+ */
+struct rte_flow_action_metadata {
+ uint32_t id; /**< field identifier */
+
+ struct rte_flow_action_mask_item {
+ enum rte_flow_item_type type;
+ /**< Flow item type. */
+ const void *mask;
+ /**< Flow item mask. */
+ } *pattern;
+ /** metadata extraction pattern mask specification */
+};
+
/**
* Definition of a single action.
*
--
2.14.3
next prev parent reply other threads:[~2018-04-05 14:00 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-05 13:51 [PATCH v2 0/4] ethdev: Additions to support vTEP encap/decap offload Declan Doherty
2018-04-05 13:51 ` [PATCH v2 1/4] ethdev: add group counter support to rte_flow Declan Doherty
2018-04-05 16:31 ` Thomas Monjalon
2018-04-06 13:31 ` Mohammad Abdul Awal
2018-04-05 13:51 ` [PATCH v2 2/4] ethdev: Add vTEP encap/decap actions Declan Doherty
2018-04-05 16:42 ` Thomas Monjalon
2018-04-06 13:44 ` Mohammad Abdul Awal
2018-04-05 13:51 ` [PATCH v2 3/4] ethdev: Add group action type to rte_flow Declan Doherty
2018-04-05 13:51 ` Declan Doherty [this message]
2018-04-05 16:49 ` [PATCH v2 4/4] ethdev: Add metadata flow and action items support Thomas Monjalon
2018-04-06 12:20 ` Adrien Mazarguil
2018-04-06 13:47 ` Mohammad Abdul Awal
2018-04-06 15:57 ` Thomas Monjalon
2018-04-06 16:58 ` Mohammad Abdul Awal
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=20180405135148.16388-5-declan.doherty@intel.com \
--to=declan.doherty@intel.com \
--cc=alejandro.lucero@netronome.com \
--cc=alexr@mellanox.com \
--cc=arybchenko@solarflare.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=jingjing.wu@intel.com \
--cc=john.mcnamara@intel.com \
--cc=mohammad.abdul.awal@intel.com \
--cc=qi.z.zhang@intel.com \
--cc=remy.horton@intel.com \
--cc=ronye@mellanox.com \
--cc=shahafs@mellanox.com \
--cc=thomas@monjalon.net \
--cc=wenzhuo.lu@intel.com \
--cc=yliu@fridaylinux.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 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.