On 8/24/2021 6:08 PM, Finn, Emma wrote:
External email: Use caution opening links or attachments


-----Original Message-----
From: Eli Britstein <[email protected]>
Sent: Monday 16 August 2021 14:55
To: [email protected]; Ilya Maximets <[email protected]>
Cc: Finn, Emma <[email protected]>; Stokes, Ian <[email protected]>; Sriharsha Basavapatna 
<[email protected]>; Gaetan Rivet <[email protected]>; Majd Dibbiny 
<[email protected]>; Eli Britstein <[email protected]>; Salem Sol <[email protected]>
Subject: [PATCH V3 1/2] netdev-offload-dpdk: Use has_vlan match attribute

DPDK 20.11 introduced an ability to specify existance/non-existance of VLAN tag 
by [1].
Use this attribute.

[1]: 09315fc83861 ("ethdev: add VLAN attributes to ethernet and VLAN items")

Signed-off-by: Eli Britstein <[email protected]>
Reviewed-by: Salem Sol <[email protected]>

Hi Eli,

I tested this but currently we don't have support in the i40e pmd for the 
has_vlan match attribute and with these patches it is breaking offload for VLAN 
packets on Intel devices.

Hi Emma,

Thanks for testing.

Is adding such support in your plans?

How do you suggest to proceed? It is needed in order to fix OVS bug.

Thanks,

Eli


Thanks,
Emma
---
  lib/netdev-offload-dpdk.c | 16 ++++++++++++++++
  1 file changed, 16 insertions(+)

diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c index 
f6706ee0c..28c4ba276 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -210,6 +210,8 @@ dump_flow_pattern(struct ds *s,

          ds_put_cstr(s, "eth ");
          if (eth_spec) {
+            uint32_t has_vlan_mask;
+
              if (!eth_mask) {
                  eth_mask = &rte_flow_item_eth_mask;
              }
@@ -222,6 +224,9 @@ dump_flow_pattern(struct ds *s,
              DUMP_PATTERN_ITEM(eth_mask->type, "type", "0x%04"PRIx16,
                                ntohs(eth_spec->type),
                                ntohs(eth_mask->type));
+            has_vlan_mask = eth_mask->has_vlan ? UINT32_MAX : 0;
+            DUMP_PATTERN_ITEM(has_vlan_mask, "has_vlan", "%d",
+                              eth_spec->has_vlan, eth_mask->has_vlan);
          }
          ds_put_cstr(s, "/ ");
      } else if (item->type == RTE_FLOW_ITEM_TYPE_VLAN) { @@ -1047,6 +1052,7 @@ 
parse_flow_match(struct netdev *netdev,
                   struct flow_patterns *patterns,
                   struct match *match)
  {
+    struct rte_flow_item_eth *eth_spec = NULL, *eth_mask = NULL;
      struct flow *consumed_masks;
      uint8_t proto = 0;

@@ -1092,6 +1098,11 @@ parse_flow_match(struct netdev *netdev,
          memset(&consumed_masks->dl_src, 0, sizeof consumed_masks->dl_src);
          consumed_masks->dl_type = 0;

+        spec->has_vlan = 0;
+        mask->has_vlan = 1;
+        eth_spec = spec;
+        eth_mask = mask;
+
          add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_ETH, spec, mask);
      }

@@ -1108,6 +1119,11 @@ parse_flow_match(struct netdev *netdev,
          /* Match any protocols. */
          mask->inner_type = 0;

+        if (eth_spec && eth_mask) {
+            eth_spec->has_vlan = 1;
+            eth_mask->has_vlan = 1;
+        }
+
          add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_VLAN, spec, mask);
      }
      /* For untagged matching match->wc.masks.vlans[0].tci is 0xFFFF and
--
2.28.0.2311.g225365fb51

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to