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: sta...@dpdk.org Signed-off-by: Huisong Li <lihuis...@huawei.com> Acked-by: Morten Brørup <m...@smartsharesystems.com> Acked-by: Chengwen Feng <fengcheng...@huawei.com> --- 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; } -- 2.33.0