summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSandeep Puligilla <spuligil@qca.qualcomm.com>2015-06-24 15:45:05 -0700
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2015-07-22 17:02:37 +0530
commit06b2999646cb709b5195f3fe0b83ecb669c5ddf4 (patch)
treea72e540b5f193ab3c344df7b247e74d3a2894949
parent0a19c86926a9aa52819557d54172be28ba6c3a6d (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.h1
-rw-r--r--CORE/MAC/src/pe/include/limSession.h1
-rw-r--r--CORE/MAC/src/pe/lim/limApi.c13
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c1
-rw-r--r--CORE/MAC/src/pe/lim/limSerDesUtils.c8
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c2
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);