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