Hello Ferruh, I'll post v2 with a fix.
Regards, Gregory > -----Original Message----- > From: Ferruh Yigit <ferruh.yi...@intel.com> > Sent: Friday, November 19, 2021 19:08 > To: Gregory Etelson <getel...@nvidia.com>; > dev@dpdk.org; Slava Ovsiienko > <viachesl...@nvidia.com> > Subject: Re: [dpdk-dev] [PATCH] doc: add flex > item API examples > > External email: Use caution opening links or > attachments > > > On 11/10/2021 9:38 AM, Gregory Etelson > wrote: > > Demonstrate flex item API usage on known > network protocols. > > > > Signed-off-by: Gregory Etelson > <getel...@nvidia.com> > > Reviewed-by: Viacheslav Ovsiienko > <viachesl...@nvidia.com> > > <...> > > > +* Match Geneve basic header > > + > > + .. code-block:: c > > + :linenos: > > + > > + const struct geneve_hdr > geneve_basic_header_spec = { > > + .ver = 0, > > + .opt_len = 0, > > + }; > > + const struct geneve_hdr > geneve_basic_header_mask = { > > + .ver = 3, > > + .opt_len = 0x3f, > > + }; > > + > > + const struct rte_flow_item_flex > geneve_basic_header_flex_spec = { > > + .handle = geneve_flex_handle, > > + .length = > sizeof(geneve_basic_header_spec), > > + .pattern = &geneve_basic_header_spec > > + }; > > + > > + const struct rte_flow_item_flex > geneve_basic_header_flex_mask = { > > + .handle = geneve_flex_handle, > > + .length = > sizeof(geneve_basic_header_mask), > > + .pattern = &geneve_basic_header_mask > > + }; > > + > > + const struct rte_flow_item > geneve_basic_header_flow_item = { > > + .type = RTE_FLOW_ITEM_TYPE_FLEX, > > + .spec = (const void > *)&geneve_basic_header_flex_spec, > > + .maks = (const void > *)&geneve_basic_header_flex_mask, > > s/maks/mask/ > > > + }; > > + > > +* Match if the first option class is Open > vSwitch > > + > > + .. code-block:: c > > + :linenos: > > + > > + const struct geneve_option_hdr > geneve_ovs_opt_spec = { > > + .class = rte_cpu_to_be16(0x0101), > > + }; > > + > > + const struct geneve_option_hdr > geneve_ovs_opt_mask = { > > + .class = 0xffff, > > + }; > > + > > + const struct geneve_hdr > geneve_hdr_with_ovs_spec = { > > + .ver = 0, > > + .options = (const unsigned long > *)&geneve_ovs_opt_spec > > + }; > > + > > + const struct geneve_hdr > geneve_hdr_with_ovs_mask = { > > + .ver = 3, > > + .options = (const unsigned long > *)&geneve_ovs_opt_mask > > + }; > > + > > + const struct rte_flow_item_flex > geneve_flex_spec = { > > + .handle = geneve_flex_handle, > > + .length = > sizeof(geneve_hdr_with_ovs_spec) + > sizeof(geneve_ovs_opt_spec), > > + .pattern = &geneve_hdr_with_ovs_spec > > + }; > > + > > + const struct rte_flow_item_flex > geneve_flex_mask = { > > + .handle = geneve_flex_handle, > > + .length = > sizeof(geneve_hdr_with_ovs_mask) + > sizeof(geneve_ovs_opt_mask), > > + .pattern = > &geneve_hdr_with_ovs_mask > > + }; > > + > > + const struct rte_flow_item > geneve_vni_flow_item = { > > + .type = RTE_FLOW_ITEM_TYPE_FLEX, > > + .spec = (const void *)&geneve_flex_spec, > > + .maks = (const void > *)&geneve_flex_mask, > > ditto