Merge pull request #293710 from B4dM4n/networkd-policy-rule-port-range

nixos/networkd: allow RoutingPolicyRule port ranges

Changed files
+16 -3
nixos
lib
modules
system
+14 -1
nixos/lib/systemd-lib.nix
···
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)
+2 -2
nixos/modules/system/boot/networkd.nix
···
(assertInt "FirewallMark")
(assertRange "FirewallMark" 1 4294967295)
(assertInt "Priority")
-
(assertPort "SourcePort")
-
(assertPort "DestinationPort")
+
(assertPortOrPortRange "SourcePort")
+
(assertPortOrPortRange "DestinationPort")
(assertValueOneOf "InvertRule" boolValues)
(assertValueOneOf "Family" ["ipv4" "ipv6" "both"])
(assertInt "SuppressPrefixLength")