diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2015-09-25 15:01:23 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2015-10-09 12:12:07 +0200 |
commit | c995432ccb688a927f7702ff49849c2b246d61aa (patch) | |
tree | 125b611c42c8ef83a9ffa58d14e843986f48c3c6 | |
parent | 0f065b4991f4a4dded29893465ce4085a0e2a6ed (diff) | |
download | NetworkManager-c995432ccb688a927f7702ff49849c2b246d61aa.tar.gz |
fixup! wake-on-lan: add option to keep existing settings
-rw-r--r-- | clients/cli/settings.c | 17 | ||||
-rw-r--r-- | libnm-core/nm-setting-wired.c | 16 | ||||
-rw-r--r-- | libnm-core/nm-setting-wired.h | 15 | ||||
-rw-r--r-- | src/devices/nm-device-ethernet.c | 8 |
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; } |