diff options
author | Eli Britstein <elibr@mellanox.com> | 2020-07-08 06:38:23 +0000 |
---|---|---|
committer | Ilya Maximets <i.maximets@ovn.org> | 2020-07-08 17:50:36 +0200 |
commit | 864852a0624a25953ab015cc82b784595b03f33f (patch) | |
tree | 9d160cc744840c8a4da17767bac6f21adbd3218e /lib | |
parent | 77057965cb36dffd38829efccd2ff2eac8d444d2 (diff) | |
download | openvswitch-864852a0624a25953ab015cc82b784595b03f33f.tar.gz |
netdev-offload-dpdk: Fix Ethernet matching for type only.
For OVS rule of the form "eth type is 0x1234 / end", rule is offloaded
in the form of "eth / end", which is incorrect. Fix it.
Fixes: e8a2b5bf92bb ("netdev-dpdk: implement flow offload with rte flow")
Signed-off-by: Eli Britstein <elibr@mellanox.com>
Reviewed-by: Roni Bar Yanai <roniba@mellanox.com>
Acked-by: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/netdev-offload-dpdk.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c index 16bde7c87..63a63209f 100644 --- a/lib/netdev-offload-dpdk.c +++ b/lib/netdev-offload-dpdk.c @@ -551,7 +551,8 @@ parse_flow_match(struct flow_patterns *patterns, uint8_t proto = 0; /* Eth */ - if (!eth_addr_is_zero(match->wc.masks.dl_src) || + if (match->wc.masks.dl_type || + !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; @@ -567,15 +568,6 @@ parse_flow_match(struct flow_patterns *patterns, mask->type = match->wc.masks.dl_type; 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. - */ - add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_ETH, NULL, NULL); } /* VLAN */ |