qcacld-3.0: Send multiple ssid probe req to same bss during join procedure

In some instances, AP does not respond to probe req
causing join timeout at STA and no connection.
To solve this,send multiple probe requests(every 200ms)
to AP until join failure timeout(1 sec) expiry,
if single bssid case retry same bss again
(configurable via ini, max allowed tries 2).

Change-Id: I7a7eeedcc24db1a74cd186ff957c638a39cdea6d
CRs-Fixed: 2763815
This commit is contained in:
Amruta Kulkarni 2020-08-26 14:55:12 -07:00 committed by snandini
parent 02a1f113c8
commit 697f1926d1
5 changed files with 8 additions and 83 deletions

View File

@ -390,8 +390,6 @@ static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc,
cfg_get(psoc, CFG_DFS_CHAN_AGEOUT_TIME);
gen->sae_connect_retries =
cfg_get(psoc, CFG_SAE_CONNECION_RETRIES);
gen->join_failure_retry_interval =
cfg_get(psoc, CFG_JOIN_FAILURE_RETRY_INTERVAL);
}
static void mlme_init_edca_ani_cfg(struct wlan_mlme_edca_params *edca_params)

View File

@ -781,28 +781,6 @@
0, \
"WiFi Location Service(WLS) is 6Ghz capable or not")
/*
* <ini>
* join_failure_retry_interval - Set join failure retry interval (in ms)
*
* @Min: 0
* @Max: 3000
* @Default: 50
*
* This ini to set the join failure retry interval in ms
*
* Related: None.
* Supported Feature: General
*
* Usage: Internal
*
* </ini>
*/
#define CFG_JOIN_FAILURE_RETRY_INTERVAL CFG_INI_UINT("join_failure_retry_interval", \
0, 3000, 50, CFG_VALUE_OR_DEFAULT, \
"Set join failure retry time in ms")
#define CFG_GENERIC_ALL \
CFG(CFG_ENABLE_DEBUG_PACKET_LOG) \
CFG(CFG_PMF_SA_QUERY_MAX_RETRIES) \
@ -835,6 +813,5 @@
CFG(CFG_ENABLE_RING_BUFFER) \
CFG(CFG_DFS_CHAN_AGEOUT_TIME) \
CFG(CFG_SAE_CONNECION_RETRIES) \
CFG(CFG_JOIN_FAILURE_RETRY_INTERVAL) \
CFG(CFG_WLS_6GHZ_CAPABLE)
#endif /* __CFG_MLME_GENERIC_H */

View File

