From patchwork Fri Jun 17 09:46:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: fengchengwen X-Patchwork-Id: 112993 X-Patchwork-Delegate: thomas@monjalon.net 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 B5409A0093; Fri, 17 Jun 2022 11:53:12 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0AC6142847; Fri, 17 Jun 2022 11:52:59 +0200 (CEST) Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by mails.dpdk.org (Postfix) with ESMTP id 208FA410FC for ; Fri, 17 Jun 2022 11:52:53 +0200 (CEST) Received: from dggpeml500024.china.huawei.com (unknown [172.30.72.55]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4LPZ6f5KC7z1K9rM; Fri, 17 Jun 2022 17:50:50 +0800 (CST) Received: from localhost.localdomain (10.67.165.24) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 17 Jun 2022 17:52:51 +0800 From: Chengwen Feng To: , , , , , , , , CC: Subject: [PATCH v2 1/5] telemetry: escape special char when tel string Date: Fri, 17 Jun 2022 17:46:20 +0800 Message-ID: <20220617094624.17578-2-fengchengwen@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220617094624.17578-1-fengchengwen@huawei.com> References: <20220615073915.14041-1-fengchengwen@huawei.com> <20220617094624.17578-1-fengchengwen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.67.165.24] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpeml500024.china.huawei.com (7.185.36.10) X-CFilter-Loop: Reflected 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 This patch supports escape special characters (including: \",\\,/,\b, /f,/n,/r,/t) when telemetry string. This patch is used to support telemetry xxx-dump commands which the string may include special characters. Signed-off-by: Chengwen Feng Reviewed-by: Morten Brørup --- lib/telemetry/telemetry.c | 96 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 93 insertions(+), 3 deletions(-) diff --git a/lib/telemetry/telemetry.c b/lib/telemetry/telemetry.c index c6fd03a5ab..0f762f633e 100644 --- a/lib/telemetry/telemetry.c +++ b/lib/telemetry/telemetry.c @@ -215,6 +215,94 @@ container_to_json(const struct rte_tel_data *d, char *out_buf, size_t buf_len) return used; } +static bool +json_is_special_char(char ch) +{ + static unsigned char is_spec[256] = { 0 }; + static bool init_once; + + if (!init_once) { + is_spec['\"'] = 1; + is_spec['\\'] = 1; + is_spec['/'] = 1; + is_spec['\b'] = 1; + is_spec['\f'] = 1; + is_spec['\n'] = 1; + is_spec['\r'] = 1; + is_spec['\t'] = 1; + init_once = true; + } + + return (bool)is_spec[(unsigned char)ch]; +} + +static size_t +json_escape_special_char(char *buf, const char ch) +{ + size_t used = 0; + + switch (ch) { + case '\"': + buf[used++] = '\\'; + buf[used++] = '\"'; + break; + case '\\': + buf[used++] = '\\'; + buf[used++] = '\\'; + break; + case '/': + buf[used++] = '\\'; + buf[used++] = '/'; + break; + case '\b': + buf[used++] = '\\'; + buf[used++] = 'b'; + break; + case '\f': + buf[used++] = '\\'; + buf[used++] = 'f'; + break; + case '\n': + buf[used++] = '\\'; + buf[used++] = 'n'; + break; + case '\r': + buf[used++] = '\\'; + buf[used++] = 'r'; + break; + case '\t': + buf[used++] = '\\'; + buf[used++] = 't'; + break; + default: + break; + } + + return used; +} + +static size_t +json_format_string(char *buf, size_t len, const char *str) +{ + size_t used = 0; + + while (*str) { + if (unlikely(len < used + 2)) { + TMTY_LOG(WARNING, "Insufficient buffer when json format string\n"); + break; + } + + if (json_is_special_char(*str)) + used += json_escape_special_char(buf + used, *str); + else + buf[used++] = *str; + + str++; + } + + return used; +} + static void output_json(const char *cmd, const struct rte_tel_data *d, int s) { @@ -232,9 +320,11 @@ output_json(const char *cmd, const struct rte_tel_data *d, int s) MAX_CMD_LEN, cmd ? cmd : "none"); break; case RTE_TEL_STRING: - used = snprintf(out_buf, sizeof(out_buf), "{\"%.*s\":\"%.*s\"}", - MAX_CMD_LEN, cmd, - RTE_TEL_MAX_SINGLE_STRING_LEN, d->data.str); + used = snprintf(out_buf, sizeof(out_buf), "{\"%.*s\":\"", + MAX_CMD_LEN, cmd); + used += json_format_string(out_buf + used, + sizeof(out_buf) - used - 3, d->data.str); + used += snprintf(out_buf + used, sizeof(out_buf) - used, "\"}"); break; case RTE_TEL_DICT: prefix_used = snprintf(out_buf, sizeof(out_buf), "{\"%.*s\":", From patchwork Fri Jun 17 09:46:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: fengchengwen X-Patchwork-Id: 112990 X-Patchwork-Delegate: thomas@monjalon.net 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 0F5E0A0093; Fri, 17 Jun 2022 11:52:58 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1055942802; Fri, 17 Jun 2022 11:52:55 +0200 (CEST) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id F034F410E7 for ; Fri, 17 Jun 2022 11:52:52 +0200 (CEST) Received: from dggpeml500024.china.huawei.com (unknown [172.30.72.56]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4LPZ7h1NjGzjY7c; Fri, 17 Jun 2022 17:51:44 +0800 (CST) Received: from localhost.localdomain (10.67.165.24) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 17 Jun 2022 17:52:51 +0800 From: Chengwen Feng To: , , , , , , , , CC: Subject: [PATCH v2 2/5] dmadev: support telemetry dump dmadev Date: Fri, 17 Jun 2022 17:46:21 +0800 Message-ID: <20220617094624.17578-3-fengchengwen@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220617094624.17578-1-fengchengwen@huawei.com> References: <20220615073915.14041-1-fengchengwen@huawei.com> <20220617094624.17578-1-fengchengwen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.67.165.24] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpeml500024.china.huawei.com (7.185.36.10) X-CFilter-Loop: Reflected 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 This patch supports telemetry dump dmadev. Signed-off-by: Chengwen Feng Acked-by: Morten Brørup --- lib/dmadev/rte_dmadev.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c index 174d4c40ae..72c3989f60 100644 --- a/lib/dmadev/rte_dmadev.c +++ b/lib/dmadev/rte_dmadev.c @@ -985,6 +985,43 @@ dmadev_handle_dev_stats(const char *cmd __rte_unused, return 0; } +static int +dmadev_handle_dev_dump(const char *cmd __rte_unused, + const char *params, + struct rte_tel_data *d) +{ + char *buf, *end_param; + int dev_id, ret; + FILE *f; + + if (params == NULL || strlen(params) == 0 || !isdigit(*params)) + return -EINVAL; + + dev_id = strtoul(params, &end_param, 0); + if (*end_param != '\0') + RTE_DMA_LOG(WARNING, "Extra parameters passed to dmadev telemetry command, ignoring"); + + buf = calloc(sizeof(char), RTE_TEL_MAX_SINGLE_STRING_LEN); + if (buf == NULL) + return -ENOMEM; + + f = fmemopen(buf, RTE_TEL_MAX_SINGLE_STRING_LEN - 1, "w+"); + if (f == NULL) { + free(buf); + return -EINVAL; + } + + ret = rte_dma_dump(dev_id, f); + fclose(f); + if (ret == 0) { + rte_tel_data_start_dict(d); + rte_tel_data_string(d, buf); + } + + free(buf); + return ret; +} + RTE_INIT(dmadev_init_telemetry) { rte_telemetry_register_cmd("/dmadev/list", dmadev_handle_dev_list, @@ -993,4 +1030,6 @@ RTE_INIT(dmadev_init_telemetry) "Returns information for a dmadev. Parameters: int dev_id"); rte_telemetry_register_cmd("/dmadev/stats", dmadev_handle_dev_stats, "Returns the stats for a dmadev vchannel. Parameters: int dev_id, vchan_id (Optional if only one vchannel)"); + rte_telemetry_register_cmd("/dmadev/dump", dmadev_handle_dev_dump, + "Returns dump information for a dmadev. Parameters: int dev_id"); } From patchwork Fri Jun 17 09:46:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: fengchengwen X-Patchwork-Id: 112991 X-Patchwork-Delegate: thomas@monjalon.net 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 5A2FDA0093; Fri, 17 Jun 2022 11:53:03 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 170854281C; Fri, 17 Jun 2022 11:52:57 +0200 (CEST) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 4291C427F3 for ; Fri, 17 Jun 2022 11:52:53 +0200 (CEST) Received: from dggpeml500024.china.huawei.com (unknown [172.30.72.57]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4LPZ8R49FdzDrKW; Fri, 17 Jun 2022 17:52:23 +0800 (CST) Received: from localhost.localdomain (10.67.165.24) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 17 Jun 2022 17:52:51 +0800 From: Chengwen Feng To: , , , , , , , , CC: Subject: [PATCH v2 3/5] eventdev: support telemetry dump eventdev Date: Fri, 17 Jun 2022 17:46:22 +0800 Message-ID: <20220617094624.17578-4-fengchengwen@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220617094624.17578-1-fengchengwen@huawei.com> References: <20220615073915.14041-1-fengchengwen@huawei.com> <20220617094624.17578-1-fengchengwen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.67.165.24] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpeml500024.china.huawei.com (7.185.36.10) X-CFilter-Loop: Reflected 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 This patch supports telemetry dump eventdev. Signed-off-by: Chengwen Feng Acked-by: Morten Brørup --- lib/eventdev/rte_eventdev.c | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/lib/eventdev/rte_eventdev.c b/lib/eventdev/rte_eventdev.c index 1dc4f966be..5b1bd2b132 100644 --- a/lib/eventdev/rte_eventdev.c +++ b/lib/eventdev/rte_eventdev.c @@ -1791,6 +1791,47 @@ handle_queue_xstats(const char *cmd __rte_unused, return eventdev_build_telemetry_data(dev_id, mode, port_queue_id, d); } +static int +handle_dev_dump(const char *cmd __rte_unused, + const char *params, + struct rte_tel_data *d) +{ + char *buf, *end_param; + int dev_id, ret; + FILE *f; + + if (params == NULL || strlen(params) == 0 || !isdigit(*params)) + return -1; + + /* Get dev ID from parameter string */ + dev_id = strtoul(params, &end_param, 10); + if (*end_param != '\0') + RTE_EDEV_LOG_DEBUG( + "Extra parameters passed to eventdev telemetry command, ignoring"); + + RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL); + + buf = calloc(sizeof(char), RTE_TEL_MAX_SINGLE_STRING_LEN); + if (buf == NULL) + return -ENOMEM; + + f = fmemopen(buf, RTE_TEL_MAX_SINGLE_STRING_LEN - 1, "w+"); + if (f == NULL) { + free(buf); + return -EINVAL; + } + + ret = rte_event_dev_dump(dev_id, f); + fclose(f); + if (ret == 0) { + rte_tel_data_start_dict(d); + rte_tel_data_string(d, buf); + } + + free(buf); + return ret; +} + RTE_INIT(eventdev_init_telemetry) { rte_telemetry_register_cmd("/eventdev/dev_list", handle_dev_list, @@ -1807,6 +1848,8 @@ RTE_INIT(eventdev_init_telemetry) rte_telemetry_register_cmd("/eventdev/queue_xstats", handle_queue_xstats, "Returns stats for an eventdev queue. Params: DevID,QueueID"); + rte_telemetry_register_cmd("/eventdev/dev_dump", handle_dev_dump, + "Returns dump information for an eventdev. Parameter: DevID"); rte_telemetry_register_cmd("/eventdev/queue_links", handle_queue_links, "Returns links for an eventdev port. Params: DevID,QueueID"); } From patchwork Fri Jun 17 09:46:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: fengchengwen X-Patchwork-Id: 112992 X-Patchwork-Delegate: thomas@monjalon.net 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 C81C6A0093; Fri, 17 Jun 2022 11:53:07 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 109D242823; Fri, 17 Jun 2022 11:52:58 +0200 (CEST) Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by mails.dpdk.org (Postfix) with ESMTP id 3ED9941141 for ; Fri, 17 Jun 2022 11:52:53 +0200 (CEST) Received: from dggpeml500024.china.huawei.com (unknown [172.30.72.56]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4LPZ6g1mJFz1K9wr; Fri, 17 Jun 2022 17:50:51 +0800 (CST) Received: from localhost.localdomain (10.67.165.24) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 17 Jun 2022 17:52:51 +0800 From: Chengwen Feng To: , , , , , , , , CC: Subject: [PATCH v2 4/5] rawdev: support telemetry dump rawdev Date: Fri, 17 Jun 2022 17:46:23 +0800 Message-ID: <20220617094624.17578-5-fengchengwen@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220617094624.17578-1-fengchengwen@huawei.com> References: <20220615073915.14041-1-fengchengwen@huawei.com> <20220617094624.17578-1-fengchengwen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.67.165.24] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpeml500024.china.huawei.com (7.185.36.10) X-CFilter-Loop: Reflected 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 This patch supports telemetry dump rawdev. Signed-off-by: Chengwen Feng Acked-by: Morten Brørup --- lib/rawdev/rte_rawdev.c | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/lib/rawdev/rte_rawdev.c b/lib/rawdev/rte_rawdev.c index 2f0a4f132e..a4cdd418f8 100644 --- a/lib/rawdev/rte_rawdev.c +++ b/lib/rawdev/rte_rawdev.c @@ -613,6 +613,46 @@ handle_dev_xstats(const char *cmd __rte_unused, return 0; } +static int +handle_dev_dump(const char *cmd __rte_unused, + const char *params, + struct rte_tel_data *d) +{ + char *buf, *end_param; + int dev_id, ret; + FILE *f; + + if (params == NULL || strlen(params) == 0 || !isdigit(*params)) + return -EINVAL; + + dev_id = strtoul(params, &end_param, 0); + if (*end_param != '\0') + RTE_RDEV_LOG(NOTICE, + "Extra parameters passed to rawdev telemetry command, ignoring"); + if (!rte_rawdev_pmd_is_valid_dev(dev_id)) + return -EINVAL; + + buf = calloc(sizeof(char), RTE_TEL_MAX_SINGLE_STRING_LEN); + if (buf == NULL) + return -ENOMEM; + + f = fmemopen(buf, RTE_TEL_MAX_SINGLE_STRING_LEN - 1, "w+"); + if (f == NULL) { + free(buf); + return -EINVAL; + } + + ret = rte_rawdev_dump(dev_id, f); + fclose(f); + if (ret == 0) { + rte_tel_data_start_dict(d); + rte_tel_data_string(d, buf); + } + + free(buf); + return 0; +} + RTE_LOG_REGISTER_DEFAULT(librawdev_logtype, INFO); RTE_INIT(librawdev_init_telemetry) @@ -621,4 +661,6 @@ RTE_INIT(librawdev_init_telemetry) "Returns list of available rawdev ports. Takes no parameters"); rte_telemetry_register_cmd("/rawdev/xstats", handle_dev_xstats, "Returns the xstats for a rawdev port. Parameters: int port_id"); + rte_telemetry_register_cmd("/rawdev/dump", handle_dev_dump, + "Returns dump information for a rawdev port. Parameters: int port_id"); } From patchwork Fri Jun 17 09:46:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: fengchengwen X-Patchwork-Id: 112994 X-Patchwork-Delegate: thomas@monjalon.net 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 04A8CA0093; Fri, 17 Jun 2022 11:53:18 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 05DDD42B6F; Fri, 17 Jun 2022 11:53:00 +0200 (CEST) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 7FF1E40698 for ; Fri, 17 Jun 2022 11:52:53 +0200 (CEST) Received: from dggpeml500024.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4LPZ576rLjzBrQQ; Fri, 17 Jun 2022 17:49:31 +0800 (CST) Received: from localhost.localdomain (10.67.165.24) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 17 Jun 2022 17:52:51 +0800 From: Chengwen Feng To: , , , , , , , , CC: Subject: [PATCH v2 5/5] ethdev: support telemetry private dump Date: Fri, 17 Jun 2022 17:46:24 +0800 Message-ID: <20220617094624.17578-6-fengchengwen@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220617094624.17578-1-fengchengwen@huawei.com> References: <20220615073915.14041-1-fengchengwen@huawei.com> <20220617094624.17578-1-fengchengwen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.67.165.24] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpeml500024.china.huawei.com (7.185.36.10) X-CFilter-Loop: Reflected 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 This patch supports telemetry private dump a ethdev port. Signed-off-by: Chengwen Feng Acked-by: Morten Brørup --- lib/ethdev/rte_ethdev.c | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index 90e50eb02b..89ebafd680 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -5653,6 +5654,46 @@ eth_dev_handle_port_xstats(const char *cmd __rte_unused, return 0; } +static int +eth_dev_handle_port_dump_priv(const char *cmd __rte_unused, + const char *params, + struct rte_tel_data *d) +{ + char *buf, *end_param; + int port_id, ret; + FILE *f; + + if (params == NULL || strlen(params) == 0 || !isdigit(*params)) + return -EINVAL; + + port_id = strtoul(params, &end_param, 0); + if (*end_param != '\0') + RTE_ETHDEV_LOG(NOTICE, + "Extra parameters passed to ethdev telemetry command, ignoring"); + if (!rte_eth_dev_is_valid_port(port_id)) + return -EINVAL; + + buf = calloc(sizeof(char), RTE_TEL_MAX_SINGLE_STRING_LEN); + if (buf == NULL) + return -ENOMEM; + + f = fmemopen(buf, RTE_TEL_MAX_SINGLE_STRING_LEN - 1, "w+"); + if (f == NULL) { + free(buf); + return -EINVAL; + } + + ret = rte_eth_dev_priv_dump(port_id, f); + fclose(f); + if (ret == 0) { + rte_tel_data_start_dict(d); + rte_tel_data_string(d, buf); + } + + free(buf); + return 0; +} + static int eth_dev_handle_port_link_status(const char *cmd __rte_unused, const char *params, @@ -5936,6 +5977,8 @@ RTE_INIT(ethdev_init_telemetry) "Returns the common stats for a port. Parameters: int port_id"); rte_telemetry_register_cmd("/ethdev/xstats", eth_dev_handle_port_xstats, "Returns the extended stats for a port. Parameters: int port_id"); + rte_telemetry_register_cmd("/ethdev/dump_priv", eth_dev_handle_port_dump_priv, + "Returns dump private information for a port. Parameters: int port_id"); rte_telemetry_register_cmd("/ethdev/link_status", eth_dev_handle_port_link_status, "Returns the link status for a port. Parameters: int port_id");