164064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file reportReplvl.c 264064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Report level implementation 364064216a8433360745f69edddce19a606659163The Android Open Source Project * 464064216a8433360745f69edddce19a606659163The Android Open Source Project * \see reportReplvl.h 564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 664064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************** 764064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 864064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 964064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |** 1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved. |** 1164064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 1264064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without |** 1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions |** 1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met: |** 1564064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 1664064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions of source code must retain the above copyright |** 1764064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer. |** 1864064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions in binary form must reproduce the above copyright |** 1964064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer in |** 2064064216a8433360745f69edddce19a606659163The Android Open Source Project**| the documentation and/or other materials provided with the |** 2164064216a8433360745f69edddce19a606659163The Android Open Source Project**| distribution. |** 2264064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Neither the name Texas Instruments nor the names of its |** 2364064216a8433360745f69edddce19a606659163The Android Open Source Project**| contributors may be used to endorse or promote products derived |** 2464064216a8433360745f69edddce19a606659163The Android Open Source Project**| from this software without specific prior written permission. |** 2564064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |** 2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |** 2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |** 2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |** 3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |** 3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |** 3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |** 3364064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |** 3464064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |** 3564064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |** 3664064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |** 3764064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 3864064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 3964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/ 4064064216a8433360745f69edddce19a606659163The Android Open Source Project 4164064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************/ 4264064216a8433360745f69edddce19a606659163The Android Open Source Project/* */ 4364064216a8433360745f69edddce19a606659163The Android Open Source Project/* MODULE: reportReplvl.c */ 4464064216a8433360745f69edddce19a606659163The Android Open Source Project/* PURPOSE: Report level implementation */ 4564064216a8433360745f69edddce19a606659163The Android Open Source Project/* */ 4664064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************/ 4764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h" 4864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osTIType.h" 4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h" 5064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteHash.h" 5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h" 5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "rsnApi.h" 5364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "regulatoryDomainApi.h" 5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteMgrApi.h" 5564064216a8433360745f69edddce19a606659163The Android Open Source Project 5664064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************/ 5764064216a8433360745f69edddce19a606659163The Android Open Source Project/* Functions Implementations */ 5864064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************/ 5964064216a8433360745f69edddce19a606659163The Android Open Source Project 6064064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************ 6164064216a8433360745f69edddce19a606659163The Android Open Source Project * buildNullTemplate * 6264064216a8433360745f69edddce19a606659163The Android Open Source Project ************************************************************************ 6364064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: This function build a NULL data template to set to the HAL 6464064216a8433360745f69edddce19a606659163The Android Open Source Project when joining an infrastructure network 6564064216a8433360745f69edddce19a606659163The Android Open Source Project performs the following: 6664064216a8433360745f69edddce19a606659163The Android Open Source Project - Build a template & set the template len, the template type is set in the site mgr 6764064216a8433360745f69edddce19a606659163The Android Open Source Project 6864064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: pSiteMgr - Handle to site manager 6964064216a8433360745f69edddce19a606659163The Android Open Source Project pTemplate - Pointer to the template structure 7064064216a8433360745f69edddce19a606659163The Android Open Source Project 7164064216a8433360745f69edddce19a606659163The Android Open Source Project 7264064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 7364064216a8433360745f69edddce19a606659163The Android Open Source Project 7464064216a8433360745f69edddce19a606659163The Android Open Source Project 7564064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: OK 7664064216a8433360745f69edddce19a606659163The Android Open Source Project 7764064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/ 7864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS buildNullTemplate(siteMgr_t *pSiteMgr, whalCtrl_setTemplate_t *pTemplate) 7964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 8064064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 8164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 size; 8264064216a8433360745f69edddce19a606659163The Android Open Source Project nullDataTemplate_t *pBuffer = (nullDataTemplate_t *)pTemplate->pTemplate; 8364064216a8433360745f69edddce19a606659163The Android Open Source Project siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite; 8464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT16 fc; 8564064216a8433360745f69edddce19a606659163The Android Open Source Project 8664064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pSiteMgr->hOs, pBuffer, sizeof(nullDataTemplate_t)); 8764064216a8433360745f69edddce19a606659163The Android Open Source Project 8864064216a8433360745f69edddce19a606659163The Android Open Source Project /* 8964064216a8433360745f69edddce19a606659163The Android Open Source Project * Header First 9064064216a8433360745f69edddce19a606659163The Android Open Source Project */ 9164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set destination address */ 9264064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &(pBuffer->hdr.DA.addr), &(pPrimarySite->bssid), MAC_ADDR_LEN); 9364064216a8433360745f69edddce19a606659163The Android Open Source Project 9464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set BSSID address */ 9564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &(pBuffer->hdr.BSSID.addr), &(pPrimarySite->bssid), MAC_ADDR_LEN); 9664064216a8433360745f69edddce19a606659163The Android Open Source Project 9764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build Source address */ 9864064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = CTRL_DATA_MAC_ADDRESS; 9964064216a8433360745f69edddce19a606659163The Android Open Source Project ctrlData_getParam(pSiteMgr->hCtrlData, ¶m); 10064064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &(pBuffer->hdr.SA.addr), &(param.content.ctrlDataDeviceMacAddress), MAC_ADDR_LEN); 10164064216a8433360745f69edddce19a606659163The Android Open Source Project 10264064216a8433360745f69edddce19a606659163The Android Open Source Project fc = DOT11_FC_DATA_NULL_FUNCTION; 10364064216a8433360745f69edddce19a606659163The Android Open Source Project fc |= (TRUE << DOT11_FC_TO_DS_SHIFT); 10464064216a8433360745f69edddce19a606659163The Android Open Source Project 10564064216a8433360745f69edddce19a606659163The Android Open Source Project pBuffer->hdr.fc = ENDIAN_HANDLE_WORD(fc); 10664064216a8433360745f69edddce19a606659163The Android Open Source Project 10764064216a8433360745f69edddce19a606659163The Android Open Source Project size = sizeof(dot11_mgmtHeader_t); 10864064216a8433360745f69edddce19a606659163The Android Open Source Project 10964064216a8433360745f69edddce19a606659163The Android Open Source Project pTemplate->templateLen = size; 11064064216a8433360745f69edddce19a606659163The Android Open Source Project 11164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 11264064216a8433360745f69edddce19a606659163The Android Open Source Project} 11364064216a8433360745f69edddce19a606659163The Android Open Source Project 11464064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************ 11564064216a8433360745f69edddce19a606659163The Android Open Source Project * buildProbeReqTemplate * 11664064216a8433360745f69edddce19a606659163The Android Open Source Project ************************************************************************ 11764064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: This function build a probe request template to set to the HAL in the scan process. 11864064216a8433360745f69edddce19a606659163The Android Open Source Project performs the following: 11964064216a8433360745f69edddce19a606659163The Android Open Source Project - Build a template & set the template len, the template type is set in the site mgr 12064064216a8433360745f69edddce19a606659163The Android Open Source Project 12164064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: pSiteMgr - Handle to site manager 12264064216a8433360745f69edddce19a606659163The Android Open Source Project pTemplate - Pointer to the template structure 12364064216a8433360745f69edddce19a606659163The Android Open Source Project pSsid - Desired SSID 12464064216a8433360745f69edddce19a606659163The Android Open Source Project 12564064216a8433360745f69edddce19a606659163The Android Open Source Project 12664064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 12764064216a8433360745f69edddce19a606659163The Android Open Source Project 12864064216a8433360745f69edddce19a606659163The Android Open Source Project 12964064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: OK 13064064216a8433360745f69edddce19a606659163The Android Open Source Project 13164064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/ 13264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS buildProbeReqTemplate(siteMgr_t *pSiteMgr, whalCtrl_setTemplate_t *pTemplate, ssid_t *pSsid, radioBand_e radioBand) 13364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 13464064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 13564064216a8433360745f69edddce19a606659163The Android Open Source Project char *pBuf; 13664064216a8433360745f69edddce19a606659163The Android Open Source Project int i; 13764064216a8433360745f69edddce19a606659163The Android Open Source Project probeReqTemplate_t *pBuffer = (probeReqTemplate_t *)pTemplate->pTemplate; 13864064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 size; 13964064216a8433360745f69edddce19a606659163The Android Open Source Project dot11_RATES_t *pDot11Rates; 14064064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 len = 0, ofdmIndex = 0; 14164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 suppRatesLen, extSuppRatesLen; 14264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 ratesBuf[MAX_SUPPORTED_RATES]; 14364064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 supportedRateMask,basicRateMask; 14464064216a8433360745f69edddce19a606659163The Android Open Source Project 14564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pSiteMgr->hOs, pBuffer, sizeof(probeReqTemplate_t)); 14664064216a8433360745f69edddce19a606659163The Android Open Source Project 14764064216a8433360745f69edddce19a606659163The Android Open Source Project /* 14864064216a8433360745f69edddce19a606659163The Android Open Source Project * Header First 14964064216a8433360745f69edddce19a606659163The Android Open Source Project */ 15064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set destination address */ 15164064216a8433360745f69edddce19a606659163The Android Open Source Project for (i = 0; i < MAC_ADDR_LEN; i++) 15264064216a8433360745f69edddce19a606659163The Android Open Source Project pBuffer->hdr.DA.addr[i] = 0xFF; 15364064216a8433360745f69edddce19a606659163The Android Open Source Project 15464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set BSSID address */ 15564064216a8433360745f69edddce19a606659163The Android Open Source Project 15664064216a8433360745f69edddce19a606659163The Android Open Source Project for (i = 0; i < MAC_ADDR_LEN; i++) 15764064216a8433360745f69edddce19a606659163The Android Open Source Project pBuffer->hdr.BSSID.addr[i] = 0xFF; 15864064216a8433360745f69edddce19a606659163The Android Open Source Project 15964064216a8433360745f69edddce19a606659163The Android Open Source Project 16064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build Source address */ 16164064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = CTRL_DATA_MAC_ADDRESS; 16264064216a8433360745f69edddce19a606659163The Android Open Source Project ctrlData_getParam(pSiteMgr->hCtrlData, ¶m); 16364064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &(pBuffer->hdr.SA.addr), &(param.content.ctrlDataDeviceMacAddress), MAC_ADDR_LEN); 16464064216a8433360745f69edddce19a606659163The Android Open Source Project 16564064216a8433360745f69edddce19a606659163The Android Open Source Project pBuffer->hdr.fc = ENDIAN_HANDLE_WORD(DOT11_FC_PROBE_REQ); 16664064216a8433360745f69edddce19a606659163The Android Open Source Project 16764064216a8433360745f69edddce19a606659163The Android Open Source Project size = sizeof(dot11_mgmtHeader_t); 16864064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf = (char *)&(pBuffer->infoElements); 16964064216a8433360745f69edddce19a606659163The Android Open Source Project 17064064216a8433360745f69edddce19a606659163The Android Open Source Project /* 17164064216a8433360745f69edddce19a606659163The Android Open Source Project * Informataion elements 17264064216a8433360745f69edddce19a606659163The Android Open Source Project */ 17364064216a8433360745f69edddce19a606659163The Android Open Source Project /* SSID */ 17464064216a8433360745f69edddce19a606659163The Android Open Source Project ((dot11_SSID_t *)(pBuf))->hdr.eleId = DOT11_SSID_ELE_ID; 17564064216a8433360745f69edddce19a606659163The Android Open Source Project ((dot11_SSID_t *)(pBuf))->hdr.eleLen = pSsid->len; 17664064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, pBuf + sizeof(dot11_eleHdr_t), (void *)pSsid->ssidString, pSsid->len); 17764064216a8433360745f69edddce19a606659163The Android Open Source Project size += sizeof(dot11_eleHdr_t) + pSsid->len; 17864064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += sizeof(dot11_eleHdr_t) + pSsid->len; 17964064216a8433360745f69edddce19a606659163The Android Open Source Project 18064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Rates */ 18164064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates = (dot11_RATES_t *) pBuf; 18264064216a8433360745f69edddce19a606659163The Android Open Source Project 18364064216a8433360745f69edddce19a606659163The Android Open Source Project /* 18464064216a8433360745f69edddce19a606659163The Android Open Source Project * Supported rates in probe request will always use the default rates for BG or A bands, 18564064216a8433360745f69edddce19a606659163The Android Open Source Project * regardless of the STA desired rates. 18664064216a8433360745f69edddce19a606659163The Android Open Source Project */ 18764064216a8433360745f69edddce19a606659163The Android Open Source Project if (radioBand == RADIO_BAND_2_4_GHZ) 18864064216a8433360745f69edddce19a606659163The Android Open Source Project { 18964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Basic rates: 1,2,5.5,11 */ 19064064216a8433360745f69edddce19a606659163The Android Open Source Project basicRateMask = translateBasicRateValueToMask(pSiteMgr->pDesiredParams->siteMgrRegstryBasicRate[DOT11_G_MODE], FALSE); 19164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Extended: 6,9,12,18,24,36,48,54 */ 19264064216a8433360745f69edddce19a606659163The Android Open Source Project supportedRateMask = translateSupportedRateValueToMask(pSiteMgr->pDesiredParams->siteMgrRegstrySuppRate[DOT11_G_MODE], FALSE); 19364064216a8433360745f69edddce19a606659163The Android Open Source Project } 19464064216a8433360745f69edddce19a606659163The Android Open Source Project else if (radioBand == RADIO_BAND_5_0_GHZ) 19564064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Basic rates: 6,12,24 */ 19664064216a8433360745f69edddce19a606659163The Android Open Source Project basicRateMask = translateBasicRateValueToMask(pSiteMgr->pDesiredParams->siteMgrRegstryBasicRate[DOT11_A_MODE], TRUE); 19764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Extended: 9,18,24,36,48,54 */ 19864064216a8433360745f69edddce19a606659163The Android Open Source Project supportedRateMask = translateSupportedRateValueToMask(pSiteMgr->pDesiredParams->siteMgrRegstrySuppRate[DOT11_A_MODE], TRUE); 19964064216a8433360745f69edddce19a606659163The Android Open Source Project } 20064064216a8433360745f69edddce19a606659163The Android Open Source Project else 20164064216a8433360745f69edddce19a606659163The Android Open Source Project { 20264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 20364064216a8433360745f69edddce19a606659163The Android Open Source Project ("buildProbeReqTemplate, radioBand =%d ???\n",radioBand)); 20464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Use default and pray for the best */ 20564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Basic rates: 1,2,5.5,11 */ 20664064216a8433360745f69edddce19a606659163The Android Open Source Project basicRateMask = translateBasicRateValueToMask(BASIC_RATE_SET_1_2_5_5_11, FALSE); 20764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Extended: 6,9,12,18,24,36,48,54 */ 20864064216a8433360745f69edddce19a606659163The Android Open Source Project supportedRateMask = translateSupportedRateValueToMask(SUPPORTED_RATE_SET_UP_TO_54, FALSE); 20964064216a8433360745f69edddce19a606659163The Android Open Source Project } 21064064216a8433360745f69edddce19a606659163The Android Open Source Project 21164064216a8433360745f69edddce19a606659163The Android Open Source Project bitMapToNetworkStringRates(supportedRateMask, 21264064216a8433360745f69edddce19a606659163The Android Open Source Project basicRateMask, 21364064216a8433360745f69edddce19a606659163The Android Open Source Project ratesBuf, &len, &ofdmIndex); 21464064216a8433360745f69edddce19a606659163The Android Open Source Project 21564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, 21664064216a8433360745f69edddce19a606659163The Android Open Source Project ("buildProbeReqTemplate, supportedRateMask=0x%x, basicRateMask=0x%x, len=%d, ofdmIndex=%d, radioBand =%d\n", 21764064216a8433360745f69edddce19a606659163The Android Open Source Project supportedRateMask,basicRateMask,len, ofdmIndex, radioBand)); 21864064216a8433360745f69edddce19a606659163The Android Open Source Project 21964064216a8433360745f69edddce19a606659163The Android Open Source Project 22064064216a8433360745f69edddce19a606659163The Android Open Source Project if(radioBand == RADIO_BAND_5_0_GHZ || 22164064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrUseDraftNum == DRAFT_5_AND_EARLIER || 22264064216a8433360745f69edddce19a606659163The Android Open Source Project ofdmIndex == len) 22364064216a8433360745f69edddce19a606659163The Android Open Source Project { 22464064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleId = DOT11_SUPPORTED_RATES_ELE_ID; 22564064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleLen = len; 22664064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)pDot11Rates->rates, ratesBuf, pDot11Rates->hdr.eleLen); 22764064216a8433360745f69edddce19a606659163The Android Open Source Project size += pDot11Rates->hdr.eleLen + sizeof(dot11_eleHdr_t); 22864064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += pDot11Rates->hdr.eleLen + sizeof(dot11_eleHdr_t); 22964064216a8433360745f69edddce19a606659163The Android Open Source Project } 23064064216a8433360745f69edddce19a606659163The Android Open Source Project else 23164064216a8433360745f69edddce19a606659163The Android Open Source Project { 23264064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleId = DOT11_SUPPORTED_RATES_ELE_ID; 23364064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleLen = ofdmIndex; 23464064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)pDot11Rates->rates, ratesBuf, pDot11Rates->hdr.eleLen); 23564064216a8433360745f69edddce19a606659163The Android Open Source Project suppRatesLen = pDot11Rates->hdr.eleLen + sizeof(dot11_eleHdr_t); 23664064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates = (dot11_RATES_t *) (pBuf + suppRatesLen); 23764064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleId = DOT11_EXT_SUPPORTED_RATES_ELE_ID; 23864064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleLen = len - ofdmIndex; 23964064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)pDot11Rates->rates, &ratesBuf[ofdmIndex], pDot11Rates->hdr.eleLen); 24064064216a8433360745f69edddce19a606659163The Android Open Source Project extSuppRatesLen = pDot11Rates->hdr.eleLen + sizeof(dot11_eleHdr_t); 24164064216a8433360745f69edddce19a606659163The Android Open Source Project size += suppRatesLen + extSuppRatesLen; 24264064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += suppRatesLen + extSuppRatesLen; 24364064216a8433360745f69edddce19a606659163The Android Open Source Project } 24464064216a8433360745f69edddce19a606659163The Android Open Source Project 24564064216a8433360745f69edddce19a606659163The Android Open Source Project pTemplate->templateLen = size; 24664064216a8433360745f69edddce19a606659163The Android Open Source Project 24764064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 24864064216a8433360745f69edddce19a606659163The Android Open Source Project} 24964064216a8433360745f69edddce19a606659163The Android Open Source Project 25064064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************ 25164064216a8433360745f69edddce19a606659163The Android Open Source Project * buildProbeRspTemplate * 25264064216a8433360745f69edddce19a606659163The Android Open Source Project ************************************************************************ 25364064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: This function build a probe response template to set to the HAL 25464064216a8433360745f69edddce19a606659163The Android Open Source Project when joining an IBSS network. 25564064216a8433360745f69edddce19a606659163The Android Open Source Project performs the following: 25664064216a8433360745f69edddce19a606659163The Android Open Source Project - Build a template & set the template len, the template type is set in the site mgr 25764064216a8433360745f69edddce19a606659163The Android Open Source Project - The template is built based on the chosen site attributes 25864064216a8433360745f69edddce19a606659163The Android Open Source Project 25964064216a8433360745f69edddce19a606659163The Android Open Source Project NOTE: This function is used to build beacon template too. 26064064216a8433360745f69edddce19a606659163The Android Open Source Project The site manager set the template type (after thos function returns) to beacon or probe response accordingly. 26164064216a8433360745f69edddce19a606659163The Android Open Source Project 26264064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: pSiteMgr - Handle to site manager 26364064216a8433360745f69edddce19a606659163The Android Open Source Project pTemplate - Pointer to the template structure 26464064216a8433360745f69edddce19a606659163The Android Open Source Project 26564064216a8433360745f69edddce19a606659163The Android Open Source Project 26664064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 26764064216a8433360745f69edddce19a606659163The Android Open Source Project 26864064216a8433360745f69edddce19a606659163The Android Open Source Project 26964064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: OK 27064064216a8433360745f69edddce19a606659163The Android Open Source Project 27164064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/ 27264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS buildProbeRspTemplate(siteMgr_t *pSiteMgr, whalCtrl_setTemplate_t *pTemplate) 27364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 27464064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 27564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 *pBuf; 27664064216a8433360745f69edddce19a606659163The Android Open Source Project probeRspTemplate_t *pBuffer = (probeRspTemplate_t *)pTemplate->pTemplate; 27764064216a8433360745f69edddce19a606659163The Android Open Source Project siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite; 27864064216a8433360745f69edddce19a606659163The Android Open Source Project int i; 27964064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 size; 28064064216a8433360745f69edddce19a606659163The Android Open Source Project dot11_RATES_t *pDot11Rates; 28164064216a8433360745f69edddce19a606659163The Android Open Source Project dot11_ERP_t *pdot11Erp; 28264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 len = 0, ofdmIndex = 0; 28364064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL extRates = FALSE; 28464064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL useProtection,NonErpPresent,barkerPreambleType; 28564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 ratesBuf[MAX_SUPPORTED_RATES]; 28664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 supportedRateMask,basicRateMask; 28764064216a8433360745f69edddce19a606659163The Android Open Source Project 28864064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pSiteMgr->hOs, pBuffer, sizeof(probeRspTemplate_t)); 28964064216a8433360745f69edddce19a606659163The Android Open Source Project 29064064216a8433360745f69edddce19a606659163The Android Open Source Project /* 29164064216a8433360745f69edddce19a606659163The Android Open Source Project * Header First 29264064216a8433360745f69edddce19a606659163The Android Open Source Project */ 29364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set destination address */ 29464064216a8433360745f69edddce19a606659163The Android Open Source Project for (i = 0; i < MAC_ADDR_LEN; i++) 29564064216a8433360745f69edddce19a606659163The Android Open Source Project pBuffer->hdr.DA.addr[i] = 0xFF; 29664064216a8433360745f69edddce19a606659163The Android Open Source Project 29764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set BSSID address */ 29864064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &(pBuffer->hdr.BSSID.addr), &(pPrimarySite->bssid), MAC_ADDR_LEN); 29964064216a8433360745f69edddce19a606659163The Android Open Source Project 30064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build Source address */ 30164064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = CTRL_DATA_MAC_ADDRESS; 30264064216a8433360745f69edddce19a606659163The Android Open Source Project ctrlData_getParam(pSiteMgr->hCtrlData, ¶m); 30364064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &(pBuffer->hdr.SA.addr), &(param.content.ctrlDataDeviceMacAddress), MAC_ADDR_LEN); 30464064216a8433360745f69edddce19a606659163The Android Open Source Project 30564064216a8433360745f69edddce19a606659163The Android Open Source Project pBuffer->hdr.fc = ENDIAN_HANDLE_WORD(DOT11_FC_PROBE_RESP); 30664064216a8433360745f69edddce19a606659163The Android Open Source Project 30764064216a8433360745f69edddce19a606659163The Android Open Source Project size = sizeof(dot11_mgmtHeader_t); 30864064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf = (UINT8 *)pBuffer->timeStamp; 30964064216a8433360745f69edddce19a606659163The Android Open Source Project /* 31064064216a8433360745f69edddce19a606659163The Android Open Source Project * Fixed Fields 31164064216a8433360745f69edddce19a606659163The Android Open Source Project */ 31264064216a8433360745f69edddce19a606659163The Android Open Source Project /* we skip the timestamp field */ 31364064216a8433360745f69edddce19a606659163The Android Open Source Project size += TIME_STAMP_LEN; 31464064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += TIME_STAMP_LEN; 31564064216a8433360745f69edddce19a606659163The Android Open Source Project 31664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Beacon interval */ 31764064216a8433360745f69edddce19a606659163The Android Open Source Project *((UINT16 *)pBuf) = pPrimarySite->beaconInterval; 31864064216a8433360745f69edddce19a606659163The Android Open Source Project size += FIX_FIELD_LEN; 31964064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += FIX_FIELD_LEN; 32064064216a8433360745f69edddce19a606659163The Android Open Source Project 32164064216a8433360745f69edddce19a606659163The Android Open Source Project /* capabilities */ 32264064216a8433360745f69edddce19a606659163The Android Open Source Project *((UINT16 *)pBuf) = pPrimarySite->capabilities; 32364064216a8433360745f69edddce19a606659163The Android Open Source Project size += FIX_FIELD_LEN; 32464064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += FIX_FIELD_LEN; 32564064216a8433360745f69edddce19a606659163The Android Open Source Project 32664064216a8433360745f69edddce19a606659163The Android Open Source Project /* 32764064216a8433360745f69edddce19a606659163The Android Open Source Project * Informataion elements 32864064216a8433360745f69edddce19a606659163The Android Open Source Project */ 32964064216a8433360745f69edddce19a606659163The Android Open Source Project /* SSID */ 33064064216a8433360745f69edddce19a606659163The Android Open Source Project ((dot11_SSID_t *)(pBuf))->hdr.eleId = DOT11_SSID_ELE_ID; 33164064216a8433360745f69edddce19a606659163The Android Open Source Project ((dot11_SSID_t *)(pBuf))->hdr.eleLen = pPrimarySite->ssid.len; 33264064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, pBuf + sizeof(dot11_eleHdr_t), (void *)pPrimarySite->ssid.ssidString, pPrimarySite->ssid.len); 33364064216a8433360745f69edddce19a606659163The Android Open Source Project size += sizeof(dot11_eleHdr_t) + pPrimarySite->ssid.len; 33464064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += sizeof(dot11_eleHdr_t) + pPrimarySite->ssid.len; 33564064216a8433360745f69edddce19a606659163The Android Open Source Project 33664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Rates */ 33764064216a8433360745f69edddce19a606659163The Android Open Source Project 33864064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates = (dot11_RATES_t *) pBuf; 33964064216a8433360745f69edddce19a606659163The Android Open Source Project 34064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPrimarySite->channel == SPECIAL_BG_CHANNEL) 34164064216a8433360745f69edddce19a606659163The Android Open Source Project { 34264064216a8433360745f69edddce19a606659163The Android Open Source Project supportedRateMask = getSupportedRateMaskForSpecialBGchannel() ; 34364064216a8433360745f69edddce19a606659163The Android Open Source Project basicRateMask = getBasicRateMaskForSpecialBGchannel(); 34464064216a8433360745f69edddce19a606659163The Android Open Source Project } 34564064216a8433360745f69edddce19a606659163The Android Open Source Project else 34664064216a8433360745f69edddce19a606659163The Android Open Source Project { 34764064216a8433360745f69edddce19a606659163The Android Open Source Project supportedRateMask = pSiteMgr->pDesiredParams->siteMgrMatchedSuppRateMask; 34864064216a8433360745f69edddce19a606659163The Android Open Source Project basicRateMask = pSiteMgr->pDesiredParams->siteMgrMatchedBasicRateMask; 34964064216a8433360745f69edddce19a606659163The Android Open Source Project } 35064064216a8433360745f69edddce19a606659163The Android Open Source Project 35164064216a8433360745f69edddce19a606659163The Android Open Source Project bitMapToNetworkStringRates(supportedRateMask, 35264064216a8433360745f69edddce19a606659163The Android Open Source Project basicRateMask, 35364064216a8433360745f69edddce19a606659163The Android Open Source Project ratesBuf, &len, &ofdmIndex); 35464064216a8433360745f69edddce19a606659163The Android Open Source Project 35564064216a8433360745f69edddce19a606659163The Android Open Source Project if(pSiteMgr->siteMgrOperationalMode != DOT11_G_MODE || 35664064216a8433360745f69edddce19a606659163The Android Open Source Project pSiteMgr->pDesiredParams->siteMgrUseDraftNum == DRAFT_5_AND_EARLIER || 35764064216a8433360745f69edddce19a606659163The Android Open Source Project ofdmIndex == len) 35864064216a8433360745f69edddce19a606659163The Android Open Source Project { 35964064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleId = DOT11_SUPPORTED_RATES_ELE_ID; 36064064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleLen = len; 36164064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)pDot11Rates->rates, ratesBuf, pDot11Rates->hdr.eleLen); 36264064216a8433360745f69edddce19a606659163The Android Open Source Project size += pDot11Rates->hdr.eleLen + sizeof(dot11_eleHdr_t); 36364064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += pDot11Rates->hdr.eleLen + sizeof(dot11_eleHdr_t); 36464064216a8433360745f69edddce19a606659163The Android Open Source Project } 36564064216a8433360745f69edddce19a606659163The Android Open Source Project else 36664064216a8433360745f69edddce19a606659163The Android Open Source Project { 36764064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleId = DOT11_SUPPORTED_RATES_ELE_ID; 36864064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleLen = ofdmIndex; 36964064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)pDot11Rates->rates, ratesBuf, pDot11Rates->hdr.eleLen); 37064064216a8433360745f69edddce19a606659163The Android Open Source Project size += pDot11Rates->hdr.eleLen + sizeof(dot11_eleHdr_t); 37164064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += pDot11Rates->hdr.eleLen + sizeof(dot11_eleHdr_t); 37264064216a8433360745f69edddce19a606659163The Android Open Source Project extRates = TRUE; 37364064216a8433360745f69edddce19a606659163The Android Open Source Project } 37464064216a8433360745f69edddce19a606659163The Android Open Source Project 37564064216a8433360745f69edddce19a606659163The Android Open Source Project /* DS */ 37664064216a8433360745f69edddce19a606659163The Android Open Source Project ((dot11_DS_PARAMS_t *)(pBuf))->hdr.eleId = DOT11_DS_PARAMS_ELE_ID; 37764064216a8433360745f69edddce19a606659163The Android Open Source Project ((dot11_DS_PARAMS_t *)(pBuf))->hdr.eleLen = DOT11_DS_PARAMS_ELE_LEN; 37864064216a8433360745f69edddce19a606659163The Android Open Source Project ((dot11_DS_PARAMS_t *)(pBuf))->currChannel = pPrimarySite->channel; 37964064216a8433360745f69edddce19a606659163The Android Open Source Project size += sizeof(dot11_eleHdr_t) + DOT11_DS_PARAMS_ELE_LEN; 38064064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += sizeof(dot11_eleHdr_t) + DOT11_DS_PARAMS_ELE_LEN; 38164064216a8433360745f69edddce19a606659163The Android Open Source Project 38264064216a8433360745f69edddce19a606659163The Android Open Source Project /* IBSS */ 38364064216a8433360745f69edddce19a606659163The Android Open Source Project ((dot11_IBSS_PARAMS_t *)(pBuf))->hdr.eleId = DOT11_IBSS_PARAMS_ELE_ID; 38464064216a8433360745f69edddce19a606659163The Android Open Source Project ((dot11_IBSS_PARAMS_t *)(pBuf))->hdr.eleLen = DOT11_IBSS_PARAMS_ELE_LEN; 38564064216a8433360745f69edddce19a606659163The Android Open Source Project#if 1 38664064216a8433360745f69edddce19a606659163The Android Open Source Project ((UINT8 *)&((dot11_IBSS_PARAMS_t *)(pBuf))->atimWindow)[0] = ((UINT8 *)&pPrimarySite->atimWindow)[0]; 38764064216a8433360745f69edddce19a606659163The Android Open Source Project ((UINT8 *)&((dot11_IBSS_PARAMS_t *)(pBuf))->atimWindow)[1] = ((UINT8 *)&pPrimarySite->atimWindow)[1]; 38864064216a8433360745f69edddce19a606659163The Android Open Source Project#else /* fix for WinCE */ 38964064216a8433360745f69edddce19a606659163The Android Open Source Project COPY_UNALIGNED_WORD(((UINT8 *)&((dot11_IBSS_PARAMS_t *)(pBuf))->atimWindow), &pPrimarySite->atimWindow); 39064064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 39164064216a8433360745f69edddce19a606659163The Android Open Source Project pPrimarySite->atimWindow = ENDIAN_HANDLE_WORD(pPrimarySite->atimWindow); 39264064216a8433360745f69edddce19a606659163The Android Open Source Project 39364064216a8433360745f69edddce19a606659163The Android Open Source Project size += sizeof(dot11_eleHdr_t) + DOT11_IBSS_PARAMS_ELE_LEN; 39464064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += sizeof(dot11_eleHdr_t) + DOT11_IBSS_PARAMS_ELE_LEN; 39564064216a8433360745f69edddce19a606659163The Android Open Source Project 39664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Add country Information Element */ 39764064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = REGULATORY_DOMAIN_ENABLED_PARAM; 39864064216a8433360745f69edddce19a606659163The Android Open Source Project regulatoryDomain_getParam(pSiteMgr->hRegulatoryDomain,¶m); 39964064216a8433360745f69edddce19a606659163The Android Open Source Project 40064064216a8433360745f69edddce19a606659163The Android Open Source Project if( param.content.regulatoryDomainEnabled == TRUE ) 40164064216a8433360745f69edddce19a606659163The Android Open Source Project { 40264064216a8433360745f69edddce19a606659163The Android Open Source Project /* get country IE */ 40364064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = REGULATORY_DOMAIN_COUNTRY_PARAM; 40464064216a8433360745f69edddce19a606659163The Android Open Source Project regulatoryDomain_getParam(pSiteMgr->hRegulatoryDomain, ¶m); 40564064216a8433360745f69edddce19a606659163The Android Open Source Project 40664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Check if a country IE was found */ 40764064216a8433360745f69edddce19a606659163The Android Open Source Project if(param.content.pCountry != NULL) 40864064216a8433360745f69edddce19a606659163The Android Open Source Project { 40964064216a8433360745f69edddce19a606659163The Android Open Source Project *pBuf = DOT11_COUNTRY_ELE_ID; 41064064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += 1; 41164064216a8433360745f69edddce19a606659163The Android Open Source Project size += 1; 41264064216a8433360745f69edddce19a606659163The Android Open Source Project *pBuf = (UINT8)param.content.pCountry->len; 41364064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += 1; 41464064216a8433360745f69edddce19a606659163The Android Open Source Project size += 1; 41564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, pBuf , ¶m.content.pCountry->countryIE, param.content.pCountry->len); 41664064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += param.content.pCountry->len; 41764064216a8433360745f69edddce19a606659163The Android Open Source Project size += param.content.pCountry->len; 41864064216a8433360745f69edddce19a606659163The Android Open Source Project } 41964064216a8433360745f69edddce19a606659163The Android Open Source Project } 42064064216a8433360745f69edddce19a606659163The Android Open Source Project 42164064216a8433360745f69edddce19a606659163The Android Open Source Project /*ERP IE*/ 42264064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_IsERP_Needed(pSiteMgr,&useProtection,&NonErpPresent,&barkerPreambleType); 42364064216a8433360745f69edddce19a606659163The Android Open Source Project if (useProtection || NonErpPresent || barkerPreambleType) 42464064216a8433360745f69edddce19a606659163The Android Open Source Project { 42564064216a8433360745f69edddce19a606659163The Android Open Source Project pdot11Erp = (dot11_ERP_t *) pBuf; 42664064216a8433360745f69edddce19a606659163The Android Open Source Project pdot11Erp->hdr.eleId = DOT11_ERP_IE_ID; 42764064216a8433360745f69edddce19a606659163The Android Open Source Project pdot11Erp->hdr.eleLen = 1; 42864064216a8433360745f69edddce19a606659163The Android Open Source Project if (NonErpPresent) 42964064216a8433360745f69edddce19a606659163The Android Open Source Project pdot11Erp->ctrl |= ERP_IE_NON_ERP_PRESENT_MASK; 43064064216a8433360745f69edddce19a606659163The Android Open Source Project if (useProtection) 43164064216a8433360745f69edddce19a606659163The Android Open Source Project pdot11Erp->ctrl |= ERP_IE_USE_PROTECTION_MASK; 43264064216a8433360745f69edddce19a606659163The Android Open Source Project if (barkerPreambleType) 43364064216a8433360745f69edddce19a606659163The Android Open Source Project pdot11Erp->ctrl |= ERP_IE_BARKER_PREAMBLE_MODE_MASK; 43464064216a8433360745f69edddce19a606659163The Android Open Source Project size += pdot11Erp->hdr.eleLen + sizeof(dot11_eleHdr_t); 43564064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += pdot11Erp->hdr.eleLen + sizeof(dot11_eleHdr_t); 43664064216a8433360745f69edddce19a606659163The Android Open Source Project 43764064216a8433360745f69edddce19a606659163The Android Open Source Project } 43864064216a8433360745f69edddce19a606659163The Android Open Source Project 43964064216a8433360745f69edddce19a606659163The Android Open Source Project 44064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Extended supported rates IE */ 44164064216a8433360745f69edddce19a606659163The Android Open Source Project if(extRates) 44264064216a8433360745f69edddce19a606659163The Android Open Source Project { 44364064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates = (dot11_RATES_t *) pBuf; 44464064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleId = DOT11_EXT_SUPPORTED_RATES_ELE_ID; 44564064216a8433360745f69edddce19a606659163The Android Open Source Project pDot11Rates->hdr.eleLen = len - ofdmIndex; 44664064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, (void *)pDot11Rates->rates, &ratesBuf[ofdmIndex], pDot11Rates->hdr.eleLen); 44764064216a8433360745f69edddce19a606659163The Android Open Source Project size += pDot11Rates->hdr.eleLen + sizeof(dot11_eleHdr_t); 44864064216a8433360745f69edddce19a606659163The Android Open Source Project pBuf += pDot11Rates->hdr.eleLen + sizeof(dot11_eleHdr_t); 44964064216a8433360745f69edddce19a606659163The Android Open Source Project } 45064064216a8433360745f69edddce19a606659163The Android Open Source Project 45164064216a8433360745f69edddce19a606659163The Android Open Source Project /* no need to insert RSN information elements */ 45264064216a8433360745f69edddce19a606659163The Android Open Source Project 45364064216a8433360745f69edddce19a606659163The Android Open Source Project pTemplate->templateLen = size; 45464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("Probe response template len = %d\n",size)); 45564064216a8433360745f69edddce19a606659163The Android Open Source Project 45664064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 45764064216a8433360745f69edddce19a606659163The Android Open Source Project} 45864064216a8433360745f69edddce19a606659163The Android Open Source Project 45964064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************ 46064064216a8433360745f69edddce19a606659163The Android Open Source Project * buildPsPollTemplate * 46164064216a8433360745f69edddce19a606659163The Android Open Source Project ************************************************************************ 46264064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: This function build a ps poll template 46364064216a8433360745f69edddce19a606659163The Android Open Source Project performs the following: 46464064216a8433360745f69edddce19a606659163The Android Open Source Project - Build a template & set the template len, the template type is set in the site mgr 46564064216a8433360745f69edddce19a606659163The Android Open Source Project 46664064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: pSiteMgr - Handle to site manager 46764064216a8433360745f69edddce19a606659163The Android Open Source Project pTemplate - Pointer to the template structure 46864064216a8433360745f69edddce19a606659163The Android Open Source Project pSsid - Desired SSID 46964064216a8433360745f69edddce19a606659163The Android Open Source Project 47064064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 47164064216a8433360745f69edddce19a606659163The Android Open Source Project 47264064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: OK 47364064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/ 47464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS buildPsPollTemplate(siteMgr_t *pSiteMgr, whalCtrl_setTemplate_t *pTemplate) 47564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 47664064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 47764064216a8433360745f69edddce19a606659163The Android Open Source Project whalParamInfo_t whalParam; 47864064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 size; 47964064216a8433360745f69edddce19a606659163The Android Open Source Project psPollTemplate_t *pBuffer = (psPollTemplate_t *)pTemplate->pTemplate; 48064064216a8433360745f69edddce19a606659163The Android Open Source Project siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite; 48164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT16 fc; 48264064216a8433360745f69edddce19a606659163The Android Open Source Project 48364064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pSiteMgr->hOs, pBuffer, sizeof(psPollTemplate_t)); 48464064216a8433360745f69edddce19a606659163The Android Open Source Project 48564064216a8433360745f69edddce19a606659163The Android Open Source Project /* 48664064216a8433360745f69edddce19a606659163The Android Open Source Project * Header First 48764064216a8433360745f69edddce19a606659163The Android Open Source Project */ 48864064216a8433360745f69edddce19a606659163The Android Open Source Project 48964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set BSSID address */ 49064064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &(pBuffer->hdr.BSSID.addr), &(pPrimarySite->bssid), MAC_ADDR_LEN); 49164064216a8433360745f69edddce19a606659163The Android Open Source Project 49264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build Source address */ 49364064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = CTRL_DATA_MAC_ADDRESS; 49464064216a8433360745f69edddce19a606659163The Android Open Source Project ctrlData_getParam(pSiteMgr->hCtrlData, ¶m); 49564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &(pBuffer->hdr.TA.addr), &(param.content.ctrlDataDeviceMacAddress), MAC_ADDR_LEN); 49664064216a8433360745f69edddce19a606659163The Android Open Source Project 49764064216a8433360745f69edddce19a606659163The Android Open Source Project /* 49864064216a8433360745f69edddce19a606659163The Android Open Source Project ** Building the Frame Control word (16 bits) 49964064216a8433360745f69edddce19a606659163The Android Open Source Project ** --------------------------------------------- 50064064216a8433360745f69edddce19a606659163The Android Open Source Project ** Type = Control 50164064216a8433360745f69edddce19a606659163The Android Open Source Project ** SubType = Power Save (PS) POLL, */ 50264064216a8433360745f69edddce19a606659163The Android Open Source Project fc = DOT11_FC_PS_POLL; 50364064216a8433360745f69edddce19a606659163The Android Open Source Project /* 50464064216a8433360745f69edddce19a606659163The Android Open Source Project ** setting the Power Management bit in the Frame control field 50564064216a8433360745f69edddce19a606659163The Android Open Source Project ** to be "Power Save mode" 50664064216a8433360745f69edddce19a606659163The Android Open Source Project */ 50764064216a8433360745f69edddce19a606659163The Android Open Source Project fc |= (0x1 << DOT11_FC_PWR_MGMT_SHIFT); 50864064216a8433360745f69edddce19a606659163The Android Open Source Project 50964064216a8433360745f69edddce19a606659163The Android Open Source Project pBuffer->hdr.fc = ENDIAN_HANDLE_WORD(fc); 51064064216a8433360745f69edddce19a606659163The Android Open Source Project 51164064216a8433360745f69edddce19a606659163The Android Open Source Project /* 51264064216a8433360745f69edddce19a606659163The Android Open Source Project ** Association ID 51364064216a8433360745f69edddce19a606659163The Android Open Source Project ** ----------------- 51464064216a8433360745f69edddce19a606659163The Android Open Source Project */ 51564064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.paramType = HAL_CTRL_AID_PARAM; 51664064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_GetParam (pSiteMgr->hHalCtrl, &whalParam) ; 51764064216a8433360745f69edddce19a606659163The Android Open Source Project 51864064216a8433360745f69edddce19a606659163The Android Open Source Project /* AID should have its two MSB bit Set to "1"*/ 51964064216a8433360745f69edddce19a606659163The Android Open Source Project pBuffer->hdr.AID = whalParam.content.halCtrlAid | 0xC000; 52064064216a8433360745f69edddce19a606659163The Android Open Source Project 52164064216a8433360745f69edddce19a606659163The Android Open Source Project size = sizeof(dot11_PsPollFrameHeader_t); 52264064216a8433360745f69edddce19a606659163The Android Open Source Project 52364064216a8433360745f69edddce19a606659163The Android Open Source Project pTemplate->templateLen = size; 52464064216a8433360745f69edddce19a606659163The Android Open Source Project 52564064216a8433360745f69edddce19a606659163The Android Open Source Project 52664064216a8433360745f69edddce19a606659163The Android Open Source Project 52764064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 52864064216a8433360745f69edddce19a606659163The Android Open Source Project} 52964064216a8433360745f69edddce19a606659163The Android Open Source Project 53064064216a8433360745f69edddce19a606659163The Android Open Source Project 53164064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************ 53264064216a8433360745f69edddce19a606659163The Android Open Source Project * buildQosNullDataTemplate * 53364064216a8433360745f69edddce19a606659163The Android Open Source Project ************************************************************************ 53464064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: This function build a qos null data template 53564064216a8433360745f69edddce19a606659163The Android Open Source Project performs the following: 53664064216a8433360745f69edddce19a606659163The Android Open Source Project - Build a template & set the template len, the template type is set in the site mgr 53764064216a8433360745f69edddce19a606659163The Android Open Source Project 53864064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: pSiteMgr - Handle to site manager 53964064216a8433360745f69edddce19a606659163The Android Open Source Project pTemplate - Pointer to the template structure 54064064216a8433360745f69edddce19a606659163The Android Open Source Project pSsid - Desired SSID 54164064216a8433360745f69edddce19a606659163The Android Open Source Project 54264064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 54364064216a8433360745f69edddce19a606659163The Android Open Source Project 54464064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: OK 54564064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/ 54664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS buildQosNullDataTemplate(siteMgr_t *pSiteMgr, whalCtrl_setTemplate_t *pTemplate, UINT8 userPriority) 54764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 54864064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 54964064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 size; 55064064216a8433360745f69edddce19a606659163The Android Open Source Project QosNullDataTemplate_t *pBuffer = (QosNullDataTemplate_t *)pTemplate->pTemplate; 55164064216a8433360745f69edddce19a606659163The Android Open Source Project siteEntry_t *pPrimarySite = pSiteMgr->pSitesMgmtParams->pPrimarySite; 55264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT16 fc; 55364064216a8433360745f69edddce19a606659163The Android Open Source Project 55464064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pSiteMgr->hOs, pBuffer, sizeof(QosNullDataTemplate_t)); 55564064216a8433360745f69edddce19a606659163The Android Open Source Project 55664064216a8433360745f69edddce19a606659163The Android Open Source Project /* 55764064216a8433360745f69edddce19a606659163The Android Open Source Project * Header First 55864064216a8433360745f69edddce19a606659163The Android Open Source Project */ 55964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set destination address */ 56064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPrimarySite) 56164064216a8433360745f69edddce19a606659163The Android Open Source Project { 56264064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &(pBuffer->hdr.address1.addr), &(pPrimarySite->bssid), MAC_ADDR_LEN); 56364064216a8433360745f69edddce19a606659163The Android Open Source Project 56464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set BSSID address */ 56564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &(pBuffer->hdr.address3.addr), &(pPrimarySite->bssid), MAC_ADDR_LEN); 56664064216a8433360745f69edddce19a606659163The Android Open Source Project } 56764064216a8433360745f69edddce19a606659163The Android Open Source Project else 56864064216a8433360745f69edddce19a606659163The Android Open Source Project { 56964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG, ("No Primary site so cannot fill QosNullData template\n")); 57064064216a8433360745f69edddce19a606659163The Android Open Source Project } 57164064216a8433360745f69edddce19a606659163The Android Open Source Project 57264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build Source address */ 57364064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = CTRL_DATA_MAC_ADDRESS; 57464064216a8433360745f69edddce19a606659163The Android Open Source Project ctrlData_getParam(pSiteMgr->hCtrlData, ¶m); 57564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pSiteMgr->hOs, &(pBuffer->hdr.address2.addr), &(param.content.ctrlDataDeviceMacAddress), MAC_ADDR_LEN); 57664064216a8433360745f69edddce19a606659163The Android Open Source Project 57764064216a8433360745f69edddce19a606659163The Android Open Source Project fc = DOT11_FC_DATA_NULL_QOS; 57864064216a8433360745f69edddce19a606659163The Android Open Source Project fc |= (TRUE << DOT11_FC_TO_DS_SHIFT); 57964064216a8433360745f69edddce19a606659163The Android Open Source Project 58064064216a8433360745f69edddce19a606659163The Android Open Source Project pBuffer->hdr.qosControl = (userPriority << QOS_CONTROL_UP_SHIFT); 58164064216a8433360745f69edddce19a606659163The Android Open Source Project 58264064216a8433360745f69edddce19a606659163The Android Open Source Project pBuffer->hdr.fc = ENDIAN_HANDLE_WORD(fc); 58364064216a8433360745f69edddce19a606659163The Android Open Source Project 58464064216a8433360745f69edddce19a606659163The Android Open Source Project size = sizeof(dot11_header_t); 58564064216a8433360745f69edddce19a606659163The Android Open Source Project 58664064216a8433360745f69edddce19a606659163The Android Open Source Project pTemplate->templateLen = size; 58764064216a8433360745f69edddce19a606659163The Android Open Source Project 58864064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 58964064216a8433360745f69edddce19a606659163The Android Open Source Project} 59064064216a8433360745f69edddce19a606659163The Android Open Source Project 59164064216a8433360745f69edddce19a606659163The Android Open Source Project 59264064216a8433360745f69edddce19a606659163The Android Open Source Project 59364064216a8433360745f69edddce19a606659163The Android Open Source Project 59464064216a8433360745f69edddce19a606659163The Android Open Source Project 595