xref: /dpdk/lib/telemetry/telemetry_data.h (revision 30a1de10)
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