diff options
Diffstat (limited to 'config/networking/bridges.nix')
| -rw-r--r-- | config/networking/bridges.nix | 46 |
1 files changed, 33 insertions, 13 deletions
diff --git a/config/networking/bridges.nix b/config/networking/bridges.nix index cdef41b..9e18ea8 100644 --- a/config/networking/bridges.nix +++ b/config/networking/bridges.nix @@ -1,26 +1,46 @@ -{ config, lib, utils, pkgs, ... }: - -let nets = config.personal.networking.networks; +{ + config, + lib, + pkgs, + ... +}: let + nets = config.personal.networking.networks; in { - config = lib.mkMerge ([{ - systemd.services.hostapd.postStart = lib.mkForce (lib.mkBefore '' - sleep 3 - ''); - }] ++ (builtins.map (network: - let + config = lib.mkMerge ([ + { + systemd.services.hostapd.postStart = lib.mkForce (lib.mkBefore '' + sleep 3 + ''); + } + { + # create a bridge on top of enp3s0 along with a dummy interface + # for kea to work even when enp3s0 is disconnected + # if you change this, you may want to change: + # - the kea configuration in ./services/dhcp.nix + # - the eth0 net configuration ./default.nix + networking = { + bridges.eth0.interfaces = ["enp3s0" "enp3s0-dummy"]; + localCommands = '' + ip link add enp3s0-dummy type dummy + ''; + }; + boot.kernelModules = ["dummy"]; + } + ] + ++ (builtins.map (network: let bridge = network.interface; device = network.device; in { - networking.bridges."${bridge}".interfaces = [ ]; + networking.bridges."${bridge}".interfaces = []; systemd.services."${bridge}-netdev".script = '' echo Setting forward delay to 0 for ${bridge}... ip link set ${bridge} type bridge forward_delay 0 ''; - systemd.services.hostapd.postStart = lib.mkForce ('' + systemd.services.hostapd.postStart = lib.mkForce '' echo Setting ${device} to hairpin mode... ${pkgs.iproute2}/bin/bridge link set dev ${device} hairpin on - ''); - }) [ nets.wan nets.iot ])); + ''; + }) [nets.wan nets.iot])); } |
