From 0b1edd21cd78c48e944489231707cbd9a59273ec Mon Sep 17 00:00:00 2001 From: =?utf8?q?N=C3=A9lio=20Laranjeiro?= Date: Tue, 13 Mar 2018 15:17:39 +0100 Subject: [PATCH] net/mlx5: refuse empty VLAN flow specification Verbs specification doesn't help to distinguish between packets having an VLAN and those which do not have, this ends by having flow rule which does not react as the user expects e.g. flow create 0 ingress pattern eth / vlan / end action queue index 0 / end flow create 0 ingress pattern eth / end action queue index 1 / end are colliding in Verbs definition as in both rule are matching packets with or without VLAN. For this reason, the VLAN specification must not be empty, otherwise the PMD has to refuse it. Signed-off-by: Nelio Laranjeiro --- drivers/net/mlx5/mlx5_flow.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 5c096ca9c3..875a5028d3 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -1305,9 +1305,18 @@ mlx5_flow_create_vlan(const struct rte_flow_item *item, eth->val.vlan_tag = spec->tci; eth->mask.vlan_tag = mask->tci; eth->val.vlan_tag &= eth->mask.vlan_tag; + /* + * From verbs perspective an empty VLAN is equivalent + * to a packet without VLAN layer. + */ + if (!eth->mask.vlan_tag) + goto error; } + return 0; } - return 0; +error: + return rte_flow_error_set(data->error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, + item, "VLAN cannot be empty"); } /** -- 2.20.1