summary refs log tree commit diff
path: root/cli/src/network-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'cli/src/network-manager.c')
-rw-r--r--cli/src/network-manager.c917
1 files changed, 0 insertions, 917 deletions
diff --git a/cli/src/network-manager.c b/cli/src/network-manager.c
deleted file mode 100644
index ed074c6d..00000000
--- a/cli/src/network-manager.c
+++ /dev/null
@@ -1,917 +0,0 @@
-/* nmcli - command-line tool to control NetworkManager
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * (C) Copyright 2010 - 2014 Red Hat, Inc.
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <nm-client.h>
-#include <nm-setting-connection.h>
-
-#include "utils.h"
-#include "network-manager.h"
-
-
-/* Available fields for 'general status' */
-static NmcOutputField nmc_fields_nm_status[] = {
-	{"RUNNING",      N_("RUNNING"),      15},  /* 0 */
-	{"VERSION",      N_("VERSION"),      10},  /* 1 */
-	{"STATE",        N_("STATE"),        15},  /* 2 */
-	{"STARTUP",      N_("STARTUP"),      10},  /* 3 */
-	{"CONNECTIVITY", N_("CONNECTIVITY"), 15},  /* 4 */
-	{"NETWORKING",   N_("NETWORKING"),   13},  /* 5 */
-	{"WIFI-HW",      N_("WIFI-HW"),      15},  /* 6 */
-	{"WIFI",         N_("WIFI"),         10},  /* 7 */
-	{"WWAN-HW",      N_("WWAN-HW"),      15},  /* 8 */
-	{"WWAN",         N_("WWAN"),         10},  /* 9 */
-	{"WIMAX-HW",     N_("WIMAX-HW"),     15},  /* 10 */
-	{"WIMAX",        N_("WIMAX"),        10},  /* 11 */
-	{NULL,           NULL,                0}
-};
-#if WITH_WIMAX
-#define NMC_FIELDS_NM_STATUS_ALL     "RUNNING,VERSION,STATE,STARTUP,CONNECTIVITY,NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN,WIMAX-HW,WIMAX"
-#define NMC_FIELDS_NM_STATUS_SWITCH  "NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN,WIMAX-HW,WIMAX"
-#define NMC_FIELDS_NM_STATUS_RADIO   "WIFI-HW,WIFI,WWAN-HW,WWAN,WIMAX-HW,WIMAX"
-#else
-#define NMC_FIELDS_NM_STATUS_ALL     "RUNNING,VERSION,STATE,STARTUP,CONNECTIVITY,NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN"
-#define NMC_FIELDS_NM_STATUS_SWITCH  "NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN"
-#define NMC_FIELDS_NM_STATUS_RADIO   "WIFI-HW,WIFI,WWAN-HW,WWAN"
-#endif
-#define NMC_FIELDS_NM_STATUS_COMMON  "STATE,CONNECTIVITY,WIFI-HW,WIFI,WWAN-HW,WWAN"
-#define NMC_FIELDS_NM_NETWORKING     "NETWORKING"
-#define NMC_FIELDS_NM_WIFI           "WIFI"
-#define NMC_FIELDS_NM_WWAN           "WWAN"
-#define NMC_FIELDS_NM_WIMAX          "WIMAX"
-#define NMC_FIELDS_NM_CONNECTIVITY   "CONNECTIVITY"
-
-
-/* Available fields for 'general permissions' */
-static NmcOutputField nmc_fields_nm_permissions[] = {
-	{"PERMISSION", N_("PERMISSION"), 57},  /* 0 */
-	{"VALUE",      N_("VALUE"),      10},  /* 1 */
-	{NULL,         NULL,              0}
-};
-#define NMC_FIELDS_NM_PERMISSIONS_ALL     "PERMISSION,VALUE"
-#define NMC_FIELDS_NM_PERMISSIONS_COMMON  "PERMISSION,VALUE"
-
-/* Available fields for 'general logging' */
-static NmcOutputField nmc_fields_nm_logging[] = {
-	{"LEVEL",   N_("LEVEL"),   10},  /* 0 */
-	{"DOMAINS", N_("DOMAINS"), 70},  /* 1 */
-	{NULL,      NULL,           0}
-};
-#define NMC_FIELDS_NM_LOGGING_ALL     "LEVEL,DOMAINS"
-#define NMC_FIELDS_NM_LOGGING_COMMON  "LEVEL,DOMAINS"
-
-
-/* glib main loop variable - defined in nmcli.c */
-extern GMainLoop *loop;
-
-
-static void
-usage_general (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli general { COMMAND | help }\n\n"
-	           "COMMAND := { status | hostname | permissions | logging }\n\n"
-	           "  status\n\n"
-	           "  hostname [<hostname>]\n\n"
-	           "  permissions\n\n"
-	           "  logging [level <log level>] [domains <log domains>]\n\n"));
-}
-
-static void
-usage_general_status (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli general status { help }\n"
-	           "\n"
-	           "Show overall status of NetworkManager.\n"
-	           "'status' is the default action, which means 'nmcli gen' calls 'nmcli gen status'\n\n"));
-}
-
-static void
-usage_general_hostname (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli general hostname { ARGUMENTS | help }\n"
-	           "\n"
-	           "ARGUMENTS := [<hostname>]\n"
-	           "\n"
-	           "Get or change persistent system hostname.\n"
-	           "With no arguments, this prints currently configured hostname. When you pass\n"
-	           "a hostname, NetworkManager will set it as the new persistent system hostname.\n\n"));
-}
-
-static void
-usage_general_permissions (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli general permissions { help }\n"
-	           "\n"
-	           "Show caller permissions for authenticated operations.\n\n"));
-}
-
-static void
-usage_general_logging (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli general logging { ARGUMENTS | help }\n"
-	           "\n"
-	           "ARGUMENTS := [level <log level>] [domains <log domains>]\n"
-	           "\n"
-	           "Get or change NetworkManager logging level and domains.\n"
-	           "Without any argument current logging level and domains are shown. In order to\n"
-	           "change logging state, provide level and/or domain. Please refer to the man page\n"
-	           "for the list of possible logging domains.\n\n"));
-}
-
-static void
-usage_networking (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli networking { COMMAND | help }\n\n"
-	           "COMMAND := { [ on | off | connectivity ] }\n\n"
-	           "  on\n\n"
-	           "  off\n\n"
-	           "  connectivity [check]\n\n"));
-}
-
-static void
-usage_networking_on (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli networking on { help }\n"
-	           "\n"
-	           "Switch networking on.\n\n"));
-}
-
-static void
-usage_networking_off (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli networking off { help }\n"
-	           "\n"
-	           "Switch networking off.\n\n"));
-}
-
-static void
-usage_networking_connectivity (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
-	           "\n"
-	           "ARGUMENTS := [check]\n"
-	           "\n"
-	           "Get network connectivity state.\n"
-	           "The optional 'check' argument makes NetworkManager re-check the connectivity.\n\n"));
-
-}
-
-static void
-usage_radio (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli radio { COMMAND | help }\n\n"
-#if WITH_WIMAX
-	           "COMMAND := { all | wifi | wwan | wimax }\n\n"
-	           "  all | wifi | wwan | wimax [ on | off ]\n\n"
-#else
-	           "COMMAND := { all | wifi | wwan }\n\n"
-	           "  all | wifi | wwan [ on | off ]\n\n"
-#endif
-	         ));
-}
-
-static void
-usage_radio_all (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli radio all { ARGUMENTS | help }\n"
-	           "\n"
-	           "ARGUMENTS := [on | off]\n"
-	           "\n"
-	           "Get status of all radio switches, or turn them on/off.\n\n"));
-}
-
-static void
-usage_radio_wifi (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli radio wifi { ARGUMENTS | help }\n"
-	           "\n"
-	           "ARGUMENTS := [on | off]\n"
-	           "\n"
-	           "Get status of Wi-Fi radio switch, or turn it on/off.\n\n"));
-}
-
-static void
-usage_radio_wwan (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli radio wwan { ARGUMENTS | help }\n"
-	           "\n"
-	           "ARGUMENTS := [on | off]\n"
-	           "\n"
-	           "Get status of mobile broadband radio switch, or turn it on/off.\n\n"));
-}
-
-#if WITH_WIMAX
-static void
-usage_radio_wimax (void)
-{
-	fprintf (stderr,
-	         _("Usage: nmcli radio wimax { ARGUMENTS | help }\n"
-	           "\n"
-	           "ARGUMENTS := [on | off]\n"
-	           "\n"
-	           "Get status of WiMAX radio switch, or turn it on/off.\n\n"));
-}
-#endif
-
-/* quit main loop */
-static void
-quit (void)
-{
-	g_main_loop_quit (loop);  /* quit main loop */
-}
-
-static const char *
-nm_state_to_string (NMState state)
-{
-	switch (state) {
-	case NM_STATE_ASLEEP:
-		return _("asleep");
-	case NM_STATE_CONNECTING:
-		return _("connecting");
-	case NM_STATE_CONNECTED_LOCAL:
-		return _("connected (local only)");
-	case NM_STATE_CONNECTED_SITE:
-		return _("connected (site only)");
-	case NM_STATE_CONNECTED_GLOBAL:
-		return _("connected");
-	case NM_STATE_DISCONNECTING:
-		return _("disconnecting");
-	case NM_STATE_DISCONNECTED:
-		return _("disconnected");
-	case NM_STATE_UNKNOWN:
-	default:
-		return _("unknown");
-	}
-}
-
-static const char *
-nm_connectivity_to_string (NMConnectivityState connectivity)
-{
-	switch (connectivity) {
-	case NM_CONNECTIVITY_NONE:
-		return _("none");
-	case NM_CONNECTIVITY_PORTAL:
-		return _("portal");
-	case NM_CONNECTIVITY_LIMITED:
-		return _("limited");
-	case NM_CONNECTIVITY_FULL:
-		return _("full");
-	case NM_CONNECTIVITY_UNKNOWN:
-	default:
-		return _("unknown");
-	}
-}
-
-static gboolean
-show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_flds)
-{
-	gboolean nm_running, startup = FALSE;
-	NMState state = NM_STATE_UNKNOWN;
-	NMConnectivityState connectivity = NM_CONNECTIVITY_UNKNOWN;
-	const char *net_enabled_str;
-	const char *wireless_hw_enabled_str, *wireless_enabled_str;
-	const char *wwan_hw_enabled_str, *wwan_enabled_str;
-#if WITH_WIMAX
-	const char *wimax_hw_enabled_str, *wimax_enabled_str;
-#endif
-	GError *error = NULL;
-	const char *fields_str;
-	const char *fields_all =    print_flds ? print_flds : NMC_FIELDS_NM_STATUS_ALL;
-	const char *fields_common = print_flds ? print_flds : NMC_FIELDS_NM_STATUS_COMMON;
-	NmcOutputField *tmpl, *arr;
-	size_t tmpl_len;
-
-	if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
-		fields_str = fields_common;
-	else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
-		fields_str = fields_all;
-	else
-		fields_str = nmc->required_fields;
-
-	tmpl = nmc_fields_nm_status;
-	tmpl_len = sizeof (nmc_fields_nm_status);
-	nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
-
-	if (error) {
-		g_string_printf (nmc->return_text, _("Error: only these fields are allowed: %s"), fields_all);
-		g_error_free (error);
-		nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-		return FALSE;
-	}
-
-	nmc->get_client (nmc); /* create NMClient */
-
-	nm_running = nm_client_get_manager_running (nmc->client);
-	if (nm_running) {
-		if (!nmc_versions_match (nmc))
-			return FALSE;
-
-		state = nm_client_get_state (nmc->client);
-		startup = nm_client_get_startup (nmc->client);
-		connectivity = nm_client_get_connectivity (nmc->client);
-		net_enabled_str = nm_client_networking_get_enabled (nmc->client) ? _("enabled") : _("disabled");
-		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");
-		wwan_hw_enabled_str = nm_client_wwan_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled");
-		wwan_enabled_str = nm_client_wwan_get_enabled (nmc->client) ? _("enabled") : _("disabled");
-#if WITH_WIMAX
-		wimax_hw_enabled_str = nm_client_wimax_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled");
-		wimax_enabled_str = nm_client_wimax_get_enabled (nmc->client) ? _("enabled") : _("disabled");
-#endif
-	} else {
-#if WITH_WIMAX
-		net_enabled_str = wireless_hw_enabled_str = wireless_enabled_str =
-		wwan_hw_enabled_str = wwan_enabled_str = wimax_hw_enabled_str = wimax_enabled_str = _("unknown");
-#else
-		net_enabled_str = wireless_hw_enabled_str = wireless_enabled_str =
-		wwan_hw_enabled_str = wwan_enabled_str = _("unknown");
-#endif
-	}
-
-	nmc->print_fields.header_name = pretty_header_name ? (char *) pretty_header_name : _("NetworkManager status");
-	arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
-	g_ptr_array_add (nmc->output_data, arr);
-
-	arr = nmc_dup_fields_array (tmpl, tmpl_len, 0);
-	set_val_strc (arr, 0, nm_running ? _("running") : _("not running"));
-	set_val_strc (arr, 1, nm_running ? nm_client_get_version (nmc->client) : _("unknown"));
-	set_val_strc (arr, 2, nm_state_to_string (state));
-	set_val_strc (arr, 3, nm_running ? (startup ? _("starting") : _("started")) : _("unknown"));
-	set_val_strc (arr, 4, nm_connectivity_to_string (connectivity));
-	set_val_strc (arr, 5, net_enabled_str);
-	set_val_strc (arr, 6, wireless_hw_enabled_str);
-	set_val_strc (arr, 7, wireless_enabled_str);
-	set_val_strc (arr, 8, wwan_hw_enabled_str);
-	set_val_strc (arr, 9, wwan_enabled_str);
-#if WITH_WIMAX
-	set_val_strc (arr, 10, wimax_hw_enabled_str);
-	set_val_strc (arr, 11, wimax_enabled_str);
-#endif
-	g_ptr_array_add (nmc->output_data, arr);
-
-	print_data (nmc);  /* Print all data */
-
-	return TRUE;
-}
-
-#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK     "org.freedesktop.NetworkManager.enable-disable-network"
-#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI        "org.freedesktop.NetworkManager.enable-disable-wifi"
-#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN        "org.freedesktop.NetworkManager.enable-disable-wwan"
-#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX       "org.freedesktop.NetworkManager.enable-disable-wimax"
-#define NM_AUTH_PERMISSION_SLEEP_WAKE                 "org.freedesktop.NetworkManager.sleep-wake"
-#define NM_AUTH_PERMISSION_NETWORK_CONTROL            "org.freedesktop.NetworkManager.network-control"
-#define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED       "org.freedesktop.NetworkManager.wifi.share.protected"
-#define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN            "org.freedesktop.NetworkManager.wifi.share.open"
-#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM     "org.freedesktop.NetworkManager.settings.modify.system"
-#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN        "org.freedesktop.NetworkManager.settings.modify.own"
-#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME   "org.freedesktop.NetworkManager.settings.modify.hostname"
-
-static const char *
-permission_to_string (NMClientPermission perm)
-{
-	switch (perm) {
-	case NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK:
-		return NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK;
-	case NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI:
-		return NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI;
-	case NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN:
-		return NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN;
-	case NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX:
-		return NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX;
-	case NM_CLIENT_PERMISSION_SLEEP_WAKE:
-		return NM_AUTH_PERMISSION_SLEEP_WAKE;
-	case NM_CLIENT_PERMISSION_NETWORK_CONTROL:
-		return NM_AUTH_PERMISSION_NETWORK_CONTROL;
-	case NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED:
-		return NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED;
-	case NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN:
-		return NM_AUTH_PERMISSION_WIFI_SHARE_OPEN;
-	case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM:
-		return NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM;
-	case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN:
-		return NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN;
-	case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME:
-		return NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME;
-	default:
-		return _("unknown");
-	}
-}
-
-static const char *
-permission_result_to_string (NMClientPermissionResult perm_result)
-{
-	
-	switch (perm_result) {
-	case NM_CLIENT_PERMISSION_RESULT_YES:
-		return _("yes");
-	case NM_CLIENT_PERMISSION_RESULT_NO:
-		return _("no");
-	case NM_CLIENT_PERMISSION_RESULT_AUTH:
-		return _("auth");
-	default:
-		return _("unknown");
-	}
-}
-
-static gboolean
-show_nm_permissions (NmCli *nmc)
-{
-	NMClientPermission perm;
-	GError *error = NULL;
-	const char *fields_str;
-	const char *fields_all =    NMC_FIELDS_NM_PERMISSIONS_ALL;
-	const char *fields_common = NMC_FIELDS_NM_PERMISSIONS_COMMON;
-	NmcOutputField *tmpl, *arr;
-	size_t tmpl_len;
-
-	if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
-		fields_str = fields_common;
-	else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
-		fields_str = fields_all;
-	else
-		fields_str = nmc->required_fields;
-
-	tmpl = nmc_fields_nm_permissions;
-	tmpl_len = sizeof (nmc_fields_nm_permissions);
-	nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
-
-	if (error) {
-		g_string_printf (nmc->return_text, _("Error: 'general permissions': %s"), error->message);
-		g_error_free (error);
-		nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-		return FALSE;
-	}
-
-	nmc->get_client (nmc); /* create NMClient */
-
-	if (!nm_client_get_manager_running (nmc->client)) {
-		g_string_printf (nmc->return_text, _("Error: NetworkManager is not running."));
-		nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
-		return FALSE;
-	}
-
-	nmc->print_fields.header_name = _("NetworkManager permissions");
-	arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
-	g_ptr_array_add (nmc->output_data, arr);
-
-	for (perm = NM_CLIENT_PERMISSION_NONE + 1; perm <= NM_CLIENT_PERMISSION_LAST; perm++) {
-		NMClientPermissionResult perm_result = nm_client_get_permission_result (nmc->client, perm);
-
-		arr = nmc_dup_fields_array (tmpl, tmpl_len, 0);
-		set_val_strc (arr, 0, permission_to_string (perm));
-		set_val_strc (arr, 1, permission_result_to_string (perm_result));
-		g_ptr_array_add (nmc->output_data, arr);
-	}
-	print_data (nmc);  /* Print all data */
-
-	return TRUE;
-}
-
-static gboolean
-show_general_logging (NmCli *nmc)
-{
-	char *level = NULL;
-	char *domains = NULL;
-	GError *error = NULL;
-	const char *fields_str;
-	const char *fields_all =    NMC_FIELDS_NM_LOGGING_ALL;
-	const char *fields_common = NMC_FIELDS_NM_LOGGING_COMMON;
-	NmcOutputField *tmpl, *arr;
-	size_t tmpl_len;
-
-	if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
-		fields_str = fields_common;
-	else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
-		fields_str = fields_all;
-	else
-		fields_str = nmc->required_fields;
-
-	tmpl = nmc_fields_nm_logging;
-	tmpl_len = sizeof (nmc_fields_nm_logging);
-	nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
-
-	if (error) {
-		g_string_printf (nmc->return_text, _("Error: 'general logging': %s"), error->message);
-		g_error_free (error);
-		nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-		return FALSE;
-	}
-
-	nmc->get_client (nmc); /* create NMClient */
-	nm_client_get_logging (nmc->client, &level, &domains, &error);
-	if (error) {
-		g_string_printf (nmc->return_text, _("Error: %s."), error->message);
-		nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-		g_error_free (error);
-		return FALSE;
-	}
-
-	nmc->print_fields.header_name = _("NetworkManager logging");
-	arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
-	g_ptr_array_add (nmc->output_data, arr);
-
-	arr = nmc_dup_fields_array (tmpl, tmpl_len, 0);
-	set_val_str (arr, 0, level);
-	set_val_str (arr, 1, domains);
-	g_ptr_array_add (nmc->output_data, arr);
-
-	print_data (nmc);  /* Print all data */
-
-	return TRUE;
-}
-
-static void
-save_hostname_cb (NMRemoteSettings *settings, GError *error, gpointer user_data)
-{
-	NmCli *nmc = (NmCli *) user_data;
-
-	if (error) {
-		g_string_printf (nmc->return_text, _("Error: failed to set hostname: (%d) %s"),
-		                 error->code, error->message);
-		nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
-	}
-	quit ();
-}
-
-/*
- * Entry point function for general operations 'nmcli general'
- */
-NMCResultCode
-do_general (NmCli *nmc, int argc, char **argv)
-{
-	GError *error = NULL;
-
-	if (argc == 0) {
-		if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
-			g_string_printf (nmc->return_text, _("Error: %s."), error->message);
-			nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-			goto finish;
-		}
-		show_nm_status (nmc, NULL, NULL);
-	}
-
-	if (argc > 0) {
-		if (nmc_arg_is_help (*argv)) {
-			usage_general ();
-		}
-		else if (matches (*argv, "status") == 0) {
-			if (nmc_arg_is_help (*(argv+1))) {
-				usage_general_status ();
-				goto finish;
-			}
-			if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
-				g_string_printf (nmc->return_text, _("Error: %s."), error->message);
-				nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-				goto finish;
-			}
-			show_nm_status (nmc, NULL, NULL);
-		}
-		else if (matches (*argv, "hostname") == 0) {
-			NMRemoteSettings *rem_settings;
-
-			if (nmc_arg_is_help (*(argv+1))) {
-				usage_general_hostname ();
-				goto finish;
-			}
-
-			/* get system settings */
-			if (!(rem_settings = nm_remote_settings_new (NULL))) {
-				g_string_printf (nmc->return_text, _("Error: Could not get system settings."));
-				nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
-				goto finish;
-			}
-
-			if (next_arg (&argc, &argv) != 0) {
-				/* no arguments -> get hostname */
-				char *hostname = NULL;
-
-				g_object_get (rem_settings, NM_REMOTE_SETTINGS_HOSTNAME, &hostname, NULL);
-				if (hostname)
-					printf ("%s\n", hostname);
-				g_free (hostname);
-			} else {
-				/* hostname provided -> set it */
-				const char *hostname = *argv;
-
-				if (next_arg (&argc, &argv) == 0)
-					printf ("Warning: ignoring extra garbage after '%s' hostname\n", hostname);
-
-				nmc->should_wait = TRUE;
-				nm_remote_settings_save_hostname (rem_settings, hostname, save_hostname_cb, nmc);
-			}
-		}
-		else if (matches (*argv, "permissions") == 0) {
-			if (nmc_arg_is_help (*(argv+1))) {
-				usage_general_permissions ();
-				goto finish;
-			}
-			if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
-				g_string_printf (nmc->return_text, _("Error: %s."), error->message);
-				nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-				goto finish;
-			}
-			show_nm_permissions (nmc);
-		}
-		else if (matches (*argv, "logging") == 0) {
-			if (nmc_arg_is_help (*(argv+1))) {
-				usage_general_logging ();
-				goto finish;
-			}
-			if (next_arg (&argc, &argv) != 0) {
-				/* no arguments -> get logging level and domains */
-				if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
-					g_string_printf (nmc->return_text, _("Error: %s."), error->message);
-					nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-					goto finish;
-				}
-				show_general_logging (nmc);
-			} else {
-				/* arguments provided -> set logging level and domains */
-				const char *level = NULL;
-				const char *domains = NULL;
-				nmc_arg_t exp_args[] = { {"level",   TRUE, &level,   TRUE},
-				                         {"domains", TRUE, &domains, TRUE},
-				                         {NULL} };
-
-				if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, &error)) {
-					g_string_assign (nmc->return_text, error->message);
-					nmc->return_value = error->code;
-					goto finish;
-				}
-
-				nmc->get_client (nmc); /* create NMClient */
-				nm_client_set_logging (nmc->client, level, domains, &error);
-				if (error) {
-					if (g_error_matches (error, DBUS_GERROR, DBUS_GERROR_ACCESS_DENIED))
-						g_string_printf (nmc->return_text, _("Error: access denied to set logging; %s"), error->message);
-					else
-						g_string_printf (nmc->return_text, _("Error: %s"), error->message);
-					nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-					goto finish;
-				}
-			}
-		}
-		else {
-			usage_general ();
-			g_string_printf (nmc->return_text, _("Error: 'general' command '%s' is not valid."), *argv);
-			nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-		}
-	}
-
-finish:
-	if (error)
-		g_error_free (error);
-	return nmc->return_value;
-}
-
-static gboolean
-nmc_switch_show (NmCli *nmc, const char *switch_name, const char *header)
-{
-	g_return_val_if_fail (nmc != NULL, FALSE);
-	g_return_val_if_fail (switch_name != NULL, FALSE);
-
-	if (nmc->required_fields && strcasecmp (nmc->required_fields, switch_name) != 0) {
-		g_string_printf (nmc->return_text, _("Error: '--fields' value '%s' is not valid here (allowed field: %s)"),
-		                 nmc->required_fields, switch_name);
-		nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-		return FALSE;
-	}
-	if (nmc->print_output == NMC_PRINT_NORMAL)
-		nmc->print_output = NMC_PRINT_TERSE;
-
-	if (!nmc->required_fields)
-		nmc->required_fields = g_strdup (switch_name);
-	return show_nm_status (nmc, header, NULL);
-}
-
-static gboolean
-nmc_switch_parse_on_off (NmCli *nmc, const char *arg1, const char *arg2, gboolean *res)
-{
-	g_return_val_if_fail (nmc != NULL, FALSE);
-	g_return_val_if_fail (arg1 && arg2, FALSE);
-	g_return_val_if_fail (res != NULL, FALSE);
-
-	if (!strcmp (arg2, "on"))
-		*res = TRUE;
-	else if (!strcmp (arg2, "off"))
-		*res = FALSE;
-	else {
-		g_string_printf (nmc->return_text, _("Error: invalid '%s' argument: '%s' (use on/off)."), arg1, arg2);
-		nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-static gboolean
-show_networking_connectivity (NmCli *nmc)
-{
-	return nmc_switch_show (nmc, NMC_FIELDS_NM_CONNECTIVITY, _("Connectivity"));
-}
-
-/*
- * Entry point function for 'nmcli networking'
- */
-NMCResultCode
-do_networking (NmCli *nmc, int argc, char **argv)
-{
-	gboolean enable_flag;
-
-	if (argc == 0)
-		nmc_switch_show (nmc, NMC_FIELDS_NM_NETWORKING, _("Networking"));
-	else if (argc > 0) {
-		if (nmc_arg_is_help (*argv)) {
-			usage_networking ();
-		} else if (matches (*argv, "connectivity") == 0) {
-			if (nmc_arg_is_help (*(argv+1))) {
-				usage_networking_connectivity ();
-				goto finish;
-			}
-			if (next_arg (&argc, &argv) != 0) {
-				/* no arguments -> get current state */
-				show_networking_connectivity (nmc);
-			} else if (matches (*argv, "check") == 0) {
-				GError *error = NULL;
-
-				nmc->get_client (nmc); /* create NMClient */
-				nm_client_check_connectivity (nmc->client, NULL, &error);
-				if (error) {
-					g_string_printf (nmc->return_text, _("Error: %s."), error->message);
-					nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
-					g_clear_error (&error);
-				} else
-					show_networking_connectivity (nmc);
-			} else {
-				usage_networking ();
-				g_string_printf (nmc->return_text, _("Error: 'networking connectivity' command '%s' is not valid."), *argv);
-				nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-			}
-		} else if (nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag)) {
-			if (nmc_arg_is_help (*(argv+1))) {
-				if (enable_flag)
-					usage_networking_on ();
-				else
-					usage_networking_off ();
-				goto finish;
-			}
-
-			nmc->get_client (nmc); /* create NMClient */
-			nm_client_networking_set_enabled (nmc->client, enable_flag);
-		} else {
-			usage_networking ();
-			g_string_printf (nmc->return_text, _("Error: 'networking' command '%s' is not valid."), *argv);
-			nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-		}
-	}
-
-finish:
-	quit ();
-	return nmc->return_value;
-}
-
-/*
- * Entry point function for radio switch commands 'nmcli radio'
- */
-NMCResultCode
-do_radio (NmCli *nmc, int argc, char **argv)
-{
-	GError *error = NULL;
-	gboolean enable_flag;
-
-	if (argc == 0) {
-		if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
-			g_string_printf (nmc->return_text, _("Error: %s."), error->message);
-			nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-			g_error_free (error);
-			goto finish;
-		}
-		show_nm_status (nmc, _("Radio switches"), NMC_FIELDS_NM_STATUS_RADIO);
-	}
-
-	if (argc > 0) {
-		if (nmc_arg_is_help (*argv)) {
-			usage_radio ();
-		}
-		else if (matches (*argv, "all") == 0) {
-			if (nmc_arg_is_help (*(argv+1))) {
-				usage_radio_all ();
-				goto finish;
-			}
-			if (next_arg (&argc, &argv) != 0) {
-				/* no argument, show all radio switches */
-				if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
-					g_string_printf (nmc->return_text, _("Error: %s."), error->message);
-					nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-					g_error_free (error);
-					goto finish;
-				}
-				show_nm_status (nmc, _("Radio switches"), NMC_FIELDS_NM_STATUS_RADIO);
-			} else {
-				if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
-					goto finish;
-
-				nmc->get_client (nmc); /* create NMClient */
-				nm_client_wireless_set_enabled (nmc->client, enable_flag);
-				nm_client_wimax_set_enabled (nmc->client, enable_flag);
-				nm_client_wwan_set_enabled (nmc->client, enable_flag);
-			}
-		}
-		else if (matches (*argv, "wifi") == 0) {
-			if (nmc_arg_is_help (*(argv+1))) {
-				usage_radio_wifi ();
-				goto finish;
-			}
-			if (next_arg (&argc, &argv) != 0) {
-				/* no argument, show current WiFi state */
-				nmc_switch_show (nmc, NMC_FIELDS_NM_WIFI, _("Wi-Fi radio switch"));
-			} else {
-				if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
-					goto finish;
-				
-				nmc->get_client (nmc); /* create NMClient */
-				nm_client_wireless_set_enabled (nmc->client, enable_flag);
-			}
-		}
-		else if (matches (*argv, "wwan") == 0) {
-			if (nmc_arg_is_help (*(argv+1))) {
-				usage_radio_wwan ();
-				goto finish;
-			}
-			if (next_arg (&argc, &argv) != 0) {
-				/* no argument, show current WWAN (mobile broadband) state */
-				nmc_switch_show (nmc, NMC_FIELDS_NM_WWAN, _("WWAN radio switch"));
-			} else {
-				if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
-					goto finish;
-
-				nmc->get_client (nmc); /* create NMClient */
-				nm_client_wwan_set_enabled (nmc->client, enable_flag);
-			}
-		}
-#if WITH_WIMAX
-		else if (matches (*argv, "wimax") == 0) {
-			if (nmc_arg_is_help (*(argv+1))) {
-				usage_radio_wimax ();
-				goto finish;
-			}
-			if (next_arg (&argc, &argv) != 0) {
-				/* no argument, show current WiMAX state */
-				nmc_switch_show (nmc, NMC_FIELDS_NM_WIMAX, _("WiMAX radio switch"));
-			} else {
-				if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
-					goto finish;
-
-				nmc->get_client (nmc); /* create NMClient */
-				nm_client_wimax_set_enabled (nmc->client, enable_flag);
-			}
-		}
-#endif
-		else {
-			usage_radio ();
-			g_string_printf (nmc->return_text, _("Error: 'radio' command '%s' is not valid."), *argv);
-			nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-		}
-	}
-
-finish:
-	quit ();
-	return nmc->return_value;
-}
-