Compare commits

...

2 Commits

Author SHA1 Message Date
Daniel Barlow fa7e682e87 dhcp6c readiness notification 4 months ago
Daniel Barlow 447f068569 partly support getting IPv6 addresses
- gets interface id from ppp
- runs odhcpc to get RA and prefix delegation
- doesn't do anything useful with the data yet
4 months ago

@ -232,6 +232,26 @@ in rec {
down = "echo 0 > ${filename}";
};
services.dhcp6 =
let
name = "dhcp6c.wan";
luafile = pkgs.runCommand "udhcpc-script" {} ''
${pkgs.luaSmall.pkgs.fennel}/bin/fennel --compile ${./udhcp6-script.fnl} > $out
'';
script = pkgs.writeAshScript "dhcp6-notify" {} ''
. ${serviceFns}
(in_outputs ${name}; ${pkgs.luaSmall}/bin/lua ${luafile} "$@")
'';
in longrun {
inherit name;
notification-fd = 10;
run = ''
${pkgs.odhcp6c}/bin/odhcp6c -s ${script} -e -v -p /run/${name}.pid -P 48 $(output ${services.wan} ifname)
)
'';
dependencies = [ services.wan ];
};
services.default = target {
name = "default";
contents = with config.services; [
@ -248,6 +268,7 @@ in rec {
resolvconf
sshd
config.services.hostname
dhcp6
];
};
defaultProfile.packages = with pkgs; [min-collect-garbage nftables tcpdump] ;

@ -0,0 +1,55 @@
(fn write-value [name value]
(with-open [fout (io.open name :w)]
(when value (fout:write value))))
(write-value "state" (. arg 2))
(write-value "ifname" (. arg 1))
(fn write-value-from-env [name]
(write-value name (os.getenv (string.upper name))))
(let [wanted
[
:addresses
:aftr
:cer
:domains
:lw406
:mape
:mapt
:ntp_fqdn
:ntp_ip
:option_1
:option_2
:option_3
:option_4
:option_5
:passthru
:prefixes
:ra_addresses
:ra_dns
:ra_domains
:ra_hoplimit
:ra_mtu
:ra_reachable
:ra_retransmit
:ra_routes
:rdnss
:server
:sip_domain
:sip_ip
:sntp_ip
:sntp_fqdn
]]
(each [_ n (ipairs wanted)]
(write-value-from-env n)))
(let [ready (match state
"started" false
"unbound" false
"stopped" false
_ true)]
(and ready
(with-open [fd (io.open "/proc/self/fd/10" :w)] (fd:write "\n"))))

@ -38,7 +38,7 @@ let
"seq" "setsid" "sha1sum" "sha256sum" "sha512sum" "sleep" "sort"
"stat" "strings" "stty" "su" "sum" "swapoff" "swapon" "sync"
"tail" "tee" "test" "time" "touch" "tr" "traceroute" "traceroute6"
"true" "truncate" "tty" "udhcpc" "udhcpc6" "umount" "uname"
"true" "truncate" "tty" "udhcpc" "umount" "uname"
"unexpand" "uniq" "unlink" "unlzma" "unxz" "unzip" "uptime"
"watch" "wc" "whoami" "xargs" "xxd" "xz" "xzcat" "yes" "zcat"
];

@ -43,6 +43,7 @@
preinit = callPackage ./preinit {};
swconfig = callPackage ./swconfig {};
odhcp6c = callPackage ./odhcp6c {};
openwrt = callPackage ./openwrt {};

@ -29,8 +29,17 @@ let
)
echo >/proc/self/fd/10
'';
ip6-up = writeAshScript "ip6-up" {} ''
. ${serviceFns}
(in_outputs ${name}
echo $4 > ipv6-address
echo $5 > ipv6-peer-address
)
echo >/proc/self/fd/10
'';
ppp-options' = ppp-options ++ [
"ip-up-script" ip-up
"ipv6-up-script" ip6-up
"ipparam" name
"nodetach"
"usepeerdns"

@ -0,0 +1,20 @@
{ stdenv
, buildPackages
, cmake
, fetchFromGitHub
, ...} :
# let switchDotH = buildPackages.fetchurl {
# url = "https://git.openwrt.org/?p=openwrt/openwrt.git;a=blob_plain;f=target/linux/generic/files/include/uapi/linux/switch.h;hb=99a188828713d6ff9c541590b08d4e63ef52f6d7";
# sha256 = "15kmhhcpd84y4f45rf8zai98c61jyvkc37p90pcxirna01x33wi8";
# name="switch.h";
# };
stdenv.mkDerivation {
src = fetchFromGitHub {
owner = "openwrt";
repo = "odhcp6c";
rev = "bcd283632ac13391aac3ebdd074d1fd832d76fa3";
hash = "sha256-jqxr+N1PffWYmF0F6hJKxRLMN5Ht5WpehK1K2HjL+do=";
};
name = "odhcp6c";
nativeBuildInputs = [ cmake ];
}
Loading…
Cancel
Save