about summary refs log tree commit diff
path: root/nixos/lib
diff options
context:
space:
mode:
authorWill Fancher <elvishjerricco@gmail.com>2024-03-17 12:36:30 -0700
committerGitHub <noreply@github.com>2024-03-17 12:36:30 -0700
commit486e837cbec02d12f96e491b9721177edbf40e7e (patch)
treef5fd421a06c898cce6da245b18fa451b434c4a43 /nixos/lib
parentfc7885fbcea4b782142e06ce2d4d08cf92862004 (diff)
parentf753e58e6ec33dc93e8e319c03bad049d9b5a5b4 (diff)
downloadnixlib-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.nix15
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}}'.";