aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReinette Chatre <reinette.chatre@intel.com>2008-03-11 19:17:15 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-03-13 19:32:33 -0400
commit26c0f03f6b77c513cb7bc37b73a06819bdbb791b (patch)
treef32ce924d002461216053dd4cf588e3c8e3272f2
parent35cdeaf4103b9a5c8a86899a5ed12a86c6a12a37 (diff)
iwlwifi: fix bug to show hidden APs during scan
Indirect scanning ('iwlist scan') should report information about hidden APs. When an AP is hidden it does not respond to active scanning, we thus have to use passive scanning to locate these APs. This fixes http://bughost.org/bugzilla/show_bug.cgi?id=1499 Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Tested-by: Bill Moss <bmoss@clemson.edu> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c21
-rw-r--r--drivers/net/wireless/iwlwifi/iwl4965-base.c21
2 files changed, 26 insertions, 16 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index bf3925fdb9be..093b863ef904 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -6309,18 +6309,23 @@ static void iwl3945_bg_request_scan(struct work_struct *data)
6309 if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR) 6309 if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR)
6310 scan->filter_flags = RXON_FILTER_PROMISC_MSK; 6310 scan->filter_flags = RXON_FILTER_PROMISC_MSK;
6311 6311
6312 if (direct_mask) 6312 if (direct_mask) {
6313 IWL_DEBUG_SCAN 6313 IWL_DEBUG_SCAN
6314 ("Initiating direct scan for %s.\n", 6314 ("Initiating direct scan for %s.\n",
6315 iwl3945_escape_essid(priv->essid, priv->essid_len)); 6315 iwl3945_escape_essid(priv->essid, priv->essid_len));
6316 else 6316 scan->channel_count =
6317 iwl3945_get_channels_for_scan(
6318 priv, band, 1, /* active */
6319 direct_mask,
6320 (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]);
6321 } else {
6317 IWL_DEBUG_SCAN("Initiating indirect scan.\n"); 6322 IWL_DEBUG_SCAN("Initiating indirect scan.\n");
6318 6323 scan->channel_count =
6319 scan->channel_count = 6324 iwl3945_get_channels_for_scan(
6320 iwl3945_get_channels_for_scan( 6325 priv, band, 0, /* passive */
6321 priv, band, 1, /* active */ 6326 direct_mask,
6322 direct_mask, 6327 (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]);
6323 (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]); 6328 }
6324 6329
6325 cmd.len += le16_to_cpu(scan->tx_cmd.len) + 6330 cmd.len += le16_to_cpu(scan->tx_cmd.len) +
6326 scan->channel_count * sizeof(struct iwl3945_scan_channel); 6331 scan->channel_count * sizeof(struct iwl3945_scan_channel);
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c
index b78ca7720bdf..0b7335181719 100644
--- a/drivers/net/wireless/iwlwifi/iwl4965-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c
@@ -6744,18 +6744,23 @@ static void iwl4965_bg_request_scan(struct work_struct *data)
6744 if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR) 6744 if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR)
6745 scan->filter_flags = RXON_FILTER_PROMISC_MSK; 6745 scan->filter_flags = RXON_FILTER_PROMISC_MSK;
6746 6746
6747 if (direct_mask) 6747 if (direct_mask) {
6748 IWL_DEBUG_SCAN 6748 IWL_DEBUG_SCAN
6749 ("Initiating direct scan for %s.\n", 6749 ("Initiating direct scan for %s.\n",
6750 iwl4965_escape_essid(priv->essid, priv->essid_len)); 6750 iwl4965_escape_essid(priv->essid, priv->essid_len));
6751 else 6751 scan->channel_count =
6752 iwl4965_get_channels_for_scan(
6753 priv, band, 1, /* active */
6754 direct_mask,
6755 (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]);
6756 } else {
6752 IWL_DEBUG_SCAN("Initiating indirect scan.\n"); 6757 IWL_DEBUG_SCAN("Initiating indirect scan.\n");
6753 6758 scan->channel_count =
6754 scan->channel_count = 6759 iwl4965_get_channels_for_scan(
6755 iwl4965_get_channels_for_scan( 6760 priv, band, 0, /* passive */
6756 priv, band, 1, /* active */ 6761 direct_mask,
6757 direct_mask, 6762 (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]);
6758 (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]); 6763 }
6759 6764
6760 cmd.len += le16_to_cpu(scan->tx_cmd.len) + 6765 cmd.len += le16_to_cpu(scan->tx_cmd.len) +
6761 scan->channel_count * sizeof(struct iwl4965_scan_channel); 6766 scan->channel_count * sizeof(struct iwl4965_scan_channel);