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

📄 sync.c

📁 Linux下的RT系列无线网卡驱动,可以直接在x86平台上编译
💻 C
📖 第 1 页 / 共 5 页
字号:
						  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);		DBGPRINT(RT_DEBUG_INFO, ("SYNC - send ProbeReq @ channel=%d, Len=%ld\n", pAd->MlmeAux.Channel, FrameLen));	}	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;#ifdef	SINGLE_ADHOC_LINKUP	ULONG	Bssidx;	CF_PARM CfParm;	CfParm.bValid = FALSE;#endif	// 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);		pAd->MlmeAux.BeaconPeriod      = pAd->CommonCfg.BeaconPeriod;		pAd->MlmeAux.AtimWin           = pAd->StaCfg.AtimWin;		pAd->MlmeAux.Channel           = pAd->CommonCfg.Channel;		// TODO: if consider 40MHz BW in Adhoc		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);		if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)		{			RTMPUpdateHTIE(&pAd->CommonCfg.DesiredHtPhy, &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		{			pAd->MlmeAux.HtCapabilityLen = 0;			pAd->StaActive.SupportedHtPhy.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));#ifdef	SINGLE_ADHOC_LINKUP		// Add itself as the entry within BSS table		Bssidx = BssTableSearch(&pAd->ScanTab, pAd->MlmeAux.Bssid, pAd->MlmeAux.Channel);		if (Bssidx == BSS_NOT_FOUND)		{			Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, pAd->MlmeAux.Bssid,Ssid, SsidLen, pAd->MlmeAux.BssType, 				pAd->MlmeAux.BeaconPeriod, &CfParm, pAd->MlmeAux.AtimWin, pAd->MlmeAux.CapabilityInfo, 				&pAd->MlmeAux.HtCapability, pAd->MlmeAux.HtCapabilityLen, &pAd->CommonCfg.AddHTInfo, SIZE_ADD_HT_INFO_IE, pAd->MlmeAux.NewExtChannelOffset,				pAd->MlmeAux.SupRate, pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRate, pAd->MlmeAux.ExtRateLen,				&pAd->MlmeAux.SupportedHtPhy, pAd->MlmeAux.Channel, pAd->BbpRssiToDbmDelta - 30, TimeStamp, 0, NULL, NULL, 0, pVIE);		}#endif		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, PreNHtCapabilityLen;	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;    NdisZeroMemory(&HtCapability, sizeof(HtCapability));    	if (PeerBeaconAndProbeRspSanity(pAd, 								Elem->Msg, 								Elem->MsgLen, 								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;//        BOOLEAN	bUpdateRssi = TRUE;		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));//		DBGPRINT(RT_DEBUG_TRACE, ("SYNC - PeerBeaconAtScanAction (SubType=%d, SsidLen=%d, Ssid=%s)\n", pFrame->Hdr.FC.SubType, SsidLen,Ssid));		if ((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0))			HtCapabilityLen = SIZE_HT_CAP_IE;		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);			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;//	UINT          FrameLen = 0;	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	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, PreNHtCapabilityLen;	UCHAR			AddHtInfoLen;	UCHAR			NewExtChannelOffset = 0xff, CentralChannel;	// Init Variable IE structure	pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;	pVIE->Length = 0;	if (PeerBeaconAndProbeRspSanity(pAd, 								Elem->Msg, 								Elem->MsgLen, 								Addr2, 								Bssid, 								Ssid, 								&SsidLen, 								&BssType, 								&BeaconPeriod, 								&Channel, 								&NewChannel,								&TimeStamp, 								&Cf, 

⌨️ 快捷键说明

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