diff options
Diffstat (limited to 'clients/cli/general.c')
| -rw-r--r-- | clients/cli/general.c | 58 |
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 |