OSDN Git Service

mlxsw: spectrum_acl: Propagate extack pointer
authorNir Dotan <nird@mellanox.com>
Tue, 24 Jul 2018 14:13:11 +0000 (17:13 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 24 Jul 2018 17:10:33 +0000 (10:10 -0700)
Propagate extack pointer in order to add extack messages for ACL.
In the follow-up patches, appropriate messages will be added
in various points.

Signed-off-by: Nir Dotan <nird@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c
drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h
drivers/net/ethernet/mellanox/mlxsw/spectrum.h
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c

index 9a47362..b09de72 100644 (file)
@@ -753,7 +753,8 @@ mlxsw_afa_vlan_pack(char *payload,
 }
 
 int mlxsw_afa_block_append_vlan_modify(struct mlxsw_afa_block *block,
-                                      u16 vid, u8 pcp, u8 et)
+                                      u16 vid, u8 pcp, u8 et,
+                                      struct netlink_ext_ack *extack)
 {
        char *act = mlxsw_afa_block_append_action(block,
                                                  MLXSW_AFA_VLAN_CODE,
@@ -953,7 +954,8 @@ mlxsw_afa_block_append_allocated_mirror(struct mlxsw_afa_block *block,
 
 int
 mlxsw_afa_block_append_mirror(struct mlxsw_afa_block *block, u8 local_in_port,
-                             const struct net_device *out_dev, bool ingress)
+                             const struct net_device *out_dev, bool ingress,
+                             struct netlink_ext_ack *extack)
 {
        struct mlxsw_afa_mirror *mirror;
        int err;
@@ -1015,7 +1017,8 @@ mlxsw_afa_forward_pack(char *payload, enum mlxsw_afa_forward_type type,
 }
 
 int mlxsw_afa_block_append_fwd(struct mlxsw_afa_block *block,
-                              u8 local_port, bool in_port)
+                              u8 local_port, bool in_port,
+                              struct netlink_ext_ack *extack)
 {
        struct mlxsw_afa_fwd_entry_ref *fwd_entry_ref;
        u32 kvdl_index;
@@ -1096,7 +1099,8 @@ int mlxsw_afa_block_append_allocated_counter(struct mlxsw_afa_block *block,
 EXPORT_SYMBOL(mlxsw_afa_block_append_allocated_counter);
 
 int mlxsw_afa_block_append_counter(struct mlxsw_afa_block *block,
-                                  u32 *p_counter_index)
+                                  u32 *p_counter_index,
+                                  struct netlink_ext_ack *extack)
 {
        struct mlxsw_afa_counter *counter;
        u32 counter_index;
@@ -1153,7 +1157,8 @@ static inline void mlxsw_afa_virfwd_pack(char *payload,
        mlxsw_afa_virfwd_fid_set(payload, fid);
 }
 
-int mlxsw_afa_block_append_fid_set(struct mlxsw_afa_block *block, u16 fid)
+int mlxsw_afa_block_append_fid_set(struct mlxsw_afa_block *block, u16 fid,
+                                  struct netlink_ext_ack *extack)
 {
        char *act = mlxsw_afa_block_append_action(block,
                                                  MLXSW_AFA_VIRFWD_CODE,
index 6962858..a6ffadd 100644 (file)
@@ -80,16 +80,21 @@ int mlxsw_afa_block_append_trap_and_forward(struct mlxsw_afa_block *block,
 int mlxsw_afa_block_append_mirror(struct mlxsw_afa_block *block,
                                  u8 local_in_port,
                                  const struct net_device *out_dev,
-                                 bool ingress);
+                                 bool ingress,
+                                 struct netlink_ext_ack *extack);
 int mlxsw_afa_block_append_fwd(struct mlxsw_afa_block *block,
-                              u8 local_port, bool in_port);
+                              u8 local_port, bool in_port,
+                              struct netlink_ext_ack *extack);
 int mlxsw_afa_block_append_vlan_modify(struct mlxsw_afa_block *block,
-                                      u16 vid, u8 pcp, u8 et);
+                                      u16 vid, u8 pcp, u8 et,
+                                      struct netlink_ext_ack *extack);
 int mlxsw_afa_block_append_allocated_counter(struct mlxsw_afa_block *block,
                                             u32 counter_index);
 int mlxsw_afa_block_append_counter(struct mlxsw_afa_block *block,
-                                  u32 *p_counter_index);
-int mlxsw_afa_block_append_fid_set(struct mlxsw_afa_block *block, u16 fid);
+                                  u32 *p_counter_index,
+                                  struct netlink_ext_ack *extack);
+int mlxsw_afa_block_append_fid_set(struct mlxsw_afa_block *block, u16 fid,
+                                  struct netlink_ext_ack *extack);
 int mlxsw_afa_block_append_mcrouter(struct mlxsw_afa_block *block,
                                    u16 expected_irif, u16 min_mtu,
                                    bool rmid_valid, u32 kvdl_index);
index 3db386c..589c63d 100644 (file)
@@ -571,25 +571,30 @@ int mlxsw_sp_acl_rulei_act_trap(struct mlxsw_sp_acl_rule_info *rulei);
 int mlxsw_sp_acl_rulei_act_mirror(struct mlxsw_sp *mlxsw_sp,
                                  struct mlxsw_sp_acl_rule_info *rulei,
                                  struct mlxsw_sp_acl_block *block,
-                                 struct net_device *out_dev);
+                                 struct net_device *out_dev,
+                                 struct netlink_ext_ack *extack);
 int mlxsw_sp_acl_rulei_act_fwd(struct mlxsw_sp *mlxsw_sp,
                               struct mlxsw_sp_acl_rule_info *rulei,
-                              struct net_device *out_dev);
+                              struct net_device *out_dev,
+                              struct netlink_ext_ack *extack);
 int mlxsw_sp_acl_rulei_act_vlan(struct mlxsw_sp *mlxsw_sp,
                                struct mlxsw_sp_acl_rule_info *rulei,
-                               u32 action, u16 vid, u16 proto, u8 prio);
+                               u32 action, u16 vid, u16 proto, u8 prio,
+                               struct netlink_ext_ack *extack);
 int mlxsw_sp_acl_rulei_act_count(struct mlxsw_sp *mlxsw_sp,
-                                struct mlxsw_sp_acl_rule_info *rulei);
+                                struct mlxsw_sp_acl_rule_info *rulei,
+                                struct netlink_ext_ack *extack);
 int mlxsw_sp_acl_rulei_act_fid_set(struct mlxsw_sp *mlxsw_sp,
                                   struct mlxsw_sp_acl_rule_info *rulei,
-                                  u16 fid);
+                                  u16 fid, struct netlink_ext_ack *extack);
 
 struct mlxsw_sp_acl_rule;
 
 struct mlxsw_sp_acl_rule *
 mlxsw_sp_acl_rule_create(struct mlxsw_sp *mlxsw_sp,
                         struct mlxsw_sp_acl_ruleset *ruleset,
-                        unsigned long cookie);
+                        unsigned long cookie,
+                        struct netlink_ext_ack *extack);
 void mlxsw_sp_acl_rule_destroy(struct mlxsw_sp *mlxsw_sp,
                               struct mlxsw_sp_acl_rule *rule);
 int mlxsw_sp_acl_rule_add(struct mlxsw_sp *mlxsw_sp,
index 4a47391..c97d40c 100644 (file)
@@ -538,7 +538,8 @@ int mlxsw_sp_acl_rulei_act_trap(struct mlxsw_sp_acl_rule_info *rulei)
 
 int mlxsw_sp_acl_rulei_act_fwd(struct mlxsw_sp *mlxsw_sp,
                               struct mlxsw_sp_acl_rule_info *rulei,
-                              struct net_device *out_dev)
+                              struct net_device *out_dev,
+                              struct netlink_ext_ack *extack)
 {
        struct mlxsw_sp_port *mlxsw_sp_port;
        u8 local_port;
@@ -560,13 +561,14 @@ int mlxsw_sp_acl_rulei_act_fwd(struct mlxsw_sp *mlxsw_sp,
                in_port = true;
        }
        return mlxsw_afa_block_append_fwd(rulei->act_block,
-                                         local_port, in_port);
+                                         local_port, in_port, extack);
 }
 
 int mlxsw_sp_acl_rulei_act_mirror(struct mlxsw_sp *mlxsw_sp,
                                  struct mlxsw_sp_acl_rule_info *rulei,
                                  struct mlxsw_sp_acl_block *block,
-                                 struct net_device *out_dev)
+                                 struct net_device *out_dev,
+                                 struct netlink_ext_ack *extack)
 {
        struct mlxsw_sp_acl_block_binding *binding;
        struct mlxsw_sp_port *in_port;
@@ -581,12 +583,14 @@ int mlxsw_sp_acl_rulei_act_mirror(struct mlxsw_sp *mlxsw_sp,
        return mlxsw_afa_block_append_mirror(rulei->act_block,
                                             in_port->local_port,
                                             out_dev,
-                                            binding->ingress);
+                                            binding->ingress,
+                                            extack);
 }
 
 int mlxsw_sp_acl_rulei_act_vlan(struct mlxsw_sp *mlxsw_sp,
                                struct mlxsw_sp_acl_rule_info *rulei,
-                               u32 action, u16 vid, u16 proto, u8 prio)
+                               u32 action, u16 vid, u16 proto, u8 prio,
+                               struct netlink_ext_ack *extack)
 {
        u8 ethertype;
 
@@ -605,7 +609,8 @@ int mlxsw_sp_acl_rulei_act_vlan(struct mlxsw_sp *mlxsw_sp,
                }
 
                return mlxsw_afa_block_append_vlan_modify(rulei->act_block,
-                                                         vid, prio, ethertype);
+                                                         vid, prio, ethertype,
+                                                         extack);
        } else {
                dev_err(mlxsw_sp->bus_info->dev, "Unsupported VLAN action\n");
                return -EINVAL;
@@ -613,23 +618,25 @@ int mlxsw_sp_acl_rulei_act_vlan(struct mlxsw_sp *mlxsw_sp,
 }
 
 int mlxsw_sp_acl_rulei_act_count(struct mlxsw_sp *mlxsw_sp,
-                                struct mlxsw_sp_acl_rule_info *rulei)
+                                struct mlxsw_sp_acl_rule_info *rulei,
+                                struct netlink_ext_ack *extack)
 {
        return mlxsw_afa_block_append_counter(rulei->act_block,
-                                             &rulei->counter_index);
+                                             &rulei->counter_index, extack);
 }
 
 int mlxsw_sp_acl_rulei_act_fid_set(struct mlxsw_sp *mlxsw_sp,
                                   struct mlxsw_sp_acl_rule_info *rulei,
-                                  u16 fid)
+                                  u16 fid, struct netlink_ext_ack *extack)
 {
-       return mlxsw_afa_block_append_fid_set(rulei->act_block, fid);
+       return mlxsw_afa_block_append_fid_set(rulei->act_block, fid, extack);
 }
 
 struct mlxsw_sp_acl_rule *
 mlxsw_sp_acl_rule_create(struct mlxsw_sp *mlxsw_sp,
                         struct mlxsw_sp_acl_ruleset *ruleset,
-                        unsigned long cookie)
+                        unsigned long cookie,
+                        struct netlink_ext_ack *extack)
 {
        const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops;
        struct mlxsw_sp_acl_rule *rule;
index b3cb618..ddcaa9c 100644 (file)
@@ -48,7 +48,8 @@
 static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
                                         struct mlxsw_sp_acl_block *block,
                                         struct mlxsw_sp_acl_rule_info *rulei,
-                                        struct tcf_exts *exts)
+                                        struct tcf_exts *exts,
+                                        struct netlink_ext_ack *extack)
 {
        const struct tc_action *a;
        LIST_HEAD(actions);
@@ -58,7 +59,7 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
                return 0;
 
        /* Count action is inserted first */
-       err = mlxsw_sp_acl_rulei_act_count(mlxsw_sp, rulei);
+       err = mlxsw_sp_acl_rulei_act_count(mlxsw_sp, rulei, extack);
        if (err)
                return err;
 
@@ -99,20 +100,21 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
                        fid = mlxsw_sp_acl_dummy_fid(mlxsw_sp);
                        fid_index = mlxsw_sp_fid_index(fid);
                        err = mlxsw_sp_acl_rulei_act_fid_set(mlxsw_sp, rulei,
-                                                            fid_index);
+                                                            fid_index, extack);
                        if (err)
                                return err;
 
                        out_dev = tcf_mirred_dev(a);
                        err = mlxsw_sp_acl_rulei_act_fwd(mlxsw_sp, rulei,
-                                                        out_dev);
+                                                        out_dev, extack);
                        if (err)
                                return err;
                } else if (is_tcf_mirred_egress_mirror(a)) {
                        struct net_device *out_dev = tcf_mirred_dev(a);
 
                        err = mlxsw_sp_acl_rulei_act_mirror(mlxsw_sp, rulei,
-                                                           block, out_dev);
+                                                           block, out_dev,
+                                                           extack);
                        if (err)
                                return err;
                } else if (is_tcf_vlan(a)) {
@@ -123,7 +125,7 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
 
                        return mlxsw_sp_acl_rulei_act_vlan(mlxsw_sp, rulei,
                                                           action, vid,
-                                                          proto, prio);
+                                                          proto, prio, extack);
                } else {
                        dev_err(mlxsw_sp->bus_info->dev, "Unsupported action\n");
                        return -EOPNOTSUPP;
@@ -400,7 +402,8 @@ static int mlxsw_sp_flower_parse(struct mlxsw_sp *mlxsw_sp,
        if (err)
                return err;
 
-       return mlxsw_sp_flower_parse_actions(mlxsw_sp, block, rulei, f->exts);
+       return mlxsw_sp_flower_parse_actions(mlxsw_sp, block, rulei, f->exts,
+                                            f->common.extack);
 }
 
 int mlxsw_sp_flower_replace(struct mlxsw_sp *mlxsw_sp,
@@ -418,7 +421,8 @@ int mlxsw_sp_flower_replace(struct mlxsw_sp *mlxsw_sp,
        if (IS_ERR(ruleset))
                return PTR_ERR(ruleset);
 
-       rule = mlxsw_sp_acl_rule_create(mlxsw_sp, ruleset, f->cookie);
+       rule = mlxsw_sp_acl_rule_create(mlxsw_sp, ruleset, f->cookie,
+                                       f->common.extack);
        if (IS_ERR(rule)) {
                err = PTR_ERR(rule);
                goto err_rule_create;