In order to select a nexthop for multipath routes, fib_select_multipath() is used with legacy nexthops and nexthop_select_path_hthr() is used with nexthop objects. Those two functions perform a validity test on the neighbor related to each nexthop but their logic is structured differently. This causes a divergence in behavior and nexthop_select_path_hthr() may return a nexthop that failed the neighbor validity test even if there was one that passed.
Refactor nexthop_select_path_hthr() to make it more similar to fib_select_multipath() and fix the problem mentioned above.
v2: Removed unnecessary "first" variable in "nexthop: Do not return invalid nexthop object during multipath selection".
v1: https://lore.kernel.org/netdev/20230529201914.69828-1-bpoirier@nvidia.com/
--- Benjamin Poirier (4): nexthop: Factor out hash threshold fdb nexthop selection nexthop: Factor out neighbor validity check nexthop: Do not return invalid nexthop object during multipath selection selftests: net: Add test cases for nexthop groups with invalid neighbors
net/ipv4/nexthop.c | 61 +++++++++---- tools/testing/selftests/net/fib_nexthops.sh | 129 ++++++++++++++++++++++++++++ 2 files changed, 171 insertions(+), 19 deletions(-) --- base-commit: 36395b2efe905650cd179d67411ffee3b770268b change-id: 20230719-nh_select-0303d55a1fb0
Best regards,