netmasks.nix: turn into code

This commit is contained in:
Astro 2021-04-08 02:57:50 +02:00
parent df32c2c7f3
commit 58dccf697f
1 changed files with 33 additions and 35 deletions

View File

@ -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)