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

📄 assoc.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
							  1,                                &HtCapIe,							  1,                                &pAd->MlmeAux.HtCapabilityLen,							 pAd->MlmeAux.HtCapabilityLen,          &pAd->MlmeAux.HtCapability, 							  END_OF_ARGS);#else                NdisZeroMemory(&HtCapabilityTmp, sizeof(HT_CAPABILITY_IE));                NdisMoveMemory(&HtCapabilityTmp, &pAd->MlmeAux.HtCapability, pAd->MlmeAux.HtCapabilityLen);        		*(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo));        		*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo));        		MakeOutgoingFrame(pOutBuffer + FrameLen,         &TmpLen,        							1,                           &HtCapIe,        							1,                           &pAd->MlmeAux.HtCapabilityLen,        							pAd->MlmeAux.HtCapabilityLen,&HtCapabilityTmp,         							END_OF_ARGS);#endif			}			FrameLen += TmpLen;		}#endif // DOT11_N_SUPPORT //		// add Ralink proprietary IE to inform AP this STA is going to use AGGREGATION or PIGGY-BACK+AGGREGATION		// Case I: (Aggregation + Piggy-Back)		// 1. user enable aggregation, AND		// 2. Mac support piggy-back		// 3. AP annouces it's PIGGY-BACK+AGGREGATION-capable in BEACON		// Case II: (Aggregation)		// 1. user enable aggregation, AND		// 2. AP annouces it's AGGREGATION-capable in BEACON		if (pAd->CommonCfg.bAggregationCapable)		{			if ((pAd->CommonCfg.bPiggyBackCapable) && ((pAd->MlmeAux.APRalinkIe & 0x00000003) == 3))			{				ULONG TmpLen;				UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x03, 0x00, 0x00, 0x00}; 				MakeOutgoingFrame(pOutBuffer+FrameLen,           &TmpLen,								  9,                             RalinkIe,								  END_OF_ARGS);				FrameLen += TmpLen;			}			else if (pAd->MlmeAux.APRalinkIe & 0x00000001)			{				ULONG TmpLen;				UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x01, 0x00, 0x00, 0x00}; 				MakeOutgoingFrame(pOutBuffer+FrameLen,           &TmpLen,								  9,                             RalinkIe,								  END_OF_ARGS);				FrameLen += TmpLen;			}		}		else		{			ULONG TmpLen;			UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x06, 0x00, 0x00, 0x00}; 			MakeOutgoingFrame(pOutBuffer+FrameLen,		 &TmpLen,							  9,						 RalinkIe,							  END_OF_ARGS);			FrameLen += TmpLen;		}		if (pAd->MlmeAux.APEdcaParm.bValid)		{			if (pAd->CommonCfg.bAPSDCapable && pAd->MlmeAux.APEdcaParm.bAPSDCapable)			{				QBSS_STA_INFO_PARM QosInfo;				NdisZeroMemory(&QosInfo, sizeof(QBSS_STA_INFO_PARM));				QosInfo.UAPSD_AC_BE = pAd->CommonCfg.bAPSDAC_BE;				QosInfo.UAPSD_AC_BK = pAd->CommonCfg.bAPSDAC_BK;				QosInfo.UAPSD_AC_VI = pAd->CommonCfg.bAPSDAC_VI;				QosInfo.UAPSD_AC_VO = pAd->CommonCfg.bAPSDAC_VO;				QosInfo.MaxSPLength = pAd->CommonCfg.MaxSPLength;				WmeIe[8] |= *(PUCHAR)&QosInfo;			}			else			{                // The Parameter Set Count is set to ¨0〃 in the association request frames                // WmeIe[8] |= (pAd->MlmeAux.APEdcaParm.EdcaUpdateCount & 0x0f);			}			MakeOutgoingFrame(pOutBuffer + FrameLen,    &tmp,							  9,                        &WmeIe[0],							  END_OF_ARGS);			FrameLen += tmp;		}				//		// Let WPA(#221) Element ID on the end of this association frame.		// Otherwise some AP will fail on parsing Element ID and set status fail on Assoc Rsp.		// For example: Put Vendor Specific IE on the front of WPA IE.		// This happens on AP (Model No:Linksys WRK54G)		//				if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) ||             (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) ||            (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) ||             (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)			)                        )          		{			UCHAR RSNIe = IE_WPA;						if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) ||                (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2))			{				RSNIe = IE_WPA2;			}				#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT#ifdef SIOCSIWGENIE			if (pAd->StaCfg.WpaSupplicantUP != 1)#endif // SIOCSIWGENIE //#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //            	RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, BSS0);                        // Check for WPA PMK cache list			if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)			{			    INT     idx;                BOOLEAN FoundPMK = FALSE;				// Search chched PMKID, append it if existed				for (idx = 0; idx < PMKID_NO; idx++)				{					if (NdisEqualMemory(ApAddr, &pAd->StaCfg.SavedPMK[idx].BSSID, 6))					{						FoundPMK = TRUE;						break;					}				}				if (FoundPMK)				{					// Set PMK number					*(PUSHORT) &pAd->StaCfg.RSN_IE[pAd->StaCfg.RSNIE_Len] = 1;					NdisMoveMemory(&pAd->StaCfg.RSN_IE[pAd->StaCfg.RSNIE_Len + 2], &pAd->StaCfg.SavedPMK[idx].PMKID, 16);                    pAd->StaCfg.RSNIE_Len += 18;				}			}			#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT#ifdef SIOCSIWGENIE			if (pAd->StaCfg.WpaSupplicantUP == 1)			{				MakeOutgoingFrame(pOutBuffer + FrameLen,    		&tmp,		                        	pAd->StaCfg.RSNIE_Len,			pAd->StaCfg.RSN_IE,		                        	END_OF_ARGS);			}			else#endif#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //			{				MakeOutgoingFrame(pOutBuffer + FrameLen,    		&tmp,				              		1,                              &RSNIe,		                        	1,                              &pAd->StaCfg.RSNIE_Len,		                        	pAd->StaCfg.RSNIE_Len,			pAd->StaCfg.RSN_IE,		                        	END_OF_ARGS);			}			FrameLen += tmp;#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT#ifdef SIOCSIWGENIE			if (pAd->StaCfg.WpaSupplicantUP != 1)#endif#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //			{	            // Append Variable IE	            NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &RSNIe, 1);	            VarIesOffset += 1;	            NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &pAd->StaCfg.RSNIE_Len, 1);	            VarIesOffset += 1;			}			NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, pAd->StaCfg.RSN_IE, pAd->StaCfg.RSNIE_Len);			VarIesOffset += pAd->StaCfg.RSNIE_Len;			// Set Variable IEs Length			pAd->StaCfg.ReqVarIELen = VarIesOffset;		}			// We have update that at PeerBeaconAtJoinRequest()		CkipFlag = pAd->StaCfg.CkipFlag;			if (CkipFlag != 0)		{							NdisZeroMemory(CkipNegotiationBuffer, CKIP_NEGOTIATION_LENGTH);			CkipNegotiationBuffer[2] = 0x66;			// Make it try KP & MIC, since we have to follow the result from AssocRsp			CkipNegotiationBuffer[8] = 0x18;			CkipNegotiationBuffer[CKIP_NEGOTIATION_LENGTH - 1] = 0x22;			CkipFlag = 0x18;					MakeOutgoingFrame(pOutBuffer + FrameLen, 	&tmp,						1,						  		&AironetCkipIe,						1,						  		&AironetCkipLen,						AironetCkipLen, 		  		CkipNegotiationBuffer,						END_OF_ARGS);			FrameLen += tmp;		}		// Add CCX v2 request if CCX2 admin state is on		if (pAd->StaCfg.CCXControl.field.Enable == 1)		{						//			// Add AironetIPAddressIE for Cisco CCX 2.X			// Add CCX Version			//			MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,						1,							&AironetIPAddressIE,						1,							&AironetIPAddressLen,						AironetIPAddressLen,		AironetIPAddressBuffer,						1,							&Ccx2Ie,						1,							&Ccx2Len,						Ccx2Len,				    Ccx2IeInfo,						END_OF_ARGS);			FrameLen += tmp;			//			// Add CipherSuite CCKM or LeapTkip if setting.			//#ifdef LEAP_SUPPORT						if (LEAP_CCKM_ON(pAd))			{				MakeOutgoingFrame(pOutBuffer + FrameLen,	&tmp,						CipherSuiteCiscoCCKMLen,		CipherSuiteCiscoCCKM,						END_OF_ARGS);				FrameLen += tmp;				// Third add RSN				NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, CipherSuiteCiscoCCKM, CipherSuiteCiscoCCKMLen); //Save CipherSuite				VarIesOffset += CipherSuiteCiscoCCKMLen;			} 			else if ((pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP) && (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled))			{				MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,						CipherSuiteCCXTkipLen,	    CipherSuiteCCXTkip,						END_OF_ARGS);				FrameLen += tmp;				// Third add RSN				NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, CipherSuiteCCXTkip, CipherSuiteCCXTkipLen);				VarIesOffset += CipherSuiteCCXTkipLen;			}#endif // LEAP_SUPPORT //						// Add by James 03/06/27			// Set Variable IEs Length			pAd->StaCfg.ReqVarIELen = VarIesOffset;			pAd->StaCfg.AssocInfo.RequestIELength = VarIesOffset;			// OffsetResponseIEs follow ReqVarIE			pAd->StaCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->StaCfg.ReqVarIELen;			// End Add by James 		}				MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);		MlmeFreeMemory(pAd, pOutBuffer);		RTMPSetTimer(&pAd->MlmeAux.AssocTimer, Timeout);		pAd->Mlme.AssocMachine.CurrState = ASSOC_WAIT_RSP;	} 	else 	{		DBGPRINT(RT_DEBUG_TRACE,("ASSOC - MlmeAssocReqAction() sanity check failed. BUG!!!!!! \n"));		pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;		Status = MLME_INVALID_FORMAT;		MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status);	}}/*	==========================================================================	Description:		mlme reassoc req handling procedure	Parameters:		Elem - 	Pre:		-# SSID  (Adapter->StaCfg.ssid[])		-# BSSID (AP address, Adapter->StaCfg.bssid)		-# Supported rates (Adapter->StaCfg.supported_rates[])		-# Supported rates length (Adapter->StaCfg.supported_rates_len)		-# Tx power (Adapter->StaCfg.tx_power)	IRQL = DISPATCH_LEVEL	========================================================================== */VOID MlmeReassocReqAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	UCHAR			ApAddr[6];	HEADER_802_11	ReassocHdr;	UCHAR			Ccx2Len = 5;		UCHAR			WmeIe[9] = {IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00};	USHORT			CapabilityInfo, ListenIntv;	ULONG			Timeout;	ULONG			FrameLen = 0;	BOOLEAN			TimerCancelled;	NDIS_STATUS		NStatus;	ULONG			tmp;	PUCHAR			pOutBuffer = NULL;//CCX 2.X#ifdef LEAP_SUPPORT	UCHAR			CkipFlag;	UCHAR			CkipNegotiationBuffer[CKIP_NEGOTIATION_LENGTH];	UCHAR			AironetCkipIe = IE_AIRONET_CKIP;	UCHAR			AironetCkipLen = CKIP_NEGOTIATION_LENGTH;	UCHAR			AironetIPAddressIE = IE_AIRONET_IPADDRESS;	UCHAR			AironetIPAddressLen = AIRONET_IPADDRESS_LENGTH;	UCHAR			AironetIPAddressBuffer[AIRONET_IPADDRESS_LENGTH] = {0x00, 0x40, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00};	UCHAR			AironetCCKMReassocIE = IE_AIRONET_CCKMREASSOC;	UCHAR			AironetCCKMReassocLen = AIRONET_CCKMREASSOC_LENGTH;	UCHAR			AironetCCKMReassocBuffer[AIRONET_CCKMREASSOC_LENGTH];	UCHAR			AironetOUI[] = {0x00, 0x40, 0x96, 0x00};	UCHAR			MICMN[16];	UCHAR			CalcMicBuffer[80];	ULONG			CalcMicBufferLen = 0;#endif // LEAP_SUPPORT //		USHORT			Status;	// Block all authentication request durning WPA block period	if (pAd->StaCfg.bBlockAssoc == TRUE)	{		DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Block ReAssoc request durning WPA block period!\n"));		pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;		Status = MLME_STATE_MACHINE_REJECT;		MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status);	}		// the parameters are the same as the association	else if(MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, ApAddr, &CapabilityInfo, &Timeout, &ListenIntv)) 	{		RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &TimerCancelled);		NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);  //Get an unused nonpaged memory		if(NStatus != NDIS_STATUS_SUCCESS) 		{			DBGPRINT(RT_DEBUG_TRACE,("ASSOC - MlmeReassocReqAction() allocate memory failed \n"));			pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;			Status = MLME_FAIL_NO_RESOURCE;			MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status);			return;		}		COPY_MAC_ADDR(pAd->MlmeAux.Bssid, ApAddr);		// make frame, use bssid as the AP address??		DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Send RE-ASSOC request...\n"));		MgtMacHeaderInit(pAd, &ReassocHdr, SUBTYPE_REASSOC_REQ, 0, ApAddr, ApAddr);		MakeOutgoingFrame(pOutBuffer,               &FrameLen,						  sizeof(HEADER_802_11),    &ReassocHdr,						  2,                        &CapabilityInfo,						  2,                        &ListenIntv,						  MAC_ADDR_LEN,             ApAddr,						  1,                        &SsidIe,						  1,                        &pAd->MlmeAux.SsidLen, 						  pAd->MlmeAux.SsidLen,     pAd->MlmeAux.Ssid, 						  1,                        &SupRateIe,						  1,						&pAd->MlmeAux.SupRateLen,						  pAd->MlmeAux.SupRateLen,  pAd->MlmeAux.SupRate,						  END_OF_ARGS);		if (pAd->MlmeAux.ExtRateLen != 0)		{			MakeOutgoingFrame(pOutBuffer + FrameLen,        &tmp,							  1,                            &ExtRateIe,							  1,                            &pAd->MlmeAux.ExtRateLen,							  pAd->MlmeAux.ExtRateLen,	    pAd->MlmeAux.ExtRate,							

⌨️ 快捷键说明

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