From: Jean Parpaillon <jean.parpail...@free.fr> --- 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 networkmanager-list@gnome.org http://mail.gnome.org/mailman/listinfo/networkmanager-list