From patchwork Mon Apr 16 05:16:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zhang X-Patchwork-Id: 38163 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EA7251B1CB; Mon, 16 Apr 2018 07:16:36 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id AE6D31B1B6 for ; Mon, 16 Apr 2018 07:16:32 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Apr 2018 22:16:32 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,458,1517904000"; d="scan'208";a="47206366" Received: from dpdk51.sh.intel.com ([10.67.110.184]) by fmsmga001.fm.intel.com with ESMTP; 15 Apr 2018 22:16:30 -0700 From: Qi Zhang To: adrien.mazarguil@6wind.com Cc: dev@dpdk.org, declan.doherty@intel.com, sugesh.chandran@intel.com, michael.j.glynn@intel.com, yu.y.liu@intel.com, konstantin.ananyev@intel.com, bruce.richardson@intel.com, Qi Zhang Date: Mon, 16 Apr 2018 13:16:37 +0800 Message-Id: <20180416051639.188034-3-qi.z.zhang@intel.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180416051639.188034-1-qi.z.zhang@intel.com> References: <1522279780-34842-1-git-send-email-qi.z.zhang@intel.com> <20180416051639.188034-1-qi.z.zhang@intel.com> Subject: [dpdk-dev] [PATCH v3 2/4] ethdev: add packet field set aciton in flow API 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add new action RTE_FLOW_ACTION_TYPE_FIELD_SET, it is used to modify fields of specific protocol layer of the packet, for packet that does not include the specific protocal layer, the action is skipped. Signed-off-by: Qi Zhang --- doc/guides/prog_guide/rte_flow.rst | 30 +++++++++++++++++++++++++++ lib/librte_ether/rte_flow.h | 42 +++++++++++++++++++++++++++++++++++++- 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 9c9ddcbd2..ea0e40a52 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -1558,6 +1558,36 @@ fields in the pattern items. | 1 | END | +-------+----------+ +Action: ``FILED_SET`` +^^^^^^^^^^^^^^^^^^^^^ + +Modify the value of fields in a protocol layer, only applies to packets that +contain respective protocol layer. + +.. _table_rte_flow_action_field_set: + +.. table:: FIELD_SET + + +---------------+-------------------------------------------------------------------+ + | Field | Value | + +===============+===================================================================+ + | ``type`` | Specify the type of a protocol layer. (see RTE_FLOW_ITEM_TYPE_*) | + +---------------+-------------------------------------------------------------------+ + | ``dir_level`` | Specify the level of matched protocol layer. | + | | direction (1b) | + | | 0: match start from outermost. | + | | 1: match start from innermost. | + | | level: (31b) | + | | 0: outermost or innermost protocol layer that matched @type | + | | 1: next to outmost or innermost protocol layer that matched @type | + | | 2: and so on ... | + +---------------+-------------------------------------------------------------------+ + | ``new_val`` | Pointer to specific data structure according to protocol type, | + | | the content is the new value to updtae. | + +---------------+-------------------------------------------------------------------+ + | ``mask`` | Bit-mask applied to new_val | + +---------------+-------------------------------------------------------------------+ + Negative types ~~~~~~~~~~~~~~ diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h index 2efbfb3c4..80cf75ff0 100644 --- a/lib/librte_ether/rte_flow.h +++ b/lib/librte_ether/rte_flow.h @@ -1241,7 +1241,15 @@ enum rte_flow_action_type { * * See struct rte_flow_action_security. */ - RTE_FLOW_ACTION_TYPE_SECURITY + RTE_FLOW_ACTION_TYPE_SECURITY, + + /** + * Modify the value of fields in a protocol layer, only applies to + * packets that contain respective protocol layer. + * + * See struct rte_flow_action_field_set. + */ + RTE_FLOW_ACTION_TYPE_FIELD_SET, }; /** @@ -1380,6 +1388,38 @@ struct rte_flow_action_security { }; /** + * RTE_FLOW_ACTION_TYPE_FIELD_SET + * + * Modify the value of fields in a protocol layer, only applies to + * packets that contain respective protocol layer. + */ +struct rte_flow_action_field_set { + /** + * Specify the type of a protocol layer. + */ + enum rte_flow_item_type type; + /** + * Specify the level of matched protocol layer. + * + * direction (1b) + * 0: match start from outermost. + * 1: match start from innermost. + * + * level (31b) + * 0: outermost|innermost protocol layer that matched @type. + * 1: next to outermost|innermost protocol layer that matched @type. + * 2: and so on ... + */ + uint32_t dir_level; + /** + * Pointer to specific data structure according to protocol type, + * the content is the new value to update. + */ + const void *new_val; + const void *mask; /**< Bit-mask applied to new_val. */ +}; + +/** * Definition of a single action. * * A list of actions is terminated by a END action.