From patchwork Wed Apr 14 06:13:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Haifei Luo X-Patchwork-Id: 91398 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5276FA0524; Wed, 14 Apr 2021 08:13:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3D3FE1616AC; Wed, 14 Apr 2021 08:13:22 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by mails.dpdk.org (Postfix) with ESMTP id 6DF2A1616AC for ; Wed, 14 Apr 2021 08:13:20 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from haifeil@nvidia.com) with SMTP; 14 Apr 2021 09:13:15 +0300 Received: from nvidia.com (gen-l-vrt-173.mtl.labs.mlnx [10.234.173.1]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 13E6DD6F017586; Wed, 14 Apr 2021 09:13:15 +0300 From: Haifei Luo To: dev@dpdk.org Cc: orika@nvidia.com, viacheslavo@nvidia.com, rasland@nvidia.com, xuemingl@nvidia.com, haifeil@nvidia.com, ajit.khaparde@broadcom.com, Xiaoyun Li , Matan Azrad , Shahaf Shuler , Jerin Jacob , Nithin Dabilpuram , Kiran Kumar K , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Date: Wed, 14 Apr 2021 09:13:09 +0300 Message-Id: <1618380791-166428-2-git-send-email-haifeil@nvidia.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1618380791-166428-1-git-send-email-haifeil@nvidia.com> References: <1615277716-64404-1-git-send-email-haifeil@nvidia.com> <1618380791-166428-1-git-send-email-haifeil@nvidia.com> Subject: [dpdk-dev] [PATCH v3 1/3] ethdev: modify rte API for single flow dump X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" Previous implementations support dump all the flows. Add new arg rte_flow in rte_flow_dev_dump to dump one flow. Signed-off-by: Haifei Luo Acked-by: Ajit Khaparde Acked-by: Ori Kam --- app/test-pmd/config.c | 2 +- doc/guides/nics/mlx5.rst | 9 ++++++--- doc/guides/prog_guide/rte_flow.rst | 24 ++++++++++++++++++++++++ drivers/net/mlx5/linux/mlx5_socket.c | 2 +- drivers/net/mlx5/mlx5.h | 4 ++-- drivers/net/mlx5/mlx5_flow.c | 9 ++++++--- drivers/net/octeontx2/otx2_flow.c | 9 ++++++++- lib/librte_ethdev/rte_flow.c | 5 +++-- lib/librte_ethdev/rte_flow.h | 5 ++++- lib/librte_ethdev/rte_flow_driver.h | 1 + 10 files changed, 56 insertions(+), 14 deletions(-) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index a5e82b7..ca34a63 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -1932,7 +1932,7 @@ struct rte_flow_shared_action * return -errno; } } - ret = rte_flow_dev_dump(port_id, file, &error); + ret = rte_flow_dev_dump(port_id, NULL, file, &error); if (ret) { port_flow_complain(&error); printf("Failed to dump flow: %s\n", strerror(-ret)); diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index 490329a..7ff92b0 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -1837,13 +1837,16 @@ all flows with assistance of external tools. .. code-block:: console - testpmd> flow dump + To dump all flows: + testpmd> flow dump all + and dump one flow: + testpmd> flow dump rule - call rte_flow_dev_dump api: .. code-block:: console - rte_flow_dev_dump(port, file, NULL); + rte_flow_dev_dump(port, flow, file, NULL); #. Dump human-readable flows from raw file: @@ -1851,4 +1854,4 @@ all flows with assistance of external tools. .. code-block:: console - mlx_steering_dump.py -f + mlx_steering_dump.py -f -flowptr diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index e1b93ec..2ed149e 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -3025,6 +3025,30 @@ Return values: - 0 on success, a negative errno value otherwise and ``rte_errno`` is set. +Dump +~~~~~ + +Dump information for all or one flows. + +.. code-block:: c + + int + rte_flow_dev_dump(uint16_t port_id, struct rte_flow *flow, + FILE *file, + struct rte_flow_error *error); + +Arguments: + +- ``port_id``: port identifier of Ethernet device. +- ``flow``: flow rule handle to dump. NULL to dump all. +- ``file``: a pointer to a file for output +- ``error``: perform verbose error reporting if not NULL. PMDs initialize + this structure in case of error only. + +Return values: + +- 0 on success, a negative errno value otherwise and ``rte_errno`` is set. + Query ~~~~~ diff --git a/drivers/net/mlx5/linux/mlx5_socket.c b/drivers/net/mlx5/linux/mlx5_socket.c index b1f41bc..6e354f4 100644 --- a/drivers/net/mlx5/linux/mlx5_socket.c +++ b/drivers/net/mlx5/linux/mlx5_socket.c @@ -84,7 +84,7 @@ } /* Dump flow. */ dev = &rte_eth_devices[port_id]; - ret = mlx5_flow_dev_dump(dev, file, NULL); + ret = mlx5_flow_dev_dump(dev, NULL, file, NULL); /* Set-up the ancillary data and reply. */ msg.msg_controllen = 0; msg.msg_control = NULL; diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 0f69f9d..e0f7101 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -1245,8 +1245,8 @@ void mlx5_flow_async_pool_query_handle(struct mlx5_dev_ctx_shared *sh, void mlx5_counter_free(struct rte_eth_dev *dev, uint32_t cnt); int mlx5_counter_query(struct rte_eth_dev *dev, uint32_t cnt, bool clear, uint64_t *pkts, uint64_t *bytes); -int mlx5_flow_dev_dump(struct rte_eth_dev *dev, FILE *file, - struct rte_flow_error *error); +int mlx5_flow_dev_dump(struct rte_eth_dev *dev, struct rte_flow *flow, + FILE *file, struct rte_flow_error *error); void mlx5_flow_rxq_dynf_metadata_set(struct rte_eth_dev *dev); int mlx5_flow_get_aged_flows(struct rte_eth_dev *dev, void **contexts, uint32_t nb_contexts, struct rte_flow_error *error); diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 668c32c..a8cf674 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -7154,7 +7154,7 @@ struct mlx5_meter_domains_infos * * 0 on success, a nagative value otherwise. */ int -mlx5_flow_dev_dump(struct rte_eth_dev *dev, +mlx5_flow_dev_dump(struct rte_eth_dev *dev, struct rte_flow *flow_idx, FILE *file, struct rte_flow_error *error __rte_unused) { @@ -7166,8 +7166,11 @@ struct mlx5_meter_domains_infos * return -errno; return -ENOTSUP; } - return mlx5_devx_cmd_flow_dump(sh->fdb_domain, sh->rx_domain, - sh->tx_domain, file); + + if (!flow_idx) + return mlx5_devx_cmd_flow_dump(sh->fdb_domain, + sh->rx_domain, sh->tx_domain, file); + return -ENOTSUP; } /** diff --git a/drivers/net/octeontx2/otx2_flow.c b/drivers/net/octeontx2/otx2_flow.c index 14ac9bc..1c90d75 100644 --- a/drivers/net/octeontx2/otx2_flow.c +++ b/drivers/net/octeontx2/otx2_flow.c @@ -807,7 +807,7 @@ static int otx2_flow_dev_dump(struct rte_eth_dev *dev, - FILE *file, + struct rte_flow *flow, FILE *file, struct rte_flow_error *error) { struct otx2_eth_dev *hw = dev->data->dev_private; @@ -822,6 +822,13 @@ "Invalid file"); return -EINVAL; } + if (flow != NULL) { + rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_HANDLE, + NULL, + "Invalid argument"); + return -EINVAL; + } max_prio = hw->npc_flow.flow_max_priority; diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c index e07e617..7241f00 100644 --- a/lib/librte_ethdev/rte_flow.c +++ b/lib/librte_ethdev/rte_flow.c @@ -1027,7 +1027,8 @@ enum rte_flow_conv_item_spec_type { } int -rte_flow_dev_dump(uint16_t port_id, FILE *file, struct rte_flow_error *error) +rte_flow_dev_dump(uint16_t port_id, struct rte_flow *flow, + FILE *file, struct rte_flow_error *error) { struct rte_eth_dev *dev = &rte_eth_devices[port_id]; const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error); @@ -1037,7 +1038,7 @@ enum rte_flow_conv_item_spec_type { return -rte_errno; if (likely(!!ops->dev_dump)) { fts_enter(dev); - ret = ops->dev_dump(dev, file, error); + ret = ops->dev_dump(dev, flow, file, error); fts_exit(dev); return flow_err(port_id, ret, error); } diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h index c476a0f..53d1aa5 100644 --- a/lib/librte_ethdev/rte_flow.h +++ b/lib/librte_ethdev/rte_flow.h @@ -3232,6 +3232,8 @@ enum rte_flow_conv_op { * * @param[in] port_id * The port identifier of the Ethernet device. + * @param[in] flow + * The pointer of rte flow. * @param[in] file * A pointer to a file for output. * @param[out] error @@ -3242,7 +3244,8 @@ enum rte_flow_conv_op { */ __rte_experimental int -rte_flow_dev_dump(uint16_t port_id, FILE *file, struct rte_flow_error *error); +rte_flow_dev_dump(uint16_t port_id, struct rte_flow *flow, + FILE *file, struct rte_flow_error *error); /** * Check if mbuf dynamic field for metadata is registered. diff --git a/lib/librte_ethdev/rte_flow_driver.h b/lib/librte_ethdev/rte_flow_driver.h index da594d9..6ae1f8c 100644 --- a/lib/librte_ethdev/rte_flow_driver.h +++ b/lib/librte_ethdev/rte_flow_driver.h @@ -75,6 +75,7 @@ struct rte_flow_ops { /** See rte_flow_dev_dump(). */ int (*dev_dump) (struct rte_eth_dev *dev, + struct rte_flow *flow, FILE *file, struct rte_flow_error *error); /** See rte_flow_get_aged_flows() */ From patchwork Wed Apr 14 06:13:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Haifei Luo X-Patchwork-Id: 91399 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B061CA0524; Wed, 14 Apr 2021 08:13:27 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 670E71616B3; Wed, 14 Apr 2021 08:13:23 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by mails.dpdk.org (Postfix) with ESMTP id 6DF051616AB for ; Wed, 14 Apr 2021 08:13:20 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from haifeil@nvidia.com) with SMTP; 14 Apr 2021 09:13:16 +0300 Received: from nvidia.com (gen-l-vrt-173.mtl.labs.mlnx [10.234.173.1]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 13E6DD6G017586; Wed, 14 Apr 2021 09:13:16 +0300 From: Haifei Luo To: dev@dpdk.org Cc: orika@nvidia.com, viacheslavo@nvidia.com, rasland@nvidia.com, xuemingl@nvidia.com, haifeil@nvidia.com, ajit.khaparde@broadcom.com, Xiaoyun Li Date: Wed, 14 Apr 2021 09:13:10 +0300 Message-Id: <1618380791-166428-3-git-send-email-haifeil@nvidia.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1618380791-166428-1-git-send-email-haifeil@nvidia.com> References: <1615277716-64404-1-git-send-email-haifeil@nvidia.com> <1618380791-166428-1-git-send-email-haifeil@nvidia.com> Subject: [dpdk-dev] [PATCH v3 2/3] app/testpmd: add CLIs for single flow dump feature X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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 support for single flow dump. The CLIs to dump one rule: flow dump PORT rule ID to dump all: flow dump PORT all Examples: testpmd> flow dump 0 all testpmd> flow dump 0 rule 0 Signed-off-by: Haifei Luo Acked-by: Ajit Khaparde --- app/test-pmd/cmdline_flow.c | 55 +++++++++++++++++++++++++---- app/test-pmd/config.c | 38 ++++++++++++++++++-- app/test-pmd/testpmd.h | 3 +- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 6 +++- 4 files changed, 90 insertions(+), 12 deletions(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index fb7a3a8..0127d9e 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -108,6 +108,10 @@ enum index { TUNNEL_SET, TUNNEL_MATCH, + /* Dump arguments */ + DUMP_ALL, + DUMP_ONE, + /* Shared action arguments */ SHARED_ACTION_CREATE, SHARED_ACTION_UPDATE, @@ -793,6 +797,8 @@ struct buffer { } destroy; /**< Destroy arguments. */ struct { char file[128]; + bool mode; + uint32_t rule; } dump; /**< Dump arguments. */ struct { uint32_t rule; @@ -844,6 +850,12 @@ struct parse_action_priv { ZERO, }; +static const enum index next_dump_subcmd[] = { + DUMP_ALL, + DUMP_ONE, + ZERO, +}; + static const enum index next_sa_subcmd[] = { SHARED_ACTION_CREATE, SHARED_ACTION_UPDATE, @@ -2032,10 +2044,9 @@ static int comp_set_modify_field_id(struct context *, const struct token *, }, [DUMP] = { .name = "dump", - .help = "dump all flow rules to file", - .next = NEXT(next_dump_attr, NEXT_ENTRY(PORT_ID)), - .args = ARGS(ARGS_ENTRY(struct buffer, args.dump.file), - ARGS_ENTRY(struct buffer, port)), + .help = "dump single/all flow rules to file", + .next = NEXT(next_dump_subcmd, NEXT_ENTRY(PORT_ID)), + .args = ARGS(ARGS_ENTRY(struct buffer, port)), .call = parse_dump, }, [QUERY] = { @@ -2125,6 +2136,22 @@ static int comp_set_modify_field_id(struct context *, const struct token *, .args = ARGS(ARGS_ENTRY_PTR(struct buffer, args.destroy.rule)), .call = parse_destroy, }, + /* Dump arguments. */ + [DUMP_ALL] = { + .name = "all", + .help = "dump all", + .next = NEXT(next_dump_attr), + .args = ARGS(ARGS_ENTRY(struct buffer, args.dump.file)), + .call = parse_dump, + }, + [DUMP_ONE] = { + .name = "rule", + .help = "dump one rule", + .next = NEXT(next_dump_attr, NEXT_ENTRY(RULE_ID)), + .args = ARGS(ARGS_ENTRY(struct buffer, args.dump.file), + ARGS_ENTRY(struct buffer, args.dump.rule)), + .call = parse_dump, + }, /* Query arguments. */ [QUERY_ACTION] = { .name = "{action}", @@ -6364,8 +6391,20 @@ static int comp_set_modify_field_id(struct context *, const struct token *, ctx->objdata = 0; ctx->object = out; ctx->objmask = NULL; + return len; + } + switch (ctx->curr) { + case DUMP_ALL: + case DUMP_ONE: + out->args.dump.mode = (ctx->curr == DUMP_ALL) ? true : false; + out->command = ctx->curr; + ctx->objdata = 0; + ctx->object = out; + ctx->objmask = NULL; + return len; + default: + return -1; } - return len; } /** Parse tokens for query command. */ @@ -7659,8 +7698,10 @@ static int comp_set_modify_field_id(struct context *, const struct token *, case FLUSH: port_flow_flush(in->port); break; - case DUMP: - port_flow_dump(in->port, in->args.dump.file); + case DUMP_ONE: + case DUMP_ALL: + port_flow_dump(in->port, in->args.dump.mode, + in->args.dump.rule, in->args.dump.file); break; case QUERY: port_flow_query(in->port, in->args.query.rule, diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index ca34a63..40b2b29 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -1916,13 +1916,41 @@ struct rte_flow_shared_action * return ret; } -/** Dump all flow rules. */ +/** Dump flow rules. */ int -port_flow_dump(portid_t port_id, const char *file_name) +port_flow_dump(portid_t port_id, bool dump_all, uint32_t rule_id, + const char *file_name) { int ret = 0; FILE *file = stdout; struct rte_flow_error error; + struct rte_port *port; + struct port_flow *pflow; + struct rte_flow *tmpFlow = NULL; + bool found = false; + + if (port_id_is_invalid(port_id, ENABLED_WARN) || + port_id == (portid_t)RTE_PORT_ALL) + return -EINVAL; + + if (!dump_all) { + port = &ports[port_id]; + pflow = port->flow_list; + while (pflow) { + if (rule_id != pflow->id) { + pflow = pflow->next; + } else { + tmpFlow = pflow->flow; + if (tmpFlow) + found = true; + break; + } + } + if (found == false) { + printf("Failed to dump to flow %d\n", rule_id); + return -EINVAL; + } + } if (file_name && strlen(file_name)) { file = fopen(file_name, "w"); @@ -1932,7 +1960,11 @@ struct rte_flow_shared_action * return -errno; } } - ret = rte_flow_dev_dump(port_id, NULL, file, &error); + + if (!dump_all) + ret = rte_flow_dev_dump(port_id, tmpFlow, file, &error); + else + ret = rte_flow_dev_dump(port_id, NULL, file, &error); if (ret) { port_flow_complain(&error); printf("Failed to dump flow: %s\n", strerror(-ret)); diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index a87ccb0..36d8535 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -825,7 +825,8 @@ void update_age_action_context(const struct rte_flow_action *actions, struct port_flow *pf); int port_flow_destroy(portid_t port_id, uint32_t n, const uint32_t *rule); int port_flow_flush(portid_t port_id); -int port_flow_dump(portid_t port_id, const char *file_name); +int port_flow_dump(portid_t port_id, bool dump_all, + uint32_t rule, const char *file_name); int port_flow_query(portid_t port_id, uint32_t rule, const struct rte_flow_action *action); void port_flow_list(portid_t port_id, uint32_t n, const uint32_t *group); diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 36f0a32..5454524 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3332,7 +3332,11 @@ following sections. - Dump internal representation information of all flows in hardware:: - flow dump {port_id} {output_file} + flow dump {port_id} all {output_file} + + for one flow : + + flow dump {port_id} rule {rule_id} {output_file} - List and destroy aged flow rules:: From patchwork Wed Apr 14 06:13:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Haifei Luo X-Patchwork-Id: 91400 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8ADCBA0524; Wed, 14 Apr 2021 08:13:33 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A62EA1616BA; Wed, 14 Apr 2021 08:13:24 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by mails.dpdk.org (Postfix) with ESMTP id 8159B1616AD for ; Wed, 14 Apr 2021 08:13:20 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from haifeil@nvidia.com) with SMTP; 14 Apr 2021 09:13:18 +0300 Received: from nvidia.com (gen-l-vrt-173.mtl.labs.mlnx [10.234.173.1]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 13E6DD6H017586; Wed, 14 Apr 2021 09:13:18 +0300 From: Haifei Luo To: dev@dpdk.org Cc: orika@nvidia.com, viacheslavo@nvidia.com, rasland@nvidia.com, xuemingl@nvidia.com, haifeil@nvidia.com, ajit.khaparde@broadcom.com, Ferruh Yigit , Matan Azrad , Shahaf Shuler Date: Wed, 14 Apr 2021 09:13:11 +0300 Message-Id: <1618380791-166428-4-git-send-email-haifeil@nvidia.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1618380791-166428-1-git-send-email-haifeil@nvidia.com> References: <1615277716-64404-1-git-send-email-haifeil@nvidia.com> <1618380791-166428-1-git-send-email-haifeil@nvidia.com> Subject: [dpdk-dev] [PATCH v3 3/3] doc: add single flow dump to guides X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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 "Flow dump" in features/default.ini and features/mlx5.ini. Add testpmd CLI and API changes in release_notes. Signed-off-by: Haifei Luo --- doc/guides/nics/features/default.ini | 1 + doc/guides/nics/features/mlx5.ini | 1 + doc/guides/rel_notes/release_21_05.rst | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini index 8046bd1..49aaf17 100644 --- a/doc/guides/nics/features/default.ini +++ b/doc/guides/nics/features/default.ini @@ -39,6 +39,7 @@ DCB = VLAN filter = Flow control = Flow API = +Flow dump = Rate limitation = Traffic mirroring = Inline crypto = diff --git a/doc/guides/nics/features/mlx5.ini b/doc/guides/nics/features/mlx5.ini index ddd131d..3c5fcff 100644 --- a/doc/guides/nics/features/mlx5.ini +++ b/doc/guides/nics/features/mlx5.ini @@ -29,6 +29,7 @@ SR-IOV = Y VLAN filter = Y Flow control = Y Flow API = Y +Flow dump = Y CRC offload = Y VLAN offload = Y L3 checksum offload = Y diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst index a0b9079..e3ae470 100644 --- a/doc/guides/rel_notes/release_21_05.rst +++ b/doc/guides/rel_notes/release_21_05.rst @@ -174,6 +174,8 @@ New Features ``dpdk-testpmd -- --eth-link-speed N`` * Added command to display Rx queue used descriptor count. ``show port (port_id) rxq (queue_id) desc used count`` + * Added command to dump internal representation information of single flow. + ``flow dump (port_id) rule (rule_id)`` Removed Items @@ -207,6 +209,9 @@ API Changes Also, make sure to start the actual text at the margin. ======================================================= +* ethdev: Added a rte_flow pointer parameter to the function + ``rte_flow_dev_dump()`` allowing dump for single flow. + * eal: The experimental TLS API added in ``rte_thread.h`` has been renamed from ``rte_thread_tls_*`` to ``rte_thread_*`` to avoid naming redundancy and confusion with the transport layer security term.