From: Nick Rosbrook Date: Tue, 29 Apr 2025 19:16:45 +0000 (-0400) Subject: wait-online: attempt to re-connect after varlink disconnects X-Git-Tag: v258-rc1~709^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5e67cb3bedf65f843a397c7105deeb6b28f549e2;p=thirdparty%2Fsystemd.git wait-online: attempt to re-connect after varlink disconnects Now that systemd-resolved has socket activation for it's varlink sockets, this should should be enough to make the DNS configuration logic robust against systemd-resolved stops and restarts. --- diff --git a/src/network/wait-online/manager.c b/src/network/wait-online/manager.c index 597598abc6b..511b5299c21 100644 --- a/src/network/wait-online/manager.c +++ b/src/network/wait-online/manager.c @@ -338,6 +338,8 @@ static int manager_network_monitor_listen(Manager *m) { return 0; } +static int manager_dns_configuration_listen(Manager *m); + static int on_dns_configuration_event( sd_varlink *link, sd_json_variant *parameters, @@ -352,6 +354,12 @@ static int on_dns_configuration_event( assert(link); if (error_id) { + if (streq(error_id, SD_VARLINK_ERROR_DISCONNECTED)) { + log_debug("DNS configuration monitor disconnected, reconnecting..."); + + return manager_dns_configuration_listen(m); + } + log_warning("DNS configuration event error, ignoring: %s", error_id); return 0; } @@ -411,6 +419,8 @@ static int manager_dns_configuration_listen(Manager *m) { if (!m->requires_dns) return 0; + m->varlink_client = sd_varlink_unref(m->varlink_client); + r = sd_varlink_connect_address(&vl, "/run/systemd/resolve/io.systemd.Resolve.Monitor"); if (r < 0) return log_error_errno(r, "Failed to connect to io.systemd.Resolve.Monitor: %m");