mac80211: Update the station failed frames average when minstrel is used.
authorJavier Cardona <javier@cozybit.com>
Mon, 10 Aug 2009 19:15:49 +0000 (12:15 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 14 Aug 2009 13:14:00 +0000 (09:14 -0400)
The fail_avg value is used to compute the mesh metric, and was only being set
by the pid rate control module. This fixes the mesh path selection mechanism
for cards that use mistrel for rate control.

Signed-off-by: Javier Cardona <javier@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/rc80211_minstrel.c

index 7c5142988bbb77f140d373e26414f9bd0dec31b7..3ea9740736a5ac28229b5f563be18128c11d6660 100644 (file)
@@ -155,12 +155,16 @@ minstrel_tx_status(void *priv, struct ieee80211_supported_band *sband,
                   struct sk_buff *skb)
 {
        struct minstrel_sta_info *mi = priv_sta;
+       struct minstrel_priv *mp = (struct minstrel_priv *)priv;
        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
        struct ieee80211_tx_rate *ar = info->status.rates;
+       struct ieee80211_local *local = hw_to_local(mp->hw);
+       struct sta_info *si;
        int i, ndx;
        int success;
 
        success = !!(info->flags & IEEE80211_TX_STAT_ACK);
+       si = sta_info_get(local, sta->addr);
 
        for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
                if (ar[i].idx < 0)
@@ -172,8 +176,12 @@ minstrel_tx_status(void *priv, struct ieee80211_supported_band *sband,
 
                mi->r[ndx].attempts += ar[i].count;
 
-               if ((i != IEEE80211_TX_MAX_RATES - 1) && (ar[i + 1].idx < 0))
+               if ((i != IEEE80211_TX_MAX_RATES - 1) && (ar[i + 1].idx < 0)) {
                        mi->r[ndx].success += success;
+                       if (si)
+                               si->fail_avg = (18050 - mi->r[ndx].probability)
+                                       / 180;
+               }
        }
 
        if ((info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE) && (i >= 0))