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

📄 sync.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	NDIS_802_11_VARIABLE_IEs	*pVIE = NULL;	ULONG           RalinkIe;	ULONG         Idx;	HT_CAPABILITY_IE		HtCapability;	ADD_HT_INFO_IE		AddHtInfo;	// AP might use this additional ht info IE 	UCHAR				HtCapabilityLen = 0, PreNHtCapabilityLen = 0;	UCHAR			AddHtInfoLen;	UCHAR			NewExtChannelOffset = 0xff;#ifdef DOT11_N_SUPPORT	UCHAR			CentralChannel;#endif // DOT11_N_SUPPORT //	// Init Variable IE structure	pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;	pVIE->Length = 0;    RTMPZeroMemory(&HtCapability, sizeof(HtCapability));	RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE));		if (PeerBeaconAndProbeRspSanity(pAd, 								Elem->Msg, 								Elem->MsgLen, 								Elem->Channel,								Addr2, 								Bssid, 								Ssid, 								&SsidLen, 								&BssType, 								&BeaconPeriod, 								&Channel, 								&NewChannel,								&TimeStamp, 								&Cf, 								&AtimWin, 								&CapabilityInfo, 								&Erp,								&DtimCount, 								&DtimPeriod, 								&BcastFlag, 								&MessageToMe, 								SupRate,								&SupRateLen,								ExtRate,								&ExtRateLen,								&CkipFlag,								&AironetCellPowerLimit,								&EdcaParm,								&QbssLoad,								&QosCapability,								&RalinkIe,								&HtCapabilityLen,								&PreNHtCapabilityLen,								&HtCapability,								&AddHtInfoLen,								&AddHtInfo,								&NewExtChannelOffset,								&LenVIE,								pVIE)) 	{		// Disqualify 11b only adhoc when we are in 11g only adhoc mode		if ((BssType == BSS_ADHOC) && (pAd->CommonCfg.PhyMode == PHY_11G) && ((SupRateLen+ExtRateLen)< 12))			return;		// BEACON from desired BSS/IBSS found. We should be able to decide most		// BSS parameters here.		// Q. But what happen if this JOIN doesn't conclude a successful ASSOCIATEION?		//    Do we need to receover back all parameters belonging to previous BSS?		// A. Should be not. There's no back-door recover to previous AP. It still need		//    a new JOIN-AUTH-ASSOC sequence.		if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Bssid)) 		{			DBGPRINT(RT_DEBUG_TRACE, ("SYNC - receive desired BEACON at JoinWaitBeacon... Channel = %d\n", Channel));			RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled);			// Update RSSI to prevent No signal display when cards first initialized			pAd->StaCfg.RssiSample.LastRssi0	= ConvertToRssi(pAd, Elem->Rssi0, RSSI_0);			pAd->StaCfg.RssiSample.LastRssi1	= ConvertToRssi(pAd, Elem->Rssi1, RSSI_1);			pAd->StaCfg.RssiSample.LastRssi2	= ConvertToRssi(pAd, Elem->Rssi2, RSSI_2);			pAd->StaCfg.RssiSample.AvgRssi0	= pAd->StaCfg.RssiSample.LastRssi0;			pAd->StaCfg.RssiSample.AvgRssi0X8	= pAd->StaCfg.RssiSample.AvgRssi0 << 3;			pAd->StaCfg.RssiSample.AvgRssi1	= pAd->StaCfg.RssiSample.LastRssi1;			pAd->StaCfg.RssiSample.AvgRssi1X8	= pAd->StaCfg.RssiSample.AvgRssi1 << 3;			pAd->StaCfg.RssiSample.AvgRssi2	= pAd->StaCfg.RssiSample.LastRssi2;			pAd->StaCfg.RssiSample.AvgRssi2X8	= pAd->StaCfg.RssiSample.AvgRssi2 << 3;			//			// We need to check if SSID only set to any, then we can record the current SSID.			// Otherwise will cause hidden SSID association failed. 			//			if (pAd->MlmeAux.SsidLen == 0)			{				NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, SsidLen);				pAd->MlmeAux.SsidLen = SsidLen;			}			else			{				Idx = BssSsidTableSearch(&pAd->ScanTab, Bssid, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, Channel);				if (Idx != BSS_NOT_FOUND)				{					//					// Multiple SSID case, used correct CapabilityInfo					//					CapabilityInfo = pAd->ScanTab.BssEntry[Idx].CapabilityInfo;				}			}			NdisMoveMemory(pAd->MlmeAux.Bssid, Bssid, MAC_ADDR_LEN);			pAd->MlmeAux.CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO;			pAd->MlmeAux.BssType = BssType;			pAd->MlmeAux.BeaconPeriod = BeaconPeriod;			pAd->MlmeAux.Channel = Channel;			pAd->MlmeAux.AtimWin = AtimWin;			pAd->MlmeAux.CfpPeriod = Cf.CfpPeriod;			pAd->MlmeAux.CfpMaxDuration = Cf.CfpMaxDuration;			pAd->MlmeAux.APRalinkIe = RalinkIe;			// Copy AP's supported rate to MlmeAux for creating assoication request			// Also filter out not supported rate			pAd->MlmeAux.SupRateLen = SupRateLen;			NdisMoveMemory(pAd->MlmeAux.SupRate, SupRate, SupRateLen);			RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, &pAd->MlmeAux.SupRateLen);			pAd->MlmeAux.ExtRateLen = ExtRateLen;			NdisMoveMemory(pAd->MlmeAux.ExtRate, ExtRate, ExtRateLen);			RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen);            NdisZeroMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, 16);#ifdef DOT11_N_SUPPORT			pAd->MlmeAux.NewExtChannelOffset = NewExtChannelOffset;			pAd->MlmeAux.HtCapabilityLen = HtCapabilityLen;			// filter out un-supported ht rates			if (((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))			{				RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE);   				RTMPMoveMemory(&pAd->MlmeAux.AddHtInfo, &AddHtInfo, SIZE_ADD_HT_INFO_IE);								// StaActive.SupportedHtPhy.MCSSet stores Peer AP's 11n Rx capability				NdisMoveMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, HtCapability.MCSSet, 16);				pAd->MlmeAux.NewExtChannelOffset = NewExtChannelOffset;				pAd->MlmeAux.HtCapabilityLen = SIZE_HT_CAP_IE;				pAd->StaActive.SupportedPhyInfo.bHtEnable = TRUE;				if (PreNHtCapabilityLen > 0)					pAd->StaActive.SupportedPhyInfo.bPreNHt = TRUE;				RTMPCheckHt(pAd, BSSID_WCID, &HtCapability, &AddHtInfo);				// Copy AP Parameter to StaActive.  This is also in LinkUp.				DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAtJoinAction! (MpduDensity=%d, MaxRAmpduFactor=%d, BW=%d)\n", 					pAd->StaActive.SupportedHtPhy.MpduDensity, pAd->StaActive.SupportedHtPhy.MaxRAmpduFactor, HtCapability.HtCapInfo.ChannelWidth));								if (AddHtInfoLen > 0)				{					CentralChannel = AddHtInfo.ControlChan;		 			// Check again the Bandwidth capability of this AP.		 			if ((AddHtInfo.ControlChan > 2)&& (AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW) && (HtCapability.HtCapInfo.ChannelWidth == BW_40))		 			{		 				CentralChannel = AddHtInfo.ControlChan - 2;		 			}		 			else if ((AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE) && (HtCapability.HtCapInfo.ChannelWidth == BW_40))		 			{		 				CentralChannel = AddHtInfo.ControlChan + 2;		 			}                    					// Check Error .					if (pAd->MlmeAux.CentralChannel != CentralChannel)		 				DBGPRINT(RT_DEBUG_ERROR, ("PeerBeaconAtJoinAction HT===>Beacon Central Channel = %d, Control Channel = %d. Mlmeaux CentralChannel = %d\n", CentralChannel, AddHtInfo.ControlChan, pAd->MlmeAux.CentralChannel));		 			DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAtJoinAction HT===>Central Channel = %d, Control Channel = %d,  .\n", CentralChannel, AddHtInfo.ControlChan));				}							}			else#endif // DOT11_N_SUPPORT //			{   				// To prevent error, let legacy AP must have same CentralChannel and Channel.				if ((HtCapabilityLen == 0) && (PreNHtCapabilityLen == 0))					pAd->MlmeAux.CentralChannel = pAd->MlmeAux.Channel;				pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE;				RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE);				RTMPZeroMemory(&pAd->MlmeAux.AddHtInfo, SIZE_ADD_HT_INFO_IE);			}			RTMPUpdateMlmeRate(pAd);			// copy QOS related information			if ((pAd->CommonCfg.bWmmCapable)#ifdef DOT11_N_SUPPORT				 || (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)#endif // DOT11_N_SUPPORT //				)			{				NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, &EdcaParm, sizeof(EDCA_PARM));				NdisMoveMemory(&pAd->MlmeAux.APQbssLoad, &QbssLoad, sizeof(QBSS_LOAD_PARM));				NdisMoveMemory(&pAd->MlmeAux.APQosCapability, &QosCapability, sizeof(QOS_CAPABILITY_PARM));			}			else			{				NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, sizeof(EDCA_PARM));				NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, sizeof(QBSS_LOAD_PARM));				NdisZeroMemory(&pAd->MlmeAux.APQosCapability, sizeof(QOS_CAPABILITY_PARM));			}						DBGPRINT(RT_DEBUG_TRACE, ("SYNC - after JOIN, SupRateLen=%d, ExtRateLen=%d\n", 										pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRateLen));#ifdef LEAP_SUPPORT			// Update CkipFlag			pAd->StaCfg.CkipFlag = CkipFlag;						// Keep TimeStamp for Re-Association used.			if (LEAP_CCKM_ON(pAd) && (pAd->StaCfg.CCKMLinkUpFlag == TRUE))				pAd->StaCfg.CCKMBeaconAtJoinTimeStamp = TimeStamp;#endif // LEAP_SUPPORT //							if (AironetCellPowerLimit != 0xFF)			{				//We need to change our TxPower for CCX 2.0 AP Control of Client Transmit Power				ChangeToCellPowerLimit(pAd, AironetCellPowerLimit);			}			else  //Used the default TX Power Percentage.				pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault;			pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;			Status = MLME_SUCCESS;			MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, 2, &Status);		}		// not to me BEACON, ignored	} 	// sanity check fail, ignore this frame}/* 	==========================================================================	Description:		receive BEACON from peer	IRQL = DISPATCH_LEVEL	========================================================================== */VOID PeerBeacon(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	UCHAR         Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN];	CHAR          Ssid[MAX_LEN_OF_SSID];	CF_PARM       CfParm;	UCHAR         SsidLen, MessageToMe=0, BssType, Channel, NewChannel, index=0;	UCHAR         DtimCount=0, DtimPeriod=0, BcastFlag=0;	USHORT        CapabilityInfo, AtimWin, BeaconPeriod;	LARGE_INTEGER TimeStamp;	USHORT        TbttNumToNextWakeUp;	UCHAR         Erp;	UCHAR         SupRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRate[MAX_LEN_OF_SUPPORTED_RATES];	UCHAR		  SupRateLen, ExtRateLen;	UCHAR		  CkipFlag;	USHORT        LenVIE;	UCHAR		  AironetCellPowerLimit;	EDCA_PARM       EdcaParm;	QBSS_LOAD_PARM  QbssLoad;	QOS_CAPABILITY_PARM QosCapability;	ULONG           RalinkIe;	// New for WPA security suites	UCHAR						VarIE[MAX_VIE_LEN];		// Total VIE length = MAX_VIE_LEN - -5	NDIS_802_11_VARIABLE_IEs	*pVIE = NULL;	HT_CAPABILITY_IE		HtCapability;	ADD_HT_INFO_IE		AddHtInfo;	// AP might use this additional ht info IE 	UCHAR			HtCapabilityLen, PreNHtCapabilityLen;	UCHAR			AddHtInfoLen;	UCHAR			NewExtChannelOffset = 0xff;#ifdef RALINK_ATE    if (ATE_ON(pAd))    {		return;    }#endif // RALINK_ATE //	if (!(INFRA_ON(pAd) || ADHOC_ON(pAd)		))		return;	// Init Variable IE structure	pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;	pVIE->Length = 0;    RTMPZeroMemory(&HtCapability, sizeof(HtCapability));	RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE));	if (PeerBeaconAndProbeRspSanity(pAd, 								Elem->Msg, 								Elem->MsgLen, 								Elem->Channel,								Addr2, 								Bssid, 								Ssid, 								&SsidLen, 								&BssType, 								&BeaconPeriod, 								&Channel, 								&NewChannel,								&TimeStamp, 								&CfParm, 								&AtimWin, 								&CapabilityInfo, 								&Erp,								&DtimCount, 								&DtimPeriod, 								&BcastFlag, 								&MessageToMe, 								SupRate,								&SupRateLen,								ExtRate,								&ExtRateLen,								&CkipFlag,								&AironetCellPowerLimit,								&EdcaParm,								&QbssLoad,								&QosCapability,								&RalinkIe,								&HtCapabilityLen,								&PreNHtCapabilityLen,								&HtCapability,								&AddHtInfoLen,								&AddHtInfo,								&NewExtChannelOffset,								&LenVIE,								pVIE)) 	{		BOOLEAN is_my_bssid, is_my_ssid;		ULONG   Bssidx, Now;		BSS_ENTRY *pBss;		CHAR		RealRssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ConvertToRssi(pAd, Elem->Rssi2, RSSI_2));		is_my_bssid = MAC_ADDR_EQUAL(Bssid, pAd->CommonCfg.Bssid)? TRUE : FALSE;		is_my_ssid = SSID_EQUAL(Ssid, SsidLen, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen)? TRUE:FALSE;		// ignore BEACON not for my SSID		if ((! is_my_ssid) && (! is_my_bssid))			return;		// It means STA waits disassoc completely from this AP, ignores this beacon.		if (pAd->Mlme.CntlMachine.CurrState == CNTL_WAIT_DISASSOC)			return;		#ifdef DOT11_N_SUPPORT		// Copy Control channel for this BSSID.				if (AddHtInfoLen != 0)			Channel = AddHtInfo.ControlChan;		if ((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0))

⌨️ 快捷键说明

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