Message ID | 20190604031955.26949-1-dsahern@kernel.org |
---|---|
Headers | show |
Series | net: add struct nexthop to fib{6}_info | expand |
From: David Ahern <dsahern@kernel.org> Date: Mon, 3 Jun 2019 20:19:48 -0700 > Set 10 of 11 to improve route scalability via support for nexthops as > standalone objects for fib entries. > https://lwn.net/Articles/763950/ Series applied, thanks David.
On Tue, Jun 4, 2019 at 7:28 PM David Miller <davem@davemloft.net> wrote: > > From: David Ahern <dsahern@kernel.org> > Date: Mon, 3 Jun 2019 20:19:48 -0700 > > > Set 10 of 11 to improve route scalability via support for nexthops as > > standalone objects for fib entries. > > https://lwn.net/Articles/763950/ > > Series applied, thanks David. imo that was a bad precedent to make. As far as I can see the discussion on a better path forward was still ongoing in v2 thread between David, Martin and Wei. Since the set is already applied it demotivated everyone to review and discuss it further. Please reconsider such decisions in the future.
On 6/4/19 9:03 PM, Alexei Starovoitov wrote: > As far as I can see the discussion on a better path forward > was still ongoing in v2 thread between David, Martin and Wei. > Since the set is already applied it demotivated everyone > to review and discuss it further. > Please reconsider such decisions in the future. The discussion on the other thread has nothing to do with this patch set; it is about changing / removing *existing* code.
From: David Ahern <dsahern@gmail.com> Set 10 of 11 to improve route scalability via support for nexthops as standalone objects for fib entries. https://lwn.net/Articles/763950/ This sets adds 'struct nexthop' to fib_info and fib6_info. IPv4 already handles multiple fib_nh entries in a single fib_info, so the conversion to use a nexthop struct is fairly mechanical. IPv6 using a nexthop struct with a fib6_info impacts a lot of core logic which is built around the assumption of a single, builtin fib6_nh per fib6_info. To make this easier to review, this set adds nexthop to fib6_info and adds checks in most places fib6_info is used. The next set finishes the IPv6 conversion, walking through the places that need to consider all fib6_nh within a nexthop struct. Offload drivers - mlx5, mlxsw and rocker - are changed to fail FIB entries using nexthop objects. That limitation can be removed once the drivers are updated to properly support separate nexthops. This set starts by adding accessors for fib_nh and fib_nhs in a fib_info. This makes it easier to extract the number of nexthops in the fib entry and a specific fib_nh once the entry references a struct nexthop. Patch 2 converts more of IPv4 code to use fib_nh_common allowing a struct nexthop to use a fib6_nh with an IPv4 entry. Patches 3 and 4 add 'struct nexthop' to fib{6}_info and update references to both take a different path when it is set. New exported functions are added to the nexthop code to validate a nexthop struct when configured for use with a fib entry. IPv4 is allowed to use a nexthop with either v4 or v6 entries. IPv6 is limited to v6 entries only. In both cases list_heads track the fib entries using a nexthop struct for fast correlation on events (e.g., device events or nexthop events like delete or replace). The last 3 patches add hooks to drivers listening for FIB notificationas. All 3 of them reject the routes as unsupported, returning an error message to the user via extack. For mlxsw at least this is a stop gap measure until the driver is updated for proper support. Functional tests for nexthops have already been committed. Those tests will be active after the next patch set which makes the code paths created by this set and the next one live. Existing code paths moved to the else branch of 'if (f{6}i->nh)' checks are covered by existing tests under selftests/net. v3 - remove ip6_create_rt_rcu from ip6_pol_route in patch 4 and use pcpu routes for REJECT routes with the blackhole nexthop (request from Wei) v2 - no code changes from v1 - commit messages for first 4 patches updated David Ahern (7): ipv4: Use accessors for fib_info nexthop data ipv4: Prepare for fib6_nh from a nexthop object ipv4: Plumb support for nexthop object in a fib_info ipv6: Plumb support for nexthop object in a fib6_info mlxsw: Fail attempts to use routes with nexthop objects mlx5: Fail attempts to use routes with nexthop objects rocker: Fail attempts to use routes with nexthop objects drivers/net/ethernet/mellanox/mlx5/core/lag_mp.c | 33 ++- .../net/ethernet/mellanox/mlxsw/spectrum_router.c | 33 ++- drivers/net/ethernet/rocker/rocker_main.c | 4 + drivers/net/ethernet/rocker/rocker_ofdpa.c | 25 +- include/net/ip6_fib.h | 11 +- include/net/ip6_route.h | 13 +- include/net/ip_fib.h | 25 +- include/net/nexthop.h | 113 +++++++++ net/core/filter.c | 3 +- net/ipv4/fib_frontend.c | 15 +- net/ipv4/fib_lookup.h | 1 + net/ipv4/fib_rules.c | 8 +- net/ipv4/fib_semantics.c | 257 ++++++++++++++------- net/ipv4/fib_trie.c | 38 ++- net/ipv4/nexthop.c | 111 ++++++++- net/ipv4/route.c | 5 +- net/ipv6/addrconf.c | 5 + net/ipv6/ip6_fib.c | 22 +- net/ipv6/ndisc.c | 3 +- net/ipv6/route.c | 148 ++++++++++-- 20 files changed, 698 insertions(+), 175 deletions(-)