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 DD72A424A2; Fri, 27 Jan 2023 15:34:56 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D197F40150; Fri, 27 Jan 2023 15:34:56 +0100 (CET) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2106.outbound.protection.outlook.com [40.107.220.106]) by mails.dpdk.org (Postfix) with ESMTP id 1667C40146 for ; Fri, 27 Jan 2023 15:34:56 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lKyl0uc8WgxI3abifQnzxM53vvas8TLkUzhvHcV4xNRyka3EvXTprKsx/QIWeDmF6I5LiupMpuePMCV5gU5Wgsu3XIGAT+3hI4ZasqyPnW9GUb8k3R/UXh5rFi05TREnWwYLZobykI1R2XqyeF/5KKN1tiPIPKx0rccsYdfI1lxJZ/sfZc64iK1bnuBIKDyV6BNe4qCq38JRiGZaro4hE7ai7pzA9NJNmHUz9C0v7nhAB5YgZsYGeb2GeJZuXcKgNwJ0vhRjViVqCPOJfffbSptYdg8o7AlKUeqI5FIyL/mTbTXa5IEPKPUpGswqRItZR0NZDehMdpMbX289bVMRwQ== 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=Zuh3VAtN3Ifhjjtqn40pSclpHLi/y+ufxbrX74LGiHI=; b=ekRoX0zmt1VvWuLbvG3XaJlKJZkp8r5g/uHKTBd/rmGv4HBMn5LnekHsHE2pXr4NpXCImRC3DwmY9nbIeBVkwtchsc+GxOPKYhFDc1x/z5TsvM2QthmMVHpvwSfBOxWVYjPI6G0yNpCuNMqXmFIPgI34sq++rj2mKBcaCPzDZ2xwR6zWzuHnJMb5Kz5C2rHfWZbzKl2NNfFxYO3v6QXEc57+AbLq7V+A+am/xUBzyLtMfJBxPSuQXfvIG7UGluYoIoZsTiEG3iAhdkqOryrPL9CclpeIWjIM2sogYla4LZ0Enqn7NwyTpFuzAjzcBenBsQeVWv8zH00XNbOWCNno8w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Zuh3VAtN3Ifhjjtqn40pSclpHLi/y+ufxbrX74LGiHI=; b=viikkmpuUZP1FjzfWZmA8Ge9NpR4QqOuxBX7fxVk7So1Q+1jCqz3rls4pMIdgXjhG7wG7/zqZBPqdJ1j/zg511edZZJMc+kgpCI9/ZHt6C08Yfe1mR1xlBn7BXbLbrkdddqGnmxZtjmdFzTsd56zvbXTwTzp0tawVkrY3uoWWuA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB6037.namprd13.prod.outlook.com (2603:10b6:a03:3e2::9) by PH7PR13MB5477.namprd13.prod.outlook.com (2603:10b6:510:138::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.23; Fri, 27 Jan 2023 14:34:51 +0000 Received: from SJ0PR13MB6037.namprd13.prod.outlook.com ([fe80::a17f:495a:6870:18c0]) by SJ0PR13MB6037.namprd13.prod.outlook.com ([fe80::a17f:495a:6870:18c0%9]) with mapi id 15.20.6043.023; Fri, 27 Jan 2023 14:34:51 +0000 Date: Fri, 27 Jan 2023 15:34:41 +0100 From: Niklas =?iso-8859-1?Q?S=F6derlund?= To: Ferruh Yigit Cc: Thomas Monjalon , Wisam Jaddo , Ori Kam , Aman Singh , Yuying Zhang , Ajit Khaparde , Somnath Kotur , Hemant Agrawal , Sachin Saxena , Matan Azrad , Viacheslav Ovsiienko , Chaoyong He , Andrew Rybchenko , Olivier Matz , David Marchand , dev@dpdk.org Subject: Re: [PATCH v5 4/8] ethdev: use GRE protocol struct for flow matching Message-ID: References: <20221025214410.715864-1-thomas@monjalon.net> <20230126161904.864517-1-ferruh.yigit@amd.com> <20230126161904.864517-5-ferruh.yigit@amd.com> Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20230126161904.864517-5-ferruh.yigit@amd.com> X-ClientProxiedBy: MM0P280CA0027.SWEP280.PROD.OUTLOOK.COM (2603:10a6:190:a::34) To SJ0PR13MB6037.namprd13.prod.outlook.com (2603:10b6:a03:3e2::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB6037:EE_|PH7PR13MB5477:EE_ X-MS-Office365-Filtering-Correlation-Id: 163e4b94-ef54-4395-590a-08db0073a645 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FisJWBhRfcFXdLd1HpEVhYfKzZV3P/rfZ8vGr7DGJN5GgBWHHMSNz5yRQUiQYwQEsUe8NdjfMwFnb20YQ4+fH8SusUpVzzjsK/5r0ItFPkUTCRbzfewWjTrctDuMdS6p+cq2rKrAqIIdU7+YyW3NWMCevf8ZeoeH3m5KNpkATAQteBeIm7kVuwuBRq/Ph1RqFnGD2PKrm6xzuEAwp72Anq+306OsfzyDEDdoAM1JK8qXrHnnXBsjN3iVRLJrI6/VAGK6cg/jS8BeTihjqNyR70pkzRv29OjtMDlaJX483Zf37XaOSK6n3osR9Na0N25/GBqVHnGoq5kkqiQ4xlTnLtMkZDkvkm1C9sVW7omVRI2EvSdZ2iij7WEObq1sty7S2VhATh/mkRG8dKpO0yU64Kxzxk/6IDMarHqA/veq7UWkh4PMgIZWzDFg4wnaKEoYdUoA8yitbfOuXWBPQNpIYCU9Z0lqcY/VvGo50R8qfU0vgAHPQ01RQZbrIObRwHQzjk9NJwGV9yd4meLEd53+Icc9Xmr7frpFYPpHh3Q9w89dguIPsUfhsT0Z164qdKT0m5K43VdliFjm2QgXz0iXuiIG/N78OcWVJQ0+WrB8BZDmgJJe4EC/WJa1Hnewi2VohF69FGAq4FXtxxm/jOvTVif7RpYDZgxJuTgfdIZL271+PmYd5gbT0sHgaut7rUbH419q2YkWLmVkPZSx6+Av3Q== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB6037.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(4636009)(39830400003)(376002)(366004)(396003)(136003)(346002)(451199018)(83380400001)(86362001)(316002)(38100700002)(7416002)(54906003)(5660300002)(66574015)(8936002)(38350700002)(186003)(52116002)(9686003)(6512007)(53546011)(6486002)(478600001)(2906002)(66946007)(66476007)(66556008)(8676002)(30864003)(4326008)(6916009)(6506007)(26005)(6666004)(41300700001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?iso-8859-1?Q?CNHXAvguaH0wAHcFyUlHkjafIzFtpEide4n+RlXM0iTkopezYhCN5KgKbL?= =?iso-8859-1?Q?IWKerfaZ5mYGR1/jIGq2b5mW2preSeMuDJ3Zk0/WsGLO5w9fT0KPySU2AQ?= =?iso-8859-1?Q?bJKuG1kxxmvT6gdLK5+dpA+lbU+SCnw3SHDVVphPiZUL5dc1L3i7G0OhdW?= =?iso-8859-1?Q?BrooGM9LN36l9q5qkv3zxGoVIEAKMeDMGR/nqTNxS6bg2zh4V8K6buM35y?= =?iso-8859-1?Q?BYrnnIuG5qTupH9gyPLojljOyIjdzUpOWi8XTFGM2TFLyDyZXDrKKVu6C2?= =?iso-8859-1?Q?q1Um5ukfiXdh7GBKZELKtUhAnVC7q4AiQNQiwaJ8qBp4oNAJU8TpgvvLSF?= =?iso-8859-1?Q?Jzgy7hbPBPGvfb0RxnbKl3vW2gug0yQqEQNbvXPQjyJBlYoiYJzZdj8EUc?= =?iso-8859-1?Q?idPCm9uh/CdnFXH+myBPGaWBWFurQOfMAziGUYiWXHUPFcwiqwh68r/VSR?= =?iso-8859-1?Q?TZEqgVp2ccswfT1UvcPY4jIu2l+m8HOT1bpS2sJDevI+6adiUyKMb3hzPb?= =?iso-8859-1?Q?yxy53uB7ow1YaRZOMMHOOqJU6GIXEX/XL2SML8Y///F/mfFSI2+++MPrxT?= =?iso-8859-1?Q?9LU+SIZsmXsNd6kZoNq7xv4/4p1QgGsS8yT/ZS0rTIj8mi715VN17eV9UC?= =?iso-8859-1?Q?RVhaVbkr5RGEwAs0B2TYQI6aa8e6nxUBN4spuJ3cdyvEZn2GoMXSBHxqr7?= =?iso-8859-1?Q?t2HoG/aN0RTjgOw3pwk3tgkOmMK8sYjXDvFp3/dJMuJoHIaMquNf2xy4Ji?= =?iso-8859-1?Q?M1pN2EjrIYRE81/teaYuiAo4UEsmyVQ2O9+kPD//z/GZsK/jwNYHSCesH3?= =?iso-8859-1?Q?LCHra/jXMQHwY14pEUwhj1uiqyntRfyfgtBfNVYGU7W1YSyKFGyWQFVzZJ?= =?iso-8859-1?Q?4VhgIcesTd+KQtlOjsgtWUhcnJIrbpRYWCqnk+CjYlpdSCalcME1vprVEC?= =?iso-8859-1?Q?GD8uGnR3kjfk+HiEfPUR/J0VJwwERq3J2tNyRMauVOrYsyzT7xAVPCGvQ9?= =?iso-8859-1?Q?PaEEA9eJC1oYPrqe8YbaLA3qQFmsJsfAO7WQnwzPs+RlJmG6aEfzDz5W+6?= =?iso-8859-1?Q?laJXoPw3eyvAUCQuGbAPVKZAHYvS/XYRVzgBap6UE8q2z0i1pNGd4EjQ0j?= =?iso-8859-1?Q?0hBbyxuIAWkLj/Zxagqbu0LWeFKPI/D3HgdZFq5ec1hvsSspP/59uOVN6B?= =?iso-8859-1?Q?3iUCN8d6lqzcE3Ux5mHfOhxQ5+ctREcE/yKspkhvbESGJV7D+tCPPpAmy8?= =?iso-8859-1?Q?smxspcgL/3abKw7POe1Cr+ZpgBeIAgnOk+wWugEpvwoxy72sHh1UdKxKmc?= =?iso-8859-1?Q?NJmXnFVg8HYgs22TUOzKsndvxX+3dp15/oujx+hg99TUvHKhhgA+UTx987?= =?iso-8859-1?Q?tGRimQWA9SjE5wsTbSmyvpGtX/xqkXn1TYdcMtMAXHSuheMyO0m144i6tz?= =?iso-8859-1?Q?zIIF7ptoECuGVVkLCGjjVfWXFgIAMNU4sUtME/jT/wwaCLlirLKCoThFTu?= =?iso-8859-1?Q?EUeLzKPtzzmBKlF3X595JpS/7Ad3FlgEHII14KTo5ftMWiN7L9eKVlI0Ro?= =?iso-8859-1?Q?VuAgvfAK6gVXBImaAKoeWAMTTMc1KygcV1M1yHoUAQT78+3KIfU6CVSTqO?= =?iso-8859-1?Q?Gb28fPICIlTbu+qafusdYioJTjyRaKhN9ZSmqLJm0gwUMXujHIjAY+0A?= =?iso-8859-1?Q?=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 163e4b94-ef54-4395-590a-08db0073a645 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB6037.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jan 2023 14:34:51.5889 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XV3e/ogI8Qetpo5RyM7BO4+UiKWg/bOUGiU/xENMXAARp7WgQtO+uqClcY7HLJQxOERIML7FW1UvNZHHGetrulChrM3rjRy+fax+gA6OI7g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5477 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 Hi Ferruh and Thomas, Thanks for your work. On 2023-01-26 16:19:00 +0000, Ferruh Yigit wrote: > From: Thomas Monjalon > > As announced in the deprecation notice, flow item structures > should re-use the protocol header definitions from the directory lib/net/. > > The protocol struct is added in an unnamed union, keeping old field names. > > The GRE header struct members are used in apps and drivers > instead of the redundant fields in the flow items. > > Signed-off-by: Thomas Monjalon > --- > app/test-flow-perf/items_gen.c | 4 ++-- > app/test-pmd/cmdline_flow.c | 14 +++++------ > doc/guides/prog_guide/rte_flow.rst | 6 +---- > doc/guides/rel_notes/deprecation.rst | 1 - > drivers/net/bnxt/tf_ulp/ulp_rte_parser.c | 12 +++++----- > drivers/net/dpaa2/dpaa2_flow.c | 12 +++++----- > drivers/net/mlx5/hws/mlx5dr_definer.c | 8 +++---- > drivers/net/mlx5/mlx5_flow.c | 22 ++++++++--------- > drivers/net/mlx5/mlx5_flow_dv.c | 30 +++++++++++++----------- > drivers/net/mlx5/mlx5_flow_verbs.c | 10 ++++---- > drivers/net/nfp/nfp_flow.c | 9 +++---- For NFP, Reviewed-by: Niklas Söderlund > lib/ethdev/rte_flow.h | 24 +++++++++++++------ > lib/net/rte_gre.h | 5 ++++ > 13 files changed, 84 insertions(+), 73 deletions(-) > > diff --git a/app/test-flow-perf/items_gen.c b/app/test-flow-perf/items_gen.c > index a58245239ba1..0f19e5e53648 100644 > --- a/app/test-flow-perf/items_gen.c > +++ b/app/test-flow-perf/items_gen.c > @@ -173,10 +173,10 @@ add_gre(struct rte_flow_item *items, > __rte_unused struct additional_para para) > { > static struct rte_flow_item_gre gre_spec = { > - .protocol = RTE_BE16(RTE_ETHER_TYPE_TEB), > + .hdr.proto = RTE_BE16(RTE_ETHER_TYPE_TEB), > }; > static struct rte_flow_item_gre gre_mask = { > - .protocol = RTE_BE16(0xffff), > + .hdr.proto = RTE_BE16(0xffff), > }; > > items[items_counter].type = RTE_FLOW_ITEM_TYPE_GRE; > diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c > index b904f8c3d45c..0e115956514c 100644 > --- a/app/test-pmd/cmdline_flow.c > +++ b/app/test-pmd/cmdline_flow.c > @@ -4071,7 +4071,7 @@ static const struct token token_list[] = { > .next = NEXT(item_gre, NEXT_ENTRY(COMMON_UNSIGNED), > item_param), > .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gre, > - protocol)), > + hdr.proto)), > }, > [ITEM_GRE_C_RSVD0_VER] = { > .name = "c_rsvd0_ver", > @@ -4082,7 +4082,7 @@ static const struct token token_list[] = { > .next = NEXT(item_gre, NEXT_ENTRY(COMMON_UNSIGNED), > item_param), > .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gre, > - c_rsvd0_ver)), > + hdr.c_rsvd0_ver)), > }, > [ITEM_GRE_C_BIT] = { > .name = "c_bit", > @@ -4090,7 +4090,7 @@ static const struct token token_list[] = { > .next = NEXT(item_gre, NEXT_ENTRY(COMMON_BOOLEAN), > item_param), > .args = ARGS(ARGS_ENTRY_MASK_HTON(struct rte_flow_item_gre, > - c_rsvd0_ver, > + hdr.c_rsvd0_ver, > "\x80\x00\x00\x00")), > }, > [ITEM_GRE_S_BIT] = { > @@ -4098,7 +4098,7 @@ static const struct token token_list[] = { > .help = "sequence number bit (S)", > .next = NEXT(item_gre, NEXT_ENTRY(COMMON_BOOLEAN), item_param), > .args = ARGS(ARGS_ENTRY_MASK_HTON(struct rte_flow_item_gre, > - c_rsvd0_ver, > + hdr.c_rsvd0_ver, > "\x10\x00\x00\x00")), > }, > [ITEM_GRE_K_BIT] = { > @@ -4106,7 +4106,7 @@ static const struct token token_list[] = { > .help = "key bit (K)", > .next = NEXT(item_gre, NEXT_ENTRY(COMMON_BOOLEAN), item_param), > .args = ARGS(ARGS_ENTRY_MASK_HTON(struct rte_flow_item_gre, > - c_rsvd0_ver, > + hdr.c_rsvd0_ver, > "\x20\x00\x00\x00")), > }, > [ITEM_FUZZY] = { > @@ -7837,7 +7837,7 @@ parse_vc_action_mplsogre_encap(struct context *ctx, const struct token *token, > }, > }; > struct rte_flow_item_gre gre = { > - .protocol = rte_cpu_to_be_16(ETHER_TYPE_MPLS_UNICAST), > + .hdr.proto = rte_cpu_to_be_16(ETHER_TYPE_MPLS_UNICAST), > }; > struct rte_flow_item_mpls mpls = { > .ttl = 0, > @@ -7935,7 +7935,7 @@ parse_vc_action_mplsogre_decap(struct context *ctx, const struct token *token, > }, > }; > struct rte_flow_item_gre gre = { > - .protocol = rte_cpu_to_be_16(ETHER_TYPE_MPLS_UNICAST), > + .hdr.proto = rte_cpu_to_be_16(ETHER_TYPE_MPLS_UNICAST), > }; > struct rte_flow_item_mpls mpls; > uint8_t *header; > diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst > index 116722351486..603e1b866be3 100644 > --- a/doc/guides/prog_guide/rte_flow.rst > +++ b/doc/guides/prog_guide/rte_flow.rst > @@ -980,8 +980,7 @@ Item: ``GRE`` > > Matches a GRE header. > > -- ``c_rsvd0_ver``: checksum, reserved 0 and version. > -- ``protocol``: protocol type. > +- ``hdr``: header definition (``rte_gre.h``). > - Default ``mask`` matches protocol only. > > Item: ``GRE_KEY`` > @@ -1000,9 +999,6 @@ Item: ``GRE_OPTION`` > Matches a GRE optional fields (checksum/key/sequence). > This should be preceded by item ``GRE``. > > -- ``checksum``: checksum. > -- ``key``: key. > -- ``sequence``: sequence. > - The items in GRE_OPTION do not change bit flags(c_bit/k_bit/s_bit) in GRE > item. The bit flags need be set with GRE item by application. When the items > present, the corresponding bits in GRE spec and mask should be set "1" by > diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst > index 638051789d19..80bf7209065a 100644 > --- a/doc/guides/rel_notes/deprecation.rst > +++ b/doc/guides/rel_notes/deprecation.rst > @@ -68,7 +68,6 @@ Deprecation Notices > - ``rte_flow_item_e_tag`` > - ``rte_flow_item_geneve`` > - ``rte_flow_item_geneve_opt`` > - - ``rte_flow_item_gre`` > - ``rte_flow_item_gtp`` > - ``rte_flow_item_icmp6`` > - ``rte_flow_item_icmp6_nd_na`` > diff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c > index 80869b79c3fe..c1e231ce8c49 100644 > --- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c > +++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c > @@ -1461,16 +1461,16 @@ ulp_rte_gre_hdr_handler(const struct rte_flow_item *item, > return BNXT_TF_RC_ERROR; > } > > - size = sizeof(((struct rte_flow_item_gre *)NULL)->c_rsvd0_ver); > + size = sizeof(((struct rte_flow_item_gre *)NULL)->hdr.c_rsvd0_ver); > ulp_rte_prsr_fld_mask(params, &idx, size, > - ulp_deference_struct(gre_spec, c_rsvd0_ver), > - ulp_deference_struct(gre_mask, c_rsvd0_ver), > + ulp_deference_struct(gre_spec, hdr.c_rsvd0_ver), > + ulp_deference_struct(gre_mask, hdr.c_rsvd0_ver), > ULP_PRSR_ACT_DEFAULT); > > - size = sizeof(((struct rte_flow_item_gre *)NULL)->protocol); > + size = sizeof(((struct rte_flow_item_gre *)NULL)->hdr.proto); > ulp_rte_prsr_fld_mask(params, &idx, size, > - ulp_deference_struct(gre_spec, protocol), > - ulp_deference_struct(gre_mask, protocol), > + ulp_deference_struct(gre_spec, hdr.proto), > + ulp_deference_struct(gre_mask, hdr.proto), > ULP_PRSR_ACT_DEFAULT); > > /* Update the hdr_bitmap with GRE */ > diff --git a/drivers/net/dpaa2/dpaa2_flow.c b/drivers/net/dpaa2/dpaa2_flow.c > index eec7e6065097..8a6d44da4875 100644 > --- a/drivers/net/dpaa2/dpaa2_flow.c > +++ b/drivers/net/dpaa2/dpaa2_flow.c > @@ -154,7 +154,7 @@ static const struct rte_flow_item_sctp dpaa2_flow_item_sctp_mask = { > }; > > static const struct rte_flow_item_gre dpaa2_flow_item_gre_mask = { > - .protocol = RTE_BE16(0xffff), > + .hdr.proto = RTE_BE16(0xffff), > }; > > #endif > @@ -2792,7 +2792,7 @@ dpaa2_configure_flow_gre(struct rte_flow *flow, > return -1; > } > > - if (!mask->protocol) > + if (!mask->hdr.proto) > return 0; > > index = dpaa2_flow_extract_search( > @@ -2841,8 +2841,8 @@ dpaa2_configure_flow_gre(struct rte_flow *flow, > &flow->qos_rule, > NET_PROT_GRE, > NH_FLD_GRE_TYPE, > - &spec->protocol, > - &mask->protocol, > + &spec->hdr.proto, > + &mask->hdr.proto, > sizeof(rte_be16_t)); > if (ret) { > DPAA2_PMD_ERR( > @@ -2855,8 +2855,8 @@ dpaa2_configure_flow_gre(struct rte_flow *flow, > &flow->fs_rule, > NET_PROT_GRE, > NH_FLD_GRE_TYPE, > - &spec->protocol, > - &mask->protocol, > + &spec->hdr.proto, > + &mask->hdr.proto, > sizeof(rte_be16_t)); > if (ret) { > DPAA2_PMD_ERR( > diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c > index 604384a24253..3a438f2c9d12 100644 > --- a/drivers/net/mlx5/hws/mlx5dr_definer.c > +++ b/drivers/net/mlx5/hws/mlx5dr_definer.c > @@ -156,8 +156,8 @@ struct mlx5dr_definer_conv_data { > X(SET, source_qp, v->queue, mlx5_rte_flow_item_sq) \ > X(SET, tag, v->data, rte_flow_item_tag) \ > X(SET, metadata, v->data, rte_flow_item_meta) \ > - X(SET_BE16, gre_c_ver, v->c_rsvd0_ver, rte_flow_item_gre) \ > - X(SET_BE16, gre_protocol_type, v->protocol, rte_flow_item_gre) \ > + X(SET_BE16, gre_c_ver, v->hdr.c_rsvd0_ver, rte_flow_item_gre) \ > + X(SET_BE16, gre_protocol_type, v->hdr.proto, rte_flow_item_gre) \ > X(SET, ipv4_protocol_gre, IPPROTO_GRE, rte_flow_item_gre) \ > X(SET_BE32, gre_opt_key, v->key.key, rte_flow_item_gre_opt) \ > X(SET_BE32, gre_opt_seq, v->sequence.sequence, rte_flow_item_gre_opt) \ > @@ -1210,7 +1210,7 @@ mlx5dr_definer_conv_item_gre(struct mlx5dr_definer_conv_data *cd, > if (!m) > return 0; > > - if (m->c_rsvd0_ver) { > + if (m->hdr.c_rsvd0_ver) { > fc = &cd->fc[MLX5DR_DEFINER_FNAME_GRE_C_VER]; > fc->item_idx = item_idx; > fc->tag_set = &mlx5dr_definer_gre_c_ver_set; > @@ -1219,7 +1219,7 @@ mlx5dr_definer_conv_item_gre(struct mlx5dr_definer_conv_data *cd, > fc->bit_off = __mlx5_dw_bit_off(header_gre, c_rsvd0_ver); > } > > - if (m->protocol) { > + if (m->hdr.proto) { > fc = &cd->fc[MLX5DR_DEFINER_FNAME_GRE_PROTOCOL]; > fc->item_idx = item_idx; > fc->tag_set = &mlx5dr_definer_gre_protocol_type_set; > diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c > index ff08a629e2c6..7b19c5f03f5d 100644 > --- a/drivers/net/mlx5/mlx5_flow.c > +++ b/drivers/net/mlx5/mlx5_flow.c > @@ -329,7 +329,7 @@ mlx5_flow_expand_rss_item_complete(const struct rte_flow_item *item) > ret = mlx5_ethertype_to_item_type(spec, mask, true); > break; > case RTE_FLOW_ITEM_TYPE_GRE: > - MLX5_XSET_ITEM_MASK_SPEC(gre, protocol); > + MLX5_XSET_ITEM_MASK_SPEC(gre, hdr.proto); > ret = mlx5_ethertype_to_item_type(spec, mask, true); > break; > case RTE_FLOW_ITEM_TYPE_VXLAN_GPE: > @@ -3089,8 +3089,7 @@ mlx5_flow_validate_item_gre_key(const struct rte_flow_item *item, > if (!gre_mask) > gre_mask = &rte_flow_item_gre_mask; > gre_spec = gre_item->spec; > - if (gre_spec && (gre_mask->c_rsvd0_ver & RTE_BE16(0x2000)) && > - !(gre_spec->c_rsvd0_ver & RTE_BE16(0x2000))) > + if (gre_spec && (gre_mask->hdr.k) && !(gre_spec->hdr.k)) > return rte_flow_error_set(error, EINVAL, > RTE_FLOW_ERROR_TYPE_ITEM, item, > "Key bit must be on"); > @@ -3165,21 +3164,18 @@ mlx5_flow_validate_item_gre_option(struct rte_eth_dev *dev, > if (!gre_mask) > gre_mask = &rte_flow_item_gre_mask; > if (mask->checksum_rsvd.checksum) > - if (gre_spec && (gre_mask->c_rsvd0_ver & RTE_BE16(0x8000)) && > - !(gre_spec->c_rsvd0_ver & RTE_BE16(0x8000))) > + if (gre_spec && (gre_mask->hdr.c) && !(gre_spec->hdr.c)) > return rte_flow_error_set(error, EINVAL, > RTE_FLOW_ERROR_TYPE_ITEM, > item, > "Checksum bit must be on"); > if (mask->key.key) > - if (gre_spec && (gre_mask->c_rsvd0_ver & RTE_BE16(0x2000)) && > - !(gre_spec->c_rsvd0_ver & RTE_BE16(0x2000))) > + if (gre_spec && (gre_mask->hdr.k) && !(gre_spec->hdr.k)) > return rte_flow_error_set(error, EINVAL, > RTE_FLOW_ERROR_TYPE_ITEM, > item, "Key bit must be on"); > if (mask->sequence.sequence) > - if (gre_spec && (gre_mask->c_rsvd0_ver & RTE_BE16(0x1000)) && > - !(gre_spec->c_rsvd0_ver & RTE_BE16(0x1000))) > + if (gre_spec && (gre_mask->hdr.s) && !(gre_spec->hdr.s)) > return rte_flow_error_set(error, EINVAL, > RTE_FLOW_ERROR_TYPE_ITEM, > item, > @@ -3230,8 +3226,10 @@ mlx5_flow_validate_item_gre(const struct rte_flow_item *item, > const struct rte_flow_item_gre *mask = item->mask; > int ret; > const struct rte_flow_item_gre nic_mask = { > - .c_rsvd0_ver = RTE_BE16(0xB000), > - .protocol = RTE_BE16(UINT16_MAX), > + .hdr.c = 1, > + .hdr.k = 1, > + .hdr.s = 1, > + .hdr.proto = RTE_BE16(UINT16_MAX), > }; > > if (target_protocol != 0xff && target_protocol != IPPROTO_GRE) > @@ -3259,7 +3257,7 @@ mlx5_flow_validate_item_gre(const struct rte_flow_item *item, > return ret; > #ifndef HAVE_MLX5DV_DR > #ifndef HAVE_IBV_DEVICE_MPLS_SUPPORT > - if (spec && (spec->protocol & mask->protocol)) > + if (spec && (spec->hdr.proto & mask->hdr.proto)) > return rte_flow_error_set(error, ENOTSUP, > RTE_FLOW_ERROR_TYPE_ITEM, item, > "without MPLS support the" > diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c > index 261c60a5c33a..2b9c2ba6a4b5 100644 > --- a/drivers/net/mlx5/mlx5_flow_dv.c > +++ b/drivers/net/mlx5/mlx5_flow_dv.c > @@ -8984,7 +8984,7 @@ static void > flow_dv_translate_item_gre(void *key, const struct rte_flow_item *item, > uint64_t pattern_flags, uint32_t key_type) > { > - static const struct rte_flow_item_gre empty_gre = {0,}; > + static const struct rte_flow_item_gre empty_gre = {{{0}}}; > const struct rte_flow_item_gre *gre_m = item->mask; > const struct rte_flow_item_gre *gre_v = item->spec; > void *headers_v = MLX5_ADDR_OF(fte_match_param, key, outer_headers); > @@ -9021,8 +9021,8 @@ flow_dv_translate_item_gre(void *key, const struct rte_flow_item *item, > gre_v = gre_m; > else if (key_type == MLX5_SET_MATCHER_HS_V) > gre_m = gre_v; > - gre_crks_rsvd0_ver_m.value = rte_be_to_cpu_16(gre_m->c_rsvd0_ver); > - gre_crks_rsvd0_ver_v.value = rte_be_to_cpu_16(gre_v->c_rsvd0_ver); > + gre_crks_rsvd0_ver_m.value = rte_be_to_cpu_16(gre_m->hdr.c_rsvd0_ver); > + gre_crks_rsvd0_ver_v.value = rte_be_to_cpu_16(gre_v->hdr.c_rsvd0_ver); > MLX5_SET(fte_match_set_misc, misc_v, gre_c_present, > gre_crks_rsvd0_ver_v.c_present & > gre_crks_rsvd0_ver_m.c_present); > @@ -9032,8 +9032,8 @@ flow_dv_translate_item_gre(void *key, const struct rte_flow_item *item, > MLX5_SET(fte_match_set_misc, misc_v, gre_s_present, > gre_crks_rsvd0_ver_v.s_present & > gre_crks_rsvd0_ver_m.s_present); > - protocol_m = rte_be_to_cpu_16(gre_m->protocol); > - protocol_v = rte_be_to_cpu_16(gre_v->protocol); > + protocol_m = rte_be_to_cpu_16(gre_m->hdr.proto); > + protocol_v = rte_be_to_cpu_16(gre_v->hdr.proto); > if (!protocol_m) { > /* Force next protocol to prevent matchers duplication */ > protocol_v = mlx5_translate_tunnel_etypes(pattern_flags); > @@ -9072,7 +9072,7 @@ flow_dv_translate_item_gre_option(void *key, > const struct rte_flow_item_gre_opt *option_v = item->spec; > const struct rte_flow_item_gre *gre_m = gre_item->mask; > const struct rte_flow_item_gre *gre_v = gre_item->spec; > - static const struct rte_flow_item_gre empty_gre = {0}; > + static const struct rte_flow_item_gre empty_gre = {{{0}}}; > struct rte_flow_item gre_key_item; > uint16_t c_rsvd0_ver_m, c_rsvd0_ver_v; > uint16_t protocol_m, protocol_v; > @@ -9097,8 +9097,8 @@ flow_dv_translate_item_gre_option(void *key, > if (!gre_m) > gre_m = &rte_flow_item_gre_mask; > } > - protocol_v = gre_v->protocol; > - protocol_m = gre_m->protocol; > + protocol_v = gre_v->hdr.proto; > + protocol_m = gre_m->hdr.proto; > if (!protocol_m) { > /* Force next protocol to prevent matchers duplication */ > uint16_t ether_type = > @@ -9108,8 +9108,8 @@ flow_dv_translate_item_gre_option(void *key, > protocol_m = UINT16_MAX; > } > } > - c_rsvd0_ver_v = gre_v->c_rsvd0_ver; > - c_rsvd0_ver_m = gre_m->c_rsvd0_ver; > + c_rsvd0_ver_v = gre_v->hdr.c_rsvd0_ver; > + c_rsvd0_ver_m = gre_m->hdr.c_rsvd0_ver; > if (option_m->sequence.sequence) { > c_rsvd0_ver_v |= RTE_BE16(0x1000); > c_rsvd0_ver_m |= RTE_BE16(0x1000); > @@ -9171,12 +9171,14 @@ flow_dv_translate_item_nvgre(void *key, const struct rte_flow_item *item, > > /* For NVGRE, GRE header fields must be set with defined values. */ > const struct rte_flow_item_gre gre_spec = { > - .c_rsvd0_ver = RTE_BE16(0x2000), > - .protocol = RTE_BE16(RTE_ETHER_TYPE_TEB) > + .hdr.k = 1, > + .hdr.proto = RTE_BE16(RTE_ETHER_TYPE_TEB) > }; > const struct rte_flow_item_gre gre_mask = { > - .c_rsvd0_ver = RTE_BE16(0xB000), > - .protocol = RTE_BE16(UINT16_MAX), > + .hdr.c = 1, > + .hdr.k = 1, > + .hdr.s = 1, > + .hdr.proto = RTE_BE16(UINT16_MAX), > }; > const struct rte_flow_item gre_item = { > .spec = &gre_spec, > diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c b/drivers/net/mlx5/mlx5_flow_verbs.c > index 4ef4f3044515..291369d437d4 100644 > --- a/drivers/net/mlx5/mlx5_flow_verbs.c > +++ b/drivers/net/mlx5/mlx5_flow_verbs.c > @@ -930,7 +930,7 @@ flow_verbs_translate_item_gre(struct mlx5_flow *dev_flow, > .size = size, > }; > #else > - static const struct rte_flow_item_gre empty_gre = {0,}; > + static const struct rte_flow_item_gre empty_gre = {{{0}}}; > const struct rte_flow_item_gre *spec = item->spec; > const struct rte_flow_item_gre *mask = item->mask; > unsigned int size = sizeof(struct ibv_flow_spec_gre); > @@ -946,10 +946,10 @@ flow_verbs_translate_item_gre(struct mlx5_flow *dev_flow, > if (!mask) > mask = &rte_flow_item_gre_mask; > } > - tunnel.val.c_ks_res0_ver = spec->c_rsvd0_ver; > - tunnel.val.protocol = spec->protocol; > - tunnel.mask.c_ks_res0_ver = mask->c_rsvd0_ver; > - tunnel.mask.protocol = mask->protocol; > + tunnel.val.c_ks_res0_ver = spec->hdr.c_rsvd0_ver; > + tunnel.val.protocol = spec->hdr.proto; > + tunnel.mask.c_ks_res0_ver = mask->hdr.c_rsvd0_ver; > + tunnel.mask.protocol = mask->hdr.proto; > /* Remove unwanted bits from values. */ > tunnel.val.c_ks_res0_ver &= tunnel.mask.c_ks_res0_ver; > tunnel.val.key &= tunnel.mask.key; > diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c > index bd3a8d2a3b2f..0994fdeeb49f 100644 > --- a/drivers/net/nfp/nfp_flow.c > +++ b/drivers/net/nfp/nfp_flow.c > @@ -1812,8 +1812,9 @@ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { > [RTE_FLOW_ITEM_TYPE_GRE] = { > .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_GRE_KEY), > .mask_support = &(const struct rte_flow_item_gre){ > - .c_rsvd0_ver = RTE_BE16(0xa000), > - .protocol = RTE_BE16(0xffff), > + .hdr.c = 1, > + .hdr.k = 1, > + .hdr.proto = RTE_BE16(0xffff), > }, > .mask_default = &rte_flow_item_gre_mask, > .mask_sz = sizeof(struct rte_flow_item_gre), > @@ -3144,7 +3145,7 @@ nfp_flow_action_nvgre_encap_v4(struct nfp_app_fw_flower *app_fw_flower, > memset(set_tun, 0, act_set_size); > nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_GRE, 0, > ipv4->hdr.time_to_live, ipv4->hdr.type_of_service); > - set_tun->tun_proto = gre->protocol; > + set_tun->tun_proto = gre->hdr.proto; > > /* Send the tunnel neighbor cmsg to fw */ > return nfp_flower_add_tun_neigh_v4_encap(app_fw_flower, nfp_flow_meta, > @@ -3181,7 +3182,7 @@ nfp_flow_action_nvgre_encap_v6(struct nfp_app_fw_flower *app_fw_flower, > tos = (ipv6->hdr.vtc_flow >> RTE_IPV6_HDR_TC_SHIFT) & 0xff; > nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_GRE, 0, > ipv6->hdr.hop_limits, tos); > - set_tun->tun_proto = gre->protocol; > + set_tun->tun_proto = gre->hdr.proto; > > /* Send the tunnel neighbor cmsg to fw */ > return nfp_flower_add_tun_neigh_v6_encap(app_fw_flower, nfp_flow_meta, > diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h > index e2364823d622..3ae89e367c16 100644 > --- a/lib/ethdev/rte_flow.h > +++ b/lib/ethdev/rte_flow.h > @@ -1070,19 +1070,29 @@ static const struct rte_flow_item_mpls rte_flow_item_mpls_mask = { > * > * Matches a GRE header. > */ > +RTE_STD_C11 > struct rte_flow_item_gre { > - /** > - * Checksum (1b), reserved 0 (12b), version (3b). > - * Refer to RFC 2784. > - */ > - rte_be16_t c_rsvd0_ver; > - rte_be16_t protocol; /**< Protocol type. */ > + union { > + struct { > + /* > + * These are old fields kept for compatibility. > + * Please prefer hdr field below. > + */ > + /** > + * Checksum (1b), reserved 0 (12b), version (3b). > + * Refer to RFC 2784. > + */ > + rte_be16_t c_rsvd0_ver; > + rte_be16_t protocol; /**< Protocol type. */ > + }; > + struct rte_gre_hdr hdr; /**< GRE header definition. */ > + }; > }; > > /** Default mask for RTE_FLOW_ITEM_TYPE_GRE. */ > #ifndef __cplusplus > static const struct rte_flow_item_gre rte_flow_item_gre_mask = { > - .protocol = RTE_BE16(0xffff), > + .hdr.proto = RTE_BE16(UINT16_MAX), > }; > #endif > > diff --git a/lib/net/rte_gre.h b/lib/net/rte_gre.h > index 6c6aef6fcaa0..210b81c99018 100644 > --- a/lib/net/rte_gre.h > +++ b/lib/net/rte_gre.h > @@ -28,6 +28,8 @@ extern "C" { > */ > __extension__ > struct rte_gre_hdr { > + union { > + struct { > #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN > uint16_t res2:4; /**< Reserved */ > uint16_t s:1; /**< Sequence Number Present bit */ > @@ -45,6 +47,9 @@ struct rte_gre_hdr { > uint16_t res3:5; /**< Reserved */ > uint16_t ver:3; /**< Version Number */ > #endif > + }; > + rte_be16_t c_rsvd0_ver; > + }; > uint16_t proto; /**< Protocol Type */ > } __rte_packed; > > -- > 2.25.1 > -- Kind Regards, Niklas Söderlund