diff options
author | Will Fancher <elvishjerricco@gmail.com> | 2024-03-17 12:36:30 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-17 12:36:30 -0700 |
commit | 486e837cbec02d12f96e491b9721177edbf40e7e (patch) | |
tree | f5fd421a06c898cce6da245b18fa451b434c4a43 /nixos/lib | |
parent | fc7885fbcea4b782142e06ce2d4d08cf92862004 (diff) | |
parent | f753e58e6ec33dc93e8e319c03bad049d9b5a5b4 (diff) | |
download | nixlib-486e837cbec02d12f96e491b9721177edbf40e7e.tar nixlib-486e837cbec02d12f96e491b9721177edbf40e7e.tar.gz nixlib-486e837cbec02d12f96e491b9721177edbf40e7e.tar.bz2 nixlib-486e837cbec02d12f96e491b9721177edbf40e7e.tar.lz nixlib-486e837cbec02d12f96e491b9721177edbf40e7e.tar.xz nixlib-486e837cbec02d12f96e491b9721177edbf40e7e.tar.zst nixlib-486e837cbec02d12f96e491b9721177edbf40e7e.zip |
Merge pull request #293710 from B4dM4n/networkd-policy-rule-port-range
nixos/networkd: allow RoutingPolicyRule port ranges
Diffstat (limited to 'nixos/lib')
-rw-r--r-- | nixos/lib/systemd-lib.nix | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/nixos/lib/systemd-lib.nix b/nixos/lib/systemd-lib.nix index ef218e674ebf..c00b2d0f207c 100644 --- a/nixos/lib/systemd-lib.nix +++ b/nixos/lib/systemd-lib.nix @@ -73,13 +73,26 @@ in rec { optional (attr ? ${name} && (! isMacAddress attr.${name} && attr.${name} != "none")) "Systemd ${group} field `${name}` must be a valid MAC address or the special value `none`."; - + isNumberOrRangeOf = check: v: + if isInt v + then check v + else let + parts = splitString "-" v; + lower = toIntBase10 (head parts); + upper = if tail parts != [] then toIntBase10 (head (tail parts)) else lower; + in + length parts <= 2 && lower <= upper && check lower && check upper; isPort = i: i >= 0 && i <= 65535; + isPortOrPortRange = isNumberOrRangeOf isPort; assertPort = name: group: attr: optional (attr ? ${name} && ! isPort attr.${name}) "Error on the systemd ${group} field `${name}': ${attr.name} is not a valid port number."; + assertPortOrPortRange = name: group: attr: + optional (attr ? ${name} && ! isPortOrPortRange attr.${name}) + "Error on the systemd ${group} field `${name}': ${attr.name} is not a valid port number or range of port numbers."; + assertValueOneOf = name: values: group: attr: optional (attr ? ${name} && !elem attr.${name} values) "Systemd ${group} field `${name}' cannot have value `${toString attr.${name}}'."; |