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

📄 sync.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	// switch channel and waiting for beacon timer	AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, FALSE);	AsicLockChannel(pAd, pAd->MlmeAux.Channel);	RTMPSetTimer(&pAd->MlmeAux.BeaconTimer, JOIN_TIMEOUT);    do	{		if (((pAd->CommonCfg.bIEEE80211H == 1) &&             (pAd->MlmeAux.Channel > 14) &&              RadarChannelCheck(pAd, pAd->MlmeAux.Channel))#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier                          || (pAd->CommonCfg.CarrierDetect.Enable == TRUE)#endif // CARRIER_DETECTION_SUPPORT //            )		{			//			// We can't send any Probe request frame to meet 802.11h.			//			if (pBss->Hidden == 0)				break;		}                		//		// send probe request		//		NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);		if (NStatus == NDIS_STATUS_SUCCESS)		{			if (pAd->MlmeAux.Channel <= 14)			{				pSupRate = pAd->CommonCfg.SupRate;				SupRateLen = pAd->CommonCfg.SupRateLen;				pExtRate = pAd->CommonCfg.ExtRate;				ExtRateLen = pAd->CommonCfg.ExtRateLen;			}			else			{				//				// Overwrite Support Rate, CCK rate are not allowed				//				pSupRate = ASupRate;				SupRateLen = ASupRateLen;				ExtRateLen = 0;			}			if (pAd->MlmeAux.BssType == BSS_INFRA)				MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, pAd->MlmeAux.Bssid, pAd->MlmeAux.Bssid);			else				MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, BROADCAST_ADDR, BROADCAST_ADDR);			MakeOutgoingFrame(pOutBuffer,               &FrameLen,							  sizeof(HEADER_802_11),    &Hdr80211,							  1,                        &SsidIe,							  1,                        &pAd->MlmeAux.SsidLen,							  pAd->MlmeAux.SsidLen,	    pAd->MlmeAux.Ssid,							  1,                        &SupRateIe,							  1,                        &SupRateLen,							  SupRateLen,               pSupRate,							  END_OF_ARGS);			if (ExtRateLen)			{				ULONG Tmp;				MakeOutgoingFrame(pOutBuffer + FrameLen,            &Tmp,								  1,                                &ExtRateIe,								  1,                                &ExtRateLen,								  ExtRateLen,                       pExtRate, 								  END_OF_ARGS);				FrameLen += Tmp;			}						MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);			MlmeFreeMemory(pAd, pOutBuffer);		}    } while (FALSE);	DBGPRINT(RT_DEBUG_TRACE, ("SYNC - Switch to ch %d, Wait BEACON from %02x:%02x:%02x:%02x:%02x:%02x\n", 		pBss->Channel, pBss->Bssid[0], pBss->Bssid[1], pBss->Bssid[2], pBss->Bssid[3], pBss->Bssid[4], pBss->Bssid[5]));	pAd->Mlme.SyncMachine.CurrState = JOIN_WAIT_BEACON;}/* 	==========================================================================	Description:		MLME START Request state machine procedure, starting an IBSS	========================================================================== */VOID MlmeStartReqAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	UCHAR         Ssid[MAX_LEN_OF_SSID], SsidLen; 	BOOLEAN       TimerCancelled;	// New for WPA security suites	UCHAR						VarIE[MAX_VIE_LEN]; 	// Total VIE length = MAX_VIE_LEN - -5	NDIS_802_11_VARIABLE_IEs	*pVIE = NULL;	LARGE_INTEGER				TimeStamp;	BOOLEAN Privacy;	USHORT Status;	// Init Variable IE structure	pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;	pVIE->Length = 0;	TimeStamp.u.LowPart  = 0;	TimeStamp.u.HighPart = 0;		if (MlmeStartReqSanity(pAd, Elem->Msg, Elem->MsgLen, Ssid, &SsidLen)) 	{		// reset all the timers		RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled);		RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled);		//		// Start a new IBSS. All IBSS parameters are decided now....		//		DBGPRINT(RT_DEBUG_TRACE, ("MlmeStartReqAction - Start a new IBSS. All IBSS parameters are decided now.... \n"));		pAd->MlmeAux.BssType           = BSS_ADHOC;		NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, SsidLen); 		pAd->MlmeAux.SsidLen           = SsidLen;		// generate a radom number as BSSID		MacAddrRandomBssid(pAd, pAd->MlmeAux.Bssid);		DBGPRINT(RT_DEBUG_TRACE, ("MlmeStartReqAction - generate a radom number as BSSID \n"));		Privacy = (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) || 				  (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || 				  (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled);		pAd->MlmeAux.CapabilityInfo    = CAP_GENERATE(0,1,Privacy, (pAd->CommonCfg.TxPreamble == Rt802_11PreambleShort), 1, 0);		pAd->MlmeAux.BeaconPeriod      = pAd->CommonCfg.BeaconPeriod;		pAd->MlmeAux.AtimWin           = pAd->StaCfg.AtimWin;		pAd->MlmeAux.Channel           = pAd->CommonCfg.Channel;		pAd->CommonCfg.CentralChannel  = pAd->CommonCfg.Channel;		pAd->MlmeAux.CentralChannel    = pAd->CommonCfg.CentralChannel;		pAd->MlmeAux.SupRateLen= pAd->CommonCfg.SupRateLen;		NdisMoveMemory(pAd->MlmeAux.SupRate, pAd->CommonCfg.SupRate, MAX_LEN_OF_SUPPORTED_RATES);		RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, &pAd->MlmeAux.SupRateLen);		pAd->MlmeAux.ExtRateLen = pAd->CommonCfg.ExtRateLen;		NdisMoveMemory(pAd->MlmeAux.ExtRate, pAd->CommonCfg.ExtRate, MAX_LEN_OF_SUPPORTED_RATES);		RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen);#ifdef DOT11_N_SUPPORT		if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)		{			RTMPUpdateHTIE(&pAd->CommonCfg.DesiredHtPhy, &pAd->StaCfg.DesiredHtPhyInfo.MCSSet[0], &pAd->MlmeAux.HtCapability, &pAd->MlmeAux.AddHtInfo);			pAd->MlmeAux.HtCapabilityLen = sizeof(HT_CAPABILITY_IE);			// Not turn pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE here.			DBGPRINT(RT_DEBUG_TRACE, ("SYNC -pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE\n"));		}		else#endif // DOT11_N_SUPPORT //		{			pAd->MlmeAux.HtCapabilityLen = 0;			pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE;		}		// temporarily not support QOS in IBSS		NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, sizeof(EDCA_PARM));		NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, sizeof(QBSS_LOAD_PARM));		NdisZeroMemory(&pAd->MlmeAux.APQosCapability, sizeof(QOS_CAPABILITY_PARM));		AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, FALSE);		AsicLockChannel(pAd, pAd->MlmeAux.Channel);		DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeStartReqAction(ch= %d,sup rates= %d, ext rates=%d)\n",			pAd->MlmeAux.Channel, pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRateLen));		pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;		Status = MLME_SUCCESS;		MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status);	} 	else 	{		DBGPRINT_ERR(("SYNC - MlmeStartReqAction() sanity check fail.\n"));		pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;		Status = MLME_INVALID_FORMAT;		MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status);	}}/* 	==========================================================================	Description:		peer sends beacon back when scanning	========================================================================== */VOID PeerBeaconAtScanAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	UCHAR           Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN];	UCHAR           Ssid[MAX_LEN_OF_SSID], BssType, Channel, NewChannel,					SsidLen, DtimCount, DtimPeriod, BcastFlag, MessageToMe;	CF_PARM         CfParm;	USHORT          BeaconPeriod, AtimWin, CapabilityInfo;	PFRAME_802_11   pFrame;	LARGE_INTEGER   TimeStamp;	UCHAR           Erp;	UCHAR         	SupRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRate[MAX_LEN_OF_SUPPORTED_RATES];	UCHAR		  	SupRateLen, ExtRateLen;	USHORT 			LenVIE;	UCHAR			CkipFlag;	UCHAR			AironetCellPowerLimit;	EDCA_PARM       EdcaParm;	QBSS_LOAD_PARM  QbssLoad;	QOS_CAPABILITY_PARM QosCapability;	ULONG						RalinkIe;	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 = 0, PreNHtCapabilityLen = 0;	UCHAR			AddHtInfoLen;	UCHAR			NewExtChannelOffset = 0xff;		// NdisFillMemory(Ssid, MAX_LEN_OF_SSID, 0x00);	pFrame = (PFRAME_802_11) Elem->Msg;	// Init Variable IE structure	pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;	pVIE->Length = 0;#ifdef DOT11_N_SUPPORT    RTMPZeroMemory(&HtCapability, sizeof(HtCapability));	RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE));#endif // DOT11_N_SUPPORT //	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)) 	{		ULONG Idx;		CHAR Rssi = 0;		Idx = BssTableSearch(&pAd->ScanTab, Bssid, Channel);		if (Idx != BSS_NOT_FOUND) 			Rssi = pAd->ScanTab.BssEntry[Idx].Rssi;		Rssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ConvertToRssi(pAd, Elem->Rssi2, RSSI_2));#ifdef DOT11_N_SUPPORT		if ((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0))			HtCapabilityLen = SIZE_HT_CAP_IE;#endif // DOT11_N_SUPPORT //		if ((pAd->StaCfg.CCXReqType != MSRN_TYPE_UNUSED) && (Channel == pAd->StaCfg.CCXScanChannel))		{			Idx = BssTableSetEntry(pAd, &pAd->StaCfg.CCXBssTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod, 						 &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen,ExtRate, ExtRateLen, &HtCapability,						 &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, Rssi, TimeStamp, CkipFlag, 						 &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE);			if (Idx != BSS_NOT_FOUND)			{				NdisMoveMemory(pAd->StaCfg.CCXBssTab.BssEntry[Idx].PTSF, &Elem->Msg[24], 4);				NdisMoveMemory(&pAd->StaCfg.CCXBssTab.BssEntry[Idx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4);				NdisMoveMemory(&pAd->StaCfg.CCXBssTab.BssEntry[Idx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4);				if (pAd->StaCfg.CCXReqType == MSRN_TYPE_BEACON_REQ)					AironetAddBeaconReport(pAd, Idx, Elem);			}		}		else		{			Idx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod,						  &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen,  &HtCapability,						 &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, Rssi, TimeStamp, CkipFlag, 						 &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE);#ifdef DOT11_N_SUPPORT#ifdef DOT11N_DRAFT3			if (pAd->ChannelList[pAd->CommonCfg.ChannelListIdx].bEffectedChannel == TRUE)			{				UCHAR		RegClass;				PeerBeaconAndProbeRspSanity2(pAd, Elem->Msg, Elem->MsgLen, &RegClass);				TriEventTableSetEntry(pAd, &pAd->CommonCfg.TriggerEventTab, Bssid, &HtCapability, HtCapabilityLen, RegClass, Channel);			}#endif // DOT11N_DRAFT3 //#endif // DOT11_N_SUPPORT //			if (Idx != BSS_NOT_FOUND)			{				NdisMoveMemory(pAd->ScanTab.BssEntry[Idx].PTSF, &Elem->Msg[24], 4);				NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4);				NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4);			}		}	}	// sanity check fail, ignored}/* 	==========================================================================	Description:		When waiting joining the (I)BSS, beacon received from external	========================================================================== */VOID PeerBeaconAtJoinAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	UCHAR         Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN];	UCHAR         Ssid[MAX_LEN_OF_SSID], SsidLen, BssType, Channel, MessageToMe, 				  DtimCount, DtimPeriod, BcastFlag, NewChannel; 	LARGE_INTEGER TimeStamp;	USHORT        BeaconPeriod, AtimWin, CapabilityInfo;	CF_PARM       Cf;	BOOLEAN       TimerCancelled;	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;	USHORT        Status;	UCHAR						VarIE[MAX_VIE_LEN];		// Total VIE length = MAX_VIE_LEN - -5

⌨️ 快捷键说明

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