[dpdk-dev] [PATCH v3 1/8] lib/librte_ethdev: introduce GENEVE header TLV option item

Ori Kam orika at nvidia.com
Sun Jan 10 11:58:19 CET 2021


Hi,

> -----Original Message-----
> From: Shiri Kuzin <shirik at nvidia.com>
> Sent: Thursday, January 7, 2021 10:39 AM
> Subject: [PATCH v3 1/8] lib/librte_ethdev: introduce GENEVE header TLV option
> item
> 
> The Geneve tunneling protocol is designed to allow the
> user to specify some data context on the packet.
> The GENEVE TLV (Type-Length-Variable) Option
> is the mean intended to present the user data.
> 
> In order to support GENEVE TLV Option the new rte_flow
> item "rte_flow_item_geneve_opt" is added.
> The new item contains the values and masks for the
> following fields:
> -option class
> -option type
> -length
> -data
> 
> New item will be added to testpmd to support match and
> raw encap/decap actions.
> 
> Signed-off-by: Shiri Kuzin <shirik at nvidia.com>
> ---
>  lib/librte_ethdev/rte_flow.c |  1 +
>  lib/librte_ethdev/rte_flow.h | 27 +++++++++++++++++++++++++++
>  2 files changed, 28 insertions(+)
> 
> diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
> index a06f64c271..2af7d965e1 100644
> --- a/lib/librte_ethdev/rte_flow.c
> +++ b/lib/librte_ethdev/rte_flow.c
> @@ -97,6 +97,7 @@ static const struct rte_flow_desc_data
> rte_flow_desc_item[] = {
>  	MK_FLOW_ITEM(L2TPV3OIP, sizeof(struct rte_flow_item_l2tpv3oip)),
>  	MK_FLOW_ITEM(PFCP, sizeof(struct rte_flow_item_pfcp)),
>  	MK_FLOW_ITEM(ECPRI, sizeof(struct rte_flow_item_ecpri)),
> +	MK_FLOW_ITEM(GENEVE_OPT, sizeof(struct
> rte_flow_item_geneve_opt)),
>  };
> 
>  /** Generate flow_action[] entry. */
> diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
> index 0977a78270..11a6494b8e 100644
> --- a/lib/librte_ethdev/rte_flow.h
> +++ b/lib/librte_ethdev/rte_flow.h
> @@ -543,6 +543,14 @@ enum rte_flow_item_type {
>  	 * See struct rte_flow_item_ipv6_frag_ext.
>  	 */
>  	RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,
> +
> +	/**
> +	 * Matches Geneve Variable Length Option
> +	 *
> +	 * See struct rte_flow_item_geneve_opt
> +	 */
> +	RTE_FLOW_ITEM_TYPE_GENEVE_OPT,
> +
>  };
> 
>  /**
> @@ -1627,6 +1635,25 @@ static const struct rte_flow_item_ecpri
> rte_flow_item_ecpri_mask = {
>  };
>  #endif
> 
> +/**
> + * RTE_FLOW_ITEM_TYPE_GENEVE_OPT
> + *
> + * Matches a GENEVE Variable Length Option
> + */
> +struct rte_flow_item_geneve_opt {
> +	rte_be16_t option_class;
> +	uint8_t option_type;
> +	uint8_t option_len;
> +	uint32_t *data;
> +};
> +
> +/** Default mask for RTE_FLOW_ITEM_TYPE_GENEVE_OPT. */
> +#ifndef __cplusplus
> +static const struct rte_flow_item_geneve_opt
> +rte_flow_item_geneve_opt_mask = {
> +	.option_type = 0xff,
> +};
> +#endif
>  /**
>   * Matching pattern item definition.
>   *
> --
> 2.21.0

Acked-by: Ori Kam <orika at nvidia.com>
Thanks,
Ori



More information about the dev mailing list