summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiangwei Dong <liangwei@codeaurora.org>2016-10-19 05:59:13 -0400
committerqcabuildsw <qcabuildsw@localhost>2016-11-03 19:33:05 -0700
commit8d2bd7f9806984dbdc3c518c062b8dbe1d9b8673 (patch)
tree79f35126f2bdf1bff6995ee83dda10b82d1a711b
parent440d8cb4bb37c20663f028e48e4470253fc1c2bb (diff)
qcacld-3.0: add OBSS scan param IE to probe response
qcacld-2.0 to qcacld-3.0 propagation Add OBSS scan parameter IE to probe response frame in SoftAP mode. To avoid some station can't find OBSS parameter and do not schedule OBSS scan. Change-Id: If22944b216ff10bafb98b5a2d3e4f2f1abe61333 CRs-Fixed: 909694
-rw-r--r--core/hdd/src/wlan_hdd_hostapd.c65
1 files changed, 45 insertions, 20 deletions
diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c
index 5b1c8bb7043e..ed07c2b2b9d3 100644
--- a/core/hdd/src/wlan_hdd_hostapd.c
+++ b/core/hdd/src/wlan_hdd_hostapd.c
@@ -6235,7 +6235,7 @@ static void wlan_hdd_check_11gmode(u8 *pIe, u8 *require_ht, u8 *require_vht,
* Return: 0 for success non-zero for failure
*/
static int wlan_hdd_add_ie(hdd_adapter_t *pHostapdAdapter, uint8_t *genie,
- uint8_t *total_ielen, uint8_t *oui,
+ uint16_t *total_ielen, uint8_t *oui,
uint8_t oui_size)
{
uint16_t ielen = 0;
@@ -6268,7 +6268,7 @@ static int wlan_hdd_add_ie(hdd_adapter_t *pHostapdAdapter, uint8_t *genie,
*/
static void wlan_hdd_add_hostapd_conf_vsie(hdd_adapter_t *pHostapdAdapter,
uint8_t *genie,
- uint8_t *total_ielen)
+ uint16_t *total_ielen)
{
beacon_data_t *pBeacon = pHostapdAdapter->sessionCtx.ap.beacon;
int left = pBeacon->tail_len;
@@ -6341,7 +6341,7 @@ static void wlan_hdd_add_hostapd_conf_vsie(hdd_adapter_t *pHostapdAdapter,
* Return: none
*/
static void wlan_hdd_add_extra_ie(hdd_adapter_t *pHostapdAdapter,
- uint8_t *genie, uint8_t *total_ielen,
+ uint8_t *genie, uint16_t *total_ielen,
uint8_t temp_ie_id)
{
beacon_data_t *pBeacon = pHostapdAdapter->sessionCtx.ap.beacon;
@@ -6492,6 +6492,23 @@ wlan_hdd_cfg80211_alloc_new_beacon(hdd_adapter_t *pAdapter,
}
+#ifdef QCA_HT_2040_COEX
+static void wlan_hdd_add_sap_obss_scan_ie(
+ hdd_adapter_t *hostapd_adapter, uint8_t *ie_buf, uint16_t *ie_len)
+{
+ if (QDF_SAP_MODE == hostapd_adapter->device_mode) {
+ if (wlan_hdd_get_sap_obss(hostapd_adapter))
+ wlan_hdd_add_extra_ie(hostapd_adapter, ie_buf, ie_len,
+ WLAN_EID_OVERLAP_BSS_SCAN_PARAM);
+ }
+}
+#else
+static void wlan_hdd_add_sap_obss_scan_ie(
+ hdd_adapter_t *hostapd_adapter, uint8_t *ie_buf, uint16_t *ie_len)
+{
+}
+#endif
+
/**
* wlan_hdd_cfg80211_update_apies() - update ap mode ies
* @adapter: Pointer to hostapd adapter
@@ -6501,11 +6518,13 @@ wlan_hdd_cfg80211_alloc_new_beacon(hdd_adapter_t *pAdapter,
int wlan_hdd_cfg80211_update_apies(hdd_adapter_t *adapter)
{
uint8_t *genie;
- uint8_t total_ielen = 0;
+ uint16_t total_ielen = 0;
int ret = 0;
tsap_Config_t *pConfig;
tSirUpdateIE updateIE;
beacon_data_t *beacon = NULL;
+ uint16_t proberesp_ies_len;
+ uint8_t *proberesp_ies = NULL;
pConfig = &adapter->sessionCtx.ap.sapConfig;
beacon = adapter->sessionCtx.ap.beacon;
@@ -6559,18 +6578,8 @@ int wlan_hdd_cfg80211_update_apies(hdd_adapter_t *adapter)
goto done;
}
-#ifdef QCA_HT_2040_COEX
- if (QDF_SAP_MODE == adapter->device_mode) {
- tSmeConfigParams smeConfig;
- qdf_mem_zero(&smeConfig, sizeof(smeConfig));
- sme_get_config_param(WLAN_HDD_GET_HAL_CTX(adapter),
- &smeConfig);
- if (smeConfig.csrConfig.obssEnabled)
- wlan_hdd_add_extra_ie(adapter, genie,
- &total_ielen,
- WLAN_EID_OVERLAP_BSS_SCAN_PARAM);
- }
-#endif
+ wlan_hdd_add_sap_obss_scan_ie(adapter, genie, &total_ielen);
+
qdf_copy_macaddr(&updateIE.bssid, &adapter->macAddressCurrent);
updateIE.smeSessionId = adapter->sessionId;
@@ -6596,9 +6605,24 @@ int wlan_hdd_cfg80211_update_apies(hdd_adapter_t *adapter)
}
/* Added for Probe Response IE */
+ proberesp_ies = qdf_mem_malloc(beacon->proberesp_ies_len +
+ MAX_GENIE_LEN);
+ if (proberesp_ies == NULL) {
+ hdd_err("mem alloc failed for probe resp ies %d",
+ proberesp_ies_len);
+ ret = -EINVAL;
+ goto done;
+ }
+ qdf_mem_copy(proberesp_ies, beacon->proberesp_ies,
+ beacon->proberesp_ies_len);
+ proberesp_ies_len = beacon->proberesp_ies_len;
+
+ wlan_hdd_add_sap_obss_scan_ie(adapter, proberesp_ies,
+ &proberesp_ies_len);
+
if (test_bit(SOFTAP_BSS_STARTED, &adapter->event_flags)) {
- updateIE.ieBufferlength = beacon->proberesp_ies_len;
- updateIE.pAdditionIEBuffer = (uint8_t *) beacon->proberesp_ies;
+ updateIE.ieBufferlength = proberesp_ies_len;
+ updateIE.pAdditionIEBuffer = proberesp_ies;
updateIE.append = false;
updateIE.notify = false;
if (sme_update_add_ie(WLAN_HDD_GET_HAL_CTX(adapter),
@@ -6612,8 +6636,8 @@ int wlan_hdd_cfg80211_update_apies(hdd_adapter_t *adapter)
wlansap_reset_sap_config_add_ie(pConfig, eUPDATE_IE_PROBE_RESP);
} else {
wlansap_update_sap_config_add_ie(pConfig,
- beacon->proberesp_ies,
- beacon->proberesp_ies_len,
+ proberesp_ies,
+ proberesp_ies_len,
eUPDATE_IE_PROBE_RESP);
}
@@ -6641,6 +6665,7 @@ int wlan_hdd_cfg80211_update_apies(hdd_adapter_t *adapter)
done:
qdf_mem_free(genie);
+ qdf_mem_free(proberesp_ies);
return ret;
}