liminix

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

ifwait.fnl (1575B)


      1 (local netlink (require :netlink))
      2 (local sock (netlink.socket))
      3 
      4 ; (local { : view} (require :fennel))
      5 
      6 (fn assoc [tbl k v]
      7   (tset tbl k v)
      8   tbl)
      9 
     10 (fn parse-args [args]
     11   (match args
     12     ["-v" & rest]  (assoc (parse-args rest) :verbose true)
     13     ["-t" timeout & rest] (assoc (parse-args rest) :timeout (tonumber timeout))
     14     [linkname "up"] {:link linkname :expecting "up"}
     15     [linkname "running"] {:link linkname :expecting "running"}
     16     [linkname "present"] {:link linkname :expecting "present"}
     17     [linkname nil] {:link linkname :expecting "present"}
     18     _  nil))
     19 
     20 (local parameters
     21        (or
     22         (parse-args arg)
     23         (assert false (.. "Usage: " (. arg 0) " [-v] ifname [present|up|running]"))))
     24 
     25 (fn run-events [evs]
     26   (each [_ v (ipairs evs)]
     27     (let [got
     28           (match v
     29             ;; - up: Reflects the administrative state of the interface (IFF_UP)
     30             ;; - running: Reflects the operational state (IFF_RUNNING).
     31             {:event "newlink" :name parameters.link :up :yes :running :yes}
     32             {:present true :up true :running true}
     33 
     34             {:event "newlink" :name parameters.link :up :yes}
     35             {:present :true :up true}
     36 
     37             {:event "newlink" :name parameters.link}
     38             {:present true }
     39 
     40             _
     41             {})]
     42       (when (. got parameters.expecting)
     43         (os.exit 0)))))
     44 
     45 
     46 (when parameters.verbose
     47   (print (.. (. arg 0) ": waiting for "
     48              parameters.link " to be " parameters.expecting)))
     49 
     50 (run-events (sock:query {:link true}))
     51 
     52 (while (sock:poll) (run-events (sock:event)))