diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2015-03-23 14:11:43 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-06-30 16:45:27 +0200 |
commit | 008bf6ecb2706eedcd17e60c2579b8033dad529f (patch) | |
tree | 9429a3dc595eef44da19fa4837d12cf697955fd0 | |
parent | 2bff217fe60f2d32327a841f8c9a52963c1b3365 (diff) | |
download | NetworkManager-008bf6ecb2706eedcd17e60c2579b8033dad529f.tar.gz |
cli: add nmcli device set command
TODO: documentation
TODO: bash-completion
TODO: https://bugzilla.gnome.org/show_bug.cgi?id=746566#c4
-rw-r--r-- | clients/cli/devices.c | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/clients/cli/devices.c b/clients/cli/devices.c index fd2f7b6167..af18ca9628 100644 --- a/clients/cli/devices.c +++ b/clients/cli/devices.c @@ -335,6 +335,17 @@ usage_device_delete (void) } static void +usage_device_set (void) +{ + g_printerr (_("Usage: nmcli device set { ARGUMENTS | help }\n" + "\n" + "ARGUMENTS := <ifname> { SETTING, [ SETTING ... ] }\n" + "SETTING := { managed | autoconnect } { on | off }\n" + "\n" + "Modified device properties.\n\n")); +} + +static void usage_device_wifi (void) { g_printerr (_("Usage: nmcli device wifi { ARGUMENTS | help }\n" @@ -1895,6 +1906,96 @@ error: return nmc->return_value; } +static NMCResultCode +do_device_set (NmCli *nmc, int argc, char **argv) +{ + NMDevice **devices; + NMDevice *device = NULL; + const char *ifname = NULL; + int i; + gboolean flag; + + if (argc == 0) { + g_string_printf (nmc->return_text, _("Error: No interface specified.")); + nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; + goto error; + } else + ifname = *argv; + + if (!ifname) { + g_string_printf (nmc->return_text, _("Error: No interface specified.")); + nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; + goto error; + } + + devices = get_devices_sorted (nmc->client); + for (i = 0; devices[i]; i++) { + NMDevice *candidate = devices[i]; + const char *dev_iface = nm_device_get_iface (candidate); + + if (!g_strcmp0 (dev_iface, ifname)) + device = candidate; + } + g_free (devices); + + if (!device) { + g_string_printf (nmc->return_text, _("Error: Device '%s' not found."), ifname); + nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND; + goto error; + } + + if (argc == 1) { + g_string_printf (nmc->return_text, _("Error: No property specified.")); + nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; + goto error; + } + + while (next_arg (&argc, &argv) == 0) { + if (nmc_arg_is_help (*argv)) { + usage_device_set (); + goto error; + } + else if (matches (*argv, "managed") == 0) { + if (nmc_arg_is_help (*(argv+1))) { + usage_device_set (); + goto error; + } + if (next_arg (&argc, &argv) != 0) { + g_string_printf (nmc->return_text, _("Error: Agrument missing.")); + nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; + goto error; + } + if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &flag)) + goto error; + nm_device_set_managed (device, flag); + } + else if (matches (*argv, "autoconnect") == 0) { + if (nmc_arg_is_help (*(argv+1))) { + usage_device_set (); + goto error; + } + if (next_arg (&argc, &argv) != 0) { + g_string_printf (nmc->return_text, _("Error: Agrument missing.")); + nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; + goto error; + } + if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &flag)) + goto error; + nm_device_set_autoconnect (device, flag); + } + else { + usage_device_set (); + g_string_printf (nmc->return_text, _("Error: property '%s' is not known."), *argv); + nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; + goto error; + } + } + +error: + quit (); + return nmc->return_value; +} + static void show_access_point_info (NMDevice *device, NmCli *nmc) { @@ -2724,6 +2825,13 @@ do_devices (NmCli *nmc, int argc, char **argv) } nmc->return_value = do_device_delete (nmc, argc-1, argv+1); } + else if (matches (*argv, "set") == 0) { + if (nmc_arg_is_help (*(argv+1))) { + usage_device_set (); + goto usage_exit; + } + nmc->return_value = do_device_set (nmc, argc-1, argv+1); + } else if (matches (*argv, "wifi") == 0) { if (nmc_arg_is_help (*(argv+1))) { usage_device_wifi (); |