net/mlx5: fix L3 encapsulation flow validation
authorMatan Azrad <matan@mellanox.com>
Tue, 19 Nov 2019 15:32:28 +0000 (15:32 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 20 Nov 2019 16:36:06 +0000 (17:36 +0100)
In order to configure L3 encapsulation\decapsulation flow to mlx5
devices, 2 actions should be added to the flow actions list:
RTE_FLOW_ACTION_TYPE_RAW_DECAP and RTE_FLOW_ACTION_TYPE_RAW_ENCAP.

One of the validations for this scenario is to check that modify actions
is not done before the L3 decapsulation, because it doesn't make sense
to decapsulate a modified data.

Wrongly, this check was done for the case of L3 encapsulation what
causes a validation failure in modify + L3 encapsulation flow.

Ignore this check in case of L3 encapsulation.

Fixes: 4bb14c83df95 ("net/mlx5: support modify header using Direct Verbs")
Cc: stable@dpdk.org
Signed-off-by: Matan Azrad <matan@mellanox.com>
drivers/net/mlx5/mlx5_flow_dv.c

index 4dcd640..c402a8d 100644 (file)
@@ -2185,11 +2185,6 @@ flow_dv_validate_action_raw_decap(uint64_t action_flags,
                                          RTE_FLOW_ERROR_TYPE_ACTION, NULL,
                                          "can only have a single decap"
                                          " action in a flow");
-       if (action_flags & MLX5_FLOW_MODIFY_HDR_ACTIONS)
-               return rte_flow_error_set(error, EINVAL,
-                                         RTE_FLOW_ERROR_TYPE_ACTION, NULL,
-                                         "can't have decap action after"
-                                         " modify action");
        /* decap action is valid on egress only if it is followed by encap */
        if (attr->egress) {
                for (; action->type != RTE_FLOW_ACTION_TYPE_END &&
@@ -2202,6 +2197,11 @@ flow_dv_validate_action_raw_decap(uint64_t action_flags,
                                         RTE_FLOW_ERROR_TYPE_ATTR_EGRESS,
                                         NULL, "decap action not supported"
                                         " for egress");
+       } else if (action_flags & MLX5_FLOW_MODIFY_HDR_ACTIONS) {
+               return rte_flow_error_set(error, EINVAL,
+                                         RTE_FLOW_ERROR_TYPE_ACTION, NULL,
+                                         "can't have decap action after"
+                                         " modify action");
        }
        return 0;
 }