summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2015-09-25 15:01:23 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2015-10-09 12:12:07 +0200
commitc995432ccb688a927f7702ff49849c2b246d61aa (patch)
tree125b611c42c8ef83a9ffa58d14e843986f48c3c6
parent0f065b4991f4a4dded29893465ce4085a0e2a6ed (diff)
downloadNetworkManager-c995432ccb688a927f7702ff49849c2b246d61aa.tar.gz
fixup! wake-on-lan: add option to keep existing settings
-rw-r--r--clients/cli/settings.c17
-rw-r--r--libnm-core/nm-setting-wired.c16
-rw-r--r--libnm-core/nm-setting-wired.h15
-rw-r--r--src/devices/nm-device-ethernet.c8
4 files changed, 27 insertions, 29 deletions
diff --git a/clients/cli/settings.c b/clients/cli/settings.c
index f93372c03b..8198ecf1fd 100644
--- a/clients/cli/settings.c
+++ b/clients/cli/settings.c
@@ -1585,7 +1585,10 @@ nmc_property_wired_set_wake_on_lan (NMSetting *setting, const char *prop,
gboolean ret;
long int t;
- if (nmc_string_to_int_base (val, 0, TRUE, 0, NM_SETTING_WIRED_WAKE_ON_LAN_ALL, &t))
+ if (nmc_string_to_int_base (val, 0, TRUE, 0,
+ NM_SETTING_WIRED_WAKE_ON_LAN_ALL
+ | NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS,
+ &t))
wol = (NMSettingWiredWakeOnLan) t;
else {
ret = nm_utils_enum_from_str (nm_setting_wired_wake_on_lan_get_type (), val,
@@ -1606,15 +1609,9 @@ nmc_property_wired_set_wake_on_lan (NMSetting *setting, const char *prop,
}
}
- if ( NM_FLAGS_HAS (wol, NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT)
- && wol != NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT) {
- g_set_error_literal (error, 1, 0, _("'default' is incompatible with other flags"));
- return FALSE;
- }
-
- if ( NM_FLAGS_HAS (wol, NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE)
- && wol != NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE) {
- g_set_error_literal (error, 1, 0, _("'ignore' is incompatible with other flags"));
+ if ( NM_FLAGS_ANY (wol, NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS)
+ && !nm_utils_is_power_of_two (wol)) {
+ g_set_error_literal (error, 1, 0, _("'default' and 'ignore' are incompatible with other flags"));
return FALSE;
}
diff --git a/libnm-core/nm-setting-wired.c b/libnm-core/nm-setting-wired.c
index c28d484651..64b6697119 100644
--- a/libnm-core/nm-setting-wired.c
+++ b/libnm-core/nm-setting-wired.c
@@ -701,22 +701,12 @@ verify (NMSetting *setting, NMConnection *connection, GError **error)
return FALSE;
}
- if ( NM_FLAGS_HAS (priv->wol, NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT)
- && priv->wol != NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT) {
+ if ( NM_FLAGS_ANY (priv->wol, NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS)
+ && !nm_utils_is_power_of_two (priv->wol)) {
g_set_error_literal (error,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_INVALID_PROPERTY,
- _("Wake-on-LAN mode 'default' is incompatible with other flags"));
- g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_WAKE_ON_LAN);
- return FALSE;
- }
-
- if ( NM_FLAGS_HAS (priv->wol, NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE)
- && priv->wol != NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE) {
- g_set_error_literal (error,
- NM_CONNECTION_ERROR,
- NM_CONNECTION_ERROR_INVALID_PROPERTY,
- _("Wake-on-LAN mode 'ignore' is incompatible with other flags"));
+ _("Wake-on-LAN mode 'default' and 'ignore' are exclusive flags"));
g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_WAKE_ON_LAN);
return FALSE;
}
diff --git a/libnm-core/nm-setting-wired.h b/libnm-core/nm-setting-wired.h
index f681a3f5ed..172aa58a43 100644
--- a/libnm-core/nm-setting-wired.h
+++ b/libnm-core/nm-setting-wired.h
@@ -43,15 +43,17 @@ G_BEGIN_DECLS
/**
* NMSettingWiredWakeOnLan:
* @NM_SETTING_WIRED_WAKE_ON_LAN_NONE: Wake-on-LAN disabled
- * @NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT: Use the default value
* @NM_SETTING_WIRED_WAKE_ON_LAN_PHY: Wake on PHY activity
* @NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST: Wake on unicast messages
* @NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST: Wake on multicast messages
* @NM_SETTING_WIRED_WAKE_ON_LAN_BROADCAST: Wake on broadcast messages
* @NM_SETTING_WIRED_WAKE_ON_LAN_ARP: Wake on ARP
* @NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC: Wake on magic packet
- * @NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE: don't change configured settings
* @NM_SETTING_WIRED_WAKE_ON_LAN_ALL: Wake on all events
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT: Use the default value
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE: Don't change configured settings
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS: Mask of flags that are
+ * incompatible with other flags
*
* Options for #NMSettingWired:wake-on-lan. Note that not all options
* are supported by all devices.
@@ -60,16 +62,19 @@ G_BEGIN_DECLS
*/
typedef enum { /*< flags >*/
NM_SETTING_WIRED_WAKE_ON_LAN_NONE = 0, /*< skip >*/
- NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT = (1 << 0),
NM_SETTING_WIRED_WAKE_ON_LAN_PHY = (1 << 1),
NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST = (1 << 2),
NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST = (1 << 3),
NM_SETTING_WIRED_WAKE_ON_LAN_BROADCAST = (1 << 4),
NM_SETTING_WIRED_WAKE_ON_LAN_ARP = (1 << 5),
NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC = (1 << 6),
+
+ _NM_SETTING_WIRED_WAKE_ON_LAN_LAST_OPT, /*< skip >*/
+ NM_SETTING_WIRED_WAKE_ON_LAN_ALL = ((_NM_SETTING_WIRED_WAKE_ON_LAN_LAST_OPT - 1) << 1) - NM_SETTING_WIRED_WAKE_ON_LAN_PHY, /*< skip >*/
+
+ NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT = (1 << 0),
NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE = (1 << 10),
- _NM_SETTING_WIRED_WAKE_ON_LAN_LAST, /*< skip >*/
- NM_SETTING_WIRED_WAKE_ON_LAN_ALL = (((_NM_SETTING_WIRED_WAKE_ON_LAN_LAST - 1) << 1) - 1 - NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT - NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE) /*< skip >*/
+ NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS = NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT | NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE, /*< skip >*/
} NMSettingWiredWakeOnLan;
#define NM_SETTING_WIRED_PORT "port"
diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c
index ed6ecc87a8..13923dd9fd 100644
--- a/src/devices/nm-device-ethernet.c
+++ b/src/devices/nm-device-ethernet.c
@@ -1234,8 +1234,14 @@ wake_on_lan_enable (NMDevice *device)
if (value) {
wol = _nm_utils_ascii_str_to_int64 (value, 10,
NM_SETTING_WIRED_WAKE_ON_LAN_NONE,
- _NM_SETTING_WIRED_WAKE_ON_LAN_LAST - 1,
+ G_MAXINT32,
NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT);
+
+ if (NM_FLAGS_ANY (wol, NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS)
+ && !nm_utils_is_power_of_two (wol)) {
+ nm_log_dbg (LOGD_ETHER, "invalid default value %d for wake-on-lan", (int) wol);
+ wol = NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT;
+ }
if (wol != NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT)
goto found;
}