From patchwork Tue Feb 6 02:06:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suanming Mou X-Patchwork-Id: 136413 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 0EEE743A94; Tue, 6 Feb 2024 03:07:08 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8191E40ECF; Tue, 6 Feb 2024 03:07:00 +0100 (CET) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2058.outbound.protection.outlook.com [40.107.92.58]) by mails.dpdk.org (Postfix) with ESMTP id C93EB40E7C for ; Tue, 6 Feb 2024 03:06:59 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nLJGhMGXycf8QgyO1XMmTPdR8Q3Smzi2ovFoSde0zLKqJpdgOYOlMPzf3XgIxYEduMar72xqTXOOyV6COu5/e7eeI6bpFvBWlnLJ3DEXBqY+g0b+K0o3KwcStaj06l/mVw4FNQ7u31uw5/2O0B4T7GLkdkaDHMUY668M27hsaoSev4ZsgRwLGgTm9S31//qe2b5QsXXfeUEWusN5sBNtXvJM8G9AfWfZIRAUiAokNZLS9TVDrjaVzsrac9EWXsrXCk5vhGkUhEAjncvAKHun5LOacoWSQRAn7v/xkvE9yhgT/toLPNG76zbWkFYqWBNpTQ+e1TuPNX1/UJWI6eowmA== 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=PaRkvZPUibxwGIHlNKJyfZriqjD+FHoeBWVBzVCERbk=; b=fOj6muAE3QStcTCjWX9ppHRQF7TPpbHOTeY97QP08K7QpmJwsLLF0mWkm3ZIxM1NMUMlS49bqmQo0lbaKqbhpQGnx3XkEJTlPFtP3e9D6a3IAaVVFKVvwP9DWVGuvcIt+Om0LmTMhRHitcGQhYAJ26kIyHs8QA2Q0f00OXofWNrXly1iZIH1uEiPsko1OZ4XJOFI4y22lKZ9HYF8SesLiVOD2BRBkOStPrppuqkPAopYAHQiQAYhWGRk2S3pPQeoTKlzCXxL1IqyRtQHCoCxU5drJ2w6jLezETHKtY18iLPm4k6Fuum7a1QfTaYN3lOoqItpSaYmy9wci5Yp2G9vnw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=monjalon.net 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 (0) 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=PaRkvZPUibxwGIHlNKJyfZriqjD+FHoeBWVBzVCERbk=; b=RPjrEjdi2b1t08afjt47DC+1RJdZYiy7ZdQVMS1I0B5qnLFoocMWfVRGQ6LFum5BvaD3/8PfYG1n11t55NZ+aLqEz7GbVsb0NMADxMIuxKC+hR3MSzg43c4ae7cBcknExxMAI0I2qsUYyKzYvekSAhcHWq45bb9FL40U8+PMycHx6/Ev9ZNKNABmx2N5GJab+JOWedaMPdxGnzaJC0jI9a99CqsTZ31enAz3/SRd/2coMaz6wDeB+HylNOKX6uVP+oJGpo7CfHKaamNmVvz1vlATZMtub99oP+PJ4N4CMEsT9HVWcQaZOFpZB1Cw/dTN74nD+DxfDlBiQc6bANr9Cw== Received: from DM6PR06CA0053.namprd06.prod.outlook.com (2603:10b6:5:54::30) by DS0PR12MB9321.namprd12.prod.outlook.com (2603:10b6:8:1b8::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7270.17; Tue, 6 Feb 2024 02:06:57 +0000 Received: from DS1PEPF0001708E.namprd03.prod.outlook.com (2603:10b6:5:54:cafe::90) by DM6PR06CA0053.outlook.office365.com (2603:10b6:5:54::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7249.36 via Frontend Transport; Tue, 6 Feb 2024 02:06:57 +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 DS1PEPF0001708E.mail.protection.outlook.com (10.167.17.134) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7249.19 via Frontend Transport; Tue, 6 Feb 2024 02:06:57 +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.41; Mon, 5 Feb 2024 18:06:50 -0800 Received: from nvidia.com (10.126.230.35) 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.1258.12; Mon, 5 Feb 2024 18:06:48 -0800 From: Suanming Mou To: , , Ori Kam , Andrew Rybchenko CC: Subject: [PATCH v7 2/4] ethdev: move flow field data structures Date: Tue, 6 Feb 2024 10:06:23 +0800 Message-ID: <20240206020626.545946-3-suanmingm@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240206020626.545946-1-suanmingm@nvidia.com> References: <20231214031227.363911-1-suanmingm@nvidia.com> <20240206020626.545946-1-suanmingm@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.230.35] X-ClientProxiedBy: rnnvmail203.nvidia.com (10.129.68.9) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0001708E:EE_|DS0PR12MB9321:EE_ X-MS-Office365-Filtering-Correlation-Id: 589e2e36-0290-4042-4232-08dc26b84c26 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: f+yMAZKwQ46el9eKnlUeeFzJfw4FOvmPa+vYQv1BMxog0qPIBUmYtCdmZg6/z3M6P5Fptc3Nv8hCMq1fW1I2fXeUv/pNgIGjl2m680+wwct6Yc52cCkECUAAI+qxUqOwrhV3UZn7gDp9dMENv+cohRhEV9KZWkjLaT2UX/WGbQEV7Busb70fOwNCVbbUSwurrlLs+wwX36ZufUsOGIlVuTezU3E57HoC+BEGKexFSqL3lTmptaUPfPkxyRn/A3eQXK3NbedCYdCtPTvsBDHgIYeQMk42TaSNtlNby6XAfH1Q+cJ3w+v/lMDgh1DkiQgeODl0UQMJxRxGBvrSZ8GgiXwZnvXu2nVJNnBlZq219saFTi9K/7mnM0DpDws4bBclrD401/WFuOs79ZzsRNzTci+CDj5OXHBsG1I285cTeoCSC7ireBA7xOf9uRpvZvOhz0mWfah0Nk2KdiUChNtPoidcDG0vNLD0jCu4pm7FtJxqrDcB7ihqv0SPSYC/6bxEA7kUg/LtO6UYH+3SVCn0HaiJcSj3BsE/I3BsK9SG1p1eFXu1DzCpufTxVfv5a3NNEZ3gAu+lCb39zx1VdbZce4aI52okL06UJUnsByapmOPdhYjB7MJptRHIvaWNdwfDkE1GOFCLBN3nsRf/6f5fwsgR38VFQbzGpft51FdEnCC9ZMN+OEqUPV2q3iumjCEVBBeWZ6OJaug4WWUHPMIl+KCUQLtmNfHgDuPbqkYf4rzl2OdMCRh4qgtxR+Z+jvrF 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:(13230031)(4636009)(346002)(376002)(39860400002)(396003)(136003)(230922051799003)(230273577357003)(82310400011)(186009)(1800799012)(64100799003)(451199024)(36840700001)(40470700004)(46966006)(40460700003)(83380400001)(1076003)(6286002)(26005)(47076005)(426003)(40480700001)(16526019)(336012)(7696005)(2616005)(6666004)(41300700001)(110136005)(36756003)(70206006)(70586007)(478600001)(316002)(82740400003)(55016003)(7636003)(356005)(36860700001)(4326008)(8676002)(30864003)(2906002)(8936002)(5660300002)(86362001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2024 02:06:57.1619 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 589e2e36-0290-4042-4232-08dc26b84c26 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: DS1PEPF0001708E.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB9321 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 As flow field relevant data structures will be used by both actions and items, this commit moves the relevant data structures up to item parts. Signed-off-by: Suanming Mou Acked-by: Ferruh Yigit --- lib/ethdev/rte_flow.h | 290 +++++++++++++++++++++--------------------- 1 file changed, 145 insertions(+), 145 deletions(-) diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index eb46cfe09e..958eb01a80 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -2365,6 +2365,151 @@ static const struct rte_flow_item_ptype rte_flow_item_ptype_mask = { }; #endif +/** + * Packet header field IDs, used by RTE_FLOW_ACTION_TYPE_MODIFY_FIELD. + */ +enum rte_flow_field_id { + RTE_FLOW_FIELD_START = 0, /**< Start of a packet. */ + RTE_FLOW_FIELD_MAC_DST, /**< Destination MAC Address. */ + RTE_FLOW_FIELD_MAC_SRC, /**< Source MAC Address. */ + RTE_FLOW_FIELD_VLAN_TYPE, /**< VLAN Tag Identifier. */ + RTE_FLOW_FIELD_VLAN_ID, /**< VLAN Identifier. */ + RTE_FLOW_FIELD_MAC_TYPE, /**< EtherType. */ + RTE_FLOW_FIELD_IPV4_DSCP, /**< IPv4 DSCP. */ + RTE_FLOW_FIELD_IPV4_TTL, /**< IPv4 Time To Live. */ + RTE_FLOW_FIELD_IPV4_SRC, /**< IPv4 Source Address. */ + RTE_FLOW_FIELD_IPV4_DST, /**< IPv4 Destination Address. */ + RTE_FLOW_FIELD_IPV6_DSCP, /**< IPv6 DSCP. */ + RTE_FLOW_FIELD_IPV6_HOPLIMIT, /**< IPv6 Hop Limit. */ + RTE_FLOW_FIELD_IPV6_SRC, /**< IPv6 Source Address. */ + RTE_FLOW_FIELD_IPV6_DST, /**< IPv6 Destination Address. */ + RTE_FLOW_FIELD_TCP_PORT_SRC, /**< TCP Source Port Number. */ + RTE_FLOW_FIELD_TCP_PORT_DST, /**< TCP Destination Port Number. */ + RTE_FLOW_FIELD_TCP_SEQ_NUM, /**< TCP Sequence Number. */ + RTE_FLOW_FIELD_TCP_ACK_NUM, /**< TCP Acknowledgment Number. */ + RTE_FLOW_FIELD_TCP_FLAGS, /**< TCP Flags. */ + RTE_FLOW_FIELD_UDP_PORT_SRC, /**< UDP Source Port Number. */ + RTE_FLOW_FIELD_UDP_PORT_DST, /**< UDP Destination Port Number. */ + RTE_FLOW_FIELD_VXLAN_VNI, /**< VXLAN Network Identifier. */ + RTE_FLOW_FIELD_GENEVE_VNI, /**< GENEVE Network Identifier. */ + RTE_FLOW_FIELD_GTP_TEID, /**< GTP Tunnel Endpoint Identifier. */ + RTE_FLOW_FIELD_TAG, /**< Tag value. */ + RTE_FLOW_FIELD_MARK, /**< Mark value. */ + RTE_FLOW_FIELD_META, /**< Metadata value. */ + RTE_FLOW_FIELD_POINTER, /**< Memory pointer. */ + RTE_FLOW_FIELD_VALUE, /**< Immediate value. */ + RTE_FLOW_FIELD_IPV4_ECN, /**< IPv4 ECN. */ + RTE_FLOW_FIELD_IPV6_ECN, /**< IPv6 ECN. */ + RTE_FLOW_FIELD_GTP_PSC_QFI, /**< GTP QFI. */ + RTE_FLOW_FIELD_METER_COLOR, /**< Meter color marker. */ + RTE_FLOW_FIELD_IPV6_PROTO, /**< IPv6 next header. */ + RTE_FLOW_FIELD_FLEX_ITEM, /**< Flex item. */ + RTE_FLOW_FIELD_HASH_RESULT, /**< Hash result. */ + RTE_FLOW_FIELD_GENEVE_OPT_TYPE, /**< GENEVE option type. */ + RTE_FLOW_FIELD_GENEVE_OPT_CLASS,/**< GENEVE option class. */ + RTE_FLOW_FIELD_GENEVE_OPT_DATA, /**< GENEVE option data. */ + RTE_FLOW_FIELD_MPLS, /**< MPLS header. */ + RTE_FLOW_FIELD_TCP_DATA_OFFSET, /**< TCP data offset. */ + RTE_FLOW_FIELD_IPV4_IHL, /**< IPv4 IHL. */ + RTE_FLOW_FIELD_IPV4_TOTAL_LEN, /**< IPv4 total length. */ + RTE_FLOW_FIELD_IPV6_PAYLOAD_LEN,/**< IPv6 payload length. */ + RTE_FLOW_FIELD_RANDOM /**< Random value. */ +}; + +/** + * @warning + * @b EXPERIMENTAL: this structure may change without prior notice + * + * Packet header field descriptions, used by RTE_FLOW_ACTION_TYPE_MODIFY_FIELD. + */ +struct rte_flow_field_data { + enum rte_flow_field_id field; /**< Field or memory type ID. */ + union { + struct { + /** Encapsulation level and tag index or flex item handle. */ + union { + struct { + /** + * Packet encapsulation level containing + * the field to modify. + * + * - @p 0 requests the default behavior. + * Depending on the packet type, it + * can mean outermost, innermost or + * anything in between. + * + * It basically stands for the + * innermost encapsulation level. + * Modification can be performed + * according to PMD and device + * capabilities. + * + * - @p 1 requests modification to be + * performed on the outermost packet + * encapsulation level. + * + * - @p 2 and subsequent values request + * modification to be performed on + * the specified inner packet + * encapsulation level, from + * outermost to innermost (lower to + * higher values). + * + * Values other than @p 0 are not + * necessarily supported. + * + * @note that for MPLS field, + * encapsulation level also include + * tunnel since MPLS may appear in + * outer, inner or tunnel. + */ + uint8_t level; + union { + /** + * Tag index array inside + * encapsulation level. + * Used for VLAN, MPLS or TAG types. + */ + uint8_t tag_index; + /** + * Geneve option identifier. + * Relevant only for + * RTE_FLOW_FIELD_GENEVE_OPT_XXXX + * modification type. + */ + struct { + /** + * Geneve option type. + */ + uint8_t type; + /** + * Geneve option class. + */ + rte_be16_t class_id; + }; + }; + }; + struct rte_flow_item_flex_handle *flex_handle; + }; + /** Number of bits to skip from a field. */ + uint32_t offset; + }; + /** + * Immediate value for RTE_FLOW_FIELD_VALUE, presented in the + * same byte order and length as in relevant rte_flow_item_xxx. + * The immediate source bitfield offset is inherited from + * the destination's one. + */ + uint8_t value[16]; + /** + * Memory address for RTE_FLOW_FIELD_POINTER, memory layout + * should be the same as for relevant field in the + * rte_flow_item_xxx structure. + */ + void *pvalue; + }; +}; + /** * Action types. * @@ -3892,151 +4037,6 @@ struct rte_flow_action_ethdev { uint16_t port_id; /**< ethdev port ID */ }; -/** - * Packet header field IDs, used by RTE_FLOW_ACTION_TYPE_MODIFY_FIELD. - */ -enum rte_flow_field_id { - RTE_FLOW_FIELD_START = 0, /**< Start of a packet. */ - RTE_FLOW_FIELD_MAC_DST, /**< Destination MAC Address. */ - RTE_FLOW_FIELD_MAC_SRC, /**< Source MAC Address. */ - RTE_FLOW_FIELD_VLAN_TYPE, /**< VLAN Tag Identifier. */ - RTE_FLOW_FIELD_VLAN_ID, /**< VLAN Identifier. */ - RTE_FLOW_FIELD_MAC_TYPE, /**< EtherType. */ - RTE_FLOW_FIELD_IPV4_DSCP, /**< IPv4 DSCP. */ - RTE_FLOW_FIELD_IPV4_TTL, /**< IPv4 Time To Live. */ - RTE_FLOW_FIELD_IPV4_SRC, /**< IPv4 Source Address. */ - RTE_FLOW_FIELD_IPV4_DST, /**< IPv4 Destination Address. */ - RTE_FLOW_FIELD_IPV6_DSCP, /**< IPv6 DSCP. */ - RTE_FLOW_FIELD_IPV6_HOPLIMIT, /**< IPv6 Hop Limit. */ - RTE_FLOW_FIELD_IPV6_SRC, /**< IPv6 Source Address. */ - RTE_FLOW_FIELD_IPV6_DST, /**< IPv6 Destination Address. */ - RTE_FLOW_FIELD_TCP_PORT_SRC, /**< TCP Source Port Number. */ - RTE_FLOW_FIELD_TCP_PORT_DST, /**< TCP Destination Port Number. */ - RTE_FLOW_FIELD_TCP_SEQ_NUM, /**< TCP Sequence Number. */ - RTE_FLOW_FIELD_TCP_ACK_NUM, /**< TCP Acknowledgment Number. */ - RTE_FLOW_FIELD_TCP_FLAGS, /**< TCP Flags. */ - RTE_FLOW_FIELD_UDP_PORT_SRC, /**< UDP Source Port Number. */ - RTE_FLOW_FIELD_UDP_PORT_DST, /**< UDP Destination Port Number. */ - RTE_FLOW_FIELD_VXLAN_VNI, /**< VXLAN Network Identifier. */ - RTE_FLOW_FIELD_GENEVE_VNI, /**< GENEVE Network Identifier. */ - RTE_FLOW_FIELD_GTP_TEID, /**< GTP Tunnel Endpoint Identifier. */ - RTE_FLOW_FIELD_TAG, /**< Tag value. */ - RTE_FLOW_FIELD_MARK, /**< Mark value. */ - RTE_FLOW_FIELD_META, /**< Metadata value. */ - RTE_FLOW_FIELD_POINTER, /**< Memory pointer. */ - RTE_FLOW_FIELD_VALUE, /**< Immediate value. */ - RTE_FLOW_FIELD_IPV4_ECN, /**< IPv4 ECN. */ - RTE_FLOW_FIELD_IPV6_ECN, /**< IPv6 ECN. */ - RTE_FLOW_FIELD_GTP_PSC_QFI, /**< GTP QFI. */ - RTE_FLOW_FIELD_METER_COLOR, /**< Meter color marker. */ - RTE_FLOW_FIELD_IPV6_PROTO, /**< IPv6 next header. */ - RTE_FLOW_FIELD_FLEX_ITEM, /**< Flex item. */ - RTE_FLOW_FIELD_HASH_RESULT, /**< Hash result. */ - RTE_FLOW_FIELD_GENEVE_OPT_TYPE, /**< GENEVE option type. */ - RTE_FLOW_FIELD_GENEVE_OPT_CLASS,/**< GENEVE option class. */ - RTE_FLOW_FIELD_GENEVE_OPT_DATA, /**< GENEVE option data. */ - RTE_FLOW_FIELD_MPLS, /**< MPLS header. */ - RTE_FLOW_FIELD_TCP_DATA_OFFSET, /**< TCP data offset. */ - RTE_FLOW_FIELD_IPV4_IHL, /**< IPv4 IHL. */ - RTE_FLOW_FIELD_IPV4_TOTAL_LEN, /**< IPv4 total length. */ - RTE_FLOW_FIELD_IPV6_PAYLOAD_LEN,/**< IPv6 payload length. */ - RTE_FLOW_FIELD_RANDOM /**< Random value. */ -}; - -/** - * @warning - * @b EXPERIMENTAL: this structure may change without prior notice - * - * Packet header field descriptions, used by RTE_FLOW_ACTION_TYPE_MODIFY_FIELD. - */ -struct rte_flow_field_data { - enum rte_flow_field_id field; /**< Field or memory type ID. */ - union { - struct { - /** Encapsulation level and tag index or flex item handle. */ - union { - struct { - /** - * Packet encapsulation level containing - * the field to modify. - * - * - @p 0 requests the default behavior. - * Depending on the packet type, it - * can mean outermost, innermost or - * anything in between. - * - * It basically stands for the - * innermost encapsulation level. - * Modification can be performed - * according to PMD and device - * capabilities. - * - * - @p 1 requests modification to be - * performed on the outermost packet - * encapsulation level. - * - * - @p 2 and subsequent values request - * modification to be performed on - * the specified inner packet - * encapsulation level, from - * outermost to innermost (lower to - * higher values). - * - * Values other than @p 0 are not - * necessarily supported. - * - * @note that for MPLS field, - * encapsulation level also include - * tunnel since MPLS may appear in - * outer, inner or tunnel. - */ - uint8_t level; - union { - /** - * Tag index array inside - * encapsulation level. - * Used for VLAN, MPLS or TAG types. - */ - uint8_t tag_index; - /** - * Geneve option identifier. - * Relevant only for - * RTE_FLOW_FIELD_GENEVE_OPT_XXXX - * modification type. - */ - struct { - /** - * Geneve option type. - */ - uint8_t type; - /** - * Geneve option class. - */ - rte_be16_t class_id; - }; - }; - }; - struct rte_flow_item_flex_handle *flex_handle; - }; - /** Number of bits to skip from a field. */ - uint32_t offset; - }; - /** - * Immediate value for RTE_FLOW_FIELD_VALUE, presented in the - * same byte order and length as in relevant rte_flow_item_xxx. - * The immediate source bitfield offset is inherited from - * the destination's one. - */ - uint8_t value[16]; - /** - * Memory address for RTE_FLOW_FIELD_POINTER, memory layout - * should be the same as for relevant field in the - * rte_flow_item_xxx structure. - */ - void *pvalue; - }; -}; - /** * Operation types for MODIFY_FIELD action. */