aboutsummaryrefslogtreecommitdiffstats
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 8aaac5f6c9de..83b1612e84bf 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,
1268 * @return index in BSSID list 1268 * @return index in BSSID list
1269 */ 1269 */
1270struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter, 1270struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter,
1271 struct WLAN_802_11_SSID *ssid, u8 * bssid, u8 mode) 1271 struct WLAN_802_11_SSID *ssid, u8 * bssid, u8 mode,
1272 int channel)
1272{ 1273{
1273 u8 bestrssi = 0; 1274 u8 bestrssi = 0;
1274 struct bss_descriptor * iter_bss = NULL; 1275 struct bss_descriptor * iter_bss = NULL;
@@ -1286,6 +1287,8 @@ struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter,
1286 continue; /* ssid doesn't match */ 1287 continue; /* ssid doesn't match */
1287 if (bssid && compare_ether_addr(iter_bss->bssid, bssid) != 0) 1288 if (bssid && compare_ether_addr(iter_bss->bssid, bssid) != 0)
1288 continue; /* bssid doesn't match */ 1289 continue; /* bssid doesn't match */
1290 if ((channel > 0) && (iter_bss->channel != channel))
1291 continue; /* channel doesn't match */
1289 1292
1290 switch (mode) { 1293 switch (mode) {
1291 case IW_MODE_INFRA: 1294 case IW_MODE_INFRA:
@@ -1661,7 +1664,7 @@ int libertas_get_scan(struct net_device *dev, struct iw_request_info *info,
1661 wlan_scan_networks(priv, NULL, 0); 1664 wlan_scan_networks(priv, NULL, 0);
1662 1665
1663 /* Update RSSI if current BSS is a locally created ad-hoc BSS */ 1666 /* Update RSSI if current BSS is a locally created ad-hoc BSS */
1664 if ((adapter->inframode == wlan802_11ibss) && adapter->adhoccreate) { 1667 if ((adapter->mode == IW_MODE_ADHOC) && adapter->adhoccreate) {
1665 libertas_prepare_and_send_command(priv, cmd_802_11_rssi, 0, 1668 libertas_prepare_and_send_command(priv, cmd_802_11_rssi, 0,
1666 cmd_option_waitforrsp, 0, NULL); 1669 cmd_option_waitforrsp, 0, NULL);
1667 } 1670 }