wlan: Complete PMF (802.11w) support for Soft AP
These changes complete Protected Management Frames (802.11w)
support for the device in Soft AP mode.
The changes allow support for this feature without any changes
needed in hostapd or the cfg80211/nl80211 interface. Support
is completely done within the driver.
Change-Id: I3bb0ab9ae4eed0ff02f5d0d1d570b0886278d1e0
CRs-Fixed: 505740
diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h
index f35a2a0..b549e11 100644
--- a/CORE/MAC/src/include/dot11f.h
+++ b/CORE/MAC/src/include/dot11f.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012 - 2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -38,11 +38,10 @@
* for working with 802.11 Frames
*
*
-
*
*
* This file was automatically generated by 'framesc'
- * Fri Feb 7 16:55:44 2014 from the following file(s):
+ * Thu Feb 13 15:40:58 2014 from the following file(s):
*
* dot11f.frms
*
@@ -308,6 +307,16 @@
void dot11fPackFfDialogToken(tpAniSirGlobal, tDot11fFfDialogToken*, tANI_U8*);
+typedef struct sDot11fFfLeader {
+ tANI_U8 mac[6];
+} tDot11fFfLeader;
+
+#define DOT11F_FF_LEADER_LEN ( 6 )
+
+void dot11fUnpackFfLeader(tpAniSirGlobal, tANI_U8*, tDot11fFfLeader*);
+
+void dot11fPackFfLeader(tpAniSirGlobal, tDot11fFfLeader*, tANI_U8*);
+
typedef struct sDot11fFfLinkMargin {
tANI_U8 linkMargin;
} tDot11fFfLinkMargin;
@@ -328,6 +337,16 @@
void dot11fPackFfListenInterval(tpAniSirGlobal, tDot11fFfListenInterval*, tANI_U8*);
+typedef struct sDot11fFfMagicCode {
+ tANI_U8 magic[6];
+} tDot11fFfMagicCode;
+
+#define DOT11F_FF_MAGICCODE_LEN ( 6 )
+
+void dot11fUnpackFfMagicCode(tpAniSirGlobal, tANI_U8*, tDot11fFfMagicCode*);
+
+void dot11fPackFfMagicCode(tpAniSirGlobal, tDot11fFfMagicCode*, tANI_U8*);
+
typedef struct sDot11fFfMaxTxPower {
tANI_U8 maxTxPower;
} tDot11fFfMaxTxPower;
@@ -400,6 +419,36 @@
void dot11fPackFfRCPI(tpAniSirGlobal, tDot11fFfRCPI*, tANI_U8*);
+typedef struct sDot11fFfRMCDialogToken {
+ tANI_U32 token;
+} tDot11fFfRMCDialogToken;
+
+#define DOT11F_FF_RMCDIALOGTOKEN_LEN ( 4 )
+
+void dot11fUnpackFfRMCDialogToken(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCDialogToken*);
+
+void dot11fPackFfRMCDialogToken(tpAniSirGlobal, tDot11fFfRMCDialogToken*, tANI_U8*);
+
+typedef struct sDot11fFfRMCOUI {
+ tANI_U8 oui[3];
+} tDot11fFfRMCOUI;
+
+#define DOT11F_FF_RMCOUI_LEN ( 3 )
+
+void dot11fUnpackFfRMCOUI(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCOUI*);
+
+void dot11fPackFfRMCOUI(tpAniSirGlobal, tDot11fFfRMCOUI*, tANI_U8*);
+
+typedef struct sDot11fFfRMCVersion {
+ tANI_U8 version;
+} tDot11fFfRMCVersion;
+
+#define DOT11F_FF_RMCVERSION_LEN ( 1 )
+
+void dot11fUnpackFfRMCVersion(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCVersion*);
+
+void dot11fPackFfRMCVersion(tpAniSirGlobal, tDot11fFfRMCVersion*, tANI_U8*);
+
typedef struct sDot11fFfRSNI {
tANI_U8 rsni;
} tDot11fFfRSNI;
@@ -3762,32 +3811,6 @@
#ifdef __cplusplus
}; /* End extern "C". */
#endif /* C++ */
-// EID 56 (0x38)
-typedef struct sDot11fIEFTTimeoutInterval {
- tANI_U8 present;
- tANI_U8 timeoutType;
- tANI_U32 timeoutValue;
-} tDot11fIEFTTimeoutInterval;
-
-#define DOT11F_EID_FTTIMEOUTINTERVAL ( 56 )
-
-// N.B. These #defines do *not* include the EID & length
-#define DOT11F_IE_FTTIMEOUTINTERVAL_MIN_LEN ( 5 )
-
-#define DOT11F_IE_FTTIMEOUTINTERVAL_MAX_LEN ( 5 )
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* C++ */
-tANI_U32 dot11fUnpackIeFTTimeoutInterval(tpAniSirGlobal, tANI_U8*,tANI_U8, tDot11fIEFTTimeoutInterval*);
-
-tANI_U32 dot11fPackIeFTTimeoutInterval(tpAniSirGlobal, tDot11fIEFTTimeoutInterval*, tANI_U8*, tANI_U32, tANI_U32*);
-
-tANI_U32 dot11fGetPackedIEFTTimeoutInterval(tpAniSirGlobal, tDot11fIEFTTimeoutInterval*, tANI_U32*);
-
-#ifdef __cplusplus
-}; /* End extern "C". */
-#endif /* C++ */
// EID 45 (0x2d)
typedef struct sDot11fIEHTCaps {
tANI_U8 present;
@@ -5357,6 +5380,32 @@
#ifdef __cplusplus
}; /* End extern "C". */
#endif /* C++ */
+// EID 56 (0x38)
+typedef struct sDot11fIETimeoutInterval {
+ tANI_U8 present;
+ tANI_U8 timeoutType;
+ tANI_U32 timeoutValue;
+} tDot11fIETimeoutInterval;
+
+#define DOT11F_EID_TIMEOUTINTERVAL ( 56 )
+
+// N.B. These #defines do *not* include the EID & length
+#define DOT11F_IE_TIMEOUTINTERVAL_MIN_LEN ( 5 )
+
+#define DOT11F_IE_TIMEOUTINTERVAL_MAX_LEN ( 5 )
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+tANI_U32 dot11fUnpackIeTimeoutInterval(tpAniSirGlobal, tANI_U8*,tANI_U8, tDot11fIETimeoutInterval*);
+
+tANI_U32 dot11fPackIeTimeoutInterval(tpAniSirGlobal, tDot11fIETimeoutInterval*, tANI_U8*, tANI_U32, tANI_U32*);
+
+tANI_U32 dot11fGetPackedIETimeoutInterval(tpAniSirGlobal, tDot11fIETimeoutInterval*, tANI_U32*);
+
+#ifdef __cplusplus
+}; /* End extern "C". */
+#endif /* C++ */
// EID 191 (0xbf)
typedef struct sDot11fIEVHTCaps {
tANI_U8 present;
@@ -6283,6 +6332,7 @@
tANI_U16 num_RICDataDesc;
tDot11fIERICDataDesc RICDataDesc[2];
tDot11fIEWPA WPA;
+ tDot11fIETimeoutInterval TimeoutInterval;
tDot11fIEHTCaps HTCaps;
tDot11fIEHTInfo HTInfo;
tDot11fIEWMMParams WMMParams;
@@ -6316,16 +6366,16 @@
#endif /* C++ */
typedef struct sDot11fAuthentication{
- tDot11fFfAuthAlgo AuthAlgo;
- tDot11fFfAuthSeqNo AuthSeqNo;
- tDot11fFfStatus Status;
- tDot11fIEChallengeText ChallengeText;
- tDot11fIERSNOpaque RSNOpaque;
- tDot11fIEMobilityDomain MobilityDomain;
- tDot11fIEFTInfo FTInfo;
- tDot11fIEFTTimeoutInterval FTTimeoutInterval;
- tANI_U16 num_RICDataDesc;
- tDot11fIERICDataDesc RICDataDesc[2];
+ tDot11fFfAuthAlgo AuthAlgo;
+ tDot11fFfAuthSeqNo AuthSeqNo;
+ tDot11fFfStatus Status;
+ tDot11fIEChallengeText ChallengeText;
+ tDot11fIERSNOpaque RSNOpaque;
+ tDot11fIEMobilityDomain MobilityDomain;
+ tDot11fIEFTInfo FTInfo;
+ tDot11fIETimeoutInterval TimeoutInterval;
+ tANI_U16 num_RICDataDesc;
+ tDot11fIERICDataDesc RICDataDesc[2];
} tDot11fAuthentication;
#define DOT11F_AUTHENTICATION ( 7 )
@@ -7182,6 +7232,30 @@
} /* End extern "C". */
#endif /* C++ */
+typedef struct sDot11fRMC{
+ tDot11fFfCategory Category;
+ tDot11fFfRMCOUI RMCOUI;
+ tDot11fFfMagicCode MagicCode;
+ tDot11fFfRMCVersion RMCVersion;
+ tDot11fFfAction Action;
+ tDot11fFfRMCDialogToken RMCDialogToken;
+ tDot11fFfLeader Leader;
+} tDot11fRMC;
+
+#define DOT11F_RMC ( 39 )
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+
+tANI_U32 dot11fUnpackRMC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fRMC *pFrm);
+tANI_U32 dot11fPackRMC(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed);
+tANI_U32 dot11fGetPackedRMCSize(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U32 *pnNeeded);
+
+#ifdef __cplusplus
+} /* End extern "C". */
+#endif /* C++ */
+
typedef struct sDot11fRadioMeasurementReport{
tDot11fFfCategory Category;
tDot11fFfAction Action;
@@ -7190,7 +7264,7 @@
tDot11fIEMeasurementReport MeasurementReport[4];
} tDot11fRadioMeasurementReport;
-#define DOT11F_RADIOMEASUREMENTREPORT ( 39 )
+#define DOT11F_RADIOMEASUREMENTREPORT ( 40 )
#ifdef __cplusplus
extern "C" {
@@ -7213,7 +7287,7 @@
tDot11fIEMeasurementRequest MeasurementRequest[2];
} tDot11fRadioMeasurementRequest;
-#define DOT11F_RADIOMEASUREMENTREQUEST ( 40 )
+#define DOT11F_RADIOMEASUREMENTREQUEST ( 41 )
#ifdef __cplusplus
extern "C" {
@@ -7263,7 +7337,7 @@
tDot11fIEOperatingMode OperatingMode;
} tDot11fReAssocRequest;
-#define DOT11F_REASSOCREQUEST ( 41 )
+#define DOT11F_REASSOCREQUEST ( 42 )
#ifdef __cplusplus
extern "C" {
@@ -7293,6 +7367,7 @@
tANI_U16 num_RICDataDesc;
tDot11fIERICDataDesc RICDataDesc[2];
tDot11fIEWPA WPA;
+ tDot11fIETimeoutInterval TimeoutInterval;
tDot11fIEHTCaps HTCaps;
tDot11fIEHTInfo HTInfo;
tDot11fIEWMMParams WMMParams;
@@ -7311,7 +7386,7 @@
tDot11fIEOBSSScanParameters OBSSScanParameters;
} tDot11fReAssocResponse;
-#define DOT11F_REASSOCRESPONSE ( 42 )
+#define DOT11F_REASSOCRESPONSE ( 43 )
#ifdef __cplusplus
extern "C" {
@@ -7331,7 +7406,7 @@
tDot11fFfSMPowerModeSet SMPowerModeSet;
} tDot11fSMPowerSave;
-#define DOT11F_SMPOWERSAVE ( 43 )
+#define DOT11F_SMPOWERSAVE ( 44 )
#ifdef __cplusplus
extern "C" {
@@ -7345,13 +7420,33 @@
} /* End extern "C". */
#endif /* C++ */
+typedef struct sDot11fSaQueryReq{
+ tDot11fFfCategory Category;
+ tDot11fFfAction Action;
+ tDot11fFfTransactionId TransactionId;
+} tDot11fSaQueryReq;
+
+#define DOT11F_SAQUERYREQ ( 45 )
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+
+tANI_U32 dot11fUnpackSaQueryReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fSaQueryReq *pFrm);
+tANI_U32 dot11fPackSaQueryReq(tpAniSirGlobal pCtx, tDot11fSaQueryReq *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed);
+tANI_U32 dot11fGetPackedSaQueryReqSize(tpAniSirGlobal pCtx, tDot11fSaQueryReq *pFrm, tANI_U32 *pnNeeded);
+
+#ifdef __cplusplus
+} /* End extern "C". */
+#endif /* C++ */
+
typedef struct sDot11fSaQueryRsp{
tDot11fFfCategory Category;
tDot11fFfAction Action;
tDot11fFfTransactionId TransactionId;
} tDot11fSaQueryRsp;
-#define DOT11F_SAQUERYRSP ( 44 )
+#define DOT11F_SAQUERYRSP ( 46 )
#ifdef __cplusplus
extern "C" {
@@ -7372,7 +7467,7 @@
tDot11fIELinkIdentifier LinkIdentifier;
} tDot11fTDLSDisReq;
-#define DOT11F_TDLSDISREQ ( 45 )
+#define DOT11F_TDLSDISREQ ( 47 )
#ifdef __cplusplus
extern "C" {
@@ -7398,14 +7493,14 @@
tDot11fIERSN RSN;
tDot11fIEExtCap ExtCap;
tDot11fIEFTInfo FTInfo;
- tDot11fIEFTTimeoutInterval FTTimeoutInterval;
+ tDot11fIETimeoutInterval TimeoutInterval;
tDot11fIERICData RICData;
tDot11fIEHTCaps HTCaps;
tDot11fIELinkIdentifier LinkIdentifier;
tDot11fIEVHTCaps VHTCaps;
} tDot11fTDLSDisRsp;
-#define DOT11F_TDLSDISRSP ( 46 )
+#define DOT11F_TDLSDISRSP ( 48 )
#ifdef __cplusplus
extern "C" {
@@ -7428,7 +7523,7 @@
tDot11fIEPUBufferStatus PUBufferStatus;
} tDot11fTDLSPeerTrafficInd;
-#define DOT11F_TDLSPEERTRAFFICIND ( 47 )
+#define DOT11F_TDLSPEERTRAFFICIND ( 49 )
#ifdef __cplusplus
extern "C" {
@@ -7449,7 +7544,7 @@
tDot11fIELinkIdentifier LinkIdentifier;
} tDot11fTDLSPeerTrafficRsp;
-#define DOT11F_TDLSPEERTRAFFICRSP ( 48 )
+#define DOT11F_TDLSPEERTRAFFICRSP ( 50 )
#ifdef __cplusplus
extern "C" {
@@ -7464,22 +7559,22 @@
#endif /* C++ */
typedef struct sDot11fTDLSSetupCnf{
- tDot11fFfCategory Category;
- tDot11fFfAction Action;
- tDot11fFfStatus Status;
- tDot11fFfDialogToken DialogToken;
- tDot11fIERSN RSN;
- tDot11fIEEDCAParamSet EDCAParamSet;
- tDot11fIEFTInfo FTInfo;
- tDot11fIEFTTimeoutInterval FTTimeoutInterval;
- tDot11fIEHTInfo HTInfo;
- tDot11fIELinkIdentifier LinkIdentifier;
- tDot11fIEWMMInfoStation WMMInfoStation;
- tDot11fIEVHTOperation VHTOperation;
- tDot11fIEOperatingMode OperatingMode;
+ tDot11fFfCategory Category;
+ tDot11fFfAction Action;
+ tDot11fFfStatus Status;
+ tDot11fFfDialogToken DialogToken;
+ tDot11fIERSN RSN;
+ tDot11fIEEDCAParamSet EDCAParamSet;
+ tDot11fIEFTInfo FTInfo;
+ tDot11fIETimeoutInterval TimeoutInterval;
+ tDot11fIEHTInfo HTInfo;
+ tDot11fIELinkIdentifier LinkIdentifier;
+ tDot11fIEWMMInfoStation WMMInfoStation;
+ tDot11fIEVHTOperation VHTOperation;
+ tDot11fIEOperatingMode OperatingMode;
} tDot11fTDLSSetupCnf;
-#define DOT11F_TDLSSETUPCNF ( 49 )
+#define DOT11F_TDLSSETUPCNF ( 51 )
#ifdef __cplusplus
extern "C" {
@@ -7507,7 +7602,7 @@
tDot11fIESuppOperatingClasses SuppOperatingClasses;
tDot11fIEQOSCapsStation QOSCapsStation;
tDot11fIEFTInfo FTInfo;
- tDot11fIEFTTimeoutInterval FTTimeoutInterval;
+ tDot11fIETimeoutInterval TimeoutInterval;
tDot11fIERICData RICData;
tDot11fIEHTCaps HTCaps;
tDot11fIELinkIdentifier LinkIdentifier;
@@ -7516,7 +7611,7 @@
tDot11fIEVHTCaps VHTCaps;
} tDot11fTDLSSetupReq;
-#define DOT11F_TDLSSETUPREQ ( 50 )
+#define DOT11F_TDLSSETUPREQ ( 52 )
#ifdef __cplusplus
extern "C" {
@@ -7545,7 +7640,7 @@
tDot11fIESuppOperatingClasses SuppOperatingClasses;
tDot11fIEQOSCapsStation QOSCapsStation;
tDot11fIEFTInfo FTInfo;
- tDot11fIEFTTimeoutInterval FTTimeoutInterval;
+ tDot11fIETimeoutInterval TimeoutInterval;
tDot11fIERICData RICData;
tDot11fIEHTCaps HTCaps;
tDot11fIELinkIdentifier LinkIdentifier;
@@ -7555,7 +7650,7 @@
tDot11fIEOperatingMode OperatingMode;
} tDot11fTDLSSetupRsp;
-#define DOT11F_TDLSSETUPRSP ( 51 )
+#define DOT11F_TDLSSETUPRSP ( 53 )
#ifdef __cplusplus
extern "C" {
@@ -7577,7 +7672,7 @@
tDot11fIELinkIdentifier LinkIdentifier;
} tDot11fTDLSTeardown;
-#define DOT11F_TDLSTEARDOWN ( 52 )
+#define DOT11F_TDLSTEARDOWN ( 54 )
#ifdef __cplusplus
extern "C" {
@@ -7598,7 +7693,7 @@
tDot11fIETPCReport TPCReport;
} tDot11fTPCReport;
-#define DOT11F_TPCREPORT ( 53 )
+#define DOT11F_TPCREPORT ( 55 )
#ifdef __cplusplus
extern "C" {
@@ -7619,7 +7714,7 @@
tDot11fIETPCRequest TPCRequest;
} tDot11fTPCRequest;
-#define DOT11F_TPCREQUEST ( 54 )
+#define DOT11F_TPCREQUEST ( 56 )
#ifdef __cplusplus
extern "C" {
@@ -7640,7 +7735,7 @@
tDot11fFfVhtUserPositionArray VhtUserPositionArray;
} tDot11fVHTGidManagementActionFrame;
-#define DOT11F_VHTGIDMANAGEMENTACTIONFRAME ( 55 )
+#define DOT11F_VHTGIDMANAGEMENTACTIONFRAME ( 57 )
#ifdef __cplusplus
extern "C" {
@@ -7663,7 +7758,7 @@
tDot11fIECCXTrafStrmRateSet CCXTrafStrmRateSet;
} tDot11fWMMAddTSRequest;
-#define DOT11F_WMMADDTSREQUEST ( 56 )
+#define DOT11F_WMMADDTSREQUEST ( 58 )
#ifdef __cplusplus
extern "C" {
@@ -7686,7 +7781,7 @@
tDot11fIECCXTrafStrmMet CCXTrafStrmMet;
} tDot11fWMMAddTSResponse;
-#define DOT11F_WMMADDTSRESPONSE ( 57 )
+#define DOT11F_WMMADDTSRESPONSE ( 59 )
#ifdef __cplusplus
extern "C" {
@@ -7708,7 +7803,7 @@
tDot11fIEWMMTSPEC WMMTSPEC;
} tDot11fWMMDelTS;
-#define DOT11F_WMMDELTS ( 58 )
+#define DOT11F_WMMDELTS ( 60 )
#ifdef __cplusplus
extern "C" {