diff --git a/modules/dhcp6c/acquire-delegated-prefix.fnl b/modules/dhcp6c/acquire-delegated-prefix.fnl index f0744df..8ff7892 100644 --- a/modules/dhcp6c/acquire-delegated-prefix.fnl +++ b/modules/dhcp6c/acquire-delegated-prefix.fnl @@ -25,6 +25,7 @@ (fn run [] (let [[state-directory lan-device] arg dir (svc.open state-directory)] + (update-prefixes lan-device [] (or (dir:output "prefix") []) system) (accumulate [addresses [] v (dir:events)] (update-prefixes lan-device addresses (or (v:output "prefix") []) system)))) diff --git a/modules/dhcp6c/acquire-wan-address.fnl b/modules/dhcp6c/acquire-wan-address.fnl index de6edaf..b2c7e73 100644 --- a/modules/dhcp6c/acquire-wan-address.fnl +++ b/modules/dhcp6c/acquire-wan-address.fnl @@ -25,6 +25,7 @@ (fn run [] (let [[state-directory wan-device] arg dir (svc.open state-directory)] + (update-addresses wan-device [] (or (dir:output "address") []) system) (accumulate [addresses [] v (dir:events)] (update-addresses wan-device addresses (or (v:output "address") []) system)))) diff --git a/modules/dhcp6c/client.nix b/modules/dhcp6c/client.nix index 77314f6..a2031f7 100644 --- a/modules/dhcp6c/client.nix +++ b/modules/dhcp6c/client.nix @@ -2,19 +2,29 @@ liminix, odhcp6c, odhcp-script, + svc }: { interface }: let inherit (liminix.services) longrun; + inherit (liminix) outputRef; name = "dhcp6c.${interface.name}"; -in -longrun { - inherit name; - notification-fd = 10; - run = '' - export SERVICE_STATE=$SERVICE_OUTPUTS/${name} - ${odhcp6c}/bin/odhcp6c -s ${odhcp-script} -e -v -p /run/${name}.pid -P0 $(output ${interface} ifname) - ) - ''; - dependencies = [ interface ]; + service = + longrun { + inherit name; + notification-fd = 10; + run = '' + export SERVICE_STATE=$SERVICE_OUTPUTS/${name} + ifname=$(output ${interface} ifname) + test -n "$ifname" && ${odhcp6c}/bin/odhcp6c -s ${odhcp-script} -e -v -p /run/${name}.pid -P0 $ifname + ) + ''; + dependencies = [ interface ]; + }; +in svc.secrets.subscriber.build { + # if the ppp service gets restarted, the interface may be different and + # we will have to restart dhcp on the new one + watch = [ (outputRef interface "ifindex") ]; + action = "restart"; + inherit service; }