blob: 0737ac681825226049e12d52fe9b6366ce567ad8 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +05302 * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
Kiet Lam842dad02014-02-18 18:44:02 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080020 */
Kiet Lam842dad02014-02-18 18:44:02 -080021
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080028/*
Jeff Johnson295189b2012-06-20 16:38:30 -070029 *
Jeff Johnson295189b2012-06-20 16:38:30 -070030 * This file limProcessAssocRspFrame.cc contains the code
31 * for processing Re/Association Response Frame.
32 * Author: Chandra Modumudi
33 * Date: 03/18/02
34 * History:-
35 * Date Modified by Modification Information
36 * --------------------------------------------------------------------
37 *
38 */
39
40#include "wniApi.h"
Satyanarayana Dash6f438272015-03-03 18:01:06 +053041#include "wniCfg.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070042#include "aniGlobal.h"
43#include "cfgApi.h"
44
45#include "utilsApi.h"
46#include "pmmApi.h"
47#include "limTypes.h"
48#include "limUtils.h"
49#include "limAssocUtils.h"
50#include "limSecurityUtils.h"
51#include "limSerDesUtils.h"
52#include "limStaHashApi.h"
53#include "limSendMessages.h"
54
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080055#if defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD)
56#include "eseApi.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070057#endif
58
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +053059#ifdef WLAN_FEATURE_LFR_MBB
60#include "lim_mbb.h"
61#endif
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063extern tSirRetStatus schBeaconEdcaProcess(tpAniSirGlobal pMac, tSirMacEdcaParamSetIE *edca, tpPESession psessionEntry);
64
65
66/**
67 * @function : limUpdateAssocStaDatas
68 *
69 * @brief : This function is called to Update the Station Descriptor (dph) Details from
70 * Association / ReAssociation Response Frame
71 *
72 *LOGIC:
73 *
74 *ASSUMPTIONS:
75 *
76 *NOTE:
77 *
78 * @param pMac - Pointer to Global MAC structure
79 * @param pStaDs - Station Descriptor in DPH
80 * @param pAssocRsp - Pointer to Association Response Structure
81 *
82 * @return None
83 */
84void limUpdateAssocStaDatas(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpSirAssocRsp pAssocRsp,tpPESession psessionEntry)
85{
86 tANI_U32 prop;
87 tANI_U32 phyMode;
88 tANI_U32 val;
89 //tpSirBoardCapabilities pBoardCaps;
90 tANI_BOOLEAN qosMode;
91 tANI_U16 rxHighestRate = 0;
Deepthi Gowriae6a1662015-10-12 12:59:37 +053092 uint32_t shortgi_20mhz_support;
93 uint32_t shortgi_40mhz_support;
Jeff Johnson295189b2012-06-20 16:38:30 -070094
95 limGetPhyMode(pMac, &phyMode, psessionEntry);
96
97 pStaDs->staType= STA_ENTRY_SELF;
98
99 limGetQosMode(psessionEntry, &qosMode);
100 // set the ani peer bit, if self mode is one of the proprietary modes
101 if(IS_DOT11_MODE_PROPRIETARY(psessionEntry->dot11mode))
102 {
103 wlan_cfgGetInt(pMac, WNI_CFG_PROPRIETARY_ANI_FEATURES_ENABLED, &prop);
104
105 if (prop)
106 {
107 pStaDs->aniPeer = eHAL_SET;
108 pStaDs->propCapability = pAssocRsp->propIEinfo.capability;
109 }
110 }
111
112 //pMac->lim.gLimMlmState = eLIM_MLM_LINK_ESTABLISHED_STATE;
113 pStaDs->mlmStaContext.authType = psessionEntry->limCurrentAuthType;
114
115 // Add capabilities information, rates and AID
116 pStaDs->mlmStaContext.capabilityInfo = pAssocRsp->capabilityInfo;
117 pStaDs->shortPreambleEnabled= (tANI_U8)pAssocRsp->capabilityInfo.shortPreamble;
118
119 //Update HT Capabilites only when the self mode supports HT
120 if(IS_DOT11_MODE_HT(psessionEntry->dot11mode)) {
121 pStaDs->mlmStaContext.htCapability = pAssocRsp->HTCaps.present;
122
123 if ( pAssocRsp->HTCaps.present ) {
124 pStaDs->htGreenfield = ( tANI_U8 ) pAssocRsp->HTCaps.greenField;
c_hpothud65d2182014-06-06 21:18:17 +0530125 if (psessionEntry->htSupportedChannelWidthSet)
126 {
127 pStaDs->htSupportedChannelWidthSet = ( tANI_U8 ) (pAssocRsp->HTCaps.supportedChannelWidthSet ?
Jeff Johnson295189b2012-06-20 16:38:30 -0700128 pAssocRsp->HTInfo.recommendedTxWidthSet :
129 pAssocRsp->HTCaps.supportedChannelWidthSet );
c_hpothud65d2182014-06-06 21:18:17 +0530130 }
131 else
132 {
133 pStaDs->htSupportedChannelWidthSet = eHT_CHANNEL_WIDTH_20MHZ;
134 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700135 pStaDs->htLsigTXOPProtection = ( tANI_U8 ) pAssocRsp->HTCaps.lsigTXOPProtection;
136 pStaDs->htMIMOPSState = (tSirMacHTMIMOPowerSaveState)pAssocRsp->HTCaps.mimoPowerSave;
137 pStaDs->htMaxAmsduLength = ( tANI_U8 ) pAssocRsp->HTCaps.maximalAMSDUsize;
138 pStaDs->htAMpduDensity = pAssocRsp->HTCaps.mpduDensity;
139 pStaDs->htDsssCckRate40MHzSupport = (tANI_U8)pAssocRsp->HTCaps.dsssCckMode40MHz;
Jeff Johnson295189b2012-06-20 16:38:30 -0700140 pStaDs->htMaxRxAMpduFactor = pAssocRsp->HTCaps.maxRxAMPDUFactor;
141 limFillRxHighestSupportedRate(pMac, &rxHighestRate, pAssocRsp->HTCaps.supportedMCSSet);
142 pStaDs->supportedRates.rxHighestDataRate = rxHighestRate;
Jeff Johnsone7245742012-09-05 17:12:55 -0700143 /* This is for AP as peer STA and we are INFRA STA. We will put APs offset in dph node which is peer STA */
144 pStaDs->htSecondaryChannelOffset = (tANI_U8)pAssocRsp->HTInfo.secondaryChannelOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -0700145
146 //FIXME_AMPDU
147 // In the future, may need to check for "assoc.HTCaps.delayedBA"
148 // For now, it is IMMEDIATE BA only on ALL TID's
149 pStaDs->baPolicyFlag = 0xFF;
Deepthi Gowriae6a1662015-10-12 12:59:37 +0530150
151 /*
152 * Check if we have support for gShortGI20Mhz and
153 * gShortGI40Mhz from ini file.
154 */
155 if (HAL_STATUS_SUCCESS(ccmCfgGetInt(pMac,
156 WNI_CFG_SHORT_GI_20MHZ,
157 &shortgi_20mhz_support))) {
158 if (VOS_TRUE == shortgi_20mhz_support)
159 pStaDs->htShortGI20Mhz =
160 (tANI_U8)pAssocRsp->HTCaps.shortGI20MHz;
161 else
162 pStaDs->htShortGI20Mhz = VOS_FALSE;
163 } else {
164 limLog(pMac, LOGE,
165 FL("could not retrieve shortGI 20Mhz CFG,"
166 "setting value to default"));
167 pStaDs->htShortGI20Mhz = WNI_CFG_SHORT_GI_20MHZ_STADEF;
168 }
169
170 if (HAL_STATUS_SUCCESS(ccmCfgGetInt(pMac,
171 WNI_CFG_SHORT_GI_40MHZ,
172 &shortgi_40mhz_support))) {
173 if (VOS_TRUE == shortgi_40mhz_support)
174 pStaDs->htShortGI40Mhz =
175 (tANI_U8)pAssocRsp->HTCaps.shortGI40MHz;
176 else
177 pStaDs->htShortGI40Mhz = VOS_FALSE;
178 } else {
179 limLog(pMac, LOGE,
180 FL("could not retrieve shortGI 40Mhz CFG,"
181 "setting value to default"));
182 pStaDs->htShortGI40Mhz = WNI_CFG_SHORT_GI_40MHZ_STADEF;
183 }
184
Jeff Johnson295189b2012-06-20 16:38:30 -0700185 }
186 }
Jeff Johnsone7245742012-09-05 17:12:55 -0700187
188#ifdef WLAN_FEATURE_11AC
189 if(IS_DOT11_MODE_VHT(psessionEntry->dot11mode))
190 {
191 pStaDs->mlmStaContext.vhtCapability = pAssocRsp->VHTCaps.present;
c_hpothud65d2182014-06-06 21:18:17 +0530192 if (pAssocRsp->VHTCaps.present && psessionEntry->htSupportedChannelWidthSet)
193 pStaDs->vhtSupportedChannelWidthSet = pAssocRsp->VHTOperation.chanWidth;
Jeff Johnsone7245742012-09-05 17:12:55 -0700194 }
Leela Venkata Kiran Kumar Reddy Chirala85c9fb12013-09-05 20:47:36 -0700195 if (limPopulatePeerRateSet(pMac, &pStaDs->supportedRates,
Jeff Johnsone7245742012-09-05 17:12:55 -0700196 pAssocRsp->HTCaps.supportedMCSSet,
Leela Venkata Kiran Kumar Reddy Chirala85c9fb12013-09-05 20:47:36 -0700197 false,psessionEntry , &pAssocRsp->VHTCaps) != eSIR_SUCCESS)
Jeff Johnsone7245742012-09-05 17:12:55 -0700198#else
Leela Venkata Kiran Kumar Reddy Chirala85c9fb12013-09-05 20:47:36 -0700199 if (limPopulatePeerRateSet(pMac, &pStaDs->supportedRates, pAssocRsp->HTCaps.supportedMCSSet, false,psessionEntry) != eSIR_SUCCESS)
Jeff Johnsone7245742012-09-05 17:12:55 -0700200#endif
201 {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700202 limLog(pMac, LOGP, FL("could not get rateset and extended rate set"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700203 return;
204 }
205
206 //If one of the rates is 11g rates, set the ERP mode.
207 if ((phyMode == WNI_CFG_PHY_MODE_11G) && sirIsArate(pStaDs->supportedRates.llaRates[0] & 0x7f))
208 pStaDs->erpEnabled = eHAL_SET;
209
210
211 val = WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET_LEN;
212 if (wlan_cfgGetStr(pMac, WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET,
213 (tANI_U8 *) &pStaDs->mlmStaContext.propRateSet.propRate,
214 &val) != eSIR_SUCCESS) {
215 /// Could not get prop rateset from CFG. Log error.
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700216 limLog(pMac, LOGP, FL("could not retrieve prop rateset"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700217 return;
218 }
219 pStaDs->mlmStaContext.propRateSet.numPropRates = (tANI_U8) val;
220
221 pStaDs->qosMode = 0;
222 pStaDs->lleEnabled = 0;
223
224 // update TSID to UP mapping
225 //if (pMac->lim.gLimQosEnabled)
226 if (qosMode) {
227 if (pAssocRsp->edcaPresent) {
228 tSirRetStatus status;
229 status = schBeaconEdcaProcess(pMac,&pAssocRsp->edca, psessionEntry);
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700230 PELOG2(limLog(pMac, LOG2, "Edca set update based on AssocRsp: status %d",
Jeff Johnson295189b2012-06-20 16:38:30 -0700231 status);)
232 if (status != eSIR_SUCCESS) {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700233 PELOGE(limLog(pMac, LOGE, FL("Edca error in AssocResp "));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700234 } else { // update default tidmap based on ACM
235 pStaDs->qosMode = 1;
236 pStaDs->lleEnabled = 1;
237 }
238 }
239 }
240
241 pStaDs->wmeEnabled = 0;
242 pStaDs->wsmEnabled = 0;
243 if (psessionEntry->limWmeEnabled && pAssocRsp->wmeEdcaPresent)
244 {
245 tSirRetStatus status;
246 status = schBeaconEdcaProcess(pMac,&pAssocRsp->edca, psessionEntry);
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700247 PELOGW(limLog(pMac, LOGW, "WME Edca set update based on AssocRsp: status %d", status);)
Jeff Johnson295189b2012-06-20 16:38:30 -0700248
249 if (status != eSIR_SUCCESS)
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700250 PELOGE(limLog(pMac, LOGE, FL("WME Edca error in AssocResp - ignoring"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700251 else { // update default tidmap based on HashACM
252 pStaDs->qosMode = 1;
253 pStaDs->wmeEnabled = 1;
254 }
255 }
256 else {
257 /* We received assoc rsp from a legacy AP. So fill in the default
258 * local EDCA params. This is needed (refer to bug #14989) as we'll
259 * be passing the gLimEdcaParams to HAL in limProcessStaMlmAddBssRsp().
260 */
261 schSetDefaultEdcaParams(pMac, psessionEntry);
262 }
263
Pratik Bhalgatb5b19b02012-11-22 16:28:19 +0530264 if(qosMode && (!pStaDs->qosMode) && pStaDs->mlmStaContext.htCapability)
265 {
266 // Enable QOS for all HT AP's even though WMM or 802.11E IE is not present
267 pStaDs->qosMode = 1;
268 pStaDs->wmeEnabled = 1;
269 }
270
Chet Lanctot186b5732013-03-18 10:26:30 -0700271#ifdef WLAN_FEATURE_11W
272 if(psessionEntry->limRmfEnabled)
273 {
274 pStaDs->rmfEnabled = 1;
275 }
276#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700277}
278
Jeff Johnson295189b2012-06-20 16:38:30 -0700279/**
280 * @function : limUpdateReAssocGlobals
281 *
282 * @brief : This function is called to Update the Globals (LIM) during ReAssoc.
283 *
284 *LOGIC:
285 *
286 *ASSUMPTIONS:
287 *
288 *NOTE:
289 *
290 * @param pMac - Pointer to Global MAC structure
291 * @param pAssocRsp - Pointer to Association Response Structure
292 *
293 * @return None
294 */
295
296void limUpdateReAssocGlobals(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp,tpPESession psessionEntry)
297{
298 /**
299 * Update the status for PMM module
300 */
301 pmmResetPmmState(pMac);
302
303 // Update the current Bss Information
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530304 vos_mem_copy(psessionEntry->bssId,
305 psessionEntry->limReAssocbssId, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -0700306 psessionEntry->currentOperChannel = psessionEntry->limReassocChannelId;
Jeff Johnsone7245742012-09-05 17:12:55 -0700307 psessionEntry->htSecondaryChannelOffset = psessionEntry->reAssocHtSupportedChannelWidthSet;
308 psessionEntry->htRecommendedTxWidthSet = psessionEntry->reAssocHtRecommendedTxWidthSet;
309 psessionEntry->htSecondaryChannelOffset = psessionEntry->reAssocHtSecondaryChannelOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -0700310 psessionEntry->limCurrentBssCaps = psessionEntry->limReassocBssCaps;
311 psessionEntry->limCurrentBssQosCaps = psessionEntry->limReassocBssQosCaps;
312 psessionEntry->limCurrentBssPropCap = psessionEntry->limReassocBssPropCap;
Jeff Johnsone7245742012-09-05 17:12:55 -0700313
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530314 vos_mem_copy((tANI_U8 *) &psessionEntry->ssId,
315 (tANI_U8 *) &psessionEntry->limReassocSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 psessionEntry->limReassocSSID.length+1);
317
318 // Store assigned AID for TIM processing
319 psessionEntry->limAID = pAssocRsp->aid & 0x3FFF;
320 /** Set the State Back to ReAssoc Rsp*/
321 psessionEntry->limMlmState = eLIM_MLM_WT_REASSOC_RSP_STATE;
Jeff Johnsone7245742012-09-05 17:12:55 -0700322 MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState));
Jeff Johnson295189b2012-06-20 16:38:30 -0700323
324
325}
Jeff Johnson295189b2012-06-20 16:38:30 -0700326
327/**
328 * @function : limProcessAssocRspFrame
329 *
330 * @brief : This function is called by limProcessMessageQueue() upon
331 * Re/Association Response frame reception.
332 *
333 *LOGIC:
334 *
335 *ASSUMPTIONS:
336 *
337 *NOTE:
338 *
339 * @param pMac - Pointer to Global MAC structure
340 * @param *pRxPacketInfo - A pointer to Rx packet info structure
341 * @param subType - Indicates whether it is Association Response (=0) or
342 * Reassociation Response (=1) frame
343 *
344 * @return None
345 */
346
347void
348limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 subType,tpPESession psessionEntry)
349{
350 tANI_U8 *pBody;
351 tANI_U16 caps;
352 tANI_U32 frameLen;
353 tSirMacAddr currentBssId;
354 tpSirMacMgmtHdr pHdr;
355 tSirMacCapabilityInfo localCapabilities;
356 tpDphHashNode pStaDs;
357 tpSirAssocRsp pAssocRsp;
358 tLimMlmAssocCnf mlmAssocCnf;
359
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700360 tSchBeaconStruct *pBeaconStruct;
Jeff Johnson295189b2012-06-20 16:38:30 -0700361
362 //Initialize status code to success.
363
364 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
365
366 mlmAssocCnf.resultCode = eSIR_SME_SUCCESS;
367 /* Update PE session Id*/
368 mlmAssocCnf.sessionId = psessionEntry->peSessionId;
Abhishek Singhdcbd8272014-01-09 14:16:01 +0530369 limLog(pMac, LOG1,
370 FL("received Re/Assoc(%d) resp on sessionid: %d with systemrole: %d "
371 "and mlmstate: %d RSSI %d from "MAC_ADDRESS_STR),subType,
372 psessionEntry->peSessionId,
373 psessionEntry->limSystemRole,psessionEntry->limMlmState,
374 (uint)abs((tANI_S8)WDA_GET_RX_RSSI_DB(pRxPacketInfo)),
375 MAC_ADDR_ARRAY(pHdr->sa));
Jeff Johnson295189b2012-06-20 16:38:30 -0700376
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530377 pBeaconStruct = vos_mem_malloc(sizeof(tSchBeaconStruct));
378 if (NULL == pBeaconStruct)
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700379 {
Abhishek Singhdcbd8272014-01-09 14:16:01 +0530380 limLog(pMac, LOGE, FL("Unable to allocate memory") );
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700381 return;
382 }
383
Jeff Johnson295189b2012-06-20 16:38:30 -0700384
385 if (psessionEntry->limSystemRole == eLIM_AP_ROLE || psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE )
386 {
387 // Should not have received Re/Association Response
388 // frame on AP. Log error
389 limLog(pMac, LOGE,
Abhishek Singhdcbd8272014-01-09 14:16:01 +0530390 FL("Should not recieved Re/Assoc Response in role %d "),
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 psessionEntry->limSystemRole);
392
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530393 vos_mem_free(pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 return;
395 }
396
397
398 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
399 frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo);
400
401 if (((subType == LIM_ASSOC) &&
402 (psessionEntry->limMlmState != eLIM_MLM_WT_ASSOC_RSP_STATE)) ||
403 ((subType == LIM_REASSOC) &&
404 ((psessionEntry->limMlmState != eLIM_MLM_WT_REASSOC_RSP_STATE)
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800405#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR)
Jeff Johnson295189b2012-06-20 16:38:30 -0700406 && (psessionEntry->limMlmState != eLIM_MLM_WT_FT_REASSOC_RSP_STATE)
407#endif
408 )))
409 {
410 /// Received unexpected Re/Association Response frame
411
412#ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG
Abhishek Singh3cbf6052014-12-15 16:46:42 +0530413 limLog(pMac, LOG1, FL("Recieved Re/Assoc rsp in unexpected "
Abhishek Singhdcbd8272014-01-09 14:16:01 +0530414 "state %d on session=%d"),
Abhishek Singh3cbf6052014-12-15 16:46:42 +0530415 psessionEntry->limMlmState, psessionEntry->peSessionId);
Jeff Johnson295189b2012-06-20 16:38:30 -0700416#endif
417 // Log error
418 if (!pHdr->fc.retry)
419 {
Agarwal Ashishb4ce9922014-11-04 18:40:38 +0530420 if ( !(pMac->lim.retryPacketCnt & 0xf))
421 {
422 limLog(pMac, LOGE,
423 FL("received Re/Assoc rsp frame is not a retry frame, "
424 "frame count %d"), ++pMac->lim.retryPacketCnt);
425 limPrintMlmState(pMac, LOGE, psessionEntry->limMlmState);
426 }
427 else
428 {
429 pMac->lim.retryPacketCnt++;
430 }
431
Jeff Johnson295189b2012-06-20 16:38:30 -0700432 }
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530433 vos_mem_free(pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 return;
435 }
436#if 0
437 if (wlan_cfgGetStr(pMac, WNI_CFG_BSSID, currentBssId, &cfg) !=
438 eSIR_SUCCESS)
439 {
440 /// Could not get BSSID from CFG. Log error.
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700441 limLog(pMac, LOGP, FL("could not retrieve BSSID"));
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530442 vos_mem_free(pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 return;
444 }
445#endif //TO SUPPORT BT-AMP
446 sirCopyMacAddr(currentBssId,psessionEntry->bssId);
447
448 if (subType == LIM_ASSOC)
449 {
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530450 if (!vos_mem_compare(pHdr->sa, currentBssId, sizeof(tSirMacAddr)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 {
452 /**
453 * Received Association Response frame from an entity
454 * other than one to which request was initiated.
455 * Ignore this and wait until Association Failure Timeout.
456 */
457
458 // Log error
Mohit Khanna23863762012-09-11 17:40:09 -0700459 PELOGW(limLog(pMac, LOGW,
460 FL("received AssocRsp frame from unexpected peer "MAC_ADDRESS_STR),
461 MAC_ADDR_ARRAY(pHdr->sa));)
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530462 vos_mem_free(pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 return;
464 }
465 }
466 else
467 {
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530468 if (!vos_mem_compare(pHdr->sa, psessionEntry->limReAssocbssId, sizeof(tSirMacAddr)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 {
470 /**
471 * Received Reassociation Response frame from an entity
472 * other than one to which request was initiated.
473 * Ignore this and wait until Reassociation Failure Timeout.
474 */
475
476 // Log error
Mohit Khanna23863762012-09-11 17:40:09 -0700477 PELOGW(limLog(pMac, LOGW,
478 FL("received ReassocRsp frame from unexpected peer "MAC_ADDRESS_STR),
479 MAC_ADDR_ARRAY(pHdr->sa));)
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530480 vos_mem_free(pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700481
482 return;
483 }
484 }
485
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530486 pAssocRsp = vos_mem_malloc(sizeof(*pAssocRsp));
487 if (NULL == pAssocRsp)
488 {
489 limLog(pMac, LOGP, FL("Allocate Memory failed in AssocRsp"));
490 vos_mem_free(pBeaconStruct);
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700491
Jeff Johnson295189b2012-06-20 16:38:30 -0700492 return;
493 }
494
495 // Get pointer to Re/Association Response frame body
496 pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo);
497
498 // parse Re/Association Response frame.
499 if (sirConvertAssocRespFrame2Struct(
500 pMac, pBody, frameLen, pAssocRsp) == eSIR_FAILURE)
501 {
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530502 vos_mem_free(pAssocRsp);
Shake M Subhani5d80fda2013-12-09 17:28:23 +0530503 PELOGE(limLog(pMac, LOGE, FL("Parse error Assoc resp subtype %d,"
504 "length=%d"), frameLen,subType);)
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530505 vos_mem_free(pBeaconStruct);
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700506
Jeff Johnson295189b2012-06-20 16:38:30 -0700507 return;
508 }
Atul Mittalbceb4a12014-11-27 18:50:19 +0530509 if(pAssocRsp->ExtCap.present)
510 {
Hu Wangc12631c2016-08-11 09:57:03 +0800511 struct s_ext_cap *p_ext_cap = (struct s_ext_cap *)
512 pAssocRsp->ExtCap.bytes;
Abhishek Singh58749d62016-02-03 15:27:20 +0530513 limLog(pMac, LOG1,
514 FL("Filling tdls prohibited in session entry"));
Atul Mittalbceb4a12014-11-27 18:50:19 +0530515 psessionEntry->tdlsChanSwitProhibited =
Hu Wangc12631c2016-08-11 09:57:03 +0800516 p_ext_cap->TDLSChanSwitProhibited;
Atul Mittalbceb4a12014-11-27 18:50:19 +0530517 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700518 if(!pAssocRsp->suppRatesPresent)
519 {
Shake M Subhani5d80fda2013-12-09 17:28:23 +0530520 PELOGE(limLog(pMac, LOGE, FL("assoc response does not have supported rate set"));)
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530521 vos_mem_copy(&pAssocRsp->supportedRates,
Jeff Johnson295189b2012-06-20 16:38:30 -0700522 &psessionEntry->rateSet, sizeof(tSirMacRateSet));
523 }
524
525 mlmAssocCnf.protStatusCode = pAssocRsp->statusCode;
526
527 if( psessionEntry->assocRsp != NULL )
528 {
Abhishek Singhdcbd8272014-01-09 14:16:01 +0530529 limLog(pMac, LOGW, FL("psessionEntry->assocRsp is not NULL freeing it "
530 "and setting NULL"));
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530531 vos_mem_free(psessionEntry->assocRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 psessionEntry->assocRsp = NULL;
533 }
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530534
yeshwanth sriram guntuka33a530d2017-06-22 10:52:23 +0530535 if (frameLen) {
536 psessionEntry->assocRsp = vos_mem_malloc(frameLen);
537 if (NULL == psessionEntry->assocRsp)
538 {
539 PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc response, len = %d"), frameLen);)
540 }
541 else
542 {
543 //Store the Assoc response. This is sent to csr/hdd in join cnf response.
544 vos_mem_copy(psessionEntry->assocRsp, pBody, frameLen);
545 psessionEntry->assocRspLen = frameLen;
546 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 }
548
549#ifdef WLAN_FEATURE_VOWIFI_11R
550 if (psessionEntry->ricData != NULL)
551 {
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530552 vos_mem_free(psessionEntry->ricData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700553 psessionEntry->ricData = NULL;
554 }
555 if(pAssocRsp->ricPresent)
556 {
557 psessionEntry->RICDataLen = pAssocRsp->num_RICData * sizeof(tDot11fIERICDataDesc);
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530558 psessionEntry->ricData = vos_mem_malloc(psessionEntry->RICDataLen);
559 if ( NULL == psessionEntry->ricData )
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 {
561 PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc response"));)
562 psessionEntry->RICDataLen = 0;
563 }
564 else
565 {
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530566 vos_mem_copy(psessionEntry->ricData,
567 &pAssocRsp->RICData[0], psessionEntry->RICDataLen);
Jeff Johnson295189b2012-06-20 16:38:30 -0700568 }
569 }
570 else
571 {
Abhishek Singhdcbd8272014-01-09 14:16:01 +0530572 limLog(pMac, LOG1, FL("Ric is not present Setting RICDataLen 0 and ricData "
573 "as NULL"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 psessionEntry->RICDataLen = 0;
575 psessionEntry->ricData = NULL;
576 }
577#endif
578
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800579#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 if (psessionEntry->tspecIes != NULL)
581 {
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530582 vos_mem_free(psessionEntry->tspecIes);
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 psessionEntry->tspecIes = NULL;
584 }
585 if(pAssocRsp->tspecPresent)
586 {
587 psessionEntry->tspecLen = pAssocRsp->num_tspecs * sizeof(tDot11fIEWMMTSPEC);
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530588 psessionEntry->tspecIes = vos_mem_malloc(psessionEntry->tspecLen);
589 if ( NULL == psessionEntry->tspecIes )
Jeff Johnson295189b2012-06-20 16:38:30 -0700590 {
591 PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc response"));)
592 psessionEntry->tspecLen = 0;
593 }
594 else
595 {
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530596 vos_mem_copy(psessionEntry->tspecIes,
597 &pAssocRsp->TSPECInfo[0], psessionEntry->tspecLen);
Jeff Johnson295189b2012-06-20 16:38:30 -0700598 }
Abhishek Singh3cbf6052014-12-15 16:46:42 +0530599 limLog(pMac, LOG1, FL(" Tspec EID present in assoc rsp "));
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 }
601 else
602 {
603 psessionEntry->tspecLen = 0;
604 psessionEntry->tspecIes = NULL;
Abhishek Singh3cbf6052014-12-15 16:46:42 +0530605 limLog(pMac, LOG1, FL(" Tspec EID *NOT* present in assoc rsp "));
Jeff Johnson295189b2012-06-20 16:38:30 -0700606 }
607#endif
608
609 if (pAssocRsp->capabilityInfo.ibss)
610 {
611 /**
612 * Received Re/Association Response from peer
613 * with IBSS capability set.
614 * Ignore the frame and wait until Re/assoc
615 * failure timeout.
616 */
617
618 // Log error
619 limLog(pMac, LOGE,
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700620 FL("received Re/AssocRsp frame with IBSS capability"));
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530621 vos_mem_free(pAssocRsp);
622 vos_mem_free(pBeaconStruct);
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700623
Jeff Johnson295189b2012-06-20 16:38:30 -0700624 return;
625 }
626
627 if (cfgGetCapabilityInfo(pMac, &caps,psessionEntry) != eSIR_SUCCESS)
628 {
629 /**
630 * Could not get Capabilities value
631 * from CFG. Log error.
632 */
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530633 vos_mem_free(pAssocRsp);
634 vos_mem_free(pBeaconStruct);
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700635
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700636 limLog(pMac, LOGP, FL("could not retrieve Capabilities value"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700637 return;
638 }
639 limCopyU16((tANI_U8 *) &localCapabilities, caps);
640
641 if (subType == LIM_ASSOC) // Stop Association failure timer
642 limDeactivateAndChangeTimer(pMac, eLIM_ASSOC_FAIL_TIMER);
643 else // Stop Reassociation failure timer
Madan Mohan Koyyalamudi61bc5662012-11-02 14:33:10 -0700644 {
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +0530645#ifdef WLAN_FEATURE_LFR_MBB
646 if (pMac->ft.ftSmeContext.is_preauth_lfr_mbb)
647 limDeactivateAndChangeTimer(pMac, eLIM_REASSOC_MBB_RSP_TIMER);
648#endif
649
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800650#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR)
Madan Mohan Koyyalamudi61bc5662012-11-02 14:33:10 -0700651 pMac->lim.reAssocRetryAttempt = 0;
Madan Mohan Koyyalamudia9ebd5e2012-11-15 16:00:56 -0800652 if ((NULL != pMac->lim.pSessionEntry) && (NULL != pMac->lim.pSessionEntry->pLimMlmReassocRetryReq))
Madan Mohan Koyyalamudi61bc5662012-11-02 14:33:10 -0700653 {
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530654 vos_mem_free(pMac->lim.pSessionEntry->pLimMlmReassocRetryReq);
Madan Mohan Koyyalamudi61bc5662012-11-02 14:33:10 -0700655 pMac->lim.pSessionEntry->pLimMlmReassocRetryReq = NULL;
656 }
657#endif
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +0530658
659 /* Dactivate timer when it is not LFR MBB */
660 if (!pMac->ft.ftSmeContext.is_preauth_lfr_mbb)
661 limDeactivateAndChangeTimer(pMac, eLIM_REASSOC_FAIL_TIMER);
Madan Mohan Koyyalamudi61bc5662012-11-02 14:33:10 -0700662 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700663
664 if (pAssocRsp->statusCode != eSIR_MAC_SUCCESS_STATUS)
665 {
666 // Re/Association response was received
667 // either with failure code.
668 // Log error.
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700669 PELOGE(limLog(pMac, LOGE, FL("received Re/AssocRsp frame failure code %d"), pAssocRsp->statusCode);)
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 // Need to update 'association failure' error counter
671 // along with STATUS CODE
672
673 // Return Assoc confirm to SME with received failure code
674
675 if (pAssocRsp->propIEinfo.loadBalanceInfoPresent)
676 {
677 mlmAssocCnf.resultCode = eSIR_SME_TRANSFER_STA;
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530678 vos_mem_copy(pMac->lim.gLimAlternateRadio.bssId,
679 pAssocRsp->propIEinfo.alternateRadio.bssId, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 pMac->lim.gLimAlternateRadio.channelId =
681 pAssocRsp->propIEinfo.alternateRadio.channelId;
682 }else
683 mlmAssocCnf.resultCode = eSIR_SME_ASSOC_REFUSED;
684
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +0530685 if (pMac->ft.ftSmeContext.is_preauth_lfr_mbb)
686 goto assocReject;
687
Jeff Johnson295189b2012-06-20 16:38:30 -0700688 // Delete Pre-auth context for the associated BSS
689 if (limSearchPreAuthList(pMac, pHdr->sa))
690 limDeletePreAuthNode(pMac, pHdr->sa);
691
692 goto assocReject;
693 }
694 else if ((pAssocRsp->aid & 0x3FFF) > 2007)
695 {
696 // Re/Association response was received
697 // with invalid AID value
698 // Log error
Shake M Subhani5d80fda2013-12-09 17:28:23 +0530699 PELOGW(limLog(pMac, LOGE, FL("received Re/AssocRsp frame with"
700 "invalid aid %X"), pAssocRsp->aid);)
Jeff Johnson295189b2012-06-20 16:38:30 -0700701 mlmAssocCnf.resultCode = eSIR_SME_INVALID_ASSOC_RSP_RXED;
702 mlmAssocCnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS;
703
704 // Send advisory Disassociation frame to AP
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -0800705 limSendDisassocMgmtFrame(pMac, eSIR_MAC_UNSPEC_FAILURE_REASON,
706 pHdr->sa, psessionEntry, FALSE);
Jeff Johnson295189b2012-06-20 16:38:30 -0700707
708 goto assocReject;
709 }
710 // Association Response received with success code
Varun Reddy Yeturua39b9902013-01-18 15:48:32 -0800711 /*
712 * Set the link state to POSTASSOC now that we have received
713 * assoc/reassoc response
714 * NOTE: for BTAMP case, it is being handled in limProcessMlmAssocReq
715 */
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +0530716 if (!pMac->ft.ftSmeContext.is_preauth_lfr_mbb) {
717 if (!((psessionEntry->bssType == eSIR_BTAMP_STA_MODE) ||
718 ((psessionEntry->bssType == eSIR_BTAMP_AP_MODE) &&
719 (psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE))))
720 {
721 if (limSetLinkState(pMac, eSIR_LINK_POSTASSOC_STATE,
722 psessionEntry->bssId,
723 psessionEntry->selfMacAddr,
724 NULL, NULL) != eSIR_SUCCESS)
Varun Reddy Yeturua39b9902013-01-18 15:48:32 -0800725 {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700726 PELOGE(limLog(pMac, LOGE, FL("Set link state to POSTASSOC failed"));)
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530727 vos_mem_free(pBeaconStruct);
728 vos_mem_free(pAssocRsp);
Gopichand Nakkala114718f2013-03-25 19:19:46 -0700729 return;
Varun Reddy Yeturua39b9902013-01-18 15:48:32 -0800730 }
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +0530731 }
Varun Reddy Yeturua39b9902013-01-18 15:48:32 -0800732 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 if (subType == LIM_REASSOC)
734 {
735 // Log success
Abhishek Singh3cbf6052014-12-15 16:46:42 +0530736 limLog(pMac, LOG1, FL("Successfully Reassociated with BSS"));
Deepthi Gowri639d5042015-11-16 20:23:39 +0530737#ifdef FEATURE_WLAN_DIAG_SUPPORT
738 limDiagEventReport(pMac, WLAN_PE_DIAG_ROAM_ASSOC_COMP_EVENT,
739 psessionEntry, eSIR_SUCCESS, eSIR_SUCCESS);
740#endif
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800741#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -0700742 {
743 tANI_U8 cnt = 0;
744 if (pAssocRsp->tsmPresent)
745 {
Shake M Subhani5d80fda2013-12-09 17:28:23 +0530746 limLog(pMac, LOG1, "TSM IE Present in Reassoc Rsp");
Jeff Johnson295189b2012-06-20 16:38:30 -0700747 // Start the TSM timer only if the TSPEC Ie is present in the reassoc rsp
748 if (pAssocRsp->tspecPresent) {
749 // Find the TSPEC IE with VO user priority
750 for (cnt=0; cnt<pAssocRsp->num_tspecs; cnt++) {
751 if ( upToAc(pAssocRsp->TSPECInfo[cnt].user_priority) == EDCA_AC_VO) {
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800752 psessionEntry->eseContext.tsm.tid = pAssocRsp->TSPECInfo[cnt].user_priority;
753 vos_mem_copy(&psessionEntry->eseContext.tsm.tsmInfo,
754 &pAssocRsp->tsmIE, sizeof(tSirMacESETSMIE));
755#ifdef FEATURE_WLAN_ESE_UPLOAD
Srinivas Girigowda5cecb202013-10-08 09:13:25 -0700756 limSendSmeTsmIEInd(pMac,
757 psessionEntry,
758 pAssocRsp->tsmIE.tsid,
759 pAssocRsp->tsmIE.state,
760 pAssocRsp->tsmIE.msmt_interval);
761#else
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 limActivateTSMStatsTimer(pMac, psessionEntry);
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800763#endif /* FEATURE_WLAN_ESE_UPLOAD */
764 if(psessionEntry->eseContext.tsm.tsmInfo.state) {
765 psessionEntry->eseContext.tsm.tsmMetrics.RoamingCount++;
Jeff Johnson295189b2012-06-20 16:38:30 -0700766 }
767 break;
768 }
769 }
770 } else {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700771 limLog(pMac, LOGE, "TSM present but TSPEC IE not present in Reassoc Rsp");
Jeff Johnson295189b2012-06-20 16:38:30 -0700772 }
773 }
774 }
775#endif
776 if (psessionEntry->pLimMlmJoinReq)
777 {
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530778 vos_mem_free(psessionEntry->pLimMlmJoinReq);
Jeff Johnson295189b2012-06-20 16:38:30 -0700779 psessionEntry->pLimMlmJoinReq = NULL;
780 }
781
782 psessionEntry->limAssocResponseData = (void *) pAssocRsp; /** Store the ReAssocRsp Frame in DphTable to be used
783 during processing DelSta nd DelBss to send AddBss again*/
784 pStaDs = dphGetHashEntry(pMac, DPH_STA_HASH_INDEX_PEER, &psessionEntry->dph.dphHashTable);
785
786 if(!pStaDs)
787 {
Varun Reddy Yeturuf68abd62013-02-11 14:05:06 -0800788 PELOGE(limLog(pMac, LOGE, FL("could not get hash entry at DPH for"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 limPrintMacAddr(pMac, pHdr->sa, LOGE);
790 mlmAssocCnf.resultCode = eSIR_SME_INVALID_ASSOC_RSP_RXED;
791 mlmAssocCnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS;
792
793 // Send advisory Disassociation frame to AP
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -0800794 limSendDisassocMgmtFrame(pMac, eSIR_MAC_UNSPEC_FAILURE_REASON,
795 pHdr->sa, psessionEntry, FALSE);
Jeff Johnson295189b2012-06-20 16:38:30 -0700796
797 goto assocReject;
798 }
799
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +0530800#ifdef WLAN_FEATURE_LFR_MBB
801 if (pMac->ft.ftSmeContext.is_preauth_lfr_mbb) {
802 limLog(pMac, LOG1, FL("Reassoc success for LFR MBB in state %d"),
803 psessionEntry->limMlmState);
804 if (psessionEntry->limMlmState ==
Padma, Santhosh Kumar9f729552017-01-09 14:06:30 +0530805 eLIM_MLM_WT_REASSOC_RSP_STATE) {
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +0530806 lim_handle_reassoc_mbb_success(pMac, psessionEntry,
807 pAssocRsp, pStaDs);
808 return;
809 }
810 goto assocReject;
811 }
812#endif
813
814
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800815#if defined(WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR)
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 if (psessionEntry->limMlmState == eLIM_MLM_WT_FT_REASSOC_RSP_STATE)
817 {
818#ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG
Varun Reddy Yeturuf68abd62013-02-11 14:05:06 -0800819 PELOGE(limLog(pMac, LOG1, FL("Sending self sta"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700820#endif
821 pmmResetPmmState(pMac);
822
823 limUpdateAssocStaDatas(pMac, pStaDs, pAssocRsp,psessionEntry);
824
825 // Store assigned AID for TIM processing
826 psessionEntry->limAID = pAssocRsp->aid & 0x3FFF;
827
Madan Mohan Koyyalamudi5e001fd2012-11-27 19:16:34 +0530828 // Downgrade the EDCA parameters if needed
829 limSetActiveEdcaParams(pMac, psessionEntry->gLimEdcaParams, psessionEntry);
830
831 // Send the active EDCA parameters to HAL
832 if (pStaDs->aniPeer == eANI_BOOLEAN_TRUE)
833 {
834 limSendEdcaParams(pMac, psessionEntry->gLimEdcaParamsActive, pStaDs->bssId, eANI_BOOLEAN_TRUE);
835 }
836 else
837 {
838 limSendEdcaParams(pMac, psessionEntry->gLimEdcaParamsActive, pStaDs->bssId, eANI_BOOLEAN_FALSE);
839 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700840 limAddFTStaSelf(pMac, (pAssocRsp->aid & 0x3FFF), psessionEntry);
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530841 vos_mem_free(pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700842
843 return;
844 }
845#endif /* WLAN_FEATURE_VOWIFI_11R */
846
847 /* If we're re-associating to the same BSS, we don't want to invoke delete
848 * STA, delete BSS, as that would remove the already established TSPEC.
849 * Just go ahead and re-add the BSS, STA with new capability information.
850 * However, if we're re-associating to a different BSS, then follow thru
851 * with del STA, del BSS, add BSS, add STA.
852 */
853 if (sirCompareMacAddr( psessionEntry->bssId, psessionEntry->limReAssocbssId))
854 limHandleAddBssInReAssocContext(pMac, pStaDs, psessionEntry);
855 else
856 {
857 // reset the uapsd mask settings since we're re-associating to new AP
858 pMac->lim.gUapsdPerAcDeliveryEnableMask = 0;
859 pMac->lim.gUapsdPerAcTriggerEnableMask = 0;
860
861 if (limCleanupRxPath(pMac, pStaDs,psessionEntry) != eSIR_SUCCESS)
Abhishek Singhdcbd8272014-01-09 14:16:01 +0530862 {
863 PELOGE(limLog(pMac, LOGE, FL("Could not cleanup the rx path"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700864 goto assocReject;
Abhishek Singhdcbd8272014-01-09 14:16:01 +0530865 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700866 }
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530867 vos_mem_free(pBeaconStruct);
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700868
Jeff Johnson295189b2012-06-20 16:38:30 -0700869 return;
870 }
871
872 // Log success
Abhishek Singh3cbf6052014-12-15 16:46:42 +0530873 limLog(pMac, LOG1, FL("Successfully Associated with BSS "MAC_ADDRESS_STR),
874 MAC_ADDR_ARRAY(pHdr->sa));
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800875#ifdef FEATURE_WLAN_ESE
876 if(psessionEntry->eseContext.tsm.tsmInfo.state)
Jeff Johnson295189b2012-06-20 16:38:30 -0700877 {
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800878 psessionEntry->eseContext.tsm.tsmMetrics.RoamingCount = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700879 }
880#endif
881 /**
882 * Update the status for PMM module
883 */
884 pmmResetPmmState(pMac);
885
886 // Store assigned AID for TIM processing
887 psessionEntry->limAID = pAssocRsp->aid & 0x3FFF;
888
889
890 //STA entry was created during pre-assoc state.
891 if ((pStaDs = dphGetHashEntry(pMac, DPH_STA_HASH_INDEX_PEER, &psessionEntry->dph.dphHashTable)) == NULL)
892 {
893 // Could not add hash table entry
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700894 PELOGE(limLog(pMac, LOGE, FL("could not get hash entry at DPH for "));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700895 limPrintMacAddr(pMac, pHdr->sa, LOGE);
896
897 mlmAssocCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE;
898 mlmAssocCnf.protStatusCode = eSIR_SME_SUCCESS;
899
900
901 limPostSmeMessage(pMac, LIM_MLM_ASSOC_CNF,
902 (tANI_U32 *) &mlmAssocCnf);
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530903 vos_mem_free(pAssocRsp);
904 vos_mem_free(pBeaconStruct);
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700905
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 return;
907 }
908
909 // Delete Pre-auth context for the associated BSS
910 if (limSearchPreAuthList(pMac, pHdr->sa))
911 limDeletePreAuthNode(pMac, pHdr->sa);
912
913 limUpdateAssocStaDatas(pMac, pStaDs, pAssocRsp,psessionEntry);
Jeff Johnson295189b2012-06-20 16:38:30 -0700914 // Extract the AP capabilities from the beacon that was received earlier
915 // TODO - Watch out for an error response!
Abhishek Singhbad2b322016-10-21 11:22:33 +0530916 limExtractApCapabilities(pMac,
917 (tANI_U8 *) psessionEntry->pLimJoinReq->bssDescription.ieFields,
918 GET_IE_LEN_IN_BSS(psessionEntry->pLimJoinReq->bssDescription.length),
919 pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700920
Anurag Chouhanbdb1fd62017-07-19 16:32:33 +0530921 if (pBeaconStruct->VHTCaps.present)
922 pStaDs->parsed_ies.vht_caps = pBeaconStruct->VHTCaps;
923 if (pBeaconStruct->HTCaps.present)
924 pStaDs->parsed_ies.ht_caps = pBeaconStruct->HTCaps;
925 if (pBeaconStruct->hs20vendor_ie.present)
926 pStaDs->parsed_ies.hs20vendor_ie =
927 pBeaconStruct->hs20vendor_ie;
928 if (pBeaconStruct->HTInfo.present)
929 pStaDs->parsed_ies.ht_operation = pBeaconStruct->HTInfo;
930 if (pBeaconStruct->VHTOperation.present)
931 pStaDs->parsed_ies.vht_operation = pBeaconStruct->VHTOperation;
932
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 if(pMac->lim.gLimProtectionControl != WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE)
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700934 limDecideStaProtectionOnAssoc(pMac, pBeaconStruct, psessionEntry);
Jeff Johnson295189b2012-06-20 16:38:30 -0700935
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700936 if(pBeaconStruct->erpPresent) {
937 if (pBeaconStruct->erpIEInfo.barkerPreambleMode)
Jeff Johnson295189b2012-06-20 16:38:30 -0700938 psessionEntry->beaconParams.fShortPreamble = false;
939 else
940 psessionEntry->beaconParams.fShortPreamble = true;
941 }
Sushant Kaushikb97a0082015-08-31 12:36:45 +0530942
943#ifdef FEATURE_WLAN_DIAG_SUPPORT
Deepthi Gowri639d5042015-11-16 20:23:39 +0530944 limDiagEventReport(pMac, WLAN_PE_DIAG_CONNECTED, psessionEntry,
Sushant Kaushikb97a0082015-08-31 12:36:45 +0530945 eSIR_SUCCESS, eSIR_SUCCESS);
Leela Venkata Kiran Kumar Reddy Chirala2365ee62013-05-09 17:30:12 -0700946#endif
Sushant Kaushikb97a0082015-08-31 12:36:45 +0530947
Sandeep Puligilla11d49a62014-01-30 12:05:16 +0530948 if(pAssocRsp->OBSSScanParameters.present)
949 {
950 limUpdateOBSSScanParams(psessionEntry , &pAssocRsp->OBSSScanParameters);
951 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700952
Kumar Anand82c009f2014-05-29 00:29:42 -0700953 if( pAssocRsp->QosMapSet.present )
954 {
955 vos_mem_copy(&psessionEntry->QosMapSet,
956 &pAssocRsp->QosMapSet,
957 sizeof(tSirQosMapSet));
958 }
959 else
960 {
961 vos_mem_zero(&psessionEntry->QosMapSet, sizeof(tSirQosMapSet));
962 }
963
Jeff Johnson295189b2012-06-20 16:38:30 -0700964 //Update the BSS Entry, this entry was added during preassoc.
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700965 if( eSIR_SUCCESS == limStaSendAddBss( pMac, pAssocRsp, pBeaconStruct,
Jeff Johnson295189b2012-06-20 16:38:30 -0700966 &psessionEntry->pLimJoinReq->bssDescription, true, psessionEntry))
967 {
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530968 vos_mem_free(pAssocRsp);
969 vos_mem_free(pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700970 return;
971 }
972 else
973 {
Abhishek Singhdcbd8272014-01-09 14:16:01 +0530974 PELOGE(limLog(pMac, LOGE, FL("could not update the bss entry"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 mlmAssocCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE;
976 mlmAssocCnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS;
977 }
978
Jeff Johnson295189b2012-06-20 16:38:30 -0700979
980
981assocReject:
982 if ((subType == LIM_ASSOC)
983#ifdef WLAN_FEATURE_VOWIFI_11R
984 || ((subType == LIM_REASSOC) && (psessionEntry->limMlmState == eLIM_MLM_WT_FT_REASSOC_RSP_STATE))
985#endif
986 ) {
Abhishek Singhdcbd8272014-01-09 14:16:01 +0530987 PELOGE(limLog(pMac, LOGE, FL("Assoc Rejected by the peer. "
988 "mlmestate: %d sessionid %d Reason: %d MACADDR:"
989 MAC_ADDRESS_STR), psessionEntry->limMlmState,
990 psessionEntry->peSessionId, mlmAssocCnf.resultCode,
991 MAC_ADDR_ARRAY(pHdr->sa));)
Jeff Johnsone7245742012-09-05 17:12:55 -0700992 psessionEntry->limMlmState = eLIM_MLM_IDLE_STATE;
993 MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState));
Jeff Johnson295189b2012-06-20 16:38:30 -0700994
995 if (psessionEntry->pLimMlmJoinReq)
996 {
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +0530997 vos_mem_free(psessionEntry->pLimMlmJoinReq);
Jeff Johnson295189b2012-06-20 16:38:30 -0700998 psessionEntry->pLimMlmJoinReq = NULL;
999 }
Jeff Johnsone7245742012-09-05 17:12:55 -07001000
Jeff Johnson295189b2012-06-20 16:38:30 -07001001 if (subType == LIM_ASSOC)
1002 {
1003 limPostSmeMessage(pMac, LIM_MLM_ASSOC_CNF, (tANI_U32 *) &mlmAssocCnf);
1004 }
1005#ifdef WLAN_FEATURE_VOWIFI_11R
1006 else
1007 {
1008 mlmAssocCnf.resultCode = eSIR_SME_FT_REASSOC_FAILURE;
1009 limPostSmeMessage(pMac, LIM_MLM_REASSOC_CNF, (tANI_U32 *) &mlmAssocCnf);
1010 }
1011#endif /* WLAN_FEATURE_VOWIFI_11R */
1012 } else {
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +05301013#ifdef WLAN_FEATURE_LFR_MBB
1014 if (pMac->ft.ftSmeContext.is_preauth_lfr_mbb) {
1015 lim_handle_reassoc_mbb_fail(pMac, psessionEntry);
1016 vos_mem_free(pBeaconStruct);
1017 vos_mem_free(pAssocRsp);
1018 return;
1019 }
1020#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 limRestorePreReassocState( pMac,
1022 eSIR_SME_REASSOC_REFUSED, mlmAssocCnf.protStatusCode,psessionEntry);
1023 }
1024
1025 /* CR: vos packet memory is leaked when assoc rsp timeouted/failed. */
1026 /* notify TL that association is failed so that TL can flush the cached frame */
Abhishek Singh3cbf6052014-12-15 16:46:42 +05301027 limLog(pMac, LOG1, FL("notify TL that association is failed"));
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 WLANTL_AssocFailed (psessionEntry->staId);
1029
Bansidhar Gopalachari2f7395d2013-07-12 11:24:23 +05301030 vos_mem_free(pBeaconStruct);
1031 vos_mem_free(pAssocRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -07001032 return;
1033} /*** end limProcessAssocRspFrame() ***/
1034