Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1 | /* |
Wu Gao | 5c3d94b | 2019-01-17 21:15:54 +0800 | [diff] [blame] | 2 | * Copyright (c) 2011-2019 The Linux Foundation. All rights reserved. |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 3 | * |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 4 | * 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 20 | * |
| 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 34 | #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 Selvaraj | 0d5d2c7 | 2017-08-17 17:30:01 +0530 | [diff] [blame] | 44 | #include "lim_process_fils.h" |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 45 | |
Jeff Johnson | 9320c1e | 2018-12-02 13:09:20 -0800 | [diff] [blame] | 46 | extern QDF_STATUS sch_beacon_edca_process(struct mac_context *mac, |
Jeff Johnson | b5c1333 | 2018-12-03 09:54:51 -0800 | [diff] [blame] | 47 | tSirMacEdcaParamSetIE *edca, struct pe_session *pe_session); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 48 | |
| 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, Vidyullatha | e306281 | 2015-05-22 17:28:57 +0530 | [diff] [blame] | 54 | * @session_entry : PE session Entry |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 55 | * |
| 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 Johnson | 9320c1e | 2018-12-02 13:09:20 -0800 | [diff] [blame] | 62 | static void lim_update_stads_htcap(struct mac_context *mac_ctx, |
Kanchanapally, Vidyullatha | e306281 | 2015-05-22 17:28:57 +0530 | [diff] [blame] | 63 | tpDphHashNode sta_ds, tpSirAssocRsp assoc_rsp, |
Jeff Johnson | 82e779e | 2018-11-19 06:52:11 -0800 | [diff] [blame] | 64 | struct pe_session *session_entry) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 65 | { |
| 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, Vidyullatha | e306281 | 2015-05-22 17:28:57 +0530 | [diff] [blame] | 74 | 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 82 | 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 91 | 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, Vidyullatha | e306281 | 2015-05-22 17:28:57 +0530 | [diff] [blame] | 103 | |
| 104 | /* Check if we have support for gShortGI20Mhz and |
| 105 | * gShortGI40Mhz from ini file |
| 106 | */ |
Jeff Johnson | be119e6 | 2019-02-02 12:30:26 -0800 | [diff] [blame] | 107 | if (session_entry->ht_config.ht_sgi20) |
Kanchanapally, Vidyullatha | e306281 | 2015-05-22 17:28:57 +0530 | [diff] [blame] | 108 | sta_ds->htShortGI20Mhz = |
Sandeep Puligilla | 607f34a | 2016-05-25 14:37:47 -0700 | [diff] [blame] | 109 | (uint8_t)assoc_rsp->HTCaps.shortGI20MHz; |
| 110 | else |
| 111 | sta_ds->htShortGI20Mhz = false; |
Kanchanapally, Vidyullatha | e306281 | 2015-05-22 17:28:57 +0530 | [diff] [blame] | 112 | |
Jeff Johnson | be119e6 | 2019-02-02 12:30:26 -0800 | [diff] [blame] | 113 | if (session_entry->ht_config.ht_sgi40) |
Kanchanapally, Vidyullatha | e306281 | 2015-05-22 17:28:57 +0530 | [diff] [blame] | 114 | sta_ds->htShortGI40Mhz = |
Sandeep Puligilla | 607f34a | 2016-05-25 14:37:47 -0700 | [diff] [blame] | 115 | (uint8_t)assoc_rsp->HTCaps.shortGI40MHz; |
| 116 | else |
| 117 | sta_ds->htShortGI40Mhz = false; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 118 | } |
| 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 Johnson | 9320c1e | 2018-12-02 13:09:20 -0800 | [diff] [blame] | 133 | void lim_update_assoc_sta_datas(struct mac_context *mac_ctx, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 134 | tpDphHashNode sta_ds, tpSirAssocRsp assoc_rsp, |
Jeff Johnson | 82e779e | 2018-11-19 06:52:11 -0800 | [diff] [blame] | 135 | struct pe_session *session_entry) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 136 | { |
| 137 | uint32_t phy_mode; |
| 138 | bool qos_mode; |
| 139 | tDot11fIEVHTCaps *vht_caps = NULL; |
Naveen Rawat | d8feac1 | 2017-09-08 15:08:39 -0700 | [diff] [blame] | 140 | tDot11fIEhe_cap *he_cap = NULL; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 141 | |
| 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 Johnson | 118a4a0 | 2018-05-06 00:14:15 -0700 | [diff] [blame] | 152 | /* Update HT Capabilities only when the self mode supports HT */ |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 153 | if (IS_DOT11_MODE_HT(session_entry->dot11mode)) |
Kanchanapally, Vidyullatha | e306281 | 2015-05-22 17:28:57 +0530 | [diff] [blame] | 154 | lim_update_stads_htcap(mac_ctx, sta_ds, assoc_rsp, |
| 155 | session_entry); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 156 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 157 | if (assoc_rsp->VHTCaps.present) |
| 158 | vht_caps = &assoc_rsp->VHTCaps; |
Kapil Gupta | 4b2efbb | 2016-10-03 13:07:20 +0530 | [diff] [blame] | 159 | else if (assoc_rsp->vendor_vht_ie.VHTCaps.present) |
| 160 | vht_caps = &assoc_rsp->vendor_vht_ie.VHTCaps; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 161 | |
| 162 | if (IS_DOT11_MODE_VHT(session_entry->dot11mode)) { |
Jeff Johnson | 8e9530b | 2019-03-18 13:41:42 -0700 | [diff] [blame] | 163 | if ((vht_caps) && vht_caps->present) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 164 | 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 Natarajan | d1cd56e | 2016-09-30 08:43:03 -0700 | [diff] [blame] | 183 | |
| 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 Rawat | d8feac1 | 2017-09-08 15:08:39 -0700 | [diff] [blame] | 188 | he_cap = &assoc_rsp->he_cap; |
Krishna Kumaar Natarajan | d1cd56e | 2016-09-30 08:43:03 -0700 | [diff] [blame] | 189 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 190 | if (lim_populate_peer_rate_set(mac_ctx, &sta_ds->supportedRates, |
| 191 | assoc_rsp->HTCaps.supportedMCSSet, |
| 192 | false, session_entry, |
Jeff Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 193 | vht_caps, he_cap) != QDF_STATUS_SUCCESS) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 194 | pe_err("could not get rateset and extended rate set"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 195 | return; |
| 196 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 197 | sta_ds->vhtSupportedRxNss = |
| 198 | ((sta_ds->supportedRates.vhtRxMCSMap & MCSMAPMASK2x2) |
| 199 | == MCSMAPMASK2x2) ? 1 : 2; |
Krishna Kumaar Natarajan | 0103ef8 | 2017-02-17 18:15:56 -0800 | [diff] [blame] | 200 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 201 | /* 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 Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 213 | QDF_STATUS status; |
Srinivas Girigowda | 4d65ebe | 2017-10-13 21:41:42 -0700 | [diff] [blame] | 214 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 215 | status = |
| 216 | sch_beacon_edca_process(mac_ctx, |
| 217 | &assoc_rsp->edca, session_entry); |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 218 | pe_debug("Edca set update based on AssocRsp: status %d", |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 219 | status); |
Jeff Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 220 | if (status != QDF_STATUS_SUCCESS) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 221 | pe_err("Edca error in AssocResp"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 222 | } 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 Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 233 | QDF_STATUS status; |
Srinivas Girigowda | 4d65ebe | 2017-10-13 21:41:42 -0700 | [diff] [blame] | 234 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 235 | status = sch_beacon_edca_process(mac_ctx, &assoc_rsp->edca, |
| 236 | session_entry); |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 237 | pe_debug("WME Edca set update based on AssocRsp: status %d", |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 238 | status); |
| 239 | |
Jeff Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 240 | if (status != QDF_STATUS_SUCCESS) |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 241 | pe_err("WME Edca error in AssocResp - ignoring"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 242 | |
| 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 275 | * 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 Johnson | 9320c1e | 2018-12-02 13:09:20 -0800 | [diff] [blame] | 285 | static void lim_update_ric_data(struct mac_context *mac_ctx, |
Jeff Johnson | 82e779e | 2018-11-19 06:52:11 -0800 | [diff] [blame] | 286 | struct pe_session *session_entry, tpSirAssocRsp assoc_rsp) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 287 | { |
Jeff Johnson | 8e9530b | 2019-03-18 13:41:42 -0700 | [diff] [blame] | 288 | if (session_entry->ricData) { |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 289 | qdf_mem_free(session_entry->ricData); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 290 | session_entry->ricData = NULL; |
Sreelakshmi Konamki | 3b8ba61 | 2015-12-02 18:13:22 +0530 | [diff] [blame] | 291 | session_entry->RICDataLen = 0; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 292 | } |
| 293 | if (assoc_rsp->ricPresent) { |
| 294 | session_entry->RICDataLen = |
| 295 | assoc_rsp->num_RICData * sizeof(tDot11fIERICDataDesc); |
Varun Reddy Yeturu | 61ce89c | 2015-11-01 07:57:39 -0800 | [diff] [blame] | 296 | if (session_entry->RICDataLen) { |
| 297 | session_entry->ricData = |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 298 | qdf_mem_malloc(session_entry->RICDataLen); |
Arif Hussain | f5b6c41 | 2018-10-10 19:41:09 -0700 | [diff] [blame] | 299 | if (!session_entry->ricData) |
Varun Reddy Yeturu | 61ce89c | 2015-11-01 07:57:39 -0800 | [diff] [blame] | 300 | session_entry->RICDataLen = 0; |
Arif Hussain | f5b6c41 | 2018-10-10 19:41:09 -0700 | [diff] [blame] | 301 | else |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 302 | qdf_mem_copy(session_entry->ricData, |
Varun Reddy Yeturu | 61ce89c | 2015-11-01 07:57:39 -0800 | [diff] [blame] | 303 | &assoc_rsp->RICData[0], |
| 304 | session_entry->RICDataLen); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 305 | } else { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 306 | pe_err("RIC data not present"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 307 | } |
| 308 | } else { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 309 | pe_debug("Ric is not present"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 310 | session_entry->RICDataLen = 0; |
| 311 | session_entry->ricData = NULL; |
| 312 | } |
| 313 | return; |
| 314 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 315 | |
| 316 | #ifdef FEATURE_WLAN_ESE |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 317 | /** |
| 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 Johnson | 9320c1e | 2018-12-02 13:09:20 -0800 | [diff] [blame] | 328 | static void lim_update_ese_tspec(struct mac_context *mac_ctx, |
Jeff Johnson | 82e779e | 2018-11-19 06:52:11 -0800 | [diff] [blame] | 329 | struct pe_session *session_entry, tpSirAssocRsp assoc_rsp) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 330 | { |
Jeff Johnson | 8e9530b | 2019-03-18 13:41:42 -0700 | [diff] [blame] | 331 | if (session_entry->tspecIes) { |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 332 | qdf_mem_free(session_entry->tspecIes); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 333 | session_entry->tspecIes = NULL; |
Sreelakshmi Konamki | 3b8ba61 | 2015-12-02 18:13:22 +0530 | [diff] [blame] | 334 | session_entry->tspecLen = 0; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 335 | } |
| 336 | if (assoc_rsp->tspecPresent) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 337 | pe_debug("Tspec EID present in assoc rsp"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 338 | session_entry->tspecLen = |
| 339 | assoc_rsp->num_tspecs * sizeof(tDot11fIEWMMTSPEC); |
Varun Reddy Yeturu | 61ce89c | 2015-11-01 07:57:39 -0800 | [diff] [blame] | 340 | if (session_entry->tspecLen) { |
| 341 | session_entry->tspecIes = |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 342 | qdf_mem_malloc(session_entry->tspecLen); |
Arif Hussain | f5b6c41 | 2018-10-10 19:41:09 -0700 | [diff] [blame] | 343 | if (!session_entry->tspecIes) |
Varun Reddy Yeturu | 61ce89c | 2015-11-01 07:57:39 -0800 | [diff] [blame] | 344 | session_entry->tspecLen = 0; |
Arif Hussain | f5b6c41 | 2018-10-10 19:41:09 -0700 | [diff] [blame] | 345 | else |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 346 | qdf_mem_copy(session_entry->tspecIes, |
Varun Reddy Yeturu | 61ce89c | 2015-11-01 07:57:39 -0800 | [diff] [blame] | 347 | &assoc_rsp->TSPECInfo[0], |
| 348 | session_entry->tspecLen); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 349 | } else { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 350 | pe_err("TSPEC has Zero length"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 351 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 352 | } else { |
| 353 | session_entry->tspecLen = 0; |
| 354 | session_entry->tspecIes = NULL; |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 355 | pe_debug("Tspec EID *NOT* present in assoc rsp"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 356 | } |
| 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 Johnson | 9320c1e | 2018-12-02 13:09:20 -0800 | [diff] [blame] | 372 | static void lim_update_ese_tsm(struct mac_context *mac_ctx, |
Jeff Johnson | 82e779e | 2018-11-19 06:52:11 -0800 | [diff] [blame] | 373 | struct pe_session *session_entry, tpSirAssocRsp assoc_rsp) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 374 | { |
| 375 | uint8_t cnt = 0; |
| 376 | tpEseTSMContext tsm_ctx; |
| 377 | |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 378 | pe_debug("TSM IE Present in Reassoc Rsp"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 379 | /* |
| 380 | * Start the TSM timer only if the TSPEC |
| 381 | * Ie is present in the reassoc rsp |
| 382 | */ |
| 383 | if (!assoc_rsp->tspecPresent) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 384 | pe_err("TSM present but TSPEC IE not present"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 385 | 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 Girigowda | 5b86fbd | 2019-03-21 14:54:14 -0700 | [diff] [blame] | 391 | QCA_WLAN_AC_VO) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 392 | tsm_ctx->tid = |
| 393 | assoc_rsp->TSPECInfo[cnt].user_priority; |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 394 | qdf_mem_copy(&tsm_ctx->tsmInfo, |
Jeff Johnson | 4f34052 | 2019-02-02 22:02:52 -0800 | [diff] [blame] | 395 | &assoc_rsp->tsmIE, sizeof(struct ese_tsm_ie)); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 396 | 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 400 | 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 Johnson | 9320c1e | 2018-12-02 13:09:20 -0800 | [diff] [blame] | 419 | static void lim_update_stads_ext_cap(struct mac_context *mac_ctx, |
Jeff Johnson | 82e779e | 2018-11-19 06:52:11 -0800 | [diff] [blame] | 420 | struct pe_session *session_entry, tpSirAssocRsp assoc_rsp, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 421 | tpDphHashNode sta_ds) |
| 422 | { |
| 423 | struct s_ext_cap *ext_cap; |
Srinivas Girigowda | 4d65ebe | 2017-10-13 21:41:42 -0700 | [diff] [blame] | 424 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 425 | 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 Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 431 | pe_debug("ExtCap not present"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 432 | 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 Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 441 | pe_debug("ExtCap: tdls_prohibited: %d tdls_chan_swit_prohibited: %d", |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 442 | ext_cap->tdls_prohibited, |
| 443 | ext_cap->tdls_chan_swit_prohibited); |
| 444 | #endif |
Varun Reddy Yeturu | 4f849e5 | 2018-06-15 18:08:37 -0700 | [diff] [blame] | 445 | lim_set_peer_twt_cap(session_entry, ext_cap); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 446 | } |
| 447 | |
| 448 | /** |
Varun Reddy Yeturu | 32de0e4 | 2016-04-15 14:25:59 +0530 | [diff] [blame] | 449 | * 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 Johnson | 9320c1e | 2018-12-02 13:09:20 -0800 | [diff] [blame] | 456 | static void lim_stop_reassoc_retry_timer(struct mac_context *mac_ctx) |
Varun Reddy Yeturu | 32de0e4 | 2016-04-15 14:25:59 +0530 | [diff] [blame] | 457 | { |
| 458 | mac_ctx->lim.reAssocRetryAttempt = 0; |
Jeff Johnson | 8e9530b | 2019-03-18 13:41:42 -0700 | [diff] [blame] | 459 | if ((mac_ctx->lim.pe_session) |
Varun Reddy Yeturu | 32de0e4 | 2016-04-15 14:25:59 +0530 | [diff] [blame] | 460 | && (NULL != |
Jeff Johnson | b5c1333 | 2018-12-03 09:54:51 -0800 | [diff] [blame] | 461 | mac_ctx->lim.pe_session->pLimMlmReassocRetryReq)) { |
Varun Reddy Yeturu | 32de0e4 | 2016-04-15 14:25:59 +0530 | [diff] [blame] | 462 | qdf_mem_free( |
Jeff Johnson | b5c1333 | 2018-12-03 09:54:51 -0800 | [diff] [blame] | 463 | mac_ctx->lim.pe_session->pLimMlmReassocRetryReq); |
| 464 | mac_ctx->lim.pe_session->pLimMlmReassocRetryReq = NULL; |
Varun Reddy Yeturu | 32de0e4 | 2016-04-15 14:25:59 +0530 | [diff] [blame] | 465 | } |
| 466 | lim_deactivate_and_change_timer(mac_ctx, eLIM_REASSOC_FAIL_TIMER); |
| 467 | } |
| 468 | |
gaurank kathpalia | a3856b8 | 2019-05-15 13:20:28 +0530 | [diff] [blame] | 469 | #ifdef WLAN_FEATURE_11W |
| 470 | static void |
| 471 | lim_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 kathpalia | 3ebc17b | 2019-05-29 10:25:09 +0530 | [diff] [blame^] | 493 | qdf_mem_copy(ap_info.bssid.bytes, source_addr, QDF_MAC_ADDR_SIZE); |
gaurank kathpalia | a3856b8 | 2019-05-15 13:20:28 +0530 | [diff] [blame] | 494 | ap_info.expected_rssi = LIM_MIN_RSSI; |
gaurank kathpalia | 3ebc17b | 2019-05-29 10:25:09 +0530 | [diff] [blame^] | 495 | lim_add_bssid_to_reject_list(mac_ctx->pdev, &ap_info); |
gaurank kathpalia | a3856b8 | 2019-05-15 13:20:28 +0530 | [diff] [blame] | 496 | |
| 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 kathpalia | a3856b8 | 2019-05-15 13:20:28 +0530 | [diff] [blame] | 499 | } |
| 500 | #else |
| 501 | static void |
| 502 | lim_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 Yeturu | 32de0e4 | 2016-04-15 14:25:59 +0530 | [diff] [blame] | 510 | /** |
Yeshwanth Sriram Guntuka | 22ed800 | 2019-05-07 15:08:09 +0530 | [diff] [blame] | 511 | * 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 | */ |
| 517 | static 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 544 | * 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 | |
| 556 | void |
Jeff Johnson | 9320c1e | 2018-12-02 13:09:20 -0800 | [diff] [blame] | 557 | lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, |
Jeff Johnson | 82e779e | 2018-11-19 06:52:11 -0800 | [diff] [blame] | 558 | uint8_t *rx_pkt_info, uint8_t subtype, struct pe_session *session_entry) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 559 | { |
| 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 kathpalia | 14e2f91 | 2017-08-31 14:51:45 +0530 | [diff] [blame] | 572 | struct csr_roam_session *roam_session; |
Varun Reddy Yeturu | bbbbe23 | 2016-02-29 14:01:57 -0800 | [diff] [blame] | 573 | #endif |
Yeshwanth Sriram Guntuka | 22ed800 | 2019-05-07 15:08:09 +0530 | [diff] [blame] | 574 | uint8_t ap_nss; |
| 575 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 576 | /* Initialize status code to success. */ |
Varun Reddy Yeturu | bbbbe23 | 2016-02-29 14:01:57 -0800 | [diff] [blame] | 577 | if (lim_is_roam_synch_in_progress(session_entry)) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 578 | hdr = (tpSirMacMgmtHdr) mac_ctx->roam.pReassocResp; |
| 579 | else |
Varun Reddy Yeturu | bbbbe23 | 2016-02-29 14:01:57 -0800 | [diff] [blame] | 580 | hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 581 | #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 Johnson | 8e9530b | 2019-03-18 13:41:42 -0700 | [diff] [blame] | 587 | if (!hdr) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 588 | pe_err("LFR3: Reassoc response packet header is NULL"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 589 | return; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 590 | } |
| 591 | |
Abhinav Kumar | 50d4dc7 | 2018-06-15 16:35:50 +0530 | [diff] [blame] | 592 | pe_debug("received Re/Assoc: %d resp on sessionid: %d systemrole: %d" |
Srinivas Girigowda | cb7b8b8 | 2019-04-10 14:27:47 -0700 | [diff] [blame] | 593 | " and mlmstate: %d RSSI: %d from "QDF_MAC_ADDR_STR, subtype, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 594 | session_entry->peSessionId, GET_LIM_SYSTEM_ROLE(session_entry), |
| 595 | session_entry->limMlmState, |
Deepak Dhamdhere | 68929ec | 2015-08-05 15:16:35 -0700 | [diff] [blame] | 596 | (uint) abs((int8_t) WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info)), |
Srinivas Girigowda | 34fbba0 | 2019-04-08 12:07:44 -0700 | [diff] [blame] | 597 | QDF_MAC_ADDR_ARRAY(hdr->sa)); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 598 | |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 599 | beacon = qdf_mem_malloc(sizeof(tSchBeaconStruct)); |
Arif Hussain | f5b6c41 | 2018-10-10 19:41:09 -0700 | [diff] [blame] | 600 | if (!beacon) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 601 | return; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 602 | |
Rajeev Kumar | be5d7fd | 2016-04-15 14:35:12 -0700 | [diff] [blame] | 603 | if (LIM_IS_AP_ROLE(session_entry)) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 604 | /* |
| 605 | * Should not have received Re/Association |
| 606 | * Response frame on AP. Log error |
| 607 | */ |
Jeff Johnson | 4ceed38 | 2018-05-06 16:24:57 -0700 | [diff] [blame] | 608 | pe_err("Should not received Re/Assoc Response in role: %d", |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 609 | GET_LIM_SYSTEM_ROLE(session_entry)); |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 610 | qdf_mem_free(beacon); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 611 | return; |
| 612 | } |
Varun Reddy Yeturu | bbbbe23 | 2016-02-29 14:01:57 -0800 | [diff] [blame] | 613 | if (lim_is_roam_synch_in_progress(session_entry)) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 614 | hdr = (tpSirMacMgmtHdr) mac_ctx->roam.pReassocResp; |
| 615 | frame_len = mac_ctx->roam.reassocRespLen - SIR_MAC_HDR_LEN_3A; |
| 616 | } else { |
Varun Reddy Yeturu | bbbbe23 | 2016-02-29 14:01:57 -0800 | [diff] [blame] | 617 | hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info); |
| 618 | frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info); |
| 619 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 620 | if (((subtype == LIM_ASSOC) && |
| 621 | (session_entry->limMlmState != eLIM_MLM_WT_ASSOC_RSP_STATE)) || |
| 622 | ((subtype == LIM_REASSOC) && |
Varun Reddy Yeturu | bbbbe23 | 2016-02-29 14:01:57 -0800 | [diff] [blame] | 623 | !lim_is_roam_synch_in_progress(session_entry) && |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 624 | ((session_entry->limMlmState != eLIM_MLM_WT_REASSOC_RSP_STATE) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 625 | && (session_entry->limMlmState != |
| 626 | eLIM_MLM_WT_FT_REASSOC_RSP_STATE) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 627 | ))) { |
| 628 | /* Received unexpected Re/Association Response frame */ |
Jeff Johnson | 47d7524 | 2018-05-12 15:58:53 -0700 | [diff] [blame] | 629 | pe_debug("Received Re/Assoc rsp in unexpected state: %d on session: %d", |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 630 | session_entry->limMlmState, session_entry->peSessionId); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 631 | if (!hdr->fc.retry) { |
| 632 | if (!(mac_ctx->lim.retry_packet_cnt & 0xf)) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 633 | pe_err("recvd Re/Assoc rsp:not a retry frame"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 634 | lim_print_mlm_state(mac_ctx, LOGE, |
| 635 | session_entry->limMlmState); |
| 636 | } else { |
| 637 | mac_ctx->lim.retry_packet_cnt++; |
| 638 | } |
| 639 | } |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 640 | qdf_mem_free(beacon); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 641 | return; |
| 642 | } |
| 643 | sir_copy_mac_addr(current_bssid, session_entry->bssId); |
| 644 | if (subtype == LIM_ASSOC) { |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 645 | if (qdf_mem_cmp |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 646 | (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 Girigowda | cb7b8b8 | 2019-04-10 14:27:47 -0700 | [diff] [blame] | 652 | pe_warn("received AssocRsp from unexpected peer "QDF_MAC_ADDR_STR, |
Srinivas Girigowda | 34fbba0 | 2019-04-08 12:07:44 -0700 | [diff] [blame] | 653 | QDF_MAC_ADDR_ARRAY(hdr->sa)); |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 654 | qdf_mem_free(beacon); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 655 | return; |
| 656 | } |
| 657 | } else { |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 658 | if (qdf_mem_cmp |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 659 | (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 Girigowda | cb7b8b8 | 2019-04-10 14:27:47 -0700 | [diff] [blame] | 666 | pe_warn("received ReassocRsp from unexpected peer "QDF_MAC_ADDR_STR, |
Srinivas Girigowda | 34fbba0 | 2019-04-08 12:07:44 -0700 | [diff] [blame] | 667 | QDF_MAC_ADDR_ARRAY(hdr->sa)); |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 668 | qdf_mem_free(beacon); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 669 | return; |
| 670 | } |
| 671 | } |
| 672 | |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 673 | assoc_rsp = qdf_mem_malloc(sizeof(*assoc_rsp)); |
Arif Hussain | f5b6c41 | 2018-10-10 19:41:09 -0700 | [diff] [blame] | 674 | if (!assoc_rsp) { |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 675 | qdf_mem_free(beacon); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 676 | return; |
| 677 | } |
| 678 | /* Get pointer to Re/Association Response frame body */ |
Varun Reddy Yeturu | bbbbe23 | 2016-02-29 14:01:57 -0800 | [diff] [blame] | 679 | if (lim_is_roam_synch_in_progress(session_entry)) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 680 | body = mac_ctx->roam.pReassocResp + SIR_MAC_HDR_LEN_3A; |
| 681 | else |
Varun Reddy Yeturu | bbbbe23 | 2016-02-29 14:01:57 -0800 | [diff] [blame] | 682 | body = WMA_GET_RX_MPDU_DATA(rx_pkt_info); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 683 | /* parse Re/Association Response frame. */ |
Sridhar Selvaraj | 0d5d2c7 | 2017-08-17 17:30:01 +0530 | [diff] [blame] | 684 | if (sir_convert_assoc_resp_frame2_struct(mac_ctx, session_entry, body, |
Jeff Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 685 | frame_len, assoc_rsp) == QDF_STATUS_E_FAILURE) { |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 686 | qdf_mem_free(assoc_rsp); |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 687 | pe_err("Parse error Assoc resp subtype: %d" "length: %d", |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 688 | frame_len, subtype); |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 689 | qdf_mem_free(beacon); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 690 | return; |
| 691 | } |
| 692 | |
| 693 | if (!assoc_rsp->suppRatesPresent) { |
Sandeep Puligilla | 1f1e400 | 2018-08-18 12:15:01 -0700 | [diff] [blame] | 694 | pe_debug("assoc response does not have supported rate set"); |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 695 | qdf_mem_copy(&assoc_rsp->supportedRates, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 696 | &session_entry->rateSet, |
| 697 | sizeof(tSirMacRateSet)); |
| 698 | } |
| 699 | |
| 700 | assoc_cnf.protStatusCode = assoc_rsp->statusCode; |
Jeff Johnson | 8e9530b | 2019-03-18 13:41:42 -0700 | [diff] [blame] | 701 | if (session_entry->assocRsp) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 702 | pe_warn("session_entry->assocRsp is not NULL freeing it and setting NULL"); |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 703 | qdf_mem_free(session_entry->assocRsp); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 704 | session_entry->assocRsp = NULL; |
Sreelakshmi Konamki | 3b8ba61 | 2015-12-02 18:13:22 +0530 | [diff] [blame] | 705 | session_entry->assocRspLen = 0; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 706 | } |
| 707 | |
yeshwanth sriram guntuka | d716a41 | 2017-07-18 17:25:32 +0530 | [diff] [blame] | 708 | if (frame_len) { |
| 709 | session_entry->assocRsp = qdf_mem_malloc(frame_len); |
Arif Hussain | f5b6c41 | 2018-10-10 19:41:09 -0700 | [diff] [blame] | 710 | if (session_entry->assocRsp) { |
yeshwanth sriram guntuka | d716a41 | 2017-07-18 17:25:32 +0530 | [diff] [blame] | 711 | /* |
| 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 718 | } |
| 719 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 720 | lim_update_ric_data(mac_ctx, session_entry, assoc_rsp); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 721 | |
| 722 | #ifdef WLAN_FEATURE_ROAM_OFFLOAD |
| 723 | roam_session = |
| 724 | &mac_ctx->roam.roamSession[sme_sessionid]; |
Pragaspathi Thilagaraj | 0bd369d | 2019-04-08 00:07:53 +0530 | [diff] [blame] | 725 | 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 732 | roam_session->ftSmeContext.r0kh_id_len = |
| 733 | assoc_rsp->FTInfo.R0KH_ID.num_PMK_R0_ID; |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 734 | qdf_mem_copy(roam_session->ftSmeContext.r0kh_id, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 735 | 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 Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 739 | qdf_mem_zero(roam_session->ftSmeContext.r0kh_id, |
Pragaspathi Thilagaraj | 0bd369d | 2019-04-08 00:07:53 +0530 | [diff] [blame] | 740 | SIR_ROAM_R0KH_ID_MAX_LEN); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 741 | } |
| 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 Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 755 | pe_err("received Re/AssocRsp frame with IBSS capability"); |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 756 | qdf_mem_free(assoc_rsp); |
| 757 | qdf_mem_free(beacon); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 758 | return; |
| 759 | } |
| 760 | |
Wu Gao | 5c3d94b | 2019-01-17 21:15:54 +0800 | [diff] [blame] | 761 | if (lim_get_capability_info(mac_ctx, &caps, session_entry) |
Jeff Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 762 | != QDF_STATUS_SUCCESS) { |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 763 | qdf_mem_free(assoc_rsp); |
| 764 | qdf_mem_free(beacon); |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 765 | pe_err("could not retrieve Capabilities"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 766 | 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 Yeturu | 32de0e4 | 2016-04-15 14:25:59 +0530 | [diff] [blame] | 773 | else |
| 774 | lim_stop_reassoc_retry_timer(mac_ctx); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 775 | |
gaurank kathpalia | a3856b8 | 2019-05-15 13:20:28 +0530 | [diff] [blame] | 776 | lim_handle_assoc_reject_status(mac_ctx, session_entry, assoc_rsp, |
| 777 | hdr->sa); |
| 778 | |
Abhishek Singh | f3756fc | 2017-06-28 16:04:06 +0530 | [diff] [blame] | 779 | if (eSIR_MAC_XS_FRAME_LOSS_POOR_CHANNEL_RSSI_STATUS == |
| 780 | assoc_rsp->statusCode && |
gaurank kathpalia | a3856b8 | 2019-05-15 13:20:28 +0530 | [diff] [blame] | 781 | assoc_rsp->rssi_assoc_rej.present) { |
| 782 | struct sir_rssi_disallow_lst ap_info = {{0}}; |
Abhishek Singh | f3756fc | 2017-06-28 16:04:06 +0530 | [diff] [blame] | 783 | |
gaurank kathpalia | a3856b8 | 2019-05-15 13:20:28 +0530 | [diff] [blame] | 784 | 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 kathpalia | 3ebc17b | 2019-05-29 10:25:09 +0530 | [diff] [blame^] | 789 | lim_add_bssid_to_reject_list(mac_ctx->pdev, &ap_info); |
gaurank kathpalia | a3856b8 | 2019-05-15 13:20:28 +0530 | [diff] [blame] | 790 | } |
| 791 | if (assoc_rsp->statusCode != eSIR_MAC_SUCCESS_STATUS) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 792 | /* |
| 793 | *Re/Association response was received |
| 794 | * either with failure code. |
| 795 | */ |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 796 | pe_err("received Re/AssocRsp frame failure code: %d", |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 797 | 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 Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 813 | pe_err("received Re/AssocRsp frame with invalid aid: %X", |
| 814 | assoc_rsp->aid); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 815 | 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 Selvaraj | 0d5d2c7 | 2017-08-17 17:30:01 +0530 | [diff] [blame] | 823 | |
| 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 840 | /* |
| 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 Kumar | be5d7fd | 2016-04-15 14:35:12 -0700 | [diff] [blame] | 847 | if (!lim_is_roam_synch_in_progress(session_entry)) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 848 | if (lim_set_link_state |
| 849 | (mac_ctx, eSIR_LINK_POSTASSOC_STATE, |
| 850 | session_entry->bssId, |
| 851 | session_entry->selfMacAddr, NULL, |
Jeff Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 852 | NULL) != QDF_STATUS_SUCCESS) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 853 | pe_err("Set link state to POSTASSOC failed"); |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 854 | qdf_mem_free(beacon); |
| 855 | qdf_mem_free(assoc_rsp); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 856 | return; |
| 857 | } |
| 858 | } |
yeshwanth sriram guntuka | 58bbcf8 | 2017-02-21 12:16:04 +0530 | [diff] [blame] | 859 | |
| 860 | if (assoc_rsp->QosMapSet.present) |
| 861 | qdf_mem_copy(&session_entry->QosMapSet, |
Jeff Johnson | 7fb55e5 | 2019-02-06 11:28:12 -0800 | [diff] [blame] | 862 | &assoc_rsp->QosMapSet, |
| 863 | sizeof(struct qos_map_set)); |
Srinivas Girigowda | eff16d9 | 2018-09-12 14:56:29 -0700 | [diff] [blame] | 864 | else |
Jeff Johnson | 7fb55e5 | 2019-02-06 11:28:12 -0800 | [diff] [blame] | 865 | qdf_mem_zero(&session_entry->QosMapSet, |
| 866 | sizeof(struct qos_map_set)); |
yeshwanth sriram guntuka | 58bbcf8 | 2017-02-21 12:16:04 +0530 | [diff] [blame] | 867 | |
| 868 | if (assoc_rsp->obss_scanparams.present) |
| 869 | lim_update_obss_scanparams(session_entry, |
| 870 | &assoc_rsp->obss_scanparams); |
| 871 | |
Abhishek Singh | dd2cb57 | 2017-08-11 11:10:19 +0530 | [diff] [blame] | 872 | lim_diag_event_report(mac_ctx, WLAN_PE_DIAG_ROAM_ASSOC_COMP_EVENT, |
Jeff Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 873 | session_entry, assoc_rsp->statusCode ? QDF_STATUS_E_FAILURE : |
| 874 | QDF_STATUS_SUCCESS, assoc_rsp->statusCode); |
Abhishek Singh | dd2cb57 | 2017-08-11 11:10:19 +0530 | [diff] [blame] | 875 | |
Yeshwanth Sriram Guntuka | 22ed800 | 2019-05-07 15:08:09 +0530 | [diff] [blame] | 876 | ap_nss = lim_get_nss_supported_by_ap(&assoc_rsp->VHTCaps, |
| 877 | &assoc_rsp->HTCaps); |
| 878 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 879 | if (subtype == LIM_REASSOC) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 880 | pe_debug("Successfully Reassociated with BSS"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 881 | #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 Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 886 | qdf_mem_free(session_entry->pLimMlmJoinReq); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 887 | 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 Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 901 | pe_err("could not get hash entry at DPH for"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 902 | 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 Guntuka | 22ed800 | 2019-05-07 15:08:09 +0530 | [diff] [blame] | 914 | |
| 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 Yeturu | d5939f8 | 2015-12-24 18:14:02 -0800 | [diff] [blame] | 922 | if ((session_entry->limMlmState == |
| 923 | eLIM_MLM_WT_FT_REASSOC_RSP_STATE) || |
Varun Reddy Yeturu | bbbbe23 | 2016-02-29 14:01:57 -0800 | [diff] [blame] | 924 | lim_is_roam_synch_in_progress(session_entry)) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 925 | pe_debug("Sending self sta"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 926 | lim_update_assoc_sta_datas(mac_ctx, sta_ds, assoc_rsp, |
| 927 | session_entry); |
yeshwanth sriram guntuka | 58bbcf8 | 2017-02-21 12:16:04 +0530 | [diff] [blame] | 928 | lim_update_stads_ext_cap(mac_ctx, session_entry, |
| 929 | assoc_rsp, sta_ds); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 930 | /* 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 Yeturu | bbbbe23 | 2016-02-29 14:01:57 -0800 | [diff] [blame] | 937 | if (!lim_is_roam_synch_in_progress(session_entry)) { |
| 938 | lim_send_edca_params(mac_ctx, |
| 939 | session_entry->gLimEdcaParamsActive, |
Kiran Kumar Lokere | 27026ae | 2018-03-09 11:38:19 -0800 | [diff] [blame] | 940 | sta_ds->bssId, false); |
Varun Reddy Yeturu | bbbbe23 | 2016-02-29 14:01:57 -0800 | [diff] [blame] | 941 | lim_add_ft_sta_self(mac_ctx, |
| 942 | (assoc_rsp->aid & 0x3FFF), |
| 943 | session_entry); |
| 944 | } |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 945 | qdf_mem_free(beacon); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 946 | return; |
| 947 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 948 | |
| 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 Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 972 | != QDF_STATUS_SUCCESS) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 973 | pe_err("Could not cleanup the rx path"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 974 | goto assocReject; |
| 975 | } |
| 976 | } |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 977 | qdf_mem_free(beacon); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 978 | return; |
| 979 | } |
Srinivas Girigowda | cb7b8b8 | 2019-04-10 14:27:47 -0700 | [diff] [blame] | 980 | pe_debug("Successfully Associated with BSS " QDF_MAC_ADDR_STR, |
Srinivas Girigowda | 34fbba0 | 2019-04-08 12:07:44 -0700 | [diff] [blame] | 981 | QDF_MAC_ADDR_ARRAY(hdr->sa)); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 982 | #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 Johnson | 8e9530b | 2019-03-18 13:41:42 -0700 | [diff] [blame] | 992 | if (!sta_ds) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 993 | /* Could not add hash table entry */ |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 994 | pe_err("could not get hash entry at DPH"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 995 | 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 Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 1000 | qdf_mem_free(assoc_rsp); |
| 1001 | qdf_mem_free(beacon); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1002 | 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 Guntuka | 22ed800 | 2019-05-07 15:08:09 +0530 | [diff] [blame] | 1008 | 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1015 | 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 Lokere | f54b855 | 2018-07-10 00:53:38 -0700 | [diff] [blame] | 1027 | if (lim_is_session_he_capable(session_entry)) { |
Kiran Kumar Lokere | b52cfc8 | 2018-10-08 21:54:38 -0700 | [diff] [blame] | 1028 | 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 Girigowda | 5b86fbd | 2019-03-21 14:54:14 -0700 | [diff] [blame] | 1031 | session_entry->ap_mu_edca_params[QCA_WLAN_AC_BE] = |
Kiran Kumar Lokere | b52cfc8 | 2018-10-08 21:54:38 -0700 | [diff] [blame] | 1032 | assoc_rsp->mu_edca.acbe; |
Srinivas Girigowda | 5b86fbd | 2019-03-21 14:54:14 -0700 | [diff] [blame] | 1033 | session_entry->ap_mu_edca_params[QCA_WLAN_AC_BK] = |
Kiran Kumar Lokere | b52cfc8 | 2018-10-08 21:54:38 -0700 | [diff] [blame] | 1034 | assoc_rsp->mu_edca.acbk; |
Srinivas Girigowda | 5b86fbd | 2019-03-21 14:54:14 -0700 | [diff] [blame] | 1035 | session_entry->ap_mu_edca_params[QCA_WLAN_AC_VI] = |
Kiran Kumar Lokere | b52cfc8 | 2018-10-08 21:54:38 -0700 | [diff] [blame] | 1036 | assoc_rsp->mu_edca.acvi; |
Srinivas Girigowda | 5b86fbd | 2019-03-21 14:54:14 -0700 | [diff] [blame] | 1037 | session_entry->ap_mu_edca_params[QCA_WLAN_AC_VO] = |
Kiran Kumar Lokere | b52cfc8 | 2018-10-08 21:54:38 -0700 | [diff] [blame] | 1038 | assoc_rsp->mu_edca.acvo; |
Kiran Kumar Lokere | f54b855 | 2018-07-10 00:53:38 -0700 | [diff] [blame] | 1039 | } |
Kiran Kumar Lokere | 27026ae | 2018-03-09 11:38:19 -0800 | [diff] [blame] | 1040 | |
| 1041 | } |
| 1042 | |
Selvaraj, Sridhar | e01e073 | 2016-09-13 12:45:22 +0530 | [diff] [blame] | 1043 | 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 Chouhan | 5de8d17 | 2016-07-13 14:44:28 +0530 | [diff] [blame] | 1053 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1054 | if (mac_ctx->lim.gLimProtectionControl != |
Pragaspathi Thilagaraj | 1ee7600 | 2018-09-18 21:38:51 +0530 | [diff] [blame] | 1055 | MLME_FORCE_POLICY_PROTECTION_DISABLE) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1056 | lim_decide_sta_protection_on_assoc(mac_ctx, beacon, |
Pragaspathi Thilagaraj | 1ee7600 | 2018-09-18 21:38:51 +0530 | [diff] [blame] | 1057 | session_entry); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1058 | |
| 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 Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 1068 | QDF_STATUS_SUCCESS, QDF_STATUS_SUCCESS); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1069 | #endif |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1070 | 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 Johnson | 0301ecb | 2018-06-29 09:36:23 -0700 | [diff] [blame] | 1072 | if (QDF_STATUS_SUCCESS == lim_sta_send_add_bss(mac_ctx, assoc_rsp, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1073 | beacon, |
| 1074 | &session_entry->pLimJoinReq->bssDescription, true, |
| 1075 | session_entry)) { |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 1076 | qdf_mem_free(assoc_rsp); |
| 1077 | qdf_mem_free(beacon); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1078 | return; |
| 1079 | } else { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 1080 | pe_err("could not update the bss entry"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1081 | assoc_cnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE; |
| 1082 | assoc_cnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS; |
| 1083 | } |
| 1084 | |
| 1085 | assocReject: |
| 1086 | if ((subtype == LIM_ASSOC) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1087 | || ((subtype == LIM_REASSOC) |
| 1088 | && (session_entry->limMlmState == |
Deepak Dhamdhere | 262d95a | 2016-01-10 16:36:53 -0800 | [diff] [blame] | 1089 | eLIM_MLM_WT_FT_REASSOC_RSP_STATE))) { |
Nishank Aggarwal | 4744414 | 2017-03-24 15:31:15 +0530 | [diff] [blame] | 1090 | pe_err("Assoc Rejected by the peer mlmestate: %d sessionid: %d Reason: %d MACADDR:" |
Srinivas Girigowda | cb7b8b8 | 2019-04-10 14:27:47 -0700 | [diff] [blame] | 1091 | QDF_MAC_ADDR_STR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1092 | session_entry->limMlmState, |
| 1093 | session_entry->peSessionId, |
Srinivas Girigowda | 34fbba0 | 2019-04-08 12:07:44 -0700 | [diff] [blame] | 1094 | assoc_cnf.resultCode, QDF_MAC_ADDR_ARRAY(hdr->sa)); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1095 | 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 Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 1100 | qdf_mem_free(session_entry->pLimMlmJoinReq); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1101 | 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 Dhamdhere | 262d95a | 2016-01-10 16:36:53 -0800 | [diff] [blame] | 1106 | } else { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1107 | 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 Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1111 | } else { |
| 1112 | lim_restore_pre_reassoc_state(mac_ctx, |
| 1113 | eSIR_SME_REASSOC_REFUSED, |
| 1114 | assoc_cnf.protStatusCode, |
| 1115 | session_entry); |
| 1116 | } |
| 1117 | |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 1118 | qdf_mem_free(beacon); |
Pragaspathi Thilagaraj | 0bd369d | 2019-04-08 00:07:53 +0530 | [diff] [blame] | 1119 | qdf_mem_free(assoc_rsp->sha384_ft_subelem.gtk); |
| 1120 | qdf_mem_free(assoc_rsp->sha384_ft_subelem.igtk); |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 1121 | qdf_mem_free(assoc_rsp); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1122 | return; |
| 1123 | } |