nix/network/infra.nix

79 lines
1.9 KiB
Nix

{ lib, ... }:
let
toStringFixed = k: n: lib.fixedWidthString k "0" (toString n);
mkNode = id: let
a = id / 256;
b = id - 256 * a;
suffix = "${toStringFixed 3 a}${toStringFixed 3 b}";
suffixA = builtins.substring 0 2 suffix;
suffixB = builtins.substring 2 2 suffix;
suffixC = builtins.substring 4 2 suffix;
in {
ipv6 = "fd0a:66d3:1c19:42::${toString a}:${toString b}";
ipv4 = "10.42.${toString a}.${toString b}";
mac = "42:42:42:${suffixA}:${suffixB}:${suffixC}";
id = id;
};
mkHub = hub: hub // {
ipv6 = "fd0a:66d3:1c19:1000::${toString hub.id}";
};
in {
infra = {
vxlan = {
vni = 42;
port = 4789;
};
cidr = {
hubs.ipv6 = 64;
nodes = {
ipv4 = 16;
ipv6 = 64;
};
};
nodes = builtins.mapAttrs (_: mkNode) {
vogon = 1;
glucagon = 2;
ronderu = 3;
dodecagon = 4;
saigon = 5;
harpagon = 6;
patagon = 7;
wagon = 8;
lagon = 9;
aragon = 10;
pendragon = 11;
estragon = 12;
carlosgon = 13;
memoragon = 14;
hendecagon = 15;
dragon = 16;
perdrigon = 17;
martagon = 18;
jargon = 19;
niangon = 20;
};
hubs = builtins.mapAttrs (_: mkHub) {
vogon = {
id = 1;
publicKey = "d5vEJUiTFQh+MPQcU2JTaJ9lcsvzuoZkohxzeOigiVQ=";
endpoint = "193.54.193.161:51039";
};
glucagon = {
id = 2;
publicKey = "JfTsY3+jPTDgLDrECoSvoYs+6+GpjII0ookjhFhd5SY=";
endpoint = "89.234.162.224:51039";
};
ronderu = {
id = 3;
publicKey = "nOeLgmE1U6nY3UNxltQKwlID9lD7fvpEwij2XUvEGgg=";
endpoint = "137.194.12.129:51039";
};
saigon = {
id = 4;
publicKey = "9pGyE4+CQl+f8sFJ/Mkvp14yxDQJ0SJmGnher5Tgzjc=";
endpoint = "193.48.225.201:51039";
};
};
};
}