aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/uevent/uevent.go26
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
+}