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

📄 assoc.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	else	{		DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerDisassocAction() sanity check fail\n"));	}}/*	==========================================================================	Description:		what the state machine will do after assoc timeout	Parameters:		Elme -	IRQL = DISPATCH_LEVEL	========================================================================== */VOID AssocTimeoutAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT  Status;	DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - AssocTimeoutAction\n"));	pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;	Status = MLME_REJ_TIMEOUT;	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status);}/*	==========================================================================	Description:		what the state machine will do after reassoc timeout	IRQL = DISPATCH_LEVEL	========================================================================== */VOID ReassocTimeoutAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT  Status;	DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - ReassocTimeoutAction\n"));	pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;	Status = MLME_REJ_TIMEOUT;	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status);}/*	==========================================================================	Description:		what the state machine will do after disassoc timeout	IRQL = DISPATCH_LEVEL	========================================================================== */VOID DisassocTimeoutAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT  Status;	DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - DisassocTimeoutAction\n"));	pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;	Status = MLME_SUCCESS;	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DISASSOC_CONF, 2, &Status);}VOID InvalidStateWhenAssoc(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT  Status;	DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - InvalidStateWhenAssoc(state=%ld), reset ASSOC state machine\n", 		pAd->Mlme.AssocMachine.CurrState));	pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;	Status = MLME_STATE_MACHINE_REJECT;	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status);}VOID InvalidStateWhenReassoc(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT Status;	DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - InvalidStateWhenReassoc(state=%ld), reset ASSOC state machine\n", 		pAd->Mlme.AssocMachine.CurrState));	pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;	Status = MLME_STATE_MACHINE_REJECT;	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status);}VOID InvalidStateWhenDisassociate(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT Status;	DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - InvalidStateWhenDisassoc(state=%ld), reset ASSOC state machine\n", 		pAd->Mlme.AssocMachine.CurrState));	pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;	Status = MLME_STATE_MACHINE_REJECT;	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DISASSOC_CONF, 2, &Status);}/*	==========================================================================	Description:		right part of IEEE 802.11/1999 page 374	Note: 		This event should never cause ASSOC state machine perform state		transition, and has no relationship with CNTL machine. So we separate		this routine as a service outside of ASSOC state transition table.	IRQL = DISPATCH_LEVEL	========================================================================== */VOID Cls3errAction(	IN PRTMP_ADAPTER pAd, 	IN PUCHAR        pAddr) {	HEADER_802_11         DisassocHdr;	PHEADER_802_11        pDisassocHdr;	PUCHAR                pOutBuffer = NULL;	ULONG                 FrameLen = 0;	NDIS_STATUS           NStatus;	USHORT                Reason = REASON_CLS3ERR;	NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);  //Get an unused nonpaged memory	if (NStatus != NDIS_STATUS_SUCCESS) 		return;	DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Class 3 Error, Send DISASSOC frame\n"));	MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pAddr, pAd->CommonCfg.Bssid);	// patch peap ttls switching issue	MakeOutgoingFrame(pOutBuffer,           &FrameLen, 					  sizeof(HEADER_802_11),&DisassocHdr, 					  2,                    &Reason, 					  END_OF_ARGS);	MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);	// To patch Instance and Buffalo(N) AP	// Driver has to send deauth to Instance AP, but Buffalo(N) needs to send disassoc to reset Authenticator's state machine	// Therefore, we send both of them.	pDisassocHdr = (PHEADER_802_11)pOutBuffer;	pDisassocHdr->FC.SubType = SUBTYPE_DEAUTH;	MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);		MlmeFreeMemory(pAd, pOutBuffer);	pAd->StaCfg.DisassocReason = REASON_CLS3ERR;	COPY_MAC_ADDR(pAd->StaCfg.DisassocSta, pAddr);} /*	 ==========================================================================	 Description:		 Switch between WEP and CKIP upon new association up.	 Parameters:	 IRQL = DISPATCH_LEVEL	 ==========================================================================  */VOID SwitchBetweenWepAndCkip(	IN PRTMP_ADAPTER pAd){	int            i;	SHAREDKEY_MODE_STRUC  csr1;	// if KP is required. change the CipherAlg in hardware shard key table from WEP 	// to CKIP. else remain as WEP	if (pAd->StaCfg.bCkipOn && (pAd->StaCfg.CkipFlag & 0x10))	{		// modify hardware key table so that MAC use correct algorithm to decrypt RX		RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE, &csr1.word);		if (csr1.field.Bss0Key0CipherAlg == CIPHER_WEP64)			csr1.field.Bss0Key0CipherAlg = CIPHER_CKIP64;		else if (csr1.field.Bss0Key0CipherAlg == CIPHER_WEP128)			csr1.field.Bss0Key0CipherAlg = CIPHER_CKIP128;		if (csr1.field.Bss0Key1CipherAlg == CIPHER_WEP64)			csr1.field.Bss0Key1CipherAlg = CIPHER_CKIP64;		else if (csr1.field.Bss0Key1CipherAlg == CIPHER_WEP128)			csr1.field.Bss0Key1CipherAlg = CIPHER_CKIP128;		if (csr1.field.Bss0Key2CipherAlg == CIPHER_WEP64)			csr1.field.Bss0Key2CipherAlg = CIPHER_CKIP64;		else if (csr1.field.Bss0Key2CipherAlg == CIPHER_WEP128)			csr1.field.Bss0Key2CipherAlg = CIPHER_CKIP128;		if (csr1.field.Bss0Key3CipherAlg == CIPHER_WEP64)			csr1.field.Bss0Key3CipherAlg = CIPHER_CKIP64;		else if (csr1.field.Bss0Key3CipherAlg == CIPHER_WEP128)			csr1.field.Bss0Key3CipherAlg = CIPHER_CKIP128;		RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE, csr1.word);		DBGPRINT(RT_DEBUG_TRACE, ("SwitchBetweenWepAndCkip: modify BSS0 cipher to %s\n", CipherName[csr1.field.Bss0Key0CipherAlg]));		// modify software key table so that driver can specify correct algorithm in TXD upon TX		for (i=0; i<SHARE_KEY_NUM; i++)		{			if (pAd->SharedKey[BSS0][i].CipherAlg == CIPHER_WEP64)				pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_CKIP64;			else if (pAd->SharedKey[BSS0][i].CipherAlg == CIPHER_WEP128)				pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_CKIP128;		}	}	// else if KP NOT inused. change the CipherAlg in hardware shard key table from CKIP 	// to WEP.	else	{		// modify hardware key table so that MAC use correct algorithm to decrypt RX		RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE, &csr1.word);		if (csr1.field.Bss0Key0CipherAlg == CIPHER_CKIP64)			csr1.field.Bss0Key0CipherAlg = CIPHER_WEP64;		else if (csr1.field.Bss0Key0CipherAlg == CIPHER_CKIP128)			csr1.field.Bss0Key0CipherAlg = CIPHER_WEP128;		if (csr1.field.Bss0Key1CipherAlg == CIPHER_CKIP64)			csr1.field.Bss0Key1CipherAlg = CIPHER_WEP64;		else if (csr1.field.Bss0Key1CipherAlg == CIPHER_CKIP128)			csr1.field.Bss0Key1CipherAlg = CIPHER_WEP128;		if (csr1.field.Bss0Key2CipherAlg == CIPHER_CKIP64)			csr1.field.Bss0Key2CipherAlg = CIPHER_WEP64;		else if (csr1.field.Bss0Key2CipherAlg == CIPHER_CKIP128)			csr1.field.Bss0Key2CipherAlg = CIPHER_WEP128;		if (csr1.field.Bss0Key3CipherAlg == CIPHER_CKIP64)			csr1.field.Bss0Key3CipherAlg = CIPHER_WEP64;		else if (csr1.field.Bss0Key3CipherAlg == CIPHER_CKIP128)			csr1.field.Bss0Key3CipherAlg = CIPHER_WEP128; 		// modify software key table so that driver can specify correct algorithm in TXD upon TX		for (i=0; i<SHARE_KEY_NUM; i++)		{			if (pAd->SharedKey[BSS0][i].CipherAlg == CIPHER_CKIP64)				pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_WEP64;			else if (pAd->SharedKey[BSS0][i].CipherAlg == CIPHER_CKIP128)				pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_WEP128;		}		//		// On WPA-NONE, must update CipherAlg.		// Because the OID_802_11_WEP_STATUS was been set after OID_802_11_ADD_KEY		// and CipherAlg will be CIPHER_NONE by Windows ZeroConfig.		// So we need to update CipherAlg after connect.		//		if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone)		{			for (i = 0; i < SHARE_KEY_NUM; i++)			{				if (pAd->SharedKey[BSS0][i].KeyLen != 0)				{					if (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)					{						pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_TKIP;					}					else if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)					{						pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_AES;					}				}				else 				{					pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_NONE;				}			}			csr1.field.Bss0Key0CipherAlg = pAd->SharedKey[BSS0][0].CipherAlg;			csr1.field.Bss0Key1CipherAlg = pAd->SharedKey[BSS0][1].CipherAlg;			csr1.field.Bss0Key2CipherAlg = pAd->SharedKey[BSS0][2].CipherAlg;			csr1.field.Bss0Key3CipherAlg = pAd->SharedKey[BSS0][3].CipherAlg;		}		RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE, csr1.word);		DBGPRINT(RT_DEBUG_TRACE, ("SwitchBetweenWepAndCkip: modify BSS0 cipher to %s\n", CipherName[csr1.field.Bss0Key0CipherAlg]));			}}#ifdef WPA_SUPPLICANT_SUPPORT#ifndef NATIVE_WPA_SUPPLICANT_SUPPORTVOID    SendAssocIEsToWpaSupplicant(     IN  PRTMP_ADAPTER pAd){    union iwreq_data    wrqu;    unsigned char custom[IW_CUSTOM_MAX] = {0};    if ((pAd->StaCfg.ReqVarIELen + 17) <= IW_CUSTOM_MAX)    {        sprintf(custom, "ASSOCINFO_ReqIEs=");	    NdisMoveMemory(custom+17, pAd->StaCfg.ReqVarIEs, pAd->StaCfg.ReqVarIELen);	    memset(&wrqu, 0, sizeof(wrqu));        wrqu.data.length = pAd->StaCfg.ReqVarIELen + 17;        wrqu.data.flags = RT_REQIE_EVENT_FLAG;        wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, custom);        memset(&wrqu, 0, sizeof(wrqu));        wrqu.data.flags = RT_ASSOCINFO_EVENT_FLAG;        wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, NULL);    }    else        DBGPRINT(RT_DEBUG_TRACE, ("pAd->StaCfg.ReqVarIELen + 17 > MAX_CUSTOM_LEN\n"));        return;}#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //#endif // WPA_SUPPLICANT_SUPPORT //#ifdef NATIVE_WPA_SUPPLICANT_SUPPORTint wext_notify_event_assoc(	IN  RTMP_ADAPTER *pAd){    union iwreq_data    wrqu;    char custom[IW_CUSTOM_MAX] = {0};#if WIRELESS_EXT > 17    if (pAd->StaCfg.ReqVarIELen <= IW_CUSTOM_MAX)    {        wrqu.data.length = pAd->StaCfg.ReqVarIELen;        memcpy(custom, pAd->StaCfg.ReqVarIEs, pAd->StaCfg.ReqVarIELen);        wireless_send_event(pAd->net_dev, IWEVASSOCREQIE, &wrqu, custom);    }    else        DBGPRINT(RT_DEBUG_TRACE, ("pAd->StaCfg.ReqVarIELen > MAX_CUSTOM_LEN\n"));#else    if (((pAd->StaCfg.ReqVarIELen*2) + 17) <= IW_CUSTOM_MAX)    {        UCHAR   idx;        wrqu.data.length = (pAd->StaCfg.ReqVarIELen*2) + 17;        sprintf(custom, "ASSOCINFO(ReqIEs=");        for (idx=0; idx<pAd->StaCfg.ReqVarIELen; idx++)                sprintf(custom, "%s%02x", custom, pAd->StaCfg.ReqVarIEs[idx]);        wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, custom);    }    else        DBGPRINT(RT_DEBUG_TRACE, ("(pAd->StaCfg.ReqVarIELen*2) + 17 > MAX_CUSTOM_LEN\n"));#endif	return 0;	}#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //BOOLEAN StaAddMacTableEntry(	IN  PRTMP_ADAPTER		pAd,	IN  PMAC_TABLE_ENTRY	pEntry,	IN  UCHAR				MaxSupportedRateIn500Kbps,	IN  HT_CAPABILITY_IE	*pHtCapability,	IN  UCHAR				HtCapabilityLen,	IN  USHORT        		CapabilityInfo){	UCHAR            MaxSupportedRate = RATE_11;	if (ADHOC_ON(pAd))		CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE);	switch (MaxSupportedRateIn500Kbps)    {        case 108: MaxSupportedRate = RATE_54;   break;        case 96:  MaxSupportedRate = RATE_48;   break;        case 72:  MaxSupportedRate = RATE_36;   break;        case 48:  MaxSupportedRate = RATE_24;   break;        case 36:  MaxSupportedRate = RATE_18;   break;        case 24:  MaxSupportedRate = RATE_12;   break;        case 18:  MaxSupportedRate = RATE_9;    break;        case 12:  MaxSup

⌨️ 快捷键说明

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