2022-09-26 13:26:54 +02:00
|
|
|
{
|
|
|
|
callPackage
|
|
|
|
, liminix
|
2023-03-01 18:55:52 +01:00
|
|
|
, ifwait
|
2023-02-25 00:49:05 +01:00
|
|
|
, lib
|
2022-09-26 13:26:54 +02:00
|
|
|
}:
|
2023-02-25 00:49:05 +01:00
|
|
|
let
|
|
|
|
inherit (liminix.services) oneshot longrun;
|
|
|
|
inherit (lib) concatStringsSep optional;
|
2022-09-26 13:26:54 +02:00
|
|
|
in {
|
2023-03-07 20:10:12 +01:00
|
|
|
interface = { type ? "hardware", device, link ? null, primary ? null, id ? null, dependencies ? [] } @ args:
|
2023-02-25 00:49:05 +01:00
|
|
|
let ups =
|
|
|
|
[]
|
|
|
|
++ optional (type == "bridge")
|
|
|
|
"ip link add name ${device} type bridge"
|
2023-03-07 20:10:12 +01:00
|
|
|
++ optional (type == "vlan")
|
|
|
|
"ip link add link ${link} name ${device} type vlan id ${id}"
|
2023-03-01 18:55:52 +01:00
|
|
|
++ ["${ifwait}/bin/ifwait -v ${device} present"]
|
2023-02-25 00:49:05 +01:00
|
|
|
++ ["ip link set up dev ${device}"]
|
|
|
|
++ optional (primary != null)
|
|
|
|
"ip link set dev ${device} master ${primary.device}";
|
|
|
|
in oneshot {
|
|
|
|
name = "${device}.link";
|
|
|
|
up = lib.concatStringsSep "\n" ups;
|
|
|
|
down = "ip link set down dev ${device}";
|
|
|
|
dependencies = dependencies ++ lib.optional (primary != null) primary;
|
|
|
|
} // {
|
|
|
|
inherit device;
|
|
|
|
};
|
2023-03-01 23:24:58 +01:00
|
|
|
address = interface: { family, dependencies ? [], prefixLength, address } @ args:
|
2022-09-26 13:26:54 +02:00
|
|
|
let inherit (builtins) toString;
|
|
|
|
in oneshot {
|
2023-03-01 23:24:58 +01:00
|
|
|
dependencies = [ interface ] ++ dependencies;
|
2022-09-26 13:26:54 +02:00
|
|
|
name = "${interface.device}.addr.${address}";
|
|
|
|
up = "ip address add ${address}/${toString prefixLength} dev ${interface.device} ";
|
|
|
|
down = "ip address del ${address}/${toString prefixLength} dev ${interface.device} ";
|
2022-09-28 22:33:18 +02:00
|
|
|
} // {
|
|
|
|
inherit (interface) device;
|
2022-09-26 13:26:54 +02:00
|
|
|
};
|
|
|
|
udhcpc = callPackage ./udhcpc.nix {};
|
|
|
|
odhcpc = interface: { ... } @ args: longrun {
|
|
|
|
name = "${interface.device}.odhcp";
|
|
|
|
run = "odhcpcd ${interface.device}";
|
|
|
|
};
|
2022-09-28 22:33:18 +02:00
|
|
|
dnsmasq = callPackage ./dnsmasq.nix {};
|
2022-10-01 19:53:20 +02:00
|
|
|
hostapd = callPackage ./hostapd.nix {};
|
2023-06-30 11:17:33 +02:00
|
|
|
route = { name, target, via, dependencies, dev ? null }:
|
|
|
|
let with_dev = if dev != null then "dev ${dev}" else "";
|
|
|
|
in oneshot {
|
2022-09-26 13:55:10 +02:00
|
|
|
inherit name;
|
|
|
|
up = ''
|
2023-06-30 11:17:33 +02:00
|
|
|
ip route add ${target} via ${via} ${with_dev}
|
2022-09-26 13:55:10 +02:00
|
|
|
'';
|
|
|
|
down = ''
|
2023-06-30 11:17:33 +02:00
|
|
|
ip route del ${target} via ${via} ${with_dev}
|
2022-09-26 13:55:10 +02:00
|
|
|
'';
|
|
|
|
inherit dependencies;
|
|
|
|
};
|
2022-09-26 13:26:54 +02:00
|
|
|
}
|