2008-03-12 Dan Williams <dcbw@redhat.com>

Move the 'carrier' property from NMDevice to NMDevice8023Ethernet;
	convert the libnm-glib NMDevice8023Ethernet to cached properties

	* introspection/nm-device-802-3-ethernet.xml
		- New 'Carrier' property
		- New 'PropertiesChanged' signal

	* introspection/nm-device.xml
		- Remove 'Carrier' property
		- Remove 'CarrierChanged' signal

	* src/nm-device-interface.c
	  src/nm-device-interface.h
		- (nm_device_interface_init): remove 'carrier' property and
			'carrier-changed' signal

	* src/nm-device.c
	  src/nm-device.h
		- (nm_device_get_carrier, nm_device_set_carrier): remove
		- (nm_device_activate_stage5_ip_config_commit): don't bother updating
			the link here; wired device will handle that
		- (handle_dhcp_lease_change): don't bother updating link here
		- (get_property, nm_device_class_init): remove carrier property

	* src/nm-device-802-11-wireless.c
		- (real_update_link, nm_device_802_11_wireless_class_init): remove
			real_update_link(); wireless devices don't use carrier at all
		- (link_timeout_cb, supplicant_iface_state_cb_handler,
		   supplicant_iface_connection_state_cb_handler,
		   supplicant_mgr_state_cb_handler): remove anything to do with carrier

	* src/nm-device-802-3-ethernet.c
	  src/nm-device-802-3-ethernet.h
		- (nm_device_802_3_ethernet_carrier_on,
		   nm_device_802_3_ethernet_carrier_off, constructor): use set_carrier()
			instead of nm_device_set_carrier()
		- (device_state_changed): update link from sysfs on activation;
			replaces real_update_link()
		- (real_update_link): remove, replaced by device_state_changed()
		- (nm_device_802_3_ethernet_get_carrier, set_carrier): new functions
		- (nm_device_802_3_ethernet_get_speed): move up with other getters/setters
		- (real_get_generic_capabilities, real_can_interrupt_activation): use
			new get_carrier function
		- (get_property): add 'carrier' property
		- (nm_device_802_3_ethernet_class_init): add 'carrier' property and
			hook into property-changed signal helper

	* src/NetworkManagerPolicy.c
		- (device_carrier_changed): will only ever be called with a wired device
		- (device_added): only hook up to carrier-changed for wired devices

	* libnm-glib/nm-device.c
	  libnm-glib/nm-device.h
		- (constructor, nm_device_class_init): remove carrier-changed signal
		- (device_carrier_changed_proxy): remove; unused
		- (nm_device_get_carrier): remove; carrier a property of wired devices

	* libnm-glib/nm-device-802-3-ethernet.c
	  libnm-glib/nm-device-802-3-ethernet.h
		- Convert to cached properties like AP and Wireless objects
		- (nm_device_802_3_ethernet_get_hw_address): now returns a 'const char *'
			instead of a 'char *', return value should not be freed
		- (nm_device_802_3_ethernet_get_carrier): return current carrier status
		- (constructor): hook into properties-changed helper
		- (set_property, get_property): new functions
		- (nm_device_802_3_ethernet_class_init): export GObject properties

	* test/nm-tool.c
		- (detail_device): strdup the wired hardware address too since it's
			cached now

	* libnm-glib/libnm-glib-test.c
		- (dump_wired): strdup the wired hardware address too since it's
			cached now



git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3428 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
Dan Williams 2008-03-12 16:12:39 +00:00
parent 763913b200
commit f30cf17bf7
18 changed files with 492 additions and 295 deletions

View file

@ -1,3 +1,80 @@
2008-03-12 Dan Williams <dcbw@redhat.com>
Move the 'carrier' property from NMDevice to NMDevice8023Ethernet;
convert the libnm-glib NMDevice8023Ethernet to cached properties
* introspection/nm-device-802-3-ethernet.xml
- New 'Carrier' property
- New 'PropertiesChanged' signal
* introspection/nm-device.xml
- Remove 'Carrier' property
- Remove 'CarrierChanged' signal
* src/nm-device-interface.c
src/nm-device-interface.h
- (nm_device_interface_init): remove 'carrier' property and
'carrier-changed' signal
* src/nm-device.c
src/nm-device.h
- (nm_device_get_carrier, nm_device_set_carrier): remove
- (nm_device_activate_stage5_ip_config_commit): don't bother updating
the link here; wired device will handle that
- (handle_dhcp_lease_change): don't bother updating link here
- (get_property, nm_device_class_init): remove carrier property
* src/nm-device-802-11-wireless.c
- (real_update_link, nm_device_802_11_wireless_class_init): remove
real_update_link(); wireless devices don't use carrier at all
- (link_timeout_cb, supplicant_iface_state_cb_handler,
supplicant_iface_connection_state_cb_handler,
supplicant_mgr_state_cb_handler): remove anything to do with carrier
* src/nm-device-802-3-ethernet.c
src/nm-device-802-3-ethernet.h
- (nm_device_802_3_ethernet_carrier_on,
nm_device_802_3_ethernet_carrier_off, constructor): use set_carrier()
instead of nm_device_set_carrier()
- (device_state_changed): update link from sysfs on activation;
replaces real_update_link()
- (real_update_link): remove, replaced by device_state_changed()
- (nm_device_802_3_ethernet_get_carrier, set_carrier): new functions
- (nm_device_802_3_ethernet_get_speed): move up with other getters/setters
- (real_get_generic_capabilities, real_can_interrupt_activation): use
new get_carrier function
- (get_property): add 'carrier' property
- (nm_device_802_3_ethernet_class_init): add 'carrier' property and
hook into property-changed signal helper
* src/NetworkManagerPolicy.c
- (device_carrier_changed): will only ever be called with a wired device
- (device_added): only hook up to carrier-changed for wired devices
* libnm-glib/nm-device.c
libnm-glib/nm-device.h
- (constructor, nm_device_class_init): remove carrier-changed signal
- (device_carrier_changed_proxy): remove; unused
- (nm_device_get_carrier): remove; carrier a property of wired devices
* libnm-glib/nm-device-802-3-ethernet.c
libnm-glib/nm-device-802-3-ethernet.h
- Convert to cached properties like AP and Wireless objects
- (nm_device_802_3_ethernet_get_hw_address): now returns a 'const char *'
instead of a 'char *', return value should not be freed
- (nm_device_802_3_ethernet_get_carrier): return current carrier status
- (constructor): hook into properties-changed helper
- (set_property, get_property): new functions
- (nm_device_802_3_ethernet_class_init): export GObject properties
* test/nm-tool.c
- (detail_device): strdup the wired hardware address too since it's
cached now
* libnm-glib/libnm-glib-test.c
- (dump_wired): strdup the wired hardware address too since it's
cached now
2008-03-12 Dan Williams <dcbw@redhat.com>
* libnm-util/nm-setting-ip4-config.c

