• Ido Schimmel's avatar
    mlxsw: spectrum_router: Don't offload routes next in list · 1819ae3d
    Ido Schimmel authored
    Each FIB node holds a linked list of routes sharing the same prefix and
    length. In the case of IPv4 it's ordered according to table ID, metric
    and TOS and only the first route in the list is actually programmed to
    the device.
    
    In case a gatewayed route is added somewhere in the list, then after its
    nexthop group will be refreshed and become valid (due to the resolution
    of its gateway), it'll mistakenly overwrite the existing entry.
    
    Example:
    192.168.200.0/24 dev enp3s0np3 scope link metric 1000 offload
    192.168.200.0/24 via 192.168.100.1 dev enp3s0np3 metric 1000 offload
    
    Both routes are marked as offloaded despite the fact only the first one
    should actually be present in the device's table.
    
    When refreshing the nexthop group, don't write the route to the device's
    table unless it's the first in its node.
    
    Fixes: 9aecce1c ("mlxsw: spectrum_router: Correctly handle identical routes")
    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>
    1819ae3d
spectrum_router.c 99.9 KB