OSDN Git Service

net/mlx5e: Move goto action checks into tc_action goto post parse op
authorRoi Dayan <roid@nvidia.com>
Sun, 15 Aug 2021 10:23:14 +0000 (13:23 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 15 Dec 2021 05:29:46 +0000 (21:29 -0800)
Move goto action checks from parse nic/fdb funcs into the tc action
infra goto post parse op.
While moving this part also use NL_SET_ERR_MSG_MOD() instead of
NL_SET_ERR_MSG().

Signed-off-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Oz Shlomo <ozsh@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/goto.c
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

index d713cf8..f445150 100644 (file)
@@ -81,7 +81,42 @@ tc_act_parse_goto(struct mlx5e_tc_act_parse_state *parse_state,
        return 0;
 }
 
+static int
+tc_act_post_parse_goto(struct mlx5e_tc_act_parse_state *parse_state,
+                      struct mlx5e_priv *priv,
+                      struct mlx5_flow_attr *attr)
+{
+       struct mlx5e_tc_flow_parse_attr *parse_attr = attr->parse_attr;
+       struct netlink_ext_ack *extack = parse_state->extack;
+       struct mlx5e_tc_flow *flow = parse_state->flow;
+
+       if (!attr->dest_chain)
+               return 0;
+
+       if (parse_state->decap) {
+               /* It can be supported if we'll create a mapping for
+                * the tunnel device only (without tunnel), and set
+                * this tunnel id with this decap flow.
+                *
+                * On restore (miss), we'll just set this saved tunnel
+                * device.
+                */
+
+               NL_SET_ERR_MSG_MOD(extack, "Decap with goto isn't supported");
+               netdev_warn(priv->netdev, "Decap with goto isn't supported");
+               return -EOPNOTSUPP;
+       }
+
+       if (!mlx5e_is_eswitch_flow(flow) && parse_attr->mirred_ifindex[0]) {
+               NL_SET_ERR_MSG_MOD(extack, "Mirroring goto chain rules isn't supported");
+               return -EOPNOTSUPP;
+       }
+
+       return 0;
+}
+
 struct mlx5e_tc_act mlx5e_tc_act_goto = {
        .can_offload = tc_act_can_offload_goto,
        .parse_action = tc_act_parse_goto,
+       .post_parse = tc_act_post_parse_goto,
 };
index 28a8db8..eec919f 100644 (file)
@@ -3241,11 +3241,6 @@ parse_tc_nic_actions(struct mlx5e_priv *priv,
        if (err)
                return err;
 
-       if (attr->dest_chain && parse_attr->mirred_ifindex[0]) {
-               NL_SET_ERR_MSG(extack, "Mirroring goto chain rules isn't supported");
-               return -EOPNOTSUPP;
-       }
-
        err = actions_prepare_mod_hdr_actions(priv, flow, attr, hdrs, extack);
        if (err)
                return err;
@@ -3384,20 +3379,6 @@ parse_tc_fdb_actions(struct mlx5e_priv *priv,
        if (!actions_match_supported(priv, flow_action, parse_attr, flow, extack))
                return -EOPNOTSUPP;
 
-       if (attr->dest_chain && parse_state->decap) {
-               /* It can be supported if we'll create a mapping for
-                * the tunnel device only (without tunnel), and set
-                * this tunnel id with this decap flow.
-                *
-                * On restore (miss), we'll just set this saved tunnel
-                * device.
-                */
-
-               NL_SET_ERR_MSG(extack, "Decap with goto isn't supported");
-               netdev_warn(priv->netdev, "Decap with goto isn't supported");
-               return -EOPNOTSUPP;
-       }
-
        return 0;
 }