liminix/pkgs/ifwait/ifwait.fnl

45 lines
1.4 KiB
Text
Raw Normal View History

(local nl (require :anoia.nl))
; (local { : view} (require :fennel))
2024-03-05 00:03:42 +01:00
(local { : assoc } (require :anoia))
(fn parse-args [args]
(match args
["-v" & rest] (assoc (parse-args rest) :verbose true)
["-t" timeout & rest] (assoc (parse-args rest) :timeout (tonumber timeout))
[linkname "up"] {:link linkname :expecting "up"}
[linkname "running"] {:link linkname :expecting "running"}
[linkname "present"] {:link linkname :expecting "present"}
[linkname nil] {:link linkname :expecting "present"}
_ nil))
2024-03-05 00:11:04 +01:00
(fn run-event [params v]
(let [got
(match v
;; - up: Reflects the administrative state of the interface (IFF_UP)
;; - running: Reflects the operational state (IFF_RUNNING).
2024-03-05 00:11:04 +01:00
{:event "newlink" :name params.link :up :yes :running :yes}
{:present true :up true :running true}
2024-03-05 00:11:04 +01:00
{:event "newlink" :name params.link :up :yes}
{:present :true :up true}
2024-03-05 00:11:04 +01:00
{:event "newlink" :name params.link}
{:present true }
_
{})]
2024-03-05 00:11:04 +01:00
(when (. got params.expecting)
(os.exit 0))))
2024-03-05 00:11:04 +01:00
(let [parameters
2024-03-05 00:13:06 +01:00
(assert (parse-args arg)
(.. "Usage: " (. arg 0) " [-v] ifname [present|up|running]"))]
2024-03-05 00:11:04 +01:00
(when parameters.verbose
(print (.. (. arg 0) ": waiting for "
parameters.link " to be " parameters.expecting)))
2024-03-05 00:11:04 +01:00
(each [event (nl.events {:link true})]
(run-event parameters event)))