acquire-wan-address.fnl (1203B)
1 (local { : system } (require :anoia)) 2 (local svc (require :anoia.svc)) 3 4 ;; acquire-delegated-prefix has very similar code: we'd like to move 5 ;; this to anoia.svc when we see what the general form would look like 6 7 (fn changes [old-addresses new-addresses] 8 (let [added {} 9 deleted {}] 10 (each [n address (pairs new-addresses)] 11 (if (not (. old-addresses n)) 12 (table.insert added address))) 13 (each [n address (pairs old-addresses)] 14 (if (not (. new-addresses n)) 15 (table.insert deleted address))) 16 (values added deleted))) 17 18 (fn update-addresses [wan-device addresses new-addresses] 19 (let [(added deleted) (changes addresses new-addresses)] 20 (each [_ p (ipairs added)] 21 (system 22 (.. "ip address add " p.address "/" p.len " dev " wan-device))) 23 (each [_ p (ipairs deleted)] 24 (system 25 (.. "ip address del " p.address "/" p.len " dev " wan-device))) 26 new-addresses)) 27 28 (fn run [] 29 (let [[state-directory wan-device] arg 30 dir (svc.open state-directory)] 31 (accumulate [addresses [] 32 v (dir:events)] 33 (update-addresses wan-device addresses (v:output "address"))))) 34 35 { : update-addresses : changes : run }