From patchwork Wed Jun 3 14:20:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Iremonger, Bernard" X-Patchwork-Id: 70828 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 03EFEA04A4; Wed, 3 Jun 2020 16:20:34 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 457B91D52C; Wed, 3 Jun 2020 16:20:26 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id E9D1F1D446 for ; Wed, 3 Jun 2020 16:20:23 +0200 (CEST) IronPort-SDR: wbcC4MjyXDeXx1aaomfxpPZ6BpvO18PCZRs9yYpI5YZo5tUGkXsG3KTRxHoMXNnBpGBC/tDZAZ /aN1Dc9JHjeQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2020 07:20:23 -0700 IronPort-SDR: +L2fEcNgWUd6+r7jnbg7Jx2jMigXJ8SgpdaTpO/nbnOgKNhnCNYLtA5mwOjMNY90mr7gjXeQEH Vf2T+QMbIkxQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,467,1583222400"; d="scan'208";a="416572737" Received: from sivswdev08.ir.intel.com (HELO localhost.localdomain) ([10.237.217.47]) by orsmga004.jf.intel.com with ESMTP; 03 Jun 2020 07:20:21 -0700 From: Bernard Iremonger To: dev@dpdk.org, beilei.xing@intel.com, qi.z.zhang@intel.com, declan.doherty@intel.com, orika@mellanox.com Cc: Bernard Iremonger Date: Wed, 3 Jun 2020 15:20:02 +0100 Message-Id: <1591194009-4086-2-git-send-email-bernard.iremonger@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> References: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> Subject: [dpdk-dev] [PATCH 1/8] librte_ethdev: add new flow types and action 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" In rte_flow.h: add RTE_FLOW_ITEM_TYPE_PCTYPE add RTE_FLOW_ITEM_TYPE_FLOWTYPE add RTE_FLOW_ACTION_TYPE_MAP add structs and masks for new flow types In rte_flow.rst: add items for pctype and flowtype add action for map Signed-off-by: Bernard Iremonger --- doc/guides/prog_guide/rte_flow.rst | 55 +++++++++++++++++++++++++++ lib/librte_ethdev/rte_flow.h | 78 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index d5dd18c..9b54154 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -1362,6 +1362,44 @@ Matches a PFCP Header. - ``seid``: session endpoint identifier. - Default ``mask`` matches s_field and seid. +Item: ``PCTYPE`` +^^^^^^^^^^^^^^^^ + +Matches a PCTYPE + +.. _table_rte_flow_item_pctype: + +.. table:: PCTYPE + + +----------+----------+---------------------------------------+ + | Field | Subfield | Value | + +==========+==========+=======================================+ + | ``spec`` | ``data`` | 64 bit pctype value | + +----------+----------+---------------------------------------+ + | ``last`` | ``data`` | upper range value | + +----------+----------+---------------------------------------+ + | ``mask`` | ``data`` | bit-mask applies to "spec" and "last" | + +----------+----------+---------------------------------------+ + +Item: ``FLOWTYPE`` +^^^^^^^^^^^^^^^^^^ + +Matches a FLOWTYPE + +.. _table_rte_flow_item_flowtype: + +.. table:: FLOWTYPE + + +----------+----------+---------------------------------------+ + | Field | Subfield | Value | + +==========+==========+=======================================+ + | ``spec`` | ``data`` | 16 bit flowtype value | + +----------+----------+---------------------------------------+ + | ``last`` | ``data`` | upper range value | + +----------+----------+---------------------------------------+ + | ``mask`` | ``data`` | bit-mask applies to "spec" and "last" | + +----------+----------+---------------------------------------+ + Actions ~~~~~~~ @@ -2645,6 +2683,23 @@ timeout passed without any matching on the flow. | ``context`` | user input flow context | +--------------+---------------------------------+ +Action: ``MAP`` +^^^^^^^^^^^^^^^ + +Map pctype to flowtype. + +.. _table_rte_flow_action_map: + +.. table:: MAP + + +--------------+---------------------------------+ + | Field | Value | + +==============+=================================+ + | ``pctype`` | 64 bit pctype value | + +--------------+---------------------------------+ + | ``flowtype`` | 16 bit flowtype value | + +--------------+---------------------------------+ + Negative types ~~~~~~~~~~~~~~ diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h index b0e4199..dcae7b9 100644 --- a/lib/librte_ethdev/rte_flow.h +++ b/lib/librte_ethdev/rte_flow.h @@ -527,6 +527,20 @@ enum rte_flow_item_type { */ RTE_FLOW_ITEM_TYPE_PFCP, + /** + * Matches Packet Classification type (PCTYPE). + * See struct rte_flow_item_pctype. + * + */ + RTE_FLOW_ITEM_TYPE_PCTYPE, + + /** + * Matches flow type. + * See struct rte_flow_item_flowtype. + * + */ + RTE_FLOW_ITEM_TYPE_FLOWTYPE, + }; /** @@ -1547,6 +1561,46 @@ static const struct rte_flow_item_pfcp rte_flow_item_pfcp_mask = { #endif /** + * @warning + * @b EXPERIMENTAL: this structure may change without prior notice + * + * RTE_FLOW_ITEM_TYPE_PCTYPE + * + * Match Packet Classification type (PCTYPE) + * + */ +struct rte_flow_item_pctype { + uint64_t pctype; +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_PCTYPE. */ +#ifndef __cplusplus +static const struct rte_flow_item_pctype rte_flow_item_pctype_mask = { + .pctype = 0xffffffffffffffff, +}; +#endif + +/** + * @warning + * @b EXPERIMENTAL: this structure may change without prior notice + * + * RTE_FLOW_ITEM_TYPE_FLOWTYPE + * + * Match flow type + * + */ +struct rte_flow_item_flowtype { + uint16_t flowtype; +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_FLOWTYPE. */ +#ifndef __cplusplus +static const struct rte_flow_item_flowtype rte_flow_item_flowtype_mask = { + .flowtype = 0xffff, +}; +#endif + +/** * Matching pattern item definition. * * A pattern is formed by stacking items starting from the lowest protocol @@ -2099,6 +2153,17 @@ enum rte_flow_action_type { * see enum RTE_ETH_EVENT_FLOW_AGED */ RTE_FLOW_ACTION_TYPE_AGE, + + /** + * Map Packet Classification type to flow type. + * + * If flow pattern does not define a valid RTE_FLOW_ITEM_TYPE_PCTYPE, + * and a valid RTE_FLOW_ITEM_FLOWTYPE the PMD should return a + * RTE_FLOW_ERROR_TYPE_ACTION error. + * + * See struct rte_flow_action_map. + */ + RTE_FLOW_ACTION_TYPE_MAP, }; /** @@ -2660,6 +2725,19 @@ struct rte_flow_action_set_dscp { uint8_t dscp; }; +/** + * @warning + * @b EXPERIMENTAL: this structure may change without prior notice + * + * RTE_FLOW_ACTION_TYPE_MAP + * + * Map a packet classification type to a flow type. + */ +struct rte_flow_action_map { + uint16_t flowtype; + uint64_t pctype; +}; + /* Mbuf dynamic field offset for metadata. */ extern int32_t rte_flow_dynf_metadata_offs; From patchwork Wed Jun 3 14:20:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Iremonger, Bernard" X-Patchwork-Id: 70829 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 43A0BA04A4; Wed, 3 Jun 2020 16:20:43 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 969F21D545; Wed, 3 Jun 2020 16:20:27 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id ED3F41D521 for ; Wed, 3 Jun 2020 16:20:25 +0200 (CEST) IronPort-SDR: RxGCDzQ74F2p41qoTJbwTANYGgkR7EywsOPVLIuGTVNyhd7aadTUBpTshWL5LyKATxrAlum8gq 4UAzwb2dQ52g== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2020 07:20:25 -0700 IronPort-SDR: rEz/Vw/5Wfjb0oIBZ092xnv1iYIbiFR6wb3z6V5OP6POv/8jPYiNC5UwGXvYppGJ/S2AZRzky0 vYu+mwnAa4qA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,467,1583222400"; d="scan'208";a="416572741" Received: from sivswdev08.ir.intel.com (HELO localhost.localdomain) ([10.237.217.47]) by orsmga004.jf.intel.com with ESMTP; 03 Jun 2020 07:20:23 -0700 From: Bernard Iremonger To: dev@dpdk.org, beilei.xing@intel.com, qi.z.zhang@intel.com, declan.doherty@intel.com, orika@mellanox.com Cc: Bernard Iremonger Date: Wed, 3 Jun 2020 15:20:03 +0100 Message-Id: <1591194009-4086-3-git-send-email-bernard.iremonger@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> References: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> Subject: [dpdk-dev] [PATCH 2/8] librte_ethdev: add map filter type 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 RTE_ETH_FILTER_MAP in rte_eth_ctrl.h Signed-off-by: Bernard Iremonger --- lib/librte_ethdev/rte_eth_ctrl.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/librte_ethdev/rte_eth_ctrl.h b/lib/librte_ethdev/rte_eth_ctrl.h index 1416c37..c9c0ea4 100644 --- a/lib/librte_ethdev/rte_eth_ctrl.h +++ b/lib/librte_ethdev/rte_eth_ctrl.h @@ -37,6 +37,7 @@ enum rte_filter_type { RTE_ETH_FILTER_HASH, RTE_ETH_FILTER_L2_TUNNEL, RTE_ETH_FILTER_GENERIC, + RTE_ETH_FILTER_MAP, RTE_ETH_FILTER_MAX }; From patchwork Wed Jun 3 14:20:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Iremonger, Bernard" X-Patchwork-Id: 70830 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 63F63A04A4; Wed, 3 Jun 2020 16:20:52 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BA09F1D55B; Wed, 3 Jun 2020 16:20:28 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 7177E1D537 for ; Wed, 3 Jun 2020 16:20:27 +0200 (CEST) IronPort-SDR: QrszjF2Q2ZNopOhXL4uZ1Ec01I96J3HmFkFpB5WRMMUPHA6brHGPj99SDMBlh4WjatSzae8Olg b9QHVhvctAcA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2020 07:20:26 -0700 IronPort-SDR: 77AczkssOLwhISaR+GnvjxR3N/tP0v7wqV7nNnk08ii8dky6oXO7Ooggxn4kOMfD3g7lq4epAW OhR3udu5Lc8Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,467,1583222400"; d="scan'208";a="416572746" Received: from sivswdev08.ir.intel.com (HELO localhost.localdomain) ([10.237.217.47]) by orsmga004.jf.intel.com with ESMTP; 03 Jun 2020 07:20:25 -0700 From: Bernard Iremonger To: dev@dpdk.org, beilei.xing@intel.com, qi.z.zhang@intel.com, declan.doherty@intel.com, orika@mellanox.com Cc: Bernard Iremonger Date: Wed, 3 Jun 2020 15:20:04 +0100 Message-Id: <1591194009-4086-4-git-send-email-bernard.iremonger@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> References: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> Subject: [dpdk-dev] [PATCH 3/8] librte_ethdev: add map action 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 MK_FLOW_ACTION(MAP, sizeof(struct rte_flow_action_map)) add case RTE_FLOW_ACTION_TYPE_MAP Signed-off-by: Bernard Iremonger --- lib/librte_ethdev/rte_flow.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c index 1685be5..b963d9f 100644 --- a/lib/librte_ethdev/rte_flow.c +++ b/lib/librte_ethdev/rte_flow.c @@ -173,6 +173,7 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = { MK_FLOW_ACTION(SET_IPV4_DSCP, sizeof(struct rte_flow_action_set_dscp)), MK_FLOW_ACTION(SET_IPV6_DSCP, sizeof(struct rte_flow_action_set_dscp)), MK_FLOW_ACTION(AGE, sizeof(struct rte_flow_action_age)), + MK_FLOW_ACTION(MAP, sizeof(struct rte_flow_action_map)), }; int @@ -596,11 +597,13 @@ rte_flow_conv_action_conf(void *buf, const size_t size, const struct rte_flow_action_rss *rss; const struct rte_flow_action_vxlan_encap *vxlan_encap; const struct rte_flow_action_nvgre_encap *nvgre_encap; + const struct rte_flow_action_map *map; } src; union { struct rte_flow_action_rss *rss; struct rte_flow_action_vxlan_encap *vxlan_encap; struct rte_flow_action_nvgre_encap *nvgre_encap; + struct rte_flow_action_map *map; } dst; size_t tmp; int ret; @@ -665,6 +668,17 @@ rte_flow_conv_action_conf(void *buf, const size_t size, off += ret; } break; + case RTE_FLOW_ACTION_TYPE_MAP: + src.map = action->conf; + dst.map = buf; + rte_memcpy(dst.map, + (&(struct rte_flow_action_map){ + .pctype = src.map->pctype, + .flowtype = src.map->flowtype, + }), + size > sizeof(*dst.map) ? sizeof(*dst.map) : size); + off = sizeof(*dst.map); + break; default: off = rte_flow_desc_action[action->type].size; rte_memcpy(buf, action->conf, (size > off ? off : size)); From patchwork Wed Jun 3 14:20:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Iremonger, Bernard" X-Patchwork-Id: 70831 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9F9ADA04A4; Wed, 3 Jun 2020 16:21:02 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E9C601D568; Wed, 3 Jun 2020 16:20:30 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 0485C1D560 for ; Wed, 3 Jun 2020 16:20:28 +0200 (CEST) IronPort-SDR: UBxPqpt9Xg3Hkgr4HZiHN5mV/eDnzVVUAar7HJqf+Lt/Kd/MHo8FYODx64q4C4yN+w0SFS6vvL 2CQQhXoQo1tQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2020 07:20:28 -0700 IronPort-SDR: 9nFHB1/BfuCsk++6CjVTDqiBWFqqG5QrQlHxmVyOzJo1rUqx75KuIevCf0X2iOIfwOGACu6Ckp YXW9Xgve1TnQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,467,1583222400"; d="scan'208";a="416572754" Received: from sivswdev08.ir.intel.com (HELO localhost.localdomain) ([10.237.217.47]) by orsmga004.jf.intel.com with ESMTP; 03 Jun 2020 07:20:27 -0700 From: Bernard Iremonger To: dev@dpdk.org, beilei.xing@intel.com, qi.z.zhang@intel.com, declan.doherty@intel.com, orika@mellanox.com Cc: Bernard Iremonger Date: Wed, 3 Jun 2020 15:20:05 +0100 Message-Id: <1591194009-4086-5-git-send-email-bernard.iremonger@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> References: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> Subject: [dpdk-dev] [PATCH 4/8] app/testpmd: parse map 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Parse map, pctype and flowtype on testpmd command line. In cmdline_flow.c add the following: ACTION_MAP ACTION_MAP_PCTYPE ACTION_MAP_FLOWTYPE add parse_vc_action_map() Update testpmd user guide with map action and sample map action rules. Signed-off-by: Bernard Iremonger --- app/test-pmd/cmdline_flow.c | 85 +++++++++++++++++++++++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 27 +++++++++ 2 files changed, 112 insertions(+) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 4e2006c..3b7f775 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -349,6 +349,9 @@ enum index { ACTION_SET_IPV6_DSCP_VALUE, ACTION_AGE, ACTION_AGE_TIMEOUT, + ACTION_MAP, + ACTION_MAP_PCTYPE, + ACTION_MAP_FLOWTYPE, }; /** Maximum size for pattern in struct rte_flow_item_raw. */ @@ -368,6 +371,11 @@ struct action_rss_data { uint16_t queue[ACTION_RSS_QUEUE_NUM]; }; +/** Storage for struct rte_flow_action_map including external data. */ +struct action_map_data { + struct rte_flow_action_map conf; +}; + /** Maximum data size in struct rte_flow_action_raw_encap. */ #define ACTION_RAW_ENCAP_MAX_DATA 128 #define RAW_ENCAP_CONFS_MAX_NUM 8 @@ -1161,6 +1169,7 @@ static const enum index next_action[] = { ACTION_SET_IPV4_DSCP, ACTION_SET_IPV6_DSCP, ACTION_AGE, + ACTION_MAP, ZERO, }; @@ -1194,6 +1203,13 @@ static const enum index action_rss[] = { ZERO, }; +static const enum index action_map[] = { + ACTION_MAP_PCTYPE, + ACTION_MAP_FLOWTYPE, + ACTION_NEXT, + ZERO, +}; + static const enum index action_vf[] = { ACTION_VF_ORIGINAL, ACTION_VF_ID, @@ -1421,6 +1437,9 @@ static int parse_vc_action_rss_type(struct context *, const struct token *, static int parse_vc_action_rss_queue(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); +static int parse_vc_action_map(struct context *, const struct token *, + const char *, unsigned int, void *, + unsigned int); static int parse_vc_action_vxlan_encap(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); @@ -3609,6 +3628,36 @@ static const struct token token_list[] = { .call = parse_vc_action_raw_decap_index, .comp = comp_set_raw_index, }, + [ACTION_MAP] = { + .name = "map", + .help = "map Packet Classification type to flow type", + .priv = PRIV_ACTION(MAP, sizeof(struct action_map_data)), + .next = NEXT(action_map), + .args = ARGS(ARGS_ENTRY(struct rte_flow_action_map, pctype), + ARGS_ENTRY(struct rte_flow_action_map, + flowtype)), + .call = parse_vc_action_map, + }, + [ACTION_MAP_PCTYPE] = { + .name = "pctype", + .help = "Packet Classification type ", + .next = NEXT(action_map, NEXT_ENTRY(UNSIGNED)), + .args = ARGS(ARGS_ENTRY_ARB + (offsetof(struct action_map_data, conf) + + offsetof(struct rte_flow_action_map, pctype), + sizeof(((struct rte_flow_action_map *)0)-> + pctype))), + }, + [ACTION_MAP_FLOWTYPE] = { + .name = "flowtype", + .help = "flow type ", + .next = NEXT(action_map, NEXT_ENTRY(UNSIGNED)), + .args = ARGS(ARGS_ENTRY_ARB + (offsetof(struct action_map_data, conf) + + offsetof(struct rte_flow_action_map, flowtype), + sizeof(((struct rte_flow_action_map *)0)-> + flowtype))), + }, /* Top level command. */ [SET] = { .name = "set", @@ -5207,6 +5256,42 @@ parse_vc_action_set_meta(struct context *ctx, const struct token *token, return len; } +/** Parse MAP action. */ +static int +parse_vc_action_map(struct context *ctx, const struct token *token, + const char *str, unsigned int len, + void *buf, unsigned int size) +{ + struct buffer *out = buf; + struct rte_flow_action *action; + struct action_map_data *action_map_data; + int ret; + + ret = parse_vc(ctx, token, str, len, buf, size); + if (ret < 0) + return ret; + /* Nothing else to do if there is no buffer. */ + if (!out) + return ret; + if (!out->args.vc.actions_n) + return -1; + action = &out->args.vc.actions[out->args.vc.actions_n - 1]; + /* Point to selected object. */ + ctx->object = out->args.vc.data; + ctx->objmask = NULL; + /* Set up default configuration. */ + action_map_data = ctx->object; + *action_map_data = (struct action_map_data){ + .conf = (struct rte_flow_action_map){ + .flowtype = 0, + .pctype = 0 + }, + }; + + action->conf = &action_map_data->conf; + return ret; +} + /** Parse tokens for destroy command. */ static int parse_destroy(struct context *ctx, const struct token *token, diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index a808b6a..d0c0b09 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -4281,6 +4281,8 @@ This section lists supported actions and their attributes, if any. - ``dscp_value {unsigned}``: The new DSCP value to be set +- ``map``: map Packet Classification (PC) type to flow type. + Destroying flow rules ~~~~~~~~~~~~~~~~~~~~~ @@ -4936,6 +4938,31 @@ if seid is set):: testpmd> flow create 0 ingress pattern eth / ipv6 / pfcp s_field is 1 seid is 1 / end actions queue index 3 / end +Sample PCTYPE mapping rules +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The following sequence of commands is required for pctype mapping:: + + testpmd> port stop 0 + testpmd> flow create 0 ingress pattern end actions map pctype 15 flowtype 27 / + end + testpmd> show port 0 pctype mapping + pctype: 15 -> flowtype: 27 + + testpmd> port start 0 + testpmd> flow create 0 ingress pattern end actions rss types end queues 0 1 2 + 3 end / end + testpmd> flow create 0 ingress pattern eth / ipv4 / esp / end actions rss + types esp end queues end / end + + testpmd> flow list 0 + ID Group Prio Attr Rule + 0 0 0 i-- => MAP + 1 0 0 i-- => RSS + 2 0 0 i-- ETH IPV4 ESP => RSS + testpmd> set verbose 1 + testpmd> start + BPF Functions -------------- From patchwork Wed Jun 3 14:20:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Iremonger, Bernard" X-Patchwork-Id: 70832 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4D1E6A04A4; Wed, 3 Jun 2020 16:21:12 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3C5561D578; Wed, 3 Jun 2020 16:20:32 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 04E391D569 for ; Wed, 3 Jun 2020 16:20:30 +0200 (CEST) IronPort-SDR: pImC9vhcn65wVl2sA9mpA/E3VO7dumbBxP2ZdUtl4fj6i/WCdYmrYJTiXo9bZB27fcnOF8+0ax urt8H7Bn/dhA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2020 07:20:30 -0700 IronPort-SDR: ye0sO5NnY9STbyYmq1IexKZlunfWGA066i0Z8emluGBwpqskXVtbPwIyv62DhpmP6aCvqI+ysB ReWqaQ3qQ7XA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,467,1583222400"; d="scan'208";a="416572761" Received: from sivswdev08.ir.intel.com (HELO localhost.localdomain) ([10.237.217.47]) by orsmga004.jf.intel.com with ESMTP; 03 Jun 2020 07:20:28 -0700 From: Bernard Iremonger To: dev@dpdk.org, beilei.xing@intel.com, qi.z.zhang@intel.com, declan.doherty@intel.com, orika@mellanox.com Cc: Bernard Iremonger Date: Wed, 3 Jun 2020 15:20:06 +0100 Message-Id: <1591194009-4086-6-git-send-email-bernard.iremonger@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> References: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> Subject: [dpdk-dev] [PATCH 5/8] net/i40e: add map filter 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" In i40e_ethdev.h add the following: struct i40e_map_filter struct i40e_rte_flow_map_conf Signed-off-by: Bernard Iremonger --- drivers/net/i40e/i40e_ethdev.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h index e5d0ce5..2426e29 100644 --- a/drivers/net/i40e/i40e_ethdev.h +++ b/drivers/net/i40e/i40e_ethdev.h @@ -762,6 +762,10 @@ struct i40e_rss_pattern_info { uint64_t types; }; +struct i40e_map_pattern_info { + uint8_t action_flag; +}; + /* Tunnel filter number HW supports */ #define I40E_MAX_TUNNEL_FILTER_NUM 400 @@ -992,6 +996,19 @@ struct i40e_rss_filter { struct i40e_rte_flow_rss_conf rss_filter_info; }; +struct i40e_rte_flow_map_conf { + struct rte_flow_action_map conf; /**< MAP parameters. */ + bool valid; /* Check if it's valid */ +}; + +TAILQ_HEAD(i40e_map_conf_list, i40e_map_filter); + +/* MAP filter list structure */ +struct i40e_map_filter { + TAILQ_ENTRY(i40e_map_filter) next; + struct i40e_rte_flow_map_conf map_filter_info; +}; + struct i40e_vf_msg_cfg { /* maximal VF message during a statistic period */ uint32_t max_msg; @@ -1085,6 +1102,8 @@ struct i40e_pf { uint16_t switch_domain_id; struct i40e_vf_msg_cfg vf_msg_cfg; + struct i40e_rte_flow_map_conf map_info; /* MAP info */ + struct i40e_map_conf_list map_config_list; /* MAP rule list */ }; enum pending_msg { @@ -1219,6 +1238,7 @@ union i40e_filter_t { struct rte_eth_tunnel_filter_conf tunnel_filter; struct i40e_tunnel_filter_conf consistent_tunnel_filter; struct i40e_rte_flow_rss_conf rss_conf; + struct i40e_rte_flow_map_conf map_conf; }; typedef int (*parse_filter_t)(struct rte_eth_dev *dev, @@ -1365,6 +1385,10 @@ int i40e_config_rss_filter(struct i40e_pf *pf, struct i40e_rte_flow_rss_conf *conf, bool add); int i40e_vf_representor_init(struct rte_eth_dev *ethdev, void *init_params); int i40e_vf_representor_uninit(struct rte_eth_dev *ethdev); +int i40e_map_conf_init(struct i40e_rte_flow_map_conf *out, + const struct rte_flow_action_map *in); +int i40e_config_map_filter(struct i40e_pf *pf, + struct i40e_rte_flow_map_conf *conf, bool add); #define I40E_DEV_TO_PCI(eth_dev) \ RTE_DEV_TO_PCI((eth_dev)->device) From patchwork Wed Jun 3 14:20:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Iremonger, Bernard" X-Patchwork-Id: 70833 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9A31AA04A4; Wed, 3 Jun 2020 16:21:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8CED21D581; Wed, 3 Jun 2020 16:20:51 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id A45201D567 for ; Wed, 3 Jun 2020 16:20:49 +0200 (CEST) IronPort-SDR: 3yZvMDuXKqcMwMahiAkISxDEWM9gI/xVg9SY91NJr1+DtBUveYrH0UYZ3SfjOw29i0JezTL0Zi eiYOf7vybmgQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2020 07:20:32 -0700 IronPort-SDR: QkVkZYlI+JiGZJgV2hrhHXpxULFZVFy/DMbiOdF1R15PZ18re9m5lzpvOLz1iuIt2RRL0aJa/o jEcD5KwHpMzA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,467,1583222400"; d="scan'208";a="416572788" Received: from sivswdev08.ir.intel.com (HELO localhost.localdomain) ([10.237.217.47]) by orsmga004.jf.intel.com with ESMTP; 03 Jun 2020 07:20:30 -0700 From: Bernard Iremonger To: dev@dpdk.org, beilei.xing@intel.com, qi.z.zhang@intel.com, declan.doherty@intel.com, orika@mellanox.com Cc: Bernard Iremonger Date: Wed, 3 Jun 2020 15:20:07 +0100 Message-Id: <1591194009-4086-7-git-send-email-bernard.iremonger@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> References: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> Subject: [dpdk-dev] [PATCH 6/8] net/i40e: add map functions 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 i40e_map_conf_init() add i40e_config_map_filter() initialize map_config_list in pf call rte_pmd_i40e_flow_type_mapping_update() Signed-off-by: Bernard Iremonger --- drivers/net/i40e/i40e_ethdev.c | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 970a31c..c7f0eec 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -1660,6 +1660,9 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused) /* initialize RSS rule list */ TAILQ_INIT(&pf->rss_config_list); + /* initialize MAP rule list */ + TAILQ_INIT(&pf->map_config_list); + /* initialize Traffic Manager configuration */ i40e_tm_conf_init(dev); @@ -13411,6 +13414,59 @@ i40e_config_rss_filter(struct i40e_pf *pf, return 0; } +int +i40e_map_conf_init(struct i40e_rte_flow_map_conf *out, + const struct rte_flow_action_map *in) +{ + int ret = 0; + + if ((in->pctype >= I40E_FILTER_PCTYPE_MAX) || + (in->flowtype >= I40E_FLOW_TYPE_MAX)) + ret = EINVAL; + else + out->conf = (struct rte_flow_action_map){ + .pctype = in->pctype, + .flowtype = in->flowtype, + }; + return ret; +} + +int +i40e_config_map_filter(struct i40e_pf *pf, + struct i40e_rte_flow_map_conf *map_conf, bool add) +{ + struct i40e_rte_flow_map_conf *map_info = &pf->map_info; + struct rte_flow_action_map update_conf = map_info->conf; + struct rte_pmd_i40e_flow_type_mapping type_map; + int ret; + + if (add) { + update_conf.flowtype = map_conf->conf.flowtype; + update_conf.pctype = map_conf->conf.pctype; + + type_map.flow_type = map_conf->conf.flowtype; + type_map.pctype = (1ULL << map_conf->conf.pctype); + ret = rte_pmd_i40e_flow_type_mapping_update( + pf->dev_data->port_id, &type_map, 1, 0); + if (ret) + return ret; + + /* Update MAP info in pf */ + if (i40e_map_conf_init(map_info, &update_conf)) + return -EINVAL; + + } else { + if (!map_conf->valid) + return 0; + + map_info->conf.flowtype = 0; + map_info->conf.pctype = 0; + map_info->valid = false; + } + + return 0; +} + RTE_INIT(i40e_init_log) { i40e_logtype_init = rte_log_register("pmd.net.i40e.init"); From patchwork Wed Jun 3 14:20:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Iremonger, Bernard" X-Patchwork-Id: 70834 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 17ED0A04A4; Wed, 3 Jun 2020 16:21:35 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 527BB1D597; Wed, 3 Jun 2020 16:20:53 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 7A21A1D567 for ; Wed, 3 Jun 2020 16:20:50 +0200 (CEST) IronPort-SDR: qZWBJ9C5Nn8cFDdfEgSB3A9IRENI+/rSQtZNsD/U+4gH1t6AvcTZSwpzd87x8w/7LR4al8/nG/ OIRBCJ24n+7w== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2020 07:20:34 -0700 IronPort-SDR: Lx5EwmL0mN+VlBoV+W0/FE9J1iSuzJt99dtzWb82skHHoXy8cNQnotlma7/Fgc+Nvtc38cnL84 E5E8NqowAx4A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,467,1583222400"; d="scan'208";a="416572806" Received: from sivswdev08.ir.intel.com (HELO localhost.localdomain) ([10.237.217.47]) by orsmga004.jf.intel.com with ESMTP; 03 Jun 2020 07:20:32 -0700 From: Bernard Iremonger To: dev@dpdk.org, beilei.xing@intel.com, qi.z.zhang@intel.com, declan.doherty@intel.com, orika@mellanox.com Cc: Bernard Iremonger Date: Wed, 3 Jun 2020 15:20:08 +0100 Message-Id: <1591194009-4086-8-git-send-email-bernard.iremonger@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> References: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> Subject: [dpdk-dev] [PATCH 7/8] net/i40e: parse map pattern and action 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" Parse the map pattern and action in i40e_flow.c Add the following functions: i40e_flow_parse_map_pattern() i40e_flow_parse_map_action() i40e_parse_map_filter() i40e_config_map_filter_set() i40e_config_map_filter_del() Signed-off-by: Bernard Iremonger --- drivers/net/i40e/i40e_flow.c | 196 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c index 8f8df6f..9616a87 100644 --- a/drivers/net/i40e/i40e_flow.c +++ b/drivers/net/i40e/i40e_flow.c @@ -4996,6 +4996,185 @@ i40e_config_rss_filter_del(struct rte_eth_dev *dev, } static int +i40e_flow_parse_map_pattern(__rte_unused struct rte_eth_dev *dev, + const struct rte_flow_item *pattern, + struct i40e_map_pattern_info *p_info, + struct rte_flow_error *error) +{ + const struct rte_flow_item *item = pattern; + enum rte_flow_item_type item_type; + struct rte_flow_item *items; + uint32_t item_num = 0; /* non-void item number of pattern*/ + uint32_t i = 0; + + if (item->type == RTE_FLOW_ITEM_TYPE_END) { + p_info->action_flag = 1; + return 0; + } + + /* Convert pattern to item types */ + while ((pattern + i)->type != RTE_FLOW_ITEM_TYPE_END) { + if ((pattern + i)->type != RTE_FLOW_ITEM_TYPE_VOID) + item_num++; + i++; + } + item_num++; + + items = rte_zmalloc("i40e_pattern", + item_num * sizeof(struct rte_flow_item), 0); + if (!items) { + rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_ITEM_NUM, + NULL, "No memory for PMD internal items."); + return -ENOMEM; + } + + i40e_pattern_skip_void_item(items, pattern); + + rte_free(items); + + for (; item->type != RTE_FLOW_ITEM_TYPE_END; item++) { + if (item->last) { + rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, + item, + "Not supported"); + return -rte_errno; + } + item_type = item->type; + switch (item_type) { + case RTE_FLOW_ITEM_TYPE_ETH: + p_info->action_flag = 1; + break; + + default: + rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, + item, + "item not supported"); + return -rte_errno; + } + } + + return 0; +} + +static int +i40e_flow_parse_map_action(__rte_unused struct rte_eth_dev *dev, + const struct rte_flow_action *actions, + struct i40e_map_pattern_info *p_info, + struct rte_flow_error *error, + union i40e_filter_t *filter) +{ + const struct rte_flow_action *act; + const struct rte_flow_action_map *map; + struct i40e_rte_flow_map_conf *map_conf = &filter->map_conf; + uint32_t index = 0; + + NEXT_ITEM_OF_ACTION(act, actions, index); + + /** + * check if the first not void action is MAP. + */ + if ((act->type != RTE_FLOW_ACTION_TYPE_MAP) || + (p_info->action_flag == 0)) { + memset(map_conf, 0, sizeof(struct i40e_rte_flow_map_conf)); + rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, + act, "Not supported action."); + return -rte_errno; + } + + map = act->conf; + + if (i40e_map_conf_init(map_conf, map)) + return rte_flow_error_set + (error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, act, + "MAP context initialization failure"); + + map_conf->valid = true; + + return 0; +} + +static int +i40e_parse_map_filter(struct rte_eth_dev *dev, + const struct rte_flow_attr *attr, + const struct rte_flow_item pattern[], + const struct rte_flow_action actions[], + union i40e_filter_t *filter, + struct rte_flow_error *error) +{ + struct i40e_map_pattern_info p_info; + int ret; + + memset(&p_info, 0, sizeof(struct i40e_map_pattern_info)); + + ret = i40e_flow_parse_map_pattern(dev, pattern, &p_info, error); + if (ret) + return ret; + + ret = i40e_flow_parse_map_action(dev, actions, &p_info, error, filter); + if (ret) + return ret; + + ret = i40e_flow_parse_attr(attr, error); + if (ret) + return ret; + + cons_filter_type = RTE_ETH_FILTER_MAP; + + return 0; +} + +static int +i40e_config_map_filter_set(struct rte_eth_dev *dev, + struct i40e_rte_flow_map_conf *conf) +{ + struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); + struct i40e_map_filter *map_filter; + int ret; + + ret = i40e_config_map_filter(pf, conf, 1); + if (ret) + return ret; + + map_filter = rte_zmalloc("i40e_map_filter", sizeof(*map_filter), 0); + if (map_filter == NULL) { + PMD_DRV_LOG(ERR, "Failed to alloc memory."); + return -ENOMEM; + } + map_filter->map_filter_info = *conf; + + /* the rule newly created is always valid + * the existing rule covered by new rule will be set invalid + */ + map_filter->map_filter_info.valid = true; + + TAILQ_INSERT_TAIL(&pf->map_config_list, map_filter, next); + + return 0; +} + +static int +i40e_config_map_filter_del(struct rte_eth_dev *dev, + struct i40e_rte_flow_map_conf *conf) +{ + struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); + struct i40e_map_filter *map_filter; + void *temp; + + i40e_config_map_filter(pf, conf, 0); + + TAILQ_FOREACH_SAFE(map_filter, &pf->map_config_list, next, temp) { + if (!memcmp(&map_filter->map_filter_info, conf, + sizeof(struct rte_flow_action_map))) { + TAILQ_REMOVE(&pf->map_config_list, map_filter, next); + rte_free(map_filter); + } + } + return 0; +} + +static int i40e_flow_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, const struct rte_flow_item pattern[], @@ -5041,6 +5220,12 @@ i40e_flow_validate(struct rte_eth_dev *dev, return ret; } + if ((actions + i)->type == RTE_FLOW_ACTION_TYPE_MAP) { + ret = i40e_parse_map_filter(dev, attr, pattern, + actions, &cons_filter, error); + return ret; + } + i = 0; /* Get the non-void item number of pattern */ while ((pattern + i)->type != RTE_FLOW_ITEM_TYPE_END) { @@ -5137,6 +5322,13 @@ i40e_flow_create(struct rte_eth_dev *dev, flow->rule = TAILQ_LAST(&pf->rss_config_list, i40e_rss_conf_list); break; + case RTE_ETH_FILTER_MAP: + ret = i40e_config_map_filter_set(dev, &cons_filter.map_conf); + if (ret) + goto free_flow; + flow->rule = TAILQ_LAST(&pf->map_config_list, + i40e_map_conf_list); + break; default: goto free_flow; } @@ -5184,6 +5376,10 @@ i40e_flow_destroy(struct rte_eth_dev *dev, ret = i40e_config_rss_filter_del(dev, &((struct i40e_rss_filter *)flow->rule)->rss_filter_info); break; + case RTE_ETH_FILTER_MAP: + ret = i40e_config_map_filter_del(dev, + &((struct i40e_map_filter *)flow->rule)->map_filter_info); + break; default: PMD_DRV_LOG(WARNING, "Filter type (%d) not supported", filter_type); From patchwork Wed Jun 3 14:20:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Iremonger, Bernard" X-Patchwork-Id: 70835 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 96D37A04A4; Wed, 3 Jun 2020 16:21:45 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7B1781D5A8; Wed, 3 Jun 2020 16:20:54 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 4057E1D580 for ; Wed, 3 Jun 2020 16:20:51 +0200 (CEST) IronPort-SDR: efDwIw0Dw96bZ+O0bR/LOK/4sneWzbIx5Jk+fxl/7HljYfQEYv7JVpiHaC2W2JrudZxKfD9N9k aqPeTpp0I5Sw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2020 07:20:36 -0700 IronPort-SDR: 8X/xUi9Qg4BylAWaQpxTcDIR0JiFJvJrFkBoS1B72oU5gXKooMV6Tglr21KEUhu5cNykNCL7Ix yUeVEK5mQELw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,467,1583222400"; d="scan'208";a="416572825" Received: from sivswdev08.ir.intel.com (HELO localhost.localdomain) ([10.237.217.47]) by orsmga004.jf.intel.com with ESMTP; 03 Jun 2020 07:20:34 -0700 From: Bernard Iremonger To: dev@dpdk.org, beilei.xing@intel.com, qi.z.zhang@intel.com, declan.doherty@intel.com, orika@mellanox.com Cc: Bernard Iremonger Date: Wed, 3 Jun 2020 15:20:09 +0100 Message-Id: <1591194009-4086-9-git-send-email-bernard.iremonger@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> References: <1591194009-4086-1-git-send-email-bernard.iremonger@intel.com> Subject: [dpdk-dev] [PATCH 8/8] doc: release note 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" Signed-off-by: Bernard Iremonger --- doc/guides/rel_notes/release_20_08.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/doc/guides/rel_notes/release_20_08.rst b/doc/guides/rel_notes/release_20_08.rst index 39064af..55eb32b 100644 --- a/doc/guides/rel_notes/release_20_08.rst +++ b/doc/guides/rel_notes/release_20_08.rst @@ -56,6 +56,24 @@ New Features Also, make sure to start the actual text at the margin. ========================================================= +* **Added a map action to the rte_flow API.** + + Added a map action to map Packet Classification (PC) types to flow types + + * Added new action: ``RTE_FLOW_ACTION_MAP`` + * Added new type: ``RTE_FLOW_ITEM_TYPE_PCTYPE`` + * Added new type: ``RTE_FLOW_ITEM_TYPE_FLOWTYPE`` + +* **Updated Intel i40e driver.** + + Updated i40e PMD with new features and improvements, including: + + * added support for the rte_flow map action + +* **Updated the testpmd application.** + + Added support for the rte_flow map action to the testpmd application. + Removed Items -------------