Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 214854
b: refs/heads/master
c: 8dcb200
h: refs/heads/master
v: v3
  • Loading branch information
Jouni Malinen authored and John W. Linville committed Sep 24, 2010
1 parent 44131b5 commit e2f68aa
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 29ad2facd47f8e37eab8b156e2c384fa181c8b4a
refs/heads/master: 8dcb20038ade81f9a87c024e7f12ec74f0e95f33
2 changes: 1 addition & 1 deletion trunk/net/mac80211/ieee80211_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -1256,7 +1256,7 @@ void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,
const u8 *key, u8 key_len, u8 key_idx);
int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
const u8 *ie, size_t ie_len,
enum ieee80211_band band);
enum ieee80211_band band, u32 rate_mask);
void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst,
const u8 *ssid, size_t ssid_len,
const u8 *ie, size_t ie_len);
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/mac80211/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
local->hw_scan_req->n_channels = n_chans;

ielen = ieee80211_build_preq_ies(local, (u8 *)local->hw_scan_req->ie,
req->ie, req->ie_len, band);
req->ie, req->ie_len, band, (u32) -1);
local->hw_scan_req->ie_len = ielen;

return true;
Expand Down
37 changes: 22 additions & 15 deletions trunk/net/mac80211/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -895,26 +895,33 @@ void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,

int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
const u8 *ie, size_t ie_len,
enum ieee80211_band band)
enum ieee80211_band band, u32 rate_mask)
{
struct ieee80211_supported_band *sband;
u8 *pos;
size_t offset = 0, noffset;
int supp_rates_len, i;
u8 rates[32];
int num_rates;
int ext_rates_len;

sband = local->hw.wiphy->bands[band];

pos = buffer;

supp_rates_len = min_t(int, sband->n_bitrates, 8);
num_rates = 0;
for (i = 0; i < sband->n_bitrates; i++) {
if ((BIT(i) & rate_mask) == 0)
continue; /* skip rate */
rates[num_rates++] = (u8) (sband->bitrates[i].bitrate / 5);
}

supp_rates_len = min_t(int, num_rates, 8);

*pos++ = WLAN_EID_SUPP_RATES;
*pos++ = supp_rates_len;

for (i = 0; i < supp_rates_len; i++) {
int rate = sband->bitrates[i].bitrate;
*pos++ = (u8) (rate / 5);
}
memcpy(pos, rates, supp_rates_len);
pos += supp_rates_len;

/* insert "request information" if in custom IEs */
if (ie && ie_len) {
Expand All @@ -932,14 +939,12 @@ int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
offset = noffset;
}

if (sband->n_bitrates > i) {
ext_rates_len = num_rates - supp_rates_len;
if (ext_rates_len > 0) {
*pos++ = WLAN_EID_EXT_SUPP_RATES;
*pos++ = sband->n_bitrates - i;

for (; i < sband->n_bitrates; i++) {
int rate = sband->bitrates[i].bitrate;
*pos++ = (u8) (rate / 5);
}
*pos++ = ext_rates_len;
memcpy(pos, rates + supp_rates_len, ext_rates_len);
pos += ext_rates_len;
}

/* insert custom IEs that go before HT */
Expand Down Expand Up @@ -1018,7 +1023,9 @@ void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst,
}

buf_len = ieee80211_build_preq_ies(local, buf, ie, ie_len,
local->hw.conf.channel->band);
local->hw.conf.channel->band,
sdata->rc_rateidx_mask
[local->hw.conf.channel->band]);

skb = ieee80211_probereq_get(&local->hw, &sdata->vif,
ssid, ssid_len,
Expand Down

0 comments on commit e2f68aa

Please sign in to comment.