add netlink socket

it's not hooked up to anything yet, but it proves we can
do this with lualinux
This commit is contained in:
Daniel Barlow 2024-04-23 23:34:25 +01:00
parent b8ac9e5279
commit 032d0f8aca

View file

@ -103,6 +103,13 @@
true) true)
(nil err) (do (print err) false))) (nil err) (do (print err) false)))
(fn open-netlink [groups]
(match (ll.socket AF_NETLINK SOCK_RAW NETLINK_KOBJECT_UEVENT)
fd (doto fd (ll.bind (string.pack "I2I2I4I4" ; family pad pid groups
AF_NETLINK 0 0 groups)))
(nil errno) (values nil errno)))
(fn event-loop [] (fn event-loop []
(let [fds {}] (let [fds {}]
{ {
@ -117,9 +124,10 @@
})) }))
(fn run [] (fn run []
(let [[sockname] arg (let [[sockname nl-groups] arg
s (unix-socket sockname) s (unix-socket sockname)
db (database) db (database)
nl (open-netlink nl-groups)
loop (event-loop)] loop (event-loop)]
(loop:register (loop:register
s s
@ -128,6 +136,9 @@
(do (do
(loop:register client (partial handle-client db)) (loop:register client (partial handle-client db))
true))) true)))
(loop:register
nl
#(do (print :netlink (ll.read nl)) true))
(while true (while true
(let [pollfds (pollfds-for (loop:fds))] (let [pollfds (pollfds-for (loop:fds))]
(ll.poll pollfds 5000) (ll.poll pollfds 5000)