types: add cidr and use as net.address

This commit is contained in:
lassulus 2017-10-11 18:12:31 +02:00
parent bdaa1fc9bf
commit 8bf5550852

View File

@ -92,7 +92,7 @@ rec {
default = null; default = null;
}; };
addrs = mkOption { addrs = mkOption {
type = listOf addr; type = listOf cidr;
default = default =
optional (config.ip4 != null) config.ip4.addr ++ optional (config.ip4 != null) config.ip4.addr ++
optional (config.ip6 != null) config.ip6.addr; optional (config.ip6 != null) config.ip6.addr;
@ -109,7 +109,7 @@ rec {
type = addr4; type = addr4;
}; };
prefix = mkOption ({ prefix = mkOption ({
type = str; # TODO routing prefix (CIDR) type = cidr4;
} // optionalAttrs (config.name == "retiolum") { } // optionalAttrs (config.name == "retiolum") {
default = "10.243.0.0/16"; default = "10.243.0.0/16";
}); });
@ -125,7 +125,7 @@ rec {
apply = lib.normalize-ip6-addr; apply = lib.normalize-ip6-addr;
}; };
prefix = mkOption ({ prefix = mkOption ({
type = str; # TODO routing prefix (CIDR) type = cidr6;
} // optionalAttrs (config.name == "retiolum") { } // optionalAttrs (config.name == "retiolum") {
default = "42::/16"; default = "42::/16";
}); });
@ -364,6 +364,26 @@ rec {
merge = mergeOneOption; merge = mergeOneOption;
}; };
cidr = either cidr4 cidr6;
cidr4 = mkOptionType {
name = "CIDRv4 address";
check = let
CIDRv4address = let d = "([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"; in
concatMapStringsSep "." (const d) (range 1 4) + "(/([1-2]?[0-9]|3[0-2]))?";
in
test CIDRv4address;
merge = mergeOneOption;
};
cidr6 = mkOptionType {
name = "CIDRv6 address";
check = let
# TODO check IPv6 address harder
CIDRv6address = "[0-9a-f.:]+(/([0-9][0-9]?|1[0-2][0-8]))?";
in
test CIDRv6address;
merge = mergeOneOption;
};
binary-cache-pubkey = str; binary-cache-pubkey = str;
pgp-pubkey = str; pgp-pubkey = str;