diff options
| author | Sandeep Puligilla <spuligil@qca.qualcomm.com> | 2015-06-24 15:45:05 -0700 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2015-07-22 17:02:37 +0530 |
| commit | 06b2999646cb709b5195f3fe0b83ecb669c5ddf4 (patch) | |
| tree | a72e540b5f193ab3c344df7b247e74d3a2894949 | |
| parent | 0a19c86926a9aa52819557d54172be28ba6c3a6d (diff) | |
qcacld: Don't disconnect in case of HS2.0 for change in AP capability.
After connection, driver process beacon to detect any change in
AP's capabilities. Currently if privacy bit is set in beacon and
if rsn or wpa bit is not set, driver issues disconnect command.
In case of HS2.0, all security capabilities are part of vendor
specific information. Hence, both wpa and rsn bit is 0, though
privacy bit is set. Since driver considers it as a change in AP
security params, it issues disconnect. As a part of fix, make sure
that for OSEN capabilities disconnect is not issued.
Change-Id: I5554b24dfa2724c6c9b6faef2f738277e42028fb
CRs-Fixed: 796397
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/include/limSession.h | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limApi.c | 13 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limSerDesUtils.c | 8 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 2 |
6 files changed, 24 insertions, 2 deletions
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index 748899ec9bfc..07b3973da271 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -1023,6 +1023,7 @@ typedef struct sSirSmeJoinReq tANI_U8 cc_switch_mode; #endif tVOS_CON_MODE staPersona; //Persona + tANI_BOOLEAN bOSENAssociation; //HS2.0 ePhyChanBondState cbMode; // Pass CB mode value in Join. /*This contains the UAPSD Flag for all 4 AC diff --git a/CORE/MAC/src/pe/include/limSession.h b/CORE/MAC/src/pe/include/limSession.h index 8d946c0357d8..0d66528b93e8 100644 --- a/CORE/MAC/src/pe/include/limSession.h +++ b/CORE/MAC/src/pe/include/limSession.h @@ -125,6 +125,7 @@ typedef struct sPESession // Added to Support BT-AMP tANI_U8 operMode; // AP - 0; STA - 1 ; tSirNwType nwType; tpSirSmeStartBssReq pLimStartBssReq; //handle to smestart bss req + tANI_BOOLEAN bOSENAssociation; //handle to OSEN assoc req tpSirSmeJoinReq pLimJoinReq; // handle to sme join req tpSirSmeJoinReq pLimReAssocReq; //handle to sme reassoc req tpLimMlmJoinReq pLimMlmJoinReq; //handle to MLM join Req diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c index 80051cada41f..4fe1bfaedbdc 100644 --- a/CORE/MAC/src/pe/lim/limApi.c +++ b/CORE/MAC/src/pe/lim/limApi.c @@ -1499,7 +1499,18 @@ static tAniBool limIbssEncTypeMatched(tpSchBeaconStruct pBeacon, && pBeacon->rsnPresent == 0 && pSession->encryptType == eSIR_ED_CCMP) return eSIR_TRUE; - + /* For HS2.0, RSN ie is not present + * in beacon. Therefore no need to + * check for security type in case + * OSEN session. + */ + /*TODO: AP capability mismatch + * is not checked here because + * no logic for beacon parsing + * is avilable for HS2.0 + */ + if (pSession->bOSENAssociation) + return eSIR_TRUE; return eSIR_FALSE; } diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c index 61531908d6b0..ba559a39169e 100644 --- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c @@ -1924,6 +1924,7 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) psessionEntry->statypeForBss = STA_ENTRY_PEER; psessionEntry->limWmeEnabled = pSmeJoinReq->isWMEenabled; psessionEntry->limQosEnabled = pSmeJoinReq->isQosEnabled; + psessionEntry->bOSENAssociation = pSmeJoinReq->bOSENAssociation; /* Store vendor specfic IE for CISCO AP */ ieLen = (pSmeJoinReq->bssDescription.length + diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.c b/CORE/MAC/src/pe/lim/limSerDesUtils.c index 571612006145..77ea7539acda 100644 --- a/CORE/MAC/src/pe/lim/limSerDesUtils.c +++ b/CORE/MAC/src/pe/lim/limSerDesUtils.c @@ -928,7 +928,13 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) limLog(pMac, LOGE, FL("remaining len %d is too short"), len); return eSIR_FAILURE; } - + pJoinReq->bOSENAssociation = *pBuf++; + len--; + if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) + { + limLog(pMac, LOGE, FL("remaining len %d is too short"), len); + return eSIR_FAILURE; + } // Extract cbMode pJoinReq->cbMode = (ePhyChanBondState)limGetU32(pBuf); pBuf += sizeof(ePhyChanBondState); diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index da8d4faa5f0d..f112eff838a3 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -13399,6 +13399,8 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe //Persona *pBuf = (tANI_U8)pProfile->csrPersona; pBuf++; + *pBuf = (tANI_U8)pProfile->bOSENAssociation; + pBuf++; //CBMode *pBuf = (tANI_U8)pSession->bssParams.cbMode; pBuf += sizeof(ePhyChanBondState); |
