aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/libertas/assoc.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/assoc.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/assoc.c')
-rw-r--r--drivers/net/wireless/libertas/assoc.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/wireless/libertas/assoc.c b/drivers/net/wireless/libertas/assoc.c
index afce32761bfd..4fcc6a653d99 100644
--- a/drivers/net/wireless/libertas/assoc.c
+++ b/drivers/net/wireless/libertas/assoc.c
@@ -70,6 +70,7 @@ static int assoc_helper_essid(wlan_private *priv,
70 wlan_adapter *adapter = priv->adapter; 70 wlan_adapter *adapter = priv->adapter;
71 int ret = 0; 71 int ret = 0;
72 struct bss_descriptor * bss; 72 struct bss_descriptor * bss;
73 int channel = -1;
73 74
74 lbs_deb_enter(LBS_DEB_ASSOC); 75 lbs_deb_enter(LBS_DEB_ASSOC);
75 76
@@ -77,6 +78,9 @@ static int assoc_helper_essid(wlan_private *priv,
77 * is set. 78 * is set.
78 */ 79 */
79 80
81 if (test_bit(ASSOC_FLAG_CHANNEL, &assoc_req->flags))
82 channel = assoc_req->channel;
83
80 lbs_deb_assoc("New SSID requested: %s\n", assoc_req->ssid.ssid); 84 lbs_deb_assoc("New SSID requested: %s\n", assoc_req->ssid.ssid);
81 if (assoc_req->mode == IW_MODE_INFRA) { 85 if (assoc_req->mode == IW_MODE_INFRA) {
82 if (adapter->prescan) { 86 if (adapter->prescan) {
@@ -84,7 +88,7 @@ static int assoc_helper_essid(wlan_private *priv,
84 } 88 }
85 89
86 bss = libertas_find_SSID_in_list(adapter, &assoc_req->ssid, 90 bss = libertas_find_SSID_in_list(adapter, &assoc_req->ssid,
87 NULL, IW_MODE_INFRA); 91 NULL, IW_MODE_INFRA, channel);
88 if (bss != NULL) { 92 if (bss != NULL) {
89 lbs_deb_assoc("SSID found in scan list, associating\n"); 93 lbs_deb_assoc("SSID found in scan list, associating\n");
90 memcpy(&assoc_req->bss, bss, sizeof(struct bss_descriptor)); 94 memcpy(&assoc_req->bss, bss, sizeof(struct bss_descriptor));
@@ -101,7 +105,7 @@ static int assoc_helper_essid(wlan_private *priv,
101 105
102 /* Search for the requested SSID in the scan table */ 106 /* Search for the requested SSID in the scan table */
103 bss = libertas_find_SSID_in_list(adapter, &assoc_req->ssid, NULL, 107 bss = libertas_find_SSID_in_list(adapter, &assoc_req->ssid, NULL,
104 IW_MODE_ADHOC); 108 IW_MODE_ADHOC, channel);
105 if (bss != NULL) { 109 if (bss != NULL) {
106 lbs_deb_assoc("SSID found joining\n"); 110 lbs_deb_assoc("SSID found joining\n");
107 memcpy(&assoc_req->bss, bss, sizeof(struct bss_descriptor)); 111 memcpy(&assoc_req->bss, bss, sizeof(struct bss_descriptor));