View file

@ -2,15 +2,32 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.Device.Wired">
<property name="HwAddress" type="s" access="read">
<tp:docstring>
Hardware address of the device.
</tp:docstring>
</property>
<property name="Speed" type="u" access="read">
<tp:docstring>
Design speed of the device.
</tp:docstring>
</property>
<property name="Carrier" type="b" access="read">
<tp:docstring>
Indicates whether the physical carrier is found (e.g. whether a cable is plugged in or not).
</tp:docstring>
</property>
<signal name="PropertiesChanged">
<arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
<tp:docstring>
A dictionary mapping property names to variant boxed values
</tp:docstring>
</arg>
</signal>
</interface>
</node>

View file

@ -44,11 +44,6 @@
Object path of the Ip4Config object describing the configuration of the device. Only valid when the device is in the NM_DEVICE_STATE_ACTIVATED state.
</tp:docstring>
</property>
<property name="Carrier" type="b" access="read">
<tp:docstring>
Indicates whether the physical carrier is found (e.g. the device is plugged in or associated to a network).
</tp:docstring>
</property>
<!-- Ugh, but I see no other way of getting the type on the caller
based on dbus object path only -->
@ -66,13 +61,6 @@
</arg>
</signal>
<signal name="CarrierChanged">
<arg name="carrier_on" type="b">
<tp:docstring>
Boolean indicating whether the carrier is now on or off.
</tp:docstring>
</arg>
</signal>
<tp:enum name="NM_DEVICE_STATE" type="u">
<tp:enumvalue suffix="UNKNOWN" value="0">
<tp:docstring>

View file

@ -172,13 +172,12 @@ dump_wireless (NMDevice80211Wireless *device)
static void
dump_wired (NMDevice8023Ethernet *device)
{
char *str;
const char *str;
g_print ("Speed: %d\n", nm_device_802_3_ethernet_get_speed (device));
str = nm_device_802_3_ethernet_get_hw_address (device);
g_print ("MAC: %s\n", str);
g_free (str);
}
static void

View file

