diff mbox

[net-next,v2,1/6] net: dsa: add port_fdb_dump function

Message ID 1444754783-26975-2-git-send-email-vivien.didelot@savoirfairelinux.com
State Changes Requested, archived
Delegated to: David Miller
Headers show

Commit Message

Vivien Didelot Oct. 13, 2015, 4:46 p.m. UTC
Not all switch chips support a Get Next operation to iterate on its FDB.
So add a more simple port_fdb_dump function for them.

Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
---
 include/net/dsa.h | 5 +++++
 net/dsa/slave.c   | 3 +++
 2 files changed, 8 insertions(+)

Comments

David Miller Oct. 14, 2015, 1:12 p.m. UTC | #1
From: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Date: Tue, 13 Oct 2015 12:46:18 -0400

> @@ -198,7 +198,9 @@ static inline u8 dsa_upstream_port(struct dsa_switch *ds)
>  }
>  
>  struct switchdev_trans;
> +struct switchdev_obj;
>  struct switchdev_obj_port_fdb;
> +typedef int switchdev_obj_dump_cb_t(struct switchdev_obj *obj);
>  
>  struct dsa_switch_driver {
>  	struct list_head	list;
 ...
> @@ -382,6 +382,9 @@ static int dsa_slave_port_fdb_dump(struct net_device *dev,
>  	u16 vid = 0;
>  	int ret;
>  
> +	if (ds->drv->port_fdb_dump)
> +		return ds->drv->port_fdb_dump(ds, p->port, fdb, cb);
> +
>  	if (!ds->drv->port_fdb_getnext)

I realize you're fighting include file dependency issues, but this is
rediculous.  Now you're using two different typedefs for this callback
function pointer.

This is why typedef's suck.

We should just opencode "int (*cb)(struct switchdev_obj *)" everywhere
and kill these typedefs which are obviously just getting in the way
and making us do silly things.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Florian Fainelli Oct. 14, 2015, 6:49 p.m. UTC | #2
On 13/10/15 09:46, Vivien Didelot wrote:
> Not all switch chips support a Get Next operation to iterate on its FDB.
> So add a more simple port_fdb_dump function for them.
> 
> Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>

Acked-by: Florian Fainelli <f.fainelli@gmail.com>
diff mbox

Patch

diff --git a/include/net/dsa.h b/include/net/dsa.h
index e005886..c5c48c5 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -198,7 +198,9 @@  static inline u8 dsa_upstream_port(struct dsa_switch *ds)
 }
 
 struct switchdev_trans;
+struct switchdev_obj;
 struct switchdev_obj_port_fdb;
+typedef int switchdev_obj_dump_cb_t(struct switchdev_obj *obj);
 
 struct dsa_switch_driver {
 	struct list_head	list;
@@ -330,6 +332,9 @@  struct dsa_switch_driver {
 	int	(*port_fdb_getnext)(struct dsa_switch *ds, int port,
 				    unsigned char *addr, u16 *vid,
 				    bool *is_static);
+	int	(*port_fdb_dump)(struct dsa_switch *ds, int port,
+				 struct switchdev_obj_port_fdb *fdb,
+				 switchdev_obj_dump_cb_t *cb);
 };
 
 void register_switch_driver(struct dsa_switch_driver *type);
diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index 43d7342..a4e3416 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -382,6 +382,9 @@  static int dsa_slave_port_fdb_dump(struct net_device *dev,
 	u16 vid = 0;
 	int ret;
 
+	if (ds->drv->port_fdb_dump)
+		return ds->drv->port_fdb_dump(ds, p->port, fdb, cb);
+
 	if (!ds->drv->port_fdb_getnext)
 		return -EOPNOTSUPP;