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

Reply via email to