get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 96575,
    "url": "http://patchwork.dpdk.org/api/patches/96575/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/9e86342d13e58f568a2ea4763163d9223ae7d710.1627967359.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": "<9e86342d13e58f568a2ea4763163d9223ae7d710.1627967359.git.gmuthukrishn@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/9e86342d13e58f568a2ea4763163d9223ae7d710.1627967359.git.gmuthukrishn@marvell.com",
    "date": "2021-08-03T08:05:44",
    "name": "[v3,1/3] telemetry: enable storing pointer value",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "c4abef79b17c8faf72fe551b6807694b81a1caa6",
    "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/9e86342d13e58f568a2ea4763163d9223ae7d710.1627967359.git.gmuthukrishn@marvell.com/mbox/",
    "series": [
        {
            "id": 18157,
            "url": "http://patchwork.dpdk.org/api/series/18157/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=18157",
            "date": "2021-08-03T08:05:43",
            "name": "common/cnxk: enable npa telemetry",
            "version": 3,
            "mbox": "http://patchwork.dpdk.org/series/18157/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/96575/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/96575/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 9C887A0C41;\n\tTue,  3 Aug 2021 10:06:00 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 47860411B2;\n\tTue,  3 Aug 2021 10:05:58 +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 3C559411B2\n for <dev@dpdk.org>; Tue,  3 Aug 2021 10:05:57 +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 17382Fl8009555; Tue, 3 Aug 2021 01:05:56 -0700",
            "from dc5-exch01.marvell.com ([199.233.59.181])\n by mx0b-0016f401.pphosted.com with ESMTP id 3a6b46v9wt-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Tue, 03 Aug 2021 01:05:56 -0700",
            "from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.18;\n Tue, 3 Aug 2021 01:05:54 -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; Tue, 3 Aug 2021 01:05:54 -0700",
            "from localhost.localdomain (unknown [10.28.34.38])\n by maili.marvell.com (Postfix) with ESMTP id 04E135B6943;\n Tue,  3 Aug 2021 01:05:51 -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=Edy/Gem/w2+p3VStfb41EcphsWZyWbLMOav0IGueDaA=;\n b=NPICr7me0avZddb3Amd7l5DgZlohOjXaygHKiGpMOblg7pnNhRNRZpY09fgAprDTVm9v\n FJaqb71vSPFNNh/EdeLsc45+Et8UBkVz46ZhfSsydHCeNZtrtV09hg87ONM9yHZysKDE\n B5AtH3372r6YUNuadlmZiPaAIWri7JBE1Ly3OMv8XqNtC1mZicHDODAvz+RjO8A95oqE\n MmW0lL5yEhFYTCpAfe3TUPS68ctcf80Pt0cuJuvy7Jnx5i+p0EhLjxfaXvLsGsz+4wAY\n BZtKwbnzMfVFKCh9XXKUDxQb/OGpdAXNDK9a0yPPWkwHljTwXkYHbKFuPeiJfR8hAzE7 Bg==",
        "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": "Tue, 3 Aug 2021 13:35:44 +0530",
        "Message-ID": "\n <9e86342d13e58f568a2ea4763163d9223ae7d710.1627967359.git.gmuthukrishn@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<cover.1627967359.git.gmuthukrishn@marvell.com>",
        "References": "<cover.1627967359.git.gmuthukrishn@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-GUID": "fftF15PEcMxiqoMiTiIhbKX11DBxAMxx",
        "X-Proofpoint-ORIG-GUID": "fftF15PEcMxiqoMiTiIhbKX11DBxAMxx",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:6.0.391, 18.0.790\n definitions=2021-08-03_02:2021-08-03,\n 2021-08-03 signatures=0",
        "Subject": "[dpdk-dev] [v3, 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 | 32 +++++++++++++++++++++++++++\n lib/telemetry/version.map      |  2 ++\n 6 files changed, 127 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..b41329902f 100644\n--- a/lib/telemetry/telemetry_json.h\n+++ b/lib/telemetry/telemetry_json.h\n@@ -102,6 +102,20 @@ 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, void *ptr)\n+{\n+\tint ret, end = used - 1; /* strip off final delimiter */\n+\tif (used <= 2)\t\t /* assume empty, since minimum is '[]' */\n+\t\treturn __json_snprintf(buf, len, \"[%\" PRIuPTR \"]\",\n+\t\t\t\t       (uintptr_t)ptr);\n+\n+\tret = __json_snprintf(buf + end, len - end, \",%\" PRIuPTR \"]\",\n+\t\t\t      (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 +150,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\t\t const 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\\\":%\" PRIuPTR \"}\", name,\n+\t\t\t\t       (uintptr_t)ptr);\n+\n+\tret = __json_snprintf(buf + end, len - end, \",\\\"%s\\\":%\" PRIuPTR \"}\",\n+\t\t\t      name, (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": [
        "v3",
        "1/3"
    ]
}