On 8/22/19 12:07 PM, Horatiu Vultur wrote: > Current implementation of the SW bridge is setting the interfaces in > promisc mode when they are added to bridge if learning of the frames is > enabled. > In case of Ocelot which has HW capabilities to switch frames, it is not > needed to set the ports in promisc mode because the HW already capable of > doing that. Therefore add NETIF_F_HW_BRIDGE feature to indicate that the > HW has bridge capabilities. Therefore the SW bridge doesn't need to set > the ports in promisc mode to do the switching. Then do not do anything when the ndo_set_rx_mode() for the ocelot network device is called and indicates that IFF_PROMISC is set and that your network port is a bridge port member. That is what mlxsw does AFAICT. As other pointed out, the Linux bridge implements a software bridge by default, and because it needs to operate on a wide variety of network devices, all with different capabilities, the easiest way to make sure that all management (IGMP, BPDU, etc. ) as well as non-management traffic can make it to the bridge ports, is to put the network devices in promiscuous mode. If this is suboptimal for you, you can take shortcuts in your driver that do not hinder the overall functionality. > This optimization takes places only if all the interfaces that are part > of the bridge have this flag and have the same network driver. > > If the bridge interfaces is added in promisc mode then also the ports part > of the bridge are set in promisc mode. > > Horatiu Vultur (3): > net: Add HW_BRIDGE offload feature > net: mscc: Use NETIF_F_HW_BRIDGE > net: mscc: Implement promisc mode. > > drivers/net/ethernet/mscc/ocelot.c | 26 ++++++++++++++++++++++++-- > include/linux/netdev_features.h | 3 +++ > net/bridge/br_if.c | 29 ++++++++++++++++++++++++++++- > net/core/ethtool.c | 1 + > 4 files changed, 56 insertions(+), 3 deletions(-) > -- Florian