mac80211: implement packet loss notification
For drivers that have accurate TX status reporting we can report the number of consecutive lost packets to userspace using the new cfg80211 CQM event. The threshold is fixed right now, this may need to be improved in the future. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
c063dbf52b
commit
99ba2a1428
@@ -161,6 +161,15 @@ static void ieee80211_frame_acked(struct sta_info *sta, struct sk_buff *skb)
|
||||
ieee80211_sta_tx_notify(sdata, (void *) skb->data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Use a static threshold for now, best value to be determined
|
||||
* by testing ...
|
||||
* Should it depend on:
|
||||
* - on # of retransmissions
|
||||
* - current throughput (higher value for higher tpt)?
|
||||
*/
|
||||
#define STA_LOST_PKT_THRESHOLD 50
|
||||
|
||||
void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
{
|
||||
struct sk_buff *skb2;
|
||||
@@ -247,6 +256,19 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
if (!(info->flags & IEEE80211_TX_CTL_INJECTED) &&
|
||||
(info->flags & IEEE80211_TX_STAT_ACK))
|
||||
ieee80211_frame_acked(sta, skb);
|
||||
|
||||
if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) {
|
||||
if (info->flags & IEEE80211_TX_STAT_ACK) {
|
||||
if (sta->lost_packets)
|
||||
sta->lost_packets = 0;
|
||||
} else if (++sta->lost_packets >= STA_LOST_PKT_THRESHOLD) {
|
||||
cfg80211_cqm_pktloss_notify(sta->sdata->dev,
|
||||
sta->sta.addr,
|
||||
sta->lost_packets,
|
||||
GFP_ATOMIC);
|
||||
sta->lost_packets = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rcu_read_unlock();
|
||||
|
Reference in New Issue
Block a user