acquire-wan-address.fnl (1118B)
1 (local { : system } (require :anoia)) 2 (local svc (require :anoia.svc)) 3 4 (fn deletions [old-addresses new-addresses] 5 (let [deleted {}] 6 (each [n address (pairs old-addresses)] 7 (let [now (. new-addresses n)] 8 (if (or (not now) (not (= now.len address.len))) 9 (table.insert deleted address)))) 10 deleted)) 11 12 (fn update-addresses [wan-device addresses new-addresses exec] 13 (each [_ p (ipairs (deletions addresses new-addresses))] 14 (exec 15 (.. "ip address del " p.address "/" p.len " dev " wan-device))) 16 (each [_ p (pairs new-addresses)] 17 (exec 18 (.. "ip address change " p.address "/" p.len 19 " dev " wan-device 20 " valid_lft " p.valid 21 " preferred_lft " p.preferred 22 ))) 23 new-addresses) 24 25 (fn run [] 26 (let [[state-directory wan-device] arg 27 dir (svc.open state-directory)] 28 (update-addresses wan-device [] (or (dir:output "address") []) system) 29 (accumulate [addresses [] 30 v (dir:events)] 31 (update-addresses wan-device addresses (or (v:output "address") []) system)))) 32 33 { : update-addresses : deletions : run }