mac80211: init rate-control for TDLS sta when supp-rates are known
authorArik Nemtsov <arik@wizery.com>
Mon, 7 Nov 2011 21:24:39 +0000 (23:24 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 11 Nov 2011 17:32:47 +0000 (12:32 -0500)
Initialize rate control algorithms only when supported rates are known
for a TDLS peer sta. Direct Tx between peers is not allowed before the
link is enabled. In turn, this only occurs after a change_station()
call that sets supported rates.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/cfg.c

index 02a43234b91ca5e5d254525e72e4920c8abb1560..eb54b6cf85c666652f9949641bffbc71b8697627 100644 (file)
@@ -869,7 +869,12 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
 
        sta_apply_parameters(local, sta, params);
 
-       rate_control_rate_init(sta);
+       /*
+        * for TDLS, rate control should be initialized only when supported
+        * rates are known.
+        */
+       if (!test_sta_flag(sta, WLAN_STA_TDLS_PEER))
+               rate_control_rate_init(sta);
 
        layer2_update = sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
                sdata->vif.type == NL80211_IFTYPE_AP;
@@ -953,6 +958,9 @@ static int ieee80211_change_station(struct wiphy *wiphy,
 
        sta_apply_parameters(local, sta, params);
 
+       if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) && params->supported_rates)
+               rate_control_rate_init(sta);
+
        rcu_read_unlock();
 
        if (sdata->vif.type == NL80211_IFTYPE_STATION &&