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

📄 wt_mlme.c

📁 linux2.6.11内核无线网卡驱动程序。支持802.11 abg
💻 C
📖 第 1 页 / 共 2 页
字号:
	StartIbss_OID    StartIbssOID;	MlmeStartRequest MlmeStartRequest;	memcpy(&StartIbssOID, InformationBuffer, sizeof(StartIbss_OID));	memcpy(&MlmeStartRequest.mssid, &StartIbssOID.Ndis80211SsId,sizeof(NDIS_802_11_SSID));				/*MlmeStartRequest.yBtp = Ndis802_11IBSS;*/				MlmeStartRequest.yBtp = independent;	MlmeStartRequest.yBcnPeriod = StartIbssOID.BcnPeriod;		#ifdef WIN_PLATFORM        NdisZeroMemory( &Adapter->MacParameter.mCfPm, sizeof(CfParms));		#else	memset( &Adapter->MacParameter.mCfPm, 0, sizeof(CfParms));	#endif					memcpy(&MlmeStartRequest.ycfp, &Adapter->MacParameter.mCfPm,sizeof(CfParms));					MlmeStartRequest.bdPhyParms = StartIbssOID.Phpm;	MlmeStartRequest.yIbpm = Adapter->MacParameter.mIBPm;	MlmeStartRequest.ypdly = Adapter->MacParameter.mPdly;	MlmeStartRequest.mCap = Adapter->MacParameter.mCap;	memcpy(MlmeStartRequest.mBrates, Adapter->MacParameter.mBrates,sizeof(Ratestring));	memcpy(MlmeStartRequest.yOrates, Adapter->NdisCurNet.GeneralParameterOID.Orates,sizeof(Ratestring));	MlmeStartIBSS(Adapter, &MlmeStartRequest);}//实锟斤拷ID_CUSTOM_ASSOCIATE_BSS锟斤拷拇锟?void AssociateBssSetProc(IN PWT_ADAPTER Adapter,PVOID InformationBuffer){	BssSetProc(Adapter,InformationBuffer);}//实锟斤拷ID_CUSTOM_GENERAL_PARAMETER锟斤拷拇锟?void GeneralParameterSetProc(IN PWT_ADAPTER Adapter,PVOID InformationBuffer){        //UCHAR                CountryStrLen; //who used it? wl	GeneralParameter_OID GeneralParameterOID;        memcpy(&GeneralParameterOID, InformationBuffer, sizeof(GeneralParameter_OID));	//Country        memcpy(Adapter->NdisCurNet.GeneralParameterOID.Country, GeneralParameterOID.Country, sizeof(GeneralParameterOID.Country));  	//FragmentThreshold        Adapter->NdisCurNet.GeneralParameterOID.FragmentThreshold = GeneralParameterOID.FragmentThreshold;	//Operational rates	Adapter->NdisCurNet.GeneralParameterOID.NumOrates = GeneralParameterOID.NumOrates;	memcpy(Adapter->NdisCurNet.GeneralParameterOID.Orates, GeneralParameterOID.Orates, sizeof(GeneralParameterOID.Orates)); 	//PowerMode        Adapter->NdisCurNet.GeneralParameterOID.PowerMode = GeneralParameterOID.PowerMode;	//PreambleMode	Adapter->NdisCurNet.GeneralParameterOID.PreambleMode = GeneralParameterOID.PreambleMode;	//ProtectionPermission	Adapter->NdisCurNet.GeneralParameterOID.ProtectionPermission = GeneralParameterOID.ProtectionPermission;	//RFPower        Adapter->NdisCurNet.GeneralParameterOID.RFPower = GeneralParameterOID.RFPower;	//RTSThreshold	Adapter->NdisCurNet.GeneralParameterOID.RTSThreshold = GeneralParameterOID.RTSThreshold;	//TransmitRate        Adapter->NdisCurNet.GeneralParameterOID.TransmitRate = GeneralParameterOID.TransmitRate;}//锟紼NERAL_PARAMETERvoid SaveGeneralParameter(IN PWT_ADAPTER Adapter){	//Country    //memcpy(Adapter->NdisCurNet.GeneralParameterOID.Country, GeneralParameterOID.Country, sizeof(GeneralParameterOID.Country));  	//FragmentThreshold	Adapter->Ndis80211Parameter.FRAGMENTATION_THRESHOLD = Adapter->NdisCurNet.GeneralParameterOID.FragmentThreshold;	//PowerMode	Adapter->Ndis80211Parameter.POWER_MODE = Adapter->NdisCurNet.GeneralParameterOID.PowerMode;	//PreambleMode	//Adapter->NdisCurNet.GeneralParameterOID.PreambleMode = GeneralParameterOID.PreambleMode;	//ProtectionPermission	//Adapter->NdisCurNet.GeneralParameterOID.ProtectionPermission = GeneralParameterOID.ProtectionPermission;	//RFPower	Adapter->Ndis80211Parameter.TX_POWER_LEVEL = Adapter->NdisCurNet.GeneralParameterOID.RFPower;	//RTSThreshold	Adapter->Ndis80211Parameter.RTS_THRESHOLD = Adapter->NdisCurNet.GeneralParameterOID.RTSThreshold;	//TransmitRate    //Adapter->NdisCurNet.GeneralParameterOID.TransmitRate = GeneralParameterOID.TransmitRate;}//实锟斤拷ID_CUSTOM_MEMORY锟侥达拷void MemoryQueryProc(IN PWT_ADAPTER Adapter,PVOID InformationBuffer){		FN_ENTER;	if(!Adapter->Memory_OID.WriteMode)//锟絜mory	{		if( (Adapter->Memory_OID.Address < NIC_MAP_MAINMEMSPACE_LENGTH) &&(Adapter->MainMemAddress) )		{			memcpy( &Adapter->Memory_OID.Data, (UCHAR *)(Adapter->MainMemAddress) + ( Adapter->Memory_OID.Address & (~0x3)), 4);			memcpy(InformationBuffer, &Adapter->Memory_OID, sizeof(Memory_OID));		}		else		{			Adapter->Memory_OID.Data = 0xFFFFFFFF;			memcpy(InformationBuffer, &Adapter->Memory_OID, sizeof(Memory_OID));		}	}	FN_EXIT(0,0);}//实锟斤拷ID_CUSTOM_MEMORY锟斤拷拇锟?void MemorySetProc(IN PWT_ADAPTER Adapter,PVOID InformationBuffer){	FN_ENTER;	memcpy(&Adapter->Memory_OID, InformationBuffer, sizeof(Memory_OID));	if(Adapter->Memory_OID.WriteMode)	{		memcpy((PVOID)((UCHAR *) (Adapter->MainMemAddress) + Adapter->Memory_OID.Address), (PVOID)(&Adapter->Memory_OID.Data), Adapter->Memory_OID.WriteMode);	}	FN_EXIT(0,0);}//this function is defined for using wapiNDIS_STATUS SendFrameSetProc(IN PWT_ADAPTER Adapter,PVOID InformationBuffer){		USHORT           frmType;	UINT32           FrameLength;	p80211_hdr_t     *w_hdr;	PWTWLAN_TXBUF    pWtTxBuf;	PWTWLAN_HWTXBUF  pHwTxBuf;//just for test	FN_ENTER;        memcpy(&FrameLength,InformationBuffer,4);	AllocTxBuff(Adapter, &pWtTxBuf);		#ifdef WIN_PLATFORM	NdisAcquireSpinLock(&Adapter->SendLock);	#else	WT_SPIN_LOCK_IRQ(&Adapter->SendLock);	#endif		if( NULL == pWtTxBuf )	{// No send buf available, put it to SendwaitQueue		if( Adapter->nWaitSend > MAX_SENDWAITQUEUE_LEN )		{			 			return NDIS_STATUS_RESOURCE;		}		else		{		        #ifdef WIN_PLATFORM			InsertTailQueue( &Adapter->SendWaitQueue, WT_GET_TX_BUFFER_SLIST(pWtTxBuf));			#else			/* skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk) */			//skb_queue_tail(&Adapter->SendWaitQueue, &(pWtTxBuf->List));			#endif						Adapter->nWaitSend++;		}	}	else	{		//锟斤拷pWtTxBuf		memcpy(pWtTxBuf->TXHwBuf.pHwTxBuf->dot11Head,(char *)InformationBuffer + 4, WLAN_HDR_A3_LEN);		memcpy(pWtTxBuf->TXHwBuf.pHwTxBuf->Buffer,(char *)InformationBuffer + 4 + WLAN_HDR_A3_LEN, FrameLength - WLAN_HDR_A3_LEN);		pWtTxBuf->TXHwBuf.pHwTxBuf->TxAUXBuf.HeadLen = WLAN_HDR_A3_LEN;		pWtTxBuf->TXHwBuf.pHwTxBuf->TxAUXBuf.DataLen = host2ieee16( FrameLength - WLAN_HDR_A3_LEN );		pHwTxBuf = pWtTxBuf->TXHwBuf.pHwTxBuf;//just for test		w_hdr = (p80211_hdr_t *)pWtTxBuf->TXHwBuf.pHwTxBuf->dot11Head;		frmType = ( WLAN_GET_FC_FTYPE(ieee2host16(w_hdr->a3.fc)) );		WtTxQosPreProcess(pWtTxBuf);		// Get priority  and swap to out queue num @ QosTag		PowerCheck( Adapter,  pWtTxBuf);			PrePareMPDU( Adapter, pWtTxBuf);  //fill Tx AUX buffer		pHwTxBuf->TxAUXBuf.FrmCfg = 1;//just for test		pHwTxBuf->TxAUXBuf.EncryptType = 0;//just for test		if( (pWtTxBuf->PsMode != awake) && ( Adapter->MacParameter.mIbss) )		{			pWtTxBuf->pQueue = &Adapter->PsFrmQ;				}		else if(frmType == 0x00)//锟斤拷		{			pWtTxBuf->pQueue = &Adapter->TxFrmQMgmt;			Adapter->TxQMgmt++;		}		else		{			switch ( pWtTxBuf->QosTag )			{				case AC_BE:					pWtTxBuf->pQueue = &Adapter->TxFrmQBE;											break;				case AC_BK:					pWtTxBuf->pQueue = &Adapter->TxFrmQBK;					break;				case AC_VI:					pWtTxBuf->pQueue = &Adapter->TxFrmQVI;					break;				case AC_VO:					pWtTxBuf->pQueue = &Adapter->TxFrmQVO;					break;				default :					pWtTxBuf->QosTag = AC_BE;					pWtTxBuf->pQueue = &Adapter->TxFrmQBE;					break;			}			Adapter->TxQLen[pWtTxBuf->QosTag]++;		}		pWtTxBuf->ReQueueCount = 0;		InsertTailQueue( pWtTxBuf->pQueue, WT_GET_TX_BUFFER_SLIST(pWtTxBuf));	}	//printk("File %s Function %s Line %d \n", __FILE__, __FUNCTION__,__LINE__);		StaMacSend( Adapter );		#ifdef WIN_PLATFORM        NdisReleaseSpinLock(&Adapter->SendLock);	#else	WT_SPIN_UNLOCK_IRQ(&Adapter->SendLock);	#endif        FN_EXIT(0,0);	return NDIS_STATUS_SUCCESS;}void MlmeSetDefaultParameter(IN PWT_ADAPTER Adapter){}void InsertPacket(ReceivedPackets *pReceivedPackets, PWTWLAN_RXBUF pWtRxBuf){	UINT32 Length = 0;	FN_ENTER;	Length = sizeof(WTWLAN_RSB) + pWtRxBuf->RXHwBuf.pHwRxBuf->RxStatus.RecvBodyLen + pWtRxBuf->RXHwBuf.pHwRxBuf->RxStatus.RecvHeadLen;	if(pReceivedPackets->Length + Length + 4 <= MAX_RECEIVED_PACKETS_LEN - 8  )	{		pReceivedPackets->NumPackets ++;		*(UINT32 *)((char *)(pReceivedPackets->Packets) +  pReceivedPackets->Length) = Length;		pReceivedPackets->Length += 4;		memcpy((char *)pReceivedPackets->Packets +  pReceivedPackets->Length, &pWtRxBuf->RXHwBuf.pHwRxBuf->RxStatus, sizeof(WTWLAN_RSB));		pReceivedPackets->Length += sizeof(WTWLAN_RSB);		memcpy((char *)pReceivedPackets->Packets +  pReceivedPackets->Length, pWtRxBuf->RXHwBuf.pHwRxBuf->dot11Head, pWtRxBuf->RXHwBuf.pHwRxBuf->RxStatus.RecvHeadLen);		pReceivedPackets->Length += pWtRxBuf->RXHwBuf.pHwRxBuf->RxStatus.RecvHeadLen;		memcpy((char *)pReceivedPackets->Packets +  pReceivedPackets->Length, pWtRxBuf->RXHwBuf.pHwRxBuf->Buffer, pWtRxBuf->RXHwBuf.pHwRxBuf->RxStatus.RecvBodyLen);		pReceivedPackets->Length += pWtRxBuf->RXHwBuf.pHwRxBuf->RxStatus.RecvBodyLen;	}	FN_EXIT(0,0);}void IndicateReceivedPackets(IN PWT_ADAPTER Adapter){	FN_ENTER;    	#ifdef WIN_PLATFORM	NdisMIndicateStatus(Adapter->AdapterHandle, EVENT_CUSTOM_RECEIVE_PACKETS, Adapter->pReceivedPackets, Adapter->pReceivedPackets->Length + 8);	NdisMIndicateStatusComplete(Adapter->AdapterHandle);		NdisZeroMemory(Adapter->pReceivedPackets, sizeof(ReceivedPackets));	#else	memset(Adapter->pReceivedPackets, 0, sizeof(ReceivedPackets));	#endif	FN_EXIT(0,0);}BOOLEAN SetMacCacheKey( IN PWT_ADAPTER Adapter,  IN PNDIS_802_11_KEY Key){	//BOOL result = FALSE;	MacCache *tmpCache;	MacStaListUpdateAging(Adapter);		tmpCache = MacGetStaList( Adapter, Key->BSSID);	if( !tmpCache )	{		tmpCache = MacStaListAdd( Adapter, Key->BSSID);	}	if( !tmpCache )	{		MacStaListOptimize( Adapter );		tmpCache = MacStaListAdd( Adapter, Key->BSSID );	}	tmpCache->SeqNum = Key->KeyRSC;	//memcpy(tmpCache->nKey, Key->KeyMaterial, Key->KeyLength);				return TRUE;	}void SetKeyRegisters( IN PWT_ADAPTER Adapter,  IN PNDIS_802_11_KEY Key){	//ULONG addr;	if(Key == NULL)	{		return;	}    if(Key->KeyLength > 0)	{		Adapter->MainMemAddress->HwKeyTable[0].SeqNum = Key->KeyRSC;		memcpy(Adapter->MainMemAddress->HwKeyTable[0].MacAddress, Key->BSSID, ETH_ALEN);		memcpy(Adapter->MainMemAddress->HwKeyTable[0].Key.KeyWEP.WepKey, Key->KeyMaterial, Key->KeyLength);			//addr = (ULONG)&Adapter->MainMemAddress->HwKeyTable[0];		Adapter->MainMemAddress->HwCSMem.EncyptCSMem.DecryptModeMulticast = 2;		Adapter->MainMemAddress->HwCSMem.EncyptCSMem.DecryptModeUnicast =2;		/*Adapter->MainMemAddress->HwCSMem.EncyptCSMem.DecryptKeyAddrUnicast = ((ULONG)&Adapter->MainMemAddress->HwKeyTable[0] & 0x0000FFFF);		Adapter->MainMemAddress->HwCSMem.EncyptCSMem.DefaultAddrKey0 = ((ULONG)&Adapter->MainMemAddress->HwKeyTable[0] & 0x0000FFFF);*/		Adapter->MainMemAddress->HwCSMem.EncyptCSMem.DecryptKeyAddrUnicast = 0x0000;		Adapter->MainMemAddress->HwCSMem.EncyptCSMem.DefaultAddrKey0 = 0x0000;	}}void SetEncryptReg( IN PWT_ADAPTER Adapter, IN PWTWLAN_TXBUF pWtTxBuf){	pWtTxBuf->TXHwBuf.pHwTxBuf->TxAUXBuf.EncryptType = 2;	pWtTxBuf->TXHwBuf.pHwTxBuf->TxAUXBuf.EncryptKeyAddr = 0x0000;}void SecuritySetProc(IN PWT_ADAPTER Adapter,PVOID InformationBuffer){	char Info[80];	PSecurity_OID pSecurity_OID;	pSecurity_OID = (Security_OID *)InformationBuffer;	//printk("\nKeyLength:%d",pSecurity_OID->Key.KeyLength);	if(pSecurity_OID->Key.KeyLength <= sizeof(Security_OID) - 8);	{		Adapter->Ndis80211Parameter.AUTHENTICATION_MODE = pSecurity_OID->Ndis80211AuthenticationMode;		Adapter->Ndis80211Parameter.WEP_STATUS = pSecurity_OID->Ndis80211WEPStatus;		memcpy(&Adapter->Ndis80211Parameter.KEY[0], &pSecurity_OID->Key, pSecurity_OID->Key.Length);		memcpy( Adapter->MainMemAddress->HwKeyTable[0].Key.KeyBuff, pSecurity_OID->Key.KeyMaterial, pSecurity_OID->Key.KeyLength);				memcpy(Info, &pSecurity_OID->Key, pSecurity_OID->Key.Length);		//Adapter->MacParameter.mEncryptMode = pSecurity_OID->Ndis80211WEPStatus;		Adapter->MacParameter.mEncryptMode = ENCRYPT_WPI;//just for test 2005.3.5		WtWlanHwKeyCfg( Adapter);	}}

⌨️ 快捷键说明

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