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 dd9ff2ed645a..bd2f7c420563 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 |
