From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id C3FAA695D for ; Wed, 18 Apr 2018 23:13:27 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Apr 2018 14:13:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,466,1517904000"; d="scan'208";a="47271253" Received: from dwdohert-ws.ir.intel.com ([163.33.210.60]) by fmsmga004.fm.intel.com with ESMTP; 18 Apr 2018 14:13:24 -0700 From: Declan Doherty To: dev@dpdk.org Cc: Alex Rosenbaum , Ferruh Yigit , Thomas Monjalon , Shahaf Shuler , Qi Zhang , Alejandro Lucero , Andrew Rybchenko , Mohammad Abdul Awal , Remy Horton , John McNamara , Rony Efraim , Jingjing Wu , Wenzhuo Lu , Vincent Jardin , Yuanhan Liu , Bruce Richardson , Konstantin Ananyev , Zhihong Wang , Declan Doherty Date: Wed, 18 Apr 2018 22:04:18 +0100 Message-Id: <20180418210423.13847-2-declan.doherty@intel.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180418210423.13847-1-declan.doherty@intel.com> References: <1523017443-12414-1-git-send-email-declan.doherty@intel.com> <20180418210423.13847-1-declan.doherty@intel.com> Subject: [dpdk-dev] [PATCH v4 1/6] ethdev: Add tunnel encap/decap actions X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 18 Apr 2018 21:13:28 -0000 Add new flow action types and associated action data structure to support the encapsulation and decapsulation of VXLAN/NVGRE tunnel endpoints. The RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP or RTE_FLOW_ACTION_TYPE_NVGRE_ENCAP actions will cause the matching flow to be encapsulated in the tunnel endpoint overlay defined in the rte_flow_action_tunnel_encap action definition. The RTE_FLOW_ACTION_TYPE_VXLAN_DECAP and RTE_FLOW_ACTION_TYPE_NVGRE_DECAP actions will cause all headers associated with the outermost VXLAN/NVGRE tunnel overlay to be decapsulated from the matching flow. Signed-off-by: Declan Doherty --- doc/guides/prog_guide/rte_flow.rst | 89 ++++++++++++++++++++++++++++++++++++++ lib/librte_ether/rte_flow.h | 67 +++++++++++++++++++++++++++- 2 files changed, 155 insertions(+), 1 deletion(-) diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 961943dda..672473d33 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -1486,6 +1486,95 @@ fields in the pattern items. | 1 | END | +-------+----------+ +Action: ``VXLAN_ENCAP`` +^^^^^^^^^^^^^^^^^^^^^^^ + +Performs a VXLAN encapsulation action by encapsulating the matched flow in the +VXLAN tunnel as defined in the``rte_flow_action_tunnel_encap`` flow items +definition. + +This action modifies the payload of matched flows. The flow definition specified +in the ``rte_flow_action_tunnel_encap`` action structure must defined a valid +VLXAN network overlay which conforms with RFC 7348 (Virtual eXtensible Local Area +Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over +Layer 3 Networks). The pattern must be terminated with +the RTE_FLOW_ITEM_TYPE_END item type. + +- Non-terminating by default. + +.. _table_rte_flow_action_tunnel_encap: + +.. table:: TUNNEL_ENCAP + + +----------------+-------------------------------------+ + | Field | Value | + +================+=====================================+ + | ``definition`` | Tunnel end-point overlay definition | + +----------------+-------------------------------------+ + +.. _table_rte_flow_action_tunnel_encap_example: + +.. table:: IPv4 VxLAN flow pattern example. + + +-------+----------+ + | Index | Item | + +=======+==========+ + | 0 | Ethernet | + +-------+----------+ + | 1 | IPv4 | + +-------+----------+ + | 2 | UDP | + +-------+----------+ + | 3 | VXLAN | + +-------+----------+ + | 4 | END | + +-------+----------+ + +Action: ``VXLAN_DECAP`` +^^^^^^^^^^^^^^^^^^^^^^^ + +Performs a decapsulation action by stripping all headers of the VXLAN tunnel +network overlay from the matched flow. + +This action modifies the payload of matched flows. + +Action: ``NVGRE_ENCAP`` +^^^^^^^^^^^^^^^^^^^^^^^ + +Performs a NVGRE encapsulation action by encapsulating the matched flow in the +NVGRE tunnel as defined in the``rte_flow_action_tunnel_encap`` flow item +definition. + +This action modifies the payload of matched flows. The flow definition specified +in the ``rte_flow_action_tunnel_encap`` action structure must defined a valid +NVGRE network overlay which conforms with RFC 7637 (NVGRE: Network Virtualization +Using Generic Routing Encapsulation). The pattern must be terminated with +the RTE_FLOW_ITEM_TYPE_END item type. + +.. _table_rte_flow_action_tunnel_encap_example: + +.. table:: IPv4 NVGRE flow pattern example. + + +-------+----------+ + | Index | Item | + +=======+==========+ + | 0 | Ethernet | + +-------+----------+ + | 1 | IPv4 | + +-------+----------+ + | 2 | NVGRE | + +-------+----------+ + | 3 | END | + +-------+----------+ + +Action: ``NVGRE_DECAP`` +^^^^^^^^^^^^^^^^^^^^^^^ + +Performs a decapsulation action by stripping all headers of the NVGRE tunnel +network overlay from the matched flow. + +This action modifies the payload of matched flows. + Negative types ~~~~~~~~~~~~~~ diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h index 56c733451..537e1bfba 100644 --- a/lib/librte_ether/rte_flow.h +++ b/lib/librte_ether/rte_flow.h @@ -1010,7 +1010,35 @@ enum rte_flow_action_type { * * See struct rte_flow_action_security. */ - RTE_FLOW_ACTION_TYPE_SECURITY + RTE_FLOW_ACTION_TYPE_SECURITY, + + /** + * Encapsulate flow in VXLAN tunnel as defined in RFC7348 + * using headers defined in rte_flow_action_tunnel_encap + * structure. + * + * See struct rte_flow_action_tunnel_encap. + */ + RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP, + + /** + * Decapsulate outer most VXLAN tunnel headers from flow + */ + RTE_FLOW_ACTION_TYPE_VXLAN_DECAP, + + /** + * Encapsulate flow in NVGRE tunnel as defined in RFC7637 + * using header defined in the rte_flow_action_tunnel_encap + * structure. + * + * See struct rte_flow_action_tunnel_encap. + */ + RTE_FLOW_ACTION_TYPE_NVGRE_ENCAP, + + /** + * Decapsulate outer most NVGRE tunnel headers from flow + */ + RTE_FLOW_ACTION_TYPE_NVGRE_DECAP }; /** @@ -1148,6 +1176,43 @@ struct rte_flow_action_security { void *security_session; /**< Pointer to security session structure. */ }; +/** + * RTE_FLOW_ACTION_TYPE_TUNNEL_ENCAP + * + * Tunnel end-point encapsulation data definition + * + * The tunnel definition is provided through the flow item pattern pattern, the + * provided pattern must conform with the corresponding RFC for the + * tunnel encapsulation action specified by the action type. The flow + * definition must be provided in order from the RTE_FLOW_ITEM_TYPE_ETH + * definition up the end item which is specified by RTE_FLOW_ITEM_TYPE_END. + * + * The mask field allows user to specify which fields in the flow item + * definitions can be ignored and which have valid data and can be used + * verbatim. + * + * Note: the last field is not used in the definition of a tunnel and can be + * ignored. + * + * For example if the actions type was RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP + * then valid patterns would include: + * + * - ETH / IPV4 / UDP / VXLAN / END + * - ETH / VLAN / IPV4 / UDP / VXLAN / END + * + * some valid examples for RTE_FLOW_ACTION_TYPE_NVGRE_ENCAP include: + * + * - ETH / IPV4 / NVGRE / END + * - ETH / VLAN / IPV4 / NVGRE / END + */ +struct rte_flow_action_tunnel_encap { + struct rte_flow_item *definition; + /**< + * Encapsulating tunnel definition + * (list terminated by the END pattern item). + */ +}; + /** * Definition of a single action. * -- 2.14.3