mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-04 10:40:58 +01:00
cli: add 'nmcli nm enable' command
'enable' command queries and sets NetworkingEnabled property. It should be used by users. Previous 'sleep' command that actually did enable/disable, really calls Sleep() now and is not meant for common usage.
This commit is contained in:
parent
da3d920d97
commit
979b69142c
1 changed files with 103 additions and 18 deletions
|
|
@ -34,14 +34,16 @@
|
|||
static NmcOutputField nmc_fields_nm_status[] = {
|
||||
{"RUNNING", N_("RUNNING"), 15, NULL, 0}, /* 0 */
|
||||
{"STATE", N_("STATE"), 15, NULL, 0}, /* 1 */
|
||||
{"WIFI-HARDWARE", N_("WIFI-HARDWARE"), 15, NULL, 0}, /* 2 */
|
||||
{"WIFI", N_("WIFI"), 10, NULL, 0}, /* 3 */
|
||||
{"WWAN-HARDWARE", N_("WWAN-HARDWARE"), 15, NULL, 0}, /* 4 */
|
||||
{"WWAN", N_("WWAN"), 10, NULL, 0}, /* 5 */
|
||||
{"NET-ENABLED", N_("NET-ENABLED"), 13, NULL, 0}, /* 2 */
|
||||
{"WIFI-HARDWARE", N_("WIFI-HARDWARE"), 15, NULL, 0}, /* 3 */
|
||||
{"WIFI", N_("WIFI"), 10, NULL, 0}, /* 4 */
|
||||
{"WWAN-HARDWARE", N_("WWAN-HARDWARE"), 15, NULL, 0}, /* 5 */
|
||||
{"WWAN", N_("WWAN"), 10, NULL, 0}, /* 6 */
|
||||
{NULL, NULL, 0, NULL, 0}
|
||||
};
|
||||
#define NMC_FIELDS_NM_STATUS_ALL "RUNNING,STATE,WIFI-HARDWARE,WIFI,WWAN-HARDWARE,WWAN"
|
||||
#define NMC_FIELDS_NM_STATUS_ALL "RUNNING,STATE,NET-ENABLED,WIFI-HARDWARE,WIFI,WWAN-HARDWARE,WWAN"
|
||||
#define NMC_FIELDS_NM_STATUS_COMMON "RUNNING,STATE,WIFI-HARDWARE,WIFI,WWAN-HARDWARE,WWAN"
|
||||
#define NMC_FIELDS_NM_NET_ENABLED "NET-ENABLED"
|
||||
#define NMC_FIELDS_NM_WIFI "WIFI"
|
||||
#define NMC_FIELDS_NM_WWAN "WWAN"
|
||||
|
||||
|
|
@ -60,10 +62,10 @@ usage (void)
|
|||
{
|
||||
fprintf (stderr,
|
||||
_("Usage: nmcli nm { COMMAND | help }\n\n"
|
||||
" COMMAND := { status | sleep | wakeup | wifi | wwan }\n\n"
|
||||
" COMMAND := { status | enable | sleep | wifi | wwan }\n\n"
|
||||
" status\n"
|
||||
" sleep\n"
|
||||
" wakeup\n"
|
||||
" enable [true|false]\n"
|
||||
" sleep [true|false]\n"
|
||||
" wifi [on|off]\n"
|
||||
" wwan [on|off]\n\n"));
|
||||
}
|
||||
|
|
@ -97,6 +99,7 @@ static NMCResultCode
|
|||
show_nm_status (NmCli *nmc)
|
||||
{
|
||||
gboolean nm_running;
|
||||
gboolean net_enabled;
|
||||
NMState state;
|
||||
const char *wireless_hw_enabled_str, *wireless_enabled_str;
|
||||
const char *wwan_hw_enabled_str, *wwan_enabled_str;
|
||||
|
|
@ -136,6 +139,7 @@ show_nm_status (NmCli *nmc)
|
|||
|
||||
nm_running = nm_client_get_manager_running (nmc->client);
|
||||
state = nm_client_get_state (nmc->client);
|
||||
net_enabled = nm_client_networking_get_enabled (nmc->client);
|
||||
if (nm_running) {
|
||||
wireless_hw_enabled_str = nm_client_wireless_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled");
|
||||
wireless_enabled_str = nm_client_wireless_get_enabled (nmc->client) ? _("enabled") : _("disabled");
|
||||
|
|
@ -147,10 +151,11 @@ show_nm_status (NmCli *nmc)
|
|||
|
||||
nmc->allowed_fields[0].value = nm_running ? _("running") : _("not running");
|
||||
nmc->allowed_fields[1].value = nm_state_to_string (state);
|
||||
nmc->allowed_fields[2].value = wireless_hw_enabled_str;
|
||||
nmc->allowed_fields[3].value = wireless_enabled_str;
|
||||
nmc->allowed_fields[4].value = wwan_hw_enabled_str;
|
||||
nmc->allowed_fields[5].value = wwan_enabled_str;
|
||||
nmc->allowed_fields[2].value = net_enabled ? _("enabled") : _("disabled");
|
||||
nmc->allowed_fields[3].value = wireless_hw_enabled_str;
|
||||
nmc->allowed_fields[4].value = wireless_enabled_str;
|
||||
nmc->allowed_fields[5].value = wwan_hw_enabled_str;
|
||||
nmc->allowed_fields[6].value = wwan_enabled_str;
|
||||
|
||||
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
|
||||
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
|
||||
|
|
@ -158,12 +163,49 @@ show_nm_status (NmCli *nmc)
|
|||
return NMC_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
/* libnm-glib doesn't provide API fro Sleep method - implement D-Bus call ourselves */
|
||||
static void networking_set_sleep (NmCli *nmc, gboolean in_sleep)
|
||||
{
|
||||
DBusGConnection *connection = NULL;
|
||||
DBusGProxy *proxy = NULL;
|
||||
GError *err = NULL;
|
||||
|
||||
connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err);
|
||||
if (!connection) {
|
||||
g_string_printf (nmc->return_text, _("Error: Couldn't connect to system bus: %s"), err->message);
|
||||
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
|
||||
g_error_free (err);
|
||||
goto gone;
|
||||
}
|
||||
|
||||
proxy = dbus_g_proxy_new_for_name (connection,
|
||||
"org.freedesktop.NetworkManager",
|
||||
"/org/freedesktop/NetworkManager",
|
||||
"org.freedesktop.NetworkManager");
|
||||
if (!proxy) {
|
||||
g_string_printf (nmc->return_text, _("Error: Couldn't create D-Bus object proxy."));
|
||||
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
|
||||
goto gone;
|
||||
}
|
||||
|
||||
if (!dbus_g_proxy_call (proxy, "Sleep", &err, G_TYPE_BOOLEAN, in_sleep, G_TYPE_INVALID, G_TYPE_INVALID)) {
|
||||
g_string_printf (nmc->return_text, _("Error in sleep: %s"), err->message);
|
||||
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
|
||||
g_error_free (err);
|
||||
}
|
||||
|
||||
gone:
|
||||
if (connection) dbus_g_connection_unref (connection);
|
||||
if (proxy) g_object_unref (proxy);
|
||||
}
|
||||
|
||||
/* entry point function for global network manager related commands 'nmcli nm' */
|
||||
NMCResultCode
|
||||
do_network_manager (NmCli *nmc, int argc, char **argv)
|
||||
{
|
||||
GError *error = NULL;
|
||||
gboolean sleep_flag;
|
||||
gboolean enable_net;
|
||||
gboolean enable_wifi;
|
||||
gboolean enable_wwan;
|
||||
guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
|
||||
|
|
@ -186,11 +228,54 @@ do_network_manager (NmCli *nmc, int argc, char **argv)
|
|||
goto opt_error;
|
||||
nmc->return_value = show_nm_status (nmc);
|
||||
}
|
||||
else if (matches (*argv, "sleep") == 0) {
|
||||
nm_client_sleep (nmc->client, TRUE);
|
||||
else if (matches (*argv, "enable") == 0) {
|
||||
if (next_arg (&argc, &argv) != 0) {
|
||||
/* no argument, show current state of networking */
|
||||
if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
|
||||
goto opt_error;
|
||||
if (nmc->required_fields && strcasecmp (nmc->required_fields, "NET-ENABLED")) {
|
||||
g_string_printf (nmc->return_text, _("Error: '--fields' value '%s' is not valid here; allowed fields: %s"),
|
||||
nmc->required_fields, NMC_FIELDS_NM_NET_ENABLED);
|
||||
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
|
||||
goto end;
|
||||
}
|
||||
nmc->allowed_fields = nmc_fields_nm_status;
|
||||
nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_NM_NET_ENABLED, nmc->allowed_fields, NULL);
|
||||
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
|
||||
nmc->print_fields.header_name = _("Networking enabled");
|
||||
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
|
||||
nmc->allowed_fields[2].value = nm_client_networking_get_enabled (nmc->client) ? _("enabled") : _("disabled");
|
||||
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
|
||||
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
|
||||
} else {
|
||||
if (!strcmp (*argv, "true"))
|
||||
enable_net = TRUE;
|
||||
else if (!strcmp (*argv, "false"))
|
||||
enable_net = FALSE;
|
||||
else {
|
||||
g_string_printf (nmc->return_text, _("Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."), *argv);
|
||||
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
|
||||
goto end;
|
||||
}
|
||||
nm_client_networking_set_enabled (nmc->client, enable_net);
|
||||
}
|
||||
}
|
||||
else if (matches (*argv, "wakeup") == 0) {
|
||||
nm_client_sleep (nmc->client, FALSE);
|
||||
else if (matches (*argv, "sleep") == 0) {
|
||||
if (next_arg (&argc, &argv) != 0) {
|
||||
g_string_printf (nmc->return_text, _("Error: Sleeping status is not exported by NetworkManager."));
|
||||
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
|
||||
} else {
|
||||
if (!strcmp (*argv, "true"))
|
||||
sleep_flag = TRUE;
|
||||
else if (!strcmp (*argv, "false"))
|
||||
sleep_flag = FALSE;
|
||||
else {
|
||||
g_string_printf (nmc->return_text, _("Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."), *argv);
|
||||
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
|
||||
goto end;
|
||||
}
|
||||
networking_set_sleep (nmc, sleep_flag);
|
||||
}
|
||||
}
|
||||
else if (matches (*argv, "wifi") == 0) {
|
||||
if (next_arg (&argc, &argv) != 0) {
|
||||
|
|
@ -208,7 +293,7 @@ do_network_manager (NmCli *nmc, int argc, char **argv)
|
|||
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
|
||||
nmc->print_fields.header_name = _("WiFi enabled");
|
||||
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
|
||||
nmc->allowed_fields[3].value = nm_client_wireless_get_enabled (nmc->client) ? _("enabled") : _("disabled");
|
||||
nmc->allowed_fields[4].value = nm_client_wireless_get_enabled (nmc->client) ? _("enabled") : _("disabled");
|
||||
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
|
||||
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
|
||||
} else {
|
||||
|
|
@ -240,7 +325,7 @@ do_network_manager (NmCli *nmc, int argc, char **argv)
|
|||
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER_ADD | NMC_PF_FLAG_FIELD_NAMES;
|
||||
nmc->print_fields.header_name = _("WWAN enabled");
|
||||
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
|
||||
nmc->allowed_fields[5].value = nm_client_wwan_get_enabled (nmc->client) ? _("enabled") : _("disabled");
|
||||
nmc->allowed_fields[6].value = nm_client_wwan_get_enabled (nmc->client) ? _("enabled") : _("disabled");
|
||||
nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag;
|
||||
print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue