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

📄 wt_mlme.c

📁 mini-PCI driver for LHWT chipsets
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "wtprecomp.h"#if DBG#define _FILENUMBER     'EMLM'#endif//Memory_OID gMemory_OID;//just for testvoid InitMacStat(IN PWT_ADAPTER Adapter){	FN_ENTER;	TimerCancel( Adapter );			//WtDisableInterrupts(Adapter);	//udelay(800);		Adapter->MacParameter.CurrentState = NO_BSS;	Adapter->MacParameter.AsocStatus = Asoc_Idle;	Adapter->MacParameter.AuthStatus = Auth_Req_Idle;	Adapter->MacParameter.mAssoc = FALSE;	WT_MEMSET( &Adapter->MainMemAddress->HwCSMem.NetMacAddress.NetAddress,6, 0xFF );		//WtEnableInterrupts(Adapter);		memset(Adapter->MacParameter.mBssid, 0, WLAN_BSSID_LEN);	memset(&Adapter->MacParameter.mSsId, 0, sizeof(NDIS_802_11_SSID));	udelay(20000);		FN_EXIT(0,0);}//实锟斤拷ID_CUSTOM_JOIN_IBSS锟斤拷拇锟?//void JoinBssSetProc(IN PWT_ADAPTER Adapter,PVOID InformationBuffer)void BssSetProc(IN PWT_ADAPTER Adapter,PVOID InformationBuffer){	UINT32 i;	MlmeJoinRequest  MlmeJoinRequest;	FN_ENTER;		InitMacStat(Adapter);	memset(  &Adapter->NdisCurNet, 0,  sizeof(NDIS_802_11_CUR_NET));	memcpy(&Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid, InformationBuffer, sizeof(NDIS_802_11_SSID));	for( i = 0; i < Adapter->Ndis80211Parameter.pWlanScanDb->NumberOfItems; i++)	{			#ifdef WIN_PLATFORM			if(Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.SsidLength == Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength && NdisEqualMemory(Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.Ssid, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.Ssid, Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength))			#else			if(Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.SsidLength == Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength && ( 0 ==memcmp(Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.Ssid, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.Ssid, Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength) ) )			#endif			{				MlmeJoinRequest.JTo = 10;								#ifdef WIN_PLATFORM				NdisZeroMemory(MlmeJoinRequest.ORates, sizeof(Ratestring));				#else				memset(MlmeJoinRequest.ORates,0, sizeof(Ratestring));				#endif								memcpy(MlmeJoinRequest.ORates, Adapter->NdisCurNet.GeneralParameterOID.Orates,Adapter->NdisCurNet.GeneralParameterOID.NumOrates);				MlmeJoinRequest.PDly = 1000;//1 ms				MlmeJoinRequest.BD.ndisbssidex.Configuration.BeaconPeriod = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Configuration.BeaconPeriod;			      memcpy(MlmeJoinRequest.BD.ndisbssidex.SupportedRates, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.SupportedRates,sizeof(NDIS_802_11_RATES_EX));				memcpy(MlmeJoinRequest.BD.ndisbssidex.MacAddress, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.MacAddress, sizeof(MacAddr));				memcpy(&MlmeJoinRequest.BD.ndisbssidex.Ssid, &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid, sizeof(MlmeJoinRequest.BD.ndisbssidex.Ssid));				MlmeJoinRequest.BD.ie_fixed.Capabilities = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_fixed.Capabilities;				MlmeJoinRequest.BD.ndisbssidex.Configuration.DSConfig = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Configuration.DSConfig;				MlmeJoinRequest.BD.ndisbssidex.Configuration.Length = sizeof(NDIS_802_11_CONFIGURATION);				memcpy(&MlmeJoinRequest.BD.ie_cfps, &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_cfps, sizeof(cfps_t));				MlmeJoinRequest.BD.ie_tim.dtim_period = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_tim.dtim_period;				MlmeJoinRequest.BD.ie_ibss_parms.atim_win = Adapter->MacParameter.mIBPm;			        MlmeJoinRequest.BD.ndisbssidex.InfrastructureMode = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.InfrastructureMode;				memcpy( (char *)&Adapter->NdisCurNet.WlanDesc, (char *)&Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i], sizeof(WTWLAN_BSSID_DESC) );												//printk("<0>MlmeJoinRequest.BD.ndisbssidex.InfrastructureMode = %x\r\n",MlmeJoinRequest.BD.ndisbssidex.InfrastructureMode);				MlmeJoin( Adapter, &MlmeJoinRequest );				//printk("<0>In Function %s after MlmeJoin \n\r ",__FUNCTION__);				break;			}	}	if( i >= Adapter->Ndis80211Parameter.pWlanScanDb->NumberOfItems) 	{											MlmeSetDefaultParameter(Adapter);		Adapter->MacParameter.CurrentState = NO_BSS;		if(Adapter->bLinkStatus)		{		Adapter->bLinkStatus = FALSE;		#ifdef WIN_PLATFORM		NdisMIndicateStatus(Adapter->AdapterHandle, NDIS_STATUS_MEDIA_DISCONNECT, (PVOID)0, 0);		NdisMIndicateStatusComplete(Adapter->AdapterHandle);		#endif		}	}		FN_EXIT(0,0);}void SSIDSetProc(IN PWT_ADAPTER Adapter,PVOID InformationBuffer){	//printk("<0>*******Function %s*******Line %d*******\n\r",__FUNCTION__,__LINE__);	FN_ENTER;	//0. stop net data send first	LoadDefaultFlag( Adapter );		// 1. disconnect org net first	InitMacStat(Adapter);	memset(  &Adapter->NdisCurNet, 0,  sizeof(NDIS_802_11_CUR_NET));	memcpy(&Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid, InformationBuffer, sizeof(NDIS_802_11_SSID));	// 2. check macmode and do by macmode	switch( Adapter->MacParameter.macmode )	{		case IW_MODE_AUTO:			break;		case IW_MODE_ADHOC:			IbssSetProc( Adapter, InformationBuffer);			break;		case IW_MODE_INFRA:			BssSetProc( Adapter, InformationBuffer);			break;		case IW_MODE_MASTER:			break;		case IW_MODE_SECOND:			break;		case IW_MODE_MONITOR:			break;		default:			break;	}		FN_EXIT(0,0);	return;}#if 0void SSIDSetProc(IN PWT_ADAPTER Adapter,PVOID InformationBuffer){	UINT32 i;	MlmeStartRequest MlmeStartRequest;	MlmeJoinRequest  MlmeJoinRequest;	//printk("<0>*******Function %s*******Line %d*******\n\r",__FUNCTION__,__LINE__);	//printk("<0>current stat = %d\r\n",Adapter->MacParameter.CurrentState);		//Tx_Rx_Statsic(Adapter);		InitMacStat(Adapter);	memset(  &Adapter->NdisCurNet, 0,  sizeof(NDIS_802_11_CUR_NET));	memcpy(&Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid, InformationBuffer, sizeof(NDIS_802_11_SSID));		if(Adapter->MacParameter.mAssoc==0)	{		for(i = 0; i < Adapter->Ndis80211Parameter.pWlanScanDb->NumberOfItems; i++)		{							#ifdef WIN_PLATFORM			if(Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.SsidLength == Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength && NdisEqualMemory(Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.Ssid, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.Ssid, Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength))			#else			if(Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.SsidLength == Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength && ( 0 ==memcmp(Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.Ssid, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.Ssid, Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength) ) )			#endif			{				MlmeJoinRequest.JTo = 10;								#ifdef WIN_PLATFORM				NdisZeroMemory(MlmeJoinRequest.ORates, sizeof(Ratestring));				#else				memset(MlmeJoinRequest.ORates,0, sizeof(Ratestring));				#endif								memcpy(MlmeJoinRequest.ORates, Adapter->NdisCurNet.GeneralParameterOID.Orates,Adapter->NdisCurNet.GeneralParameterOID.NumOrates);				MlmeJoinRequest.PDly = 1000;//1 ms				MlmeJoinRequest.BD.ndisbssidex.Configuration.BeaconPeriod = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Configuration.BeaconPeriod;			        memcpy(MlmeJoinRequest.BD.ndisbssidex.SupportedRates, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.SupportedRates,sizeof(NDIS_802_11_RATES_EX));				memcpy(MlmeJoinRequest.BD.ndisbssidex.MacAddress, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.MacAddress, sizeof(MacAddr));				memcpy(&MlmeJoinRequest.BD.ndisbssidex.Ssid, &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid, sizeof(MlmeJoinRequest.BD.ndisbssidex.Ssid));				MlmeJoinRequest.BD.ie_fixed.Capabilities = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_fixed.Capabilities;				MlmeJoinRequest.BD.ndisbssidex.Configuration.DSConfig = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Configuration.DSConfig;				MlmeJoinRequest.BD.ndisbssidex.Configuration.Length = sizeof(NDIS_802_11_CONFIGURATION);				memcpy(&MlmeJoinRequest.BD.ie_cfps, &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_cfps, sizeof(cfps_t));				MlmeJoinRequest.BD.ie_tim.dtim_period = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_tim.dtim_period;				MlmeJoinRequest.BD.ie_ibss_parms.atim_win = Adapter->MacParameter.mIBPm;			        MlmeJoinRequest.BD.ndisbssidex.InfrastructureMode = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.InfrastructureMode;				memcpy( (char *)&Adapter->NdisCurNet.WlanDesc, (char *)&Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i], sizeof(WTWLAN_BSSID_DESC) );												//printk("<0>MlmeJoinRequest.BD.ndisbssidex.InfrastructureMode = %x\r\n",MlmeJoinRequest.BD.ndisbssidex.InfrastructureMode);				MlmeJoin(Adapter, &MlmeJoinRequest);				//printk("<0>In Function %s after MlmeJoin \n\r ",__FUNCTION__);				break;			}		}		if(i >= Adapter->Ndis80211Parameter.pWlanScanDb->NumberOfItems) 			{				//Ndis802_11IBSS锟絫art锟斤拷锟?				if (Adapter->NdisCurNet.WlanDesc.ndisbssidex.InfrastructureMode == Ndis802_11IBSS)				{					memcpy(&MlmeStartRequest.mssid, &Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid,sizeof(NDIS_802_11_SSID));													MlmeStartRequest.yBtp = independent;									MlmeStartRequest.yBcnPeriod = Adapter->NdisCurNet.WlanDesc.ndisbssidex.Configuration.BeaconPeriod?Adapter->NdisCurNet.WlanDesc.ndisbssidex.Configuration.BeaconPeriod:100;			 				                                        #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));						if(  0 ==  Adapter->NdisCurNet.WlanDesc.ie_ds.curr_channel )					{						Adapter->NdisCurNet.WlanDesc.ie_ds.curr_channel = WtWlan_GetFreeChannel( Adapter );						Adapter->NdisCurNet.WlanDesc.ie_ds.element_ID = eDsParms;						Adapter->NdisCurNet.WlanDesc.ie_ds.length = 1;				      }									MlmeStartRequest.bdPhyParms = Adapter->NdisCurNet.WlanDesc.ie_ds.curr_channel;					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.WlanDesc.ndisbssidex.SupportedRates,sizeof(Ratestring));*/					memcpy(MlmeStartRequest.yOrates, Adapter->MacParameter.mOrates,sizeof(Ratestring));					//Adapter->MacParameter.CurrentState = NO_BSS;					MlmeStartIBSS(Adapter, &MlmeStartRequest);				}							else if(Adapter->NdisCurNet.WlanDesc.ndisbssidex.InfrastructureMode == Ndis802_11Infrastructure)				{										MlmeSetDefaultParameter(Adapter);					Adapter->MacParameter.CurrentState = NO_BSS;					if(Adapter->bLinkStatus)					{						Adapter->bLinkStatus = FALSE;						#ifdef WIN_PLATFORM						NdisMIndicateStatus(Adapter->AdapterHandle, NDIS_STATUS_MEDIA_DISCONNECT, (PVOID)0, 0);						NdisMIndicateStatusComplete(Adapter->AdapterHandle);						#endif					}														}			}	}}//实锟斤拷ID_CUSTOM_START_IBSS锟斤拷拇锟?#endif// Join and IBSS or start a IBSSvoid IbssSetProc(IN PWT_ADAPTER Adapter,PVOID InformationBuffer){	UINT32 i;	MlmeStartRequest MlmeStartRequest;	MlmeJoinRequest  MlmeJoinRequest;	FN_ENTER;	InitMacStat(Adapter);	memset(  &Adapter->NdisCurNet, 0,  sizeof(NDIS_802_11_CUR_NET));	memcpy(&Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid, InformationBuffer, sizeof(NDIS_802_11_SSID));	for(i = 0; i < Adapter->Ndis80211Parameter.pWlanScanDb->NumberOfItems; i++)	{		#ifdef WIN_PLATFORM		if(Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.SsidLength == Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength && NdisEqualMemory(Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.Ssid, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.Ssid, Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength))		#else		if(Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.SsidLength == Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength && ( 0 ==memcmp(Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.Ssid, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid.Ssid, Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid.SsidLength) ) )		#endif		{			if(  Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.InfrastructureMode != Ndis802_11IBSS )				continue;								MlmeJoinRequest.JTo = 10;								#ifdef WIN_PLATFORM				NdisZeroMemory(MlmeJoinRequest.ORates, sizeof(Ratestring));				#else				memset(MlmeJoinRequest.ORates,0, sizeof(Ratestring));				#endif								memcpy(MlmeJoinRequest.ORates, Adapter->NdisCurNet.GeneralParameterOID.Orates,Adapter->NdisCurNet.GeneralParameterOID.NumOrates);				MlmeJoinRequest.PDly = 1000;//1 ms				MlmeJoinRequest.BD.ndisbssidex.Configuration.BeaconPeriod = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Configuration.BeaconPeriod;			        memcpy(MlmeJoinRequest.BD.ndisbssidex.SupportedRates, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.SupportedRates,sizeof(NDIS_802_11_RATES_EX));				memcpy(MlmeJoinRequest.BD.ndisbssidex.MacAddress, Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.MacAddress, sizeof(MacAddr));				memcpy(&MlmeJoinRequest.BD.ndisbssidex.Ssid, &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Ssid, sizeof(MlmeJoinRequest.BD.ndisbssidex.Ssid));				MlmeJoinRequest.BD.ie_fixed.Capabilities = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_fixed.Capabilities;				MlmeJoinRequest.BD.ndisbssidex.Configuration.DSConfig = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.Configuration.DSConfig;				MlmeJoinRequest.BD.ndisbssidex.Configuration.Length = sizeof(NDIS_802_11_CONFIGURATION);				memcpy(&MlmeJoinRequest.BD.ie_cfps, &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_cfps, sizeof(cfps_t));				MlmeJoinRequest.BD.ie_tim.dtim_period = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_tim.dtim_period;				MlmeJoinRequest.BD.ie_ibss_parms.atim_win = Adapter->MacParameter.mIBPm;			        MlmeJoinRequest.BD.ndisbssidex.InfrastructureMode = Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ndisbssidex.InfrastructureMode;				memcpy( (char *)&Adapter->NdisCurNet.WlanDesc, (char *)&Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i], sizeof(WTWLAN_BSSID_DESC) );												//printk("<0>MlmeJoinRequest.BD.ndisbssidex.InfrastructureMode = %x\r\n",MlmeJoinRequest.BD.ndisbssidex.InfrastructureMode);				MlmeJoin(Adapter, &MlmeJoinRequest);				//printk("<0>In Function %s after MlmeJoin \n\r ",__FUNCTION__);				break;		}	}	if(i >= Adapter->Ndis80211Parameter.pWlanScanDb->NumberOfItems) 	{		Adapter->NdisCurNet.WlanDesc.ndisbssidex.InfrastructureMode = Ndis802_11IBSS;		memcpy(&MlmeStartRequest.mssid, &Adapter->NdisCurNet.WlanDesc.ndisbssidex.Ssid,sizeof(NDIS_802_11_SSID));										MlmeStartRequest.yBtp = independent;						MlmeStartRequest.yBcnPeriod = Adapter->NdisCurNet.WlanDesc.ndisbssidex.Configuration.BeaconPeriod?Adapter->NdisCurNet.WlanDesc.ndisbssidex.Configuration.BeaconPeriod:100;			 						#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));			if(  0 ==  Adapter->NdisCurNet.WlanDesc.ie_ds.curr_channel )		{			Adapter->NdisCurNet.WlanDesc.ie_ds.curr_channel = WtWlan_GetFreeChannel( Adapter );			Adapter->NdisCurNet.WlanDesc.ie_ds.element_ID = eDsParms;			Adapter->NdisCurNet.WlanDesc.ie_ds.length = 1;		}						MlmeStartRequest.bdPhyParms = Adapter->NdisCurNet.WlanDesc.ie_ds.curr_channel;		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.WlanDesc.ndisbssidex.SupportedRates,sizeof(Ratestring));*/		memcpy(MlmeStartRequest.yOrates, Adapter->MacParameter.mOrates,sizeof(Ratestring));		//Adapter->MacParameter.CurrentState = NO_BSS;		MlmeStartIBSS(Adapter, &MlmeStartRequest);	}		FN_EXIT(0,0);

⌨️ 快捷键说明

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