net/mlx5: fix meter policy creation assert
[dpdk.git] / drivers / net / mlx5 / mlx5_flow.c
index 9bb4ce2..15a4a8c 100644 (file)
@@ -175,6 +175,9 @@ mlx5_nsh_proto_to_item_type(uint8_t proto_spec, uint8_t proto_mask)
        enum rte_flow_item_type type;
 
        switch (proto_mask & proto_spec) {
+       case 0:
+               type = RTE_FLOW_ITEM_TYPE_VOID;
+               break;
        case RTE_VXLAN_GPE_TYPE_IPV4:
                type = RTE_FLOW_ITEM_TYPE_IPV4;
                break;
@@ -196,6 +199,9 @@ mlx5_inet_proto_to_item_type(uint8_t proto_spec, uint8_t proto_mask)
        enum rte_flow_item_type type;
 
        switch (proto_mask & proto_spec) {
+       case 0:
+               type = RTE_FLOW_ITEM_TYPE_VOID;
+               break;
        case IPPROTO_UDP:
                type = RTE_FLOW_ITEM_TYPE_UDP;
                break;
@@ -221,6 +227,9 @@ mlx5_ethertype_to_item_type(rte_be16_t type_spec,
        enum rte_flow_item_type type;
 
        switch (rte_be_to_cpu_16(type_spec & type_mask)) {
+       case 0:
+               type = RTE_FLOW_ITEM_TYPE_VOID;
+               break;
        case RTE_ETHER_TYPE_TEB:
                type = is_tunnel ?
                       RTE_FLOW_ITEM_TYPE_ETH : RTE_FLOW_ITEM_TYPE_END;
@@ -6287,6 +6296,8 @@ flow_create_split_meter(struct rte_eth_dev *dev,
                                                                  fm->policy_id,
                                                                  NULL);
                        MLX5_ASSERT(wks->policy);
+                       if (wks->policy->mark)
+                               wks->mark = 1;
                        if (wks->policy->is_hierarchy) {
                                wks->final_policy =
                                mlx5_flow_meter_hierarchy_get_final_policy(dev,