get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 122412,
    "url": "https://patches.dpdk.org/api/patches/122412/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20230120084059.2926575-5-adwivedi@marvell.com/",
    "project": {
        "id": 1,
        "url": "https://patches.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": "<20230120084059.2926575-5-adwivedi@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230120084059.2926575-5-adwivedi@marvell.com",
    "date": "2023-01-20T08:40:57",
    "name": "[v6,4/6] ethdev: add trace points for flow",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "8cda107843cff7d25369eefc84a44058771f3e2b",
    "submitter": {
        "id": 1561,
        "url": "https://patches.dpdk.org/api/people/1561/?format=api",
        "name": "Ankur Dwivedi",
        "email": "adwivedi@marvell.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20230120084059.2926575-5-adwivedi@marvell.com/mbox/",
    "series": [
        {
            "id": 26622,
            "url": "https://patches.dpdk.org/api/series/26622/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=26622",
            "date": "2023-01-20T08:40:53",
            "name": "add trace points in ethdev library",
            "version": 6,
            "mbox": "https://patches.dpdk.org/series/26622/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/122412/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/122412/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 2A4204242B;\n\tFri, 20 Jan 2023 09:45:42 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 1CC6E40223;\n\tFri, 20 Jan 2023 09:45:42 +0100 (CET)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id B285240150\n for <dev@dpdk.org>; Fri, 20 Jan 2023 09:45:39 +0100 (CET)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id\n 30K7NcZf016158; Fri, 20 Jan 2023 00:43:15 -0800",
            "from dc5-exch01.marvell.com ([199.233.59.181])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3n71cexjta-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Fri, 20 Jan 2023 00:43:15 -0800",
            "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.42;\n Fri, 20 Jan 2023 00:43:12 -0800",
            "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.42 via Frontend\n Transport; Fri, 20 Jan 2023 00:43:12 -0800",
            "from localhost.localdomain (unknown [10.28.36.185])\n by maili.marvell.com (Postfix) with ESMTP id AF5EC3F707C;\n Fri, 20 Jan 2023 00:42:51 -0800 (PST)"
        ],
        "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=YYEub1xdwc/ZkKLha0orWzDo8R87UYR9HVN0o+6Ki0k=;\n b=dX432RJHKseUnbuTyyaqaFyazq4rOL5vUS0W3jxbzK+70yUhNb3DNhfaxZEonX5CyAv+\n EPvN5nCQaGC0JIvqvZeozFnY1BxjLui0PQPN4VMRGzYLjxLh6eE534XQL1+f4OhFlJYK\n gBcSs9BzjYBWUA/AxSMIYtMtzYbrUVvSaac5khbHoMWIEvAb8NsjBR+IiHkvgNSp4RNr\n WgRzAZ377Y4v3skZVKINHbHa9pMtv5gc2kDhfWuUsj86EsVD1D72Q5FPRxI0S27GUAkj\n 53DCHpi4ZUMnuz9H4BX2L4LaBQS3CTkt4rIXTaaVRFHXUXjVoyv3PzBVuZLZxMYAH3fj Sw==",
        "From": "Ankur Dwivedi <adwivedi@marvell.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<thomas@monjalon.net>, <david.marchand@redhat.com>, <mdr@ashroe.eu>,\n <orika@nvidia.com>, <ferruh.yigit@amd.com>, <chas3@att.com>,\n <humin29@huawei.com>, <linville@tuxdriver.com>,\n <ciara.loftus@intel.com>, <qi.z.zhang@intel.com>, <mw@semihalf.com>,\n <mk@semihalf.com>, <shaibran@amazon.com>, <evgenys@amazon.com>,\n <igorch@amazon.com>, <chandu@amd.com>, <irusskikh@marvell.com>,\n <shepard.siegel@atomicrules.com>, <ed.czeck@atomicrules.com>,\n <john.miller@atomicrules.com>, <ajit.khaparde@broadcom.com>,\n <somnath.kotur@broadcom.com>, <jerinj@marvell.com>,\n <mczekaj@marvell.com>, <sthotton@marvell.com>,\n <srinivasan@marvell.com>, <hkalra@marvell.com>,\n <rahul.lakkireddy@chelsio.com>, <johndale@cisco.com>,\n <hyonkim@cisco.com>, <liudongdong3@huawei.com>,\n <yisen.zhuang@huawei.com>, <xuanziyang2@huawei.com>,\n <cloud.wangxiaoyun@huawei.com>, <zhouguoyang@huawei.com>,\n <simei.su@intel.com>, <wenjun1.wu@intel.com>, <qiming.yang@intel.com>,\n <Yuying.Zhang@intel.com>, <beilei.xing@intel.com>,\n <xiao.w.wang@intel.com>, <jingjing.wu@intel.com>,\n <junfeng.guo@intel.com>, <rosen.xu@intel.com>,\n <ndabilpuram@marvell.com>, <kirankumark@marvell.com>,\n <skori@marvell.com>, <skoteshwar@marvell.com>, <lironh@marvell.com>,\n <zr@semihalf.com>, <radhac@marvell.com>, <vburru@marvell.com>,\n <sedara@marvell.com>, <matan@nvidia.com>, <viacheslavo@nvidia.com>,\n <longli@microsoft.com>, <spinler@cesnet.cz>,\n <chaoyong.he@corigine.com>, <niklas.soderlund@corigine.com>,\n <hemant.agrawal@nxp.com>, <sachin.saxena@oss.nxp.com>,\n <g.singh@nxp.com>, <apeksha.gupta@nxp.com>, <sachin.saxena@nxp.com>,\n <aboyer@pensando.io>, <rmody@marvell.com>, <shshaikh@marvell.com>,\n <dsinghrawat@marvell.com>, <andrew.rybchenko@oktetlabs.ru>,\n <jiawenwu@trustnetic.com>, <jianwang@trustnetic.com>,\n <jbehrens@vmware.com>, <maxime.coquelin@redhat.com>,\n <chenbo.xia@intel.com>, <steven.webster@windriver.com>,\n <matt.peters@windriver.com>, <bruce.richardson@intel.com>,\n <mtetsuyah@gmail.com>, <grive@u256.net>, <jasvinder.singh@intel.com>,\n <cristian.dumitrescu@intel.com>, <jgrajcia@cisco.com>,\n <mb@smartsharesystems.com>, Ankur Dwivedi <adwivedi@marvell.com>",
        "Subject": "[PATCH v6 4/6] ethdev: add trace points for flow",
        "Date": "Fri, 20 Jan 2023 14:10:57 +0530",
        "Message-ID": "<20230120084059.2926575-5-adwivedi@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20230120084059.2926575-1-adwivedi@marvell.com>",
        "References": "<20230112112140.807233-1-adwivedi@marvell.com>\n <20230120084059.2926575-1-adwivedi@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-GUID": "kIWD6rJV6JxeuQ5YckP6ePJx0mQdu7aL",
        "X-Proofpoint-ORIG-GUID": "kIWD6rJV6JxeuQ5YckP6ePJx0mQdu7aL",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.122.1\n definitions=2023-01-20_06,2023-01-19_01,2022-06-22_01",
        "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"
    },
    "content": "Adds trace points for rte_flow specific functions in ethdev lib.\n\nSigned-off-by: Ankur Dwivedi <adwivedi@marvell.com>\n---\n lib/ethdev/ethdev_trace_points.c | 117 ++++++++++\n lib/ethdev/rte_ethdev_trace.h    | 383 +++++++++++++++++++++++++++++++\n lib/ethdev/rte_ethdev_trace_fp.h | 113 +++++++++\n lib/ethdev/rte_flow.c            | 314 +++++++++++++++++++------\n lib/ethdev/version.map           |  37 +++\n 5 files changed, 898 insertions(+), 66 deletions(-)",
    "diff": "diff --git a/lib/ethdev/ethdev_trace_points.c b/lib/ethdev/ethdev_trace_points.c\nindex 102a18fcc1..1953d90a5a 100644\n--- a/lib/ethdev/ethdev_trace_points.c\n+++ b/lib/ethdev/ethdev_trace_points.c\n@@ -474,3 +474,120 @@ RTE_TRACE_POINT_REGISTER(rte_eth_trace_cman_config_set,\n \n RTE_TRACE_POINT_REGISTER(rte_eth_trace_cman_config_get,\n \tlib.ethdev.cman_config_get)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_copy,\n+\tlib.ethdev.flow.copy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_create,\n+\tlib.ethdev.flow.create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_destroy,\n+\tlib.ethdev.flow.destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_flush,\n+\tlib.ethdev.flow.flush)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_isolate,\n+\tlib.ethdev.flow.isolate)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_query,\n+\tlib.ethdev.flow.query)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_validate,\n+\tlib.ethdev.flow.validate)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_conv,\n+\tlib.ethdev.flow.conv)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_dynf_metadata_register,\n+\tlib.ethdev.dynf_metadata_register)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_get_aged_flows,\n+\tlib.ethdev.flow.get_aged_flows)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_get_q_aged_flows,\n+\tlib.ethdev.flow.get_q_aged_flows)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_tunnel_decap_set,\n+\tlib.ethdev.flow.tunnel_decap_set)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_tunnel_match,\n+\tlib.ethdev.flow.tunnel_match)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_get_restore_info,\n+\tlib.ethdev.flow.get_restore_info)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_tunnel_action_decap_release,\n+\tlib.ethdev.flow.tunnel_action_decap_release)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_tunnel_item_release,\n+\tlib.ethdev.flow.tunnel_item_release)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_action_handle_create,\n+\tlib.ethdev.flow.action_handle_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_action_handle_destroy,\n+\tlib.ethdev.flow.action_handle_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_action_handle_update,\n+\tlib.ethdev.flow.action_handle_update)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_action_handle_query,\n+\tlib.ethdev.flow.action_handle_query)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_flex_item_create,\n+\tlib.ethdev.flow.flex_item_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_flex_item_release,\n+\tlib.ethdev.flow.flex_item_release)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_pick_transfer_proxy,\n+\tlib.ethdev.flow.pick_transfer_proxy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_info_get,\n+\tlib.ethdev.flow.info_get)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_configure,\n+\tlib.ethdev.flow.configure)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_pattern_template_create,\n+\tlib.ethdev.flow.pattern_template_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_pattern_template_destroy,\n+\tlib.ethdev.flow.pattern_template_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_actions_template_create,\n+\tlib.ethdev.flow.actions_template_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_actions_template_destroy,\n+\tlib.ethdev.flow.actions_template_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_template_table_create,\n+\tlib.ethdev.flow.template_table_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_template_table_destroy,\n+\tlib.ethdev.flow.template_table_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_create,\n+\tlib.ethdev.flow.async_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_destroy,\n+\tlib.ethdev.flow.async_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_push,\n+\tlib.ethdev.flow.push)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_pull,\n+\tlib.ethdev.flow.pull)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_action_handle_create,\n+\tlib.ethdev.flow.async_action_handle_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_action_handle_destroy,\n+\tlib.ethdev.flow.async_action_handle_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_action_handle_update,\n+\tlib.ethdev.flow.async_action_handle_update)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_action_handle_query,\n+\tlib.ethdev.flow.async.action.handle.query)\ndiff --git a/lib/ethdev/rte_ethdev_trace.h b/lib/ethdev/rte_ethdev_trace.h\nindex fa195c5cde..fd4fbaf6de 100644\n--- a/lib/ethdev/rte_ethdev_trace.h\n+++ b/lib/ethdev/rte_ethdev_trace.h\n@@ -902,6 +902,389 @@ RTE_TRACE_POINT(\n \trte_trace_point_emit_int(ret);\n )\n \n+RTE_TRACE_POINT(\n+\trte_flow_trace_copy,\n+\tRTE_TRACE_POINT_ARGS(struct rte_flow_desc *fd, size_t len,\n+\t\tconst struct rte_flow_attr *attr,\n+\t\tconst struct rte_flow_item *items,\n+\t\tconst struct rte_flow_action *actions, int ret),\n+\trte_trace_point_emit_ptr(fd);\n+\trte_trace_point_emit_size_t(len);\n+\trte_trace_point_emit_u32(attr->group);\n+\trte_trace_point_emit_u32(attr->priority);\n+\trte_trace_point_emit_ptr(items);\n+\trte_trace_point_emit_int(items->type);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_int(actions->type);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, const struct rte_flow_attr *attr,\n+\t\tconst struct rte_flow_item *pattern,\n+\t\tconst struct rte_flow_action *actions, struct rte_flow *flow),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(attr->group);\n+\trte_trace_point_emit_u32(attr->priority);\n+\trte_trace_point_emit_ptr(pattern);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_ptr(flow);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, struct rte_flow *flow, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(flow);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_flush,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_validate,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_attr *attr,\n+\t\tconst struct rte_flow_item *pattern,\n+\t\tconst struct rte_flow_action *actions, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(attr->group);\n+\trte_trace_point_emit_u32(attr->priority);\n+\trte_trace_point_emit_ptr(pattern);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_conv,\n+\tRTE_TRACE_POINT_ARGS(enum rte_flow_conv_op op, void *dst,\n+\t\tsize_t size, const void *src),\n+\trte_trace_point_emit_int(op);\n+\trte_trace_point_emit_ptr(dst);\n+\trte_trace_point_emit_size_t(size);\n+\trte_trace_point_emit_ptr(src);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_dynf_metadata_register,\n+\tRTE_TRACE_POINT_ARGS(int offset, uint64_t flag),\n+\trte_trace_point_emit_int(offset);\n+\trte_trace_point_emit_u64(flag);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_tunnel_decap_set,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_tunnel *tunnel,\n+\t\tstruct rte_flow_action **actions,\n+\t\tuint32_t *num_of_actions, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(tunnel);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_ptr(num_of_actions);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_tunnel_match,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_tunnel *tunnel,\n+\t\tstruct rte_flow_item **items,\n+\t\tuint32_t *num_of_items, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(tunnel);\n+\trte_trace_point_emit_ptr(items);\n+\trte_trace_point_emit_ptr(num_of_items);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_tunnel_action_decap_release,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_action *actions,\n+\t\tuint32_t num_of_actions, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_u32(num_of_actions);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_tunnel_item_release,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_item *items,\n+\t\tuint32_t num_of_items, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(items);\n+\trte_trace_point_emit_u32(num_of_items);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_action_handle_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_indir_action_conf *conf,\n+\t\tconst struct rte_flow_action *action,\n+\t\tstruct rte_flow_action_handle *handle),\n+\tuint32_t ingress = conf->ingress;\n+\tuint32_t egress = conf->egress;\n+\tuint32_t transfer = conf->transfer;\n+\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(conf);\n+\trte_trace_point_emit_u32(ingress);\n+\trte_trace_point_emit_u32(egress);\n+\trte_trace_point_emit_u32(transfer);\n+\trte_trace_point_emit_ptr(action);\n+\trte_trace_point_emit_int(action->type);\n+\trte_trace_point_emit_ptr(handle);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_action_handle_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_action_handle *handle, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_flex_item_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_item_flex_conf *conf,\n+\t\tstruct rte_flow_item_flex_handle *handle),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(conf);\n+\trte_trace_point_emit_int(conf->tunnel);\n+\trte_trace_point_emit_int(conf->nb_samples);\n+\trte_trace_point_emit_int(conf->nb_inputs);\n+\trte_trace_point_emit_int(conf->nb_outputs);\n+\trte_trace_point_emit_ptr(handle);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_flex_item_release,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_item_flex_handle *handle, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_info_get,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_port_info *port_info,\n+\t\tstruct rte_flow_queue_info *queue_info, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(port_info);\n+\trte_trace_point_emit_u32(port_info->max_nb_queues);\n+\trte_trace_point_emit_u32(port_info->max_nb_counters);\n+\trte_trace_point_emit_u32(port_info->max_nb_aging_objects);\n+\trte_trace_point_emit_u32(port_info->max_nb_meters);\n+\trte_trace_point_emit_u32(port_info->max_nb_conn_tracks);\n+\trte_trace_point_emit_u32(port_info->supported_flags);\n+\trte_trace_point_emit_ptr(queue_info);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_configure,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_port_attr *port_attr,\n+\t\tuint16_t nb_queue,\n+\t\tconst struct rte_flow_queue_attr **queue_attr, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(port_attr);\n+\trte_trace_point_emit_u32(port_attr->nb_counters);\n+\trte_trace_point_emit_u32(port_attr->nb_aging_objects);\n+\trte_trace_point_emit_u32(port_attr->nb_meters);\n+\trte_trace_point_emit_u32(port_attr->nb_conn_tracks);\n+\trte_trace_point_emit_u32(port_attr->flags);\n+\trte_trace_point_emit_u16(nb_queue);\n+\trte_trace_point_emit_ptr(queue_attr);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_pattern_template_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_pattern_template_attr *template_attr,\n+\t\tconst struct rte_flow_item *pattern,\n+\t\tvoid *tmplate),\n+\tuint32_t relaxed_matching = template_attr->relaxed_matching;\n+\tuint32_t ingress = template_attr->ingress;\n+\tuint32_t egress = template_attr->egress;\n+\tuint32_t transfer = template_attr->transfer;\n+\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(template_attr);\n+\trte_trace_point_emit_u32(relaxed_matching);\n+\trte_trace_point_emit_u32(ingress);\n+\trte_trace_point_emit_u32(egress);\n+\trte_trace_point_emit_u32(transfer);\n+\trte_trace_point_emit_ptr(pattern);\n+\trte_trace_point_emit_ptr(tmplate);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_pattern_template_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_pattern_template *pattern_template, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(pattern_template);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_actions_template_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_actions_template_attr *template_attr,\n+\t\tconst struct rte_flow_action *actions,\n+\t\tconst struct rte_flow_action *masks,\n+\t\tvoid *tmplate),\n+\tuint32_t ingress = template_attr->ingress;\n+\tuint32_t egress = template_attr->egress;\n+\tuint32_t transfer = template_attr->transfer;\n+\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(template_attr);\n+\trte_trace_point_emit_u32(ingress);\n+\trte_trace_point_emit_u32(egress);\n+\trte_trace_point_emit_u32(transfer);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_ptr(masks);\n+\trte_trace_point_emit_ptr(tmplate);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_actions_template_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_actions_template *actions_template, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(actions_template);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_template_table_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_template_table_attr *table_attr,\n+\t\tstruct rte_flow_pattern_template **pattern_templates,\n+\t\tuint8_t nb_pattern_templates,\n+\t\tstruct rte_flow_actions_template **actions_templates,\n+\t\tuint8_t nb_actions_templates,\n+\t\tstruct rte_flow_template_table *table),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(table_attr);\n+\trte_trace_point_emit_u32(table_attr->nb_flows);\n+\trte_trace_point_emit_ptr(pattern_templates);\n+\trte_trace_point_emit_u8(nb_pattern_templates);\n+\trte_trace_point_emit_ptr(actions_templates);\n+\trte_trace_point_emit_u8(nb_actions_templates);\n+\trte_trace_point_emit_ptr(table);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_template_table_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_template_table *template_table, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(template_table);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_async_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tstruct rte_flow_template_table *template_table,\n+\t\tconst struct rte_flow_item *pattern,\n+\t\tuint8_t pattern_template_index,\n+\t\tconst struct rte_flow_action *actions,\n+\t\tuint8_t actions_template_index,\n+\t\tvoid *user_data, struct rte_flow *flow),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(template_table);\n+\trte_trace_point_emit_ptr(pattern);\n+\trte_trace_point_emit_u8(pattern_template_index);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_u8(actions_template_index);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_ptr(flow);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_async_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tstruct rte_flow *flow, void *user_data, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(flow);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_push,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_pull,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tstruct rte_flow_op_result *res, uint16_t n_res, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(res);\n+\trte_trace_point_emit_u16(n_res);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_async_action_handle_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tconst struct rte_flow_indir_action_conf *indir_action_conf,\n+\t\tconst struct rte_flow_action *action,\n+\t\tvoid *user_data, struct rte_flow_action_handle *handle),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(indir_action_conf);\n+\trte_trace_point_emit_ptr(action);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_ptr(handle);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_async_action_handle_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tstruct rte_flow_action_handle *action_handle,\n+\t\tvoid *user_data, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(action_handle);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/ethdev/rte_ethdev_trace_fp.h b/lib/ethdev/rte_ethdev_trace_fp.h\nindex 35036e6825..8e77675557 100644\n--- a/lib/ethdev/rte_ethdev_trace_fp.h\n+++ b/lib/ethdev/rte_ethdev_trace_fp.h\n@@ -646,6 +646,119 @@ RTE_TRACE_POINT_FP(\n \trte_trace_point_emit_int(ret);\n )\n \n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_query,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, struct rte_flow *flow,\n+\t\tconst struct rte_flow_action *action, void *data, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(flow);\n+\trte_trace_point_emit_ptr(action);\n+\trte_trace_point_emit_int(action->type);\n+\trte_trace_point_emit_ptr(data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_isolate,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int set, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(set);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_get_restore_info,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_mbuf *m, struct rte_flow_restore_info *info,\n+\t\tint ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(m);\n+\trte_trace_point_emit_ptr(info);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_get_aged_flows,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, void **contexts,\n+\t\tuint32_t nb_contexts, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(contexts);\n+\trte_trace_point_emit_u32(nb_contexts);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_get_q_aged_flows,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id, void **contexts,\n+\t\tuint32_t nb_contexts, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(contexts);\n+\trte_trace_point_emit_u32(nb_contexts);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_action_handle_update,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_action_handle *handle,\n+\t\tconst void *update, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+\trte_trace_point_emit_ptr(update);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_action_handle_query,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_action_handle *handle,\n+\t\tvoid *data, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+\trte_trace_point_emit_ptr(data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_pick_transfer_proxy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t *proxy_port_id,\n+\t\tint ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(proxy_port_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_async_action_handle_update,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tstruct rte_flow_action_handle *action_handle,\n+\t\tconst void *update, void *user_data, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(action_handle);\n+\trte_trace_point_emit_ptr(update);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_async_action_handle_query,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tconst struct rte_flow_action_handle *action_handle,\n+\t\tvoid *data, void *user_data, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(action_handle);\n+\trte_trace_point_emit_ptr(data);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c\nindex 7d0c24366c..43f13f79b4 100644\n--- a/lib/ethdev/rte_flow.c\n+++ b/lib/ethdev/rte_flow.c\n@@ -13,6 +13,8 @@\n #include <rte_string_fns.h>\n #include <rte_mbuf_dyn.h>\n #include \"rte_ethdev.h\"\n+#include \"rte_ethdev_trace.h\"\n+#include \"rte_ethdev_trace_fp.h\"\n #include \"rte_flow_driver.h\"\n #include \"rte_flow.h\"\n \n@@ -276,6 +278,9 @@ rte_flow_dynf_metadata_register(void)\n \t\tgoto error;\n \trte_flow_dynf_metadata_offs = offset;\n \trte_flow_dynf_metadata_mask = RTE_BIT64(flag);\n+\n+\trte_flow_trace_dynf_metadata_register(offset, RTE_BIT64(flag));\n+\n \treturn 0;\n \n error:\n@@ -362,7 +367,11 @@ rte_flow_validate(uint16_t port_id,\n \t\tfts_enter(dev);\n \t\tret = ops->validate(dev, attr, pattern, actions, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_validate(port_id, attr, pattern, actions, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOSYS,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -389,6 +398,9 @@ rte_flow_create(uint16_t port_id,\n \t\tfts_exit(dev);\n \t\tif (flow == NULL)\n \t\t\tflow_err(port_id, -rte_errno, error);\n+\n+\t\trte_flow_trace_create(port_id, attr, pattern, actions, flow);\n+\n \t\treturn flow;\n \t}\n \trte_flow_error_set(error, ENOSYS, RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -412,7 +424,11 @@ rte_flow_destroy(uint16_t port_id,\n \t\tfts_enter(dev);\n \t\tret = ops->destroy(dev, flow, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_destroy(port_id, flow, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOSYS,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -434,7 +450,11 @@ rte_flow_flush(uint16_t port_id,\n \t\tfts_enter(dev);\n \t\tret = ops->flush(dev, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_flush(port_id, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOSYS,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -459,7 +479,11 @@ rte_flow_query(uint16_t port_id,\n \t\tfts_enter(dev);\n \t\tret = ops->query(dev, flow, action, data, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_query(port_id, flow, action, data, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOSYS,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -482,7 +506,11 @@ rte_flow_isolate(uint16_t port_id,\n \t\tfts_enter(dev);\n \t\tret = ops->isolate(dev, set, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_isolate(port_id, set, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOSYS,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1003,6 +1031,8 @@ rte_flow_conv(enum rte_flow_conv_op op,\n \t      const void *src,\n \t      struct rte_flow_error *error)\n {\n+\trte_flow_trace_conv(op, dst, size, src);\n+\n \tswitch (op) {\n \t\tconst struct rte_flow_attr *attr;\n \n@@ -1087,6 +1117,9 @@ rte_flow_copy(struct rte_flow_desc *desc, size_t len,\n \t\t\t.actions = dst_size ? dst->actions : NULL,\n \t\t   }),\n \t\t   len > sizeof(*desc) ? sizeof(*desc) : len);\n+\n+\trte_flow_trace_copy(desc, len, attr, items, actions, ret);\n+\n \treturn ret;\n }\n \n@@ -1125,7 +1158,11 @@ rte_flow_get_aged_flows(uint16_t port_id, void **contexts,\n \t\tfts_enter(dev);\n \t\tret = ops->get_aged_flows(dev, contexts, nb_contexts, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_get_aged_flows(port_id, contexts, nb_contexts, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1147,7 +1184,12 @@ rte_flow_get_q_aged_flows(uint16_t port_id, uint32_t queue_id, void **contexts,\n \t\tret = ops->get_q_aged_flows(dev, queue_id, contexts,\n \t\t\t\t\t    nb_contexts, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_get_q_aged_flows(port_id, queue_id, contexts,\n+\t\t\t\t\t\tnb_contexts, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1175,6 +1217,9 @@ rte_flow_action_handle_create(uint16_t port_id,\n \t\t\t\t\t   conf, action, error);\n \tif (handle == NULL)\n \t\tflow_err(port_id, -rte_errno, error);\n+\n+\trte_flow_trace_action_handle_create(port_id, conf, action, handle);\n+\n \treturn handle;\n }\n \n@@ -1194,7 +1239,11 @@ rte_flow_action_handle_destroy(uint16_t port_id,\n \t\t\t\t\t  NULL, rte_strerror(ENOSYS));\n \tret = ops->action_handle_destroy(&rte_eth_devices[port_id],\n \t\t\t\t\t handle, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_action_handle_destroy(port_id, handle, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1214,7 +1263,11 @@ rte_flow_action_handle_update(uint16_t port_id,\n \t\t\t\t\t  NULL, rte_strerror(ENOSYS));\n \tret = ops->action_handle_update(&rte_eth_devices[port_id], handle,\n \t\t\t\t\tupdate, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_action_handle_update(port_id, handle, update, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1234,7 +1287,11 @@ rte_flow_action_handle_query(uint16_t port_id,\n \t\t\t\t\t  NULL, rte_strerror(ENOSYS));\n \tret = ops->action_handle_query(&rte_eth_devices[port_id], handle,\n \t\t\t\t       data, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_action_handle_query(port_id, handle, data, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1246,14 +1303,20 @@ rte_flow_tunnel_decap_set(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_decap_set)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->tunnel_decap_set(dev, tunnel, actions,\n-\t\t\t\t\t\t      num_of_actions, error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->tunnel_decap_set(dev, tunnel, actions,\n+\t\t\t\t\t\t     num_of_actions, error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_tunnel_decap_set(port_id, tunnel, actions,\n+\t\t\t\t\t\tnum_of_actions, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1269,14 +1332,20 @@ rte_flow_tunnel_match(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_match)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->tunnel_match(dev, tunnel, items,\n-\t\t\t\t\t\t  num_of_items, error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->tunnel_match(dev, tunnel, items,\n+\t\t\t\t\t\t num_of_items, error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_tunnel_match(port_id, tunnel, items, num_of_items,\n+\t\t\t\t\t    ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1291,14 +1360,19 @@ rte_flow_get_restore_info(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->get_restore_info)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->get_restore_info(dev, m, restore_info,\n-\t\t\t\t\t\t      error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->get_restore_info(dev, m, restore_info,\n+\t\t\t\t\t\t     error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_get_restore_info(port_id, m, restore_info, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1313,15 +1387,21 @@ rte_flow_tunnel_action_decap_release(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_action_decap_release)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->tunnel_action_decap_release(dev, actions,\n-\t\t\t\t\t\t\t\t num_of_actions,\n-\t\t\t\t\t\t\t\t error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->tunnel_action_decap_release(dev, actions,\n+\t\t\t\t\t\t\t\tnum_of_actions,\n+\t\t\t\t\t\t\t\terror),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_tunnel_action_decap_release(port_id, actions,\n+\t\t\t\t\t\t\t   num_of_actions, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1336,14 +1416,19 @@ rte_flow_tunnel_item_release(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_item_release)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->tunnel_item_release(dev, items,\n-\t\t\t\t\t\t\t num_of_items, error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->tunnel_item_release(dev, items,\n+\t\t\t\t\t\t\tnum_of_items, error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_tunnel_item_release(port_id, items, num_of_items, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1356,6 +1441,7 @@ rte_flow_pick_transfer_proxy(uint16_t port_id, uint16_t *proxy_port_id,\n {\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tstruct rte_eth_dev *dev;\n+\tint ret;\n \n \tif (unlikely(ops == NULL))\n \t\treturn -rte_errno;\n@@ -1367,9 +1453,13 @@ rte_flow_pick_transfer_proxy(uint16_t port_id, uint16_t *proxy_port_id,\n \n \tdev = &rte_eth_devices[port_id];\n \n-\treturn flow_err(port_id,\n-\t\t\tops->pick_transfer_proxy(dev, proxy_port_id, error),\n-\t\t\terror);\n+\tret = flow_err(port_id,\n+\t\t       ops->pick_transfer_proxy(dev, proxy_port_id, error),\n+\t\t       error);\n+\n+\trte_flow_trace_pick_transfer_proxy(port_id, proxy_port_id, ret);\n+\n+\treturn ret;\n }\n \n struct rte_flow_item_flex_handle *\n@@ -1392,6 +1482,9 @@ rte_flow_flex_item_create(uint16_t port_id,\n \thandle = ops->flex_item_create(dev, conf, error);\n \tif (handle == NULL)\n \t\tflow_err(port_id, -rte_errno, error);\n+\n+\trte_flow_trace_flex_item_create(port_id, conf, handle);\n+\n \treturn handle;\n }\n \n@@ -1409,7 +1502,11 @@ rte_flow_flex_item_release(uint16_t port_id,\n \t\t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n \t\t\t\t\t  NULL, rte_strerror(ENOTSUP));\n \tret = ops->flex_item_release(dev, handle, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_flex_item_release(port_id, handle, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1420,6 +1517,7 @@ rte_flow_info_get(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n@@ -1434,9 +1532,13 @@ rte_flow_info_get(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \tif (likely(!!ops->info_get)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->info_get(dev, port_info, queue_info, error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->info_get(dev, port_info, queue_info, error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_info_get(port_id, port_info, queue_info, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1480,7 +1582,11 @@ rte_flow_configure(uint16_t port_id,\n \t\tret = ops->configure(dev, port_attr, nb_queue, queue_attr, error);\n \t\tif (ret == 0)\n \t\t\tdev->data->flow_configured = 1;\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_configure(port_id, port_attr, nb_queue, queue_attr, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1531,6 +1637,10 @@ rte_flow_pattern_template_create(uint16_t port_id,\n \t\t\t\t\t\t\tpattern, error);\n \t\tif (template == NULL)\n \t\t\tflow_err(port_id, -rte_errno, error);\n+\n+\t\trte_flow_trace_pattern_template_create(port_id, template_attr,\n+\t\t\t\t\t\t       pattern, template);\n+\n \t\treturn template;\n \t}\n \trte_flow_error_set(error, ENOTSUP,\n@@ -1546,17 +1656,23 @@ rte_flow_pattern_template_destroy(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(pattern_template == NULL))\n \t\treturn 0;\n \tif (likely(!!ops->pattern_template_destroy)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->pattern_template_destroy(dev,\n-\t\t\t\t\t\t\t      pattern_template,\n-\t\t\t\t\t\t\t      error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->pattern_template_destroy(dev,\n+\t\t\t\t\t\t\t     pattern_template,\n+\t\t\t\t\t\t\t     error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_pattern_template_destroy(port_id, pattern_template,\n+\t\t\t\t\t\t\tret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1617,6 +1733,10 @@ rte_flow_actions_template_create(uint16_t port_id,\n \t\t\t\t\t\t\tactions, masks, error);\n \t\tif (template == NULL)\n \t\t\tflow_err(port_id, -rte_errno, error);\n+\n+\t\trte_flow_trace_actions_template_create(port_id, template_attr, actions,\n+\t\t\t\t\t\t       masks, template);\n+\n \t\treturn template;\n \t}\n \trte_flow_error_set(error, ENOTSUP,\n@@ -1632,17 +1752,23 @@ rte_flow_actions_template_destroy(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(actions_template == NULL))\n \t\treturn 0;\n \tif (likely(!!ops->actions_template_destroy)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->actions_template_destroy(dev,\n-\t\t\t\t\t\t\t      actions_template,\n-\t\t\t\t\t\t\t      error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->actions_template_destroy(dev,\n+\t\t\t\t\t\t\t     actions_template,\n+\t\t\t\t\t\t\t     error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_actions_template_destroy(port_id, actions_template,\n+\t\t\t\t\t\t\tret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1707,6 +1833,13 @@ rte_flow_template_table_create(uint16_t port_id,\n \t\t\t\t\terror);\n \t\tif (table == NULL)\n \t\t\tflow_err(port_id, -rte_errno, error);\n+\n+\t\trte_flow_trace_template_table_create(port_id, table_attr,\n+\t\t\t\t\t\t     pattern_templates,\n+\t\t\t\t\t\t     nb_pattern_templates,\n+\t\t\t\t\t\t     actions_templates,\n+\t\t\t\t\t\t     nb_actions_templates, table);\n+\n \t\treturn table;\n \t}\n \trte_flow_error_set(error, ENOTSUP,\n@@ -1722,17 +1855,23 @@ rte_flow_template_table_destroy(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(template_table == NULL))\n \t\treturn 0;\n \tif (likely(!!ops->template_table_destroy)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->template_table_destroy(dev,\n-\t\t\t\t\t\t\t    template_table,\n-\t\t\t\t\t\t\t    error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->template_table_destroy(dev,\n+\t\t\t\t\t\t\t   template_table,\n+\t\t\t\t\t\t\t   error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_template_table_destroy(port_id, template_table,\n+\t\t\t\t\t\t      ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1762,6 +1901,11 @@ rte_flow_async_create(uint16_t port_id,\n \t\t\t\t user_data, error);\n \tif (flow == NULL)\n \t\tflow_err(port_id, -rte_errno, error);\n+\n+\trte_flow_trace_async_create(port_id, queue_id, op_attr, template_table,\n+\t\t\t\t    pattern, pattern_template_index, actions,\n+\t\t\t\t    actions_template_index, user_data, flow);\n+\n \treturn flow;\n }\n \n@@ -1775,12 +1919,18 @@ rte_flow_async_destroy(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n-\treturn flow_err(port_id,\n-\t\t\tops->async_destroy(dev, queue_id,\n-\t\t\t\t\t   op_attr, flow,\n-\t\t\t\t\t   user_data, error),\n-\t\t\terror);\n+\tret = flow_err(port_id,\n+\t\t       ops->async_destroy(dev, queue_id,\n+\t\t\t\t\t  op_attr, flow,\n+\t\t\t\t\t  user_data, error),\n+\t\t       error);\n+\n+\trte_flow_trace_async_destroy(port_id, queue_id, op_attr, flow,\n+\t\t\t\t     user_data, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1790,10 +1940,15 @@ rte_flow_push(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n-\treturn flow_err(port_id,\n-\t\t\tops->push(dev, queue_id, error),\n-\t\t\terror);\n+\tret = flow_err(port_id,\n+\t\t       ops->push(dev, queue_id, error),\n+\t\t       error);\n+\n+\trte_flow_trace_push(port_id, queue_id, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1806,9 +1961,14 @@ rte_flow_pull(uint16_t port_id,\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\n+\tint rc;\n \n \tret = ops->pull(dev, queue_id, res, n_res, error);\n-\treturn ret ? ret : flow_err(port_id, ret, error);\n+\trc = ret ? ret : flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_pull(port_id, queue_id, res, n_res, rc);\n+\n+\treturn rc;\n }\n \n struct rte_flow_action_handle *\n@@ -1828,6 +1988,11 @@ rte_flow_async_action_handle_create(uint16_t port_id,\n \t\t\t\t\t     indir_action_conf, action, user_data, error);\n \tif (handle == NULL)\n \t\tflow_err(port_id, -rte_errno, error);\n+\n+\trte_flow_trace_async_action_handle_create(port_id, queue_id, op_attr,\n+\t\t\t\t\t\t  indir_action_conf, action,\n+\t\t\t\t\t\t  user_data, handle);\n+\n \treturn handle;\n }\n \n@@ -1845,7 +2010,12 @@ rte_flow_async_action_handle_destroy(uint16_t port_id,\n \n \tret = ops->async_action_handle_destroy(dev, queue_id, op_attr,\n \t\t\t\t\t   action_handle, user_data, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_async_action_handle_destroy(port_id, queue_id, op_attr,\n+\t\t\t\t\t\t   action_handle, user_data, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1863,7 +2033,13 @@ rte_flow_async_action_handle_update(uint16_t port_id,\n \n \tret = ops->async_action_handle_update(dev, queue_id, op_attr,\n \t\t\t\t\t  action_handle, update, user_data, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_async_action_handle_update(port_id, queue_id, op_attr,\n+\t\t\t\t\t\t  action_handle, update,\n+\t\t\t\t\t\t  user_data, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1881,5 +2057,11 @@ rte_flow_async_action_handle_query(uint16_t port_id,\n \n \tret = ops->async_action_handle_query(dev, queue_id, op_attr,\n \t\t\t\t\t  action_handle, data, user_data, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_async_action_handle_query(port_id, queue_id, op_attr,\n+\t\t\t\t\t\t action_handle, data, user_data,\n+\t\t\t\t\t\t ret);\n+\n+\treturn ret;\n }\ndiff --git a/lib/ethdev/version.map b/lib/ethdev/version.map\nindex c7c6bcd42b..0cb8222ad9 100644\n--- a/lib/ethdev/version.map\n+++ b/lib/ethdev/version.map\n@@ -445,6 +445,43 @@ EXPERIMENTAL {\n \t__rte_ethdev_trace_udp_tunnel_port_add;\n \t__rte_ethdev_trace_udp_tunnel_port_delete;\n \t__rte_ethdev_trace_vlan_filter;\n+\t__rte_flow_trace_action_handle_create;\n+\t__rte_flow_trace_action_handle_destroy;\n+\t__rte_flow_trace_action_handle_query;\n+\t__rte_flow_trace_action_handle_update;\n+\t__rte_flow_trace_actions_template_create;\n+\t__rte_flow_trace_actions_template_destroy;\n+\t__rte_flow_trace_async_action_handle_create;\n+\t__rte_flow_trace_async_action_handle_destroy;\n+\t__rte_flow_trace_async_action_handle_update;\n+\t__rte_flow_trace_async_create;\n+\t__rte_flow_trace_async_destroy;\n+\t__rte_flow_trace_conv;\n+\t__rte_flow_trace_configure;\n+\t__rte_flow_trace_copy;\n+\t__rte_flow_trace_create;\n+\t__rte_flow_trace_destroy;\n+\t__rte_flow_trace_dynf_metadata_register;\n+\t__rte_flow_trace_flex_item_create;\n+\t__rte_flow_trace_flex_item_release;\n+\t__rte_flow_trace_flush;\n+\t__rte_flow_trace_get_aged_flows;\n+\t__rte_flow_trace_get_restore_info;\n+\t__rte_flow_trace_info_get;\n+\t__rte_flow_trace_isolate;\n+\t__rte_flow_trace_pattern_template_create;\n+\t__rte_flow_trace_pattern_template_destroy;\n+\t__rte_flow_trace_pick_transfer_proxy;\n+\t__rte_flow_trace_push;\n+\t__rte_flow_trace_pull;\n+\t__rte_flow_trace_query;\n+\t__rte_flow_trace_template_table_create;\n+\t__rte_flow_trace_template_table_destroy;\n+\t__rte_flow_trace_tunnel_action_decap_release;\n+\t__rte_flow_trace_tunnel_decap_set;\n+\t__rte_flow_trace_tunnel_item_release;\n+\t__rte_flow_trace_tunnel_match;\n+\t__rte_flow_trace_validate;\n };\n \n INTERNAL {\n",
    "prefixes": [
        "v6",
        "4/6"
    ]
}