summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/networking/bridges.nix8
-rw-r--r--config/networking/services/ap.nix27
-rw-r--r--config/networking/services/dhcp.nix10
-rw-r--r--config/networking/services/igmpproxy.nix7
4 files changed, 28 insertions, 24 deletions
diff --git a/config/networking/bridges.nix b/config/networking/bridges.nix
index 48a3391..2b24552 100644
--- a/config/networking/bridges.nix
+++ b/config/networking/bridges.nix
@@ -2,7 +2,11 @@
let nets = config.personal.networking.networks;
in {
- config = lib.mkMerge ((builtins.map (network:
+ config = lib.mkMerge ([{
+ systemd.services.hostapd.postStart = lib.mkBefore ''
+ sleep 3
+ '';
+ }] ++ (builtins.map (network:
let
bridge = network.interface;
device = network.device;
@@ -15,7 +19,7 @@ in {
'';
systemd.services.hostapd.postStart = ''
- sleep 3
+ echo Setting ${device} to hairpin mode...
${pkgs.iproute2}/bin/bridge link set dev ${device} hairpin on
'';
}) [ nets.wan nets.iot ]));
diff --git a/config/networking/services/ap.nix b/config/networking/services/ap.nix
index 9976fc6..2324c41 100644
--- a/config/networking/services/ap.nix
+++ b/config/networking/services/ap.nix
@@ -2,6 +2,7 @@
let
cfg = config.services.hostapd;
+ nets = config.personal.networking.networks;
makeHostapdConf = { name, device, interface, driver ? cfg.driver, ssid
, hwMode ? cfg.hwMode, channel ? cfg.channel, countryCode ? cfg.countryCode
, passphrase ? secrets.wifi."${name}".passphrase, logLevel ? cfg.logLevel
@@ -83,7 +84,7 @@ let
'' + extraConfig);
hostapdIotConf = makeHostapdConf {
name = "iot";
- inherit (config.personal.networking.networks.iot) device interface;
+ inherit (nets.iot) device interface;
ssid = "Quentinternet of Things";
hwMode = "g";
channel = 0;
@@ -96,7 +97,7 @@ let
};
hostapdWanConf = makeHostapdConf {
name = "wan";
- inherit (config.personal.networking.networks.wan) device interface;
+ inherit (nets.wan) device interface;
ssid = "Quentintranet";
hwMode = "a";
channel = 36;
@@ -123,20 +124,18 @@ in {
};
systemd.services.hostapd = let
- devices = with config.personal.networking.networks; [
- wan.device
- iot.device
- ];
- netDevices = builtins.map (device:
- "sys-subsystem-net-devices-${utils.escapeSystemdPath device}.device")
- devices;
- networkLinkServices =
- builtins.map (device: "network-link-${device}.service") devices;
+ subnets = with nets; [ wan iot ];
+ netDevices = builtins.map (subnet:
+ "sys-subsystem-net-devices-${
+ utils.escapeSystemdPath subnet.device
+ }.device") subnets;
+ netdevServices =
+ builtins.map (subnet: "${subnet.interface}-netdev.service") subnets;
+ dependencies = lib.mkForce (netDevices ++ netdevServices);
in {
serviceConfig.ExecStart = lib.mkForce
"${pkgs.hostapd}/bin/hostapd ${hostapdIotConf} ${hostapdWanConf}";
- after = lib.mkForce netDevices;
- bindsTo = lib.mkForce netDevices;
- requiredBy = lib.mkForce networkLinkServices;
+ after = dependencies;
+ bindsTo = dependencies;
};
}
diff --git a/config/networking/services/dhcp.nix b/config/networking/services/dhcp.nix
index 1958f28..c50129c 100644
--- a/config/networking/services/dhcp.nix
+++ b/config/networking/services/dhcp.nix
@@ -1,6 +1,9 @@
{ config, ... }:
-let nets = config.personal.networking.networks;
+let
+ nets = config.personal.networking.networks;
+ netdevServices = builtins.map (subnet: "${subnet.interface}-netdev.service")
+ (with nets; [ wan iot ]);
in {
services.kea.dhcp4 = {
enable = true;
@@ -45,7 +48,6 @@ in {
};
};
- systemd.services.kea-dhcp4-server.after =
- builtins.map (subnet: "${subnet.interface}-netdev.service")
- (with nets; [ wan iot ]);
+ systemd.services.kea-dhcp4-server.after = netdevServices;
+ systemd.services.kea-dhcp4-server.bindsTo = netdevServices;
}
diff --git a/config/networking/services/igmpproxy.nix b/config/networking/services/igmpproxy.nix
index 6bfb43b..b7a25da 100644
--- a/config/networking/services/igmpproxy.nix
+++ b/config/networking/services/igmpproxy.nix
@@ -2,8 +2,7 @@
let
nets = config.personal.networking.networks;
- nets-dependencies =
- builtins.map (subnet: "${subnet.interface}-netdev.service")
+ netdevServices = builtins.map (subnet: "${subnet.interface}-netdev.service")
(with nets; [ wan iot ]);
conf = pkgs.writeText "igmpproxy.conf" ''
phyint ${nets.wan.interface} upstream
@@ -14,8 +13,8 @@ in {
systemd.services.igmpproxy = {
description = "Multicast router utilizing IGMP forwarding";
wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ] ++ nets-dependencies;
- requires = nets-dependencies;
+ after = [ "kea-dhcp4-server.service" ] ++ netdevServices;
+ bindsTo = netdevServices;
path = [ pkgs.igmpproxy ];
script = "igmpproxy -v -n ${conf}";
};