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@xxxxxxxxxx/ --- 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, -- Benjamin Poirier <bpoirier@xxxxxxxxxx>