summary refs log tree commit diff
path: root/test/nm-tool.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/nm-tool.c')
-rw-r--r--test/nm-tool.c258
1 files changed, 77 insertions, 181 deletions
diff --git a/test/nm-tool.c b/test/nm-tool.c
index a4b80df0..b1178eaf 100644
--- a/test/nm-tool.c
+++ b/test/nm-tool.c
@@ -1,4 +1,3 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 /* nm-tool - information tool for NetworkManager
  *
  * Dan Williams <dcbw@redhat.com>
@@ -17,11 +16,10 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2005 - 2011 Red Hat, Inc.
+ * (C) Copyright 2005 - 2010 Red Hat, Inc.
  * (C) Copyright 2007 Novell, Inc.
  */
 
-#include <config.h>
 #include <glib.h>
 #include <dbus/dbus.h>
 #include <dbus/dbus-glib.h>
@@ -37,11 +35,9 @@
 #include <nm-device.h>
 #include <nm-device-ethernet.h>
 #include <nm-device-wifi.h>
-#include <nm-device-modem.h>
+#include <nm-gsm-device.h>
+#include <nm-cdma-device.h>
 #include <nm-device-bt.h>
-#if WITH_WIMAX
-#include <nm-device-wimax.h>
-#endif
 #include <nm-utils.h>
 #include <nm-setting-ip4-config.h>
 #include <nm-setting-ip6-config.h>
@@ -55,7 +51,8 @@
 #define DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT   (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, DBUS_TYPE_G_MAP_OF_VARIANT))
 #define DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH    (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH))
 
-static GHashTable *connections = NULL;
+static GHashTable *user_connections = NULL;
+static GHashTable *system_connections = NULL;
 
 static gboolean
 get_nm_state (NMClient *client)
@@ -70,21 +67,19 @@ get_nm_state (NMClient *client)
 	case NM_STATE_ASLEEP:
 		state_string = "asleep";
 		break;
+
 	case NM_STATE_CONNECTING:
 		state_string = "connecting";
 		break;
-	case NM_STATE_CONNECTED_LOCAL:
-		state_string = "connected (local only)";
-		break;
-	case NM_STATE_CONNECTED_SITE:
-		state_string = "connected (site only)";
-		break;
-	case NM_STATE_CONNECTED_GLOBAL:
-		state_string = "connected (global)";
+
+	case NM_STATE_CONNECTED:
+		state_string = "connected";
 		break;
+
 	case NM_STATE_DISCONNECTED:
 		state_string = "disconnected";
 		break;
+
 	case NM_STATE_UNKNOWN:
 	default:
 		state_string = "unknown";
@@ -198,48 +193,6 @@ detail_access_point (gpointer data, gpointer user_data)
 	g_free (tmp);
 }
 
-#if WITH_WIMAX
-static const char *
-wimax_network_type_to_str (NMWimaxNspNetworkType type)
-{
-	switch (type) {
-	case NM_WIMAX_NSP_NETWORK_TYPE_HOME:
-		return "Home";
-	case NM_WIMAX_NSP_NETWORK_TYPE_PARTNER:
-		return "Partner";
-	case NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER:
-		return "Roaming";
-	default:
-		return "Unknown";
-	}
-}
-
-static void
-detail_nsp (gpointer data, gpointer user_data)
-{
-	NMWimaxNsp *nsp = NM_WIMAX_NSP (data);
-	const char *active_name = (const char *) user_data;
-	const char *name;
-	char *label;
-	char *data_str;
-	gboolean active = FALSE;
-
-	name = nm_wimax_nsp_get_name (nsp);
-
-	if (active_name)
-		active = g_strcmp0 (active_name, name) == 0;
-
-	label = g_strdup_printf ("  %s%s", active ? "*" : "", name);
-	data_str = g_strdup_printf ("%d%% (%s)",
-				    nm_wimax_nsp_get_signal_quality (nsp),
-				    wimax_network_type_to_str (nm_wimax_nsp_get_network_type (nsp)));
-
-	print_string (label, data_str);
-	g_free (label);
-	g_free (data_str);
-}
-#endif
-
 static gchar *
 ip4_address_as_string (guint32 ip)
 {
@@ -252,8 +205,8 @@ ip4_address_as_string (guint32 ip)
 	if (inet_ntop (AF_INET, &tmp_addr, buf, INET_ADDRSTRLEN)) {
 		return g_strdup (buf);
 	} else {
-		g_warning ("%s: error converting IP4 address 0x%X",
-		           __func__, ntohl (tmp_addr.s_addr));
+		nm_warning ("%s: error converting IP4 address 0x%X",
+		            __func__, ntohl (tmp_addr.s_addr));
 		return NULL;
 	}
 }
