1*99a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 2*99a2dd95SBruce Richardson * Copyright(c) 2020 Intel Corporation 3*99a2dd95SBruce Richardson */ 4*99a2dd95SBruce Richardson 5*99a2dd95SBruce Richardson #ifndef _TELEMETRY_DATA_H_ 6*99a2dd95SBruce Richardson #define _TELEMETRY_DATA_H_ 7*99a2dd95SBruce Richardson 8*99a2dd95SBruce Richardson #include "rte_telemetry.h" 9*99a2dd95SBruce Richardson 10*99a2dd95SBruce Richardson enum tel_container_types { 11*99a2dd95SBruce Richardson RTE_TEL_NULL, /** null, used as error value */ 12*99a2dd95SBruce Richardson RTE_TEL_STRING, /** basic string type, no included data */ 13*99a2dd95SBruce Richardson RTE_TEL_DICT, /** name-value pairs, of individual value type */ 14*99a2dd95SBruce Richardson RTE_TEL_ARRAY_STRING, /** array of string values only */ 15*99a2dd95SBruce Richardson RTE_TEL_ARRAY_INT, /** array of signed, 32-bit int values */ 16*99a2dd95SBruce Richardson RTE_TEL_ARRAY_U64, /** array of unsigned 64-bit int values */ 17*99a2dd95SBruce Richardson RTE_TEL_ARRAY_CONTAINER, /** array of container structs */ 18*99a2dd95SBruce Richardson }; 19*99a2dd95SBruce Richardson 20*99a2dd95SBruce Richardson struct container { 21*99a2dd95SBruce Richardson struct rte_tel_data *data; 22*99a2dd95SBruce Richardson int keep; 23*99a2dd95SBruce Richardson }; 24*99a2dd95SBruce Richardson 25*99a2dd95SBruce Richardson /* each type here must have an equivalent enum in the value types enum in 26*99a2dd95SBruce Richardson * telemetry.h and an array type defined above, and have appropriate 27*99a2dd95SBruce Richardson * type assignment in the RTE_TEL_data_start_array() function 28*99a2dd95SBruce Richardson */ 29*99a2dd95SBruce Richardson union tel_value { 30*99a2dd95SBruce Richardson char sval[RTE_TEL_MAX_STRING_LEN]; 31*99a2dd95SBruce Richardson int ival; 32*99a2dd95SBruce Richardson uint64_t u64val; 33*99a2dd95SBruce Richardson struct container container; 34*99a2dd95SBruce Richardson }; 35*99a2dd95SBruce Richardson 36*99a2dd95SBruce Richardson struct tel_dict_entry { 37*99a2dd95SBruce Richardson char name[RTE_TEL_MAX_STRING_LEN]; 38*99a2dd95SBruce Richardson enum rte_tel_value_type type; 39*99a2dd95SBruce Richardson union tel_value value; 40*99a2dd95SBruce Richardson }; 41*99a2dd95SBruce Richardson 42*99a2dd95SBruce Richardson struct rte_tel_data { 43*99a2dd95SBruce Richardson enum tel_container_types type; 44*99a2dd95SBruce Richardson unsigned int data_len; /* for array or object, how many items */ 45*99a2dd95SBruce Richardson union { 46*99a2dd95SBruce Richardson char str[RTE_TEL_MAX_SINGLE_STRING_LEN]; 47*99a2dd95SBruce Richardson struct tel_dict_entry dict[RTE_TEL_MAX_DICT_ENTRIES]; 48*99a2dd95SBruce Richardson union tel_value array[RTE_TEL_MAX_ARRAY_ENTRIES]; 49*99a2dd95SBruce Richardson } data; /* data container */ 50*99a2dd95SBruce Richardson }; 51*99a2dd95SBruce Richardson 52*99a2dd95SBruce Richardson #endif 53