net/mlx4: support flow w/o ETH spec and with VLAN
Checks
Commit Message
This patch adds to MLX4 PMD the option to set flow rules
with wildcard 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>
---
drivers/net/mlx4/mlx4_flow.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
Comments
From: Dekel Peled
> This patch adds to MLX4 PMD the option to set flow rules with wildcard ether
> MAC and specific VLAN ID.
with wildcard => with empty
>
> 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>
Besides that,
Acked-by: Matan Azrad <matan@mellanox.com>
Tuesday, December 25, 2018 2:06 PM, Matan Azrad:
> Subject: RE: [PATCH] net/mlx4: support flow w/o ETH spec and with VLAN
>
>
>
> From: Dekel Peled
> > This patch adds to MLX4 PMD the option to set flow rules with wildcard
> > ether MAC and specific VLAN ID.
>
> with wildcard => with empty
>
>
> >
> > 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>
> Besides that,
> Acked-by: Matan Azrad <matan@mellanox.com>
Applied to next-net-mlx, with the cosmetic commit log change. Thanks.
@@ -205,9 +205,7 @@ struct mlx4_drop {
const char *msg;
unsigned int i;
- if (!mask) {
- flow->promisc = 1;
- } else {
+ if (mask) {
uint32_t sum_dst = 0;
uint32_t sum_src = 0;
@@ -249,6 +247,10 @@ struct mlx4_drop {
.type = IBV_FLOW_SPEC_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->mask.dst_mac, mask->dst.addr_bytes, ETHER_ADDR_LEN);
/* Remove unwanted bits from values. */
@@ -311,6 +313,8 @@ struct mlx4_drop {
eth->val.vlan_tag = spec->tci;
eth->mask.vlan_tag = mask->tci;
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;
error:
return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM,