• Ido Schimmel's avatar
    mlxsw: spectrum: Flush FDB when leaving bridge · 039c49a6
    Ido Schimmel authored
    As explained in previous commit, we should always take care of flushing
    the FDB in the driver and not rely on bridge code.
    
    We need to distinguish between two cases with regards to LAG:
    
    1) Port is leaving LAG while LAG is bridged (or VLAN devices on top of
    it). In this case don't flush the FDB entries pointing to the LAG ID, as
    this will affect other ports still member in the LAG. Only flush the FDB
    when the last port in the LAG is leaving the bridge.
    
    2) LAG device is leaving the bridge. In this case the CHANGEUPPER event
    is simply propagated to each member port, so make each port flush the
    FDB in its turn.
    
    Note that emptying a bridged LAG from ports creates an inconsistency
    between hardware and software. A user who later (< ageing_time)
    re-populates the LAG won't have any FDB entries pointing to the LAG ID
    in hardware, but they will be present in the software bridge's FDB.
    Currently there is no good solution to this problem, but this will be
    addressed by us in the future.
    
    In order to optimize the flushing process, flush by port or LAG ID if
    there are no VLAN interfaces on top of the port. Otherwise, flush using
    (Port / LAG ID, FID=VID} for each of the lower 4K FIDs. In the case of
    VLAN device simply flush using {Port / LAG ID, vFID} with the vFID to
    which the VLAN device is mapped to.
    
    Fixes: 56ade8fe ("mlxsw: spectrum: Add initial support for Spectrum ASIC")
    Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
    Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    039c49a6
spectrum.c 80.7 KB