net: dsa: pass extack to dsa_switch_ops :: port_mirror_add()
authorVladimir Oltean <vladimir.oltean@nxp.com>
Wed, 16 Mar 2022 20:41:43 +0000 (22:41 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 18 Mar 2022 00:42:47 +0000 (17:42 -0700)
Drivers might have error messages to propagate to user space, most
common being that they support a single mirror port.

Propagate the netlink extack so that they can inform user space in a
verbal way of their limitations.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/b53/b53_common.c
drivers/net/dsa/b53/b53_priv.h
drivers/net/dsa/microchip/ksz8795.c
drivers/net/dsa/microchip/ksz9477.c
drivers/net/dsa/mt7530.c
drivers/net/dsa/mv88e6xxx/chip.c
drivers/net/dsa/qca8k.c
drivers/net/dsa/sja1105/sja1105_main.c
include/net/dsa.h
net/dsa/slave.c

index 122e637..77501f9 100644 (file)
@@ -2110,7 +2110,8 @@ out:
 EXPORT_SYMBOL(b53_get_tag_protocol);
 
 int b53_mirror_add(struct dsa_switch *ds, int port,
-                  struct dsa_mall_mirror_tc_entry *mirror, bool ingress)
+                  struct dsa_mall_mirror_tc_entry *mirror, bool ingress,
+                  struct netlink_ext_ack *extack)
 {
        struct b53_device *dev = ds->priv;
        u16 reg, loc;
index 86e7eb7..3085b6c 100644 (file)
@@ -373,7 +373,8 @@ int b53_mdb_del(struct dsa_switch *ds, int port,
                const struct switchdev_obj_port_mdb *mdb,
                struct dsa_db db);
 int b53_mirror_add(struct dsa_switch *ds, int port,
-                  struct dsa_mall_mirror_tc_entry *mirror, bool ingress);
+                  struct dsa_mall_mirror_tc_entry *mirror, bool ingress,
+                  struct netlink_ext_ack *extack);
 enum dsa_tag_protocol b53_get_tag_protocol(struct dsa_switch *ds, int port,
                                           enum dsa_tag_protocol mprot);
 void b53_mirror_del(struct dsa_switch *ds, int port,
index 6f9cdd5..b275297 100644 (file)
@@ -1233,7 +1233,7 @@ static int ksz8_port_vlan_del(struct dsa_switch *ds, int port,
 
 static int ksz8_port_mirror_add(struct dsa_switch *ds, int port,
                                struct dsa_mall_mirror_tc_entry *mirror,
-                               bool ingress)
+                               bool ingress, struct netlink_ext_ack *extack)
 {
        struct ksz_device *dev = ds->priv;
 
index a469948..8222c8a 100644 (file)
@@ -1018,7 +1018,7 @@ exit:
 
 static int ksz9477_port_mirror_add(struct dsa_switch *ds, int port,
                                   struct dsa_mall_mirror_tc_entry *mirror,
-                                  bool ingress)
+                                  bool ingress, struct netlink_ext_ack *extack)
 {
        struct ksz_device *dev = ds->priv;
 
index 669f008..19f0035 100644 (file)
@@ -1714,7 +1714,7 @@ static int mt753x_mirror_port_set(unsigned int id, u32 val)
 
 static int mt753x_port_mirror_add(struct dsa_switch *ds, int port,
                                  struct dsa_mall_mirror_tc_entry *mirror,
-                                 bool ingress)
+                                 bool ingress, struct netlink_ext_ack *extack)
 {
        struct mt7530_priv *priv = ds->priv;
        int monitor_port;
index bed1a56..b36393b 100644 (file)
@@ -6321,7 +6321,8 @@ static int mv88e6xxx_port_mdb_del(struct dsa_switch *ds, int port,
 
 static int mv88e6xxx_port_mirror_add(struct dsa_switch *ds, int port,
                                     struct dsa_mall_mirror_tc_entry *mirror,
-                                    bool ingress)
+                                    bool ingress,
+                                    struct netlink_ext_ack *extack)
 {
        enum mv88e6xxx_egress_direction direction = ingress ?
                                                MV88E6XXX_EGRESS_DIR_INGRESS :
index ee0dbf3..d3ed0a7 100644 (file)
@@ -2473,7 +2473,7 @@ qca8k_port_mdb_del(struct dsa_switch *ds, int port,
 static int
 qca8k_port_mirror_add(struct dsa_switch *ds, int port,
                      struct dsa_mall_mirror_tc_entry *mirror,
-                     bool ingress)
+                     bool ingress, struct netlink_ext_ack *extack)
 {
        struct qca8k_priv *priv = ds->priv;
        int monitor_port, ret;
index 3358e97..b33841c 100644 (file)
@@ -2847,7 +2847,7 @@ static int sja1105_mirror_apply(struct sja1105_private *priv, int from, int to,
 
 static int sja1105_mirror_add(struct dsa_switch *ds, int port,
                              struct dsa_mall_mirror_tc_entry *mirror,
-                             bool ingress)
+                             bool ingress, struct netlink_ext_ack *extack)
 {
        return sja1105_mirror_apply(ds->priv, port, mirror->to_local_port,
                                    ingress, true);
index 06cdefd..934958f 100644 (file)
@@ -1028,7 +1028,7 @@ struct dsa_switch_ops {
                                    struct flow_cls_offload *cls, bool ingress);
        int     (*port_mirror_add)(struct dsa_switch *ds, int port,
                                   struct dsa_mall_mirror_tc_entry *mirror,
-                                  bool ingress);
+                                  bool ingress, struct netlink_ext_ack *extack);
        void    (*port_mirror_del)(struct dsa_switch *ds, int port,
                                   struct dsa_mall_mirror_tc_entry *mirror);
        int     (*port_policer_add)(struct dsa_switch *ds, int port,
index 54e5447..d1a3be1 100644 (file)
@@ -1173,6 +1173,7 @@ dsa_slave_add_cls_matchall_mirred(struct net_device *dev,
                                  struct tc_cls_matchall_offload *cls,
                                  bool ingress)
 {
+       struct netlink_ext_ack *extack = cls->common.extack;
        struct dsa_port *dp = dsa_slave_to_port(dev);
        struct dsa_slave_priv *p = netdev_priv(dev);
        struct dsa_mall_mirror_tc_entry *mirror;
@@ -1210,7 +1211,7 @@ dsa_slave_add_cls_matchall_mirred(struct net_device *dev,
        mirror->to_local_port = to_dp->index;
        mirror->ingress = ingress;
 
-       err = ds->ops->port_mirror_add(ds, dp->index, mirror, ingress);
+       err = ds->ops->port_mirror_add(ds, dp->index, mirror, ingress, extack);
        if (err) {
                kfree(mall_tc_entry);
                return err;