mac80211: add twt_protected flag to the bss_conf structure
authorShaul Triebitz <shaul.triebitz@intel.com>
Thu, 26 Mar 2020 13:09:33 +0000 (15:09 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 24 Apr 2020 10:33:42 +0000 (12:33 +0200)
Add a flag to the BSS conf whether the BSS and STA support protected TWT.

Signed-off-by: Shaul Triebitz <shaul.triebitz@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20200326150855.1dcb2d16fa74.I74d7c007dad2601d2e39f54612fe6554dd5ab386@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h
net/mac80211/mlme.c

index f12fe3b..5fb80dd 100644 (file)
@@ -508,6 +508,7 @@ struct ieee80211_ftm_responder_params {
  *     mode only, set if the AP advertises TWT responder role)
  * @twt_responder: does this BSS support TWT requester (relevant for managed
  *     mode only, set if the AP advertises TWT responder role)
+ * @twt_protected: does this BSS support protected TWT frames
  * @assoc: association status
  * @ibss_joined: indicates whether this station is part of an IBSS
  *     or not
@@ -618,6 +619,7 @@ struct ieee80211_bss_conf {
        bool he_support;
        bool twt_requester;
        bool twt_responder;
+       bool twt_protected;
        /* association related data */
        bool assoc, ibss_joined;
        bool ibss_creator;
index 7139335..b777879 100644 (file)
@@ -3384,10 +3384,19 @@ static bool ieee80211_assoc_success(struct ieee80211_sub_if_data *sdata,
                                                  sta);
 
                bss_conf->he_support = sta->sta.he_cap.has_he;
+               if (elems->rsnx && elems->rsnx_len &&
+                   (elems->rsnx[0] & WLAN_RSNX_CAPA_PROTECTED_TWT) &&
+                   wiphy_ext_feature_isset(local->hw.wiphy,
+                                           NL80211_EXT_FEATURE_PROTECTED_TWT))
+                       bss_conf->twt_protected = true;
+               else
+                       bss_conf->twt_protected = false;
+
                changed |= ieee80211_recalc_twt_req(sdata, sta, elems);
        } else {
                bss_conf->he_support = false;
                bss_conf->twt_requester = false;
+               bss_conf->twt_protected = false;
        }
 
        if (bss_conf->he_support) {