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

From: Krzysztof Kozlowski

Date: Mon Mar 09 2026 - 09:07:45 EST


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.

Best regards,
Krzysztof