commit dd124e49dd203f300b4ae4b8074755dbe1735e4e
parent 0b0efde12ca8cba4353e2209b9911f2a91cb62c3
Author: Daniel Barlow <dan@telent.net>
Date: Thu, 22 Sep 2022 12:42:20 +0100
udhcp: write service responses as outputs
Diffstat:
2 files changed, 50 insertions(+), 3 deletions(-)
diff --git a/pkgs/liminix-tools/default.nix b/pkgs/liminix-tools/default.nix
@@ -80,6 +80,6 @@ in {
};
services = {
inherit longrun oneshot bundle target;
- output = service: name: "/run/services/outputs/${service.name}/${name}";
+ output = service: name: "/run/s6-rc/scandir/${service.name}/data/outputs/${name}";
};
}
diff --git a/pkgs/liminix-tools/networking/udhcpc.nix b/pkgs/liminix-tools/networking/udhcpc.nix
@@ -1,10 +1,57 @@
{
liminix
, busybox
+, writeShellScript
} :
-let inherit (liminix.services) longrun;
+let
+ inherit (liminix.services) longrun;
+ script = writeShellScript "udhcp-notify" ''
+action=$1
+env > /run/udhcp.values
+
+set_address() {
+ ip address replace $ip/$mask dev $interface
+ mkdir -p data/outputs
+ for i in lease mask ip router siaddr dns serverid subnet opt53 interface ; do
+ echo ''${!i} > data/outputs/$i
+ done
+}
+case $action in
+ deconfig)
+ ip address flush $interface
+ ip link set up dev $interface
+ ;;
+ bound)
+ # this doesn't actually replace, it adds a new address.
+ set_address
+ ;;
+ renew)
+ set_address
+ ;;
+ nak)
+ echo "received NAK on $interface"
+ ;;
+esac
+'';
+
in
interface: { ... } @ args: longrun {
name = "${interface.device}.udhcp";
- run = "${busybox}/bin/udhcpc -f -i ${interface.device}";
+ run = "${busybox}/bin/udhcpc -f -i ${interface.device} -s ${script}";
}
+
+# lease=86400
+# mask=24
+# ip=10.0.2.15
+# router=10.0.2.2
+# siaddr=10.0.2.2
+# dns=10.0.2.3
+# serverid=10.0.2.2
+# subnet=255.255.255.0
+# SHLVL=2
+# opt53=05
+# interface=eth0
+# PATH=/nix/store/npy692wik809z3vdwrkrj2wixjkr33kp-busybox-mips-unknown-linux-musl-1.35.0/bin:/nix/store/
+# pj0b27l5728cypa5mmagz0q8ibzpik0h-execline-mips-unknown-linux-musl-2.9.0.1-bin/bin:/nix/store/rfjiw4dnv29daqc9971qmica1h86l0s0-s6-linux-init-mips-unknown-linux-musl-1.0.8.0-bin/bin:/nix/store/4wn3jm7yy2gfi0is0yy75lifbq5zjwz7-s6-rc-mips-unknown-linux-musl-0.5.3.2-bin/bin:/usr/bin:/bin
+# _=/nix/store/npy692wik809z3vdwrkrj2wixjkr33kp-busybox-mips-unknown-linux-musl-1.35.0/bin/env
+# /