blob: 29c83b9a33c1cc20d39ad18b3fcc1127c295110f [file] [log] [blame]
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001/*
Wu Gao5c3d94b2019-01-17 21:15:54 +08002 * Copyright (c) 2011-2019 The Linux Foundation. All rights reserved.
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003 *
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004 * Permission to use, copy, modify, and/or distribute this software for
5 * any purpose with or without fee is hereby granted, provided that the
6 * above copyright notice and this permission notice appear in all
7 * copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16 * PERFORMANCE OF THIS SOFTWARE.
17 */
18
19/*
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020 *
21 * This file lim_process_assoc_rsp_frame.cc contains the code
22 * for processing Re/Association Response Frame.
23 * Author: Chandra Modumudi
24 * Date: 03/18/02
25 * History:-
26 * Date Modified by Modification Information
27 * --------------------------------------------------------------------
28 *
29 */
30
31#include "wni_api.h"
32#include "wni_cfg.h"
33#include "ani_global.h"
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080034#include "sch_api.h"
35
36#include "utils_api.h"
37#include "lim_types.h"
38#include "lim_utils.h"
39#include "lim_assoc_utils.h"
40#include "lim_security_utils.h"
41#include "lim_ser_des_utils.h"
42#include "lim_sta_hash_api.h"
43#include "lim_send_messages.h"
Sridhar Selvaraj0d5d2c72017-08-17 17:30:01 +053044#include "lim_process_fils.h"
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080045
Jeff Johnson9320c1e2018-12-02 13:09:20 -080046extern QDF_STATUS sch_beacon_edca_process(struct mac_context *mac,
Jeff Johnsonb5c13332018-12-03 09:54:51 -080047 tSirMacEdcaParamSetIE *edca, struct pe_session *pe_session);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080048
49/**
50 * lim_update_stads_htcap() - Updates station Descriptor HT capability
51 * @mac_ctx: Pointer to Global MAC structure
52 * @sta_ds: Station Descriptor in DPH
53 * @assoc_rsp: Pointer to Association Response Structure
Kanchanapally, Vidyullathae3062812015-05-22 17:28:57 +053054 * @session_entry : PE session Entry
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080055 *
56 * This function is called to Update the HT capabilities in
57 * Station Descriptor (dph) Details from
58 * Association / ReAssociation Response Frame
59 *
60 * Return: None
61 */
Jeff Johnson9320c1e2018-12-02 13:09:20 -080062static void lim_update_stads_htcap(struct mac_context *mac_ctx,
Kanchanapally, Vidyullathae3062812015-05-22 17:28:57 +053063 tpDphHashNode sta_ds, tpSirAssocRsp assoc_rsp,
Jeff Johnson82e779e2018-11-19 06:52:11 -080064 struct pe_session *session_entry)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080065{
66 uint16_t highest_rxrate = 0;
67 tDot11fIEHTCaps *ht_caps;
68
69 ht_caps = &assoc_rsp->HTCaps;
70 sta_ds->mlmStaContext.htCapability = assoc_rsp->HTCaps.present;
71 if (assoc_rsp->HTCaps.present) {
72 sta_ds->htGreenfield =
73 (uint8_t) ht_caps->greenField;
Kanchanapally, Vidyullathae3062812015-05-22 17:28:57 +053074 if (session_entry->htSupportedChannelWidthSet) {
75 sta_ds->htSupportedChannelWidthSet =
76 (uint8_t) (ht_caps->supportedChannelWidthSet ?
77 assoc_rsp->HTInfo.recommendedTxWidthSet :
78 ht_caps->supportedChannelWidthSet);
79 } else
80 sta_ds->htSupportedChannelWidthSet =
81 eHT_CHANNEL_WIDTH_20MHZ;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080082 sta_ds->htLsigTXOPProtection =
83 (uint8_t) ht_caps->lsigTXOPProtection;
84 sta_ds->htMIMOPSState =
85 (tSirMacHTMIMOPowerSaveState)ht_caps->mimoPowerSave;
86 sta_ds->htMaxAmsduLength =
87 (uint8_t) ht_caps->maximalAMSDUsize;
88 sta_ds->htAMpduDensity = ht_caps->mpduDensity;
89 sta_ds->htDsssCckRate40MHzSupport =
90 (uint8_t) ht_caps->dsssCckMode40MHz;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080091 sta_ds->htMaxRxAMpduFactor =
92 ht_caps->maxRxAMPDUFactor;
93 lim_fill_rx_highest_supported_rate(mac_ctx, &highest_rxrate,
94 ht_caps->supportedMCSSet);
95 sta_ds->supportedRates.rxHighestDataRate =
96 highest_rxrate;
97 /*
98 * This is for AP as peer STA and we are INFRA STA
99 *.We will put APs offset in dph node which is peer STA
100 */
101 sta_ds->htSecondaryChannelOffset =
102 (uint8_t) assoc_rsp->HTInfo.secondaryChannelOffset;
Kanchanapally, Vidyullathae3062812015-05-22 17:28:57 +0530103
104 /* Check if we have support for gShortGI20Mhz and
105 * gShortGI40Mhz from ini file
106 */
Jeff Johnsonbe119e62019-02-02 12:30:26 -0800107 if (session_entry->ht_config.ht_sgi20)
Kanchanapally, Vidyullathae3062812015-05-22 17:28:57 +0530108 sta_ds->htShortGI20Mhz =
Sandeep Puligilla607f34a2016-05-25 14:37:47 -0700109 (uint8_t)assoc_rsp->HTCaps.shortGI20MHz;
110 else
111 sta_ds->htShortGI20Mhz = false;
Kanchanapally, Vidyullathae3062812015-05-22 17:28:57 +0530112
Jeff Johnsonbe119e62019-02-02 12:30:26 -0800113 if (session_entry->ht_config.ht_sgi40)
Kanchanapally, Vidyullathae3062812015-05-22 17:28:57 +0530114 sta_ds->htShortGI40Mhz =
Sandeep Puligilla607f34a2016-05-25 14:37:47 -0700115 (uint8_t)assoc_rsp->HTCaps.shortGI40MHz;
116 else
117 sta_ds->htShortGI40Mhz = false;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800118 }
119}
120
121/**
122 * lim_update_assoc_sta_datas() - Updates station Descriptor
123 * mac_ctx: Pointer to Global MAC structure
124 * sta_ds: Station Descriptor in DPH
125 * assoc_rsp: Pointer to Association Response Structure
126 * session_entry : PE session Entry
127 *
128 * This function is called to Update the Station Descriptor (dph) Details from
129 * Association / ReAssociation Response Frame
130 *
131 * Return: None
132 */
Jeff Johnson9320c1e2018-12-02 13:09:20 -0800133void lim_update_assoc_sta_datas(struct mac_context *mac_ctx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800134 tpDphHashNode sta_ds, tpSirAssocRsp assoc_rsp,
Jeff Johnson82e779e2018-11-19 06:52:11 -0800135 struct pe_session *session_entry)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800136{
137 uint32_t phy_mode;
138 bool qos_mode;
139 tDot11fIEVHTCaps *vht_caps = NULL;
Naveen Rawatd8feac12017-09-08 15:08:39 -0700140 tDot11fIEhe_cap *he_cap = NULL;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800141
142 lim_get_phy_mode(mac_ctx, &phy_mode, session_entry);
143 sta_ds->staType = STA_ENTRY_SELF;
144 limGetQosMode(session_entry, &qos_mode);
145 sta_ds->mlmStaContext.authType = session_entry->limCurrentAuthType;
146
147 /* Add capabilities information, rates and AID */
148 sta_ds->mlmStaContext.capabilityInfo = assoc_rsp->capabilityInfo;
149 sta_ds->shortPreambleEnabled =
150 (uint8_t) assoc_rsp->capabilityInfo.shortPreamble;
151
Jeff Johnson118a4a02018-05-06 00:14:15 -0700152 /* Update HT Capabilities only when the self mode supports HT */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800153 if (IS_DOT11_MODE_HT(session_entry->dot11mode))
Kanchanapally, Vidyullathae3062812015-05-22 17:28:57 +0530154 lim_update_stads_htcap(mac_ctx, sta_ds, assoc_rsp,
155 session_entry);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800156
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800157 if (assoc_rsp->VHTCaps.present)
158 vht_caps = &assoc_rsp->VHTCaps;
Kapil Gupta4b2efbb2016-10-03 13:07:20 +0530159 else if (assoc_rsp->vendor_vht_ie.VHTCaps.present)
160 vht_caps = &assoc_rsp->vendor_vht_ie.VHTCaps;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800161
162 if (IS_DOT11_MODE_VHT(session_entry->dot11mode)) {
Jeff Johnson8e9530b2019-03-18 13:41:42 -0700163 if ((vht_caps) && vht_caps->present) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800164 sta_ds->mlmStaContext.vhtCapability =
165 vht_caps->present;
166 /*
167 * If 11ac is supported and if the peer is
168 * sending VHT capabilities,
169 * then htMaxRxAMpduFactor should be
170 * overloaded with VHT maxAMPDULenExp
171 */
172 sta_ds->htMaxRxAMpduFactor = vht_caps->maxAMPDULenExp;
173 if (session_entry->htSupportedChannelWidthSet) {
174 if (assoc_rsp->VHTOperation.present)
175 sta_ds->vhtSupportedChannelWidthSet =
176 assoc_rsp->VHTOperation.chanWidth;
177 else
178 sta_ds->vhtSupportedChannelWidthSet =
179 eHT_CHANNEL_WIDTH_40MHZ;
180 }
181 }
182 }
Krishna Kumaar Natarajand1cd56e2016-09-30 08:43:03 -0700183
184 if (IS_DOT11_MODE_HE(session_entry->dot11mode))
185 lim_update_stads_he_caps(sta_ds, assoc_rsp, session_entry);
186
187 if (lim_is_sta_he_capable(sta_ds))
Naveen Rawatd8feac12017-09-08 15:08:39 -0700188 he_cap = &assoc_rsp->he_cap;
Krishna Kumaar Natarajand1cd56e2016-09-30 08:43:03 -0700189
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800190 if (lim_populate_peer_rate_set(mac_ctx, &sta_ds->supportedRates,
191 assoc_rsp->HTCaps.supportedMCSSet,
192 false, session_entry,
Jeff Johnson0301ecb2018-06-29 09:36:23 -0700193 vht_caps, he_cap) != QDF_STATUS_SUCCESS) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530194 pe_err("could not get rateset and extended rate set");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800195 return;
196 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800197 sta_ds->vhtSupportedRxNss =
198 ((sta_ds->supportedRates.vhtRxMCSMap & MCSMAPMASK2x2)
199 == MCSMAPMASK2x2) ? 1 : 2;
Krishna Kumaar Natarajan0103ef82017-02-17 18:15:56 -0800200
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800201 /* If one of the rates is 11g rates, set the ERP mode. */
202 if ((phy_mode == WNI_CFG_PHY_MODE_11G) &&
203 sirIsArate(sta_ds->supportedRates.llaRates[0] & 0x7f))
204 sta_ds->erpEnabled = eHAL_SET;
205
206 /* Could not get prop rateset from CFG. Log error. */
207 sta_ds->qosMode = 0;
208 sta_ds->lleEnabled = 0;
209
210 /* update TSID to UP mapping */
211 if (qos_mode) {
212 if (assoc_rsp->edcaPresent) {
Jeff Johnson0301ecb2018-06-29 09:36:23 -0700213 QDF_STATUS status;
Srinivas Girigowda4d65ebe2017-10-13 21:41:42 -0700214
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800215 status =
216 sch_beacon_edca_process(mac_ctx,
217 &assoc_rsp->edca, session_entry);
Nishank Aggarwal47444142017-03-24 15:31:15 +0530218 pe_debug("Edca set update based on AssocRsp: status %d",
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800219 status);
Jeff Johnson0301ecb2018-06-29 09:36:23 -0700220 if (status != QDF_STATUS_SUCCESS) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530221 pe_err("Edca error in AssocResp");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800222 } else {
223 /* update default tidmap based on ACM */
224 sta_ds->qosMode = 1;
225 sta_ds->lleEnabled = 1;
226 }
227 }
228 }
229
230 sta_ds->wmeEnabled = 0;
231 sta_ds->wsmEnabled = 0;
232 if (session_entry->limWmeEnabled && assoc_rsp->wmeEdcaPresent) {
Jeff Johnson0301ecb2018-06-29 09:36:23 -0700233 QDF_STATUS status;
Srinivas Girigowda4d65ebe2017-10-13 21:41:42 -0700234
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800235 status = sch_beacon_edca_process(mac_ctx, &assoc_rsp->edca,
236 session_entry);
Nishank Aggarwal47444142017-03-24 15:31:15 +0530237 pe_debug("WME Edca set update based on AssocRsp: status %d",
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800238 status);
239
Jeff Johnson0301ecb2018-06-29 09:36:23 -0700240 if (status != QDF_STATUS_SUCCESS)
Nishank Aggarwal47444142017-03-24 15:31:15 +0530241 pe_err("WME Edca error in AssocResp - ignoring");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800242
243 else {
244 /* update default tidmap based on HashACM */
245 sta_ds->qosMode = 1;
246 sta_ds->wmeEnabled = 1;
247 }
248 } else {
249 /*
250 * We received assoc rsp from a legacy AP.
251 * So fill in the default local EDCA params.
252 * This is needed (refer to bug #14989) as we'll
253 * be passing the gLimEdcaParams to HAL in
254 * lim_process_sta_mlm_add_bss_rsp().
255 */
256 sch_set_default_edca_params(mac_ctx, session_entry);
257 }
258
259 if (qos_mode && (!sta_ds->qosMode) &&
260 sta_ds->mlmStaContext.htCapability) {
261 /*
262 * Enable QOS for all HT AP's even though WMM
263 * or 802.11E IE is not present
264 */
265 sta_ds->qosMode = 1;
266 sta_ds->wmeEnabled = 1;
267 }
268#ifdef WLAN_FEATURE_11W
269 if (session_entry->limRmfEnabled)
270 sta_ds->rmfEnabled = 1;
271#endif
272}
273
274/**
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800275 * lim_update_ric_data() - update session with ric data
276 * @mac_ctx: Pointer to Global MAC structure
277 * @session_entry: PE session handle
278 * @assoc_rsp: pointer to assoc response
279 *
280 * This function is called by lim_process_assoc_rsp_frame() to
281 * update PE session context with RIC data.
282 *
283 * Return: None
284 */
Jeff Johnson9320c1e2018-12-02 13:09:20 -0800285static void lim_update_ric_data(struct mac_context *mac_ctx,
Jeff Johnson82e779e2018-11-19 06:52:11 -0800286 struct pe_session *session_entry, tpSirAssocRsp assoc_rsp)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800287{
Jeff Johnson8e9530b2019-03-18 13:41:42 -0700288 if (session_entry->ricData) {
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530289 qdf_mem_free(session_entry->ricData);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800290 session_entry->ricData = NULL;
Sreelakshmi Konamki3b8ba612015-12-02 18:13:22 +0530291 session_entry->RICDataLen = 0;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800292 }
293 if (assoc_rsp->ricPresent) {
294 session_entry->RICDataLen =
295 assoc_rsp->num_RICData * sizeof(tDot11fIERICDataDesc);
Varun Reddy Yeturu61ce89c2015-11-01 07:57:39 -0800296 if (session_entry->RICDataLen) {
297 session_entry->ricData =
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530298 qdf_mem_malloc(session_entry->RICDataLen);
Arif Hussainf5b6c412018-10-10 19:41:09 -0700299 if (!session_entry->ricData)
Varun Reddy Yeturu61ce89c2015-11-01 07:57:39 -0800300 session_entry->RICDataLen = 0;
Arif Hussainf5b6c412018-10-10 19:41:09 -0700301 else
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530302 qdf_mem_copy(session_entry->ricData,
Varun Reddy Yeturu61ce89c2015-11-01 07:57:39 -0800303 &assoc_rsp->RICData[0],
304 session_entry->RICDataLen);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800305 } else {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530306 pe_err("RIC data not present");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800307 }
308 } else {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530309 pe_debug("Ric is not present");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800310 session_entry->RICDataLen = 0;
311 session_entry->ricData = NULL;
312 }
313 return;
314}
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800315
316#ifdef FEATURE_WLAN_ESE
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800317/**
318 * lim_update_ese_tspec() - update session with Tspec info.
319 * @mac_ctx: Pointer to Global MAC structure
320 * @session_entry: PE session handle
321 * @assoc_rsp: pointer to assoc response
322 *
323 * This function is called by lim_process_assoc_rsp_frame() to
324 * update PE session context with Tspec data.
325 *
326 * Return: None
327 */
Jeff Johnson9320c1e2018-12-02 13:09:20 -0800328static void lim_update_ese_tspec(struct mac_context *mac_ctx,
Jeff Johnson82e779e2018-11-19 06:52:11 -0800329 struct pe_session *session_entry, tpSirAssocRsp assoc_rsp)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800330{
Jeff Johnson8e9530b2019-03-18 13:41:42 -0700331 if (session_entry->tspecIes) {
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530332 qdf_mem_free(session_entry->tspecIes);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800333 session_entry->tspecIes = NULL;
Sreelakshmi Konamki3b8ba612015-12-02 18:13:22 +0530334 session_entry->tspecLen = 0;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800335 }
336 if (assoc_rsp->tspecPresent) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530337 pe_debug("Tspec EID present in assoc rsp");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800338 session_entry->tspecLen =
339 assoc_rsp->num_tspecs * sizeof(tDot11fIEWMMTSPEC);
Varun Reddy Yeturu61ce89c2015-11-01 07:57:39 -0800340 if (session_entry->tspecLen) {
341 session_entry->tspecIes =
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530342 qdf_mem_malloc(session_entry->tspecLen);
Arif Hussainf5b6c412018-10-10 19:41:09 -0700343 if (!session_entry->tspecIes)
Varun Reddy Yeturu61ce89c2015-11-01 07:57:39 -0800344 session_entry->tspecLen = 0;
Arif Hussainf5b6c412018-10-10 19:41:09 -0700345 else
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530346 qdf_mem_copy(session_entry->tspecIes,
Varun Reddy Yeturu61ce89c2015-11-01 07:57:39 -0800347 &assoc_rsp->TSPECInfo[0],
348 session_entry->tspecLen);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800349 } else {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530350 pe_err("TSPEC has Zero length");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800351 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800352 } else {
353 session_entry->tspecLen = 0;
354 session_entry->tspecIes = NULL;
Nishank Aggarwal47444142017-03-24 15:31:15 +0530355 pe_debug("Tspec EID *NOT* present in assoc rsp");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800356 }
357 return;
358}
359
360/**
361 * lim_update_ese_tsm() - update session with TSM info.
362 * @mac_ctx: Pointer to Global MAC structure
363 * @session_entry: PE session handle
364 * @assoc_rsp: pointer to assoc response
365 *
366 * This function is called by lim_process_assoc_rsp_frame() to
367 * update PE session context with TSM IE data and send
368 * eWNI_TSM_IE_IND to SME.
369 *
370 * Return: None
371 */
Jeff Johnson9320c1e2018-12-02 13:09:20 -0800372static void lim_update_ese_tsm(struct mac_context *mac_ctx,
Jeff Johnson82e779e2018-11-19 06:52:11 -0800373 struct pe_session *session_entry, tpSirAssocRsp assoc_rsp)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800374{
375 uint8_t cnt = 0;
376 tpEseTSMContext tsm_ctx;
377
Nishank Aggarwal47444142017-03-24 15:31:15 +0530378 pe_debug("TSM IE Present in Reassoc Rsp");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800379 /*
380 * Start the TSM timer only if the TSPEC
381 * Ie is present in the reassoc rsp
382 */
383 if (!assoc_rsp->tspecPresent) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530384 pe_err("TSM present but TSPEC IE not present");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800385 return;
386 }
387 tsm_ctx = &session_entry->eseContext.tsm;
388 /* Find the TSPEC IE with VO user priority */
389 for (cnt = 0; cnt < assoc_rsp->num_tspecs; cnt++) {
390 if (upToAc(assoc_rsp->TSPECInfo[cnt].user_priority) ==
Srinivas Girigowda5b86fbd2019-03-21 14:54:14 -0700391 QCA_WLAN_AC_VO) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800392 tsm_ctx->tid =
393 assoc_rsp->TSPECInfo[cnt].user_priority;
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530394 qdf_mem_copy(&tsm_ctx->tsmInfo,
Jeff Johnson4f340522019-02-02 22:02:52 -0800395 &assoc_rsp->tsmIE, sizeof(struct ese_tsm_ie));
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800396 lim_send_sme_tsm_ie_ind(mac_ctx,
397 session_entry, assoc_rsp->tsmIE.tsid,
398 assoc_rsp->tsmIE.state,
399 assoc_rsp->tsmIE.msmt_interval);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800400 if (tsm_ctx->tsmInfo.state)
401 tsm_ctx->tsmMetrics.RoamingCount++;
402 break;
403 }
404 }
405}
406#endif
407
408/**
409 * lim_update_stads_ext_cap() - update sta ds with ext cap
410 * @mac_ctx: Pointer to Global MAC structure
411 * @session_entry: PE session handle
412 * @assoc_rsp: pointer to assoc response
413 *
414 * This function is called by lim_process_assoc_rsp_frame() to
415 * update STA DS with ext capablities.
416 *
417 * Return: None
418 */
Jeff Johnson9320c1e2018-12-02 13:09:20 -0800419static void lim_update_stads_ext_cap(struct mac_context *mac_ctx,
Jeff Johnson82e779e2018-11-19 06:52:11 -0800420 struct pe_session *session_entry, tpSirAssocRsp assoc_rsp,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800421 tpDphHashNode sta_ds)
422{
423 struct s_ext_cap *ext_cap;
Srinivas Girigowda4d65ebe2017-10-13 21:41:42 -0700424
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800425 if (!assoc_rsp->ExtCap.present) {
426 sta_ds->timingMeasCap = 0;
427#ifdef FEATURE_WLAN_TDLS
428 session_entry->tdls_prohibited = false;
429 session_entry->tdls_chan_swit_prohibited = false;
430#endif
Nishank Aggarwal47444142017-03-24 15:31:15 +0530431 pe_debug("ExtCap not present");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800432 return;
433 }
434
435 ext_cap = (struct s_ext_cap *)assoc_rsp->ExtCap.bytes;
436 lim_set_stads_rtt_cap(sta_ds, ext_cap, mac_ctx);
437#ifdef FEATURE_WLAN_TDLS
438 session_entry->tdls_prohibited = ext_cap->tdls_prohibited;
439 session_entry->tdls_chan_swit_prohibited =
440 ext_cap->tdls_chan_swit_prohibited;
Nishank Aggarwal47444142017-03-24 15:31:15 +0530441 pe_debug("ExtCap: tdls_prohibited: %d tdls_chan_swit_prohibited: %d",
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800442 ext_cap->tdls_prohibited,
443 ext_cap->tdls_chan_swit_prohibited);
444#endif
Varun Reddy Yeturu4f849e52018-06-15 18:08:37 -0700445 lim_set_peer_twt_cap(session_entry, ext_cap);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800446}
447
448/**
Varun Reddy Yeturu32de0e42016-04-15 14:25:59 +0530449 * lim_stop_reassoc_retry_timer() - Cleanup after reassoc response is received
450 * @mac_ctx: Global MAC context
451 *
452 * Stop the reassoc retry timer and release the stored reassoc request.
453 *
454 * Return: None
455 */
Jeff Johnson9320c1e2018-12-02 13:09:20 -0800456static void lim_stop_reassoc_retry_timer(struct mac_context *mac_ctx)
Varun Reddy Yeturu32de0e42016-04-15 14:25:59 +0530457{
458 mac_ctx->lim.reAssocRetryAttempt = 0;
Jeff Johnson8e9530b2019-03-18 13:41:42 -0700459 if ((mac_ctx->lim.pe_session)
Varun Reddy Yeturu32de0e42016-04-15 14:25:59 +0530460 && (NULL !=
Jeff Johnsonb5c13332018-12-03 09:54:51 -0800461 mac_ctx->lim.pe_session->pLimMlmReassocRetryReq)) {
Varun Reddy Yeturu32de0e42016-04-15 14:25:59 +0530462 qdf_mem_free(
Jeff Johnsonb5c13332018-12-03 09:54:51 -0800463 mac_ctx->lim.pe_session->pLimMlmReassocRetryReq);
464 mac_ctx->lim.pe_session->pLimMlmReassocRetryReq = NULL;
Varun Reddy Yeturu32de0e42016-04-15 14:25:59 +0530465 }
466 lim_deactivate_and_change_timer(mac_ctx, eLIM_REASSOC_FAIL_TIMER);
467}
468
gaurank kathpaliaa3856b82019-05-15 13:20:28 +0530469#ifdef WLAN_FEATURE_11W
470static void
471lim_handle_assoc_reject_status(struct mac_context *mac_ctx,
472 struct pe_session *session_entry,
473 tpSirAssocRsp assoc_rsp,
474 tSirMacAddr source_addr)
475{
476 struct sir_rssi_disallow_lst ap_info = {{0}};
477 uint32_t timeout_value =
478 assoc_rsp->TimeoutInterval.timeoutValue;
479
480 if (!(session_entry->limRmfEnabled &&
481 assoc_rsp->statusCode == eSIR_MAC_TRY_AGAIN_LATER &&
482 (assoc_rsp->TimeoutInterval.present &&
483 (assoc_rsp->TimeoutInterval.timeoutType ==
484 SIR_MAC_TI_TYPE_ASSOC_COMEBACK))))
485 return;
486
487 /*
488 * Add to rssi reject list, which takes care of retry
489 * delay too. Fill the RSSI as 0, so the only param
490 * which will allow the bssid to connect is retry delay.
491 */
492 ap_info.retry_delay = timeout_value;
gaurank kathpalia3ebc17b2019-05-29 10:25:09 +0530493 qdf_mem_copy(ap_info.bssid.bytes, source_addr, QDF_MAC_ADDR_SIZE);
gaurank kathpaliaa3856b82019-05-15 13:20:28 +0530494 ap_info.expected_rssi = LIM_MIN_RSSI;
gaurank kathpalia3ebc17b2019-05-29 10:25:09 +0530495 lim_add_bssid_to_reject_list(mac_ctx->pdev, &ap_info);
gaurank kathpaliaa3856b82019-05-15 13:20:28 +0530496
497 pe_debug("ASSOC res with eSIR_MAC_TRY_AGAIN_LATER recvd. Add to time reject list(rssi reject in mac_ctx %d",
498 timeout_value);
gaurank kathpaliaa3856b82019-05-15 13:20:28 +0530499}
500#else
501static void
502lim_handle_assoc_reject_status(struct mac_context *mac_ctx,
503 struct pe_session *session_entry,
504 tpSirAssocRsp assoc_rsp,
505 tSirMacAddr source_addr)
506{
507}
508#endif
509
Varun Reddy Yeturu32de0e42016-04-15 14:25:59 +0530510/**
Yeshwanth Sriram Guntuka22ed8002019-05-07 15:08:09 +0530511 * lim_get_nss_supported_by_ap() - finds out nss from AP's beacons
512 * @vht_caps: VHT capabilities
513 * @ht_caps: HT capabilities
514 *
515 * Return: nss advertised by AP in beacon
516 */
517static uint8_t lim_get_nss_supported_by_ap(tDot11fIEVHTCaps *vht_caps,
518 tDot11fIEHTCaps *ht_caps)
519{
520 if (vht_caps->present) {
521 if ((vht_caps->rxMCSMap & 0xC0) != 0xC0)
522 return NSS_4x4_MODE;
523
524 if ((vht_caps->rxMCSMap & 0x30) != 0x30)
525 return NSS_3x3_MODE;
526
527 if ((vht_caps->rxMCSMap & 0x0C) != 0x0C)
528 return NSS_2x2_MODE;
529 } else if (ht_caps->present) {
530 if (ht_caps->supportedMCSSet[3])
531 return NSS_4x4_MODE;
532
533 if (ht_caps->supportedMCSSet[2])
534 return NSS_3x3_MODE;
535
536 if (ht_caps->supportedMCSSet[1])
537 return NSS_2x2_MODE;
538 }
539
540 return NSS_1x1_MODE;
541}
542
543/**
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800544 * lim_process_assoc_rsp_frame() - Processes assoc response
545 * @mac_ctx: Pointer to Global MAC structure
546 * @rx_packet_info - A pointer to Rx packet info structure
547 * @sub_type - Indicates whether it is Association Response (=0) or
548 * Reassociation Response (=1) frame
549 *
550 * This function is called by limProcessMessageQueue() upon
551 * Re/Association Response frame reception.
552 *
553 * Return: None
554 */
555
556void
Jeff Johnson9320c1e2018-12-02 13:09:20 -0800557lim_process_assoc_rsp_frame(struct mac_context *mac_ctx,
Jeff Johnson82e779e2018-11-19 06:52:11 -0800558 uint8_t *rx_pkt_info, uint8_t subtype, struct pe_session *session_entry)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800559{
560 uint8_t *body;
561 uint16_t caps, ie_len;
562 uint32_t frame_len;
563 tSirMacAddr current_bssid;
564 tpSirMacMgmtHdr hdr = NULL;
565 tSirMacCapabilityInfo mac_capab;
566 tpDphHashNode sta_ds;
567 tpSirAssocRsp assoc_rsp;
568 tLimMlmAssocCnf assoc_cnf;
569 tSchBeaconStruct *beacon;
570#ifdef WLAN_FEATURE_ROAM_OFFLOAD
571 uint8_t sme_sessionid = 0;
gaurank kathpalia14e2f912017-08-31 14:51:45 +0530572 struct csr_roam_session *roam_session;
Varun Reddy Yeturubbbbe232016-02-29 14:01:57 -0800573#endif
Yeshwanth Sriram Guntuka22ed8002019-05-07 15:08:09 +0530574 uint8_t ap_nss;
575
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800576 /* Initialize status code to success. */
Varun Reddy Yeturubbbbe232016-02-29 14:01:57 -0800577 if (lim_is_roam_synch_in_progress(session_entry))
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800578 hdr = (tpSirMacMgmtHdr) mac_ctx->roam.pReassocResp;
579 else
Varun Reddy Yeturubbbbe232016-02-29 14:01:57 -0800580 hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800581#ifdef WLAN_FEATURE_ROAM_OFFLOAD
582 sme_sessionid = session_entry->smeSessionId;
583#endif
584 assoc_cnf.resultCode = eSIR_SME_SUCCESS;
585 /* Update PE session Id */
586 assoc_cnf.sessionId = session_entry->peSessionId;
Jeff Johnson8e9530b2019-03-18 13:41:42 -0700587 if (!hdr) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530588 pe_err("LFR3: Reassoc response packet header is NULL");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800589 return;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800590 }
591
Abhinav Kumar50d4dc72018-06-15 16:35:50 +0530592 pe_debug("received Re/Assoc: %d resp on sessionid: %d systemrole: %d"
Srinivas Girigowdacb7b8b82019-04-10 14:27:47 -0700593 " and mlmstate: %d RSSI: %d from "QDF_MAC_ADDR_STR, subtype,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800594 session_entry->peSessionId, GET_LIM_SYSTEM_ROLE(session_entry),
595 session_entry->limMlmState,
Deepak Dhamdhere68929ec2015-08-05 15:16:35 -0700596 (uint) abs((int8_t) WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info)),
Srinivas Girigowda34fbba02019-04-08 12:07:44 -0700597 QDF_MAC_ADDR_ARRAY(hdr->sa));
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800598
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530599 beacon = qdf_mem_malloc(sizeof(tSchBeaconStruct));
Arif Hussainf5b6c412018-10-10 19:41:09 -0700600 if (!beacon)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800601 return;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800602
Rajeev Kumarbe5d7fd2016-04-15 14:35:12 -0700603 if (LIM_IS_AP_ROLE(session_entry)) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800604 /*
605 * Should not have received Re/Association
606 * Response frame on AP. Log error
607 */
Jeff Johnson4ceed382018-05-06 16:24:57 -0700608 pe_err("Should not received Re/Assoc Response in role: %d",
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800609 GET_LIM_SYSTEM_ROLE(session_entry));
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530610 qdf_mem_free(beacon);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800611 return;
612 }
Varun Reddy Yeturubbbbe232016-02-29 14:01:57 -0800613 if (lim_is_roam_synch_in_progress(session_entry)) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800614 hdr = (tpSirMacMgmtHdr) mac_ctx->roam.pReassocResp;
615 frame_len = mac_ctx->roam.reassocRespLen - SIR_MAC_HDR_LEN_3A;
616 } else {
Varun Reddy Yeturubbbbe232016-02-29 14:01:57 -0800617 hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info);
618 frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info);
619 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800620 if (((subtype == LIM_ASSOC) &&
621 (session_entry->limMlmState != eLIM_MLM_WT_ASSOC_RSP_STATE)) ||
622 ((subtype == LIM_REASSOC) &&
Varun Reddy Yeturubbbbe232016-02-29 14:01:57 -0800623 !lim_is_roam_synch_in_progress(session_entry) &&
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800624 ((session_entry->limMlmState != eLIM_MLM_WT_REASSOC_RSP_STATE)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800625 && (session_entry->limMlmState !=
626 eLIM_MLM_WT_FT_REASSOC_RSP_STATE)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800627 ))) {
628 /* Received unexpected Re/Association Response frame */
Jeff Johnson47d75242018-05-12 15:58:53 -0700629 pe_debug("Received Re/Assoc rsp in unexpected state: %d on session: %d",
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800630 session_entry->limMlmState, session_entry->peSessionId);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800631 if (!hdr->fc.retry) {
632 if (!(mac_ctx->lim.retry_packet_cnt & 0xf)) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530633 pe_err("recvd Re/Assoc rsp:not a retry frame");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800634 lim_print_mlm_state(mac_ctx, LOGE,
635 session_entry->limMlmState);
636 } else {
637 mac_ctx->lim.retry_packet_cnt++;
638 }
639 }
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530640 qdf_mem_free(beacon);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800641 return;
642 }
643 sir_copy_mac_addr(current_bssid, session_entry->bssId);
644 if (subtype == LIM_ASSOC) {
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530645 if (qdf_mem_cmp
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800646 (hdr->sa, current_bssid, sizeof(tSirMacAddr))) {
647 /*
648 * Received Association Response frame from an entity
649 * other than one to which request was initiated.
650 * Ignore this and wait until Assoc Failure Timeout
651 */
Srinivas Girigowdacb7b8b82019-04-10 14:27:47 -0700652 pe_warn("received AssocRsp from unexpected peer "QDF_MAC_ADDR_STR,
Srinivas Girigowda34fbba02019-04-08 12:07:44 -0700653 QDF_MAC_ADDR_ARRAY(hdr->sa));
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530654 qdf_mem_free(beacon);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800655 return;
656 }
657 } else {
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530658 if (qdf_mem_cmp
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800659 (hdr->sa, session_entry->limReAssocbssId,
660 sizeof(tSirMacAddr))) {
661 /*
662 * Received Reassociation Response frame from an entity
663 * other than one to which request was initiated.
664 * Ignore this and wait until Reassoc Failure Timeout.
665 */
Srinivas Girigowdacb7b8b82019-04-10 14:27:47 -0700666 pe_warn("received ReassocRsp from unexpected peer "QDF_MAC_ADDR_STR,
Srinivas Girigowda34fbba02019-04-08 12:07:44 -0700667 QDF_MAC_ADDR_ARRAY(hdr->sa));
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530668 qdf_mem_free(beacon);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800669 return;
670 }
671 }
672
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530673 assoc_rsp = qdf_mem_malloc(sizeof(*assoc_rsp));
Arif Hussainf5b6c412018-10-10 19:41:09 -0700674 if (!assoc_rsp) {
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530675 qdf_mem_free(beacon);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800676 return;
677 }
678 /* Get pointer to Re/Association Response frame body */
Varun Reddy Yeturubbbbe232016-02-29 14:01:57 -0800679 if (lim_is_roam_synch_in_progress(session_entry))
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800680 body = mac_ctx->roam.pReassocResp + SIR_MAC_HDR_LEN_3A;
681 else
Varun Reddy Yeturubbbbe232016-02-29 14:01:57 -0800682 body = WMA_GET_RX_MPDU_DATA(rx_pkt_info);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800683 /* parse Re/Association Response frame. */
Sridhar Selvaraj0d5d2c72017-08-17 17:30:01 +0530684 if (sir_convert_assoc_resp_frame2_struct(mac_ctx, session_entry, body,
Jeff Johnson0301ecb2018-06-29 09:36:23 -0700685 frame_len, assoc_rsp) == QDF_STATUS_E_FAILURE) {
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530686 qdf_mem_free(assoc_rsp);
Nishank Aggarwal47444142017-03-24 15:31:15 +0530687 pe_err("Parse error Assoc resp subtype: %d" "length: %d",
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800688 frame_len, subtype);
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530689 qdf_mem_free(beacon);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800690 return;
691 }
692
693 if (!assoc_rsp->suppRatesPresent) {
Sandeep Puligilla1f1e4002018-08-18 12:15:01 -0700694 pe_debug("assoc response does not have supported rate set");
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530695 qdf_mem_copy(&assoc_rsp->supportedRates,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800696 &session_entry->rateSet,
697 sizeof(tSirMacRateSet));
698 }
699
700 assoc_cnf.protStatusCode = assoc_rsp->statusCode;
Jeff Johnson8e9530b2019-03-18 13:41:42 -0700701 if (session_entry->assocRsp) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530702 pe_warn("session_entry->assocRsp is not NULL freeing it and setting NULL");
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530703 qdf_mem_free(session_entry->assocRsp);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800704 session_entry->assocRsp = NULL;
Sreelakshmi Konamki3b8ba612015-12-02 18:13:22 +0530705 session_entry->assocRspLen = 0;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800706 }
707
yeshwanth sriram guntukad716a412017-07-18 17:25:32 +0530708 if (frame_len) {
709 session_entry->assocRsp = qdf_mem_malloc(frame_len);
Arif Hussainf5b6c412018-10-10 19:41:09 -0700710 if (session_entry->assocRsp) {
yeshwanth sriram guntukad716a412017-07-18 17:25:32 +0530711 /*
712 * Store the Assoc response. This is sent
713 * to csr/hdd in join cnf response.
714 */
715 qdf_mem_copy(session_entry->assocRsp, body, frame_len);
716 session_entry->assocRspLen = frame_len;
717 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800718 }
719
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800720 lim_update_ric_data(mac_ctx, session_entry, assoc_rsp);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800721
722#ifdef WLAN_FEATURE_ROAM_OFFLOAD
723 roam_session =
724 &mac_ctx->roam.roamSession[sme_sessionid];
Pragaspathi Thilagaraj0bd369d2019-04-08 00:07:53 +0530725 if (assoc_rsp->sha384_ft_subelem.r0kh_id.present) {
726 roam_session->ftSmeContext.r0kh_id_len =
727 assoc_rsp->sha384_ft_subelem.r0kh_id.num_PMK_R0_ID;
728 qdf_mem_copy(roam_session->ftSmeContext.r0kh_id,
729 assoc_rsp->sha384_ft_subelem.r0kh_id.PMK_R0_ID,
730 roam_session->ftSmeContext.r0kh_id_len);
731 } else if (assoc_rsp->FTInfo.R0KH_ID.present) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800732 roam_session->ftSmeContext.r0kh_id_len =
733 assoc_rsp->FTInfo.R0KH_ID.num_PMK_R0_ID;
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530734 qdf_mem_copy(roam_session->ftSmeContext.r0kh_id,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800735 assoc_rsp->FTInfo.R0KH_ID.PMK_R0_ID,
736 roam_session->ftSmeContext.r0kh_id_len);
737 } else {
738 roam_session->ftSmeContext.r0kh_id_len = 0;
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530739 qdf_mem_zero(roam_session->ftSmeContext.r0kh_id,
Pragaspathi Thilagaraj0bd369d2019-04-08 00:07:53 +0530740 SIR_ROAM_R0KH_ID_MAX_LEN);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800741 }
742#endif
743
744#ifdef FEATURE_WLAN_ESE
745 lim_update_ese_tspec(mac_ctx, session_entry, assoc_rsp);
746#endif
747
748 if (assoc_rsp->capabilityInfo.ibss) {
749 /*
750 * Received Re/Association Response from peer
751 * with IBSS capability set.
752 * Ignore the frame and wait until Re/assoc
753 * failure timeout.
754 */
Nishank Aggarwal47444142017-03-24 15:31:15 +0530755 pe_err("received Re/AssocRsp frame with IBSS capability");
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530756 qdf_mem_free(assoc_rsp);
757 qdf_mem_free(beacon);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800758 return;
759 }
760
Wu Gao5c3d94b2019-01-17 21:15:54 +0800761 if (lim_get_capability_info(mac_ctx, &caps, session_entry)
Jeff Johnson0301ecb2018-06-29 09:36:23 -0700762 != QDF_STATUS_SUCCESS) {
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530763 qdf_mem_free(assoc_rsp);
764 qdf_mem_free(beacon);
Nishank Aggarwal47444142017-03-24 15:31:15 +0530765 pe_err("could not retrieve Capabilities");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800766 return;
767 }
768 lim_copy_u16((uint8_t *) &mac_capab, caps);
769
770 /* Stop Association failure timer */
771 if (subtype == LIM_ASSOC)
772 lim_deactivate_and_change_timer(mac_ctx, eLIM_ASSOC_FAIL_TIMER);
Varun Reddy Yeturu32de0e42016-04-15 14:25:59 +0530773 else
774 lim_stop_reassoc_retry_timer(mac_ctx);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800775
gaurank kathpaliaa3856b82019-05-15 13:20:28 +0530776 lim_handle_assoc_reject_status(mac_ctx, session_entry, assoc_rsp,
777 hdr->sa);
778
Abhishek Singhf3756fc2017-06-28 16:04:06 +0530779 if (eSIR_MAC_XS_FRAME_LOSS_POOR_CHANNEL_RSSI_STATUS ==
780 assoc_rsp->statusCode &&
gaurank kathpaliaa3856b82019-05-15 13:20:28 +0530781 assoc_rsp->rssi_assoc_rej.present) {
782 struct sir_rssi_disallow_lst ap_info = {{0}};
Abhishek Singhf3756fc2017-06-28 16:04:06 +0530783
gaurank kathpaliaa3856b82019-05-15 13:20:28 +0530784 ap_info.retry_delay = assoc_rsp->rssi_assoc_rej.retry_delay *
785 QDF_MC_TIMER_TO_MS_UNIT;
786 qdf_mem_copy(ap_info.bssid.bytes, hdr->sa, QDF_MAC_ADDR_SIZE);
787 ap_info.expected_rssi = assoc_rsp->rssi_assoc_rej.delta_rssi +
788 WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info);
gaurank kathpalia3ebc17b2019-05-29 10:25:09 +0530789 lim_add_bssid_to_reject_list(mac_ctx->pdev, &ap_info);
gaurank kathpaliaa3856b82019-05-15 13:20:28 +0530790 }
791 if (assoc_rsp->statusCode != eSIR_MAC_SUCCESS_STATUS) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800792 /*
793 *Re/Association response was received
794 * either with failure code.
795 */
Nishank Aggarwal47444142017-03-24 15:31:15 +0530796 pe_err("received Re/AssocRsp frame failure code: %d",
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800797 assoc_rsp->statusCode);
798 /*
799 * Need to update 'association failure' error counter
800 * along with STATUS CODE
801 * Return Assoc confirm to SME with received failure code
802 */
803 assoc_cnf.resultCode = eSIR_SME_ASSOC_REFUSED;
804 /* Delete Pre-auth context for the associated BSS */
805 if (lim_search_pre_auth_list(mac_ctx, hdr->sa))
806 lim_delete_pre_auth_node(mac_ctx, hdr->sa);
807 goto assocReject;
808 } else if ((assoc_rsp->aid & 0x3FFF) > 2007) {
809 /*
810 * Re/Association response was received
811 * with invalid AID value
812 */
Nishank Aggarwal47444142017-03-24 15:31:15 +0530813 pe_err("received Re/AssocRsp frame with invalid aid: %X",
814 assoc_rsp->aid);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800815 assoc_cnf.resultCode = eSIR_SME_INVALID_ASSOC_RSP_RXED;
816 assoc_cnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS;
817 /* Send advisory Disassociation frame to AP */
818 lim_send_disassoc_mgmt_frame(mac_ctx,
819 eSIR_MAC_UNSPEC_FAILURE_REASON,
820 hdr->sa, session_entry, false);
821 goto assocReject;
822 }
Sridhar Selvaraj0d5d2c72017-08-17 17:30:01 +0530823
824 /*
825 * If it is FILS connection, check is FILS params are matching
826 * with Authentication stage.
827 */
828 if (!lim_verify_fils_params_assoc_rsp(mac_ctx, session_entry,
829 assoc_rsp, &assoc_cnf)) {
830 pe_err("FILS params doesnot match");
831 assoc_cnf.resultCode = eSIR_SME_INVALID_ASSOC_RSP_RXED;
832 assoc_cnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS;
833 /* Send advisory Disassociation frame to AP */
834 lim_send_disassoc_mgmt_frame(mac_ctx,
835 eSIR_MAC_UNSPEC_FAILURE_REASON,
836 hdr->sa, session_entry, false);
837 goto assocReject;
838 }
839
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800840 /*
841 * Association Response received with success code
842 * Set the link state to POSTASSOC now that we have received
843 * assoc/reassoc response
844 * NOTE: for BTAMP case, it is being handled in
845 * lim_process_mlm_assoc_req
846 */
Rajeev Kumarbe5d7fd2016-04-15 14:35:12 -0700847 if (!lim_is_roam_synch_in_progress(session_entry)) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800848 if (lim_set_link_state
849 (mac_ctx, eSIR_LINK_POSTASSOC_STATE,
850 session_entry->bssId,
851 session_entry->selfMacAddr, NULL,
Jeff Johnson0301ecb2018-06-29 09:36:23 -0700852 NULL) != QDF_STATUS_SUCCESS) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530853 pe_err("Set link state to POSTASSOC failed");
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530854 qdf_mem_free(beacon);
855 qdf_mem_free(assoc_rsp);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800856 return;
857 }
858 }
yeshwanth sriram guntuka58bbcf82017-02-21 12:16:04 +0530859
860 if (assoc_rsp->QosMapSet.present)
861 qdf_mem_copy(&session_entry->QosMapSet,
Jeff Johnson7fb55e52019-02-06 11:28:12 -0800862 &assoc_rsp->QosMapSet,
863 sizeof(struct qos_map_set));
Srinivas Girigowdaeff16d92018-09-12 14:56:29 -0700864 else
Jeff Johnson7fb55e52019-02-06 11:28:12 -0800865 qdf_mem_zero(&session_entry->QosMapSet,
866 sizeof(struct qos_map_set));
yeshwanth sriram guntuka58bbcf82017-02-21 12:16:04 +0530867
868 if (assoc_rsp->obss_scanparams.present)
869 lim_update_obss_scanparams(session_entry,
870 &assoc_rsp->obss_scanparams);
871
Abhishek Singhdd2cb572017-08-11 11:10:19 +0530872 lim_diag_event_report(mac_ctx, WLAN_PE_DIAG_ROAM_ASSOC_COMP_EVENT,
Jeff Johnson0301ecb2018-06-29 09:36:23 -0700873 session_entry, assoc_rsp->statusCode ? QDF_STATUS_E_FAILURE :
874 QDF_STATUS_SUCCESS, assoc_rsp->statusCode);
Abhishek Singhdd2cb572017-08-11 11:10:19 +0530875
Yeshwanth Sriram Guntuka22ed8002019-05-07 15:08:09 +0530876 ap_nss = lim_get_nss_supported_by_ap(&assoc_rsp->VHTCaps,
877 &assoc_rsp->HTCaps);
878
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800879 if (subtype == LIM_REASSOC) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530880 pe_debug("Successfully Reassociated with BSS");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800881#ifdef FEATURE_WLAN_ESE
882 if (assoc_rsp->tsmPresent)
883 lim_update_ese_tsm(mac_ctx, session_entry, assoc_rsp);
884#endif
885 if (session_entry->pLimMlmJoinReq) {
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530886 qdf_mem_free(session_entry->pLimMlmJoinReq);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800887 session_entry->pLimMlmJoinReq = NULL;
888 }
889
890 session_entry->limAssocResponseData = (void *)assoc_rsp;
891 /*
892 * Store the ReAssocRsp Frame in DphTable
893 * to be used during processing DelSta and
894 * DelBss to send AddBss again
895 */
896 sta_ds =
897 dph_get_hash_entry(mac_ctx, DPH_STA_HASH_INDEX_PEER,
898 &session_entry->dph.dphHashTable);
899
900 if (!sta_ds) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530901 pe_err("could not get hash entry at DPH for");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800902 lim_print_mac_addr(mac_ctx, hdr->sa, LOGE);
903 assoc_cnf.resultCode =
904 eSIR_SME_INVALID_ASSOC_RSP_RXED;
905 assoc_cnf.protStatusCode =
906 eSIR_MAC_UNSPEC_FAILURE_STATUS;
907
908 /* Send advisory Disassociation frame to AP */
909 lim_send_disassoc_mgmt_frame(mac_ctx,
910 eSIR_MAC_UNSPEC_FAILURE_REASON, hdr->sa,
911 session_entry, false);
912 goto assocReject;
913 }
Yeshwanth Sriram Guntuka22ed8002019-05-07 15:08:09 +0530914
915 if (ap_nss < session_entry->nss) {
916 session_entry->nss = ap_nss;
917 lim_objmgr_update_vdev_nss(mac_ctx->psoc,
918 session_entry->smeSessionId,
919 ap_nss);
920 }
921
Varun Reddy Yeturud5939f82015-12-24 18:14:02 -0800922 if ((session_entry->limMlmState ==
923 eLIM_MLM_WT_FT_REASSOC_RSP_STATE) ||
Varun Reddy Yeturubbbbe232016-02-29 14:01:57 -0800924 lim_is_roam_synch_in_progress(session_entry)) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530925 pe_debug("Sending self sta");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800926 lim_update_assoc_sta_datas(mac_ctx, sta_ds, assoc_rsp,
927 session_entry);
yeshwanth sriram guntuka58bbcf82017-02-21 12:16:04 +0530928 lim_update_stads_ext_cap(mac_ctx, session_entry,
929 assoc_rsp, sta_ds);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800930 /* Store assigned AID for TIM processing */
931 session_entry->limAID = assoc_rsp->aid & 0x3FFF;
932 /* Downgrade the EDCA parameters if needed */
933 lim_set_active_edca_params(mac_ctx,
934 session_entry->gLimEdcaParams,
935 session_entry);
936 /* Send the active EDCA parameters to HAL */
Varun Reddy Yeturubbbbe232016-02-29 14:01:57 -0800937 if (!lim_is_roam_synch_in_progress(session_entry)) {
938 lim_send_edca_params(mac_ctx,
939 session_entry->gLimEdcaParamsActive,
Kiran Kumar Lokere27026ae2018-03-09 11:38:19 -0800940 sta_ds->bssId, false);
Varun Reddy Yeturubbbbe232016-02-29 14:01:57 -0800941 lim_add_ft_sta_self(mac_ctx,
942 (assoc_rsp->aid & 0x3FFF),
943 session_entry);
944 }
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530945 qdf_mem_free(beacon);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800946 return;
947 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800948
949 /*
950 * If we're re-associating to the same BSS,
951 * we don't want to invoke delete STA, delete
952 * BSS, as that would remove the already
953 * established TSPEC. Just go ahead and re-add
954 * the BSS, STA with new capability information.
955 * However, if we're re-associating to a different
956 * BSS, then follow thru with del STA, del BSS,
957 * add BSS, add STA.
958 */
959 if (sir_compare_mac_addr(session_entry->bssId,
960 session_entry->limReAssocbssId))
961 lim_handle_add_bss_in_re_assoc_context(mac_ctx, sta_ds,
962 session_entry);
963 else {
964 /*
965 * reset the uapsd mask settings since
966 * we're re-associating to new AP
967 */
968 session_entry->gUapsdPerAcDeliveryEnableMask = 0;
969 session_entry->gUapsdPerAcTriggerEnableMask = 0;
970
971 if (lim_cleanup_rx_path(mac_ctx, sta_ds, session_entry)
Jeff Johnson0301ecb2018-06-29 09:36:23 -0700972 != QDF_STATUS_SUCCESS) {
Nishank Aggarwal47444142017-03-24 15:31:15 +0530973 pe_err("Could not cleanup the rx path");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800974 goto assocReject;
975 }
976 }
Anurag Chouhan600c3a02016-03-01 10:33:54 +0530977 qdf_mem_free(beacon);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800978 return;
979 }
Srinivas Girigowdacb7b8b82019-04-10 14:27:47 -0700980 pe_debug("Successfully Associated with BSS " QDF_MAC_ADDR_STR,
Srinivas Girigowda34fbba02019-04-08 12:07:44 -0700981 QDF_MAC_ADDR_ARRAY(hdr->sa));
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800982#ifdef FEATURE_WLAN_ESE
983 if (session_entry->eseContext.tsm.tsmInfo.state)
984 session_entry->eseContext.tsm.tsmMetrics.RoamingCount = 0;
985#endif
986 /* Store assigned AID for TIM processing */
987 session_entry->limAID = assoc_rsp->aid & 0x3FFF;
988
989 /* STA entry was created during pre-assoc state. */
990 sta_ds = dph_get_hash_entry(mac_ctx, DPH_STA_HASH_INDEX_PEER,
991 &session_entry->dph.dphHashTable);
Jeff Johnson8e9530b2019-03-18 13:41:42 -0700992 if (!sta_ds) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800993 /* Could not add hash table entry */
Nishank Aggarwal47444142017-03-24 15:31:15 +0530994 pe_err("could not get hash entry at DPH");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800995 lim_print_mac_addr(mac_ctx, hdr->sa, LOGE);
996 assoc_cnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE;
997 assoc_cnf.protStatusCode = eSIR_SME_SUCCESS;
998 lim_post_sme_message(mac_ctx, LIM_MLM_ASSOC_CNF,
999 (uint32_t *) &assoc_cnf);
Anurag Chouhan600c3a02016-03-01 10:33:54 +05301000 qdf_mem_free(assoc_rsp);
1001 qdf_mem_free(beacon);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001002 return;
1003 }
1004 /* Delete Pre-auth context for the associated BSS */
1005 if (lim_search_pre_auth_list(mac_ctx, hdr->sa))
1006 lim_delete_pre_auth_node(mac_ctx, hdr->sa);
1007
Yeshwanth Sriram Guntuka22ed8002019-05-07 15:08:09 +05301008 if (ap_nss < session_entry->nss) {
1009 session_entry->nss = ap_nss;
1010 lim_objmgr_update_vdev_nss(mac_ctx->psoc,
1011 session_entry->smeSessionId,
1012 ap_nss);
1013 }
1014
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001015 lim_update_assoc_sta_datas(mac_ctx, sta_ds, assoc_rsp, session_entry);
1016 /*
1017 * Extract the AP capabilities from the beacon that
1018 * was received earlier
1019 */
1020 ie_len = lim_get_ielen_from_bss_description(
1021 &session_entry->pLimJoinReq->bssDescription);
1022 lim_extract_ap_capabilities(mac_ctx,
1023 (uint8_t *) session_entry->pLimJoinReq->bssDescription.ieFields,
1024 ie_len,
1025 beacon);
1026
Kiran Kumar Lokeref54b8552018-07-10 00:53:38 -07001027 if (lim_is_session_he_capable(session_entry)) {
Kiran Kumar Lokereb52cfc82018-10-08 21:54:38 -07001028 session_entry->mu_edca_present = assoc_rsp->mu_edca_present;
1029 if (session_entry->mu_edca_present) {
1030 pe_debug("Save MU EDCA params to session");
Srinivas Girigowda5b86fbd2019-03-21 14:54:14 -07001031 session_entry->ap_mu_edca_params[QCA_WLAN_AC_BE] =
Kiran Kumar Lokereb52cfc82018-10-08 21:54:38 -07001032 assoc_rsp->mu_edca.acbe;
Srinivas Girigowda5b86fbd2019-03-21 14:54:14 -07001033 session_entry->ap_mu_edca_params[QCA_WLAN_AC_BK] =
Kiran Kumar Lokereb52cfc82018-10-08 21:54:38 -07001034 assoc_rsp->mu_edca.acbk;
Srinivas Girigowda5b86fbd2019-03-21 14:54:14 -07001035 session_entry->ap_mu_edca_params[QCA_WLAN_AC_VI] =
Kiran Kumar Lokereb52cfc82018-10-08 21:54:38 -07001036 assoc_rsp->mu_edca.acvi;
Srinivas Girigowda5b86fbd2019-03-21 14:54:14 -07001037 session_entry->ap_mu_edca_params[QCA_WLAN_AC_VO] =
Kiran Kumar Lokereb52cfc82018-10-08 21:54:38 -07001038 assoc_rsp->mu_edca.acvo;
Kiran Kumar Lokeref54b8552018-07-10 00:53:38 -07001039 }
Kiran Kumar Lokere27026ae2018-03-09 11:38:19 -08001040
1041 }
1042
Selvaraj, Sridhare01e0732016-09-13 12:45:22 +05301043 if (beacon->VHTCaps.present)
1044 sta_ds->parsed_ies.vht_caps = beacon->VHTCaps;
1045 if (beacon->HTCaps.present)
1046 sta_ds->parsed_ies.ht_caps = beacon->HTCaps;
1047 if (beacon->hs20vendor_ie.present)
1048 sta_ds->parsed_ies.hs20vendor_ie = beacon->hs20vendor_ie;
1049 if (beacon->HTInfo.present)
1050 sta_ds->parsed_ies.ht_operation = beacon->HTInfo;
1051 if (beacon->VHTOperation.present)
1052 sta_ds->parsed_ies.vht_operation = beacon->VHTOperation;
Anurag Chouhan5de8d172016-07-13 14:44:28 +05301053
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001054 if (mac_ctx->lim.gLimProtectionControl !=
Pragaspathi Thilagaraj1ee76002018-09-18 21:38:51 +05301055 MLME_FORCE_POLICY_PROTECTION_DISABLE)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001056 lim_decide_sta_protection_on_assoc(mac_ctx, beacon,
Pragaspathi Thilagaraj1ee76002018-09-18 21:38:51 +05301057 session_entry);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001058
1059 if (beacon->erpPresent) {
1060 if (beacon->erpIEInfo.barkerPreambleMode)
1061 session_entry->beaconParams.fShortPreamble = false;
1062 else
1063 session_entry->beaconParams.fShortPreamble = true;
1064 }
1065
1066#ifdef FEATURE_WLAN_DIAG_SUPPORT
1067 lim_diag_event_report(mac_ctx, WLAN_PE_DIAG_CONNECTED, session_entry,
Jeff Johnson0301ecb2018-06-29 09:36:23 -07001068 QDF_STATUS_SUCCESS, QDF_STATUS_SUCCESS);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001069#endif
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001070 lim_update_stads_ext_cap(mac_ctx, session_entry, assoc_rsp, sta_ds);
1071 /* Update the BSS Entry, this entry was added during preassoc. */
Jeff Johnson0301ecb2018-06-29 09:36:23 -07001072 if (QDF_STATUS_SUCCESS == lim_sta_send_add_bss(mac_ctx, assoc_rsp,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001073 beacon,
1074 &session_entry->pLimJoinReq->bssDescription, true,
1075 session_entry)) {
Anurag Chouhan600c3a02016-03-01 10:33:54 +05301076 qdf_mem_free(assoc_rsp);
1077 qdf_mem_free(beacon);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001078 return;
1079 } else {
Nishank Aggarwal47444142017-03-24 15:31:15 +05301080 pe_err("could not update the bss entry");
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001081 assoc_cnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE;
1082 assoc_cnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS;
1083 }
1084
1085assocReject:
1086 if ((subtype == LIM_ASSOC)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001087 || ((subtype == LIM_REASSOC)
1088 && (session_entry->limMlmState ==
Deepak Dhamdhere262d95a2016-01-10 16:36:53 -08001089 eLIM_MLM_WT_FT_REASSOC_RSP_STATE))) {
Nishank Aggarwal47444142017-03-24 15:31:15 +05301090 pe_err("Assoc Rejected by the peer mlmestate: %d sessionid: %d Reason: %d MACADDR:"
Srinivas Girigowdacb7b8b82019-04-10 14:27:47 -07001091 QDF_MAC_ADDR_STR,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001092 session_entry->limMlmState,
1093 session_entry->peSessionId,
Srinivas Girigowda34fbba02019-04-08 12:07:44 -07001094 assoc_cnf.resultCode, QDF_MAC_ADDR_ARRAY(hdr->sa));
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001095 session_entry->limMlmState = eLIM_MLM_IDLE_STATE;
1096 MTRACE(mac_trace(mac_ctx, TRACE_CODE_MLM_STATE,
1097 session_entry->peSessionId,
1098 session_entry->limMlmState));
1099 if (session_entry->pLimMlmJoinReq) {
Anurag Chouhan600c3a02016-03-01 10:33:54 +05301100 qdf_mem_free(session_entry->pLimMlmJoinReq);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001101 session_entry->pLimMlmJoinReq = NULL;
1102 }
1103 if (subtype == LIM_ASSOC) {
1104 lim_post_sme_message(mac_ctx, LIM_MLM_ASSOC_CNF,
1105 (uint32_t *) &assoc_cnf);
Deepak Dhamdhere262d95a2016-01-10 16:36:53 -08001106 } else {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001107 assoc_cnf.resultCode = eSIR_SME_FT_REASSOC_FAILURE;
1108 lim_post_sme_message(mac_ctx, LIM_MLM_REASSOC_CNF,
1109 (uint32_t *)&assoc_cnf);
1110 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001111 } else {
1112 lim_restore_pre_reassoc_state(mac_ctx,
1113 eSIR_SME_REASSOC_REFUSED,
1114 assoc_cnf.protStatusCode,
1115 session_entry);
1116 }
1117
Anurag Chouhan600c3a02016-03-01 10:33:54 +05301118 qdf_mem_free(beacon);
Pragaspathi Thilagaraj0bd369d2019-04-08 00:07:53 +05301119 qdf_mem_free(assoc_rsp->sha384_ft_subelem.gtk);
1120 qdf_mem_free(assoc_rsp->sha384_ft_subelem.igtk);
Anurag Chouhan600c3a02016-03-01 10:33:54 +05301121 qdf_mem_free(assoc_rsp);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001122 return;
1123}