get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 122531,
    "url": "http://patches.dpdk.org/api/patches/122531/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230126131759.3887632-4-ferruh.yigit@amd.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<20230126131759.3887632-4-ferruh.yigit@amd.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230126131759.3887632-4-ferruh.yigit@amd.com",
    "date": "2023-01-26T13:17:54",
    "name": "[v4,3/8] ethdev: use VXLAN protocol struct for flow matching",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "f318a2021bfaff737ebf2844a0eccd5f1b521ac6",
    "submitter": {
        "id": 2700,
        "url": "http://patches.dpdk.org/api/people/2700/?format=api",
        "name": "Ferruh Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20230126131759.3887632-4-ferruh.yigit@amd.com/mbox/",
    "series": [
        {
            "id": 26656,
            "url": "http://patches.dpdk.org/api/series/26656/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=26656",
            "date": "2023-01-26T13:17:51",
            "name": "start cleanup of rte_flow_item_*",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/26656/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/122531/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/122531/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 2460A42492;\n\tThu, 26 Jan 2023 14:18:48 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 3B69342D43;\n\tThu, 26 Jan 2023 14:18:46 +0100 (CET)",
            "from NAM11-BN8-obe.outbound.protection.outlook.com\n (mail-bn8nam11on2041.outbound.protection.outlook.com [40.107.236.41])\n by mails.dpdk.org (Postfix) with ESMTP id 7166842D43\n for <dev@dpdk.org>; Thu, 26 Jan 2023 14:18:44 +0100 (CET)",
            "from BN0PR02CA0038.namprd02.prod.outlook.com (2603:10b6:408:e5::13)\n by LV2PR12MB5918.namprd12.prod.outlook.com (2603:10b6:408:174::21)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.22; Thu, 26 Jan\n 2023 13:18:40 +0000",
            "from BN8NAM11FT012.eop-nam11.prod.protection.outlook.com\n (2603:10b6:408:e5:cafe::81) by BN0PR02CA0038.outlook.office365.com\n (2603:10b6:408:e5::13) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.22 via Frontend\n Transport; Thu, 26 Jan 2023 13:18:39 +0000",
            "from SATLEXMB04.amd.com (165.204.84.17) by\n BN8NAM11FT012.mail.protection.outlook.com (10.13.177.55) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n 15.20.6043.17 via Frontend Transport; Thu, 26 Jan 2023 13:18:39 +0000",
            "from telcodpdk.amd.com (10.180.168.240) by SATLEXMB04.amd.com\n (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Thu, 26 Jan\n 2023 07:18:37 -0600"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=MlPMwFjQBXTvKbZ5Hs5vUam7/v4WLNykVYny1BLYG5rKw1WWAKPq/x+csYTPngyT+z0OWABVRxsRKEVGsmQ/JScamVAkBAR0zr8Y3R5JEYCEmTT0iyUHf6LqUnvn3lbTpbUkGIuCeaIvrJkHjeNPeEZcfrngAInBBocCi6Xkcg9xQWJohELivcXeO/NR26Vk1gUaFqExQtwd1A0Rj/iYeqqaqwRzClhJF0TskzPnWVNI+06bXo1sHxOfYjvYUZ9w8SsXBQA7kYaoDZGOO6PYgChKTuGtymTIogwZgQDMql0A30UEca0dyrBlKH0xKomZ+Av0VgMW8Fqj1CLtMfDTzQ==",
        "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=aNuy8AodgBcDIMnVpPU8AR5hDG/rcEGBouFdS1CG23c=;\n b=keo+C5WoP20OzAsuljY8mnvvbT8TPyFWvBDj8t0lBjRNf28DblRllYlseNG4t+s83SVERF4iAxDpC0RX3mmeoXwNyKmSI5o5txUkJc7f52feyyk1lRon6lFT08DzakXEjauWycGuVHn5B2ajeUnsDopZyicWml3YArokpTsHCU62FmjDUfF8jqp6AnRM5FXgEMjcRUN3Jmp481cpVb6Xuh7ujr8ylW6SGgfTNAzGvLM5h9k+tzPogo3pMSlwx6zzg5MITF7SMwnsbo1GCcRlQa3y6seayjfjhN0Vq38+o8DEg4zDXrXm/ddxRXBR41w7JpS0ou8NFnb8jyOoQ9L3ZQ==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 165.204.84.17) smtp.rcpttodomain=monjalon.net smtp.mailfrom=amd.com;\n dmarc=pass (p=quarantine sp=quarantine pct=100) action=none\n header.from=amd.com; dkim=none (message not signed); arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=aNuy8AodgBcDIMnVpPU8AR5hDG/rcEGBouFdS1CG23c=;\n b=Asa/z9kkmUd+S/SPbgNbA76qYN9ads6KIp5mNIrOxgl1VbqFE9tqt6MAE1l9JtnPcF8XZZef6ovk1nB+p6fJRpB2+FS/q/RdFQHSudZLl1BOmwOoQrnmTqar9/Aab77IBdtAFtWWcIizzqe1PLcH+zJUO3d/EmM90b3rYJ62PLg=",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 165.204.84.17)\n smtp.mailfrom=amd.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=amd.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of amd.com designates\n 165.204.84.17 as permitted sender) receiver=protection.outlook.com;\n client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C",
        "From": "Ferruh Yigit <ferruh.yigit@amd.com>",
        "To": "Thomas Monjalon <thomas@monjalon.net>, Wisam Jaddo <wisamm@nvidia.com>,\n Ori Kam <orika@nvidia.com>, Aman Singh <aman.deep.singh@intel.com>, Yuying\n Zhang <yuying.zhang@intel.com>, Ajit Khaparde <ajit.khaparde@broadcom.com>,\n Somnath Kotur <somnath.kotur@broadcom.com>, Dongdong Liu\n <liudongdong3@huawei.com>, Yisen Zhuang <yisen.zhuang@huawei.com>, Beilei\n Xing <beilei.xing@intel.com>, Qiming Yang <qiming.yang@intel.com>, Qi Zhang\n <qi.z.zhang@intel.com>, Rosen Xu <rosen.xu@intel.com>, Wenjun Wu\n <wenjun1.wu@intel.com>, Matan Azrad <matan@nvidia.com>, Viacheslav Ovsiienko\n <viacheslavo@nvidia.com>, Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>",
        "CC": "David Marchand <david.marchand@redhat.com>, <dev@dpdk.org>",
        "Subject": "[PATCH v4 3/8] ethdev: use VXLAN protocol struct for flow matching",
        "Date": "Thu, 26 Jan 2023 13:17:54 +0000",
        "Message-ID": "<20230126131759.3887632-4-ferruh.yigit@amd.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20230126131759.3887632-1-ferruh.yigit@amd.com>",
        "References": "<20221025214410.715864-1-thomas@monjalon.net>\n <20230126131759.3887632-1-ferruh.yigit@amd.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.180.168.240]",
        "X-ClientProxiedBy": "SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com\n (10.181.40.145)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "BN8NAM11FT012:EE_|LV2PR12MB5918:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "e68595da-8786-4031-a261-08daff9fd6e3",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n U8QXSG31vDh7Z1aKstS7KWKDGhBDG3LmY2FMmc1hgYm5vwET0Hz8o9g8jBztlwzu93euVcVLTDkt/LnPdK3FyW0OyNRzwbPYSdPtqmojWJrGk4PXb0UJgJZGFcl0IOb/CDrIE1e8S6tSAl0LQmZ8G/S1iyDmc6xy5in567S+9GUbAzUZfFHXKFFHmtG3N4JdVBhmfsvUAcu7wivR38q+sEhOjD7nsCMEJCoaUAdWbDR4wewZDwOmchRoblFfUtlehQxbzDYQESOt2tCreW4CBz2ECFGkzUG2NjjboHPCuLO3t5Nmdp2Q5APz2saL2kLB1gWXTpGAvYSJ/McDgO15XfIqVRzsFjAV8sp231xhlsrdkBhtM2zNkBXFaLPpQrRfhPJTeNlLRIyKUZP2xIVT/j4vfl1IGoQpmjuKFqXSJn+2iXP9VTPoui2o5GxhBf7n773pXP8Ia9Rm1ixn+IovI+ABt/bzn2ibLB2EN2wHZZBU/+5Ga09l3w31PqB0fWNr23qP2luJZ8ZKH4GdsRzFBD/6JOs+BXVL9Z/WN+WAoD0LVvBFHgzNwE/D9ymmnXKo3WaNiTd9vfazAFdbgmKCN+9nzKPYauHmXd3D7F4uyj+pjQVdo/uAclGKmypYSGI1az1ee5uBoDqhxlZgw0t2W15XKXi/3wzuUjubbd9AkKVdqNHVYAgbiJUjgTbnigXQrj/yTN6njRExHPyCvjBaKAA5/VflJ8ech51F7LeBkmJn7b8N4dEpz2zDwz3AFZunTNtSmz+B79IsZeYF5vG82w==",
        "X-Forefront-Antispam-Report": "CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:;\n IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE;\n SFS:(13230025)(4636009)(39860400002)(376002)(346002)(396003)(136003)(451199018)(40470700004)(46966006)(36840700001)(70206006)(316002)(54906003)(110136005)(41300700001)(81166007)(356005)(8676002)(4326008)(70586007)(5660300002)(30864003)(7416002)(40460700003)(36756003)(86362001)(8936002)(44832011)(921005)(2906002)(40480700001)(36860700001)(82740400003)(1076003)(26005)(186003)(16526019)(478600001)(7696005)(426003)(83380400001)(6666004)(47076005)(82310400005)(336012)(2616005)(36900700001)(309714004);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "amd.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "26 Jan 2023 13:18:39.6003 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n e68595da-8786-4031-a261-08daff9fd6e3",
        "X-MS-Exchange-CrossTenant-Id": "3dd8961f-e488-4e60-8e11-a82d994e183d",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17];\n Helo=[SATLEXMB04.amd.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n BN8NAM11FT012.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "LV2PR12MB5918",
        "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": "From: Thomas Monjalon <thomas@monjalon.net>\n\nAs announced in the deprecation notice, flow item structures\nshould re-use the protocol header definitions from the directory lib/net/.\n\nIn the case of VXLAN-GPE, the protocol struct is added\nin an unnamed union, keeping old field names.\n\nThe VXLAN headers (including VXLAN-GPE) are used in apps and drivers\ninstead of the redundant fields in the flow items.\n\nSigned-off-by: Thomas Monjalon <thomas@monjalon.net>\n---\n app/test-flow-perf/actions_gen.c         |  2 +-\n app/test-flow-perf/items_gen.c           | 12 +++----\n app/test-pmd/cmdline_flow.c              | 10 +++---\n doc/guides/prog_guide/rte_flow.rst       | 11 ++-----\n doc/guides/rel_notes/deprecation.rst     |  1 -\n drivers/net/bnxt/bnxt_flow.c             | 12 ++++---\n drivers/net/bnxt/tf_ulp/ulp_rte_parser.c | 42 ++++++++++++------------\n drivers/net/hns3/hns3_flow.c             | 12 +++----\n drivers/net/i40e/i40e_flow.c             |  4 +--\n drivers/net/ice/ice_switch_filter.c      | 18 +++++-----\n drivers/net/ipn3ke/ipn3ke_flow.c         |  4 +--\n drivers/net/ixgbe/ixgbe_flow.c           | 18 +++++-----\n drivers/net/mlx5/mlx5_flow.c             | 16 ++++-----\n drivers/net/mlx5/mlx5_flow_dv.c          | 40 +++++++++++-----------\n drivers/net/mlx5/mlx5_flow_verbs.c       |  8 ++---\n drivers/net/sfc/sfc_flow.c               |  6 ++--\n drivers/net/sfc/sfc_mae.c                |  8 ++---\n lib/ethdev/rte_flow.h                    | 24 ++++++++++----\n 18 files changed, 126 insertions(+), 122 deletions(-)",
    "diff": "diff --git a/app/test-flow-perf/actions_gen.c b/app/test-flow-perf/actions_gen.c\nindex 63f05d87fa86..f1d59313256d 100644\n--- a/app/test-flow-perf/actions_gen.c\n+++ b/app/test-flow-perf/actions_gen.c\n@@ -874,7 +874,7 @@ add_vxlan_encap(struct rte_flow_action *actions,\n \titems[2].type = RTE_FLOW_ITEM_TYPE_UDP;\n \n \n-\titem_vxlan.vni[2] = 1;\n+\titem_vxlan.hdr.vni[2] = 1;\n \titems[3].spec = &item_vxlan;\n \titems[3].mask = &item_vxlan;\n \titems[3].type = RTE_FLOW_ITEM_TYPE_VXLAN;\ndiff --git a/app/test-flow-perf/items_gen.c b/app/test-flow-perf/items_gen.c\nindex b7f51030a119..a58245239ba1 100644\n--- a/app/test-flow-perf/items_gen.c\n+++ b/app/test-flow-perf/items_gen.c\n@@ -128,12 +128,12 @@ add_vxlan(struct rte_flow_item *items,\n \n \t/* Set standard vxlan vni */\n \tfor (i = 0; i < 3; i++) {\n-\t\tvxlan_specs[ti].vni[2 - i] = vni_value >> (i * 8);\n-\t\tvxlan_masks[ti].vni[2 - i] = 0xff;\n+\t\tvxlan_specs[ti].hdr.vni[2 - i] = vni_value >> (i * 8);\n+\t\tvxlan_masks[ti].hdr.vni[2 - i] = 0xff;\n \t}\n \n \t/* Standard vxlan flags */\n-\tvxlan_specs[ti].flags = 0x8;\n+\tvxlan_specs[ti].hdr.flags = 0x8;\n \n \titems[items_counter].type = RTE_FLOW_ITEM_TYPE_VXLAN;\n \titems[items_counter].spec = &vxlan_specs[ti];\n@@ -155,12 +155,12 @@ add_vxlan_gpe(struct rte_flow_item *items,\n \n \t/* Set vxlan-gpe vni */\n \tfor (i = 0; i < 3; i++) {\n-\t\tvxlan_gpe_specs[ti].vni[2 - i] = vni_value >> (i * 8);\n-\t\tvxlan_gpe_masks[ti].vni[2 - i] = 0xff;\n+\t\tvxlan_gpe_specs[ti].hdr.vni[2 - i] = vni_value >> (i * 8);\n+\t\tvxlan_gpe_masks[ti].hdr.vni[2 - i] = 0xff;\n \t}\n \n \t/* vxlan-gpe flags */\n-\tvxlan_gpe_specs[ti].flags = 0x0c;\n+\tvxlan_gpe_specs[ti].hdr.flags = 0x0c;\n \n \titems[items_counter].type = RTE_FLOW_ITEM_TYPE_VXLAN_GPE;\n \titems[items_counter].spec = &vxlan_gpe_specs[ti];\ndiff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c\nindex 694a7eb647c5..b904f8c3d45c 100644\n--- a/app/test-pmd/cmdline_flow.c\n+++ b/app/test-pmd/cmdline_flow.c\n@@ -3984,7 +3984,7 @@ static const struct token token_list[] = {\n \t\t.help = \"VXLAN identifier\",\n \t\t.next = NEXT(item_vxlan, NEXT_ENTRY(COMMON_UNSIGNED),\n \t\t\t     item_param),\n-\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_vxlan, vni)),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_vxlan, hdr.vni)),\n \t},\n \t[ITEM_VXLAN_LAST_RSVD] = {\n \t\t.name = \"last_rsvd\",\n@@ -3992,7 +3992,7 @@ static const struct token token_list[] = {\n \t\t.next = NEXT(item_vxlan, NEXT_ENTRY(COMMON_UNSIGNED),\n \t\t\t     item_param),\n \t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_vxlan,\n-\t\t\t\t\t     rsvd1)),\n+\t\t\t\t\t     hdr.rsvd1)),\n \t},\n \t[ITEM_E_TAG] = {\n \t\t.name = \"e_tag\",\n@@ -4210,7 +4210,7 @@ static const struct token token_list[] = {\n \t\t.next = NEXT(item_vxlan_gpe, NEXT_ENTRY(COMMON_UNSIGNED),\n \t\t\t     item_param),\n \t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_vxlan_gpe,\n-\t\t\t\t\t     vni)),\n+\t\t\t\t\t     hdr.vni)),\n \t},\n \t[ITEM_ARP_ETH_IPV4] = {\n \t\t.name = \"arp_eth_ipv4\",\n@@ -7500,7 +7500,7 @@ parse_setup_vxlan_encap_data(struct action_vxlan_encap_data *action_vxlan_encap_\n \t\t\t.src_port = vxlan_encap_conf.udp_src,\n \t\t\t.dst_port = vxlan_encap_conf.udp_dst,\n \t\t},\n-\t\t.item_vxlan.flags = 0,\n+\t\t.item_vxlan.hdr.flags = 0,\n \t};\n \tmemcpy(action_vxlan_encap_data->item_eth.hdr.dst_addr.addr_bytes,\n \t       vxlan_encap_conf.eth_dst, RTE_ETHER_ADDR_LEN);\n@@ -7554,7 +7554,7 @@ parse_setup_vxlan_encap_data(struct action_vxlan_encap_data *action_vxlan_encap_\n \t\t\t\t\t\t\t&ipv6_mask_tos;\n \t\t}\n \t}\n-\tmemcpy(action_vxlan_encap_data->item_vxlan.vni, vxlan_encap_conf.vni,\n+\tmemcpy(action_vxlan_encap_data->item_vxlan.hdr.vni, vxlan_encap_conf.vni,\n \t       RTE_DIM(vxlan_encap_conf.vni));\n \treturn 0;\n }\ndiff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst\nindex 27c3780c4f17..116722351486 100644\n--- a/doc/guides/prog_guide/rte_flow.rst\n+++ b/doc/guides/prog_guide/rte_flow.rst\n@@ -935,10 +935,7 @@ Item: ``VXLAN``\n \n Matches a VXLAN header (RFC 7348).\n \n-- ``flags``: normally 0x08 (I flag).\n-- ``rsvd0``: reserved, normally 0x000000.\n-- ``vni``: VXLAN network identifier.\n-- ``rsvd1``: reserved, normally 0x00.\n+- ``hdr``:  header definition (``rte_vxlan.h``).\n - Default ``mask`` matches VNI only.\n \n Item: ``E_TAG``\n@@ -1104,11 +1101,7 @@ Item: ``VXLAN-GPE``\n \n Matches a VXLAN-GPE header (draft-ietf-nvo3-vxlan-gpe-05).\n \n-- ``flags``: normally 0x0C (I and P flags).\n-- ``rsvd0``: reserved, normally 0x0000.\n-- ``protocol``: protocol type.\n-- ``vni``: VXLAN network identifier.\n-- ``rsvd1``: reserved, normally 0x00.\n+- ``hdr``:  header definition (``rte_vxlan.h``).\n - Default ``mask`` matches VNI only.\n \n Item: ``ARP_ETH_IPV4``\ndiff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst\nindex 53b10b51d81a..638051789d19 100644\n--- a/doc/guides/rel_notes/deprecation.rst\n+++ b/doc/guides/rel_notes/deprecation.rst\n@@ -85,7 +85,6 @@ Deprecation Notices\n   - ``rte_flow_item_pfcp``\n   - ``rte_flow_item_pppoe``\n   - ``rte_flow_item_pppoe_proto_id``\n-  - ``rte_flow_item_vxlan_gpe``\n \n * ethdev: Queue specific stats fields will be removed from ``struct rte_eth_stats``.\n   Mentioned fields are: ``q_ipackets``, ``q_opackets``, ``q_ibytes``, ``q_obytes``,\ndiff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c\nindex 8f660493402c..4a107e81e955 100644\n--- a/drivers/net/bnxt/bnxt_flow.c\n+++ b/drivers/net/bnxt/bnxt_flow.c\n@@ -563,9 +563,11 @@ bnxt_validate_and_parse_flow_type(const struct rte_flow_attr *attr,\n \t\t\t\tbreak;\n \t\t\t}\n \n-\t\t\tif (vxlan_spec->rsvd1 || vxlan_spec->rsvd0[0] ||\n-\t\t\t    vxlan_spec->rsvd0[1] || vxlan_spec->rsvd0[2] ||\n-\t\t\t    vxlan_spec->flags != 0x8) {\n+\t\t\tif ((vxlan_spec->hdr.rsvd0[0] != 0) ||\n+\t\t\t    (vxlan_spec->hdr.rsvd0[1] != 0) ||\n+\t\t\t    (vxlan_spec->hdr.rsvd0[2] != 0) ||\n+\t\t\t    (vxlan_spec->hdr.rsvd1 != 0) ||\n+\t\t\t    (vxlan_spec->hdr.flags != 8)) {\n \t\t\t\trte_flow_error_set(error,\n \t\t\t\t\t\t   EINVAL,\n \t\t\t\t\t\t   RTE_FLOW_ERROR_TYPE_ITEM,\n@@ -577,7 +579,7 @@ bnxt_validate_and_parse_flow_type(const struct rte_flow_attr *attr,\n \t\t\t/* Check if VNI is masked. */\n \t\t\tif (vxlan_mask != NULL) {\n \t\t\t\tvni_masked =\n-\t\t\t\t\t!!memcmp(vxlan_mask->vni, vni_mask,\n+\t\t\t\t\t!!memcmp(vxlan_mask->hdr.vni, vni_mask,\n \t\t\t\t\t\t RTE_DIM(vni_mask));\n \t\t\t\tif (vni_masked) {\n \t\t\t\t\trte_flow_error_set\n@@ -590,7 +592,7 @@ bnxt_validate_and_parse_flow_type(const struct rte_flow_attr *attr,\n \t\t\t\t}\n \n \t\t\t\trte_memcpy(((uint8_t *)&tenant_id_be + 1),\n-\t\t\t\t\t   vxlan_spec->vni, 3);\n+\t\t\t\t\t   vxlan_spec->hdr.vni, 3);\n \t\t\t\tfilter->vni =\n \t\t\t\t\trte_be_to_cpu_32(tenant_id_be);\n \t\t\t\tfilter->tunnel_type =\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\nindex 2928598ced55..80869b79c3fe 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\n@@ -1414,28 +1414,28 @@ ulp_rte_vxlan_hdr_handler(const struct rte_flow_item *item,\n \t * Copy the rte_flow_item for vxlan into hdr_field using vxlan\n \t * header fields\n \t */\n-\tsize = sizeof(((struct rte_flow_item_vxlan *)NULL)->flags);\n+\tsize = sizeof(((struct rte_flow_item_vxlan *)NULL)->hdr.flags);\n \tulp_rte_prsr_fld_mask(params, &idx, size,\n-\t\t\t      ulp_deference_struct(vxlan_spec, flags),\n-\t\t\t      ulp_deference_struct(vxlan_mask, flags),\n+\t\t\t      ulp_deference_struct(vxlan_spec, hdr.flags),\n+\t\t\t      ulp_deference_struct(vxlan_mask, hdr.flags),\n \t\t\t      ULP_PRSR_ACT_DEFAULT);\n \n-\tsize = sizeof(((struct rte_flow_item_vxlan *)NULL)->rsvd0);\n+\tsize = sizeof(((struct rte_flow_item_vxlan *)NULL)->hdr.rsvd0);\n \tulp_rte_prsr_fld_mask(params, &idx, size,\n-\t\t\t      ulp_deference_struct(vxlan_spec, rsvd0),\n-\t\t\t      ulp_deference_struct(vxlan_mask, rsvd0),\n+\t\t\t      ulp_deference_struct(vxlan_spec, hdr.rsvd0),\n+\t\t\t      ulp_deference_struct(vxlan_mask, hdr.rsvd0),\n \t\t\t      ULP_PRSR_ACT_DEFAULT);\n \n-\tsize = sizeof(((struct rte_flow_item_vxlan *)NULL)->vni);\n+\tsize = sizeof(((struct rte_flow_item_vxlan *)NULL)->hdr.vni);\n \tulp_rte_prsr_fld_mask(params, &idx, size,\n-\t\t\t      ulp_deference_struct(vxlan_spec, vni),\n-\t\t\t      ulp_deference_struct(vxlan_mask, vni),\n+\t\t\t      ulp_deference_struct(vxlan_spec, hdr.vni),\n+\t\t\t      ulp_deference_struct(vxlan_mask, hdr.vni),\n \t\t\t      ULP_PRSR_ACT_DEFAULT);\n \n-\tsize = sizeof(((struct rte_flow_item_vxlan *)NULL)->rsvd1);\n+\tsize = sizeof(((struct rte_flow_item_vxlan *)NULL)->hdr.rsvd1);\n \tulp_rte_prsr_fld_mask(params, &idx, size,\n-\t\t\t      ulp_deference_struct(vxlan_spec, rsvd1),\n-\t\t\t      ulp_deference_struct(vxlan_mask, rsvd1),\n+\t\t\t      ulp_deference_struct(vxlan_spec, hdr.rsvd1),\n+\t\t\t      ulp_deference_struct(vxlan_mask, hdr.rsvd1),\n \t\t\t      ULP_PRSR_ACT_DEFAULT);\n \n \t/* Update the hdr_bitmap with vxlan */\n@@ -1827,17 +1827,17 @@ ulp_rte_enc_vxlan_hdr_handler(struct ulp_rte_parser_params *params,\n \tuint32_t size;\n \n \tfield = &params->enc_field[BNXT_ULP_ENC_FIELD_VXLAN_FLAGS];\n-\tsize = sizeof(vxlan_spec->flags);\n-\tfield = ulp_rte_parser_fld_copy(field, &vxlan_spec->flags, size);\n+\tsize = sizeof(vxlan_spec->hdr.flags);\n+\tfield = ulp_rte_parser_fld_copy(field, &vxlan_spec->hdr.flags, size);\n \n-\tsize = sizeof(vxlan_spec->rsvd0);\n-\tfield = ulp_rte_parser_fld_copy(field, &vxlan_spec->rsvd0, size);\n+\tsize = sizeof(vxlan_spec->hdr.rsvd0);\n+\tfield = ulp_rte_parser_fld_copy(field, &vxlan_spec->hdr.rsvd0, size);\n \n-\tsize = sizeof(vxlan_spec->vni);\n-\tfield = ulp_rte_parser_fld_copy(field, &vxlan_spec->vni, size);\n+\tsize = sizeof(vxlan_spec->hdr.vni);\n+\tfield = ulp_rte_parser_fld_copy(field, &vxlan_spec->hdr.vni, size);\n \n-\tsize = sizeof(vxlan_spec->rsvd1);\n-\tfield = ulp_rte_parser_fld_copy(field, &vxlan_spec->rsvd1, size);\n+\tsize = sizeof(vxlan_spec->hdr.rsvd1);\n+\tfield = ulp_rte_parser_fld_copy(field, &vxlan_spec->hdr.rsvd1, size);\n \n \tULP_BITMAP_SET(params->enc_hdr_bitmap.bits, BNXT_ULP_HDR_BIT_T_VXLAN);\n }\n@@ -1989,7 +1989,7 @@ ulp_rte_vxlan_encap_act_handler(const struct rte_flow_action *action_item,\n \tvxlan_size = sizeof(struct rte_flow_item_vxlan);\n \t/* copy the vxlan details */\n \tmemcpy(&vxlan_spec, item->spec, vxlan_size);\n-\tvxlan_spec.flags = 0x08;\n+\tvxlan_spec.hdr.flags = 0x08;\n \tvxlan_size = tfp_cpu_to_be_32(vxlan_size);\n \tmemcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_TUN_SZ],\n \t       &vxlan_size, sizeof(uint32_t));\ndiff --git a/drivers/net/hns3/hns3_flow.c b/drivers/net/hns3/hns3_flow.c\nindex ef1832982dee..e88f9b7e452b 100644\n--- a/drivers/net/hns3/hns3_flow.c\n+++ b/drivers/net/hns3/hns3_flow.c\n@@ -933,23 +933,23 @@ hns3_parse_vxlan(const struct rte_flow_item *item, struct hns3_fdir_rule *rule,\n \tvxlan_mask = item->mask;\n \tvxlan_spec = item->spec;\n \n-\tif (vxlan_mask->flags)\n+\tif (vxlan_mask->hdr.flags)\n \t\treturn rte_flow_error_set(error, EINVAL,\n \t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ITEM_MASK, item,\n \t\t\t\t\t  \"Flags is not supported in VxLAN\");\n \n \t/* VNI must be totally masked or not. */\n-\tif (memcmp(vxlan_mask->vni, full_mask, VNI_OR_TNI_LEN) &&\n-\t    memcmp(vxlan_mask->vni, zero_mask, VNI_OR_TNI_LEN))\n+\tif (memcmp(vxlan_mask->hdr.vni, full_mask, VNI_OR_TNI_LEN) &&\n+\t    memcmp(vxlan_mask->hdr.vni, zero_mask, VNI_OR_TNI_LEN))\n \t\treturn rte_flow_error_set(error, EINVAL,\n \t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ITEM_MASK, item,\n \t\t\t\t\t  \"VNI must be totally masked or not in VxLAN\");\n-\tif (vxlan_mask->vni[0]) {\n+\tif (vxlan_mask->hdr.vni[0]) {\n \t\thns3_set_bit(rule->input_set, OUTER_TUN_VNI, 1);\n-\t\tmemcpy(rule->key_conf.mask.outer_tun_vni, vxlan_mask->vni,\n+\t\tmemcpy(rule->key_conf.mask.outer_tun_vni, vxlan_mask->hdr.vni,\n \t\t\t   VNI_OR_TNI_LEN);\n \t}\n-\tmemcpy(rule->key_conf.spec.outer_tun_vni, vxlan_spec->vni,\n+\tmemcpy(rule->key_conf.spec.outer_tun_vni, vxlan_spec->hdr.vni,\n \t\t   VNI_OR_TNI_LEN);\n \treturn 0;\n }\ndiff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c\nindex 0acbd5a061e0..2855b14fe679 100644\n--- a/drivers/net/i40e/i40e_flow.c\n+++ b/drivers/net/i40e/i40e_flow.c\n@@ -3009,7 +3009,7 @@ i40e_flow_parse_vxlan_pattern(__rte_unused struct rte_eth_dev *dev,\n \t\t\t/* Check if VNI is masked. */\n \t\t\tif (vxlan_spec && vxlan_mask) {\n \t\t\t\tis_vni_masked =\n-\t\t\t\t\t!!memcmp(vxlan_mask->vni, vni_mask,\n+\t\t\t\t\t!!memcmp(vxlan_mask->hdr.vni, vni_mask,\n \t\t\t\t\t\t RTE_DIM(vni_mask));\n \t\t\t\tif (is_vni_masked) {\n \t\t\t\t\trte_flow_error_set(error, EINVAL,\n@@ -3020,7 +3020,7 @@ i40e_flow_parse_vxlan_pattern(__rte_unused struct rte_eth_dev *dev,\n \t\t\t\t}\n \n \t\t\t\trte_memcpy(((uint8_t *)&tenant_id_be + 1),\n-\t\t\t\t\t   vxlan_spec->vni, 3);\n+\t\t\t\t\t   vxlan_spec->hdr.vni, 3);\n \t\t\t\tfilter->tenant_id =\n \t\t\t\t\trte_be_to_cpu_32(tenant_id_be);\n \t\t\t\tfilter_type |= RTE_ETH_TUNNEL_FILTER_TENID;\ndiff --git a/drivers/net/ice/ice_switch_filter.c b/drivers/net/ice/ice_switch_filter.c\nindex d84061340e6c..7cb20fa0b4f8 100644\n--- a/drivers/net/ice/ice_switch_filter.c\n+++ b/drivers/net/ice/ice_switch_filter.c\n@@ -990,17 +990,17 @@ ice_switch_parse_pattern(const struct rte_flow_item pattern[],\n \t\t\tinput = &inner_input_set;\n \t\t\tif (vxlan_spec && vxlan_mask) {\n \t\t\t\tlist[t].type = ICE_VXLAN;\n-\t\t\t\tif (vxlan_mask->vni[0] ||\n-\t\t\t\t\tvxlan_mask->vni[1] ||\n-\t\t\t\t\tvxlan_mask->vni[2]) {\n+\t\t\t\tif (vxlan_mask->hdr.vni[0] ||\n+\t\t\t\t\tvxlan_mask->hdr.vni[1] ||\n+\t\t\t\t\tvxlan_mask->hdr.vni[2]) {\n \t\t\t\t\tlist[t].h_u.tnl_hdr.vni =\n-\t\t\t\t\t\t(vxlan_spec->vni[2] << 16) |\n-\t\t\t\t\t\t(vxlan_spec->vni[1] << 8) |\n-\t\t\t\t\t\tvxlan_spec->vni[0];\n+\t\t\t\t\t\t(vxlan_spec->hdr.vni[2] << 16) |\n+\t\t\t\t\t\t(vxlan_spec->hdr.vni[1] << 8) |\n+\t\t\t\t\t\tvxlan_spec->hdr.vni[0];\n \t\t\t\t\tlist[t].m_u.tnl_hdr.vni =\n-\t\t\t\t\t\t(vxlan_mask->vni[2] << 16) |\n-\t\t\t\t\t\t(vxlan_mask->vni[1] << 8) |\n-\t\t\t\t\t\tvxlan_mask->vni[0];\n+\t\t\t\t\t\t(vxlan_mask->hdr.vni[2] << 16) |\n+\t\t\t\t\t\t(vxlan_mask->hdr.vni[1] << 8) |\n+\t\t\t\t\t\tvxlan_mask->hdr.vni[0];\n \t\t\t\t\t*input |= ICE_INSET_VXLAN_VNI;\n \t\t\t\t\tinput_set_byte += 2;\n \t\t\t\t}\ndiff --git a/drivers/net/ipn3ke/ipn3ke_flow.c b/drivers/net/ipn3ke/ipn3ke_flow.c\nindex ee56d0f43d93..d20a29b9a2d6 100644\n--- a/drivers/net/ipn3ke/ipn3ke_flow.c\n+++ b/drivers/net/ipn3ke/ipn3ke_flow.c\n@@ -108,7 +108,7 @@ ipn3ke_pattern_vxlan(const struct rte_flow_item patterns[],\n \t\tcase RTE_FLOW_ITEM_TYPE_VXLAN:\n \t\t\tvxlan = item->spec;\n \n-\t\t\trte_memcpy(&parser->key[6], vxlan->vni, 3);\n+\t\t\trte_memcpy(&parser->key[6], vxlan->hdr.vni, 3);\n \t\t\tbreak;\n \n \t\tdefault:\n@@ -576,7 +576,7 @@ ipn3ke_pattern_vxlan_ip_udp(const struct rte_flow_item patterns[],\n \t\tcase RTE_FLOW_ITEM_TYPE_VXLAN:\n \t\t\tvxlan = item->spec;\n \n-\t\t\trte_memcpy(&parser->key[0], vxlan->vni, 3);\n+\t\t\trte_memcpy(&parser->key[0], vxlan->hdr.vni, 3);\n \t\t\tbreak;\n \n \t\tcase RTE_FLOW_ITEM_TYPE_IPV4:\ndiff --git a/drivers/net/ixgbe/ixgbe_flow.c b/drivers/net/ixgbe/ixgbe_flow.c\nindex a11da3dc8beb..fe710b79008d 100644\n--- a/drivers/net/ixgbe/ixgbe_flow.c\n+++ b/drivers/net/ixgbe/ixgbe_flow.c\n@@ -2481,7 +2481,7 @@ ixgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,\n \t\trule->mask.tunnel_type_mask = 1;\n \n \t\tvxlan_mask = item->mask;\n-\t\tif (vxlan_mask->flags) {\n+\t\tif (vxlan_mask->hdr.flags) {\n \t\t\tmemset(rule, 0, sizeof(struct ixgbe_fdir_rule));\n \t\t\trte_flow_error_set(error, EINVAL,\n \t\t\t\tRTE_FLOW_ERROR_TYPE_ITEM,\n@@ -2489,11 +2489,11 @@ ixgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,\n \t\t\treturn -rte_errno;\n \t\t}\n \t\t/* VNI must be totally masked or not. */\n-\t\tif ((vxlan_mask->vni[0] || vxlan_mask->vni[1] ||\n-\t\t\tvxlan_mask->vni[2]) &&\n-\t\t\t((vxlan_mask->vni[0] != 0xFF) ||\n-\t\t\t(vxlan_mask->vni[1] != 0xFF) ||\n-\t\t\t\t(vxlan_mask->vni[2] != 0xFF))) {\n+\t\tif ((vxlan_mask->hdr.vni[0] || vxlan_mask->hdr.vni[1] ||\n+\t\t\tvxlan_mask->hdr.vni[2]) &&\n+\t\t\t((vxlan_mask->hdr.vni[0] != 0xFF) ||\n+\t\t\t(vxlan_mask->hdr.vni[1] != 0xFF) ||\n+\t\t\t\t(vxlan_mask->hdr.vni[2] != 0xFF))) {\n \t\t\tmemset(rule, 0, sizeof(struct ixgbe_fdir_rule));\n \t\t\trte_flow_error_set(error, EINVAL,\n \t\t\t\tRTE_FLOW_ERROR_TYPE_ITEM,\n@@ -2501,15 +2501,15 @@ ixgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,\n \t\t\treturn -rte_errno;\n \t\t}\n \n-\t\trte_memcpy(&rule->mask.tunnel_id_mask, vxlan_mask->vni,\n-\t\t\tRTE_DIM(vxlan_mask->vni));\n+\t\trte_memcpy(&rule->mask.tunnel_id_mask, vxlan_mask->hdr.vni,\n+\t\t\tRTE_DIM(vxlan_mask->hdr.vni));\n \n \t\tif (item->spec) {\n \t\t\trule->b_spec = TRUE;\n \t\t\tvxlan_spec = item->spec;\n \t\t\trte_memcpy(((uint8_t *)\n \t\t\t\t&rule->ixgbe_fdir.formatted.tni_vni),\n-\t\t\t\tvxlan_spec->vni, RTE_DIM(vxlan_spec->vni));\n+\t\t\t\tvxlan_spec->hdr.vni, RTE_DIM(vxlan_spec->hdr.vni));\n \t\t}\n \t}\n \ndiff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c\nindex 2512d6b52db9..ff08a629e2c6 100644\n--- a/drivers/net/mlx5/mlx5_flow.c\n+++ b/drivers/net/mlx5/mlx5_flow.c\n@@ -333,7 +333,7 @@ mlx5_flow_expand_rss_item_complete(const struct rte_flow_item *item)\n \t\tret = mlx5_ethertype_to_item_type(spec, mask, true);\n \t\tbreak;\n \tcase RTE_FLOW_ITEM_TYPE_VXLAN_GPE:\n-\t\tMLX5_XSET_ITEM_MASK_SPEC(vxlan_gpe, protocol);\n+\t\tMLX5_XSET_ITEM_MASK_SPEC(vxlan_gpe, hdr.proto);\n \t\tret = mlx5_nsh_proto_to_item_type(spec, mask);\n \t\tbreak;\n \tdefault:\n@@ -2919,8 +2919,8 @@ mlx5_flow_validate_item_vxlan(struct rte_eth_dev *dev,\n \t\tuint8_t vni[4];\n \t} id = { .vlan_id = 0, };\n \tconst struct rte_flow_item_vxlan nic_mask = {\n-\t\t.vni = \"\\xff\\xff\\xff\",\n-\t\t.rsvd1 = 0xff,\n+\t\t.hdr.vni = \"\\xff\\xff\\xff\",\n+\t\t.hdr.rsvd1 = 0xff,\n \t};\n \tconst struct rte_flow_item_vxlan *valid_mask;\n \n@@ -2959,8 +2959,8 @@ mlx5_flow_validate_item_vxlan(struct rte_eth_dev *dev,\n \tif (ret < 0)\n \t\treturn ret;\n \tif (spec) {\n-\t\tmemcpy(&id.vni[1], spec->vni, 3);\n-\t\tmemcpy(&id.vni[1], mask->vni, 3);\n+\t\tmemcpy(&id.vni[1], spec->hdr.vni, 3);\n+\t\tmemcpy(&id.vni[1], mask->hdr.vni, 3);\n \t}\n \tif (!(item_flags & MLX5_FLOW_LAYER_OUTER))\n \t\treturn rte_flow_error_set(error, ENOTSUP,\n@@ -3030,14 +3030,14 @@ mlx5_flow_validate_item_vxlan_gpe(const struct rte_flow_item *item,\n \tif (ret < 0)\n \t\treturn ret;\n \tif (spec) {\n-\t\tif (spec->protocol)\n+\t\tif (spec->hdr.proto)\n \t\t\treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ITEM,\n \t\t\t\t\t\t  item,\n \t\t\t\t\t\t  \"VxLAN-GPE protocol\"\n \t\t\t\t\t\t  \" not supported\");\n-\t\tmemcpy(&id.vni[1], spec->vni, 3);\n-\t\tmemcpy(&id.vni[1], mask->vni, 3);\n+\t\tmemcpy(&id.vni[1], spec->hdr.vni, 3);\n+\t\tmemcpy(&id.vni[1], mask->hdr.vni, 3);\n \t}\n \tif (!(item_flags & MLX5_FLOW_LAYER_OUTER))\n \t\treturn rte_flow_error_set(error, ENOTSUP,\ndiff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c\nindex ff915183b7cc..261c60a5c33a 100644\n--- a/drivers/net/mlx5/mlx5_flow_dv.c\n+++ b/drivers/net/mlx5/mlx5_flow_dv.c\n@@ -9235,8 +9235,8 @@ flow_dv_translate_item_vxlan(struct rte_eth_dev *dev,\n \tint i;\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \tconst struct rte_flow_item_vxlan nic_mask = {\n-\t\t.vni = \"\\xff\\xff\\xff\",\n-\t\t.rsvd1 = 0xff,\n+\t\t.hdr.vni = \"\\xff\\xff\\xff\",\n+\t\t.hdr.rsvd1 = 0xff,\n \t};\n \n \tmisc5_v = MLX5_ADDR_OF(fte_match_param, key, misc_parameters_5);\n@@ -9274,29 +9274,29 @@ flow_dv_translate_item_vxlan(struct rte_eth_dev *dev,\n \t    ((attr->group || (attr->transfer && priv->fdb_def_rule)) &&\n \t    !priv->sh->misc5_cap)) {\n \t\tmisc_v = MLX5_ADDR_OF(fte_match_param, key, misc_parameters);\n-\t\tsize = sizeof(vxlan_m->vni);\n+\t\tsize = sizeof(vxlan_m->hdr.vni);\n \t\tvni_v = MLX5_ADDR_OF(fte_match_set_misc, misc_v, vxlan_vni);\n \t\tfor (i = 0; i < size; ++i)\n-\t\t\tvni_v[i] = vxlan_m->vni[i] & vxlan_v->vni[i];\n+\t\t\tvni_v[i] = vxlan_m->hdr.vni[i] & vxlan_v->hdr.vni[i];\n \t\treturn;\n \t}\n \ttunnel_header_v = (uint32_t *)MLX5_ADDR_OF(fte_match_set_misc5,\n \t\t\t\t\t\t   misc5_v,\n \t\t\t\t\t\t   tunnel_header_1);\n-\ttunnel_v = (vxlan_v->vni[0] & vxlan_m->vni[0]) |\n-\t\t   (vxlan_v->vni[1] & vxlan_m->vni[1]) << 8 |\n-\t\t   (vxlan_v->vni[2] & vxlan_m->vni[2]) << 16;\n+\ttunnel_v = (vxlan_v->hdr.vni[0] & vxlan_m->hdr.vni[0]) |\n+\t\t   (vxlan_v->hdr.vni[1] & vxlan_m->hdr.vni[1]) << 8 |\n+\t\t   (vxlan_v->hdr.vni[2] & vxlan_m->hdr.vni[2]) << 16;\n \t*tunnel_header_v = tunnel_v;\n \tif (key_type == MLX5_SET_MATCHER_SW_M) {\n-\t\ttunnel_v = (vxlan_vv->vni[0] & vxlan_m->vni[0]) |\n-\t\t\t   (vxlan_vv->vni[1] & vxlan_m->vni[1]) << 8 |\n-\t\t\t   (vxlan_vv->vni[2] & vxlan_m->vni[2]) << 16;\n+\t\ttunnel_v = (vxlan_vv->hdr.vni[0] & vxlan_m->hdr.vni[0]) |\n+\t\t\t   (vxlan_vv->hdr.vni[1] & vxlan_m->hdr.vni[1]) << 8 |\n+\t\t\t   (vxlan_vv->hdr.vni[2] & vxlan_m->hdr.vni[2]) << 16;\n \t\tif (!tunnel_v)\n \t\t\t*tunnel_header_v = 0x0;\n-\t\tif (vxlan_vv->rsvd1 & vxlan_m->rsvd1)\n-\t\t\t*tunnel_header_v |= vxlan_v->rsvd1 << 24;\n+\t\tif (vxlan_vv->hdr.rsvd1 & vxlan_m->hdr.rsvd1)\n+\t\t\t*tunnel_header_v |= vxlan_v->hdr.rsvd1 << 24;\n \t} else {\n-\t\t*tunnel_header_v |= (vxlan_v->rsvd1 & vxlan_m->rsvd1) << 24;\n+\t\t*tunnel_header_v |= (vxlan_v->hdr.rsvd1 & vxlan_m->hdr.rsvd1) << 24;\n \t}\n }\n \n@@ -9327,7 +9327,7 @@ flow_dv_translate_item_vxlan_gpe(void *key, const struct rte_flow_item *item,\n \t\tMLX5_ADDR_OF(fte_match_param, key, misc_parameters_3);\n \tchar *vni_v =\n \t\tMLX5_ADDR_OF(fte_match_set_misc3, misc_v, outer_vxlan_gpe_vni);\n-\tint i, size = sizeof(vxlan_m->vni);\n+\tint i, size = sizeof(vxlan_m->hdr.vni);\n \tuint8_t flags_m = 0xff;\n \tuint8_t flags_v = 0xc;\n \tuint8_t m_protocol, v_protocol;\n@@ -9352,15 +9352,15 @@ flow_dv_translate_item_vxlan_gpe(void *key, const struct rte_flow_item *item,\n \telse if (key_type == MLX5_SET_MATCHER_HS_V)\n \t\tvxlan_m = vxlan_v;\n \tfor (i = 0; i < size; ++i)\n-\t\tvni_v[i] = vxlan_m->vni[i] & vxlan_v->vni[i];\n-\tif (vxlan_m->flags) {\n-\t\tflags_m = vxlan_m->flags;\n-\t\tflags_v = vxlan_v->flags;\n+\t\tvni_v[i] = vxlan_m->hdr.vni[i] & vxlan_v->hdr.vni[i];\n+\tif (vxlan_m->hdr.flags) {\n+\t\tflags_m = vxlan_m->hdr.flags;\n+\t\tflags_v = vxlan_v->hdr.flags;\n \t}\n \tMLX5_SET(fte_match_set_misc3, misc_v, outer_vxlan_gpe_flags,\n \t\t flags_m & flags_v);\n-\tm_protocol = vxlan_m->protocol;\n-\tv_protocol = vxlan_v->protocol;\n+\tm_protocol = vxlan_m->hdr.protocol;\n+\tv_protocol = vxlan_v->hdr.protocol;\n \tif (!m_protocol) {\n \t\t/* Force next protocol to ensure next headers parsing. */\n \t\tif (pattern_flags & MLX5_FLOW_LAYER_INNER_L2)\ndiff --git a/drivers/net/mlx5/mlx5_flow_verbs.c b/drivers/net/mlx5/mlx5_flow_verbs.c\nindex 1902b97ec6d4..4ef4f3044515 100644\n--- a/drivers/net/mlx5/mlx5_flow_verbs.c\n+++ b/drivers/net/mlx5/mlx5_flow_verbs.c\n@@ -765,9 +765,9 @@ flow_verbs_translate_item_vxlan(struct mlx5_flow *dev_flow,\n \tif (!mask)\n \t\tmask = &rte_flow_item_vxlan_mask;\n \tif (spec) {\n-\t\tmemcpy(&id.vni[1], spec->vni, 3);\n+\t\tmemcpy(&id.vni[1], spec->hdr.vni, 3);\n \t\tvxlan.val.tunnel_id = id.vlan_id;\n-\t\tmemcpy(&id.vni[1], mask->vni, 3);\n+\t\tmemcpy(&id.vni[1], mask->hdr.vni, 3);\n \t\tvxlan.mask.tunnel_id = id.vlan_id;\n \t\t/* Remove unwanted bits from values. */\n \t\tvxlan.val.tunnel_id &= vxlan.mask.tunnel_id;\n@@ -807,9 +807,9 @@ flow_verbs_translate_item_vxlan_gpe(struct mlx5_flow *dev_flow,\n \tif (!mask)\n \t\tmask = &rte_flow_item_vxlan_gpe_mask;\n \tif (spec) {\n-\t\tmemcpy(&id.vni[1], spec->vni, 3);\n+\t\tmemcpy(&id.vni[1], spec->hdr.vni, 3);\n \t\tvxlan_gpe.val.tunnel_id = id.vlan_id;\n-\t\tmemcpy(&id.vni[1], mask->vni, 3);\n+\t\tmemcpy(&id.vni[1], mask->hdr.vni, 3);\n \t\tvxlan_gpe.mask.tunnel_id = id.vlan_id;\n \t\t/* Remove unwanted bits from values. */\n \t\tvxlan_gpe.val.tunnel_id &= vxlan_gpe.mask.tunnel_id;\ndiff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c\nindex f098edc6eb33..fe1f5ba55f86 100644\n--- a/drivers/net/sfc/sfc_flow.c\n+++ b/drivers/net/sfc/sfc_flow.c\n@@ -921,7 +921,7 @@ sfc_flow_parse_vxlan(const struct rte_flow_item *item,\n \tconst struct rte_flow_item_vxlan *spec = NULL;\n \tconst struct rte_flow_item_vxlan *mask = NULL;\n \tconst struct rte_flow_item_vxlan supp_mask = {\n-\t\t.vni = { 0xff, 0xff, 0xff }\n+\t\t.hdr.vni = { 0xff, 0xff, 0xff }\n \t};\n \n \trc = sfc_flow_parse_init(item,\n@@ -945,8 +945,8 @@ sfc_flow_parse_vxlan(const struct rte_flow_item *item,\n \tif (spec == NULL)\n \t\treturn 0;\n \n-\trc = sfc_flow_set_efx_spec_vni_or_vsid(efx_spec, spec->vni,\n-\t\t\t\t\t       mask->vni, item, error);\n+\trc = sfc_flow_set_efx_spec_vni_or_vsid(efx_spec, spec->hdr.vni,\n+\t\t\t\t\t       mask->hdr.vni, item, error);\n \n \treturn rc;\n }\ndiff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c\nindex 710d04be13af..aab697b204c2 100644\n--- a/drivers/net/sfc/sfc_mae.c\n+++ b/drivers/net/sfc/sfc_mae.c\n@@ -2223,8 +2223,8 @@ static const struct sfc_mae_field_locator flocs_tunnel[] = {\n \t\t * The size and offset values are relevant\n \t\t * for Geneve and NVGRE, too.\n \t\t */\n-\t\t.size = RTE_SIZEOF_FIELD(struct rte_flow_item_vxlan, vni),\n-\t\t.ofst = offsetof(struct rte_flow_item_vxlan, vni),\n+\t\t.size = RTE_SIZEOF_FIELD(struct rte_flow_item_vxlan, hdr.vni),\n+\t\t.ofst = offsetof(struct rte_flow_item_vxlan, hdr.vni),\n \t},\n };\n \n@@ -2359,10 +2359,10 @@ sfc_mae_rule_parse_item_tunnel(const struct rte_flow_item *item,\n \t * The extra byte is 0 both in the mask and in the value.\n \t */\n \tvxp = (const struct rte_flow_item_vxlan *)spec;\n-\tmemcpy(vnet_id_v + 1, &vxp->vni, sizeof(vxp->vni));\n+\tmemcpy(vnet_id_v + 1, &vxp->hdr.vni, sizeof(vxp->hdr.vni));\n \n \tvxp = (const struct rte_flow_item_vxlan *)mask;\n-\tmemcpy(vnet_id_m + 1, &vxp->vni, sizeof(vxp->vni));\n+\tmemcpy(vnet_id_m + 1, &vxp->hdr.vni, sizeof(vxp->hdr.vni));\n \n \trc = efx_mae_match_spec_field_set(ctx_mae->match_spec,\n \t\t\t\t\t  EFX_MAE_FIELD_ENC_VNET_ID_BE,\ndiff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h\nindex b60987db4b4f..e2364823d622 100644\n--- a/lib/ethdev/rte_flow.h\n+++ b/lib/ethdev/rte_flow.h\n@@ -988,7 +988,7 @@ struct rte_flow_item_vxlan {\n /** Default mask for RTE_FLOW_ITEM_TYPE_VXLAN. */\n #ifndef __cplusplus\n static const struct rte_flow_item_vxlan rte_flow_item_vxlan_mask = {\n-\t.hdr.vx_vni = RTE_BE32(0xffffff00), /* (0xffffff << 8) */\n+\t.hdr.vni = \"\\xff\\xff\\xff\",\n };\n #endif\n \n@@ -1205,18 +1205,28 @@ static const struct rte_flow_item_geneve rte_flow_item_geneve_mask = {\n  *\n  * Matches a VXLAN-GPE header.\n  */\n+RTE_STD_C11\n struct rte_flow_item_vxlan_gpe {\n-\tuint8_t flags; /**< Normally 0x0c (I and P flags). */\n-\tuint8_t rsvd0[2]; /**< Reserved, normally 0x0000. */\n-\tuint8_t protocol; /**< Protocol type. */\n-\tuint8_t vni[3]; /**< VXLAN identifier. */\n-\tuint8_t rsvd1; /**< Reserved, normally 0x00. */\n+\tunion {\n+\t\tstruct {\n+\t\t\t/*\n+\t\t\t * These are old fields kept for compatibility.\n+\t\t\t * Please prefer hdr field below.\n+\t\t\t */\n+\t\t\tuint8_t flags; /**< Normally 0x0c (I and P flags). */\n+\t\t\tuint8_t rsvd0[2]; /**< Reserved, normally 0x0000. */\n+\t\t\tuint8_t protocol; /**< Protocol type. */\n+\t\t\tuint8_t vni[3]; /**< VXLAN identifier. */\n+\t\t\tuint8_t rsvd1; /**< Reserved, normally 0x00. */\n+\t\t};\n+\t\tstruct rte_vxlan_gpe_hdr hdr;\n+\t};\n };\n \n /** Default mask for RTE_FLOW_ITEM_TYPE_VXLAN_GPE. */\n #ifndef __cplusplus\n static const struct rte_flow_item_vxlan_gpe rte_flow_item_vxlan_gpe_mask = {\n-\t.vni = \"\\xff\\xff\\xff\",\n+\t.hdr.vni = \"\\xff\\xff\\xff\",\n };\n #endif\n \n",
    "prefixes": [
        "v4",
        "3/8"
    ]
}