Thread (26 messages) 26 messages, 4 authors, 2026-03-16

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help