get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/96503/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 96503,
    "url": "http://patchwork.dpdk.org/api/patches/96503/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/0bafb4b7a66397e3f0505c3b192f44ecf5081ec3.1627839051.git.gmuthukrishn@marvell.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<0bafb4b7a66397e3f0505c3b192f44ecf5081ec3.1627839051.git.gmuthukrishn@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/0bafb4b7a66397e3f0505c3b192f44ecf5081ec3.1627839051.git.gmuthukrishn@marvell.com",
    "date": "2021-08-01T17:37:39",
    "name": "[v2,1/3] telemetry: enable storing pointer value",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "fae953ce88d68f5f0212f966967a34f3beab17ff",
    "submitter": {
        "id": 2301,
        "url": "http://patchwork.dpdk.org/api/people/2301/?format=api",
        "name": "Gowrishankar Muthukrishnan",
        "email": "gmuthukrishn@marvell.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/0bafb4b7a66397e3f0505c3b192f44ecf5081ec3.1627839051.git.gmuthukrishn@marvell.com/mbox/",
    "series": [
        {
            "id": 18119,
            "url": "http://patchwork.dpdk.org/api/series/18119/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=18119",
            "date": "2021-08-01T17:37:38",
            "name": "common/cnxk: enable npa telemetry",
            "version": 2,
            "mbox": "http://patchwork.dpdk.org/series/18119/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/96503/comments/",
    "check": "warning",
    "checks": "http://patchwork.dpdk.org/api/patches/96503/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "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])\n\tby inbox.dpdk.org (Postfix) with ESMTP id E1AD6A0C4F;\n\tSun,  1 Aug 2021 19:37:57 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 5AE80410FD;\n\tSun,  1 Aug 2021 19:37:54 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 551C7410FC\n for <dev@dpdk.org>; Sun,  1 Aug 2021 19:37:53 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id\n 171HYEYc017347; Sun, 1 Aug 2021 10:37:52 -0700",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0b-0016f401.pphosted.com with ESMTP id 3a561rtx0c-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Sun, 01 Aug 2021 10:37:52 -0700",
            "from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18;\n Sun, 1 Aug 2021 10:37:49 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.18 via Frontend\n Transport; Sun, 1 Aug 2021 10:37:49 -0700",
            "from localhost.localdomain (unknown [10.28.34.38])\n by maili.marvell.com (Postfix) with ESMTP id 5C6153F7060;\n Sun,  1 Aug 2021 10:37:47 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0220;\n bh=D4v5Pava5EXm+5PCt8wTdjRvzAAx8pu0hhnl5I8xw7A=;\n b=Zqpj5St3J08oK2yHTAgNkTBi+Ii+Dym5Z/5Jutx7q5sEo7aslkXGIpIaCR87uDBrsVwZ\n gQVYr4WQ8T+n5rNduf5L/zlZBA0tDpfrozGlkW+jIqGhfrZ950+dWwTN/OtyN/rDKdOp\n 9xaXpecshtOIG5VdkebHUiFiWQSD1weAi5+1ZBMGblOP3wxCR+fVvlkAxfya3QxQlLLW\n 8mpgzpXyiFbp+x9s4XKeI+j2+3n0S8Rh+V54+VT4zAFxcMSEKC/nh6r6gygxo9IfeESg\n dD+nFKrG+FpnK4NcZ6Bv0cDviFrduJzrfpcw6QNJQNIRIxpEMTNHaNvN0mZa78BOevR+ YA==",
        "From": "Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<bruce.richardson@intel.com>, <ciara.power@intel.com>,\n <jerinj@marvell.com>, <kirankumark@marvell.com>,\n <ndabilpuram@marvell.com>, <skori@marvell.com>, <skoteshwar@marvell.com>,\n Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>",
        "Date": "Sun, 1 Aug 2021 23:07:39 +0530",
        "Message-ID": "\n <0bafb4b7a66397e3f0505c3b192f44ecf5081ec3.1627839051.git.gmuthukrishn@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<cover.1627839051.git.gmuthukrishn@marvell.com>",
        "References": "<cover.1627839051.git.gmuthukrishn@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "p4-DTx-_09vCTm6mS-N72tLrmyLEI7P7",
        "X-Proofpoint-GUID": "p4-DTx-_09vCTm6mS-N72tLrmyLEI7P7",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:6.0.391, 18.0.790\n definitions=2021-08-01_02:2021-07-30,\n 2021-08-01 signatures=0",
        "Subject": "[dpdk-dev] [v2, 1/3] telemetry: enable storing pointer value",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "At present, value of pointer variable or address is stored in\nu64 type which may not properly work in non64 bit arch. Hence,\nthis patch adds new API to store it in void*. JSON encoding is\nafter converting to uintptr_t so, address value is correctly\ncasted as per arch as well. Once JSON5 support is available\nat JSON clients, hex value of address can be encoded instead\nof uintptr_t.\n\nSigned-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>\n---\n lib/telemetry/rte_telemetry.h  | 37 ++++++++++++++++++++++++++++++-\n lib/telemetry/telemetry.c      | 21 ++++++++++++++++--\n lib/telemetry/telemetry_data.c | 40 ++++++++++++++++++++++++++++++----\n lib/telemetry/telemetry_data.h |  2 ++\n lib/telemetry/telemetry_json.h | 31 ++++++++++++++++++++++++++\n lib/telemetry/version.map      |  2 ++\n 6 files changed, 126 insertions(+), 7 deletions(-)",
    "diff": "diff --git a/lib/telemetry/rte_telemetry.h b/lib/telemetry/rte_telemetry.h\nindex 8776998b54..6a420f918c 100644\n--- a/lib/telemetry/rte_telemetry.h\n+++ b/lib/telemetry/rte_telemetry.h\n@@ -46,7 +46,8 @@ enum rte_tel_value_type {\n \tRTE_TEL_STRING_VAL, /** a string value */\n \tRTE_TEL_INT_VAL,    /** a signed 32-bit int value */\n \tRTE_TEL_U64_VAL,    /** an unsigned 64-bit int value */\n-\tRTE_TEL_CONTAINER, /** a container struct */\n+\tRTE_TEL_CONTAINER,  /** a container struct */\n+\tRTE_TEL_PTR_VAL,    /** a pointer value */\n };\n \n /**\n@@ -137,6 +138,22 @@ __rte_experimental\n int\n rte_tel_data_add_array_u64(struct rte_tel_data *d, uint64_t x);\n \n+/**\n+ * Add a pointer value to an array.\n+ * The array must have been started by rte_tel_data_start_array() with\n+ * RTE_TEL_PTR_VAL as the type parameter.\n+ *\n+ * @param d\n+ *   The data structure passed to the callback\n+ * @param x\n+ *   The pointer value to be returned in the array\n+ * @return\n+ *   0 on success, negative errno on error\n+ */\n+__rte_experimental\n+int\n+rte_tel_data_add_array_ptr(struct rte_tel_data *d, void *x);\n+\n /**\n  * Add a container to an array. A container is an existing telemetry data\n  * array. The array the container is to be added to must have been started by\n@@ -213,6 +230,24 @@ int\n rte_tel_data_add_dict_u64(struct rte_tel_data *d,\n \t\tconst char *name, uint64_t val);\n \n+/**\n+ * Add a pointer value to a dictionary.\n+ * The dict must have been started by rte_tel_data_start_dict().\n+ *\n+ * @param d\n+ *   The data structure passed to the callback\n+ * @param name\n+ *   The name the value is to be stored under in the dict\n+ * @param ptr\n+ *   The pointer value to be stored in the dict\n+ * @return\n+ *   0 on success, negative errno on error, E2BIG on string truncation of name.\n+ */\n+__rte_experimental\n+int\n+rte_tel_data_add_dict_ptr(struct rte_tel_data *d,\n+\t\tconst char *name, void *ptr);\n+\n /**\n  * Add a container to a dictionary. A container is an existing telemetry data\n  * array. The dict the container is to be added to must have been started by\ndiff --git a/lib/telemetry/telemetry.c b/lib/telemetry/telemetry.c\nindex 8665db8d03..5842b28740 100644\n--- a/lib/telemetry/telemetry.c\n+++ b/lib/telemetry/telemetry.c\n@@ -157,8 +157,10 @@ container_to_json(const struct rte_tel_data *d, char *out_buf, size_t buf_len)\n \tsize_t used = 0;\n \tunsigned int i;\n \n-\tif (d->type != RTE_TEL_ARRAY_U64 && d->type != RTE_TEL_ARRAY_INT\n-\t\t\t&& d->type != RTE_TEL_ARRAY_STRING)\n+\tif (d->type != RTE_TEL_ARRAY_U64\n+\t\t&& d->type != RTE_TEL_ARRAY_INT\n+\t\t&& d->type != RTE_TEL_ARRAY_PTR\n+\t\t&& d->type != RTE_TEL_ARRAY_STRING)\n \t\treturn snprintf(out_buf, buf_len, \"null\");\n \n \tused = rte_tel_json_empty_array(out_buf, buf_len, 0);\n@@ -167,6 +169,11 @@ container_to_json(const struct rte_tel_data *d, char *out_buf, size_t buf_len)\n \t\t\tused = rte_tel_json_add_array_u64(out_buf,\n \t\t\t\tbuf_len, used,\n \t\t\t\td->data.array[i].u64val);\n+\tif (d->type == RTE_TEL_ARRAY_PTR)\n+\t\tfor (i = 0; i < d->data_len; i++)\n+\t\t\tused = rte_tel_json_add_array_ptr(out_buf,\n+\t\t\t\tbuf_len, used,\n+\t\t\t\td->data.array[i].ptrval);\n \tif (d->type == RTE_TEL_ARRAY_INT)\n \t\tfor (i = 0; i < d->data_len; i++)\n \t\t\tused = rte_tel_json_add_array_int(out_buf,\n@@ -226,6 +233,11 @@ output_json(const char *cmd, const struct rte_tel_data *d, int s)\n \t\t\t\t\t\tbuf_len, used,\n \t\t\t\t\t\tv->name, v->value.u64val);\n \t\t\t\tbreak;\n+\t\t\tcase RTE_TEL_PTR_VAL:\n+\t\t\t\tused = rte_tel_json_add_obj_ptr(cb_data_buf,\n+\t\t\t\t\t\tbuf_len, used,\n+\t\t\t\t\t\tv->name, v->value.ptrval);\n+\t\t\t\tbreak;\n \t\t\tcase RTE_TEL_CONTAINER:\n \t\t\t{\n \t\t\t\tchar temp[buf_len];\n@@ -248,6 +260,7 @@ output_json(const char *cmd, const struct rte_tel_data *d, int s)\n \tcase RTE_TEL_ARRAY_STRING:\n \tcase RTE_TEL_ARRAY_INT:\n \tcase RTE_TEL_ARRAY_U64:\n+\tcase RTE_TEL_ARRAY_PTR:\n \tcase RTE_TEL_ARRAY_CONTAINER:\n \t\tprefix_used = snprintf(out_buf, sizeof(out_buf), \"{\\\"%.*s\\\":\",\n \t\t\t\tMAX_CMD_LEN, cmd);\n@@ -269,6 +282,10 @@ output_json(const char *cmd, const struct rte_tel_data *d, int s)\n \t\t\t\tused = rte_tel_json_add_array_u64(cb_data_buf,\n \t\t\t\t\t\tbuf_len, used,\n \t\t\t\t\t\td->data.array[i].u64val);\n+\t\t\telse if (d->type == RTE_TEL_ARRAY_PTR)\n+\t\t\t\tused = rte_tel_json_add_array_ptr(cb_data_buf,\n+\t\t\t\t\t\tbuf_len, used,\n+\t\t\t\t\t\td->data.array[i].ptrval);\n \t\t\telse if (d->type == RTE_TEL_ARRAY_CONTAINER) {\n \t\t\t\tchar temp[buf_len];\n \t\t\t\tconst struct container *rec_data =\ndiff --git a/lib/telemetry/telemetry_data.c b/lib/telemetry/telemetry_data.c\nindex 77b0fe09a5..9384f48589 100644\n--- a/lib/telemetry/telemetry_data.c\n+++ b/lib/telemetry/telemetry_data.c\n@@ -15,6 +15,7 @@ rte_tel_data_start_array(struct rte_tel_data *d, enum rte_tel_value_type type)\n \t\t\tRTE_TEL_ARRAY_INT,    /* RTE_TEL_INT_VAL = 1 */\n \t\t\tRTE_TEL_ARRAY_U64,    /* RTE_TEL_u64_VAL = 2 */\n \t\t\tRTE_TEL_ARRAY_CONTAINER, /* RTE_TEL_CONTAINER = 3 */\n+\t\t\tRTE_TEL_ARRAY_PTR,    /* RTE_TEL_PTR_VAL = 4 */\n \t};\n \td->type = array_types[type];\n \td->data_len = 0;\n@@ -75,6 +76,17 @@ rte_tel_data_add_array_u64(struct rte_tel_data *d, uint64_t x)\n \treturn 0;\n }\n \n+int\n+rte_tel_data_add_array_ptr(struct rte_tel_data *d, void *x)\n+{\n+\tif (d->type != RTE_TEL_ARRAY_PTR)\n+\t\treturn -EINVAL;\n+\tif (d->data_len >= RTE_TEL_MAX_ARRAY_ENTRIES)\n+\t\treturn -ENOSPC;\n+\td->data.array[d->data_len++].ptrval = x;\n+\treturn 0;\n+}\n+\n int\n rte_tel_data_add_array_container(struct rte_tel_data *d,\n \t\tstruct rte_tel_data *val, int keep)\n@@ -82,7 +94,8 @@ rte_tel_data_add_array_container(struct rte_tel_data *d,\n \tif (d->type != RTE_TEL_ARRAY_CONTAINER ||\n \t\t\t(val->type != RTE_TEL_ARRAY_U64\n \t\t\t&& val->type != RTE_TEL_ARRAY_INT\n-\t\t\t&& val->type != RTE_TEL_ARRAY_STRING))\n+\t\t\t&& val->type != RTE_TEL_ARRAY_STRING\n+\t\t\t&& val->type != RTE_TEL_ARRAY_PTR))\n \t\treturn -EINVAL;\n \tif (d->data_len >= RTE_TEL_MAX_ARRAY_ENTRIES)\n \t\treturn -ENOSPC;\n@@ -147,15 +160,34 @@ rte_tel_data_add_dict_u64(struct rte_tel_data *d,\n \treturn bytes < RTE_TEL_MAX_STRING_LEN ? 0 : E2BIG;\n }\n \n+int\n+rte_tel_data_add_dict_ptr(struct rte_tel_data *d,\n+\t\tconst char *name, void *ptr)\n+{\n+\tstruct tel_dict_entry *e = &d->data.dict[d->data_len];\n+\tif (d->type != RTE_TEL_DICT)\n+\t\treturn -EINVAL;\n+\tif (d->data_len >= RTE_TEL_MAX_DICT_ENTRIES)\n+\t\treturn -ENOSPC;\n+\n+\td->data_len++;\n+\te->type = RTE_TEL_PTR_VAL;\n+\te->value.ptrval = ptr;\n+\tconst size_t bytes = strlcpy(e->name, name, RTE_TEL_MAX_STRING_LEN);\n+\treturn bytes < RTE_TEL_MAX_STRING_LEN ? 0 : E2BIG;\n+}\n+\n int\n rte_tel_data_add_dict_container(struct rte_tel_data *d, const char *name,\n \t\tstruct rte_tel_data *val, int keep)\n {\n \tstruct tel_dict_entry *e = &d->data.dict[d->data_len];\n \n-\tif (d->type != RTE_TEL_DICT || (val->type != RTE_TEL_ARRAY_U64\n-\t\t\t&& val->type != RTE_TEL_ARRAY_INT\n-\t\t\t&& val->type != RTE_TEL_ARRAY_STRING))\n+\tif (d->type != RTE_TEL_DICT ||\n+\t\t(val->type != RTE_TEL_ARRAY_U64\n+\t\t && val->type != RTE_TEL_ARRAY_INT\n+\t\t && val->type != RTE_TEL_ARRAY_STRING\n+\t\t && val->type != RTE_TEL_ARRAY_PTR))\n \t\treturn -EINVAL;\n \tif (d->data_len >= RTE_TEL_MAX_DICT_ENTRIES)\n \t\treturn -ENOSPC;\ndiff --git a/lib/telemetry/telemetry_data.h b/lib/telemetry/telemetry_data.h\nindex adb84a09f1..bb361e3bcc 100644\n--- a/lib/telemetry/telemetry_data.h\n+++ b/lib/telemetry/telemetry_data.h\n@@ -16,6 +16,7 @@ enum tel_container_types {\n \tRTE_TEL_ARRAY_INT,    /** array of signed, 32-bit int values */\n \tRTE_TEL_ARRAY_U64,    /** array of unsigned 64-bit int values */\n \tRTE_TEL_ARRAY_CONTAINER, /** array of container structs */\n+\tRTE_TEL_ARRAY_PTR,    /** array of pointer values */\n };\n \n struct container {\n@@ -31,6 +32,7 @@ union tel_value {\n \tchar sval[RTE_TEL_MAX_STRING_LEN];\n \tint ival;\n \tuint64_t u64val;\n+\tvoid *ptrval;\n \tstruct container container;\n };\n \ndiff --git a/lib/telemetry/telemetry_json.h b/lib/telemetry/telemetry_json.h\nindex ad270b9b30..3e4f026b44 100644\n--- a/lib/telemetry/telemetry_json.h\n+++ b/lib/telemetry/telemetry_json.h\n@@ -102,6 +102,19 @@ rte_tel_json_add_array_u64(char *buf, const int len, const int used,\n \treturn ret == 0 ? used : end + ret;\n }\n \n+/* Appends a pointer value into the JSON array in the provided buffer. */\n+static inline int\n+rte_tel_json_add_array_ptr(char *buf, const int len, const int used,\n+\t\tvoid *ptr)\n+{\n+\tint ret, end = used - 1; /* strip off final delimiter */\n+\tif (used <= 2) /* assume empty, since minimum is '[]' */\n+\t\treturn __json_snprintf(buf, len, \"[%ld]\", (uintptr_t)ptr);\n+\n+\tret = __json_snprintf(buf + end, len - end, \",%ld]\", (uintptr_t)ptr);\n+\treturn ret == 0 ? used : end + ret;\n+}\n+\n /*\n  * Add a new element with raw JSON value to the JSON array stored in the\n  * provided buffer.\n@@ -136,6 +149,24 @@ rte_tel_json_add_obj_u64(char *buf, const int len, const int used,\n \treturn ret == 0 ? used : end + ret;\n }\n \n+/**\n+ * Add a new element with uint64_t value to the JSON object stored in the\n+ * provided buffer.\n+ */\n+static inline int\n+rte_tel_json_add_obj_ptr(char *buf, const int len, const int used,\n+\t\tconst char *name, void *ptr)\n+{\n+\tint ret, end = used - 1;\n+\tif (used <= 2) /* assume empty, since minimum is '{}' */\n+\t\treturn __json_snprintf(buf, len, \"{\\\"%s\\\":%ld}\", name,\n+\t\t\t\t(uintptr_t)ptr);\n+\n+\tret = __json_snprintf(buf + end, len - end, \",\\\"%s\\\":%ld}\", name,\n+\t\t\t\t(uintptr_t)ptr);\n+\treturn ret == 0 ? used : end + ret;\n+}\n+\n /**\n  * Add a new element with int value to the JSON object stored in the\n  * provided buffer.\ndiff --git a/lib/telemetry/version.map b/lib/telemetry/version.map\nindex bde80ce29b..d919340bc6 100644\n--- a/lib/telemetry/version.map\n+++ b/lib/telemetry/version.map\n@@ -5,10 +5,12 @@ EXPERIMENTAL {\n \trte_tel_data_add_array_int;\n \trte_tel_data_add_array_string;\n \trte_tel_data_add_array_u64;\n+\trte_tel_data_add_array_ptr;\n \trte_tel_data_add_dict_container;\n \trte_tel_data_add_dict_int;\n \trte_tel_data_add_dict_string;\n \trte_tel_data_add_dict_u64;\n+\trte_tel_data_add_dict_ptr;\n \trte_tel_data_alloc;\n \trte_tel_data_free;\n \trte_tel_data_start_array;\n",
    "prefixes": [
        "v2",
        "1/3"
    ]
}