@ -8,11 +8,124 @@ G_DEFINE_TYPE (NMDevice8023Ethernet, nm_device_802_3_ethernet, NM_TYPE_DEVICE)
#define NM_DEVICE_802_3_ETHERNET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_802_3_ETHERNET, NMDevice8023EthernetPrivate))
typedef struct {
DBusGProxy *ethernet_proxy;
DBusGProxy *wired_proxy;
char * hw_address;
guint32 speed;
gboolean carrier;
gboolean carrier_valid;
gboolean disposed;
} NMDevice8023EthernetPrivate;
enum {
PROP_0,
PROP_HW_ADDRESS,
PROP_SPEED,
PROP_CARRIER,
LAST_PROP
};
#define DBUS_PROP_HW_ADDRESS "HwAddress"
#define DBUS_PROP_SPEED "Speed"
#define DBUS_PROP_CARRIER "Carrier"
NMDevice8023Ethernet *
nm_device_802_3_ethernet_new (DBusGConnection *connection, const char *path)
{
g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (path != NULL, NULL);
return (NMDevice8023Ethernet *) g_object_new (NM_TYPE_DEVICE_802_3_ETHERNET,
NM_OBJECT_CONNECTION, connection,
NM_OBJECT_PATH, path,
NULL);
}
static void
nm_device_802_3_ethernet_set_hw_address (NMDevice8023Ethernet *self,
const char *address)
{
NMDevice8023EthernetPrivate *priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (self);
g_free (priv->hw_address);
priv->hw_address = g_strdup (address);
g_object_notify (G_OBJECT (self), NM_DEVICE_802_3_ETHERNET_HW_ADDRESS);
}
const char *
nm_device_802_3_ethernet_get_hw_address (NMDevice8023Ethernet *device)
{
NMDevice8023EthernetPrivate *priv;
g_return_val_if_fail (NM_IS_DEVICE_802_3_ETHERNET (device), NULL);
priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (device);
if (!priv->hw_address) {
priv->hw_address = nm_object_get_string_property (NM_OBJECT (device),
NM_DBUS_INTERFACE_DEVICE_WIRED,
DBUS_PROP_HW_ADDRESS);
}
return priv->hw_address;
}
static void
nm_device_802_3_ethernet_set_speed (NMDevice8023Ethernet *self, guint32 speed)
{
NMDevice8023EthernetPrivate *priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (self);
priv->speed = speed;
g_object_notify (G_OBJECT (self), NM_DEVICE_802_3_ETHERNET_SPEED);
}
guint32
nm_device_802_3_ethernet_get_speed (NMDevice8023Ethernet *device)
{
NMDevice8023EthernetPrivate *priv;
g_return_val_if_fail (NM_IS_DEVICE_802_3_ETHERNET (device), 0);
priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (device);
if (!priv->speed) {
priv->speed = nm_object_get_uint_property (NM_OBJECT (device),
NM_DBUS_INTERFACE_DEVICE_WIRED,
DBUS_PROP_SPEED);
}
return priv->speed;
}
static void
nm_device_802_3_ethernet_set_carrier (NMDevice8023Ethernet *self, gboolean carrier)
{
NMDevice8023EthernetPrivate *priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (self);
if (priv->carrier != carrier) {
priv->carrier_valid = TRUE;
priv->carrier = carrier;
g_object_notify (G_OBJECT (self), NM_DEVICE_802_3_ETHERNET_CARRIER);
}
}
gboolean
nm_device_802_3_ethernet_get_carrier (NMDevice8023Ethernet *device)
{
NMDevice8023EthernetPrivate *priv;
g_return_val_if_fail (NM_IS_DEVICE_802_3_ETHERNET (device), FALSE);
priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (device);
if (!priv->carrier_valid) {
priv->carrier = nm_object_get_boolean_property (NM_OBJECT (device),
NM_DBUS_INTERFACE_DEVICE_WIRED,
DBUS_PROP_CARRIER);
priv->carrier_valid = TRUE;
}
return priv->carrier;
}
static void
nm_device_802_3_ethernet_init (NMDevice8023Ethernet *device)
@ -20,6 +133,8 @@ nm_device_802_3_ethernet_init (NMDevice8023Ethernet *device)
NMDevice8023EthernetPrivate *priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (device);
priv->disposed = FALSE;
priv->carrier = FALSE;
priv->carrier_valid = FALSE;
}
static GObject*
@ -38,10 +153,13 @@ constructor (GType type,
priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (object);
priv->ethernet_proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
priv->wired_proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (NM_OBJECT (object)),
NM_DBUS_SERVICE,
nm_object_get_path (NM_OBJECT (object)),
NM_DBUS_INTERFACE_DEVICE_WIRED);
nm_object_handle_properties_changed (NM_OBJECT (object), priv->wired_proxy);
return object;
}
@ -57,11 +175,68 @@ dispose (GObject *object)
priv->disposed = TRUE;
g_object_unref (priv->ethernet_proxy);
g_object_unref (priv->wired_proxy);
G_OBJECT_CLASS (nm_device_802_3_ethernet_parent_class)->dispose (object);
}
static void
finalize (GObject *object)
{
NMDevice8023EthernetPrivate *priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (object);
if (priv->hw_address)
g_free (priv->hw_address);
G_OBJECT_CLASS (nm_device_802_3_ethernet_parent_class)->finalize (object);
}
static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMDevice8023Ethernet *device = NM_DEVICE_802_3_ETHERNET (object);
switch (prop_id) {
case PROP_HW_ADDRESS:
nm_device_802_3_ethernet_set_hw_address (device, g_value_get_string (value));
break;
case PROP_SPEED:
nm_device_802_3_ethernet_set_speed (device, g_value_get_uint (value));
break;
case PROP_CARRIER:
nm_device_802_3_ethernet_set_carrier (device, g_value_get_boolean (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
NMDevice8023EthernetPrivate *priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (object);
switch (prop_id) {
case PROP_HW_ADDRESS:
g_value_set_string (value, priv->hw_address);
break;
case PROP_SPEED:
g_value_set_uint (value, priv->speed);
break;
case PROP_CARRIER:
g_value_set_boolean (value, priv->carrier);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
nm_device_802_3_ethernet_class_init (NMDevice8023EthernetClass *device_class)
{
@ -72,32 +247,33 @@ nm_device_802_3_ethernet_class_init (NMDevice8023EthernetClass *device_class)
/* virtual methods */
object_class->constructor = constructor;
object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->set_property = set_property;
object_class->get_property = get_property;
/* properties */
g_object_class_install_property
(object_class, PROP_HW_ADDRESS,
g_param_spec_string (NM_DEVICE_802_3_ETHERNET_HW_ADDRESS,
"MAC Address",
"Hardware MAC address",
NULL,
G_PARAM_READWRITE));
g_object_class_install_property
(object_class, PROP_SPEED,
g_param_spec_uint (NM_DEVICE_802_3_ETHERNET_SPEED,
"Speed",
"Speed",
0, G_MAXUINT32, 0,
G_PARAM_READWRITE));
g_object_class_install_property
(object_class, PROP_CARRIER,
g_param_spec_boolean (NM_DEVICE_802_3_ETHERNET_CARRIER,
"Carrier",
"Carrier",
FALSE, G_PARAM_READWRITE));
}
NMDevice8023Ethernet *
nm_device_802_3_ethernet_new (DBusGConnection *connection, const char *path)
{
g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (path != NULL, NULL);
return (NMDevice8023Ethernet *) g_object_new (NM_TYPE_DEVICE_802_3_ETHERNET,
NM_OBJECT_CONNECTION, connection,
NM_OBJECT_PATH, path,
NULL);
}
guint32
nm_device_802_3_ethernet_get_speed (NMDevice8023Ethernet *device)
{
g_return_val_if_fail (NM_IS_DEVICE_802_3_ETHERNET (device), 0);
return nm_object_get_uint_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE_WIRED, "Speed");
}
char *
nm_device_802_3_ethernet_get_hw_address (NMDevice8023Ethernet *device)
{
g_return_val_if_fail (NM_IS_DEVICE_802_3_ETHERNET (device), NULL);
return nm_object_get_string_property (NM_OBJECT (device), NM_DBUS_INTERFACE_DEVICE_WIRED, "HwAddress");
}

View file

@ -12,6 +12,10 @@ G_BEGIN_DECLS
#define NM_IS_DEVICE_802_3_ETHERNET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_DEVICE_802_3_ETHERNET))
#define NM_DEVICE_802_3_ETHERNET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_802_3_ETHERNET, NMDevice8023EthernetClass))
#define NM_DEVICE_802_3_ETHERNET_HW_ADDRESS "hw-address"
#define NM_DEVICE_802_3_ETHERNET_SPEED "speed"
#define NM_DEVICE_802_3_ETHERNET_CARRIER "carrier"
typedef struct {
NMDevice parent;
} NMDevice8023Ethernet;
@ -24,8 +28,10 @@ GType nm_device_802_3_ethernet_get_type (void);
NMDevice8023Ethernet *nm_device_802_3_ethernet_new (DBusGConnection *connection,
const char *path);
guint32 nm_device_802_3_ethernet_get_speed (NMDevice8023Ethernet *device);
char *nm_device_802_3_ethernet_get_hw_address (NMDevice8023Ethernet *device);
const char * nm_device_802_3_ethernet_get_hw_address (NMDevice8023Ethernet *device);
guint32 nm_device_802_3_ethernet_get_speed (NMDevice8023Ethernet *device);
gboolean nm_device_802_3_ethernet_get_carrier (NMDevice8023Ethernet *device);
G_END_DECLS

View file

@ -14,15 +14,11 @@ typedef struct {
char *product;
char *vendor;
gboolean carrier;
gboolean carrier_valid;
gboolean disposed;
} NMDevicePrivate;
enum {
STATE_CHANGED,
CARRIER_CHANGED,
LAST_SIGNAL
};
@ -40,7 +36,6 @@ enum {
static void device_state_change_proxy (DBusGProxy *proxy, guint state, gpointer user_data);
static void device_carrier_changed_proxy (DBusGProxy *proxy, gboolean carrier, gpointer user_data);
static void
nm_device_init (NMDevice *device)
@ -48,8 +43,6 @@ nm_device_init (NMDevice *device)
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
priv->state = NM_DEVICE_STATE_UNKNOWN;
priv->carrier = FALSE;
priv->carrier_valid = FALSE;
priv->disposed = FALSE;
priv->product = NULL;
priv->vendor = NULL;
@ -81,10 +74,6 @@ constructor (GType type,
G_CALLBACK (device_state_change_proxy),
object, NULL);
dbus_g_proxy_add_signal (priv->device_proxy, "CarrierChanged", G_TYPE_BOOLEAN, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->device_proxy, "CarrierChanged",
G_CALLBACK (device_carrier_changed_proxy),
object, NULL);
return G_OBJECT (object);
}
@ -138,16 +127,6 @@ nm_device_class_init (NMDeviceClass *device_class)
g_cclosure_marshal_VOID__UINT,
G_TYPE_NONE, 1,
G_TYPE_UINT);
signals[CARRIER_CHANGED] =
g_signal_new ("carrier-changed",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDeviceClass, carrier_changed),
NULL, NULL,
g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE, 1,
G_TYPE_BOOLEAN);
}
static void
@ -162,19 +141,6 @@ device_state_change_proxy (DBusGProxy *proxy, guint state, gpointer user_data)
}
}
static void
device_carrier_changed_proxy (DBusGProxy *proxy, gboolean carrier, gpointer user_data)
{
NMDevice *device = NM_DEVICE (user_data);
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
if ((priv->carrier != carrier) || !priv->carrier_valid) {
priv->carrier_valid = TRUE;
priv->carrier = carrier;
g_signal_emit (device, signals[CARRIER_CHANGED], 0, carrier);
}
}
NMDevice *
nm_device_new (DBusGConnection *connection, const char *path)
{
@ -438,24 +404,6 @@ nm_device_get_vendor (NMDevice *device)
return priv->vendor;
}
gboolean
nm_device_get_carrier (NMDevice *device)
{
NMDevicePrivate *priv;
g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
priv = NM_DEVICE_GET_PRIVATE (device);
if (!priv->carrier_valid) {
priv->carrier = nm_object_get_boolean_property (NM_OBJECT (device),
NM_DBUS_INTERFACE_DEVICE, "Carrier");
priv->carrier_valid = TRUE;
}
return priv->carrier;
}
NMDeviceType
nm_device_type_for_path (DBusGConnection *connection,
const char *path)

