Fix the issue with zero bssid indication when connection is failed.
Pass the correct bssid to the supplicant when the connection failure
happens
Change-Id: Ib60d890d5af15e0d28887a0549ce6047d823b78e
CRs-Fixed: 472488
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
old mode 100755
new mode 100644
index 13c5bc6..03a8f1d
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -1360,7 +1360,14 @@
hdd_context_t* pHddCtx = (hdd_context_t*)pAdapter->pHddCtx;
hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter);
- pr_info("wlan: connection failed with %02x:%02x:%02x:%02x:%02x:%02x"
+ if (pRoamInfo)
+ pr_info("wlan: connection failed with %02x:%02x:%02x:%02x:%02x:%02x"
+ " reason:%d and Status:%d\n", pRoamInfo->bssid[0],
+ pRoamInfo->bssid[1], pRoamInfo->bssid[2],
+ pRoamInfo->bssid[3], pRoamInfo->bssid[4],
+ pRoamInfo->bssid[5], roamResult, roamStatus);
+ else
+ pr_info("wlan: connection failed with %02x:%02x:%02x:%02x:%02x:%02x"
" reason:%d and Status:%d\n", pWextState->req_bssId[0],
pWextState->req_bssId[1], pWextState->req_bssId[2],
pWextState->req_bssId[3], pWextState->req_bssId[4],
@@ -1422,17 +1429,29 @@
/* inform association failure event to nl80211 */
if ( eCSR_ROAM_RESULT_ASSOC_FAIL_CON_CHANNEL == roamResult )
{
- cfg80211_connect_result ( dev, pWextState->req_bssId,
- NULL, 0, NULL, 0,
- WLAN_STATUS_ASSOC_DENIED_UNSPEC,
- GFP_KERNEL );
+ if (pRoamInfo)
+ cfg80211_connect_result ( dev, pRoamInfo->bssid,
+ NULL, 0, NULL, 0,
+ WLAN_STATUS_ASSOC_DENIED_UNSPEC,
+ GFP_KERNEL );
+ else
+ cfg80211_connect_result ( dev, pWextState->req_bssId,
+ NULL, 0, NULL, 0,
+ WLAN_STATUS_ASSOC_DENIED_UNSPEC,
+ GFP_KERNEL );
}
else
{
- cfg80211_connect_result ( dev, pWextState->req_bssId,
- NULL, 0, NULL, 0,
- WLAN_STATUS_UNSPECIFIED_FAILURE,
- GFP_KERNEL );
+ if (pRoamInfo)
+ cfg80211_connect_result ( dev, pRoamInfo->bssid,
+ NULL, 0, NULL, 0,
+ WLAN_STATUS_UNSPECIFIED_FAILURE,
+ GFP_KERNEL );
+ else
+ cfg80211_connect_result ( dev, pWextState->req_bssId,
+ NULL, 0, NULL, 0,
+ WLAN_STATUS_UNSPECIFIED_FAILURE,
+ GFP_KERNEL );
}
}
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index bc4631d..440ec15 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -646,6 +646,7 @@
tSirResultCodes statusCode;
//this is set to unspecified if statusCode indicates timeout. Or it is the failed reason from the other BSS(per 802.11 spec)
tANI_U32 reasonCode;
+ tSirMacAddr bssId;
}tCsrRoamJoinStatus;
typedef struct tagCsrOsChannelMask
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 8bb153a..bead8ba 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -3965,6 +3965,8 @@
// Check for Cardbus eject condition, before trying to Roam to any BSS
//***if( !balIsCardPresent(pAdapter) ) break;
+ palZeroMemory(pMac->hHdd, &roamInfo, sizeof(roamInfo));
+ memcpy (&roamInfo.bssid, &pSession->joinFailStatusCode.bssId, sizeof(tSirMacAddr));
if(NULL != pBSSList)
{
// When handling AP's capability change, continue to associate to
@@ -3989,7 +3991,7 @@
else
{
//We need to indicate to HDD that we are done with this one.
- palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo));
+ //palZeroMemory(pMac->hHdd, &roamInfo, sizeof(tCsrRoamInfo));
roamInfo.pBssDesc = pCommand->u.roamCmd.pLastRoamBss; //this shall not be NULL
roamInfo.statusCode = pSession->joinFailStatusCode.statusCode;
roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode;
@@ -4207,6 +4209,7 @@
{
pSession->bRefAssocStartCnt--;
//Complete the last association attemp because a new one is about to be tried
+ pRoamInfo = &roamInfo;
csrRoamCallCallback(pMac, sessionId, pRoamInfo, pCommand->u.roamCmd.roamId,
eCSR_ROAM_ASSOCIATION_COMPLETION,
eCSR_ROAM_RESULT_NOT_ASSOCIATED);
@@ -5503,6 +5506,8 @@
roamInfo.pBssDesc = pCommand->u.roamCmd.pLastRoamBss;
roamInfo.statusCode = pSession->joinFailStatusCode.statusCode;
roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode;
+ palCopyMemory(pMac->hHdd, &roamInfo.bssid, &pSession->joinFailStatusCode.bssId, sizeof(tCsrBssid));
+
/* Defeaturize this later if needed */
#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
/* If Join fails while Handoff is in progress, indicate disassociated event to supplicant to reconnect */
@@ -5535,7 +5540,7 @@
* in csrRoamJoinNextBss API. so handle this in
* else case by sending assoc failure
*/
- csrRoamCallCallback(pMac, sessionId, NULL,
+ csrRoamCallCallback(pMac, sessionId, &roamInfo,
pCommand->u.scanCmd.roamId,
eCSR_ROAM_ASSOCIATION_FAILURE,
eCSR_ROAM_RESULT_FAILURE);
@@ -11745,6 +11750,7 @@
do {
pSession->joinFailStatusCode.statusCode = eSIR_SME_SUCCESS;
pSession->joinFailStatusCode.reasonCode = 0;
+ memcpy (&pSession->joinFailStatusCode.bssId, &pBssDescription->bssId, sizeof(tSirMacAddr));
// There are a number of variable length fields to consider. First, the tSirSmeJoinReq
// includes a single bssDescription. bssDescription includes a single tANI_U32 for the
// IE fields, but the length field in the bssDescription needs to be interpreted to