diff options
| -rw-r--r-- | config/networking/bridges.nix | 8 | ||||
| -rw-r--r-- | config/networking/services/ap.nix | 27 | ||||
| -rw-r--r-- | config/networking/services/dhcp.nix | 10 | ||||
| -rw-r--r-- | config/networking/services/igmpproxy.nix | 7 |
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}"; }; |
