net/mlx4: support flow w/o ETH spec and with VLAN

This patch adds to MLX4 PMD the option to set flow rules
with empty ether MAC and specific VLAN ID.

Note that this fix works with
1. CX-3 FW 2.42.5016 or higher.
2. mlxconfig configuration STEER_FORCE_VLAN set to 1.

Signed-off-by: Dekel Peled <dekelp@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
This commit is contained in:
Dekel Peled 2018-12-20 09:15:34 +02:00 committed by Ferruh Yigit
parent 4bb14c83df
commit c0d2392631

View File

@ -205,9 +205,7 @@ mlx4_flow_merge_eth(struct rte_flow *flow,
const char *msg; const char *msg;
unsigned int i; unsigned int i;
if (!mask) { if (mask) {
flow->promisc = 1;
} else {
uint32_t sum_dst = 0; uint32_t sum_dst = 0;
uint32_t sum_src = 0; uint32_t sum_src = 0;
@ -249,6 +247,10 @@ mlx4_flow_merge_eth(struct rte_flow *flow,
.type = IBV_FLOW_SPEC_ETH, .type = IBV_FLOW_SPEC_ETH,
.size = sizeof(*eth), .size = sizeof(*eth),
}; };
if (!mask) {
flow->ibv_attr->type = IBV_FLOW_ATTR_ALL_DEFAULT;
return 0;
}
memcpy(eth->val.dst_mac, spec->dst.addr_bytes, ETHER_ADDR_LEN); memcpy(eth->val.dst_mac, spec->dst.addr_bytes, ETHER_ADDR_LEN);
memcpy(eth->mask.dst_mac, mask->dst.addr_bytes, ETHER_ADDR_LEN); memcpy(eth->mask.dst_mac, mask->dst.addr_bytes, ETHER_ADDR_LEN);
/* Remove unwanted bits from values. */ /* Remove unwanted bits from values. */
@ -311,6 +313,8 @@ mlx4_flow_merge_vlan(struct rte_flow *flow,
eth->val.vlan_tag = spec->tci; eth->val.vlan_tag = spec->tci;
eth->mask.vlan_tag = mask->tci; eth->mask.vlan_tag = mask->tci;
eth->val.vlan_tag &= eth->mask.vlan_tag; eth->val.vlan_tag &= eth->mask.vlan_tag;
if (flow->ibv_attr->type == IBV_FLOW_ATTR_ALL_DEFAULT)
flow->ibv_attr->type = IBV_FLOW_ATTR_NORMAL;
return 0; return 0;
error: error:
return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM, return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM,