diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-03-27 22:42:25 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-03-27 22:46:18 +0900 |
| commit | 2745602be3cb9fc200958f298c5f423007b6f9e1 (patch) | |
| tree | 575a012c414c9498c0a259dfb4e1f430a3240af1 /internal/uevent | |
| parent | ee22847dde5c02027a4f180f1f32a69adc3aaf70 (diff) | |
internal/uevent: wrap netlink socket
Unfortunately these messages do not have the same format as rtnetlink.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/uevent')
| -rw-r--r-- | internal/uevent/uevent.go | 26 |
1 files changed, 26 insertions, 0 deletions
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 +} |
