DPDK patches and discussions
 help / color / mirror / Atom feed
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

  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).