• David Ahern's avatar
    ipv6: Convert gateway validation to use fib6_info · b2c709cc
    David Ahern authored
    Gateway validation does not need a dst_entry, it only needs the fib
    entry to validate the gateway resolution and egress device. So,
    convert ip6_nh_lookup_table from ip6_pol_route to fib6_table_lookup
    and ip6_route_check_nh to use fib6_lookup over rt6_lookup.
    
    ip6_pol_route is a call to fib6_table_lookup and if successful a call
    to fib6_select_path. From there the exception cache is searched for an
    entry or a dst_entry is created to return to the caller. The exception
    entry is not relevant for gateway validation, so what matters are the
    calls to fib6_table_lookup and then fib6_select_path.
    
    Similarly, rt6_lookup can be replaced with a call to fib6_lookup with
    RT6_LOOKUP_F_IFACE set in flags. Again, the exception cache search is
    not relevant, only the lookup with path selection. The primary difference
    in the lookup paths is the use of rt6_select with fib6_lookup versus
    rt6_device_match with rt6_lookup. When you remove complexities in the
    rt6_select path, e.g.,
    1. saddr is not set for gateway validation, so RT6_LOOKUP_F_HAS_SADDR
       is not relevant
    2. rt6_check_neigh is not called so that removes the RT6_NUD_FAIL_DO_RR
       return and round-robin logic.
    
    the code paths are believed to be equivalent for the given use case -
    validate the gateway and optionally given the device. Furthermore, it
    aligns the validation with onlink code path and the lookup path actually
    used for rx and tx.
    
    Adjust the users, ip6_route_check_nh_onlink and ip6_route_check_nh to
    handle a fib6_info vs a rt6_info when performing validation checks.
    
    Existing selftests fib-onlink-tests.sh and fib_tests.sh are used to
    verify the changes.
    Signed-off-by: default avatarDavid Ahern <dsahern@gmail.com>
    Reviewed-by: default avatarWei Wang <weiwan@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b2c709cc
route.c 155 KB