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