@ -1212,7 +1212,6 @@ struct wlan_mlme_ratemask {
* @dual_sta_roam_fw_support: Firmware support for dual sta roaming feature
* @sae_connect_retries: sae connect retry bitmask
* @wls_6ghz_capable: wifi location service(WLS) is 6ghz capable
* @join_failure_retry_interval: Join failure retry interval
*/
struct wlan_mlme_generic {
uint32_t band_capability;
@ -1255,7 +1254,6 @@ struct wlan_mlme_generic {
bool dual_sta_roam_fw_support;
uint32_t sae_connect_retries;
bool wls_6ghz_capable;
uint16_t join_failure_retry_interval;
};
/*

View File

@ -2765,14 +2765,12 @@ static void lim_process_switch_channel_join_req(
&session_entry->lim_join_req->addIEScan.length,
session_entry->lim_join_req->addIEScan.addIEdata);
if (session_entry->opmode == QDF_P2P_CLIENT_MODE) {
/* Activate Join Periodic Probe Req timer */
if (tx_timer_activate
(&mac_ctx->lim.lim_timers.gLimPeriodicJoinProbeReqTimer)
!= TX_SUCCESS) {
pe_err("Periodic JoinReq timer activate failed");
goto error;
}
/* Activate Join Periodic Probe Req timer */
if (tx_timer_activate
(&mac_ctx->lim.lim_timers.gLimPeriodicJoinProbeReqTimer)
!= TX_SUCCESS) {
pe_err("Periodic JoinReq timer activate failed");
goto error;
}
return;

View File

@ -408,7 +408,6 @@ static QDF_STATUS csr_roam_start_roaming_timer(struct mac_context *mac,
static QDF_STATUS csr_roam_stop_roaming_timer(struct mac_context *mac,
uint32_t sessionId);
static void csr_roam_roaming_timer_handler(void *pv);
static void csr_roam_join_failure_retry_connect_handler(void *pv);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
static void csr_roam_roaming_offload_timer_action(struct mac_context *mac_ctx,
uint32_t interval, uint8_t session_id, uint8_t action);
@ -9159,8 +9158,6 @@ static void csr_roam_join_rsp_processor(struct mac_context *mac,
bool retry_same_bss = false;
bool attempt_next_bss = true;
enum csr_akm_type auth_type = eCSR_AUTH_TYPE_NONE;
struct wlan_mlme_psoc_ext_obj *mlme_obj;
uint16_t retry_interval;
if (!pSmeJoinRsp) {
sme_err("Sme Join Response is NULL");
@ -9173,11 +9170,6 @@ static void csr_roam_join_rsp_processor(struct mac_context *mac,
return;
}
mlme_obj = mlme_get_psoc_ext_obj(mac->psoc);
if (!mlme_obj)
retry_interval = 0;
prev_connect_info = &session_ptr->prev_assoc_ap_info;
/* The head of the active list is the request we sent */
pEntry = csr_nonscan_active_ll_peek_head(mac, LL_ACCESS_LOCK);
@ -9316,6 +9308,8 @@ static void csr_roam_join_rsp_processor(struct mac_context *mac,
if (csr_ll_count(&bss_list->List) == 1) {
retry_same_bss = true;
sme_err("retry_same_bss is set");
wlan_mlme_get_sae_assoc_retry_count(mac->psoc,
&max_retry_count);
}
}
@ -9360,19 +9354,9 @@ static void csr_roam_join_rsp_processor(struct mac_context *mac,
QDF_STATUS_E_FAILURE);
}
retry_interval = mlme_obj->cfg.gen.join_failure_retry_interval;
if (pCommand && attempt_next_bss) {
if (retry_interval && use_same_bss) {
qdf_mc_timer_stop(&session_ptr->join_retry_timer);
session_ptr->roamingTimerInfo.vdev_id = pSmeJoinRsp->vdev_id;
qdf_mc_timer_start(&session_ptr->join_retry_timer, retry_interval);
sme_err("Retry sending join req,after timer expiry : %d ms", retry_interval);
return;
} else {
csr_roam(mac, pCommand, use_same_bss);
return;
}
}
/*
@ -12542,31 +12526,6 @@ rel:
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
}
void csr_roam_join_failure_retry_connect_handler(void *pv)
{
struct csr_timer_info *info = pv;
struct mac_context *mac = info->mac;
uint32_t vdev_id = info->vdev_id;
struct csr_roam_session *pSession = CSR_GET_SESSION(mac, vdev_id);
tListElem *pEntry = NULL;
tSmeCmd *pCommand = NULL;
if (!pSession) {
sme_err(" session %d not found ", vdev_id);
return;
}
pEntry = csr_nonscan_active_ll_peek_head(mac, LL_ACCESS_LOCK);
if (pEntry)
pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link);
if (pCommand) {
sme_err("Join failure timer expired,send join req");
csr_roam(mac, pCommand, true);
}
}
QDF_STATUS csr_roam_start_roaming_timer(struct mac_context *mac,
uint32_t vdev_id,
uint32_t interval)
@ -16504,10 +16463,6 @@ QDF_STATUS csr_setup_vdev_session(struct vdev_mlme_obj *vdev_mlme)
return status;
}
status = qdf_mc_timer_init(&session->join_retry_timer,
QDF_TIMER_TYPE_SW,
csr_roam_join_failure_retry_connect_handler,
&session->roamingTimerInfo);
if (QDF_IS_STATUS_ERROR(status)) {
sme_err("timer init failed for join failure timer");
return status;
@ -16585,7 +16540,6 @@ void csr_cleanup_vdev_session(struct mac_context *mac, uint8_t vdev_id)
&pSession->prev_assoc_ap_info);
qdf_mc_timer_destroy(&pSession->hTimerRoaming);
qdf_mc_timer_destroy(&pSession->roaming_offload_timer);
qdf_mc_timer_destroy(&pSession->join_retry_timer);
csr_init_session(mac, vdev_id);
}
}