diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-scan.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-scan.c | 49 |
1 files changed, 16 insertions, 33 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c index dd9ff2ed645..bd2f7c42056 100644 --- a/drivers/net/wireless/iwlwifi/iwl-scan.c +++ b/drivers/net/wireless/iwlwifi/iwl-scan.c | |||
@@ -638,20 +638,9 @@ u16 iwl_fill_probe_req(struct iwl_priv *priv, struct ieee80211_mgmt *frame, | |||
638 | if (left < 0) | 638 | if (left < 0) |
639 | return 0; | 639 | return 0; |
640 | *pos++ = WLAN_EID_SSID; | 640 | *pos++ = WLAN_EID_SSID; |
641 | if (!priv->is_internal_short_scan && | 641 | *pos++ = 0; |
642 | priv->scan_request->n_ssids) { | 642 | |
643 | struct cfg80211_ssid *ssid = | 643 | len += 2; |
644 | priv->scan_request->ssids; | ||
645 | |||
646 | /* Broadcast if ssid_len is 0 */ | ||
647 | *pos++ = ssid->ssid_len; | ||
648 | memcpy(pos, ssid->ssid, ssid->ssid_len); | ||
649 | pos += ssid->ssid_len; | ||
650 | len += 2 + ssid->ssid_len; | ||
651 | } else { | ||
652 | *pos++ = 0; | ||
653 | len += 2; | ||
654 | } | ||
655 | 644 | ||
656 | if (WARN_ON(left < ie_len)) | 645 | if (WARN_ON(left < ie_len)) |
657 | return len; | 646 | return len; |
@@ -780,26 +769,20 @@ static void iwl_bg_request_scan(struct work_struct *data) | |||
780 | if (priv->is_internal_short_scan) { | 769 | if (priv->is_internal_short_scan) { |
781 | IWL_DEBUG_SCAN(priv, "Start internal passive scan.\n"); | 770 | IWL_DEBUG_SCAN(priv, "Start internal passive scan.\n"); |
782 | } else if (priv->scan_request->n_ssids) { | 771 | } else if (priv->scan_request->n_ssids) { |
772 | int i, p = 0; | ||
783 | IWL_DEBUG_SCAN(priv, "Kicking off active scan\n"); | 773 | IWL_DEBUG_SCAN(priv, "Kicking off active scan\n"); |
784 | /* | 774 | for (i = 0; i < priv->scan_request->n_ssids; i++) { |
785 | * The first SSID to scan is stuffed into the probe request | 775 | /* always does wildcard anyway */ |
786 | * template and the remaining ones are handled through the | 776 | if (!priv->scan_request->ssids[i].ssid_len) |
787 | * direct_scan array. | 777 | continue; |
788 | */ | 778 | scan->direct_scan[p].id = WLAN_EID_SSID; |
789 | if (priv->scan_request->n_ssids > 1) { | 779 | scan->direct_scan[p].len = |
790 | int i, p = 0; | 780 | priv->scan_request->ssids[i].ssid_len; |
791 | for (i = 1; i < priv->scan_request->n_ssids; i++) { | 781 | memcpy(scan->direct_scan[p].ssid, |
792 | if (!priv->scan_request->ssids[i].ssid_len) | 782 | priv->scan_request->ssids[i].ssid, |
793 | continue; | 783 | priv->scan_request->ssids[i].ssid_len); |
794 | scan->direct_scan[p].id = WLAN_EID_SSID; | 784 | n_probes++; |
795 | scan->direct_scan[p].len = | 785 | p++; |
796 | priv->scan_request->ssids[i].ssid_len; | ||
797 | memcpy(scan->direct_scan[p].ssid, | ||
798 | priv->scan_request->ssids[i].ssid, | ||
799 | priv->scan_request->ssids[i].ssid_len); | ||
800 | n_probes++; | ||
801 | p++; | ||
802 | } | ||
803 | } | 786 | } |
804 | is_active = true; | 787 | is_active = true; |
805 | } else | 788 | } else |