From: Jean Parpaillon <[email protected]>

---
 introspection/nm-device.xml |    5 ++++
 libnm-glib/nm-device.c      |   48 +++++++++++++++++++++++++++++++++++++++++++
 libnm-glib/nm-device.h      |    2 +
 src/nm-device-interface.c   |    7 ++++++
 src/nm-device-interface.h   |    2 +
 src/nm-device.c             |   23 ++++++++++++++++++++
 src/nm-device.h             |    4 +++
 7 files changed, 91 insertions(+), 0 deletions(-)

diff --git a/introspection/nm-device.xml b/introspection/nm-device.xml
index 5fdda96..2e29bb4 100644
--- a/introspection/nm-device.xml
+++ b/introspection/nm-device.xml
@@ -97,6 +97,11 @@
         The general type of the network device; ie Ethernet, WiFi, etc.
       </tp:docstring>
     </property>
+    <property name="CanWakeUp" type="b" access="readwrite" >
+      <tp:docstring>
+        If TRUE, the device can wake up the host when sleeping.
+      </tp:docstring>
+    </property>
 
     <method name="Disconnect">
       <annotation name="org.freedesktop.DBus.GLib.CSymbol" 
value="impl_device_disconnect"/>
diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c
index f06c1e4..9b832d3 100644
--- a/libnm-glib/nm-device.c
+++ b/libnm-glib/nm-device.c
@@ -55,6 +55,7 @@ typedef struct {
        NMDeviceCapabilities capabilities;
        gboolean managed;
        gboolean firmware_missing;
+       gboolean can_wake_up;
        NMIP4Config *ip4_config;
        gboolean got_ip4_config;
        NMDHCP4Config *dhcp4_config;
@@ -81,6 +82,7 @@ enum {
        PROP_CAPABILITIES,
        PROP_MANAGED,
        PROP_FIRMWARE_MISSING,
+       PROP_CAN_WAKE_UP,
        PROP_IP4_CONFIG,
        PROP_DHCP4_CONFIG,
        PROP_IP6_CONFIG,
@@ -304,6 +306,7 @@ register_for_property_changed (NMDevice *device)
                { NM_DEVICE_CAPABILITIES,     _nm_object_demarshal_generic, 
&priv->capabilities },
                { NM_DEVICE_MANAGED,          _nm_object_demarshal_generic, 
&priv->managed },
                { NM_DEVICE_FIRMWARE_MISSING, _nm_object_demarshal_generic, 
&priv->firmware_missing },
+               { NM_DEVICE_CAN_WAKE_UP,      _nm_object_demarshal_generic, 
&priv->can_wake_up },
                { NM_DEVICE_IP4_CONFIG,       demarshal_ip4_config,         
&priv->ip4_config },
                { NM_DEVICE_DHCP4_CONFIG,     demarshal_dhcp4_config,       
&priv->dhcp4_config },
                { NM_DEVICE_IP6_CONFIG,       demarshal_ip6_config,         
&priv->ip6_config },
@@ -452,6 +455,9 @@ get_property (GObject *object,
        case PROP_FIRMWARE_MISSING:
                g_value_set_boolean (value, nm_device_get_firmware_missing 
(device));
                break;
+       case PROP_CAN_WAKE_UP:
+               g_value_set_boolean (value, nm_device_get_can_wake_up (device));
+               break;
        case PROP_IP4_CONFIG:
                g_value_set_object (value, nm_device_get_ip4_config (device));
                break;
@@ -496,6 +502,9 @@ set_property (GObject *object,
                /* Construct only */
                priv->device_type = g_value_get_uint (value);
                break;
+       case PROP_CAN_WAKE_UP:
+               priv->can_wake_up = g_value_get_boolean (value);
+               break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                break;
@@ -629,6 +638,19 @@ nm_device_class_init (NMDeviceClass *device_class)
                                                  G_PARAM_READABLE));
 
        /**
+        * NMDevice:can-wake-up:
+        *
+        * When %TRUE indicates the device can be used to wake up the machine.
+        **/
+       g_object_class_install_property
+               (object_class, PROP_CAN_WAKE_UP,
+                g_param_spec_boolean (NM_DEVICE_CAN_WAKE_UP,
+                                                          "CanWakeUp",
+                                                          "Device can WakeUp",
+                                                          FALSE,
+                                                          G_PARAM_READWRITE));
+
+       /**
         * NMDevice:ip4-config:
         *
         * The #NMIP4Config of the device.
@@ -1036,6 +1058,32 @@ nm_device_get_firmware_missing (NMDevice *device)
 }
 
 /**
+ * nm_device_get_can_wake_up:
+ * @device: a #NMDevice
+ *
+ * Indicates that the device can be used to wake up the machine
+ *
+ * Returns: %TRUE if the device can be used to wake up the machine.
+ **/
+gboolean
+nm_device_get_can_wake_up (NMDevice *device)
+{
+       NMDevicePrivate *priv;
+
+       g_return_val_if_fail (NM_IS_DEVICE (device), 0);
+
+       priv = NM_DEVICE_GET_PRIVATE (device);
+       if (!priv->can_wake_up) {
+               priv->can_wake_up = _nm_object_get_boolean_property (NM_OBJECT 
(device),
+                                                                               
                                         NM_DBUS_INTERFACE_DEVICE,
+                                                                               
                                         "CanWakeUp",
+                                                                               
                                         NULL);
+       }
+
+       return priv->can_wake_up;
+}
+
+/**
  * nm_device_get_ip4_config:
  * @device: a #NMDevice
  *
diff --git a/libnm-glib/nm-device.h b/libnm-glib/nm-device.h
index e21e71b..df89869 100644
--- a/libnm-glib/nm-device.h
+++ b/libnm-glib/nm-device.h
@@ -53,6 +53,7 @@ G_BEGIN_DECLS
 #define NM_DEVICE_CAPABILITIES "capabilities"
 #define NM_DEVICE_MANAGED "managed"
 #define NM_DEVICE_FIRMWARE_MISSING "firmware-missing"
+#define NM_DEVICE_CAN_WAKE_UP "can-wake-up"
 #define NM_DEVICE_IP4_CONFIG "ip4-config"
 #define NM_DEVICE_DHCP4_CONFIG "dhcp4-config"
 #define NM_DEVICE_IP6_CONFIG "ip6-config"
@@ -99,6 +100,7 @@ const char *         nm_device_get_driver           
(NMDevice *device);
 NMDeviceCapabilities nm_device_get_capabilities     (NMDevice *device);
 gboolean             nm_device_get_managed          (NMDevice *device);
 gboolean             nm_device_get_firmware_missing (NMDevice *device);
+gboolean             nm_device_get_can_wake_up      (NMDevice *device);
 NMIP4Config *        nm_device_get_ip4_config       (NMDevice *device);
 NMDHCP4Config *      nm_device_get_dhcp4_config     (NMDevice *device);
 NMIP6Config *        nm_device_get_ip6_config       (NMDevice *device);
diff --git a/src/nm-device-interface.c b/src/nm-device-interface.c
index fb471f5..f1d6d7f 100644
--- a/src/nm-device-interface.c
+++ b/src/nm-device-interface.c
@@ -195,6 +195,13 @@ nm_device_interface_init (gpointer g_iface)
                                           G_PARAM_READWRITE | 
G_PARAM_CONSTRUCT_ONLY));
 
        g_object_interface_install_property
+               (g_iface, g_param_spec_boolean (NM_DEVICE_INTERFACE_CAN_WAKE_UP,
+                                                                               
"CanWakeUp",
+                                                                               
"Can wake up machine",
+                                                                               
FALSE,
+                                                                               
G_PARAM_READWRITE));
+
+       g_object_interface_install_property
                (g_iface,
                 g_param_spec_string (NM_DEVICE_INTERFACE_TYPE_DESC,
                                                          "Type Description",
diff --git a/src/nm-device-interface.h b/src/nm-device-interface.h
index 560cdfe..0c73001 100644
--- a/src/nm-device-interface.h
+++ b/src/nm-device-interface.h
@@ -62,6 +62,7 @@ typedef enum
 #define NM_DEVICE_INTERFACE_DEVICE_TYPE      "device-type" /* ugh */
 #define NM_DEVICE_INTERFACE_MANAGED          "managed"
 #define NM_DEVICE_INTERFACE_FIRMWARE_MISSING "firmware-missing"
+#define NM_DEVICE_INTERFACE_CAN_WAKE_UP      "can-wake-up"
 #define NM_DEVICE_INTERFACE_TYPE_DESC        "type-desc"    /* Internal only */
 #define NM_DEVICE_INTERFACE_RFKILL_TYPE      "rfkill-type"  /* Internal only */
 #define NM_DEVICE_INTERFACE_IFINDEX          "ifindex"      /* Internal only */
@@ -84,6 +85,7 @@ typedef enum {
        NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE,
        NM_DEVICE_INTERFACE_PROP_MANAGED,
        NM_DEVICE_INTERFACE_PROP_FIRMWARE_MISSING,
+       NM_DEVICE_INTERFACE_PROP_CAN_WAKE_UP,
        NM_DEVICE_INTERFACE_PROP_TYPE_DESC,
        NM_DEVICE_INTERFACE_PROP_RFKILL_TYPE,
        NM_DEVICE_INTERFACE_PROP_IFINDEX,
diff --git a/src/nm-device.c b/src/nm-device.c
index 559606c..31a73c1 100644
--- a/src/nm-device.c
+++ b/src/nm-device.c
@@ -96,6 +96,7 @@ typedef struct {
        gboolean      managed; /* whether managed by NM or not */
        RfKillType    rfkill_type;
        gboolean      firmware_missing;
+       gboolean      can_wake_up;
 
        guint32         ip4_address;
 
@@ -2985,6 +2986,18 @@ nm_device_can_interrupt_activation (NMDevice *self)
        return interrupt;
 }
 
+gboolean
+nm_device_can_wake_up (NMDevice *self)
+{
+       gboolean wake_up = FALSE;
+
+       g_return_val_if_fail (self != NULL, FALSE);
+
+       if (NM_DEVICE_GET_CLASS (self)->can_wake_up)
+               wake_up = NM_DEVICE_GET_CLASS (self)->can_wake_up (self);
+       return wake_up;
+}
+
 /* IP Configuration stuff */
 
 NMDHCP4Config *
@@ -3431,6 +3444,9 @@ set_property (GObject *object, guint prop_id,
        case NM_DEVICE_INTERFACE_PROP_FIRMWARE_MISSING:
                priv->firmware_missing = g_value_get_boolean (value);
                break;
+       case NM_DEVICE_INTERFACE_PROP_CAN_WAKE_UP:
+               priv->can_wake_up = g_value_get_boolean (value);
+               break;
        case NM_DEVICE_INTERFACE_PROP_DEVICE_TYPE:
                g_return_if_fail (priv->type == NM_DEVICE_TYPE_UNKNOWN);
                priv->type = g_value_get_uint (value);
@@ -3531,6 +3547,9 @@ get_property (GObject *object, guint prop_id,
        case NM_DEVICE_INTERFACE_PROP_FIRMWARE_MISSING:
                g_value_set_boolean (value, priv->firmware_missing);
                break;
+       case NM_DEVICE_INTERFACE_PROP_CAN_WAKE_UP:
+               g_value_set_boolean (value, priv->can_wake_up);
+               break;
        case NM_DEVICE_INTERFACE_PROP_TYPE_DESC:
                g_value_set_string (value, priv->type_desc);
                break;
@@ -3636,6 +3655,10 @@ nm_device_class_init (NMDeviceClass *klass)
                                                                          
NM_DEVICE_INTERFACE_FIRMWARE_MISSING);
 
        g_object_class_override_property (object_class,
+                                                                         
NM_DEVICE_INTERFACE_PROP_CAN_WAKE_UP,
+                                                                         
NM_DEVICE_INTERFACE_CAN_WAKE_UP);
+
+       g_object_class_override_property (object_class,
                                                                          
NM_DEVICE_INTERFACE_PROP_TYPE_DESC,
                                                                          
NM_DEVICE_INTERFACE_TYPE_DESC);
 
diff --git a/src/nm-device.h b/src/nm-device.h
index 1d080ed..b7273de 100644
--- a/src/nm-device.h
+++ b/src/nm-device.h
@@ -118,6 +118,9 @@ typedef struct {
 
        gboolean                (* can_interrupt_activation)            
(NMDevice *self);
 
+       /* true if device must be kept on when sleeping */
+       gboolean                (* can_wake_up)         (NMDevice *self);
+
        gboolean        (* spec_match_list)     (NMDevice *self, const GSList 
*specs);
 
        NMConnection *  (* connection_match_config) (NMDevice *self, const 
GSList *connections);
@@ -176,6 +179,7 @@ void                        
nm_device_activate_schedule_stage4_ip6_config_get               (NMDevice 
*device);
 void                   nm_device_activate_schedule_stage4_ip6_config_timeout   
(NMDevice *device);
 gboolean               nm_device_is_activating         (NMDevice *dev);
 gboolean               nm_device_can_interrupt_activation              
(NMDevice *self);
+gboolean               nm_device_can_wake_up           (NMDevice *self);
 gboolean               nm_device_autoconnect_allowed   (NMDevice *self);
 
 NMDeviceState nm_device_get_state (NMDevice *device);
-- 
1.7.6.3

_______________________________________________
networkmanager-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to