diff --git a/nixos/modules/system/boot/networkd.nix b/nixos/modules/system/boot/networkd.nix
index d355d7ad9bd..c4790f59dff 100644
--- a/nixos/modules/system/boot/networkd.nix
+++ b/nixos/modules/system/boot/networkd.nix
@@ -301,6 +301,16 @@ let
(assertValueOneOf "RapidCommit" boolValues)
];
+ checkDhcpV6 = checkUnitConfig "DHCPv6" [
+ (assertOnlyFields [
+ "UseDns" "UseNTP" "RapidCommit" "ForceDHCPv6PDOtherInformation"
+ ])
+ (assertValueOneOf "UseDNS" boolValues)
+ (assertValueOneOf "UseNTP" boolValues)
+ (assertValueOneOf "RapidCommit" boolValues)
+ (assertValueOneOf "ForceDHCPv6PDOtherInformation" boolValues)
+ ];
+
checkDhcpServer = checkUnitConfig "DHCPServer" [
(assertOnlyFields [
"PoolOffset" "PoolSize" "DefaultLeaseTimeSec" "MaxLeaseTimeSec"
@@ -651,6 +661,18 @@ let
'';
};
+ dhcpV6Config = mkOption {
+ default = {};
+ example = { UseDNS = true; UseRoutes = true; };
+ type = types.addCheck (types.attrsOf unitOption) checkDhcpV6;
+ description = ''
+ Each attribute in this set specifies an option in the
+ [DHCPv6] section of the unit. See
+ systemd.network
+ 5 for details.
+ '';
+ };
+
dhcpServerConfig = mkOption {
default = {};
example = { PoolOffset = 50; EmitDNS = false; };
@@ -980,6 +1002,11 @@ let
[DHCP]
${attrsToSection def.dhcpConfig}
+ ''}
+ ${optionalString (def.dhcpV6Config != {}) ''
+ [DHCPv6]
+ ${attrsToSection def.dhcpV6Config}
+
''}
${optionalString (def.dhcpServerConfig != { }) ''
[DHCPServer]