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:
parent
02a1f113c8
commit
697f1926d1
@ -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)
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user