From 06b2999646cb709b5195f3fe0b83ecb669c5ddf4 Mon Sep 17 00:00:00 2001 From: Sandeep Puligilla Date: Wed, 24 Jun 2015 15:45:05 -0700 Subject: 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 --- CORE/MAC/inc/sirApi.h | 1 + CORE/MAC/src/pe/include/limSession.h | 1 + CORE/MAC/src/pe/lim/limApi.c | 13 ++++++++++++- CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c | 1 + CORE/MAC/src/pe/lim/limSerDesUtils.c | 8 +++++++- 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); -- cgit v1.2.3