diff --git a/core/hdd/inc/wlan_hdd_assoc.h b/core/hdd/inc/wlan_hdd_assoc.h index 34aa382092..b2c75ea8e4 100644 --- a/core/hdd/inc/wlan_hdd_assoc.h +++ b/core/hdd/inc/wlan_hdd_assoc.h @@ -174,6 +174,8 @@ struct hdd_conn_flag { * @signal: holds rssi info * @assoc_status_code: holds assoc fail reason * @congestion: holds congestion percentage + * @last_ssid: holds last ssid + * @last_auth_type: holds last auth type */ struct hdd_connection_info { eConnectionState connState; @@ -206,6 +208,8 @@ struct hdd_connection_info { int8_t signal; int32_t assoc_status_code; uint32_t cca; + tCsrSSIDInfo last_ssid; + eCsrAuthType last_auth_type; }; /* Forward declarations */ diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 1cbfac032f..5f2654c10a 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -885,6 +885,8 @@ hdd_conn_save_connect_info(hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo, pHddStaCtx->conn_info.authType = pRoamInfo->u.pConnectedProfile->AuthType; + pHddStaCtx->conn_info.last_auth_type = + pHddStaCtx->conn_info.authType; pHddStaCtx->conn_info.operationChannel = pRoamInfo->u.pConnectedProfile->operationChannel; @@ -893,6 +895,9 @@ hdd_conn_save_connect_info(hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo, qdf_mem_copy(&pHddStaCtx->conn_info.SSID.SSID, &pRoamInfo->u.pConnectedProfile->SSID, sizeof(tSirMacSSid)); + qdf_mem_copy(&pHddStaCtx->conn_info.last_ssid.SSID, + &pRoamInfo->u.pConnectedProfile->SSID, + sizeof(tSirMacSSid)); /* Save dot11mode in which STA associated to AP */ pHddStaCtx->conn_info.dot11Mode = @@ -1523,10 +1528,10 @@ static void hdd_print_bss_info(hdd_station_ctx_t *hdd_sta_ctx) hdd_info("dot11mode: %d", hdd_sta_ctx->conn_info.dot11Mode); hdd_info("AKM: %d", - hdd_sta_ctx->conn_info.authType); + hdd_sta_ctx->conn_info.last_auth_type); hdd_info("ssid: %.*s", - hdd_sta_ctx->conn_info.SSID.SSID.length, - hdd_sta_ctx->conn_info.SSID.SSID.ssId); + hdd_sta_ctx->conn_info.last_ssid.SSID.length, + hdd_sta_ctx->conn_info.last_ssid.SSID.ssId); hdd_info("roam count: %d", hdd_sta_ctx->conn_info.roam_count); hdd_info("ant_info: %d", diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 4b1f593b7d..06511f24fd 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -4365,8 +4365,8 @@ hdd_add_link_standard_info(struct sk_buff *skb, goto fail; if (nla_put(skb, NL80211_ATTR_SSID, - hdd_sta_ctx->conn_info.SSID.SSID.length, - hdd_sta_ctx->conn_info.SSID.SSID.ssId)) { + hdd_sta_ctx->conn_info.last_ssid.SSID.length, + hdd_sta_ctx->conn_info.last_ssid.SSID.ssId)) { hdd_err("put fail"); goto fail; } @@ -4435,14 +4435,14 @@ static int hdd_get_station_info(hdd_context_t *hdd_ctx, hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter); nl_buf_len = NLMSG_HDRLEN; - nl_buf_len += sizeof(hdd_sta_ctx->conn_info.SSID.SSID.length) + + nl_buf_len += sizeof(hdd_sta_ctx->conn_info.last_ssid.SSID.length) + sizeof(hdd_sta_ctx->conn_info.freq) + sizeof(hdd_sta_ctx->conn_info.noise) + sizeof(hdd_sta_ctx->conn_info.signal) + (sizeof(uint32_t) * 2) + sizeof(hdd_sta_ctx->conn_info.txrate.nss) + sizeof(hdd_sta_ctx->conn_info.roam_count) + - sizeof(hdd_sta_ctx->conn_info.authType) + + sizeof(hdd_sta_ctx->conn_info.last_auth_type) + sizeof(hdd_sta_ctx->conn_info.dot11Mode); if (hdd_sta_ctx->conn_info.conn_flag.vht_present) nl_buf_len += sizeof(hdd_sta_ctx->conn_info.vht_caps); @@ -4479,7 +4479,7 @@ static int hdd_get_station_info(hdd_context_t *hdd_ctx, hdd_sta_ctx->conn_info.roam_count) || nla_put_u32(skb, INFO_AKM, hdd_convert_auth_type( - hdd_sta_ctx->conn_info.authType)) || + hdd_sta_ctx->conn_info.last_auth_type)) || nla_put_u32(skb, WLAN802_11_MODE, hdd_convert_dot11mode( hdd_sta_ctx->conn_info.dot11Mode))) { diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 64ed57bac0..1e4472b1ea 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -6967,6 +6967,7 @@ static void csr_roam_process_join_res(tpAniSirGlobal mac_ctx, } session = CSR_GET_SESSION(mac_ctx, session_id); + qdf_mem_set(&roam_info, sizeof(roam_info), 0); conn_profile = &session->connectedProfile; if (eCsrReassocSuccess == res) { roam_info.reassoc = true; @@ -6976,7 +6977,6 @@ static void csr_roam_process_join_res(tpAniSirGlobal mac_ctx, ind_qos = SME_QOS_CSR_ASSOC_COMPLETE; } sme_debug("receives association indication"); - qdf_mem_set(&roam_info, sizeof(roam_info), 0); /* always free the memory here */ if (session->pWpaRsnRspIE) { session->nWpaRsnRspIeLength = 0;