]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
wait-online: attempt to re-connect after varlink disconnects
authorNick Rosbrook <enr0n@ubuntu.com>
Tue, 29 Apr 2025 19:16:45 +0000 (15:16 -0400)
committerNick Rosbrook <enr0n@ubuntu.com>
Wed, 30 Apr 2025 15:12:15 +0000 (11:12 -0400)
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.

src/network/wait-online/manager.c

index 597598abc6b11c56434410ffb43d7e31eb6650a4..511b5299c21a156066d242faab909a17eca7e7e0 100644 (file)
@@ -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");