wlan: include wesmode support again
Customer has requested to include wesmode support
again.
Remove WESMODE check for REASSOC command
Change-Id: I8f4d9b1c755db2ec510bc9574330cebe57b0cbf6
CRs-Fixed: 565048
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index eec00fb..f22957f 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -825,6 +825,12 @@
#define CFG_IMMEDIATE_ROAM_RSSI_DIFF_MAX (125)
#define CFG_IMMEDIATE_ROAM_RSSI_DIFF_DEFAULT (0)
+/*This parameter is used to set Wireless Extended Security Mode.*/
+#define CFG_ENABLE_WES_MODE_NAME "gWESModeEnabled"
+#define CFG_ENABLE_WES_MODE_NAME_MIN (0)
+#define CFG_ENABLE_WES_MODE_NAME_MAX (1)
+#define CFG_ENABLE_WES_MODE_NAME_DEFAULT (0)
+
#define CFG_ROAM_SCAN_N_PROBES "gRoamScanNProbes"
#define CFG_ROAM_SCAN_N_PROBES_MIN (1)
#define CFG_ROAM_SCAN_N_PROBES_MAX (10)
@@ -2116,6 +2122,7 @@
v_BOOL_t isFastTransitionEnabled;
v_U8_t RoamRssiDiff;
v_U8_t nImmediateRoamRssiDiff;
+ v_BOOL_t isWESModeEnabled;
#endif
#ifdef FEATURE_WLAN_OKC
v_BOOL_t isOkcIniFeatureEnabled;
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index bd26c4c..b307dc3 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -102,6 +102,12 @@
sme_setRoamIntraBand((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->nRoamIntraBand);
}
+static void cbNotifySetWESMode(hdd_context_t *pHddCtx, unsigned long NotifyId)
+{
+ // at the point this routine is called, the value in the cfg_ini table has already been updated
+ sme_UpdateWESMode((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->isWESModeEnabled);
+}
+
static void cbNotifySetRoamScanNProbes(hdd_context_t *pHddCtx, unsigned long NotifyId)
{
sme_UpdateRoamScanNProbes((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->nProbes);
@@ -1120,6 +1126,13 @@
CFG_IMMEDIATE_ROAM_RSSI_DIFF_MAX,
cbNotifySetImmediateRoamRssiDiff, 0),
+ REG_DYNAMIC_VARIABLE( CFG_ENABLE_WES_MODE_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, isWESModeEnabled,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_ENABLE_WES_MODE_NAME_DEFAULT,
+ CFG_ENABLE_WES_MODE_NAME_MIN,
+ CFG_ENABLE_WES_MODE_NAME_MAX,
+ cbNotifySetWESMode, 0),
#endif
#ifdef FEATURE_WLAN_OKC
REG_DYNAMIC_VARIABLE( CFG_OKC_FEATURE_ENABLED_NAME, WLAN_PARAM_Integer,
@@ -3036,6 +3049,7 @@
#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [RoamRssiDiff] Value = [%lu] ",pHddCtx->cfg_ini->RoamRssiDiff);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [ImmediateRoamRssiDiff] Value = [%lu] ",pHddCtx->cfg_ini->nImmediateRoamRssiDiff);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [isWESModeEnabled] Value = [%lu] ",pHddCtx->cfg_ini->isWESModeEnabled);
#endif
#ifdef FEATURE_WLAN_OKC
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [OkcEnabled] Value = [%lu] ",pHddCtx->cfg_ini->isOkcIniFeatureEnabled);
@@ -4482,6 +4496,7 @@
smeConfig.csrConfig.isFastTransitionEnabled = pConfig->isFastTransitionEnabled;
smeConfig.csrConfig.RoamRssiDiff = pConfig->RoamRssiDiff;
smeConfig.csrConfig.nImmediateRoamRssiDiff = pConfig->nImmediateRoamRssiDiff;
+ smeConfig.csrConfig.isWESModeEnabled = pConfig->isWESModeEnabled;
#endif
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
smeConfig.csrConfig.isRoamOffloadScanEnabled = pConfig->isRoamOffloadScanEnabled;
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index a49e156..1128daa 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -2686,7 +2686,60 @@
sme_HandoffRequest(pHddCtx->hHal, &handoffInfo);
#endif
}
-#endif
+ else if (strncmp(command, "SETWESMODE", 10) == 0)
+ {
+ tANI_U8 *value = command;
+ tANI_BOOLEAN wesMode = CFG_ENABLE_WES_MODE_NAME_DEFAULT;
+
+ /* Move pointer to ahead of SETWESMODE<delimiter> */
+ value = value + 11;
+ /* Convert the value from ascii to integer */
+ ret = kstrtou8(value, 10, &wesMode);
+ if (ret < 0)
+ {
+ /* If the input value is greater than max value of datatype, then also
+ kstrtou8 fails */
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: kstrtou8 failed range [%d - %d]", __func__,
+ CFG_ENABLE_WES_MODE_NAME_MIN,
+ CFG_ENABLE_WES_MODE_NAME_MAX);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if ((wesMode < CFG_ENABLE_WES_MODE_NAME_MIN) ||
+ (wesMode > CFG_ENABLE_WES_MODE_NAME_MAX))
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "WES Mode value %d is out of range"
+ " (Min: %d Max: %d)", wesMode,
+ CFG_ENABLE_WES_MODE_NAME_MIN,
+ CFG_ENABLE_WES_MODE_NAME_MAX);
+ ret = -EINVAL;
+ goto exit;
+ }
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ "%s: Received Command to Set WES Mode rssi diff = %d", __func__, wesMode);
+
+ pHddCtx->cfg_ini->isWESModeEnabled = wesMode;
+ sme_UpdateWESMode((tHalHandle)(pHddCtx->hHal), wesMode);
+ }
+ else if (strncmp(priv_data.buf, "GETWESMODE", 10) == 0)
+ {
+ tANI_BOOLEAN wesMode = sme_GetWESMode((tHalHandle)(pHddCtx->hHal));
+ char extra[32];
+ tANI_U8 len = 0;
+
+ len = snprintf(extra, sizeof(extra), "%s %d", command, wesMode);
+ if (copy_to_user(priv_data.buf, &extra, len + 1))
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: failed to copy data to user buffer", __func__);
+ ret = -EFAULT;
+ goto exit;
+ }
+ }
+#endif /* WLAN_FEATURE_VOWIFI_11R || FEATURE_WLAN_CCX || FEATURE_WLAN_LFR */
#ifdef FEATURE_WLAN_LFR
else if (strncmp(command, "SETFASTROAM", 11) == 0)
{
@@ -2949,6 +3002,7 @@
pHddCtx->cfg_ini->isOkcIniFeatureEnabled = okcMode;
}
+#endif /* FEATURE_WLAN_OKC */
else if (strncmp(priv_data.buf, "GETROAMSCANCONTROL", 18) == 0)
{
tANI_BOOLEAN roamScanControl = sme_GetRoamScanControl((tHalHandle)(pHddCtx->hHal));
@@ -2965,7 +3019,6 @@
goto exit;
}
}
-#endif
#ifdef WLAN_FEATURE_PACKET_FILTERING
else if (strncmp(command, "ENABLE_PKTFILTER_IPV6", 21) == 0)
{
diff --git a/CORE/MAC/inc/sirMacProtDef.h b/CORE/MAC/inc/sirMacProtDef.h
index f163a9c..609812a 100644
--- a/CORE/MAC/inc/sirMacProtDef.h
+++ b/CORE/MAC/inc/sirMacProtDef.h
@@ -632,6 +632,9 @@
#define SIR_MAC_CLEAR_CAPABILITY(u16value, bitname) \
((u16value) &= (~(SIR_MAC_SET_##bitname(0))))
+#define IS_WES_MODE_ENABLED(x) \
+ ((x)->roam.configParam.isWESModeEnabled)
+
#define BA_RECIPIENT 1
#define BA_INITIATOR 2
#define BA_BOTH_DIRECTIONS 3
diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
index 23e3f46..d8b867a 100644
--- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
@@ -2119,7 +2119,8 @@
if ((eLIM_STA_ROLE == psessionEntry->limSystemRole) &&
(VOS_TRUE == vos_mem_compare(psessionEntry->selfMacAddr,
&pHdr->da[0], sizeof(tSirMacAddr))) &&
- vos_mem_compare(pVendorSpecific->Oui, Oui, 3))
+ IS_WES_MODE_ENABLED(pMac) &&
+ vos_mem_compare(pVendorSpecific->Oui, Oui, 3))
{
PELOGE( limLog( pMac, LOGW, FL("Received Vendor specific action frame, OUI %x %x %x"),
pVendorSpecific->Oui[0], pVendorSpecific->Oui[1], pVendorSpecific->Oui[2]);)
@@ -2132,8 +2133,9 @@
else
{
limLog( pMac, LOGE, FL("Dropping the vendor specific action frame because of( "
- "OUI mismatch (%02x %02x %02x) or "
+ "WES Mode not enabled (WESMODE = %d) or OUI mismatch (%02x %02x %02x) or "
"not received with SelfSta Mac address) system role = %d"),
+ IS_WES_MODE_ENABLED(pMac),
pVendorSpecific->Oui[0], pVendorSpecific->Oui[1],
pVendorSpecific->Oui[2],
psessionEntry->limSystemRole );
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 55bd804..e796291 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1064,6 +1064,7 @@
tANI_U8 isFastTransitionEnabled;
tANI_U8 RoamRssiDiff;
tANI_U8 nImmediateRoamRssiDiff;
+ tANI_BOOLEAN isWESModeEnabled;
#endif
#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index bf954e3..84d3bd2 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -626,6 +626,7 @@
tANI_U8 nImmediateRoamRssiDiff;
tANI_BOOLEAN nRoamPrefer5GHz;
tANI_BOOLEAN nRoamIntraBand;
+ tANI_BOOLEAN isWESModeEnabled;
tANI_BOOLEAN nRoamScanControl;
tANI_U8 nProbes;
tANI_U16 nRoamScanHomeAwayTime;
@@ -991,6 +992,7 @@
#endif
#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
tANI_U8 RoamRssiDiff;
+ tANI_BOOLEAN isWESModeEnabled;
#endif
}tCsrRoamStruct;
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 35b9756..24d2eb7 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -115,6 +115,7 @@
#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
tANI_U8 isFastTransitionEnabled;
tANI_U8 RoamRssiDiff;
+ tANI_BOOLEAN isWESModeEnabled;
#endif
tANI_BOOLEAN fScanOffload;
tANI_U8 isAmsduSupportInAMPDU;
@@ -2460,6 +2461,17 @@
v_BOOL_t isFastTransitionEnabled);
/* ---------------------------------------------------------------------------
+ \fn sme_UpdateWESMode
+ \brief Update WESMode
+ This function is called through dynamic setConfig callback function
+ to configure isWESModeEnabled
+ \param hHal - HAL handle for device
+ \param isWESModeEnabled - Enable/Disable WES Mode
+ \- return Success or failure
+ -------------------------------------------------------------------------*/
+eHalStatus sme_UpdateWESMode(tHalHandle hHal, v_BOOL_t isWESModeEnabled);
+
+/* ---------------------------------------------------------------------------
\fn sme_SetRoamScanControl
\brief Set roam scan control
This function is called to set roam scan control
@@ -2742,6 +2754,15 @@
tANI_BOOLEAN sme_getIsCcxFeatureEnabled(tHalHandle hHal);
/*--------------------------------------------------------------------------
+ \brief sme_getWESMode() - getWES Mode
+ This is a synchronous call
+ \param hHal - The handle returned by macOpen.
+ \return v_U8_t - WES Mode Enabled(1)/Disabled(0)
+ \sa
+ --------------------------------------------------------------------------*/
+v_BOOL_t sme_GetWESMode(tHalHandle hHal);
+
+/*--------------------------------------------------------------------------
\brief sme_GetRoamScanControl() - get scan control
This is a synchronous call
\param hHal - The handle returned by macOpen.
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index c692528..3801414 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1650,6 +1650,7 @@
pMac->roam.configParam.nImmediateRoamRssiDiff );
pMac->roam.configParam.nRoamPrefer5GHz = pParam->nRoamPrefer5GHz;
pMac->roam.configParam.nRoamIntraBand = pParam->nRoamIntraBand;
+ pMac->roam.configParam.isWESModeEnabled = pParam->isWESModeEnabled;
pMac->roam.configParam.nProbes = pParam->nProbes;
pMac->roam.configParam.nRoamScanHomeAwayTime = pParam->nRoamScanHomeAwayTime;
#endif
@@ -1808,6 +1809,7 @@
pParam->nImmediateRoamRssiDiff = pMac->roam.configParam.nImmediateRoamRssiDiff;
pParam->nRoamPrefer5GHz = pMac->roam.configParam.nRoamPrefer5GHz;
pParam->nRoamIntraBand = pMac->roam.configParam.nRoamIntraBand;
+ pParam->isWESModeEnabled = pMac->roam.configParam.isWESModeEnabled;
pParam->nProbes = pMac->roam.configParam.nProbes;
pParam->nRoamScanHomeAwayTime = pMac->roam.configParam.nRoamScanHomeAwayTime;
#endif
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 8041cf4..ed37bef 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -7833,6 +7833,36 @@
}
/* ---------------------------------------------------------------------------
+ \fn sme_UpdateWESMode
+ \brief Update WES Mode
+ This function is called through dynamic setConfig callback function
+ to configure isWESModeEnabled
+ \param hHal - HAL handle for device
+ \return eHAL_STATUS_SUCCESS - SME update isWESModeEnabled config successfully.
+ Other status means SME is failed to update isWESModeEnabled.
+ -------------------------------------------------------------------------*/
+
+eHalStatus sme_UpdateWESMode(tHalHandle hHal, v_BOOL_t isWESModeEnabled)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+
+ status = sme_AcquireGlobalLock( &pMac->sme );
+ if ( HAL_STATUS_SUCCESS( status ) )
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
+ "LFR runtime successfully set WES Mode to %d - old value is %d - roam state is %d",
+ isWESModeEnabled,
+ pMac->roam.configParam.isWESModeEnabled,
+ pMac->roam.neighborRoamInfo.neighborRoamState);
+ pMac->roam.configParam.isWESModeEnabled = isWESModeEnabled;
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+
+ return status ;
+}
+
+/* ---------------------------------------------------------------------------
\fn sme_SetRoamScanControl
\brief Set roam scan control
This function is called to set roam scan control
@@ -8599,6 +8629,19 @@
}
/*--------------------------------------------------------------------------
+ \brief sme_GetWESMode() - get WES Mode
+ This is a synchronous call
+ \param hHal - The handle returned by macOpen
+ \return v_U8_t - WES Mode Enabled(1)/Disabled(0)
+ \sa
+ --------------------------------------------------------------------------*/
+v_BOOL_t sme_GetWESMode(tHalHandle hHal)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ return pMac->roam.configParam.isWESModeEnabled;
+}
+
+/*--------------------------------------------------------------------------
\brief sme_GetRoamScanControl() - get scan control
This is a synchronous call
\param hHal - The handle returned by macOpen.