View file

@ -27,7 +27,6 @@ typedef struct {
/* Signals */
void (*state_changed) (NMDevice *device, NMDeviceState state);
void (*carrier_changed) (NMDevice *device, gboolean carrier);
} NMDeviceClass;
GType nm_device_get_type (void);
@ -46,7 +45,6 @@ NMIP4Config *nm_device_get_ip4_config (NMDevice *device);
NMDeviceState nm_device_get_state (NMDevice *device);
const char *nm_device_get_product (NMDevice *device);
const char *nm_device_get_vendor (NMDevice *device);
gboolean nm_device_get_carrier (NMDevice *device);
NMDeviceType nm_device_type_for_path (DBusGConnection *connection,
const char *path);

View file

@ -308,18 +308,24 @@ device_state_changed (NMDevice *device, NMDeviceState state, gpointer user_data)
}
static void
device_carrier_changed (NMDevice *device, gboolean carrier, gpointer user_data)
device_carrier_changed (NMDevice8023Ethernet *device,
GParamSpec *pspec,
gpointer user_data)
{
if (!carrier) {
if (NM_IS_DEVICE_802_3_ETHERNET (device))
nm_device_interface_deactivate (NM_DEVICE_INTERFACE (device));
} else {
schedule_activate_check ((NMPolicy *) user_data, device);
}
const char *prop = g_param_spec_get_name (pspec);
g_return_if_fail (strcmp (prop, NM_DEVICE_802_3_ETHERNET_CARRIER) == 0);
if (!nm_device_802_3_ethernet_get_carrier (device))
nm_device_interface_deactivate (NM_DEVICE_INTERFACE (device));
else
schedule_activate_check ((NMPolicy *) user_data, NM_DEVICE (device));
}
static void
device_ip4_config_changed (NMDevice *device, NMIP4Config *config, gpointer user_data)
device_ip4_config_changed (NMDevice *device,
GParamSpec *pspec,
gpointer user_data)
{
update_routing_and_dns ((NMPolicy *) user_data, TRUE);
}
@ -360,11 +366,6 @@ device_added (NMManager *manager, NMDevice *device, gpointer user_data)
policy);
policy->dev_signal_ids = add_device_signal_id (policy->dev_signal_ids, id, device);
id = g_signal_connect (device, "carrier-changed",
G_CALLBACK (device_carrier_changed),
policy);
policy->dev_signal_ids = add_device_signal_id (policy->dev_signal_ids, id, device);
id = g_signal_connect (device, "notify::" NM_DEVICE_INTERFACE_IP4_CONFIG,
G_CALLBACK (device_ip4_config_changed),
policy);
@ -382,6 +383,13 @@ device_added (NMManager *manager, NMDevice *device, gpointer user_data)
policy->dev_signal_ids = add_device_signal_id (policy->dev_signal_ids, id, device);
}
if (NM_IS_DEVICE_802_3_ETHERNET (device)) {
id = g_signal_connect (device, "notify::" NM_DEVICE_802_3_ETHERNET_CARRIER,
G_CALLBACK (device_carrier_changed),
policy);
policy->dev_signal_ids = add_device_signal_id (policy->dev_signal_ids, id, device);
}
schedule_activate_check (policy, device);
}

