From f30cf17bf72ca883ef31d4c31250ccc0af56623c Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 12 Mar 2008 16:12:39 +0000 Subject: [PATCH] 2008-03-12 Dan Williams 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 --- ChangeLog | 77 +++++++ introspection/nm-device-802-3-ethernet.xml | 17 ++ introspection/nm-device.xml | 12 -- libnm-glib/libnm-glib-test.c | 3 +- libnm-glib/nm-device-802-3-ethernet.c | 236 ++++++++++++++++++--- libnm-glib/nm-device-802-3-ethernet.h | 10 +- libnm-glib/nm-device.c | 52 ----- libnm-glib/nm-device.h | 2 - src/NetworkManagerPolicy.c | 34 +-- src/nm-device-802-11-wireless.c | 38 ---- src/nm-device-802-3-ethernet.c | 197 ++++++++++------- src/nm-device-802-3-ethernet.h | 6 + src/nm-device-interface.c | 17 -- src/nm-device-interface.h | 3 - src/nm-device.c | 49 +---- src/nm-device.h | 5 - src/nm-properties-changed-signal.c | 27 +++ test/nm-tool.c | 2 +- 18 files changed, 492 insertions(+), 295 deletions(-) diff --git a/ChangeLog b/ChangeLog index b264227c5..7537c3ef9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,80 @@ +2008-03-12 Dan Williams + + 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 * libnm-util/nm-setting-ip4-config.c diff --git a/introspection/nm-device-802-3-ethernet.xml b/introspection/nm-device-802-3-ethernet.xml index 7cd23fee3..cccae99b8 100644 --- a/introspection/nm-device-802-3-ethernet.xml +++ b/introspection/nm-device-802-3-ethernet.xml @@ -2,15 +2,32 @@ + Hardware address of the device. + Design speed of the device. + + + + Indicates whether the physical carrier is found (e.g. whether a cable is plugged in or not). + + + + + + + A dictionary mapping property names to variant boxed values + + + + diff --git a/introspection/nm-device.xml b/introspection/nm-device.xml index 531262894..ecf1ec846 100644 --- a/introspection/nm-device.xml +++ b/introspection/nm-device.xml @@ -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. - - - Indicates whether the physical carrier is found (e.g. the device is plugged in or associated to a network). - - @@ -66,13 +61,6 @@ - - - - Boolean indicating whether the carrier is now on or off. - - - diff --git a/libnm-glib/libnm-glib-test.c b/libnm-glib/libnm-glib-test.c index 603a6f1e4..db4833012 100644 --- a/libnm-glib/libnm-glib-test.c +++ b/libnm-glib/libnm-glib-test.c @@ -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 diff --git a/libnm-glib/nm-device-802-3-ethernet.c b/libnm-glib/nm-device-802-3-ethernet.c index 4c5e66c97..213b8f35f 100644 --- a/libnm-glib/nm-device-802-3-ethernet.c +++ b/libnm-glib/nm-device-802-3-ethernet.c @@ -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"); -} diff --git a/libnm-glib/nm-device-802-3-ethernet.h b/libnm-glib/nm-device-802-3-ethernet.h index 9b5a82272..0bbb03f3f 100644 --- a/libnm-glib/nm-device-802-3-ethernet.h +++ b/libnm-glib/nm-device-802-3-ethernet.h @@ -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 diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c index f057cc0e2..c69ba2acf 100644 --- a/libnm-glib/nm-device.c +++ b/libnm-glib/nm-device.c @@ -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) diff --git a/libnm-glib/nm-device.h b/libnm-glib/nm-device.h index 121994278..0e3e76e81 100644 --- a/libnm-glib/nm-device.h +++ b/libnm-glib/nm-device.h @@ -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); diff --git a/src/NetworkManagerPolicy.c b/src/NetworkManagerPolicy.c index f17e921aa..b22490a98 100644 --- a/src/NetworkManagerPolicy.c +++ b/src/NetworkManagerPolicy.c @@ -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); } diff --git a/src/nm-device-802-11-wireless.c b/src/nm-device-802-11-wireless.c index 7115ef7e5..b92843fda 100644 --- a/src/nm-device-802-11-wireless.c +++ b/src/nm-device-802-11-wireless.c @@ -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; diff --git a/src/nm-device-802-3-ethernet.c b/src/nm-device-802-3-ethernet.c index 961458e66..35d51a36a 100644 --- a/src/nm-device-802-3-ethernet.c +++ b/src/nm-device-802-3-ethernet.c @@ -27,6 +27,8 @@ #include #include #include +#include +#include #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 -#include 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 */ /**************************************/ diff --git a/src/nm-device-802-3-ethernet.h b/src/nm-device-802-3-ethernet.h index 45734bc49..99fefb1fa 100644 --- a/src/nm-device-802-3-ethernet.h +++ b/src/nm-device-802-3-ethernet.h @@ -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 */ diff --git a/src/nm-device-interface.c b/src/nm-device-interface.c index 74c36343e..19cea3f8e 100644 --- a/src/nm-device-interface.c +++ b/src/nm-device-interface.c @@ -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); diff --git a/src/nm-device-interface.h b/src/nm-device-interface.h index 74aa1e6f8..0ccda1997 100644 --- a/src/nm-device-interface.h +++ b/src/nm-device-interface.h @@ -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); diff --git a/src/nm-device.c b/src/nm-device.c index 3b0d93a82..1b72f93a9 100644 --- a/src/nm-device.c +++ b/src/nm-device.c @@ -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 diff --git a/src/nm-device.h b/src/nm-device.h index 6bd8e250f..ce34c40b8 100644 --- a/src/nm-device.h +++ b/src/nm-device.h @@ -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); diff --git a/src/nm-properties-changed-signal.c b/src/nm-properties-changed-signal.c index 1c7498d60..da07fca07 100644 --- a/src/nm-properties-changed-signal.c +++ b/src/nm-properties-changed-signal.c @@ -1,5 +1,8 @@ /* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */ +#include +#include + #include #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); diff --git a/test/nm-tool.c b/test/nm-tool.c index 511e90851..5d2ecbd51 100644 --- a/test/nm-tool.c +++ b/test/nm-tool.c @@ -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)));