mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 07:37:31 -04:00
qcacld-3.0: Add SAE auth timer
Add changes related to SAE auth timer to handle SAE authentication.
Start SAE auth timer of duration LIM_AUTH_SAE_TIMER_MS when driver
wants to trigger SAE authentication. If SAE authentication is not
completed in LIM_AUTH_SAE_TIMER_MS, then report failure to
supplicant.
Change-Id: I65f0cb01faa1194c133013eaea4a5d8554a045d2
CRs-Fixed: 2029357
This commit is contained in:
parent
1ccc133bf4
commit
c56735fe68
8 changed files with 107 additions and 3 deletions
|
|
@ -329,6 +329,9 @@ typedef struct sLimTimers {
|
|||
TX_TIMER gLimActiveToPassiveChannelTimer;
|
||||
TX_TIMER g_lim_periodic_auth_retry_timer;
|
||||
|
||||
/* SAE authentication related timer */
|
||||
TX_TIMER sae_auth_timer;
|
||||
|
||||
/* ********************TIMER SECTION ENDS************************************************** */
|
||||
/* ALL THE FIELDS BELOW THIS CAN BE ZEROED OUT in lim_initialize */
|
||||
/* **************************************************************************************** */
|
||||
|
|
|
|||
|
|
@ -774,6 +774,8 @@ struct sir_mgmt_msg {
|
|||
(SIR_LIM_TIMEOUT_MSG_START + 0x2C)
|
||||
#define SIR_LIM_AUTH_RETRY_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x2D)
|
||||
|
||||
#define SIR_LIM_AUTH_SAE_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x2E)
|
||||
|
||||
#define SIR_LIM_MSG_TYPES_END (SIR_LIM_MSG_TYPES_BEGIN+0xFF)
|
||||
|
||||
/* PMM message types */
|
||||
|
|
|
|||
|
|
@ -1628,6 +1628,7 @@ static void lim_process_messages(tpAniSirGlobal mac_ctx,
|
|||
case SIR_LIM_DEAUTH_ACK_TIMEOUT:
|
||||
case SIR_LIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE:
|
||||
case SIR_LIM_AUTH_RETRY_TIMEOUT:
|
||||
case SIR_LIM_AUTH_SAE_TIMEOUT:
|
||||
/* These timeout messages are handled by MLM sub module */
|
||||
lim_process_mlm_req_messages(mac_ctx, msg);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -63,6 +63,48 @@ static void lim_process_auth_rsp_timeout(tpAniSirGlobal, uint32_t);
|
|||
static void lim_process_periodic_join_probe_req_timer(tpAniSirGlobal);
|
||||
static void lim_process_auth_retry_timer(tpAniSirGlobal);
|
||||
|
||||
/**
|
||||
* lim_process_sae_auth_timeout() - This function is called to process sae
|
||||
* auth timeout
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
*
|
||||
* @Return: None
|
||||
*/
|
||||
static void lim_process_sae_auth_timeout(tpAniSirGlobal mac_ctx)
|
||||
{
|
||||
tpPESession session;
|
||||
|
||||
session = pe_find_session_by_session_id(mac_ctx,
|
||||
mac_ctx->lim.limTimers.sae_auth_timer.sessionId);
|
||||
if (session == NULL) {
|
||||
pe_err("Session does not exist for given session id");
|
||||
return;
|
||||
}
|
||||
|
||||
pe_warn("SAE auth timeout sessionid %d mlmstate %X SmeState %X",
|
||||
session->peSessionId, session->limMlmState,
|
||||
session->limSmeState);
|
||||
|
||||
switch (session->limMlmState) {
|
||||
case eLIM_MLM_WT_SAE_AUTH_STATE:
|
||||
/*
|
||||
* SAE authentication is not completed. Restore from
|
||||
* auth state.
|
||||
*/
|
||||
if (session->pePersona == QDF_STA_MODE)
|
||||
lim_restore_from_auth_state(mac_ctx,
|
||||
eSIR_SME_AUTH_TIMEOUT_RESULT_CODE,
|
||||
eSIR_MAC_UNSPEC_FAILURE_REASON, session);
|
||||
break;
|
||||
default:
|
||||
/* SAE authentication is timed out in unexpected state */
|
||||
pe_err("received unexpected SAE auth timeout in state %X",
|
||||
session->limMlmState);
|
||||
lim_print_mlm_state(mac_ctx, LOGE, session->limMlmState);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* lim_process_mlm_req_messages() - process mlm request messages
|
||||
* @mac_ctx: global MAC context
|
||||
|
|
@ -145,6 +187,9 @@ void lim_process_mlm_req_messages(tpAniSirGlobal mac_ctx,
|
|||
case SIR_LIM_AUTH_RETRY_TIMEOUT:
|
||||
lim_process_auth_retry_timer(mac_ctx);
|
||||
break;
|
||||
case SIR_LIM_AUTH_SAE_TIMEOUT:
|
||||
lim_process_sae_auth_timeout(mac_ctx);
|
||||
break;
|
||||
case LIM_MLM_TSPEC_REQ:
|
||||
default:
|
||||
break;
|
||||
|
|
@ -1073,6 +1118,17 @@ static QDF_STATUS lim_process_mlm_auth_req_sae(tpAniSirGlobal mac_ctx,
|
|||
MTRACE(mac_trace(mac_ctx, TRACE_CODE_MLM_STATE, session->peSessionId,
|
||||
session->limMlmState));
|
||||
|
||||
mac_ctx->lim.limTimers.sae_auth_timer.sessionId =
|
||||
session->peSessionId;
|
||||
|
||||
/* Activate SAE auth timer */
|
||||
MTRACE(mac_trace(mac_ctx, TRACE_CODE_TIMER_ACTIVATE,
|
||||
session->peSessionId, eLIM_AUTH_SAE_TIMER));
|
||||
if (tx_timer_activate(&mac_ctx->lim.limTimers.sae_auth_timer)
|
||||
!= TX_SUCCESS) {
|
||||
pe_err("could not start Auth SAE timer");
|
||||
}
|
||||
|
||||
return qdf_status;
|
||||
}
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2011-2017 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||
*
|
||||
|
|
@ -54,6 +54,12 @@
|
|||
/* Lim Periodic Auth Retry timer default 60 ms */
|
||||
#define LIM_AUTH_RETRY_TIMER_MS 60
|
||||
|
||||
/*
|
||||
* SAE auth timer of 5secs. This is required for duration of entire SAE
|
||||
* authentication.
|
||||
*/
|
||||
#define LIM_AUTH_SAE_TIMER_MS 5000
|
||||
|
||||
|
||||
/* This timer is a periodic timer which expires at every 1 sec to
|
||||
convert ACTIVE DFS channel to DFS channels */
|
||||
|
|
@ -193,6 +199,20 @@ static bool lim_create_non_ap_timers(tpAniSirGlobal pMac)
|
|||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* SAE auth timer of 5secs. This is required for duration of entire SAE
|
||||
* authentication.
|
||||
*/
|
||||
if ((tx_timer_create(pMac,
|
||||
&pMac->lim.limTimers.sae_auth_timer,
|
||||
"SAE AUTH Timer",
|
||||
lim_timer_handler, SIR_LIM_AUTH_SAE_TIMEOUT,
|
||||
SYS_MS_TO_TICKS(LIM_AUTH_SAE_TIMER_MS), 0,
|
||||
TX_NO_ACTIVATE)) != TX_SUCCESS) {
|
||||
pe_err("could not create SAE AUTH Timer");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
|
|
@ -379,6 +399,7 @@ err_timer:
|
|||
tx_timer_delete(&pMac->lim.limTimers.gLimPeriodicProbeReqTimer);
|
||||
tx_timer_delete(&pMac->lim.limTimers.gLimP2pSingleShotNoaInsertTimer);
|
||||
tx_timer_delete(&pMac->lim.limTimers.gLimActiveToPassiveChannelTimer);
|
||||
tx_timer_delete(&pMac->lim.limTimers.sae_auth_timer);
|
||||
|
||||
if (NULL != pMac->lim.gLimPreAuthTimerTable.pTable) {
|
||||
for (i = 0; i < pMac->lim.gLimPreAuthTimerTable.numEntry; i++)
|
||||
|
|
@ -924,6 +945,21 @@ void lim_deactivate_and_change_timer(tpAniSirGlobal pMac, uint32_t timerId)
|
|||
}
|
||||
break;
|
||||
|
||||
case eLIM_AUTH_SAE_TIMER:
|
||||
if (tx_timer_deactivate
|
||||
(&pMac->lim.limTimers.sae_auth_timer)
|
||||
!= TX_SUCCESS)
|
||||
pe_err("Unable to deactivate SAE auth timer");
|
||||
|
||||
/* Change timer to reactivate it in future */
|
||||
val = SYS_MS_TO_TICKS(LIM_AUTH_SAE_TIMER_MS);
|
||||
|
||||
if (tx_timer_change(&pMac->lim.limTimers.sae_auth_timer,
|
||||
val, 0) != TX_SUCCESS)
|
||||
pe_err("unable to change SAE auth timer");
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Invalid timerId. Log error */
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2011-2014, 2016 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011-2014, 2016-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||
*
|
||||
|
|
@ -68,7 +68,8 @@ enum {
|
|||
eLIM_PERIODIC_JOIN_PROBE_REQ_TIMER,
|
||||
eLIM_INSERT_SINGLESHOT_NOA_TIMER,
|
||||
eLIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE,
|
||||
eLIM_AUTH_RETRY_TIMER
|
||||
eLIM_AUTH_RETRY_TIMER,
|
||||
eLIM_AUTH_SAE_TIMER
|
||||
};
|
||||
|
||||
#define LIM_DISASSOC_DEAUTH_ACK_TIMEOUT 500
|
||||
|
|
|
|||
|
|
@ -622,6 +622,8 @@ void lim_deactivate_timers(tpAniSirGlobal mac_ctx)
|
|||
|
||||
tx_timer_deactivate(&lim_timer->
|
||||
gLimActiveToPassiveChannelTimer);
|
||||
|
||||
tx_timer_deactivate(&lim_timer->sae_auth_timer);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -705,6 +707,8 @@ void lim_cleanup_mlm(tpAniSirGlobal mac_ctx)
|
|||
tx_timer_delete(&lim_timer->
|
||||
gLimActiveToPassiveChannelTimer);
|
||||
|
||||
tx_timer_delete(&lim_timer->sae_auth_timer);
|
||||
|
||||
mac_ctx->lim.gLimTimersCreated = 0;
|
||||
}
|
||||
} /*** end lim_cleanup_mlm() ***/
|
||||
|
|
|
|||
|
|
@ -738,6 +738,7 @@ uint8_t *mac_trace_get_lim_msg_string(uint16_t lim_msg)
|
|||
CASE_RETURN_STRING(SIR_LIM_DEAUTH_ACK_TIMEOUT);
|
||||
CASE_RETURN_STRING(SIR_LIM_PERIODIC_JOIN_PROBE_REQ_TIMEOUT);
|
||||
CASE_RETURN_STRING(SIR_LIM_AUTH_RETRY_TIMEOUT);
|
||||
CASE_RETURN_STRING(SIR_LIM_AUTH_SAE_TIMEOUT);
|
||||
CASE_RETURN_STRING(SIR_LIM_MSG_TYPES_END);
|
||||
CASE_RETURN_STRING(LIM_MLM_SCAN_REQ);
|
||||
CASE_RETURN_STRING(LIM_MLM_SCAN_CNF);
|
||||
|
|
|
|||
Loading…
Reference in a new issue