public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: "Ricardo B. Marlière" <rbm@suse.com>
To: "Fernando Fernandez Mancera" <fmancera@suse.de>,
	<netdev@vger.kernel.org>
Cc: <rbm@suse.com>, <davem@davemloft.net>, <edumazet@google.com>,
	<kuba@kernel.org>, <pabeni@redhat.com>, <horms@kernel.org>,
	<dsahern@kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 00/10 net-next v2] Convert CONFIG_IPV6 to built-in and remove stubs
Date: Tue, 10 Mar 2026 15:08:32 -0300	[thread overview]
Message-ID: <DGZAXEK6CSAH.2AJXYLOUG3LL8@suse.com> (raw)
In-Reply-To: <20260310153506.5181-1-fmancera@suse.de>

On Tue Mar 10, 2026 at 12:34 PM -03, Fernando Fernandez Mancera wrote:
> Historically, the Linux kernel has supported compiling the IPv6 stack as
> a loadable module. While this made sense in the early days of IPv6
> adoption, modern deployments and distributions overwhelmingly either
> build IPv6 directly into the kernel (CONFIG_IPV6=y) or disable it
> entirely (CONFIG_IPV6=n). The modular IPv6 use-case offers image size
> and memory savings for specific setups, this benefit is outweighed by
> the architectural burden it imposes on the subsystems on implementation
> and maintenance.
>
> To allow core networking, BPF, Netfilter, and various device drivers to
> safely interact with a potentially unloaded IPv6 module, the kernel
> relies on indirect call structures like ipv6_stub, ipv6_bpf_stub, and
> nf_ipv6_ops, along with dynamic RCU registrations for things like ICMPv6
> senders.
>
> This patch series addresses this by changing CONFIG_IPV6 from a tristate
> to a boolean, enforcing that IPv6 is either built-in or disabled. This
> allows us to completely rip out the stub infrastructures and safely
> replace them with direct function calls.
>
> The bloat-o-meter report the following results for m68k, arm64, x86_64
> defconfig.
>
> m68k (keep on mind that CONFIG_IPV6 is disabled now):
> add/remove: 65/938 grow/shrink: 36/254 up/down: 3022/-49692 (-46670)
>
> arm64:
> add/remove: 1251/265 grow/shrink: 81/46 up/down: 448740/-71519 (377221)
>
> x86_64:
> add/remove: 62/98 grow/shrink: 10/39 up/down: 2497/-4357 (-1860)
>
> All the patches has been independently build tested. With allmodconfig
> and allmodconfig + CONFIG_IPV6=n. In addition, net selftest has been run
> against them on virtme-ng.
>
> The series applied as a whole as been tested with allyesconfig and also
> allyesconfig + CONFIG_IPV6=n but not all patches has been independently
> tested this way.
>
> This will like need to wait for [1] and [2] to be applied to avoid
> conflicts from net tree and rebased in top of them.
>
> [1] https://lore.kernel.org/netdev/20260307-net-nd_tbl_fixes-v4-0-e2677e85628c@suse.com/
>
> [2] https://lore.kernel.org/netdev/20260308032304.1841198-1-kuniyu@google.com/
>
> Fernando Fernandez Mancera (10):
>   ipv6: convert CONFIG_IPV6 to built-in only and clean up Kconfigs
>   ipv6: replace IS_BUILTIN(CONFIG_IPV6) with IS_ENABLED(CONFIG_IPV6)
>   ipv6: remove dynamic ICMPv6 sender registration infrastructure
>   ipv6: prepare headers for ipv6_stub removal
>   drivers: net: drop ipv6_stub usage and use direct function calls
>   ipv4: drop ipv6_stub usage and use direct function calls
>   net: convert remaining ipv6_stub users to direct function calls
>   bpf: remove ipv6_bpf_stub completely and use direct function calls
>   ipv6: remove ipv6_stub infrastructure completely
>   netfilter: remove nf_ipv6_ops and use direct function calls

Using defconfig + tools/testing/selftests/net/config:

- All commits build with both IPV6=y and IPV6=n with no problems.
- All net selftests report OK on tip commit.

Tested-by: Ricardo B. Marlière <rbm@suse.com>

