diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2006-01-10 18:56:32 +0100 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2006-03-22 22:16:54 -0500 |
commit | 78e4f36e053b4d2c4623fdc1f6ac63f33d5b7c81 (patch) | |
tree | 2408dc01abd1cdf646bcf94bb13501d1ecf10dcf /net | |
parent | 51da28a847027fdf80e55a2a0d7bd0f7a8617d3d (diff) | |
download | op-kernel-dev-78e4f36e053b4d2c4623fdc1f6ac63f33d5b7c81.zip op-kernel-dev-78e4f36e053b4d2c4623fdc1f6ac63f33d5b7c81.tar.gz |
[PATCH] softmac: select "best" network based on rssi
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_assoc.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/net/ieee80211/softmac/ieee80211softmac_assoc.c b/net/ieee80211/softmac/ieee80211softmac_assoc.c index 700244c..9fd4090 100644 --- a/net/ieee80211/softmac/ieee80211softmac_assoc.c +++ b/net/ieee80211/softmac/ieee80211softmac_assoc.c @@ -167,6 +167,8 @@ ieee80211softmac_assoc_work(void *d) /* Search the ieee80211 networks for this network if we didn't find it */ if (!found) { + s8 rssi = -128; /* if I don't initialise, gcc emits an invalid warning + because it cannot follow the best pointer logic. */ spin_lock_irqsave(&mac->ieee->lock, flags); list_for_each_entry(net, &mac->ieee->network_list, list) { /* we're supposed to find the network with @@ -174,7 +176,7 @@ ieee80211softmac_assoc_work(void *d) * any network with a specific ESSID, and many * different ones could have that. * - * I'll for now implement just finding one at all + * I'll for now just go with the reported rssi. * * We also should take into account the rateset * here to find the best BSSID to try. @@ -182,15 +184,17 @@ ieee80211softmac_assoc_work(void *d) if (network_matches_request(mac, net)) { if (!best) { best = net; + rssi = best->stats.rssi; continue; } /* we already had a matching network, so * compare their properties to get the * better of the two ... (see above) */ - /* TODO */ - /* for now, just */ - break; + if (rssi < net->stats.rssi) { + best = net; + rssi = best->stats.rssi; + } } } /* if we unlock here, we might get interrupted and the `best' |