blob: 41c787f556dfbcfdfd8b0774d66a27ee411ec537 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 *
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.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*
43 *
44 * Airgo Networks, Inc proprietary. All rights reserved.
45 * This file limProcessAssocRspFrame.cc contains the code
46 * for processing Re/Association Response Frame.
47 * Author: Chandra Modumudi
48 * Date: 03/18/02
49 * History:-
50 * Date Modified by Modification Information
51 * --------------------------------------------------------------------
52 *
53 */
54
55#include "wniApi.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070056#include "wniCfgSta.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070057#include "aniGlobal.h"
58#include "cfgApi.h"
59
60#include "utilsApi.h"
61#include "pmmApi.h"
62#include "limTypes.h"
63#include "limUtils.h"
64#include "limAssocUtils.h"
65#include "limSecurityUtils.h"
66#include "limSerDesUtils.h"
67#include "limStaHashApi.h"
68#include "limSendMessages.h"
69
70#ifdef FEATURE_WLAN_CCX
71#include "ccxApi.h"
72#endif
73
74extern tSirRetStatus schBeaconEdcaProcess(tpAniSirGlobal pMac, tSirMacEdcaParamSetIE *edca, tpPESession psessionEntry);
75
76
77/**
78 * @function : limUpdateAssocStaDatas
79 *
80 * @brief : This function is called to Update the Station Descriptor (dph) Details from
81 * Association / ReAssociation Response Frame
82 *
83 *LOGIC:
84 *
85 *ASSUMPTIONS:
86 *
87 *NOTE:
88 *
89 * @param pMac - Pointer to Global MAC structure
90 * @param pStaDs - Station Descriptor in DPH
91 * @param pAssocRsp - Pointer to Association Response Structure
92 *
93 * @return None
94 */
95void limUpdateAssocStaDatas(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpSirAssocRsp pAssocRsp,tpPESession psessionEntry)
96{
97 tANI_U32 prop;
98 tANI_U32 phyMode;
99 tANI_U32 val;
100 //tpSirBoardCapabilities pBoardCaps;
101 tANI_BOOLEAN qosMode;
102 tANI_U16 rxHighestRate = 0;
103
104 limGetPhyMode(pMac, &phyMode, psessionEntry);
105
106 pStaDs->staType= STA_ENTRY_SELF;
107
108 limGetQosMode(psessionEntry, &qosMode);
109 // set the ani peer bit, if self mode is one of the proprietary modes
110 if(IS_DOT11_MODE_PROPRIETARY(psessionEntry->dot11mode))
111 {
112 wlan_cfgGetInt(pMac, WNI_CFG_PROPRIETARY_ANI_FEATURES_ENABLED, &prop);
113
114 if (prop)
115 {
116 pStaDs->aniPeer = eHAL_SET;
117 pStaDs->propCapability = pAssocRsp->propIEinfo.capability;
118 }
119 }
120
121 //pMac->lim.gLimMlmState = eLIM_MLM_LINK_ESTABLISHED_STATE;
122 pStaDs->mlmStaContext.authType = psessionEntry->limCurrentAuthType;
123
124 // Add capabilities information, rates and AID
125 pStaDs->mlmStaContext.capabilityInfo = pAssocRsp->capabilityInfo;
126 pStaDs->shortPreambleEnabled= (tANI_U8)pAssocRsp->capabilityInfo.shortPreamble;
127
128 //Update HT Capabilites only when the self mode supports HT
129 if(IS_DOT11_MODE_HT(psessionEntry->dot11mode)) {
130 pStaDs->mlmStaContext.htCapability = pAssocRsp->HTCaps.present;
131
132 if ( pAssocRsp->HTCaps.present ) {
133 pStaDs->htGreenfield = ( tANI_U8 ) pAssocRsp->HTCaps.greenField;
134 pStaDs->htSupportedChannelWidthSet = ( tANI_U8 ) (pAssocRsp->HTCaps.supportedChannelWidthSet ?
135 pAssocRsp->HTInfo.recommendedTxWidthSet :
136 pAssocRsp->HTCaps.supportedChannelWidthSet );
137 pStaDs->htLsigTXOPProtection = ( tANI_U8 ) pAssocRsp->HTCaps.lsigTXOPProtection;
138 pStaDs->htMIMOPSState = (tSirMacHTMIMOPowerSaveState)pAssocRsp->HTCaps.mimoPowerSave;
139 pStaDs->htMaxAmsduLength = ( tANI_U8 ) pAssocRsp->HTCaps.maximalAMSDUsize;
140 pStaDs->htAMpduDensity = pAssocRsp->HTCaps.mpduDensity;
141 pStaDs->htDsssCckRate40MHzSupport = (tANI_U8)pAssocRsp->HTCaps.dsssCckMode40MHz;
142 pStaDs->htShortGI20Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI20MHz;
143 pStaDs->htShortGI40Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI40MHz;
144 pStaDs->htMaxRxAMpduFactor = pAssocRsp->HTCaps.maxRxAMPDUFactor;
145 limFillRxHighestSupportedRate(pMac, &rxHighestRate, pAssocRsp->HTCaps.supportedMCSSet);
146 pStaDs->supportedRates.rxHighestDataRate = rxHighestRate;
Jeff Johnsone7245742012-09-05 17:12:55 -0700147 /* This is for AP as peer STA and we are INFRA STA. We will put APs offset in dph node which is peer STA */
148 pStaDs->htSecondaryChannelOffset = (tANI_U8)pAssocRsp->HTInfo.secondaryChannelOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -0700149
150 //FIXME_AMPDU
151 // In the future, may need to check for "assoc.HTCaps.delayedBA"
152 // For now, it is IMMEDIATE BA only on ALL TID's
153 pStaDs->baPolicyFlag = 0xFF;
154 }
155 }
Jeff Johnsone7245742012-09-05 17:12:55 -0700156
157#ifdef WLAN_FEATURE_11AC
158 if(IS_DOT11_MODE_VHT(psessionEntry->dot11mode))
159 {
160 pStaDs->mlmStaContext.vhtCapability = pAssocRsp->VHTCaps.present;
161 }
162 if (limPopulateOwnRateSet(pMac, &pStaDs->supportedRates,
163 pAssocRsp->HTCaps.supportedMCSSet,
164 false,psessionEntry , &pAssocRsp->VHTCaps) != eSIR_SUCCESS)
165#else
166 if (limPopulateOwnRateSet(pMac, &pStaDs->supportedRates, pAssocRsp->HTCaps.supportedMCSSet, false,psessionEntry) != eSIR_SUCCESS)
167#endif
168 {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700169 limLog(pMac, LOGP, FL("could not get rateset and extended rate set"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700170 return;
171 }
172
173 //If one of the rates is 11g rates, set the ERP mode.
174 if ((phyMode == WNI_CFG_PHY_MODE_11G) && sirIsArate(pStaDs->supportedRates.llaRates[0] & 0x7f))
175 pStaDs->erpEnabled = eHAL_SET;
176
177
178 val = WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET_LEN;
179 if (wlan_cfgGetStr(pMac, WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET,
180 (tANI_U8 *) &pStaDs->mlmStaContext.propRateSet.propRate,
181 &val) != eSIR_SUCCESS) {
182 /// Could not get prop rateset from CFG. Log error.
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700183 limLog(pMac, LOGP, FL("could not retrieve prop rateset"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700184 return;
185 }
186 pStaDs->mlmStaContext.propRateSet.numPropRates = (tANI_U8) val;
187
188 pStaDs->qosMode = 0;
189 pStaDs->lleEnabled = 0;
190
191 // update TSID to UP mapping
192 //if (pMac->lim.gLimQosEnabled)
193 if (qosMode) {
194 if (pAssocRsp->edcaPresent) {
195 tSirRetStatus status;
196 status = schBeaconEdcaProcess(pMac,&pAssocRsp->edca, psessionEntry);
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700197 PELOG2(limLog(pMac, LOG2, "Edca set update based on AssocRsp: status %d",
Jeff Johnson295189b2012-06-20 16:38:30 -0700198 status);)
199 if (status != eSIR_SUCCESS) {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700200 PELOGE(limLog(pMac, LOGE, FL("Edca error in AssocResp "));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700201 } else { // update default tidmap based on ACM
202 pStaDs->qosMode = 1;
203 pStaDs->lleEnabled = 1;
204 }
205 }
206 }
207
208 pStaDs->wmeEnabled = 0;
209 pStaDs->wsmEnabled = 0;
210 if (psessionEntry->limWmeEnabled && pAssocRsp->wmeEdcaPresent)
211 {
212 tSirRetStatus status;
213 status = schBeaconEdcaProcess(pMac,&pAssocRsp->edca, psessionEntry);
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700214 PELOGW(limLog(pMac, LOGW, "WME Edca set update based on AssocRsp: status %d", status);)
Jeff Johnson295189b2012-06-20 16:38:30 -0700215
216 if (status != eSIR_SUCCESS)
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700217 PELOGE(limLog(pMac, LOGE, FL("WME Edca error in AssocResp - ignoring"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700218 else { // update default tidmap based on HashACM
219 pStaDs->qosMode = 1;
220 pStaDs->wmeEnabled = 1;
221 }
222 }
223 else {
224 /* We received assoc rsp from a legacy AP. So fill in the default
225 * local EDCA params. This is needed (refer to bug #14989) as we'll
226 * be passing the gLimEdcaParams to HAL in limProcessStaMlmAddBssRsp().
227 */
228 schSetDefaultEdcaParams(pMac, psessionEntry);
229 }
230
Pratik Bhalgatb5b19b02012-11-22 16:28:19 +0530231 if(qosMode && (!pStaDs->qosMode) && pStaDs->mlmStaContext.htCapability)
232 {
233 // Enable QOS for all HT AP's even though WMM or 802.11E IE is not present
234 pStaDs->qosMode = 1;
235 pStaDs->wmeEnabled = 1;
236 }
237
Chet Lanctot186b5732013-03-18 10:26:30 -0700238#ifdef WLAN_FEATURE_11W
239 if(psessionEntry->limRmfEnabled)
240 {
241 pStaDs->rmfEnabled = 1;
242 }
243#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700244}
245
Jeff Johnson295189b2012-06-20 16:38:30 -0700246/**
247 * @function : limUpdateReAssocGlobals
248 *
249 * @brief : This function is called to Update the Globals (LIM) during ReAssoc.
250 *
251 *LOGIC:
252 *
253 *ASSUMPTIONS:
254 *
255 *NOTE:
256 *
257 * @param pMac - Pointer to Global MAC structure
258 * @param pAssocRsp - Pointer to Association Response Structure
259 *
260 * @return None
261 */
262
263void limUpdateReAssocGlobals(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp,tpPESession psessionEntry)
264{
265 /**
266 * Update the status for PMM module
267 */
268 pmmResetPmmState(pMac);
269
270 // Update the current Bss Information
271 palCopyMemory( pMac->hHdd, psessionEntry->bssId,
272 psessionEntry->limReAssocbssId, sizeof(tSirMacAddr));
273 psessionEntry->currentOperChannel = psessionEntry->limReassocChannelId;
Jeff Johnsone7245742012-09-05 17:12:55 -0700274 psessionEntry->htSecondaryChannelOffset = psessionEntry->reAssocHtSupportedChannelWidthSet;
275 psessionEntry->htRecommendedTxWidthSet = psessionEntry->reAssocHtRecommendedTxWidthSet;
276 psessionEntry->htSecondaryChannelOffset = psessionEntry->reAssocHtSecondaryChannelOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -0700277 psessionEntry->limCurrentBssCaps = psessionEntry->limReassocBssCaps;
278 psessionEntry->limCurrentBssQosCaps = psessionEntry->limReassocBssQosCaps;
279 psessionEntry->limCurrentBssPropCap = psessionEntry->limReassocBssPropCap;
Jeff Johnsone7245742012-09-05 17:12:55 -0700280
Jeff Johnson295189b2012-06-20 16:38:30 -0700281 palCopyMemory( pMac->hHdd, (tANI_U8 *) &psessionEntry->ssId,
282 (tANI_U8 *) &psessionEntry->limReassocSSID,
283 psessionEntry->limReassocSSID.length+1);
284
285 // Store assigned AID for TIM processing
286 psessionEntry->limAID = pAssocRsp->aid & 0x3FFF;
287 /** Set the State Back to ReAssoc Rsp*/
288 psessionEntry->limMlmState = eLIM_MLM_WT_REASSOC_RSP_STATE;
Jeff Johnsone7245742012-09-05 17:12:55 -0700289 MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState));
Jeff Johnson295189b2012-06-20 16:38:30 -0700290
291
292}
Jeff Johnson295189b2012-06-20 16:38:30 -0700293
294/**
295 * @function : limProcessAssocRspFrame
296 *
297 * @brief : This function is called by limProcessMessageQueue() upon
298 * Re/Association Response frame reception.
299 *
300 *LOGIC:
301 *
302 *ASSUMPTIONS:
303 *
304 *NOTE:
305 *
306 * @param pMac - Pointer to Global MAC structure
307 * @param *pRxPacketInfo - A pointer to Rx packet info structure
308 * @param subType - Indicates whether it is Association Response (=0) or
309 * Reassociation Response (=1) frame
310 *
311 * @return None
312 */
313
314void
315limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 subType,tpPESession psessionEntry)
316{
317 tANI_U8 *pBody;
318 tANI_U16 caps;
319 tANI_U32 frameLen;
320 tSirMacAddr currentBssId;
321 tpSirMacMgmtHdr pHdr;
322 tSirMacCapabilityInfo localCapabilities;
323 tpDphHashNode pStaDs;
324 tpSirAssocRsp pAssocRsp;
325 tLimMlmAssocCnf mlmAssocCnf;
326
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700327 tSchBeaconStruct *pBeaconStruct;
Jeff Johnson295189b2012-06-20 16:38:30 -0700328
329 //Initialize status code to success.
330
331 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
332
333 mlmAssocCnf.resultCode = eSIR_SME_SUCCESS;
334 /* Update PE session Id*/
335 mlmAssocCnf.sessionId = psessionEntry->peSessionId;
336
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700337 if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd,
338 (void **)&pBeaconStruct, sizeof(tSchBeaconStruct)))
339 {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700340 limLog(pMac, LOGE, FL("Unable to PAL allocate memory in limProcessAssocRspFrame") );
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700341 return;
342 }
343
Jeff Johnson295189b2012-06-20 16:38:30 -0700344
345 if (psessionEntry->limSystemRole == eLIM_AP_ROLE || psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE )
346 {
347 // Should not have received Re/Association Response
348 // frame on AP. Log error
349 limLog(pMac, LOGE,
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700350 FL("received Re/Assoc response frame on role %d "),
Jeff Johnson295189b2012-06-20 16:38:30 -0700351 psessionEntry->limSystemRole);
352
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700353 palFreeMemory(pMac->hHdd, pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 return;
355 }
356
357
358 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
359 frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo);
360
361 if (((subType == LIM_ASSOC) &&
362 (psessionEntry->limMlmState != eLIM_MLM_WT_ASSOC_RSP_STATE)) ||
363 ((subType == LIM_REASSOC) &&
364 ((psessionEntry->limMlmState != eLIM_MLM_WT_REASSOC_RSP_STATE)
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700365#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
Jeff Johnson295189b2012-06-20 16:38:30 -0700366 && (psessionEntry->limMlmState != eLIM_MLM_WT_FT_REASSOC_RSP_STATE)
367#endif
368 )))
369 {
370 /// Received unexpected Re/Association Response frame
371
372#ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700373 PELOG1(limLog(pMac, LOG1, FL("mlm state is set to %d session=%d"),
Jeff Johnson295189b2012-06-20 16:38:30 -0700374 psessionEntry->limMlmState, psessionEntry->peSessionId);)
375#endif
376 // Log error
377 if (!pHdr->fc.retry)
378 {
379 limLog(pMac, LOGE,
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700380 FL("received Re/Assoc rsp frame in unexpected state"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 limPrintMlmState(pMac, LOGE, psessionEntry->limMlmState);
382 }
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700383 palFreeMemory(pMac->hHdd, pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700384 return;
385 }
386#if 0
387 if (wlan_cfgGetStr(pMac, WNI_CFG_BSSID, currentBssId, &cfg) !=
388 eSIR_SUCCESS)
389 {
390 /// Could not get BSSID from CFG. Log error.
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700391 limLog(pMac, LOGP, FL("could not retrieve BSSID"));
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700392 palFreeMemory(pMac->hHdd, pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700393 return;
394 }
395#endif //TO SUPPORT BT-AMP
396 sirCopyMacAddr(currentBssId,psessionEntry->bssId);
397
398 if (subType == LIM_ASSOC)
399 {
400 if (!palEqualMemory( pMac->hHdd,pHdr->sa, currentBssId, sizeof(tSirMacAddr)) )
401 {
402 /**
403 * Received Association Response frame from an entity
404 * other than one to which request was initiated.
405 * Ignore this and wait until Association Failure Timeout.
406 */
407
408 // Log error
Mohit Khanna23863762012-09-11 17:40:09 -0700409 PELOGW(limLog(pMac, LOGW,
410 FL("received AssocRsp frame from unexpected peer "MAC_ADDRESS_STR),
411 MAC_ADDR_ARRAY(pHdr->sa));)
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700412 palFreeMemory(pMac->hHdd, pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 return;
414 }
415 }
416 else
417 {
418 if ( !palEqualMemory( pMac->hHdd,pHdr->sa, psessionEntry->limReAssocbssId, sizeof(tSirMacAddr)) )
419 {
420 /**
421 * Received Reassociation Response frame from an entity
422 * other than one to which request was initiated.
423 * Ignore this and wait until Reassociation Failure Timeout.
424 */
425
426 // Log error
Mohit Khanna23863762012-09-11 17:40:09 -0700427 PELOGW(limLog(pMac, LOGW,
428 FL("received ReassocRsp frame from unexpected peer "MAC_ADDRESS_STR),
429 MAC_ADDR_ARRAY(pHdr->sa));)
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700430 palFreeMemory(pMac->hHdd, pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700431
432 return;
433 }
434 }
435
436 if ( palAllocateMemory(pMac->hHdd, (void **)&pAssocRsp, sizeof(*pAssocRsp)) != eHAL_STATUS_SUCCESS) {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700437 limLog(pMac, LOGP, FL("Pal Allocate Memory failed in AssocRsp"));
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700438 palFreeMemory(pMac->hHdd, pBeaconStruct);
439
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 return;
441 }
442
Varun Reddy Yeturuf68abd62013-02-11 14:05:06 -0800443 VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
444 FL("Assoc Resp Frame Received: BSSID %02x:%02x:%02x:%02x:%02x:%02x (Rssi %d)"),
445 pHdr->bssId[0], pHdr->bssId[1], pHdr->bssId[2],
446 pHdr->bssId[3], pHdr->bssId[4], pHdr->bssId[5],
447 (uint)abs((tANI_S8)WDA_GET_RX_RSSI_DB(pRxPacketInfo)));
448
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 // Get pointer to Re/Association Response frame body
450 pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo);
451
452 // parse Re/Association Response frame.
453 if (sirConvertAssocRespFrame2Struct(
454 pMac, pBody, frameLen, pAssocRsp) == eSIR_FAILURE)
455 {
456 if (palFreeMemory(pMac->hHdd, pAssocRsp) != eHAL_STATUS_SUCCESS)
457 {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700458 limLog(pMac, LOGP, FL("PalFree Memory failed "));
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 }
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700460 PELOGE(limLog(pMac, LOGE, FL("Parse error Assoc resp subtype %d, length=%d"), frameLen,subType);)
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700461 palFreeMemory(pMac->hHdd, pBeaconStruct);
462
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 return;
464 }
465
466 if(!pAssocRsp->suppRatesPresent)
467 {
468 PELOGE(limLog(pMac, LOGW, FL("assoc response does not have supported rate set"));)
469 palCopyMemory(pMac->hHdd, &pAssocRsp->supportedRates,
470 &psessionEntry->rateSet, sizeof(tSirMacRateSet));
471 }
472
473 mlmAssocCnf.protStatusCode = pAssocRsp->statusCode;
474
475 if( psessionEntry->assocRsp != NULL )
476 {
477 palFreeMemory(pMac->hHdd, psessionEntry->assocRsp);
478 psessionEntry->assocRsp = NULL;
479 }
Jeff Johnson43971f52012-07-17 12:26:56 -0700480 if( (palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->assocRsp, frameLen)) != eHAL_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 {
482 PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc response, len = %d"), frameLen);)
483 }
484 else
485 {
486 //Store the Assoc response. This is sent to csr/hdd in join cnf response.
487 palCopyMemory(pMac->hHdd, psessionEntry->assocRsp, pBody, frameLen);
488 psessionEntry->assocRspLen = frameLen;
489 }
490
491#ifdef WLAN_FEATURE_VOWIFI_11R
492 if (psessionEntry->ricData != NULL)
493 {
494 palFreeMemory(pMac->hHdd, psessionEntry->ricData);
495 psessionEntry->ricData = NULL;
496 }
497 if(pAssocRsp->ricPresent)
498 {
499 psessionEntry->RICDataLen = pAssocRsp->num_RICData * sizeof(tDot11fIERICDataDesc);
Jeff Johnson43971f52012-07-17 12:26:56 -0700500 if( (palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->ricData, psessionEntry->RICDataLen)) != eHAL_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -0700501 {
502 PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc response"));)
503 psessionEntry->RICDataLen = 0;
504 }
505 else
506 {
507 palCopyMemory(pMac->hHdd, psessionEntry->ricData, &pAssocRsp->RICData[0], psessionEntry->RICDataLen);
508 }
509 }
510 else
511 {
512 psessionEntry->RICDataLen = 0;
513 psessionEntry->ricData = NULL;
514 }
515#endif
516
517#ifdef FEATURE_WLAN_CCX
518 if (psessionEntry->tspecIes != NULL)
519 {
520 palFreeMemory(pMac->hHdd, psessionEntry->tspecIes);
521 psessionEntry->tspecIes = NULL;
522 }
523 if(pAssocRsp->tspecPresent)
524 {
525 psessionEntry->tspecLen = pAssocRsp->num_tspecs * sizeof(tDot11fIEWMMTSPEC);
Jeff Johnson43971f52012-07-17 12:26:56 -0700526 if( (palAllocateMemory(pMac->hHdd, (void**)&psessionEntry->tspecIes, psessionEntry->tspecLen)) != eHAL_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 {
528 PELOGE(limLog(pMac, LOGE, FL("Unable to allocate memory to store assoc response"));)
529 psessionEntry->tspecLen = 0;
530 }
531 else
532 {
533 palCopyMemory(pMac->hHdd, psessionEntry->tspecIes, &pAssocRsp->TSPECInfo[0], psessionEntry->tspecLen);
534 }
535 PELOG1(limLog(pMac, LOG1, FL(" Tspec EID present in assoc rsp "));)
536 }
537 else
538 {
539 psessionEntry->tspecLen = 0;
540 psessionEntry->tspecIes = NULL;
541 PELOG1(limLog(pMac, LOG1, FL(" Tspec EID *NOT* present in assoc rsp "));)
542 }
543#endif
544
545 if (pAssocRsp->capabilityInfo.ibss)
546 {
547 /**
548 * Received Re/Association Response from peer
549 * with IBSS capability set.
550 * Ignore the frame and wait until Re/assoc
551 * failure timeout.
552 */
553
554 // Log error
555 limLog(pMac, LOGE,
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700556 FL("received Re/AssocRsp frame with IBSS capability"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 palFreeMemory(pMac->hHdd, pAssocRsp);
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700558 palFreeMemory(pMac->hHdd, pBeaconStruct);
559
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 return;
561 }
562
563 if (cfgGetCapabilityInfo(pMac, &caps,psessionEntry) != eSIR_SUCCESS)
564 {
565 /**
566 * Could not get Capabilities value
567 * from CFG. Log error.
568 */
569 palFreeMemory(pMac->hHdd, pAssocRsp);
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700570 palFreeMemory(pMac->hHdd, pBeaconStruct);
571
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700572 limLog(pMac, LOGP, FL("could not retrieve Capabilities value"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700573 return;
574 }
575 limCopyU16((tANI_U8 *) &localCapabilities, caps);
576
577 if (subType == LIM_ASSOC) // Stop Association failure timer
578 limDeactivateAndChangeTimer(pMac, eLIM_ASSOC_FAIL_TIMER);
579 else // Stop Reassociation failure timer
Madan Mohan Koyyalamudi61bc5662012-11-02 14:33:10 -0700580 {
581#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
582 pMac->lim.reAssocRetryAttempt = 0;
Madan Mohan Koyyalamudia9ebd5e2012-11-15 16:00:56 -0800583 if ((NULL != pMac->lim.pSessionEntry) && (NULL != pMac->lim.pSessionEntry->pLimMlmReassocRetryReq))
Madan Mohan Koyyalamudi61bc5662012-11-02 14:33:10 -0700584 {
585 palFreeMemory( pMac->hHdd, pMac->lim.pSessionEntry->pLimMlmReassocRetryReq);
586 pMac->lim.pSessionEntry->pLimMlmReassocRetryReq = NULL;
587 }
588#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 limDeactivateAndChangeTimer(pMac, eLIM_REASSOC_FAIL_TIMER);
Madan Mohan Koyyalamudi61bc5662012-11-02 14:33:10 -0700590 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700591
592 if (pAssocRsp->statusCode != eSIR_MAC_SUCCESS_STATUS)
593 {
594 // Re/Association response was received
595 // either with failure code.
596 // Log error.
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700597 PELOGE(limLog(pMac, LOGE, FL("received Re/AssocRsp frame failure code %d"), pAssocRsp->statusCode);)
Jeff Johnson295189b2012-06-20 16:38:30 -0700598 // Need to update 'association failure' error counter
599 // along with STATUS CODE
600
601 // Return Assoc confirm to SME with received failure code
602
603 if (pAssocRsp->propIEinfo.loadBalanceInfoPresent)
604 {
605 mlmAssocCnf.resultCode = eSIR_SME_TRANSFER_STA;
606 palCopyMemory( pMac->hHdd, pMac->lim.gLimAlternateRadio.bssId,
607 pAssocRsp->propIEinfo.alternateRadio.bssId, sizeof(tSirMacAddr));
608 pMac->lim.gLimAlternateRadio.channelId =
609 pAssocRsp->propIEinfo.alternateRadio.channelId;
610 }else
611 mlmAssocCnf.resultCode = eSIR_SME_ASSOC_REFUSED;
612
613 // Delete Pre-auth context for the associated BSS
614 if (limSearchPreAuthList(pMac, pHdr->sa))
615 limDeletePreAuthNode(pMac, pHdr->sa);
616
617 goto assocReject;
618 }
619 else if ((pAssocRsp->aid & 0x3FFF) > 2007)
620 {
621 // Re/Association response was received
622 // with invalid AID value
623 // Log error
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700624 PELOGW(limLog(pMac, LOGW, FL("received Re/AssocRsp frame with invalid aid %X "), pAssocRsp->aid);)
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 mlmAssocCnf.resultCode = eSIR_SME_INVALID_ASSOC_RSP_RXED;
626 mlmAssocCnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS;
627
628 // Send advisory Disassociation frame to AP
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -0800629 limSendDisassocMgmtFrame(pMac, eSIR_MAC_UNSPEC_FAILURE_REASON,
630 pHdr->sa, psessionEntry, FALSE);
Jeff Johnson295189b2012-06-20 16:38:30 -0700631
632 goto assocReject;
633 }
634 // Association Response received with success code
Varun Reddy Yeturua39b9902013-01-18 15:48:32 -0800635 /*
636 * Set the link state to POSTASSOC now that we have received
637 * assoc/reassoc response
638 * NOTE: for BTAMP case, it is being handled in limProcessMlmAssocReq
639 */
640 if (!((psessionEntry->bssType == eSIR_BTAMP_STA_MODE) ||
641 ((psessionEntry->bssType == eSIR_BTAMP_AP_MODE) &&
642 (psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE))))
643 {
644 if (limSetLinkState(pMac, eSIR_LINK_POSTASSOC_STATE, psessionEntry->bssId,
645 psessionEntry->selfMacAddr, NULL, NULL) != eSIR_SUCCESS)
646 {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700647 PELOGE(limLog(pMac, LOGE, FL("Set link state to POSTASSOC failed"));)
Gopichand Nakkala114718f2013-03-25 19:19:46 -0700648 palFreeMemory(pMac->hHdd, pBeaconStruct);
649 palFreeMemory(pMac->hHdd, pAssocRsp);
650 return;
Varun Reddy Yeturua39b9902013-01-18 15:48:32 -0800651 }
652 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 if (subType == LIM_REASSOC)
654 {
655 // Log success
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700656 PELOG1(limLog(pMac, LOG1, FL("Successfully Reassociated with BSS"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700657#ifdef FEATURE_WLAN_CCX
658 {
659 tANI_U8 cnt = 0;
660 if (pAssocRsp->tsmPresent)
661 {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700662 limLog(pMac, LOGW, "TSM IE Present in Reassoc Rsp");
Jeff Johnson295189b2012-06-20 16:38:30 -0700663 // Start the TSM timer only if the TSPEC Ie is present in the reassoc rsp
664 if (pAssocRsp->tspecPresent) {
665 // Find the TSPEC IE with VO user priority
666 for (cnt=0; cnt<pAssocRsp->num_tspecs; cnt++) {
667 if ( upToAc(pAssocRsp->TSPECInfo[cnt].user_priority) == EDCA_AC_VO) {
668 psessionEntry->ccxContext.tsm.tid = pAssocRsp->TSPECInfo[cnt].user_priority;
669 vos_mem_copy(&psessionEntry->ccxContext.tsm.tsmInfo,
670 &pAssocRsp->tsmIE, sizeof(tSirMacCCXTSMIE));
671 limActivateTSMStatsTimer(pMac, psessionEntry);
672 if(psessionEntry->ccxContext.tsm.tsmInfo.state) {
673 psessionEntry->ccxContext.tsm.tsmMetrics.RoamingCount++;
674 }
675 break;
676 }
677 }
678 } else {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700679 limLog(pMac, LOGE, "TSM present but TSPEC IE not present in Reassoc Rsp");
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 }
681 }
682 }
683#endif
684 if (psessionEntry->pLimMlmJoinReq)
685 {
686 palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmJoinReq);
687 psessionEntry->pLimMlmJoinReq = NULL;
688 }
689
690 psessionEntry->limAssocResponseData = (void *) pAssocRsp; /** Store the ReAssocRsp Frame in DphTable to be used
691 during processing DelSta nd DelBss to send AddBss again*/
692 pStaDs = dphGetHashEntry(pMac, DPH_STA_HASH_INDEX_PEER, &psessionEntry->dph.dphHashTable);
693
694 if(!pStaDs)
695 {
Varun Reddy Yeturuf68abd62013-02-11 14:05:06 -0800696 PELOGE(limLog(pMac, LOGE, FL("could not get hash entry at DPH for"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 limPrintMacAddr(pMac, pHdr->sa, LOGE);
698 mlmAssocCnf.resultCode = eSIR_SME_INVALID_ASSOC_RSP_RXED;
699 mlmAssocCnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS;
700
701 // Send advisory Disassociation frame to AP
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -0800702 limSendDisassocMgmtFrame(pMac, eSIR_MAC_UNSPEC_FAILURE_REASON,
703 pHdr->sa, psessionEntry, FALSE);
Jeff Johnson295189b2012-06-20 16:38:30 -0700704
705 goto assocReject;
706 }
707
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700708#if defined(WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 if (psessionEntry->limMlmState == eLIM_MLM_WT_FT_REASSOC_RSP_STATE)
710 {
711#ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG
Varun Reddy Yeturuf68abd62013-02-11 14:05:06 -0800712 PELOGE(limLog(pMac, LOG1, FL("Sending self sta"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700713#endif
714 pmmResetPmmState(pMac);
715
716 limUpdateAssocStaDatas(pMac, pStaDs, pAssocRsp,psessionEntry);
717
718 // Store assigned AID for TIM processing
719 psessionEntry->limAID = pAssocRsp->aid & 0x3FFF;
720
Madan Mohan Koyyalamudi5e001fd2012-11-27 19:16:34 +0530721 // Downgrade the EDCA parameters if needed
722 limSetActiveEdcaParams(pMac, psessionEntry->gLimEdcaParams, psessionEntry);
723
724 // Send the active EDCA parameters to HAL
725 if (pStaDs->aniPeer == eANI_BOOLEAN_TRUE)
726 {
727 limSendEdcaParams(pMac, psessionEntry->gLimEdcaParamsActive, pStaDs->bssId, eANI_BOOLEAN_TRUE);
728 }
729 else
730 {
731 limSendEdcaParams(pMac, psessionEntry->gLimEdcaParamsActive, pStaDs->bssId, eANI_BOOLEAN_FALSE);
732 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 limAddFTStaSelf(pMac, (pAssocRsp->aid & 0x3FFF), psessionEntry);
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700734 palFreeMemory(pMac->hHdd, pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700735
736 return;
737 }
738#endif /* WLAN_FEATURE_VOWIFI_11R */
739
740 /* If we're re-associating to the same BSS, we don't want to invoke delete
741 * STA, delete BSS, as that would remove the already established TSPEC.
742 * Just go ahead and re-add the BSS, STA with new capability information.
743 * However, if we're re-associating to a different BSS, then follow thru
744 * with del STA, del BSS, add BSS, add STA.
745 */
746 if (sirCompareMacAddr( psessionEntry->bssId, psessionEntry->limReAssocbssId))
747 limHandleAddBssInReAssocContext(pMac, pStaDs, psessionEntry);
748 else
749 {
750 // reset the uapsd mask settings since we're re-associating to new AP
751 pMac->lim.gUapsdPerAcDeliveryEnableMask = 0;
752 pMac->lim.gUapsdPerAcTriggerEnableMask = 0;
753
754 if (limCleanupRxPath(pMac, pStaDs,psessionEntry) != eSIR_SUCCESS)
755 goto assocReject;
756 }
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700757 palFreeMemory(pMac->hHdd, pBeaconStruct);
758
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 return;
760 }
761
762 // Log success
Madan Mohan Koyyalamudi8b7f1e62012-10-05 14:56:51 -0700763 PELOG1(limLog(pMac, LOG1, FL("Successfully Associated with BSS "MAC_ADDRESS_STR),
Mohit Khanna23863762012-09-11 17:40:09 -0700764 MAC_ADDR_ARRAY(pHdr->sa));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700765#ifdef FEATURE_WLAN_CCX
766 if(psessionEntry->ccxContext.tsm.tsmInfo.state)
767 {
768 psessionEntry->ccxContext.tsm.tsmMetrics.RoamingCount = 0;
769 }
770#endif
771 /**
772 * Update the status for PMM module
773 */
774 pmmResetPmmState(pMac);
775
776 // Store assigned AID for TIM processing
777 psessionEntry->limAID = pAssocRsp->aid & 0x3FFF;
778
779
780 //STA entry was created during pre-assoc state.
781 if ((pStaDs = dphGetHashEntry(pMac, DPH_STA_HASH_INDEX_PEER, &psessionEntry->dph.dphHashTable)) == NULL)
782 {
783 // Could not add hash table entry
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700784 PELOGE(limLog(pMac, LOGE, FL("could not get hash entry at DPH for "));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700785 limPrintMacAddr(pMac, pHdr->sa, LOGE);
786
787 mlmAssocCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE;
788 mlmAssocCnf.protStatusCode = eSIR_SME_SUCCESS;
789
790
791 limPostSmeMessage(pMac, LIM_MLM_ASSOC_CNF,
792 (tANI_U32 *) &mlmAssocCnf);
793 palFreeMemory(pMac->hHdd, pAssocRsp);
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700794 palFreeMemory(pMac->hHdd, pBeaconStruct);
795
Jeff Johnson295189b2012-06-20 16:38:30 -0700796 return;
797 }
798
799 // Delete Pre-auth context for the associated BSS
800 if (limSearchPreAuthList(pMac, pHdr->sa))
801 limDeletePreAuthNode(pMac, pHdr->sa);
802
803 limUpdateAssocStaDatas(pMac, pStaDs, pAssocRsp,psessionEntry);
Jeff Johnson295189b2012-06-20 16:38:30 -0700804 // Extract the AP capabilities from the beacon that was received earlier
805 // TODO - Watch out for an error response!
806 limExtractApCapabilities( pMac,
807 (tANI_U8 *) psessionEntry->pLimJoinReq->bssDescription.ieFields,
808 limGetIElenFromBssDescription( &psessionEntry->pLimJoinReq->bssDescription ),
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700809 pBeaconStruct );
Jeff Johnson295189b2012-06-20 16:38:30 -0700810
811 if(pMac->lim.gLimProtectionControl != WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE)
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700812 limDecideStaProtectionOnAssoc(pMac, pBeaconStruct, psessionEntry);
Jeff Johnson295189b2012-06-20 16:38:30 -0700813
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700814 if(pBeaconStruct->erpPresent) {
815 if (pBeaconStruct->erpIEInfo.barkerPreambleMode)
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 psessionEntry->beaconParams.fShortPreamble = false;
817 else
818 psessionEntry->beaconParams.fShortPreamble = true;
819 }
820
821
822 //Update the BSS Entry, this entry was added during preassoc.
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700823 if( eSIR_SUCCESS == limStaSendAddBss( pMac, pAssocRsp, pBeaconStruct,
Jeff Johnson295189b2012-06-20 16:38:30 -0700824 &psessionEntry->pLimJoinReq->bssDescription, true, psessionEntry))
825 {
826 palFreeMemory(pMac->hHdd, pAssocRsp);
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700827 palFreeMemory(pMac->hHdd, pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 return;
829 }
830 else
831 {
832 mlmAssocCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE;
833 mlmAssocCnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS;
834 }
835
Jeff Johnson295189b2012-06-20 16:38:30 -0700836
837
838assocReject:
839 if ((subType == LIM_ASSOC)
840#ifdef WLAN_FEATURE_VOWIFI_11R
841 || ((subType == LIM_REASSOC) && (psessionEntry->limMlmState == eLIM_MLM_WT_FT_REASSOC_RSP_STATE))
842#endif
843 ) {
Kiran Kumar Lokere80007262013-03-18 19:45:50 -0700844 PELOGE(limLog(pMac, LOGE, FL("Assoc Rejected by the peer. Reason: %d"), mlmAssocCnf.resultCode);)
Jeff Johnsone7245742012-09-05 17:12:55 -0700845 psessionEntry->limMlmState = eLIM_MLM_IDLE_STATE;
846 MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState));
Jeff Johnson295189b2012-06-20 16:38:30 -0700847
848 if (psessionEntry->pLimMlmJoinReq)
849 {
850 palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmJoinReq);
851 psessionEntry->pLimMlmJoinReq = NULL;
852 }
Jeff Johnsone7245742012-09-05 17:12:55 -0700853
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 if (subType == LIM_ASSOC)
855 {
856 limPostSmeMessage(pMac, LIM_MLM_ASSOC_CNF, (tANI_U32 *) &mlmAssocCnf);
857 }
858#ifdef WLAN_FEATURE_VOWIFI_11R
859 else
860 {
861 mlmAssocCnf.resultCode = eSIR_SME_FT_REASSOC_FAILURE;
862 limPostSmeMessage(pMac, LIM_MLM_REASSOC_CNF, (tANI_U32 *) &mlmAssocCnf);
863 }
864#endif /* WLAN_FEATURE_VOWIFI_11R */
865 } else {
866 limRestorePreReassocState( pMac,
867 eSIR_SME_REASSOC_REFUSED, mlmAssocCnf.protStatusCode,psessionEntry);
868 }
869
870 /* CR: vos packet memory is leaked when assoc rsp timeouted/failed. */
871 /* notify TL that association is failed so that TL can flush the cached frame */
872 WLANTL_AssocFailed (psessionEntry->staId);
873
Madan Mohan Koyyalamudi19032762012-10-21 12:42:11 -0700874 palFreeMemory(pMac->hHdd, pBeaconStruct);
Jeff Johnson295189b2012-06-20 16:38:30 -0700875 palFreeMemory(pMac->hHdd, pAssocRsp);
876 return;
877} /*** end limProcessAssocRspFrame() ***/
878