View file

@ -519,35 +519,6 @@ init_supplicant_interface (NMDevice80211Wireless * self)
}
}
static void
real_update_link (NMDevice *dev)
{
NMDevice80211Wireless * self = NM_DEVICE_802_11_WIRELESS (dev);
gboolean new_link = FALSE;
guint32 state;
/* Ignore link changes when scanning */
if (self->priv->scanning)
return;
if (!self->priv->supplicant.iface)
goto out;
state = nm_supplicant_interface_get_state (self->priv->supplicant.iface);
if (state != NM_SUPPLICANT_INTERFACE_STATE_READY)
goto out;
state = nm_supplicant_interface_get_connection_state (self->priv->supplicant.iface);
if ( state == NM_SUPPLICANT_INTERFACE_CON_STATE_COMPLETED
|| state == NM_SUPPLICANT_INTERFACE_CON_STATE_ASSOCIATED
|| state == NM_SUPPLICANT_INTERFACE_CON_STATE_4WAY_HANDSHAKE
|| state == NM_SUPPLICANT_INTERFACE_CON_STATE_GROUP_HANDSHAKE)
new_link = TRUE;
out:
nm_device_set_carrier (NM_DEVICE (self), new_link);
}
static NMAccessPoint *
get_active_ap (NMDevice80211Wireless *self,
NMAccessPoint *ignore_ap,
@ -1886,7 +1857,6 @@ link_timeout_cb (gpointer user_data)
ap = nm_device_802_11_wireless_get_activation_ap (self);
if (req == NULL || ap == NULL) {
nm_warning ("couldn't get activation request or activation AP.");
nm_device_set_carrier (dev, FALSE);
if (nm_device_is_activating (dev)) {
cleanup_association_attempt (self, TRUE);
nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED);
@ -1937,7 +1907,6 @@ link_timeout_cb (gpointer user_data)
time_out:
nm_info ("%s: link timed out.", nm_device_get_iface (dev));
nm_device_set_carrier (dev, FALSE);
return FALSE;
}
@ -2005,7 +1974,6 @@ supplicant_iface_state_cb_handler (gpointer user_data)
cancel_pending_scan (self);
cleanup_association_attempt (self, FALSE);
cleanup_supplicant_interface (self);
nm_device_set_carrier (NM_DEVICE (self), FALSE);
}
g_slice_free (struct state_cb_data, cb_data);
@ -2054,7 +2022,6 @@ supplicant_iface_connection_state_cb_handler (gpointer user_data)
if (new_state == NM_SUPPLICANT_INTERFACE_CON_STATE_COMPLETED) {
remove_supplicant_interface_connection_error_handler (self);
remove_supplicant_timeouts (self);
nm_device_set_carrier (dev, TRUE);
/* If this is the initial association during device activation,
* schedule the next activation stage.
@ -2074,8 +2041,6 @@ supplicant_iface_connection_state_cb_handler (gpointer user_data)
/* Start the link timeout so we allow some time for reauthentication */
if (!self->priv->link_timeout_id)
self->priv->link_timeout_id = g_timeout_add (15000, link_timeout_cb, self);
} else {
nm_device_set_carrier (dev, FALSE);
}
}
@ -2173,8 +2138,6 @@ supplicant_mgr_state_cb_handler (gpointer user_data)
cleanup_association_attempt (self, FALSE);
cleanup_supplicant_interface (self);
nm_device_set_carrier (NM_DEVICE (self), FALSE);
if (nm_device_is_activating (dev)) {
nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED);
}
@ -3081,7 +3044,6 @@ nm_device_802_11_wireless_class_init (NMDevice80211WirelessClass *klass)
parent_class->is_up = real_is_up;
parent_class->bring_up = real_bring_up;
parent_class->bring_down = real_bring_down;
parent_class->update_link = real_update_link;
parent_class->set_hw_address = real_set_hw_address;
parent_class->get_best_auto_connection = real_get_best_auto_connection;
parent_class->can_activate = real_can_activate;

View file

