@@ -8,6 +8,8 @@
#ifndef _RTE_TELEMETRY_H_
#define _RTE_TELEMETRY_H_
+#include <rte_compat.h>
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -121,6 +123,22 @@ int
rte_tel_data_add_array_int(struct rte_tel_data *d, int x);
/**
+ * Add an unsigned value to an array.
+ * The array must have been started by rte_tel_data_start_array() with
+ * RTE_TEL_UINT_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_uint(struct rte_tel_data *d, uint64_t x);
+
+ /**
* Add a uint64_t to an array.
* The array must have been started by rte_tel_data_start_array() with
* RTE_TEL_UINT_VAL as the type parameter.
@@ -193,6 +211,25 @@ int
rte_tel_data_add_dict_int(struct rte_tel_data *d, const char *name, int val);
/**
+ * Add an unsigned 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_uint(struct rte_tel_data *d,
+ const char *name, uint64_t val);
+
+ /**
* Add a uint64_t value to a dictionary.
* The dict must have been started by rte_tel_data_start_dict().
*
@@ -167,16 +167,16 @@ 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 != TEL_DICT && d->type != TEL_ARRAY_U64 &&
+ if (d->type != TEL_DICT && d->type != TEL_ARRAY_UINT &&
d->type != TEL_ARRAY_INT && d->type != TEL_ARRAY_STRING)
return snprintf(out_buf, buf_len, "null");
used = rte_tel_json_empty_array(out_buf, buf_len, 0);
- if (d->type == TEL_ARRAY_U64)
+ if (d->type == TEL_ARRAY_UINT)
for (i = 0; i < d->data_len; i++)
used = rte_tel_json_add_array_u64(out_buf,
buf_len, used,
- d->data.array[i].u64val);
+ d->data.array[i].uval);
if (d->type == TEL_ARRAY_INT)
for (i = 0; i < d->data_len; i++)
used = rte_tel_json_add_array_int(out_buf,
@@ -204,7 +204,7 @@ container_to_json(const struct rte_tel_data *d, char *out_buf, size_t buf_len)
case RTE_TEL_UINT_VAL:
used = rte_tel_json_add_obj_u64(out_buf,
buf_len, used,
- v->name, v->value.u64val);
+ v->name, v->value.uval);
break;
case RTE_TEL_CONTAINER:
{
@@ -271,7 +271,7 @@ output_json(const char *cmd, const struct rte_tel_data *d, int s)
case RTE_TEL_UINT_VAL:
used = rte_tel_json_add_obj_u64(cb_data_buf,
buf_len, used,
- v->name, v->value.u64val);
+ v->name, v->value.uval);
break;
case RTE_TEL_CONTAINER:
{
@@ -293,7 +293,7 @@ output_json(const char *cmd, const struct rte_tel_data *d, int s)
case TEL_ARRAY_STRING:
case TEL_ARRAY_INT:
- case TEL_ARRAY_U64:
+ case TEL_ARRAY_UINT:
case TEL_ARRAY_CONTAINER:
used = rte_tel_json_empty_array(cb_data_buf, buf_len, 0);
for (i = 0; i < d->data_len; i++)
@@ -306,10 +306,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 == TEL_ARRAY_U64)
+ else if (d->type == TEL_ARRAY_UINT)
used = rte_tel_json_add_array_u64(cb_data_buf,
buf_len, used,
- d->data.array[i].u64val);
+ d->data.array[i].uval);
else if (d->type == TEL_ARRAY_CONTAINER) {
char temp[buf_len];
const struct container *rec_data =
@@ -18,7 +18,7 @@ rte_tel_data_start_array(struct rte_tel_data *d, enum rte_tel_value_type type)
enum tel_container_types array_types[] = {
[RTE_TEL_STRING_VAL] = TEL_ARRAY_STRING,
[RTE_TEL_INT_VAL] = TEL_ARRAY_INT,
- [RTE_TEL_UINT_VAL] = TEL_ARRAY_U64,
+ [RTE_TEL_UINT_VAL] = TEL_ARRAY_UINT,
[RTE_TEL_CONTAINER] = TEL_ARRAY_CONTAINER,
};
d->type = array_types[type];
@@ -70,22 +70,28 @@ rte_tel_data_add_array_int(struct rte_tel_data *d, int x)
}
int
-rte_tel_data_add_array_u64(struct rte_tel_data *d, uint64_t x)
+rte_tel_data_add_array_uint(struct rte_tel_data *d, uint64_t x)
{
- if (d->type != TEL_ARRAY_U64)
+ if (d->type != TEL_ARRAY_UINT)
return -EINVAL;
if (d->data_len >= RTE_TEL_MAX_ARRAY_ENTRIES)
return -ENOSPC;
- d->data.array[d->data_len++].u64val = x;
+ d->data.array[d->data_len++].uval = x;
return 0;
}
+int
+rte_tel_data_add_array_u64(struct rte_tel_data *d, uint64_t x)
+{
+ return rte_tel_data_add_array_uint(d, x);
+}
+
int
rte_tel_data_add_array_container(struct rte_tel_data *d,
struct rte_tel_data *val, int keep)
{
if (d->type != TEL_ARRAY_CONTAINER ||
- (val->type != TEL_ARRAY_U64
+ (val->type != TEL_ARRAY_UINT
&& val->type != TEL_ARRAY_INT
&& val->type != TEL_ARRAY_STRING))
return -EINVAL;
@@ -160,7 +166,7 @@ rte_tel_data_add_dict_int(struct rte_tel_data *d, const char *name, int val)
}
int
-rte_tel_data_add_dict_u64(struct rte_tel_data *d,
+rte_tel_data_add_dict_uint(struct rte_tel_data *d,
const char *name, uint64_t val)
{
struct tel_dict_entry *e = &d->data.dict[d->data_len];
@@ -174,18 +180,24 @@ rte_tel_data_add_dict_u64(struct rte_tel_data *d,
d->data_len++;
e->type = RTE_TEL_UINT_VAL;
- e->value.u64val = val;
+ e->value.uval = 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)
+{
+ return rte_tel_data_add_dict_uint(d, name, val);
+}
+
int
rte_tel_data_add_dict_container(struct rte_tel_data *d, const char *name,
struct rte_tel_data *val, int keep)
{
struct tel_dict_entry *e = &d->data.dict[d->data_len];
- if (d->type != TEL_DICT || (val->type != TEL_ARRAY_U64
+ if (d->type != TEL_DICT || (val->type != TEL_ARRAY_UINT
&& val->type != TEL_ARRAY_INT
&& val->type != TEL_ARRAY_STRING
&& val->type != TEL_DICT))
@@ -13,7 +13,7 @@ enum tel_container_types {
TEL_DICT, /** name-value pairs, of individual value type */
TEL_ARRAY_STRING, /** array of string values only */
TEL_ARRAY_INT, /** array of signed, 32-bit int values */
- TEL_ARRAY_U64, /** array of unsigned 64-bit int values */
+ TEL_ARRAY_UINT, /** array of unsigned 64-bit int values */
TEL_ARRAY_CONTAINER, /** array of container structs */
};
@@ -29,7 +29,7 @@ struct container {
union tel_value {
char sval[RTE_TEL_MAX_STRING_LEN];
int ival;
- uint64_t u64val;
+ uint64_t uval;
struct container container;
};
@@ -19,6 +19,13 @@ DPDK_23 {
local: *;
};
+EXPERIMENTAL {
+ global:
+
+ rte_tel_data_add_array_uint;
+ rte_tel_data_add_dict_uint;
+};
+
INTERNAL {
rte_telemetry_legacy_register;
rte_telemetry_init;