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

📄 assoc.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
	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);}#ifdef WPA_SUPPLICANT_SUPPORT#ifndef NATIVE_WPA_SUPPLICANT_SUPPORTVOID    SendAssocIEsToWpaSupplicant(     IN  PRTMP_ADAPTER pAd){	STRING 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);		RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_REQIE_EVENT_FLAG, NULL, (PUCHAR)custom, pAd->StaCfg.ReqVarIELen + 17);				RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_ASSOCINFO_EVENT_FLAG, NULL, NULL, 0);	}	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){	char custom[IW_CUSTOM_MAX] = {0};#if WIRELESS_EXT > 17	if (pAd->StaCfg.ReqVarIELen <= IW_CUSTOM_MAX)	{		RtmpOSWrielessEventSend(pAd, IWEVASSOCREQIE, -1, NULL, custom, pAd->StaCfg.ReqVarIELen);	}	else	    DBGPRINT(RT_DEBUG_TRACE, ("pAd->StaCfg.ReqVarIELen > MAX_CUSTOM_LEN\n"));#else	int len;	len = (pAd->StaCfg.ReqVarIELen*2) + 17;	if (len <= IW_CUSTOM_MAX)	{		UCHAR   idx;		sprintf(custom, "ASSOCINFO(ReqIEs=");		for (idx=0; idx<pAd->StaCfg.ReqVarIELen; idx++)		        sprintf(custom, "%s%02x", custom, pAd->StaCfg.ReqVarIEs[idx]);		RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, -1, NULL, custom, len);	}	else		DBGPRINT(RT_DEBUG_TRACE, ("len(%d) > MAX_CUSTOM_LEN\n", len));#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  ADD_HT_INFO_IE		*pAddHtInfo,	IN  UCHAR				AddHtInfoLen,	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:  MaxSupportedRate = RATE_6;    break;        case 22:  MaxSupportedRate = RATE_11;   break;        case 11:  MaxSupportedRate = RATE_5_5;  break;        case 4:   MaxSupportedRate = RATE_2;    break;        case 2:   MaxSupportedRate = RATE_1;    break;        default:  MaxSupportedRate = RATE_11;   break;    }    if ((pAd->CommonCfg.PhyMode == PHY_11G) && (MaxSupportedRate < RATE_FIRST_OFDM_RATE))        return FALSE;#ifdef DOT11_N_SUPPORT	// 11n only	if (((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))&& (HtCapabilityLen == 0))		return FALSE;#endif // DOT11_N_SUPPORT //	if (!pEntry)        return FALSE;	NdisAcquireSpinLock(&pAd->MacTabLock);	if (pEntry)	{		pEntry->PortSecured = WPA_802_1X_PORT_SECURED;		if ((MaxSupportedRate < RATE_FIRST_OFDM_RATE) ||			(pAd->CommonCfg.PhyMode == PHY_11B))		{			pEntry->RateLen = 4;			if (MaxSupportedRate >= RATE_FIRST_OFDM_RATE)				MaxSupportedRate = RATE_11;		}		else			pEntry->RateLen = 12;		pEntry->MaxHTPhyMode.word = 0;		pEntry->MinHTPhyMode.word = 0;		pEntry->HTPhyMode.word = 0;		pEntry->MaxSupportedRate = MaxSupportedRate;		if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE)		{			pEntry->MaxHTPhyMode.field.MODE = MODE_CCK;			pEntry->MaxHTPhyMode.field.MCS = pEntry->MaxSupportedRate;			pEntry->MinHTPhyMode.field.MODE = MODE_CCK;			pEntry->MinHTPhyMode.field.MCS = pEntry->MaxSupportedRate;			pEntry->HTPhyMode.field.MODE = MODE_CCK;			pEntry->HTPhyMode.field.MCS = pEntry->MaxSupportedRate;		}		else		{			pEntry->MaxHTPhyMode.field.MODE = MODE_OFDM;			pEntry->MaxHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];			pEntry->MinHTPhyMode.field.MODE = MODE_OFDM;			pEntry->MinHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];			pEntry->HTPhyMode.field.MODE = MODE_OFDM;			pEntry->HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];		}		pEntry->CapabilityInfo = CapabilityInfo;		CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE);		CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE);	}	NdisZeroMemory(&pEntry->HTCapability, sizeof(pEntry->HTCapability));#ifdef DOT11_N_SUPPORT	// If this Entry supports 802.11n, upgrade to HT rate. 	if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))	{		UCHAR	j, bitmask; //k,bitmask;		CHAR    i;		if (ADHOC_ON(pAd))			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE);		if ((pHtCapability->HtCapInfo.GF) && (pAd->CommonCfg.DesiredHtPhy.GF))		{			pEntry->MaxHTPhyMode.field.MODE = MODE_HTGREENFIELD;		}		else		{				pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;			pAd->MacTab.fAnyStationNonGF = TRUE;			pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1;		}		if ((pHtCapability->HtCapInfo.ChannelWidth) && 			(pAd->CommonCfg.DesiredHtPhy.ChannelWidth) &&			((pAd->StaCfg.BssType == BSS_INFRA) || ((pAd->StaCfg.BssType == BSS_ADHOC) && (pAddHtInfo->AddHtInfo.ExtChanOffset == pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset))))		{			pEntry->MaxHTPhyMode.field.BW= BW_40;			pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(pHtCapability->HtCapInfo.ShortGIfor40));		}		else		{				pEntry->MaxHTPhyMode.field.BW = BW_20;			pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(pHtCapability->HtCapInfo.ShortGIfor20));			pAd->MacTab.fAnyStation20Only = TRUE;		}				// 3*3		if (pAd->MACVersion >= RALINK_2883_VERSION && pAd->MACVersion < RALINK_3070_VERSION)			pEntry->MaxHTPhyMode.field.TxBF = pAd->CommonCfg.RegTransmitSetting.field.TxBF;		// find max fixed rate		for (i=23; i>=0; i--) // 3*3		{				j = i/8;				bitmask = (1<<(i-(j*8)));			if ((pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j] & bitmask) && (pHtCapability->MCSSet[j] & bitmask))			{				pEntry->MaxHTPhyMode.field.MCS = i;				break;			}			if (i==0)				break;		}		 		if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO)		{			if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32)			{				// Fix MCS as HT Duplicated Mode				pEntry->MaxHTPhyMode.field.BW = 1;				pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;				pEntry->MaxHTPhyMode.field.STBC = 0;				pEntry->MaxHTPhyMode.field.ShortGI = 0;				pEntry->MaxHTPhyMode.field.MCS = 32;			}			else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS)			{				// STA supports fixed MCS 				pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;			}		}		pEntry->MaxHTPhyMode.field.STBC = (pHtCapability->HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC));		pEntry->MpduDensity = pHtCapability->HtCapParm.MpduDensity;		pEntry->MaxRAmpduFactor = pHtCapability->HtCapParm.MaxRAmpduFactor;		pEntry->MmpsMode = (UCHAR)pHtCapability->HtCapInfo.MimoPs;		pEntry->AMsduSize = (UCHAR)pHtCapability->HtCapInfo.AMsduSize;						pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;		if (pAd->CommonCfg.DesiredHtPhy.AmsduEnable && (pAd->CommonCfg.REGBACapability.field.AutoBA == FALSE))			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_AMSDU_INUSED);		if (pHtCapability->HtCapInfo.ShortGIfor20)			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE);		if (pHtCapability->HtCapInfo.ShortGIfor40)			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE);		if (pHtCapability->HtCapInfo.TxSTBC)			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE);		if (pHtCapability->HtCapInfo.RxSTBC)			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE);		if (pHtCapability->ExtHtCapInfo.PlusHTC)							CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE);		if (pAd->CommonCfg.bRdg && pHtCapability->ExtHtCapInfo.RDGSupport)							CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE);			if (pHtCapability->ExtHtCapInfo.MCSFeedback == 0x03)			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE);				NdisMoveMemory(&pEntry->HTCapability, pHtCapability, HtCapabilityLen);	}	else	{		pAd->MacTab.fAnyStationIsLegacy = TRUE;	}#endif // DOT11_N_SUPPORT //	pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;	pEntry->CurrTxRate = pEntry->MaxSupportedRate;		// Set asic auto fall back	if (pAd->StaCfg.bAutoTxRateSwitch == TRUE)	{		PUCHAR					pTable;		UCHAR					TableSize = 0;				MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &pEntry->CurrTxRateIndex);		pEntry->bAutoTxRateSwitch = TRUE;	}	else	{		pEntry->HTPhyMode.field.MODE	= pAd->StaCfg.HTPhyMode.field.MODE;		pEntry->HTPhyMode.field.MCS	= pAd->StaCfg.HTPhyMode.field.MCS;		pEntry->bAutoTxRateSwitch = FALSE;				// If the legacy mode is set, overwrite the transmit setting of this entry.  					RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry);	}	pEntry->PortSecured = WPA_802_1X_PORT_SECURED;	pEntry->Sst = SST_ASSOC;	pEntry->AuthState = AS_AUTH_OPEN;	pEntry->AuthMode = pAd->StaCfg.AuthMode;	pEntry->WepStatus = pAd->StaCfg.WepStatus;	NdisReleaseSpinLock(&pAd->MacTabLock);#ifdef WPA_SUPPLICANT_SUPPORT#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT    if (pAd->StaCfg.WpaSupplicantUP)    {        union iwreq_data    wrqu;        SendAssocIEsToWpaSupplicant(pAd);        memset(&wrqu, 0, sizeof(wrqu));        wrqu.data.flags = RT_ASSOC_EVENT_FLAG;        wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, NULL);    }#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //#endif // WPA_SUPPLICANT_SUPPORT //                    #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT    {        union iwreq_data    wrqu;        wext_notify_event_assoc(pAd);                memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN);        memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN);        wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);            }#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //	return TRUE;}

⌨️ 快捷键说明

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