Re: [PATCH 1/4] rust: netlink: add raw netlink abstraction
From: Alice Ryhl <aliceryhl@google.com>
Date: 2026-03-07 21:28:40
Also in:
lkml, rust-for-linux
On Sat, Mar 07, 2026 at 04:43:02PM +0100, Andrew Lunn wrote:
quoted
diff --git a/rust/kernel/netlink.rs b/rust/kernel/netlink.rs...quoted
+/// The default netlink message size. +pub const GENLMSG_DEFAULT_SIZE: usize = bindings::GENLMSG_DEFAULT_SIZE; + +/// A wrapper around `struct sk_buff` for generic netlink messages. +/// +/// # Invariants +/// +/// The pointer has ownership over a valid `sk_buff`. +pub struct SkBuff { + skb: NonNull<kernel::bindings::sk_buff>, +}struct sk_buff is a core data structure which appears all over the networking stack, but also other places like crypto, scsi, tty, file systems, etc. Since it is a top level data structure, it seems odd Rust puts it into netlink.rs. How do you see the Rust SkBuff evolving to a general purpose data structure which can be used everywhere?
We can make a kernel::net module (rust/kernel/net/) and put it there instead? I guess netlink.rs can also be a submodule of that. Hmm ... but I'm currently using genlmsg_new() / nlmsg_free(), and I assume the other use-cases do not go through those methods, since they sound netlink specific. To be honest, I'm new to the kernel's networking stack, so I probably can't design Rust wrapper for sk_buff that supports all those different usecases without someone walking me through how it works. It may or may not be best to write a netlink-specific struct now and expand it later. Alice