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:
77
ChangeLog
77
ChangeLog
@@ -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>
|
2008-03-12 Dan Williams <dcbw@redhat.com>
|
||||||
|
|
||||||
* libnm-util/nm-setting-ip4-config.c
|
* libnm-util/nm-setting-ip4-config.c
|
||||||
|
@@ -2,15 +2,32 @@
|
|||||||
|
|
||||||
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
|
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
|
||||||
<interface name="org.freedesktop.NetworkManager.Device.Wired">
|
<interface name="org.freedesktop.NetworkManager.Device.Wired">
|
||||||
|
|
||||||
<property name="HwAddress" type="s" access="read">
|
<property name="HwAddress" type="s" access="read">
|
||||||
<tp:docstring>
|
<tp:docstring>
|
||||||
Hardware address of the device.
|
Hardware address of the device.
|
||||||
</tp:docstring>
|
</tp:docstring>
|
||||||
</property>
|
</property>
|
||||||
|
|
||||||
<property name="Speed" type="u" access="read">
|
<property name="Speed" type="u" access="read">
|
||||||
<tp:docstring>
|
<tp:docstring>
|
||||||
Design speed of the device.
|
Design speed of the device.
|
||||||
</tp:docstring>
|
</tp:docstring>
|
||||||
</property>
|
</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>
|
</interface>
|
||||||
</node>
|
</node>
|
||||||
|
@@ -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.
|
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>
|
</tp:docstring>
|
||||||
</property>
|
</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
|
<!-- Ugh, but I see no other way of getting the type on the caller
|
||||||
based on dbus object path only -->
|
based on dbus object path only -->
|
||||||
@@ -66,13 +61,6 @@
|
|||||||
</arg>
|
</arg>
|
||||||
</signal>
|
</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:enum name="NM_DEVICE_STATE" type="u">
|
||||||
<tp:enumvalue suffix="UNKNOWN" value="0">
|
<tp:enumvalue suffix="UNKNOWN" value="0">
|
||||||
<tp:docstring>
|
<tp:docstring>
|
||||||
|
@@ -172,13 +172,12 @@ dump_wireless (NMDevice80211Wireless *device)
|
|||||||
static void
|
static void
|
||||||
dump_wired (NMDevice8023Ethernet *device)
|
dump_wired (NMDevice8023Ethernet *device)
|
||||||
{
|
{
|
||||||
char *str;
|
const char *str;
|
||||||
|
|
||||||
g_print ("Speed: %d\n", nm_device_802_3_ethernet_get_speed (device));
|
g_print ("Speed: %d\n", nm_device_802_3_ethernet_get_speed (device));
|
||||||
|
|
||||||
str = nm_device_802_3_ethernet_get_hw_address (device);
|
str = nm_device_802_3_ethernet_get_hw_address (device);
|
||||||
g_print ("MAC: %s\n", str);
|
g_print ("MAC: %s\n", str);
|
||||||
g_free (str);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -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))
|
#define NM_DEVICE_802_3_ETHERNET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_802_3_ETHERNET, NMDevice8023EthernetPrivate))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
DBusGProxy *ethernet_proxy;
|
DBusGProxy *wired_proxy;
|
||||||
|
|
||||||
|
char * hw_address;
|
||||||
|
guint32 speed;
|
||||||
|
gboolean carrier;
|
||||||
|
gboolean carrier_valid;
|
||||||
|
|
||||||
gboolean disposed;
|
gboolean disposed;
|
||||||
} NMDevice8023EthernetPrivate;
|
} 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
|
static void
|
||||||
nm_device_802_3_ethernet_init (NMDevice8023Ethernet *device)
|
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);
|
NMDevice8023EthernetPrivate *priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (device);
|
||||||
|
|
||||||
priv->disposed = FALSE;
|
priv->disposed = FALSE;
|
||||||
|
priv->carrier = FALSE;
|
||||||
|
priv->carrier_valid = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GObject*
|
static GObject*
|
||||||
@@ -38,10 +153,13 @@ constructor (GType type,
|
|||||||
|
|
||||||
priv = NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (object);
|
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_DBUS_SERVICE,
|
||||||
nm_object_get_path (NM_OBJECT (object)),
|
nm_object_get_path (NM_OBJECT (object)),
|
||||||
NM_DBUS_INTERFACE_DEVICE_WIRED);
|
NM_DBUS_INTERFACE_DEVICE_WIRED);
|
||||||
|
|
||||||
|
nm_object_handle_properties_changed (NM_OBJECT (object), priv->wired_proxy);
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,11 +175,68 @@ dispose (GObject *object)
|
|||||||
|
|
||||||
priv->disposed = TRUE;
|
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);
|
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
|
static void
|
||||||
nm_device_802_3_ethernet_class_init (NMDevice8023EthernetClass *device_class)
|
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 */
|
/* virtual methods */
|
||||||
object_class->constructor = constructor;
|
object_class->constructor = constructor;
|
||||||
object_class->dispose = dispose;
|
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");
|
|
||||||
}
|
|
||||||
|
@@ -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_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_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 {
|
typedef struct {
|
||||||
NMDevice parent;
|
NMDevice parent;
|
||||||
} NMDevice8023Ethernet;
|
} NMDevice8023Ethernet;
|
||||||
@@ -24,8 +28,10 @@ GType nm_device_802_3_ethernet_get_type (void);
|
|||||||
|
|
||||||
NMDevice8023Ethernet *nm_device_802_3_ethernet_new (DBusGConnection *connection,
|
NMDevice8023Ethernet *nm_device_802_3_ethernet_new (DBusGConnection *connection,
|
||||||
const char *path);
|
const char *path);
|
||||||
|
|
||||||
|
const char * nm_device_802_3_ethernet_get_hw_address (NMDevice8023Ethernet *device);
|
||||||
guint32 nm_device_802_3_ethernet_get_speed (NMDevice8023Ethernet *device);
|
guint32 nm_device_802_3_ethernet_get_speed (NMDevice8023Ethernet *device);
|
||||||
char *nm_device_802_3_ethernet_get_hw_address (NMDevice8023Ethernet *device);
|
gboolean nm_device_802_3_ethernet_get_carrier (NMDevice8023Ethernet *device);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@@ -14,15 +14,11 @@ typedef struct {
|
|||||||
char *product;
|
char *product;
|
||||||
char *vendor;
|
char *vendor;
|
||||||
|
|
||||||
gboolean carrier;
|
|
||||||
gboolean carrier_valid;
|
|
||||||
|
|
||||||
gboolean disposed;
|
gboolean disposed;
|
||||||
} NMDevicePrivate;
|
} NMDevicePrivate;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
STATE_CHANGED,
|
STATE_CHANGED,
|
||||||
CARRIER_CHANGED,
|
|
||||||
|
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
@@ -40,7 +36,6 @@ enum {
|
|||||||
|
|
||||||
|
|
||||||
static void device_state_change_proxy (DBusGProxy *proxy, guint state, gpointer user_data);
|
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
|
static void
|
||||||
nm_device_init (NMDevice *device)
|
nm_device_init (NMDevice *device)
|
||||||
@@ -48,8 +43,6 @@ nm_device_init (NMDevice *device)
|
|||||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
|
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
|
||||||
|
|
||||||
priv->state = NM_DEVICE_STATE_UNKNOWN;
|
priv->state = NM_DEVICE_STATE_UNKNOWN;
|
||||||
priv->carrier = FALSE;
|
|
||||||
priv->carrier_valid = FALSE;
|
|
||||||
priv->disposed = FALSE;
|
priv->disposed = FALSE;
|
||||||
priv->product = NULL;
|
priv->product = NULL;
|
||||||
priv->vendor = NULL;
|
priv->vendor = NULL;
|
||||||
@@ -81,10 +74,6 @@ constructor (GType type,
|
|||||||
G_CALLBACK (device_state_change_proxy),
|
G_CALLBACK (device_state_change_proxy),
|
||||||
object, NULL);
|
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);
|
return G_OBJECT (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,16 +127,6 @@ nm_device_class_init (NMDeviceClass *device_class)
|
|||||||
g_cclosure_marshal_VOID__UINT,
|
g_cclosure_marshal_VOID__UINT,
|
||||||
G_TYPE_NONE, 1,
|
G_TYPE_NONE, 1,
|
||||||
G_TYPE_UINT);
|
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
|
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 *
|
NMDevice *
|
||||||
nm_device_new (DBusGConnection *connection, const char *path)
|
nm_device_new (DBusGConnection *connection, const char *path)
|
||||||
{
|
{
|
||||||
@@ -438,24 +404,6 @@ nm_device_get_vendor (NMDevice *device)
|
|||||||
return priv->vendor;
|
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
|
NMDeviceType
|
||||||
nm_device_type_for_path (DBusGConnection *connection,
|
nm_device_type_for_path (DBusGConnection *connection,
|
||||||
const char *path)
|
const char *path)
|
||||||
|
@@ -27,7 +27,6 @@ typedef struct {
|
|||||||
|
|
||||||
/* Signals */
|
/* Signals */
|
||||||
void (*state_changed) (NMDevice *device, NMDeviceState state);
|
void (*state_changed) (NMDevice *device, NMDeviceState state);
|
||||||
void (*carrier_changed) (NMDevice *device, gboolean carrier);
|
|
||||||
} NMDeviceClass;
|
} NMDeviceClass;
|
||||||
|
|
||||||
GType nm_device_get_type (void);
|
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);
|
NMDeviceState nm_device_get_state (NMDevice *device);
|
||||||
const char *nm_device_get_product (NMDevice *device);
|
const char *nm_device_get_product (NMDevice *device);
|
||||||
const char *nm_device_get_vendor (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,
|
NMDeviceType nm_device_type_for_path (DBusGConnection *connection,
|
||||||
const char *path);
|
const char *path);
|
||||||
|
@@ -308,18 +308,24 @@ device_state_changed (NMDevice *device, NMDeviceState state, gpointer user_data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
device_carrier_changed (NMDevice *device, gboolean carrier, gpointer user_data)
|
device_carrier_changed (NMDevice8023Ethernet *device,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
if (!carrier) {
|
const char *prop = g_param_spec_get_name (pspec);
|
||||||
if (NM_IS_DEVICE_802_3_ETHERNET (device))
|
|
||||||
|
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));
|
nm_device_interface_deactivate (NM_DEVICE_INTERFACE (device));
|
||||||
} else {
|
else
|
||||||
schedule_activate_check ((NMPolicy *) user_data, device);
|
schedule_activate_check ((NMPolicy *) user_data, NM_DEVICE (device));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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);
|
update_routing_and_dns ((NMPolicy *) user_data, TRUE);
|
||||||
}
|
}
|
||||||
@@ -360,11 +366,6 @@ device_added (NMManager *manager, NMDevice *device, gpointer user_data)
|
|||||||
policy);
|
policy);
|
||||||
policy->dev_signal_ids = add_device_signal_id (policy->dev_signal_ids, id, device);
|
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,
|
id = g_signal_connect (device, "notify::" NM_DEVICE_INTERFACE_IP4_CONFIG,
|
||||||
G_CALLBACK (device_ip4_config_changed),
|
G_CALLBACK (device_ip4_config_changed),
|
||||||
policy);
|
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);
|
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);
|
schedule_activate_check (policy, device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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 *
|
static NMAccessPoint *
|
||||||
get_active_ap (NMDevice80211Wireless *self,
|
get_active_ap (NMDevice80211Wireless *self,
|
||||||
NMAccessPoint *ignore_ap,
|
NMAccessPoint *ignore_ap,
|
||||||
@@ -1886,7 +1857,6 @@ link_timeout_cb (gpointer user_data)
|
|||||||
ap = nm_device_802_11_wireless_get_activation_ap (self);
|
ap = nm_device_802_11_wireless_get_activation_ap (self);
|
||||||
if (req == NULL || ap == NULL) {
|
if (req == NULL || ap == NULL) {
|
||||||
nm_warning ("couldn't get activation request or activation AP.");
|
nm_warning ("couldn't get activation request or activation AP.");
|
||||||
nm_device_set_carrier (dev, FALSE);
|
|
||||||
if (nm_device_is_activating (dev)) {
|
if (nm_device_is_activating (dev)) {
|
||||||
cleanup_association_attempt (self, TRUE);
|
cleanup_association_attempt (self, TRUE);
|
||||||
nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED);
|
nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED);
|
||||||
@@ -1937,7 +1907,6 @@ link_timeout_cb (gpointer user_data)
|
|||||||
|
|
||||||
time_out:
|
time_out:
|
||||||
nm_info ("%s: link timed out.", nm_device_get_iface (dev));
|
nm_info ("%s: link timed out.", nm_device_get_iface (dev));
|
||||||
nm_device_set_carrier (dev, FALSE);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2005,7 +1974,6 @@ supplicant_iface_state_cb_handler (gpointer user_data)
|
|||||||
cancel_pending_scan (self);
|
cancel_pending_scan (self);
|
||||||
cleanup_association_attempt (self, FALSE);
|
cleanup_association_attempt (self, FALSE);
|
||||||
cleanup_supplicant_interface (self);
|
cleanup_supplicant_interface (self);
|
||||||
nm_device_set_carrier (NM_DEVICE (self), FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_slice_free (struct state_cb_data, cb_data);
|
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) {
|
if (new_state == NM_SUPPLICANT_INTERFACE_CON_STATE_COMPLETED) {
|
||||||
remove_supplicant_interface_connection_error_handler (self);
|
remove_supplicant_interface_connection_error_handler (self);
|
||||||
remove_supplicant_timeouts (self);
|
remove_supplicant_timeouts (self);
|
||||||
nm_device_set_carrier (dev, TRUE);
|
|
||||||
|
|
||||||
/* If this is the initial association during device activation,
|
/* If this is the initial association during device activation,
|
||||||
* schedule the next activation stage.
|
* 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 */
|
/* Start the link timeout so we allow some time for reauthentication */
|
||||||
if (!self->priv->link_timeout_id)
|
if (!self->priv->link_timeout_id)
|
||||||
self->priv->link_timeout_id = g_timeout_add (15000, link_timeout_cb, self);
|
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_association_attempt (self, FALSE);
|
||||||
cleanup_supplicant_interface (self);
|
cleanup_supplicant_interface (self);
|
||||||
|
|
||||||
nm_device_set_carrier (NM_DEVICE (self), FALSE);
|
|
||||||
|
|
||||||
if (nm_device_is_activating (dev)) {
|
if (nm_device_is_activating (dev)) {
|
||||||
nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED);
|
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->is_up = real_is_up;
|
||||||
parent_class->bring_up = real_bring_up;
|
parent_class->bring_up = real_bring_up;
|
||||||
parent_class->bring_down = real_bring_down;
|
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->set_hw_address = real_set_hw_address;
|
||||||
parent_class->get_best_auto_connection = real_get_best_auto_connection;
|
parent_class->get_best_auto_connection = real_get_best_auto_connection;
|
||||||
parent_class->can_activate = real_can_activate;
|
parent_class->can_activate = real_can_activate;
|
||||||
|
@@ -27,6 +27,8 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <net/ethernet.h>
|
#include <net/ethernet.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <linux/sockios.h>
|
||||||
|
#include <linux/ethtool.h>
|
||||||
|
|
||||||
#include "nm-device-802-3-ethernet.h"
|
#include "nm-device-802-3-ethernet.h"
|
||||||
#include "nm-device-interface.h"
|
#include "nm-device-interface.h"
|
||||||
@@ -42,6 +44,7 @@
|
|||||||
#include "nm-setting-pppoe.h"
|
#include "nm-setting-pppoe.h"
|
||||||
#include "ppp-manager/nm-ppp-manager.h"
|
#include "ppp-manager/nm-ppp-manager.h"
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
|
#include "nm-properties-changed-signal.h"
|
||||||
|
|
||||||
#include "nm-device-802-3-ethernet-glue.h"
|
#include "nm-device-802-3-ethernet-glue.h"
|
||||||
|
|
||||||
@@ -54,6 +57,8 @@ typedef struct {
|
|||||||
gboolean dispose_has_run;
|
gboolean dispose_has_run;
|
||||||
|
|
||||||
struct ether_addr hw_addr;
|
struct ether_addr hw_addr;
|
||||||
|
gboolean carrier;
|
||||||
|
|
||||||
char * carrier_file_path;
|
char * carrier_file_path;
|
||||||
gulong link_connected_id;
|
gulong link_connected_id;
|
||||||
gulong link_disconnected_id;
|
gulong link_disconnected_id;
|
||||||
@@ -66,15 +71,25 @@ typedef struct {
|
|||||||
NMIP4Config *pending_ip4_config;
|
NMIP4Config *pending_ip4_config;
|
||||||
} NMDevice8023EthernetPrivate;
|
} NMDevice8023EthernetPrivate;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PROPERTIES_CHANGED,
|
||||||
|
|
||||||
|
LAST_SIGNAL
|
||||||
|
};
|
||||||
|
|
||||||
|
static guint signals[LAST_SIGNAL] = { 0 };
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_HW_ADDRESS,
|
PROP_HW_ADDRESS,
|
||||||
PROP_SPEED,
|
PROP_SPEED,
|
||||||
|
PROP_CARRIER,
|
||||||
|
|
||||||
LAST_PROP
|
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_mii_carrier_detect (NMDevice8023Ethernet *dev);
|
||||||
static gboolean supports_ethtool_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))
|
if (!(caps & NM_DEVICE_CAP_CARRIER_DETECT))
|
||||||
return;
|
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))
|
if (!(caps & NM_DEVICE_CAP_CARRIER_DETECT))
|
||||||
return;
|
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*
|
static GObject*
|
||||||
constructor (GType type,
|
constructor (GType type,
|
||||||
guint n_construct_params,
|
guint n_construct_params,
|
||||||
@@ -161,9 +201,11 @@ constructor (GType type,
|
|||||||
} else {
|
} else {
|
||||||
priv->link_connected_id = 0;
|
priv->link_connected_id = 0;
|
||||||
priv->link_disconnected_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;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,38 +217,11 @@ nm_device_802_3_ethernet_init (NMDevice8023Ethernet * self)
|
|||||||
priv->dispose_has_run = FALSE;
|
priv->dispose_has_run = FALSE;
|
||||||
|
|
||||||
memset (&(priv->hw_addr), 0, sizeof (struct ether_addr));
|
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);
|
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
|
static gboolean
|
||||||
real_is_up (NMDevice *device)
|
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));
|
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
|
static void
|
||||||
real_set_hw_address (NMDevice *dev)
|
real_set_hw_address (NMDevice *dev)
|
||||||
@@ -342,24 +414,26 @@ real_get_generic_capabilities (NMDevice *dev)
|
|||||||
static gboolean
|
static gboolean
|
||||||
real_can_interrupt_activation (NMDevice *dev)
|
real_can_interrupt_activation (NMDevice *dev)
|
||||||
{
|
{
|
||||||
|
NMDevice8023Ethernet *self = NM_DEVICE_802_3_ETHERNET (dev);
|
||||||
gboolean interrupt = FALSE;
|
gboolean interrupt = FALSE;
|
||||||
|
|
||||||
/* Devices that support carrier detect can interrupt activation
|
/* Devices that support carrier detect can interrupt activation
|
||||||
* if the link becomes inactive.
|
* if the link becomes inactive.
|
||||||
*/
|
*/
|
||||||
if (nm_device_get_capabilities (dev) & NM_DEVICE_CAP_CARRIER_DETECT) {
|
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;
|
interrupt = TRUE;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return interrupt;
|
return interrupt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
real_can_activate (NMDevice *dev, gboolean wireless_enabled)
|
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 */
|
/* 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 FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -641,6 +715,9 @@ get_property (GObject *object, guint prop_id,
|
|||||||
case PROP_SPEED:
|
case PROP_SPEED:
|
||||||
g_value_set_uint (value, nm_device_802_3_ethernet_get_speed (device));
|
g_value_set_uint (value, nm_device_802_3_ethernet_get_speed (device));
|
||||||
break;
|
break;
|
||||||
|
case PROP_CARRIER:
|
||||||
|
g_value_set_boolean (value, nm_device_802_3_ethernet_get_carrier (device));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -666,7 +743,6 @@ nm_device_802_3_ethernet_class_init (NMDevice8023EthernetClass *klass)
|
|||||||
parent_class->is_up = real_is_up;
|
parent_class->is_up = real_is_up;
|
||||||
parent_class->bring_up = real_bring_up;
|
parent_class->bring_up = real_bring_up;
|
||||||
parent_class->bring_down = real_bring_down;
|
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->can_interrupt_activation = real_can_interrupt_activation;
|
||||||
parent_class->set_hw_address = real_set_hw_address;
|
parent_class->set_hw_address = real_set_hw_address;
|
||||||
parent_class->get_best_auto_connection = real_get_best_auto_connection;
|
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,
|
0, G_MAXUINT32, 0,
|
||||||
G_PARAM_READABLE));
|
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_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
|
||||||
&dbus_glib_nm_device_802_3_ethernet_object_info);
|
&dbus_glib_nm_device_802_3_ethernet_object_info);
|
||||||
}
|
}
|
||||||
@@ -721,8 +810,6 @@ supplicant_iface_state_cb (NMSupplicantInterface * iface,
|
|||||||
/**************************************/
|
/**************************************/
|
||||||
/* Ethtool capability detection */
|
/* Ethtool capability detection */
|
||||||
/**************************************/
|
/**************************************/
|
||||||
#include <linux/sockios.h>
|
|
||||||
#include <linux/ethtool.h>
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
supports_ethtool_carrier_detect (NMDevice8023Ethernet *self)
|
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 */
|
/* MII capability detection */
|
||||||
/**************************************/
|
/**************************************/
|
||||||
|
@@ -40,6 +40,7 @@ G_BEGIN_DECLS
|
|||||||
|
|
||||||
#define NM_DEVICE_802_3_ETHERNET_HW_ADDRESS "hw-address"
|
#define NM_DEVICE_802_3_ETHERNET_HW_ADDRESS "hw-address"
|
||||||
#define NM_DEVICE_802_3_ETHERNET_SPEED "speed"
|
#define NM_DEVICE_802_3_ETHERNET_SPEED "speed"
|
||||||
|
#define NM_DEVICE_802_3_ETHERNET_CARRIER "carrier"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
NMDevice parent;
|
NMDevice parent;
|
||||||
@@ -47,6 +48,9 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
NMDeviceClass parent;
|
NMDeviceClass parent;
|
||||||
|
|
||||||
|
/* Signals */
|
||||||
|
void (*properties_changed) (NMDevice8023Ethernet *device, GHashTable *properties);
|
||||||
} NMDevice8023EthernetClass;
|
} 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,
|
void nm_device_802_3_ethernet_get_address (NMDevice8023Ethernet *dev,
|
||||||
struct ether_addr *addr);
|
struct ether_addr *addr);
|
||||||
|
|
||||||
|
gboolean nm_device_802_3_ethernet_get_carrier (NMDevice8023Ethernet *dev);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* NM_DEVICE_802_3_ETHERNET_H */
|
#endif /* NM_DEVICE_802_3_ETHERNET_H */
|
||||||
|
@@ -113,14 +113,6 @@ nm_device_interface_init (gpointer g_iface)
|
|||||||
0, G_MAXUINT32, DEVICE_TYPE_UNKNOWN,
|
0, G_MAXUINT32, DEVICE_TYPE_UNKNOWN,
|
||||||
G_PARAM_READABLE));
|
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 */
|
/* Signals */
|
||||||
g_signal_new ("state-changed",
|
g_signal_new ("state-changed",
|
||||||
iface_type,
|
iface_type,
|
||||||
@@ -131,15 +123,6 @@ nm_device_interface_init (gpointer g_iface)
|
|||||||
G_TYPE_NONE, 1,
|
G_TYPE_NONE, 1,
|
||||||
G_TYPE_UINT);
|
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_g_object_type_install_info (iface_type,
|
||||||
&dbus_glib_nm_device_interface_object_info);
|
&dbus_glib_nm_device_interface_object_info);
|
||||||
|
|
||||||
|
@@ -29,7 +29,6 @@ typedef enum
|
|||||||
#define NM_DEVICE_INTERFACE_IP4_CONFIG "ip4-config"
|
#define NM_DEVICE_INTERFACE_IP4_CONFIG "ip4-config"
|
||||||
#define NM_DEVICE_INTERFACE_STATE "state"
|
#define NM_DEVICE_INTERFACE_STATE "state"
|
||||||
#define NM_DEVICE_INTERFACE_DEVICE_TYPE "device-type" /* ugh */
|
#define NM_DEVICE_INTERFACE_DEVICE_TYPE "device-type" /* ugh */
|
||||||
#define NM_DEVICE_INTERFACE_CARRIER "carrier"
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NM_DEVICE_INTERFACE_PROP_FIRST = 0x1000,
|
NM_DEVICE_INTERFACE_PROP_FIRST = 0x1000,
|
||||||
@@ -42,7 +41,6 @@ typedef enum {
|
|||||||
NM_DEVICE_INTERFACE_PROP_IP4_CONFIG,
|
NM_DEVICE_INTERFACE_PROP_IP4_CONFIG,
|
||||||
NM_DEVICE_INTERFACE_PROP_STATE,
|
NM_DEVICE_INTERFACE_PROP_STATE,
|
||||||
NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE,
|
NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE,
|
||||||
NM_DEVICE_INTERFACE_PROP_CARRIER
|
|
||||||
} NMDeviceInterfaceProp;
|
} NMDeviceInterfaceProp;
|
||||||
|
|
||||||
|
|
||||||
@@ -64,7 +62,6 @@ struct _NMDeviceInterface {
|
|||||||
|
|
||||||
/* Signals */
|
/* Signals */
|
||||||
void (*state_changed) (NMDeviceInterface *device, NMDeviceState state);
|
void (*state_changed) (NMDeviceInterface *device, NMDeviceState state);
|
||||||
void (*carrier_changed) (NMDeviceInterface *device, gboolean carrier_on);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GQuark nm_device_interface_error_quark (void);
|
GQuark nm_device_interface_error_quark (void);
|
||||||
|
@@ -66,7 +66,6 @@ struct _NMDevicePrivate
|
|||||||
guint32 capabilities;
|
guint32 capabilities;
|
||||||
char * driver;
|
char * driver;
|
||||||
|
|
||||||
gboolean carrier;
|
|
||||||
guint32 ip4_address;
|
guint32 ip4_address;
|
||||||
struct in6_addr ip6_address;
|
struct in6_addr ip6_address;
|
||||||
|
|
||||||
@@ -123,7 +122,6 @@ nm_device_init (NMDevice * self)
|
|||||||
self->priv->capabilities = NM_DEVICE_CAP_NONE;
|
self->priv->capabilities = NM_DEVICE_CAP_NONE;
|
||||||
self->priv->driver = NULL;
|
self->priv->driver = NULL;
|
||||||
|
|
||||||
self->priv->carrier = FALSE;
|
|
||||||
self->priv->ip4_address = 0;
|
self->priv->ip4_address = 0;
|
||||||
memset (&self->priv->ip6_address, 0, sizeof (struct in6_addr));
|
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
|
gboolean
|
||||||
nm_device_can_activate (NMDevice *self, gboolean wireless_enabled)
|
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...",
|
nm_info ("Activation (%s) Stage 5 of 5 (IP Configure Commit) started...",
|
||||||
iface);
|
iface);
|
||||||
|
|
||||||
if (nm_device_set_ip4_config (self, ip4_config)) {
|
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);
|
|
||||||
|
|
||||||
nm_device_state_changed (self, NM_DEVICE_STATE_ACTIVATED);
|
nm_device_state_changed (self, NM_DEVICE_STATE_ACTIVATED);
|
||||||
} else {
|
else
|
||||||
nm_device_state_changed (self, NM_DEVICE_STATE_FAILED);
|
nm_device_state_changed (self, NM_DEVICE_STATE_FAILED);
|
||||||
}
|
|
||||||
|
|
||||||
nm_info ("Activation (%s) Stage 5 of 5 (IP Configure Commit) complete.",
|
nm_info ("Activation (%s) Stage 5 of 5 (IP Configure Commit) complete.",
|
||||||
iface);
|
iface);
|
||||||
@@ -1276,10 +1243,7 @@ handle_dhcp_lease_change (NMDevice *device)
|
|||||||
|
|
||||||
g_object_set_data (G_OBJECT (req), NM_ACT_REQUEST_IP4_CONFIG, config);
|
g_object_set_data (G_OBJECT (req), NM_ACT_REQUEST_IP4_CONFIG, config);
|
||||||
|
|
||||||
if (nm_device_set_ip4_config (device, 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 {
|
|
||||||
nm_warning ("Failed to update IP4 config in response to DHCP event.");
|
nm_warning ("Failed to update IP4 config in response to DHCP event.");
|
||||||
nm_device_state_changed (device, NM_DEVICE_STATE_FAILED);
|
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:
|
case NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE:
|
||||||
g_value_set_uint (value, priv->type);
|
g_value_set_uint (value, priv->type);
|
||||||
break;
|
break;
|
||||||
case NM_DEVICE_INTERFACE_PROP_CARRIER:
|
|
||||||
g_value_set_boolean (value, priv->carrier);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -1791,10 +1752,6 @@ nm_device_class_init (NMDeviceClass *klass)
|
|||||||
g_object_class_override_property (object_class,
|
g_object_class_override_property (object_class,
|
||||||
NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE,
|
NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE,
|
||||||
NM_DEVICE_INTERFACE_DEVICE_TYPE);
|
NM_DEVICE_INTERFACE_DEVICE_TYPE);
|
||||||
|
|
||||||
g_object_class_override_property (object_class,
|
|
||||||
NM_DEVICE_INTERFACE_PROP_CARRIER,
|
|
||||||
NM_DEVICE_INTERFACE_CARRIER);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -79,8 +79,6 @@ struct _NMDeviceClass
|
|||||||
{
|
{
|
||||||
GObjectClass parent;
|
GObjectClass parent;
|
||||||
|
|
||||||
void (* update_link) (NMDevice *self);
|
|
||||||
|
|
||||||
gboolean (* is_up) (NMDevice *self);
|
gboolean (* is_up) (NMDevice *self);
|
||||||
gboolean (* bring_up) (NMDevice *self);
|
gboolean (* bring_up) (NMDevice *self);
|
||||||
void (* bring_down) (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_capabilities (NMDevice *dev);
|
||||||
guint32 nm_device_get_type_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);
|
guint32 nm_device_get_ip4_address (NMDevice *dev);
|
||||||
void nm_device_update_ip4_address (NMDevice *dev);
|
void nm_device_update_ip4_address (NMDevice *dev);
|
||||||
struct in6_addr * nm_device_get_ip6_address (NMDevice *dev);
|
struct in6_addr * nm_device_get_ip6_address (NMDevice *dev);
|
||||||
|
@@ -1,5 +1,8 @@
|
|||||||
/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
|
/* -*- 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 <dbus/dbus-glib.h>
|
||||||
#include "nm-properties-changed-signal.h"
|
#include "nm-properties-changed-signal.h"
|
||||||
|
|
||||||
@@ -44,6 +47,22 @@ properties_changed_info_destroy (gpointer data)
|
|||||||
g_slice_free (PropertiesChangedInfo, info);
|
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
|
static gboolean
|
||||||
properties_changed (gpointer data)
|
properties_changed (gpointer data)
|
||||||
{
|
{
|
||||||
@@ -52,6 +71,14 @@ properties_changed (gpointer data)
|
|||||||
|
|
||||||
g_assert (info);
|
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_signal_emit (object, info->signal_id, 0, info->hash);
|
||||||
g_hash_table_remove_all (info->hash);
|
g_hash_table_remove_all (info->hash);
|
||||||
|
|
||||||
|
@@ -205,7 +205,7 @@ detail_device (gpointer data, gpointer user_data)
|
|||||||
|
|
||||||
tmp = NULL;
|
tmp = NULL;
|
||||||
if (NM_IS_DEVICE_802_3_ETHERNET (device))
|
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))
|
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)));
|
tmp = g_strdup (nm_device_802_11_wireless_get_hw_address (NM_DEVICE_802_11_WIRELESS (device)));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user