From: Yu Watanabe Date: Thu, 12 Oct 2023 09:13:55 +0000 (+0900) Subject: network: restart dhcp4 client when renewing lease is requested but the client is... X-Git-Tag: v255-rc1~258^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9bd91e34aaf7c759617d4763853e55f419c06ffe;p=thirdparty%2Fsystemd.git 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. --- 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); }