summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Fels <simon.fels@canonical.com>2018-05-25 16:44:52 +0200
committerThomas Haller <thaller@redhat.com>2018-06-15 09:46:26 +0200
commit58cdc7b5502be7766b4957538b8eb6ac2cf5b92f (patch)
treedb285c90665c786071d2b12c8c65b30216dce771
parent7af1bc7cf0c67e8732d4583682f8834ca23f9eda (diff)
libnm-core: add wake-on-wlan configuration items
Co-authored-by: Alfonso Sanchez-Beato <alfonso.sanchez-beato@canonical.com>
-rw-r--r--clients/common/settings-docs.h.in1
-rw-r--r--libnm-core/nm-setting-wireless.c72
-rw-r--r--libnm-core/nm-setting-wireless.h46
-rw-r--r--libnm/libnm.ver2
4 files changed, 121 insertions, 0 deletions
diff --git a/clients/common/settings-docs.h.in b/clients/common/settings-docs.h.in
index 7beed42964..86447af267 100644
--- a/clients/common/settings-docs.h.in
+++ b/clients/common/settings-docs.h.in
@@ -21,6 +21,7 @@
#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SEEN_BSSIDS N_("A list of BSSIDs (each BSSID formatted as a MAC address like \"00:11:22:33:44:55\") that have been detected as part of the Wi-Fi network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BSSID list of NetworkManager. The changes you make to this property will not be preserved.")
#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SSID N_("SSID of the Wi-Fi network. Must be specified.")
#define DESCRIBE_DOC_NM_SETTING_WIRELESS_TX_POWER N_("If non-zero, directs the device to use the specified transmit power. Units are dBm. This property is highly driver dependent and not all devices support setting a static transmit power.")
+#define DESCRIBE_DOC_NM_SETTING_WIRELESS_WAKE_ON_WLAN N_("The NMSettingWirelessWakeOnWLan options to enable. Not all devices support all options. May be any combination of NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY (0x2), NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT (0x4), NM_SETTING_WIRELESS_WAKE_ON_WLAN_MAGIC (0x8), NM_SETTING_WIRELESS_WAKE_ON_WLAN_GTK_REKEY_FAILURE (0x10), NM_SETTING_WIRELESS_WAKE_ON_WLAN_EAP_IDENTITY_REQUEST (0x20), NM_SETTING_WIRELESS_WAKE_ON_WLAN_4WAY_HANDSHAKE (0x40), NM_SETTING_WIRELESS_WAKE_ON_WLAN_RFKILL_RELEASE (0x80), NM_SETTING_WIRELESS_WAKE_ON_WLAN_TCP (0x100) or the special values NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT (0x1) (to use global settings) and NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE (0x8000) (to disable management of Wake-on-LAN in NetworkManager).")
#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_AUTH_ALG N_("When WEP is used (ie, key-mgmt = \"none\" or \"ieee8021x\") indicate the 802.11 authentication algorithm required by the AP here. One of \"open\" for Open System, \"shared\" for Shared Key, or \"leap\" for Cisco LEAP. When using Cisco LEAP (ie, key-mgmt = \"ieee8021x\" and auth-alg = \"leap\") the \"leap-username\" and \"leap-password\" properties must be specified.")
#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_FILS N_("Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the connection. One of NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_FILS_DISABLE (1) (disable FILS), NM_SETTING_WIRELESS_SECURITY_FILS_OPTIONAL (2) (enable FILS if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_FILS_REQUIRED (3) (enable FILS and fail if not supported). When set to NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) and no global default is set, FILS will be optionally enabled.")
#define DESCRIBE_DOC_NM_SETTING_WIRELESS_SECURITY_GROUP N_("A list of group/broadcast encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of \"wep40\", \"wep104\", \"tkip\", or \"ccmp\".")
diff --git a/libnm-core/nm-setting-wireless.c b/libnm-core/nm-setting-wireless.c
index 38948dee3e..de03a1ded7 100644
--- a/libnm-core/nm-setting-wireless.c
+++ b/libnm-core/nm-setting-wireless.c
@@ -63,6 +63,7 @@ typedef struct {
gboolean hidden;
guint32 powersave;
NMSettingMacRandomization mac_address_randomization;
+ guint32 wowl;
} NMSettingWirelessPrivate;
enum {
@@ -83,6 +84,7 @@ enum {
PROP_HIDDEN,
PROP_POWERSAVE,
PROP_MAC_ADDRESS_RANDOMIZATION,
+ PROP_WAKE_ON_WLAN,
LAST_PROP
};
@@ -885,6 +887,26 @@ verify (NMSetting *setting, NMConnection *connection, GError **error)
return FALSE;
}
+ if (NM_FLAGS_ANY (priv->wowl, NM_SETTING_WIRELESS_WAKE_ON_WLAN_EXCLUSIVE_FLAGS)) {
+ if (!nm_utils_is_power_of_two (priv->wowl)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Wake-on-WLAN mode 'default' and 'ignore' are exclusive flags"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN);
+ return FALSE;
+ }
+ } else if (!NM_FLAGS_ANY (priv->wowl, NM_SETTING_WIRELESS_WAKE_ON_WLAN_ALL)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Wake-on-WLAN trying to set unknown flag"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN);
+ return FALSE;
+ }
+
/* from here on, check for NM_SETTING_VERIFY_NORMALIZABLE conditions. */
if (priv->cloned_mac_address) {
@@ -939,6 +961,24 @@ nm_setting_wireless_get_security (NMSetting *setting,
return NULL;
}
+/**
+ * nm_setting_wireless_get_wake_on_wlan:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns the Wake-on-WLAN options enabled for the connection
+ *
+ * Returns: the Wake-on-WLAN options
+ *
+ * Since: 1.12
+ */
+NMSettingWirelessWakeOnWLan
+nm_setting_wireless_get_wake_on_wlan (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NM_SETTING_WIRELESS_WAKE_ON_WLAN_NONE);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->wowl;
+}
+
static void
clear_blacklist_item (char **item_p)
{
@@ -1061,6 +1101,9 @@ set_property (GObject *object, guint prop_id,
case PROP_MAC_ADDRESS_RANDOMIZATION:
priv->mac_address_randomization = g_value_get_uint (value);
break;
+ case PROP_WAKE_ON_WLAN:
+ priv->wowl = g_value_get_uint (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1123,6 +1166,9 @@ get_property (GObject *object, guint prop_id,
case PROP_MAC_ADDRESS_RANDOMIZATION:
g_value_set_uint (value, nm_setting_wireless_get_mac_address_randomization (setting));
break;
+ case PROP_WAKE_ON_WLAN:
+ g_value_set_uint (value, nm_setting_wireless_get_wake_on_wlan (setting));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1636,4 +1682,30 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_wireless_class)
_nm_setting_class_add_dbus_only_property (setting_class, "security",
G_VARIANT_TYPE_STRING,
nm_setting_wireless_get_security, NULL);
+
+ /**
+ * NMSettingWireless:wake-on-wlan:
+ *
+ * The #NMSettingWirelessWakeOnWLan options to enable. Not all devices support all options.
+ * May be any combination of %NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY,
+ * %NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT,
+ * %NM_SETTING_WIRELESS_WAKE_ON_WLAN_MAGIC,
+ * %NM_SETTING_WIRELESS_WAKE_ON_WLAN_GTK_REKEY_FAILURE,
+ * %NM_SETTING_WIRELESS_WAKE_ON_WLAN_EAP_IDENTITY_REQUEST,
+ * %NM_SETTING_WIRELESS_WAKE_ON_WLAN_4WAY_HANDSHAKE,
+ * %NM_SETTING_WIRELESS_WAKE_ON_WLAN_RFKILL_RELEASE,
+ * %NM_SETTING_WIRELESS_WAKE_ON_WLAN_TCP or the special values
+ * %NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT (to use global settings) and
+ * %NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE (to disable management of Wake-on-LAN in
+ * NetworkManager).
+ *
+ * Since: 1.12
+ **/
+ g_object_class_install_property
+ (object_class, PROP_WAKE_ON_WLAN,
+ g_param_spec_uint (NM_SETTING_WIRELESS_WAKE_ON_WLAN, "", "",
+ 0, G_MAXUINT32, NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT,
+ G_PARAM_CONSTRUCT |
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-core/nm-setting-wireless.h b/libnm-core/nm-setting-wireless.h
index b0ef475682..e9afe2c67f 100644
--- a/libnm-core/nm-setting-wireless.h
+++ b/libnm-core/nm-setting-wireless.h
@@ -41,6 +41,48 @@ G_BEGIN_DECLS
#define NM_SETTING_WIRELESS_SETTING_NAME "802-11-wireless"
+/**
+ * NMSettingWirelessWakeOnWLan:
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_NONE: Wake-on-WLAN disabled
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY: Wake on any activity
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT: Wake on disconnect
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_MAGIC: Wake on magic packet
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_GTK_REKEY_FAILURE: Wake on GTK rekey failure
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_EAP_IDENTITY_REQUEST: Wake on EAP identity request
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_4WAY_HANDSHAKE: Wake on 4way hanshake
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_RFKILL_RELEASE: Wake on rfkill release
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_ALL: Wake on all events. This does not
+ * include the exclusive flags @NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT or
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE.
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT: Use the default value
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE: Don't change configured settings
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_EXCLUSIVE_FLAGS: Mask of flags that are
+ * incompatible with other flags
+ *
+ * Options for #NMSettingWireless:wake-on-wlan. Note that not all options
+ * are supported by all devices.
+ *
+ * Since: 1.12
+ */
+typedef enum { /*< flags >*/
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_NONE = 0, /*< skip >*/
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY = (1 << 1),
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT = (1 << 2),
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_MAGIC = (1 << 3),
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_GTK_REKEY_FAILURE = (1 << 4),
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_EAP_IDENTITY_REQUEST = (1 << 5),
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_4WAY_HANDSHAKE = (1 << 6),
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_RFKILL_RELEASE = (1 << 7),
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_TCP = (1 << 8),
+ _NM_SETTING_WIRELESS_WAKE_ON_WLAN_NUM, /*< skip >*/
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_LAST = _NM_SETTING_WIRELESS_WAKE_ON_WLAN_NUM - 1, /*< skip >*/
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_ALL = ((NM_SETTING_WIRELESS_WAKE_ON_WLAN_LAST << 1) - 1) - (1 << 0 /*DEFAULT*/), /*< skip >*/
+
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT = (1 << 0),
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE = (1 << 15),
+ NM_SETTING_WIRELESS_WAKE_ON_WLAN_EXCLUSIVE_FLAGS = NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT | NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE, /*< skip >*/
+} NMSettingWirelessWakeOnWLan;
+
#define NM_SETTING_WIRELESS_SSID "ssid"
#define NM_SETTING_WIRELESS_MODE "mode"
#define NM_SETTING_WIRELESS_BAND "band"
@@ -57,6 +99,7 @@ G_BEGIN_DECLS
#define NM_SETTING_WIRELESS_HIDDEN "hidden"
#define NM_SETTING_WIRELESS_POWERSAVE "powersave"
#define NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION "mac-address-randomization"
+#define NM_SETTING_WIRELESS_WAKE_ON_WLAN "wake-on-wlan"
/**
* NM_SETTING_WIRELESS_MODE_ADHOC:
@@ -166,6 +209,9 @@ gboolean nm_setting_wireless_ap_security_compatible (NMSettingWireless
NM80211ApSecurityFlags ap_rsn,
NM80211Mode ap_mode);
+NM_AVAILABLE_IN_1_12
+NMSettingWirelessWakeOnWLan nm_setting_wireless_get_wake_on_wlan (NMSettingWireless *setting);
+
G_END_DECLS
#endif /* __NM_SETTING_WIRELESS_H__ */
diff --git a/libnm/libnm.ver b/libnm/libnm.ver
index 08b7c531e7..f17cc46e88 100644
--- a/libnm/libnm.ver
+++ b/libnm/libnm.ver
@@ -1363,6 +1363,8 @@ global:
nm_setting_vpn_get_secret_keys;
nm_setting_wireless_security_get_fils;
nm_setting_wireless_security_fils_get_type;
+ nm_setting_wireless_get_wake_on_wlan;
+ nm_setting_wireless_wake_on_wlan_get_type;
nm_settings_connection_flags_get_type;
nm_vpn_service_plugin_shutdown;
} libnm_1_10_0;