diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index e5f9d6f470..cd86a4f4be 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -876,8 +876,8 @@
lease expires. This is contrary to the DHCP specification, but may be the best choice if,
e.g., the root filesystem relies on this connection. The setting dhcp
implies dhcp-on-stop, and yes implies
- dhcp and static. Defaults to
- dhcp-on-stop.
+ dhcp and static. Defaults to no.
+
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 4c0daa4802..a23bddde9b 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -770,8 +770,12 @@ int link_stop_clients(Link *link, bool may_keep_dhcp) {
dhcp4_release_old_lease(link);
- if (link->dhcp_client && (!may_keep_dhcp || !link->network ||
- !FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP_ON_STOP))) {
+ bool keep_dhcp = may_keep_dhcp &&
+ link->network &&
+ (link->manager->restarting ||
+ FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP_ON_STOP));
+
+ if (link->dhcp_client && !keep_dhcp) {
k = sd_dhcp_client_stop(link->dhcp_client);
if (k < 0)
r = log_link_warning_errno(link, k, "Could not stop DHCPv4 client: %m");
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
index 23a21d8c9e..a1f285b8e5 100644
--- a/src/network/networkd-network.c
+++ b/src/network/networkd-network.c
@@ -268,13 +268,11 @@ int network_verify(Network *network) {
/* CriticalConnection=yes also preserve foreign static configurations. */
network->keep_configuration = KEEP_CONFIGURATION_YES;
else
- /* For backward compatibility, we do not release DHCP addresses on manager stop. */
- network->keep_configuration = KEEP_CONFIGURATION_DHCP_ON_STOP;
+ network->keep_configuration = KEEP_CONFIGURATION_NO;
}
if (network->keep_configuration < 0)
- /* For backward compatibility, we do not release DHCP addresses on manager stop. */
- network->keep_configuration = KEEP_CONFIGURATION_DHCP_ON_STOP;
+ network->keep_configuration = KEEP_CONFIGURATION_NO;
LIST_FOREACH_SAFE(addresses, address, address_next, network->static_addresses)
if (address_section_verify(address) < 0)