net/sfc: support SW stats groups
[dpdk.git] / drivers / net / mlx5 / mlx5_flow_verbs.c
index a36b8ad..b93fd4d 100644 (file)
@@ -1257,6 +1257,7 @@ flow_verbs_validate(struct rte_eth_dev *dev,
        uint8_t next_protocol = 0xff;
        uint16_t ether_type = 0;
        bool is_empty_vlan = false;
+       uint16_t udp_dport = 0;
 
        if (items == NULL)
                return -1;
@@ -1364,6 +1365,15 @@ flow_verbs_validate(struct rte_eth_dev *dev,
                        ret = mlx5_flow_validate_item_udp(items, item_flags,
                                                          next_protocol,
                                                          error);
+                       const struct rte_flow_item_udp *spec = items->spec;
+                       const struct rte_flow_item_udp *mask = items->mask;
+                       if (!mask)
+                               mask = &rte_flow_item_udp_mask;
+                       if (spec != NULL)
+                               udp_dport = rte_be_to_cpu_16
+                                               (spec->hdr.dst_port &
+                                                mask->hdr.dst_port);
+
                        if (ret < 0)
                                return ret;
                        last_item = tunnel ? MLX5_FLOW_LAYER_INNER_L4_UDP :
@@ -1381,9 +1391,9 @@ flow_verbs_validate(struct rte_eth_dev *dev,
                                             MLX5_FLOW_LAYER_OUTER_L4_TCP;
                        break;
                case RTE_FLOW_ITEM_TYPE_VXLAN:
-                       ret = mlx5_flow_validate_item_vxlan(dev, items,
-                                                           item_flags, attr,
-                                                           error);
+                       ret = mlx5_flow_validate_item_vxlan(dev, udp_dport,
+                                                           items, item_flags,
+                                                           attr, error);
                        if (ret < 0)
                                return ret;
                        last_item = MLX5_FLOW_LAYER_VXLAN;