diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-01-29 09:02:27 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-01-31 08:28:43 -0500 |
commit | 1672c0e31917f49d31d30d79067103432bc20cc7 (patch) | |
tree | cc5b6b0017129b5748cfa2bace537d43c991d66c /net/mac80211/ieee80211_i.h | |
parent | 3ff9a827c683353b9826ef57366b0f313acc21b0 (diff) |
mac80211: start auth/assoc timeout on frame status
When sending authentication/association frames they
might take a bit of time to go out because we may
have to synchronise with the AP, in particular in
the case where it's really a P2P GO. In this case
the 200ms fixed timeout could potentially be too
short if the beacon interval is relatively large.
For drivers that report TX status we can do better.
Instead of starting the timeout directly, start it
only when the frame status arrives. Since then the
frame was out on the air, we can wait shorter (the
typical response time is supposed to be 30ms, wait
100ms.) Also, if the frame failed to be transmitted
try again right away instead of waiting.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index e4ee16839c6d..c9c66dec170a 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -415,6 +415,10 @@ struct ieee80211_if_managed { | |||
415 | bool beacon_crc_valid; | 415 | bool beacon_crc_valid; |
416 | u32 beacon_crc; | 416 | u32 beacon_crc; |
417 | 417 | ||
418 | bool status_acked; | ||
419 | bool status_received; | ||
420 | __le16 status_fc; | ||
421 | |||
418 | enum { | 422 | enum { |
419 | IEEE80211_MFP_DISABLED, | 423 | IEEE80211_MFP_DISABLED, |
420 | IEEE80211_MFP_OPTIONAL, | 424 | IEEE80211_MFP_OPTIONAL, |
@@ -1284,6 +1288,8 @@ void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, | |||
1284 | void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata); | 1288 | void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata); |
1285 | void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata); | 1289 | void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata); |
1286 | void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata); | 1290 | void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata); |
1291 | void ieee80211_mgd_conn_tx_status(struct ieee80211_sub_if_data *sdata, | ||
1292 | __le16 fc, bool acked); | ||
1287 | 1293 | ||
1288 | /* IBSS code */ | 1294 | /* IBSS code */ |
1289 | void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local); | 1295 | void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local); |
@@ -1544,7 +1550,8 @@ static inline void ieee80211_add_pending_skbs(struct ieee80211_local *local, | |||
1544 | void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, | 1550 | void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, |
1545 | u16 transaction, u16 auth_alg, u16 status, | 1551 | u16 transaction, u16 auth_alg, u16 status, |
1546 | u8 *extra, size_t extra_len, const u8 *bssid, | 1552 | u8 *extra, size_t extra_len, const u8 *bssid, |
1547 | const u8 *da, const u8 *key, u8 key_len, u8 key_idx); | 1553 | const u8 *da, const u8 *key, u8 key_len, u8 key_idx, |
1554 | u32 tx_flags); | ||
1548 | void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata, | 1555 | void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata, |
1549 | const u8 *bssid, u16 stype, u16 reason, | 1556 | const u8 *bssid, u16 stype, u16 reason, |
1550 | bool send_frame, u8 *frame_buf); | 1557 | bool send_frame, u8 *frame_buf); |
@@ -1561,7 +1568,7 @@ struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata, | |||
1561 | void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, | 1568 | void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, |
1562 | const u8 *ssid, size_t ssid_len, | 1569 | const u8 *ssid, size_t ssid_len, |
1563 | const u8 *ie, size_t ie_len, | 1570 | const u8 *ie, size_t ie_len, |
1564 | u32 ratemask, bool directed, bool no_cck, | 1571 | u32 ratemask, bool directed, u32 tx_flags, |
1565 | struct ieee80211_channel *channel, bool scan); | 1572 | struct ieee80211_channel *channel, bool scan); |
1566 | 1573 | ||
1567 | void ieee80211_sta_def_wmm_params(struct ieee80211_sub_if_data *sdata, | 1574 | void ieee80211_sta_def_wmm_params(struct ieee80211_sub_if_data *sdata, |