Re: [PATCH 00/10 net-next] Convert CONFIG_IPV6 to built-in and remove stubs

From: Fernando Fernandez Mancera

Date: Mon Mar 09 2026 - 09:16:34 EST


On 3/9/26 2:02 PM, Krzysztof Kozlowski wrote:
On 09/03/2026 13:58, Daniel Borkmann wrote:
On 3/9/26 1:43 PM, Krzysztof Kozlowski wrote:
On 09/03/2026 12:38, Fernando Fernandez Mancera wrote:
On 3/9/26 11:22 AM, Krzysztof Kozlowski wrote:
On 09/03/2026 03:19, 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 provides little to
no practical benefit today.

It does. We all use generic kernels, thus it is one configuration for
all boards and some setups have IPv6 and some not. The ones without IPv6
just don't use that module.

While I understand this, I would like to clarify that IMHO IPv6 isn't a
secondary protocol and it is fundamental to modern networking. This is

Not for end user devices. None of my devices - neither routers, nor
embedded boards, nor mobile phone from 5G provider - receive IPv6
address, thus for them it is not fundamental.

If that is the case for them, then they should just CONFIG_IPV6=n.

That's not a question to me. Look what I wrote: "We all use generic
kernels" - in a meaning of generic kernel, with generic defconfig built
once serving every machine.


I agree it is fundamental for your cloud machines and network backbone
which you are targeting, but this patchset completely ignores other
users calling their use-cases "little practical benefit"! Try running
Amiga machine...

Are you talking about [0]? That's legacy hardware and in this case just

Dunno what is legacy there...

disable IPv6 altogether, why would you still prefer to have it as a module?

That's not a question to me - someone added it as a module now. The
author here changes it to built-in.



[0] https://en.wikipedia.org/wiki/Amiga

There is no even bloatometer stats for these defconfigs so we can see
the impact.

why I believe it should be built-in by default. Currently OpenWRT,
Debian ARM and others already ships the kernel with CONFIG_IPV6=y. I
know that Alpine and Yocto doesn't do that for arm64.

Maybe there are other reasons why distro should not choose it as module
(like module load calls on ipv6 packets) but that was not explained here.

Arch Linux Rpi kernel on arm64 has IPV6=6 and the module itself is 650
kB. That's noticeable for smaller arm64 boards.

For arm it would be even more noticeable as some have 256 MB RAM like
first Rpi.

You are arguing that these will never be able to migrate to an IPv6 world
given their memory is too small?

No. I argue that they do not need IPv6 in many cases, thus use-case of
IPV6=m is perfectly valid.

The entire discussion here started with "The modular IPv6 use-case
provides little to no practical benefit today."

and this is clearly false. I brought you already few arguments of valid
use case today.


I guess the most critical one here is Yocto but if the developer of the
embedded device is sure they won't use IPv6 at all, they should turn it off.

At the same time, Alpine ships software that enable IPV6 and is
frequently loaded as a module. So the only remaining concern would be
the boot partition size. I don't really have a solution for that problem.

I think that the infrastructure for allowing IPV6=m is bug-prone and it
impacts performance. Forcing the use of indirect function calls in core
networking, Netfilter or BPF datapaths seems like a heavy tax to me.

Also, with these generic kernels (so again all machines are using same
ones, e.g. distro) users can easily blacklist the module.

FWIW; users can still boot with kernel command line parameter
ipv6.disable=1 and then IPV6 will be administratively disabled.

It's not the same. You enabled it on amiga_defconfig and do you
understand what sort of machine is that? The newest have 16 MB RAM, many
much less like 2 MB, and ipv6 module on m68k is 400 kB, so pretty
significant change.

If IPv6 is not relevant for amiga_defconfig presumably it should just be
set to CONFIG_IPV6=n?

It might be relevant to some, but this makes it relevant to everyone on
Amiga.

There is a reason why kernel supports modules or do you suggest "modules
provide little to no practical benefit today" and let's just have
everything built-in or disabled.


Right, maybe that is a too bold statement. Probably it could be rephrased to:

"While maintaining a modular IPv6 stack still offers footprint savings for specific setups, this benefit is outweighed by the architectural burden it imposes on the rest of the kernel."

I believe that having modules is useful. I just do not think it pays off here.