devconf is even odder than described in the blamed commit, where bpth IPv4 and IPv6 are described in an identical way: "u32 indexed by ipv?-devconf - 1 on output, on input it's a nest". There are two issues with that line for IPv6: 1) The subtraction is an IPv4 specific quirk, to avoid having an unused u32 at index 0, thus saving 4 bytes per net device being dumped: - In include/uapi/linux/ip.h the IPV4_DEVCONF_* enum begins with IPV4_DEVCONF_FORWARDING = 1, so the enum starts at 1, which is the reason for the subtraction in the IPv4 variant. - In include/uapi/linux/ipv6.h the DEVCONF_* enum begins with DEVCONF_FORWARDING = 0, so subtraction would underflow. - ipv6_store_devconf() in net/ipv6/addrconf.c also doesn't do the subtraction in the output path. 2) Setting IPv6 devconf through Netlink is not yet supported, as IFLA_INET6_CONF is not handled in inet6_set_link_af(). Fixes: 720447bd0b24 ("netlink: specs: rt-link: remove implicit structs from devconf") Cc: stable@vger.kernel.org Signed-off-by: Asbjørn Sloth Tønnesen --- Fernando, please remember to reintroduce the ", on input it's a nest" in your WIP/planned patchset that introduces support for setting IPv6 devconf via IFLA_INET6_CONF. https://lore.kernel.org/bd560c89-c71f-4ef5-a0fd-5ea096a0f767@suse.de/ Documentation/netlink/specs/rt-link.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/netlink/specs/rt-link.yaml b/Documentation/netlink/specs/rt-link.yaml index b80c2ac3ac31..00c915031efd 100644 --- a/Documentation/netlink/specs/rt-link.yaml +++ b/Documentation/netlink/specs/rt-link.yaml @@ -2218,7 +2218,7 @@ attribute-sets: name: conf type: binary sub-type: u32 - doc: u32 indexed by ipv6-devconf - 1 on output, on input it's a nest + doc: u32 indexed by ipv6-devconf on output, input is not yet implemented - name: stats type: binary base-commit: 7cbfb180945ce529608e4d4e24a6d483699fab1e -- 2.55.0