>
>  arch/arm64/configs/defconfig                  |   2 +-
>  arch/m68k/configs/amiga_defconfig             |  45 +-------
>  arch/m68k/configs/apollo_defconfig            |  46 +-------
>  arch/m68k/configs/atari_defconfig             |  45 +-------
>  arch/m68k/configs/bvme6000_defconfig          |  45 +-------
>  arch/m68k/configs/hp300_defconfig             |  47 +-------
>  arch/m68k/configs/mac_defconfig               |  45 +-------
>  arch/m68k/configs/multi_defconfig             |  45 +-------
>  arch/m68k/configs/mvme147_defconfig           |  45 +-------
>  arch/m68k/configs/mvme16x_defconfig           |  45 +-------
>  arch/m68k/configs/q40_defconfig               |  45 +-------
>  arch/m68k/configs/sun3_defconfig              |  45 +-------
>  arch/m68k/configs/sun3x_defconfig             |  45 +-------
>  drivers/infiniband/Kconfig                    |   1 -
>  drivers/infiniband/core/addr.c                |   3 +-
>  drivers/infiniband/hw/ocrdma/Kconfig          |   2 +-
>  drivers/infiniband/sw/rxe/rxe_net.c           |   6 +-
>  drivers/infiniband/ulp/ipoib/Kconfig          |   2 +-
>  drivers/net/Kconfig                           |   9 --
>  drivers/net/ethernet/broadcom/Kconfig         |   2 +-
>  drivers/net/ethernet/chelsio/Kconfig          |   2 +-
>  .../mellanox/mlx5/core/en/rep/neigh.c         |  12 ++-
>  .../ethernet/mellanox/mlx5/core/en/tc_tun.c   |   3 +-
>  .../mellanox/mlx5/core/en/tc_tun_encap.c      |   2 +-
>  .../mellanox/mlx5/core/en_accel/ipsec.c       |   1 -
>  .../net/ethernet/mellanox/mlx5/core/en_rep.c  |   1 -
>  .../net/ethernet/mellanox/mlx5/core/en_tc.c   |   1 -
>  drivers/net/ethernet/mellanox/mlxsw/Kconfig   |   1 -
>  .../ethernet/mellanox/mlxsw/spectrum_router.c |   9 +-
>  .../ethernet/mellanox/mlxsw/spectrum_span.c   |   3 +-
>  drivers/net/ethernet/netronome/Kconfig        |   1 -
>  .../ethernet/netronome/nfp/flower/action.c    |   2 +-
>  .../netronome/nfp/flower/tunnel_conf.c        |   9 +-
>  drivers/net/ethernet/sfc/tc_counters.c        |   2 +-
>  drivers/net/ethernet/sfc/tc_encap_actions.c   |   5 +-
>  drivers/net/geneve.c                          |   1 -
>  drivers/net/gtp.c                             |   2 +-
>  drivers/net/ovpn/peer.c                       |   3 +-
>  drivers/net/ovpn/udp.c                        |   3 +-
>  drivers/net/usb/cdc_mbim.c                    |  17 +--
>  drivers/net/vrf.c                             |   3 +-
>  drivers/net/vxlan/vxlan_core.c                |  11 +-
>  drivers/net/vxlan/vxlan_multicast.c           |   6 +-
>  drivers/net/wireguard/socket.c                |   3 +-
>  drivers/net/wireless/intel/ipw2x00/ipw2100.c  |   2 +-
>  drivers/scsi/bnx2fc/Kconfig                   |   1 -
>  drivers/scsi/bnx2i/Kconfig                    |   1 -
>  drivers/scsi/cxgbi/cxgb3i/Kconfig             |   2 +-
>  drivers/scsi/cxgbi/cxgb4i/Kconfig             |   2 +-
>  fs/dlm/Kconfig                                |   2 +-
>  fs/gfs2/Kconfig                               |   2 +-
>  include/linux/icmpv6.h                        |  26 +----
>  include/linux/indirect_call_wrapper.h         |   2 +-
>  include/linux/netfilter_ipv6.h                | 102 ++----------------
>  include/net/ip.h                              |   5 -
>  include/net/ip6_fib.h                         |  34 +++++-
>  include/net/ip6_route.h                       |  26 +++++
>  include/net/ipv6.h                            |  12 +++
>  include/net/ipv6_stubs.h                      | 102 ------------------
>  include/net/ndisc.h                           |  38 +++----
>  include/net/udp_tunnel.h                      |   3 +-
>  net/bridge/Kconfig                            |   1 -
>  net/bridge/br_arp_nd_proxy.c                  |   3 +-
>  net/bridge/br_netfilter_hooks.c               |  12 +--
>  net/bridge/br_netfilter_ipv6.c                |   7 +-
>  net/core/filter.c                             |  70 ++++++------
>  net/core/lwt_bpf.c                            |  10 +-
>  net/ieee802154/6lowpan/tx.c                   |   2 +-
>  net/ipv4/Kconfig                              |   9 +-
>  net/ipv4/fib_semantics.c                      |  11 +-
>  net/ipv4/icmp.c                               |   2 +-
>  net/ipv4/nexthop.c                            |  21 ++--
>  net/ipv4/route.c                              |   2 +-
>  net/ipv4/udp.c                                |   7 +-
>  net/ipv6/Kconfig                              |   6 +-
>  net/ipv6/addrconf.c                           |  10 +-
>  net/ipv6/addrconf_core.c                      |  91 ----------------
>  net/ipv6/af_inet6.c                           |  69 ++----------
>  net/ipv6/icmp.c                               |   6 --
>  net/ipv6/ip6_fib.c                            |  10 +-
>  net/ipv6/ip6_icmp.c                           |  46 +-------
>  net/ipv6/ip6_offload.c                        |   4 +-
>  net/ipv6/ip6_output.c                         |   5 +-
>  net/ipv6/ip6_udp_tunnel.c                     |   3 +-
>  net/ipv6/ndisc.c                              |  35 +++---
>  net/ipv6/netfilter.c                          |  48 ---------
>  net/ipv6/route.c                              |  13 +--
>  net/l2tp/Kconfig                              |   1 -
>  net/mpls/af_mpls.c                            |   3 +-
>  net/netfilter/Kconfig                         |   8 --
>  net/netfilter/core.c                          |   3 -
>  net/netfilter/nf_nat_masquerade.c             |  21 +---
>  net/netfilter/nfnetlink_queue.c               |  22 +++-
>  net/netfilter/utils.c                         |   1 -
>  net/openvswitch/actions.c                     |   3 +-
>  net/rxrpc/Kconfig                             |   2 +-
>  net/sched/sch_frag.c                          |   4 +-
>  net/sctp/Kconfig                              |   1 -
>  net/tipc/Kconfig                              |   1 -
>  net/tipc/udp_media.c                          |   9 +-
>  net/xfrm/espintcp.c                           |   5 +-
>  net/xfrm/xfrm_nat_keepalive.c                 |   4 +-
>  net/xfrm/xfrm_output.c                        |   3 +-
>  103 files changed, 328 insertions(+), 1301 deletions(-)
>  delete mode 100644 include/net/ipv6_stubs.h


  parent reply	other threads:[~2026-03-10 18:08 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-10 15:34 [PATCH 00/10 net-next v2] Convert CONFIG_IPV6 to built-in and remove stubs Fernando Fernandez Mancera
2026-03-10 15:34 ` [PATCH 01/10 net-next v2] ipv6: convert CONFIG_IPV6 to built-in only and clean up Kconfigs Fernando Fernandez Mancera
2026-03-12  3:02   ` Jakub Kicinski
2026-03-12 15:12     ` Fernando Fernandez Mancera
2026-03-12 16:05       ` Geert Uytterhoeven
2026-03-12  7:43   ` Geert Uytterhoeven
2026-03-16 15:44   ` Krzysztof Kozlowski
2026-03-10 15:34 ` [PATCH 02/10 net-next v2] ipv6: replace IS_BUILTIN(CONFIG_IPV6) with IS_ENABLED(CONFIG_IPV6) Fernando Fernandez Mancera
2026-03-10 15:34 ` [PATCH 03/10 net-next v2] ipv6: remove dynamic ICMPv6 sender registration infrastructure Fernando Fernandez Mancera
2026-03-10 15:34 ` [PATCH 04/10 net-next v2] ipv6: prepare headers for ipv6_stub removal Fernando Fernandez Mancera
2026-03-10 16:50   ` David Ahern
2026-03-10 15:34 ` [PATCH 05/10 net-next v2] drivers: net: drop ipv6_stub usage and use direct function calls Fernando Fernandez Mancera
2026-03-12 13:48   ` Jason A. Donenfeld
2026-03-13 10:54   ` Antonio Quartulli
2026-03-13 12:07   ` Edward Cree
2026-03-10 15:34 ` [PATCH 06/10 net-next v2] ipv4: " Fernando Fernandez Mancera
2026-03-10 15:34 ` [PATCH 07/10 net-next v2] net: convert remaining ipv6_stub users to " Fernando Fernandez Mancera
2026-03-10 15:34 ` [PATCH 08/10 net-next v2] bpf: remove ipv6_bpf_stub completely and use " Fernando Fernandez Mancera
2026-03-12 10:12   ` Daniel Borkmann
2026-03-10 15:34 ` [PATCH 09/10 net-next v2] ipv6: remove ipv6_stub infrastructure completely Fernando Fernandez Mancera
2026-03-10 15:34 ` [PATCH 10/10 net-next v2] netfilter: remove nf_ipv6_ops and use direct function calls Fernando Fernandez Mancera
2026-03-10 18:08 ` Ricardo B. Marlière [this message]
2026-03-12  3:01 ` [PATCH 00/10 net-next v2] Convert CONFIG_IPV6 to built-in and remove stubs Jakub Kicinski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DGZAXEK6CSAH.2AJXYLOUG3LL8@suse.com \
    --to=rbm@suse.com \
    --cc=davem@davemloft.net \
    --cc=dsahern@kernel.org \
    --cc=edumazet@google.com \
    --cc=fmancera@suse.de \
    --cc=horms@kernel.org \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox