From 9bd91e34aaf7c759617d4763853e55f419c06ffe Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 12 Oct 2023 18:13:55 +0900 Subject: [PATCH] network: restart dhcp4 client when renewing lease is requested but the client is stopped Follow-up for fc35a9f8d1632c4e7a279228f869bfc77d8f5b9c. Fixes the issue https://github.com/systemd/systemd/pull/29472#issuecomment-1759092138. --- src/network/networkd-link-bus.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c index 06749307832..a42eb8dd63d 100644 --- a/src/network/networkd-link-bus.c +++ b/src/network/networkd-link-bus.c @@ -626,11 +626,15 @@ int bus_link_method_renew(sd_bus_message *message, void *userdata, sd_bus_error if (r == 0) return 1; /* Polkit will call us back */ - if (l->dhcp_client) { + if (sd_dhcp_client_is_running(l->dhcp_client)) r = sd_dhcp_client_send_renew(l->dhcp_client); - if (r < 0) - return r; - } + else + /* The DHCPv4 client may have been stopped by the IPv6 only mode. Let's unconditionally + * restart the client here. Note, if the DHCPv4 client is disabled, then dhcp4_start() does + * nothing and returns 0. */ + r = dhcp4_start(l); + if (r < 0) + return r; return sd_bus_reply_method_return(message, NULL); }