@ -27,6 +27,8 @@
#include <string.h>
#include <net/ethernet.h>
#include <stdlib.h>
#include <linux/sockios.h>
#include <linux/ethtool.h>
#include "nm-device-802-3-ethernet.h"
#include "nm-device-interface.h"
@ -42,6 +44,7 @@
#include "nm-setting-pppoe.h"
#include "ppp-manager/nm-ppp-manager.h"
#include "nm-utils.h"
#include "nm-properties-changed-signal.h"
#include "nm-device-802-3-ethernet-glue.h"
@ -54,6 +57,8 @@ typedef struct {
gboolean dispose_has_run;
struct ether_addr hw_addr;
gboolean carrier;
char * carrier_file_path;
gulong link_connected_id;
gulong link_disconnected_id;
@ -66,15 +71,25 @@ typedef struct {
NMIP4Config *pending_ip4_config;
} NMDevice8023EthernetPrivate;
enum {
PROPERTIES_CHANGED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
enum {
PROP_0,
PROP_HW_ADDRESS,
PROP_SPEED,
PROP_CARRIER,
LAST_PROP
};
static guint32 nm_device_802_3_ethernet_get_speed (NMDevice8023Ethernet *self);
static void set_carrier (NMDevice8023Ethernet *self, const gboolean carrier);
static gboolean supports_mii_carrier_detect (NMDevice8023Ethernet *dev);
static gboolean supports_ethtool_carrier_detect (NMDevice8023Ethernet *dev);
@ -100,7 +115,7 @@ nm_device_802_3_ethernet_carrier_on (NMNetlinkMonitor *monitor,
if (!(caps & NM_DEVICE_CAP_CARRIER_DETECT))
return;
nm_device_set_carrier (dev, TRUE);
set_carrier (NM_DEVICE_802_3_ETHERNET (dev), TRUE);
}
}
@ -119,10 +134,35 @@ nm_device_802_3_ethernet_carrier_off (NMNetlinkMonitor *monitor,
if (!(caps & NM_DEVICE_CAP_CARRIER_DETECT))
return;
nm_device_set_carrier (dev, FALSE);
set_carrier (NM_DEVICE_802_3_ETHERNET (dev), FALSE);
}
}
static void
device_state_changed (NMDeviceInterface *device, NMDeviceState state, gpointer user_data)
{
NMDevice8023Ethernet *self = NM_DEVICE_802_3_ETHERNET (user_data);
NMDevice8023EthernetPrivate *priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (self);
gboolean carrier = FALSE;
guint32 caps;
gchar *contents;
if (state != NM_DEVICE_STATE_ACTIVATED)
return;
/* Devices that don't support carrier detect are always "on" */
caps = nm_device_get_capabilities (NM_DEVICE (self));
if (!(caps & NM_DEVICE_CAP_CARRIER_DETECT))
return;
if (g_file_get_contents (priv->carrier_file_path, &contents, NULL, NULL)) {
carrier = atoi (contents) > 0 ? TRUE : FALSE;
g_free (contents);
}
set_carrier (self, carrier);
}
static GObject*
constructor (GType type,
guint n_construct_params,
@ -161,9 +201,11 @@ constructor (GType type,
} else {
priv->link_connected_id = 0;
priv->link_disconnected_id = 0;
nm_device_set_carrier (dev, TRUE);
set_carrier (NM_DEVICE_802_3_ETHERNET (dev), TRUE);
}
g_signal_connect (dev, "state-changed", G_CALLBACK (device_state_changed), dev);
return object;
}
@ -175,38 +217,11 @@ nm_device_802_3_ethernet_init (NMDevice8023Ethernet * self)
priv->dispose_has_run = FALSE;
memset (&(priv->hw_addr), 0, sizeof (struct ether_addr));
priv->carrier = FALSE;
nm_device_set_device_type (NM_DEVICE (self), DEVICE_TYPE_802_3_ETHERNET);
}
static void
real_update_link (NMDevice *dev)
{
NMDevice8023EthernetPrivate *priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (dev);
gboolean carrier = FALSE;
guint32 caps;
gchar * contents;
gsize length;
/* Devices that don't support carrier detect are always "on" and
* must be manually chosen by the user.
*/
caps = nm_device_get_capabilities (dev);
if (!(caps & NM_DEVICE_CAP_CARRIER_DETECT)) {
carrier = TRUE;
goto out;
}
if (g_file_get_contents (priv->carrier_file_path, &contents, &length, NULL)) {
carrier = atoi (contents) > 0 ? TRUE : FALSE;
g_free (contents);
}
out:
nm_device_set_carrier (dev, carrier);
}
static gboolean
real_is_up (NMDevice *device)
{
@ -298,6 +313,63 @@ nm_device_802_3_ethernet_get_address (NMDevice8023Ethernet *self, struct ether_a
memcpy (addr, &(NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (self)->hw_addr), sizeof (struct ether_addr));
}
/*
* Get/set functions for carrier
*/
gboolean
nm_device_802_3_ethernet_get_carrier (NMDevice8023Ethernet *self)
{
g_return_val_if_fail (self != NULL, FALSE);
return NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (self)->carrier;
}
static void
set_carrier (NMDevice8023Ethernet *self, const gboolean carrier)
{
NMDevice8023EthernetPrivate *priv;
g_return_if_fail (NM_IS_DEVICE (self));
priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (self);
if (priv->carrier != carrier) {
priv->carrier = carrier;
g_object_notify (G_OBJECT (self), NM_DEVICE_802_3_ETHERNET_CARRIER);
}
}
/* Returns speed in Mb/s */
static guint32
nm_device_802_3_ethernet_get_speed (NMDevice8023Ethernet *self)
{
NMSock * sk;
struct ifreq ifr;
struct ethtool_cmd edata;
const char * iface;
guint32 speed = 0;
g_return_val_if_fail (self != NULL, FALSE);
iface = nm_device_get_iface (NM_DEVICE (self));
if ((sk = nm_dev_sock_open (iface, DEV_GENERAL, __func__, NULL)) == NULL)
{
nm_warning ("cannot open socket on interface %s for ethtool: %s",
iface, strerror (errno));
return FALSE;
}
strncpy (ifr.ifr_name, iface, sizeof (ifr.ifr_name) - 1);
edata.cmd = ETHTOOL_GSET;
ifr.ifr_data = (char *) &edata;
if (ioctl (nm_dev_sock_get_fd (sk), SIOCETHTOOL, &ifr) == -1)
goto out;
speed = edata.speed != G_MAXUINT16 ? edata.speed : 0;
out:
nm_dev_sock_close (sk);
return speed;
}
static void
real_set_hw_address (NMDevice *dev)
@ -342,15 +414,15 @@ real_get_generic_capabilities (NMDevice *dev)
static gboolean
real_can_interrupt_activation (NMDevice *dev)
{
NMDevice8023Ethernet *self = NM_DEVICE_802_3_ETHERNET (dev);
gboolean interrupt = FALSE;
/* Devices that support carrier detect can interrupt activation
* if the link becomes inactive.
*/
if (nm_device_get_capabilities (dev) & NM_DEVICE_CAP_CARRIER_DETECT) {
if (nm_device_get_carrier (dev) == FALSE) {
if (nm_device_802_3_ethernet_get_carrier (self) == FALSE)
interrupt = TRUE;
}
}
return interrupt;
}
@ -358,8 +430,10 @@ real_can_interrupt_activation (NMDevice *dev)
static gboolean
real_can_activate (NMDevice *dev, gboolean wireless_enabled)
{
NMDevice8023Ethernet *self = NM_DEVICE_802_3_ETHERNET (dev);
/* Can't do anything if there isn't a carrier */
if (!nm_device_get_carrier (dev))
if (!nm_device_802_3_ethernet_get_carrier (self))
return FALSE;
return TRUE;
@ -641,6 +715,9 @@ get_property (GObject *object, guint prop_id,
case PROP_SPEED:
g_value_set_uint (value, nm_device_802_3_ethernet_get_speed (device));
break;
case PROP_CARRIER:
g_value_set_boolean (value, nm_device_802_3_ethernet_get_carrier (device));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@ -666,7 +743,6 @@ nm_device_802_3_ethernet_class_init (NMDevice8023EthernetClass *klass)
parent_class->is_up = real_is_up;
parent_class->bring_up = real_bring_up;
parent_class->bring_down = real_bring_down;
parent_class->update_link = real_update_link;
parent_class->can_interrupt_activation = real_can_interrupt_activation;
parent_class->set_hw_address = real_set_hw_address;
parent_class->get_best_auto_connection = real_get_best_auto_connection;
@ -694,6 +770,19 @@ nm_device_802_3_ethernet_class_init (NMDevice8023EthernetClass *klass)
0, G_MAXUINT32, 0,
G_PARAM_READABLE));
g_object_class_install_property
(object_class, PROP_CARRIER,
g_param_spec_boolean (NM_DEVICE_802_3_ETHERNET_CARRIER,
"Carrier",
"Carrier",
FALSE,
G_PARAM_READABLE));
/* Signals */
signals[PROPERTIES_CHANGED] =
nm_properties_changed_signal_new (object_class,
G_STRUCT_OFFSET (NMDevice8023EthernetClass, properties_changed));
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
&dbus_glib_nm_device_802_3_ethernet_object_info);
}
@ -721,8 +810,6 @@ supplicant_iface_state_cb (NMSupplicantInterface * iface,
/**************************************/
/* Ethtool capability detection */
/**************************************/
#include <linux/sockios.h>
#include <linux/ethtool.h>
static gboolean
supports_ethtool_carrier_detect (NMDevice8023Ethernet *self)
@ -760,40 +847,6 @@ out:
}
/* Returns speed in Mb/s */
static guint32
nm_device_802_3_ethernet_get_speed (NMDevice8023Ethernet *self)
{
NMSock * sk;
struct ifreq ifr;
struct ethtool_cmd edata;
const char * iface;
guint32 speed = 0;
g_return_val_if_fail (self != NULL, FALSE);
iface = nm_device_get_iface (NM_DEVICE (self));
if ((sk = nm_dev_sock_open (iface, DEV_GENERAL, __func__, NULL)) == NULL)
{
nm_warning ("cannot open socket on interface %s for ethtool: %s",
iface, strerror (errno));
return FALSE;
}
strncpy (ifr.ifr_name, iface, sizeof (ifr.ifr_name) - 1);
edata.cmd = ETHTOOL_GSET;
ifr.ifr_data = (char *) &edata;
if (ioctl (nm_dev_sock_get_fd (sk), SIOCETHTOOL, &ifr) == -1)
goto out;
speed = edata.speed != G_MAXUINT16 ? edata.speed : 0;
out:
nm_dev_sock_close (sk);
return speed;
}
/**************************************/
/* MII capability detection */
/**************************************/

