extract network functions into library module
2 files changed, 29 insertions(+), 13 deletions(-)
changed files
A lib/net.nix
@@ -0,0 +1,22 @@ +{ lib }: +let + removeMask = ( + a: + if builtins.isString a then builtins.head (lib.strings.splitString "/" a) else removeMask a.Address + ); + + isv6 = (lib.strings.hasInfix ":"); + wrapv6 = + addr: + if isv6 addr then + if lib.hasPrefix "[" addr && lib.hasSuffix "]" addr then addr else "[" + addr + "]" + else + addr; +in +{ + inherit + removeMask + isv6 + wrapv6 + ; +}
M system/roles/router.nix → system/roles/router.nix
@@ -11,6 +11,7 @@ lan = builtins.head lans; inherit (config.networking) domain hostName fqdn; inherit (import ../../data) ulaPrefix; + netlib = import ../../lib/net.nix { inherit lib; }; wanPrefixLen = 56;@@ -45,15 +46,8 @@ allProviders = lib.attrValues dnsProviders; mainProvider = dnsProviders.quad9; - justAddress = (a: builtins.head (lib.strings.splitString "/" a)); - myAddresses = map justAddress config.systemd.network.networks."40-${lan}".address; - isv6 = (lib.strings.hasInfix ":"); - wrapv6 = - addr: - if isv6 addr then - if lib.hasPrefix "[" addr && lib.hasSuffix "]" addr then addr else "[" + addr + "]" - else - addr; + lanCfg = config.systemd.network.networks."40-${lan}"; + myAddresses = map netlib.removeMask lanCfg.address; in { imports = [@@ -148,7 +142,7 @@ MulticastDNS = true; Domains = [ config.networking.domain ]; LinkLocalAddressing = "ipv6"; # required for networkd RA despite fe80::1 static assignment DNSOverTLS = false; - DNS = map (a: "${wrapv6 a}:${toString config.services.dnsmasq.settings.port}") myAddresses; + DNS = map (a: "${netlib.wrapv6 a}:${toString config.services.dnsmasq.settings.port}") myAddresses; DNSDefaultRoute = false; IPv6SendRA = true; };@@ -162,7 +156,7 @@ }; ipv6SendRAConfig = { Managed = true; OtherInformation = true; - DNS = (builtins.filter isv6 myAddresses) ++ [ "_link_local" ]; + DNS = builtins.filter netlib.isv6 myAddresses ++ [ "_link_local" ]; }; ipv6Prefixes = [ {@@ -236,8 +230,8 @@ }; services.adguardhome.settings = let - mkHostPort = (addr: "${wrapv6 addr}:${toString config.services.dnsmasq.settings.port}"); - dnsmasqAddrs = map mkHostPort (builtins.filter isv6 myAddresses); + mkHostPort = (addr: "${netlib.wrapv6 addr}:${toString config.services.dnsmasq.settings.port}"); + dnsmasqAddrs = map mkHostPort (builtins.filter netlib.isv6 myAddresses); mkTLSHost = p: "tls://${p.hostname}"; in {