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

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

?? rtusb_data.c

?? 臺灣RALink公司的 rt2570無線 802.11g 網卡的 驅動的源代碼 ,支持linux2.4以上的 內河
?? C
?? 第 1 頁 / 共 5 頁
字號:
	do
	{
		if (pRxContext->pUrb->actual_length >= (sizeof(RXD_STRUC) + LENGTH_802_11))//blue
		{
			pData = pRxContext->TransferBuffer;
			pManage = (PVOID) pData;

			pRxD = (PRXD_STRUC)(pData + pRxContext->pUrb->actual_length - sizeof(RXD_STRUC));
			pHeader	= (PHEADER_802_11)pData;
			if (pRxD->DataByteCnt < 4)
				Status = NDIS_STATUS_FAILURE;
			else
			{
				pAdapter->PortCfg.Pss = PWR_ACTIVE;

				// Increase Total receive byte counter after real data received no mater any error or not
				pAdapter->RalinkCounters.ReceivedByteCount += (pRxD->DataByteCnt - 4);

				// Check for all RxD errors
				Status = RTMPCheckRxDescriptor(pAdapter, pRxD);
			}

			if (Status == NDIS_STATUS_SUCCESS)
			{
				// Apply packet filtering rule based on microsoft requirements.
				Status = RTMPApplyPacketFilter(pAdapter, pRxD, pHeader);
			}	
		
			// Add receive counters
			if (Status == NDIS_STATUS_SUCCESS)
			{
				// Increase 802.11 counters & general receive counters
				INC_COUNTER(pAdapter->WlanCounters.ReceivedFragmentCount);
			}
			else
			{
				// Increase general counters
				pAdapter->Counters.RxErrors++;
			}
			

			// Check for retry bit, if this bit is on, search the cache with SA & sequence
			// as index, if matched, discard this frame, otherwise, update cache
			// This check only apply to unicast data & management frames
			if ((pRxD->U2M) && (Status == NDIS_STATUS_SUCCESS) && (pHeader->Controlhead.Frame.Type != BTYPE_CNTL))
			{
				if (pHeader->Controlhead.Frame.Retry)
				{
					if (RTMPSearchTupleCache(pAdapter, pHeader) == TRUE)
					{
						// Found retry frame in tuple cache, Discard this frame / fragment
						// Increase 802.11 counters
						INC_COUNTER(pAdapter->WlanCounters.FrameDuplicateCount);
						DBGPRINT_RAW(RT_DEBUG_INFO, "duplicate frame\n");//steven:for debug
						Status = NDIS_STATUS_FAILURE;
					}
					else
					{
						RTMPUpdateTupleCache(pAdapter, pHeader);
					}
				}
				else	// Update Tuple Cache
				{
					RTMPUpdateTupleCache(pAdapter, pHeader);
				}
			}
			
			// Check and set the cipher variable
			if (pRxD->U2M)
				Cipher = pAdapter->PortCfg.PairCipher;
			else
				Cipher = pAdapter->PortCfg.GroupCipher;		
				Cipher = pAdapter->PortCfg.WepStatus;

			//
			// Do RxD release operation	for	all	failure	frames
			//
			if (Status == NDIS_STATUS_SUCCESS)
			{
				//
				// Start of	main loop to parse receiving frames.
				// The sequence	will be	Type first,	then subtype...
				//
				switch (pHeader->Controlhead.Frame.Type)
					{
						// Frame with data type
						case BTYPE_DATA:
							// pData : Pointer skip	the	first 24 bytes,	802.11 HEADER
							pData += LENGTH_802_11;

							PacketSize = pRxD->DataByteCnt - LENGTH_802_11 - 4;	 //Minus FCS[4].  default for NoneWep.
							// Drop not my BSS frame
							if (INFRA_ON(pAdapter))
							{
								// Infrastructure mode, check address 2 for BSSID
								if (!RTMPEqualMemory(&pHeader->Controlhead.Addr2, &pAdapter->PortCfg.Bssid, 6))
									break;	// Receive frame not my BSSID
								else
									atomic_inc(&(pAdapter->PortCfg.DataPacketsFromAP));
							}
							else	// Ad-Hoc mode or Not associated
							{
								// Ad-Hoc mode, check address 3 for BSSID
								if (!RTMPEqualMemory(&pHeader->Addr3, &pAdapter->PortCfg.Bssid, 6))						
									break;	// Receive frame not my BSSID

								// Drop frame from AP while we are in Ad-hoc mode or not associated
								if (pHeader->Controlhead.Frame.FrDs)
									break;
							}

							// Drop Null data frame, or CF with NULL data frame
							if ((pHeader->Controlhead.Frame.Subtype == SUBTYPE_NULL_FUNC) ||
								(pHeader->Controlhead.Frame.Subtype == SUBTYPE_CFACK)     ||
								(pHeader->Controlhead.Frame.Subtype == SUBTYPE_CFPOLL)    ||
								(pHeader->Controlhead.Frame.Subtype == SUBTYPE_CFACK_CFPOLL))
							{
								break;
							}

							// Process Broadcast & Multicast data frame
							if (pRxD->Bcast || pRxD->Mcast)
							{
								// Multicast 802.11 Counter
								INC_COUNTER(pAdapter->WlanCounters.MulticastReceivedFrameCount);
								DBGPRINT(RT_DEBUG_INFO,"Receiving multicast frame\n");
								// Drop Mcast / Bcast frame with fragment bit on
								if (pHeader->Controlhead.Frame.MoreFrag)
								{
									DBGPRINT_RAW(RT_DEBUG_ERROR,"Receiving multicast frame with fragment bit on\n");							
									break;
								}	
								
								// Filter out Bcast frame which AP relayed for us
								if ((RTMPEqualMemory(&pHeader->Addr3, pAdapter->CurrentAddress, 6)) && pHeader->Controlhead.Frame.FrDs)
									break;
								
								// WEP encrypted frame
								if (pHeader->Controlhead.Frame.Wep)
								{
									// Check our WEP setting, if no WEP turning on, just drop this frame
									if (Cipher == Ndis802_11Encryption1Enabled)	// WEP
									{
										if (pRxD->CiErr)
											break;
										else
										{
											pData = pData + 4;  //Offset skip IV[4]
											pRxD->DataByteCnt = pRxD->DataByteCnt - 8; //Minus ICV[4] & FCS[4].
										}

										PacketSize = pRxD->DataByteCnt - LENGTH_802_11 - 4;	//Minus IV[4].
									}
									else if (Cipher == Ndis802_11Encryption2Enabled)	// TKIP
									{
										if (pRxD->CiErr)
											{
									DBGPRINT_RAW(RT_DEBUG_ERROR,"pRxD->CiErr\n");							
											break;
											}
										else
										{
											pData = pData + 8; //Offset skip IV[8]
											//
											// the MIC is stored on the last one no more Fragment.
											// that is only last MPDU only need to check MIC.
											//
											if (pHeader->Controlhead.Frame.MoreFrag == TRUE)
											{									
												// No MIC here.
												pRxD->DataByteCnt = pRxD->DataByteCnt - 8; //ICV[4] &FCS[4].
											}
											else
											{
												if (pHeader->Frag != 0)
													pRxD->DataByteCnt = pRxD->DataByteCnt - 8; //MIC been frag ICV[4] & FCS[4]
												else										
													pRxD->DataByteCnt = pRxD->DataByteCnt - 16; //Minus MIC[8] & ICV[4] &FCS[4].
											}								
										}

										PacketSize = pRxD->DataByteCnt - LENGTH_802_11 - 8;	//Minus IV+EIV[8].
									}
									else if (Cipher == Ndis802_11Encryption3Enabled)	// AES
									{
										if (pRxD->CiErr)
											break;
										else
										{
											pData = pData + 8; //Offset skip RSN[8]
											pRxD->DataByteCnt = pRxD->DataByteCnt - 12;  //Minus MIC[8] & ICV[4]
										}

										PacketSize = pRxD->DataByteCnt - LENGTH_802_11 - 8;	//Minus RSN[8]
									}
									else
										break;
								}
							}//if (pRxD->Bcast || pRxD->Mcast)				
							// Begin process unicast to	me frame
							else if	(pRxD->U2M)
							{					
								//
								// Begin frame processing
								//
								// DA is always	address	1
								pDestMac = (PUCHAR)	&(pHeader->Controlhead.Addr1);
								// Seclect SA by different mode
								if (INFRA_ON(pAdapter))		// For infrastructure, SA is address 3
								{
									pSrcMac	= (PUCHAR) &(pHeader->Addr3);
								}
								else									// For IBSS	mode, SA is	address	2
								{
									pSrcMac	= (PUCHAR) &(pHeader->Controlhead.Addr2);
								}
								// WEP encrypted frame
								if (Cipher == Ndis802_11Encryption1Enabled)	// WEP
								{
									if (pHeader->Controlhead.Frame.Wep)
									{
										if (pRxD->CiErr)
											break;
										else
										{
											pData = pData + 4; //Offset skip IV[4]
											pRxD->DataByteCnt = pRxD->DataByteCnt - 8; //Minus ICV[4] & FCS[4].
										}

										PacketSize = pRxD->DataByteCnt - LENGTH_802_11 - 4;	//Minus IV[4].
									}
									else if ((pAdapter->PortCfg.PrivacyFilter == Ndis802_11PrivFilter8021xWEP) &&
											 (pHeader->Frag == 0))
									{
										// Check 802.1x frame, if not drop it.
										if (!RTMPEqualMemory(EAPOL, pData + 6, 2))
										{
											// Not 802.1X frames
											// Add error counter
											break;
										}							
									}						
								}
								else if (Cipher == Ndis802_11Encryption2Enabled)	// TKIP
								{
									if (pHeader->Controlhead.Frame.Wep)
									{
										if (pRxD->CiErr)
											{										
								DBGPRINT(RT_DEBUG_TEMP,"pRxD->CiErr\n");
											break;


											}
										else
										{
											pData = pData + 8;  //Offset skip IV[8]
											//
											// the MIC is stored on the last one no more Fragment.
											// that is only last MPDU only need to check MIC.
											//
											if (pHeader->Controlhead.Frame.MoreFrag == TRUE)
											{
												//No MIC here.
												pRxD->DataByteCnt = pRxD->DataByteCnt - 8; //ICV[4] &FCS[4].
											}
											else
											{
												if (pHeader->Frag != 0)
													pRxD->DataByteCnt = pRxD->DataByteCnt - 8; //MIC been frag ICV[4] & FCS[4]
												else
													pRxD->DataByteCnt = pRxD->DataByteCnt - 16; //Minus MIC[8] & ICV[4] & FCS[4].
											}
										}

										PacketSize = pRxD->DataByteCnt - LENGTH_802_11 - 8;	//Minus IV+EIV[8].
									}
									else if ((pAdapter->PortCfg.PrivacyFilter == Ndis802_11PrivFilter8021xWEP) &&
											 (pHeader->Frag == 0))
									{
										// Check 802.1x frame, if not drop it.
										if (!RTMPEqualMemory(EAPOL, pData + 6, 2))
										{
								DBGPRINT(RT_DEBUG_TEMP,"Not 802.1X frames\n");
											// Not 802.1X frames
											// Add error counter
											break;
										}
										DBGPRINT(RT_DEBUG_TEMP," 802.1X EAPOL frames\n");
									}
								}
								else if (Cipher == Ndis802_11Encryption3Enabled)	// AES
								{
									if (pHeader->Controlhead.Frame.Wep)
									{
										if (pRxD->CiErr)
											break;
										else
										{
											pData = pData + 8; //Offset skip IV[8]
											pRxD->DataByteCnt = pRxD->DataByteCnt - 12;  //Minus MIC[8] & ICV[4]
										}

										PacketSize = pRxD->DataByteCnt - LENGTH_802_11 - 8;	//Minus RSN[8]
									}
									else if ((pAdapter->PortCfg.PrivacyFilter == Ndis802_11PrivFilter8021xWEP) &&
											 (pHeader->Frag == 0))
									{
										// Check 802.1x frame, if not drop it.
										if (!RTMPEqualMemory(EAPOL, pData + 6, 2))
										{
											// Not 802.1X frames
											// Add error counter
											break;
										}
									}
								}
								else if (pHeader->Controlhead.Frame.Wep)
								{
									// Drop WEP frame when PrivacyInvoked is FALSE
									break;
								}						
							}//else if	(pRxD->U2M)
			
							// The total available payload should exclude 24-byte 802.11 Header
							//packetSize = pRxD->DataByteCnt - LENGTH_802_11 - 4;					

							// Find the WPA key, either Group or Pairwise Key
							// Although the data has been decrypted by ASIC,
							// driver has to calculate the RxMIC which required the key.
							// The failed case should not happen. If it did, drop it.
							if ((pAdapter->PortCfg.CipherAlg == CIPHER_TKIP) && (pHeader->Controlhead.Frame.Wep))
							{
								INT 	idx;

								pWpaKey = (PWPA_KEY) NULL;
								// First lookup the DA, if it's a group address, use GROUP key
								if (pRxD->Bcast || pRxD->Mcast)
								{
									idx = (pRxD->Iv & 0xc0000000) >> 30;
									if ((pAdapter->PortCfg.GroupKey[idx].KeyLen != 0) && 
										((INFRA_ON(pAdapter) && (NdisEqualMemory(&pHeader->Controlhead.Addr2, &pAdapter->PortCfg.Bssid, 6))) ||
										(ADHOC_ON(pAdapter) && (NdisEqualMemory(&pHeader->Addr3, &pAdapter->PortCfg.Bssid, 6)))))
									{
										pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.GroupKey[idx];
										pWpaKey->Type = GROUP_KEY;
										DBGPRINT(RT_DEBUG_INFO, "Rx Use Group Key %d\n", idx);
									}
								}
								// Try to find the Pairwise Key
								else
								{
									for (idx = 0; idx < PAIRWISE_KEY_NO; idx++)
									{
										if ((NdisEqualMemory(&pHeader->Controlhead.Addr2, pAdapter->PortCfg.PairwiseKey[idx].BssId, 6)) &&
											(pAdapter->PortCfg.PairwiseKey[idx].KeyLen != 0))
										{
											pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.PairwiseKey[idx];
											pWpaKey->Type = PAIRWISE_KEY;
											DBGPRINT(RT_DEBUG_TEMP, "Rx Use Pairwise Key %d\n",idx);
											break;
										}
									}
									// Use default Group Key if there is no Pairwise key present
									if ((pWpaKey == NULL) && (pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId].KeyLen != 0))
									{
										pWpaKey = (PWPA_KEY) &pAdapter->PortCfg.GroupKey[pAdapter->PortCfg.DefaultKeyId];
										pWpaKey->Type = GROUP_KEY;
										DBGPRINT(RT_DEBUG_INFO, "Rx Use Group Key\n");
									}
								}
								
								if (pWpaKey == NULL)
									break;
							}

							// DA is always address 1
							pDestMac = (PUCHAR) &(pHeader->Controlhead.Addr1);
							// Seclect SA by different mode
							if (INFRA_ON(pAdapter))
							{
								// For infrastructure, SA is address 3
								pSrcMac = (PUCHAR) &(pHeader->Addr3);
							}
							else
							{
								// For IBSS mode, SA is address 2
								pSrcMac = (PUCHAR) &(pHeader->Controlhead.Addr2);
							}
			
							// Process Broadcast & Multicast data frame
							if (pRxD->Bcast || pRxD->Mcast)
							{							
								// Save encapaturation starting pointer
								pEncap = pData;

								// For TKIP frame, calculate the MIC value
								if ((pAdapter->PortCfg.CipherAlg == CIPHER_TKIP) && (pHeader->Controlhead.Frame.Wep))
								{
									i = 0;

									if (RTMPTkipCompareMICValue(pAdapter,															
																pData,
																pDestMac,
																pSrcMac,
																pWpaKey->RxMic,
																PacketSize) == FALSE)
									{
										DBGPRINT_RAW(RT_DEBUG_ERROR,"BroadCast/Multicast Rx MIC Value error\n");
										RTMPReportMicError(pAdapter, pWpaKey);
										Status = NDIS_STATUS_FAILURE;
										break;
							

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美乱妇20p| 亚洲精品免费在线| 亚洲一区二区三区中文字幕| 成人av一区二区三区| 国产精品人妖ts系列视频| 国产一区二区91| 日本一区二区免费在线| 97成人超碰视| 日韩精品乱码av一区二区| 精品免费国产一区二区三区四区| 视频一区中文字幕国产| 成人深夜在线观看| 亚洲精品视频自拍| 亚洲另类在线制服丝袜| 亚洲男人的天堂在线观看| 91精品国产综合久久香蕉麻豆| 国产黄色成人av| 亚洲国产中文字幕| 久久久久亚洲综合| 一本色道久久综合亚洲aⅴ蜜桃| 奇米影视一区二区三区| 亚洲欧美在线视频| 日韩欧美一二三四区| 99精品欧美一区二区三区综合在线| 99国产精品国产精品久久| 91蜜桃网址入口| 国产99一区视频免费| 蜜臀av一区二区在线免费观看| 亚洲三级久久久| 国产女主播视频一区二区| 自拍偷自拍亚洲精品播放| 午夜电影网亚洲视频| 亚洲亚洲精品在线观看| 久久99精品久久久久久动态图| 亚洲无人区一区| 韩国精品在线观看| 国产真实乱子伦精品视频| 丁香天五香天堂综合| 欧美中文字幕一二三区视频| 色悠悠久久综合| 日韩美女一区二区三区四区| 国产精品久久久久影视| 国产精品国产三级国产普通话99 | 五月综合激情日本mⅴ| 久久99国内精品| 日本高清成人免费播放| 成人av先锋影音| 日韩视频不卡中文| 欧美tickle裸体挠脚心vk| 亚洲视频在线观看三级| 精品一区二区三区在线播放| 色综合天天视频在线观看| 精品国产一区二区三区四区四 | 99久久免费视频.com| 欧美刺激脚交jootjob| 怡红院av一区二区三区| 成人性生交大片免费看在线播放| 欧美一区二区视频在线观看2022| 欧美精品乱码久久久久久按摩| 久久精品欧美日韩精品 | 欧美高清在线一区| 亚洲国产精品99久久久久久久久 | 丰满少妇久久久久久久| 亚洲色图视频网站| 九一九一国产精品| 91精品国产综合久久久蜜臀粉嫩| 亚洲精品少妇30p| 白白色 亚洲乱淫| 色屁屁一区二区| 国产精品三级在线观看| 国产精品一级二级三级| 91丝袜国产在线播放| 国产色婷婷亚洲99精品小说| 极品尤物av久久免费看| 精品欧美一区二区三区精品久久 | 成人sese在线| 国产欧美精品一区aⅴ影院| 狠狠久久亚洲欧美| 精品国产一区二区三区不卡| 久久av资源站| 91一区二区三区在线播放| 国产色产综合产在线视频| 国产乱人伦精品一区二区在线观看| 日韩天堂在线观看| 激情五月婷婷综合网| 久久久久久久久久久久久女国产乱| 韩国v欧美v亚洲v日本v| 日本一区二区视频在线观看| eeuss影院一区二区三区 | 在线观看www91| 亚洲午夜激情网站| 7777精品伊人久久久大香线蕉完整版 | 在线免费观看日本一区| 亚洲卡通欧美制服中文| 欧美日韩亚洲丝袜制服| 国产精品毛片高清在线完整版| 成人午夜激情视频| 一区二区三区日韩在线观看| 国产成人午夜片在线观看高清观看| 国产欧美视频一区二区| 色爱区综合激月婷婷| 亚洲成av人片在线| 91小视频在线| 蜜臀av性久久久久av蜜臀妖精| 久久久久久久久久看片| 日本电影亚洲天堂一区| 麻豆精品久久久| 成人免费在线播放视频| 日韩小视频在线观看专区| 丁香另类激情小说| 日产欧产美韩系列久久99| 在线视频欧美精品| 蜜臀av国产精品久久久久| 最新成人av在线| 日韩视频在线一区二区| 成人美女视频在线看| 日日欢夜夜爽一区| 国产欧美一区二区精品性色超碰| 91高清视频在线| 国产乱人伦偷精品视频免下载| 一区二区三区91| 国产清纯美女被跳蛋高潮一区二区久久w | 91福利资源站| 国产成人免费视| 午夜精品久久久久影视| 国产精品视频一二| 日韩一区二区电影| 日本视频一区二区三区| 麻豆精品精品国产自在97香蕉| 日本一区二区三区视频视频| 在线观看日韩一区| 国产成人av电影| 玖玖九九国产精品| 一区二区三区中文免费| 欧美精品一区二区三区久久久 | 中文字幕佐山爱一区二区免费| 日韩欧美一区二区在线视频| 91免费视频大全| 国产999精品久久久久久绿帽| 秋霞午夜av一区二区三区| 一区二区三区欧美激情| 亚洲欧洲av另类| 亚洲国产精品精华液ab| 久久综合九色综合欧美98 | 精品国产一区二区三区av性色| 欧洲精品在线观看| 91啪在线观看| 91无套直看片红桃| 99久久777色| 97aⅴ精品视频一二三区| 岛国精品在线播放| 成人午夜在线视频| 国产69精品久久99不卡| 成人一区在线观看| 99精品一区二区三区| 91久久精品日日躁夜夜躁欧美| 色婷婷精品久久二区二区蜜臂av | 日韩一区二区在线观看视频| 3d动漫精品啪啪| 91精品国产91久久久久久最新毛片 | 亚洲成a人v欧美综合天堂| 亚洲黄一区二区三区| 亚洲精品菠萝久久久久久久| 一区二区三区成人| 日韩精品国产欧美| 久久国产夜色精品鲁鲁99| 韩国成人在线视频| 成人国产精品免费| 色偷偷88欧美精品久久久| 欧美性videosxxxxx| 国产精品自拍一区| 成人av在线一区二区三区| 91视频com| 欧美日韩免费视频| 欧美成人精品二区三区99精品| 久久午夜色播影院免费高清| 国产精品三级视频| 亚洲动漫第一页| 久久黄色级2电影| 粉嫩嫩av羞羞动漫久久久| 色噜噜狠狠色综合欧洲selulu| 欧美另类久久久品| 久久久久久久久蜜桃| 一区二区三区视频在线观看| 久久成人综合网| 91在线视频官网| 欧美人动与zoxxxx乱| 色老综合老女人久久久| 欧美一二三区精品| 国产精品三级电影| 日本美女视频一区二区| 成人av在线影院| 日韩欧美一级二级| 国产精品久久久久久久久免费樱桃| 夜夜嗨av一区二区三区| 国产精品自产自拍| 欧美日韩国产综合一区二区| 中文字幕二三区不卡| 视频一区二区中文字幕| 成人app网站|