Message ID | 1444754783-26975-2-git-send-email-vivien.didelot@savoirfairelinux.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
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
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 --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;
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(+)