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 @@
{ let
"0" = "0.0.0.0"; pow2 = n:
"1" = "128.0.0.0"; if n <= 0
"2" = "192.0.0.0"; then 1
"3" = "224.0.0.0"; else 2 * (pow2 (n - 1));
"4" = "240.0.0.0"; octet = n:
"5" = "248.0.0.0"; if n == 0
"6" = "252.0.0.0"; then 0
"7" = "254.0.0.0"; else (pow2 (8 - n)) + (octet (n - 1));
"8" = "255.0.0.0";
"9" = "255.128.0.0"; netmask = len:
"10" = "255.192.0.0"; builtins.concatStringsSep "." (
"11" = "255.224.0.0"; map (byte:
"12" = "255.240.0.0"; toString (
"13" = "255.248.0.0"; if 8 * (byte + 1) <= len
"14" = "255.252.0.0"; then 255
"15" = "255.254.0.0"; else if 8 * byte <= len
"16" = "255.255.0.0"; then octet (len - (8 * byte))
"17" = "255.255.128.0"; else 0
"18" = "255.255.192.0"; )
"19" = "255.255.224.0"; ) [0 1 2 3]
"20" = "255.255.240.0"; );
"21" = "255.255.248.0";
"22" = "255.255.252.0"; keys = n:
"23" = "255.255.254.0"; if n < 33
"24" = "255.255.255.0"; then [n] ++ keys (n + 1)
"25" = "255.255.255.128"; else [];
"26" = "255.255.255.192"; in
"27" = "255.255.255.224"; builtins.foldl' (netmasks: n:
"28" = "255.255.255.240"; netmasks // {
"29" = "255.255.255.248"; "${toString n}" = netmask n;
"30" = "255.255.255.252"; }
"31" = "255.255.255.254"; ) {} (keys 0)
"32" = "255.255.255.255";
}