summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog26
-rw-r--r--introspection/nm-device-802-11-wireless.xml1
-rw-r--r--introspection/nm-device.xml2
-rw-r--r--libnm-glib/nm-device-802-11-wireless.c17
-rw-r--r--libnm-glib/nm-device-802-11-wireless.h1
-rw-r--r--libnm-glib/nm-device.c17
-rw-r--r--libnm-glib/nm-device.h1
-rw-r--r--src/NetworkManagerPolicy.c2
-rw-r--r--src/named-manager/nm-named-manager.c4
-rw-r--r--src/nm-device-802-11-wireless.c12
-rw-r--r--src/nm-device-802-11-wireless.h1
-rw-r--r--src/nm-hal-manager.c1
-rw-r--r--src/nm-manager.c19
-rw-r--r--test/Makefile.am3
-rw-r--r--test/nm-tool.c610
15 files changed, 328 insertions, 389 deletions
diff --git a/ChangeLog b/ChangeLog
index 1fbf4585f6..ab587bd9cc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,31 @@
2007-03-02 Tambet Ingo <tambet@ximian.com>
+ * libnm-glib/nm-device-802-11-wireless.c
+ (nm_device_802_11_wireless_get_capabilities): Implement.
+
+ * libnm-glib/nm-device.c (nm_device_get_capabilities): Implement.
+
+ * src/nm-device-802-11-wireless.c: Add "WirelessCapabilities" property.
+
+ * src/named-manager/nm-named-manager.c (remove_one_zone_from_named): Unref the
+ reply only if it's not NULL. Not sure why this started happening right now.
+
+ * src/nm-manager.c (device_stop_and_free): Remove. No need to have different
+ code paths for when devices get removed on shutdown or when a device is just
+ removed.
+ (finalize): Don't use a g_slist_foreach() when removing devices, the list data
+ gets freed so any signal from a device (disconnected for instance) would invoke
+ NMState update which would crash.
+ (nm_manager_remove_device): Bring the device down when it gets removed.
+
+ * src/NetworkManagerPolicy.c (nm_policy_auto_get_best_device): Remove
+ the unused dev_type.
+
+ * src/nm-hal-manager.c (create_device_and_add_to_list): Don't keep the
+ reference to the added device, NMManager will own it (if it wants).
+
+ * test/nm-tool.c: Rewrite using libnm-glib.
+
* libnm-glib/nm-device-802-11-wireless.c: Cache networks (bssids) list.
We get signalled when it changes.
diff --git a/introspection/nm-device-802-11-wireless.xml b/introspection/nm-device-802-11-wireless.xml
index 1cf8aa76b3..e43e2eec65 100644
--- a/introspection/nm-device-802-11-wireless.xml
+++ b/introspection/nm-device-802-11-wireless.xml
@@ -18,6 +18,7 @@
<property name="Mode" type="i" access="read"/>
<property name="Bitrate" type="i" access="read"/>
<property name="ActiveNetwork" type="o" access="read"/>
+ <property name="WirelessCapabilities" type="u" access="read"/>
<signal name="NetworkAdded">
<arg name="network" type="o"/>
diff --git a/introspection/nm-device.xml b/introspection/nm-device.xml
index b385738566..49d134d76a 100644
--- a/introspection/nm-device.xml
+++ b/introspection/nm-device.xml
@@ -9,7 +9,7 @@
<property name="Udi" type="s" access="read"/>
<property name="Interface" type="s" access="read"/>
<property name="Driver" type="s" access="read"/>
- <property name="Capabilities" type="i" access="read"/>
+ <property name="Capabilities" type="u" access="read"/>
<property name="Ip4Address" type="i" access="read"/>
<property name="State" type="u" access="read"/>
<property name="Ip4Config" type="o" access="read"/>
diff --git a/libnm-glib/nm-device-802-11-wireless.c b/libnm-glib/nm-device-802-11-wireless.c
index 4e6a1e4f2f..d511ab340e 100644
--- a/libnm-glib/nm-device-802-11-wireless.c
+++ b/libnm-glib/nm-device-802-11-wireless.c
@@ -161,6 +161,23 @@ nm_device_802_11_wireless_get_bitrate (NMDevice80211Wireless *device)
return bitrate;
}
+guint32
+nm_device_802_11_wireless_get_capabilities (NMDevice80211Wireless *device)
+{
+ guint32 caps = 0;
+ GValue value = {0,};
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), 0);
+
+ if (nm_dbus_get_property (DBUS_G_PROXY (device),
+ NM_DBUS_INTERFACE_DEVICE_WIRELESS,
+ "WirelessCapabilities",
+ &value))
+ caps = g_value_get_uint (&value);
+
+ return caps;
+}
+
static NMAccessPoint *
get_network (NMDevice80211Wireless *device, const char *path, gboolean create_if_not_found)
{
diff --git a/libnm-glib/nm-device-802-11-wireless.h b/libnm-glib/nm-device-802-11-wireless.h
index cb1b5bcba0..17ddacb995 100644
--- a/libnm-glib/nm-device-802-11-wireless.h
+++ b/libnm-glib/nm-device-802-11-wireless.h
@@ -31,6 +31,7 @@ NMDevice80211Wireless *nm_device_802_11_wireless_new (DBusGConnection *c
char *nm_device_802_11_wireless_get_hw_address (NMDevice80211Wireless *device);
int nm_device_802_11_wireless_get_mode (NMDevice80211Wireless *device);
int nm_device_802_11_wireless_get_bitrate (NMDevice80211Wireless *device);
+guint32 nm_device_802_11_wireless_get_capabilities (NMDevice80211Wireless *device);
NMAccessPoint *nm_device_802_11_wireless_get_active_network (NMDevice80211Wireless *device);
GSList *nm_device_802_11_wireless_get_networks (NMDevice80211Wireless *device);
diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c
index b130b8f022..40b577408a 100644
--- a/libnm-glib/nm-device.c
+++ b/libnm-glib/nm-device.c
@@ -161,6 +161,23 @@ nm_device_get_driver (NMDevice *device)
}
guint32
+nm_device_get_capabilities (NMDevice *device)
+{
+ guint32 caps = 0;
+ GValue value = {0,};
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), 0);
+
+ if (nm_dbus_get_property (DBUS_G_PROXY (device),
+ NM_DBUS_INTERFACE_DEVICE,
+ "Capabilities",
+ &value))
+ caps = g_value_get_uint (&value);
+
+ return caps;
+}
+
+guint32
nm_device_get_ip4_address (NMDevice *device)
{
guint32 address = 0;
diff --git a/libnm-glib/nm-device.h b/libnm-glib/nm-device.h
index 0ca6845eaf..d948640ef9 100644
--- a/libnm-glib/nm-device.h
+++ b/libnm-glib/nm-device.h
@@ -34,6 +34,7 @@ void nm_device_deactivate (NMDevice *device);
char *nm_device_get_iface (NMDevice *device);
char *nm_device_get_udi (NMDevice *device);
char *nm_device_get_driver (NMDevice *device);
+guint32 nm_device_get_capabilities (NMDevice *device);
guint32 nm_device_get_ip4_address (NMDevice *device);
NMIP4Config *nm_device_get_ip4_config (NMDevice *device);
NMDeviceState nm_device_get_state (NMDevice *device);
diff --git a/src/NetworkManagerPolicy.c b/src/NetworkManagerPolicy.c
index a3d854e2d3..fdcb48c46a 100644
--- a/src/NetworkManagerPolicy.c
+++ b/src/NetworkManagerPolicy.c
@@ -80,13 +80,11 @@ static NMDevice * nm_policy_auto_get_best_device (NMPolicy *policy, NMAccessPoin
return NULL;
for (elt = nm_manager_get_devices (policy->manager); elt; elt = elt->next) {
- guint dev_type;
gboolean link_active;
guint prio = 0;
NMDevice * dev = (NMDevice *)(elt->data);
guint32 caps;
- dev_type = nm_device_get_device_type (dev);
link_active = nm_device_has_active_link (dev);
caps = nm_device_get_capabilities (dev);
diff --git a/src/named-manager/nm-named-manager.c b/src/named-manager/nm-named-manager.c
index 99c561abe8..23498d4f26 100644
--- a/src/named-manager/nm-named-manager.c
+++ b/src/named-manager/nm-named-manager.c
@@ -498,7 +498,9 @@ remove_one_zone_from_named (NMNamedManager *mgr, const char *zone)
out:
if (dbus_error_is_set (&error))
dbus_error_free (&error);
- dbus_message_unref (reply);
+ if (reply)
+ dbus_message_unref (reply);
+
return success;
}
diff --git a/src/nm-device-802-11-wireless.c b/src/nm-device-802-11-wireless.c
index 93efa47ab9..37d6350217 100644
--- a/src/nm-device-802-11-wireless.c
+++ b/src/nm-device-802-11-wireless.c
@@ -79,6 +79,7 @@ enum {
PROP_MODE,
PROP_BITRATE,
PROP_ACTIVE_NETWORK,
+ PROP_CAPABILITIES,
LAST_PROP
};
@@ -3048,6 +3049,7 @@ get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
NMDevice80211Wireless *device = NM_DEVICE_802_11_WIRELESS (object);
+ NMDevice80211WirelessPrivate *priv = NM_DEVICE_802_11_WIRELESS_GET_PRIVATE (device);
struct ether_addr hw_addr;
char hw_addr_buf[20];
NMAccessPoint *ap;
@@ -3066,6 +3068,9 @@ get_property (GObject *object, guint prop_id,
case PROP_BITRATE:
g_value_set_int (value, nm_device_802_11_wireless_get_bitrate (device));
break;
+ case PROP_CAPABILITIES:
+ g_value_set_uint (value, priv->capabilities);
+ break;
case PROP_ACTIVE_NETWORK:
req = nm_device_get_act_request (NM_DEVICE (device));
if (req && (ap = nm_act_request_get_ap (req))) {
@@ -3140,6 +3145,13 @@ nm_device_802_11_wireless_class_init (NMDevice80211WirelessClass *klass)
"Currently active network",
G_TYPE_OBJECT,
G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_CAPABILITIES,
+ g_param_spec_uint (NM_DEVICE_802_11_WIRELESS_CAPABILITIES,
+ "Wireless Capabilities",
+ "Wireless Capabilities",
+ 0, G_MAXUINT32, NM_802_11_CAP_NONE,
+ G_PARAM_READABLE));
/* Signals */
signals[NETWORK_ADDED] =
diff --git a/src/nm-device-802-11-wireless.h b/src/nm-device-802-11-wireless.h
index 9aef92e3b2..412b95dca4 100644
--- a/src/nm-device-802-11-wireless.h
+++ b/src/nm-device-802-11-wireless.h
@@ -47,6 +47,7 @@ G_BEGIN_DECLS
#define NM_DEVICE_802_11_WIRELESS_MODE "mode"
#define NM_DEVICE_802_11_WIRELESS_BITRATE "bitrate"
#define NM_DEVICE_802_11_WIRELESS_ACTIVE_NETWORK "active-network"
+#define NM_DEVICE_802_11_WIRELESS_CAPABILITIES "wireless-capabilities"
#ifndef NM_DEVICE_802_11_WIRELESS_DEFINED
#define NM_DEVICE_802_11_WIRELESS_DEFINED
diff --git a/src/nm-hal-manager.c b/src/nm-hal-manager.c
index 0a9e50ad9e..97baf644d2 100644
--- a/src/nm-hal-manager.c
+++ b/src/nm-hal-manager.c
@@ -130,6 +130,7 @@ create_device_and_add_to_list (NMHalManager *manager, const char *udi, const cha
nm_device_get_iface (dev));
nm_manager_add_device (manager->nm_manager, dev);
+ g_object_unref (dev);
}
return dev;
diff --git a/src/nm-manager.c b/src/nm-manager.c
index a43eda6b3e..bcefaeb14a 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -54,23 +54,13 @@ nm_manager_init (NMManager *manager)
}
static void
-device_stop_and_free (gpointer data, gpointer user_data)
-{
- NMDevice *device = NM_DEVICE (data);
-
- nm_device_interface_deactivate (NM_DEVICE_INTERFACE (device));
- g_object_unref (device);
-}
-
-static void
finalize (GObject *object)
{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (object);
+ NMManager *manager = NM_MANAGER (object);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
- g_slist_foreach (priv->devices,
- device_stop_and_free,
- NULL);
- g_slist_free (priv->devices);
+ while (g_slist_length (priv->devices))
+ nm_manager_remove_device (manager, NM_DEVICE (priv->devices->data));
G_OBJECT_CLASS (nm_manager_parent_class)->finalize (object);
}
@@ -283,6 +273,7 @@ nm_manager_remove_device (NMManager *manager, NMDevice *device)
g_signal_handlers_disconnect_by_func (device, manager_device_state_changed, manager);
+ nm_device_bring_down (device, FALSE);
manager_device_removed (manager, device);
g_object_unref (device);
break;
diff --git a/test/Makefile.am b/test/Makefile.am
index f0024c4a22..8d3402abe3 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,6 +1,7 @@
SUBDIRS=test-common libnm-util
INCLUDES = -I${top_srcdir} \
+ -I${top_srcdir}/libnm-glib \
-I${top_srcdir}/gnome/libnm_glib \
-I${top_srcdir}/utils \
-I${top_srcdir}/include
@@ -23,7 +24,7 @@ noinst_PROGRAMS = nm-tool \
nm_tool_SOURCES = nm-tool.c
nm_tool_LDADD = $(DBUS_LIBS) $(GTHREAD_LIBS) $(HAL_LIBS) \
- $(top_builddir)/utils/libnmutils.la
+ $(top_builddir)/libnm-glib/libnm-glib.la
nm_online_SOURCES = nm-online.c
nm_online_LDADD = $(DBUS_LIBS) $(GTHREAD_LIBS) $(HAL_LIBS) \
diff --git a/test/nm-tool.c b/test/nm-tool.c
index bf60351a58..daca46cb30 100644
--- a/test/nm-tool.c
+++ b/test/nm-tool.c
@@ -28,68 +28,57 @@
#include <iwlib.h>
-#include "NetworkManager.h"
-#include "nm-utils.h"
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <nm-client.h>
+#include <nm-device.h>
+#include <nm-device-802-3-ethernet.h>
+#include <nm-device-802-11-wireless.h>
-static gboolean get_nm_state (DBusConnection *connection)
-{
- dbus_uint32_t uint32_state;
- char * state_string = NULL;
- gboolean success = TRUE;
- DBusMessage * message = NULL;
- DBusMessage * reply = NULL;
-
- if (!(message = dbus_message_new_method_call (NM_DBUS_SERVICE, NM_DBUS_PATH, NM_DBUS_INTERFACE, "state")))
- {
- fprintf (stderr, "get_nm_state(): couldn't create new dbus message.\n");
- return FALSE;
- }
- reply = dbus_connection_send_with_reply_and_block (connection, message, -1, NULL);
- dbus_message_unref (message);
- if (!reply)
- {
- fprintf (stderr, "get_nm_state(): didn't get a reply from NetworkManager.\n");
- return FALSE;
- }
- if (!dbus_message_get_args (reply, NULL, DBUS_TYPE_UINT32, &uint32_state, DBUS_TYPE_INVALID))
- {
- fprintf (stderr, "get_nm_state(): unexpected reply from NetworkManager.\n");
- return FALSE;
+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:
+ state_string = "connected";
+ break;
+
+ case NM_STATE_DISCONNECTED:
+ state_string = "disconnected";
+ break;
+
+ case NM_STATE_UNKNOWN:
+ default:
+ state_string = "unknown";
+ success = FALSE;
+ break;
}
- switch ((NMState) uint32_state)
- {
- case NM_STATE_ASLEEP:
- state_string = "asleep";
- break;
-
- case NM_STATE_CONNECTING:
- state_string = "connecting";
- break;
-
- case NM_STATE_CONNECTED:
- state_string = "connected";
- 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_string (const char *label, const char *data)
+static void
+print_string (const char *label, const char *data)
{
#define SPACING 18
int label_len = 0;
@@ -110,375 +99,256 @@ static void print_string (const char *label, const char *data)
}
-static void detail_network (DBusConnection *connection, const char *path, const char *active_path)
+static void
+detail_network (gpointer data, gpointer user_data)
{
- DBusMessage * message = NULL;
- DBusMessage * reply = NULL;
- const char * op = NULL;
- const char * essid = NULL;
- const char * hw_addr = NULL;
- dbus_int32_t strength = -1;
- double freq = 0;
- dbus_int32_t rate = 0;
- dbus_int32_t capabilities = NM_802_11_CAP_NONE;
- dbus_uint32_t mode = 0;
- gboolean broadcast = TRUE;
-
- g_return_if_fail (connection != NULL);
- g_return_if_fail (path != NULL);
-
- if (!(message = dbus_message_new_method_call (NM_DBUS_SERVICE, path, NM_DBUS_INTERFACE_DEVICE, "getProperties")))
- {
- fprintf (stderr, "detail_network(): couldn't create new dbus message.\n");
- return;
+ NMAccessPoint *ap = NM_ACCESS_POINT (data);
+ const char *active_bssid = (const char *) user_data;
+ GString *str;
+ gboolean active = FALSE;
+ guint32 capabilities;
+ char *essid;
+ char *tmp;
+
+ capabilities = nm_access_point_get_capabilities (ap);
+
+ if (active_bssid) {
+ char *current_bssid = nm_access_point_get_hw_address (ap);
+ if (current_bssid && !strcmp (current_bssid, active_bssid))
+ active = TRUE;
+
+ g_free (current_bssid);
}
- reply = dbus_connection_send_with_reply_and_block (connection, message, -1, NULL);
- dbus_message_unref (message);
- if (!reply)
- {
- fprintf (stderr, "detail_network(): didn't get a reply from NetworkManager for device %s.\n", path);
- return;
- }
+ str = g_string_new (NULL);
+ g_string_append_printf (str,
+ "%s Mode, Freq %.3f MHz, Rate %d Mb/s, Strength %d",
+ (nm_access_point_get_mode (ap) == IW_MODE_INFRA) ? "Infrastructure" : "Ad-Hoc",
+ nm_access_point_get_frequency (ap) / 1000000000,
+ nm_access_point_get_rate (ap) / 1024,
+ nm_access_point_get_strength (ap));
- if (dbus_message_get_args (reply, NULL, DBUS_TYPE_OBJECT_PATH, &op,
- DBUS_TYPE_STRING, &essid,
- DBUS_TYPE_STRING, &hw_addr,
- DBUS_TYPE_INT32, &strength,
- DBUS_TYPE_DOUBLE, &freq,
- DBUS_TYPE_INT32, &rate,
- DBUS_TYPE_INT32, &mode,
- DBUS_TYPE_INT32, &capabilities,
- DBUS_TYPE_BOOLEAN, &broadcast,
- DBUS_TYPE_INVALID))
- {
- char *temp = NULL;
- char *temp_essid = NULL;
- float flt_freq = freq / 1000000000;
- gboolean active = (active_path && !strcmp (active_path, path)) ? TRUE : FALSE;
- GString *enc_string = g_string_new (NULL);
-
- if (capabilities & NM_802_11_CAP_PROTO_WEP)
- enc_string = g_string_append (enc_string, "WEP");
- if (capabilities & NM_802_11_CAP_PROTO_WPA)
- {
- if (enc_string->str && (strlen (enc_string->str) > 0))
- enc_string = g_string_append_c (enc_string, ' ');
- enc_string = g_string_append (enc_string, "WPA");
- }
- if (capabilities & NM_802_11_CAP_PROTO_WPA2)
- {
- if (enc_string->str && (strlen (enc_string->str) > 0))
- enc_string = g_string_append_c (enc_string, ' ');
- enc_string = g_string_append (enc_string, "WPA2");
- }
- if (capabilities & NM_802_11_CAP_KEY_MGMT_802_1X)
- {
- if (enc_string->str && (strlen (enc_string->str) > 0))
- enc_string = g_string_append_c (enc_string, ' ');
- enc_string = g_string_append (enc_string, "Enterprise");
- }
- if (enc_string->str && (strlen (enc_string->str) > 0))
- {
- enc_string = g_string_prepend (enc_string, ", Encrypted (");
- enc_string = g_string_append (enc_string, ")");
- }
+ if (nm_access_point_is_encrypted (ap))
+ g_string_append (str, ", Encrypted: ");
- temp = g_strdup_printf ("%s Mode, Freq %.3f MHz, Rate %d Mb/s, Strength %d%%%s%s",
- (mode == IW_MODE_INFRA) ? "Infrastructure" : "Ad-Hoc",
- flt_freq,
- rate / 1024,
- strength,
- (enc_string && strlen (enc_string->str)) ? enc_string->str : "",
- !broadcast ? ", Hidden" : "");
- temp_essid = g_strdup_printf (" %s%s", active ? "*" : "", essid);
- print_string (temp_essid, temp);
- g_string_free (enc_string, TRUE);
- g_free (temp_essid);
- g_free (temp);
- }
- else
- fprintf (stderr, "detail_network(): unexpected reply from NetworkManager for device %s.\n", path);
+ if (capabilities & NM_802_11_CAP_PROTO_WEP)
+ g_string_append (str, " WEP");
+ if (capabilities & NM_802_11_CAP_PROTO_WPA)
+ g_string_append (str, " WPA");
+ if (capabilities & NM_802_11_CAP_PROTO_WPA2)
+ g_string_append (str, " WPA2");
+ if (capabilities & NM_802_11_CAP_KEY_MGMT_802_1X)
+ g_string_append (str, " Enterprise");
- dbus_message_unref (reply);
-}
+ /* FIXME: broadcast/hidden */
+ essid = nm_access_point_get_essid (ap);
+ tmp = g_strdup_printf (" %s%s", active ? "*" : "", essid);
+ g_free (essid);
-static char *
-get_driver_name (DBusConnection *connection, const char *path)
-{
- DBusMessage * message;
- DBusMessage * reply;
- char * driver = NULL;
- DBusError error;
+ print_string (tmp, str->str);
- g_return_val_if_fail (path != NULL, NULL);
+ g_string_free (str, TRUE);
+ g_free (tmp);
+}
- if (!(message = dbus_message_new_method_call (NM_DBUS_SERVICE, path, NM_DBUS_INTERFACE_DEVICE, "getDriver")))
- {
- nm_warning ("%s(): Couldn't allocate the dbus message", __func__);
- return NULL;
- }
+static gchar *
+ip4_address_as_string (guint32 ip)
+{
+ struct in_addr tmp_addr;
+ gchar *ip_string;
- dbus_error_init (&error);
- reply = dbus_connection_send_with_reply_and_block (connection, message, -1, &error);
- dbus_message_unref (message);
- if (dbus_error_is_set (&error))
- dbus_error_free (&error);
- else if (reply)
- {
- if (dbus_message_get_args (reply, NULL, DBUS_TYPE_STRING, &driver, DBUS_TYPE_INVALID))
- driver = g_strdup (driver);
- dbus_message_unref (reply);
- }
+ tmp_addr.s_addr = ip;
+ ip_string = inet_ntoa (tmp_addr);
- return driver;
+ return g_strdup (ip_string);
}
-
-static void detail_device (DBusConnection *connection, const char *path)
+static void
+detail_device (gpointer data, gpointer user_data)
{
- DBusMessage * message = NULL;
- DBusMessage * reply = NULL;
- char * op = NULL;
- const char * iface = NULL;
- dbus_uint32_t type = 0;
- const char * udi = NULL;
- dbus_bool_t active = FALSE;
- const char * ip4_address = NULL;
- const char * broadcast = NULL;
- const char * subnetmask = NULL;
- const char * hw_addr = NULL;
- const char * route = NULL;
- const char * primary_dns = NULL;
- const char * secondary_dns = NULL;
- dbus_uint32_t mode = 0;
- dbus_int32_t strength = -1;
- char * active_network_path = NULL;
- dbus_bool_t link_active = FALSE;
- dbus_int32_t speed = 0;
- dbus_uint32_t caps = NM_DEVICE_CAP_NONE;
- dbus_uint32_t type_caps = NM_DEVICE_CAP_NONE;
- char ** networks = NULL;
- int num_networks = 0;
- NMActStage act_stage = NM_ACT_STAGE_UNKNOWN;
-
- g_return_if_fail (connection != NULL);
- g_return_if_fail (path != NULL);
-
- if (!(message = dbus_message_new_method_call (NM_DBUS_SERVICE, path, NM_DBUS_INTERFACE_DEVICE, "getProperties")))
- {
- fprintf (stderr, "detail_device(): couldn't create new dbus message.\n");
- return;
+ NMDevice *device = NM_DEVICE (data);
+ char *tmp;
+ NMDeviceState state;
+ int caps;
+ int speed;
+ GArray *array;
+
+ state = nm_device_get_state (device);
+
+ tmp = nm_device_get_iface (device);
+ printf ("- Device: %s ----------------------------------------------------------------\n", tmp);
+ g_free (tmp);
+
+ /* General information */
+ if (NM_IS_DEVICE_802_3_ETHERNET (device))
+ print_string ("Type", "Wired");
+ else if (NM_IS_DEVICE_802_11_WIRELESS (device))
+ print_string ("Type", "802.11 Wireless");
+
+ tmp = nm_device_get_driver (device);
+ if (tmp) {
+ print_string ("Driver", tmp);
+ g_free (tmp);
+ } else
+ print_string ("Driver", "(unknown)");
+
+ if (state == NM_DEVICE_STATE_ACTIVATED)
+ print_string ("Active", "yes");
+ else
+ print_string ("Active", "no");
+
+ tmp = NULL;
+ if (NM_IS_DEVICE_802_3_ETHERNET (device))
+ tmp = nm_device_802_3_ethernet_get_hw_address (NM_DEVICE_802_3_ETHERNET (device));
+ else if (NM_IS_DEVICE_802_11_WIRELESS (device))
+ tmp = nm_device_802_11_wireless_get_hw_address (NM_DEVICE_802_11_WIRELESS (device));
+
+ if (tmp) {
+ print_string ("HW Address", tmp);
+ g_free (tmp);
}
- reply = dbus_connection_send_with_reply_and_block (connection, message, -1, NULL);
- dbus_message_unref (message);
- if (!reply)
- {
- fprintf (stderr, "detail_device(): didn't get a reply from NetworkManager for device %s.\n", path);
- return;
+ /* Capabilities */
+ caps = nm_device_get_capabilities (device);
+ printf ("\n Capabilities:\n");
+ if (caps & NM_DEVICE_CAP_NM_SUPPORTED)
+ print_string (" Supported", "yes");
+ else
+ print_string (" Supported", "no");
+ if (caps & NM_DEVICE_CAP_CARRIER_DETECT)
+ print_string (" Carrier Detect", "yes");
+
+ speed = 0;
+ if (NM_IS_DEVICE_802_3_ETHERNET (device))
+ speed = nm_device_802_3_ethernet_get_speed (NM_DEVICE_802_3_ETHERNET (device));
+ else if (NM_IS_DEVICE_802_11_WIRELESS (device))
+ speed = nm_device_802_11_wireless_get_bitrate (NM_DEVICE_802_11_WIRELESS (device));
+
+ if (speed) {
+ char *speed_string;
+
+ speed_string = g_strdup_printf ("%d Mb/s", speed);
+ print_string (" Speed", speed_string);
+ g_free (speed_string);
}
- if (dbus_message_get_args (reply, NULL, DBUS_TYPE_OBJECT_PATH, &op,
- DBUS_TYPE_STRING, &iface,
- DBUS_TYPE_UINT32, &type,
- DBUS_TYPE_STRING, &udi,
- DBUS_TYPE_BOOLEAN,&active,
- DBUS_TYPE_UINT32, &act_stage,
- DBUS_TYPE_STRING, &ip4_address,
- DBUS_TYPE_STRING, &subnetmask,
- DBUS_TYPE_STRING, &broadcast,
- DBUS_TYPE_STRING, &hw_addr,
- DBUS_TYPE_STRING, &route,
- DBUS_TYPE_STRING, &primary_dns,
- DBUS_TYPE_STRING, &secondary_dns,
- DBUS_TYPE_INT32, &mode,
- DBUS_TYPE_INT32, &strength,
- DBUS_TYPE_BOOLEAN,&link_active,
- DBUS_TYPE_INT32, &speed,
- DBUS_TYPE_UINT32, &caps,
- DBUS_TYPE_UINT32, &type_caps,
- DBUS_TYPE_STRING, &active_network_path,
- DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &networks, &num_networks,
- DBUS_TYPE_INVALID))
- {
- char * driver;
-
- printf ("- Device: %s ----------------------------------------------------------------\n", iface);
-
- /* General information */
- print_string ("NM Path", op);
- if (type == DEVICE_TYPE_802_11_WIRELESS)
- print_string ("Type", "802.11 Wireless");
- else if (type == DEVICE_TYPE_802_3_ETHERNET)
- print_string ("Type", "Wired");
-
- if ((driver = get_driver_name (connection, path)))
- print_string ("Driver", driver);
- else
- print_string ("Driver", "(unknown)");
-
- if (active)
- print_string ("Active", "yes");
+ /* Wireless specific information */
+ if ((NM_IS_DEVICE_802_11_WIRELESS (device))) {
+ guint32 wireless_caps;
+ NMAccessPoint *active_ap;
+ char *active_bssid;
+ GSList *networks;
+
+ printf ("\n Wireless Settings\n");
+
+ if (caps & NM_DEVICE_CAP_WIRELESS_SCAN)
+ print_string (" Scanning", "yes");
+
+ wireless_caps = nm_device_802_11_wireless_get_capabilities (NM_DEVICE_802_11_WIRELESS (device));
+
+ if (wireless_caps & NM_802_11_CAP_PROTO_WEP)
+ print_string (" WEP Encryption", "yes");
+ if (wireless_caps & NM_802_11_CAP_PROTO_WPA)
+ print_string (" WPA Encryption", "yes");
+ if (wireless_caps & NM_802_11_CAP_PROTO_WPA2)
+ print_string (" WPA2 Encryption", "yes");
+
+ active_ap = nm_device_802_11_wireless_get_active_network (NM_DEVICE_802_11_WIRELESS (device));
+ active_bssid = active_ap ? nm_access_point_get_hw_address (active_ap) : NULL;
+
+ printf ("\n Wireless Networks%s\n", active_ap ? "(* = Current Network)" : "");
+
+ networks = nm_device_802_11_wireless_get_networks (NM_DEVICE_802_11_WIRELESS (device));
+ g_slist_foreach (networks, detail_network, active_bssid);
+ g_free (active_bssid);
+ g_slist_free (networks);
+ } else if (NM_IS_DEVICE_802_3_ETHERNET (device)) {
+ printf ("\n Wired Settings\n");
+ /* FIXME */
+#if 0
+ if (link_active)
+ print_string (" Hardware Link", "yes");
else
- print_string ("Active", "no");
+ print_string (" Hardware Link", "no");
+#endif
+ }
- print_string ("HW Address", hw_addr);
+ /* IP Setup info */
+ if (state == NM_DEVICE_STATE_ACTIVATED) {
+ NMIP4Config *cfg = nm_device_get_ip4_config (device);
- /* Capabilities */
- printf ("\n Capabilities:\n");
- if (caps & NM_DEVICE_CAP_NM_SUPPORTED)
- print_string (" Supported", "yes");
- else
- print_string (" Supported", "no");
- if (caps & NM_DEVICE_CAP_CARRIER_DETECT)
- print_string (" Carrier Detect", "yes");
+ printf ("\n IP Settings:\n");
- if (speed)
- {
- char *speed_string;
+ tmp = ip4_address_as_string (nm_ip4_config_get_address (cfg));
+ print_string (" IP Address", tmp);
+ g_free (tmp);
- speed_string = g_strdup_printf ("%d Mb/s", speed);
- print_string (" Speed", speed_string);
- g_free (speed_string);
- }
+ tmp = ip4_address_as_string (nm_ip4_config_get_netmask (cfg));
+ print_string (" Subnet Mask", tmp);
+ g_free (tmp);
- /* Wireless specific information */
- if (type == DEVICE_TYPE_802_11_WIRELESS)
- {
- int i;
-
- printf ("\n Wireless Settings\n");
-
- if (caps & NM_DEVICE_CAP_WIRELESS_SCAN)
- print_string (" Scanning", "yes");
-
- if (type_caps & NM_802_11_CAP_PROTO_WEP)
- print_string (" WEP Encryption", "yes");
- if (type_caps & NM_802_11_CAP_PROTO_WPA)
- print_string (" WPA Encryption", "yes");
- if (type_caps & NM_802_11_CAP_PROTO_WPA2)
- print_string (" WPA2 Encryption", "yes");
-
- /*
- printf ("\n Wireless Settings\n");
- if (mode == IW_MODE_INFRA)
- print_string (" Mode", "Infrastructure");
- else if (mode == IW_MODE_ADHOC)
- print_string (" Mode", "Ad-Hoc");
- str_strength = g_strdup_printf ("%d%%", strength);
- print_string (" Strength", str_strength);
- g_free (str_strength);
- */
-
- printf ("\n Wireless Networks (* = Current Network)\n");
- for (i = 0; i < num_networks; i++)
- detail_network (connection, networks[i], active_network_path);
- }
- else if (type == DEVICE_TYPE_802_3_ETHERNET)
- {
- printf ("\n Wired Settings\n");
- if (link_active)
- print_string (" Hardware Link", "yes");
- else
- print_string (" Hardware Link", "no");
- }
+ tmp = ip4_address_as_string (nm_ip4_config_get_broadcast (cfg));
+ print_string (" Broadcast", tmp);
+ g_free (tmp);
- /* IP Setup info */
- if (active)
- {
- printf ("\n IP Settings:\n");
- print_string (" IP Address", ip4_address);
- print_string (" Subnet Mask", subnetmask);
- print_string (" Broadcast", broadcast);
- print_string (" Gateway", route);
- print_string (" Primary DNS", primary_dns);
- print_string (" Secondary DNS", secondary_dns);
- }
-
+ tmp = ip4_address_as_string (nm_ip4_config_get_gateway (cfg));
+ print_string (" Gateway", tmp);
+ g_free (tmp);
- printf ("\n\n");
- dbus_free_string_array (networks);
- }
- else
- fprintf (stderr, "detail_device(): unexpected reply from NetworkManager for device %s.\n", path);
+ array = nm_ip4_config_get_nameservers (cfg);
+ if (array) {
+ int i;
- dbus_message_unref (reply);
-}
+ 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);
+ }
+ g_array_free (array, TRUE);
+ }
-static void print_devices (DBusConnection *connection)
-{
- DBusMessage * message = NULL;
- DBusMessage * reply = NULL;
- DBusError error;
- char ** paths = NULL;
- int num = -1;
- int i;
-
- if (!(message = dbus_message_new_method_call (NM_DBUS_SERVICE, NM_DBUS_PATH, NM_DBUS_INTERFACE, "getDevices")))
- {
- fprintf (stderr, "print_devices(): couldn't create new dbus message.\n");
- return;
+ g_object_unref (cfg);
}
- dbus_error_init (&error);
- reply = dbus_connection_send_with_reply_and_block (connection, message, -1, &error);
- dbus_message_unref (message);
- if (!reply)
- {
- fprintf (stderr, "print_devices(): didn't get a reply from NetworkManager.\n");
- if (dbus_error_is_set (&error))
- {
- if (dbus_error_has_name (&error, NM_DBUS_NO_DEVICES_ERROR))
- fprintf (stderr, "There are no available network devices.\n");
- }
- else
- fprintf (stderr, "print_devices(): NetworkManager returned an error: '%s'\n", error.message);
- return;
- }
+ printf ("\n\n");
+}
- if (!dbus_message_get_args (reply, NULL, DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &paths, &num, DBUS_TYPE_INVALID))
- {
- fprintf (stderr, "print_devices(): unexpected reply from NetworkManager.\n");
- dbus_message_unref (reply);
- return;
- }
- for (i = 0; i < num; i++)
- detail_device (connection, paths[i]);
+static void
+print_devices (NMClient *client)
+{
+ GSList *devices;
- dbus_free_string_array (paths);
- dbus_message_unref (reply);
+ devices = nm_client_get_devices (client);
+ g_slist_foreach (devices, detail_device, NULL);
+ g_slist_free (devices);
}
-int main( int argc, char *argv[] )
+int
+main (int argc, char *argv[])
{
- DBusConnection *connection;
- DBusError error;
+ NMClient *client;
g_type_init ();
- dbus_error_init (&error);
- connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
- if (connection == NULL)
- {
- fprintf (stderr, "Error connecting to system bus: %s\n", error.message);
- dbus_error_free (&error);
- return 1;
+ client = nm_client_new ();
+ if (!client) {
+ exit (1);
}
printf ("\nNetworkManager Tool\n\n");
- if (!get_nm_state (connection))
- {
+ if (!get_nm_state (client)) {
fprintf (stderr, "\n\nNetworkManager appears not to be running (could not get its state).\n");
exit (1);
}
- print_devices (connection);
+ print_devices (client);
+
+ g_object_unref (client);
return 0;
}