diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index 1b17f6e..497afc2 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -2076,6 +2076,88 @@ 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.
+
+.. _table_rte_flow_action_tunnel_decap_l3:
+
+.. table:: TUNNEL_DECAP_L3
+
+   +----------------+-------------------------------------+
+   | Field          | Value                               |
+   +================+=====================================+
+   | ``buf``        | Layer 2 definition                  |
+   +----------------+-------------------------------------+
+   | ``size``       | The size of the buffer in bytes     |
+   +----------------+-------------------------------------+
+
 Negative types
 ~~~~~~~~~~~~~~
 
diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
index 9c56a97..4b548b8 100644
--- a/lib/librte_ethdev/rte_flow.c
+++ b/lib/librte_ethdev/rte_flow.c
@@ -123,6 +123,13 @@ struct rte_flow_desc_data {
 	MK_FLOW_ACTION(VXLAN_DECAP, 0),
 	MK_FLOW_ACTION(NVGRE_ENCAP, sizeof(struct rte_flow_action_vxlan_encap)),
 	MK_FLOW_ACTION(NVGRE_DECAP, 0),
+	MK_FLOW_ACTION(TUNNEL_ENCAP,
+		       sizeof(struct rte_flow_action_tunnel_encap)),
+	MK_FLOW_ACTION(TUNNEL_DECAP, 0),
+	MK_FLOW_ACTION(TUNNEL_ENCAP_L3,
+		       sizeof(struct rte_flow_action_tunnel_encap_l3)),
+	MK_FLOW_ACTION(TUNNEL_DECAP_L3,
+		       sizeof(struct rte_flow_action_tunnel_decap_l3)),
 };
 
 static int
diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
index f062ffe..76b4759 100644
--- a/lib/librte_ethdev/rte_flow.h
+++ b/lib/librte_ethdev/rte_flow.h
@@ -1506,6 +1506,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 rte_flow_action_tunnel_decap_l3
+	 */
+	RTE_FLOW_ACTION_TYPE_TUNNEL_DECAP_L3,
 };
 
 /**
@@ -1869,6 +1903,51 @@ 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. */
+};
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ACTION_TYPE_TUNNEL_DECAP_L3
+ *
+ * Layer 2 definition to encapsulte the packet after decapsulating the packet.
+ *
+ * The layer 2 definition header is provided through raw buffer.
+ */
+struct rte_flow_action_tunnel_decap_l3 {
+	uint8_t *buf; /**< L2 data. */
+	uint16_t size; /**< Buffer size. */
+};
+
 /*
  * Definition of a single action.
  *
