Hi Florian, Please take over these patches.
Thanks. On Wed, Feb 20, 2019 at 03:18:44PM -0800, Florian Fainelli wrote: > On 2/20/19 12:55 PM, Russell King wrote: > > The Linux bridge implementation allows various properties of the bridge > > to be controlled, such as flooding unknown unicast and multicast frames. > > This patch adds the necessary DSA infrastructure to allow the Linux > > bridge support to control these properties for DSA switches. > > > > Reviewed-by: Vivien Didelot <[email protected]> > > Signed-off-by: Russell King <[email protected]> > > --- > > include/net/dsa.h | 2 ++ > > net/dsa/dsa_priv.h | 2 ++ > > net/dsa/port.c | 17 +++++++++++++++++ > > net/dsa/slave.c | 6 ++++++ > > 4 files changed, 27 insertions(+) > > > > diff --git a/include/net/dsa.h b/include/net/dsa.h > > index 7f2a668ef2cc..2c2c10812814 100644 > > --- a/include/net/dsa.h > > +++ b/include/net/dsa.h > > @@ -400,6 +400,8 @@ struct dsa_switch_ops { > > void (*port_stp_state_set)(struct dsa_switch *ds, int port, > > u8 state); > > void (*port_fast_age)(struct dsa_switch *ds, int port); > > + int (*port_egress_floods)(struct dsa_switch *ds, int port, > > + bool unicast, bool multicast); > > > > /* > > * VLAN support > > diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h > > index 1f4972dab9f2..f4f99ec29f5d 100644 > > --- a/net/dsa/dsa_priv.h > > +++ b/net/dsa/dsa_priv.h > > @@ -160,6 +160,8 @@ int dsa_port_mdb_add(const struct dsa_port *dp, > > struct switchdev_trans *trans); > > int dsa_port_mdb_del(const struct dsa_port *dp, > > const struct switchdev_obj_port_mdb *mdb); > > +int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags, > > + struct switchdev_trans *trans); > > int dsa_port_vlan_add(struct dsa_port *dp, > > const struct switchdev_obj_port_vlan *vlan, > > struct switchdev_trans *trans); > > diff --git a/net/dsa/port.c b/net/dsa/port.c > > index 2d7e01b23572..6df29bddf37e 100644 > > --- a/net/dsa/port.c > > +++ b/net/dsa/port.c > > @@ -177,6 +177,23 @@ int dsa_port_ageing_time(struct dsa_port *dp, clock_t > > ageing_clock, > > return dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info); > > } > > > > +int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags, > > + struct switchdev_trans *trans) > > +{ > > + struct dsa_switch *ds = dp->ds; > > + int port = dp->index; > > + int err = 0; > > + > > + if (switchdev_trans_ph_prepare(trans)) > > + return 0; > > + > > + if (ds->ops->port_egress_floods) > > + err = ds->ops->port_egress_floods(ds, port, flags & BR_FLOOD, > > + flags & BR_MCAST_FLOOD); > > + > > + return err; > > +} > > + > > int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr, > > u16 vid) > > { > > diff --git a/net/dsa/slave.c b/net/dsa/slave.c > > index 2e5e7c04821b..f99161c3b1ea 100644 > > --- a/net/dsa/slave.c > > +++ b/net/dsa/slave.c > > @@ -295,6 +295,9 @@ static int dsa_slave_port_attr_set(struct net_device > > *dev, > > case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME: > > ret = dsa_port_ageing_time(dp, attr->u.ageing_time, trans); > > break; > > + case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS: > > + ret = dsa_port_bridge_flags(dp, attr->u.brport_flags, trans); > > + break; > > default: > > ret = -EOPNOTSUPP; > > break; > > @@ -384,6 +387,9 @@ static int dsa_slave_port_attr_get(struct net_device > > *dev, > > switch (attr->id) { > > case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS_SUPPORT: > > attr->u.brport_flags_support = 0; > > + if (ds->ops->port_egress_floods) > > + attr->u.brport_flags_support |= BR_FLOOD | > > + BR_MCAST_FLOOD; > > There is no struct dsa_switch *ds = dp->ds that is being declared in > dsa_slave_port_attr_get(): > > net/dsa/slave.c: In function 'dsa_slave_port_attr_get': > net/dsa/slave.c:390:7: error: 'ds' undeclared (first use in this function) > if (ds->ops->port_egress_floods) > ^~ > net/dsa/slave.c:390:7: note: each undeclared identifier is reported only > once for each function it appears in > scripts/Makefile.build:276: recipe for target 'net/dsa/slave.o' failed > make[4]: *** [net/dsa/slave.o] Error 1 > scripts/Makefile.build:492: recipe for target 'net/dsa' failed > make[3]: *** [net/dsa] Error 2 > make[3]: *** Waiting for unfinished jobs.... > > -- > Florian > -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up
