mac80211: set auth flags after other station info
authorArik Nemtsov <arik@wizery.com>
Wed, 11 Jun 2014 14:18:19 +0000 (17:18 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 23 Jun 2014 12:24:55 +0000 (14:24 +0200)
For TDLS, the AUTHORIZED flag arrives with all other important station
info (supported rates, HT/VHT caps, ...). Make sure to set the station
state in the low-level driver after transferring this information to
the mac80211 STA entry.
This aligns the STA information during sta_state callbacks with the
non-TDLS case.

Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/cfg.c

index a0d7a03..73c9e10 100644 (file)
@@ -997,9 +997,12 @@ static int sta_apply_parameters(struct ieee80211_local *local,
                }
        }
 
-       ret = sta_apply_auth_flags(local, sta, mask, set);
-       if (ret)
-               return ret;
+       /* auth flags will be set later for TDLS stations */
+       if (!test_sta_flag(sta, WLAN_STA_TDLS_PEER)) {
+               ret = sta_apply_auth_flags(local, sta, mask, set);
+               if (ret)
+                       return ret;
+       }
 
        if (mask & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE)) {
                if (set & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE))
@@ -1136,6 +1139,13 @@ static int sta_apply_parameters(struct ieee80211_local *local,
 #endif
        }
 
+       /* set the STA state after all sta info from usermode has been set */
+       if (test_sta_flag(sta, WLAN_STA_TDLS_PEER)) {
+               ret = sta_apply_auth_flags(local, sta, mask, set);
+               if (ret)
+                       return ret;
+       }
+
        return 0;
 }