get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 126250,
    "url": "https://patches.dpdk.org/api/patches/126250/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20230418195807.352514-1-akozyrev@nvidia.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": "<20230418195807.352514-1-akozyrev@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230418195807.352514-1-akozyrev@nvidia.com",
    "date": "2023-04-18T19:58:07",
    "name": "ethdev: add flow rule actions update API",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "e2d9461d00295f7e72c6f8188aacbd537f15cd40",
    "submitter": {
        "id": 1873,
        "url": "https://patches.dpdk.org/api/people/1873/?format=api",
        "name": "Alexander Kozyrev",
        "email": "akozyrev@nvidia.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/20230418195807.352514-1-akozyrev@nvidia.com/mbox/",
    "series": [
        {
            "id": 27768,
            "url": "https://patches.dpdk.org/api/series/27768/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=27768",
            "date": "2023-04-18T19:58:07",
            "name": "ethdev: add flow rule actions update API",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/27768/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/126250/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/126250/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 2639142980;\n\tTue, 18 Apr 2023 21:58:43 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id B4F9F4021F;\n\tTue, 18 Apr 2023 21:58:42 +0200 (CEST)",
            "from NAM04-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam04on2057.outbound.protection.outlook.com [40.107.101.57])\n by mails.dpdk.org (Postfix) with ESMTP id A2A304014F\n for <dev@dpdk.org>; Tue, 18 Apr 2023 21:58:41 +0200 (CEST)",
            "from MW4PR04CA0162.namprd04.prod.outlook.com (2603:10b6:303:85::17)\n by MW3PR12MB4474.namprd12.prod.outlook.com (2603:10b6:303:2e::7) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr\n 2023 19:58:39 +0000",
            "from CO1NAM11FT046.eop-nam11.prod.protection.outlook.com\n (2603:10b6:303:85:cafe::5f) by MW4PR04CA0162.outlook.office365.com\n (2603:10b6:303:85::17) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend\n Transport; Tue, 18 Apr 2023 19:58:39 +0000",
            "from mail.nvidia.com (216.228.117.160) by\n CO1NAM11FT046.mail.protection.outlook.com (10.13.174.203) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.6319.22 via Frontend Transport; Tue, 18 Apr 2023 19:58:39 +0000",
            "from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com\n (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.5; Tue, 18 Apr 2023\n 12:58:26 -0700",
            "from pegasus01.mtr.labs.mlnx (10.126.230.37) by\n rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server\n (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.2.986.37; Tue, 18 Apr 2023 12:58:24 -0700"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=cKTS904msG8VPDidnzObkRux1s9asLQE0fKdUfDCCl2mEYW3So5k2gqV4MH9QsE9/g+T4s6i6DvA1ij7ZYgs4iELie9RQ6kfw1JJYXkLanSHu9uJG0bc4KJZIzusRgiBfnF0bQE8L1kEzMva/KhfxppDpa2cVFnn3Y1+dYBIIgUnCDfjvYNlkcXIpJ7IDB7vNe4JweEf8vCbY+zLHQQUAIMlUYK9culAaeXToc3LZwQk/2fPEC1APUC9ocWUA5Vl4czxDqWS5bGK72TwyPzqVF/6unqxLTx/ZpQcj5THzCv6SE0m0hfmoL1ub/e43q8v4T9xvSEMXEECkvHq37eYaA==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=RnQxaR71VYh/L6NIpVrBLLG2Ze6ry4qRI+C5af9Zsy0=;\n b=MHPohz2NnjPznCtPnF+yZ7+1OVdNK5qvVgOr+IDNpvzZr01NIgXtiHCBRiOieaKYvZRhjhn24ZaLAFXQehez5SYHmOMsDM258ufXq3Q11LdO0jlfNZ2k827BJtZ+hk0ICcq4zrS0lB29cH9h1FR0gvKDg2W6duI4DOtXCilzbfl7ldAPHiYxaZqBiUSeJgDsOBWFBkdlw5BBfM7u77n5M8NINAabm0gGQrWmVkpenTRdWPbX18m2686TE/6ZGIvQEQJQCRbH/cY4ZeQtkMk9Rb1Xl7leze+wft9HgEyNgeoINCO2BSwivEhI81POf+vN+jbMF2BMbu8Yk8yBEDOiVw==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.117.160) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com;\n dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com;\n dkim=none (message not signed); arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=RnQxaR71VYh/L6NIpVrBLLG2Ze6ry4qRI+C5af9Zsy0=;\n b=PN/vE8X8E0YXU8+262u7EzFCJR4P7ep2nUATgqJ34hahcrP6s9ox6iEOrMOMKKzFKeAqU8V6qB8bfYLRgvadIPz0XUCjy+m5QfPQkVEBnIlRYva4fNaPbB38HqHySZLbKfMi0Cv73hSlWAQc1jegGVqzIFEn671tQjPt/6q/Lr8B96X4u9kDriDcKWJGG1Z19A3FfNznGl6yjYeFSpykrWItIWycF++Tsngg//DcobymBeiMIpAhxtzSvw0B17GDJCnkqrvHNZAK+P1nkB8M23J3LXhM/fYBb17T3wrWMNI4F02e/wX/s74ZWKdu1y88sCcBRxuNHY/eVCaXErO3mQ==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.117.160)\n smtp.mailfrom=nvidia.com;\n dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=nvidia.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.117.160 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C",
        "From": "Alexander Kozyrev <akozyrev@nvidia.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<orika@dpdk.org>, <thomas@monjalon.net>, <matan@nvidia.com>",
        "Subject": "[PATCH] ethdev: add flow rule actions update API",
        "Date": "Tue, 18 Apr 2023 22:58:07 +0300",
        "Message-ID": "<20230418195807.352514-1-akozyrev@nvidia.com>",
        "X-Mailer": "git-send-email 2.18.2",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.126.230.37]",
        "X-ClientProxiedBy": "rnnvmail202.nvidia.com (10.129.68.7) To\n rnnvmail201.nvidia.com (10.129.68.8)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "CO1NAM11FT046:EE_|MW3PR12MB4474:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "64c1c602-3691-4e04-a62b-08db40474d97",
        "X-LD-Processed": "43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n NzQgwk9tPI+v/XtPGhhGxDHcgWp/1Z8b5Eveu1Le04xdNvicXmbDVR/okix6QfvUHZ7mLqvQcwfQtViF2Vz7n4pRSPWJllFCPu2QYotKe+t00N+6vv9nMM85D5xRDfnMC54LSYg5uTsjhbM+r5V9VAr9ls+HYovLr24ds9XgXqfSL+p9vY7TZ3NS2n+4CADyXDUOCf2wwauP6LxzMLtZdEeEI+tNhkVnDJ3xzWPX96S3i3VxqJox6M3FwuPKe0IFMj01Uku0xfUeYyisxWQ2A3I663LZqY1l8+eZBPwQE5s62weyMSlaNEkCzIlGhcRZgAY00+jilVTQobpaYOmkV4SSQkhwcxETf8K7qHUyVbb5bPaUlzORPK+WH6ahRS3WFd+gKwxRjYmOOJIlfmHIMExbFPz8P9i+zvSqEqnAgJdA9/+C1WkmzE5l8SKTZ7WBivC/xoygjDo8/R4Ckl8WA76q6zDnqYQtcktqR0B2uSFS+a/lhJfO3/D9zDgEWz9+OIBj41qK69bOCCHyLjIEEB9PL+RAZSaWuTMjKf9jdyBC9oAwhQYi7zc6wlxpRQiITk9iqvYsSe+TrRCSv4S74ONg5WR0NHC28AVyOwa8obQjg1Wd7Pl2xsquk3S9wN2gb0h1R0ilyGr4y6TaJj3GhXB1AZKiWyKP9Dv+FS5Bnq03xkDMgzb1G4WeYbLGxU8T8wgZei3v1F3TbBCQ55Y4z93vVFU94YpGDI2wQXFzw+/wMVk1o0MbSXB6j0bSTYpS6kdR3v8UQb7viXGXY+SVstFpzDLGJbqlpPbWkIhS/D8=",
        "X-Forefront-Antispam-Report": "CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE;\n SFS:(13230028)(4636009)(396003)(346002)(136003)(39860400002)(376002)(451199021)(36840700001)(46966006)(40470700004)(336012)(6666004)(478600001)(86362001)(34020700004)(2616005)(47076005)(426003)(36860700001)(26005)(40480700001)(107886003)(83380400001)(1076003)(16526019)(186003)(40460700003)(82740400003)(36756003)(7636003)(356005)(70586007)(316002)(70206006)(2906002)(4326008)(8936002)(6916009)(5660300002)(8676002)(15650500001)(41300700001)(82310400005)(54906003);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "18 Apr 2023 19:58:39.0759 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 64c1c602-3691-4e04-a62b-08db40474d97",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n CO1NAM11FT046.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MW3PR12MB4474",
        "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": "Introduce the new rte_flow_update() API allowing users\nto update the action list in the already existing rule.\nFlow rules can be updated now without the need to destroy\nthe rule first and create a new one instead.\nA single API call ensures that no packets are lost by\nguaranteeing atomicity and flow state correctness.\nThe rte_flow_async_update() is added as well.\nThe matcher is not updated, only the action list is.\n\nSigned-off-by: Alexander Kozyrev <akozyrev@nvidia.com>\n---\n doc/guides/prog_guide/rte_flow.rst     | 42 +++++++++++++++++\n doc/guides/rel_notes/release_23_07.rst |  4 ++\n lib/ethdev/rte_flow.c                  | 43 ++++++++++++++++++\n lib/ethdev/rte_flow.h                  | 62 ++++++++++++++++++++++++++\n lib/ethdev/rte_flow_driver.h           | 16 +++++++\n lib/ethdev/version.map                 |  2 +\n 6 files changed, 169 insertions(+)",
    "diff": "diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst\nindex 32fc45516a..0930accfea 100644\n--- a/doc/guides/prog_guide/rte_flow.rst\n+++ b/doc/guides/prog_guide/rte_flow.rst\n@@ -3446,6 +3446,31 @@ Return values:\n \n - 0 on success, a negative errno value otherwise and ``rte_errno`` is set.\n \n+Update\n+~~~~~~\n+\n+Update an existing flow rule with a new set of actions.\n+\n+.. code-block:: c\n+\n+   struct rte_flow *\n+   rte_flow_update(uint16_t port_id,\n+                   struct rte_flow *flow,\n+                   const struct rte_flow_action *actions[],\n+                   struct rte_flow_error *error);\n+\n+Arguments:\n+\n+- ``port_id``: port identifier of Ethernet device.\n+- ``flow``: flow rule handle to update.\n+- ``actions``: associated actions (list terminated by the END action).\n+- ``error``: perform verbose error reporting if not NULL. PMDs initialize\n+  this structure in case of error only.\n+\n+Return values:\n+\n+- 0 on success, a negative errno value otherwise and ``rte_errno`` is set.\n+\n Flush\n ~~~~~\n \n@@ -3795,6 +3820,23 @@ Enqueueing a flow rule destruction operation is similar to simple destruction.\n                           void *user_data,\n                           struct rte_flow_error *error);\n \n+Enqueue update operation\n+~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+Enqueueing a flow rule update operation to replace actions in the existing rule.\n+\n+.. code-block:: c\n+\n+   int\n+   rte_flow_async_update(uint16_t port_id,\n+                         uint32_t queue_id,\n+                         const struct rte_flow_op_attr *op_attr,\n+                         struct rte_flow *flow,\n+                         const struct rte_flow_action actions[],\n+                         uint8_t actions_template_index,\n+                         void *user_data,\n+                         struct rte_flow_error *error);\n+\n Enqueue indirect action creation operation\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n \ndiff --git a/doc/guides/rel_notes/release_23_07.rst b/doc/guides/rel_notes/release_23_07.rst\nindex a9b1293689..94e9f8b3ae 100644\n--- a/doc/guides/rel_notes/release_23_07.rst\n+++ b/doc/guides/rel_notes/release_23_07.rst\n@@ -55,6 +55,10 @@ New Features\n      Also, make sure to start the actual text at the margin.\n      =======================================================\n \n+   * **Added flow rule update to the Flow API.**\n+\n+     * Added API for updating the action list in the already existing rule.\n+       Introduced both rte_flow_update() and rte_flow_async_update() functions.\n \n Removed Items\n -------------\ndiff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c\nindex 69e6e749f7..1ebb17ae3c 100644\n--- a/lib/ethdev/rte_flow.c\n+++ b/lib/ethdev/rte_flow.c\n@@ -441,6 +441,29 @@ rte_flow_destroy(uint16_t port_id,\n \t\t\t\t  NULL, rte_strerror(ENOSYS));\n }\n \n+int\n+rte_flow_update(uint16_t port_id,\n+\t\tstruct rte_flow *flow,\n+\t\tconst struct rte_flow_action actions[],\n+\t\tstruct rte_flow_error *error)\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->update)) {\n+\t\tfts_enter(dev);\n+\t\tret = ops->update(dev, flow, actions, error);\n+\t\tfts_exit(dev);\n+\t\treturn flow_err(port_id, ret, error);\n+\t}\n+\treturn rte_flow_error_set(error, ENOSYS,\n+\t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n+\t\t\t\t  NULL, rte_strerror(ENOSYS));\n+}\n+\n /* Destroy all flow rules associated with a port. */\n int\n rte_flow_flush(uint16_t port_id,\n@@ -1985,6 +2008,26 @@ rte_flow_async_destroy(uint16_t port_id,\n \treturn ret;\n }\n \n+int\n+rte_flow_async_update(uint16_t port_id,\n+\t\t      uint32_t queue_id,\n+\t\t      const struct rte_flow_op_attr *op_attr,\n+\t\t      struct rte_flow *flow,\n+\t\t      const struct rte_flow_action actions[],\n+\t\t      uint8_t actions_template_index,\n+\t\t      void *user_data,\n+\t\t      struct rte_flow_error *error)\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+\n+\treturn flow_err(port_id,\n+\t\t\tops->async_update(dev, queue_id, op_attr, flow,\n+\t\t\t\t\t  actions, actions_template_index,\n+\t\t\t\t\t  user_data, error),\n+\t\t\terror);\n+}\n+\n int\n rte_flow_push(uint16_t port_id,\n \t      uint32_t queue_id,\ndiff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h\nindex 713ba8b65c..79bfc07a1c 100644\n--- a/lib/ethdev/rte_flow.h\n+++ b/lib/ethdev/rte_flow.h\n@@ -4343,6 +4343,29 @@ rte_flow_destroy(uint16_t port_id,\n \t\t struct rte_flow *flow,\n \t\t struct rte_flow_error *error);\n \n+/**\n+ * Update a flow rule with new actions on a given port.\n+ *\n+ * @param port_id\n+ *   Port identifier of Ethernet device.\n+ * @param flow\n+ *   Flow rule handle to update.\n+ * @param[in] actions\n+ *   Associated actions (list terminated by the END action).\n+ * @param[out] error\n+ *   Perform verbose error reporting if not NULL. PMDs initialize this\n+ *   structure in case of error only.\n+ *\n+ * @return\n+ *   0 on success, a negative errno value otherwise and rte_errno is set.\n+ */\n+__rte_experimental\n+int\n+rte_flow_update(uint16_t port_id,\n+\t\tstruct rte_flow *flow,\n+\t\tconst struct rte_flow_action actions[],\n+\t\tstruct rte_flow_error *error);\n+\n /**\n  * Destroy all flow rules associated with a port.\n  *\n@@ -5770,6 +5793,45 @@ rte_flow_async_destroy(uint16_t port_id,\n \t\t       void *user_data,\n \t\t       struct rte_flow_error *error);\n \n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice.\n+ *\n+ * Enqueue rule update operation.\n+ *\n+ * @param port_id\n+ *   Port identifier of Ethernet device.\n+ * @param queue_id\n+ *   Flow queue used to insert the rule.\n+ * @param[in] op_attr\n+ *   Rule creation operation attributes.\n+ * @param[in] flow\n+ *   Flow rule to be updated.\n+ * @param[in] actions\n+ *   List of actions to be used.\n+ *   The list order should match the order in the actions template.\n+ * @param[in] actions_template_index\n+ *   Actions template index in the table.\n+ * @param[in] user_data\n+ *   The user data that will be returned on the completion events.\n+ * @param[out] error\n+ *   Perform verbose error reporting if not NULL.\n+ *   PMDs initialize this structure in case of error only.\n+ *\n+ * @return\n+ *   0 on success, a negative errno value otherwise and rte_errno is set.\n+ */\n+__rte_experimental\n+int\n+rte_flow_async_update(uint16_t port_id,\n+\t\t      uint32_t queue_id,\n+\t\t      const struct rte_flow_op_attr *op_attr,\n+\t\t      struct rte_flow *flow,\n+\t\t      const struct rte_flow_action actions[],\n+\t\t      uint8_t actions_template_index,\n+\t\t      void *user_data,\n+\t\t      struct rte_flow_error *error);\n+\n /**\n  * @warning\n  * @b EXPERIMENTAL: this API may change without prior notice.\ndiff --git a/lib/ethdev/rte_flow_driver.h b/lib/ethdev/rte_flow_driver.h\nindex a129a4605d..193b09a7d3 100644\n--- a/lib/ethdev/rte_flow_driver.h\n+++ b/lib/ethdev/rte_flow_driver.h\n@@ -302,6 +302,22 @@ struct rte_flow_ops {\n \t\t const void *update, void *query,\n \t\t enum rte_flow_query_update_mode qu_mode,\n \t\t void *user_data, struct rte_flow_error *error);\n+\t/** See rte_flow_update(). */\n+\tint (*update)\n+\t\t(struct rte_eth_dev *dev,\n+\t\t struct rte_flow *flow,\n+\t\t const struct rte_flow_action actions[],\n+\t\t struct rte_flow_error *error);\n+\t/** See rte_flow_async_update() */\n+\tint (*async_update)\n+\t\t(struct rte_eth_dev *dev,\n+\t\t uint32_t queue_id,\n+\t\t const struct rte_flow_op_attr *op_attr,\n+\t\t struct rte_flow *flow,\n+\t\t const struct rte_flow_action actions[],\n+\t\t uint8_t actions_template_index,\n+\t\t void *user_data,\n+\t\t struct rte_flow_error *error);\n };\n \n /**\ndiff --git a/lib/ethdev/version.map b/lib/ethdev/version.map\nindex 357d1a88c0..d4f49cb918 100644\n--- a/lib/ethdev/version.map\n+++ b/lib/ethdev/version.map\n@@ -299,6 +299,8 @@ EXPERIMENTAL {\n \trte_flow_action_handle_query_update;\n \trte_flow_async_action_handle_query_update;\n \trte_flow_async_create_by_index;\n+\trte_flow_update;\n+\trte_flow_async_update;\n };\n \n INTERNAL {\n",
    "prefixes": []
}