📄 wt_mlme.c
字号:
#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 + -