DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ori Kam <orika@mellanox.com>
To: arybchenko@solarflare.com, ferruh.yigit@intel.com,
	stephen@networkplumber.org, adrien.mazarguil@6wind.com
Cc: dev@dpdk.org, dekelp@mellanox.com, thomas@monjalon.net,
	nelio.laranjeiro@6wind.com, yskoh@mellanox.com,
	orika@mellanox.com
Subject: [dpdk-dev] [PATCH 1/3] ethdev: add generic L2/L3 tunnel encapsulation actions
Date: Sun, 16 Sep 2018 16:53:42 +0000	[thread overview]
Message-ID: <1537116824-191205-2-git-send-email-orika@mellanox.com> (raw)
In-Reply-To: <1537116824-191205-1-git-send-email-orika@mellanox.com>

Currenlty the encap/decap actions only support encapsulation
of VXLAN and NVGRE L2 packets (L2 encapsulation is where
the inner packet has a valid Ethernet header, while L3 encapsulation
is where the inner packet doesn't have the Ethernet header).
In addtion the parameter to to the encap action is a list of rte items,
this results in 2 extra translation, between the application to the action
and from the action to the NIC. This results in negetive impact on the
insertion performance.

Looking forward there are going to be a need to support many more tunnel
encapsulations. For example MPLSoGRE, MPLSoUDP.
Adding the new encapsulation will result in duplication of code.
For example the code for handling NVGRE and VXLAN are exactly the same,
and each new tunnel will have the same exact structure.

This patch introduce a generic encapsulation for L2 tunnel types, and
generic encapsulation for L3 tunnel types. In addtion the new
encapsulations commands are using raw buffer inorder to save the
converstion time, both for the application and the PMD.

Signed-off-by: Ori Kam <orika@mellanox.com>
---
 doc/guides/prog_guide/rte_flow.rst | 70 ++++++++++++++++++++++++++++++++++++++
 lib/librte_ethdev/rte_flow.h       | 64 ++++++++++++++++++++++++++++++++++
 2 files changed, 134 insertions(+)

diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index b305a72..0f29435 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -2076,6 +2076,76 @@ RTE_FLOW_ERROR_TYPE_ACTION error should be returned.
 
 This action modifies the payload of matched flows.
 
+Action: ``TUNNEL_ENCAP``
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+Performs a tunnel encapsulation action by encapsulating the matched flow with
+a tunnel header as defined in the``rte_flow_action_tunnel_encap``.
+
+This action modifies the payload of matched flows. The flow definition specified
+in the ``rte_flow_action_tunnel_encap`` action structure must define a valid
+tunnel packet overlay.
+
+.. _table_rte_flow_action_tunnel_encap:
+
+.. table:: TUNNEL_ENCAP
+
+   +----------------+-------------------------------------+
+   | Field          | Value                               |
+   +================+=====================================+
+   | ``buf``        | Tunnel end-point overlay definition |
+   +----------------+-------------------------------------+
+   | ``size``       | The size of the buffer in bytes     |
+   +----------------+-------------------------------------+
+
+Action: ``TUNNEL_DECAP``
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+Performs a decapsulation action by stripping all headers of the tunnel
+network overlay from the matched flow.
+
+The flow items pattern defined for the flow rule with which a ``TUNNEL_DECAP``
+action is specified, must define a valid tunnel. If the
+flow pattern does not specify a valid tunnel then a
+RTE_FLOW_ERROR_TYPE_ACTION error should be returned.
+
+This action modifies the payload of matched flows.
+
+Action: ``TUNNEL_ENCAP_L3``
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Replace the packet layer 2 header with the encapsulation tunnel header
+as defined in the ``rte_flow_action_tunnel_encap_l3``.
+
+This action modifies the payload of matched flows. The flow definition specified
+in the ``rte_flow_action_tunnel_encap_l3`` action structure must define a valid
+tunnel packet overlay.
+
+.. _table_rte_flow_action_tunnel_encap_l3:
+
+.. table:: TUNNEL_ENCAP_L3
+
+   +----------------+-------------------------------------+
+   | Field          | Value                               |
+   +================+=====================================+
+   | ``buf``        | Tunnel end-point overlay definition |
+   +----------------+-------------------------------------+
+   | ``size``       | The size of the buffer in bytes     |
+   +----------------+-------------------------------------+
+
+Action: ``TUNNEL_DECAP_L3``
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Replace the packet tunnel network overlay from the matched flow with
+layer 2 header as defined by ``rte_flow_action_tunnel_decap_l3``.
+
+The flow items pattern defined for the flow rule with which a ``TUNNEL_DECAP_L3``
+action is specified, must define a valid tunnel. If the
+flow pattern does not specify a valid tunnel then a
+RTE_FLOW_ERROR_TYPE_ACTION error should be returned.
+
+This action modifies the payload of matched flows.
+
 Negative types
 ~~~~~~~~~~~~~~
 
diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
index f8ba71c..d1f7ebf 100644
--- a/lib/librte_ethdev/rte_flow.h
+++ b/lib/librte_ethdev/rte_flow.h
@@ -1505,6 +1505,40 @@ enum rte_flow_action_type {
 	 * error.
 	 */
 	RTE_FLOW_ACTION_TYPE_NVGRE_DECAP,
+
+	/**
+	 * Encapsulate the packet with tunnel header as defined in
+	 * rte_flow_action_tunnel_encap action structure.
+	 *
+	 * See struct rte_flow_action_tunnel_encap.
+	 */
+	RTE_FLOW_ACTION_TYPE_TUNNEL_ENCAP,
+
+	/**
+	 * Decapsulate outer most tunnel from matched flow.
+	 *
+	 * The flow pattern must have a valid tunnel header
+	 */
+	RTE_FLOW_ACTION_TYPE_TUNNEL_DECAP,
+
+	/**
+	 * Remove the packet L2 header and encapsulate the
+	 * packet with tunnel header as defined in
+	 * rte_flow_action_tunnel_encap_l3 action structure.
+	 *
+	 * See struct rte_flow_action_tunnel_encap.
+	 */
+	RTE_FLOW_ACTION_TYPE_TUNNEL_ENCAP_L3,
+
+	/**
+	 * Decapsulate outer most tunnel from matched flow,
+	 * and add L2 layer.
+	 *
+	 * The flow pattern must have a valid tunnel header.
+	 *
+	 * See struct ret_flow_action_tunnel_decap_l3
+	 */
+	RTE_FLOW_ACTION_TYPE_TUNNEL_DECAP_L3,
 };
 
 /**
@@ -1868,6 +1902,36 @@ struct rte_flow_action_nvgre_encap {
 	struct rte_flow_item *definition;
 };
 
+/**
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ACTION_TYPE_TUNNEL_ENCAP
+ *
+ * Tunnel end-point encapsulation data definition
+ *
+ * The encapsulation header is provided through raw buffer.
+ */
+struct rte_flow_action_tunnel_encap {
+	uint8_t *buf; /**< Encapsulation data. */
+	uint16_t size; /**< Buffer size. */
+};
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ACTION_TYPE_TUNNEL_ENCAP_L3
+ *
+ * Tunnel end-point encapsulation data definition
+ *
+ * The encapsulation header is provided through raw buffer.
+ */
+struct rte_flow_action_tunnel_encap_l3 {
+	uint8_t *buf; /**< Encapsulation data. */
+	uint16_t size; /**< Buffer size. */
+};
+
 /*
  * Definition of a single action.
  *
-- 
1.8.3.1

  reply	other threads:[~2018-09-16 16:56 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-16 16:53 [dpdk-dev] [PATCH 0/3] " Ori Kam
2018-09-16 16:53 ` Ori Kam [this message]
2018-09-16 16:53 ` [dpdk-dev] [PATCH 2/3] ethdev: convert testpmd encap commands to new API Ori Kam
2018-09-16 16:53 ` [dpdk-dev] [PATCH 3/3] ethdev: remove vxlan and nvgre encapsulation commands Ori Kam
2018-09-26 21:00 ` [dpdk-dev] [PATCH v2 0/3] ethdev: add generic L2/L3 tunnel encapsulation actions Ori Kam
2018-09-26 21:00   ` [dpdk-dev] [PATCH v2 1/3] " Ori Kam
2018-09-26 21:00   ` [dpdk-dev] [PATCH v2 2/3] app/testpmd: convert testpmd encap commands to new API Ori Kam
2018-09-26 21:00   ` [dpdk-dev] [PATCH v2 3/3] ethdev: remove vxlan and nvgre encapsulation commands Ori Kam
2018-10-05 12:59     ` Ferruh Yigit
2018-10-05 13:26       ` Awal, Mohammad Abdul
2018-10-05 13:27     ` Mohammad Abdul Awal
2018-10-03 20:38   ` [dpdk-dev] [PATCH v2 0/3] ethdev: add generic L2/L3 tunnel encapsulation actions Thomas Monjalon
2018-10-05 12:57   ` Ferruh Yigit
2018-10-05 14:00     ` Ori Kam
2018-10-07 12:57   ` [dpdk-dev] [PATCH v3 " Ori Kam
2018-10-07 12:57     ` [dpdk-dev] [PATCH v3 1/3] " Ori Kam
2018-10-07 12:57     ` [dpdk-dev] [PATCH v3 2/3] app/testpmd: convert testpmd encap commands to new API Ori Kam
2018-10-07 12:57     ` [dpdk-dev] [PATCH v3 3/3] ethdev: remove vxlan and nvgre encapsulation commands Ori Kam
2018-10-09 16:48     ` [dpdk-dev] [PATCH v3 0/3] ethdev: add generic L2/L3 tunnel encapsulation actions Ferruh Yigit
2018-10-10  6:45       ` Andrew Rybchenko
2018-10-10  9:00         ` Ori Kam
2018-10-10  9:30           ` Andrew Rybchenko
2018-10-10  9:38             ` Thomas Monjalon
2018-10-10 12:02           ` Adrien Mazarguil
2018-10-10 13:17             ` Ori Kam
2018-10-10 16:10               ` Adrien Mazarguil
2018-10-11  8:48                 ` Ori Kam
2018-10-11 13:12                   ` Adrien Mazarguil
2018-10-11 13:55                     ` Ori Kam
2018-10-16 21:40     ` [dpdk-dev] [PATCH v4 0/3] ethdev: add generic raw " Ori Kam
2018-10-16 21:41       ` [dpdk-dev] [PATCH v4 1/3] ethdev: add raw encapsulation action Ori Kam
2018-10-17  7:56         ` Andrew Rybchenko
2018-10-17  8:43           ` Ori Kam
2018-10-22 13:06             ` Andrew Rybchenko
2018-10-22 13:19               ` Ori Kam
2018-10-22 13:27                 ` Andrew Rybchenko
2018-10-22 13:32                   ` Ori Kam
2018-10-16 21:41       ` [dpdk-dev] [PATCH v4 2/3] app/testpmd: add MPLSoUDP encapsulation Ori Kam
2018-10-16 21:41       ` [dpdk-dev] [PATCH v4 3/3] app/testpmd: add MPLSoGRE encapsulation Ori Kam
2018-10-17 17:07       ` [dpdk-dev] [PATCH v5 0/3] ethdev: add generic raw tunnel encapsulation actions Ori Kam
2018-10-17 17:07         ` [dpdk-dev] [PATCH v5 1/3] ethdev: add raw encapsulation action Ori Kam
2018-10-22 14:15           ` Andrew Rybchenko
2018-10-22 14:31             ` Ori Kam
2018-10-17 17:07         ` [dpdk-dev] [PATCH v5 2/3] app/testpmd: add MPLSoUDP encapsulation Ori Kam
2018-10-17 17:07         ` [dpdk-dev] [PATCH v5 3/3] app/testpmd: add MPLSoGRE encapsulation Ori Kam
2018-10-22 14:45         ` [dpdk-dev] [PATCH v5 0/3] ethdev: add generic raw tunnel encapsulation actions Ferruh Yigit
2018-10-22 17:38         ` [dpdk-dev] [PATCH v6 0/3] ethdev: add generic raw tunnel encapsulation Ori Kam
2018-10-22 17:38           ` [dpdk-dev] [PATCH v6 1/3] ethdev: add raw encapsulation action Ori Kam
2018-10-22 17:38           ` [dpdk-dev] [PATCH v6 2/3] app/testpmd: add MPLSoUDP encapsulation Ori Kam
2018-10-23  9:55             ` Ferruh Yigit
2018-10-22 17:38           ` [dpdk-dev] [PATCH v6 3/3] app/testpmd: add MPLSoGRE encapsulation Ori Kam
2018-10-23  9:56             ` Ferruh Yigit
2018-10-23  9:56           ` [dpdk-dev] [PATCH v6 0/3] ethdev: add generic raw tunnel encapsulation 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=1537116824-191205-2-git-send-email-orika@mellanox.com \
    --to=orika@mellanox.com \
    --cc=adrien.mazarguil@6wind.com \
    --cc=arybchenko@solarflare.com \
    --cc=dekelp@mellanox.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=nelio.laranjeiro@6wind.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    --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).