View file

@ -40,6 +40,7 @@ G_BEGIN_DECLS
#define NM_DEVICE_802_3_ETHERNET_HW_ADDRESS "hw-address"
#define NM_DEVICE_802_3_ETHERNET_SPEED "speed"
#define NM_DEVICE_802_3_ETHERNET_CARRIER "carrier"
typedef struct {
NMDevice parent;
@ -47,6 +48,9 @@ typedef struct {
typedef struct {
NMDeviceClass parent;
/* Signals */
void (*properties_changed) (NMDevice8023Ethernet *device, GHashTable *properties);
} NMDevice8023EthernetClass;
@ -60,6 +64,8 @@ NMDevice8023Ethernet *nm_device_802_3_ethernet_new (const char *udi,
void nm_device_802_3_ethernet_get_address (NMDevice8023Ethernet *dev,
struct ether_addr *addr);
gboolean nm_device_802_3_ethernet_get_carrier (NMDevice8023Ethernet *dev);
G_END_DECLS
#endif /* NM_DEVICE_802_3_ETHERNET_H */

View file

@ -113,14 +113,6 @@ nm_device_interface_init (gpointer g_iface)
0, G_MAXUINT32, DEVICE_TYPE_UNKNOWN,
G_PARAM_READABLE));
g_object_interface_install_property
(g_iface,
g_param_spec_boolean (NM_DEVICE_INTERFACE_CARRIER,
"Carrier",
"Carrier",
FALSE,
G_PARAM_READABLE));
/* Signals */
g_signal_new ("state-changed",
iface_type,
@ -131,15 +123,6 @@ nm_device_interface_init (gpointer g_iface)
G_TYPE_NONE, 1,
G_TYPE_UINT);
g_signal_new ("carrier-changed",
iface_type,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDeviceInterface, carrier_changed),
NULL, NULL,
g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE, 1,
G_TYPE_BOOLEAN);
dbus_g_object_type_install_info (iface_type,
&dbus_glib_nm_device_interface_object_info);

View file

