mac80211: use Probe Request template when sending a direct scan
As mac80211 now has a separate function for creating Probe Request templates, better to use it when sending direct Probe Requests to an AP. Only the bssid needs to be updated in the template before sending it. Signed-off-by: Kalle Valo <kalle.valo@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
05e54ea6cc
commit
7c12ce8b85
1 changed files with 15 additions and 23 deletions
|
@ -1000,37 +1000,29 @@ void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst,
|
|||
struct ieee80211_local *local = sdata->local;
|
||||
struct sk_buff *skb;
|
||||
struct ieee80211_mgmt *mgmt;
|
||||
u8 *pos;
|
||||
size_t buf_len;
|
||||
u8 *buf;
|
||||
|
||||
skb = dev_alloc_skb(local->hw.extra_tx_headroom + sizeof(*mgmt) + 200 +
|
||||
ie_len);
|
||||
if (!skb) {
|
||||
printk(KERN_DEBUG "%s: failed to allocate buffer for probe "
|
||||
"request\n", sdata->name);
|
||||
/* FIXME: come up with a proper value */
|
||||
buf = kmalloc(200 + ie_len, GFP_KERNEL);
|
||||
if (!buf) {
|
||||
printk(KERN_DEBUG "%s: failed to allocate temporary IE "
|
||||
"buffer\n", sdata->name);
|
||||
return;
|
||||
}
|
||||
skb_reserve(skb, local->hw.extra_tx_headroom);
|
||||
|
||||
mgmt = (struct ieee80211_mgmt *) skb_put(skb, 24);
|
||||
memset(mgmt, 0, 24);
|
||||
mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
|
||||
IEEE80211_STYPE_PROBE_REQ);
|
||||
memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN);
|
||||
buf_len = ieee80211_build_preq_ies(local, buf, ie, ie_len,
|
||||
local->hw.conf.channel->band);
|
||||
|
||||
skb = ieee80211_probereq_get(&local->hw, &sdata->vif,
|
||||
ssid, ssid_len,
|
||||
buf, buf_len);
|
||||
|
||||
if (dst) {
|
||||
mgmt = (struct ieee80211_mgmt *) skb->data;
|
||||
memcpy(mgmt->da, dst, ETH_ALEN);
|
||||
memcpy(mgmt->bssid, dst, ETH_ALEN);
|
||||
} else {
|
||||
memset(mgmt->da, 0xff, ETH_ALEN);
|
||||
memset(mgmt->bssid, 0xff, ETH_ALEN);
|
||||
}
|
||||
pos = skb_put(skb, 2 + ssid_len);
|
||||
*pos++ = WLAN_EID_SSID;
|
||||
*pos++ = ssid_len;
|
||||
memcpy(pos, ssid, ssid_len);
|
||||
pos += ssid_len;
|
||||
|
||||
skb_put(skb, ieee80211_build_preq_ies(local, pos, ie, ie_len,
|
||||
local->hw.conf.channel->band));
|
||||
|
||||
IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
|
||||
ieee80211_tx_skb(sdata, skb);
|
||||
|
|
Loading…
Reference in a new issue