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)