• Ido Schimmel's avatar
    mlxsw: spectrum_router: Reflect nexthop status changes · ad178c8e
    Ido Schimmel authored
    When a packet hits a multipath route in the device's routing table, a
    hash is computed over its headers, which is then used to select the
    appropriate nexthop from the device's adjacency table.
    
    There are situations in which the kernel removes a nexthop from a
    multipath route (e.g., no carrier) and the device should do the same.
    
    Upon the reception of NH_{ADD,DEL} events, add or remove a nexthop from
    the device's adjacency table and refresh all the routes using the
    nexthop group. If all the nexthops of a multipath route are invalid,
    then any packet hitting the route would be trapped to the CPU for
    forwarding.
    
    If all the nexthops are DEAD, then the kernel would remove the route
    entirely. On the other hand, if all the nexthops are merely LINKDOWN,
    then the kernel would keep the route and forward any incoming packet
    using a different route.
    
    While the last case might sound like a problem, it's expected that a
    routing daemon running in user space would remove such a route from the
    FIB as it's dumped with the DEAD flag set.
    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>
    ad178c8e
spectrum_router.c 61.3 KB