get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 123043,
    "url": "http://patches.dpdk.org/api/patches/123043/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230203164854.602595-5-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": "<20230203164854.602595-5-ferruh.yigit@amd.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230203164854.602595-5-ferruh.yigit@amd.com",
    "date": "2023-02-03T16:48:51",
    "name": "[v7,4/7] ethdev: use GTP protocol struct for flow matching",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "649617e6b24f1e9b50fdc208da323a776943b614",
    "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/20230203164854.602595-5-ferruh.yigit@amd.com/mbox/",
    "series": [
        {
            "id": 26790,
            "url": "http://patches.dpdk.org/api/series/26790/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=26790",
            "date": "2023-02-03T16:48:47",
            "name": "start cleanup of rte_flow_item_*",
            "version": 7,
            "mbox": "http://patches.dpdk.org/series/26790/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/123043/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/123043/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 D56BA41BBE;\n\tFri,  3 Feb 2023 17:49:35 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id F072142D32;\n\tFri,  3 Feb 2023 17:49:29 +0100 (CET)",
            "from NAM04-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam04on2087.outbound.protection.outlook.com [40.107.101.87])\n by mails.dpdk.org (Postfix) with ESMTP id BAADE42D30\n for <dev@dpdk.org>; Fri,  3 Feb 2023 17:49:27 +0100 (CET)",
            "from DS7PR03CA0050.namprd03.prod.outlook.com (2603:10b6:5:3b5::25)\n by CH2PR12MB5001.namprd12.prod.outlook.com (2603:10b6:610:61::18) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.27; Fri, 3 Feb\n 2023 16:49:25 +0000",
            "from DS1PEPF0000E658.namprd02.prod.outlook.com\n (2603:10b6:5:3b5:cafe::7d) by DS7PR03CA0050.outlook.office365.com\n (2603:10b6:5:3b5::25) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.31 via Frontend\n Transport; Fri, 3 Feb 2023 16:49:25 +0000",
            "from SATLEXMB04.amd.com (165.204.84.17) by\n DS1PEPF0000E658.mail.protection.outlook.com (10.167.18.70) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n 15.20.6064.21 via Frontend Transport; Fri, 3 Feb 2023 16:49:24 +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; Fri, 3 Feb\n 2023 10:49:23 -0600"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=NnSb+a1jEy7Ovz+7zWYpoGZmBA5lUfMKE8I7886zwICUS5fsllCDJEG4sPi//S37B/J44msKUMs2uqkD9JM114GRfbPqDpPg6Sdj31bzFa9EHEUwc5eVOqMMmgAc7p2wDRAz+K3Q2FK0r4qwwErSgCrD/QYHoB0L+9/TUd7v3ajB39XEuqT5doB7FJh9wAmRNz1U2q+mUjMUOVYZXAV7lvZuON3J07h6J4FPdPJL5qkTLzpqJj5yifvWqu54/fgW2PJI+qw+ed6hFH72Jqo9z9VAEAVuAT5PrX9EXsAcUxLTMtijYx4qXtGRcu1dxv3SGkl4XCqyFsL6ujhBu8SUeg==",
        "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=K4TmFFabRhdcz6plccBP9RSQo8RvH/f8rScPjqVe3iE=;\n b=MWsep1NDOEaCvb7cCzzBWMGH6GAczw7aa5I974yEd1BmLzz82WkJW6AWK3Pd7DZ4g7Noxog5pnOurR7l+mlaWE1aTFU+oUhnlnMEB7mYYaig8oX91TIvAqWVZNO5ztPlvcxW+za3Rw4wmNwRfs6BVIe9iJqyHLC/CmK47UcVM8lQIejFCAelToY1u5Noh+Th0yvchRtfwx+LL4Fkio86pOBrtnLAPuL8clT2vMp/dUZRoOFGqTIyYECR3t66UCICsR/ETX8aQQUsOtMugzKgDFRjdzcC0y/a/W9Qd2GM96Ildtk+vh4gewdQTx9/Z01qRza6Vr/eECUhdTg05BzpNQ==",
        "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=K4TmFFabRhdcz6plccBP9RSQo8RvH/f8rScPjqVe3iE=;\n b=SLKz4/UNtYzHy2Z4Hdz8/uMh2ElwkDx8wqjto6btIHdATsCenGaqd0fMPhiXI8AT4OXGXX+Hp2/kjTh7KYO3tXaTTmLSJMrAGQTiHiN18126bQP0XP3lSvmGomjz3OhS4misn3+TLHgZXmaEAC7de/Qtas51HIriBWns3Kx0IIo=",
        "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>, Beilei Xing <beilei.xing@intel.com>, Jingjing\n Wu <jingjing.wu@intel.com>, Qiming Yang <qiming.yang@intel.com>, Qi Zhang\n <qi.z.zhang@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 v7 4/7] ethdev: use GTP protocol struct for flow matching",
        "Date": "Fri, 3 Feb 2023 16:48:51 +0000",
        "Message-ID": "<20230203164854.602595-5-ferruh.yigit@amd.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20230203164854.602595-1-ferruh.yigit@amd.com>",
        "References": "<20221025214410.715864-1-thomas@monjalon.net>\n <20230203164854.602595-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": "DS1PEPF0000E658:EE_|CH2PR12MB5001:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "223f1f9a-bd10-4bdb-7444-08db06069b65",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n vfn3VoDL/WIDJBuMoqLeyS8yGQvk6MxOP52uE608hj7IkukGlDn1iRzW8rQd4IwxvSRxpKcauV5BzQdH5eCvAUCDpCqHhdN+KnRWF7FrhifAEd9m2PT1TxoEbcIybZFMi2s5SLOmnksZZDTLndotgSSQpwB8XJ3EOTuwsh3s0VAIULRernI94bebcFBLEHvUNYNhrdfbOx/Z7X4iYp84j3xYjY2DWfWlRPIrYrjTqyFZUkEqPT9dw/ji+dlahIC2wK+BMnH/aeMbcVm68fUivTtZYrMeYTT4Kvfc2msvgmIlcYxklvFern6o35ieAxVkpDgsGx35yq7e5smgeRqu0n2VYFIBVJYDs95k9yd700qe4HzNthmlBqMxZR5rGrZqAaQNvUjL7yKtzPk5J8ddtAkamhIzACQQ7LHpH1kk1DotZAwoGMURFLVEr0VhydqzK2azBuV5sZVbXejEPPL1LRn2MhcNeOd2CRUqkwrCXOH5rle8l4XEoyiTWzL+/50JK+HPiJJawY2ZwM0r6B/SFWgFvv8PlyBWHpcv/e2HNSCjzG0c4c40ZE2QY7uL/fUuR/HWlTN+sXEbYcjEXFLcplOEXKpH3KRo3izzlhNoxzKkG7wqppI0GGdG8zC14cwS7RIZFxJE5DqsxmT4GMi+M/QyahSWburm7jvLDNdkfbbCjGldwcrTHHjNpNR+UekaZV0a1UMOolNhVfBYSZR6uU+R0Z3YenjORle5IsFXF37+k3aY9J+jy6RNTIPzXjUH3E4lYLP9TNANSXILFBchbTKLYJB5/dxFib/bbR+2B9gKnawQUuXb/sQAjSGG2u1X",
        "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)(376002)(346002)(136003)(39860400002)(396003)(451199018)(40470700004)(46966006)(36840700001)(8676002)(41300700001)(4326008)(83380400001)(70586007)(70206006)(8936002)(36756003)(44832011)(81166007)(5660300002)(40460700003)(186003)(30864003)(921005)(26005)(16526019)(7416002)(36860700001)(110136005)(40480700001)(2906002)(356005)(43170500006)(426003)(54906003)(478600001)(6666004)(82740400003)(86362001)(336012)(316002)(47076005)(1076003)(82310400005)(7696005)(2616005)(36900700001)(309714004);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "amd.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "03 Feb 2023 16:49:24.8963 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 223f1f9a-bd10-4bdb-7444-08db06069b65",
        "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 DS1PEPF0000E658.namprd02.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CH2PR12MB5001",
        "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\nThe protocol struct is added in an unnamed union, keeping old field names.\n\nThe GTP header struct members are used in apps and drivers\ninstead of the redundant fields in the flow items.\n\nSigned-off-by: Thomas Monjalon <thomas@monjalon.net>\nAcked-by: Ferruh Yigit <ferruh.yigit@amd.com>\nAcked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>\n---\n app/test-flow-perf/items_gen.c        |  4 ++--\n app/test-pmd/cmdline_flow.c           |  8 +++----\n doc/guides/prog_guide/rte_flow.rst    | 10 ++-------\n doc/guides/rel_notes/deprecation.rst  |  1 -\n drivers/net/i40e/i40e_fdir.c          | 14 ++++++------\n drivers/net/i40e/i40e_flow.c          | 20 ++++++++---------\n drivers/net/iavf/iavf_fdir.c          |  8 +++----\n drivers/net/ice/ice_fdir_filter.c     | 10 ++++-----\n drivers/net/ice/ice_switch_filter.c   | 12 +++++-----\n drivers/net/mlx5/hws/mlx5dr_definer.c | 14 ++++++------\n drivers/net/mlx5/mlx5_flow_dv.c       | 20 ++++++++---------\n lib/ethdev/rte_flow.h                 | 32 ++++++++++++++++++---------\n 12 files changed, 78 insertions(+), 75 deletions(-)",
    "diff": "diff --git a/app/test-flow-perf/items_gen.c b/app/test-flow-perf/items_gen.c\nindex a58245239ba1..85928349eee0 100644\n--- a/app/test-flow-perf/items_gen.c\n+++ b/app/test-flow-perf/items_gen.c\n@@ -213,10 +213,10 @@ add_gtp(struct rte_flow_item *items,\n \t__rte_unused struct additional_para para)\n {\n \tstatic struct rte_flow_item_gtp gtp_spec = {\n-\t\t.teid = RTE_BE32(TEID_VALUE),\n+\t\t.hdr.teid = RTE_BE32(TEID_VALUE),\n \t};\n \tstatic struct rte_flow_item_gtp gtp_mask = {\n-\t\t.teid = RTE_BE32(0xffffffff),\n+\t\t.hdr.teid = RTE_BE32(0xffffffff),\n \t};\n \n \titems[items_counter].type = RTE_FLOW_ITEM_TYPE_GTP;\ndiff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c\nindex b904f8c3d45c..429d9cab8217 100644\n--- a/app/test-pmd/cmdline_flow.c\n+++ b/app/test-pmd/cmdline_flow.c\n@@ -4137,19 +4137,19 @@ static const struct token token_list[] = {\n \t\t.help = \"GTP flags\",\n \t\t.next = NEXT(item_gtp, NEXT_ENTRY(COMMON_UNSIGNED), item_param),\n \t\t.args = ARGS(ARGS_ENTRY(struct rte_flow_item_gtp,\n-\t\t\t\t\tv_pt_rsv_flags)),\n+\t\t\t\t\thdr.gtp_hdr_info)),\n \t},\n \t[ITEM_GTP_MSG_TYPE] = {\n \t\t.name = \"msg_type\",\n \t\t.help = \"GTP message type\",\n \t\t.next = NEXT(item_gtp, NEXT_ENTRY(COMMON_UNSIGNED), item_param),\n-\t\t.args = ARGS(ARGS_ENTRY(struct rte_flow_item_gtp, msg_type)),\n+\t\t.args = ARGS(ARGS_ENTRY(struct rte_flow_item_gtp, hdr.msg_type)),\n \t},\n \t[ITEM_GTP_TEID] = {\n \t\t.name = \"teid\",\n \t\t.help = \"tunnel endpoint identifier\",\n \t\t.next = NEXT(item_gtp, NEXT_ENTRY(COMMON_UNSIGNED), item_param),\n-\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gtp, teid)),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gtp, hdr.teid)),\n \t},\n \t[ITEM_GTPC] = {\n \t\t.name = \"gtpc\",\n@@ -11224,7 +11224,7 @@ cmd_set_raw_parsed(const struct buffer *in)\n \t\t\t\tgoto error;\n \t\t\t}\n \t\t\tgtp = item->spec;\n-\t\t\tif ((gtp->v_pt_rsv_flags & 0x07) != 0x04) {\n+\t\t\tif (gtp->hdr.s == 1 || gtp->hdr.pn == 1) {\n \t\t\t\t/* Only E flag should be set. */\n \t\t\t\tfprintf(stderr,\n \t\t\t\t\t\"Error - GTP unsupported flags\\n\");\ndiff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst\nindex 116722351486..c4b96b5d324b 100644\n--- a/doc/guides/prog_guide/rte_flow.rst\n+++ b/doc/guides/prog_guide/rte_flow.rst\n@@ -1068,12 +1068,7 @@ Note: GTP, GTPC and GTPU use the same structure. GTPC and GTPU item\n are defined for a user-friendly API when creating GTP-C and GTP-U\n flow rules.\n \n-- ``v_pt_rsv_flags``: version (3b), protocol type (1b), reserved (1b),\n-  extension header flag (1b), sequence number flag (1b), N-PDU number\n-  flag (1b).\n-- ``msg_type``: message type.\n-- ``msg_len``: message length.\n-- ``teid``: tunnel endpoint identifier.\n+- ``hdr``:  header definition (``rte_gtp.h``).\n - Default ``mask`` matches teid only.\n \n Item: ``ESP``\n@@ -1239,8 +1234,7 @@ Item: ``GTP_PSC``\n \n Matches a GTP PDU extension header with type 0x85.\n \n-- ``pdu_type``: PDU type.\n-- ``qfi``: QoS flow identifier.\n+- ``hdr``:  header definition (``rte_gtp.h``).\n - Default ``mask`` matches QFI only.\n \n Item: ``PPPOES``, ``PPPOED``\ndiff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst\nindex df8b5bcb1b64..838d5854ad9b 100644\n--- a/doc/guides/rel_notes/deprecation.rst\n+++ b/doc/guides/rel_notes/deprecation.rst\n@@ -74,7 +74,6 @@ Deprecation Notices\n   - ``rte_flow_item_geneve``\n   - ``rte_flow_item_geneve_opt``\n   - ``rte_flow_item_gre``\n-  - ``rte_flow_item_gtp``\n   - ``rte_flow_item_icmp6``\n   - ``rte_flow_item_icmp6_nd_na``\n   - ``rte_flow_item_icmp6_nd_ns``\ndiff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c\nindex afcaa593eb58..47f79ecf11cc 100644\n--- a/drivers/net/i40e/i40e_fdir.c\n+++ b/drivers/net/i40e/i40e_fdir.c\n@@ -761,26 +761,26 @@ i40e_flow_fdir_construct_pkt(struct i40e_pf *pf,\n \t\t\tgtp = (struct rte_flow_item_gtp *)\n \t\t\t\t((unsigned char *)udp +\n \t\t\t\t\tsizeof(struct rte_udp_hdr));\n-\t\t\tgtp->msg_len =\n+\t\t\tgtp->hdr.plen =\n \t\t\t\trte_cpu_to_be_16(I40E_FDIR_GTP_DEFAULT_LEN);\n-\t\t\tgtp->teid = fdir_input->flow.gtp_flow.teid;\n-\t\t\tgtp->msg_type = I40E_FDIR_GTP_MSG_TYPE_0X01;\n+\t\t\tgtp->hdr.teid = fdir_input->flow.gtp_flow.teid;\n+\t\t\tgtp->hdr.msg_type = I40E_FDIR_GTP_MSG_TYPE_0X01;\n \n \t\t\t/* GTP-C message type is not supported. */\n \t\t\tif (cus_pctype->index == I40E_CUSTOMIZED_GTPC) {\n \t\t\t\tudp->dst_port =\n \t\t\t\t      rte_cpu_to_be_16(I40E_FDIR_GTPC_DST_PORT);\n-\t\t\t\tgtp->v_pt_rsv_flags =\n+\t\t\t\tgtp->hdr.gtp_hdr_info =\n \t\t\t\t\tI40E_FDIR_GTP_VER_FLAG_0X32;\n \t\t\t} else {\n \t\t\t\tudp->dst_port =\n \t\t\t\t      rte_cpu_to_be_16(I40E_FDIR_GTPU_DST_PORT);\n-\t\t\t\tgtp->v_pt_rsv_flags =\n+\t\t\t\tgtp->hdr.gtp_hdr_info =\n \t\t\t\t\tI40E_FDIR_GTP_VER_FLAG_0X30;\n \t\t\t}\n \n \t\t\tif (cus_pctype->index == I40E_CUSTOMIZED_GTPU_IPV4) {\n-\t\t\t\tgtp->msg_type = I40E_FDIR_GTP_MSG_TYPE_0XFF;\n+\t\t\t\tgtp->hdr.msg_type = I40E_FDIR_GTP_MSG_TYPE_0XFF;\n \t\t\t\tgtp_ipv4 = (struct rte_ipv4_hdr *)\n \t\t\t\t\t((unsigned char *)gtp +\n \t\t\t\t\t sizeof(struct rte_flow_item_gtp));\n@@ -794,7 +794,7 @@ i40e_flow_fdir_construct_pkt(struct i40e_pf *pf,\n \t\t\t\t\tsizeof(struct rte_ipv4_hdr);\n \t\t\t} else if (cus_pctype->index ==\n \t\t\t\t   I40E_CUSTOMIZED_GTPU_IPV6) {\n-\t\t\t\tgtp->msg_type = I40E_FDIR_GTP_MSG_TYPE_0XFF;\n+\t\t\t\tgtp->hdr.msg_type = I40E_FDIR_GTP_MSG_TYPE_0XFF;\n \t\t\t\tgtp_ipv6 = (struct rte_ipv6_hdr *)\n \t\t\t\t\t((unsigned char *)gtp +\n \t\t\t\t\t sizeof(struct rte_flow_item_gtp));\ndiff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c\nindex 2855b14fe679..3c550733f2bb 100644\n--- a/drivers/net/i40e/i40e_flow.c\n+++ b/drivers/net/i40e/i40e_flow.c\n@@ -2135,10 +2135,10 @@ i40e_flow_parse_fdir_pattern(struct rte_eth_dev *dev,\n \t\t\tgtp_mask = item->mask;\n \n \t\t\tif (gtp_spec && gtp_mask) {\n-\t\t\t\tif (gtp_mask->v_pt_rsv_flags ||\n-\t\t\t\t    gtp_mask->msg_type ||\n-\t\t\t\t    gtp_mask->msg_len ||\n-\t\t\t\t    gtp_mask->teid != UINT32_MAX) {\n+\t\t\t\tif (gtp_mask->hdr.gtp_hdr_info ||\n+\t\t\t\t    gtp_mask->hdr.msg_type ||\n+\t\t\t\t    gtp_mask->hdr.plen ||\n+\t\t\t\t    gtp_mask->hdr.teid != UINT32_MAX) {\n \t\t\t\t\trte_flow_error_set(error, EINVAL,\n \t\t\t\t\t\t   RTE_FLOW_ERROR_TYPE_ITEM,\n \t\t\t\t\t\t   item,\n@@ -2147,7 +2147,7 @@ i40e_flow_parse_fdir_pattern(struct rte_eth_dev *dev,\n \t\t\t\t}\n \n \t\t\t\tfilter->input.flow.gtp_flow.teid =\n-\t\t\t\t\tgtp_spec->teid;\n+\t\t\t\t\tgtp_spec->hdr.teid;\n \t\t\t\tfilter->input.flow_ext.customized_pctype = true;\n \t\t\t\tcus_proto = item_type;\n \t\t\t}\n@@ -3570,10 +3570,10 @@ i40e_flow_parse_gtp_pattern(struct rte_eth_dev *dev,\n \t\t\t\treturn -rte_errno;\n \t\t\t}\n \n-\t\t\tif (gtp_mask->v_pt_rsv_flags ||\n-\t\t\t    gtp_mask->msg_type ||\n-\t\t\t    gtp_mask->msg_len ||\n-\t\t\t    gtp_mask->teid != UINT32_MAX) {\n+\t\t\tif (gtp_mask->hdr.gtp_hdr_info ||\n+\t\t\t    gtp_mask->hdr.msg_type ||\n+\t\t\t    gtp_mask->hdr.plen ||\n+\t\t\t    gtp_mask->hdr.teid != UINT32_MAX) {\n \t\t\t\trte_flow_error_set(error, EINVAL,\n \t\t\t\t\t\t   RTE_FLOW_ERROR_TYPE_ITEM,\n \t\t\t\t\t\t   item,\n@@ -3586,7 +3586,7 @@ i40e_flow_parse_gtp_pattern(struct rte_eth_dev *dev,\n \t\t\telse if (item_type == RTE_FLOW_ITEM_TYPE_GTPU)\n \t\t\t\tfilter->tunnel_type = I40E_TUNNEL_TYPE_GTPU;\n \n-\t\t\tfilter->tenant_id = rte_be_to_cpu_32(gtp_spec->teid);\n+\t\t\tfilter->tenant_id = rte_be_to_cpu_32(gtp_spec->hdr.teid);\n \n \t\t\tbreak;\n \t\tdefault:\ndiff --git a/drivers/net/iavf/iavf_fdir.c b/drivers/net/iavf/iavf_fdir.c\nindex a6c88cb55b88..811a10287b70 100644\n--- a/drivers/net/iavf/iavf_fdir.c\n+++ b/drivers/net/iavf/iavf_fdir.c\n@@ -1277,16 +1277,16 @@ iavf_fdir_parse_pattern(__rte_unused struct iavf_adapter *ad,\n \t\t\tVIRTCHNL_SET_PROTO_HDR_TYPE(hdr, GTPU_IP);\n \n \t\t\tif (gtp_spec && gtp_mask) {\n-\t\t\t\tif (gtp_mask->v_pt_rsv_flags ||\n-\t\t\t\t\tgtp_mask->msg_type ||\n-\t\t\t\t\tgtp_mask->msg_len) {\n+\t\t\t\tif (gtp_mask->hdr.gtp_hdr_info ||\n+\t\t\t\t\tgtp_mask->hdr.msg_type ||\n+\t\t\t\t\tgtp_mask->hdr.plen) {\n \t\t\t\t\trte_flow_error_set(error, EINVAL,\n \t\t\t\t\t\tRTE_FLOW_ERROR_TYPE_ITEM,\n \t\t\t\t\t\titem, \"Invalid GTP mask\");\n \t\t\t\t\treturn -rte_errno;\n \t\t\t\t}\n \n-\t\t\t\tif (gtp_mask->teid == UINT32_MAX) {\n+\t\t\t\tif (gtp_mask->hdr.teid == UINT32_MAX) {\n \t\t\t\t\tinput_set |= IAVF_INSET_GTPU_TEID;\n \t\t\t\t\tVIRTCHNL_ADD_PROTO_HDR_FIELD_BIT(hdr, GTPU_IP, TEID);\n \t\t\t\t}\ndiff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c\nindex 5d297afc290e..480b369af816 100644\n--- a/drivers/net/ice/ice_fdir_filter.c\n+++ b/drivers/net/ice/ice_fdir_filter.c\n@@ -2341,9 +2341,9 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,\n \t\t\tif (!(gtp_spec && gtp_mask))\n \t\t\t\tbreak;\n \n-\t\t\tif (gtp_mask->v_pt_rsv_flags ||\n-\t\t\t    gtp_mask->msg_type ||\n-\t\t\t    gtp_mask->msg_len) {\n+\t\t\tif (gtp_mask->hdr.gtp_hdr_info ||\n+\t\t\t    gtp_mask->hdr.msg_type ||\n+\t\t\t    gtp_mask->hdr.plen) {\n \t\t\t\trte_flow_error_set(error, EINVAL,\n \t\t\t\t\t\t   RTE_FLOW_ERROR_TYPE_ITEM,\n \t\t\t\t\t\t   item,\n@@ -2351,10 +2351,10 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,\n \t\t\t\treturn -rte_errno;\n \t\t\t}\n \n-\t\t\tif (gtp_mask->teid == UINT32_MAX)\n+\t\t\tif (gtp_mask->hdr.teid == UINT32_MAX)\n \t\t\t\tinput_set_o |= ICE_INSET_GTPU_TEID;\n \n-\t\t\tfilter->input.gtpu_data.teid = gtp_spec->teid;\n+\t\t\tfilter->input.gtpu_data.teid = gtp_spec->hdr.teid;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ITEM_TYPE_GTP_PSC:\n \t\t\ttunnel_type = ICE_FDIR_TUNNEL_TYPE_GTPU_EH;\ndiff --git a/drivers/net/ice/ice_switch_filter.c b/drivers/net/ice/ice_switch_filter.c\nindex 7cb20fa0b4f8..110d8895fea3 100644\n--- a/drivers/net/ice/ice_switch_filter.c\n+++ b/drivers/net/ice/ice_switch_filter.c\n@@ -1405,9 +1405,9 @@ ice_switch_parse_pattern(const struct rte_flow_item pattern[],\n \t\t\t\treturn false;\n \t\t\t}\n \t\t\tif (gtp_spec && gtp_mask) {\n-\t\t\t\tif (gtp_mask->v_pt_rsv_flags ||\n-\t\t\t\t    gtp_mask->msg_type ||\n-\t\t\t\t    gtp_mask->msg_len) {\n+\t\t\t\tif (gtp_mask->hdr.gtp_hdr_info ||\n+\t\t\t\t    gtp_mask->hdr.msg_type ||\n+\t\t\t\t    gtp_mask->hdr.plen) {\n \t\t\t\t\trte_flow_error_set(error, EINVAL,\n \t\t\t\t\t\tRTE_FLOW_ERROR_TYPE_ITEM,\n \t\t\t\t\t\titem,\n@@ -1415,13 +1415,13 @@ ice_switch_parse_pattern(const struct rte_flow_item pattern[],\n \t\t\t\t\treturn false;\n \t\t\t\t}\n \t\t\t\tinput = &outer_input_set;\n-\t\t\t\tif (gtp_mask->teid)\n+\t\t\t\tif (gtp_mask->hdr.teid)\n \t\t\t\t\t*input |= ICE_INSET_GTPU_TEID;\n \t\t\t\tlist[t].type = ICE_GTP;\n \t\t\t\tlist[t].h_u.gtp_hdr.teid =\n-\t\t\t\t\tgtp_spec->teid;\n+\t\t\t\t\tgtp_spec->hdr.teid;\n \t\t\t\tlist[t].m_u.gtp_hdr.teid =\n-\t\t\t\t\tgtp_mask->teid;\n+\t\t\t\t\tgtp_mask->hdr.teid;\n \t\t\t\tinput_set_byte += 4;\n \t\t\t\tt++;\n \t\t\t}\ndiff --git a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c\nindex 604384a24253..fbcfe3665748 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_definer.c\n+++ b/drivers/net/mlx5/hws/mlx5dr_definer.c\n@@ -145,9 +145,9 @@ struct mlx5dr_definer_conv_data {\n \tX(SET_BE16,\ttcp_src_port,\t\tv->hdr.src_port,\trte_flow_item_tcp) \\\n \tX(SET_BE16,\ttcp_dst_port,\t\tv->hdr.dst_port,\trte_flow_item_tcp) \\\n \tX(SET,\t\tgtp_udp_port,\t\tRTE_GTPU_UDP_PORT,\trte_flow_item_gtp) \\\n-\tX(SET_BE32,\tgtp_teid,\t\tv->teid,\t\trte_flow_item_gtp) \\\n-\tX(SET,\t\tgtp_msg_type,\t\tv->msg_type,\t\trte_flow_item_gtp) \\\n-\tX(SET,\t\tgtp_ext_flag,\t\t!!v->v_pt_rsv_flags,\trte_flow_item_gtp) \\\n+\tX(SET_BE32,\tgtp_teid,\t\tv->hdr.teid,\t\trte_flow_item_gtp) \\\n+\tX(SET,\t\tgtp_msg_type,\t\tv->hdr.msg_type,\trte_flow_item_gtp) \\\n+\tX(SET,\t\tgtp_ext_flag,\t\t!!v->hdr.gtp_hdr_info,\trte_flow_item_gtp) \\\n \tX(SET,\t\tgtp_next_ext_hdr,\tGTP_PDU_SC,\t\trte_flow_item_gtp_psc) \\\n \tX(SET,\t\tgtp_ext_hdr_pdu,\tv->hdr.type,\t\trte_flow_item_gtp_psc) \\\n \tX(SET,\t\tgtp_ext_hdr_qfi,\tv->hdr.qfi,\t\trte_flow_item_gtp_psc) \\\n@@ -830,12 +830,12 @@ mlx5dr_definer_conv_item_gtp(struct mlx5dr_definer_conv_data *cd,\n \tif (!m)\n \t\treturn 0;\n \n-\tif (m->msg_len || m->v_pt_rsv_flags & ~MLX5DR_DEFINER_GTP_EXT_HDR_BIT) {\n+\tif (m->hdr.plen || m->hdr.gtp_hdr_info & ~MLX5DR_DEFINER_GTP_EXT_HDR_BIT) {\n \t\trte_errno = ENOTSUP;\n \t\treturn rte_errno;\n \t}\n \n-\tif (m->teid) {\n+\tif (m->hdr.teid) {\n \t\tif (!(cd->caps->flex_protocols & MLX5_HCA_FLEX_GTPU_TEID_ENABLED)) {\n \t\t\trte_errno = ENOTSUP;\n \t\t\treturn rte_errno;\n@@ -847,7 +847,7 @@ mlx5dr_definer_conv_item_gtp(struct mlx5dr_definer_conv_data *cd,\n \t\tfc->byte_off = cd->caps->format_select_gtpu_dw_1 * DW_SIZE;\n \t}\n \n-\tif (m->v_pt_rsv_flags) {\n+\tif (m->hdr.gtp_hdr_info) {\n \t\tif (!(cd->caps->flex_protocols & MLX5_HCA_FLEX_GTPU_DW_0_ENABLED)) {\n \t\t\trte_errno = ENOTSUP;\n \t\t\treturn rte_errno;\n@@ -861,7 +861,7 @@ mlx5dr_definer_conv_item_gtp(struct mlx5dr_definer_conv_data *cd,\n \t}\n \n \n-\tif (m->msg_type) {\n+\tif (m->hdr.msg_type) {\n \t\tif (!(cd->caps->flex_protocols & MLX5_HCA_FLEX_GTPU_DW_0_ENABLED)) {\n \t\t\trte_errno = ENOTSUP;\n \t\t\treturn rte_errno;\ndiff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c\nindex 261c60a5c33a..54cd4ca7344c 100644\n--- a/drivers/net/mlx5/mlx5_flow_dv.c\n+++ b/drivers/net/mlx5/mlx5_flow_dv.c\n@@ -2458,9 +2458,9 @@ flow_dv_validate_item_gtp(struct rte_eth_dev *dev,\n \tconst struct rte_flow_item_gtp *spec = item->spec;\n \tconst struct rte_flow_item_gtp *mask = item->mask;\n \tconst struct rte_flow_item_gtp nic_mask = {\n-\t\t.v_pt_rsv_flags = MLX5_GTP_FLAGS_MASK,\n-\t\t.msg_type = 0xff,\n-\t\t.teid = RTE_BE32(0xffffffff),\n+\t\t.hdr.gtp_hdr_info = MLX5_GTP_FLAGS_MASK,\n+\t\t.hdr.msg_type = 0xff,\n+\t\t.hdr.teid = RTE_BE32(0xffffffff),\n \t};\n \n \tif (!priv->sh->cdev->config.hca_attr.tunnel_stateless_gtp)\n@@ -2478,7 +2478,7 @@ flow_dv_validate_item_gtp(struct rte_eth_dev *dev,\n \t\t\t\t\t  \"no outer UDP layer found\");\n \tif (!mask)\n \t\tmask = &rte_flow_item_gtp_mask;\n-\tif (spec && spec->v_pt_rsv_flags & ~MLX5_GTP_FLAGS_MASK)\n+\tif (spec && spec->hdr.gtp_hdr_info & ~MLX5_GTP_FLAGS_MASK)\n \t\treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ITEM, item,\n \t\t\t\t\t  \"Match is supported for GTP\"\n@@ -2529,8 +2529,8 @@ flow_dv_validate_item_gtp_psc(const struct rte_flow_item *item,\n \tgtp_mask = gtp_item->mask ? gtp_item->mask : &rte_flow_item_gtp_mask;\n \t/* GTP spec and E flag is requested to match zero. */\n \tif (gtp_spec &&\n-\t\t(gtp_mask->v_pt_rsv_flags &\n-\t\t~gtp_spec->v_pt_rsv_flags & MLX5_GTP_EXT_HEADER_FLAG))\n+\t\t(gtp_mask->hdr.gtp_hdr_info &\n+\t\t~gtp_spec->hdr.gtp_hdr_info & MLX5_GTP_EXT_HEADER_FLAG))\n \t\treturn rte_flow_error_set\n \t\t\t(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM, item,\n \t\t\t \"GTP E flag must be 1 to match GTP PSC\");\n@@ -9318,7 +9318,7 @@ flow_dv_translate_item_vxlan_gpe(void *key, const struct rte_flow_item *item,\n \t\t\t\t const uint64_t pattern_flags,\n \t\t\t\t uint32_t key_type)\n {\n-\tstatic const struct rte_flow_item_vxlan_gpe dummy_vxlan_gpe_hdr = {0, };\n+\tstatic const struct rte_flow_item_vxlan_gpe dummy_vxlan_gpe_hdr = {{{0}}};\n \tconst struct rte_flow_item_vxlan_gpe *vxlan_m = item->mask;\n \tconst struct rte_flow_item_vxlan_gpe *vxlan_v = item->spec;\n \t/* The item was validated to be on the outer side */\n@@ -10356,11 +10356,11 @@ flow_dv_translate_item_gtp(void *key, const struct rte_flow_item *item,\n \tMLX5_ITEM_UPDATE(item, key_type, gtp_v, gtp_m,\n \t\t&rte_flow_item_gtp_mask);\n \tMLX5_SET(fte_match_set_misc3, misc3_v, gtpu_msg_flags,\n-\t\t gtp_v->v_pt_rsv_flags & gtp_m->v_pt_rsv_flags);\n+\t\t gtp_v->hdr.gtp_hdr_info & gtp_m->hdr.gtp_hdr_info);\n \tMLX5_SET(fte_match_set_misc3, misc3_v, gtpu_msg_type,\n-\t\t gtp_v->msg_type & gtp_m->msg_type);\n+\t\t gtp_v->hdr.msg_type & gtp_m->hdr.msg_type);\n \tMLX5_SET(fte_match_set_misc3, misc3_v, gtpu_teid,\n-\t\t rte_be_to_cpu_32(gtp_v->teid & gtp_m->teid));\n+\t\t rte_be_to_cpu_32(gtp_v->hdr.teid & gtp_m->hdr.teid));\n }\n \n /**\ndiff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h\nindex e2364823d622..8e8925277eb3 100644\n--- a/lib/ethdev/rte_flow.h\n+++ b/lib/ethdev/rte_flow.h\n@@ -1139,23 +1139,33 @@ static const struct rte_flow_item_fuzzy rte_flow_item_fuzzy_mask = {\n  *\n  * Matches a GTPv1 header.\n  */\n+RTE_STD_C11\n struct rte_flow_item_gtp {\n-\t/**\n-\t * Version (3b), protocol type (1b), reserved (1b),\n-\t * Extension header flag (1b),\n-\t * Sequence number flag (1b),\n-\t * N-PDU number flag (1b).\n-\t */\n-\tuint8_t v_pt_rsv_flags;\n-\tuint8_t msg_type; /**< Message type. */\n-\trte_be16_t msg_len; /**< Message length. */\n-\trte_be32_t teid; /**< Tunnel endpoint identifier. */\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\t/**\n+\t\t\t * Version (3b), protocol type (1b), reserved (1b),\n+\t\t\t * Extension header flag (1b),\n+\t\t\t * Sequence number flag (1b),\n+\t\t\t * N-PDU number flag (1b).\n+\t\t\t */\n+\t\t\tuint8_t v_pt_rsv_flags;\n+\t\t\tuint8_t msg_type; /**< Message type. */\n+\t\t\trte_be16_t msg_len; /**< Message length. */\n+\t\t\trte_be32_t teid; /**< Tunnel endpoint identifier. */\n+\t\t};\n+\t\tstruct rte_gtp_hdr hdr; /**< GTP header definition. */\n+\t};\n };\n \n /** Default mask for RTE_FLOW_ITEM_TYPE_GTP. */\n #ifndef __cplusplus\n static const struct rte_flow_item_gtp rte_flow_item_gtp_mask = {\n-\t.teid = RTE_BE32(0xffffffff),\n+\t.hdr.teid = RTE_BE32(UINT32_MAX),\n };\n #endif\n \n",
    "prefixes": [
        "v7",
        "4/7"
    ]
}