• Ido Schimmel's avatar
    mlxsw: spectrum_router: Simplify neighbour reflection · 5c8802f1
    Ido Schimmel authored
    Up until now we had two interfaces for neighbour related configuration:
    ndo_neigh_{construct,destroy} and NEIGH_UPDATE netevents. The ndos were
    used to add and remove neighbours from the driver's cache, whereas the
    netevent was used to reflect the neighbours into the device's tables.
    
    However, if the NUD state of a neighbour isn't NUD_VALID or if the
    neighbour is dead, then there's really no reason for us to keep it
    inside our cache. The only exception to this rule are neighbours that
    are also used for nexthops, which we periodically refresh to get them
    resolved.
    
    We can therefore eliminate the ndo entry point into the driver and
    simplify the code, making it similar to the FIB reflection, which is
    based solely on events. This also helps us avoid a locking issue, in
    which the RIF cache was traversed without proper locking during
    insertion into the neigh entry cache.
    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>
    5c8802f1
spectrum_router.c 56.4 KB