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

📄 sync.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	UCHAR         SsidLen;#ifdef DOT11_N_SUPPORT	UCHAR		  HtLen, AddHtLen, NewExtLen;#endif // DOT11_N_SUPPORT //	HEADER_802_11 ProbeRspHdr;	NDIS_STATUS   NStatus;	PUCHAR        pOutBuffer = NULL;	ULONG         FrameLen = 0;	LARGE_INTEGER FakeTimestamp;	UCHAR         DsLen = 1, IbssLen = 2;	UCHAR         LocalErpIe[3] = {IE_ERP, 1, 0};	BOOLEAN       Privacy;	USHORT        CapabilityInfo;	UCHAR		  RSNIe = IE_WPA;	if (! ADHOC_ON(pAd))		return;	if (PeerProbeReqSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, Ssid, &SsidLen))	{		if ((SsidLen == 0) || SSID_EQUAL(Ssid, SsidLen, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen))		{						// allocate and send out ProbeRsp frame			NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);  //Get an unused nonpaged memory			if (NStatus != NDIS_STATUS_SUCCESS)				return;			//pAd->StaCfg.AtimWin = 0;  // ??????			Privacy = (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) || 					  (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || 					  (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled);			CapabilityInfo = CAP_GENERATE(0, 1, Privacy, (pAd->CommonCfg.TxPreamble == Rt802_11PreambleShort), 0, 0);			MakeOutgoingFrame(pOutBuffer,                   &FrameLen, 							  sizeof(HEADER_802_11),        &ProbeRspHdr, 							  TIMESTAMP_LEN,                &FakeTimestamp,							  2,                            &pAd->CommonCfg.BeaconPeriod,							  2,                            &CapabilityInfo,							  1,                            &SsidIe, 							  1,                            &pAd->CommonCfg.SsidLen, 							  pAd->CommonCfg.SsidLen,       pAd->CommonCfg.Ssid,							  1,                            &SupRateIe, 							  1,                            &pAd->StaActive.SupRateLen,							  pAd->StaActive.SupRateLen,    pAd->StaActive.SupRate, 							  1,                            &DsIe, 							  1,                            &DsLen, 							  1,                            &pAd->CommonCfg.Channel,							  1,                            &IbssIe, 							  1,                            &IbssLen, 							  2,                            &pAd->StaActive.AtimWin,							  END_OF_ARGS);			if (pAd->StaActive.ExtRateLen)			{				ULONG tmp;				MakeOutgoingFrame(pOutBuffer + FrameLen,        &tmp, 								  3,                            LocalErpIe,								  1,                            &ExtRateIe,								  1,                            &pAd->StaActive.ExtRateLen,								  pAd->StaActive.ExtRateLen,    &pAd->StaActive.ExtRate,								  END_OF_ARGS);				FrameLen += tmp;			}			// If adhoc secruity is set for WPA-None, append the cipher suite IE			if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone)			{				ULONG tmp;				MakeOutgoingFrame(pOutBuffer + FrameLen,        	&tmp,						  			1,                              &RSNIe,						  			1,                            	&pAd->StaCfg.RSNIE_Len,						  			pAd->StaCfg.RSNIE_Len,      	pAd->StaCfg.RSN_IE,						  			END_OF_ARGS);				FrameLen += tmp;			}#ifdef DOT11_N_SUPPORT			if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)			{				ULONG TmpLen;				UCHAR	BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33};				HtLen = sizeof(pAd->CommonCfg.HtCapability);				AddHtLen = sizeof(pAd->CommonCfg.AddHTInfo);				NewExtLen = 1;				//New extension channel offset IE is included in Beacon, Probe Rsp or channel Switch Announcement Frame				if (pAd->bBroadComHT == TRUE)				{					MakeOutgoingFrame(pOutBuffer + FrameLen,            &TmpLen,								  1,                                &WpaIe,								  4,                                &BROADCOM[0],								 pAd->MlmeAux.HtCapabilityLen,          &pAd->MlmeAux.HtCapability, 								  END_OF_ARGS);				}				else								{				MakeOutgoingFrame(pOutBuffer + FrameLen,            &TmpLen,								  1,                                &HtCapIe,								  1,                                &HtLen,								 sizeof(HT_CAPABILITY_IE),          &pAd->CommonCfg.HtCapability, 								  1,                                &AddHtInfoIe,								  1,                                &AddHtLen,								 sizeof(ADD_HT_INFO_IE),          &pAd->CommonCfg.AddHTInfo, 								  1,                                &NewExtChanIe,								  1,                                &NewExtLen,								 sizeof(NEW_EXT_CHAN_IE),          &pAd->CommonCfg.NewExtChanOffset, 								  END_OF_ARGS);				}				FrameLen += TmpLen;			}#endif // DOT11_N_SUPPORT //			MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);			MlmeFreeMemory(pAd, pOutBuffer);		}	}}VOID BeaconTimeoutAtJoinAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT Status;	DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BeaconTimeoutAtJoinAction\n"));	pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;	Status = MLME_REJ_TIMEOUT;	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, 2, &Status);}/* 	==========================================================================	Description:		Scan timeout procedure. basically add channel index by 1 and rescan	========================================================================== */VOID ScanTimeoutAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	pAd->MlmeAux.Channel = NextChannel(pAd, pAd->MlmeAux.Channel);	// Only one channel scanned for CISCO beacon request	if ((pAd->MlmeAux.ScanType == SCAN_CISCO_ACTIVE) || 		(pAd->MlmeAux.ScanType == SCAN_CISCO_PASSIVE) ||		(pAd->MlmeAux.ScanType == SCAN_CISCO_NOISE) ||		(pAd->MlmeAux.ScanType == SCAN_CISCO_CHANNEL_LOAD))		pAd->MlmeAux.Channel = 0;	// this routine will stop if pAd->MlmeAux.Channel == 0	ScanNextChannel(pAd); }/* 	==========================================================================	Description:	========================================================================== */VOID InvalidStateWhenScan(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT Status;	DBGPRINT(RT_DEBUG_TRACE, ("AYNC - InvalidStateWhenScan(state=%ld). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState));	pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;	Status = MLME_STATE_MACHINE_REJECT;	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status);}/* 	==========================================================================	Description:	========================================================================== */VOID InvalidStateWhenJoin(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT Status;	DBGPRINT(RT_DEBUG_TRACE, ("InvalidStateWhenJoin(state=%ld). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState));	pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;	Status = MLME_STATE_MACHINE_REJECT;	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, 2, &Status);}/* 	==========================================================================	Description:	========================================================================== */VOID InvalidStateWhenStart(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT Status;	DBGPRINT(RT_DEBUG_TRACE, ("InvalidStateWhenStart(state=%ld). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState));	pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;	Status = MLME_STATE_MACHINE_REJECT;	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status);}/* 	==========================================================================	Description:	IRQL = DISPATCH_LEVEL		========================================================================== */VOID EnqueuePsPoll(	IN PRTMP_ADAPTER pAd) {#ifdef RALINK_ATE    if (ATE_ON(pAd))    {		return;    }#endif // RALINK_ATE //		if (pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeLegacy_PSP)    	pAd->PsPollFrame.FC.PwrMgmt = PWR_SAVE;	MiniportMMRequest(pAd, 0, (PUCHAR)&pAd->PsPollFrame, sizeof(PSPOLL_FRAME));}/* 	==========================================================================	Description:	========================================================================== */VOID EnqueueProbeRequest(	IN PRTMP_ADAPTER pAd) {	NDIS_STATUS     NState;	PUCHAR          pOutBuffer;	ULONG           FrameLen = 0;	HEADER_802_11   Hdr80211;	DBGPRINT(RT_DEBUG_TRACE, ("force out a ProbeRequest ...\n"));	NState = MlmeAllocateMemory(pAd, &pOutBuffer);  //Get an unused nonpaged memory	if (NState == NDIS_STATUS_SUCCESS) 	{		MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, BROADCAST_ADDR, BROADCAST_ADDR);		// this ProbeRequest explicitly specify SSID to reduce unwanted ProbeResponse		MakeOutgoingFrame(pOutBuffer,                     &FrameLen,						  sizeof(HEADER_802_11),          &Hdr80211,						  1,                              &SsidIe,						  1,                              &pAd->CommonCfg.SsidLen,						  pAd->CommonCfg.SsidLen,		  pAd->CommonCfg.Ssid,						  1,                              &SupRateIe,						  1,                              &pAd->StaActive.SupRateLen,						  pAd->StaActive.SupRateLen,      pAd->StaActive.SupRate, 						  END_OF_ARGS);		MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);		MlmeFreeMemory(pAd, pOutBuffer);	}}#ifdef DOT11_N_SUPPORT#ifdef DOT11N_DRAFT3VOID BuildEffectedChannelList(	IN PRTMP_ADAPTER pAd){	UCHAR		EChannel[11];	UCHAR		i, j, k;	UCHAR		UpperChannel = 0, LowerChannel = 0;		RTMPZeroMemory(EChannel, 11);	i = 0;	// Find upper channel and lower channel.	if (pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel)	{		UpperChannel = pAd->CommonCfg.Channel;		LowerChannel = pAd->CommonCfg.CentralChannel;	}	else if (pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel)	{		UpperChannel = pAd->CommonCfg.CentralChannel;		LowerChannel = pAd->CommonCfg.Channel;	}	else	{		return;	}	// Record channels that is below lower channel..	if (LowerChannel > 1)	{		EChannel[0] = LowerChannel - 1;		i = 1;		if (LowerChannel > 2)		{			EChannel[1] = LowerChannel - 2;			i = 2;			if (LowerChannel > 3)			{				EChannel[2] = LowerChannel - 3;				i = 3;			}		}	}	// Record channels that is between  lower channel and upper channel.	for (k = LowerChannel;k < UpperChannel;k++)	{		EChannel[i] = k;		i++;	}	// Record channels that is above upper channel..	if (LowerChannel < 11)	{		EChannel[i] = UpperChannel + 1;		i++;		if (LowerChannel < 10)		{			EChannel[i] = LowerChannel + 2;			i++;			if (LowerChannel < 9)			{				EChannel[i] = LowerChannel + 3;				i++;			}		}	}	// 	for (j = 0;j < i;j++)	{		for (k = 0;k < pAd->ChannelListNum;k++)		{			if (pAd->ChannelList[k].Channel == EChannel[j])			{				pAd->ChannelList[k].bEffectedChannel = TRUE;				DBGPRINT(RT_DEBUG_TRACE,(" EffectedChannel( =%d)\n", EChannel[j]));				break;			}		}	}}#endif // DOT11N_DRAFT3 //#endif // DOT11_N_SUPPORT //BOOLEAN ScanRunning(		IN PRTMP_ADAPTER pAd){	return (pAd->Mlme.SyncMachine.CurrState == SCAN_LISTEN) ? TRUE : FALSE;}

⌨️ 快捷键说明

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