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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.