@@ -273,8 +226,8 @@ ip6_address_as_string (const struct in6_addr *ip)
 		g_string_append_printf (ip6_str, "%02X", ip->s6_addr[0]);
 		for (j = 1; j < 16; j++)
 			g_string_append_printf (ip6_str, " %02X", ip->s6_addr[j]);
-		g_warning ("%s: error converting IP6 address %s",
-		           __func__, ip6_str->str);
+		nm_warning ("%s: error converting IP6 address %s",
+		            __func__, ip6_str->str);
 		g_string_free (ip6_str, TRUE);
 		return NULL;
 	}
@@ -297,14 +250,8 @@ get_dev_state_string (NMDeviceState state)
 		return "connecting (need authentication)";
 	else if (state == NM_DEVICE_STATE_IP_CONFIG)
 		return "connecting (getting IP configuration)";
-	else if (state == NM_DEVICE_STATE_IP_CHECK)
-		return "connecting (checking IP connectivity)";
-	else if (state == NM_DEVICE_STATE_SECONDARIES)
-		return "connecting (starting dependent connections)";
 	else if (state == NM_DEVICE_STATE_ACTIVATED)
 		return "connected";
-	else if (state == NM_DEVICE_STATE_DEACTIVATING)
-		return "disconnecting";
 	else if (state == NM_DEVICE_STATE_FAILED)
 		return "connection failed";
 	return "unknown";
