summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/libertas/scan.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2007-05-25 22:30:48 -0400
committerJohn W. Linville <linville@tuxdriver.com>2007-06-11 14:28:43 -0400
commitaeea0ab45ae3d761064ca926863bb41f0ad167ce (patch)
tree014af0acbc6920cb0cea7e3cb9377365f8ade54e /drivers/net/wireless/libertas/scan.c
parentac26f81ccecc23ad5d8c20ebe1dd482fa395298b (diff)
[PATCH] libertas: honor specific channel requests during association
Previously if a fixed channel was specified along with an SSID, the channel request would be ignored during the association process. Instead, when searching for an adhoc or infrastructure network to join, allow filtering results based on channel so that the driver doesn't pick a BSS on a different channel than requested. Signed-off-by: Dan Williams <dcbw@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/libertas/scan.c')
-rw-r--r--drivers/net/wireless/libertas/scan.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c
index 8aaac5f6c9d..83b1612e84b 100644
--- a/drivers/net/wireless/libertas/scan.c
+++ b/drivers/net/wireless/libertas/scan.c
@@ -1268,7 +1268,8 @@ struct bss_descriptor * libertas_find_BSSID_in_list(wlan_adapter * adapter,
* @return index in BSSID list
*/
struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter,
- struct WLAN_802_11_SSID *ssid, u8 * bssid, u8 mode)
+ struct WLAN_802_11_SSID *ssid, u8 * bssid, u8 mode,
+ int channel)
{
u8 bestrssi = 0;
struct bss_descriptor * iter_bss = NULL;
@@ -1286,6 +1287,8 @@ struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter,
continue; /* ssid doesn't match */
if (bssid && compare_ether_addr(iter_bss->bssid, bssid) != 0)
continue; /* bssid doesn't match */
+ if ((channel > 0) && (iter_bss->channel != channel))
+ continue; /* channel doesn't match */
switch (mode) {
case IW_MODE_INFRA:
@@ -1661,7 +1664,7 @@ int libertas_get_scan(struct net_device *dev, struct iw_request_info *info,
wlan_scan_networks(priv, NULL, 0);
/* Update RSSI if current BSS is a locally created ad-hoc BSS */
- if ((adapter->inframode == wlan802_11ibss) && adapter->adhoccreate) {
+ if ((adapter->mode == IW_MODE_ADHOC) && adapter->adhoccreate) {
libertas_prepare_and_send_command(priv, cmd_802_11_rssi, 0,
cmd_option_waitforrsp, 0, NULL);
}