udhcpc.nix (1831B)
1 { 2 liminix 3 , writeAshScript 4 , serviceFns 5 } : 6 let 7 inherit (liminix.services) longrun; 8 in 9 interface: { dependencies ? [] } @ args: 10 let 11 name = "${interface.device}.udhcp"; 12 script = writeAshScript "udhcp-notify" { 13 # runtimeInputs = [ iproute2 ] using busybox version of ip 14 } '' 15 . ${serviceFns} 16 exec 2>&1 17 action=$1 18 19 set_address() { 20 ip address replace $ip/$mask dev $interface 21 (in_outputs ${name} 22 for i in lease mask ip router siaddr dns serverid subnet opt53 interface ; do 23 printenv $i > $i 24 done) 25 } 26 case $action in 27 deconfig) 28 ip address flush $interface 29 ip link set up dev $interface 30 ;; 31 bound) 32 # this doesn't actually replace, it adds a new address. 33 set_address 34 echo >/proc/self/fd/10 35 ;; 36 renew) 37 set_address 38 ;; 39 nak) 40 echo "received NAK on $interface" 41 ;; 42 esac 43 ''; 44 in longrun { 45 inherit name; 46 run = "/bin/udhcpc -f -i ${interface.device} -x hostname:$(cat /proc/sys/kernel/hostname) -s ${script}"; 47 notification-fd = 10; 48 dependencies = [ interface ] ++ dependencies; 49 } 50 51 # lease=86400 52 # mask=24 53 # ip=10.0.2.15 54 # router=10.0.2.2 55 # siaddr=10.0.2.2 56 # dns=10.0.2.3 57 # serverid=10.0.2.2 58 # subnet=255.255.255.0 59 # SHLVL=2 60 # opt53=05 61 # interface=eth0 62 # PATH=/nix/store/npy692wik809z3vdwrkrj2wixjkr33kp-busybox-mips-unknown-linux-musl-1.35.0/bin:/nix/store/ 63 # 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 64 # _=/nix/store/npy692wik809z3vdwrkrj2wixjkr33kp-busybox-mips-unknown-linux-musl-1.35.0/bin/env 65 # /