diff --git a/nixos/modules/system/boot/networkd.nix b/nixos/modules/system/boot/networkd.nix
index 1fe7691fc9a7..71891ebbfefe 100644
--- a/nixos/modules/system/boot/networkd.nix
+++ b/nixos/modules/system/boot/networkd.nix
@@ -879,6 +879,15 @@ let
(assertValueOneOf "OnLink" boolValues)
];
+ sectionIPv6RoutePrefix = checkUnitConfig "IPv6RoutePrefix" [
+ (assertOnlyFields [
+ "Route"
+ "LifetimeSec"
+ ])
+ (assertHasField "Route")
+ (assertInt "LifetimeSec")
+ ];
+
sectionDHCPServerStaticLease = checkUnitConfig "DHCPServerStaticLease" [
(assertOnlyFields [
"MACAddress"
@@ -1242,6 +1251,22 @@ let
};
};
+ ipv6RoutePrefixOptions = {
+ options = {
+ ipv6RoutePrefixConfig = mkOption {
+ default = {};
+ example = { Route = "fd00::/64"; };
+ type = types.addCheck (types.attrsOf unitOption) check.network.sectionIPv6RoutePrefix;
+ description = ''
+ Each attribute in this set specifies an option in the
+ [IPv6RoutePrefix] section of the unit. See
+ systemd.network
+ 5 for details.
+ '';
+ };
+ };
+ };
+
dhcpServerStaticLeaseOptions = {
options = {
dhcpServerStaticLeaseConfig = mkOption {
@@ -1384,6 +1409,17 @@ let
'';
};
+ ipv6RoutePrefixes = mkOption {
+ default = [];
+ example = [ { Route = "fd00::/64"; LifetimeSec = 3600; } ];
+ type = with types; listOf (submodule ipv6RoutePrefixOptions);
+ description = ''
+ A list of ipv6RoutePrefix sections to be added to the unit. See
+ systemd.network
+ 5 for details.
+ '';
+ };
+
name = mkOption {
type = types.nullOr types.str;
default = null;
@@ -1775,6 +1811,10 @@ let
[IPv6Prefix]
${attrsToSection x.ipv6PrefixConfig}
'')
+ + flip concatMapStrings def.ipv6RoutePrefixes (x: ''
+ [IPv6RoutePrefix]
+ ${attrsToSection x.ipv6RoutePrefixConfig}
+ '')
+ flip concatMapStrings def.dhcpServerStaticLeases (x: ''
[DHCPServerStaticLease]
${attrsToSection x.dhcpServerStaticLeaseConfig}