liminix

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

acquire-delegated-prefix.fnl (1008B)


      1 (local { : system } (require :anoia))
      2 (local svc (require :anoia.svc))
      3 
      4 (fn changes [old-addresses new-addresses]
      5   (let [added {}
      6         deleted {}]
      7     (each [n address (pairs new-addresses)]
      8       (if (not (. old-addresses n))
      9           (table.insert added address)))
     10     (each [n address (pairs old-addresses)]
     11       (if (not (. new-addresses n))
     12           (table.insert deleted address)))
     13     (values added deleted)))
     14 
     15 (fn update-prefixes [device prefixes new-prefixes]
     16   (let [(added deleted) (changes prefixes new-prefixes)]
     17     (each [_ p (ipairs added)]
     18       (system
     19        (.. "ip address add " p.address "1/" p.len " dev " device)))
     20     (each [_ p (ipairs deleted)]
     21       (system
     22        (.. "ip address del " p.address "1/" p.len " dev " device)))))
     23 
     24 (fn run []
     25   (let [[state-directory lan-device] arg
     26         dir (svc.open state-directory)]
     27     (accumulate [addresses []
     28                  v (dir:events)]
     29       (update-prefixes lan-device addresses (v:output "prefix")))))
     30 
     31 { : changes : run }