summary refs log tree commit diff
path: root/clients/cli/general.c
diff options
context:
space:
mode:
Diffstat (limited to 'clients/cli/general.c')
-rw-r--r--clients/cli/general.c58
1 files changed, 37 insertions, 21 deletions
diff --git a/clients/cli/general.c b/clients/cli/general.c
index 1dae57e1..b1182709 100644
--- a/clients/cli/general.c
+++ b/clients/cli/general.c
@@ -10,6 +10,7 @@
 #include "nm-libnm-core-intern/nm-common-macros.h"
 
 #include "nm-client-utils.h"
+#include "nm-glib-aux/nm-dbus-aux.h"
 
 #include "polkit-agent.h"
 #include "utils.h"
@@ -344,7 +345,8 @@ usage_general_reload(void)
                  "                can be reloaded through 'nmcli connection reload' instead.\n"
                  "\n"
                  "  'dns-rc'      Update DNS configuration, which usually involves writing\n"
-                 "                /etc/resolv.conf anew.\n"
+                 "                /etc/resolv.conf anew. This is equivalent to sending the\n"
+                 "                SIGUSR1 signal to the NetworkManager process.\n"
                  "\n"
                  "  'dns-full'    Restart the DNS plugin. This is for example useful when\n"
                  "                using dnsmasq plugin, which uses additional configuration\n"
@@ -599,14 +601,30 @@ show_nm_permissions(NmCli *nmc)
 }
 
 static void
+reload_cb(GObject *source, GAsyncResult *result, gpointer user_data)
+{
+    NmCli *       nmc              = user_data;
+    gs_free_error GError *error    = NULL;
+    gs_unref_variant GVariant *ret = NULL;
+
+    ret = nm_dbus_call_finish(result, &error);
+    if (error) {
+        g_string_printf(nmc->return_text,
+                        _("Error: failed to reload: %s"),
+                        nmc_error_get_simple_message(error));
+        nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+    }
+
+    quit();
+}
+
+static void
 do_general_reload(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv)
 {
-    gs_unref_variant GVariant *result = NULL;
-    gs_free_error GError *error       = NULL;
-    gs_free const char ** values      = NULL;
-    gs_free char *        err_token   = NULL;
-    gs_free char *        joined      = NULL;
-    int                   flags       = 0;
+    gs_free const char **values    = NULL;
+    gs_free char *       err_token = NULL;
+    gs_free char *       joined    = NULL;
+    int                  flags     = 0;
 
     next_arg(nmc, &argc, &argv, NULL);
 
@@ -649,20 +667,18 @@ do_general_reload(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const
         return;
     }
 
-    result = nmc_dbus_call_sync(nmc,
-                                "/org/freedesktop/NetworkManager",
-                                "org.freedesktop.NetworkManager",
-                                "Reload",
-                                g_variant_new("(u)", flags),
-                                G_VARIANT_TYPE("()"),
-                                &error);
-
-    if (error) {
-        g_string_printf(nmc->return_text,
-                        _("Error: failed to reload: %s"),
-                        nmc_error_get_simple_message(error));
-        nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
-    }
+    nmc->should_wait++;
+    nm_dbus_call(G_BUS_TYPE_SYSTEM,
+                 NM_DBUS_SERVICE,
+                 NM_DBUS_PATH,
+                 NM_DBUS_INTERFACE,
+                 "Reload",
+                 g_variant_new("(u)", flags),
+                 G_VARIANT_TYPE("()"),
+                 NULL,
+                 (nmc->timeout == -1 ? 90 : nmc->timeout) * 1000,
+                 reload_cb,
+                 nmc);
 }
 
 static void