From: Jean Parpaillon <[email protected]>
---
src/nm-device.c | 20 ++++++++++++++++++--
src/nm-device.h | 1 +
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/src/nm-device.c b/src/nm-device.c
index 31a73c1..fdd5627 100644
--- a/src/nm-device.c
+++ b/src/nm-device.c
@@ -167,6 +167,8 @@ static gboolean can_assume_connections (NMDeviceInterface
*device);
static void nm_device_activate_schedule_stage5_ip_config_commit (NMDevice
*self, int family);
+static void nm_device_prepare_wake_up (NMDevice *dev);
+
static void nm_device_take_down (NMDevice *dev, gboolean wait,
NMDeviceStateReason reason);
static gboolean nm_device_bring_up (NMDevice *self, gboolean block, gboolean
*no_firmware);
@@ -3296,6 +3298,17 @@ nm_device_bring_up (NMDevice *self, gboolean block,
gboolean *no_firmware)
}
static void
+nm_device_prepare_wake_up (NMDevice *self)
+{
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ nm_log_info (LOGD_DEVICE, "(%s): preparing for waking up...");
+
+ if (NM_DEVICE_GET_CLASS (self)->prepare_wake_up)
+ NM_DEVICE_GET_CLASS (self)->prepare_wake_up (self);
+}
+
+static void
nm_device_take_down (NMDevice *self, gboolean block, NMDeviceStateReason
reason)
{
g_return_if_fail (NM_IS_DEVICE (self));
@@ -3899,8 +3912,11 @@ nm_device_state_changed (NMDevice *device,
switch (state) {
case NM_DEVICE_STATE_UNMANAGED:
nm_device_set_firmware_missing (device, FALSE);
- if (old_state > NM_DEVICE_STATE_UNMANAGED)
- nm_device_take_down (device, TRUE, reason);
+ if (old_state > NM_DEVICE_STATE_UNMANAGED) {
+ if (priv->can_wake_up)
+ nm_device_prepare_wake_up (device);
+ else
+ nm_device_take_down (device, TRUE, reason);
break;
case NM_DEVICE_STATE_UNAVAILABLE:
if (old_state == NM_DEVICE_STATE_UNMANAGED ||
priv->firmware_missing) {
diff --git a/src/nm-device.h b/src/nm-device.h
index b7273de..fb450bf 100644
--- a/src/nm-device.h
+++ b/src/nm-device.h
@@ -70,6 +70,7 @@ typedef struct {
gboolean (*is_up) (NMDevice *self);
gboolean (*bring_up) (NMDevice *self);
void (*take_down) (NMDevice *self);
+ void (*prepare_wake_up) (NMDevice *self);
void (* update_hw_address) (NMDevice *self);
void (* update_permanent_hw_address) (NMDevice *self);
--
1.7.6.3
_______________________________________________
networkmanager-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/networkmanager-list