diff options
author | Rajkumar Manoharan <rmanohar@qca.qualcomm.com> | 2011-09-29 11:04:04 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-10-03 15:22:32 -0400 |
commit | b6f35301efda5e94342cfcca9e29b7b3e9a5f827 (patch) | |
tree | f828168204f52f423a7d1b160b9f371c0fd94dc1 /net/mac80211/mlme.c | |
parent | e209c5a7ed1870ab7f112ad47083b5d616e8b6a4 (diff) |
mac80211: Send nullfunc frames at lower rate during connection monitor
Recently mac80211 was changed to use nullfunc instead of probe
request for connection monitoring for tx ack status reporting
hardwares. Sometimes in congested network, STA got disconnected
quickly after the association. It was observered that the rate
control was not adopted to environment due to minimal transmission.
As the nullfunc are used for monitoring purpose, these frames should
not be sacrificed for rate control updation. So it is better to send
the monitoring null func frames at minimum rate that could help to
retain the connection.
Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r-- | net/mac80211/mlme.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index c4e8901c96f6..0e5d8daba1ee 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -348,6 +348,7 @@ void ieee80211_send_nullfunc(struct ieee80211_local *local, | |||
348 | { | 348 | { |
349 | struct sk_buff *skb; | 349 | struct sk_buff *skb; |
350 | struct ieee80211_hdr_3addr *nullfunc; | 350 | struct ieee80211_hdr_3addr *nullfunc; |
351 | struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; | ||
351 | 352 | ||
352 | skb = ieee80211_nullfunc_get(&local->hw, &sdata->vif); | 353 | skb = ieee80211_nullfunc_get(&local->hw, &sdata->vif); |
353 | if (!skb) | 354 | if (!skb) |
@@ -358,6 +359,10 @@ void ieee80211_send_nullfunc(struct ieee80211_local *local, | |||
358 | nullfunc->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM); | 359 | nullfunc->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM); |
359 | 360 | ||
360 | IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; | 361 | IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; |
362 | if (ifmgd->flags & (IEEE80211_STA_BEACON_POLL | | ||
363 | IEEE80211_STA_CONNECTION_POLL)) | ||
364 | IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_USE_MINRATE; | ||
365 | |||
361 | ieee80211_tx_skb(sdata, skb); | 366 | ieee80211_tx_skb(sdata, skb); |
362 | } | 367 | } |
363 | 368 | ||