lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sat, 19 Apr 2008 16:15:40 +0200 From: Pavel Machek <pavel@....cz> To: kernel list <linux-kernel@...r.kernel.org>, kaszak@...il.com, lcostantino@...il.com Subject: w35und: remove unused bssdbase remove unused bssdbase --- commit 6627ff26a459db3e792ec4dc194122c133c150a5 tree 254f1861a0ed6aa0f02987ef1775fb95c97aec3c parent 691a6ec372a481499e882739106864d33ef8f4eb author Pavel <pavel@....ucw.cz> Sat, 19 Apr 2008 16:15:08 +0200 committer Pavel <pavel@....ucw.cz> Sat, 19 Apr 2008 16:15:08 +0200 .../net/wireless/winbond/winbondport/bssdbase.c | 1395 ----------------------- 1 files changed, 3 insertions(+), 1392 deletions(-) diff --git a/drivers/net/wireless/winbond/winbondport/bssdbase.c b/drivers/net/wireless/winbond/winbondport/bssdbase.c index a0389d1..ffa6f40 100644 --- a/drivers/net/wireless/winbond/winbondport/bssdbase.c +++ b/drivers/net/wireless/winbond/winbondport/bssdbase.c @@ -12,1409 +12,20 @@ #include "os_common.h" -//#include "sme.h" // use SME state defines - -u16 GetElement( PWB32_ADAPTER Adapter, u16 wBssIdx, u8 * ElementAddr, u16 Idx ); - - -//====================== Rate conversion table ========================== -static const u8 Bitmap2RateValue[32] = -{ 0, // BIT 0 - RATE_1M, // BIT 1 - RATE_2M, // BIT 2 - 0, // BIT 3 - 0, // BIT 4 - RATE_5dot5M, // BIT 5 - RATE_6M, // BIT 6 - 0, // BIT 7 - 0, // BIT 8 - RATE_9M, // BIT 9 - 0, // BIT 10 - RATE_11M, // BIT 11 - RATE_12M, // BIT 12 - 0, // BIT 13 - 0, // BIT 14 - 0, // BIT 15 - 0, // BIT 16 - RATE_33M, // BIT 17 - RATE_18M, // BIT 18 - RATE_36M, // BIT 19 - 0, // BIT 20 - 0, // BIT 21 - RATE_22M, // BIT 22 - 0, // BIT 23 - RATE_24M, // BIT 24 - RATE_48M, // BIT 25 - 0, // BIT 26 - 0, // BIT 27 - RATE_54M, // BIT 28 - 0, // BIT 29 - 0, // BIT 30 - 0, // BIT 31 -}; -//#endif - -void vBSSdescriptionInit(PWB32_ADAPTER Adapter) -{ - u16 i; - - for (i = 0; i < MAX_BSS_DESCRIPT_ELEMENT; i++) - { - psBSS(i)->SlotValid = 0; - psBSS(i)->wIndex = i; - psBSS(i)->psAdapter = Adapter; - //The other fields will be updated when receiving beacon or probe - //response except to the following fields: - psBSS(i)->wAuthAlgo = OPEN_AUTH; //default value: OPEN_AUTH = 0 - psBSS(i)->wAuthSeqNum = 0; - } - //entry 1 is reserved for broadcast address - psBSS(1)->SlotValid = 1; - memcpy( psBSS(1)->abPeerAddress, "\xff\xff\xff\xff\xff\xff", MAC_ADDR_LENGTH ); - //MLME_findSTA(psBSS(1)); -} - -//search valid BSS descriptors at the surrounding environment -void vBSSfoundList(PWB32_ADAPTER Adapter) -{ - BUG(); -} - -u8 boChanFilter(PWB32_ADAPTER Adapter, u8 ChanNo) -{ - u8 boFilter = FALSE; - - switch (psLOCAL->region) - { - case REGION_EUROPE: - if (ChanNo > 13) - boFilter = TRUE; - break; - case REGION_JAPAN: - case REGION_UNKNOWN: - break; - case REGION_FRANCE: - if ((ChanNo < 10) || (ChanNo > 13)) - boFilter = TRUE; - break; - case REGION_SPAIN: - if ((ChanNo < 10) || (ChanNo > 11)) - boFilter = TRUE; - break; - case REGION_ISRAEL: - if ((ChanNo < 3) || (ChanNo > 9)) - boFilter = TRUE; - break; - case REGION_USA: - default: - if (ChanNo > 11) - boFilter = TRUE; - break; - } - return boFilter; -} //Get an empty BSS descriptor entry u16 wBSSGetEntry(PWB32_ADAPTER Adapter) { - u16 i, ret=0; - - OS_SPIN_LOCK_ACQUIRED( &Adapter->sMlmeFrame.MLMESpinLock ); - //Phase 1 - for (i=2; i<MAX_BSS_DESCRIPT_ELEMENT; i++) - { - if (psBSS(i)->SlotValid != 1) // - { - psBSS(i)->SlotValid = 1; - ret = i; - break; - } - } - //Phase 2 - //=> BSS descriptor is allocated due to the frame receiving. - // The frame may be beacon/probe resp. or others(data frame, meaningless - // frame..). So if it is allocated due to not beacon/probe/resp. frame, - // we will reuse it. - if (0 == ret) - { - #ifdef _PE_STATE_DUMP_ - WBDEBUG(("BSS descriptor allocated phase 2\n")); - #endif - for (i=2; i<MAX_BSS_DESCRIPT_ELEMENT; i++) - { - //Check BSSID - //if ((0 == ((PMACADDR)psBSS(i)->abBssID)->ll) && - // (0 == ((PMACADDR)psBSS(i)->abBssID)->ss)) - if (!boMLME_FoundSTAinfo(psBSS(i))) - { - ret = i; - break; - } - } - } - OS_SPIN_LOCK_RELEASED( &Adapter->sMlmeFrame.MLMESpinLock ); - return ret; -} - -#define PHASE_OUT_TIMER 1000 -//============================================================================ -// vSimpleHouseKeeping -- -// -// Description: -// When receiving a SCAN_REQ msg in SCAN module, set the BSS descriptor entries -// except to the psLOCAL->wConnectedSTAindex one to INACTIVE state if -// psSCAN->boSave is FALSE. -// (1)Set psSCAN->boSave to TRUE when receiving SCAN_REQ from ROAM module -// (2) -// Arguments: -// Adapter - The handle of an adapter bock. -// -//============================================================================ -void vSimpleHouseKeeping(PWB32_ADAPTER Adapter) -{ - BUG(); -} - -u16 wBSShouseKeeping(PWB32_ADAPTER Adapter) -{ - int i, iAvailable; - - iAvailable=0; - // Rule1: all STAs in [IDLE_SCAN] and didn't update for a PHASE_OUT time - for (i=0;i<MAX_BSS_DESCRIPT_ELEMENT;i++) - { - if (boMLME_IdleScanState(psBSS(i))) //->wState==IDLE_SCAN) - { - //if ((HWLocalTime-psBSS(i)->dwLocalTime)>PHASE_OUT_TIMER) - //{ - // MLME_initState(psBSS(i)); // MLME: INACTIVE - // iAvailable=i+1; - //} - } - } - if (iAvailable!=0) return (u16)(iAvailable); - // Rule2: all STAs didn't update for a PHASE_OUT time and its BSSID and SSID are not currently used - for (i=0;i<MAX_BSS_DESCRIPT_ELEMENT;i++) - { - //if ((HWLocalTime-psBSS(i)->dwLocalTime)>PHASE_OUT_TIMER) - //{ - // if (boCmpMacAddr(psBSS(i)->abBssID,local->BSSID) - // { - // MLME_initState(psBSS(i)); - // iAvailable=i+1; - // } - //} - } - return (u16)(iAvailable); -} - -//clear the content of some elements in this bss descriptor -void ClearBSSdescpt(PWB32_ADAPTER Adapter, u16 i) -{ - //TODO : should the SlotValid be cleared to 0 to reuse this entry?? - OS_MEMORY_CLEAR( psBSS(i)->abBssID, MAC_ADDR_LENGTH ); - OS_MEMORY_CLEAR( &(psBSS(i)->CapabilityInformation), sizeof(struct Capability_Information_Element) ); - OS_MEMORY_CLEAR( &(psBSS(i)->SupportedRateSet), sizeof(struct Supported_Rates_Element) ); - OS_MEMORY_CLEAR( &(psBSS(i)->ERP_Information_Set), sizeof(struct ERP_Information_Element) ); - OS_MEMORY_CLEAR( &(psBSS(i)->ExtendedSupportedRateSet), sizeof(struct Extended_Supported_Rates_Element) ); - psBSS(i)->dwBasicRateBitmap = 0; - psBSS(i)->dwOperationalRateBitmap = 0; - //psBSS(i)->RSN_Capability = 0; - - psBSS(i)->ScanTimeStamp = 0; - psBSS(i)->BssTimeStamp = 0; - //psBSS(i)->band = 0; -} -//============================================================================ -// wBSSfindSSID -- -// -// Description: -// Find the BSSDescriptor entry based on the input SSID -// -// Arguments: -// Adapter - The handle of an adapter bock. -// psSsid - The SSID that will be searched in the BSSDescripotr set -// -// Return: -// 0 - not found -// other - the BSSDescriptor entry index of the found STA -//============================================================================ -u16 wBSSfindSSID(PWB32_ADAPTER Adapter, struct SSID_Element *psSsid) -{ - u16 i; - - for (i=2; i<MAX_BSS_DESCRIPT_ELEMENT; i++) - { - if ((boMLME_FoundSTAinfo(psBSS(i))) && - (psSsid->Length == psBSS(i)->SSID.Length) && - OS_MEMORY_COMPARE( psSsid->SSID, psBSS(i)->SSID.SSID, psSsid->Length) ) - { - return i; - } - } - return (u16)(0); -} - -//============================================================================ -// wBSSfindBssID -- -// -// Description: -// Find the BSSDescriptor entry based on the input BSSID -// -// Arguments: -// Adapter - The handle of an adapter bock. -// psSsid - The BSSID that will be searched in the BSSDescripotr set -// -// Return: -// 0 - not found -// other - the BSSDescriptor entry index of the found STA -//============================================================================ -u16 wBSSfindBssID(PWB32_ADAPTER Adapter, u8 *pbBssid) -{ - u16 i; - - for (i=2; i<MAX_BSS_DESCRIPT_ELEMENT; i++) - { - if( boMLME_FoundSTAinfo( psBSS(i) ) && - boCmpMacAddr( pbBssid, psBSS(i)->abBssID ) ) - { - return i; - } - } - return (u16)(0); -} - -u16 wBSSfindDedicateCandidate(PWB32_ADAPTER Adapter, struct SSID_Element *psSsid, u8 *pbBssid) -{ - u16 i; - - for (i=2; i<MAX_BSS_DESCRIPT_ELEMENT; i++) - { - if( boMLME_FoundSTAinfo( psBSS(i) ) && - boCmpMacAddr( pbBssid, psBSS(i)->abBssID ) ) - { - if ( (psSsid->Length == psBSS(i)->SSID.Length) && - OS_MEMORY_COMPARE( psSsid->SSID, psBSS(i)->SSID.SSID, psSsid->Length) ) - return i; - } - } - return (u16)(0); -} - -//============================================================================ -// wBSSfindMACaddr -- -// -// Description: -// Find the BSSDescriptor entry based on the input MAC address -// -// Arguments: -// Adapter - The handle of an adapter bock. -// psSsid - The MAC address that will be searched in the BSSDescripotr set -// -// Return: -// 0 - not found -// other - the BSSDescriptor entry index of the found STA -//============================================================================ -u16 wBSSfindMACaddr(PWB32_ADAPTER Adapter, u8 *pbMacAddr) -{ - u16 i; - - for (i=2; i<MAX_BSS_DESCRIPT_ELEMENT; i++) - { - if( boMLME_FoundSTAinfo( psBSS(i) ) && - boCmpMacAddr( pbMacAddr, psBSS(i)->abPeerAddress ) ) - { - return i; - } - } - return (u16)(0); + BUG(); /* foo */ } u16 wBSSsearchMACaddr(PWB32_ADAPTER Adapter, u8 *pbMacAddr, u8 band) { - u16 i; - u16 ret = 0; - - for (i=2; i<MAX_BSS_DESCRIPT_ELEMENT; i++) - { - if (psBSS(i)->SlotValid == 1) - { - if( boCmpMacAddr( pbMacAddr, psBSS(i)->abPeerAddress ) && - (band == psBSS(i)->band) ) - { - ret = i; - } - } - } - return ret; -} - -//============================================================================ -// wBSSaddScanData -- -// -// Description: -// The BSSDescriptor entry of the received beacon does not exist, fill the -// received beacon to the new BSSDescriptor entry. -// -// Arguments: -// Adapter - The handle of an adapter bock. -// wBssIdx - BSSDescriptor entry index that will fill the received beacon -// psRcvData - The received beacon frame -// -// Return: -// 0 - FAIL -// 1 - SUCCESS -//============================================================================ -u16 wBSSaddScanData(PWB32_ADAPTER Adapter, u16 wBssIdx, psRXDATA psRcvData) -{ - BUG(); -} - -static u8 ZeroPattern[32]= {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0}; - -u16 GetElement( PWB32_ADAPTER Adapter, u16 wBssIdx, u8 * ElementAddr, u16 Idx ) -{ - u8 ElementID = *(ElementAddr+Idx); - u8 ElementLen = *(ElementAddr+Idx+1); - u8* pbElementData = ElementAddr + Idx; - u8* RsnNum=&psBSS(wBssIdx)->Rsn_Num; - u32 OUI_tmp; - u16 Version_tmp, Pairewise_count, Auth_count; - - switch (ElementID) - { - case ELEMENT_ID_SSID: - { - struct SSID_Element *pSsidTmp; - - pSsidTmp = (struct SSID_Element *)pbElementData; - if ((pSsidTmp->Length == 0) || - OS_MEMORY_COMPARE( pSsidTmp->SSID, ZeroPattern, pSsidTmp->Length ) ) - { - #ifdef _PE_STATE_DUMP_ - WBDEBUG(("It may be a hidden SSID. Don't update it!\n")); - #endif - } - else - memcpy( &(psBSS(wBssIdx)->SSID), pbElementData, ElementLen+2 ); - } - break; - case ELEMENT_ID_SUPPORTED_RATES: - //Buffalo g54 AP put all rates into the SupportedRateSet(don't have - // ExtendedSupportedRateSet - //NOTE: - //If the length of SupportedRateSet is larger then 8, we suppose the peer - //STA puts all the rates into SupportedRateSet and doesn't have - //ExtendedSupportedRateSet - if (ElementLen>8) - { - memcpy( &(psBSS(wBssIdx)->SupportedRateSet), pbElementData, 8+2 ); - psBSS(wBssIdx)->SupportedRateSet.Length = 8; - //The others will be stored into ExtendedSupportedRateSet - psBSS(wBssIdx)->ExtendedSupportedRateSet.Element_ID = ELEMENT_ID_EXTENDED_SUPPORTED_RATES; - memcpy( psBSS(wBssIdx)->ExtendedSupportedRateSet.ExtendedSupportedRates, - pbElementData+10, ElementLen-8 ); - psBSS(wBssIdx)->ExtendedSupportedRateSet.Length = ElementLen-8; - } - else - memcpy( &(psBSS(wBssIdx)->SupportedRateSet), pbElementData, ElementLen+2 ); - break; - case ELEMENT_ID_FH_PARAMETER_SET: - break; - case ELEMENT_ID_DS_PARAMETER_SET: - if ((wBssIdx == psLOCAL->wConnectedSTAindex) && - (((struct DS_Parameter_Set_Element*)pbElementData)->Current_Channel - != psBSS(wBssIdx)->DS_Parameter_Set.Current_Channel)) - { - //TODO: If the band is different, then ??? - #ifdef _PE_STATE_DUMP_ - WBDEBUG(("!!!The channel of AP has been changed.\n")); - #endif - psLOCAL->boReceiveUncorrectInfo = TRUE; - } - else - { - memcpy( &(psBSS(wBssIdx)->DS_Parameter_Set), pbElementData, ElementLen+2 ); - //psBSS(wBssIdx)->band = psLOCAL->band;//It has been assigned at Mds_MpduProcess() - } - break; - case ELEMENT_ID_CF_PARAMETER_SET: - memcpy( &(psBSS(wBssIdx)->CF_Parameter_Set), pbElementData, ElementLen+2 ); - break; - case ELEMENT_ID_TIM: - memcpy( &(psBSS(wBssIdx)->TIM_Element_Set), pbElementData, ElementLen+2 ); - break; - case ELEMENT_ID_IBSS_PARAMETER_SET: - memcpy( &(psBSS(wBssIdx)->IBSS_Parameter_Set), pbElementData, ElementLen+2 ); - //20060926 add by anson's endian - *(u16 *)psBSS(wBssIdx)->IBSS_Parameter_Set.ATIM_Window = - cpu_to_le16(*(u16 *)psBSS(wBssIdx)->IBSS_Parameter_Set.ATIM_Window); - break; - case ELEMENT_ID_ERP_INFORMATION: - memcpy( &(psBSS(wBssIdx)->ERP_Information_Set), pbElementData, ElementLen+2 ); - if ((wBssIdx == psLOCAL->wConnectedSTAindex) && - (psBSS(psLOCAL->wConnectedSTAindex)->bBssType == ESS_NET)) - { //follow the setting of AP - psLOCAL->boNonERPpresent = psBSS(wBssIdx)->ERP_Information_Set.NonERP_Present; - psLOCAL->boProtectMechanism = psBSS(wBssIdx)->ERP_Information_Set.Use_Protection; - if (psLOCAL->bPreambleMode == AUTO_MODE) - { - if (psBSS(wBssIdx)->ERP_Information_Set.Barker_Preamble_Mode) - psLOCAL->boShortPreamble = 0; - else - psLOCAL->boShortPreamble = 1; - } - //The ShortSlotTime in capability may change during the connection?? Yes! - if (psLOCAL->bSlotTimeMode == AUTO_MODE) - { - if (psLOCAL->boShortSlotTime != psBSS(wBssIdx)->CapabilityInformation.Capability.Short_Slot_Time) - { - psLOCAL->boShortSlotTime = psBSS(wBssIdx)-> - CapabilityInformation.Capability.Short_Slot_Time; - if (psBSS(wBssIdx)->CapabilityInformation.Capability.Short_Slot_Time) - hal_set_slot_time(&Adapter->sHwData, WLAN_SLOT_TIME_TYPE_SHORT); - else - hal_set_slot_time(&Adapter->sHwData, WLAN_SLOT_TIME_TYPE_LONG); - } - } - } - break; - case ELEMENT_ID_EXTENDED_SUPPORTED_RATES: - memcpy( &(psBSS(wBssIdx)->ExtendedSupportedRateSet), pbElementData, ElementLen+2 ); - break; - //-------------------------------------------------------------------------------------------- - // modified by ws at 09/14/04. To parse received frame and save avaliable data to - // data descriptor. - //-------------------------------------------------------------------------------------------- - //TODO : [1004] - case ELEMENT_ID_RSN_WPA: - //if wpa rsn and wpa2 rsn are included in the same beacon or probe response, both wpa and wpa2 - //cipher suites will be placed in different place,otherwise the RsnIe_Type will be WPA2 rather than WPA, - //since WPA2 has higher priority. - { - struct RSN_Information_Element* rsnie=(struct RSN_Information_Element *)pbElementData; - struct RSN_Auth_Sub_Information_Element * auth_cipher; - u16 i; - u8 LenTmp = 0; - - //added a condition for comparing OUI by ws 09/23/04 - if( rsnie->Length < WLAN_MIN_RSN_WPA_LENGTH ) - break; - - // 20061108 Modify for WPS - memcpy( &Version_tmp, &rsnie->Version, sizeof(u16) ); - memcpy( &OUI_tmp, &rsnie->OuiWPAAdditional, sizeof(u32) ); - //20060926 add by anson's endian - Version_tmp = cpu_to_le16( Version_tmp ); - OUI_tmp = cpu_to_le32( OUI_tmp ); - - if( Version_tmp !=1 ) - break; - - // 20061108 WPS OUI support - if( ElementAddr[0]==0x50 && OUI_tmp==WPA_WPS_OUI ) // Storing all field of WPS information of Probe response(0x50) - { - memcpy( &psBSS(wBssIdx)->WPS_IE_Data, pbElementData, ElementLen + 2 ); - psBSS(wBssIdx)->WPS_IE_length_tmp = ElementLen; - break; // End of WSC IE processing - } - - if( (OUI_tmp != WPA_OUI_BIG) && (OUI_tmp != WPA_OUI_LITTLE) ) - break; - - LenTmp = 6;//OuiWPAAdditional && version - //802.11i/D4.0 : - //If any optional field is absent, none of the subsequent - //fields shall be included. - do - { - if (rsnie->Length >= 10)// checking group cipher suite are included in rsn - { - memcpy( &(psBSS(wBssIdx)->group_cipher), &rsnie->GroupKeySuite, sizeof(OUI_WPA) ); - LenTmp += 4; - } - else - break; - if(rsnie->Length >= 12) //PairwiseKey suite count field exists - { - memcpy( &Pairewise_count, &rsnie->PairwiseKeySuiteCount, sizeof(u16) ); - //20060926 add by anson's endian - Pairewise_count = cpu_to_le16( Pairewise_count ); - if( (Pairewise_count > WLAN_MAX_PAIRWISE_CIPHER_SUITE_COUNT) || - (rsnie->Length < (12 + Pairewise_count * 4)) ) - { - break; - } - else - { - psBSS(wBssIdx)->pairwise_key_cipher_suite_count = Pairewise_count; - memcpy( &psBSS(wBssIdx)->pairwise_key_cipher_suites[0], - rsnie->PairwiseKeySuite, Pairewise_count * 4); - - LenTmp += (2+(Pairewise_count<<2)); - //for multi pairwise key cipher suites, priority of CCMP > TKIP priority - for( i=0; i<Pairewise_count; i++ ) - { - if( psBSS(wBssIdx)->pairwise_key_cipher_suite_selected==0 || - psBSS(wBssIdx)->pairwise_key_cipher_suite_selected < rsnie->PairwiseKeySuite[i].SuitSelector.Type ) - psBSS(wBssIdx)->pairwise_key_cipher_suite_selected=rsnie->PairwiseKeySuite[i].SuitSelector.Type; - } - } - } - else - break; - if(rsnie->Length >= (LenTmp+2)) - { - //point to a structure of RSN_authentucation information, included ID and length fields - auth_cipher = (struct RSN_Auth_Sub_Information_Element *)(pbElementData+(LenTmp+2)); - memcpy( &Auth_count, &auth_cipher->AuthKeyMngtSuiteCount, sizeof(u16) ); - //20060926 add by anson's endian - Auth_count = cpu_to_le16( Auth_count ); - if( (Auth_count > WLAN_MAX_AUTH_KEY_MGT_SUITE_LIST_COUNT) || - (rsnie->Length < (LenTmp + 2 +(Auth_count<<2))) ) - { - break; - } - else - { - psBSS(wBssIdx)->auth_key_mgt_suite_count = Auth_count; - memcpy( &psBSS(wBssIdx)->auth_key_mgt_suites, auth_cipher->AuthKeyMngtSuite, - Auth_count * 4); - LenTmp += (2+(Auth_count<<2)); - } - } - else - break; - if (rsnie->Length >= (LenTmp+2)) //RSN capability exists - { - //address of RSN capability - memcpy( &(psBSS(wBssIdx)->rsn_capabilities), pbElementData+(LenTmp+2), 2 ); - //20060926 add by anson's endian - *(u16 *)&(psBSS(wBssIdx)->rsn_capabilities) = - cpu_to_le16( *(u16 *)&(psBSS(wBssIdx)->rsn_capabilities) ); - LenTmp += 2; - } - - psBSS(wBssIdx)->RsnIe_Type[*RsnNum] = ElementID; - psBSS(wBssIdx)->RsnIe_len += LenTmp; - (*RsnNum)++; - - }while (FALSE); - } - break; - #ifdef _WPA2_ - case ELEMENT_ID_RSN_WPA2: - { - struct WPA2_RSN_Information_Element* wpa2_rsnie = (struct WPA2_RSN_Information_Element *)pbElementData; - struct WPA2_RSN_Auth_Sub_Information_Element * wpa2_auth_cipher; - u8 LenTmp = 0; - u16 i, Auth_count; - - //added a condition for checking OUI - if( wpa2_rsnie->Length < WLAN_MIN_RSN_WPA2_LENGTH ) - break; - else - { - memcpy( &Version_tmp, &wpa2_rsnie->Version, sizeof(u16) ); - //20060926 add by anson's endian - Version_tmp = cpu_to_le16( Version_tmp ); - if( Version_tmp != 1 ) - break; - } - LenTmp = 2;//version - - do - { //measure rsn included the group cipher suite into - if (wpa2_rsnie->Length >= 6) - { - memcpy( &(psBSS(wBssIdx)->wpa2_group_cipher), &wpa2_rsnie->GroupKeySuite, sizeof(OUI_WPA2) ); - LenTmp += 4; - } - else - break; - - if( wpa2_rsnie->Length >= 8 ) //PairwiseKey suite count field exists - { - memcpy( &Pairewise_count, &wpa2_rsnie->PairwiseKeySuiteCount, sizeof(u16) ); - //20060926 add by anson's endian - Pairewise_count = cpu_to_le16( Pairewise_count ); - if( (Pairewise_count > WLAN_MAX_PAIRWISE_CIPHER_SUITE_COUNT) || - (wpa2_rsnie->Length < (8 + Pairewise_count * 4)) ) - { - break; - } - else - { - psBSS(wBssIdx)->wpa2_pairwise_key_cipher_suite_count = Pairewise_count; - memcpy( &psBSS(wBssIdx)->wpa2_pairwise_key_cipher_suites[0], - wpa2_rsnie->PairwiseKeySuite, Pairewise_count * 4 ); - - LenTmp += (2 + (Pairewise_count<<2)); - //for multi pairwise key cipher suite, CCMP>TKIP - for( i=0; i<Pairewise_count; i++ ) - { - if( psBSS(wBssIdx)->wpa2_pairwise_key_cipher_suite_selected==0 || - psBSS(wBssIdx)->wpa2_pairwise_key_cipher_suite_selected < wpa2_rsnie->PairwiseKeySuite[i].SuitSelector.Type ) - psBSS(wBssIdx)->wpa2_pairwise_key_cipher_suite_selected=wpa2_rsnie->PairwiseKeySuite[i].SuitSelector.Type; - } - } - } - else - break; - - if( wpa2_rsnie->Length >= (LenTmp+2) ) //authentication suite count field exists - { - //address of authentication suite - //include ID and length fields - wpa2_auth_cipher = (struct WPA2_RSN_Auth_Sub_Information_Element *)(pbElementData + (LenTmp+2) ); - memcpy( &Auth_count, &wpa2_auth_cipher->AuthKeyMngtSuiteCount, sizeof(u16) ); - //20060926 add by anson's endian - Auth_count = cpu_to_le16( Auth_count ); - if( (Auth_count > WLAN_MAX_AUTH_KEY_MGT_SUITE_LIST_COUNT) || - (wpa2_rsnie->Length < (LenTmp + 2 +(Auth_count<<2))) ) - { - break; - } - else - { - psBSS(wBssIdx)->wpa2_auth_key_mgt_suite_count = Auth_count; - memcpy( &psBSS(wBssIdx)->wpa2_auth_key_mgt_suites, - wpa2_auth_cipher->AuthKeyMngtSuite, Auth_count * 4 ); - - LenTmp += (2+(Auth_count<<2)); - } - } - else - break; - - if (wpa2_rsnie->Length >= (LenTmp+2)) //RSN capability exists - { - //address of RSN capability - memcpy( &(psBSS(wBssIdx)->wpa2_rsn_capabilities), pbElementData+(LenTmp+2), sizeof(struct RSN_Capability_Element) ); - //20060926 add by anson's endian - *(u16 *)&(psBSS(wBssIdx)->wpa2_rsn_capabilities) = - cpu_to_le16( *(u16 *)&(psBSS(wBssIdx)->wpa2_rsn_capabilities) ); - //to check this AP supports pre authenctication or not - if(psBSS(wBssIdx)->rsn_capabilities.RSN_Capability.Pre_Auth) - psBSS(wBssIdx)->pre_auth=TRUE; - else - psBSS(wBssIdx)->pre_auth=FALSE; - - LenTmp += 2; - } - - psBSS(wBssIdx)->RsnIe_Type[*RsnNum]= ElementID; - psBSS(wBssIdx)->RsnIe_len += LenTmp; - (*RsnNum)++; - }while (FALSE); - - } - #endif - default: - break; - } - - Idx +=(ElementLen+2); - return Idx; -} - -//========================================================================== -// modified by WS 09/15/04 -// for solving WWU showed up error message "LIST index out of bounds (5)" -// and "Access violation at address 00407494 in module" when receive csico AP -// beacon.The solution is to filter out useless data and reassemble -// information element send to NDIS. -// -//=========================================================================== -void Assemble_IE(PWB32_ADAPTER Adapter, u16 wBssIdx) -{ - WB_BSSDESCRIPTION *Desc=psBSS(wBssIdx); - struct RSN_Information_Element *rsn_ie; - struct RSN_Auth_Sub_Information_Element *auth_sub_ie; - - #ifdef _WPA2_ - struct WPA2_RSN_Information_Element *WPA2_rsn_ie; - struct WPA2_RSN_Auth_Sub_Information_Element *WPA2_auth_sub_ie; - #endif //end def _WPA2_ - - u8 LenLeft=psBSS(wBssIdx)->RsnIe_len; - u8 RsnNo=0; - u8 ies_len=0; - u8 *IEs=psBSS(wBssIdx)->ies; - u32 uValue; - u16 Pairwise_count, Auth_count; - u16 Version_tmp; - - Desc->ies_len=0; - - vRateToBitmap(Adapter, wBssIdx); - psBSS(wBssIdx)->boERP = boIsERPsta(Adapter, wBssIdx); - - // fix field for ndis - memcpy( IEs ,&Desc->Timestamp, 8 ); - ies_len+=8; - IEs+=8; - - memcpy( IEs, &Desc->Beacon_Period, 2 ); - //20060926 add by anson's endian - *(u16 *)IEs = cpu_to_le16( *(u16 *)IEs ); - ies_len+=2; - IEs += 2; - - memcpy( IEs, &Desc->CapabilityInformation, sizeof(struct Capability_Information_Element) ); - //20060926 add by anson's endian - *(u16 *)IEs = cpu_to_le16( *(u16 *)IEs ); - ies_len+=sizeof(struct Capability_Information_Element); - IEs += sizeof(struct Capability_Information_Element); - - if(Desc->SSID.Length!=0) - { - memcpy( IEs, &Desc->SSID, Desc->SSID.Length+2 ); - ies_len+=Desc->SSID.Length+2; - IEs += (Desc->SSID.Length+2); - } - - if(Desc->SupportedRateSet.Length!=0) - { - memcpy( IEs, &Desc->SupportedRateSet, Desc->SupportedRateSet.Length+2 ); - ies_len+= Desc->SupportedRateSet.Length+2; - IEs += (Desc->SupportedRateSet.Length+2); - } - - if(Desc->DS_Parameter_Set.Length!=0) - { - memcpy( IEs, &Desc->DS_Parameter_Set, Desc->DS_Parameter_Set.Length+2 ); - ies_len+=Desc->DS_Parameter_Set.Length+2; - IEs += (Desc->DS_Parameter_Set.Length+2); - } - - if(Desc->TIM_Element_Set.Length!=0) - { - memcpy( IEs, &Desc->TIM_Element_Set, Desc->TIM_Element_Set.Length+2 ); - ies_len+=Desc->TIM_Element_Set.Length+2; - IEs += (Desc->TIM_Element_Set.Length + 2); - } - - if(Desc->ERP_Information_Set.Length!=0) - { - memcpy( IEs, &Desc->ERP_Information_Set, Desc->ERP_Information_Set.Length+2 ); - ies_len+=Desc->ERP_Information_Set.Length+2; - IEs += (Desc->ERP_Information_Set.Length + 2); - } - - if(Desc->ExtendedSupportedRateSet.Length!=0) - { - memcpy( IEs, &Desc->ExtendedSupportedRateSet, Desc->ExtendedSupportedRateSet.Length+2 ); - ies_len+=Desc->ExtendedSupportedRateSet.Length+2; - IEs += (Desc->ExtendedSupportedRateSet.Length+2); - } - - //================================================================================ - //RSN_IE - //================================================================================ - while (LenLeft) - { - if (psBSS(wBssIdx)->RsnIe_Type[RsnNo] == ELEMENT_ID_RSN_WPA) - { - //u8 LenLeft; - rsn_ie = (struct RSN_Information_Element *)IEs; - rsn_ie->Element_ID = psBSS(wBssIdx)->RsnIe_Type[RsnNo]; - rsn_ie->Length = 0; - - //20060926 add by anson's endian - //uValue = (u32)(OUI_WPA | (OUI_WPA_ADDITIONAL<<24)); - uValue = cpu_to_le32((u32)(OUI_WPA | (OUI_WPA_ADDITIONAL<<24))); - memcpy( &rsn_ie->OuiWPAAdditional, &uValue, sizeof(u32) ); - //20060926 add by anson's endian - //Version_tmp = VERSION_WPA; - Version_tmp = cpu_to_le16( VERSION_WPA ); - memcpy( &rsn_ie->Version, &Version_tmp, sizeof(u16) ); - LenLeft =LenLeft -6; - rsn_ie->Length +=6; - - do - { - if (LenLeft != 0) - { - memcpy( &rsn_ie->GroupKeySuite, &Desc->group_cipher, sizeof(u32) ); - LenLeft -= 4; - rsn_ie->Length +=4; - } - else - break; - if (LenLeft != 0) - { - memcpy( &Pairwise_count, &Desc->pairwise_key_cipher_suite_count, sizeof(u16) ); - memcpy( &rsn_ie->PairwiseKeySuiteCount, &Pairwise_count, sizeof(u16) ); - //20060926 add by anson's endian - *(u16 *)&rsn_ie->PairwiseKeySuiteCount = - cpu_to_le16( *(u16 *)&rsn_ie->PairwiseKeySuiteCount ); - memcpy( &rsn_ie->PairwiseKeySuite, &Desc->pairwise_key_cipher_suites, Pairwise_count<<2 ); - LenLeft -= (2 + (Pairwise_count<<2)); - rsn_ie->Length +=(2 + (Pairwise_count<<2)); - } - else - break; - - memcpy( &Auth_count, &Desc->auth_key_mgt_suite_count, sizeof(u16) ); - - if (LenLeft != 0) - { - auth_sub_ie = (struct RSN_Auth_Sub_Information_Element *)((u8 *)&rsn_ie->PairwiseKeySuite + - (Desc->pairwise_key_cipher_suite_count<<2)); - - memcpy( &auth_sub_ie->AuthKeyMngtSuiteCount, &Auth_count, sizeof(u16) ); - //20060926 add by anson's endian - *(u16 *)&auth_sub_ie->AuthKeyMngtSuiteCount = - cpu_to_le16(*(u16 *)&auth_sub_ie->AuthKeyMngtSuiteCount); - memcpy( &auth_sub_ie->AuthKeyMngtSuite, &Desc->auth_key_mgt_suites, Auth_count<<2 ); - - LenLeft -= (2 + (Auth_count<<2)); - rsn_ie->Length +=(2 + (Auth_count<<2)); - } - else - break; - - if (LenLeft != 0) //RSN capability - { - //20060926 add by anson's endian - u16 TValue = *(u16 *)&Desc->rsn_capabilities; - TValue = cpu_to_le16( TValue ); - - memcpy( ((u8 *)&auth_sub_ie->AuthKeyMngtSuite) + (Auth_count<<2), - //&(Desc->rsn_capabilities), sizeof(struct RSN_Capability_Element) ); //20060926 change anson's endian - &TValue, sizeof(struct RSN_Capability_Element) ); - - LenLeft -= 2; - rsn_ie->Length += 2; - } - if (LenLeft != 0) - { - #ifdef _PE_STATE_DUMP_ - WBDEBUG((" !!!If this is not the last RsnIE that is Panic !!! WPA RSN IE is wrong.\n")); - #endif - break; - } - }while (FALSE); - - IEs += rsn_ie->Length+2; - ies_len += rsn_ie->Length+2; - } - #ifdef _WPA2_ - else//WPA2 RSN_IE - { - //u8 LenLeft; - WPA2_rsn_ie = (struct WPA2_RSN_Information_Element *)IEs; - WPA2_rsn_ie->Element_ID = psBSS(wBssIdx)->RsnIe_Type[RsnNo]; - WPA2_rsn_ie->Length = 0; - //20060926 add by anson's endian - //Version_tmp = VERSION_WPA2; - Version_tmp = cpu_to_le16( VERSION_WPA2 ); - memcpy( &WPA2_rsn_ie->Version, &Version_tmp, sizeof(u16) ); - LenLeft -=2; - WPA2_rsn_ie->Length +=2; - do - { - if (LenLeft != 0) - { - memcpy( &WPA2_rsn_ie->GroupKeySuite, &Desc->wpa2_group_cipher, sizeof(SUITE_SELECTOR) ); - LenLeft -= 4; - WPA2_rsn_ie->Length +=4; - } - else - break; - - if (LenLeft != 0) - { - memcpy( &Pairwise_count, &Desc->wpa2_pairwise_key_cipher_suite_count, sizeof(u16) ); - memcpy( &WPA2_rsn_ie->PairwiseKeySuiteCount, &Pairwise_count, sizeof(u16) ); - //20060926 add by anson's endian - *(u16 *)&WPA2_rsn_ie->PairwiseKeySuiteCount = - cpu_to_le16( *(u16 *)&WPA2_rsn_ie->PairwiseKeySuiteCount ); - //wpa2_pairwise_key_cipher_suite_count*4 - memcpy( &WPA2_rsn_ie->PairwiseKeySuite, &Desc->wpa2_pairwise_key_cipher_suites, Pairwise_count<<2); - - LenLeft -= (2 + (Pairwise_count<<2)); - WPA2_rsn_ie->Length +=(2 + (Pairwise_count<<2)); - } - else - break; - if (LenLeft != 0) - { - WPA2_auth_sub_ie = (struct WPA2_RSN_Auth_Sub_Information_Element *)((u8 *)&WPA2_rsn_ie->PairwiseKeySuite + - (Desc->wpa2_pairwise_key_cipher_suite_count<<2)); - - memcpy( &Auth_count, &Desc->wpa2_auth_key_mgt_suite_count, sizeof(u16) ); - memcpy( &WPA2_auth_sub_ie->AuthKeyMngtSuiteCount, &Auth_count, sizeof(u16) ); - //20060926 add by anson's endian - *(u16 *)&WPA2_auth_sub_ie->AuthKeyMngtSuiteCount = - cpu_to_le16( *(u16 *)&WPA2_auth_sub_ie->AuthKeyMngtSuiteCount ); - memcpy( &WPA2_auth_sub_ie->AuthKeyMngtSuite, &Desc->wpa2_auth_key_mgt_suites, Auth_count<<2 ); - - LenLeft -= (2 + (Auth_count<<2)); - WPA2_rsn_ie->Length +=(2 + (Auth_count<<2)); - } - else - break; - if (LenLeft != 0) //RSN capability - { - //20060926 add by anson's endian - u16 TValue = *(u16 *)&Desc->wpa2_rsn_capabilities; - TValue = cpu_to_le16( TValue ); - memcpy( ((u8 *)&WPA2_auth_sub_ie->AuthKeyMngtSuite + (Auth_count<<2) ), - //&(Desc->wpa2_rsn_capabilities), sizeof(struct RSN_Capability_Element) ); //20060926 modify by anson's endian - &TValue, sizeof(struct RSN_Capability_Element) ); - LenLeft -= 2; - WPA2_rsn_ie->Length +=2; - } - else - break; - if (LenLeft != 0) - { - #ifdef _PE_STATE_DUMP_ - WBDEBUG((" If this is not the last RsnIE that is Panic !!! Panic !!! WPA2 RSN IE is wrong.\n")); - #endif - break; - } - }while (FALSE); - - IEs += WPA2_rsn_ie->Length+2; - ies_len += WPA2_rsn_ie->Length+2; - } - #endif //end WPA2 - - RsnNo++; - } - - Desc->ies_len=(u32)(ies_len); - - #ifdef _PE_STATE_DUMP_ - WBDEBUG(("<<dump IE: idx =%d, IE len =%d >>\n", wBssIdx, ies_len)); - DataDmp( Desc->ies, Desc->ies_len, 0); - #endif - -} -//============================================================================ -// wBSSUpdateScanData -- -// -// Description: -// The BSSDescriptor entry of the received beacon has exist, just update -// the necessary information.(Only Update Capability and ERP elements) -// -// Arguments: -// Adapter - The handle of an adapter bock. -// wBssIdx - BSSDescriptor entry index of received beacon -// psRcvData - The received beacon frame -// -// Return: -// 0 - FAIL -// 1 - SUCCESS -//============================================================================ -u16 wBSSUpdateScanData(PWB32_ADAPTER Adapter, u16 wBssIdx, psRXDATA psRcvData) -{ - BUG(); -} - -//for START IBSS only, copy SME parameter to local description -u16 wBSScreateIBSSdata(PWB32_ADAPTER Adapter, PWB_BSSDESCRIPTION psDesData) -{ - BUG(); -} - -//====================================================================================================== -//added by WS for adding rsn ie for IBSS for WPA_NONE. -void AddIBSSIe(PWB32_ADAPTER Adapter,PWB_BSSDESCRIPTION psDesData) -{ - BUG(); -} - -void DesiredRate2BSSdescriptor(PWB32_ADAPTER Adapter, PWB_BSSDESCRIPTION psDesData, - u8 *pBasicRateSet, u8 BasicRateCount, - u8 *pOperationRateSet, u8 OperationRateCount) -{ - u8 TmpRateSpace[64]; - u8 TotalRateLen; - - if (BasicRateCount < 20) - memcpy( TmpRateSpace, pBasicRateSet, BasicRateCount ); - if (OperationRateCount < 20) - memcpy( TmpRateSpace + BasicRateCount, pOperationRateSet, OperationRateCount ); - TotalRateLen = BasicRateCount + OperationRateCount; - psDesData->SupportedRateSet.Element_ID = ELEMENT_ID_SUPPORTED_RATES; - //Fill the rates of temparary space into the SupportedRate Element. If - //it is full, fill to the ExtendedSupportedRate Element. - if (TotalRateLen <= 8) - { - memcpy( psDesData->SupportedRateSet.SupportedRates, TmpRateSpace, TotalRateLen ); - psDesData->SupportedRateSet.Length = TotalRateLen; - } - else - { - memcpy( psDesData->SupportedRateSet.SupportedRates, TmpRateSpace, 8 ); - psDesData->SupportedRateSet.Length = 8; - TotalRateLen -= 8; - psDesData->ExtendedSupportedRateSet.Element_ID = ELEMENT_ID_EXTENDED_SUPPORTED_RATES; - memcpy( psDesData->ExtendedSupportedRateSet.ExtendedSupportedRates, TmpRateSpace+8, TotalRateLen ); - psDesData->ExtendedSupportedRateSet.Length = TotalRateLen; - } -} - -void DesiredRate2InfoElement(PWB32_ADAPTER Adapter, u8 *addr, u16 *iFildOffset, - u8 *pBasicRateSet, u8 BasicRateCount, - u8 *pOperationRateSet, u8 OperationRateCount) -{ - struct Supported_Rates_Element *ptr1; - struct Extended_Supported_Rates_Element *ptr2; - u16 FieldOffset; - u8 TmpRateSpace[64]; - u8 TotalRateLen; - - if( BasicRateCount < 20 ) - memcpy( TmpRateSpace, pBasicRateSet, BasicRateCount ); - - if( OperationRateCount < 20 ) - memcpy( TmpRateSpace + BasicRateCount, pOperationRateSet, OperationRateCount ); - - TotalRateLen = BasicRateCount + OperationRateCount; - - FieldOffset = *iFildOffset; - ptr1 = (struct Supported_Rates_Element *)(addr + FieldOffset); - ptr1->Element_ID = ELEMENT_ID_SUPPORTED_RATES; - //Fill the rates of temparary space into the SupportedRate Element. If - //it is full, fill to the ExtendedSupportedRate Element. - if (TotalRateLen <= 8) - { - memcpy( ptr1->SupportedRates, TmpRateSpace, TotalRateLen ); - ptr1->Length = TotalRateLen; - FieldOffset += (ptr1->Length+2); - } - else - { - memcpy( ptr1->SupportedRates, TmpRateSpace, 8 ); - TotalRateLen -= 8; - ptr1->Length = 8; - FieldOffset += (ptr1->Length+2); - ptr2 = (struct Extended_Supported_Rates_Element *)(addr + FieldOffset); - ptr2->Element_ID = ELEMENT_ID_EXTENDED_SUPPORTED_RATES; - memcpy( ptr2->ExtendedSupportedRates, TmpRateSpace+8 , TotalRateLen ); - ptr2->Length = TotalRateLen; - FieldOffset += (ptr2->Length+2); - } - - *iFildOffset = FieldOffset; -} - -void BSSAddIBSSdata(PWB32_ADAPTER Adapter, PWB_BSSDESCRIPTION psDesData) -{ - //u16 wBssIdx; - - // copy the data of connected STA(available from sLocalPara->wConnectedSTAindex) - // to the new description(local) - //psLOCAL->wConnectedSTAindex - //psDesData->bBssType = + BUG(); /* foo */ } // NOTE: return(1) means 'EQ', return(0) means 'NEQ' unsigned char boCmpMacAddr( PUCHAR adr1, PUCHAR adr2 ) { - return OS_MEMORY_COMPARE( adr1, adr2, MAC_ADDR_LENGTH ); -} - -unsigned char boCmpSSID(struct SSID_Element *psSSID1, struct SSID_Element *psSSID2) -{ - if (psSSID1->Length == psSSID2->Length) - { - if( OS_MEMORY_COMPARE( psSSID1->SSID, psSSID2->SSID, psSSID1->Length ) ) - return (1); - } - return 0; -} - -//============================================================================ -// wRoamingQuery -- -// -// Description: -// For roaming module to find out the candidate AP with the same SSID. -// It just chooses the first found AP. It may choose the original connected AP. -// If the signal of original AP is lost, this function may choose the original -// AP to try to join. If it is the first time that try to re-join to the original -// AP, the content of original AP in BSSdescription will not be removed. If this -// re-join fails(JoinFail timeout), the content of original AP in BSSdescription -// will be removed. If this re-join success, the local device will not do -// authentication or association because the content in BSSdescription is still -// valid. - -// Arguments: -// Adapter - The handle of an adapter bock. -// -// Return: -// the BSSdescriptor index of the candidate -//============================================================================ -u16 wRoamingQuery(PWB32_ADAPTER Adapter) -{ - BUG(); -} - -//convert the supported and extended supported rate elements to basic and operational -// rates using bit map -void vRateToBitmap(PWB32_ADAPTER Adapter, u16 index) -{ - int i,j,k; - u8 TmpValue,tmp; - - psBSS(index)->dwBasicRateBitmap = 0; - psBSS(index)->dwOperationalRateBitmap = 0; - j = k = 0; - for (i=0; i<psBSS(index)->SupportedRateSet.Length; i++) - { - TmpValue = psBSS(index)->SupportedRateSet.SupportedRates[i]; - if (TmpValue&0x80) - { //Basic Rates - tmp = bRateToBitmapIndex(Adapter, TmpValue&0x7f); - psBSS(index)->dwBasicRateBitmap |= (1<<tmp); - psBSS(index)->BasicRate[j++] = TmpValue; - } - else - { - tmp = bRateToBitmapIndex(Adapter, TmpValue); - psBSS(index)->dwOperationalRateBitmap |= (1<<tmp); - psBSS(index)->OperationalRate[k++] = TmpValue; - } - } - for (i=0; i<psBSS(index)->ExtendedSupportedRateSet.Length; i++) - { - //Assume the rates in ExtendedSupportedRateSet are all not basic rates - TmpValue = psBSS(index)->ExtendedSupportedRateSet.ExtendedSupportedRates[i]; - if (TmpValue & 0x80) - { //Basic Rates - tmp = bRateToBitmapIndex(Adapter, TmpValue&0x7f); - psBSS(index)->dwBasicRateBitmap |= (1<<tmp); - psBSS(index)->BasicRate[j++] = TmpValue; - } - else - { - tmp = bRateToBitmapIndex(Adapter, TmpValue); - psBSS(index)->dwOperationalRateBitmap |= (1<<tmp); - psBSS(index)->OperationalRate[k++] = TmpValue; - } - } - psBSS(index)->BasicRate[j] = 0; - psBSS(index)->OperationalRate[k] = 0; - //Operational rates will include the basic rates to avoid the condition that - // supported rate element is lack of operational rates. - //psBSS(index)->dwOperationalRateBitmap |= psBSS(index)->dwBasicRateBitmap; - -} - -//return the index in the bitmap -u8 bRateToBitmapIndex(PWB32_ADAPTER Adapter, u8 bRate) -{ - u8 index; //bit number 0 ~ 31 - - if (bRate <= RATE_24M) - index = bRate >> 1; - else - index = (bRate+4) >> 2; - if (index>31) - return 0; - else - return index; -} - -u8 bBitmapToRate(u8 i) -{ - //i : bit number 0 ~ 31 - if (i>31) - return 0; - else - return (Bitmap2RateValue[i]); -} - -unsigned char boIsERPsta(PWB32_ADAPTER Adapter, u16 i) -{ - u32 tmp; - - //If the STA doesn't include ERP data rates, it belongs to NonERP STA - tmp = psBSS(i)->dwBasicRateBitmap | psBSS(i)->dwOperationalRateBitmap; - //clear bit 1, 2, 5.5, 11 - tmp &= 0xfffff7d9; - if (tmp>0) - return TRUE; - else - return FALSE; -} - -unsigned char boCheckConnect(PWB32_ADAPTER Adapter) -{ - BUG(); -} - -unsigned char boCheckSignal(PWB32_ADAPTER Adapter) -{ - s32 rssi, threshold; - - rssi = hal_get_rssi_bss( &Adapter->sHwData, - psLOCAL->wConnectedSTAindex, - MAX_ACC_RSSI_COUNT ); - - #ifdef _PE_STATE_DUMP_ - WBDEBUG(("Check RSSI =%d!\n", rssi)); - #endif - - threshold = (s32)(0 - psLOCAL->SignalLostTh); - //if (rssi < -70) - if (rssi < threshold) - { - #ifdef _PE_STATE_DUMP_ - WBDEBUG(("Signal lost!\n")); - #endif - return FALSE; - } - return TRUE; -} - -//The BSS descriptor will be checked if it is up-to-date when performing background -//scan. -void BssScanUpToDate(PWB32_ADAPTER Adapter) -{ - BUG(); -} - -//The BSS descriptors at the channel that the connection is will be -// checked if they are up-to-date. -void BssUpToDate(PWB32_ADAPTER Adapter) -{ - BUG(); -} - -//sort rates, mode = 0 :descent -// 1 :acscent -void RateSort(u8 *RateArray, u8 num, u8 mode) -{ - u8 i, j, tmp; - - if(mode) - { - for (i=0; i<(num-1); ++i) - { - for (j=i+1; j<num; ++j) - { - if (RateArray[j] < RateArray[i]) - { - //swap - tmp = RateArray[i]; - RateArray[i] = RateArray[j]; - RateArray[j] = tmp; - } - } - } - } -} - -//acscent ,and DSSS rates first and then OFDM rates, -//such as, 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, ... -void RateReSortForSRate(PWB32_ADAPTER Adapter, u8 *RateArray, u8 num) -{ - u8 i; - - RateSort(RateArray, num, 1); - - for(i=0; i<num; i++) - { - if(RateArray[i] == 22) - break; - } - if(i < num) //we need adjust the order of rate list because 11Mbps rate exists - { - for(;i>0;i--) - { - if(RateArray[i-1] <= 11) - break; - RateArray[i] = RateArray[i-1]; - } - RateArray[i] = 22; - psLOCAL->NumOfDsssRateInSRate = i+1; - } - else - { - for(i=0; i<num; i++) - { - if (RateArray[i] >= 12) - break; - } - psLOCAL->NumOfDsssRateInSRate = i; - } - #ifdef _PE_STATE_DUMP_ - WBDEBUG(("Dump Data Rates, no of DSSS rate=%d\n",psLOCAL->NumOfDsssRateInSRate)); - DataDmp(RateArray, num, 0); - #endif -} - -void SetMaxTxRate(PWB32_ADAPTER Adapter) -{ - u8 RateIdx, OfdmRateIdx; - - RateIdx = psLOCAL->NumOfSRate - 1; - - //get the max tx rate - psLOCAL->CurrentTxRate = psLOCAL->SRateSet[RateIdx]; - - //decide the fallback rate : next level with the same modulation type - #ifdef _USE_FALLBACK_RATE_ - OfdmRateIdx = psLOCAL->NumOfDsssRateInSRate; - if (RateIdx >= OfdmRateIdx) - { - //Current tx rate belongs to OFDM rates - if (RateIdx != OfdmRateIdx) - psLOCAL->CurrentTxFallbackRate = psLOCAL->SRateSet[RateIdx-1]; - else - psLOCAL->CurrentTxFallbackRate = psLOCAL->SRateSet[RateIdx]; - } - else - { - //Current tx rate belongs to DSSS rates - if (RateIdx > 0) - psLOCAL->CurrentTxFallbackRate = psLOCAL->SRateSet[RateIdx-1]; - else - psLOCAL->CurrentTxFallbackRate = psLOCAL->SRateSet[RateIdx]; - } - #else - psLOCAL->CurrentTxFallbackRate = psLOCAL->CurrentTxRate; - #endif - #ifdef _PE_TX_DUMP_ - WBDEBUG(("Max Tx rate =%d, fallback rate =%d\n", - psLOCAL->CurrentTxRate, - psLOCAL->CurrentTxFallbackRate)); - #endif -} - - - -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -//added by ws for add IE to WPA packet 05/15/04 -void CreateWpaIE(PWB32_ADAPTER Adapter, - u16* iFildOffset, - PUCHAR msg, - struct Management_Frame* msgHeader, - struct Association_Request_Frame_Body* msgBody, - u16 iMSindex) -{ - BUG(); -} - -#ifdef _WPA2_ -//========================================================================================== -//added by WS for add IE for WPA2 packet -void CreateRsnIE(PWB32_ADAPTER Adapter, u16* iFildOffset, PUCHAR msg, - struct Management_Frame* msgHeader, - struct Association_Request_Frame_Body* msgBody, u16 iMSindex) -{ - BUG(); -} - -u16 SearchPmkid(PWB32_ADAPTER Adapter,struct Management_Frame* msgHeader,struct PMKID_Information_Element * AssoReq_PMKID ) -{ - BUG(); + return OS_MEMORY_COMPARE( adr1, adr2, MAC_ADDR_LENGTH ); /* foo */ } -#endif //end def _WPA2_ -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists