git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net/mlx5: fix default context in flow age action
[dpdk.git]
/
drivers
/
net
/
mlx5
/
mlx5_flow_verbs.c
diff --git
a/drivers/net/mlx5/mlx5_flow_verbs.c
b/drivers/net/mlx5/mlx5_flow_verbs.c
index
205b057
..
fe96733
100644
(file)
--- a/
drivers/net/mlx5/mlx5_flow_verbs.c
+++ b/
drivers/net/mlx5/mlx5_flow_verbs.c
@@
-23,7
+23,7
@@
#include "mlx5_defs.h"
#include "mlx5.h"
#include "mlx5_flow.h"
#include "mlx5_defs.h"
#include "mlx5.h"
#include "mlx5_flow.h"
-#include "mlx5_rx
tx
.h"
+#include "mlx5_rx.h"
#define VERBS_SPEC_INNER(item_flags) \
(!!((item_flags) & MLX5_FLOW_LAYER_TUNNEL) ? IBV_FLOW_SPEC_INNER : 0)
#define VERBS_SPEC_INNER(item_flags) \
(!!((item_flags) & MLX5_FLOW_LAYER_TUNNEL) ? IBV_FLOW_SPEC_INNER : 0)
@@
-357,7
+357,7
@@
flow_verbs_counter_release(struct rte_eth_dev *dev, uint32_t counter)
struct mlx5_flow_counter *cnt;
cnt = flow_verbs_counter_get_by_idx(dev, counter, &pool);
struct mlx5_flow_counter *cnt;
cnt = flow_verbs_counter_get_by_idx(dev, counter, &pool);
- if (IS_SHARED_CNT(counter) &&
+ if (IS_
LEGACY_
SHARED_CNT(counter) &&
mlx5_l3t_clear_entry(priv->sh->cnt_id_tbl, cnt->shared_info.id))
return;
#if defined(HAVE_IBV_DEVICE_COUNTERS_SET_V42)
mlx5_l3t_clear_entry(priv->sh->cnt_id_tbl, cnt->shared_info.id))
return;
#if defined(HAVE_IBV_DEVICE_COUNTERS_SET_V42)
@@
-1256,6
+1256,7
@@
flow_verbs_validate(struct rte_eth_dev *dev,
uint64_t last_item = 0;
uint8_t next_protocol = 0xff;
uint16_t ether_type = 0;
uint64_t last_item = 0;
uint8_t next_protocol = 0xff;
uint16_t ether_type = 0;
+ bool is_empty_vlan = false;
if (items == NULL)
return -1;
if (items == NULL)
return -1;
@@
-1283,6
+1284,8
@@
flow_verbs_validate(struct rte_eth_dev *dev,
ether_type &=
((const struct rte_flow_item_eth *)
items->mask)->type;
ether_type &=
((const struct rte_flow_item_eth *)
items->mask)->type;
+ if (ether_type == RTE_BE16(RTE_ETHER_TYPE_VLAN))
+ is_empty_vlan = true;
ether_type = rte_be_to_cpu_16(ether_type);
} else {
ether_type = 0;
ether_type = rte_be_to_cpu_16(ether_type);
} else {
ether_type = 0;
@@
-1308,6
+1311,7
@@
flow_verbs_validate(struct rte_eth_dev *dev,
} else {
ether_type = 0;
}
} else {
ether_type = 0;
}
+ is_empty_vlan = false;
break;
case RTE_FLOW_ITEM_TYPE_IPV4:
ret = mlx5_flow_validate_item_ipv4
break;
case RTE_FLOW_ITEM_TYPE_IPV4:
ret = mlx5_flow_validate_item_ipv4
@@
-1419,6
+1423,10
@@
flow_verbs_validate(struct rte_eth_dev *dev,
}
item_flags |= last_item;
}
}
item_flags |= last_item;
}
+ if (is_empty_vlan)
+ return rte_flow_error_set(error, ENOTSUP,
+ RTE_FLOW_ERROR_TYPE_ITEM, NULL,
+ "VLAN matching without vid specification is not supported");
for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
switch (actions->type) {
case RTE_FLOW_ACTION_TYPE_VOID:
for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
switch (actions->type) {
case RTE_FLOW_ACTION_TYPE_VOID: