亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rtusb_data.c

?? 臺灣RALink公司的 rt2570無線 802.11g 網卡的 驅動的源代碼 ,支持linux2.4以上的 內河
?? C
?? 第 1 頁 / 共 5 頁
字號:

		if ((CipherSuite == Ndis802_11Encryption1Enabled) && (EAPOLFrame == FALSE) &&
			(pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen != 0))
		{
			// Prepare IV, IV offset, Key for Hardware encryption
			RTMPInitWepEngine(
				pAdapter,
				pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].Key,
				pAdapter->PortCfg.DefaultKeyId,
				pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen,
				(PUCHAR) &pTxD->Iv);
			KeyID = pAdapter->PortCfg.DefaultKeyId;
			// Set Iv offset in TxD
			pTxD->IvOffset = LENGTH_802_11;

			NdisMoveMemory(pDest, &pTxD->Iv, 4);
			pDest += 4;
		}
		else if ((CipherSuite == Ndis802_11Encryption2Enabled) && (pWpaKey != NULL))
		{
			INT		i;

			i = 0;
			// Prepare IV, EIV, IV offset, Key for hardware encryption
			RTMPInitTkipEngine(
				pAdapter,
				pWpaKey->Key,
				pAdapter->PortCfg.DefaultKeyId,		// This might cause problem when using peer key
				Header_802_11.Controlhead.Addr2.Octet,
				pWpaKey->TxMic,
				pWpaKey->TxTsc,
				0,
				&Iv16,
				&Iv32,
				pDest);

			// Increase TxTsc value for next transmission
			while (++pWpaKey->TxTsc[i] == 0x0)
			{
				i++;
				if (i == 6)
					break;
			}
			if (i == 6)
			{
				// TODO: TSC has done one full cycle, do re-keying stuff follow specs
				// Should send a special event microsoft defined to request re-key
			}
			
			// Copy IV
			NdisMoveMemory(&pTxD->Iv, &Iv16, 4);
			
			// Copy EIV
			NdisMoveMemory(&pTxD->Eiv, &Iv32, 4);
			
			// Set IV offset
			pTxD->IvOffset = LENGTH_802_11;

			NdisMoveMemory(pDest, &Iv16, 4);
			pDest += 4;
			NdisMoveMemory(pDest, &Iv32, 4);
			pDest += 4;
			
		}
		else if ((CipherSuite == Ndis802_11Encryption3Enabled) && (pWpaKey != NULL))
		{
			INT		i;
			PUCHAR	pTmp;

			i = 0;
			pTmp = (PUCHAR) &Iv16;
			*pTmp       = pWpaKey->TxTsc[0];
			*(pTmp + 1) = pWpaKey->TxTsc[1];
			*(pTmp + 2) = 0;
			*(pTmp + 3) = (pAdapter->PortCfg.DefaultKeyId << 6) | 0x20;
			
			Iv32 = *(PULONG)(&pWpaKey->TxTsc[2]);
			
			// Increase TxTsc value for next transmission
			while (++pWpaKey->TxTsc[i] == 0x0)
			{
				i++;
				if (i == 6)
					break;
			}
			if (i == 6)
			{
				// TODO: TSC has done one full cycle, do re-keying stuff follow specs
				// Should send a special event microsoft defined to request re-key
			}
			
			// Copy IV
			NdisMoveMemory(&pTxD->Iv, &Iv16, 4);
			
			// Copy EIV
			NdisMoveMemory(&pTxD->Eiv, &Iv32, 4);
			
			// Set IV offset
			pTxD->IvOffset = LENGTH_802_11;

			NdisMoveMemory(pDest, &Iv16, 4);
			pDest += 4;
			NdisMoveMemory(pDest, &Iv32, 4);
			pDest += 4;

		}
		
		//
		// Only the first fragment required LLC-SNAP header !!!
		//
		if ((StartOfFrame == TRUE) && (Encapped == TRUE))
		{
			// For WEP & no encryption required frame, just copy LLC header into buffer,
			// Hardware will do the encryption job.
			// For TKIP, we have to calculate MIC and store it first
			if ((CipherSuite == Ndis802_11Encryption2Enabled) && (pWpaKey != NULL))
			{
				// Calculate MSDU MIC Value
				RTMPCalculateMICValue(pAdapter, skb, pEncap, 6, pWpaKey);
			}
			// For WEP & no encryption required frame, just copy LLC header into buffer,
			// Hardware will do the encryption job.
			// For TKIP, we have to calculate MIC and store it first
			
			// Copy LLC header
			NdisMoveMemory(pDest, pEncap, 6);
			pDest += 6;

			// Copy protocol type
			pSrc = (PUCHAR) pVirtualAddress;
			NdisMoveMemory(pDest, pSrc + 12, 2);
			pDest += 2;
			
			// Exclude 802.3 header size, we will recalculate the size at
			// the end of fragment preparation.
			NdisBufferLength -= LENGTH_802_3;
			pSrc += LENGTH_802_3;
			FreeFragSize -= LENGTH_802_1_H;
		}
		else if ((StartOfFrame == TRUE) && (Encapped == FALSE))
		{
			if ((pAdapter->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) && (pWpaKey != NULL))
			{
				// Calculate MSDU MIC Value
				RTMPCalculateMICValue(pAdapter, skb, pEncap, 0, pWpaKey);
			}
			
   			pSrc = (PUCHAR) pVirtualAddress + LENGTH_802_3;
	    		NdisBufferLength -= LENGTH_802_3;
		}
		
		// Start copying payload
		BytesCopied = 0;
		do
		{
			if (NdisBufferLength >= FreeFragSize)
			{
				// Copy only the free fragment size, and save the pointer
				// of current buffer descriptor for next fragment buffer.
				NdisMoveMemory(pDest, pSrc, FreeFragSize);
				BytesCopied += FreeFragSize;
				pSrc        += FreeFragSize;
				pDest       += FreeFragSize;
				NdisBufferLength      -= FreeFragSize;
				break;
			}
			else
			{
				// Copy the rest of this buffer descriptor pointed data
				// into ring buffer.
				NdisMoveMemory(pDest, pSrc, NdisBufferLength);
				BytesCopied  += NdisBufferLength;
				pDest        += NdisBufferLength;
				FreeFragSize -= NdisBufferLength;
			}
				// No more buffer descriptor
				// Add MIC value if needed
				if ((CipherSuite == Ndis802_11Encryption2Enabled) && 
					(MICFrag == FALSE) &&
					(pWpaKey != NULL))
				{
					INT i;

					NdisBufferLength = 8;		// Set length to MIC length
					DBGPRINT_RAW(RT_DEBUG_INFO, "Calculated TX MIC value =");  
					for (i = 0; i < 8; i++)
					{
						DBGPRINT_RAW(RT_DEBUG_INFO, "%02x:", pAdapter->PrivateInfo.Tx.MIC[i]);  
					}
					DBGPRINT_RAW(RT_DEBUG_INFO, "\n"); 
								
					if (FreeFragSize >= NdisBufferLength)
					{
						NdisMoveMemory(pDest, pAdapter->PrivateInfo.Tx.MIC, NdisBufferLength);
						BytesCopied  += NdisBufferLength;
						pDest		 += NdisBufferLength;
						FreeFragSize -= NdisBufferLength;
						NdisBufferLength = 0;
						RemainSize   += 8;	// Need to add MIC as payload
					}
					else
					{
						NdisMoveMemory(pDest, pAdapter->PrivateInfo.Tx.MIC, FreeFragSize);
						BytesCopied  += FreeFragSize;
						pSrc		  = pAdapter->PrivateInfo.Tx.MIC + FreeFragSize;
						pDest		 += FreeFragSize;
						NdisBufferLength		 -= FreeFragSize;
						MICFrag 	  = TRUE;
						RemainSize   += (8 - FreeFragSize);	// Need to add MIC as payload
					}
				}
		}	while (FALSE);		// End of copying payload
				
		// Real packet size, No 802.1H header for fragments except the first one.
		if ((StartOfFrame == TRUE) && (Encapped == TRUE))
		{
			TxSize = BytesCopied + LENGTH_802_11 + LENGTH_802_1_H;
		}
		else
		{
			TxSize = BytesCopied + LENGTH_802_11;
		}

		RemainSize = RemainSize - BytesCopied;
			
		if ((CipherSuite == Ndis802_11Encryption1Enabled) && (Header_802_11.Controlhead.Frame.Wep == 1))
		{
			// IV + ICV which ASIC added after encryption done
			TxSize += 4;
			PLCPLength = TxSize + 8;
		}
		else if ((CipherSuite == Ndis802_11Encryption2Enabled) && (pWpaKey != NULL))
		{
			// IV + EIV + ICV which ASIC added after encryption done
			TxSize += 8;
			PLCPLength = TxSize + 8;
		}
		else if ((CipherSuite == Ndis802_11Encryption3Enabled) && (pWpaKey != NULL))
		{
			// IV + EIV + HW MIC
			TxSize += 8;
			PLCPLength = TxSize + 12;
		}
		else
		{
			PLCPLength = TxSize + 4;
		}
		DBGPRINT_RAW(RT_DEBUG_INFO, "TxSize = %d, PLCPLength = %d\n", TxSize, PLCPLength);//steven:for debug
				
		// Prepare Tx descriptors before kicking tx.
		// The BBP register index in Tx descriptor has to be configured too.
		if (Header_802_11.Controlhead.Addr1.Octet[0] & 0x01)
		{
			INC_COUNTER(pAdapter->WlanCounters.MulticastTransmittedFrameCount);
			// Multicast, retry bit is off
			if (StartOfFrame == TRUE)
			{
				if (RTUSB_GET_PACKET_RTS(skb) != 1)
					RTUSBWriteTxDescriptor(pTxD, FALSE, 0, FALSE, FALSE, TRUE, FrameGap, TxSize, Cipher, KeyID, CW_MIN_IN_BITS, CW_MAX_IN_BITS, PLCPLength, pAdapter->PortCfg.TxRate, 4, pAdapter->PortCfg.TxPreambleInUsed);
				else
					RTUSBWriteTxDescriptor(pTxD, FALSE, 0, FALSE, FALSE, TRUE, FrameGap, TxSize, Cipher, KeyID, 0, 0, PLCPLength, pAdapter->PortCfg.TxRate, 4, pAdapter->PortCfg.TxPreambleInUsed);
			}
			else
				RTUSBWriteTxDescriptor(pTxD, FALSE, 0, FALSE, FALSE, FALSE, FrameGap, TxSize, Cipher, KeyID, 0, 0, PLCPLength, pAdapter->PortCfg.TxRate, 4, pAdapter->PortCfg.TxPreambleInUsed);
		}
		else
		{
			if (StartOfFrame == TRUE)
			{
				if (RTUSB_GET_PACKET_RTS(skb) != 1)
					RTUSBWriteTxDescriptor(pTxD, MoreFragment, 7, TRUE, FALSE, TRUE, FrameGap, TxSize, Cipher, KeyID, CW_MIN_IN_BITS, CW_MAX_IN_BITS, PLCPLength, pAdapter->PortCfg.TxRate, 4, pAdapter->PortCfg.TxPreambleInUsed);
				else
					RTUSBWriteTxDescriptor(pTxD, MoreFragment, 7, TRUE, FALSE, TRUE, FrameGap, TxSize, Cipher, KeyID, 0, 0, PLCPLength, pAdapter->PortCfg.TxRate, 4, pAdapter->PortCfg.TxPreambleInUsed);
			}
			else
				RTUSBWriteTxDescriptor(pTxD, MoreFragment, 7, TRUE, FALSE, FALSE, FrameGap, TxSize, Cipher, KeyID, 0, 0, PLCPLength, pAdapter->PortCfg.TxRate, 4, pAdapter->PortCfg.TxPreambleInUsed);
		}

		TransferBufferLength = TxSize + sizeof(TXD_STRUC);
		if ((TransferBufferLength % 2) == 1)//always bulk out even number of bytes
			TransferBufferLength++;
		if ((TransferBufferLength % pAdapter->BulkOutMaxPacketSize) == 0)
			TransferBufferLength += 2;

		pTxContext->BulkOutSize = TransferBufferLength;
		RTUSB_SET_BULK_FLAG(pAdapter, fRTUSB_BULK_OUT_DATA_NORMAL);
		
		// Set frame gap for the rest of fragment burst.
		// It won't matter if there is only one fragment (single fragment frame).
		StartOfFrame = FALSE;
		NumberRequired--;
		if (NumberRequired == 0)
		{
			pTxContext->LastOne = TRUE;
		}
		else
		{
			pTxContext->LastOne = FALSE;
		}
//steven:use ASIC counters to derive this count instead		INC_COUNTER(pAdapter->WlanCounters.TransmittedFragmentCount);
		//
		// Increase BulkOut stanby count.
		//		
		atomic_inc(&pAdapter->TxCount);
	}	while (NumberRequired > 0);

#if 0
	// Add duplicate 1mb broadcast frames
	do
	{
		if ((pAdapter->PortCfg.TxRate != RATE_1) && (Bcast_8023 == TRUE) && (SingleFrag == TRUE))
		{
			PTX_CONTEXT		pTmpContext;
			PTXD_STRUC		pTmpTxD;
			ULONG			DataOffset = 0;

			pSrc = pTxContext->TransferBuffer->WirelessPacket;
			//
			// Check the offset of the original 802.3 data packet
			//
			if (CipherSuite == Ndis802_11EncryptionDisabled)
				DataOffset = 0;
			else if (CipherSuite == Ndis802_11Encryption1Enabled)
				DataOffset += 4; //Add IV
			else if (CipherSuite == Ndis802_11Encryption2Enabled)
				DataOffset += 8; //Add EIV
			else if (CipherSuite == Ndis802_11Encryption3Enabled)	
				DataOffset += 8; //Add EIV
				
			// Check for DHCP & BOOTP protocol
			if ((*(pSrc + 0x35 + DataOffset) != 0x44) || (*(pSrc + 0x37 + DataOffset) != 0x43))
			{
				// 
				// 2054 (hex 0806) for ARP datagrams
				// if this packet is not ARP datagrams, then do nothing
				// ARP datagrams will also be duplicate at 1mb broadcast frames
				//
				if (Protocol != 0x0806 )
					break;
			}

			// Get the Tx Ring descriptor & Dma Buffer address
			pTmpContext = &pAdapter->TxContext[pAdapter->NextTxIndex];
			pDest = pTmpContext->TransferBuffer->WirelessPacket;
			
			if (pTmpContext->InUse == TRUE)
				break;  //No available Tx Ring for Send 1mb broadcast frames.

			// Increase & maintain Tx Ring Index
			pAdapter->NextTxIndex++;
			if (pAdapter->NextTxIndex >= TX_RING_SIZE)
			{
				pAdapter->NextTxIndex = 0;
			}
			
			//
			// Reset LastOne Tx Ring descriptor
			//
			pTmpContext->InUse   = TRUE;
			pTmpContext->LastOne = TRUE;

			pTmpTxD  = &(pTmpContext->TransferBuffer->TxDesc);
			//
			// Duplicate TxD descriptor, and we will reset the its value later.
			//
			NdisMoveMemory(pTmpTxD, pTxD, sizeof(TXD_STRUC));
			// Start coping data to new ring 
			NdisMoveMemory(pDest, pSrc, pTxContext->BulkOutSize);
			pTmpContext->BulkOutSize = pTxContext->BulkOutSize;
			RTUSBWriteTxDescriptor(pTmpTxD, FALSE, 7, TRUE, FALSE, FALSE, FrameGap, TxSize, Cipher, KeyID, 0, 0, PLCPLength, RATE_1, 4, pAdapter->PortCfg.TxPreambleInUsed);	
			//
			// Increase BulkOut stanby count.
			//			
			atomic_inc(&pAdapter->TxCount);
			DBGPRINT(RT_DEBUG_TRACE, "Send 1M broadcast frame!\n");
		}
	} while (FALSE);
#endif

	// Acknowledge protocol send complete of pending packet.
	RTUSBFreeSkbBuffer(skb);
	return (NDIS_STATUS_SUCCESS);

}

VOID RTUSBRxPacket(unsigned long data)
//VOID RTUSBRxPacket(purbb_t pUrb)
{
	//PRT2570ADAPTER pAdapter = (PRT2570ADAPTER)data;
	purbb_t pUrb = (purbb_t)data;
	PRT2570ADAPTER pAdapter;
	PRX_CONTEXT pRxContext;
	PRXD_STRUC		pRxD;
	NDIS_STATUS		Status;
	PHEADER_802_11	pHeader;
	PUCHAR			pData;
	PUCHAR			pDestMac, pSrcMac;
	UCHAR			KeyIdx;
	ULONG			i;
	UINT			PacketSize = 0;
	PUCHAR			pEncap;
	UCHAR			LLC_Len[2];
	UCHAR			Header802_3[14];
	PWPA_KEY		pWpaKey = NULL;
	// To indicate cipher used for this packet
	NDIS_802_11_ENCRYPTION_STATUS	Cipher;
	struct sk_buff  *skb;
	PVOID			pManage;

	pRxContext= (PRX_CONTEXT)pUrb->context;
	pAdapter = pRxContext->pAdapter;
	
	if( RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_REMOVE_IN_PROGRESS) )
		return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲精精品中文字幕早川悠里| 国产一区二区三区久久久| 91欧美一区二区| 亚洲欧美另类久久久精品2019 | 三级欧美在线一区| 欧美日韩五月天| 蜜桃免费网站一区二区三区| 欧美一激情一区二区三区| 国产综合色视频| 国产精品初高中害羞小美女文| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲精品国产无套在线观 | 制服丝袜中文字幕一区| 麻豆91在线播放| 欧美国产精品劲爆| 色狠狠综合天天综合综合| 亚洲va天堂va国产va久| 欧美成人综合网站| 99re这里都是精品| 喷水一区二区三区| 国产精品沙发午睡系列990531| 色综合天天综合| 天天综合日日夜夜精品| 中文字幕久久午夜不卡| 欧美揉bbbbb揉bbbbb| 国产一区视频在线看| 亚洲人成7777| 亚洲精品一区二区三区四区高清| 99精品欧美一区二区三区综合在线| 亚洲一区在线观看视频| 亚洲精品在线电影| 欧美亚洲国产一区二区三区| 精品在线观看免费| 亚洲摸摸操操av| 久久亚洲精品国产精品紫薇| 在线视频欧美区| 国产资源精品在线观看| 亚洲va欧美va天堂v国产综合| 国产日韩v精品一区二区| 欧美日本一区二区| 久久久久久久久久久黄色| 在线中文字幕一区二区| 国产·精品毛片| 免费久久精品视频| 亚洲动漫第一页| 国产精品丝袜久久久久久app| 欧美一区二区视频在线观看2022| 成人综合激情网| 久久福利视频一区二区| 亚洲一区二区三区美女| 国产精品每日更新在线播放网址| 欧美一区二区三区在线电影| 91一区二区在线| 福利一区福利二区| 久久99国产精品久久99果冻传媒| 一区二区成人在线视频| 中文字幕 久热精品 视频在线 | 欧美午夜不卡在线观看免费| 国产精品一区二区黑丝| 九九精品视频在线看| 亚洲成av人片| 亚洲一区二区3| 亚洲视频一区二区在线| 中文字幕乱码日本亚洲一区二区| 久久久99精品久久| 精品国产欧美一区二区| 91麻豆精品久久久久蜜臀| 欧美日韩在线精品一区二区三区激情| av一区二区三区| av电影天堂一区二区在线观看| 国产成人亚洲综合a∨猫咪| 国产一区二区在线视频| 极品尤物av久久免费看| 激情偷乱视频一区二区三区| 精品一区免费av| 国产麻豆视频精品| 狠狠色丁香婷婷综合久久片| 极品少妇一区二区| 极品美女销魂一区二区三区| 精油按摩中文字幕久久| 精品在线亚洲视频| 国产不卡视频一区| 成人精品电影在线观看| av不卡在线观看| 91久久国产最好的精华液| 在线免费观看日韩欧美| 欧美日韩久久久久久| 欧美一区二区三区公司| 欧美α欧美αv大片| 久久日韩精品一区二区五区| 久久婷婷色综合| 国产精品久久久久久久岛一牛影视 | 国产精品嫩草久久久久| 亚洲欧洲色图综合| 亚洲一区在线电影| 免费黄网站欧美| 国产麻豆9l精品三级站| 波波电影院一区二区三区| 色老汉一区二区三区| 91麻豆精品国产91久久久久久| 日韩欧美一区中文| 中文av一区特黄| 一区二区视频在线| 蜜臂av日日欢夜夜爽一区| 高清不卡在线观看| 欧美乱熟臀69xxxxxx| 亚洲精品一区在线观看| 亚洲日本一区二区| 免费成人在线播放| 成人午夜在线免费| 欧美日韩国产高清一区二区 | 欧美大片免费久久精品三p| 久久久精品日韩欧美| 亚洲精品乱码久久久久久黑人| 日韩中文欧美在线| 成人国产亚洲欧美成人综合网| 欧美自拍偷拍午夜视频| 久久精品人人做人人爽97| 亚洲午夜私人影院| 国产在线视频一区二区三区| 色悠悠久久综合| www久久精品| 性欧美大战久久久久久久久| 国产精品亚洲视频| 欧美精品久久99久久在免费线| 国产精品素人视频| 日本伊人精品一区二区三区观看方式| 懂色一区二区三区免费观看 | 一本色道亚洲精品aⅴ| 精品久久久久99| 亚洲成人激情社区| 99久久久无码国产精品| 日韩精品最新网址| 一区二区在线观看视频 | 色综合久久中文字幕| 精品国产髙清在线看国产毛片 | 日韩精品成人一区二区三区| 不卡一二三区首页| 久久综合av免费| 另类的小说在线视频另类成人小视频在线| www.日韩av| 国产色爱av资源综合区| 日av在线不卡| 欧美日韩中文精品| 亚洲影院在线观看| 91色九色蝌蚪| 中文字幕一区二区三区蜜月 | 欧美午夜精品久久久久久超碰 | 日韩欧美成人一区| 亚洲成人午夜电影| 欧美性大战久久| 一区二区三区欧美日韩| 99精品视频在线观看免费| 国产精品入口麻豆原神| 国产精品亚洲一区二区三区妖精| 欧美成人精品福利| 狂野欧美性猛交blacked| 3d成人动漫网站| 蜜臀久久久久久久| 宅男在线国产精品| 日韩中文欧美在线| 日韩欧美专区在线| 麻豆精品久久久| 欧美成人精品二区三区99精品| 免费观看一级欧美片| 日韩视频在线你懂得| 久久精品理论片| 欧美大尺度电影在线| 另类人妖一区二区av| 久久免费视频色| 成人国产精品视频| 亚洲欧美日韩中文播放| 色94色欧美sute亚洲线路二| 亚洲精品写真福利| 欧美影视一区在线| 日韩av高清在线观看| 欧美一区二区三区在线观看| 美女视频一区在线观看| 久久久久久亚洲综合| 懂色av一区二区在线播放| 亚洲欧美日韩国产成人精品影院 | 91片黄在线观看| 亚洲国产综合色| 日韩美女一区二区三区| 国产成人av影院| 亚洲免费观看高清完整 | 欧美成人一区二区三区在线观看| 国产乱子伦视频一区二区三区| 欧美激情综合网| 色成年激情久久综合| 日日嗨av一区二区三区四区| 精品国产露脸精彩对白| 91色porny在线视频| 日韩和欧美一区二区| 久久午夜电影网| 欧美中文字幕一二三区视频| 久久国产剧场电影| 中文字幕亚洲一区二区av在线| 欧美性大战久久久| 国产精品白丝jk白祙喷水网站|