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. 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.