From: Ido Schimmel <ido...@mellanox.com> Unlike IPv4, an IPv6 multipath route in the kernel is composed from multiple sibling routes, each representing a single nexthop.
Therefore, an addition of a multipath route with N nexthops translates to N in-kernel notifications. This is inefficient for device drivers that need to program the route to the underlying device. Each time a new nexthop is appended, a new nexthop group needs to be constructed and the old one deleted. This patchset improves the situation by sending a single notification for a multipath route addition / deletion instead of one per-nexthop. When adding thousands of multipath routes with 16 nexthops, I measured an improvement of about x10 in the insertion rate. Patches #1-#3 add a flag that indicates that in-kernel notifications need to be suppressed and extend the IPv6 FIB notification info with information about the number of sibling routes that are being notified. Patches #4-#5 adjust the two current listeners to these notifications to ignore notifications about IPv6 multipath routes. Patches #6-#7 adds add / delete notifications for IPv6 multipath routes. Patches #8-#14 do the same for mlxsw. Patch #15 finally removes the limitations added in patches #4-#5 and stops the kernel from sending a notification for each added / deleted nexthop. Patch #16 adds test cases. v2 (David Ahern): * Remove patch adjusting netdevsim to consume resources for each fib6_info. Instead, consume one resource for the entire multipath route * Remove 'multipath_rt' usage in patch #10 * Remove 'multipath_rt' from 'struct fib6_entry_notifier_info' in patch #15. The member is only removed in this patch to prevent drivers from processing multipath routes twice during the series Ido Schimmel (16): netlink: Document all fields of 'struct nl_info' netlink: Add field to skip in-kernel notifications ipv6: Extend notifier info for multipath routes mlxsw: spectrum_router: Ignore IPv6 multipath notifications netdevsim: Ignore IPv6 multipath notifications ipv6: Add IPv6 multipath notifications for add / replace ipv6: Add IPv6 multipath notification for route delete mlxsw: spectrum_router: Remove processing of IPv6 append notifications mlxsw: spectrum_router: Prepare function to return errors mlxsw: spectrum_router: Pass multiple routes to work item mlxsw: spectrum_router: Adjust IPv6 replace logic to new notifications mlxsw: spectrum_router: Pass array of routes to route handling functions mlxsw: spectrum_router: Add / delete multiple IPv6 nexthops mlxsw: spectrum_router: Create IPv6 multipath routes in one go ipv6: Stop sending in-kernel notifications for each nexthop selftests: mlxsw: Add a test for FIB offload indication .../ethernet/mellanox/mlxsw/spectrum_router.c | 209 ++++++++--- include/net/ip6_fib.h | 6 + include/net/netlink.h | 6 +- net/ipv6/ip6_fib.c | 44 ++- net/ipv6/route.c | 21 ++ .../drivers/net/mlxsw/fib_offload.sh | 349 ++++++++++++++++++ 6 files changed, 567 insertions(+), 68 deletions(-) create mode 100755 tools/testing/selftests/drivers/net/mlxsw/fib_offload.sh -- 2.20.1