sta_ctrl.c
来自「Ralink RT61 SoftAP Driver source code. 」· C语言 代码 · 共 691 行 · 第 1/2 页
C
691 行
Description:
APCLI MLME Auth Req timeout state machine procedure
==========================================================================
*/
VOID StaCtrlAuthReqTimeoutAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem,
OUT PULONG pCurrState,
IN USHORT ifIndex)
{
MLME_AUTH_REQ_STRUCT AuthReq;
DBGPRINT(RT_DEBUG_TRACE, "(%s) Auth Req Timeout.\n", __FUNCTION__);
pAd->ApCliTab.ApCliEntry[ifIndex].AuthReqCnt++;
if (pAd->ApCliTab.ApCliEntry[ifIndex].AuthReqCnt > 5)
{
*pCurrState = STA_CTRL_DISCONNECTED;
NdisZeroMemory(pAd->MlmeAux.Bssid, MAC_ADDR_LEN);
NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID);
pAd->ApCliTab.ApCliEntry[ifIndex].AuthReqCnt = 0;
return;
}
// stay in same state.
*pCurrState = STA_CTRL_AUTH;
// retry Authentication.
DBGPRINT(RT_DEBUG_TRACE, "(%s) Retry Auth Req.\n", __FUNCTION__);
COPY_MAC_ADDR(AuthReq.Addr, pAd->ApCliTab.ApCliEntry[ifIndex].ApCliBssid);
AuthReq.Alg = Ndis802_11AuthModeOpen;
AuthReq.Timeout = AUTH_TIMEOUT;
StaMlmeEnqueue(pAd, STA_AUTH_STATE_MACHINE, STA_MT2_MLME_AUTH_REQ,
sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq, ifIndex);
return;
}
/*
==========================================================================
Description:
APCLI MLME Auth2 Req timeout state machine procedure
==========================================================================
*/
VOID StaCtrlAuth2ReqTimeoutAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem,
OUT PULONG pCurrState,
IN USHORT ifIndex)
{
return;
}
/*
==========================================================================
Description:
APCLI MLME ASSOC RSP state machine procedure
==========================================================================
*/
VOID StaCtrlAssocRspAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem,
OUT PULONG pCurrState,
IN USHORT ifIndex)
{
STA_CTRL_MSG_STRUCT *Info = (STA_CTRL_MSG_STRUCT *)(Elem->Msg);
USHORT Status = Info->Status;
if(Status == MLME_SUCCESS)
{
#ifdef RTL865X_SOC
printk("(%s) apCliIf = %d, Receive Assoc Rsp Success.\n", __FUNCTION__, ifIndex);
#else
DBGPRINT(RT_DEBUG_TRACE, "(%s) apCliIf = %d, Receive Assoc Rsp Success.\n", __FUNCTION__, ifIndex);
#endif
*pCurrState = STA_CTRL_CONNECTED;
// set the apcli interface be valid.
pAd->ApCliTab.ApCliEntry[ifIndex].Valid = TRUE;
} else
{
DBGPRINT(RT_DEBUG_TRACE, "(%s) apCliIf = %d, Receive Assoc Rsp Failure.\n", __FUNCTION__, ifIndex);
*pCurrState = STA_CTRL_DISCONNECTED;
// set the apcli interface be valid.
pAd->ApCliTab.ApCliEntry[ifIndex].Valid = FALSE;
}
return;
}
/*
==========================================================================
Description:
APCLI MLME DeASSOC RSP state machine procedure
==========================================================================
*/
VOID StaCtrlDeAssocRspAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem,
OUT PULONG pCurrState,
IN USHORT ifIndex)
{
STA_CTRL_MSG_STRUCT *Info = (STA_CTRL_MSG_STRUCT *)(Elem->Msg);
USHORT Status = Info->Status;
if (Status == MLME_SUCCESS)
{
DBGPRINT(RT_DEBUG_TRACE, "(%s) Receive DeAssoc Rsp Success.\n", __FUNCTION__);
} else
{
DBGPRINT(RT_DEBUG_TRACE, "(%s) Receive DeAssoc Rsp Failure.\n", __FUNCTION__);
}
if (pAd->ApCliTab.ApCliEntry[ifIndex].Valid)
ApCliLinkDown(pAd, ifIndex);
*pCurrState = STA_CTRL_DISCONNECTED;
return;
}
/*
==========================================================================
Description:
APCLI MLME Assoc Req timeout state machine procedure
==========================================================================
*/
VOID StaCtrlAssocReqTimeoutAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem,
OUT PULONG pCurrState,
IN USHORT ifIndex)
{
MLME_ASSOC_REQ_STRUCT AssocReq;
DBGPRINT(RT_DEBUG_TRACE, "(%s) Assoc Req Timeout.\n", __FUNCTION__);
// give up to retry authentication req after retry it 5 times.
pAd->ApCliTab.ApCliEntry[ifIndex].AssocReqCnt++;
if (pAd->ApCliTab.ApCliEntry[ifIndex].AssocReqCnt > 5)
{
*pCurrState = STA_CTRL_DISCONNECTED;
NdisZeroMemory(pAd->MlmeAux.Bssid, MAC_ADDR_LEN);
NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID);
pAd->ApCliTab.ApCliEntry[ifIndex].AuthReqCnt = 0;
return;
}
// stay in same state.
*pCurrState = STA_CTRL_ASSOC;
// retry Association Req.
DBGPRINT(RT_DEBUG_TRACE, "(%s) Retry Association Req.\n", __FUNCTION__);
AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, pAd->MlmeAux.CapabilityInfo,
ASSOC_TIMEOUT, /*pAd->PortCfg.DefaultListenCount*/5);
StaMlmeEnqueue(pAd, STA_ASSOC_STATE_MACHINE, STA_MT2_MLME_ASSOC_REQ,
sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq, ifIndex);
return;
}
/*
==========================================================================
Description:
APCLI MLME Disconnect Rsp state machine procedure
==========================================================================
*/
VOID StaCtrlDisconnectReqAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem,
OUT PULONG pCurrState,
IN USHORT ifIndex)
{
DBGPRINT(RT_DEBUG_TRACE, "(%s) MLME Request disconnect.\n", __FUNCTION__);
if (pAd->ApCliTab.ApCliEntry[ifIndex].Valid)
ApCliLinkDown(pAd, ifIndex);
// set the apcli interface be invalid.
pAd->ApCliTab.ApCliEntry[ifIndex].Valid = FALSE;
// clear MlmeAux.Ssid and Bssid.
NdisZeroMemory(pAd->MlmeAux.Bssid, MAC_ADDR_LEN);
pAd->MlmeAux.SsidLen = 0;
NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID);
pAd->MlmeAux.Rssi = 0;
*pCurrState = STA_CTRL_DISCONNECTED;
return;
}
/*
==========================================================================
Description:
APCLI MLME Peer DeAssoc Req state machine procedure
==========================================================================
*/
VOID StaCtrlPeerDeAssocReqAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem,
OUT PULONG pCurrState,
IN USHORT ifIndex)
{
DBGPRINT(RT_DEBUG_TRACE, "(%s) Peer DeAssoc Req.\n", __FUNCTION__);
if (pAd->ApCliTab.ApCliEntry[ifIndex].Valid)
ApCliLinkDown(pAd, ifIndex);
// set the apcli interface be invalid.
pAd->ApCliTab.ApCliEntry[ifIndex].Valid = FALSE;
// clear MlmeAux.Ssid and Bssid.
NdisZeroMemory(pAd->MlmeAux.Bssid, MAC_ADDR_LEN);
pAd->MlmeAux.SsidLen = 0;
NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID);
pAd->MlmeAux.Rssi = 0;
*pCurrState = STA_CTRL_DISCONNECTED;
return;
}
/*
==========================================================================
Description:
APCLI MLME Disconnect Req state machine procedure
==========================================================================
*/
VOID StaCtrlDeAssocAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem,
OUT PULONG pCurrState,
IN USHORT ifIndex)
{
MLME_DISASSOC_REQ_STRUCT DisassocReq;
DBGPRINT(RT_DEBUG_TRACE, "(%s) MLME Request Disconnect.\n", __FUNCTION__);
DisassocParmFill(pAd, &DisassocReq, pAd->MlmeAux.Bssid, REASON_DISASSOC_STA_LEAVING);
StaMlmeEnqueue(pAd, STA_ASSOC_STATE_MACHINE, STA_MT2_MLME_DISASSOC_REQ,
sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq, ifIndex);
if (pAd->ApCliTab.ApCliEntry[ifIndex].Valid)
ApCliLinkDown(pAd, ifIndex);
// set the apcli interface be invalid.
pAd->ApCliTab.ApCliEntry[ifIndex].Valid = FALSE;
// clear MlmeAux.Ssid and Bssid.
NdisZeroMemory(pAd->MlmeAux.Bssid, MAC_ADDR_LEN);
pAd->MlmeAux.SsidLen = 0;
NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID);
pAd->MlmeAux.Rssi = 0;
*pCurrState = STA_CTRL_DEASSOC;
return;
}
/*
==========================================================================
Description:
APCLI Interface Up.
==========================================================================
*/
VOID ApCliIfUp(
IN PRTMP_ADAPTER pAd)
{
UCHAR ifIndex;
for(ifIndex = 0; ifIndex < MAX_APCLI_ENTRY; ifIndex++)
{
if ((pAd->ApCliTab.ApCliEntry[ifIndex].InterfaceReady == TRUE)
&& (pAd->ApCliTab.ApCliEntry[ifIndex].Enable == TRUE)
&& (pAd->ApCliTab.ApCliEntry[ifIndex].Valid == FALSE))
{
DBGPRINT(RT_DEBUG_TRACE, "(%s) ApCli interface[%d] startup.\n", __FUNCTION__, ifIndex);
StaMlmeEnqueue(pAd, STA_CTRL_STATE_MACHINE, STA_CTRL_JOIN_REQ, 0, NULL, ifIndex);
}
}
return;
}
/*
==========================================================================
Description:
APCLI Interface Down.
==========================================================================
*/
VOID ApCliIfDown(
IN PRTMP_ADAPTER pAd)
{
UCHAR ifIndex;
for(ifIndex = 0; ifIndex < MAX_APCLI_ENTRY; ifIndex++)
{
if (!(pAd->ApCliTab.ApCliEntry[ifIndex].Enable))
{
DBGPRINT(RT_DEBUG_TRACE, "(%s) ApCli interface[%d] startdown.\n", __FUNCTION__, ifIndex);
StaMlmeEnqueue(pAd, STA_CTRL_STATE_MACHINE, STA_CTRL_DISCONNECT_REQ, 0, NULL, ifIndex);
}
}
return;
}
/*
==========================================================================
Description:
APCLI Interface Monitor.
==========================================================================
*/
VOID ApCliIfMonitor(
IN PRTMP_ADAPTER pAd)
{
UCHAR index;
for(index = 0; index < MAX_APCLI_ENTRY; index++)
{
if ((pAd->ApCliTab.ApCliEntry[index].Valid == TRUE)
&& (pAd->ApCliTab.ApCliEntry[index].NumOfAvgRssiSample < 5))
{
DBGPRINT(RT_DEBUG_TRACE,"MlmePeriodicExec: no traffic and Beancon on ApCli%d, Probe-Response from root-AP.\n", index);
DBGPRINT(RT_DEBUG_TRACE,"MlmePeriodicExec: Reconnect the Root-Ap again.\n");
StaMlmeEnqueue(pAd, STA_CTRL_STATE_MACHINE, STA_CTRL_DISCONNECT_REQ, 0, NULL, index);
MlmeHandler(pAd);
}
pAd->ApCliTab.ApCliEntry[index].NumOfAvgRssiSample = 0;
}
return;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?