@@ -313,6 +260,7 @@ get_dev_state_string (NMDeviceState state)
 static NMConnection *
 get_connection_for_active (NMActiveConnection *active)
 {
+	NMConnectionScope scope;
 	const char *path;
 
 	g_return_val_if_fail (active != NULL, NULL);
@@ -320,7 +268,14 @@ get_connection_for_active (NMActiveConnection *active)
 	path = nm_active_connection_get_connection (active);
 	g_return_val_if_fail (path != NULL, NULL);
 
-	return (NMConnection *) g_hash_table_lookup (connections, path);
+	scope = nm_active_connection_get_scope (active);
+	if (scope == NM_CONNECTION_SCOPE_USER)
+		return (NMConnection *) g_hash_table_lookup (user_connections, path);
+	else if (scope == NM_CONNECTION_SCOPE_SYSTEM)
+		return (NMConnection *) g_hash_table_lookup (system_connections, path);
+
+	g_warning ("error: unknown connection scope");
+	return NULL;
 }
 
 struct cb_info {
@@ -377,22 +332,12 @@ detail_device (gpointer data, gpointer user_data)
 		print_string ("Type", "Wired");
 	else if (NM_IS_DEVICE_WIFI (device))
 		print_string ("Type", "802.11 WiFi");
-	else if (NM_IS_DEVICE_MODEM (device)) {
-		NMDeviceModemCapabilities modem_caps;
-
-		modem_caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
-		if (modem_caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
-			print_string ("Type", "Mobile Broadband (GSM)");
-		else if (modem_caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
-			print_string ("Type", "Mobile Broadband (CDMA)");
-		else
-			print_string ("Type", "Mobile Broadband (unknown)");
-	} else if (NM_IS_DEVICE_BT (device))
+	else if (NM_IS_GSM_DEVICE (device))
+		print_string ("Type", "Mobile Broadband (GSM)");
+	else if (NM_IS_CDMA_DEVICE (device))
+		print_string ("Type", "Mobile Broadband (CDMA)");
+	else if (NM_IS_DEVICE_BT (device))
 		print_string ("Type", "Bluetooth");
-#if WITH_WIMAX
-	else if (NM_IS_DEVICE_WIMAX (device))
-		print_string ("Type", "WiMAX");
-#endif
 
 	print_string ("Driver", nm_device_get_driver (device) ? nm_device_get_driver (device) : "(unknown)");
 
@@ -408,10 +353,6 @@ detail_device (gpointer data, gpointer user_data)
 		tmp = g_strdup (nm_device_ethernet_get_hw_address (NM_DEVICE_ETHERNET (device)));
 	else if (NM_IS_DEVICE_WIFI (device))
 		tmp = g_strdup (nm_device_wifi_get_hw_address (NM_DEVICE_WIFI (device)));
-#if WITH_WIMAX
-	else if (NM_IS_DEVICE_WIMAX (device))
-		tmp = g_strdup (nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device)));
-#endif
 
 	if (tmp) {
 		print_string ("HW Address", tmp);
@@ -477,68 +418,6 @@ detail_device (gpointer data, gpointer user_data)
 			print_string ("  Carrier", "on");
 		else
 			print_string ("  Carrier", "off");
-#if WITH_WIMAX
-	} else if (NM_IS_DEVICE_WIMAX (device)) {
-		NMDeviceWimax *wimax = NM_DEVICE_WIMAX (device);
-		NMWimaxNsp *active_nsp = NULL;
-		const char *active_name = NULL;
-		const GPtrArray *nsps;
-
-		if (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) {
-			guint tmp_uint;
-			gint tmp_int;
-			const char *tmp_str;
-
-			active_nsp = nm_device_wimax_get_active_nsp (wimax);
-			active_name = active_nsp ? nm_wimax_nsp_get_name (active_nsp) : NULL;
-
-			printf ("\n  Link Status\n");
-
-			tmp_uint = nm_device_wimax_get_center_frequency (wimax);
-			if (tmp_uint)
-				tmp = g_strdup_printf ("%'.1f MHz", (double) tmp_uint / 1000.0);
-			else
-				tmp = g_strdup ("(unknown)");
-			print_string ("  Center Freq.", tmp);
-			g_free (tmp);
-
-			tmp_int = nm_device_wimax_get_rssi (wimax);
-			if (tmp_int)
-				tmp = g_strdup_printf ("%d dBm", tmp_int);
-			else
-				tmp = g_strdup ("(unknown)");
-			print_string ("  RSSI", tmp);
-			g_free (tmp);
-
-			tmp_int = nm_device_wimax_get_cinr (wimax);
-			if (tmp_int)
-				tmp = g_strdup_printf ("%d dB", tmp_int);
-			else
-				tmp = g_strdup ("(unknown)");
-			print_string ("  CINR", tmp);
-			g_free (tmp);
-
-			tmp_int = nm_device_wimax_get_tx_power (wimax);
-			if (tmp_int)
-				tmp = g_strdup_printf ("%'.2f dBm", (float) tmp_int / 2.0);
-			else
-				tmp = g_strdup ("(unknown)");
-			print_string ("  TX Power", tmp);
-			g_free (tmp);
-
-			tmp_str = nm_device_wimax_get_bsid (wimax);
-			if (tmp_str)
-				print_string ("  BSID", tmp_str);
-			else
-				print_string ("  BSID", "(unknown)");
-		}
-
-		printf ("\n  WiMAX NSPs %s\n", active_nsp ? "(* current NSP)" : "");
-
-		nsps = nm_device_wimax_get_nsps (NM_DEVICE_WIMAX (device));
-		if (nsps && nsps->len)
-			g_ptr_array_foreach ((GPtrArray *) nsps, detail_nsp, (gpointer) active_name);
-#endif
 	}
 
 	/* IP Setup info */
@@ -687,10 +566,12 @@ detail_vpn (gpointer data, gpointer user_data)
 static void
 get_one_connection (DBusGConnection *bus,
                     const char *path,
+                    NMConnectionScope scope,
                     GHashTable *table)
 {
 	DBusGProxy *proxy;
 	NMConnection *connection = NULL;
+	const char *service;
 	GError *error = NULL;
 	GHashTable *settings = NULL;
 
@@ -698,8 +579,10 @@ get_one_connection (DBusGConnection *bus,
 	g_return_if_fail (path != NULL);
 	g_return_if_fail (table != NULL);
 
-	proxy = dbus_g_proxy_new_for_name (bus, NM_DBUS_SERVICE,
-	                                   path, NM_DBUS_IFACE_SETTINGS_CONNECTION);
+	service = (scope == NM_CONNECTION_SCOPE_SYSTEM) ?
+		NM_DBUS_SERVICE_SYSTEM_SETTINGS : NM_DBUS_SERVICE_USER_SETTINGS;
+
+	proxy = dbus_g_proxy_new_for_name (bus, service, path, NM_DBUS_IFACE_SETTINGS_CONNECTION);
 	if (!proxy)
 		return;
 
@@ -707,7 +590,7 @@ get_one_connection (DBusGConnection *bus,
 	                        G_TYPE_INVALID,
 	                        DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, &settings,
 	                        G_TYPE_INVALID)) {
-		g_warning ("error: cannot retrieve connection: %s", error ? error->message : "(unknown)");
+		nm_warning ("error: cannot retrieve connection: %s", error ? error->message : "(unknown)");
 		goto out;
 	}
 
@@ -715,13 +598,14 @@ get_one_connection (DBusGConnection *bus,
 	g_hash_table_destroy (settings);
 
 	if (!connection) {
-		g_warning ("error: invalid connection: '%s' / '%s' invalid: %d",
-		           error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(unknown)",
-		           error ? error->message : "(unknown)",
-		           error ? error->code : -1);
+		nm_warning ("error: invalid connection: '%s' / '%s' invalid: %d",
+		            error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(unknown)",
+		            error ? error->message : "(unknown)",
+		            error ? error->code : -1);
 		goto out;
 	}
 
+	nm_connection_set_scope (connection, scope);
 	nm_connection_set_path (connection, path);
 	g_hash_table_insert (table, g_strdup (path), g_object_ref (connection));
 
@@ -732,29 +616,27 @@ out:
 	g_object_unref (proxy);
 }
 
-static gboolean
-get_all_connections (void)
+static void
+get_connections_for_service (DBusGConnection *bus,
+                             NMConnectionScope scope,
+                             GHashTable *table)
 {
 	GError *error = NULL;
-	DBusGConnection *bus;
-	DBusGProxy *proxy = NULL;
+	DBusGProxy *proxy;
 	GPtrArray *paths = NULL;
 	int i;
-	gboolean sucess = FALSE;
+	const char *service;
 
-	bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
-	if (error || !bus) {
-		g_warning ("error: could not connect to dbus");
-		goto out;
-	}
+	service = (scope == NM_CONNECTION_SCOPE_SYSTEM) ?
+		NM_DBUS_SERVICE_SYSTEM_SETTINGS : NM_DBUS_SERVICE_USER_SETTINGS;
 
 	proxy = dbus_g_proxy_new_for_name (bus,
-	                                   NM_DBUS_SERVICE,
+	                                   service,
 	                                   NM_DBUS_PATH_SETTINGS,
 	                                   NM_DBUS_IFACE_SETTINGS);
 	if (!proxy) {
-		g_warning ("error: failed to create DBus proxy for settings service");
-		goto out;
+		g_warning ("error: failed to create DBus proxy for %s", service);
+		return;
 	}
 
 	if (!dbus_g_proxy_call (proxy, "ListConnections", &error,
@@ -766,20 +648,33 @@ get_all_connections (void)
 		goto out;
 	}
 
-	connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
-
 	for (i = 0; paths && (i < paths->len); i++)
-		get_one_connection (bus, g_ptr_array_index (paths, i), connections);
-
-	sucess = TRUE;
+		get_one_connection (bus, g_ptr_array_index (paths, i), scope, table);
 
 out:
-	if (bus)
-		dbus_g_connection_unref (bus);
-	if (proxy)
-		g_object_unref (proxy);
+	g_object_unref (proxy);
+}
+
+static gboolean
+get_all_connections (void)
+{
+	DBusGConnection *bus;
+	GError *error = NULL;
+
+	bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+	if (error || !bus) {
+		g_warning ("error: could not connect to dbus");
+		return FALSE;
+	}
+
+	user_connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+	get_connections_for_service (bus, NM_CONNECTION_SCOPE_USER, user_connections);
+
+	system_connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+	get_connections_for_service (bus, NM_CONNECTION_SCOPE_SYSTEM, system_connections);
 
-	return sucess;
+	dbus_g_connection_unref (bus);
+	return TRUE;
 }
 
 int
@@ -818,7 +713,8 @@ main (int argc, char *argv[])
 		g_ptr_array_foreach ((GPtrArray *) info.active, detail_vpn, &info);
 
 	g_object_unref (client);
-	g_hash_table_unref (connections);
+	g_hash_table_unref (user_connections);
+	g_hash_table_unref (system_connections);
 
 	return 0;
 }