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
next prev 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