• Ido Schimmel's avatar
    mlxsw: spectrum_router: Correctly handle identical routes · 9aecce1c
    Ido Schimmel authored
    In the device, routes are indexed in a routing table based on the prefix
    and its length. This is in contrast to the kernel's FIB where several
    FIB aliases can exist with these parameters being identical. In such
    cases, the routes will be sorted by table ID (LOCAL first, then MAIN),
    TOS and finally priority (metric).
    
    During lookup, these routes will be evaluated in order. In case the
    packet's TOS field is non-zero and a FIB alias with a matching TOS is
    found, then it's selected. Otherwise, the lookup defaults to the route
    with TOS 0 (if it exists). However, if the requested scope is narrower
    than the one found, then the lookup continues.
    
    To best reflect the kernel's datapath we should take the above into
    account. Given a prefix and its length, the reflected route will always
    be the first one in the FIB alias list. However, if the route has a
    non-zero TOS then its action will be converted to trap instead of
    forward, since we currently don't support TOS-based routing. If this
    turns out to be a real issue, we can add support for that using
    policy-based switching.
    
    The route's scope can be effectively ignored as any packet being routed
    by the device would've been looked-up using the widest scope (UNIVERSE).
    
    To achieve that we need to do two changes. Firstly, we need to create
    another struct (FIB node) that will hold the list of FIB entries sharing
    the same prefix and length. This struct will be hashed using these two
    parameters.
    
    Secondly, we need to change the route reflection to match the above
    logic, so that the first FIB entry in the list will be programmed into
    the device while the rest will remain in the driver's cache in case of
    subsequent changes.
    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>
    9aecce1c
spectrum_router.c 69.5 KB