Hi Jiri, Jiri Pirko <j...@resnulli.us> writes:
> Wed, Mar 09, 2016 at 07:32:13PM CET, and...@lunn.ch wrote: >>Hi Vivien >> >>> -static bool dsa_slave_dev_check(struct net_device *dev) >>> -{ >>> - return dev->netdev_ops == &dsa_slave_netdev_ops; >>> -} >> >>Where is the equivalent of this happening? Where do we check that the >>interface added to the bridge is part of the switch? >> >>> -int dsa_slave_netdevice_event(struct notifier_block *unused, >>> - unsigned long event, void *ptr) >>> -{ >>> - struct net_device *dev; >>> - int err = 0; >>> - >>> - switch (event) { >>> - case NETDEV_CHANGEUPPER: >>> - dev = netdev_notifier_info_to_dev(ptr); >>> - if (!dsa_slave_dev_check(dev)) >>> - goto out; >>> - >>> - err = dsa_slave_master_changed(dev); >>> - if (err && err != -EOPNOTSUPP) >>> - netdev_warn(dev, "failed to reflect master change\n"); >>> - >>> - break; >>> - } >>> - >>> -out: >>> - return NOTIFY_DONE; >>> -} >> >>How about team/bonding? We are not ready to implement it yet with the >>Marvell devices, but at some point we probably will. Won't we need the >>events then? We need to know when a switch port has been added to a >>team? >> >>Or do you think a switchdev object will be added for this case? >>Mellanox already have the ability to add switch interfaces to a team, >>and then add the team to a bridge. So we need to ensure your solution >>works for such stacked systems. > > I have to look at this more closer tomorrow, but I'm missing motivation > behind this. Using existing notifiers, drivers can easily monitor what > is going on with their uppers. Why do we need this to be changed? Yes with notifiers, drivers can monitor these changes with the NETDEV_CHANGEUPPER even. They can also forbid such bridging by returning NOTIFY_BAD in the NETDEV_PRECHANGEUPPER event if I'm not mistaken. But looking at DSA slave, Mellanox Spectrum, and Rocker, they all implement this similar heavy code, while they could support a common switchdev attribute and reduce boilerplate. But maybe I'm wrong, what why I sent that as an RFC :-) Thanks, Vivien