summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2013-09-20 15:58:18 -0500
committerDan Williams <dcbw@redhat.com>2014-01-31 14:36:10 -0600
commit7e7dbd272c9e3351e6d0a8e56a44fd8c4e0344d1 (patch)
tree6c13a3995882d020542d0a017a5a4d5cd68d1bda
parent718914b32cda2a2c676cff25c9810629cf17fc81 (diff)
downloadNetworkManager-dcbw/wifi-awesome.tar.gz
wifi: don't allow broadcast scans to trigger roaming decisionsdcbw/wifi-awesome
The supplicant does that just fine by itself with optimized background scanning. NM's requested broadcast scans should not trigger a roaming decision because they are only meant to update location information and UI.
-rw-r--r--src/supplicant-manager/nm-supplicant-interface.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c
index 789039c7a9..8448173485 100644
--- a/src/supplicant-manager/nm-supplicant-interface.c
+++ b/src/supplicant-manager/nm-supplicant-interface.c
@@ -1204,6 +1204,16 @@ string_to_gvalue (const char *str)
}
static GValue *
+bool_to_gvalue (gboolean b)
+{
+ GValue *val = g_slice_new0 (GValue);
+
+ g_value_init (val, G_TYPE_BOOLEAN);
+ g_value_set_boolean (val, b);
+ return val;
+}
+
+static GValue *
byte_array_array_to_gvalue (const GPtrArray *array)
{
GValue *val = g_slice_new0 (GValue);
@@ -1230,6 +1240,13 @@ nm_supplicant_interface_request_scan (NMSupplicantInterface *self, const GPtrArr
if (ssids)
g_hash_table_insert (hash, "SSIDs", byte_array_array_to_gvalue (ssids));
+ /* If connected, we don't want an NM-triggered broadcast scan to trigger
+ * a roaming attempt; let background scanning in the supplicant make that
+ * decision instead.
+ */
+ if (priv->state >= NM_SUPPLICANT_INTERFACE_STATE_AUTHENTICATING)
+ g_hash_table_insert (hash, "AllowRoam", bool_to_gvalue (FALSE));
+
call = dbus_g_proxy_begin_call (priv->iface_proxy, "Scan",
scan_request_cb,
self,