From: "Niklas Söderlund" <niklas.soderlund@corigine.com>
To: Ferruh Yigit <ferruh.yigit@amd.com>
Cc: Thomas Monjalon <thomas@monjalon.net>,
Wisam Jaddo <wisamm@nvidia.com>, Ori Kam <orika@nvidia.com>,
Aman Singh <aman.deep.singh@intel.com>,
Yuying Zhang <yuying.zhang@intel.com>,
Ajit Khaparde <ajit.khaparde@broadcom.com>,
Somnath Kotur <somnath.kotur@broadcom.com>,
Hemant Agrawal <hemant.agrawal@nxp.com>,
Sachin Saxena <sachin.saxena@nxp.com>,
Matan Azrad <matan@nvidia.com>,
Viacheslav Ovsiienko <viacheslavo@nvidia.com>,
Chaoyong He <chaoyong.he@corigine.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
Olivier Matz <olivier.matz@6wind.com>,
David Marchand <david.marchand@redhat.com>,
dev@dpdk.org
Subject: Re: [PATCH v5 4/8] ethdev: use GRE protocol struct for flow matching
Date: Fri, 27 Jan 2023 15:34:41 +0100 [thread overview]
Message-ID: <Y9PhAWAEhdLWceFK@oden.dyn.berto.se> (raw)
In-Reply-To: <20230126161904.864517-5-ferruh.yigit@amd.com>
Hi Ferruh and Thomas,
Thanks for your work.
On 2023-01-26 16:19:00 +0000, Ferruh Yigit wrote:
> From: Thomas Monjalon <thomas@monjalon.net>
>
> 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 <thomas@monjalon.net>
> ---
> 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 <niklas.soderlund@corigine.com>
> 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
next prev parent reply other threads:[~2023-01-27 14:34 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-25 21:44 [PATCH 0/8] start cleanup of rte_flow_item_* Thomas Monjalon
2022-10-25 21:44 ` [PATCH 1/8] ethdev: use Ethernet protocol struct for flow matching Thomas Monjalon
2022-10-25 21:44 ` [PATCH 2/8] net: add smaller fields for VXLAN Thomas Monjalon
2022-10-25 21:44 ` [PATCH 3/8] ethdev: use VXLAN protocol struct for flow matching Thomas Monjalon
2022-10-25 21:44 ` [PATCH 4/8] ethdev: use GRE " Thomas Monjalon
2022-10-26 8:45 ` David Marchand
2023-01-20 17:21 ` Ferruh Yigit
2022-10-25 21:44 ` [PATCH 5/8] ethdev: use GTP " Thomas Monjalon
2022-10-25 21:44 ` [PATCH 6/8] ethdev: use ARP " Thomas Monjalon
2022-10-25 21:44 ` [PATCH 7/8] doc: fix description of L2TPV2 flow item Thomas Monjalon
2022-10-25 21:44 ` [PATCH 8/8] net: mark all big endian types Thomas Monjalon
2022-10-26 8:41 ` David Marchand
2023-01-20 17:18 ` [PATCH v2 0/8] start cleanup of rte_flow_item_* Ferruh Yigit
2023-01-20 17:18 ` [PATCH v2 1/8] ethdev: use Ethernet protocol struct for flow matching Ferruh Yigit
2023-01-20 17:18 ` [PATCH v2 2/8] net: add smaller fields for VXLAN Ferruh Yigit
2023-01-20 17:18 ` [PATCH v2 3/8] ethdev: use VXLAN protocol struct for flow matching Ferruh Yigit
2023-01-20 17:18 ` [PATCH v2 4/8] ethdev: use GRE " Ferruh Yigit
2023-01-20 17:18 ` [PATCH v2 5/8] ethdev: use GTP " Ferruh Yigit
2023-01-20 17:19 ` [PATCH v2 6/8] ethdev: use ARP " Ferruh Yigit
2023-01-20 17:19 ` [PATCH v2 7/8] doc: fix description of L2TPV2 flow item Ferruh Yigit
2023-01-20 17:19 ` [PATCH v2 8/8] net: mark all big endian types Ferruh Yigit
2023-01-22 10:52 ` [PATCH v2 0/8] start cleanup of rte_flow_item_* David Marchand
2023-01-24 9:07 ` Ferruh Yigit
2023-01-24 9:02 ` [PATCH v3 " Ferruh Yigit
2023-01-24 9:02 ` [PATCH v3 1/8] ethdev: use Ethernet protocol struct for flow matching Ferruh Yigit
2023-01-24 9:02 ` [PATCH v3 2/8] net: add smaller fields for VXLAN Ferruh Yigit
2023-01-24 9:02 ` [PATCH v3 3/8] ethdev: use VXLAN protocol struct for flow matching Ferruh Yigit
2023-01-24 9:02 ` [PATCH v3 4/8] ethdev: use GRE " Ferruh Yigit
2023-01-24 9:02 ` [PATCH v3 5/8] ethdev: use GTP " Ferruh Yigit
2023-01-24 9:02 ` [PATCH v3 6/8] ethdev: use ARP " Ferruh Yigit
2023-01-24 9:02 ` [PATCH v3 7/8] doc: fix description of L2TPV2 flow item Ferruh Yigit
2023-01-24 9:03 ` [PATCH v3 8/8] net: mark all big endian types Ferruh Yigit
2023-01-26 13:17 ` [PATCH v4 0/8] start cleanup of rte_flow_item_* Ferruh Yigit
2023-01-26 13:17 ` [PATCH v4 1/8] ethdev: use Ethernet protocol struct for flow matching Ferruh Yigit
2023-01-26 13:17 ` [PATCH v4 2/8] net: add smaller fields for VXLAN Ferruh Yigit
2023-01-26 13:17 ` [PATCH v4 3/8] ethdev: use VXLAN protocol struct for flow matching Ferruh Yigit
2023-01-26 13:17 ` [PATCH v4 4/8] ethdev: use GRE " Ferruh Yigit
2023-01-26 13:17 ` [PATCH v4 5/8] ethdev: use GTP " Ferruh Yigit
2023-01-26 13:17 ` [PATCH v4 6/8] ethdev: use ARP " Ferruh Yigit
2023-01-26 13:17 ` [PATCH v4 7/8] doc: fix description of L2TPV2 flow item Ferruh Yigit
2023-01-26 13:17 ` [PATCH v4 8/8] net: mark all big endian types Ferruh Yigit
2023-01-26 16:18 ` [PATCH v5 0/8] start cleanup of rte_flow_item_* Ferruh Yigit
2023-01-26 16:18 ` [PATCH v5 1/8] ethdev: use Ethernet protocol struct for flow matching Ferruh Yigit
2023-01-27 14:33 ` Niklas Söderlund
2023-02-01 17:34 ` Ori Kam
2023-02-02 9:51 ` Andrew Rybchenko
2023-01-26 16:18 ` [PATCH v5 2/8] net: add smaller fields for VXLAN Ferruh Yigit
2023-01-26 16:18 ` [PATCH v5 3/8] ethdev: use VXLAN protocol struct for flow matching Ferruh Yigit
2023-02-01 17:41 ` Ori Kam
2023-02-02 9:52 ` Andrew Rybchenko
2023-01-26 16:19 ` [PATCH v5 4/8] ethdev: use GRE " Ferruh Yigit
2023-01-27 14:34 ` Niklas Söderlund [this message]
2023-02-01 17:44 ` Ori Kam
2023-02-02 9:53 ` Andrew Rybchenko
2023-01-26 16:19 ` [PATCH v5 5/8] ethdev: use GTP " Ferruh Yigit
2023-02-02 9:54 ` Andrew Rybchenko
2023-01-26 16:19 ` [PATCH v5 6/8] ethdev: use ARP " Ferruh Yigit
2023-02-01 17:46 ` Ori Kam
2023-02-02 9:55 ` Andrew Rybchenko
2023-01-26 16:19 ` [PATCH v5 7/8] doc: fix description of L2TPV2 flow item Ferruh Yigit
2023-02-02 9:56 ` Andrew Rybchenko
2023-01-26 16:19 ` [PATCH v5 8/8] net: mark all big endian types Ferruh Yigit
2023-02-02 10:01 ` Andrew Rybchenko
2023-02-02 11:11 ` Ferruh Yigit
2023-02-02 12:44 ` [PATCH v6 0/8] start cleanup of rte_flow_item_* Ferruh Yigit
2023-02-02 12:44 ` [PATCH v6 1/8] ethdev: use Ethernet protocol struct for flow matching Ferruh Yigit
2023-02-02 12:44 ` [PATCH v6 2/8] net: add smaller fields for VXLAN Ferruh Yigit
2023-02-02 12:44 ` [PATCH v6 3/8] ethdev: use VXLAN protocol struct for flow matching Ferruh Yigit
2023-02-02 12:44 ` [PATCH v6 4/8] ethdev: use GRE " Ferruh Yigit
2023-02-02 17:16 ` Thomas Monjalon
2023-02-03 15:02 ` Ferruh Yigit
2023-02-03 15:12 ` Thomas Monjalon
2023-02-03 15:16 ` Ferruh Yigit
2023-02-02 12:44 ` [PATCH v6 5/8] ethdev: use GTP " Ferruh Yigit
2023-02-02 12:44 ` [PATCH v6 6/8] ethdev: use ARP " Ferruh Yigit
2023-02-02 12:44 ` [PATCH v6 7/8] doc: fix description of L2TPV2 flow item Ferruh Yigit
2023-02-02 12:45 ` [PATCH v6 8/8] net: mark all big endian types Ferruh Yigit
2023-02-02 17:20 ` Thomas Monjalon
2023-02-03 15:03 ` Ferruh Yigit
2023-02-03 16:48 ` [PATCH v7 0/7] start cleanup of rte_flow_item_* Ferruh Yigit
2023-02-03 16:48 ` [PATCH v7 1/7] ethdev: use Ethernet protocol struct for flow matching Ferruh Yigit
2023-02-03 16:48 ` [PATCH v7 2/7] net: add smaller fields for VXLAN Ferruh Yigit
2023-02-03 16:48 ` [PATCH v7 3/7] ethdev: use VXLAN protocol struct for flow matching Ferruh Yigit
2023-02-03 16:48 ` [PATCH v7 4/7] ethdev: use GTP " Ferruh Yigit
2023-02-03 16:48 ` [PATCH v7 5/7] ethdev: use ARP " Ferruh Yigit
2023-02-03 16:48 ` [PATCH v7 6/7] doc: fix description of L2TPV2 flow item Ferruh Yigit
2023-02-03 16:48 ` [PATCH v7 7/7] net: mark all big endian types Ferruh Yigit
2023-02-06 2:35 ` [PATCH v7 0/7] start cleanup of rte_flow_item_* fengchengwen
2023-02-07 14:58 ` Thomas Monjalon
2023-02-07 16:33 ` Ferruh Yigit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y9PhAWAEhdLWceFK@oden.dyn.berto.se \
--to=niklas.soderlund@corigine.com \
--cc=ajit.khaparde@broadcom.com \
--cc=aman.deep.singh@intel.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=chaoyong.he@corigine.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@amd.com \
--cc=hemant.agrawal@nxp.com \
--cc=matan@nvidia.com \
--cc=olivier.matz@6wind.com \
--cc=orika@nvidia.com \
--cc=sachin.saxena@nxp.com \
--cc=somnath.kotur@broadcom.com \
--cc=thomas@monjalon.net \
--cc=viacheslavo@nvidia.com \
--cc=wisamm@nvidia.com \
--cc=yuying.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).