From 58dccf697fcfcf3c411974bb4bb03a1393044559 Mon Sep 17 00:00:00 2001 From: Astro Date: Thu, 8 Apr 2021 02:57:50 +0200 Subject: [PATCH] netmasks.nix: turn into code --- nix/lib/netmasks.nix | 68 +++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/nix/lib/netmasks.nix b/nix/lib/netmasks.nix index 7ceb270..c40a42c 100644 --- a/nix/lib/netmasks.nix +++ b/nix/lib/netmasks.nix @@ -1,35 +1,33 @@ -{ - "0" = "0.0.0.0"; - "1" = "128.0.0.0"; - "2" = "192.0.0.0"; - "3" = "224.0.0.0"; - "4" = "240.0.0.0"; - "5" = "248.0.0.0"; - "6" = "252.0.0.0"; - "7" = "254.0.0.0"; - "8" = "255.0.0.0"; - "9" = "255.128.0.0"; - "10" = "255.192.0.0"; - "11" = "255.224.0.0"; - "12" = "255.240.0.0"; - "13" = "255.248.0.0"; - "14" = "255.252.0.0"; - "15" = "255.254.0.0"; - "16" = "255.255.0.0"; - "17" = "255.255.128.0"; - "18" = "255.255.192.0"; - "19" = "255.255.224.0"; - "20" = "255.255.240.0"; - "21" = "255.255.248.0"; - "22" = "255.255.252.0"; - "23" = "255.255.254.0"; - "24" = "255.255.255.0"; - "25" = "255.255.255.128"; - "26" = "255.255.255.192"; - "27" = "255.255.255.224"; - "28" = "255.255.255.240"; - "29" = "255.255.255.248"; - "30" = "255.255.255.252"; - "31" = "255.255.255.254"; - "32" = "255.255.255.255"; -} +let + pow2 = n: + if n <= 0 + then 1 + else 2 * (pow2 (n - 1)); + octet = n: + if n == 0 + then 0 + else (pow2 (8 - n)) + (octet (n - 1)); + + netmask = len: + builtins.concatStringsSep "." ( + map (byte: + toString ( + if 8 * (byte + 1) <= len + then 255 + else if 8 * byte <= len + then octet (len - (8 * byte)) + else 0 + ) + ) [0 1 2 3] + ); + + keys = n: + if n < 33 + then [n] ++ keys (n + 1) + else []; +in +builtins.foldl' (netmasks: n: + netmasks // { + "${toString n}" = netmask n; + } +) {} (keys 0)