From patchwork Mon Dec 12 06:42:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120745 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 2F7C6A0540; Mon, 12 Dec 2022 07:43:06 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F0D584021D; Mon, 12 Dec 2022 07:43:05 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 6876740151 for ; Mon, 12 Dec 2022 07:43:04 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.53]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4NVsRf0T20zJpJ7; Mon, 12 Dec 2022 14:39:26 +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.34; Mon, 12 Dec 2022 14:43:01 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V3 01/11] telemetry: move to header to controllable range Date: Mon, 12 Dec 2022 14:42:56 +0800 Message-ID: <20221212064306.39232-2-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221212064306.39232-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221212064306.39232-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 Acked-by: Morten Brørup Acked-by: Chengwen Feng --- 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 Mon Dec 12 06:42:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120752 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 C195DA0540; Mon, 12 Dec 2022 07:43:42 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5B6EE42D42; Mon, 12 Dec 2022 07:43:13 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 7B63240687 for ; Mon, 12 Dec 2022 07:43:05 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.56]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4NVsQv2FKDzqT3N; Mon, 12 Dec 2022 14:38:47 +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.34; Mon, 12 Dec 2022 14:43:01 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V3 02/11] telemetry: add u32 value type Date: Mon, 12 Dec 2022 14:42:57 +0800 Message-ID: <20221212064306.39232-3-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221212064306.39232-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221212064306.39232-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 Acked-by: Morten Brørup Acked-by: Chengwen Feng --- 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 Mon Dec 12 06:42:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120750 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 483D2A0540; Mon, 12 Dec 2022 07:43:32 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 427B942D37; Mon, 12 Dec 2022 07:43:11 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 7E96740A84 for ; Mon, 12 Dec 2022 07:43:05 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.56]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4NVsQv4YC0zqT39; Mon, 12 Dec 2022 14:38:47 +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.34; Mon, 12 Dec 2022 14:43:02 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V3 03/11] test: add test cases for adding u32 value API Date: Mon, 12 Dec 2022 14:42:58 +0800 Message-ID: <20221212064306.39232-4-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221212064306.39232-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221212064306.39232-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 Acked-by: Morten Brørup Acked-by: Chengwen Feng --- 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 Mon Dec 12 06:42:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120748 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 11B9CA0540; Mon, 12 Dec 2022 07:43:21 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 623C442D27; Mon, 12 Dec 2022 07:43:09 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 89B6A40A89 for ; Mon, 12 Dec 2022 07:43:05 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.57]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NVsVj2FnczRpyX; Mon, 12 Dec 2022 14:42:05 +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.34; Mon, 12 Dec 2022 14:43:02 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V3 04/11] ethdev: fix possible data truncation and conversion error Date: Mon, 12 Dec 2022 14:42:59 +0800 Message-ID: <20221212064306.39232-5-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221212064306.39232-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221212064306.39232-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 Acked-by: Morten Brørup Acked-by: Chengwen Feng --- 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 Mon Dec 12 06:43:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120749 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 9919BA0540; Mon, 12 Dec 2022 07:43:26 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5AA5842D2F; Mon, 12 Dec 2022 07:43:10 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 5E00940684 for ; Mon, 12 Dec 2022 07:43:05 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.54]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NVsVp6dQdzJqTH; Mon, 12 Dec 2022 14:42:10 +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.34; Mon, 12 Dec 2022 14:43:03 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V3 05/11] mempool: fix possible data truncation and conversion error Date: Mon, 12 Dec 2022 14:43:00 +0800 Message-ID: <20221212064306.39232-6-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221212064306.39232-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221212064306.39232-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 Acked-by: Morten Brørup Acked-by: Chengwen Feng --- 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 Mon Dec 12 06:43:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120746 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 7168EA0540; Mon, 12 Dec 2022 07:43:10 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5A83041141; Mon, 12 Dec 2022 07:43:07 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 3300240151 for ; Mon, 12 Dec 2022 07:43:05 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.54]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NVsVq1w73zJqTS; Mon, 12 Dec 2022 14:42:11 +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.34; Mon, 12 Dec 2022 14:43:03 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V3 06/11] cryptodev: fix possible data conversion error Date: Mon, 12 Dec 2022 14:43:01 +0800 Message-ID: <20221212064306.39232-7-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221212064306.39232-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221212064306.39232-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 Acked-by: Morten Brørup Acked-by: Chengwen Feng --- 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 Mon Dec 12 06:43:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120751 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 4FF39A0540; Mon, 12 Dec 2022 07:43:37 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6D75642D3C; Mon, 12 Dec 2022 07:43:12 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 995F840C35 for ; Mon, 12 Dec 2022 07:43:05 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.54]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4NVsRh2gQBzJpJ6; Mon, 12 Dec 2022 14:39:28 +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.34; Mon, 12 Dec 2022 14:43:03 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V3 07/11] mem: possible data truncation and conversion error Date: Mon, 12 Dec 2022 14:43:02 +0800 Message-ID: <20221212064306.39232-8-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221212064306.39232-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221212064306.39232-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 Acked-by: Morten Brørup Acked-by: Chengwen Feng --- 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 Mon Dec 12 06:43:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120753 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 95050A0540; Mon, 12 Dec 2022 07:43:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 585A942D46; Mon, 12 Dec 2022 07:43:14 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 2001141141 for ; Mon, 12 Dec 2022 07:43:06 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.54]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4NVsVm5kh3zmWTs; Mon, 12 Dec 2022 14:42:08 +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.34; Mon, 12 Dec 2022 14:43:04 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V3 08/11] telemetry: refactor mapping betwween value and array type Date: Mon, 12 Dec 2022 14:43:03 +0800 Message-ID: <20221212064306.39232-9-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221212064306.39232-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221212064306.39232-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 Acked-by: Morten Brørup Acked-by: Chengwen Feng --- 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 Mon Dec 12 06:43:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120754 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 D0E0FA0540; Mon, 12 Dec 2022 07:43:52 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 56CCC42D4D; Mon, 12 Dec 2022 07:43:15 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 7AC6240A89 for ; Mon, 12 Dec 2022 07:43:06 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.54]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4NVsRj38K4zJpJD; Mon, 12 Dec 2022 14:39:29 +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.34; Mon, 12 Dec 2022 14:43:04 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V3 09/11] telemetry: support adding integer value as hexadecimal Date: Mon, 12 Dec 2022 14:43:04 +0800 Message-ID: <20221212064306.39232-10-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221212064306.39232-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221212064306.39232-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 flag. This patch introduces some APIs to add 'u32' and 'u64' value as hexadecimal encoded string to array or dictionary. Signed-off-by: Huisong Li Acked-by: Morten Brørup Acked-by: Chengwen Feng --- 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 Mon Dec 12 06:43:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120756 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 3129BA0540; Mon, 12 Dec 2022 07:44:03 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 734E542D25; Mon, 12 Dec 2022 07:43:17 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 25EEB40687 for ; Mon, 12 Dec 2022 07:43:07 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.57]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4NVsRj5xFWzJpJF; Mon, 12 Dec 2022 14:39:29 +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.34; Mon, 12 Dec 2022 14:43:05 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V3 10/11] test: add test cases for adding hex integer values API Date: Mon, 12 Dec 2022 14:43:05 +0800 Message-ID: <20221212064306.39232-11-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221212064306.39232-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221212064306.39232-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 Acked-by: Morten Brørup Acked-by: Chengwen Feng --- 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 Mon Dec 12 06:43:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "lihuisong (C)" X-Patchwork-Id: 120755 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 232F4A0540; Mon, 12 Dec 2022 07:43:58 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4FA7842D54; Mon, 12 Dec 2022 07:43:16 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 77FEA42BD9 for ; Mon, 12 Dec 2022 07:43:07 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NVsVm21SVzRq0J; Mon, 12 Dec 2022 14:42:08 +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.34; Mon, 12 Dec 2022 14:43:05 +0800 From: Huisong Li To: CC: , , , , , , Subject: [PATCH V3 11/11] ethdev: display capability values in hexadecimal format Date: Mon, 12 Dec 2022 14:43:06 +0800 Message-ID: <20221212064306.39232-12-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20221212064306.39232-1-lihuisong@huawei.com> References: <20221208080540.62913-1-lihuisong@huawei.com> <20221212064306.39232-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 Acked-by: Morten Brørup Acked-by: Chengwen Feng --- 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;