diff options
Diffstat (limited to 'test/nm-tool.c')
-rw-r--r-- | test/nm-tool.c | 795 |
1 files changed, 0 insertions, 795 deletions
diff --git a/test/nm-tool.c b/test/nm-tool.c deleted file mode 100644 index 47bf2e2f7..000000000 --- a/test/nm-tool.c +++ /dev/null @@ -1,795 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* nm-tool - information tool for NetworkManager - * - * Dan Williams <dcbw@redhat.com> - * - * 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 2005 - 2011 Red Hat, Inc. - * (C) Copyright 2007 Novell, Inc. - */ - -#include <config.h> -#include <glib.h> -#include <dbus/dbus.h> -#include <dbus/dbus-glib.h> -#include <stdio.h> -#include <string.h> -#include <stdlib.h> - -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> - -#include <nm-client.h> -#include <nm-device.h> -#include <nm-device-ethernet.h> -#include <nm-device-wifi.h> -#include <nm-device-modem.h> -#include <nm-device-bt.h> -#include <nm-device-wimax.h> -#include <nm-utils.h> -#include <nm-setting-ip4-config.h> -#include <nm-setting-ip6-config.h> -#include <nm-vpn-connection.h> -#include <nm-setting-connection.h> - -/* Don't use nm-dbus-glib-types.h so that we can keep nm-tool - * building standalone outside of the NM tree. - */ -#define DBUS_TYPE_G_MAP_OF_VARIANT (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE)) -#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 gboolean -get_nm_state (NMClient *client) -{ - NMState state; - char *state_string; - gboolean success = TRUE; - - state = nm_client_get_state (client); - - switch (state) { - 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)"; - break; - case NM_STATE_DISCONNECTED: - state_string = "disconnected"; - break; - case NM_STATE_UNKNOWN: - default: - state_string = "unknown"; - success = FALSE; - break; - } - - printf ("State: %s\n\n", state_string); - - return success; -} - -static void -print_header (const char *label, const char *iface, const char *connection) -{ - GString *string; - - string = g_string_sized_new (79); - g_string_append_printf (string, "- %s: ", label); - if (iface) - g_string_append_printf (string, "%s ", iface); - if (connection) - g_string_append_printf (string, " [%s] ", connection); - - while (string->len < 80) - g_string_append_c (string, '-'); - - printf ("%s\n", string->str); - - g_string_free (string, TRUE); -} - -static void -print_string (const char *label, const char *data) -{ -#define SPACING 18 - int label_len = 0; - char spaces[50]; - int i; - - g_return_if_fail (label != NULL); - g_return_if_fail (data != NULL); - - label_len = strlen (label); - if (label_len > SPACING) - label_len = SPACING - 1; - for (i = 0; i < (SPACING - label_len); i++) - spaces[i] = 0x20; - spaces[i] = 0x00; - - printf (" %s:%s%s\n", label, &spaces[0], data); -} - - -static void -detail_access_point (gpointer data, gpointer user_data) -{ - NMAccessPoint *ap = NM_ACCESS_POINT (data); - const char *active_bssid = (const char *) user_data; - GString *str; - gboolean active = FALSE; - guint32 flags, wpa_flags, rsn_flags; - const GByteArray * ssid; - char *tmp; - - flags = nm_access_point_get_flags (ap); - wpa_flags = nm_access_point_get_wpa_flags (ap); - rsn_flags = nm_access_point_get_rsn_flags (ap); - - if (active_bssid) { - const char *current_bssid = nm_access_point_get_hw_address (ap); - if (current_bssid && !strcmp (current_bssid, active_bssid)) - active = TRUE; - } - - str = g_string_new (NULL); - g_string_append_printf (str, - "%s, %s, Freq %d MHz, Rate %d Mb/s, Strength %d", - nm_access_point_get_mode (ap) == NM_802_11_MODE_ADHOC ? "Ad-Hoc" - : nm_access_point_get_mode (ap) == NM_802_11_MODE_INFRA ? "Infra" - : "Unknown", - nm_access_point_get_hw_address (ap), - nm_access_point_get_frequency (ap), - nm_access_point_get_max_bitrate (ap) / 1000, - nm_access_point_get_strength (ap)); - - if ( !(flags & NM_802_11_AP_FLAGS_PRIVACY) - && (wpa_flags != NM_802_11_AP_SEC_NONE) - && (rsn_flags != NM_802_11_AP_SEC_NONE)) - g_string_append (str, ", Encrypted: "); - - if ( (flags & NM_802_11_AP_FLAGS_PRIVACY) - && (wpa_flags == NM_802_11_AP_SEC_NONE) - && (rsn_flags == NM_802_11_AP_SEC_NONE)) - g_string_append (str, " WEP"); - if (wpa_flags != NM_802_11_AP_SEC_NONE) - g_string_append (str, " WPA"); - if (rsn_flags != NM_802_11_AP_SEC_NONE) - g_string_append (str, " WPA2"); - if ( (wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X) - || (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) - g_string_append (str, " Enterprise"); - - /* FIXME: broadcast/hidden */ - - ssid = nm_access_point_get_ssid (ap); - tmp = g_strdup_printf (" %s%s", active ? "*" : "", - ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)"); - - print_string (tmp, str->str); - - g_string_free (str, TRUE); - g_free (tmp); -} - -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); -} - -static gchar * -ip4_address_as_string (guint32 ip) -{ - struct in_addr tmp_addr; - char buf[INET_ADDRSTRLEN+1]; - - memset (&buf, '\0', sizeof (buf)); - tmp_addr.s_addr = 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)); - return NULL; - } -} - -static gchar * -ip6_address_as_string (const struct in6_addr *ip) -{ - char buf[INET6_ADDRSTRLEN]; - - memset (&buf, '\0', sizeof (buf)); - - if (inet_ntop (AF_INET6, ip, buf, INET6_ADDRSTRLEN)) { - return g_strdup (buf); - } else { - int j; - GString *ip6_str = g_string_new (NULL); - 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); - g_string_free (ip6_str, TRUE); - return NULL; - } -} - -static const char * -get_dev_state_string (NMDeviceState state) -{ - if (state == NM_DEVICE_STATE_UNMANAGED) - return "unmanaged"; - else if (state == NM_DEVICE_STATE_UNAVAILABLE) - return "unavailable"; - else if (state == NM_DEVICE_STATE_DISCONNECTED) - return "disconnected"; - else if (state == NM_DEVICE_STATE_PREPARE) - return "connecting (prepare)"; - else if (state == NM_DEVICE_STATE_CONFIG) - return "connecting (configuring)"; - else if (state == NM_DEVICE_STATE_NEED_AUTH) - 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"; -} - -static NMConnection * -get_connection_for_active (NMActiveConnection *active) -{ - const char *path; - - g_return_val_if_fail (active != NULL, NULL); - - path = nm_active_connection_get_connection (active); - g_return_val_if_fail (path != NULL, NULL); - - return (NMConnection *) g_hash_table_lookup (connections, path); -} - -static void -detail_device (gpointer data, gpointer user_data) -{ - NMDevice *device = NM_DEVICE (data); - char *tmp; - NMDeviceState state; - guint32 caps; - guint32 speed; - const GArray *array; - gboolean is_default = FALSE; - const char *id = NULL; - NMActiveConnection *active; - - active = nm_device_get_active_connection (device); - if (active) { - NMConnection *connection; - NMSettingConnection *s_con; - - is_default = nm_active_connection_get_default (active); - - connection = get_connection_for_active (active); - if (connection) { - s_con = nm_connection_get_setting_connection (connection); - if (s_con) - id = nm_setting_connection_get_id (s_con); - } - } - - print_header ("Device", nm_device_get_iface (device), id); - - /* General information */ - if (NM_IS_DEVICE_ETHERNET (device)) - 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)) - print_string ("Type", "Bluetooth"); - else if (NM_IS_DEVICE_WIMAX (device)) - print_string ("Type", "WiMAX"); - - print_string ("Driver", nm_device_get_driver (device) ? nm_device_get_driver (device) : "(unknown)"); - - state = nm_device_get_state (device); - print_string ("State", get_dev_state_string (state)); - - if (is_default) - print_string ("Default", "yes"); - else - print_string ("Default", "no"); - - tmp = NULL; - if (NM_IS_DEVICE_ETHERNET (device)) - 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))); - else if (NM_IS_DEVICE_WIMAX (device)) - tmp = g_strdup (nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device))); - - if (tmp) { - print_string ("HW Address", tmp); - g_free (tmp); - } - - /* Capabilities */ - caps = nm_device_get_capabilities (device); - printf ("\n Capabilities:\n"); - if (caps & NM_DEVICE_CAP_CARRIER_DETECT) - print_string (" Carrier Detect", "yes"); - - speed = 0; - if (NM_IS_DEVICE_ETHERNET (device)) { - /* Speed in Mb/s */ - speed = nm_device_ethernet_get_speed (NM_DEVICE_ETHERNET (device)); - } else if (NM_IS_DEVICE_WIFI (device)) { - /* Speed in b/s */ - speed = nm_device_wifi_get_bitrate (NM_DEVICE_WIFI (device)); - speed /= 1000; - } - - if (speed) { - char *speed_string; - - speed_string = g_strdup_printf ("%u Mb/s", speed); - print_string (" Speed", speed_string); - g_free (speed_string); - } - - /* Wireless specific information */ - if ((NM_IS_DEVICE_WIFI (device))) { - guint32 wcaps; - NMAccessPoint *active_ap = NULL; - const char *active_bssid = NULL; - const GPtrArray *aps; - - printf ("\n Wireless Properties\n"); - - wcaps = nm_device_wifi_get_capabilities (NM_DEVICE_WIFI (device)); - - if (wcaps & (NM_WIFI_DEVICE_CAP_CIPHER_WEP40 | NM_WIFI_DEVICE_CAP_CIPHER_WEP104)) - print_string (" WEP Encryption", "yes"); - if (wcaps & NM_WIFI_DEVICE_CAP_WPA) - print_string (" WPA Encryption", "yes"); - if (wcaps & NM_WIFI_DEVICE_CAP_RSN) - print_string (" WPA2 Encryption", "yes"); - - if (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) { - active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (device)); - active_bssid = active_ap ? nm_access_point_get_hw_address (active_ap) : NULL; - } - - printf ("\n Wireless Access Points %s\n", active_ap ? "(* = current AP)" : ""); - - aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (device)); - if (aps && aps->len) - g_ptr_array_foreach ((GPtrArray *) aps, detail_access_point, (gpointer) active_bssid); - } else if (NM_IS_DEVICE_ETHERNET (device)) { - printf ("\n Wired Properties\n"); - - if (nm_device_ethernet_get_carrier (NM_DEVICE_ETHERNET (device))) - print_string (" Carrier", "on"); - else - print_string (" Carrier", "off"); - } 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); - } - - /* IP Setup info */ - if (state == NM_DEVICE_STATE_ACTIVATED) { - NMIP4Config *cfg4 = nm_device_get_ip4_config (device); - NMIP6Config *cfg6 = nm_device_get_ip6_config (device); - GSList *iter; - - if (cfg4) { - printf ("\n IPv4 Settings:\n"); - - for (iter = (GSList *) nm_ip4_config_get_addresses (cfg4); iter; iter = g_slist_next (iter)) { - NMIP4Address *addr = (NMIP4Address *) iter->data; - guint32 prefix = nm_ip4_address_get_prefix (addr); - char *tmp2; - - tmp = ip4_address_as_string (nm_ip4_address_get_address (addr)); - print_string (" Address", tmp); - g_free (tmp); - - tmp2 = ip4_address_as_string (nm_utils_ip4_prefix_to_netmask (prefix)); - tmp = g_strdup_printf ("%d (%s)", prefix, tmp2); - g_free (tmp2); - print_string (" Prefix", tmp); - g_free (tmp); - - tmp = ip4_address_as_string (nm_ip4_address_get_gateway (addr)); - print_string (" Gateway", tmp); - g_free (tmp); - printf ("\n"); - } - - array = nm_ip4_config_get_nameservers (cfg4); - if (array) { - int i; - - for (i = 0; i < array->len; i++) { - tmp = ip4_address_as_string (g_array_index (array, guint32, i)); - print_string (" DNS", tmp); - g_free (tmp); - } - } - } - - if (cfg6) { - printf ("\n IPv6 Settings:\n"); - - for (iter = (GSList *) nm_ip6_config_get_addresses (cfg6); iter; iter = g_slist_next (iter)) { - NMIP6Address *addr = (NMIP6Address *) iter->data; - guint32 prefix = nm_ip6_address_get_prefix (addr); - - tmp = ip6_address_as_string (nm_ip6_address_get_address (addr)); - print_string (" Address", tmp); - g_free (tmp); - - tmp = g_strdup_printf ("%d", prefix); - print_string (" Prefix", tmp); - g_free (tmp); - - tmp = ip6_address_as_string (nm_ip6_address_get_gateway (addr)); - print_string (" Gateway", tmp); - g_free (tmp); - printf ("\n"); - } - - for (iter = (GSList *) nm_ip6_config_get_nameservers (cfg6); iter; iter = g_slist_next (iter)) { - tmp = ip6_address_as_string (iter->data); - print_string (" DNS", tmp); - g_free (tmp); - } - } - } - - printf ("\n\n"); -} - -static const char * -get_vpn_state_string (NMVPNConnectionState state) -{ - switch (state) { - case NM_VPN_CONNECTION_STATE_PREPARE: - return "connecting (prepare)"; - case NM_VPN_CONNECTION_STATE_NEED_AUTH: - return "connecting (need authentication)"; - case NM_VPN_CONNECTION_STATE_CONNECT: - return "connecting"; - case NM_VPN_CONNECTION_STATE_IP_CONFIG_GET: - return "connecting (getting IP configuration)"; - case NM_VPN_CONNECTION_STATE_ACTIVATED: - return "connected"; - case NM_VPN_CONNECTION_STATE_FAILED: - return "connection failed"; - case NM_VPN_CONNECTION_STATE_DISCONNECTED: - return "disconnected"; - default: - break; - } - - return "unknown"; -} - -static void -detail_vpn (gpointer data, gpointer user_data) -{ - NMActiveConnection *active = NM_ACTIVE_CONNECTION (data); - NMConnection *connection; - NMSettingConnection *s_con; - NMVPNConnectionState state; - const char *banner; - - if (!NM_IS_VPN_CONNECTION (active)) - return; - - connection = get_connection_for_active (active); - g_return_if_fail (connection != NULL); - - s_con = nm_connection_get_setting_connection (connection); - g_return_if_fail (s_con != NULL); - - print_header ("VPN", NULL, nm_setting_connection_get_id (s_con)); - - state = nm_vpn_connection_get_vpn_state (NM_VPN_CONNECTION (active)); - print_string ("State", get_vpn_state_string (state)); - - if (nm_active_connection_get_default (active)) - print_string ("Default", "yes"); - else - print_string ("Default", "no"); - - banner = nm_vpn_connection_get_banner (NM_VPN_CONNECTION (active)); - if (banner) { - char **lines, **iter; - - printf ("\n Message:\n"); - lines = g_strsplit_set (banner, "\n\r", -1); - for (iter = lines; *iter; iter++) { - if (*iter && strlen (*iter)) - printf (" %s\n", *iter); - } - g_strfreev (lines); - } - - printf ("\n\n"); -} - -static void -get_one_connection (DBusGConnection *bus, - const char *path, - GHashTable *table) -{ - DBusGProxy *proxy; - NMConnection *connection = NULL; - GError *error = NULL; - GHashTable *settings = NULL; - - g_return_if_fail (bus != NULL); - 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); - if (!proxy) - return; - - if (!dbus_g_proxy_call (proxy, "GetSettings", &error, - 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)"); - goto out; - } - - connection = nm_connection_new_from_hash (settings, &error); - 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); - goto out; - } - - nm_connection_set_path (connection, path); - g_hash_table_insert (table, g_strdup (path), g_object_ref (connection)); - -out: - g_clear_error (&error); - if (connection) - g_object_unref (connection); - g_object_unref (proxy); -} - -static gboolean -get_all_connections (void) -{ - GError *error = NULL; - DBusGConnection *bus; - DBusGProxy *proxy = NULL; - GPtrArray *paths = NULL; - int i; - gboolean sucess = FALSE; - - bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); - if (error || !bus) { - g_warning ("error: could not connect to dbus"); - goto out; - } - - proxy = dbus_g_proxy_new_for_name (bus, - NM_DBUS_SERVICE, - NM_DBUS_PATH_SETTINGS, - NM_DBUS_IFACE_SETTINGS); - if (!proxy) { - g_warning ("error: failed to create DBus proxy for settings service"); - goto out; - } - - if (!dbus_g_proxy_call (proxy, "ListConnections", &error, - G_TYPE_INVALID, - DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &paths, - G_TYPE_INVALID)) { - /* No connections or settings service may not be running */ - g_clear_error (&error); - 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; - -out: - if (bus) - dbus_g_connection_unref (bus); - if (proxy) - g_object_unref (proxy); - - return sucess; -} - -int -main (int argc, char *argv[]) -{ - NMClient *client; - const GPtrArray *devices; - const GPtrArray *active; - - g_type_init (); - - client = nm_client_new (); - if (!client) { - exit (1); - } - - printf ("\nNetworkManager Tool\n\n"); - - if (!get_nm_state (client)) { - g_warning ("error: could not connect to NetworkManager"); - exit (1); - } - - if (!get_all_connections ()) - exit (1); - - devices = nm_client_get_devices (client); - if (devices) - g_ptr_array_foreach ((GPtrArray *) devices, detail_device, NULL); - - active = nm_client_get_active_connections (client); - if (active) - g_ptr_array_foreach ((GPtrArray *) active, detail_vpn, NULL); - - g_object_unref (client); - g_hash_table_unref (connections); - - return 0; -} |