From patchwork Fri Dec 9 11:04:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120708 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 E8021A00C2; Fri, 9 Dec 2022 12:04:53 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BF18D42D25; Fri, 9 Dec 2022 12:04:49 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 0866240695 for ; Fri, 9 Dec 2022 12:04:47 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NT7S958zLzJqQH; Fri, 9 Dec 2022 19:03:53 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Dec 2022 19:04:43 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V2 01/11] telemetry: move to header to controllable range Date: Fri, 9 Dec 2022 19:04:40 +0800 Message-ID: <20221209110450.62456-2-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221209110450.62456-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221209110450.62456-1-lihuisong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 The "stdint.h" header is outside '_RTE_TELEMETRY_H_' macro, which cause this header is uncontrollable. So this patch moves this header to inside '_RTE_TELEMETRY_H_'. Fixes: 99a2dd955fba ("lib: remove librte_ prefix from directory names") Cc: stable@dpdk.org Signed-off-by: Huisong Li --- lib/telemetry/rte_telemetry.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/telemetry/rte_telemetry.h b/lib/telemetry/rte_telemetry.h index d9918c4e96..40e9a3bf9d 100644 --- a/lib/telemetry/rte_telemetry.h +++ b/lib/telemetry/rte_telemetry.h @@ -2,9 +2,6 @@ * Copyright(c) 2018 Intel Corporation */ -#include - - #ifndef _RTE_TELEMETRY_H_ #define _RTE_TELEMETRY_H_ @@ -12,6 +9,8 @@ extern "C" { #endif +#include + /** Maximum length for string used in object. */ #define RTE_TEL_MAX_STRING_LEN 128 /** Maximum length of string. */ From patchwork Fri Dec 9 11:04:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120716 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 B6E46A00C2; Fri, 9 Dec 2022 12:05:40 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C1F3C42D5C; Fri, 9 Dec 2022 12:04:59 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 47AD342D38 for ; Fri, 9 Dec 2022 12:04:53 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NT7SC21vLzJqRF; Fri, 9 Dec 2022 19:03:55 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Dec 2022 19:04:43 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V2 02/11] telemetry: add u32 value type Date: Fri, 9 Dec 2022 19:04:41 +0800 Message-ID: <20221209110450.62456-3-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221209110450.62456-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221209110450.62456-1-lihuisong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 Currently, 32-bit integer value only is signed in telemetry. The u32 data can not be assigned to signed 32-bit integer. However, assigning to u64 is very wasteful, after all, the buffer capacity of each transfer is limited. So it is necessary for 'u32' data to add usigned 32-bit integer type and container type. Cc: stable@dpdk.org Signed-off-by: Huisong Li --- lib/telemetry/rte_telemetry.h | 35 ++++++++++++++++++++++++ lib/telemetry/telemetry.c | 25 +++++++++++++++-- lib/telemetry/telemetry_data.c | 50 ++++++++++++++++++++++++++++------ lib/telemetry/telemetry_data.h | 2 ++ lib/telemetry/telemetry_json.h | 29 ++++++++++++++++++++ lib/telemetry/version.map | 9 ++++++ 6 files changed, 140 insertions(+), 10 deletions(-) diff --git a/lib/telemetry/rte_telemetry.h b/lib/telemetry/rte_telemetry.h index 40e9a3bf9d..5efdafc156 100644 --- a/lib/telemetry/rte_telemetry.h +++ b/lib/telemetry/rte_telemetry.h @@ -10,6 +10,7 @@ extern "C" { #endif #include +#include /** Maximum length for string used in object. */ #define RTE_TEL_MAX_STRING_LEN 128 @@ -44,6 +45,7 @@ enum rte_tel_value_type { RTE_TEL_INT_VAL, /** a signed 32-bit int value */ RTE_TEL_U64_VAL, /** an unsigned 64-bit int value */ RTE_TEL_CONTAINER, /** a container struct */ + RTE_TEL_U32_VAL, /** an unsigned 32-bit int value */ }; /** @@ -117,6 +119,21 @@ rte_tel_data_add_array_string(struct rte_tel_data *d, const char *str); int rte_tel_data_add_array_int(struct rte_tel_data *d, int x); +/** + * Add a uint32_t to an array. + * The array must have been started by rte_tel_data_start_array() with + * RTE_TEL_U32_VAL as the type parameter. + * + * @param d + * The data structure passed to the callback + * @param x + * The number to be returned in the array + * @return + * 0 on success, negative errno on error + */ +__rte_experimental +int rte_tel_data_add_array_u32(struct rte_tel_data *d, uint32_t x); + /** * Add a uint64_t to an array. * The array must have been started by rte_tel_data_start_array() with @@ -189,6 +206,24 @@ rte_tel_data_add_dict_string(struct rte_tel_data *d, const char *name, int rte_tel_data_add_dict_int(struct rte_tel_data *d, const char *name, int val); +/** + * Add a uint32_t value to a dictionary. + * The dict must have been started by rte_tel_data_start_dict(). + * + * @param d + * The data structure passed to the callback + * @param name + * The name the value is to be stored under in the dict + * Must contain only alphanumeric characters or the symbols: '_' or '/' + * @param val + * The number to be stored in the dict + * @return + * 0 on success, negative errno on error, E2BIG on string truncation of name. + */ +__rte_experimental +int rte_tel_data_add_dict_u32(struct rte_tel_data *d, + const char *name, uint32_t val); + /** * Add a uint64_t value to a dictionary. * The dict must have been started by rte_tel_data_start_dict(). diff --git a/lib/telemetry/telemetry.c b/lib/telemetry/telemetry.c index 8fbb4f3060..b52fcae713 100644 --- a/lib/telemetry/telemetry.c +++ b/lib/telemetry/telemetry.c @@ -167,8 +167,9 @@ container_to_json(const struct rte_tel_data *d, char *out_buf, size_t buf_len) size_t used = 0; unsigned int i; - if (d->type != RTE_TEL_DICT && d->type != RTE_TEL_ARRAY_U64 && - d->type != RTE_TEL_ARRAY_INT && d->type != RTE_TEL_ARRAY_STRING) + if (d->type != RTE_TEL_DICT && d->type != RTE_TEL_ARRAY_U32 && + d->type != RTE_TEL_ARRAY_U64 && d->type != RTE_TEL_ARRAY_INT && + d->type != RTE_TEL_ARRAY_STRING) return snprintf(out_buf, buf_len, "null"); used = rte_tel_json_empty_array(out_buf, buf_len, 0); @@ -177,6 +178,11 @@ container_to_json(const struct rte_tel_data *d, char *out_buf, size_t buf_len) used = rte_tel_json_add_array_u64(out_buf, buf_len, used, d->data.array[i].u64val); + if (d->type == RTE_TEL_ARRAY_U32) + for (i = 0; i < d->data_len; i++) + used = rte_tel_json_add_array_u32(out_buf, + buf_len, used, + d->data.array[i].u32val); if (d->type == RTE_TEL_ARRAY_INT) for (i = 0; i < d->data_len; i++) used = rte_tel_json_add_array_int(out_buf, @@ -201,6 +207,11 @@ container_to_json(const struct rte_tel_data *d, char *out_buf, size_t buf_len) buf_len, used, v->name, v->value.ival); break; + case RTE_TEL_U32_VAL: + used = rte_tel_json_add_obj_u32(out_buf, + buf_len, used, + v->name, v->value.u32val); + break; case RTE_TEL_U64_VAL: used = rte_tel_json_add_obj_u64(out_buf, buf_len, used, @@ -268,6 +279,11 @@ output_json(const char *cmd, const struct rte_tel_data *d, int s) buf_len, used, v->name, v->value.ival); break; + case RTE_TEL_U32_VAL: + used = rte_tel_json_add_obj_u32(cb_data_buf, + buf_len, used, + v->name, v->value.u32val); + break; case RTE_TEL_U64_VAL: used = rte_tel_json_add_obj_u64(cb_data_buf, buf_len, used, @@ -293,6 +309,7 @@ output_json(const char *cmd, const struct rte_tel_data *d, int s) case RTE_TEL_ARRAY_STRING: case RTE_TEL_ARRAY_INT: + case RTE_TEL_ARRAY_U32: case RTE_TEL_ARRAY_U64: case RTE_TEL_ARRAY_CONTAINER: used = rte_tel_json_empty_array(cb_data_buf, buf_len, 0); @@ -306,6 +323,10 @@ output_json(const char *cmd, const struct rte_tel_data *d, int s) used = rte_tel_json_add_array_int(cb_data_buf, buf_len, used, d->data.array[i].ival); + else if (d->type == RTE_TEL_ARRAY_U32) + used = rte_tel_json_add_array_u32(cb_data_buf, + buf_len, used, + d->data.array[i].u32val); else if (d->type == RTE_TEL_ARRAY_U64) used = rte_tel_json_add_array_u64(cb_data_buf, buf_len, used, diff --git a/lib/telemetry/telemetry_data.c b/lib/telemetry/telemetry_data.c index 34366ecee3..c120bf6281 100644 --- a/lib/telemetry/telemetry_data.c +++ b/lib/telemetry/telemetry_data.c @@ -18,8 +18,9 @@ rte_tel_data_start_array(struct rte_tel_data *d, enum rte_tel_value_type type) enum tel_container_types array_types[] = { RTE_TEL_ARRAY_STRING, /* RTE_TEL_STRING_VAL = 0 */ RTE_TEL_ARRAY_INT, /* RTE_TEL_INT_VAL = 1 */ - RTE_TEL_ARRAY_U64, /* RTE_TEL_u64_VAL = 2 */ + RTE_TEL_ARRAY_U64, /* RTE_TEL_U64_VAL = 2 */ RTE_TEL_ARRAY_CONTAINER, /* RTE_TEL_CONTAINER = 3 */ + RTE_TEL_ARRAY_U32, /* RTE_TEL_U32_VAL = 4 */ }; d->type = array_types[type]; d->data_len = 0; @@ -69,6 +70,17 @@ rte_tel_data_add_array_int(struct rte_tel_data *d, int x) return 0; } +int +rte_tel_data_add_array_u32(struct rte_tel_data *d, uint32_t x) +{ + if (d->type != RTE_TEL_ARRAY_U32) + return -EINVAL; + if (d->data_len >= RTE_TEL_MAX_ARRAY_ENTRIES) + return -ENOSPC; + d->data.array[d->data_len++].u32val = x; + return 0; +} + int rte_tel_data_add_array_u64(struct rte_tel_data *d, uint64_t x) { @@ -85,9 +97,10 @@ rte_tel_data_add_array_container(struct rte_tel_data *d, struct rte_tel_data *val, int keep) { if (d->type != RTE_TEL_ARRAY_CONTAINER || - (val->type != RTE_TEL_ARRAY_U64 - && val->type != RTE_TEL_ARRAY_INT - && val->type != RTE_TEL_ARRAY_STRING)) + (val->type != RTE_TEL_ARRAY_U32 && + val->type != RTE_TEL_ARRAY_U64 && + val->type != RTE_TEL_ARRAY_INT && + val->type != RTE_TEL_ARRAY_STRING)) return -EINVAL; if (d->data_len >= RTE_TEL_MAX_ARRAY_ENTRIES) return -ENOSPC; @@ -159,6 +172,26 @@ rte_tel_data_add_dict_int(struct rte_tel_data *d, const char *name, int val) return bytes < RTE_TEL_MAX_STRING_LEN ? 0 : E2BIG; } +int +rte_tel_data_add_dict_u32(struct rte_tel_data *d, + const char *name, uint32_t val) +{ + struct tel_dict_entry *e = &d->data.dict[d->data_len]; + if (d->type != RTE_TEL_DICT) + return -EINVAL; + if (d->data_len >= RTE_TEL_MAX_DICT_ENTRIES) + return -ENOSPC; + + if (!valid_name(name)) + return -EINVAL; + + d->data_len++; + e->type = RTE_TEL_U32_VAL; + e->value.u32val = val; + const size_t bytes = strlcpy(e->name, name, RTE_TEL_MAX_STRING_LEN); + return bytes < RTE_TEL_MAX_STRING_LEN ? 0 : E2BIG; +} + int rte_tel_data_add_dict_u64(struct rte_tel_data *d, const char *name, uint64_t val) @@ -185,10 +218,11 @@ rte_tel_data_add_dict_container(struct rte_tel_data *d, const char *name, { struct tel_dict_entry *e = &d->data.dict[d->data_len]; - if (d->type != RTE_TEL_DICT || (val->type != RTE_TEL_ARRAY_U64 - && val->type != RTE_TEL_ARRAY_INT - && val->type != RTE_TEL_ARRAY_STRING - && val->type != RTE_TEL_DICT)) + if (d->type != RTE_TEL_DICT || (val->type != RTE_TEL_ARRAY_U32 && + val->type != RTE_TEL_ARRAY_U64 && + val->type != RTE_TEL_ARRAY_INT && + val->type != RTE_TEL_ARRAY_STRING && + val->type != RTE_TEL_DICT)) return -EINVAL; if (d->data_len >= RTE_TEL_MAX_DICT_ENTRIES) return -ENOSPC; diff --git a/lib/telemetry/telemetry_data.h b/lib/telemetry/telemetry_data.h index 26aa28e72c..1455bf77d7 100644 --- a/lib/telemetry/telemetry_data.h +++ b/lib/telemetry/telemetry_data.h @@ -15,6 +15,7 @@ enum tel_container_types { RTE_TEL_ARRAY_INT, /** array of signed, 32-bit int values */ RTE_TEL_ARRAY_U64, /** array of unsigned 64-bit int values */ RTE_TEL_ARRAY_CONTAINER, /** array of container structs */ + RTE_TEL_ARRAY_U32, /** array of unsigned 32-bit int values */ }; struct container { @@ -29,6 +30,7 @@ struct container { union tel_value { char sval[RTE_TEL_MAX_STRING_LEN]; int ival; + uint32_t u32val; uint64_t u64val; struct container container; }; diff --git a/lib/telemetry/telemetry_json.h b/lib/telemetry/telemetry_json.h index e3fae7c30d..05762ec89a 100644 --- a/lib/telemetry/telemetry_json.h +++ b/lib/telemetry/telemetry_json.h @@ -146,6 +146,19 @@ rte_tel_json_add_array_int(char *buf, const int len, const int used, int val) return ret == 0 ? used : end + ret; } +/* Appends a uint32_t into the JSON array in the provided buffer. */ +static inline int +rte_tel_json_add_array_u32(char *buf, const int len, const int used, + uint32_t val) +{ + int ret, end = used - 1; /* strip off final delimiter */ + if (used <= 2) /* assume empty, since minimum is '[]' */ + return __json_snprintf(buf, len, "[%u]", val); + + ret = __json_snprintf(buf + end, len - end, ",%u]", val); + return ret == 0 ? used : end + ret; +} + /* Appends a uint64_t into the JSON array in the provided buffer. */ static inline int rte_tel_json_add_array_u64(char *buf, const int len, const int used, @@ -175,6 +188,22 @@ rte_tel_json_add_array_json(char *buf, const int len, const int used, return ret == 0 ? used : end + ret; } +/** + * Add a new element with uint32_t value to the JSON object stored in the + * provided buffer. + */ +static inline int +rte_tel_json_add_obj_u32(char *buf, const int len, const int used, + const char *name, uint32_t val) +{ + int ret, end = used - 1; + if (used <= 2) /* assume empty, since minimum is '{}' */ + return __json_snprintf(buf, len, "{\"%s\":%u}", name, val); + + ret = __json_snprintf(buf + end, len - end, ",\"%s\":%u}", name, val); + return ret == 0 ? used : end + ret; +} + /** * Add a new element with uint64_t value to the JSON object stored in the * provided buffer. diff --git a/lib/telemetry/version.map b/lib/telemetry/version.map index 9794f9ea20..3d1fb15637 100644 --- a/lib/telemetry/version.map +++ b/lib/telemetry/version.map @@ -1,3 +1,12 @@ +EXPERIMENTAL { + global: + + rte_tel_data_add_array_u32; + rte_tel_data_add_dict_u32; + + local: *; +}; + DPDK_23 { global: From patchwork Fri Dec 9 11:04:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120711 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 AF04FA00C2; Fri, 9 Dec 2022 12:05:11 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CB0D742D3C; Fri, 9 Dec 2022 12:04:53 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id C775B42BAC for ; Fri, 9 Dec 2022 12:04:48 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NT7SD5x6zzJqRK; Fri, 9 Dec 2022 19:03:56 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Dec 2022 19:04:44 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V2 03/11] test: add test cases for adding u32 value API Date: Fri, 9 Dec 2022 19:04:42 +0800 Message-ID: <20221209110450.62456-4-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221209110450.62456-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221209110450.62456-1-lihuisong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 Add test cases for adding u32 value API. Cc: stable@dpdk.org Signed-off-by: Huisong Li --- app/test/test_telemetry_data.c | 85 +++++++++++++++++++++++++++++++++- app/test/test_telemetry_json.c | 23 ++++++++- 2 files changed, 104 insertions(+), 4 deletions(-) diff --git a/app/test/test_telemetry_data.c b/app/test/test_telemetry_data.c index d92667a527..8ab3441cbe 100644 --- a/app/test/test_telemetry_data.c +++ b/app/test/test_telemetry_data.c @@ -278,6 +278,17 @@ test_array_with_array_string_values(void) return CHECK_OUTPUT("[[\"aaaa\"],[\"bbbb\"]]"); } +static int +test_case_array_u32(void) +{ + uint32_t i; + + rte_tel_data_start_array(&response_data, RTE_TEL_U32_VAL); + for (i = 0; i < 5; i++) + rte_tel_data_add_array_u32(&response_data, i); + return CHECK_OUTPUT("[0,1,2,3,4]"); +} + static int test_case_array_u64(void) { @@ -289,6 +300,21 @@ test_case_array_u64(void) return CHECK_OUTPUT("[0,1,2,3,4]"); } +static int +test_case_add_dict_u32(void) +{ + uint32_t i = 0; + char name_of_value[8]; + + rte_tel_data_start_dict(&response_data); + + for (i = 0; i < 5; i++) { + sprintf(name_of_value, "dict_%u", i); + rte_tel_data_add_dict_u32(&response_data, name_of_value, i); + } + return CHECK_OUTPUT("{\"dict_0\":0,\"dict_1\":1,\"dict_2\":2,\"dict_3\":3,\"dict_4\":4}"); +} + static int test_case_add_dict_u64(void) { @@ -304,6 +330,32 @@ test_case_add_dict_u64(void) return CHECK_OUTPUT("{\"dict_0\":0,\"dict_1\":1,\"dict_2\":2,\"dict_3\":3,\"dict_4\":4}"); } +static int +test_dict_with_array_u32_values(void) +{ + uint32_t i; + + struct rte_tel_data *child_data = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data, RTE_TEL_U32_VAL); + + struct rte_tel_data *child_data2 = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data2, RTE_TEL_U32_VAL); + + rte_tel_data_start_dict(&response_data); + + for (i = 0; i < 10; i++) { + rte_tel_data_add_array_u32(child_data, i); + rte_tel_data_add_array_u32(child_data2, i); + } + + rte_tel_data_add_dict_container(&response_data, "dict_0", + child_data, 0); + rte_tel_data_add_dict_container(&response_data, "dict_1", + child_data2, 0); + + return CHECK_OUTPUT("{\"dict_0\":[0,1,2,3,4,5,6,7,8,9],\"dict_1\":[0,1,2,3,4,5,6,7,8,9]}"); +} + static int test_dict_with_array_u64_values(void) { @@ -330,6 +382,29 @@ test_dict_with_array_u64_values(void) return CHECK_OUTPUT("{\"dict_0\":[0,1,2,3,4,5,6,7,8,9],\"dict_1\":[0,1,2,3,4,5,6,7,8,9]}"); } +static int +test_array_with_array_u32_values(void) +{ + uint32_t i; + + struct rte_tel_data *child_data = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data, RTE_TEL_U32_VAL); + + struct rte_tel_data *child_data2 = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data2, RTE_TEL_U32_VAL); + + rte_tel_data_start_array(&response_data, RTE_TEL_CONTAINER); + + for (i = 0; i < 5; i++) { + rte_tel_data_add_array_u32(child_data, i); + rte_tel_data_add_array_u32(child_data2, i); + } + rte_tel_data_add_array_container(&response_data, child_data, 0); + rte_tel_data_add_array_container(&response_data, child_data2, 0); + + return CHECK_OUTPUT("[[0,1,2,3,4],[0,1,2,3,4]]"); +} + static int test_array_with_array_u64_values(void) { @@ -428,14 +503,20 @@ telemetry_data_autotest(void) test_null_return, test_simple_string, test_case_array_string, - test_case_array_int, test_case_array_u64, - test_case_add_dict_int, test_case_add_dict_u64, + test_case_array_int, + test_case_array_u32, + test_case_array_u64, + test_case_add_dict_int, + test_case_add_dict_u32, + test_case_add_dict_u64, test_case_add_dict_string, test_dict_with_array_int_values, + test_dict_with_array_u32_values, test_dict_with_array_u64_values, test_dict_with_array_string_values, test_dict_with_dict_values, test_array_with_array_int_values, + test_array_with_array_u32_values, test_array_with_array_u64_values, test_array_with_array_string_values, test_string_char_escaping, diff --git a/app/test/test_telemetry_json.c b/app/test/test_telemetry_json.c index 184c3ba9f1..e25442f8f0 100644 --- a/app/test/test_telemetry_json.c +++ b/app/test/test_telemetry_json.c @@ -31,7 +31,25 @@ test_basic_array(void) } static int -test_basic_obj(void) +test_basic_obj_u32(void) +{ + const char *expected = "{\"weddings\":4,\"funerals\":1}"; + char buf[1024]; + int used = 0; + + used = rte_tel_json_add_obj_u32(buf, sizeof(buf), used, + "weddings", 4); + used = rte_tel_json_add_obj_u32(buf, sizeof(buf), used, + "funerals", 1); + + printf("%s: buf = '%s', expected = '%s'\n", __func__, buf, expected); + if (used != (int)strlen(expected)) + return -1; + return strncmp(expected, buf, sizeof(buf)); +} + +static int +test_basic_obj_u64(void) { const char *expected = "{\"weddings\":4,\"funerals\":1}"; char buf[1024]; @@ -195,7 +213,8 @@ test_telemetry_json(void) unsigned int i; test_fn fns[] = { test_basic_array, - test_basic_obj, + test_basic_obj_u32, + test_basic_obj_u64, test_overflow_array, test_overflow_obj, test_large_array_element, From patchwork Fri Dec 9 11:04:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120709 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 D5E52A00C2; Fri, 9 Dec 2022 12:04:59 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9B2C442D2B; Fri, 9 Dec 2022 12:04:51 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 752F840695 for ; Fri, 9 Dec 2022 12:04:48 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NT7SD6xMGzJqPs; Fri, 9 Dec 2022 19:03:56 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Dec 2022 19:04:44 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V2 04/11] ethdev: fix possible data truncation and conversion error Date: Fri, 9 Dec 2022 19:04:43 +0800 Message-ID: <20221209110450.62456-5-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221209110450.62456-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221209110450.62456-1-lihuisong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 The 'u32' and 'u64' data can not assigned to 'int' type variable. The 'u32' data need to use the 'u32' telemetry API to add, and the 'u64' data need to use the 'u64' telemetry API to add. Fixes: 58b43c1ddfd1 ("ethdev: add telemetry endpoint for device info") Cc: stable@dpdk.org Signed-off-by: Huisong Li --- lib/ethdev/rte_ethdev.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index 5d5e18db1e..dfb269970e 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c @@ -6037,9 +6037,9 @@ eth_dev_handle_port_info(const char *cmd __rte_unused, eth_dev->data->nb_tx_queues); rte_tel_data_add_dict_int(d, "port_id", eth_dev->data->port_id); rte_tel_data_add_dict_int(d, "mtu", eth_dev->data->mtu); - rte_tel_data_add_dict_int(d, "rx_mbuf_size_min", + rte_tel_data_add_dict_u32(d, "rx_mbuf_size_min", eth_dev->data->min_rx_buf_size); - rte_tel_data_add_dict_int(d, "rx_mbuf_alloc_fail", + rte_tel_data_add_dict_u64(d, "rx_mbuf_alloc_fail", eth_dev->data->rx_mbuf_alloc_failed); rte_ether_format_addr(mac_addr, sizeof(mac_addr), eth_dev->data->mac_addrs); @@ -6068,12 +6068,12 @@ eth_dev_handle_port_info(const char *cmd __rte_unused, rte_tel_data_add_dict_container(d, "rxq_state", rxq_state, 0); rte_tel_data_add_dict_container(d, "txq_state", txq_state, 0); rte_tel_data_add_dict_int(d, "numa_node", eth_dev->data->numa_node); - rte_tel_data_add_dict_int(d, "dev_flags", eth_dev->data->dev_flags); - rte_tel_data_add_dict_int(d, "rx_offloads", + rte_tel_data_add_dict_u32(d, "dev_flags", eth_dev->data->dev_flags); + rte_tel_data_add_dict_u64(d, "rx_offloads", eth_dev->data->dev_conf.rxmode.offloads); - rte_tel_data_add_dict_int(d, "tx_offloads", + rte_tel_data_add_dict_u64(d, "tx_offloads", eth_dev->data->dev_conf.txmode.offloads); - rte_tel_data_add_dict_int(d, "ethdev_rss_hf", + rte_tel_data_add_dict_u64(d, "ethdev_rss_hf", eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf); return 0; From patchwork Fri Dec 9 11:04:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120715 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 453C3A00C2; Fri, 9 Dec 2022 12:05:35 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C8AEF42D57; Fri, 9 Dec 2022 12:04:58 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id AEE4A42D3A for ; Fri, 9 Dec 2022 12:04:53 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NT7SF0rKqzJqRP; Fri, 9 Dec 2022 19:03:57 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Dec 2022 19:04:45 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V2 05/11] mempool: fix possible data truncation and conversion error Date: Fri, 9 Dec 2022 19:04:44 +0800 Message-ID: <20221209110450.62456-6-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221209110450.62456-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221209110450.62456-1-lihuisong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 The 'u32' and 'u64' data can not assigned to 'int' type variable. The 'u32' data need to use the 'u32' telemetry API to add, and the 'u64' data need to use the 'u64' telemetry API to add. Fixes: 2f5c4025abb3 ("mempool: add telemetry endpoint") Cc: stable@dpdk.org Signed-off-by: Huisong Li --- lib/mempool/rte_mempool.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/mempool/rte_mempool.c b/lib/mempool/rte_mempool.c index f33f455790..c665fa5e14 100644 --- a/lib/mempool/rte_mempool.c +++ b/lib/mempool/rte_mempool.c @@ -1500,27 +1500,27 @@ mempool_info_cb(struct rte_mempool *mp, void *arg) return; rte_tel_data_add_dict_string(info->d, "name", mp->name); - rte_tel_data_add_dict_int(info->d, "pool_id", mp->pool_id); - rte_tel_data_add_dict_int(info->d, "flags", mp->flags); + rte_tel_data_add_dict_u64(info->d, "pool_id", mp->pool_id); + rte_tel_data_add_dict_u32(info->d, "flags", mp->flags); rte_tel_data_add_dict_int(info->d, "socket_id", mp->socket_id); - rte_tel_data_add_dict_int(info->d, "size", mp->size); - rte_tel_data_add_dict_int(info->d, "cache_size", mp->cache_size); - rte_tel_data_add_dict_int(info->d, "elt_size", mp->elt_size); - rte_tel_data_add_dict_int(info->d, "header_size", mp->header_size); - rte_tel_data_add_dict_int(info->d, "trailer_size", mp->trailer_size); - rte_tel_data_add_dict_int(info->d, "private_data_size", + rte_tel_data_add_dict_u32(info->d, "size", mp->size); + rte_tel_data_add_dict_u32(info->d, "cache_size", mp->cache_size); + rte_tel_data_add_dict_u32(info->d, "elt_size", mp->elt_size); + rte_tel_data_add_dict_u32(info->d, "header_size", mp->header_size); + rte_tel_data_add_dict_u32(info->d, "trailer_size", mp->trailer_size); + rte_tel_data_add_dict_u32(info->d, "private_data_size", mp->private_data_size); rte_tel_data_add_dict_int(info->d, "ops_index", mp->ops_index); - rte_tel_data_add_dict_int(info->d, "populated_size", + rte_tel_data_add_dict_u32(info->d, "populated_size", mp->populated_size); mz = mp->mz; rte_tel_data_add_dict_string(info->d, "mz_name", mz->name); - rte_tel_data_add_dict_int(info->d, "mz_len", mz->len); - rte_tel_data_add_dict_int(info->d, "mz_hugepage_sz", + rte_tel_data_add_dict_u64(info->d, "mz_len", mz->len); + rte_tel_data_add_dict_u64(info->d, "mz_hugepage_sz", mz->hugepage_sz); rte_tel_data_add_dict_int(info->d, "mz_socket_id", mz->socket_id); - rte_tel_data_add_dict_int(info->d, "mz_flags", mz->flags); + rte_tel_data_add_dict_u32(info->d, "mz_flags", mz->flags); } static int From patchwork Fri Dec 9 11:04:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120710 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 20B16A00C2; Fri, 9 Dec 2022 12:05:06 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 95E6542D34; Fri, 9 Dec 2022 12:04:52 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 9E4D9410FB for ; Fri, 9 Dec 2022 12:04:48 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NT7SF1qQJzJqRJ; Fri, 9 Dec 2022 19:03:57 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Dec 2022 19:04:45 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V2 06/11] cryptodev: fix possible data conversion error Date: Fri, 9 Dec 2022 19:04:45 +0800 Message-ID: <20221209110450.62456-7-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221209110450.62456-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221209110450.62456-1-lihuisong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 The 'u32' data can not assigned to 'int' type variable. The 'u32' data need to use the 'u32' telemetry API to add. Fixes: d3d98f5ce9d0 ("cryptodev: support telemetry") Cc: stable@dpdk.org Signed-off-by: Huisong Li --- lib/cryptodev/rte_cryptodev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.c index 2165a0688c..8e19411164 100644 --- a/lib/cryptodev/rte_cryptodev.c +++ b/lib/cryptodev/rte_cryptodev.c @@ -2692,7 +2692,7 @@ cryptodev_handle_dev_info(const char *cmd __rte_unused, rte_tel_data_start_dict(d); rte_tel_data_add_dict_string(d, "device_name", cryptodev_info.device->name); - rte_tel_data_add_dict_int(d, "max_nb_queue_pairs", + rte_tel_data_add_dict_u32(d, "max_nb_queue_pairs", cryptodev_info.max_nb_queue_pairs); return 0; From patchwork Fri Dec 9 11:04:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120717 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 4139DA00C2; Fri, 9 Dec 2022 12:05:46 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9E6F542D60; Fri, 9 Dec 2022 12:05:00 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 05C2B42D3E for ; Fri, 9 Dec 2022 12:04:54 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NT7SF2pHFzJqRW; Fri, 9 Dec 2022 19:03:57 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Dec 2022 19:04:45 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V2 07/11] mem: possible data truncation and conversion error Date: Fri, 9 Dec 2022 19:04:46 +0800 Message-ID: <20221209110450.62456-8-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221209110450.62456-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221209110450.62456-1-lihuisong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 The 'u32' and 'u64' data can not assigned to 'int' type variable. The 'u32' data need to use the 'u32' telemetry API to add, and the 'u64' data need to use the 'u64' telemetry API to add. Fixes: e6732d0d6e26 ("mem: add telemetry infos") Cc: stable@dpdk.org Signed-off-by: Huisong Li --- lib/eal/common/eal_common_memory.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/eal/common/eal_common_memory.c b/lib/eal/common/eal_common_memory.c index 688dc615d7..b7981507da 100644 --- a/lib/eal/common/eal_common_memory.c +++ b/lib/eal/common/eal_common_memory.c @@ -1139,7 +1139,7 @@ handle_eal_heap_info_request(const char *cmd __rte_unused, const char *params, malloc_heap_get_stats(heap, &sock_stats); rte_tel_data_start_dict(d); - rte_tel_data_add_dict_int(d, "Head id", heap_id); + rte_tel_data_add_dict_u32(d, "Head id", heap_id); rte_tel_data_add_dict_string(d, "Name", heap->name); rte_tel_data_add_dict_u64(d, "Heap_size", sock_stats.heap_totalsz_bytes); @@ -1148,8 +1148,8 @@ handle_eal_heap_info_request(const char *cmd __rte_unused, const char *params, sock_stats.heap_allocsz_bytes); rte_tel_data_add_dict_u64(d, "Greatest_free_size", sock_stats.greatest_free_size); - rte_tel_data_add_dict_u64(d, "Alloc_count", sock_stats.alloc_count); - rte_tel_data_add_dict_u64(d, "Free_count", sock_stats.free_count); + rte_tel_data_add_dict_u32(d, "Alloc_count", sock_stats.alloc_count); + rte_tel_data_add_dict_u32(d, "Free_count", sock_stats.free_count); return 0; } @@ -1201,13 +1201,13 @@ handle_eal_memzone_info_request(const char *cmd __rte_unused, mz = rte_fbarray_get(&mcfg->memzones, mz_idx); rte_tel_data_start_dict(d); - rte_tel_data_add_dict_int(d, "Zone", mz_idx); + rte_tel_data_add_dict_u32(d, "Zone", mz_idx); rte_tel_data_add_dict_string(d, "Name", mz->name); - rte_tel_data_add_dict_int(d, "Length", mz->len); + rte_tel_data_add_dict_u64(d, "Length", mz->len); snprintf(addr, ADDR_STR, "%p", mz->addr); rte_tel_data_add_dict_string(d, "Address", addr); rte_tel_data_add_dict_int(d, "Socket", mz->socket_id); - rte_tel_data_add_dict_int(d, "Flags", mz->flags); + rte_tel_data_add_dict_u32(d, "Flags", mz->flags); /* go through each page occupied by this memzone */ msl = rte_mem_virt2memseg_list(mz->addr); @@ -1222,7 +1222,7 @@ handle_eal_memzone_info_request(const char *cmd __rte_unused, ms_idx = RTE_PTR_DIFF(mz->addr, msl->base_va) / page_sz; ms = rte_fbarray_get(&msl->memseg_arr, ms_idx); - rte_tel_data_add_dict_int(d, "Hugepage_size", page_sz); + rte_tel_data_add_dict_u64(d, "Hugepage_size", page_sz); snprintf(addr, ADDR_STR, "%p", ms->addr); rte_tel_data_add_dict_string(d, "Hugepage_base", addr); From patchwork Fri Dec 9 11:04:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120712 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 773B5A00C2; Fri, 9 Dec 2022 12:05:17 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CD47742D3E; Fri, 9 Dec 2022 12:04:54 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 511E040695 for ; Fri, 9 Dec 2022 12:04:49 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NT7SF5DXvzJqRX; Fri, 9 Dec 2022 19:03:57 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Dec 2022 19:04:46 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V2 08/11] telemetry: refactor mapping betwween value and array type Date: Fri, 9 Dec 2022 19:04:47 +0800 Message-ID: <20221209110450.62456-9-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221209110450.62456-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221209110450.62456-1-lihuisong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 Currently, use rte_tel_value_type as index of array to find the tel_container_types in rte_tel_data_start_array. It's not good for maintenance. Fixes: ed1bfad7d384 ("telemetry: add functions for returning callback data") Cc: stable@dpdk.org Signed-off-by: Huisong Li --- lib/telemetry/telemetry_data.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/lib/telemetry/telemetry_data.c b/lib/telemetry/telemetry_data.c index c120bf6281..f8efc37763 100644 --- a/lib/telemetry/telemetry_data.c +++ b/lib/telemetry/telemetry_data.c @@ -15,14 +15,30 @@ int rte_tel_data_start_array(struct rte_tel_data *d, enum rte_tel_value_type type) { - enum tel_container_types array_types[] = { - RTE_TEL_ARRAY_STRING, /* RTE_TEL_STRING_VAL = 0 */ - RTE_TEL_ARRAY_INT, /* RTE_TEL_INT_VAL = 1 */ - RTE_TEL_ARRAY_U64, /* RTE_TEL_U64_VAL = 2 */ - RTE_TEL_ARRAY_CONTAINER, /* RTE_TEL_CONTAINER = 3 */ - RTE_TEL_ARRAY_U32, /* RTE_TEL_U32_VAL = 4 */ + struct { + enum rte_tel_value_type value_type; + enum tel_container_types array_type; + } value2array_types_map[] = { + {RTE_TEL_STRING_VAL, RTE_TEL_ARRAY_STRING}, + {RTE_TEL_INT_VAL, RTE_TEL_ARRAY_INT}, + {RTE_TEL_U64_VAL, RTE_TEL_ARRAY_U64}, + {RTE_TEL_CONTAINER, RTE_TEL_ARRAY_CONTAINER}, + {RTE_TEL_U32_VAL, RTE_TEL_ARRAY_U32}, }; - d->type = array_types[type]; + int array_types = -1; + uint16_t i; + + for (i = 0; i < RTE_DIM(value2array_types_map); i++) { + if (type == value2array_types_map[i].value_type) { + array_types = value2array_types_map[i].array_type; + break; + } + } + + if (array_types == -1) + return -EINVAL; + + d->type = array_types; d->data_len = 0; return 0; } From patchwork Fri Dec 9 11:04:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120718 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 96AF6A00C2; Fri, 9 Dec 2022 12:05:51 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8C58242D62; Fri, 9 Dec 2022 12:05:01 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id D1C1442D40 for ; Fri, 9 Dec 2022 12:04:54 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NT7SF6CNvzJqRc; Fri, 9 Dec 2022 19:03:57 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Dec 2022 19:04:46 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V2 09/11] telemetry: support adding integer value as hexadecimal Date: Fri, 9 Dec 2022 19:04:48 +0800 Message-ID: <20221209110450.62456-10-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221209110450.62456-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221209110450.62456-1-lihuisong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 Sometimes displaying a integer value as hexadecimal encoded style is more expected for human consumption, such as, offload capability and device falg. This patch introduces some APIs to add 'u32' and 'u64' value as hexadecimal encoded string to array or dictionary. Signed-off-by: Huisong Li --- lib/telemetry/rte_telemetry.h | 72 ++++++++++++++++++++++++++++++++++ lib/telemetry/telemetry_data.c | 46 ++++++++++++++++++++++ lib/telemetry/version.map | 5 +++ 3 files changed, 123 insertions(+) diff --git a/lib/telemetry/rte_telemetry.h b/lib/telemetry/rte_telemetry.h index 5efdafc156..dac87050da 100644 --- a/lib/telemetry/rte_telemetry.h +++ b/lib/telemetry/rte_telemetry.h @@ -170,6 +170,38 @@ int rte_tel_data_add_array_container(struct rte_tel_data *d, struct rte_tel_data *val, int keep); +/** + * Convert a uint32_t to hexadecimal encoded strings and add this string + * to an array. + * The array must have been started by rte_tel_data_start_array() with + * RTE_TEL_STRING_VAL as the type parameter. + * + * @param d + * The data structure passed to the callback + * @param x + * The number to be returned in the array as a hexadecimal encoded strings + * @return + * 0 on success, negative errno on error + */ +__rte_experimental +int rte_tel_data_add_array_hex_u32_str(struct rte_tel_data *d, uint32_t x); + +/** + * Convert a uint64_t to hexadecimal encoded strings and add this string + * to an array. + * The array must have been started by rte_tel_data_start_array() with + * RTE_TEL_STRING_VAL as the type parameter. + * + * @param d + * The data structure passed to the callback + * @param x + * The number to be returned in the array as a hexadecimal encoded strings + * @return + * 0 on success, negative errno on error + */ +__rte_experimental +int rte_tel_data_add_array_hex_u64_str(struct rte_tel_data *d, uint64_t x); + /** * Add a string value to a dictionary. * The dict must have been started by rte_tel_data_start_dict(). @@ -266,6 +298,46 @@ int rte_tel_data_add_dict_container(struct rte_tel_data *d, const char *name, struct rte_tel_data *val, int keep); +/** + * Convert a uint32_t to hexadecimal encoded strings and add this string + * to a dictionary. + * The dict must have been started by rte_tel_data_start_dict(). + * + * @param d + * The data structure passed to the callback + * @param name + * The name the value is to be stored under in the dict + * Must contain only alphanumeric characters or the symbols: '_' or '/' + * @param val + * The number to be stored in the dict as a hexadecimal encoded strings + * @return + * 0 on success, negative errno on error, E2BIG on string truncation of + * either name or value. + */ +__rte_experimental +int rte_tel_data_add_dict_hex_u32_str(struct rte_tel_data *d, + const char *name, uint32_t val); + +/** + * Convert a uint64_t to hexadecimal encoded strings and add this string + * to a dictionary. + * The dict must have been started by rte_tel_data_start_dict(). + * + * @param d + * The data structure passed to the callback + * @param name + * The name the value is to be stored under in the dict + * Must contain only alphanumeric characters or the symbols: '_' or '/' + * @param val + * The number to be stored in the dict as a hexadecimal encoded strings + * @return + * 0 on success, negative errno on error, E2BIG on string truncation of + * either name or value. + */ +__rte_experimental +int rte_tel_data_add_dict_hex_u64_str(struct rte_tel_data *d, + const char *name, uint64_t val); + /** * This telemetry callback is used when registering a telemetry command. * It handles getting and formatting information to be returned to telemetry diff --git a/lib/telemetry/telemetry_data.c b/lib/telemetry/telemetry_data.c index f8efc37763..b195b79fa4 100644 --- a/lib/telemetry/telemetry_data.c +++ b/lib/telemetry/telemetry_data.c @@ -4,6 +4,7 @@ #include #include +#include #undef RTE_USE_LIBBSD #include @@ -12,6 +13,9 @@ #include "telemetry_data.h" +/* The string length is equal to (sizeof(uint64_t) * 2 + 3) */ +#define RTE_TEL_HEX_UINT_MAX_STRING_LEN 19 + int rte_tel_data_start_array(struct rte_tel_data *d, enum rte_tel_value_type type) { @@ -126,6 +130,26 @@ rte_tel_data_add_array_container(struct rte_tel_data *d, return 0; } +int +rte_tel_data_add_array_hex_u32_str(struct rte_tel_data *d, uint32_t x) +{ + char hex_str[RTE_TEL_HEX_UINT_MAX_STRING_LEN]; + + snprintf(hex_str, RTE_TEL_HEX_UINT_MAX_STRING_LEN, "0x%x", x); + + return rte_tel_data_add_array_string(d, hex_str); +} + +int +rte_tel_data_add_array_hex_u64_str(struct rte_tel_data *d, uint64_t x) +{ + char hex_str[RTE_TEL_HEX_UINT_MAX_STRING_LEN]; + + snprintf(hex_str, RTE_TEL_HEX_UINT_MAX_STRING_LEN, "0x%"PRIx64"", x); + + return rte_tel_data_add_array_string(d, hex_str); +} + static bool valid_name(const char *name) { @@ -254,6 +278,28 @@ rte_tel_data_add_dict_container(struct rte_tel_data *d, const char *name, return bytes < RTE_TEL_MAX_STRING_LEN ? 0 : E2BIG; } +int +rte_tel_data_add_dict_hex_u32_str(struct rte_tel_data *d, const char *name, + uint32_t val) +{ + char hex_str[RTE_TEL_HEX_UINT_MAX_STRING_LEN]; + + snprintf(hex_str, RTE_TEL_HEX_UINT_MAX_STRING_LEN, "0x%x", val); + + return rte_tel_data_add_dict_string(d, name, hex_str); +} + +int +rte_tel_data_add_dict_hex_u64_str(struct rte_tel_data *d, const char *name, + uint64_t val) +{ + char hex_str[RTE_TEL_HEX_UINT_MAX_STRING_LEN]; + + snprintf(hex_str, RTE_TEL_HEX_UINT_MAX_STRING_LEN, "0x%"PRIx64"", val); + + return rte_tel_data_add_dict_string(d, name, hex_str); +} + struct rte_tel_data * rte_tel_data_alloc(void) { diff --git a/lib/telemetry/version.map b/lib/telemetry/version.map index 3d1fb15637..994414c47f 100644 --- a/lib/telemetry/version.map +++ b/lib/telemetry/version.map @@ -3,6 +3,11 @@ EXPERIMENTAL { rte_tel_data_add_array_u32; rte_tel_data_add_dict_u32; + rte_tel_data_add_array_hex_u32_str; + rte_tel_data_add_array_hex_u64_str; + rte_tel_data_add_dict_hex_u32_str; + rte_tel_data_add_dict_hex_u64_str; + local: *; }; From patchwork Fri Dec 9 11:04:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120713 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 C1C50A00C2; Fri, 9 Dec 2022 12:05:22 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4FA6842D45; Fri, 9 Dec 2022 12:04:56 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id BB15242BAC for ; Fri, 9 Dec 2022 12:04:49 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NT7SG06w7zJqRk; Fri, 9 Dec 2022 19:03:57 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Dec 2022 19:04:47 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V2 10/11] test: add test cases for adding hex integer values API Date: Fri, 9 Dec 2022 19:04:49 +0800 Message-ID: <20221209110450.62456-11-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221209110450.62456-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221209110450.62456-1-lihuisong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 Add test cases for adding hexadecimal u32 and u64 values API. Signed-off-by: Huisong Li --- app/test/test_telemetry_data.c | 164 +++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) diff --git a/app/test/test_telemetry_data.c b/app/test/test_telemetry_data.c index 8ab3441cbe..7ce905c503 100644 --- a/app/test/test_telemetry_data.c +++ b/app/test/test_telemetry_data.c @@ -278,6 +278,89 @@ test_array_with_array_string_values(void) return CHECK_OUTPUT("[[\"aaaa\"],[\"bbbb\"]]"); } +static int +test_case_array_with_array_hex_u32_values(void) +{ + struct rte_tel_data *child_data = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data, RTE_TEL_STRING_VAL); + + struct rte_tel_data *child_data2 = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data2, RTE_TEL_STRING_VAL); + + rte_tel_data_start_array(&response_data, RTE_TEL_CONTAINER); + + rte_tel_data_add_array_hex_u32_str(child_data, 0xfffffff0); + rte_tel_data_add_array_hex_u32_str(child_data, 0xfffffff1); + rte_tel_data_add_array_hex_u32_str(child_data2, 0x8ffff2); + + rte_tel_data_add_array_container(&response_data, child_data, 0); + rte_tel_data_add_array_container(&response_data, child_data2, 0); + + return CHECK_OUTPUT("[[\"0xfffffff0\",\"0xfffffff1\"],[\"0x8ffff2\"]]"); +} + +static int +test_case_array_with_array_hex_u64_values(void) +{ + struct rte_tel_data *child_data = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data, RTE_TEL_STRING_VAL); + + rte_tel_data_start_array(&response_data, RTE_TEL_CONTAINER); + rte_tel_data_add_array_hex_u64_str(child_data, 0xfffffffffffffff0); + rte_tel_data_add_array_hex_u64_str(child_data, 0xfffffffffffffff2); + + rte_tel_data_add_array_container(&response_data, child_data, 0); + + return CHECK_OUTPUT("[[\"0xfffffffffffffff0\",\"0xfffffffffffffff2\"]]"); +} + +static int +test_case_dict_with_array_hex_u32_values(void) +{ + struct rte_tel_data *child_data = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data, RTE_TEL_STRING_VAL); + + struct rte_tel_data *child_data2 = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data2, RTE_TEL_STRING_VAL); + + rte_tel_data_start_dict(&response_data); + + rte_tel_data_add_array_hex_u32_str(child_data, 0xfffffff0); + rte_tel_data_add_array_hex_u32_str(child_data, 0xfffffff1); + rte_tel_data_add_array_hex_u32_str(child_data2, 0x8ffffff0); + rte_tel_data_add_array_hex_u32_str(child_data2, 0x8ffffff1); + + rte_tel_data_add_dict_container(&response_data, "dict_0", + child_data, 0); + rte_tel_data_add_dict_container(&response_data, "dict_1", + child_data2, 0); + + return CHECK_OUTPUT("{\"dict_0\":[\"0xfffffff0\",\"0xfffffff1\"],\"dict_1\":[\"0x8ffffff0\",\"0x8ffffff1\"]}"); +} + +static int +test_case_dict_with_array_hex_u64_values(void) +{ + struct rte_tel_data *child_data = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data, RTE_TEL_STRING_VAL); + + struct rte_tel_data *child_data2 = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data2, RTE_TEL_STRING_VAL); + + rte_tel_data_start_dict(&response_data); + + rte_tel_data_add_array_hex_u64_str(child_data, 0xfffffffffffffff0); + rte_tel_data_add_array_hex_u64_str(child_data, 0xfffffffffffffff1); + rte_tel_data_add_array_hex_u64_str(child_data2, 0x8ffffffffffffff0); + + rte_tel_data_add_dict_container(&response_data, "dict_0", + child_data, 0); + rte_tel_data_add_dict_container(&response_data, "dict_1", + child_data2, 0); + + return CHECK_OUTPUT("{\"dict_0\":[\"0xfffffffffffffff0\",\"0xfffffffffffffff1\"],\"dict_1\":[\"0x8ffffffffffffff0\"]}"); +} + static int test_case_array_u32(void) { @@ -300,6 +383,47 @@ test_case_array_u64(void) return CHECK_OUTPUT("[0,1,2,3,4]"); } +static int +test_case_array_hex_u32_str(void) +{ + struct rte_tel_data *child_data = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data, RTE_TEL_STRING_VAL); + + struct rte_tel_data *child_data2 = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data2, RTE_TEL_STRING_VAL); + + rte_tel_data_start_array(&response_data, RTE_TEL_CONTAINER); + + rte_tel_data_add_array_hex_u32_str(child_data, 0xfffffff0); + rte_tel_data_add_array_hex_u32_str(child_data, 0xfffffff1); + rte_tel_data_add_array_hex_u32_str(child_data2, 0x8ffff2); + + rte_tel_data_add_array_container(&response_data, child_data, 0); + rte_tel_data_add_array_container(&response_data, child_data2, 0); + + return CHECK_OUTPUT("[[\"0xfffffff0\",\"0xfffffff1\"],[\"0x8ffff2\"]]"); +} + +static int +test_case_array_hex_u64_str(void) +{ + struct rte_tel_data *child_data = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data, RTE_TEL_STRING_VAL); + + struct rte_tel_data *child_data2 = rte_tel_data_alloc(); + rte_tel_data_start_array(child_data2, RTE_TEL_STRING_VAL); + + rte_tel_data_start_array(&response_data, RTE_TEL_CONTAINER); + + rte_tel_data_add_array_hex_u64_str(child_data, 0xfffffffffffffff0); + rte_tel_data_add_array_hex_u64_str(child_data2, 0x8ffffffffff2); + + rte_tel_data_add_array_container(&response_data, child_data, 0); + rte_tel_data_add_array_container(&response_data, child_data2, 0); + + return CHECK_OUTPUT("[[\"0xfffffffffffffff0\"],[\"0x8ffffffffff2\"]]"); +} + static int test_case_add_dict_u32(void) { @@ -330,6 +454,38 @@ test_case_add_dict_u64(void) return CHECK_OUTPUT("{\"dict_0\":0,\"dict_1\":1,\"dict_2\":2,\"dict_3\":3,\"dict_4\":4}"); } +static int +test_case_add_dict_hex_u32_values(void) +{ + int i = 0; + char name_of_value[8]; + + rte_tel_data_start_dict(&response_data); + + for (i = 0; i < 3; i++) { + sprintf(name_of_value, "dict_%d", i); + rte_tel_data_add_dict_hex_u32_str(&response_data, name_of_value, + 0xfffffff0 + i); + } + return CHECK_OUTPUT("{\"dict_0\":\"0xfffffff0\",\"dict_1\":\"0xfffffff1\",\"dict_2\":\"0xfffffff2\"}"); +} + +static int +test_case_add_dict_hex_u64_values(void) +{ + int i = 0; + char name_of_value[8]; + + rte_tel_data_start_dict(&response_data); + + for (i = 0; i < 2; i++) { + sprintf(name_of_value, "dict_%d", i); + rte_tel_data_add_dict_hex_u64_str(&response_data, name_of_value, + 0xfffffffff0 + i); + } + return CHECK_OUTPUT("{\"dict_0\":\"0xfffffffff0\",\"dict_1\":\"0xfffffffff1\"}"); +} + static int test_dict_with_array_u32_values(void) { @@ -509,16 +665,24 @@ telemetry_data_autotest(void) test_case_add_dict_int, test_case_add_dict_u32, test_case_add_dict_u64, + test_case_array_hex_u32_str, + test_case_array_hex_u64_str, test_case_add_dict_string, + test_case_add_dict_hex_u32_values, + test_case_add_dict_hex_u64_values, test_dict_with_array_int_values, test_dict_with_array_u32_values, test_dict_with_array_u64_values, test_dict_with_array_string_values, + test_case_dict_with_array_hex_u32_values, + test_case_dict_with_array_hex_u64_values, test_dict_with_dict_values, test_array_with_array_int_values, test_array_with_array_u32_values, test_array_with_array_u64_values, test_array_with_array_string_values, + test_case_array_with_array_hex_u32_values, + test_case_array_with_array_hex_u64_values, test_string_char_escaping, test_array_char_escaping, test_dict_char_escaping, From patchwork Fri Dec 9 11:04:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120714 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 1530BA00C2; Fri, 9 Dec 2022 12:05:28 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 337F742D4B; Fri, 9 Dec 2022 12:04:57 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 655F442BAC for ; Fri, 9 Dec 2022 12:04:50 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NT7SH0Cw8zJqRg; Fri, 9 Dec 2022 19:03:59 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Dec 2022 19:04:47 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V2 11/11] ethdev: display capability values in hexadecimal format Date: Fri, 9 Dec 2022 19:04:50 +0800 Message-ID: <20221209110450.62456-12-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221209110450.62456-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221209110450.62456-1-lihuisong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 The 'dev_flags', 'rx_offloads', 'tx_offloads' and 'rss_hf' are better displayed in hexadecimal format. Like: -->old display by input /ethdev/info,0 "dev_flags": 3, "rx_offloads": 524288, "tx_offloads": 65536, "ethdev_rss_hf": 9100 --> now display "dev_flags": "0x3", "rx_offloads": "0x80000", "tx_offloads": "0x10000", "ethdev_rss_hf": "0x238c" Signed-off-by: Huisong Li --- lib/ethdev/rte_ethdev.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index dfb269970e..f0fa00c773 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c @@ -6068,12 +6068,13 @@ eth_dev_handle_port_info(const char *cmd __rte_unused, rte_tel_data_add_dict_container(d, "rxq_state", rxq_state, 0); rte_tel_data_add_dict_container(d, "txq_state", txq_state, 0); rte_tel_data_add_dict_int(d, "numa_node", eth_dev->data->numa_node); - rte_tel_data_add_dict_u32(d, "dev_flags", eth_dev->data->dev_flags); - rte_tel_data_add_dict_u64(d, "rx_offloads", + rte_tel_data_add_dict_hex_u32_str(d, "dev_flags", + eth_dev->data->dev_flags); + rte_tel_data_add_dict_hex_u64_str(d, "rx_offloads", eth_dev->data->dev_conf.rxmode.offloads); - rte_tel_data_add_dict_u64(d, "tx_offloads", + rte_tel_data_add_dict_hex_u64_str(d, "tx_offloads", eth_dev->data->dev_conf.txmode.offloads); - rte_tel_data_add_dict_u64(d, "ethdev_rss_hf", + rte_tel_data_add_dict_hex_u64_str(d, "ethdev_rss_hf", eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf); return 0;