From patchwork Wed May 15 13:24:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiaoyu Min X-Patchwork-Id: 53432 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 3110C5B26; Wed, 15 May 2019 15:25:07 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 3B80C56A3 for ; Wed, 15 May 2019 15:25:05 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE2 (envelope-from jackmin@mellanox.com) with ESMTPS (AES256-SHA encrypted); 15 May 2019 16:25:04 +0300 Received: from mellanox.com (vnc23.mtl.labs.mlnx [10.7.2.23]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x4FDP4Ne014216; Wed, 15 May 2019 16:25:04 +0300 From: Xiaoyu Min To: Adrien Mazarguil , John McNamara , Marko Kovacevic , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Cc: dev@dpdk.org, jackmin@mellanox.com Date: Wed, 15 May 2019 16:24:47 +0300 Message-Id: <20190515132448.9744-1-jackmin@mellanox.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190514071829.5251-1-jackmin@mellanox.com> References: <20190514071829.5251-1-jackmin@mellanox.com> MIME-Version: 1.0 Subject: [dpdk-dev] [RFC v2] ethdev: add GRE key field to 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 rte_flow_item_gre_key in order to match the optional key field. Signed-off-by: Xiaoyu Min --- v2: * new rte_flow_item_gre_key added instead of expanding existing rte_flow_item_gre. * updated document. doc/guides/prog_guide/rte_flow.rst | 9 +++++++++ lib/librte_ethdev/rte_flow.c | 1 + lib/librte_ethdev/rte_flow.h | 27 +++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 937f52bce1..8b79818f44 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -980,6 +980,15 @@ Matches a GRE header. - ``protocol``: protocol type. - Default ``mask`` matches protocol only. +Item: ``GRE_KEY`` +^^^^^^^^^^^^^^^^^ + +Matches a GRE key field. +This should be preceded by item ``GRE`` + +- ``key``: key value. +- Default ``mask`` matches key only. + Item: ``FUZZY`` ^^^^^^^^^^^^^^^ diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c index 3277be1edb..1cd5f4d263 100644 --- a/lib/librte_ethdev/rte_flow.c +++ b/lib/librte_ethdev/rte_flow.c @@ -55,6 +55,7 @@ static const struct rte_flow_desc_data rte_flow_desc_item[] = { MK_FLOW_ITEM(NVGRE, sizeof(struct rte_flow_item_nvgre)), MK_FLOW_ITEM(MPLS, sizeof(struct rte_flow_item_mpls)), MK_FLOW_ITEM(GRE, sizeof(struct rte_flow_item_gre)), + MK_FLOW_ITEM(GRE_KEY, sizeof(struct rte_flow_item_gre_key)), MK_FLOW_ITEM(FUZZY, sizeof(struct rte_flow_item_fuzzy)), MK_FLOW_ITEM(GTP, sizeof(struct rte_flow_item_gtp)), MK_FLOW_ITEM(GTPC, sizeof(struct rte_flow_item_gtp)), diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h index 63f84fca65..b36c3b980a 100644 --- a/lib/librte_ethdev/rte_flow.h +++ b/lib/librte_ethdev/rte_flow.h @@ -289,6 +289,13 @@ enum rte_flow_item_type { */ RTE_FLOW_ITEM_TYPE_GRE, + /** + * Matches a GRE optional key field. + * + * See struct rte_flow_item_gre_key. + */ + RTE_FLOW_ITEM_TYPE_GRE_KEY, + /** * [META] * @@ -856,6 +863,26 @@ static const struct rte_flow_item_gre rte_flow_item_gre_mask = { }; #endif +/** + * RTE_FLOW_ITEM_GRE_KEY. + * + * Matches the presence of a GRE key. + * + * Normally preceding by: + * + * - RTE_FLOW_ITEM_TYPE_GRE + */ +struct rte_flow_item_gre_key { + rte_be32_t key; /**< Application specific key value (K bit). */ +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_GRE_KEY. */ +#ifndef __cplusplus +static const struct rte_flow_item_gre_key rte_flow_gre_key_mask = { + .key = RTE_BE32(UINT32_MAX), +}; +#endif + /** * RTE_FLOW_ITEM_TYPE_FUZZY *