Merge 5bd959ede33e71bac65554d2f20b6786fda5c0c1 on remote branch
Change-Id: I26634ba59c3aff5b6f8d8988c58e926f567cc601
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 4bed869..62ac453 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -1917,6 +1917,7 @@
stats->rateStats +
(i * sizeof(tSirWifiRateStat)));
rates = nla_nest_start(vendor_event, i);
+
if(!rates)
return FALSE;
@@ -2402,10 +2403,10 @@
return;
}
- pWifiPeerInfo = (tpSirWifiPeerInfo) ((uint8 *)
- pWifiPeerStat->peerInfo +
- (i * sizeof(tSirWifiPeerInfo)) +
- (numRate * sizeof (tSirWifiRateStat)));
+ pWifiPeerInfo = (tpSirWifiPeerInfo)((uint8 *)pWifiPeerInfo +
+ (sizeof(tSirWifiPeerInfo) - sizeof(tSirWifiRateStat)) +
+ (numRate * sizeof(tSirWifiRateStat)));
+
nla_nest_end(vendor_event, peers);
}
nla_nest_end(vendor_event, peerInfo);
@@ -4309,6 +4310,42 @@
EXIT();
}
+static bool wlan_hdd_is_extscan_supported(hdd_adapter_t *adapter,
+ hdd_context_t *hdd_ctx)
+{
+ int status;
+
+ status = wlan_hdd_validate_context(hdd_ctx);
+ if (status)
+ return false;
+
+ if (!adapter) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid adapter"));
+ return false;
+ }
+
+ if (adapter->device_mode != WLAN_HDD_INFRA_STATION) {
+ hddLog(VOS_TRACE_LEVEL_INFO,
+ FL("ext scans only supported on STA ifaces"));
+ return false;
+ }
+
+ if (VOS_FTM_MODE == hdd_get_conparam()) {
+ hddLog(LOGE, FL("Command not allowed in FTM mode"));
+ return false;
+ }
+
+ /* check the EXTScan Capability */
+ if ( (TRUE != hdd_ctx->cfg_ini->fEnableEXTScan) ||
+ (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)) ||
+ (TRUE != sme_IsFeatureSupportedByFW(EXT_SCAN_ENHANCED))) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("EXTScan not enabled/supported by Firmware"));
+ return false;
+ }
+ return true;
+}
+
static int __wlan_hdd_cfg80211_extscan_get_capabilities(struct wiphy *wiphy,
struct wireless_dev *wdev,
const void *data, int dataLen)
@@ -4326,20 +4363,8 @@
ENTER();
- status = wlan_hdd_validate_context(pHddCtx);
- if (0 != status)
- {
+ if (!wlan_hdd_is_extscan_supported(pAdapter, pHddCtx))
return -EINVAL;
- }
- /* check the EXTScan Capability */
- if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXT_SCAN_ENHANCED)))
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- FL("EXTScan not enabled/supported by Firmware"));
- return -EINVAL;
- }
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
@@ -4421,25 +4446,8 @@
ENTER();
- if (VOS_FTM_MODE == hdd_get_conparam()) {
- hddLog(LOGE, FL("Command not allowed in FTM mode"));
+ if (!wlan_hdd_is_extscan_supported(pAdapter, pHddCtx))
return -EINVAL;
- }
-
- status = wlan_hdd_validate_context(pHddCtx);
- if (0 != status)
- {
- return -EINVAL;
- }
- /* check the EXTScan Capability */
- if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXT_SCAN_ENHANCED)))
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- FL("EXTScan not enabled/supported by Firmware"));
- return -EINVAL;
- }
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
@@ -4543,25 +4551,8 @@
ENTER();
- if (VOS_FTM_MODE == hdd_get_conparam()) {
- hddLog(LOGE, FL("Command not allowed in FTM mode"));
+ if (!wlan_hdd_is_extscan_supported(pAdapter, pHddCtx))
return -EINVAL;
- }
-
- status = wlan_hdd_validate_context(pHddCtx);
- if (0 != status)
- {
- return -EINVAL;
- }
- /* check the EXTScan Capability */
- if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXT_SCAN_ENHANCED)))
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- FL("EXTScan not enabled/supported by Firmware"));
- return -EINVAL;
- }
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
@@ -4740,11 +4731,8 @@
ENTER();
- status = wlan_hdd_validate_context(pHddCtx);
- if (0 != status)
- {
+ if (!wlan_hdd_is_extscan_supported(pAdapter, pHddCtx))
return -EINVAL;
- }
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
@@ -5093,6 +5081,11 @@
j++;
}
+ if (j != pReqMsg->buckets[bktIndex].numChannels) {
+ hddLog(LOG1, FL("Input parameters didn't match"));
+ return -EINVAL;
+ }
+
bktIndex++;
}
@@ -5136,25 +5129,8 @@
ENTER();
- if (VOS_FTM_MODE == hdd_get_conparam()) {
- hddLog(LOGE, FL("Command not allowed in FTM mode"));
+ if (!wlan_hdd_is_extscan_supported(pAdapter, pHddCtx))
return -EINVAL;
- }
-
- status = wlan_hdd_validate_context(pHddCtx);
- if (0 != status)
- {
- return -EINVAL;
- }
- /* check the EXTScan Capability */
- if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXT_SCAN_ENHANCED)))
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- FL("EXTScan not enabled/supported by Firmware"));
- return -EINVAL;
- }
if (nla_parse(tb, PARAM_MAX,
data, dataLen,
@@ -5330,25 +5306,8 @@
ENTER();
- if (VOS_FTM_MODE == hdd_get_conparam()) {
- hddLog(LOGE, FL("Command not allowed in FTM mode"));
+ if (!wlan_hdd_is_extscan_supported(pAdapter, pHddCtx))
return -EINVAL;
- }
-
- status = wlan_hdd_validate_context(pHddCtx);
- if (0 != status)
- {
- return -EINVAL;
- }
- /* check the EXTScan Capability */
- if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXT_SCAN_ENHANCED)))
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- FL("EXTScan not enabled/supported by Firmware"));
- return -EINVAL;
- }
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
@@ -5435,26 +5394,8 @@
ENTER();
- if (VOS_FTM_MODE == hdd_get_conparam()) {
- hddLog(LOGE, FL("Command not allowed in FTM mode"));
+ if (!wlan_hdd_is_extscan_supported(pAdapter, pHddCtx))
return -EINVAL;
- }
-
- status = wlan_hdd_validate_context(pHddCtx);
- if (0 != status)
- {
- hddLog(LOGE, FL("HDD context is not valid"));
- return -EINVAL;
- }
- /* check the EXTScan Capability */
- if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)) ||
- (TRUE != sme_IsFeatureSupportedByFW(EXT_SCAN_ENHANCED)))
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- FL("EXTScan not enabled/supported by Firmware"));
- return -EINVAL;
- }
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
@@ -12300,6 +12241,7 @@
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( ndev );
hdd_context_t *pHddCtx;
tCsrRoamProfile *pRoamProfile = NULL;
+ hdd_adapter_t *pP2pAdapter = NULL;
eCsrRoamBssType LastBSSType;
hdd_config_t *pConfig = NULL;
eMib_dot11DesiredBssType connectedBssType;
@@ -12464,6 +12406,30 @@
{
wlan_hdd_cancel_existing_remain_on_channel(pAdapter);
}
+ if (NL80211_IFTYPE_AP == type)
+ {
+ /*
+ * As Loading WLAN Driver one interface being created
+ * for p2p device address. This will take one HW STA and
+ * the max number of clients that can connect to softAP
+ * will be reduced by one. so while changing the interface
+ * type to NL80211_IFTYPE_AP (SoftAP) remove p2p0 interface
+ * as it is not required in SoftAP mode.
+ */
+
+ // Get P2P Adapter
+ pP2pAdapter = hdd_get_adapter(pHddCtx,
+ WLAN_HDD_P2P_DEVICE);
+ if (pP2pAdapter)
+ {
+ wlan_hdd_release_intf_addr(pHddCtx,
+ pP2pAdapter->macAddressCurrent.bytes);
+ hdd_stop_adapter(pHddCtx, pP2pAdapter, VOS_TRUE);
+ hdd_deinit_adapter(pHddCtx, pP2pAdapter, TRUE);
+ hdd_close_adapter(pHddCtx, pP2pAdapter, VOS_TRUE);
+ }
+ }
+
//Disable IMPS & BMPS for SAP/GO
if(VOS_STATUS_E_FAILURE ==
hdd_disable_bmps_imps(pHddCtx, WLAN_HDD_P2P_GO))
@@ -12601,7 +12567,19 @@
case NL80211_IFTYPE_P2P_CLIENT:
case NL80211_IFTYPE_ADHOC:
+ if (pAdapter->device_mode == WLAN_HDD_SOFTAP
+ && !hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_DEVICE)) {
+ /*
+ * The p2p interface was deleted while SoftAP mode was init,
+ * create that interface now that the SoftAP is going down.
+ */
+ pP2pAdapter = hdd_open_adapter(pHddCtx, WLAN_HDD_P2P_DEVICE,
+ "p2p%d", wlan_hdd_get_intf_addr(pHddCtx),
+ VOS_TRUE);
+ }
+
hdd_stop_adapter( pHddCtx, pAdapter, VOS_TRUE );
+
#ifdef FEATURE_WLAN_TDLS
/* A Mutex Lock is introduced while changing the mode to
@@ -19314,7 +19292,7 @@
}
#ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG
- hddLog(LOGE, FL("%s called with Ie of length = %zu"), __func__,
+ hddLog(LOG1, FL("%s called with Ie of length = %zu"), __func__,
ftie->ie_len);
#endif
diff --git a/CORE/HDD/src/wlan_hdd_ftm.c b/CORE/HDD/src/wlan_hdd_ftm.c
index 7bf993d..6c1ab43 100644
--- a/CORE/HDD/src/wlan_hdd_ftm.c
+++ b/CORE/HDD/src/wlan_hdd_ftm.c
@@ -1628,6 +1628,7 @@
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
"%s: Ftm has been started. stopping ftm", __func__);
wlan_ftm_stop(pHddCtx);
+ pHddCtx->ftm.ftm_state = WLAN_FTM_STOPPED;
}
#ifdef WLAN_KD_READY_NOTIFIER
nl_srv_exit(pHddCtx->ptt_pid);
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index aa95229..8d1e421 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -62,6 +62,7 @@
//#include <wlan_qct_driver.h>
#include <wlan_hdd_includes.h>
#include <vos_api.h>
+#include <vos_nvitem.h>
#include <vos_sched.h>
#include <linux/etherdevice.h>
#include <linux/firmware.h>
@@ -15657,6 +15658,13 @@
{
eHalStatus status;
+ if (init == INIT && init_by_reg_core_user) {
+ init_by_reg_core_user = false;
+ pr_info("driver regulatory hint is not required");
+
+ return VOS_STATUS_SUCCESS;
+ }
+
status = sme_InitChannelsForCC(pHddCtx->hHal, init);
if (HAL_STATUS_SUCCESS(status))
{
diff --git a/CORE/MAC/src/cfg/cfgProcMsg.c b/CORE/MAC/src/cfg/cfgProcMsg.c
index 3152327..11207a0 100644
--- a/CORE/MAC/src/cfg/cfgProcMsg.c
+++ b/CORE/MAC/src/cfg/cfgProcMsg.c
@@ -2156,6 +2156,14 @@
PELOGW(cfgLog(pMac, LOGW, FL("CFG hdr totParams %d intParams %d strBufSize %d/%d"),
pHdr->controlSize, pHdr->iBufSize, pHdr->sBufSize, pMac->cfg.gCfgMaxSBufSize);)
+ if (pHdr->sBufSize > (UINT_MAX -
+ (((CFG_PARAM_MAX_NUM + 3 * pMac->cfg.gCfgMaxIBufSize) << 2) +
+ sizeof(tCfgBinHdr)))) {
+ PELOGW(cfgLog(pMac, LOGW, FL("Invalid sBufSize coming from fw %d"),
+ pHdr->sBufSize);)
+ retVal = WNI_CFG_INVALID_LEN;
+ goto end;
+ }
expLen = ((CFG_PARAM_MAX_NUM + 3 * pMac->cfg.gCfgMaxIBufSize) << 2) +
pHdr->sBufSize + sizeof(tCfgBinHdr);
diff --git a/CORE/MAC/src/cfg/cfgUtil/dot11f.frms b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms
index c5f84b3..1ffb2d9 100644
--- a/CORE/MAC/src/cfg/cfgUtil/dot11f.frms
+++ b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms
@@ -2738,7 +2738,7 @@
IE ExtCap (EID_EXT_CAP)
{
- bytes[1..9];
+ bytes[1..15];
}
IE HTCaps (EID_HT_CAPABILITIES)
diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h
index 7beb4de..2c2da5c 100644
--- a/CORE/MAC/src/include/dot11f.h
+++ b/CORE/MAC/src/include/dot11f.h
@@ -32,7 +32,7 @@
* \brief Structures, function prototypes & definitions
* for working with 802.11 Frames
* This file was automatically generated by 'framesc'
- * Mon Oct 22 17:30:52 2018 from the following file(s):
+ * Mon Dec 3 16:47:12 2018 from the following file(s):
*
* dot11f.frms
*
@@ -3589,7 +3589,7 @@
typedef struct sDot11fIEExtCap {
tANI_U8 present;
tANI_U8 num_bytes;
- tANI_U8 bytes[9];
+ tANI_U8 bytes[15];
} tDot11fIEExtCap;
#define DOT11F_EID_EXTCAP ( 127 )
@@ -3597,7 +3597,7 @@
// N.B. These #defines do *not* include the EID & length
#define DOT11F_IE_EXTCAP_MIN_LEN ( 1 )
-#define DOT11F_IE_EXTCAP_MAX_LEN ( 9 )
+#define DOT11F_IE_EXTCAP_MAX_LEN ( 15 )
#ifdef __cplusplus
extern "C" {
diff --git a/CORE/MAC/src/include/parserApi.h b/CORE/MAC/src/include/parserApi.h
index b77e10f..9b4fe2f 100644
--- a/CORE/MAC/src/include/parserApi.h
+++ b/CORE/MAC/src/include/parserApi.h
@@ -376,6 +376,7 @@
uint8_t ChanAvailQuery: 1;
uint8_t fineTimingMeas: 1;
uint8_t reserved7: 1;
+ uint8_t fils_capability: 1;
};
tANI_U8
diff --git a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
index d4ea763..8554e61 100644
--- a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
@@ -71,15 +71,19 @@
tpDphHashNode pStaDs;
tpPESession pRoamSessionEntry=NULL;
tANI_U8 roamSessionId;
-#ifdef WLAN_FEATURE_11W
tANI_U32 frameLen;
-#endif
-
pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo);
+ frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo);
+ if (frameLen < sizeof(reasonCode)) {
+ PELOGE(limLog(pMac, LOGE,
+ FL("received invalid framelen %d"), frameLen);)
+ return;
+ }
+
if ((eLIM_STA_ROLE == psessionEntry->limSystemRole) &&
((eLIM_SME_WT_DISASSOC_STATE == psessionEntry->limSmeState) ||
(eLIM_SME_WT_DEAUTH_STATE == psessionEntry->limSmeState)))
@@ -126,7 +130,6 @@
PELOGE(limLog(pMac, LOGE, FL("received an unprotected deauth from AP"));)
// If the frame received is unprotected, forward it to the supplicant to initiate
// an SA query
- frameLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo);
//send the unprotected frame indication to SME
limSendSmeUnprotectedMgmtFrameInd( pMac, pHdr->fc.subType,
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index 339bc53..a3c05cb 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -1763,7 +1763,7 @@
pAddBssParams->rateSet.numRates = SIR_MAC_RATESET_EID_MAX;
}
vos_mem_copy(pAddBssParams->rateSet.rate,
- pMlmStartReq->rateSet.rate, pMlmStartReq->rateSet.numRates);
+ pMlmStartReq->rateSet.rate, pAddBssParams->rateSet.numRates);
pAddBssParams->nwType = pMlmStartReq->nwType;
@@ -1798,7 +1798,7 @@
}
vos_mem_copy(pAddBssParams->ssId.ssId,
pMlmStartReq->ssId.ssId,
- pMlmStartReq->ssId.length);
+ pAddBssParams->ssId.length);
pAddBssParams->bHiddenSSIDEn = pMlmStartReq->ssidHidden;
limLog( pMac, LOGE, FL( "TRYING TO HIDE SSID %d" ),pAddBssParams->bHiddenSSIDEn);
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index d3925fc..f4b599c 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -2643,6 +2643,16 @@
case eLIM_BT_AMP_STA_ROLE:
switch (psessionEntry->limSmeState)
{
+ /* cleanup FT session and proceed with disconnect
+ * if received disconnect from supplicant when roaming
+ * and lim state is eLIM_SME_WT_REASSOC_STATE. As the
+ * FT session would have already created but is not cleaned.
+ * This will prevent sending duplicate add bss request,
+ * if we try to disconnect and connect to the same AP
+ */
+ case eLIM_SME_WT_REASSOC_STATE:
+ limFTCleanup(pMac);
+ /* Fall through */
case eLIM_SME_ASSOCIATED_STATE:
case eLIM_SME_LINK_EST_STATE:
limLog(pMac, LOG1, FL("Rcvd SME_DISASSOC_REQ while in "
@@ -5664,7 +5674,7 @@
switch_count = session_entry->gLimChannelSwitch.switchCount;
dph_node_array_ptr = session_entry->dph.dphHashTable.pDphNodeArray;
- for (i = 0; i < (mac_ctx->lim.maxStation + 1); i++) {
+ for (i = 0; i < session_entry->dph.dphHashTable.size; i++) {
psta = dph_node_array_ptr + i;
if (!(psta && psta->added))
continue;
diff --git a/CORE/MAC/src/pe/lim/limProcessTdls.c b/CORE/MAC/src/pe/lim/limProcessTdls.c
index 0fd0050..9bed290 100644
--- a/CORE/MAC/src/pe/lim/limProcessTdls.c
+++ b/CORE/MAC/src/pe/lim/limProcessTdls.c
@@ -3565,6 +3565,44 @@
return offset;
}
+offset_t lim_get_channel_width_from_opclass(tANI_U8 *country, tANI_U8 channel,
+ tANI_U8 peer_vht_capable,
+ tANI_U8 op_class)
+{
+ op_class_map_t *class;
+ tANI_U16 i = 0;
+ offset_t offset, max_allowed;
+
+ if (peer_vht_capable &&
+ IS_FEATURE_SUPPORTED_BY_FW(DOT11AC) &&
+ IS_FEATURE_SUPPORTED_BY_DRIVER(DOT11AC))
+ max_allowed = BW80;
+ else
+ max_allowed = BW40MINUS;
+
+ if (vos_mem_compare(country,"US", 2))
+ class = us_op_class;
+ else if (vos_mem_compare(country,"EU", 2))
+ class = euro_op_class;
+ else if (vos_mem_compare(country,"JP", 2))
+ class = japan_op_class;
+ else
+ class = global_op_class;
+
+ while (class->op_class) {
+ if (op_class == class->op_class) {
+ for (i = 0; (i < 25 && class->channels[i]); i++) {
+ if (channel == class->channels[i]) {
+ offset = class->offset;
+ return (offset <= max_allowed) ? offset: BW20;
+ }
+ }
+ }
+ class++;
+ }
+
+ return BW20;
+}
tANI_U8 limGetOPClassFromChannel(tANI_U8 *country,
tANI_U8 channel,
diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c
index 547caff..e0f4560 100644
--- a/CORE/MAC/src/pe/lim/limUtils.c
+++ b/CORE/MAC/src/pe/lim/limUtils.c
@@ -2967,10 +2967,11 @@
session->gLimChannelSwitch.secondarySubBand = PHY_SINGLE_CHANNEL_CENTERED;
session->gLimWiderBWChannelSwitch.newChanWidth = 0;
- ch_offset = limGetOffChMaxBwOffsetFromChannel(
- mac_ctx->scan.countryCodeCurrent,
- ecsa_req->new_channel,
- sta_ds->mlmStaContext.vhtCapability);
+ ch_offset =
+ lim_get_channel_width_from_opclass(mac_ctx->scan.countryCodeCurrent,
+ ecsa_req->new_channel,
+ sta_ds->mlmStaContext.vhtCapability,
+ ecsa_req->op_class);
if (ch_offset == BW80) {
session->gLimWiderBWChannelSwitch.newChanWidth =
WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ;
diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h
index 5801f52..ed1f17a 100644
--- a/CORE/MAC/src/pe/lim/limUtils.h
+++ b/CORE/MAC/src/pe/lim/limUtils.h
@@ -572,9 +572,19 @@
tANI_U8 limGetOPClassFromChannel(tANI_U8 *country,
tANI_U8 channel,
tANI_U8 offset);
-tANI_U8 limGetOffChMaxBwOffsetFromChannel(tANI_U8 *country,
- tANI_U8 channel,
- tANI_U8 peerVHTCapability);
+
+/**
+ * lim_get_channel_width_from_opclass() - get the channel offset for the opclass
+ * @country: current country code
+ * @channel: channel for which width is required
+ * @peer_vht_capable: if peer is VHT capable
+ * @op_class: Opclass provided
+ *
+ * Return: channel offset for the opclass
+ */
+offset_t lim_get_channel_width_from_opclass(tANI_U8 *country, tANI_U8 channel,
+ tANI_U8 peer_vht_capable,
+ tANI_U8 op_class);
void limParseBeaconForTim(tpAniSirGlobal pMac, tANI_U8* pRxPacketInfo,
tpPESession psessionEntry);
diff --git a/CORE/SME/inc/csrNeighborRoam.h b/CORE/SME/inc/csrNeighborRoam.h
index 93bfc07..5a07210 100644
--- a/CORE/SME/inc/csrNeighborRoam.h
+++ b/CORE/SME/inc/csrNeighborRoam.h
@@ -275,7 +275,14 @@
tSirMacAddr bssId);
void csrNeighborRoamFreeNeighborRoamBSSNode(tpAniSirGlobal pMac,
tpCsrNeighborRoamBSSInfo neighborRoamBSSNode);
-
+/**
+ * csrRemoveNeighbourRoamPreauthCommand() - Remove any pending preauth
+ * command
+ * @pMac: Mac handle
+ *
+ * Return: None
+ */
+void csrRemoveNeighbourRoamPreauthCommand(tpAniSirGlobal pMac);
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
#define ROAM_SCAN_OFFLOAD_START 1
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 604f7ad..058915b 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -10253,6 +10253,9 @@
#ifndef WLAN_MDM_CODE_REDUCTION_OPT
sme_QosCsrEventInd(pMac, (v_U8_t)sessionId, SME_QOS_CSR_DISCONNECT_IND, NULL);
#endif
+#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
+ csrRemoveNeighbourRoamPreauthCommand(pMac);
+#endif
csrRoamLinkDown(pMac, sessionId);
csrRoamIssueWmStatusChange( pMac, sessionId, eCsrDeauthenticated, pSirMsg );
}
diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c
index 5fa6ab9..229ed17 100644
--- a/CORE/SME/src/csr/csrNeighborRoam.c
+++ b/CORE/SME/src/csr/csrNeighborRoam.c
@@ -5378,6 +5378,50 @@
#endif
return (val);
}
+
+void csrRemoveNeighbourRoamPreauthCommand(tpAniSirGlobal pMac)
+{
+ tListElem *entry;
+ tSmeCmd *command;
+
+ entry = csrLLPeekHead(&pMac->sme.smeCmdPendingList, LL_ACCESS_LOCK);
+ while (entry)
+ {
+ command = GET_BASE_ADDR(entry, tSmeCmd, Link);
+ if ((eSmeCommandRoam == command->command) &&
+ (eCsrPerformPreauth == command->u.roamCmd.roamReason))
+ {
+ if (csrLLRemoveEntry(&pMac->sme.smeCmdPendingList, entry,
+ LL_ACCESS_LOCK)) {
+ csrReleaseCommandPreauth(pMac, command);
+ CSR_NEIGHBOR_ROAM_STATE_TRANSITION(
+ eCSR_NEIGHBOR_ROAM_STATE_CONNECTED);
+ break;
+ }
+ }
+ entry = csrLLNext(&pMac->sme.smeCmdPendingList, entry, LL_ACCESS_LOCK);
+ }
+
+ entry = csrLLPeekHead(&pMac->roam.roamCmdPendingList, LL_ACCESS_LOCK);
+ while (entry)
+ {
+ command = GET_BASE_ADDR(entry, tSmeCmd, Link);
+ if ((eSmeCommandRoam == command->command) &&
+ (eCsrPerformPreauth == command->u.roamCmd.roamReason))
+ {
+ if (csrLLRemoveEntry(&pMac->roam.roamCmdPendingList, entry,
+ LL_ACCESS_LOCK)) {
+ csrReleaseCommandPreauth(pMac, command);
+ CSR_NEIGHBOR_ROAM_STATE_TRANSITION(
+ eCSR_NEIGHBOR_ROAM_STATE_CONNECTED);
+ break;
+ }
+ }
+ entry = csrLLNext(&pMac->roam.roamCmdPendingList, entry,
+ LL_ACCESS_LOCK);
+ }
+}
+
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
/* ---------------------------------------------------------------------------
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 7bc6f3c..eede4ba 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -2761,6 +2761,7 @@
vos_msg_t vosMessage = {0};
tANI_U32 session_id = 0;
bool active_scan;
+ tANI_U32 nTime = 0;
if (pSmeCoexInd->coexIndType == SIR_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4)
{
@@ -2788,6 +2789,11 @@
pMac->scan.fRestartIdleScan = eANI_BOOLEAN_TRUE;
pMac->scan.fCancelIdleScan = eANI_BOOLEAN_FALSE;
+ if(csrIsAllSessionDisconnected(pMac) &&
+ !HAL_STATUS_SUCCESS(csrScanTriggerIdleScan(pMac,
+ &nTime))) {
+ csrScanStartIdleScanTimer(pMac, nTime);
+ }
/*
* If aggregation during SCO is enabled, there is a
* possibility for an active BA session. This session
diff --git a/CORE/SME/src/sme_common/sme_FTApi.c b/CORE/SME/src/sme_common/sme_FTApi.c
index c601d53..e6776c9 100644
--- a/CORE/SME/src/sme_common/sme_FTApi.c
+++ b/CORE/SME/src/sme_common/sme_FTApi.c
@@ -128,7 +128,7 @@
}
#if defined WLAN_FEATURE_VOWIFI_11R_DEBUG
- smsLog( pMac, LOGE, "FT IEs Req is received in state %d",
+ smsLog( pMac, LOG1, "FT IEs Req is received in state %d",
pMac->ft.ftSmeContext.FTState);
#endif
@@ -173,10 +173,10 @@
// Delete the pre-auth node locally. Set your self back to restart pre-auth
// TBD
#if defined WLAN_FEATURE_VOWIFI_11R_DEBUG
- smsLog( pMac, LOGE,
+ smsLog( pMac, LOG1,
"Pre-auth done and now receiving---> AUTH REQ <---- in state %d",
pMac->ft.ftSmeContext.FTState);
- smsLog( pMac, LOGE, "Unhandled reception of FT IES in state %d",
+ smsLog( pMac, LOG1, "Unhandled reception of FT IES in state %d",
pMac->ft.ftSmeContext.FTState);
#endif
break;
@@ -187,7 +187,7 @@
// At this juncture we are ready to start sending Re-Assoc Req.
#if defined WLAN_FEATURE_VOWIFI_11R_DEBUG
- smsLog( pMac, LOGE, "New Reassoc Req=%pK in state %d",
+ smsLog( pMac, LOG1, "New Reassoc Req=%pK in state %d",
ft_ies, pMac->ft.ftSmeContext.FTState);
#endif
if ((pMac->ft.ftSmeContext.reassoc_ft_ies) &&
@@ -413,7 +413,7 @@
pMac->ft.ftSmeContext.FTState = eFT_REASSOC_REQ_WAIT;
#ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG
- smsLog( pMac, LOGE, FL(" Filled auth resp = %d"), *ft_ies_length);
+ smsLog( pMac, LOG1, FL(" Filled auth resp = %d"), *ft_ies_length);
#endif
sme_ReleaseGlobalLock( &pMac->sme );
return;
@@ -452,7 +452,7 @@
*ric_ies_length = pMac->ft.ftSmeContext.psavedFTPreAuthRsp->ric_ies_length;
#ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG
- smsLog( pMac, LOGE, FL(" Filled ric ies = %d"), *ric_ies_length);
+ smsLog( pMac, LOG1, FL(" Filled ric ies = %d"), *ric_ies_length);
#endif
sme_ReleaseGlobalLock( &pMac->sme );
diff --git a/CORE/SYS/legacy/src/utils/src/dot11f.c b/CORE/SYS/legacy/src/utils/src/dot11f.c
index 90af7d2..50e1df2 100644
--- a/CORE/SYS/legacy/src/utils/src/dot11f.c
+++ b/CORE/SYS/legacy/src/utils/src/dot11f.c
@@ -30,7 +30,7 @@
* \brief Structures, functions & definitions for
* working with 802.11 Frames
* This file was automatically generated by 'framesc'
- * Mon Oct 22 17:30:52 2018 from the following file(s):
+ * Mon Dec 3 16:47:12 2018 from the following file(s):
*
* dot11f.frms
*
@@ -4332,7 +4332,7 @@
if (!ielen) /* Check to ensure copying of ielen bytes */
goto endUnpackIeExtCap;
pDst->num_bytes = (tANI_U8)( ielen );
- if (ielen > 9){
+ if (ielen > 15){
pDst->present = 0;
return DOT11F_SKIPPED_BAD_IE;
}
@@ -8542,7 +8542,7 @@
{offsetof(tDot11fAssocRequest, P2PIEOpaque), offsetof(tDot11fIEP2PIEOpaque, present), 0, "P2PIEOpaque" , 0, 8, 255, SigIeP2PIEOpaque, {80, 111, 154, 9, 0}, 4, DOT11F_EID_P2PIEOPAQUE, 0, 0, },
{offsetof(tDot11fAssocRequest, WFDIEOpaque), offsetof(tDot11fIEWFDIEOpaque, present), 0, "WFDIEOpaque" , 0, 8, 255, SigIeWFDIEOpaque, {80, 111, 154, 10, 0}, 4, DOT11F_EID_WFDIEOPAQUE, 0, 0, },
{offsetof(tDot11fAssocRequest, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, 0, },
- {offsetof(tDot11fAssocRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
+ {offsetof(tDot11fAssocRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
{offsetof(tDot11fAssocRequest, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
{offsetof(tDot11fAssocRequest, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet" , 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, 0, },
{offsetof(tDot11fAssocRequest, hs20vendor_ie), offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie" , 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0}, 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
@@ -9197,7 +9197,7 @@
{offsetof(tDot11fAssocResponse, P2PAssocRes), offsetof(tDot11fIEP2PAssocRes, present), 0, "P2PAssocRes" , 0, 6, 17, SigIeP2PAssocRes, {80, 111, 154, 9, 0}, 4, DOT11F_EID_P2PASSOCRES, 0, 0, },
{offsetof(tDot11fAssocResponse, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, 0, },
{offsetof(tDot11fAssocResponse, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, 0, },
- {offsetof(tDot11fAssocResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
+ {offsetof(tDot11fAssocResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
{offsetof(tDot11fAssocResponse, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
{offsetof(tDot11fAssocResponse, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet" , 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, 0, },
{0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, };
@@ -10768,7 +10768,7 @@
{offsetof(tDot11fBeacon, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, 0, },
{offsetof(tDot11fBeacon, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, 0, },
{offsetof(tDot11fBeacon, VHTExtBssLoad), offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad" , 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
- {offsetof(tDot11fBeacon, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
+ {offsetof(tDot11fBeacon, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
{offsetof(tDot11fBeacon, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
{offsetof(tDot11fBeacon, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
{offsetof(tDot11fBeacon, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
@@ -11989,7 +11989,7 @@
{offsetof(tDot11fBeacon2, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, 0, },
{offsetof(tDot11fBeacon2, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, 0, },
{offsetof(tDot11fBeacon2, VHTExtBssLoad), offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad" , 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
- {offsetof(tDot11fBeacon2, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
+ {offsetof(tDot11fBeacon2, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
{offsetof(tDot11fBeacon2, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
{offsetof(tDot11fBeacon2, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
{offsetof(tDot11fBeacon2, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
@@ -12978,7 +12978,7 @@
{offsetof(tDot11fBeaconIEs, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, 0, },
{offsetof(tDot11fBeaconIEs, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, 0, },
{offsetof(tDot11fBeaconIEs, VHTExtBssLoad), offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad" , 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
- {offsetof(tDot11fBeaconIEs, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
+ {offsetof(tDot11fBeaconIEs, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
{offsetof(tDot11fBeaconIEs, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
{offsetof(tDot11fBeaconIEs, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
{offsetof(tDot11fBeaconIEs, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
@@ -16506,7 +16506,7 @@
{offsetof(tDot11fProbeResponse, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, 0, },
{offsetof(tDot11fProbeResponse, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, 0, },
{offsetof(tDot11fProbeResponse, VHTExtBssLoad), offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad" , 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
- {offsetof(tDot11fProbeResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
+ {offsetof(tDot11fProbeResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
{offsetof(tDot11fProbeResponse, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
{offsetof(tDot11fProbeResponse, hs20vendor_ie), offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie" , 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0}, 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
{offsetof(tDot11fProbeResponse, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
@@ -18122,7 +18122,7 @@
{offsetof(tDot11fReAssocRequest, P2PIEOpaque), offsetof(tDot11fIEP2PIEOpaque, present), 0, "P2PIEOpaque" , 0, 8, 255, SigIeP2PIEOpaque, {80, 111, 154, 9, 0}, 4, DOT11F_EID_P2PIEOPAQUE, 0, 0, },
{offsetof(tDot11fReAssocRequest, WFDIEOpaque), offsetof(tDot11fIEWFDIEOpaque, present), 0, "WFDIEOpaque" , 0, 8, 255, SigIeWFDIEOpaque, {80, 111, 154, 10, 0}, 4, DOT11F_EID_WFDIEOPAQUE, 0, 0, },
{offsetof(tDot11fReAssocRequest, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, 0, },
- {offsetof(tDot11fReAssocRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
+ {offsetof(tDot11fReAssocRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
{offsetof(tDot11fReAssocRequest, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
{offsetof(tDot11fReAssocRequest, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet" , 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, 0, },
{offsetof(tDot11fReAssocRequest, hs20vendor_ie), offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie" , 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0}, 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
@@ -19165,7 +19165,7 @@
{offsetof(tDot11fReAssocResponse, P2PAssocRes), offsetof(tDot11fIEP2PAssocRes, present), 0, "P2PAssocRes" , 0, 6, 17, SigIeP2PAssocRes, {80, 111, 154, 9, 0}, 4, DOT11F_EID_P2PASSOCRES, 0, 0, },
{offsetof(tDot11fReAssocResponse, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, 0, },
{offsetof(tDot11fReAssocResponse, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, 0, },
- {offsetof(tDot11fReAssocResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
+ {offsetof(tDot11fReAssocResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
{offsetof(tDot11fReAssocResponse, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
{offsetof(tDot11fReAssocResponse, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet" , 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, 0, },
{0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, };
@@ -20453,7 +20453,7 @@
{offsetof(tDot11fTDLSDisRsp, SuppChannels), offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels" , 0, 4, 98, SigIeSuppChannels, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
{offsetof(tDot11fTDLSDisRsp, SuppOperatingClasses), offsetof(tDot11fIESuppOperatingClasses, present), 0, "SuppOperatingClasses" , 0, 3, 34, SigIeSuppOperatingClasses, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
{offsetof(tDot11fTDLSDisRsp, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 4, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
- {offsetof(tDot11fTDLSDisRsp, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
+ {offsetof(tDot11fTDLSDisRsp, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
{offsetof(tDot11fTDLSDisRsp, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, 0, },
{offsetof(tDot11fTDLSDisRsp, TimeoutInterval), offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval" , 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
{offsetof(tDot11fTDLSDisRsp, RICData), offsetof(tDot11fIERICData, present), 0, "RICData" , 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RICDATA, 0, 0, },
@@ -21190,7 +21190,7 @@
{offsetof(tDot11fTDLSSetupReq, ExtSuppRates), offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates" , 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
{offsetof(tDot11fTDLSSetupReq, SuppChannels), offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels" , 0, 4, 98, SigIeSuppChannels, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
{offsetof(tDot11fTDLSSetupReq, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 4, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
- {offsetof(tDot11fTDLSSetupReq, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
+ {offsetof(tDot11fTDLSSetupReq, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
{offsetof(tDot11fTDLSSetupReq, SuppOperatingClasses), offsetof(tDot11fIESuppOperatingClasses, present), 0, "SuppOperatingClasses" , 0, 3, 34, SigIeSuppOperatingClasses, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
{offsetof(tDot11fTDLSSetupReq, QOSCapsStation), offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation" , 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSCAPSSTATION, 0, 0, },
{offsetof(tDot11fTDLSSetupReq, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, 0, },
@@ -21575,7 +21575,7 @@
{offsetof(tDot11fTDLSSetupRsp, ExtSuppRates), offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates" , 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
{offsetof(tDot11fTDLSSetupRsp, SuppChannels), offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels" , 0, 4, 98, SigIeSuppChannels, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
{offsetof(tDot11fTDLSSetupRsp, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 4, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
- {offsetof(tDot11fTDLSSetupRsp, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
+ {offsetof(tDot11fTDLSSetupRsp, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
{offsetof(tDot11fTDLSSetupRsp, SuppOperatingClasses), offsetof(tDot11fIESuppOperatingClasses, present), 0, "SuppOperatingClasses" , 0, 3, 34, SigIeSuppOperatingClasses, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
{offsetof(tDot11fTDLSSetupRsp, QOSCapsStation), offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation" , 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSCAPSSTATION, 0, 0, },
{offsetof(tDot11fTDLSSetupRsp, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, 0, },
@@ -22723,16 +22723,13 @@
if (pIe)
{
- if ((nBufRemaining < pIe->minSize - pIe->noui - 2U) ||
- (len < pIe->minSize - pIe->noui - 2U))
+ if ((nBufRemaining < pIe->minSize - pIe->noui - 2U))
{
- FRAMES_LOG4(pCtx, FRLOGW, FRFL("The IE %s must "
+ FRAMES_LOG3(pCtx, FRLOGW, FRFL("The IE %s must "
"be at least %d bytes in size, but "
"there are only %d bytes remaining in "
- "this frame or the IE reports a size "
- "of %d bytes.\n"),
- pIe->name, pIe->minSize, nBufRemaining,
- (len + pIe->noui + 2U));
+ "this frame.\n"),
+ pIe->name, pIe->minSize, nBufRemaining);
FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
status |= DOT11F_INCOMPLETE_IE;
FRAMES_DBG_BREAK();
@@ -22740,6 +22737,14 @@
}
else
{
+ if (len < pIe->minSize - pIe->noui - 2U) {
+ FRAMES_LOG3(pCtx, FRLOGW, FRFL("The IE %s must "
+ "be at least %d bytes in size, but "
+ "there are only %d bytes in the IE\n"),
+ pIe->name, pIe->minSize, (len + pIe->noui + 2U));
+ goto skip_ie;
+ }
+
if (len > pIe->maxSize - pIe->noui - 2U){
FRAMES_LOG1(pCtx, FRLOGW, FRFL("The IE %s reports "
"an unexpectedly large size; it is presumably "
@@ -22752,7 +22757,7 @@
countOffset = ( (0 != pIe->arraybound) * ( *(tANI_U16* )(pFrm + pIe->countOffset)));
if (0 != pIe->arraybound && countOffset >= pIe->arraybound) {
status |= DOT11F_DUPLICATE_IE;
- goto skip_dup_ie;
+ goto skip_ie;
}
switch (pIe->sig)
{
@@ -23232,7 +23237,7 @@
status |= DOT11F_UNKNOWN_IES;
}
-skip_dup_ie:
+skip_ie:
pBufRemaining += len;
if (len > nBufRemaining)
diff --git a/CORE/SYS/legacy/src/utils/src/parserApi.c b/CORE/SYS/legacy/src/utils/src/parserApi.c
index d71afcd..3c6111f 100644
--- a/CORE/SYS/legacy/src/utils/src/parserApi.c
+++ b/CORE/SYS/legacy/src/utils/src/parserApi.c
@@ -1110,6 +1110,8 @@
}
}
+ p_ext_cap->fils_capability = 0;
+
if (pDot11f->present)
{
/* Need to compute the num_bytes based on bits set */
diff --git a/CORE/VOSS/inc/vos_nvitem.h b/CORE/VOSS/inc/vos_nvitem.h
index f86bf80..fd1928c 100644
--- a/CORE/VOSS/inc/vos_nvitem.h
+++ b/CORE/VOSS/inc/vos_nvitem.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2015, 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -47,6 +47,8 @@
#include "wlan_nv.h"
#include "wlan_nv2.h"
+extern bool init_by_reg_core_user;
+
/* Maximum number of channels per country can be ignored */
#define MAX_CHANNELS_IGNORE 10
#define MAX_COUNTRY_IGNORE 5
diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c
index 35ab905..d083f6a 100644
--- a/CORE/VOSS/src/vos_nvitem.c
+++ b/CORE/VOSS/src/vos_nvitem.c
@@ -60,6 +60,8 @@
#define IEEE80211_CHAN_NO_80MHZ 1<<7
#endif
+bool init_by_reg_core_user;
+
#ifdef CONFIG_ENABLE_LINUX_REG
static v_REGDOMAIN_t cur_reg_domain = REGDOMAIN_COUNT;
@@ -4064,6 +4066,9 @@
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO,
"cfg80211 reg notifier callback for country for initiator %d", request->initiator);
+ pr_info("country: %c%c and initiator %d", request->alpha2[0],
+ request->alpha2[1], request->initiator);
+
if (NULL == pHddCtx)
{
VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
@@ -4204,6 +4209,9 @@
}
else
{
+ if (WLAN_HDD_IS_LOAD_IN_PROGRESS(pHddCtx))
+ init_by_reg_core_user = true;
+
sme_GenericChangeCountryCode(pHddCtx->hHal, country_code,
temp_reg_domain);
}