summaryrefslogtreecommitdiff
path: root/gsupplicant
diff options
context:
space:
mode:
authorPatrik Flykt <patrik.flykt@linux.intel.com>2015-01-23 10:58:04 +0200
committerPatrik Flykt <patrik.flykt@linux.intel.com>2015-01-23 17:14:41 +0200
commitce82d7c91214dfe9ea4abad036c8d2d8b0d9fd24 (patch)
tree8b7cb15c4c74809362f938a9c678c7890b2b6f36 /gsupplicant
parent0fc4c58860ee7c3d9c9a4460c1264bb2876dccb4 (diff)
downloadconnman-ce82d7c91214dfe9ea4abad036c8d2d8b0d9fd24.tar.gz
gsupplicant: Use a reasonable value for zero BSS signal strength
Sometimes wpa_supplicant reports BSS signal strength as zero or does not send the BSS 'Signal' property at all. As all other signal strength values are negative, a value of zero will always be the greatest one keeping the signal value forever at zero. This in turn translates into an eternal wifi service signal strength of 100. Fix this by using -90 as a reasonable value for a BSS with unknown signal strength. Reported by Thomas Green.
Diffstat (limited to 'gsupplicant')
-rw-r--r--gsupplicant/supplicant.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c
index 3bdf0dc0..ef98894c 100644
--- a/gsupplicant/supplicant.c
+++ b/gsupplicant/supplicant.c
@@ -44,6 +44,8 @@
#define IEEE80211_CAP_IBSS 0x0002
#define IEEE80211_CAP_PRIVACY 0x0010
+#define BSS_UNKNOWN_STRENGTH -90
+
static DBusConnection *connection;
static const GSupplicantCallbacks *callbacks_pointer;
@@ -1758,6 +1760,9 @@ static void bss_property(const char *key, DBusMessageIter *iter,
dbus_message_iter_get_basic(iter, &signal);
bss->signal = signal;
+ if (!bss->signal)
+ bss->signal = BSS_UNKNOWN_STRENGTH;
+
} else if (g_strcmp0(key, "Level") == 0) {
dbus_int32_t level = 0;
@@ -1822,6 +1827,7 @@ static struct g_supplicant_bss *interface_bss_added(DBusMessageIter *iter,
bss->interface = interface;
bss->path = g_strdup(path);
+ bss->signal = BSS_UNKNOWN_STRENGTH;
return bss;
}
@@ -1908,7 +1914,7 @@ static void interface_bss_removed(DBusMessageIter *iter, void *user_data)
bss = g_hash_table_lookup(network->bss_table, path);
if (network->best_bss == bss) {
network->best_bss = NULL;
- network->signal = 0;
+ network->signal = BSS_UNKNOWN_STRENGTH;
}
g_hash_table_remove(bss_mapping, path);