diff --git a/man/networkd.conf.xml b/man/networkd.conf.xml
index e843e3d9b1e..1d5edfd45f2 100644
--- a/man/networkd.conf.xml
+++ b/man/networkd.conf.xml
@@ -256,6 +256,20 @@
The following options are understood:
+
+ ClientIdentifier=
+
+ Specifies the default DHCPv4 client identifier to be used. Takes one of
+ or . If set to , the MAC address of each link will be used.
+ If set to , an RFC4361-compliant Client ID, which is the combination of IAID
+ and DUID, is used. IAID can be configured by IAID= in each matching
+ .network file. DUID can be configured by DUIDType= and
+ DUIDRawData=. Defaults to .
+
+
+
+
+
DUIDType=Specifies how the DUID should be generated. See
diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index 6ed4dde4df4..1c26609917e 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -2371,8 +2371,11 @@ NFTSet=prefix:netdev:filter:eth_ipv4_prefix
. If set to , the MAC address of the link is used. If set
to , an RFC4361-compliant Client ID, which is the combination of IAID and
DUID, is used. IAID can be configured by IAID=. DUID can be configured by
- DUIDType= and DUIDRawData=. Defaults to
- .
+ DUIDType= and DUIDRawData=. When
+ Anonymize= is enabled, is unconditionally used and the
+ specified value will be ignored. When unspecified, the value specified in the same setting in
+ networkd.conf5
+ will be used.
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
index d94ac1a213a..30abef49a23 100644
--- a/src/network/networkd-dhcp4.c
+++ b/src/network/networkd-dhcp4.c
@@ -52,7 +52,7 @@ void network_adjust_dhcp4(Network *network) {
}
if (network->dhcp_client_identifier < 0)
- network->dhcp_client_identifier = network->dhcp_anonymize ? DHCP_CLIENT_ID_MAC : DHCP_CLIENT_ID_DUID;
+ network->dhcp_client_identifier = network->dhcp_anonymize ? DHCP_CLIENT_ID_MAC : network->manager->dhcp_client_identifier;
/* By default, RapidCommit= is enabled when Anonymize=no and neither AllowList= nor DenyList= is specified. */
if (network->dhcp_use_rapid_commit < 0)
diff --git a/src/network/networkd-gperf.gperf b/src/network/networkd-gperf.gperf
index b69ef5fd313..21e8d12690b 100644
--- a/src/network/networkd-gperf.gperf
+++ b/src/network/networkd-gperf.gperf
@@ -37,6 +37,7 @@ IPv6AcceptRA.UseDomains, config_parse_use_domains,
IPv6AddressLabel.Prefix, config_parse_ipv6_address_label_section, IPV6_ADDRESS_LABEL_BY_MANAGER | IPV6_ADDRESS_LABEL_PREFIX, 0
IPv6AddressLabel.Label, config_parse_ipv6_address_label_section, IPV6_ADDRESS_LABEL_BY_MANAGER | IPV6_ADDRESS_LABEL, 0
DHCPv4.UseDomains, config_parse_use_domains, 0, offsetof(Manager, dhcp_use_domains)
+DHCPv4.ClientIdentifier, config_parse_dhcp_client_identifier, 0, offsetof(Manager, dhcp_client_identifier)
DHCPv4.DUIDType, config_parse_duid_type, 0, offsetof(Manager, dhcp_duid)
DHCPv4.DUIDRawData, config_parse_duid_rawdata, 0, offsetof(Manager, dhcp_duid)
DHCPv6.UseDomains, config_parse_use_domains, 0, offsetof(Manager, dhcp6_use_domains)
diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
index 829937958b4..8061976d7b9 100644
--- a/src/network/networkd-manager.c
+++ b/src/network/networkd-manager.c
@@ -647,6 +647,7 @@ int manager_new(Manager **ret, bool test_mode) {
.dhcp_use_domains = _USE_DOMAINS_INVALID,
.dhcp6_use_domains = _USE_DOMAINS_INVALID,
.ndisc_use_domains = _USE_DOMAINS_INVALID,
+ .dhcp_client_identifier = DHCP_CLIENT_ID_DUID,
.dhcp_duid.type = DUID_TYPE_EN,
.dhcp6_duid.type = DUID_TYPE_EN,
.duid_product_uuid.type = DUID_TYPE_UUID,
diff --git a/src/network/networkd-manager.h b/src/network/networkd-manager.h
index faa33571516..9891b8c1fc0 100644
--- a/src/network/networkd-manager.h
+++ b/src/network/networkd-manager.h
@@ -78,6 +78,7 @@ struct Manager {
UseDomains dhcp6_use_domains;
UseDomains ndisc_use_domains;
+ DHCPClientIdentifier dhcp_client_identifier;
DUID dhcp_duid;
DUID dhcp6_duid;
DUID duid_product_uuid;
diff --git a/src/network/networkd.conf b/src/network/networkd.conf
index 857df0899f3..a5a9418bbb1 100644
--- a/src/network/networkd.conf
+++ b/src/network/networkd.conf
@@ -36,6 +36,7 @@
#UseDomains=
[DHCPv4]
+#ClientIdentifier=duid
#DUIDType=vendor
#DUIDRawData=
#UseDomains=