diff options
| author | Kalikinkar dhara <c_kaliki@qca.qualcomm.com> | 2014-06-05 21:05:38 -0700 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-06-11 12:23:29 -0700 |
| commit | 664196ce8abcc162cbda5023535d5d960d7c1189 (patch) | |
| tree | 8fcad59bbb911b53999700572db421fbe5d6fd12 | |
| parent | ca74728f45e1e618a637b0657cd5ec0e90e083ec (diff) | |
qcacld: HDD: Sessionized Probe Rsp update for AP+AP
For AP+AP, additional IE coming from HDD were passed through
a common wlan_cfg buffer. This will cause wrong values to be
read by consuming modules for multiple session case (AP+AP).
To fix this, additional IE are passed to consumer modules
via sessionized buffer thus avoiding any conflict.
Change-Id: I5a865e920d1bc0c31e9a7d38946653f5d998a82d
CRs-fixed: 649786
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 221 | ||||
| -rwxr-xr-x | CORE/HDD/src/wlan_hdd_main.c | 52 |
2 files changed, 63 insertions, 210 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 538eef5e8b75..8c0a47bd06b5 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -1714,8 +1714,10 @@ static int wlan_hdd_cfg80211_update_apies(hdd_adapter_t* pHostapdAdapter, { v_U8_t *genie; v_U8_t total_ielen = 0; - v_U8_t addIE[1] = {0}; int ret = 0; + tsap_Config_t *pConfig; + + pConfig = &pHostapdAdapter->sessionCtx.ap.sapConfig; genie = vos_mem_malloc(MAX_GENIE_LEN); @@ -1778,124 +1780,27 @@ static int wlan_hdd_cfg80211_update_apies(hdd_adapter_t* pHostapdAdapter, } // Added for ProResp IE - if ( (params->proberesp_ies != NULL) && (params->proberesp_ies_len != 0) ) - { - u16 rem_probe_resp_ie_len = params->proberesp_ies_len; - u8 probe_rsp_ie_len[3] = {0}; - u8 counter = 0; - /* Check Probe Resp Length if it is greater then 255 then Store - Probe Resp IEs into WNI_CFG_PROBE_RSP_ADDNIE_DATA1 & - WNI_CFG_PROBE_RSP_ADDNIE_DATA2 CFG Variable As We are not able - Store More then 255 bytes into One Variable. - */ - while ((rem_probe_resp_ie_len > 0) && (counter < 3)) - { - if (rem_probe_resp_ie_len > MAX_CFG_STRING_LEN) - { - probe_rsp_ie_len[counter++] = MAX_CFG_STRING_LEN; - rem_probe_resp_ie_len -= MAX_CFG_STRING_LEN; - } - else - { - probe_rsp_ie_len[counter++] = rem_probe_resp_ie_len; - rem_probe_resp_ie_len = 0; - } - } - - rem_probe_resp_ie_len = 0; - - if (probe_rsp_ie_len[0] > 0) - { - if (ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_DATA1, - (tANI_U8*)¶ms->proberesp_ies[rem_probe_resp_ie_len], - probe_rsp_ie_len[0], NULL, - eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) - { - hddLog(LOGE, - "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA1 to CCM"); - ret = -EINVAL; - goto done; - } - rem_probe_resp_ie_len += probe_rsp_ie_len[0]; - } - - if (probe_rsp_ie_len[1] > 0) - { - if (ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_DATA2, - (tANI_U8*)¶ms->proberesp_ies[rem_probe_resp_ie_len], - probe_rsp_ie_len[1], NULL, - eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) - { - hddLog(LOGE, - "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA2 to CCM"); - ret = -EINVAL; - goto done; - } - rem_probe_resp_ie_len += probe_rsp_ie_len[1]; - } - - if (probe_rsp_ie_len[2] > 0) - { - if (ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_DATA3, - (tANI_U8*)¶ms->proberesp_ies[rem_probe_resp_ie_len], - probe_rsp_ie_len[2], NULL, - eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) - { - hddLog(LOGE, - "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA3 to CCM"); - ret = -EINVAL; - goto done; - } - rem_probe_resp_ie_len += probe_rsp_ie_len[2]; - } - - if (probe_rsp_ie_len[1] == 0 ) - { - if ( eHAL_STATUS_FAILURE == ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_DATA2, (tANI_U8*)addIE, 0, NULL, - eANI_BOOLEAN_FALSE) ) - { - hddLog(LOGE, - "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA2 to CCM"); - } - } - - if (probe_rsp_ie_len[2] == 0 ) - { - if ( eHAL_STATUS_FAILURE == ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_DATA3, (tANI_U8*)addIE, 0, NULL, - eANI_BOOLEAN_FALSE) ) - { - hddLog(LOGE, - "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA3 to CCM"); - } - } - - if (ccmCfgSetInt((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_FLAG, 1,NULL, - test_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags) ? - eANI_BOOLEAN_TRUE : eANI_BOOLEAN_FALSE) - == eHAL_STATUS_FAILURE) + if (test_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags)) + { + if (sme_UpdateAddIE(WLAN_HDD_GET_HAL_CTX(pHostapdAdapter), + pHostapdAdapter->sessionId, + pHostapdAdapter->macAddressCurrent.bytes, + (tANI_U8*)params->proberesp_ies, + params->proberesp_ies_len, + VOS_FALSE) == eHAL_STATUS_FAILURE) { - hddLog(LOGE, - "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_FLAG to CCM"); - ret = -EINVAL; - goto done; + hddLog(LOGE, FL("Could not pass on Probe Resp Add Ie")); + ret = -EINVAL; + goto done; } + WLANSAP_ResetSapConfigAddIE(pConfig); } else { - // Reset WNI_CFG_PROBE_RSP Flags - wlan_hdd_reset_prob_rspies(pHostapdAdapter); - - hddLog(VOS_TRACE_LEVEL_INFO, - "%s: No Probe Response IE received in set beacon", - __func__); + WLANSAP_UpdateSapConfigAddIE(pConfig, + params->proberesp_ies, + params->proberesp_ies_len); } - // Added for AssocResp IE if ( (params->assocresp_ies != NULL) && (params->assocresp_ies_len != 0) ) { @@ -2654,6 +2559,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, if ( 0 != wlan_hdd_cfg80211_update_apies(pHostapdAdapter, params) ) { hddLog(LOGE, FL("SAP Not able to set AP IEs")); + WLANSAP_ResetSapConfigAddIE(pConfig); return -EINVAL; } @@ -2686,6 +2592,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, if(test_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags)) { + WLANSAP_ResetSapConfigAddIE(pConfig); //Bss already started. just return. //TODO Probably it should update some beacon params. hddLog( LOGE, "Bss Already started...Ignore the request"); @@ -2735,6 +2642,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, pSapEventCallback, pConfig, (v_PVOID_t)pHostapdAdapter->dev); if (!VOS_IS_STATUS_SUCCESS(status)) { + WLANSAP_ResetSapConfigAddIE(pConfig); hddLog(LOGE,FL("SAP Start Bss fail")); return -EINVAL; } @@ -2744,6 +2652,8 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, status = vos_wait_single_event(&pHostapdState->vosEvent, 10000); + WLANSAP_ResetSapConfigAddIE(pConfig); + if (!VOS_IS_STATUS_SUCCESS(status)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, @@ -6644,86 +6554,15 @@ int wlan_hdd_cfg80211_set_ie( hdd_adapter_t *pAdapter, if ( (NULL != (genie - 2)) && (0 != eLen + 2) ) { u16 rem_probe_resp_ie_len = eLen + 2; - u8 probe_rsp_ie_len[3] = {0}; - u8 counter = 0; - - /* Check Probe Resp Length if it is greater then 255 then - Store Probe Rsp IEs into WNI_CFG_PROBE_RSP_ADDNIE_DATA1 - & WNI_CFG_PROBE_RSP_ADDNIE_DATA2 CFG Variable As We are - not able Store More then 255 bytes into One Variable */ - - while ((rem_probe_resp_ie_len > 0) && (counter < 3)) - { - if (rem_probe_resp_ie_len > MAX_CFG_STRING_LEN) - { - probe_rsp_ie_len[counter++] = MAX_CFG_STRING_LEN; - rem_probe_resp_ie_len -= MAX_CFG_STRING_LEN; - } - else - { - probe_rsp_ie_len[counter++] = rem_probe_resp_ie_len; - rem_probe_resp_ie_len = 0; - } - } - - rem_probe_resp_ie_len = 0; - - if (probe_rsp_ie_len[0] > 0) - { - if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), - WNI_CFG_PROBE_RSP_ADDNIE_DATA1, - (tANI_U8*)(genie - 2), - probe_rsp_ie_len[0], NULL, - eANI_BOOLEAN_FALSE) - == eHAL_STATUS_FAILURE) - { - hddLog(LOGE, - "Could not pass" - "on WNI_CFG_PROBE_RSP_ADDNIE_DATA1 to CCM"); - } - rem_probe_resp_ie_len += probe_rsp_ie_len[0]; - } - - if (probe_rsp_ie_len[1] > 0) + if (sme_UpdateAddIE(WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId, + pAdapter->macAddressCurrent.bytes, + (tANI_U8*)(genie - 2), + rem_probe_resp_ie_len, + VOS_TRUE) == eHAL_STATUS_FAILURE) { - if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), - WNI_CFG_PROBE_RSP_ADDNIE_DATA2, - (tANI_U8*)(genie - (2 + rem_probe_resp_ie_len)), - probe_rsp_ie_len[1], NULL, - eANI_BOOLEAN_FALSE) - == eHAL_STATUS_FAILURE) - { - hddLog(LOGE, - "Could not pass" - "on WNI_CFG_PROBE_RSP_ADDNIE_DATA2 to CCM"); - } - rem_probe_resp_ie_len += probe_rsp_ie_len[1]; + hddLog(LOGE, "Could not pass ADDNIE data to PE"); } - - if (probe_rsp_ie_len[2] > 0) - { - if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter), - WNI_CFG_PROBE_RSP_ADDNIE_DATA3, - (tANI_U8*)(genie - (2 + rem_probe_resp_ie_len)), - probe_rsp_ie_len[2], NULL, - eANI_BOOLEAN_FALSE) - == eHAL_STATUS_FAILURE) - { - hddLog(LOGE, - "Could not pass" - "on WNI_CFG_PROBE_RSP_ADDNIE_DATA3 to CCM"); - } - rem_probe_resp_ie_len += probe_rsp_ie_len[2]; - } - - if (ccmCfgSetInt(WLAN_HDD_GET_HAL_CTX(pAdapter), - WNI_CFG_PROBE_RSP_ADDNIE_FLAG, 1,NULL, - eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) - { - hddLog(LOGE, - "Could not pass" - "on WNI_CFG_PROBE_RSP_ADDNIE_FLAG to CCM"); - } } else { diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index ef7392956183..ddebd777538d 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -8782,30 +8782,44 @@ VOS_STATUS hdd_close_all_adapters( hdd_context_t *pHddCtx ) void wlan_hdd_reset_prob_rspies(hdd_adapter_t* pHostapdAdapter) { - v_U8_t addIE[1] = {0}; - - if ( eHAL_STATUS_FAILURE == ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_DATA1,(tANI_U8*)addIE, 0, NULL, - eANI_BOOLEAN_FALSE) ) + tANI_U8 *bssid = NULL; + switch (pHostapdAdapter->device_mode) + { + case WLAN_HDD_INFRA_STATION: + case WLAN_HDD_P2P_CLIENT: { - hddLog(LOGE, - "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA1 to CCM"); + hdd_station_ctx_t * pHddStaCtx = + WLAN_HDD_GET_STATION_CTX_PTR(pHostapdAdapter); + bssid = (tANI_U8*)&pHddStaCtx->conn_info.bssId; + break; } - - if ( eHAL_STATUS_FAILURE == ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_DATA2, (tANI_U8*)addIE, 0, NULL, - eANI_BOOLEAN_FALSE) ) + case WLAN_HDD_SOFTAP: + case WLAN_HDD_P2P_GO: + case WLAN_HDD_IBSS: { - hddLog(LOGE, - "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA2 to CCM"); + bssid = pHostapdAdapter->macAddressCurrent.bytes; + break; } - - if ( eHAL_STATUS_FAILURE == ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal, - WNI_CFG_PROBE_RSP_ADDNIE_DATA3, (tANI_U8*)addIE, 0, NULL, - eANI_BOOLEAN_FALSE) ) + case WLAN_HDD_MONITOR: + case WLAN_HDD_FTM: + case WLAN_HDD_P2P_DEVICE: + default: + /* + * wlan_hdd_reset_prob_rspies should not have been called + * for these kind of devices + */ + hddLog(LOGE, FL("Unexpected request for the current device type %d"), + pHostapdAdapter->device_mode); + return; + } + if (sme_UpdateAddIE(WLAN_HDD_GET_HAL_CTX(pHostapdAdapter), + pHostapdAdapter->sessionId, + bssid, + NULL, + 0, + VOS_TRUE) == eHAL_STATUS_FAILURE) { - hddLog(LOGE, - "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA3 to CCM"); + hddLog(LOGE, "Could not pass on Additional IE data to PE"); } } |
