mac80211: provide station PMF configuration to driver
authorSenthilKumar Jegadeesan <sjegadee@qti.qualcomm.com>
Mon, 2 Mar 2015 07:59:40 +0000 (13:29 +0530)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 4 Mar 2015 09:34:12 +0000 (10:34 +0100)
Some device drivers offload part of aggregation including AddBA/DelBA
negotiations to firmware. In such scenario, the PMF configuration of
the station needs to be provided to driver to enable encryption of
AddBA/DelBA action frames.

Signed-off-by: SenthilKumar Jegadeesan <sjegadee@qti.qualcomm.com>
[fix commit log, documentation]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h
net/mac80211/cfg.c
net/mac80211/mlme.c

index d1d6fbc13b1cc2850cfa6063f02c578fa9e7c30e..a7756e45465ea31a956903cee4527d598c02b676 100644 (file)
@@ -1491,6 +1491,7 @@ struct ieee80211_sta_rates {
  * @tdls: indicates whether the STA is a TDLS peer
  * @tdls_initiator: indicates the STA is an initiator of the TDLS link. Only
  *     valid if the STA is a TDLS peer in the first place.
+ * @mfp: indicates whether the STA uses management frame protection or not.
  */
 struct ieee80211_sta {
        u32 supp_rates[IEEE80211_NUM_BANDS];
@@ -1507,6 +1508,7 @@ struct ieee80211_sta {
        struct ieee80211_sta_rates __rcu *rates;
        bool tdls;
        bool tdls_initiator;
+       bool mfp;
 
        /* must be last */
        u8 drv_priv[0] __aligned(sizeof(void *));
index 06557e4f95889f105f287b2b3dfe1bd7b0b9f577..94889def2ef5c41c76ebc327de7d5c8d57ec99c6 100644 (file)
@@ -1068,6 +1068,7 @@ static int sta_apply_parameters(struct ieee80211_local *local,
                sta->sta.wme = set & BIT(NL80211_STA_FLAG_WME);
 
        if (mask & BIT(NL80211_STA_FLAG_MFP)) {
+               sta->sta.mfp = !!(set & BIT(NL80211_STA_FLAG_MFP));
                if (set & BIT(NL80211_STA_FLAG_MFP))
                        set_sta_flag(sta, WLAN_STA_MFP);
                else
index bc2975e9127293ad11af21c33a3de4b34103f350..539d6a976cbf3d7494892e03bf9ba09ab18d103d 100644 (file)
@@ -2966,8 +2966,12 @@ static bool ieee80211_assoc_success(struct ieee80211_sub_if_data *sdata,
 
        rate_control_rate_init(sta);
 
-       if (ifmgd->flags & IEEE80211_STA_MFP_ENABLED)
+       if (ifmgd->flags & IEEE80211_STA_MFP_ENABLED) {
                set_sta_flag(sta, WLAN_STA_MFP);
+               sta->sta.mfp = true;
+       } else {
+               sta->sta.mfp = false;
+       }
 
        sta->sta.wme = elems.wmm_param;