提交 1382c71c 编写于 作者: R Reinette Chatre

Revert "iwlwifi: Send broadcast probe request only when asked to"

This reverts commit 21b2d8bd.

As explained by Johannes:
When we
build a probe request frame in the buffer with the SSID, we could
arrive over the limit of 200 bytes. When we build it in the buffer
without the SSID (wildcard) we don't arrive over 200 bytes, but the
ucode still allows direct probe in addition because it has an internal
buffer that is larger when it inserts the SSID...
Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
上级 1d79e53c
...@@ -2653,7 +2653,7 @@ static int iwl_mac_setup_register(struct iwl_priv *priv) ...@@ -2653,7 +2653,7 @@ static int iwl_mac_setup_register(struct iwl_priv *priv)
*/ */
hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
hw->wiphy->max_scan_ssids = PROBE_OPTION_MAX + 1; hw->wiphy->max_scan_ssids = PROBE_OPTION_MAX;
/* we create the 802.11 header and a zero-length SSID element */ /* we create the 802.11 header and a zero-length SSID element */
hw->wiphy->max_scan_ie_len = IWL_MAX_PROBE_REQUEST - 24 - 2; hw->wiphy->max_scan_ie_len = IWL_MAX_PROBE_REQUEST - 24 - 2;
......
...@@ -638,20 +638,9 @@ u16 iwl_fill_probe_req(struct iwl_priv *priv, struct ieee80211_mgmt *frame, ...@@ -638,20 +638,9 @@ u16 iwl_fill_probe_req(struct iwl_priv *priv, struct ieee80211_mgmt *frame,
if (left < 0) if (left < 0)
return 0; return 0;
*pos++ = WLAN_EID_SSID; *pos++ = WLAN_EID_SSID;
if (!priv->is_internal_short_scan && *pos++ = 0;
priv->scan_request->n_ssids) {
struct cfg80211_ssid *ssid = len += 2;
priv->scan_request->ssids;
/* Broadcast if ssid_len is 0 */
*pos++ = ssid->ssid_len;
memcpy(pos, ssid->ssid, ssid->ssid_len);
pos += ssid->ssid_len;
len += 2 + ssid->ssid_len;
} else {
*pos++ = 0;
len += 2;
}
if (WARN_ON(left < ie_len)) if (WARN_ON(left < ie_len))
return len; return len;
...@@ -780,26 +769,20 @@ static void iwl_bg_request_scan(struct work_struct *data) ...@@ -780,26 +769,20 @@ static void iwl_bg_request_scan(struct work_struct *data)
if (priv->is_internal_short_scan) { if (priv->is_internal_short_scan) {
IWL_DEBUG_SCAN(priv, "Start internal passive scan.\n"); IWL_DEBUG_SCAN(priv, "Start internal passive scan.\n");
} else if (priv->scan_request->n_ssids) { } else if (priv->scan_request->n_ssids) {
int i, p = 0;
IWL_DEBUG_SCAN(priv, "Kicking off active scan\n"); IWL_DEBUG_SCAN(priv, "Kicking off active scan\n");
/* for (i = 0; i < priv->scan_request->n_ssids; i++) {
* The first SSID to scan is stuffed into the probe request /* always does wildcard anyway */
* template and the remaining ones are handled through the if (!priv->scan_request->ssids[i].ssid_len)
* direct_scan array. continue;
*/ scan->direct_scan[p].id = WLAN_EID_SSID;
if (priv->scan_request->n_ssids > 1) { scan->direct_scan[p].len =
int i, p = 0; priv->scan_request->ssids[i].ssid_len;
for (i = 1; i < priv->scan_request->n_ssids; i++) { memcpy(scan->direct_scan[p].ssid,
if (!priv->scan_request->ssids[i].ssid_len) priv->scan_request->ssids[i].ssid,
continue; priv->scan_request->ssids[i].ssid_len);
scan->direct_scan[p].id = WLAN_EID_SSID; n_probes++;
scan->direct_scan[p].len = p++;
priv->scan_request->ssids[i].ssid_len;
memcpy(scan->direct_scan[p].ssid,
priv->scan_request->ssids[i].ssid,
priv->scan_request->ssids[i].ssid_len);
n_probes++;
p++;
}
} }
is_active = true; is_active = true;
} else } else
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册