On Tue, Dec 01, 2020 at 16:03, Vladimir Oltean <olte...@gmail.com> wrote: > On Mon, Nov 30, 2020 at 03:06:08PM +0100, Tobias Waldekranz wrote: >> When a LAG joins a bridge, the DSA subsystem will treat that as each >> individual port joining the bridge. The driver may look at the port's >> LAG pointer to see if it is associated with any LAG, if that is >> required. This is analogue to how switchdev events are replicated out >> to all lower devices when reaching e.g. a LAG. > > Agree with the principle. But doesn't that mean that this code: > > static int dsa_slave_switchdev_blocking_event(struct notifier_block *unused, > unsigned long event, void *ptr) > { > struct net_device *dev = switchdev_notifier_info_to_dev(ptr); > int err; > > switch (event) { > case SWITCHDEV_PORT_OBJ_ADD: > err = switchdev_handle_port_obj_add(dev, ptr, > dsa_slave_dev_check, > dsa_slave_port_obj_add); > return notifier_from_errno(err); > case SWITCHDEV_PORT_OBJ_DEL: > err = switchdev_handle_port_obj_del(dev, ptr, > dsa_slave_dev_check, > dsa_slave_port_obj_del); > return notifier_from_errno(err); > case SWITCHDEV_PORT_ATTR_SET: > err = switchdev_handle_port_attr_set(dev, ptr, > dsa_slave_dev_check, > dsa_slave_port_attr_set); > return notifier_from_errno(err); > } > > return NOTIFY_DONE; > } > > should be replaced with something that also reacts to the case where > "dev" is a LAG? Like, for example, I imagine that a VLAN installed on a > bridge port that is a LAG should be propagated to the switch ports > beneath that LAG. Similarly for all bridge attributes.
That is exactly what switchdev_handle_* does, no? It is this exact behavior that my statement about switchdev event replication references. > As for FDB and MDB addresses, I think they should be propagated towards > a "logical port" corresponding to the LAG upper. I don't know how the > mv88e6xxx handles this. mv88e6xxx differentiates between multicast and unicast entries. So MDB entries fit very well with the obj_add/del+replication. Unicast entries will have use "lagX" as its destination, so in that case we need a new dsa op along the lines of "lag_fdb_add/del".