diff options
author | Patrik Flykt <patrik.flykt@linux.intel.com> | 2015-01-23 10:58:04 +0200 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2015-01-23 17:14:41 +0200 |
commit | ce82d7c91214dfe9ea4abad036c8d2d8b0d9fd24 (patch) | |
tree | 8b7cb15c4c74809362f938a9c678c7890b2b6f36 /gsupplicant | |
parent | 0fc4c58860ee7c3d9c9a4460c1264bb2876dccb4 (diff) | |
download | connman-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.c | 8 |
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); |