rc80211_pid should respect fixed rates.
[deliverable/linux.git] / net / mac80211 / rc80211_pid_algo.c
index 0995bb9cec213361dedc4d098d2c96f8d8e58442..66cae53a647de66c0e0dadd526e9115db7bf8a6e 100644 (file)
@@ -108,10 +108,6 @@ static void rate_control_pid_adjust_rate(struct ieee80211_local *local,
        int back = (adj > 0) ? 1 : -1;
 
        sdata = IEEE80211_DEV_TO_SUB_IF(sta->dev);
-       if (sdata->bss && sdata->bss->force_unicast_rateidx > -1) {
-               /* forced unicast rate - do not change STA rate */
-               return;
-       }
 
        mode = local->oper_hw_mode;
        maxrate = sdata->bss ? sdata->bss->max_ratectrl_rateidx : -1;
@@ -241,6 +237,7 @@ static void rate_control_pid_tx_status(void *priv, struct net_device *dev,
 {
        struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
+       struct ieee80211_sub_if_data *sdata;
        struct rc_pid_info *pinfo = priv;
        struct sta_info *sta;
        struct rc_pid_sta_info *spinfo;
@@ -251,6 +248,13 @@ static void rate_control_pid_tx_status(void *priv, struct net_device *dev,
        if (!sta)
                return;
 
+       /* Don't update the state if we're not controlling the rate. */
+       sdata = IEEE80211_DEV_TO_SUB_IF(sta->dev);
+       if (sdata->bss && sdata->bss->force_unicast_rateidx > -1) {
+               sta->txrate = sdata->bss->max_ratectrl_rateidx;
+               return;
+       }
+
        /* Ignore all frames that were sent with a different rate than the rate
         * we currently advise mac80211 to use. */
        if (status->control.rate != &local->oper_hw_mode->rates[sta->txrate])
This page took 0.02376 seconds and 5 git commands to generate.