From: David Ahern <dsah...@kernel.org> Date: Mon, 24 Jun 2019 13:44:51 -0700
> From: David Ahern <dsah...@gmail.com> > > 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: David Ahern <dsah...@gmail.com> > --- > v2 > - use in6_dev_get versus __in6_dev_get + in6_dev_hold (comment from Wei) > - updated commit message Applied, thanks.