⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 auth.c

📁 华硕无线网卡 167G linux 驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************  * RT2x00 SourceForge Project - http://rt2x00.sourceforge.net              *  *                                                                         *  *   This program is free software; you can redistribute it and/or modify  *  *   it under the terms of the GNU General Public License as published by  *  *   the Free Software Foundation; either version 2 of the License, or     *  *   (at your option) any later version.                                   *  *                                                                         *  *   This program is distributed in the hope that it will be useful,       *  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *  *   GNU General Public License for more details.                          *  *                                                                         *  *   You should have received a copy of the GNU General Public License     *  *   along with this program; if not, write to the                         *  *   Free Software Foundation, Inc.,                                       *  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *  *                                                                         *  *   Licensed under the GNU GPL                                            *  *   Original code supplied under license from RaLink Inc, 2004.           *  ***************************************************************************//***************************************************************************  *	Module Name:	auth.c * *	Abstract: * *	Revision History: *	Who		When		What *	--------	----------	----------------------------- *	Name		Date		Modification logs *	Jan Lee		2005-06-01	Release ***************************************************************************/#include "rt_config.h"/*    ==========================================================================    Description:        authenticate state machine init, including state transition and timer init    Parameters:        Sm - pointer to the auth state machine    Note:        The state machine looks like this                                AUTH_REQ_IDLE           AUTH_WAIT_SEQ2                   AUTH_WAIT_SEQ4    MT2_MLME_AUTH_REQ   mlme_auth_req_action    invalid_state_when_auth          invalid_state_when_auth    MT2_MLME_DEAUTH_REQ mlme_deauth_req_action  mlme_deauth_req_action           mlme_deauth_req_action    MT2_CLS2ERR         cls2err_action          cls2err_action                   cls2err_action    MT2_PEER_AUTH_EVEN  drop                    peer_auth_even_at_seq2_action    peer_auth_even_at_seq4_action    MT2_AUTH_TIMEOUT    Drop                    auth_timeout_action              auth_timeout_action        	IRQL = PASSIVE_LEVEL    ========================================================================== */void AuthStateMachineInit(    IN PRT2570ADAPTER pAd,     IN STATE_MACHINE *Sm,     OUT STATE_MACHINE_FUNC Trans[]) {    StateMachineInit(Sm, Trans, MAX_AUTH_STATE, MAX_AUTH_MSG, (STATE_MACHINE_FUNC)Drop, AUTH_REQ_IDLE, AUTH_MACHINE_BASE);         // the first column    StateMachineSetAction(Sm, AUTH_REQ_IDLE, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)MlmeAuthReqAction);//  StateMachineSetAction(Sm, AUTH_REQ_IDLE, MT2_MLME_DEAUTH_REQ, MlmeDeauthReqAction);//  StateMachineSetAction(Sm, AUTH_REQ_IDLE, MT2_CLS2ERR, Cls2errAction);    // the second column    StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAuth);//  StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_MLME_DEAUTH_REQ, MlmeDeauthReqAction);//  StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_CLS2ERR, Cls2errAction);    StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_PEER_AUTH_EVEN, (STATE_MACHINE_FUNC)PeerAuthRspAtSeq2Action);    StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_AUTH_TIMEOUT, (STATE_MACHINE_FUNC)AuthTimeoutAction);        // the third column    StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAuth);//  StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_MLME_DEAUTH_REQ, MlmeDeauthReqAction);//  StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_CLS2ERR, Cls2errAction);    StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_PEER_AUTH_EVEN, (STATE_MACHINE_FUNC)PeerAuthRspAtSeq4Action);    StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_AUTH_TIMEOUT, (STATE_MACHINE_FUNC)AuthTimeoutAction);        RTMPInitTimer(pAd, &pAd->Mlme.AuthAux.AuthTimer, AuthTimeout);}/*    ==========================================================================    Description:        function to be executed at timer thread when auth timer expires        	IRQL = DISPATCH_LEVEL    ========================================================================== */VOID  AuthTimeout(unsigned long data){	PRT2570ADAPTER	pAd = (PRT2570ADAPTER)data;	DBGPRINT(RT_DEBUG_TRACE,"AUTH - AuthTimeout\n");	// Do nothing if the driver is starting halt state.	// This might happen when timer already been fired before cancel timer with mlmehalt	if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))		return;	MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_AUTH_TIMEOUT, 0, NULL);	RTUSBUp(pAd, &pAd->mlme_semaphore);}/*    ==========================================================================    Description:        	IRQL = DISPATCH_LEVEL    ========================================================================== */VOID MlmeAuthReqAction(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {	MACADDR            Addr;	USHORT             Alg, Seq, Status;	ULONG              Timeout;	MACHDR             AuthHdr;	NDIS_STATUS        NStatus;	UCHAR             *OutBuffer = NULL;	ULONG              FrameLen = 0;	// Block all authentication request durning WPA block period	if (pAd->PortCfg.bBlockAssoc == TRUE)	{		DBGPRINT(RT_DEBUG_TRACE, "AUTH - Block Auth request durning WPA block period!\n");		pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;		MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_STATE_MACHINE_REJECT);	}		else if(MlmeAuthReqSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr, &Timeout, &Alg)) 	{		// reset timer		RTMPCancelTimer(&pAd->Mlme.AuthAux.AuthTimer);		pAd->Mlme.AuthAux.Addr = Addr;		pAd->Mlme.AuthAux.Alg  = Alg;		pAd->PortCfg.Mauth = FALSE;		Seq = 1;		Status = MLME_SUCCESS;		NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer);  //Get an unused nonpaged memory		if(NStatus != NDIS_STATUS_SUCCESS) 		{			DBGPRINT(RT_DEBUG_TRACE, "AUTH - MlmeAuthReqAction() allocate memory failed\n");			pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;			MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_FAIL_NO_RESOURCE);			return;		}		DBGPRINT(RT_DEBUG_INFO, "AUTH - Send AUTH request seq#1 (Alg=%d)...\n", Alg);		MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, &Addr, &pAd->PortCfg.Bssid);		MakeOutgoingFrame(OutBuffer,            &FrameLen, 		              MAC_HDR_LEN,          &AuthHdr, 		              2,                    &Alg, 		              2,                    &Seq, 		              2,                    &Status, 		              END_OF_ARGS);		MiniportMMRequest(pAd, OutBuffer, FrameLen);		RTMPSetTimer(pAd, &pAd->Mlme.AuthAux.AuthTimer, Timeout);		pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ2;	} 	else 	{		DBGPRINT(RT_DEBUG_ERROR, "AUTH - MlmeAuthReqAction() sanity check failed. BUG!!!!!\n");		pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;		MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_INVALID_FORMAT);	}}/*    ==========================================================================    Description:        	IRQL = DISPATCH_LEVEL    ========================================================================== */VOID PeerAuthRspAtSeq2Action(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    MACADDR       Addr2;    USHORT        Seq, Status, RemoteStatus, Alg;    UCHAR         ChlgText[CIPHER_TEXT_LEN];    UCHAR         CyperChlgText[CIPHER_TEXT_LEN + 8 + 8];    UCHAR         Element[2];    MACHDR        AuthHdr;    UCHAR        *OutBuffer = NULL;    NDIS_STATUS   NStatus;    ULONG         FrameLen = 0;    if (PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Alg, &Seq, &Status, ChlgText))     {        if (MAC_ADDR_EQUAL(&pAd->Mlme.AuthAux.Addr, &Addr2) && Seq == 2)         {            DBGPRINT(RT_DEBUG_TRACE, "AUTH - Receive AUTH_RSP seq#2 to me (Alg=%d, Status=%d)\n", Alg, Status);            RTMPCancelTimer(&pAd->Mlme.AuthAux.AuthTimer);                        if (Status == MLME_SUCCESS)             {                if (pAd->Mlme.AuthAux.Alg == Ndis802_11AuthModeOpen)                 {                    pAd->PortCfg.Mauth = TRUE;                    pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;                    MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_SUCCESS);                }                 else 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -