From patchwork Tue Aug 20 06:50:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ying Wang X-Patchwork-Id: 57760 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 555FE1BEB6; Tue, 20 Aug 2019 09:07:01 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 0255A1B203 for ; Tue, 20 Aug 2019 09:06:57 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Aug 2019 00:06:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,407,1559545200"; d="scan'208";a="172364385" Received: from npg-dpdk-cvl-yingwang-117d94.sh.intel.com ([10.67.117.94]) by orsmga008.jf.intel.com with ESMTP; 20 Aug 2019 00:06:56 -0700 From: Wang Ying A To: qi.z.zhang@intel.com, adrien.mazarguil@6wind.com Cc: xiaolong.ye@intel.com, qiming.yang@intel.com, dev@dpdk.org, ying.a.wang@intel.com Date: Tue, 20 Aug 2019 14:50:58 +0800 Message-Id: <20190820065059.62140-2-ying.a.wang@intel.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20190820065059.62140-1-ying.a.wang@intel.com> References: <20190814032430.404190-1-ying.a.wang@intel.com> <20190820065059.62140-1-ying.a.wang@intel.com> Subject: [dpdk-dev] [PATCH v3 1/2] ethdev: add GTP extension header 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" - RTE_FLOW_ITEM_TYPE_GTP_PSC: matches a GTP PDU extension header (PDU session container). Signed-off-by: Wang Ying A --- app/test-pmd/cmdline_flow.c | 36 +++++++++++++++++++++++++++++ doc/guides/prog_guide/rte_flow.rst | 9 ++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 5 ++++ lib/librte_ethdev/rte_flow.c | 1 + lib/librte_ethdev/rte_flow.h | 27 ++++++++++++++++++++++ 5 files changed, 78 insertions(+) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 495871394..944a3e852 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -196,6 +196,9 @@ enum index { ITEM_META_DATA, ITEM_GRE_KEY, ITEM_GRE_KEY_VALUE, + ITEM_GTP_PSC, + ITEM_GTP_PSC_QFI, + ITEM_GTP_PSC_PDU_T, /* Validate/create actions. */ ACTIONS, @@ -663,6 +666,7 @@ static const enum index next_item[] = { ITEM_ICMP6_ND_OPT_TLA_ETH, ITEM_META, ITEM_GRE_KEY, + ITEM_GTP_PSC, END_SET, ZERO, }; @@ -902,6 +906,13 @@ static const enum index item_meta[] = { ZERO, }; +static const enum index item_gtp_psc[] = { + ITEM_GTP_PSC_QFI, + ITEM_GTP_PSC_PDU_T, + ITEM_NEXT, + ZERO, +}; + static const enum index next_action[] = { ACTION_END, ACTION_VOID, @@ -2331,6 +2342,28 @@ static const struct token token_list[] = { .next = NEXT(item_gre_key, NEXT_ENTRY(UNSIGNED), item_param), .args = ARGS(ARG_ENTRY_HTON(rte_be32_t)), }, + [ITEM_GTP_PSC] = { + .name = "gtp_psc", + .help = "match GTP extension header with type 0x85", + .priv = PRIV_ITEM(GTP_PSC, + sizeof(struct rte_flow_item_gtp_psc)), + .next = NEXT(item_gtp_psc), + .call = parse_vc, + }, + [ITEM_GTP_PSC_QFI] = { + .name = "qfi", + .help = "QoS flow identifier", + .next = NEXT(item_gtp_psc, NEXT_ENTRY(UNSIGNED), item_param), + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gtp_psc, + qfi)), + }, + [ITEM_GTP_PSC_PDU_T] = { + .name = "pdu_t", + .help = "PDU type", + .next = NEXT(item_gtp_psc, NEXT_ENTRY(UNSIGNED), item_param), + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gtp_psc, + pdu_type)), + }, /* Validate/create actions. */ [ACTIONS] = { @@ -5756,6 +5789,9 @@ flow_item_default_mask(const struct rte_flow_item *item) case RTE_FLOW_ITEM_TYPE_ESP: mask = &rte_flow_item_esp_mask; break; + case RTE_FLOW_ITEM_TYPE_GTP_PSC: + mask = &rte_flow_item_gtp_psc_mask; + break; default: break; } diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 821b524b3..7521a1ec4 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -1205,6 +1205,15 @@ Matches an application specific 32 bit metadata item. - Default ``mask`` matches the specified metadata value. +Item: ``GTP_PSC`` +^^^^^^^^^^^^^^^^^ + +Matches a GTP PDU extension header with type 0x85. + +- ``pdu_type``: PDU type. +- ``qfi``: QoS flow identifier. +- Default ``mask`` matches QFI only. + .. _table_rte_flow_item_meta: .. table:: META diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 313e0707e..4f71ae234 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3955,6 +3955,11 @@ This section lists supported pattern items and their attributes, if any. - ``data {unsigned}``: metadata value. +- ``gtp_psc``: match GTP PDU extension header with type 0x85. + + - ``pdu_type {unsigned}``: PDU type. + - ``qfi {unsigned}``: QoS flow identifier. + Actions list ^^^^^^^^^^^^ diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c index 18fcb018e..fb25219d1 100644 --- a/lib/librte_ethdev/rte_flow.c +++ b/lib/librte_ethdev/rte_flow.c @@ -75,6 +75,7 @@ static const struct rte_flow_desc_data rte_flow_desc_item[] = { MK_FLOW_ITEM(MARK, sizeof(struct rte_flow_item_mark)), MK_FLOW_ITEM(META, sizeof(struct rte_flow_item_meta)), MK_FLOW_ITEM(GRE_KEY, sizeof(rte_be32_t)), + MK_FLOW_ITEM(GTP_PSC, sizeof(struct rte_flow_item_gtp_psc)), }; /** Generate flow_action[] entry. */ diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h index b66bf1495..8bb37aafb 100644 --- a/lib/librte_ethdev/rte_flow.h +++ b/lib/librte_ethdev/rte_flow.h @@ -434,6 +434,15 @@ enum rte_flow_item_type { * @code rte_be32_t * @endcode */ RTE_FLOW_ITEM_TYPE_GRE_KEY, + + /** + * Matches a GTP extension header: PDU session container. + * + * Configure flow for GTP packets with extension header type 0x85. + * + * See struct rte_flow_item_gtp_psc. + */ + RTE_FLOW_ITEM_TYPE_GTP_PSC, }; /** @@ -1192,6 +1201,24 @@ static const struct rte_flow_item_meta rte_flow_item_meta_mask = { }; #endif +/** + * RTE_FLOW_ITEM_TYPE_GTP_PSC. + * + * Matches a GTP PDU extension header with type 0x85. + */ +struct rte_flow_item_gtp_psc { + uint8_t pdu_type; /**< PDU type. */ + uint8_t qfi; /**< QoS flow identifier. */ +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_GTP_PSC. */ +#ifndef __cplusplus +static const struct rte_flow_item_gtp_psc +rte_flow_item_gtp_psc_mask = { + .qfi = 0x3f, +}; +#endif + /** * @warning * @b EXPERIMENTAL: this structure may change without prior notice