@ -29,7 +29,6 @@ typedef enum
#define NM_DEVICE_INTERFACE_IP4_CONFIG "ip4-config"
#define NM_DEVICE_INTERFACE_STATE "state"
#define NM_DEVICE_INTERFACE_DEVICE_TYPE "device-type" /* ugh */
#define NM_DEVICE_INTERFACE_CARRIER "carrier"
typedef enum {
NM_DEVICE_INTERFACE_PROP_FIRST = 0x1000,
@ -42,7 +41,6 @@ typedef enum {
NM_DEVICE_INTERFACE_PROP_IP4_CONFIG,
NM_DEVICE_INTERFACE_PROP_STATE,
NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE,
NM_DEVICE_INTERFACE_PROP_CARRIER
} NMDeviceInterfaceProp;
@ -64,7 +62,6 @@ struct _NMDeviceInterface {
/* Signals */
void (*state_changed) (NMDeviceInterface *device, NMDeviceState state);
void (*carrier_changed) (NMDeviceInterface *device, gboolean carrier_on);
};
GQuark nm_device_interface_error_quark (void);

View file

@ -66,7 +66,6 @@ struct _NMDevicePrivate
guint32 capabilities;
char * driver;
gboolean carrier;
guint32 ip4_address;
struct in6_addr ip6_address;
@ -123,7 +122,6 @@ nm_device_init (NMDevice * self)
self->priv->capabilities = NM_DEVICE_CAP_NONE;
self->priv->driver = NULL;
self->priv->carrier = FALSE;
self->priv->ip4_address = 0;
memset (&self->priv->ip6_address, 0, sizeof (struct in6_addr));
@ -346,33 +344,6 @@ nm_device_get_act_request (NMDevice *self)
}
/*
* Get/set functions for carrier
*/
gboolean
nm_device_get_carrier (NMDevice *self)
{
g_return_val_if_fail (self != NULL, FALSE);
return self->priv->carrier;
}
void
nm_device_set_carrier (NMDevice *self,
const gboolean carrier)
{
NMDevicePrivate *priv;
g_return_if_fail (NM_IS_DEVICE (self));
priv = NM_DEVICE_GET_PRIVATE (self);
if (priv->carrier != carrier) {
priv->carrier = carrier;
g_signal_emit_by_name (self, "carrier-changed", carrier);
}
}
gboolean
nm_device_can_activate (NMDevice *self, gboolean wireless_enabled)
{
@ -918,14 +889,10 @@ nm_device_activate_stage5_ip_config_commit (gpointer user_data)
nm_info ("Activation (%s) Stage 5 of 5 (IP Configure Commit) started...",
iface);
if (nm_device_set_ip4_config (self, ip4_config)) {
if (NM_DEVICE_GET_CLASS (self)->update_link)
NM_DEVICE_GET_CLASS (self)->update_link (self);
if (nm_device_set_ip4_config (self, ip4_config))
nm_device_state_changed (self, NM_DEVICE_STATE_ACTIVATED);
} else {
else
nm_device_state_changed (self, NM_DEVICE_STATE_FAILED);
}
nm_info ("Activation (%s) Stage 5 of 5 (IP Configure Commit) complete.",
iface);
@ -1276,10 +1243,7 @@ handle_dhcp_lease_change (NMDevice *device)
g_object_set_data (G_OBJECT (req), NM_ACT_REQUEST_IP4_CONFIG, config);
if (nm_device_set_ip4_config (device, config)) {
if (NM_DEVICE_GET_CLASS (device)->update_link)
NM_DEVICE_GET_CLASS (device)->update_link (device);
} else {
if (!nm_device_set_ip4_config (device, config)) {
nm_warning ("Failed to update IP4 config in response to DHCP event.");
nm_device_state_changed (device, NM_DEVICE_STATE_FAILED);
}
@ -1724,9 +1688,6 @@ get_property (GObject *object, guint prop_id,
case NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE:
g_value_set_uint (value, priv->type);
break;
case NM_DEVICE_INTERFACE_PROP_CARRIER:
g_value_set_boolean (value, priv->carrier);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@ -1791,10 +1752,6 @@ nm_device_class_init (NMDeviceClass *klass)
g_object_class_override_property (object_class,
NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE,
NM_DEVICE_INTERFACE_DEVICE_TYPE);
g_object_class_override_property (object_class,
NM_DEVICE_INTERFACE_PROP_CARRIER,
NM_DEVICE_INTERFACE_CARRIER);
}
void

View file

@ -79,8 +79,6 @@ struct _NMDeviceClass
{
GObjectClass parent;
void (* update_link) (NMDevice *self);
gboolean (* is_up) (NMDevice *self);
gboolean (* bring_up) (NMDevice *self);
void (* bring_down) (NMDevice *self);
@ -131,9 +129,6 @@ NMDeviceType nm_device_get_device_type (NMDevice *dev);
guint32 nm_device_get_capabilities (NMDevice *dev);
guint32 nm_device_get_type_capabilities (NMDevice *dev);
gboolean nm_device_get_carrier (NMDevice *dev);
void nm_device_set_carrier (NMDevice *dev, const gboolean carrier);
guint32 nm_device_get_ip4_address (NMDevice *dev);
void nm_device_update_ip4_address (NMDevice *dev);
struct in6_addr * nm_device_get_ip6_address (NMDevice *dev);

View file

@ -1,5 +1,8 @@
/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
#include <string.h>
#include <stdio.h>
#include <dbus/dbus-glib.h>
#include "nm-properties-changed-signal.h"
@ -44,6 +47,22 @@ properties_changed_info_destroy (gpointer data)
g_slice_free (PropertiesChangedInfo, info);
}
#define DEBUG
#ifdef DEBUG
static void
add_to_string (gpointer key, gpointer value, gpointer user_data)
{
char *buf = (char *) user_data;
GValue str_val = { 0, };
g_value_init (&str_val, G_TYPE_STRING);
g_value_transform ((GValue *) value, &str_val);
sprintf (buf + strlen (buf), "{%s: %s}, ", (const char *) key, g_value_get_string (&str_val));
g_value_unset (&str_val);
}
#endif
static gboolean
properties_changed (gpointer data)
{
@ -52,6 +71,14 @@ properties_changed (gpointer data)
g_assert (info);
#ifdef DEBUG
{
char buf[2048] = { 0, };
g_hash_table_foreach (info->hash, add_to_string, &buf);
g_message ("%s: %s -> %s", __func__, G_OBJECT_TYPE_NAME (object), buf);
}
#endif
g_signal_emit (object, info->signal_id, 0, info->hash);
g_hash_table_remove_all (info->hash);

View file

@ -205,7 +205,7 @@ detail_device (gpointer data, gpointer user_data)
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));
tmp = g_strdup (nm_device_802_3_ethernet_get_hw_address (NM_DEVICE_802_3_ETHERNET (device)));
else if (NM_IS_DEVICE_802_11_WIRELESS (device))
tmp = g_strdup (nm_device_802_11_wireless_get_hw_address (NM_DEVICE_802_11_WIRELESS (device)));