From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4F55342A3F; Tue, 2 May 2023 17:10:15 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1A87C40ED8; Tue, 2 May 2023 17:10:15 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2069.outbound.protection.outlook.com [40.107.220.69]) by mails.dpdk.org (Postfix) with ESMTP id 44CE140E2D for ; Tue, 2 May 2023 17:10:13 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F6VDyTKQ8m9SGm/8H9A1ggM/xPUHuA8k3GHw9nwdkmMeu+TZDs7cbxgQAxj21E2A5Rvk/eANWLC9fw66vRDZ02jJRkPKUD/IfCHjjufQzr0hC85Kb1USdURn4JKS6mzMl86FwmIfMiyr8p8Jh5KCiGQffqoqGyhzGVRhcXGs7PjLqyQ+Lv+8kTEL9k2jN5kXZ8Rpihn4bQexImoVRyivx3ZZzSKui7tJuagDKxymO219NyTqxkRBl6XE2N3yIj2wfy1OJWINWMkaGYJKGs/oNAhar5Ngu2JwNRnwwFrdUHftMaWhs0dI8NZfdF5+X8b3Ud07+j4hvE1ytC0xrOmM+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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; bh=ZKfipUrOU/BATOZusCFIyYb0w34Rd9ybuyG90toMuk4=; b=aY66XRcYPhZrovCHglcNF0demyVvGUZdZEVsnbYtUJMyf2eX7Szyb3UVgSmEVckXJh4cmAllvQhj+cA8Lq7LU89VoP+R3O2JQYT3BinacNQqDmYnhyfWMMvKYKcE0WmtFeNWAnXf+nNviRoxBL79iEfQgkcIqD9/5dwV111N+fsuokH8ORGEOww+98FCqbj/S9ct2h9JqDPyisQv6bVB/sTi55dvIV9b6IreuflzR3xOWnx3l42vtLJduXn2HumGCFi6CAKcNn6AhKyoFQLvKA3R/1jjWyH0qzsP7dmQLxRN8mm/Dou7ReWFlSPNPMmXKIDDMvf6wP7dMxiVdGmclA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZKfipUrOU/BATOZusCFIyYb0w34Rd9ybuyG90toMuk4=; b=i+uemr31tIO8ceJpWVBZdPs8Flpx7zHFgIUjQDLOFL5CJJTveY+a0P6VP0/MGm8bpvvj4nt12/emDY/OdUityO2D2KJ1KDi6jm0/V29wLV4SL7DdacKj5/IPUFvb0zPNElQT6g30hm/e2gaaq7C45gv9qd1aqfkq26V7yUOZACQAt4TfLncwMIX5Gr+vvPvVmqHok8aWZOhihS8Ivzi9Me3enBh0a9c/0IDbuR5Yp4ep9zkYEiDGrO801t7gaB759548EbKxfr+9bQ9edordQJ0T1SUcMQaGR+2prirxLVX2FZx35LSZjZMj9KNSywXpy2eOkMTsjMwGwqmi0n562g== Received: from DS7PR06CA0034.namprd06.prod.outlook.com (2603:10b6:8:54::18) by SN7PR12MB6909.namprd12.prod.outlook.com (2603:10b6:806:263::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.30; Tue, 2 May 2023 15:10:10 +0000 Received: from DS1PEPF0000E639.namprd02.prod.outlook.com (2603:10b6:8:54:cafe::8f) by DS7PR06CA0034.outlook.office365.com (2603:10b6:8:54::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.31 via Frontend Transport; Tue, 2 May 2023 15:10:10 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by DS1PEPF0000E639.mail.protection.outlook.com (10.167.17.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.21 via Frontend Transport; Tue, 2 May 2023 15:10:10 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.5; Tue, 2 May 2023 08:09:59 -0700 Received: from nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.37; Tue, 2 May 2023 08:09:56 -0700 From: Gregory Etelson To: CC: , , , , Ori Kam , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Subject: [RFC PATCH v2] ethdev: add indirect list flow action Date: Tue, 2 May 2023 18:09:41 +0300 Message-ID: <20230502150941.1155-1-getelson@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418172144.24365-1-getelson@nvidia.com> References: <20230418172144.24365-1-getelson@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000E639:EE_|SN7PR12MB6909:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ddc0b0e-63f8-40db-47c6-08db4b1f52b0 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: dysqUUb6PssN7NctHm5DCBSgyhGhE79SByQxLyLNRZI2Avzh8BAaGeQ8Kx9gWIED2WFs8HR5dLMQ38E8eKIU0mifxzzNuiIVyasC5+781pd/hUDckb30OmdKMqrmjGTTRgpoBwwiKSDy4i3sVT9v+JCZDEA9X2gDPYJyPM42vVk+nVKoHAgTeiieVQW5ErQZFXDUgYQGkIVZ3DOH9UOlIipXHLS8MxXUMEagu8d2EiHHO7fIw2KMgBe9TP3Kg2O8vhQ5qASps8zKX4xl+ZUsesQ+/Z9atOeOTJ7XhhxG229Qdnw/IYEcK4I/4n471kuYMOHXv3LihN3EoF2j5Te9rFvjUJ6y00dexV6qnCqk+F6f7MN9i5ttBHwwehM7P/z3RvYZ382RRF6fN+p4cLpZsGIHmm9WltThrWv3DtFv3JgVukxZdQ6JcNrhTtcXtB29moR37OjyaxgU/sI+OSA6LgAepfgecn/d+sS3qYvolmiELR/aojp98nAP2FqpO59sI39M+Cix5SOuR/QO6lgZc+3abLL7F4+hsfBAJqXJwBoh7rbtkE1eOgCamtsPQCNgYp/XdiVMAl9pN5bXhJuGTgRctF2MDW1p7r8U9qEHkUmgDb64FiPVzTj5MjeWu5srqnosYH3PktAyjXUuPg8lU4WEdGXXnSMf7R00QLWb3ogD+s+SnLrb6QWvBVW++eLGQktT7DHL1LEomLNDd/XZZA== X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230028)(4636009)(346002)(396003)(39860400002)(376002)(136003)(451199021)(36840700001)(40470700004)(46966006)(36860700001)(83380400001)(47076005)(2616005)(1076003)(426003)(6286002)(336012)(26005)(16526019)(478600001)(186003)(6916009)(54906003)(40480700001)(6666004)(7696005)(2906002)(30864003)(8936002)(86362001)(8676002)(4326008)(356005)(7636003)(36756003)(5660300002)(55016003)(41300700001)(70206006)(70586007)(82740400003)(316002)(40460700003)(82310400005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 May 2023 15:10:10.5004 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9ddc0b0e-63f8-40db-47c6-08db4b1f52b0 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000E639.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB6909 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Indirect API creates a shared flow action with unique action handle. Flow rules can access the shared flow action and resources related to that action through the indirect action handle. In addition, the API allows to update existing shared flow action configuration. After the update completes, new action configuration is available to all flows that reference that shared action. Indirect actions list expands the indirect action API: • Indirect action list creates a handle for one or several flow actions, while legacy indirect action handle references single action only. Input flow actions arranged in END terminated list. • Flow rule can provide rule specific configuration parameters to existing shared handle. Updates of flow rule specific configuration will not change the base action configuration. Base action configuration was set during the action creation. Indirect action list handle defines 2 types of resources: • Mutable handle resource can be changed during handle lifespan. • Immutable handle resource value is set during handle creation and cannot be changed. There are 2 types of mutable indirect handle contexts: • Action mutable context is always shared between all flows that referenced indirect actions list handle. Action mutable context can be changed by explicit invocation of indirect handle update function. • Flow mutable context is private to a flow. Flow mutable context can be updated by indirect list handle flow rule configuration. flow 1: / indirect handle H conf C1 / | | | | | | flow 2: | | / indirect handle H conf C2 / | | | | | | | | | | | | ========================================================= ^ | | | | | | V | V | ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ | flow mutable flow mutable | context 1 context 2 | ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ indirect | | | action | | | context | V V | ----------------------------------------------------- | action mutable context | ----------------------------------------------------- v action immutable context ========================================================= Indirect action types - immutable, action / flow mutable, are mutually exclusive and depend on the action definition. For example: • Indirect METER_MARK policy is immutable action member and profile is action mutable action member. • Indirect METER_MARK flow action defines init_color as flow mutable member. • Indirect QUOTA flow action does not define flow mutable members. Indirect action lists action will deprecate and replace existing indirect action after transition period. Template API: Action template format: template .. indirect_list handle Htmpl conf Ctmpl .. mask .. indirect_list handle Hmask conf Cmask .. 1 If Htmpl was masked (Hmask != 0), PMD compiles base action configuration during action template, table template and flow rule phases - depending on PMD action implementation. Otherwise, action is compiled from scratch during flow rule processing. 2 If Htmpl and Ctmpl were masked (Hmask !=0 and Cmask != 0), table template processing overwrites base action configuration with Ctmpl parameters. Flow rule format: actions .. indirect_list handle Hflow conf Cflow .. 3 If Htmpl was masked, Hflow can reference a different action of the same type as Htmpl. 4 If Cflow was specified, it overwrites action configuration. Signed-off-by: Gregory Etelson --- lib/ethdev/rte_flow.h | 266 +++++++++++++++++++++++++++++++++++ lib/ethdev/rte_flow_driver.h | 41 ++++++ 2 files changed, 307 insertions(+) diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 713ba8b65c..ac1f51e564 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -2912,6 +2912,13 @@ enum rte_flow_action_type { * applied to the given ethdev Rx queue. */ RTE_FLOW_ACTION_TYPE_SKIP_CMAN, + + /** + * Action handle to reference flow actions list. + * + * @see struct rte_flow_action_indirect_list + */ + RTE_FLOW_ACTION_TYPE_INDIRECT_LIST, }; /** @@ -6118,6 +6125,265 @@ rte_flow_async_action_handle_query_update(uint16_t port_id, uint32_t queue_id, void *user_data, struct rte_flow_error *error); +struct rte_flow_action_list_handle; + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Configure INDIRECT_LIST flow action. + * + * @see RTE_FLOW_ACTION_TYPE_INDIRECT_LIST + */ +struct rte_flow_action_indirect_list { + struct rte_flow_action_list_handle; /**< Indirect action list handle */ + /** + * Flow mutable configuration array. + * NULL if the handle has no flow mutable configuration update. + * Otherwise, if the handle was created with list A1 / A2 .. An / END + * size of conf is n. + * conf[i] points to flow mutable update of Ai in the handle + * actions list or NULL if Ai has no update. + */ + const void **conf; +}; + + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Create an indirect flow action object from flow actions list. + * The object is identified by a unique handle. + * The handle has single state and configuration + * across all the flow rules using it. + * + * @param[in] port_id + * The port identifier of the Ethernet device. + * @param[in] conf + * Action configuration for the indirect action list creation. + * @param[in] actions + * Specific configuration of the indirect action lists. + * @param[out] error + * Perform verbose error reporting if not NULL. PMDs initialize this + * structure in case of error only. + * @return + * A valid handle in case of success, NULL otherwise and rte_errno is set + * to one of the error codes defined: + * - (-ENODEV) if *port_id* invalid. + * - (-ENOSYS) if underlying device does not support this functionality. + * - (-EIO) if underlying device is removed. + * - (-EINVAL) if *actions* list invalid. + * - (-ENOTSUP) if *action* list element valid but unsupported. + * - (-E2BIG) to many elements in *actions* + */ +__rte_experimental +struct rte_flow_action_list_handle * +rte_flow_action_list_handle_create(uint16_t port_id, + const + struct rte_flow_indir_action_conf *conf, + const struct rte_flow_action *actions, + struct rte_flow_error *error); + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Async function call to create an indirect flow action object + * from flow actions list. + * The object is identified by a unique handle. + * The handle has single state and configuration + * across all the flow rules using it. + * + * @param[in] port_id + * The port identifier of the Ethernet device. + * @param[in] queue_id + * Flow queue which is used to update the rule. + * @param[in] attr + * Indirect action update operation attributes. + * @param[in] conf + * Action configuration for the indirect action list creation. + * @param[in] actions + * Specific configuration of the indirect action list. + * @param[in] user_data + * The user data that will be returned on async completion event. + * @param[out] error + * Perform verbose error reporting if not NULL. PMDs initialize this + * structure in case of error only. + * @return + * A valid handle in case of success, NULL otherwise and rte_errno is set + * to one of the error codes defined: + * - (-ENODEV) if *port_id* invalid. + * - (-ENOSYS) if underlying device does not support this functionality. + * - (-EIO) if underlying device is removed. + * - (-EINVAL) if *actions* list invalid. + * - (-ENOTSUP) if *action* list element valid but unsupported. + * - (-E2BIG) to many elements in *actions* + */ +__rte_experimental +struct rte_flow_action_list_handle * +rte_flow_async_action_list_handle_create(uint16_t port_id, uint32_t queue_id, + const struct rte_flow_op_attr *attr, + const struct + rte_flow_indir_action_conf *conf, + const struct rte_flow_action *actions, + void *user_data, + struct rte_flow_error *error); + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Destroy indirect actions list by handle. + * + * @param[in] port_id + * The port identifier of the Ethernet device. + * @param[in] handle + * Handle for the indirect actions list to be destroyed. + * @param[out] error + * Perform verbose error reporting if not NULL. PMDs initialize this + * structure in case of error only. + * @return + * - (0) if success. + * - (-ENODEV) if *port_id* invalid. + * - (-ENOSYS) if underlying device does not support this functionality. + * - (-EIO) if underlying device is removed. + * - (-ENOENT) if actions list pointed by *action* handle was not found. + * - (-EBUSY) if actions list pointed by *action* handle still used + * rte_errno is also set. + */ +__rte_experimental +int +rte_flow_action_list_handle_destroy(uint16_t port_id, + struct rte_flow_action_list_handle *handle, + struct rte_flow_error *error); + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Enqueue indirect action list destruction operation. + * The destroy queue must be the same + * as the queue on which the action was created. + * + * @param[in] port_id + * Port identifier of Ethernet device. + * @param[in] queue_id + * Flow queue which is used to destroy the rule. + * @param[in] op_attr + * Indirect action destruction operation attributes. + * @param[in] handle + * Handle for the indirect action object to be destroyed. + * @param[in] user_data + * The user data that will be returned on the completion events. + * @param[out] error + * Perform verbose error reporting if not NULL. + * PMDs initialize this structure in case of error only. + * + * @return + * 0 on success, a negative errno value otherwise and rte_errno is set. + */ +__rte_experimental +int +rte_flow_async_action_list_handle_destroy + (uint16_t port_id, uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + struct rte_flow_action_list_handle *handle, + void *user_data, struct rte_flow_error *error); + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Query and/or update indirect flow actions list. + * If both query and update not NULL, the function atomically + * queries and updates indirect action. Query and update are carried in order + * specified in the mode parameter. + * If ether query or update is NULL, the function executes + * complementing operation. + * + * @param port_id + * Port identifier of Ethernet device. + * @param handle + * Handle for the indirect actions list object to be updated. + * @param update + * If not NULL, update profile specification used to modify the action + * pointed by handle. + * @see struct rte_flow_action_indirect_list + * @param query + * If not NULL pointer to storage for the associated query data type. + * @see struct rte_flow_action_indirect_list + * @param mode + * Operational mode. + * @param error + * Perform verbose error reporting if not NULL. + * PMDs initialize this structure in case of error only. + * + * @return + * 0 on success, a negative errno value otherwise and rte_errno is set. + * - (-ENODEV) if *port_id* invalid. + * - (-ENOTSUP) if underlying device does not support this functionality. + * - (-EINVAL) if *handle* or *mode* invalid or + * both *query* and *update* are NULL. + */ +__rte_experimental +int +rte_flow_action_list_handle_query_update(uint16_t port_id, + const struct + rte_flow_action_list_handle *handle, + const void **update, void **query, + enum rte_flow_query_update_mode mode, + struct rte_flow_error *error); + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Enqueue async indirect flow actions list query and/or update + * + * @param port_id + * Port identifier of Ethernet device. + * @param queue_id + * Flow queue which is used to update the rule. + * @param attr + * Indirect action update operation attributes. + * @param handle + * Handle for the indirect actions list object to be updated. + * @param update + * If not NULL, update profile specification used to modify the action + * pointed by handle. + * @see struct rte_flow_action_indirect_list + * @param query + * If not NULL, pointer to storage for the associated query data type. + * Query result returned on async completion event. + * @see struct rte_flow_action_indirect_list + * @param mode + * Operational mode. + * @param user_data + * The user data that will be returned on async completion event. + * @param error + * Perform verbose error reporting if not NULL. + * PMDs initialize this structure in case of error only. + * + * @return + * 0 on success, a negative errno value otherwise and rte_errno is set. + * - (-ENODEV) if *port_id* invalid. + * - (-ENOTSUP) if underlying device does not support this functionality. + * - (-EINVAL) if *handle* or *mode* invalid or + * both *update* and *query* are NULL. + */ +__rte_experimental +int +rte_flow_async_action_list_handle_query_update(uint16_t port_id, uint32_t queue_id, + const struct rte_flow_op_attr *attr, + const struct + rte_flow_action_list_handle *handle, + const void *update, void *query, + enum rte_flow_query_update_mode mode, + void *user_data, + struct rte_flow_error *error); + + #ifdef __cplusplus } #endif diff --git a/lib/ethdev/rte_flow_driver.h b/lib/ethdev/rte_flow_driver.h index a129a4605d..8dc803023c 100644 --- a/lib/ethdev/rte_flow_driver.h +++ b/lib/ethdev/rte_flow_driver.h @@ -121,6 +121,17 @@ struct rte_flow_ops { const void *update, void *query, enum rte_flow_query_update_mode qu_mode, struct rte_flow_error *error); + /** @see rte_flow_action_list_handle_create() */ + struct rte_flow_action_list_handle *(*action_list_handle_create) + (struct rte_eth_dev *dev, + const struct rte_flow_indir_action_conf *conf, + const struct rte_flow_action actions[], + struct rte_flow_error *error); + /** @see rte_flow_action_list_handle_destroy() */ + int (*action_list_handle_destroy) + (struct rte_eth_dev *dev, + struct rte_flow_action_list_handle *handle, + struct rte_flow_error *error); /** See rte_flow_tunnel_decap_set() */ int (*tunnel_decap_set) (struct rte_eth_dev *dev, @@ -302,6 +313,36 @@ struct rte_flow_ops { const void *update, void *query, enum rte_flow_query_update_mode qu_mode, void *user_data, struct rte_flow_error *error); + /** @see rte_flow_async_action_list_handle_create() */ + struct rte_flow_action_list_handle * + (*async_action_list_handle_create) + (struct rte_eth_dev *dev, uint32_t queue_id, + const struct rte_flow_op_attr *attr, + const struct rte_flow_indir_action_conf *conf, + const struct rte_flow_action *actions, + void *user_data, struct rte_flow_error *error); + /** @see rte_flow_async_action_list_handle_destroy() */ + int (*async_action_list_handle_destroy) + (struct rte_eth_dev *dev, uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + struct rte_flow_action_list_handle *action_handle, + void *user_data, struct rte_flow_error *error); + /** @see rte_flow_action_list_handle_query_update() */ + int (*action_list_handle_query_update) + (uint16_t port_id, + const struct rte_flow_action_list_handle *handle, + const void **update, void **query, + enum rte_flow_query_update_mode mode, + struct rte_flow_error *error); + /** @see rte_flow_async_action_list_handle_query_update() */ + int (*async_action_list_handle_query_update) + (uint16_t port_id, uint32_t queue_id, + const struct rte_flow_op_attr *attr, + const struct rte_flow_action_list_handle *handle, + const void **update, void **query, + enum rte_flow_query_update_mode mode, + void *user_data, struct rte_flow_error *error); + }; /** -- 2.34.1