NM schedule scan on intervals between 20 and 120 seconds. Don't do this
when wpa_supplicant background scanning is used.
---
src/devices/nm-device-wifi.c | 14 ++++++++++++--
src/supplicant-manager/nm-supplicant-config.c | 5 ++++-
src/supplicant-manager/nm-supplicant-config.h | 3 ++-
src/supplicant-manager/tests/test-supplicant-config.c | 8 ++++++--
4 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/src/devices/nm-device-wifi.c b/src/devices/nm-device-wifi.c
index 2935e27..d92a75b 100644
--- a/src/devices/nm-device-wifi.c
+++ b/src/devices/nm-device-wifi.c
@@ -146,6 +146,7 @@ struct _NMDeviceWifiPrivate {
Supplicant supplicant;
WifiData * wifi_data;
gboolean ssid_found;
+ gboolean bgscan_enabled;
NM80211Mode mode;
guint32 failed_link_count;
@@ -1739,8 +1740,14 @@ schedule_scan (NMDeviceWifi *self, gboolean backoff)
guint factor = 2, next_scan = priv->scan_interval;
if ( nm_device_is_activating (NM_DEVICE (self))
- || (nm_device_get_state (NM_DEVICE (self)) ==
NM_DEVICE_STATE_ACTIVATED))
+ || (nm_device_get_state (NM_DEVICE (self)) ==
NM_DEVICE_STATE_ACTIVATED)) {
factor = 1;
+ if (priv->bgscan_enabled) {
+ nm_log_dbg (LOGD_WIFI_SCAN, "(%s): do not
schedule scan as scanning in background is enabled",
+ nm_device_get_iface (NM_DEVICE
(self)));
+ return;
+ }
+ }
priv->pending_scan_id = g_timeout_add_seconds (next_scan,
request_wireless_scan,
@@ -2742,6 +2749,8 @@ build_supplicant_config (NMDeviceWifi *self,
goto error;
}
+ priv->bgscan_enabled = FALSE;
+
s_wireless_sec = nm_connection_get_setting_wireless_security
(connection);
if (s_wireless_sec) {
NMSetting8021x *s_8021x;
@@ -2752,7 +2761,8 @@ build_supplicant_config (NMDeviceWifi *self,
if (!nm_supplicant_config_add_setting_wireless_security (config,
s_wireless_sec,
s_8021x,
-
con_uuid)) {
+
con_uuid,
+
&priv->bgscan_enabled)) {
nm_log_err (LOGD_WIFI, "Couldn't add
802-11-wireless-security setting to "
"supplicant config.");
goto error;
diff --git a/src/supplicant-manager/nm-supplicant-config.c
b/src/supplicant-manager/nm-supplicant-config.c
index 446dc21..6305f1b 100644
--- a/src/supplicant-manager/nm-supplicant-config.c
+++ b/src/supplicant-manager/nm-supplicant-config.c
@@ -573,7 +573,8 @@ gboolean
nm_supplicant_config_add_setting_wireless_security (NMSupplicantConfig *self,
NMSettingWirelessSecurity
*setting,
NMSetting8021x
*setting_8021x,
- const char *con_uuid)
+ const char *con_uuid,
+ gboolean *bgscan)
{
char *value;
gboolean success;
@@ -692,6 +693,8 @@ nm_supplicant_config_add_setting_wireless_security
(NMSupplicantConfig *self,
*/
if (!nm_supplicant_config_add_option (self, "bgscan",
"simple:30:-65:300", -1, FALSE))
nm_log_warn (LOGD_SUPPLICANT, "Error enabling
background scanning for ESS roaming");
+ else
+ *bgscan = TRUE;
/* When using WPA-Enterprise, we want to use Proactive
Key Caching (also
* called Opportunistic Key Caching) to avoid full EAP
exchanges when
diff --git a/src/supplicant-manager/nm-supplicant-config.h
b/src/supplicant-manager/nm-supplicant-config.h
index a8d3047..19a6dc1 100644
--- a/src/supplicant-manager/nm-supplicant-config.h
+++ b/src/supplicant-manager/nm-supplicant-config.h
@@ -72,7 +72,8 @@ gboolean nm_supplicant_config_add_setting_wireless
(NMSupplicantConfig *self,
gboolean nm_supplicant_config_add_setting_wireless_security
(NMSupplicantConfig *self,
NMSettingWirelessSecurity *setting,
NMSetting8021x
*setting_8021x,
- const char
*con_uuid);
+ const char
*con_uuid,
+ gboolean *bgscan);
gboolean nm_supplicant_config_add_no_security (NMSupplicantConfig *self);
diff --git a/src/supplicant-manager/tests/test-supplicant-config.c
b/src/supplicant-manager/tests/test-supplicant-config.c
index 5c6795c..3990043 100644
--- a/src/supplicant-manager/tests/test-supplicant-config.c
+++ b/src/supplicant-manager/tests/test-supplicant-config.c
@@ -215,6 +215,7 @@ test_wifi_wep_key (const char *detail,
GByteArray *bssid;
const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66
};
const char *bssid_str = "11:22:33:44:55:66";
+ gboolean dummy;
connection = nm_connection_new ();
@@ -280,7 +281,8 @@ test_wifi_wep_key (const char *detail,
success = nm_supplicant_config_add_setting_wireless_security (config,
s_wsec,
NULL,
-
"376aced7-b28c-46be-9a62-fcdf072571da");
+
"376aced7-b28c-46be-9a62-fcdf072571da",
+ &dummy);
ASSERT (success == TRUE,
detail, "failed to add wireless security to supplicant
config.");
@@ -343,6 +345,7 @@ test_wifi_wpa_psk (const char *detail,
GByteArray *bssid;
const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66
};
const char *bssid_str = "11:22:33:44:55:66";
+ gboolean dummy;
connection = nm_connection_new ();
@@ -414,7 +417,8 @@ test_wifi_wpa_psk (const char *detail,
success = nm_supplicant_config_add_setting_wireless_security (config,
s_wsec,
NULL,
-
"376aced7-b28c-46be-9a62-fcdf072571da");
+
"376aced7-b28c-46be-9a62-fcdf072571da",
+ &dummy);
ASSERT (success == TRUE,
detail, "failed to add wireless security to supplicant
config.");
--
1.8.1.4
_______________________________________________
networkmanager-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/networkmanager-list