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
module-based-network
Daniel Barlow 4 months ago
parent 339c2d9873
commit 447f068569

@ -232,6 +232,25 @@ 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;
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 +267,7 @@ in rec {
resolvconf
sshd
config.services.hostname
dhcp6
];
};
defaultProfile.packages = with pkgs; [min-collect-garbage nftables tcpdump] ;

@ -0,0 +1,47 @@
(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)))

@ -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