Hi, > -----Original Message----- > From: Shiri Kuzin <shi...@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 <shi...@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 <or...@nvidia.com> Thanks, Ori