The following 2 commits introduced changes which caused a regression
for XL710 devices and functionality ceases for partial offload as a result.
864852a0624a ("netdev-offload-dpdk: Fix Ethernet matching for type only.")
a79eae87abe4 ("netdev-offload-dpdk: Remove pre-validate of patterns function.")

Fixed by partial reversion of these changes.

Signed-off-by: Emma Finn <emma.f...@intel.com>
---
 lib/netdev-offload-dpdk.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index de6101e..b300884 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -691,8 +691,7 @@ parse_flow_match(struct flow_patterns *patterns,
     consumed_masks->packet_type = 0;
 
     /* Eth */
-    if (match->wc.masks.dl_type ||
-        !eth_addr_is_zero(match->wc.masks.dl_src) ||
+    if (!eth_addr_is_zero(match->wc.masks.dl_src) ||
         !eth_addr_is_zero(match->wc.masks.dl_dst)) {
         struct rte_flow_item_eth *spec, *mask;
 
@@ -712,6 +711,16 @@ parse_flow_match(struct flow_patterns *patterns,
         consumed_masks->dl_type = 0;
 
         add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_ETH, spec, mask);
+    } else {
+        /*
+        * If user specifies a flow (like UDP flow) without L2 patterns,
+        * OVS will at least set the dl_type. Normally, it's enough to
+        * create an eth pattern just with it. Unluckily, some Intel's
+        * NIC (such as XL710) doesn't support that. Below is a workaround,
+        * which simply matches any L2 pkts.
+        */
+        consumed_masks->dl_type = 0;
+        add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_ETH, NULL, NULL);
     }
 
     /* VLAN */
-- 
2.7.4

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to