From 2745602be3cb9fc200958f298c5f423007b6f9e1 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Fri, 27 Mar 2026 22:42:25 +0900 Subject: [PATCH] internal/uevent: wrap netlink socket Unfortunately these messages do not have the same format as rtnetlink. Signed-off-by: Ophestra --- internal/uevent/uevent.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 internal/uevent/uevent.go diff --git a/internal/uevent/uevent.go b/internal/uevent/uevent.go new file mode 100644 index 00000000..674938b1 --- /dev/null +++ b/internal/uevent/uevent.go @@ -0,0 +1,26 @@ +// Package uevent provides userspace client for consuming events from a +// NETLINK_KOBJECT_UEVENT socket, as well as helpers for supplementing +// events received from the kernel. +package uevent + +import ( + "syscall" + + "hakurei.app/internal/netlink" +) + +// Conn represents a NETLINK_KOBJECT_UEVENT socket. +type Conn struct{ conn *netlink.Conn } + +// Close closes the underlying socket. +func (c *Conn) Close() error { return c.conn.Close() } + +// Dial returns the address of a newly connected [Conn]. +func Dial() (*Conn, error) { + // kernel group is hard coded in lib/kobject_uevent.c, undocumented + c, err := netlink.Dial(syscall.NETLINK_KOBJECT_UEVENT, 1) + if err != nil { + return nil, err + } + return &Conn{c}, err +}