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 }