164064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************** 264064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 364064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 464064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |** 564064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved. |** 664064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 764064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without |** 864064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions |** 964064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met: |** 1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 1164064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions of source code must retain the above copyright |** 1264064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer. |** 1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions in binary form must reproduce the above copyright |** 1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer in |** 1564064216a8433360745f69edddce19a606659163The Android Open Source Project**| the documentation and/or other materials provided with the |** 1664064216a8433360745f69edddce19a606659163The Android Open Source Project**| distribution. |** 1764064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Neither the name Texas Instruments nor the names of its |** 1864064216a8433360745f69edddce19a606659163The Android Open Source Project**| contributors may be used to endorse or promote products derived |** 1964064216a8433360745f69edddce19a606659163The Android Open Source Project**| from this software without specific prior written permission. |** 2064064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 2164064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |** 2264064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |** 2364064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |** 2464064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |** 2564064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |** 2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |** 2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |** 2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |** 2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |** 3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |** 3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |** 3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 3364064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 3464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/ 3564064216a8433360745f69edddce19a606659163The Android Open Source Project 3664064216a8433360745f69edddce19a606659163The Android Open Source Project 3764064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file apConn.c 3864064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief AP Connection 3964064216a8433360745f69edddce19a606659163The Android Open Source Project * 4064064216a8433360745f69edddce19a606659163The Android Open Source Project * \see apConn.h 4164064216a8433360745f69edddce19a606659163The Android Open Source Project */ 4264064216a8433360745f69edddce19a606659163The Android Open Source Project 4364064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************** 4464064216a8433360745f69edddce19a606659163The Android Open Source Project * * 4564064216a8433360745f69edddce19a606659163The Android Open Source Project * MODULE: AP Connection * 4664064216a8433360745f69edddce19a606659163The Android Open Source Project * PURPOSE: * 4764064216a8433360745f69edddce19a606659163The Android Open Source Project * Roaming ability of eSTA is implemented by Roaming Manager Component and 4864064216a8433360745f69edddce19a606659163The Android Open Source Project * described in "Roaming Manager module LLD" document, and by 4964064216a8433360745f69edddce19a606659163The Android Open Source Project * AP Connection module. AP Connection module implemented as two sub-modules: 5064064216a8433360745f69edddce19a606659163The Android Open Source Project * The major one is AP Connection, that is responsible for: 5164064216a8433360745f69edddce19a606659163The Android Open Source Project * - providing Roaming Manager with access to other parts of WLAN Driver, 5264064216a8433360745f69edddce19a606659163The Android Open Source Project * - implementing low levels of roaming mechanism. 5364064216a8433360745f69edddce19a606659163The Android Open Source Project * Current BSS sub-module takes care of: 5464064216a8433360745f69edddce19a606659163The Android Open Source Project * - maintaining database of current AP info, 5564064216a8433360745f69edddce19a606659163The Android Open Source Project * - providing access to database of current AP info. 5664064216a8433360745f69edddce19a606659163The Android Open Source Project * * 5764064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/ 5864064216a8433360745f69edddce19a606659163The Android Open Source Project 5964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h" 6064064216a8433360745f69edddce19a606659163The Android Open Source Project 6164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramIn.h" 6264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h" 6364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h" 6464064216a8433360745f69edddce19a606659163The Android Open Source Project 6564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeSmApi.h" 6664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteMgrApi.h" 6764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeApi.h" 6864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "PowerMgr_API.h" 6964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TrafficMonitorAPI.h" 7064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "RateAdaptation.h" 7164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "qosMngr_API.h" 7264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 7364064216a8433360745f69edddce19a606659163The Android Open Source Project #include "excMngr.h" 7464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 7564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "measurementMgrApi.h" 7664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "connApi.h" 7764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "EvHandler.h" 7864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "apConn.h" 7964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "currBss.h" 8064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "Ctrl.h" 8164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "fsm.h" 8264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "scrApi.h" 8364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "regulatoryDomainApi.h" 8464064216a8433360745f69edddce19a606659163The Android Open Source Project 8564064216a8433360745f69edddce19a606659163The Android Open Source Project/* Constants and macros */ 8664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 8764064216a8433360745f69edddce19a606659163The Android Open Source Project #define AP_CONN_VALIDATE_HANDLE(hAPConnection) \ 8864064216a8433360745f69edddce19a606659163The Android Open Source Project if (hAPConnection == NULL) \ 8964064216a8433360745f69edddce19a606659163The Android Open Source Project { \ 9064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("FATAL ERROR: AP Connection context is not initiated\n")); \ 9164064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; \ 9264064216a8433360745f69edddce19a606659163The Android Open Source Project } 9364064216a8433360745f69edddce19a606659163The Android Open Source Project#else 9464064216a8433360745f69edddce19a606659163The Android Open Source Project #define AP_CONN_VALIDATE_HANDLE(hAPConnection) 9564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 9664064216a8433360745f69edddce19a606659163The Android Open Source Project 9764064216a8433360745f69edddce19a606659163The Android Open Source Project#define MAX_ROAMING_TRIGGERS ROAMING_TRIGGER_LAST 9864064216a8433360745f69edddce19a606659163The Android Open Source Project 9964064216a8433360745f69edddce19a606659163The Android Open Source Project#define UPDATE_SEND_DEAUTH_PACKET_FLAG(roamingEventType) \ 10064064216a8433360745f69edddce19a606659163The Android Open Source Project if ((roamingEventType >= ROAMING_TRIGGER_MAX_TX_RETRIES) && \ 10164064216a8433360745f69edddce19a606659163The Android Open Source Project (roamingEventType != ROAMING_TRIGGER_SECURITY_ATTACK)) \ 10264064216a8433360745f69edddce19a606659163The Android Open Source Project { \ 10364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->sendDeauthPacket = FALSE; \ 10464064216a8433360745f69edddce19a606659163The Android Open Source Project } 10564064216a8433360745f69edddce19a606659163The Android Open Source Project 10664064216a8433360745f69edddce19a606659163The Android Open Source Project/* Init bits */ 10764064216a8433360745f69edddce19a606659163The Android Open Source Project 10864064216a8433360745f69edddce19a606659163The Android Open Source Project 10964064216a8433360745f69edddce19a606659163The Android Open Source Project/* Enumerations */ 11064064216a8433360745f69edddce19a606659163The Android Open Source Project 11164064216a8433360745f69edddce19a606659163The Android Open Source Project/** 11264064216a8433360745f69edddce19a606659163The Android Open Source Project* AP Connection state machine states 11364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 11464064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef enum 11564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 11664064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_STATE_IDLE = 0, /**< Initial state */ 11764064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_STATE_WAIT_ROAM, /**< Connected to AP, waiting for start roaming command */ 11864064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_STATE_SWITCHING_CHANNEL, /**< Connected to AP, switch channel in progress */ 11964064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_STATE_WAIT_CONNECT_CMD, /**< SCR allocated, PS mode entered; wait for cmd from Roam Mngr */ 12064064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_STATE_PREPARE_HAND_OFF, /**< Request CCKM for new AP, wait for response */ 12164064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_STATE_CONNECTING, /**< Performing Connection to new AP; wait for response from Conn SM */ 12264064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_STATE_DISCONNECTING, /**< Wait for completion of current link disconnection */ 12364064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_STATE_REESTABLISH_VOICE, /**< Wait for completion of voice TSPEC re-negotiation */ 12464064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_STATE_LAST 12564064216a8433360745f69edddce19a606659163The Android Open Source Project} apConn_smStates; 12664064216a8433360745f69edddce19a606659163The Android Open Source Project 12764064216a8433360745f69edddce19a606659163The Android Open Source Project 12864064216a8433360745f69edddce19a606659163The Android Open Source Project/** 12964064216a8433360745f69edddce19a606659163The Android Open Source Project* AP Connection state machine events 13064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 13164064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef enum 13264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 13364064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_EVENT_PREPARE_FOR_ROAMING= 0,/**< Sent by Roam MNGR when roaming event occurs */ 13464064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_EVENT_FINISHED_OK, /**< Indicates successful completion of request sent to Conn SM */ 13564064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_EVENT_FINISHED_NOT_OK, /**< Indicates unsuccessful completion of request sent to Conn SM */ 13664064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_EVENT_RETAIN_CURRENT_AP, /**< Sent by Roam MNGR when it wishes to give-up roaming */ 13764064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_EVENT_START, /**< Sent by SME when first time link to AP is established */ 13864064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_EVENT_START_ROAM, /**< Sent by Roam MNGR when it wishes to roam to new AP */ 13964064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_EVENT_START_SWITCH_CHANNEL, /**< Sent by Switch channel module when starting switch channel process (tx enabled) */ 14064064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_EVENT_FINISHED_SWITCH_CH, /**< Sent by Switch channel module when finishing switch channel process (tx enabled) */ 14164064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_EVENT_FINISHED_HAND_OVER, /**< Sent by EXC module when finishing hand-over */ 14264064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_EVENT_STOP, /**< Disconnect current link, send stop indication to other modules */ 14364064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_EVENT_LAST 14464064216a8433360745f69edddce19a606659163The Android Open Source Project} apConn_smEvents; 14564064216a8433360745f69edddce19a606659163The Android Open Source Project 14664064216a8433360745f69edddce19a606659163The Android Open Source Project#define AP_CONNECT_NUM_STATES AP_CONNECT_STATE_LAST 14764064216a8433360745f69edddce19a606659163The Android Open Source Project#define AP_CONNECT_NUM_EVENTS AP_CONNECT_EVENT_LAST 14864064216a8433360745f69edddce19a606659163The Android Open Source Project 14964064216a8433360745f69edddce19a606659163The Android Open Source Project 15064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef REPORT_LOG 15164064216a8433360745f69edddce19a606659163The Android Open Source Project 15264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Global variables */ 15364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic char *apConn_stateDesc[AP_CONNECT_NUM_STATES] = { 15464064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_STATE_IDLE", 15564064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_STATE_WAIT_ROAM", 15664064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_STATE_SWITCHING_CHANNEL", 15764064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_STATE_WAIT_CONNECT_CMD", 15864064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_STATE_PREPARE_HAND_OFF", 15964064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_STATE_CONNECTING", 16064064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_STATE_DISCONNECTING", 16164064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_STATE_REESTABLISH_VOICE" 16264064216a8433360745f69edddce19a606659163The Android Open Source Project }; 16364064216a8433360745f69edddce19a606659163The Android Open Source Project 16464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic char *apConn_eventDesc[AP_CONNECT_NUM_EVENTS] = { 16564064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_EVENT_PREPARE_FOR_ROAMING", 16664064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_EVENT_FINISHED_OK", 16764064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_EVENT_FINISHED_NOT_OK", 16864064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_EVENT_RETAIN_CURRENT_AP", 16964064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_EVENT_START", 17064064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_EVENT_START_ROAM", 17164064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_EVENT_START_SWITCH_CHANNEL", 17264064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_EVENT_FINISHED_SWITCH_CHANNEL", 17364064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_EVENT_FINISHED_HAND_OVER", 17464064216a8433360745f69edddce19a606659163The Android Open Source Project "APC_EVENT_STOP" 17564064216a8433360745f69edddce19a606659163The Android Open Source Project }; 17664064216a8433360745f69edddce19a606659163The Android Open Source Project 17764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 17864064216a8433360745f69edddce19a606659163The Android Open Source Project 17964064216a8433360745f69edddce19a606659163The Android Open Source Project 18064064216a8433360745f69edddce19a606659163The Android Open Source Project/* Typedefs */ 18164064216a8433360745f69edddce19a606659163The Android Open Source Project 18264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Structures */ 18364064216a8433360745f69edddce19a606659163The Android Open Source Project 18464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 18564064216a8433360745f69edddce19a606659163The Android Open Source Project* AP Connection control block 18664064216a8433360745f69edddce19a606659163The Android Open Source Project* Following structure defines parameters that can be configured externally, 18764064216a8433360745f69edddce19a606659163The Android Open Source Project* internal variables, AP Connection state machine and handlers of other modules 18864064216a8433360745f69edddce19a606659163The Android Open Source Project* used by AP Connection module 18964064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 19064064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct _apConn_t 19164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 19264064216a8433360745f69edddce19a606659163The Android Open Source Project /* AP Connection state machine */ 19364064216a8433360745f69edddce19a606659163The Android Open Source Project fsm_stateMachine_t *apConnSM; /**< AP Connection module state machine */ 19464064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smStates currentState; /**< AP Connection state machine current state */ 19564064216a8433360745f69edddce19a606659163The Android Open Source Project 19664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Internal parameters */ 19764064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL firstAttempt2Roam; /**< TRUE if still connected to original AP, FALSE otherwise */ 19864064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL roamingEnabled; /**< If FALSE, act like if no roaming callback registered. */ 19964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_roamingTrigger_e roamReason; /**< The most severe and recent reason for roaming */ 20064064216a8433360745f69edddce19a606659163The Android Open Source Project APDisconnect_t APDisconnect; /**< The AP disconnect trigger extra information */ 20164064216a8433360745f69edddce19a606659163The Android Open Source Project bssEntry_t *newAP; /**< Stores parameters of roaming candidate */ 20264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_connRequest_e requestType; /**< Stores type of roaming request */ 20364064216a8433360745f69edddce19a606659163The Android Open Source Project INT8 rssiThreshold; /**< Stores recently configured RSSI threshold */ 20464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 snrThreshold; /**< Stores recently configured SNR threshold */ 20564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 txFailureThreshold; /**< Stores recently configured consec. no ack threshold */ 20664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 lowRateThreshold; /**< Stores recently configured consec. no ack threshold */ 20764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 vsIElength; /**< Length of vendor specific info-element for assoc req (if defined) */ 20864064216a8433360745f69edddce19a606659163The Android Open Source Project char *vsIEbuf; /**< Pointer to vendor specific info-element for assoc req (if defined) */ 20964064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL isRssiTriggerMaskedOut; 21064064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL isSnrTriggerMaskedOut; 21164064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL isConsTxFailureMaskedOut; 21264064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL islowRateTriggerMaskedOut; 21364064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL removeKeys; /**< Indicates whether keys should be removed after disconnect or not */ 21464064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL ignoreDeauthReason0;/**< Indicates whether to ignore DeAuth with reason 0, required for Rogue AP test EXC-V2 */ 21564064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL sendDeauthPacket; /**< Indicates whether to send DEAUTH packet when discommecting or not */ 21664064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL voiceTspecConfigured;/**< Shall be set to TRUE before roaming in case the TSPEC is configured */ 21764064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL videoTspecConfigured;/**< Shall be set to TRUE before roaming in case the TSPEC is configured */ 21864064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL reNegotiateTSPEC; /**< Shall be set to TRUE before hand-over if requested by Roaming Manager */ 21964064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL resetReportedRoamingStatistics; /**< Shall be set to TRUE if starting to measure traffic */ 22064064216a8433360745f69edddce19a606659163The Android Open Source Project UINT16 lastRoamingDelay; 22164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingStartedTimestamp; 22264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 roamingSuccesfulHandoverNum; 22364064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL bNonRoamingDisAssocReason; /**< Indicate whether last disconnection was called from outside (SME) */ 22464064216a8433360745f69edddce19a606659163The Android Open Source Project /** Callback functions, registered by Roaming manager */ 22564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_roamMngrCallb_t roamEventCallb; /**< roam event triggers */ 22664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_roamMngrCallb_t reportStatusCallb; /**< connection status events */ 22764064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_roamMngrCallb_t returnNeighborApsCallb; /**< neighbor APs list update */ 22864064216a8433360745f69edddce19a606659163The Android Open Source Project 22964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Handlers of other modules used by AP Connection */ 23064064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hOs; 23164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hReport; 23264064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hCurrBSS; 23364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hRoamMng; 23464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hSme; 23564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hSiteMgr; 23664064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hExcMngr; 23764064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hConnSm; 23864064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hPrivacy; 23964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hQos; 24064064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hRateAdapt; 24164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hEvHandler; 24264064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hScr; 24364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hAssoc; 24464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hRegulatoryDomain; 24564064216a8433360745f69edddce19a606659163The Android Open Source Project 24664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Counters for statistics */ 24764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingTriggerEvents[MAX_ROAMING_TRIGGERS]; 24864064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingSuccesfulHandoverTotalNum; 24964064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingFailedHandoverNum; 25064064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 retainCurrAPNum; 25164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 disconnectFromRoamMngrNum; 25264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 stopFromSmeNum; 25364064216a8433360745f69edddce19a606659163The Android Open Source Project} apConn_t; 25464064216a8433360745f69edddce19a606659163The Android Open Source Project 25564064216a8433360745f69edddce19a606659163The Android Open Source Project 25664064216a8433360745f69edddce19a606659163The Android Open Source Project/* Internal functions prototypes */ 25764064216a8433360745f69edddce19a606659163The Android Open Source Project 25864064216a8433360745f69edddce19a606659163The Android Open Source Project/* SM functions */ 25964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smEvent(apConn_smStates *currState, UINT8 event, void* data); 26064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smNop(void *pData); 26164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smUnexpected(void *pData); 26264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_startWaitingForTriggers(void *pData); 26364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_connectedToNewAP(void *pData); 26464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_configureDriverBeforeRoaming(void *pData); 26564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_stopConnection(void *pData); 26664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_invokeConnectionToNewAp(void *pData); 26764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_reportDisconnected(void *pData); 26864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_retainAP(void *pData); 26964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_requestCCKM(void *pData); 27064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_reportConnFail(void *pData); 27164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_swChFinished(void *pData); 27264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_handleTspecReneg (void *pData); 27364064216a8433360745f69edddce19a606659163The Android Open Source Project 27464064216a8433360745f69edddce19a606659163The Android Open Source Project/* other functions */ 27564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 27664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void apConn_calcNewTsf(apConn_t *hAPConnection, UINT8 *tsfTimeStamp, UINT32 newSiteOsTimeStamp, UINT32 beaconInterval); 27764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 27864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_qosMngrReportResultCallb (TI_HANDLE hApConn, trafficAdmRequestStatus_e result); 27964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void apConn_reportConnStatusToSME (apConn_t *pAPConnection); 28064064216a8433360745f69edddce19a606659163The Android Open Source Project 28164064216a8433360745f69edddce19a606659163The Android Open Source Project 28264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Public functions implementation */ 28364064216a8433360745f69edddce19a606659163The Android Open Source Project 28464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 28564064216a8433360745f69edddce19a606659163The Android Open Source Project* 28664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_create 28764064216a8433360745f69edddce19a606659163The Android Open Source Project* 28864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 28964064216a8433360745f69edddce19a606659163The Android Open Source Project* 29064064216a8433360745f69edddce19a606659163The Android Open Source Project* Create the AP Connection context: 29164064216a8433360745f69edddce19a606659163The Android Open Source Project* allocate memory for internal variables; 29264064216a8433360745f69edddce19a606659163The Android Open Source Project* create state machine. 29364064216a8433360745f69edddce19a606659163The Android Open Source Project* 29464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 29564064216a8433360745f69edddce19a606659163The Android Open Source Project* 29664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hOs - OS handler 29764064216a8433360745f69edddce19a606659163The Android Open Source Project* 29864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 29964064216a8433360745f69edddce19a606659163The Android Open Source Project* 30064064216a8433360745f69edddce19a606659163The Android Open Source Project* Pointer to the AP Connection on success, NULL on failure 30164064216a8433360745f69edddce19a606659163The Android Open Source Project* (unable to allocate memory or other error). 30264064216a8433360745f69edddce19a606659163The Android Open Source Project* 30364064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 30464064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 30564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE apConn_create(TI_HANDLE hOs) 30664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 30764064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 30864064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 30964064216a8433360745f69edddce19a606659163The Android Open Source Project 31064064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pAPConnection = os_memoryAlloc(hOs, sizeof(apConn_t))) != NULL) 31164064216a8433360745f69edddce19a606659163The Android Open Source Project { 31264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hOs = hOs; 31364064216a8433360745f69edddce19a606659163The Android Open Source Project 31464064216a8433360745f69edddce19a606659163The Android Open Source Project status = fsm_Create(hOs, &(pAPConnection->apConnSM), AP_CONNECT_NUM_STATES, AP_CONNECT_NUM_EVENTS); 31564064216a8433360745f69edddce19a606659163The Android Open Source Project if (status == OK) 31664064216a8433360745f69edddce19a606659163The Android Open Source Project { 31764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Succeeded to create AP Connection module context - return pointer to it */ 31864064216a8433360745f69edddce19a606659163The Android Open Source Project return pAPConnection; 31964064216a8433360745f69edddce19a606659163The Android Open Source Project } 32064064216a8433360745f69edddce19a606659163The Android Open Source Project else /* Failed to create state machine */ 32164064216a8433360745f69edddce19a606659163The Android Open Source Project { 32264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("FATAL ERROR: apConn_create(): Error creating apConnSM - aborting\n")); 32364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Free pre-allocated control block */ 32464064216a8433360745f69edddce19a606659163The Android Open Source Project utils_nullMemoryFree(hOs, pAPConnection, sizeof(apConn_t)); 32564064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 32664064216a8433360745f69edddce19a606659163The Android Open Source Project } 32764064216a8433360745f69edddce19a606659163The Android Open Source Project } 32864064216a8433360745f69edddce19a606659163The Android Open Source Project else /* Failed to allocate control block */ 32964064216a8433360745f69edddce19a606659163The Android Open Source Project { 33064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("FATAL ERROR: apConn_create(): Error allocating cb - aborting\n")); 33164064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 33264064216a8433360745f69edddce19a606659163The Android Open Source Project } 33364064216a8433360745f69edddce19a606659163The Android Open Source Project} 33464064216a8433360745f69edddce19a606659163The Android Open Source Project 33564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 33664064216a8433360745f69edddce19a606659163The Android Open Source Project* 33764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_unload 33864064216a8433360745f69edddce19a606659163The Android Open Source Project* 33964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 34064064216a8433360745f69edddce19a606659163The Android Open Source Project* 34164064216a8433360745f69edddce19a606659163The Android Open Source Project* Finish AP Connection module work: 34264064216a8433360745f69edddce19a606659163The Android Open Source Project* release the allocation for state machine and internal variables. 34364064216a8433360745f69edddce19a606659163The Android Open Source Project* 34464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 34564064216a8433360745f69edddce19a606659163The Android Open Source Project* 34664064216a8433360745f69edddce19a606659163The Android Open Source Project* 34764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 34864064216a8433360745f69edddce19a606659163The Android Open Source Project* 34964064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 35064064216a8433360745f69edddce19a606659163The Android Open Source Project* 35164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 35264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 35364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_unload(TI_HANDLE hAPConnection) 35464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 35564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 35664064216a8433360745f69edddce19a606659163The Android Open Source Project 35764064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 35864064216a8433360745f69edddce19a606659163The Android Open Source Project 35964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)hAPConnection; 36064064216a8433360745f69edddce19a606659163The Android Open Source Project 36164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Unload state machine */ 36264064216a8433360745f69edddce19a606659163The Android Open Source Project fsm_Unload(pAPConnection->hOs, pAPConnection->apConnSM); 36364064216a8433360745f69edddce19a606659163The Android Open Source Project 36464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Free pre-allocated control block */ 36564064216a8433360745f69edddce19a606659163The Android Open Source Project utils_nullMemoryFree(pAPConnection->hOs, pAPConnection, sizeof(apConn_t)); 36664064216a8433360745f69edddce19a606659163The Android Open Source Project 36764064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 36864064216a8433360745f69edddce19a606659163The Android Open Source Project} 36964064216a8433360745f69edddce19a606659163The Android Open Source Project 37064064216a8433360745f69edddce19a606659163The Android Open Source Project/** 37164064216a8433360745f69edddce19a606659163The Android Open Source Project* 37264064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_config 37364064216a8433360745f69edddce19a606659163The Android Open Source Project* 37464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 37564064216a8433360745f69edddce19a606659163The Android Open Source Project* 37664064216a8433360745f69edddce19a606659163The Android Open Source Project* Prepare AP Connection module to work: initiate internal variables, start state machine 37764064216a8433360745f69edddce19a606659163The Android Open Source Project* 37864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 37964064216a8433360745f69edddce19a606659163The Android Open Source Project* 38064064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hCurrAP - Current BSS handle \n 38164064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamMng - Roaming Manager handle \n 38264064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hSme - SME context \n 38364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hPowerMgr - Power Manager context \n 38464064216a8433360745f69edddce19a606659163The Android Open Source Project* 38564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 38664064216a8433360745f69edddce19a606659163The Android Open Source Project* 38764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK on failure. 38864064216a8433360745f69edddce19a606659163The Android Open Source Project* 38964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 39064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 39164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_config(TI_HANDLE hAPConnection, 39264064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hReport, 39364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hCurrAP, 39464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hRoamMng, 39564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hSme, 39664064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hSiteMgr, 39764064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hExcMngr, 39864064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hConnSm, 39964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hPrivacy, 40064064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hQos, 40164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hCtrl, 40264064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hEvHandler, 40364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hScr, 40464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hAssoc, 40564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hRegulatoryDomain, 40664064216a8433360745f69edddce19a606659163The Android Open Source Project apConnParams_t *pApConnParams) 40764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 40864064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 40964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 41064064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 index; 41164064216a8433360745f69edddce19a606659163The Android Open Source Project 41264064216a8433360745f69edddce19a606659163The Android Open Source Project /** State Machine matrix */ 41364064216a8433360745f69edddce19a606659163The Android Open Source Project fsm_actionCell_t apConn_matrix[AP_CONNECT_NUM_STATES][AP_CONNECT_NUM_EVENTS] = 41464064216a8433360745f69edddce19a606659163The Android Open Source Project { 41564064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for IDLE state */ 41664064216a8433360745f69edddce19a606659163The Android Open Source Project { {AP_CONNECT_STATE_IDLE, apConn_smUnexpected}, /* PREPARE_FOR_ROAMING */ 41764064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_IDLE, apConn_smUnexpected}, /* FINISHED_OK */ 41864064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_IDLE, apConn_smUnexpected}, /* FINISHED_NOT_OK */ 41964064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_IDLE, apConn_smUnexpected}, /* RETAIN_CURRENT_AP */ 42064064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_ROAM,apConn_startWaitingForTriggers},/* START */ 42164064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_IDLE, apConn_smUnexpected}, /* START_ROAM */ 42264064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_IDLE, apConn_smUnexpected}, /* START_SWITCH_CHANNEL */ 42364064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_IDLE, apConn_smNop}, /* FINISHED_SWITCH_CH */ 42464064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_IDLE, apConn_smNop}, /* FINISHED_HAND_OVER */ 42564064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_IDLE, apConn_smUnexpected} /* STOP */ 42664064216a8433360745f69edddce19a606659163The Android Open Source Project }, 42764064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for WAIT_ROAM state */ 42864064216a8433360745f69edddce19a606659163The Android Open Source Project { {AP_CONNECT_STATE_WAIT_CONNECT_CMD,apConn_configureDriverBeforeRoaming},/* PREPARE_FOR_ROAMING */ 42964064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected}, /* FINISHED_OK */ 43064064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected}, /* FINISHED_NOT_OK */ 43164064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected}, /* RETAIN_CURRENT_AP */ 43264064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected}, /* START */ 43364064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected}, /* START_ROAM */ 43464064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smNop}, /* START_SWITCH_CHANNEL */ 43564064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected}, /* FINISHED_SWITCH_CH */ 43664064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected}, /* FINISHED_HAND_OVER */ 43764064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection} /* STOP */ 43864064216a8433360745f69edddce19a606659163The Android Open Source Project }, 43964064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for SWITCHING_CHANNEL state */ 44064064216a8433360745f69edddce19a606659163The Android Open Source Project { {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected}, /* PREPARE_FOR_ROAMING */ 44164064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected}, /* FINISHED_OK */ 44264064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected}, /* FINISHED_NOT_OK */ 44364064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected}, /* RETAIN_CURRENT_AP */ 44464064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected}, /* START */ 44564064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected}, /* START_ROAM */ 44664064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_swChFinished}, /* START_SWITCH_CHANNEL */ 44764064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_ROAM, apConn_smNop}, /* FINISHED_SWITCH_CH */ 44864064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected}, /* FINISHED_HAND_OVER */ 44964064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection} /* STOP */ 45064064216a8433360745f69edddce19a606659163The Android Open Source Project }, 45164064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for WAIT_CONNECT_CMD state */ 45264064216a8433360745f69edddce19a606659163The Android Open Source Project { {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected}, /* PREPARE_FOR_ROAMING */ 45364064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected}, /* FINISHED_OK */ 45464064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected}, /* FINISHED_NOT_OK */ 45564064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_ROAM, apConn_retainAP}, /* RETAIN_CURRENT_AP */ 45664064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected}, /* START */ 45764064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_requestCCKM}, /* START_ROAM */ 45864064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected}, /* START_SWITCH_CHANNEL */ 45964064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected}, /* FINISHED_SWITCH_CH */ 46064064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected}, /* FINISHED_HAND_OVER */ 46164064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection} /* STOP */ 46264064216a8433360745f69edddce19a606659163The Android Open Source Project }, 46364064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for PREPARE_HAND_OFF state */ 46464064216a8433360745f69edddce19a606659163The Android Open Source Project { {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected}, /* PREPARE_FOR_ROAMING */ 46564064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected}, /* FINISHED_OK */ 46664064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected}, /* FINISHED_NOT_OK */ 46764064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected}, /* RETAIN_CURRENT_AP */ 46864064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected}, /* START */ 46964064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected}, /* START_ROAM */ 47064064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected}, /* START_SWITCH_CHANNEL */ 47164064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected}, /* FINISHED_SWITCH_CH */ 47264064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_CONNECTING, apConn_invokeConnectionToNewAp},/* FINISHED_HAND_OVER */ 47364064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection} /* STOP */ 47464064216a8433360745f69edddce19a606659163The Android Open Source Project }, 47564064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for CONNECTING state */ 47664064216a8433360745f69edddce19a606659163The Android Open Source Project { {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected}, /* PREPARE_FOR_ROAMING */ 47764064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_REESTABLISH_VOICE,apConn_handleTspecReneg},/* FINISHED_OK */ 47864064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_reportConnFail}, /* FINISHED_NOT_OK */ 47964064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected}, /* RETAIN_CURRENT_AP */ 48064064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected}, /* START */ 48164064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected}, /* START_ROAM */ 48264064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected}, /* START_SWITCH_CHANNEL */ 48364064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected}, /* FINISHED_SWITCH_CH */ 48464064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected}, /* FINISHED_HAND_OVER */ 48564064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection} /* STOP */ 48664064216a8433360745f69edddce19a606659163The Android Open Source Project }, 48764064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for DISCONNECTING state */ 48864064216a8433360745f69edddce19a606659163The Android Open Source Project { {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop}, /* PREPARE_FOR_ROAMING */ 48964064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_IDLE, apConn_reportDisconnected}, /* FINISHED_OK */ 49064064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_IDLE, apConn_reportDisconnected}, /* FINISHED_NOT_OK */ 49164064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop}, /* RETAIN_CURRENT_AP */ 49264064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_smUnexpected}, /* START */ 49364064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop}, /* START_ROAM */ 49464064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop}, /* START_SWITCH_CHANNEL */ 49564064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop}, /* FINISHED_SWITCH_CH */ 49664064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop}, /* FINISHED_HAND_OVER */ 49764064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop}, /* STOP */ 49864064216a8433360745f69edddce19a606659163The Android Open Source Project }, 49964064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for REESTABLISH_VOICE state */ 50064064216a8433360745f69edddce19a606659163The Android Open Source Project { {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected}, /* PREPARE_FOR_ROAMING */ 50164064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_ROAM,apConn_connectedToNewAP}, /* FINISHED_OK */ 50264064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_reportConnFail}, /* FINISHED_NOT_OK */ 50364064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected}, /* RETAIN_CURRENT_AP */ 50464064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected}, /* START */ 50564064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected}, /* START_ROAM */ 50664064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected}, /* START_SWITCH_CHANNEL */ 50764064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected}, /* FINISHED_SWITCH_CH */ 50864064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected}, /* FINISHED_HAND_OVER */ 50964064216a8433360745f69edddce19a606659163The Android Open Source Project {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection} /* STOP */ 51064064216a8433360745f69edddce19a606659163The Android Open Source Project } 51164064216a8433360745f69edddce19a606659163The Android Open Source Project }; 51264064216a8433360745f69edddce19a606659163The Android Open Source Project 51364064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 51464064216a8433360745f69edddce19a606659163The Android Open Source Project 51564064216a8433360745f69edddce19a606659163The Android Open Source Project status = fsm_Config(pAPConnection->apConnSM, 51664064216a8433360745f69edddce19a606659163The Android Open Source Project (fsm_Matrix_t)&apConn_matrix[0][0], 51764064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_NUM_STATES, 51864064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONNECT_NUM_EVENTS, 51964064216a8433360745f69edddce19a606659163The Android Open Source Project (fsm_eventActivation_t)apConn_smEvent, 52064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hOs); 52164064216a8433360745f69edddce19a606659163The Android Open Source Project 52264064216a8433360745f69edddce19a606659163The Android Open Source Project 52364064216a8433360745f69edddce19a606659163The Android Open Source Project if (status == OK) 52464064216a8433360745f69edddce19a606659163The Android Open Source Project { 52564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->currentState = AP_CONNECT_STATE_IDLE; 52664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->firstAttempt2Roam = TRUE; 52764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hReport = hReport; 52864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hCurrBSS = hCurrAP; 52964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hRoamMng = hRoamMng; 53064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hSme = hSme; 53164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hSiteMgr = hSiteMgr; 53264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hExcMngr = hExcMngr; 53364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hConnSm = hConnSm; 53464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hPrivacy = hPrivacy; 53564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hQos = hQos; 53664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hRateAdapt = ((ctrlData_t *)hCtrl)->pRateAdaptation; 53764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hEvHandler = hEvHandler; 53864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hScr = hScr; 53964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hAssoc = hAssoc; 54064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->hRegulatoryDomain = hRegulatoryDomain; 54164064216a8433360745f69edddce19a606659163The Android Open Source Project 54264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingEnabled = TRUE; 54364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reportStatusCallb = NULL; 54464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamEventCallb = NULL; 54564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->returnNeighborApsCallb = NULL; 54664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->ignoreDeauthReason0 = pApConnParams->ignoreDeauthReason0; 54764064216a8433360745f69edddce19a606659163The Android Open Source Project 54864064216a8433360745f69edddce19a606659163The Android Open Source Project for (index=ROAMING_TRIGGER_NONE; index<ROAMING_TRIGGER_LAST; index++) 54964064216a8433360745f69edddce19a606659163The Android Open Source Project { 55064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingTriggerEvents[index] = 0; 55164064216a8433360745f69edddce19a606659163The Android Open Source Project } 55264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingSuccesfulHandoverNum = 0; 55364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingSuccesfulHandoverTotalNum = 0; 55464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingFailedHandoverNum = 0; 55564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->retainCurrAPNum = 0; 55664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->disconnectFromRoamMngrNum = 0; 55764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->stopFromSmeNum = 0; 55864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->txFailureThreshold = NO_ACK_DEFAULT_THRESHOLD; 55964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->lowRateThreshold = LOW_RATE_DEFAULT_THRESHOLD; 56064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->rssiThreshold = RSSI_DEFAULT_THRESHOLD; 56164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->snrThreshold = SNR_DEFAULT_THRESHOLD; 56264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->vsIElength = 0; 56364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->isRssiTriggerMaskedOut = FALSE; 56464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->isSnrTriggerMaskedOut = TRUE; 56564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->islowRateTriggerMaskedOut = FALSE; 56664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->isConsTxFailureMaskedOut = FALSE; 56764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->removeKeys = TRUE; 56864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->sendDeauthPacket = TRUE; /* Default behavior is radio On - send DISASSOC frame */ 56964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->voiceTspecConfigured = FALSE; 57064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->videoTspecConfigured = FALSE; 57164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->resetReportedRoamingStatistics = FALSE; 57264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reNegotiateTSPEC = FALSE; 57364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->bNonRoamingDisAssocReason = FALSE; 57464064216a8433360745f69edddce19a606659163The Android Open Source Project 57564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingStartedTimestamp = 0; 57664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->lastRoamingDelay = 0; 57764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingSuccesfulHandoverNum = 0; 57864064216a8433360745f69edddce19a606659163The Android Open Source Project 57964064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 58064064216a8433360745f69edddce19a606659163The Android Open Source Project } 58164064216a8433360745f69edddce19a606659163The Android Open Source Project else/* Unable to configure State Machine */ 58264064216a8433360745f69edddce19a606659163The Android Open Source Project { 58364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("FATAL ERROR: apConn_config(): Failed to configure sm\n")); 58464064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 58564064216a8433360745f69edddce19a606659163The Android Open Source Project } 58664064216a8433360745f69edddce19a606659163The Android Open Source Project} 58764064216a8433360745f69edddce19a606659163The Android Open Source Project 58864064216a8433360745f69edddce19a606659163The Android Open Source Project 58964064216a8433360745f69edddce19a606659163The Android Open Source Project/** 59064064216a8433360745f69edddce19a606659163The Android Open Source Project* 59164064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_isPsRequiredBeforeScan 59264064216a8433360745f69edddce19a606659163The Android Open Source Project* 59364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 59464064216a8433360745f69edddce19a606659163The Android Open Source Project* 59564064216a8433360745f69edddce19a606659163The Android Open Source Project* verify if the PS required before scan according if roaming triger is part of ROAMING_TRIGGER_LOW_QUALITY_GROUP 59664064216a8433360745f69edddce19a606659163The Android Open Source Project* 59764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 59864064216a8433360745f69edddce19a606659163The Android Open Source Project* 59964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hAPConnection - pointer to module\n 60064064216a8433360745f69edddce19a606659163The Android Open Source Project* 60164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 60264064216a8433360745f69edddce19a606659163The Android Open Source Project* 60364064216a8433360745f69edddce19a606659163The Android Open Source Project* TRUE or FALSE. 60464064216a8433360745f69edddce19a606659163The Android Open Source Project* 60564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 60664064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 60764064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOLEAN apConn_isPsRequiredBeforeScan(TI_HANDLE hAPConnection) 60864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 60964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t * pAPConnection = (apConn_t *) hAPConnection; 61064064216a8433360745f69edddce19a606659163The Android Open Source Project 61164064216a8433360745f69edddce19a606659163The Android Open Source Project /* check if part of ROAMING_TRIGGER_LOW_QUALITY_GROUP */ 61264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->roamReason <= ROAMING_TRIGGER_MAX_TX_RETRIES) 61364064216a8433360745f69edddce19a606659163The Android Open Source Project return TRUE; 61464064216a8433360745f69edddce19a606659163The Android Open Source Project else 61564064216a8433360745f69edddce19a606659163The Android Open Source Project return FALSE; 61664064216a8433360745f69edddce19a606659163The Android Open Source Project} 61764064216a8433360745f69edddce19a606659163The Android Open Source Project 61864064216a8433360745f69edddce19a606659163The Android Open Source Project/** 61964064216a8433360745f69edddce19a606659163The Android Open Source Project* 62064064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_ConnCompleteInd 62164064216a8433360745f69edddce19a606659163The Android Open Source Project* 62264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 62364064216a8433360745f69edddce19a606659163The Android Open Source Project* 62464064216a8433360745f69edddce19a606659163The Android Open Source Project* Inform AP Connection about successful / unsuccessful completion 62564064216a8433360745f69edddce19a606659163The Android Open Source Project* of link establishing 62664064216a8433360745f69edddce19a606659163The Android Open Source Project* 62764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 62864064216a8433360745f69edddce19a606659163The Android Open Source Project* 62964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - result - OK if successfully connected, NOK otherwise \n 63064064216a8433360745f69edddce19a606659163The Android Open Source Project* 63164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 63264064216a8433360745f69edddce19a606659163The Android Open Source Project* 63364064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 63464064216a8433360745f69edddce19a606659163The Android Open Source Project* 63564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 63664064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 63764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_ConnCompleteInd(TI_HANDLE hAPConnection, mgmtStatus_e status, UINT32 uStatusCode) 63864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 63964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 64064064216a8433360745f69edddce19a606659163The Android Open Source Project 64164064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 64264064216a8433360745f69edddce19a606659163The Android Open Source Project 64364064216a8433360745f69edddce19a606659163The Android Open Source Project if (status == STATUS_SUCCESSFUL) 64464064216a8433360745f69edddce19a606659163The Android Open Source Project { 64564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_OK, pAPConnection); 64664064216a8433360745f69edddce19a606659163The Android Open Source Project } 64764064216a8433360745f69edddce19a606659163The Android Open Source Project else 64864064216a8433360745f69edddce19a606659163The Android Open Source Project { 64964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_NOT_OK, pAPConnection); 65064064216a8433360745f69edddce19a606659163The Android Open Source Project } 65164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 65264064216a8433360745f69edddce19a606659163The Android Open Source Project} 65364064216a8433360745f69edddce19a606659163The Android Open Source Project 65464064216a8433360745f69edddce19a606659163The Android Open Source Project 65564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 65664064216a8433360745f69edddce19a606659163The Android Open Source Project* 65764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_getRoamThresholds 65864064216a8433360745f69edddce19a606659163The Android Open Source Project* 65964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 66064064216a8433360745f69edddce19a606659163The Android Open Source Project* 66164064216a8433360745f69edddce19a606659163The Android Open Source Project* Used to query for the current roaming thresholds configuration 66264064216a8433360745f69edddce19a606659163The Android Open Source Project* 66364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 66464064216a8433360745f69edddce19a606659163The Android Open Source Project* 66564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hAPConnection - pointer to module\n 66664064216a8433360745f69edddce19a606659163The Android Open Source Project* O - pParam - pointer to buffer to store the thresholds\n 66764064216a8433360745f69edddce19a606659163The Android Open Source Project* 66864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 66964064216a8433360745f69edddce19a606659163The Android Open Source Project* 67064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 67164064216a8433360745f69edddce19a606659163The Android Open Source Project* 67264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 67364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 67464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_getRoamThresholds(TI_HANDLE hAPConnection, roamingMngrThresholdsConfig_t *pParam) 67564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 67664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t * pAPConnection = (apConn_t *) hAPConnection; 67764064216a8433360745f69edddce19a606659163The Android Open Source Project 67864064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->lowRssiThreshold = pAPConnection->rssiThreshold; 67964064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->lowSnrThreshold = pAPConnection->snrThreshold; 68064064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->txRateThreshold = pAPConnection->lowRateThreshold; 68164064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->dataRetryThreshold = pAPConnection->txFailureThreshold; 68264064216a8433360745f69edddce19a606659163The Android Open Source Project 68364064216a8433360745f69edddce19a606659163The Android Open Source Project currBSS_getRoamingParams(pAPConnection->hCurrBSS, 68464064216a8433360745f69edddce19a606659163The Android Open Source Project &pParam->numExpectedTbttForBSSLoss, 68564064216a8433360745f69edddce19a606659163The Android Open Source Project &pParam->lowQualityForBackgroungScanCondition, 68664064216a8433360745f69edddce19a606659163The Android Open Source Project &pParam->normalQualityForBackgroungScanCondition, 68764064216a8433360745f69edddce19a606659163The Android Open Source Project &pParam->rssiFilterWeight, 68864064216a8433360745f69edddce19a606659163The Android Open Source Project &pParam->snrFilterWeight); 68964064216a8433360745f69edddce19a606659163The Android Open Source Project 69064064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 69164064216a8433360745f69edddce19a606659163The Android Open Source Project} 69264064216a8433360745f69edddce19a606659163The Android Open Source Project 69364064216a8433360745f69edddce19a606659163The Android Open Source Project 69464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 69564064216a8433360745f69edddce19a606659163The Android Open Source Project* 69664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_setRoamThresholds 69764064216a8433360745f69edddce19a606659163The Android Open Source Project* 69864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 69964064216a8433360745f69edddce19a606659163The Android Open Source Project* 70064064216a8433360745f69edddce19a606659163The Android Open Source Project* Used to configure roaming thresholds 70164064216a8433360745f69edddce19a606659163The Android Open Source Project* 70264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 70364064216a8433360745f69edddce19a606659163The Android Open Source Project* 70464064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pParam - pointer to type and details of configuration request\n 70564064216a8433360745f69edddce19a606659163The Android Open Source Project* 70664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 70764064216a8433360745f69edddce19a606659163The Android Open Source Project* 70864064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 70964064216a8433360745f69edddce19a606659163The Android Open Source Project* 71064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 71164064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 71264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_setRoamThresholds(TI_HANDLE hAPConnection, roamingMngrThresholdsConfig_t *pParam) 71364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 71464064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 71564064216a8433360745f69edddce19a606659163The Android Open Source Project 71664064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 71764064216a8433360745f69edddce19a606659163The Android Open Source Project 71864064216a8433360745f69edddce19a606659163The Android Open Source Project /* If low quality trigger threshold is set to 0 - this is the request to ignore this trigger */ 71964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Otherwise store it */ 72064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pParam->lowRssiThreshold == (INT8)AP_CONNECT_TRIGGER_IGNORED) 72164064216a8433360745f69edddce19a606659163The Android Open Source Project { 72264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->isRssiTriggerMaskedOut = TRUE; 72364064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->lowRssiThreshold = pAPConnection->rssiThreshold; 72464064216a8433360745f69edddce19a606659163The Android Open Source Project } 72564064216a8433360745f69edddce19a606659163The Android Open Source Project else 72664064216a8433360745f69edddce19a606659163The Android Open Source Project { 72764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->isRssiTriggerMaskedOut = FALSE; 72864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->rssiThreshold = pParam->lowRssiThreshold; 72964064216a8433360745f69edddce19a606659163The Android Open Source Project } 73064064216a8433360745f69edddce19a606659163The Android Open Source Project 73164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pParam->txRateThreshold == AP_CONNECT_TRIGGER_IGNORED) 73264064216a8433360745f69edddce19a606659163The Android Open Source Project { 73364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->islowRateTriggerMaskedOut = TRUE; 73464064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->txRateThreshold = pAPConnection->lowRateThreshold; 73564064216a8433360745f69edddce19a606659163The Android Open Source Project } 73664064216a8433360745f69edddce19a606659163The Android Open Source Project else 73764064216a8433360745f69edddce19a606659163The Android Open Source Project { 73864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->islowRateTriggerMaskedOut = FALSE; 73964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->lowRateThreshold = pParam->txRateThreshold; 74064064216a8433360745f69edddce19a606659163The Android Open Source Project } 74164064216a8433360745f69edddce19a606659163The Android Open Source Project 74264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pParam->dataRetryThreshold == AP_CONNECT_TRIGGER_IGNORED) 74364064216a8433360745f69edddce19a606659163The Android Open Source Project { 74464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->isConsTxFailureMaskedOut = TRUE; 74564064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->dataRetryThreshold = pAPConnection->txFailureThreshold; 74664064216a8433360745f69edddce19a606659163The Android Open Source Project } 74764064216a8433360745f69edddce19a606659163The Android Open Source Project else 74864064216a8433360745f69edddce19a606659163The Android Open Source Project { 74964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->isConsTxFailureMaskedOut = FALSE; 75064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->txFailureThreshold = pParam->dataRetryThreshold; 75164064216a8433360745f69edddce19a606659163The Android Open Source Project } 75264064216a8433360745f69edddce19a606659163The Android Open Source Project 75364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pParam->rssiFilterWeight == (UINT8)AP_CONNECT_TRIGGER_IGNORED) 75464064216a8433360745f69edddce19a606659163The Android Open Source Project { 75564064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->rssiFilterWeight = RSSI_DEFAULT_WEIGHT; 75664064216a8433360745f69edddce19a606659163The Android Open Source Project } 75764064216a8433360745f69edddce19a606659163The Android Open Source Project 75864064216a8433360745f69edddce19a606659163The Android Open Source Project if (pParam->snrFilterWeight == (UINT8)AP_CONNECT_TRIGGER_IGNORED) 75964064216a8433360745f69edddce19a606659163The Android Open Source Project { 76064064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->snrFilterWeight = SNR_DEFAULT_WEIGHT; 76164064216a8433360745f69edddce19a606659163The Android Open Source Project } 76264064216a8433360745f69edddce19a606659163The Android Open Source Project 76364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->isSnrTriggerMaskedOut = FALSE; 76464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->snrThreshold = pParam->lowSnrThreshold; 76564064216a8433360745f69edddce19a606659163The Android Open Source Project 76664064216a8433360745f69edddce19a606659163The Android Open Source Project currBSS_updateRoamingTriggers(pAPConnection->hCurrBSS, pParam); 76764064216a8433360745f69edddce19a606659163The Android Open Source Project 76864064216a8433360745f69edddce19a606659163The Android Open Source Project rateAdaptation_configLowRateThrsh(pAPConnection->hRateAdapt,pParam->txRateThreshold); 76964064216a8433360745f69edddce19a606659163The Android Open Source Project 77064064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 77164064216a8433360745f69edddce19a606659163The Android Open Source Project} 77264064216a8433360745f69edddce19a606659163The Android Open Source Project 77364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 77464064216a8433360745f69edddce19a606659163The Android Open Source Project* 77564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_registerRoamMngrCallb 77664064216a8433360745f69edddce19a606659163The Android Open Source Project* 77764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 77864064216a8433360745f69edddce19a606659163The Android Open Source Project* 77964064216a8433360745f69edddce19a606659163The Android Open Source Project* Used to store method of Roaming Manager in the internal database of AP Connection Module. 78064064216a8433360745f69edddce19a606659163The Android Open Source Project* If this function was never called, any roaming event would cause disconnect. 78164064216a8433360745f69edddce19a606659163The Android Open Source Project* 78264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 78364064216a8433360745f69edddce19a606659163The Android Open Source Project* 78464064216a8433360745f69edddce19a606659163The Android Open Source Project* I - callbackType - type of callback \n 78564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - callbackFunction - pointer to callback \n 78664064216a8433360745f69edddce19a606659163The Android Open Source Project* 78764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 78864064216a8433360745f69edddce19a606659163The Android Open Source Project* 78964064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 79064064216a8433360745f69edddce19a606659163The Android Open Source Project* 79164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 79264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 79364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_registerRoamMngrCallb(TI_HANDLE hAPConnection, 79464064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_roamMngrCallb_t roamEventCallb, 79564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_roamMngrCallb_t reportStatusCallb, 79664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_roamMngrCallb_t returnNeighborApsCallb) 79764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 79864064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 79964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_connStatus_t reportStatus; 80064064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 80164064216a8433360745f69edddce19a606659163The Android Open Source Project 80264064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 80364064216a8433360745f69edddce19a606659163The Android Open Source Project 80464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)hAPConnection; 80564064216a8433360745f69edddce19a606659163The Android Open Source Project 80664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamEventCallb = roamEventCallb; 80764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reportStatusCallb = reportStatusCallb; 80864064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pAPConnection->roamingEnabled) && (pAPConnection->currentState != AP_CONNECT_STATE_IDLE)) 80964064216a8433360745f69edddce19a606659163The Android Open Source Project { 81064064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = ASSOC_ASSOCIATION_RESP_PARAM; 81164064216a8433360745f69edddce19a606659163The Android Open Source Project 81264064216a8433360745f69edddce19a606659163The Android Open Source Project assoc_getParam(pAPConnection->hAssoc, ¶m); 81364064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.dataBuf = (char *)(param.content.applicationConfigBuffer.buffer); 81464064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.dataBufLength = param.content.applicationConfigBuffer.bufferSize; 81564064216a8433360745f69edddce19a606659163The Android Open Source Project 81664064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.status = CONN_STATUS_CONNECTED; 81764064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatusCallb(pAPConnection->hRoamMng, &reportStatus); 81864064216a8433360745f69edddce19a606659163The Android Open Source Project } 81964064216a8433360745f69edddce19a606659163The Android Open Source Project ((apConn_t *)hAPConnection)->returnNeighborApsCallb = returnNeighborApsCallb; 82064064216a8433360745f69edddce19a606659163The Android Open Source Project 82164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 82264064216a8433360745f69edddce19a606659163The Android Open Source Project} 82364064216a8433360745f69edddce19a606659163The Android Open Source Project 82464064216a8433360745f69edddce19a606659163The Android Open Source Project 82564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 82664064216a8433360745f69edddce19a606659163The Android Open Source Project* 82764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_unregisterRoamMngrCallb 82864064216a8433360745f69edddce19a606659163The Android Open Source Project* 82964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 83064064216a8433360745f69edddce19a606659163The Android Open Source Project* 83164064216a8433360745f69edddce19a606659163The Android Open Source Project* Used to Erase methods of Roaming Manager from the internal database of AP Connection 83264064216a8433360745f69edddce19a606659163The Android Open Source Project* module. From the moment this function was called, any roaming event would cause disconnect. 83364064216a8433360745f69edddce19a606659163The Android Open Source Project* 83464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 83564064216a8433360745f69edddce19a606659163The Android Open Source Project* 83664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 83764064216a8433360745f69edddce19a606659163The Android Open Source Project* 83864064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 83964064216a8433360745f69edddce19a606659163The Android Open Source Project* 84064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 84164064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 84264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_unregisterRoamMngrCallb(TI_HANDLE hAPConnection) 84364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 84464064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 84564064216a8433360745f69edddce19a606659163The Android Open Source Project 84664064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 84764064216a8433360745f69edddce19a606659163The Android Open Source Project 84864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)hAPConnection; 84964064216a8433360745f69edddce19a606659163The Android Open Source Project 85064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamEventCallb = NULL; 85164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reportStatusCallb = NULL; 85264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->returnNeighborApsCallb = NULL; 85364064216a8433360745f69edddce19a606659163The Android Open Source Project 85464064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pAPConnection->currentState != AP_CONNECT_STATE_IDLE) && (pAPConnection->currentState != AP_CONNECT_STATE_WAIT_ROAM)) 85564064216a8433360745f69edddce19a606659163The Android Open Source Project { 85664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Roaming Manager is unregistering it's callbacks in the middle of roaming - disconnect */ 85764064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_STOP, pAPConnection); 85864064216a8433360745f69edddce19a606659163The Android Open Source Project } 85964064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 86064064216a8433360745f69edddce19a606659163The Android Open Source Project} 86164064216a8433360745f69edddce19a606659163The Android Open Source Project 86264064216a8433360745f69edddce19a606659163The Android Open Source Project 86364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 86464064216a8433360745f69edddce19a606659163The Android Open Source Project* 86564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_disconnect 86664064216a8433360745f69edddce19a606659163The Android Open Source Project* 86764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 86864064216a8433360745f69edddce19a606659163The Android Open Source Project* 86964064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function when it fails to find candidate for roaming from 87064064216a8433360745f69edddce19a606659163The Android Open Source Project* one hand, and the connection with current AP is not possible from another. 87164064216a8433360745f69edddce19a606659163The Android Open Source Project* 87264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 87364064216a8433360745f69edddce19a606659163The Android Open Source Project* 87464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 87564064216a8433360745f69edddce19a606659163The Android Open Source Project* 87664064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 87764064216a8433360745f69edddce19a606659163The Android Open Source Project* 87864064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 87964064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 88064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_disconnect(TI_HANDLE hAPConnection) 88164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 88264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 88364064216a8433360745f69edddce19a606659163The Android Open Source Project 88464064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 88564064216a8433360745f69edddce19a606659163The Android Open Source Project 88664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)hAPConnection; 88764064216a8433360745f69edddce19a606659163The Android Open Source Project 88864064216a8433360745f69edddce19a606659163The Android Open Source Project UPDATE_SEND_DEAUTH_PACKET_FLAG(pAPConnection->roamReason); 88964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_STOP, pAPConnection); 89064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->disconnectFromRoamMngrNum++; 89164064216a8433360745f69edddce19a606659163The Android Open Source Project 89264064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 89364064216a8433360745f69edddce19a606659163The Android Open Source Project} 89464064216a8433360745f69edddce19a606659163The Android Open Source Project 89564064216a8433360745f69edddce19a606659163The Android Open Source Project 89664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 89764064216a8433360745f69edddce19a606659163The Android Open Source Project* 89864064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_getStaCapabilities 89964064216a8433360745f69edddce19a606659163The Android Open Source Project* 90064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 90164064216a8433360745f69edddce19a606659163The Android Open Source Project* 90264064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function during selection of new candidate for roaming. 90364064216a8433360745f69edddce19a606659163The Android Open Source Project* Returned are local Station capabilities (IEs) of quality and privacy, needed to 90464064216a8433360745f69edddce19a606659163The Android Open Source Project* evaluate AP sites as suitable for roaming. 90564064216a8433360745f69edddce19a606659163The Android Open Source Project* 90664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 90764064216a8433360745f69edddce19a606659163The Android Open Source Project* 90864064216a8433360745f69edddce19a606659163The Android Open Source Project* O - ie_list - station capabilities \n 90964064216a8433360745f69edddce19a606659163The Android Open Source Project* 91064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 91164064216a8433360745f69edddce19a606659163The Android Open Source Project* 91264064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 91364064216a8433360745f69edddce19a606659163The Android Open Source Project* 91464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 91564064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 91664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_getStaCapabilities(TI_HANDLE hAPConnection, 91764064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_staCapabilities_t *ie_list) 91864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 91964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 92064064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_staCapabilities_t *pList; 92164064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 92264064216a8433360745f69edddce19a606659163The Android Open Source Project 92364064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 92464064216a8433360745f69edddce19a606659163The Android Open Source Project 92564064216a8433360745f69edddce19a606659163The Android Open Source Project pList = ie_list; 92664064216a8433360745f69edddce19a606659163The Android Open Source Project 92764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get authentication suite type */ 92864064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = RSN_EXT_AUTHENTICATION_MODE; 92964064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_getParam(pAPConnection->hPrivacy, ¶m); 93064064216a8433360745f69edddce19a606659163The Android Open Source Project 93164064216a8433360745f69edddce19a606659163The Android Open Source Project switch (param.content.rsnExtAuthneticationMode) 93264064216a8433360745f69edddce19a606659163The Android Open Source Project { 93364064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXT_AUTH_MODE_OPEN: 93464064216a8433360745f69edddce19a606659163The Android Open Source Project pList->authMode = os802_11AuthModeOpen; 93564064216a8433360745f69edddce19a606659163The Android Open Source Project break; 93664064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXT_AUTH_MODE_SHARED_KEY: 93764064216a8433360745f69edddce19a606659163The Android Open Source Project pList->authMode = os802_11AuthModeShared; 93864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 93964064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXT_AUTH_MODE_AUTO_SWITCH: 94064064216a8433360745f69edddce19a606659163The Android Open Source Project pList->authMode = os802_11AuthModeAutoSwitch; 94164064216a8433360745f69edddce19a606659163The Android Open Source Project break; 94264064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXT_AUTH_MODE_WPA: 94364064216a8433360745f69edddce19a606659163The Android Open Source Project pList->authMode = os802_11AuthModeWPA; 94464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 94564064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXT_AUTH_MODE_WPAPSK: 94664064216a8433360745f69edddce19a606659163The Android Open Source Project pList->authMode = os802_11AuthModeWPAPSK; 94764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 94864064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXT_AUTH_MODE_WPANONE: 94964064216a8433360745f69edddce19a606659163The Android Open Source Project pList->authMode = os802_11AuthModeWPANone; 95064064216a8433360745f69edddce19a606659163The Android Open Source Project break; 95164064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXT_AUTH_MODE_WPA2: 95264064216a8433360745f69edddce19a606659163The Android Open Source Project pList->authMode = os802_11AuthModeWPA2; 95364064216a8433360745f69edddce19a606659163The Android Open Source Project break; 95464064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXT_AUTH_MODE_WPA2PSK: 95564064216a8433360745f69edddce19a606659163The Android Open Source Project pList->authMode = os802_11AuthModeWPA2PSK; 95664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 95764064216a8433360745f69edddce19a606659163The Android Open Source Project default: 95864064216a8433360745f69edddce19a606659163The Android Open Source Project pList->authMode = os802_11AuthModeOpen; 95964064216a8433360745f69edddce19a606659163The Android Open Source Project break; 96064064216a8433360745f69edddce19a606659163The Android Open Source Project } 96164064216a8433360745f69edddce19a606659163The Android Open Source Project 96264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get encryption type */ 96364064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = RSN_ENCRYPTION_STATUS_PARAM; 96464064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_getParam(pAPConnection->hPrivacy, ¶m); 96564064216a8433360745f69edddce19a606659163The Android Open Source Project 96664064216a8433360745f69edddce19a606659163The Android Open Source Project switch (param.content.rsnEncryptionStatus) 96764064216a8433360745f69edddce19a606659163The Android Open Source Project { 96864064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_CIPHER_NONE: 96964064216a8433360745f69edddce19a606659163The Android Open Source Project pList->encryptionType = OS_ENCRYPTION_TYPE_NONE; 97064064216a8433360745f69edddce19a606659163The Android Open Source Project break; 97164064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_CIPHER_WEP: 97264064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_CIPHER_WEP104: 97364064216a8433360745f69edddce19a606659163The Android Open Source Project pList->encryptionType = OS_ENCRYPTION_TYPE_WEP; 97464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 97564064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_CIPHER_TKIP: 97664064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_CIPHER_CKIP: 97764064216a8433360745f69edddce19a606659163The Android Open Source Project pList->encryptionType = OS_ENCRYPTION_TYPE_TKIP; 97864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 97964064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_CIPHER_AES_WRAP: 98064064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_CIPHER_AES_CCMP: 98164064216a8433360745f69edddce19a606659163The Android Open Source Project pList->encryptionType = OS_ENCRYPTION_TYPE_AES; 98264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 98364064216a8433360745f69edddce19a606659163The Android Open Source Project default: 98464064216a8433360745f69edddce19a606659163The Android Open Source Project pList->encryptionType = OS_ENCRYPTION_TYPE_NONE; 98564064216a8433360745f69edddce19a606659163The Android Open Source Project break; 98664064216a8433360745f69edddce19a606659163The Android Open Source Project } 98764064216a8433360745f69edddce19a606659163The Android Open Source Project 98864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get supported rates */ 98964064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = SITE_MGR_DESIRED_SUPPORTED_RATE_SET_PARAM; 99064064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_getParam(pAPConnection->hSiteMgr, ¶m); 99164064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pAPConnection->hOs, (void *)param.content.siteMgrDesiredSupportedRateSet.ratesString, pList->rateMask, sizeof(OS_802_11_RATES_EX)); 99264064216a8433360745f69edddce19a606659163The Android Open Source Project 99364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get mode: 2.4G, 5G or Dual */ 99464064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = SITE_MGR_DESIRED_DOT11_MODE_PARAM; 99564064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_getParam(pAPConnection->hSiteMgr, ¶m); 99664064216a8433360745f69edddce19a606659163The Android Open Source Project pList->networkType = (OS_802_11_NETWORK_TYPE)param.content.siteMgrDot11Mode; 99764064216a8433360745f69edddce19a606659163The Android Open Source Project switch(param.content.siteMgrDot11Mode) 99864064216a8433360745f69edddce19a606659163The Android Open Source Project { 99964064216a8433360745f69edddce19a606659163The Android Open Source Project case DOT11_B_MODE: 100064064216a8433360745f69edddce19a606659163The Android Open Source Project pList->networkType = os802_11DS; 100164064216a8433360745f69edddce19a606659163The Android Open Source Project break; 100264064216a8433360745f69edddce19a606659163The Android Open Source Project case DOT11_A_MODE: 100364064216a8433360745f69edddce19a606659163The Android Open Source Project pList->networkType = os802_11OFDM5; 100464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 100564064216a8433360745f69edddce19a606659163The Android Open Source Project case DOT11_G_MODE: 100664064216a8433360745f69edddce19a606659163The Android Open Source Project pList->networkType = os802_11OFDM24; 100764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 100864064216a8433360745f69edddce19a606659163The Android Open Source Project case DOT11_DUAL_MODE: 100964064216a8433360745f69edddce19a606659163The Android Open Source Project pList->networkType = os802_11Automode; 101064064216a8433360745f69edddce19a606659163The Android Open Source Project break; 101164064216a8433360745f69edddce19a606659163The Android Open Source Project default: 101264064216a8433360745f69edddce19a606659163The Android Open Source Project pList->networkType = os802_11DS; 101364064216a8433360745f69edddce19a606659163The Android Open Source Project break; 101464064216a8433360745f69edddce19a606659163The Android Open Source Project } 101564064216a8433360745f69edddce19a606659163The Android Open Source Project 101664064216a8433360745f69edddce19a606659163The Android Open Source Project 101764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get EXC status */ 101864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 101964064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = EXC_ENABLED; 102064064216a8433360745f69edddce19a606659163The Android Open Source Project excMngr_getParam(pAPConnection->hExcMngr, ¶m); 102164064216a8433360745f69edddce19a606659163The Android Open Source Project pList->excEnabled = (param.content.excEnabled==EXC_MODE_ENABLED)? TRUE : FALSE; 102264064216a8433360745f69edddce19a606659163The Android Open Source Project#else 102364064216a8433360745f69edddce19a606659163The Android Open Source Project pList->excEnabled = FALSE; 102464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 102564064216a8433360745f69edddce19a606659163The Android Open Source Project 102664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get QoS type */ 102764064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = QOS_MNGR_ACTIVE_PROTOCOL; 102864064216a8433360745f69edddce19a606659163The Android Open Source Project qosMngr_getParams(pAPConnection->hQos, ¶m); 102964064216a8433360745f69edddce19a606659163The Android Open Source Project pList->qosEnabled = (param.content.qosSiteProtocol==NONE_QOS)? FALSE : TRUE; 103064064216a8433360745f69edddce19a606659163The Android Open Source Project 103164064216a8433360745f69edddce19a606659163The Android Open Source Project pList->regDomain = REG_DOMAIN_FIXED; 103264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get regulatory domain type */ 103364064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = REGULATORY_DOMAIN_MANAGEMENT_CAPABILITY_ENABLED_PARAM; 103464064216a8433360745f69edddce19a606659163The Android Open Source Project regulatoryDomain_getParam(pAPConnection->hRegulatoryDomain, ¶m); 103564064216a8433360745f69edddce19a606659163The Android Open Source Project if (param.content.spectrumManagementEnabled) 103664064216a8433360745f69edddce19a606659163The Android Open Source Project { /* 802.11h is enabled (802.11h includes 802.11d) */ 103764064216a8433360745f69edddce19a606659163The Android Open Source Project pList->regDomain = REG_DOMAIN_80211H; 103864064216a8433360745f69edddce19a606659163The Android Open Source Project } 103964064216a8433360745f69edddce19a606659163The Android Open Source Project else 104064064216a8433360745f69edddce19a606659163The Android Open Source Project { 104164064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = REGULATORY_DOMAIN_ENABLED_PARAM; 104264064216a8433360745f69edddce19a606659163The Android Open Source Project regulatoryDomain_getParam(pAPConnection->hRegulatoryDomain, ¶m); 104364064216a8433360745f69edddce19a606659163The Android Open Source Project if (param.content.regulatoryDomainEnabled) 104464064216a8433360745f69edddce19a606659163The Android Open Source Project { /* 802.11d is enabled */ 104564064216a8433360745f69edddce19a606659163The Android Open Source Project pList->regDomain = REG_DOMAIN_80211D; 104664064216a8433360745f69edddce19a606659163The Android Open Source Project } 104764064216a8433360745f69edddce19a606659163The Android Open Source Project } 104864064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 104964064216a8433360745f69edddce19a606659163The Android Open Source Project} 105064064216a8433360745f69edddce19a606659163The Android Open Source Project 105164064216a8433360745f69edddce19a606659163The Android Open Source Project 105264064216a8433360745f69edddce19a606659163The Android Open Source Project/** 105364064216a8433360745f69edddce19a606659163The Android Open Source Project* 105464064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_connectToAP 105564064216a8433360745f69edddce19a606659163The Android Open Source Project* 105664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 105764064216a8433360745f69edddce19a606659163The Android Open Source Project* 105864064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function when it has completed the process of selection 105964064216a8433360745f69edddce19a606659163The Android Open Source Project* of new AP candidate for roaming. In addition, Roaming manager informs AP Connection 106064064216a8433360745f69edddce19a606659163The Android Open Source Project* module whether this is new AP or the current one, and whether to perform full 106164064216a8433360745f69edddce19a606659163The Android Open Source Project* roaming procedure or just to retain to current AP. 106264064216a8433360745f69edddce19a606659163The Android Open Source Project* 106364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 106464064216a8433360745f69edddce19a606659163The Android Open Source Project* 106564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - requestType - Connect to new AP, current AP (retain to current AP or re-connect) \n 106664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - newAP - Pointer to parameters list of AP candidate for roaming \n 106764064216a8433360745f69edddce19a606659163The Android Open Source Project* 106864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 106964064216a8433360745f69edddce19a606659163The Android Open Source Project* 107064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 107164064216a8433360745f69edddce19a606659163The Android Open Source Project* 107264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 107364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 107464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_connectToAP(TI_HANDLE hAPConnection, 107564064216a8433360745f69edddce19a606659163The Android Open Source Project bssEntry_t *newAP, 107664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_connRequest_t *request, 107764064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL reNegotiateTspec) 107864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 107964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 108064064216a8433360745f69edddce19a606659163The Android Open Source Project 108164064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 108264064216a8433360745f69edddce19a606659163The Android Open Source Project 108364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->requestType = request->requestType; 108464064216a8433360745f69edddce19a606659163The Android Open Source Project 108564064216a8433360745f69edddce19a606659163The Android Open Source Project switch (request->requestType) 108664064216a8433360745f69edddce19a606659163The Android Open Source Project { 108764064216a8433360745f69edddce19a606659163The Android Open Source Project case AP_CONNECT_RETAIN_CURR_AP: 108864064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_RETAIN_CURRENT_AP, pAPConnection); 108964064216a8433360745f69edddce19a606659163The Android Open Source Project break; 109064064216a8433360745f69edddce19a606659163The Android Open Source Project 109164064216a8433360745f69edddce19a606659163The Android Open Source Project case AP_CONNECT_FULL_TO_AP: 109264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->removeKeys = TRUE; 109364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->newAP = newAP; 109464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingFailedHandoverNum++; 109564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reNegotiateTSPEC = reNegotiateTspec; 109664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_START_ROAM, pAPConnection); 109764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 109864064216a8433360745f69edddce19a606659163The Android Open Source Project 109964064216a8433360745f69edddce19a606659163The Android Open Source Project case AP_CONNECT_FAST_TO_AP: 110064064216a8433360745f69edddce19a606659163The Android Open Source Project case AP_CONNECT_RECONNECT_CURR_AP: 110164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->removeKeys = FALSE; 110264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->newAP = newAP; 110364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingFailedHandoverNum++; 110464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reNegotiateTSPEC = reNegotiateTspec; 110564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_START_ROAM, pAPConnection); 110664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 110764064216a8433360745f69edddce19a606659163The Android Open Source Project 110864064216a8433360745f69edddce19a606659163The Android Open Source Project default: 110964064216a8433360745f69edddce19a606659163The Android Open Source Project break; 111064064216a8433360745f69edddce19a606659163The Android Open Source Project } 111164064216a8433360745f69edddce19a606659163The Android Open Source Project 111264064216a8433360745f69edddce19a606659163The Android Open Source Project /* If there is vendor specific IE to attach to Assoc req, store it now */ 111364064216a8433360745f69edddce19a606659163The Android Open Source Project if (request->dataBufLength > 0) 111464064216a8433360745f69edddce19a606659163The Android Open Source Project { 111564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->vsIEbuf = request->dataBuf; 111664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->vsIElength = request->dataBufLength; 111764064216a8433360745f69edddce19a606659163The Android Open Source Project } 111864064216a8433360745f69edddce19a606659163The Android Open Source Project 111964064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 112064064216a8433360745f69edddce19a606659163The Android Open Source Project} 112164064216a8433360745f69edddce19a606659163The Android Open Source Project 112264064216a8433360745f69edddce19a606659163The Android Open Source Project 112364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 112464064216a8433360745f69edddce19a606659163The Android Open Source Project* 112564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_getBSSParams 112664064216a8433360745f69edddce19a606659163The Android Open Source Project* 112764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 112864064216a8433360745f69edddce19a606659163The Android Open Source Project* 112964064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function in order to evaluate the quality of new 113064064216a8433360745f69edddce19a606659163The Android Open Source Project* AP candidates for roaming against the quality of current AP. 113164064216a8433360745f69edddce19a606659163The Android Open Source Project* The function returns parameters of current AP. 113264064216a8433360745f69edddce19a606659163The Android Open Source Project* 113364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 113464064216a8433360745f69edddce19a606659163The Android Open Source Project* 113564064216a8433360745f69edddce19a606659163The Android Open Source Project* O - currentAP - Pointer to parameters list of current AP \n 113664064216a8433360745f69edddce19a606659163The Android Open Source Project* 113764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 113864064216a8433360745f69edddce19a606659163The Android Open Source Project* 113964064216a8433360745f69edddce19a606659163The Android Open Source Project* Pointer to current BSS parameters database if successful, NULL otherwise. 114064064216a8433360745f69edddce19a606659163The Android Open Source Project* 114164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 114264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 114364064216a8433360745f69edddce19a606659163The Android Open Source ProjectbssEntry_t *apConn_getBSSParams(TI_HANDLE hAPConnection) 114464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 114564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 114664064216a8433360745f69edddce19a606659163The Android Open Source Project if (hAPConnection == NULL) /* Failed to allocate control block */ 114764064216a8433360745f69edddce19a606659163The Android Open Source Project { 114864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("FATAL ERROR: apConn_create(): Error allocating cb - aborting\n")); 114964064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 115064064216a8433360745f69edddce19a606659163The Android Open Source Project } 115164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 115264064216a8433360745f69edddce19a606659163The Android Open Source Project 115364064216a8433360745f69edddce19a606659163The Android Open Source Project return currBSS_getBssInfo(((apConn_t *)hAPConnection)->hCurrBSS); 115464064216a8433360745f69edddce19a606659163The Android Open Source Project} 115564064216a8433360745f69edddce19a606659163The Android Open Source Project 115664064216a8433360745f69edddce19a606659163The Android Open Source Project 115764064216a8433360745f69edddce19a606659163The Android Open Source Project/** 115864064216a8433360745f69edddce19a606659163The Android Open Source Project * 115964064216a8433360745f69edddce19a606659163The Android Open Source Project * apConn_isSiteBanned 116064064216a8433360745f69edddce19a606659163The Android Open Source Project * 116164064216a8433360745f69edddce19a606659163The Android Open Source Project * \b Description: 116264064216a8433360745f69edddce19a606659163The Android Open Source Project * 116364064216a8433360745f69edddce19a606659163The Android Open Source Project * Roaming Manager calls this function during selection of new candidate for roaming. 116464064216a8433360745f69edddce19a606659163The Android Open Source Project * Only APs which are not marked as banned are allowed to be selected. 116564064216a8433360745f69edddce19a606659163The Android Open Source Project * 116664064216a8433360745f69edddce19a606659163The Android Open Source Project * \b ARGS: 116764064216a8433360745f69edddce19a606659163The Android Open Source Project * 116864064216a8433360745f69edddce19a606659163The Android Open Source Project * O - givenAp - Pointer to BSSID to check if banned \n 116964064216a8433360745f69edddce19a606659163The Android Open Source Project * 117064064216a8433360745f69edddce19a606659163The Android Open Source Project * \b RETURNS: 117164064216a8433360745f69edddce19a606659163The Android Open Source Project * 117264064216a8433360745f69edddce19a606659163The Android Open Source Project * TRUE if banned, FALSE otherwise. 117364064216a8433360745f69edddce19a606659163The Android Open Source Project * 117464064216a8433360745f69edddce19a606659163The Android Open Source Project * \sa 117564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 117664064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOL apConn_isSiteBanned(TI_HANDLE hAPConnection, macAddress_t * givenAp) 117764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 117864064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t * pAPConnection = (apConn_t *) hAPConnection; 117964064216a8433360745f69edddce19a606659163The Android Open Source Project 118064064216a8433360745f69edddce19a606659163The Android Open Source Project return rsn_isSiteBanned(pAPConnection->hPrivacy, *givenAp); 118164064216a8433360745f69edddce19a606659163The Android Open Source Project} 118264064216a8433360745f69edddce19a606659163The Android Open Source Project 118364064216a8433360745f69edddce19a606659163The Android Open Source Project 118464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 118564064216a8433360745f69edddce19a606659163The Android Open Source Project* 118664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_getPreAuthAPStatus 118764064216a8433360745f69edddce19a606659163The Android Open Source Project* 118864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 118964064216a8433360745f69edddce19a606659163The Android Open Source Project* 119064064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function during selection of new candidate for roaming. 119164064216a8433360745f69edddce19a606659163The Android Open Source Project* Among all APs with good quality, those who were pre-authenticated are preferred. 119264064216a8433360745f69edddce19a606659163The Android Open Source Project* 119364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 119464064216a8433360745f69edddce19a606659163The Android Open Source Project* 119564064216a8433360745f69edddce19a606659163The Android Open Source Project* O - givenAp - Pointer to BSSID to check the pre-authenticated status for \n 119664064216a8433360745f69edddce19a606659163The Android Open Source Project* 119764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 119864064216a8433360745f69edddce19a606659163The Android Open Source Project* 119964064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 120064064216a8433360745f69edddce19a606659163The Android Open Source Project* 120164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 120264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 120364064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOL apConn_getPreAuthAPStatus(TI_HANDLE hAPConnection, 120464064216a8433360745f69edddce19a606659163The Android Open Source Project macAddress_t *givenAp) 120564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 120664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 120745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt paramInfoPartial_t param; 120864064216a8433360745f69edddce19a606659163The Android Open Source Project 120964064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 121064064216a8433360745f69edddce19a606659163The Android Open Source Project 121164064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = RSN_PRE_AUTH_STATUS; 121264064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pAPConnection->hOs, (void *)param.content.rsnApMac.addr, (void *)givenAp->addr, MAC_ADDR_LEN); 121345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt rsn_getParamPartial(pAPConnection->hPrivacy, ¶m); 121464064216a8433360745f69edddce19a606659163The Android Open Source Project 121564064216a8433360745f69edddce19a606659163The Android Open Source Project return param.content.rsnPreAuthStatus; 121664064216a8433360745f69edddce19a606659163The Android Open Source Project} 121764064216a8433360745f69edddce19a606659163The Android Open Source Project 121864064216a8433360745f69edddce19a606659163The Android Open Source Project 121964064216a8433360745f69edddce19a606659163The Android Open Source Project/** 122064064216a8433360745f69edddce19a606659163The Android Open Source Project* 122164064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_preAuthenticate 122264064216a8433360745f69edddce19a606659163The Android Open Source Project* 122364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 122464064216a8433360745f69edddce19a606659163The Android Open Source Project* 122564064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function periodically in order to update the list 122664064216a8433360745f69edddce19a606659163The Android Open Source Project* of pre-authenticated APs. The list is managed by WLAN driver and required 122764064216a8433360745f69edddce19a606659163The Android Open Source Project* by Roaming Manager during selection of roaming candidate process. 122864064216a8433360745f69edddce19a606659163The Android Open Source Project* 122964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 123064064216a8433360745f69edddce19a606659163The Android Open Source Project* 123164064216a8433360745f69edddce19a606659163The Android Open Source Project* I - listAPs - List of APs to pre-authenticate \n 123264064216a8433360745f69edddce19a606659163The Android Open Source Project* I - sizeOfList - Size of list of APs to pre-authenticate \n 123364064216a8433360745f69edddce19a606659163The Android Open Source Project* 123464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 123564064216a8433360745f69edddce19a606659163The Android Open Source Project* 123664064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 123764064216a8433360745f69edddce19a606659163The Android Open Source Project* 123864064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 123964064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 124045544f73189f4649d4afb21a0dab72cd70971e2fDmitry ShmidtTI_STATUS apConn_preAuthenticate(TI_HANDLE hAPConnection, bssList_t *listAPs, UINT8 listAPs_numOfEntries) 124164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 124264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 124364064216a8433360745f69edddce19a606659163The Android Open Source Project bssidList4PreAuth_t apList; 124464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 listIndex, apListIndex; 124564064216a8433360745f69edddce19a606659163The Android Open Source Project bssEntry_t *pCurrentAP; 124664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 *pRsnIEs; 124764064216a8433360745f69edddce19a606659163The Android Open Source Project 124864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 124964064216a8433360745f69edddce19a606659163The Android Open Source Project if ((hAPConnection == NULL) || (listAPs == NULL)) 125064064216a8433360745f69edddce19a606659163The Android Open Source Project { 125164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("FATAL ERROR: AP Connection context is not initiated\n")); 125264064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 125364064216a8433360745f69edddce19a606659163The Android Open Source Project } 125464064216a8433360745f69edddce19a606659163The Android Open Source Project 125564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, SITE_MGR_MODULE_LOG, ("apConn_reserveResources \n")); 125664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 125764064216a8433360745f69edddce19a606659163The Android Open Source Project 125845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt if (listAPs_numOfEntries != 0) { 125945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt for (listIndex=0, apListIndex=0; listIndex<listAPs->numOfEntries; listIndex++) 126045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt { 126145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt os_memoryCopy(pAPConnection->hOs, &(apList.bssidList[apListIndex].bssId), 126245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt (void *)listAPs->BSSList[listIndex].BSSID.addr, MAC_ADDR_LEN); 126345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 126445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt /* search in the buffer pointer to the beginning of the 126545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt RSN IE according to the IE ID */ 126645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt if (!parseIeBuffer(pAPConnection->hOs, listAPs->BSSList[listIndex].pBuffer, listAPs->BSSList[listIndex].bufferLength, RSN_IE_ID, &pRsnIEs, NULL, 0)) 126745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt { 126845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 126945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt ("apConn_preAuthenticate, no RSN IE was found \n")); 127045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt WLAN_REPORT_HEX_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 127145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt listAPs->BSSList[listIndex].pBuffer, listAPs->BSSList[listIndex].bufferLength); 127245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 127345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt continue; 127445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt } 127545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 127645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apList.bssidList[apListIndex].pRsnIEs = (dot11_RSN_t*)pRsnIEs; 127745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apList.bssidList[apListIndex].rsnIeLen = apList.bssidList[apListIndex].pRsnIEs->hdr.eleLen+2; 127845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apListIndex++; 127945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt } 128045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt } 128145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt else 128264064216a8433360745f69edddce19a606659163The Android Open Source Project { 128345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt listIndex=0; 128445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apListIndex=0; 128545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt } 128664064216a8433360745f69edddce19a606659163The Android Open Source Project 128764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Start pre-auth after any Conn succ (including first), 128864064216a8433360745f69edddce19a606659163The Android Open Source Project and not only when a New BSSID was added, in order to save/refresh 128964064216a8433360745f69edddce19a606659163The Android Open Source Project PMKID of the current AP.*/ 129064064216a8433360745f69edddce19a606659163The Android Open Source Project { 129164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Add the current BSSID to the list */ 129264064216a8433360745f69edddce19a606659163The Android Open Source Project pCurrentAP = apConn_getBSSParams(pAPConnection); 129364064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pAPConnection->hOs, &(apList.bssidList[apListIndex].bssId), 129464064216a8433360745f69edddce19a606659163The Android Open Source Project (void *)pCurrentAP->BSSID.addr, MAC_ADDR_LEN); 129564064216a8433360745f69edddce19a606659163The Android Open Source Project /* search in the buffer pointer to the beginning of the 129664064216a8433360745f69edddce19a606659163The Android Open Source Project RSN IE according to the IE ID */ 129764064216a8433360745f69edddce19a606659163The Android Open Source Project 129864064216a8433360745f69edddce19a606659163The Android Open Source Project if (!parseIeBuffer(pAPConnection->hOs, pCurrentAP->pBuffer, pCurrentAP->bufferLength, RSN_IE_ID, &pRsnIEs, NULL, 0)) 129964064216a8433360745f69edddce19a606659163The Android Open Source Project { 130064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 130164064216a8433360745f69edddce19a606659163The Android Open Source Project ("apConn_preAuthenticate, no RSN IE was found in the current BSS, BSSID=0x%x-0x%x-0x%x-0x%x-0x%x-0x%x \n", 130264064216a8433360745f69edddce19a606659163The Android Open Source Project pCurrentAP->BSSID.addr[0], pCurrentAP->BSSID.addr[1], pCurrentAP->BSSID.addr[2], 130364064216a8433360745f69edddce19a606659163The Android Open Source Project pCurrentAP->BSSID.addr[3], pCurrentAP->BSSID.addr[4], pCurrentAP->BSSID.addr[5])); 130464064216a8433360745f69edddce19a606659163The Android Open Source Project HexDumpData(pCurrentAP->pBuffer, pCurrentAP->bufferLength); 130564064216a8433360745f69edddce19a606659163The Android Open Source Project apList.bssidList[apListIndex].pRsnIEs = NULL; 130664064216a8433360745f69edddce19a606659163The Android Open Source Project apList.bssidList[apListIndex].rsnIeLen = 0; 130764064216a8433360745f69edddce19a606659163The Android Open Source Project } 130864064216a8433360745f69edddce19a606659163The Android Open Source Project else 130964064216a8433360745f69edddce19a606659163The Android Open Source Project { 131064064216a8433360745f69edddce19a606659163The Android Open Source Project apList.bssidList[apListIndex].pRsnIEs = (dot11_RSN_t*)pRsnIEs; 131164064216a8433360745f69edddce19a606659163The Android Open Source Project apList.bssidList[apListIndex].rsnIeLen = apList.bssidList[apListIndex].pRsnIEs->hdr.eleLen+2; 131264064216a8433360745f69edddce19a606659163The Android Open Source Project } 131364064216a8433360745f69edddce19a606659163The Android Open Source Project apList.NumOfItems = apListIndex+1; 131464064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_startPreAuth(pAPConnection->hPrivacy, &apList); 131564064216a8433360745f69edddce19a606659163The Android Open Source Project } 131664064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 131764064216a8433360745f69edddce19a606659163The Android Open Source Project} 131864064216a8433360745f69edddce19a606659163The Android Open Source Project 131964064216a8433360745f69edddce19a606659163The Android Open Source Project 132064064216a8433360745f69edddce19a606659163The Android Open Source Project/** 132164064216a8433360745f69edddce19a606659163The Android Open Source Project* 132264064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_prepareToRoaming 132364064216a8433360745f69edddce19a606659163The Android Open Source Project* 132464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 132564064216a8433360745f69edddce19a606659163The Android Open Source Project* 132664064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function when roaming event is received and Roaming Manager 132764064216a8433360745f69edddce19a606659163The Android Open Source Project* wishes to start the roaming process, thus want to prevent scan and measurement in the 132864064216a8433360745f69edddce19a606659163The Android Open Source Project* system. The function will return OK if the allocation is performed, PEND if the 132964064216a8433360745f69edddce19a606659163The Android Open Source Project* allocation is started, NOK in case the allocation is not possible. 133064064216a8433360745f69edddce19a606659163The Android Open Source Project* In case of successful allocation, Roaming Manager will be informed via callback about 133164064216a8433360745f69edddce19a606659163The Android Open Source Project* the end of the allocation. 133264064216a8433360745f69edddce19a606659163The Android Open Source Project* 133364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 133464064216a8433360745f69edddce19a606659163The Android Open Source Project* 133564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - reason - the reason for roaming \n 133664064216a8433360745f69edddce19a606659163The Android Open Source Project* 133764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 133864064216a8433360745f69edddce19a606659163The Android Open Source Project* 133964064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 134064064216a8433360745f69edddce19a606659163The Android Open Source Project* 134164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 134264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 134364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_prepareToRoaming(TI_HANDLE hAPConnection, apConn_roamingTrigger_e reason) 134464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 134564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 134664064216a8433360745f69edddce19a606659163The Android Open Source Project 134764064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 134864064216a8433360745f69edddce19a606659163The Android Open Source Project 134964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamReason = reason; 135064064216a8433360745f69edddce19a606659163The Android Open Source Project 135164064216a8433360745f69edddce19a606659163The Android Open Source Project return apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_PREPARE_FOR_ROAMING, pAPConnection); 135264064216a8433360745f69edddce19a606659163The Android Open Source Project} 135364064216a8433360745f69edddce19a606659163The Android Open Source Project 135464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 135564064216a8433360745f69edddce19a606659163The Android Open Source Project* 135664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_indicateSwitchChannelInProgress 135764064216a8433360745f69edddce19a606659163The Android Open Source Project* 135864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 135964064216a8433360745f69edddce19a606659163The Android Open Source Project* 136064064216a8433360745f69edddce19a606659163The Android Open Source Project* This function is called when switch channel process is started; it will trigger 136164064216a8433360745f69edddce19a606659163The Android Open Source Project* AP Connection state machine from 'Wait for roaming start' to 'Switch channel in progress' 136264064216a8433360745f69edddce19a606659163The Android Open Source Project* state. 136364064216a8433360745f69edddce19a606659163The Android Open Source Project* 136464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 136564064216a8433360745f69edddce19a606659163The Android Open Source Project* 136664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - reason - the reason for roaming \n 136764064216a8433360745f69edddce19a606659163The Android Open Source Project* 136864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 136964064216a8433360745f69edddce19a606659163The Android Open Source Project* 137064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 137164064216a8433360745f69edddce19a606659163The Android Open Source Project* 137264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 137364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 137464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_indicateSwitchChannelInProgress(TI_HANDLE hAPConnection) 137564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 137664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 137764064216a8433360745f69edddce19a606659163The Android Open Source Project 137864064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 137964064216a8433360745f69edddce19a606659163The Android Open Source Project 138064064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_START_SWITCH_CHANNEL, pAPConnection); 138164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 138264064216a8433360745f69edddce19a606659163The Android Open Source Project} 138364064216a8433360745f69edddce19a606659163The Android Open Source Project 138464064216a8433360745f69edddce19a606659163The Android Open Source Project 138564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 138664064216a8433360745f69edddce19a606659163The Android Open Source Project* 138764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_indicateSwitchChannelFinished 138864064216a8433360745f69edddce19a606659163The Android Open Source Project* 138964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 139064064216a8433360745f69edddce19a606659163The Android Open Source Project* 139164064216a8433360745f69edddce19a606659163The Android Open Source Project* This function is called when switch channel process is finished 139264064216a8433360745f69edddce19a606659163The Android Open Source Project* 139364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 139464064216a8433360745f69edddce19a606659163The Android Open Source Project* 139564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - reason - the reason for roaming \n 139664064216a8433360745f69edddce19a606659163The Android Open Source Project* 139764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 139864064216a8433360745f69edddce19a606659163The Android Open Source Project* 139964064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 140064064216a8433360745f69edddce19a606659163The Android Open Source Project* 140164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 140264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 140364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_indicateSwitchChannelFinished(TI_HANDLE hAPConnection) 140464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 140564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 140664064216a8433360745f69edddce19a606659163The Android Open Source Project 140764064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 140864064216a8433360745f69edddce19a606659163The Android Open Source Project 140964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_SWITCH_CH, pAPConnection); 141064064216a8433360745f69edddce19a606659163The Android Open Source Project 141164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 141264064216a8433360745f69edddce19a606659163The Android Open Source Project} 141364064216a8433360745f69edddce19a606659163The Android Open Source Project 141464064216a8433360745f69edddce19a606659163The Android Open Source Project 141564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 141664064216a8433360745f69edddce19a606659163The Android Open Source Project* 141764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_start 141864064216a8433360745f69edddce19a606659163The Android Open Source Project* 141964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 142064064216a8433360745f69edddce19a606659163The Android Open Source Project* 142164064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by SME module when new connection has been successfully established (first time connection) 142264064216a8433360745f69edddce19a606659163The Android Open Source Project* 142364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 142464064216a8433360745f69edddce19a606659163The Android Open Source Project* 142564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - isValidBSS - if FALSE, no roaming shall be performed, disconnect upon any roaming event; 142664064216a8433360745f69edddce19a606659163The Android Open Source Project* other parameters of current AP can be received from Current BSS module 142764064216a8433360745f69edddce19a606659163The Android Open Source Project* 142864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 142964064216a8433360745f69edddce19a606659163The Android Open Source Project* 143064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 143164064216a8433360745f69edddce19a606659163The Android Open Source Project* 143264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 143364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 143464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_start(TI_HANDLE hAPConnection, BOOLEAN roamingEnabled) 143564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 143664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 143764064216a8433360745f69edddce19a606659163The Android Open Source Project 143864064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 143964064216a8433360745f69edddce19a606659163The Android Open Source Project 144064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingEnabled = roamingEnabled; 144164064216a8433360745f69edddce19a606659163The Android Open Source Project 144264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_START, pAPConnection); 144364064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 144464064216a8433360745f69edddce19a606659163The Android Open Source Project} 144564064216a8433360745f69edddce19a606659163The Android Open Source Project 144664064216a8433360745f69edddce19a606659163The Android Open Source Project 144764064216a8433360745f69edddce19a606659163The Android Open Source Project/** 144864064216a8433360745f69edddce19a606659163The Android Open Source Project* 144964064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_stop 145064064216a8433360745f69edddce19a606659163The Android Open Source Project* 145164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 145264064216a8433360745f69edddce19a606659163The Android Open Source Project* 145364064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by SME module when current connection must be taken down 145464064216a8433360745f69edddce19a606659163The Android Open Source Project* (due to driver download, connection failure or any other reason) 145564064216a8433360745f69edddce19a606659163The Android Open Source Project* 145664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 145764064216a8433360745f69edddce19a606659163The Android Open Source Project* 145864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 145964064216a8433360745f69edddce19a606659163The Android Open Source Project* 146064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 146164064216a8433360745f69edddce19a606659163The Android Open Source Project* 146264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 146364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 146464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_stop(TI_HANDLE hAPConnection, BOOLEAN removeKeys, BOOLEAN immediateShutdown) 146564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 146664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 146764064216a8433360745f69edddce19a606659163The Android Open Source Project 146864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->stopFromSmeNum++; 146964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->removeKeys = removeKeys; 147064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->sendDeauthPacket = !(immediateShutdown); /* If immediateShutdown is TRUE, no need to send DISASSOC frame - used during unload process */ 147164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reNegotiateTSPEC = FALSE; 147264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->voiceTspecConfigured = FALSE; 147364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->videoTspecConfigured = FALSE; 147464064216a8433360745f69edddce19a606659163The Android Open Source Project 147564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Mark that the connection is stopped due to reason outside the scope of this module */ 147664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->bNonRoamingDisAssocReason = TRUE; 147764064216a8433360745f69edddce19a606659163The Android Open Source Project 147864064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_STOP, pAPConnection); 147964064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 148064064216a8433360745f69edddce19a606659163The Android Open Source Project} 148164064216a8433360745f69edddce19a606659163The Android Open Source Project 148245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/** 148345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 148445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* apConn_reportRoamingEventDisconnect 148545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 148645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b Description: 148745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 148845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* Called by Roaming Manager to inform of Disconnect 148945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* uStatusCode - status code of deauth/disassoc packet 149045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* bDeAuthenticate - Whether this packet is DeAuth ( if 149145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* DisAssoc than FALSE) 149245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 149345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b ARGS: 149445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 149545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 149645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b RETURNS: 149745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 149845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* OK if successful, NOK otherwise. 149945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 150045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \sa 150145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*/ 150245544f73189f4649d4afb21a0dab72cd70971e2fDmitry ShmidtTI_STATUS apConn_reportRoamingEventDisconnect(TI_HANDLE hAPConnection,UINT16 uStatusCode,BOOLEAN bDeAuthenticate ) 150345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt{ 150445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apConn_t *pAPConnection = (apConn_t *)hAPConnection; 150545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt roamingEventData_u RoamingEventData; 150645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 150745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt RoamingEventData.APDisconnect.uStatusCode = uStatusCode ; /* status code of deauth/disassoc packet */ 150845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt RoamingEventData.APDisconnect.bDeAuthenticate = bDeAuthenticate; /* TRUE state that it is DeAuth packet */ 150945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apConn_reportRoamingEvent(pAPConnection, ROAMING_TRIGGER_AP_DISCONNECT, &RoamingEventData); 151045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt return( TI_OK ); 151145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt} 151245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 151364064216a8433360745f69edddce19a606659163The Android Open Source Project 151464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 151564064216a8433360745f69edddce19a606659163The Android Open Source Project* 151664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_reportRoamingEvent 151764064216a8433360745f69edddce19a606659163The Android Open Source Project* 151864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 151964064216a8433360745f69edddce19a606659163The Android Open Source Project* 152064064216a8433360745f69edddce19a606659163The Android Open Source Project* Called when one of roaming events occur 152164064216a8433360745f69edddce19a606659163The Android Open Source Project* 152264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 152364064216a8433360745f69edddce19a606659163The Android Open Source Project* 152464064216a8433360745f69edddce19a606659163The Android Open Source Project* I - roamingEventType 152564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pRoamingEventData - in case of 'Tx rate' event, or AP disconnect 152664064216a8433360745f69edddce19a606659163The Android Open Source Project* 152764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 152864064216a8433360745f69edddce19a606659163The Android Open Source Project* 152964064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 153064064216a8433360745f69edddce19a606659163The Android Open Source Project* 153164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 153264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 153364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_reportRoamingEvent(TI_HANDLE hAPConnection, 153464064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_roamingTrigger_e roamingEventType, 153564064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEventData_u *pRoamingEventData) 153664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 153764064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 153864064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; /* parameter for retrieving BSSID */ 153964064216a8433360745f69edddce19a606659163The Android Open Source Project 154064064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 154164064216a8433360745f69edddce19a606659163The Android Open Source Project 154264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 154364064216a8433360745f69edddce19a606659163The Android Open Source Project ("apConn_reportRoamingEvent, type=%d, cur_state=%d, roamingEnabled=%d, roamEventCallb=%p \n", 154464064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEventType, pAPConnection->currentState, 154564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingEnabled, pAPConnection->roamEventCallb)); 154664064216a8433360745f69edddce19a606659163The Android Open Source Project 154764064216a8433360745f69edddce19a606659163The Android Open Source Project /* 1. Check if this is Rogue AP test case */ 154864064216a8433360745f69edddce19a606659163The Android Open Source Project if (roamingEventType == ROAMING_TRIGGER_AP_DISCONNECT) 154964064216a8433360745f69edddce19a606659163The Android Open Source Project { 155064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingEventData != NULL) 155164064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Save the disconnect reason for future use */ 155264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->APDisconnect.uStatusCode = pRoamingEventData->APDisconnect.uStatusCode; 155364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->APDisconnect.bDeAuthenticate = pRoamingEventData->APDisconnect.bDeAuthenticate; 155464064216a8433360745f69edddce19a606659163The Android Open Source Project } 155564064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pAPConnection->ignoreDeauthReason0) && (pRoamingEventData!=NULL) && 155664064216a8433360745f69edddce19a606659163The Android Open Source Project (pAPConnection->APDisconnect.uStatusCode == 0)) 155764064216a8433360745f69edddce19a606659163The Android Open Source Project { /* This is required for Rogue AP test, 155864064216a8433360745f69edddce19a606659163The Android Open Source Project When Rogue AP due to invalid User name, deauth with reason 0 arrives before the Rogue AP, 155964064216a8433360745f69edddce19a606659163The Android Open Source Project and this EXC test fails.*/ 156064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 156164064216a8433360745f69edddce19a606659163The Android Open Source Project ("apConn_reportRoamingEvent, Ignore DeAuth with reason 0 \n")); 156264064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 156364064216a8433360745f69edddce19a606659163The Android Open Source Project } 156464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 156564064216a8433360745f69edddce19a606659163The Android Open Source Project ("apConn_reportRoamingEvent, DeAuth with reason %d \n", pAPConnection->APDisconnect.uStatusCode)); 156664064216a8433360745f69edddce19a606659163The Android Open Source Project 156764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->APDisconnect.uStatusCode == STATUS_CODE_802_1X_AUTHENTICATION_FAILED) 156864064216a8433360745f69edddce19a606659163The Android Open Source Project { 156964064216a8433360745f69edddce19a606659163The Android Open Source Project #ifdef EXC_MODULE_INCLUDED 157064064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 157164064216a8433360745f69edddce19a606659163The Android Open Source Project 157264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Raise the EAP-Failure as event */ 157364064216a8433360745f69edddce19a606659163The Android Open Source Project status = excMngr_rogueApDetected (pAPConnection->hExcMngr, RSN_AUTH_STATUS_CHALLENGE_FROM_AP_FAILED); 157464064216a8433360745f69edddce19a606659163The Android Open Source Project #endif 157564064216a8433360745f69edddce19a606659163The Android Open Source Project 157664064216a8433360745f69edddce19a606659163The Android Open Source Project 157764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Remove AP from candidate list for a specified amount of time */ 157864064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = SITE_MGR_CURRENT_BSSID_PARAM; 157964064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_getParam(pAPConnection->hSiteMgr, ¶m); 158064064216a8433360745f69edddce19a606659163The Android Open Source Project 158164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 158264064216a8433360745f69edddce19a606659163The Android Open Source Project ("current station is banned from the roaming candidates list for %d Ms\n", 158364064216a8433360745f69edddce19a606659163The Android Open Source Project RSN_AUTH_FAILURE_TIMEOUT)); 158464064216a8433360745f69edddce19a606659163The Android Open Source Project 158564064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_banSite(pAPConnection->hPrivacy, param.content.siteMgrDesiredBSSID, RSN_SITE_BAN_LEVEL_FULL, RSN_AUTH_FAILURE_TIMEOUT); 158664064216a8433360745f69edddce19a606659163The Android Open Source Project } 158764064216a8433360745f69edddce19a606659163The Android Open Source Project 158864064216a8433360745f69edddce19a606659163The Android Open Source Project } 158964064216a8433360745f69edddce19a606659163The Android Open Source Project 159064064216a8433360745f69edddce19a606659163The Android Open Source Project /* 2. Check if received trigger is masked out */ 159164064216a8433360745f69edddce19a606659163The Android Open Source Project if (((pAPConnection->isConsTxFailureMaskedOut) && (roamingEventType == ROAMING_TRIGGER_MAX_TX_RETRIES)) || 159264064216a8433360745f69edddce19a606659163The Android Open Source Project ((pAPConnection->isRssiTriggerMaskedOut) && (roamingEventType == ROAMING_TRIGGER_LOW_QUALITY)) || 159364064216a8433360745f69edddce19a606659163The Android Open Source Project ((pAPConnection->isSnrTriggerMaskedOut) && (roamingEventType == ROAMING_TRIGGER_LOW_SNR)) || 159464064216a8433360745f69edddce19a606659163The Android Open Source Project ((pAPConnection->islowRateTriggerMaskedOut)&& (roamingEventType == ROAMING_TRIGGER_LOW_TX_RATE))) 159564064216a8433360745f69edddce19a606659163The Android Open Source Project { 159664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("apConn_reportRoamingEvent, trigger ignored \n")); 159764064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 159864064216a8433360745f69edddce19a606659163The Android Open Source Project } 159964064216a8433360745f69edddce19a606659163The Android Open Source Project 160064064216a8433360745f69edddce19a606659163The Android Open Source Project /* 3. Valid trigger received: */ 160164064216a8433360745f69edddce19a606659163The Android Open Source Project /* 3a. Update statistics */ 160264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingTriggerEvents[roamingEventType]++; 160364064216a8433360745f69edddce19a606659163The Android Open Source Project 160464064216a8433360745f69edddce19a606659163The Android Open Source Project /* 3b. Store the most severe trigger */ 160564064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->roamReason < roamingEventType) 160664064216a8433360745f69edddce19a606659163The Android Open Source Project { 160764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamReason = roamingEventType; 160864064216a8433360745f69edddce19a606659163The Android Open Source Project } 160964064216a8433360745f69edddce19a606659163The Android Open Source Project 161064064216a8433360745f69edddce19a606659163The Android Open Source Project /* 3c. Check if Roaming Manager is available */ 161164064216a8433360745f69edddce19a606659163The Android Open Source Project if (((!pAPConnection->roamingEnabled) || (pAPConnection->roamEventCallb == NULL) || 161264064216a8433360745f69edddce19a606659163The Android Open Source Project (pAPConnection->currentState == AP_CONNECT_STATE_IDLE)) 161364064216a8433360745f69edddce19a606659163The Android Open Source Project && (roamingEventType > ROAMING_TRIGGER_LOW_QUALITY) 161464064216a8433360745f69edddce19a606659163The Android Open Source Project && (roamingEventType != ROAMING_TRIGGER_MAX_TX_RETRIES)) 161564064216a8433360745f69edddce19a606659163The Android Open Source Project /* 161664064216a8433360745f69edddce19a606659163The Android Open Source Project * The last condition was added so that MAX_TX_RETRIES would not cause a disconnect. 161764064216a8433360745f69edddce19a606659163The Android Open Source Project * This is done because the current default value for max TX retries is good enough for 161864064216a8433360745f69edddce19a606659163The Android Open Source Project * roaming (i.e. it indicates a low quality AP), but would cause unnecessary disconnects 161964064216a8433360745f69edddce19a606659163The Android Open Source Project * if used when roaming is disabled 162064064216a8433360745f69edddce19a606659163The Android Open Source Project */ 162164064216a8433360745f69edddce19a606659163The Android Open Source Project { 162264064216a8433360745f69edddce19a606659163The Android Open Source Project /* 'Any SSID' configured, meaning Roaming Manager is not allowed to perform roaming, 162364064216a8433360745f69edddce19a606659163The Android Open Source Project or Roaming Manager is not registered for roaming events; 162464064216a8433360745f69edddce19a606659163The Android Open Source Project unless this is trigger to change parameters of background scan, disconnect the link */ 162564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("Disconnecting link due to roaming event: ev = %d\n", roamingEventType)); 162664064216a8433360745f69edddce19a606659163The Android Open Source Project 162764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Handle IBSS case TBD to remove 162864064216a8433360745f69edddce19a606659163The Android Open Source Project Handle also the case where A first connection is in progress, and 162964064216a8433360745f69edddce19a606659163The Android Open Source Project de-auth arrived. */ 163064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->currentState == AP_CONNECT_STATE_IDLE) 163164064216a8433360745f69edddce19a606659163The Android Open Source Project { 163264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_reportConnStatusToSME(pAPConnection); 163364064216a8433360745f69edddce19a606659163The Android Open Source Project } 163464064216a8433360745f69edddce19a606659163The Android Open Source Project else 163564064216a8433360745f69edddce19a606659163The Android Open Source Project { 163664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Infra-structure BSS case - disconnect the link */ 163764064216a8433360745f69edddce19a606659163The Android Open Source Project if (roamingEventType >= ROAMING_TRIGGER_AP_DISCONNECT) 163864064216a8433360745f69edddce19a606659163The Android Open Source Project { 163964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->removeKeys = TRUE; 164064064216a8433360745f69edddce19a606659163The Android Open Source Project } 164164064216a8433360745f69edddce19a606659163The Android Open Source Project else 164264064216a8433360745f69edddce19a606659163The Android Open Source Project { 164364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->removeKeys = FALSE; 164464064216a8433360745f69edddce19a606659163The Android Open Source Project } 164564064216a8433360745f69edddce19a606659163The Android Open Source Project UPDATE_SEND_DEAUTH_PACKET_FLAG(roamingEventType); 164664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_STOP, pAPConnection); 164764064216a8433360745f69edddce19a606659163The Android Open Source Project } 164864064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 164964064216a8433360745f69edddce19a606659163The Android Open Source Project } 165064064216a8433360745f69edddce19a606659163The Android Open Source Project 165164064216a8433360745f69edddce19a606659163The Android Open Source Project /* 4. Check if we are in the middle of switching channel */ 165264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->currentState == AP_CONNECT_STATE_SWITCHING_CHANNEL) 165364064216a8433360745f69edddce19a606659163The Android Open Source Project { 165464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Trigger received in the middle of switch channel, continue without reporting Roaming Manager */ 165564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("Roaming event during switch channel: ev = %d\n", roamingEventType)); 165664064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 165764064216a8433360745f69edddce19a606659163The Android Open Source Project } 165864064216a8433360745f69edddce19a606659163The Android Open Source Project 165964064216a8433360745f69edddce19a606659163The Android Open Source Project /* 5. Report Roaming Manager */ 166064064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pAPConnection->roamingEnabled == TRUE) && (pAPConnection->roamEventCallb != NULL)) 166164064216a8433360745f69edddce19a606659163The Android Open Source Project { 166264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("Roaming event raised: ev = %d\n", roamingEventType)); 166345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt if (roamingEventType == ROAMING_TRIGGER_LOW_QUALITY) 166445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt { 166545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt EvHandlerSendEvent(pAPConnection->hEvHandler, IPC_EVENT_LOW_RSSI, NULL,0); 166645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt } 166764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Report to Roaming Manager */ 166864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamEventCallb(pAPConnection->hRoamMng, &roamingEventType); 166964064216a8433360745f69edddce19a606659163The Android Open Source Project } 167064064216a8433360745f69edddce19a606659163The Android Open Source Project 167164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 167264064216a8433360745f69edddce19a606659163The Android Open Source Project} 167364064216a8433360745f69edddce19a606659163The Android Open Source Project 167464064216a8433360745f69edddce19a606659163The Android Open Source Project 167564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 167664064216a8433360745f69edddce19a606659163The Android Open Source Project* 167764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_RoamHandoffFinished 167864064216a8433360745f69edddce19a606659163The Android Open Source Project* 167964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 168064064216a8433360745f69edddce19a606659163The Android Open Source Project* 168164064216a8433360745f69edddce19a606659163The Android Open Source Project* Called when EXC module receives response from the supplicant or recognizes 168264064216a8433360745f69edddce19a606659163The Android Open Source Project* timeout while waiting for the response 168364064216a8433360745f69edddce19a606659163The Android Open Source Project* 168464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 168564064216a8433360745f69edddce19a606659163The Android Open Source Project* 168664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 168764064216a8433360745f69edddce19a606659163The Android Open Source Project* 168864064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 168964064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 169064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid apConn_RoamHandoffFinished(TI_HANDLE hAPConnection) 169164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 169264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 169364064216a8433360745f69edddce19a606659163The Android Open Source Project 169464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 169564064216a8433360745f69edddce19a606659163The Android Open Source Project if (hAPConnection == NULL) /* Failed to allocate control block */ 169664064216a8433360745f69edddce19a606659163The Android Open Source Project { 169764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("FATAL ERROR: apConn_create(): Error allocating cb - aborting\n")); 169864064216a8433360745f69edddce19a606659163The Android Open Source Project return; 169964064216a8433360745f69edddce19a606659163The Android Open Source Project } 170064064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 170164064216a8433360745f69edddce19a606659163The Android Open Source Project 170264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_HAND_OVER, pAPConnection); 170364064216a8433360745f69edddce19a606659163The Android Open Source Project} 170464064216a8433360745f69edddce19a606659163The Android Open Source Project 170564064216a8433360745f69edddce19a606659163The Android Open Source Project 170664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 170764064216a8433360745f69edddce19a606659163The Android Open Source Project* 170864064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_DisconnCompleteInd 170964064216a8433360745f69edddce19a606659163The Android Open Source Project* 171064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 171164064216a8433360745f69edddce19a606659163The Android Open Source Project* 171264064216a8433360745f69edddce19a606659163The Android Open Source Project* DISASSOCIATE Packet was sent - proceed with stopping the module 171364064216a8433360745f69edddce19a606659163The Android Open Source Project* 171464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 171564064216a8433360745f69edddce19a606659163The Android Open Source Project* 171664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context\n 171764064216a8433360745f69edddce19a606659163The Android Open Source Project* 171864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 171964064216a8433360745f69edddce19a606659163The Android Open Source Project* 172064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 172164064216a8433360745f69edddce19a606659163The Android Open Source Project* 172264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 172364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 172464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_DisconnCompleteInd(TI_HANDLE hAPConnection, mgmtStatus_e status, UINT32 uStatusCode) 172564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 172664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 172764064216a8433360745f69edddce19a606659163The Android Open Source Project 172864064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hAPConnection); 172964064216a8433360745f69edddce19a606659163The Android Open Source Project 173064064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_OK, pAPConnection); 173164064216a8433360745f69edddce19a606659163The Android Open Source Project 173264064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 173364064216a8433360745f69edddce19a606659163The Android Open Source Project} 173464064216a8433360745f69edddce19a606659163The Android Open Source Project 173564064216a8433360745f69edddce19a606659163The Android Open Source Project 173664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 173764064216a8433360745f69edddce19a606659163The Android Open Source Project* 173864064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_updateNeighborAPsList 173964064216a8433360745f69edddce19a606659163The Android Open Source Project* 174064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 174164064216a8433360745f69edddce19a606659163The Android Open Source Project* 174264064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by EXC Manager when Priority APs are found 174364064216a8433360745f69edddce19a606659163The Android Open Source Project* 174464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 174564064216a8433360745f69edddce19a606659163The Android Open Source Project* 174664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 174764064216a8433360745f69edddce19a606659163The Android Open Source Project* 174864064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 174964064216a8433360745f69edddce19a606659163The Android Open Source Project* 175064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 175164064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 175264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid apConn_updateNeighborAPsList(TI_HANDLE hAPConnection, neighborAPList_t *pListOfpriorityAps) 175364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 175464064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 175564064216a8433360745f69edddce19a606659163The Android Open Source Project 175664064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->returnNeighborApsCallb != NULL ) 175764064216a8433360745f69edddce19a606659163The Android Open Source Project { 175864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->returnNeighborApsCallb(pAPConnection->hRoamMng, pListOfpriorityAps); 175964064216a8433360745f69edddce19a606659163The Android Open Source Project } 176064064216a8433360745f69edddce19a606659163The Android Open Source Project} 176164064216a8433360745f69edddce19a606659163The Android Open Source Project 176264064216a8433360745f69edddce19a606659163The Android Open Source Project 176364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 176464064216a8433360745f69edddce19a606659163The Android Open Source Project* 176564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_getRoamingStatistics 176664064216a8433360745f69edddce19a606659163The Android Open Source Project* 176764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 176864064216a8433360745f69edddce19a606659163The Android Open Source Project* 176964064216a8433360745f69edddce19a606659163The Android Open Source Project* Called from Measurement EXC sub-module when preparing TSM report to the AP. 177064064216a8433360745f69edddce19a606659163The Android Open Source Project* 177164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: AP Connection handle 177264064216a8433360745f69edddce19a606659163The Android Open Source Project* 177364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 177464064216a8433360745f69edddce19a606659163The Android Open Source Project* 177564064216a8433360745f69edddce19a606659163The Android Open Source Project* total number of successful roams 177664064216a8433360745f69edddce19a606659163The Android Open Source Project* delay of the latest successful roam 177764064216a8433360745f69edddce19a606659163The Android Open Source Project* 177864064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 177964064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 178064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid apConn_getRoamingStatistics(TI_HANDLE hAPConnection, UINT8 *roamingCount, UINT16 *roamingDelay) 178164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 178264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 178364064216a8433360745f69edddce19a606659163The Android Open Source Project 178464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get (and clear) total number of successful roams */ 178564064216a8433360745f69edddce19a606659163The Android Open Source Project *roamingCount = pAPConnection->roamingSuccesfulHandoverNum; 178664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingSuccesfulHandoverNum = 0; 178764064216a8433360745f69edddce19a606659163The Android Open Source Project 178864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get delay of the latest roam */ 178964064216a8433360745f69edddce19a606659163The Android Open Source Project *roamingDelay = pAPConnection->lastRoamingDelay; 179064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->lastRoamingDelay = 0; 179164064216a8433360745f69edddce19a606659163The Android Open Source Project} 179264064216a8433360745f69edddce19a606659163The Android Open Source Project 179364064216a8433360745f69edddce19a606659163The Android Open Source Project 179464064216a8433360745f69edddce19a606659163The Android Open Source Project 179564064216a8433360745f69edddce19a606659163The Android Open Source Project 179664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 179764064216a8433360745f69edddce19a606659163The Android Open Source Project* 179864064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_resetRoamingStatistics 179964064216a8433360745f69edddce19a606659163The Android Open Source Project* 180064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 180164064216a8433360745f69edddce19a606659163The Android Open Source Project* 180264064216a8433360745f69edddce19a606659163The Android Open Source Project* Called from Measurement EXC sub-module in order to re-start roaming statistics. 180364064216a8433360745f69edddce19a606659163The Android Open Source Project* 180464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: AP Connection handle 180564064216a8433360745f69edddce19a606659163The Android Open Source Project* 180664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 180764064216a8433360745f69edddce19a606659163The Android Open Source Project* 180864064216a8433360745f69edddce19a606659163The Android Open Source Project* total number of successful roams 180964064216a8433360745f69edddce19a606659163The Android Open Source Project* delay of the latest successful roam 181064064216a8433360745f69edddce19a606659163The Android Open Source Project* 181164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 181264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 181364064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid apConn_resetRoamingStatistics(TI_HANDLE hAPConnection) 181464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 181564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 181664064216a8433360745f69edddce19a606659163The Android Open Source Project 181764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->resetReportedRoamingStatistics = TRUE; 181864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingSuccesfulHandoverNum = 0; 181964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->lastRoamingDelay = 0; 182064064216a8433360745f69edddce19a606659163The Android Open Source Project} 182164064216a8433360745f69edddce19a606659163The Android Open Source Project 182264064216a8433360745f69edddce19a606659163The Android Open Source Project 182364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 182464064216a8433360745f69edddce19a606659163The Android Open Source Project* 182545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* apConn_stopRoamingStatistics 182645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 182745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b Description: 182845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 182945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* Called from Measurement CCX sub-module in order to stop roaming statistics. 183045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 183145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b ARGS: AP Connection handle 183245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 183345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b RETURNS: 183445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 183545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \sa 183645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*/ 183745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidtvoid apConn_stopRoamingStatistics(TI_HANDLE hAPConnection) 183845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt{ 183945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apConn_t *pAPConnection = (apConn_t *)hAPConnection; 184045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 184145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt pAPConnection->resetReportedRoamingStatistics = FALSE; 184245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt} 184345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 184445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 184545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/** 184645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 184764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_printStatistics 184864064216a8433360745f69edddce19a606659163The Android Open Source Project* 184964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 185064064216a8433360745f69edddce19a606659163The Android Open Source Project* 185164064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by Site Manager when request to print statistics is requested from CLI 185264064216a8433360745f69edddce19a606659163The Android Open Source Project* 185364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: AP Connection handle 185464064216a8433360745f69edddce19a606659163The Android Open Source Project* 185564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 185664064216a8433360745f69edddce19a606659163The Android Open Source Project* 185764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 185864064216a8433360745f69edddce19a606659163The Android Open Source Project* 185964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 186064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 186164064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid apConn_printStatistics(TI_HANDLE hAPConnection) 186264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 186364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("-------------- Roaming Statistics ---------------\n\n")); 186464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Low TX rate = %d\n", ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_LOW_TX_RATE])); 186564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Low SNR = %d\n", ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_LOW_SNR])); 186664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Low Quality = %d\n", ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_LOW_QUALITY])); 186764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- MAX TX retries = %d\n", ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_MAX_TX_RETRIES])); 186864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- BSS Loss TX = %d\n", ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_BSS_LOSS])); 186964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Switch Channel = %d\n", ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_SWITCH_CHANNEL])); 187064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- AP Disconnect = %d\n", ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_AP_DISCONNECT])); 187164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- SEC attack = %d\n", ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_SECURITY_ATTACK])); 187264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("\n")); 187345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt WLAN_OS_REPORT(("- Succesfull Total roaming = %d\n", ((apConn_t *)hAPConnection)->roamingSuccesfulHandoverTotalNum)); 187464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Unsuccesfull roaming = %d\n", ((apConn_t *)hAPConnection)->roamingFailedHandoverNum)); 187564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Giving up roaming = %d\n", ((apConn_t *)hAPConnection)->retainCurrAPNum)); 187664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Disconnect cmd from roaming manager = %d\n", ((apConn_t *)hAPConnection)->disconnectFromRoamMngrNum)); 187764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Disconnect cmd from SME = %d\n", ((apConn_t *)hAPConnection)->stopFromSmeNum)); 187864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("\n")); 187964064216a8433360745f69edddce19a606659163The Android Open Source Project} 188064064216a8433360745f69edddce19a606659163The Android Open Source Project 188164064216a8433360745f69edddce19a606659163The Android Open Source Project 188264064216a8433360745f69edddce19a606659163The Android Open Source Project 188364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 188464064216a8433360745f69edddce19a606659163The Android Open Source Project* 188564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_getVendorSpecificIE 188664064216a8433360745f69edddce19a606659163The Android Open Source Project* 188764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 188864064216a8433360745f69edddce19a606659163The Android Open Source Project* 188964064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by Association SM when request to associate is built and sent to AP; 189064064216a8433360745f69edddce19a606659163The Android Open Source Project* returns request updated with vendor specific info-element 189164064216a8433360745f69edddce19a606659163The Android Open Source Project* 189264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 189364064216a8433360745f69edddce19a606659163The Android Open Source Project* 189464064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hAPConnection - AP Connection handle\n 189564064216a8433360745f69edddce19a606659163The Android Open Source Project* O - pRequest - pointer to request buffer\n 189664064216a8433360745f69edddce19a606659163The Android Open Source Project* O - len - size of returned IE\n 189764064216a8433360745f69edddce19a606659163The Android Open Source Project* 189864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 189964064216a8433360745f69edddce19a606659163The Android Open Source Project* 190064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 190164064216a8433360745f69edddce19a606659163The Android Open Source Project* 190264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 190364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 190464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_getVendorSpecificIE(TI_HANDLE hAPConnection, UINT8 *pRequest, UINT32 *len) 190564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 190664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hAPConnection; 190764064216a8433360745f69edddce19a606659163The Android Open Source Project 190864064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->vsIElength > 0) 190964064216a8433360745f69edddce19a606659163The Android Open Source Project { 191064064216a8433360745f69edddce19a606659163The Android Open Source Project *len = pAPConnection->vsIElength; 191164064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pAPConnection->hOs, pRequest, pAPConnection->vsIEbuf, pAPConnection->vsIElength); 191264064216a8433360745f69edddce19a606659163The Android Open Source Project } 191364064216a8433360745f69edddce19a606659163The Android Open Source Project else 191464064216a8433360745f69edddce19a606659163The Android Open Source Project { 191564064216a8433360745f69edddce19a606659163The Android Open Source Project *len = 0; 191664064216a8433360745f69edddce19a606659163The Android Open Source Project } 191764064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 191864064216a8433360745f69edddce19a606659163The Android Open Source Project} 191964064216a8433360745f69edddce19a606659163The Android Open Source Project 192064064216a8433360745f69edddce19a606659163The Android Open Source Project 192164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Internal functions implementation */ 192264064216a8433360745f69edddce19a606659163The Android Open Source Project 192364064216a8433360745f69edddce19a606659163The Android Open Source Project 192464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 192564064216a8433360745f69edddce19a606659163The Android Open Source Project* 192664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_smEvent 192764064216a8433360745f69edddce19a606659163The Android Open Source Project* 192864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 192964064216a8433360745f69edddce19a606659163The Android Open Source Project* 193064064216a8433360745f69edddce19a606659163The Android Open Source Project* AP Connection state machine transition function 193164064216a8433360745f69edddce19a606659163The Android Open Source Project* 193264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 193364064216a8433360745f69edddce19a606659163The Android Open Source Project* 193464064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - currentState - current state in the state machine\n 193564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - event - specific event for the state machine\n 193664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context\n 193764064216a8433360745f69edddce19a606659163The Android Open Source Project* 193864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 193964064216a8433360745f69edddce19a606659163The Android Open Source Project* 194064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 194164064216a8433360745f69edddce19a606659163The Android Open Source Project* 194264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 194364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 194464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smEvent(apConn_smStates *currState, UINT8 event, void* data) 194564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 194664064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 194764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 nextState; 194864064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 194964064216a8433360745f69edddce19a606659163The Android Open Source Project 195064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)data; 195164064216a8433360745f69edddce19a606659163The Android Open Source Project status = fsm_GetNextState(pAPConnection->apConnSM, (UINT8)*currState, event, &nextState); 195264064216a8433360745f69edddce19a606659163The Android Open Source Project if (status == OK) 195364064216a8433360745f69edddce19a606659163The Android Open Source Project { 195464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_SM(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 195564064216a8433360745f69edddce19a606659163The Android Open Source Project ("<%s, %s> --> %s\n\n", 195664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_stateDesc[*currState], 195764064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_eventDesc[event], 195864064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_stateDesc[nextState])); 195964064216a8433360745f69edddce19a606659163The Android Open Source Project 196064064216a8433360745f69edddce19a606659163The Android Open Source Project status = fsm_Event(pAPConnection->apConnSM, (UINT8 *)currState, event, pAPConnection); 196164064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 196264064216a8433360745f69edddce19a606659163The Android Open Source Project } 196364064216a8433360745f69edddce19a606659163The Android Open Source Project else 196464064216a8433360745f69edddce19a606659163The Android Open Source Project { 196564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("apConn_smEvent, fsm_GetNextState error\n")); 196664064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 196764064216a8433360745f69edddce19a606659163The Android Open Source Project } 196864064216a8433360745f69edddce19a606659163The Android Open Source Project} 196964064216a8433360745f69edddce19a606659163The Android Open Source Project 197064064216a8433360745f69edddce19a606659163The Android Open Source Project 197164064216a8433360745f69edddce19a606659163The Android Open Source Project/** 197264064216a8433360745f69edddce19a606659163The Android Open Source Project* 197364064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_smNop - Do nothing 197464064216a8433360745f69edddce19a606659163The Android Open Source Project* 197564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 197664064216a8433360745f69edddce19a606659163The Android Open Source Project* 197764064216a8433360745f69edddce19a606659163The Android Open Source Project* Do nothing in the SM. 197864064216a8433360745f69edddce19a606659163The Android Open Source Project* 197964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 198064064216a8433360745f69edddce19a606659163The Android Open Source Project* 198164064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context \n 198264064216a8433360745f69edddce19a606659163The Android Open Source Project* 198364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 198464064216a8433360745f69edddce19a606659163The Android Open Source Project* 198564064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 198664064216a8433360745f69edddce19a606659163The Android Open Source Project* 198764064216a8433360745f69edddce19a606659163The Android Open Source Project* 198864064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 198964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smNop(void *pData) 199064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 199164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION((((apConn_t *)pData)->hReport), ROAMING_MANAGER_MODULE_LOG, ("apConn_smNop\n")); 199264064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 199364064216a8433360745f69edddce19a606659163The Android Open Source Project } 199464064216a8433360745f69edddce19a606659163The Android Open Source Project 199564064216a8433360745f69edddce19a606659163The Android Open Source Project 199664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 199764064216a8433360745f69edddce19a606659163The Android Open Source Project* 199864064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_smUnexpected - Unexpected event 199964064216a8433360745f69edddce19a606659163The Android Open Source Project* 200064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 200164064216a8433360745f69edddce19a606659163The Android Open Source Project* 200264064216a8433360745f69edddce19a606659163The Android Open Source Project* Unexpected event in the SM. 200364064216a8433360745f69edddce19a606659163The Android Open Source Project* 200464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 200564064216a8433360745f69edddce19a606659163The Android Open Source Project* 200664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context \n 200764064216a8433360745f69edddce19a606659163The Android Open Source Project* 200864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 200964064216a8433360745f69edddce19a606659163The Android Open Source Project* 201064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 201164064216a8433360745f69edddce19a606659163The Android Open Source Project* 201264064216a8433360745f69edddce19a606659163The Android Open Source Project* 201364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 201464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smUnexpected(void *pData) 201564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 201664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(((apConn_t *)pData)->hReport, ROAMING_MANAGER_MODULE_LOG, ("apConn_smUnexpected\n")); 201764064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 201864064216a8433360745f69edddce19a606659163The Android Open Source Project} 201964064216a8433360745f69edddce19a606659163The Android Open Source Project 202064064216a8433360745f69edddce19a606659163The Android Open Source Project 202164064216a8433360745f69edddce19a606659163The Android Open Source Project/** 202264064216a8433360745f69edddce19a606659163The Android Open Source Project* 202364064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_startWaitingForTriggers 202464064216a8433360745f69edddce19a606659163The Android Open Source Project* 202564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 202664064216a8433360745f69edddce19a606659163The Android Open Source Project* 202764064216a8433360745f69edddce19a606659163The Android Open Source Project* SME informs AP Connection module about successfull link establishment; start wiating for roaming triggers 202864064216a8433360745f69edddce19a606659163The Android Open Source Project* 202964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 203064064216a8433360745f69edddce19a606659163The Android Open Source Project* 203164064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context \n 203264064216a8433360745f69edddce19a606659163The Android Open Source Project* 203364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 203464064216a8433360745f69edddce19a606659163The Android Open Source Project* 203564064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 203664064216a8433360745f69edddce19a606659163The Android Open Source Project* 203764064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 203864064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 203964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_startWaitingForTriggers(void *pData) 204064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 204164064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 204264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_connStatus_t reportStatus; 204345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt paramInfoPartial_t param; 204464064216a8433360745f69edddce19a606659163The Android Open Source Project 204564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)pData; 204664064216a8433360745f69edddce19a606659163The Android Open Source Project 204764064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pAPConnection->roamingEnabled) && (pAPConnection->reportStatusCallb != NULL)) 204864064216a8433360745f69edddce19a606659163The Android Open Source Project { 204964064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = ASSOC_ASSOCIATION_RESP_PARAM; 205064064216a8433360745f69edddce19a606659163The Android Open Source Project 205145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt assoc_getParamPartial(pAPConnection->hAssoc, ¶m); 205264064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.dataBuf = (char *)(param.content.applicationConfigBuffer.buffer); 205364064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.dataBufLength = param.content.applicationConfigBuffer.bufferSize; 205464064216a8433360745f69edddce19a606659163The Android Open Source Project 205564064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.status = CONN_STATUS_CONNECTED; 205664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reportStatusCallb(pAPConnection->hRoamMng, &reportStatus); 205764064216a8433360745f69edddce19a606659163The Android Open Source Project } 205864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->firstAttempt2Roam = TRUE; 205964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamReason = ROAMING_TRIGGER_NONE; 206064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->removeKeys = TRUE; 206164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->sendDeauthPacket = TRUE; 206264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reNegotiateTSPEC = FALSE; 206364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->voiceTspecConfigured = FALSE; 206464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->videoTspecConfigured = FALSE; 206564064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 206664064216a8433360745f69edddce19a606659163The Android Open Source Project} 206764064216a8433360745f69edddce19a606659163The Android Open Source Project 206864064216a8433360745f69edddce19a606659163The Android Open Source Project 206964064216a8433360745f69edddce19a606659163The Android Open Source Project/** 207064064216a8433360745f69edddce19a606659163The Android Open Source Project* 207164064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_connectedToNewAP 207264064216a8433360745f69edddce19a606659163The Android Open Source Project* 207364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 207464064216a8433360745f69edddce19a606659163The Android Open Source Project* 207564064216a8433360745f69edddce19a606659163The Android Open Source Project* After roaming was requested, Connection SM informs AP Connection module about 207664064216a8433360745f69edddce19a606659163The Android Open Source Project* successful link re-establishment; start waiting for roaming triggers 207764064216a8433360745f69edddce19a606659163The Android Open Source Project* 207864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 207964064216a8433360745f69edddce19a606659163The Android Open Source Project* 208064064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context \n 208164064216a8433360745f69edddce19a606659163The Android Open Source Project* 208264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 208364064216a8433360745f69edddce19a606659163The Android Open Source Project* 208464064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 208564064216a8433360745f69edddce19a606659163The Android Open Source Project* 208664064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 208764064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 208864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_connectedToNewAP(void *pData) 208964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 209064064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 209164064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_connStatus_t reportStatus; 209245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt paramInfoPartial_t param; 209364064216a8433360745f69edddce19a606659163The Android Open Source Project 209464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)pData; 209564064216a8433360745f69edddce19a606659163The Android Open Source Project 209664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Configure SCR group back to connection */ 209764064216a8433360745f69edddce19a606659163The Android Open Source Project scr_setGroup (pAPConnection->hScr, SCR_GID_CONNECTED); 209864064216a8433360745f69edddce19a606659163The Android Open Source Project 209964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Erase vendor specific info-element if was defined for last AP Assoc request */ 210064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->vsIElength = 0; 210164064216a8433360745f69edddce19a606659163The Android Open Source Project 210264064216a8433360745f69edddce19a606659163The Android Open Source Project /* TBD Notify Curr BSS module about update of current AP database */ 210364064216a8433360745f69edddce19a606659163The Android Open Source Project 210464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->roamingFailedHandoverNum>0) 210564064216a8433360745f69edddce19a606659163The Android Open Source Project { 210664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingFailedHandoverNum--; 210764064216a8433360745f69edddce19a606659163The Android Open Source Project } 210864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Report Roaming Manager */ 210964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->reportStatusCallb != NULL) 211064064216a8433360745f69edddce19a606659163The Android Open Source Project { 211164064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = ASSOC_ASSOCIATION_RESP_PARAM; 211264064216a8433360745f69edddce19a606659163The Android Open Source Project 211345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt assoc_getParamPartial(pAPConnection->hAssoc, ¶m); 211464064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.dataBuf = (char *)(param.content.applicationConfigBuffer.buffer); 211564064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.dataBufLength = param.content.applicationConfigBuffer.bufferSize; 211664064216a8433360745f69edddce19a606659163The Android Open Source Project 211764064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.status = CONN_STATUS_HANDOVER_SUCCESS; 211864064216a8433360745f69edddce19a606659163The Android Open Source Project 211964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reportStatusCallb(pAPConnection->hRoamMng, &reportStatus); 212064064216a8433360745f69edddce19a606659163The Android Open Source Project } 212164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->firstAttempt2Roam = TRUE; 212264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamReason = ROAMING_TRIGGER_NONE; 212364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingSuccesfulHandoverTotalNum++; 212464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->removeKeys = TRUE; 212564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->sendDeauthPacket = TRUE; 212664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reNegotiateTSPEC = FALSE; 212764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->voiceTspecConfigured = FALSE; 212864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->videoTspecConfigured = FALSE; 212964064216a8433360745f69edddce19a606659163The Android Open Source Project 213064064216a8433360745f69edddce19a606659163The Android Open Source Project 213164064216a8433360745f69edddce19a606659163The Android Open Source Project if (!pAPConnection->resetReportedRoamingStatistics) 213264064216a8433360745f69edddce19a606659163The Android Open Source Project { 213364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingSuccesfulHandoverNum++; 213464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->lastRoamingDelay = 213564064216a8433360745f69edddce19a606659163The Android Open Source Project (UINT16)os_timeStampMs(pAPConnection->hOs) - pAPConnection->roamingStartedTimestamp; 213664064216a8433360745f69edddce19a606659163The Android Open Source Project } 213764064216a8433360745f69edddce19a606659163The Android Open Source Project else 213864064216a8433360745f69edddce19a606659163The Android Open Source Project { 213964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->resetReportedRoamingStatistics = FALSE; 214064064216a8433360745f69edddce19a606659163The Android Open Source Project } 214164064216a8433360745f69edddce19a606659163The Android Open Source Project 214264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Raise event of Roaming Completion */ 214364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 214464064216a8433360745f69edddce19a606659163The Android Open Source Project ("EvHandlerSendEvent -ROAMING_COMPLETE\n" )); 214564064216a8433360745f69edddce19a606659163The Android Open Source Project EvHandlerSendEvent(pAPConnection->hEvHandler, IPC_EVENT_ROAMING_COMPLETE, NULL, 0); 214664064216a8433360745f69edddce19a606659163The Android Open Source Project 214764064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 214864064216a8433360745f69edddce19a606659163The Android Open Source Project} 214964064216a8433360745f69edddce19a606659163The Android Open Source Project 215064064216a8433360745f69edddce19a606659163The Android Open Source Project 215164064216a8433360745f69edddce19a606659163The Android Open Source Project/** 215264064216a8433360745f69edddce19a606659163The Android Open Source Project* 215364064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_stopConnection 215464064216a8433360745f69edddce19a606659163The Android Open Source Project* 215564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 215664064216a8433360745f69edddce19a606659163The Android Open Source Project* 215764064216a8433360745f69edddce19a606659163The Android Open Source Project* Stop required before roaming was started 215864064216a8433360745f69edddce19a606659163The Android Open Source Project* 215964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 216064064216a8433360745f69edddce19a606659163The Android Open Source Project* 216164064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context\n 216264064216a8433360745f69edddce19a606659163The Android Open Source Project* 216364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 216464064216a8433360745f69edddce19a606659163The Android Open Source Project* 216564064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 216664064216a8433360745f69edddce19a606659163The Android Open Source Project* 216764064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 216864064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 216964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_stopConnection(void *pData) 217064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 217164064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 217264064216a8433360745f69edddce19a606659163The Android Open Source Project disConnType_e disConnType; 217364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)pData; 217464064216a8433360745f69edddce19a606659163The Android Open Source Project 217564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 217664064216a8433360745f69edddce19a606659163The Android Open Source Project ("apConn_stopConnection, calls conn_stop, removeKeys=%d, sendDeauthPacket=%d \n", pAPConnection->removeKeys, pAPConnection->sendDeauthPacket)); 217764064216a8433360745f69edddce19a606659163The Android Open Source Project 217864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Erase vendor specific info-element if was defined for last AP Assoc request */ 217964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->vsIElength = 0; 218064064216a8433360745f69edddce19a606659163The Android Open Source Project 218164064216a8433360745f69edddce19a606659163The Android Open Source Project /* In case AP connection was stopped by SME, and radioOn is false, meaning immidiate shutdown is required without disassoc frame */ 218264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Otherwise, ask for normal disconnection with disassoc frame */ 218364064216a8433360745f69edddce19a606659163The Android Open Source Project disConnType = (pAPConnection->sendDeauthPacket == TRUE) ? DISCONN_TYPE_DEAUTH : DISCONN_TYPE_IMMEDIATE; 218464064216a8433360745f69edddce19a606659163The Android Open Source Project 218564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Stop Connection state machine - always immediate TBD */ 218664064216a8433360745f69edddce19a606659163The Android Open Source Project conn_stop(pAPConnection->hConnSm, 218764064216a8433360745f69edddce19a606659163The Android Open Source Project disConnType, 218864064216a8433360745f69edddce19a606659163The Android Open Source Project STATUS_UNSPECIFIED, 218964064216a8433360745f69edddce19a606659163The Android Open Source Project FALSE, /* pAPConnection->removeKeys - for Roaming, do not remove the keys */ 219064064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_DisconnCompleteInd, 219164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection); 219264064216a8433360745f69edddce19a606659163The Android Open Source Project 219364064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 219464064216a8433360745f69edddce19a606659163The Android Open Source Project} 219564064216a8433360745f69edddce19a606659163The Android Open Source Project 219664064216a8433360745f69edddce19a606659163The Android Open Source Project 219764064216a8433360745f69edddce19a606659163The Android Open Source Project/** 219864064216a8433360745f69edddce19a606659163The Android Open Source Project* 219964064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_reportDisconnected 220064064216a8433360745f69edddce19a606659163The Android Open Source Project* 220164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 220264064216a8433360745f69edddce19a606659163The Android Open Source Project* 220364064216a8433360745f69edddce19a606659163The Android Open Source Project* Moving from 'Disconnecting' state to 'Idle': 220464064216a8433360745f69edddce19a606659163The Android Open Source Project* RoamMgr.status("not-connected") 220564064216a8433360745f69edddce19a606659163The Android Open Source Project* 220664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 220764064216a8433360745f69edddce19a606659163The Android Open Source Project* 220864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context\n 220964064216a8433360745f69edddce19a606659163The Android Open Source Project* 221064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 221164064216a8433360745f69edddce19a606659163The Android Open Source Project* 221264064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 221364064216a8433360745f69edddce19a606659163The Android Open Source Project* 221464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 221564064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 221664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_reportDisconnected(void *pData) 221764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 221864064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 221964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_connStatus_t reportStatus; 222064064216a8433360745f69edddce19a606659163The Android Open Source Project 222164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)pData; 222264064216a8433360745f69edddce19a606659163The Android Open Source Project 222364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->reportStatusCallb != NULL) 222464064216a8433360745f69edddce19a606659163The Android Open Source Project { 222564064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.status = CONN_STATUS_NOT_CONNECTED; 222664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reportStatusCallb(pAPConnection->hRoamMng, &reportStatus); 222764064216a8433360745f69edddce19a606659163The Android Open Source Project } 222864064216a8433360745f69edddce19a606659163The Android Open Source Project 222964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->firstAttempt2Roam = TRUE; 223064064216a8433360745f69edddce19a606659163The Android Open Source Project 223164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Notify SME */ 223264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_reportConnStatusToSME(pAPConnection); 223364064216a8433360745f69edddce19a606659163The Android Open Source Project 223464064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 223564064216a8433360745f69edddce19a606659163The Android Open Source Project} 223664064216a8433360745f69edddce19a606659163The Android Open Source Project 223764064216a8433360745f69edddce19a606659163The Android Open Source Project 223864064216a8433360745f69edddce19a606659163The Android Open Source Project/** 223964064216a8433360745f69edddce19a606659163The Android Open Source Project* 224064064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_retainAP 224164064216a8433360745f69edddce19a606659163The Android Open Source Project* 224264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 224364064216a8433360745f69edddce19a606659163The Android Open Source Project* 224464064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager gives up on roaming. 224564064216a8433360745f69edddce19a606659163The Android Open Source Project* Moving from 'Wait for connection command' back to 'Wait for roam started. 224664064216a8433360745f69edddce19a606659163The Android Open Source Project* 224764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 224864064216a8433360745f69edddce19a606659163The Android Open Source Project* 224964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context\n 225064064216a8433360745f69edddce19a606659163The Android Open Source Project* 225164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 225264064216a8433360745f69edddce19a606659163The Android Open Source Project* 225364064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 225464064216a8433360745f69edddce19a606659163The Android Open Source Project* 225564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 225664064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 225764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_retainAP(void *data) 225864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 225964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 226064064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_connStatus_t reportStatus; 226164064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 226264064216a8433360745f69edddce19a606659163The Android Open Source Project 226364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)data; 226464064216a8433360745f69edddce19a606659163The Android Open Source Project 226564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Configure SCR group back to connection */ 226664064216a8433360745f69edddce19a606659163The Android Open Source Project scr_setGroup (pAPConnection->hScr, SCR_GID_CONNECTED); 226764064216a8433360745f69edddce19a606659163The Android Open Source Project 226864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Report Roaming Manager */ 226964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->reportStatusCallb != NULL) 227064064216a8433360745f69edddce19a606659163The Android Open Source Project { 227164064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = ASSOC_ASSOCIATION_RESP_PARAM; 227264064216a8433360745f69edddce19a606659163The Android Open Source Project 227364064216a8433360745f69edddce19a606659163The Android Open Source Project assoc_getParam(pAPConnection->hAssoc, ¶m); 227464064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.dataBuf = (char *)(param.content.applicationConfigBuffer.buffer); 227564064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.dataBufLength = param.content.applicationConfigBuffer.bufferSize; 227664064216a8433360745f69edddce19a606659163The Android Open Source Project 227764064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.status = CONN_STATUS_HANDOVER_SUCCESS; 227864064216a8433360745f69edddce19a606659163The Android Open Source Project 227964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reportStatusCallb(pAPConnection->hRoamMng, &reportStatus); 228064064216a8433360745f69edddce19a606659163The Android Open Source Project } 228164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->retainCurrAPNum++; 228264064216a8433360745f69edddce19a606659163The Android Open Source Project 228364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamReason = ROAMING_TRIGGER_NONE; 228464064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->removeKeys = TRUE; 228564064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->sendDeauthPacket = TRUE; 228664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reNegotiateTSPEC = FALSE; 228764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->voiceTspecConfigured = FALSE; 228864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->videoTspecConfigured = FALSE; 228964064216a8433360745f69edddce19a606659163The Android Open Source Project 229064064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 229164064216a8433360745f69edddce19a606659163The Android Open Source Project} 229264064216a8433360745f69edddce19a606659163The Android Open Source Project 229364064216a8433360745f69edddce19a606659163The Android Open Source Project 229464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 229564064216a8433360745f69edddce19a606659163The Android Open Source Project* 229664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_requestCCKM 229764064216a8433360745f69edddce19a606659163The Android Open Source Project* 229864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 229964064216a8433360745f69edddce19a606659163The Android Open Source Project* 230064064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager requests to roaming. 230164064216a8433360745f69edddce19a606659163The Android Open Source Project* Get CCKM (prepare hand-off). 230264064216a8433360745f69edddce19a606659163The Android Open Source Project* 230364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 230464064216a8433360745f69edddce19a606659163The Android Open Source Project* 230564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context\n 230664064216a8433360745f69edddce19a606659163The Android Open Source Project* 230764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 230864064216a8433360745f69edddce19a606659163The Android Open Source Project* 230964064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 231064064216a8433360745f69edddce19a606659163The Android Open Source Project* 231164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 231264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 231364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_requestCCKM(void *data) 231464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 231564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 231664064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 231764064216a8433360745f69edddce19a606659163The Android Open Source Project 231864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)data; 231964064216a8433360745f69edddce19a606659163The Android Open Source Project 232064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 232164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Send request to EXC module */ 232264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_calcNewTsf(pAPConnection, (UINT8 *)&(pAPConnection->newAP->lastRxTSF), pAPConnection->newAP->lastRxHostTimestamp, pAPConnection->newAP->beaconInterval); 232364064216a8433360745f69edddce19a606659163The Android Open Source Project status = excMngr_startCckm(pAPConnection->hExcMngr, &(pAPConnection->newAP->BSSID), (UINT8 *)&(pAPConnection->newAP->lastRxTSF)); 232464064216a8433360745f69edddce19a606659163The Android Open Source Project#else 232564064216a8433360745f69edddce19a606659163The Android Open Source Project status = OK; 232664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_RoamHandoffFinished(pAPConnection); 232764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 232864064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 232964064216a8433360745f69edddce19a606659163The Android Open Source Project } 233064064216a8433360745f69edddce19a606659163The Android Open Source Project 233164064216a8433360745f69edddce19a606659163The Android Open Source Project 233264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 233364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 233464064216a8433360745f69edddce19a606659163The Android Open Source Project* 233564064216a8433360745f69edddce19a606659163The Android Open Source Project* calcNewTsfTimestamp - Calculates the TSF 233664064216a8433360745f69edddce19a606659163The Android Open Source Project* 233764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 233864064216a8433360745f69edddce19a606659163The Android Open Source Project* 233964064216a8433360745f69edddce19a606659163The Android Open Source Project* Calculates the TSF according to the delta of the TSF from the last Beacon/Probe Resp and the current time. 234064064216a8433360745f69edddce19a606659163The Android Open Source Project* 234164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 234264064216a8433360745f69edddce19a606659163The Android Open Source Project* 234364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - pointer to the roamingMngr SM context \n 234464064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - tsfTimeStamp - the TSF field in the site entry of the roaming candidate AP 234564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - newSiteOsTimeStamp - the TS field in the site entry of the roaming candidate AP 234664064216a8433360745f69edddce19a606659163The Android Open Source Project* 234764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 234864064216a8433360745f69edddce19a606659163The Android Open Source Project* 234964064216a8433360745f69edddce19a606659163The Android Open Source Project* Nothing. 235064064216a8433360745f69edddce19a606659163The Android Open Source Project* 235164064216a8433360745f69edddce19a606659163The Android Open Source Project* 235264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 235364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void apConn_calcNewTsf(apConn_t *hAPConnection, UINT8 *tsfTimeStamp, UINT32 newSiteOsTimeStamp, UINT32 beaconInterval) 235464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 235564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = hAPConnection; 235664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 osTimeStamp = os_timeStampMs(pAPConnection->hOs); 235764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 deltaTimeStamp; 235864064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 tsfLsdw,tsfMsdw, newOsTimeStamp; 235964064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 remainder; 236064064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 newTsfTimestamp[TIME_STAMP_LEN]; 236164064216a8433360745f69edddce19a606659163The Android Open Source Project 236264064216a8433360745f69edddce19a606659163The Android Open Source Project /* get the delta TS between the TS of the last Beacon/ProbeResp-from the site table 236364064216a8433360745f69edddce19a606659163The Android Open Source Project and the current TS */ 236464064216a8433360745f69edddce19a606659163The Android Open Source Project deltaTimeStamp = osTimeStamp - newSiteOsTimeStamp; 236564064216a8433360745f69edddce19a606659163The Android Open Source Project tsfLsdw = *((UINT32*)&tsfTimeStamp[0]); 236664064216a8433360745f69edddce19a606659163The Android Open Source Project tsfMsdw = *((UINT32*)&tsfTimeStamp[4]); 236764064216a8433360745f69edddce19a606659163The Android Open Source Project 236864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 236964064216a8433360745f69edddce19a606659163The Android Open Source Project (" TSF time LSDW reversed=%x, TSF time MSDW reversed=%x\n", 237064064216a8433360745f69edddce19a606659163The Android Open Source Project tsfLsdw, tsfMsdw)); 237164064216a8433360745f69edddce19a606659163The Android Open Source Project 237264064216a8433360745f69edddce19a606659163The Android Open Source Project deltaTimeStamp = deltaTimeStamp*1000;/* from mSec to uSec*/ 237364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Before adding, save remainder */ 237464064216a8433360745f69edddce19a606659163The Android Open Source Project remainder = tsfTimeStamp[3] + ((deltaTimeStamp & 0xff000000) >> 24); 237564064216a8433360745f69edddce19a606659163The Android Open Source Project 237664064216a8433360745f69edddce19a606659163The Android Open Source Project /* The LS DW of the TS is the TSF taken from the last Beacon/Probe Resp 237764064216a8433360745f69edddce19a606659163The Android Open Source Project + the delta TS from the time the Beacon/Probe Resp arrive till now. */ 237864064216a8433360745f69edddce19a606659163The Android Open Source Project newOsTimeStamp = deltaTimeStamp+tsfLsdw; 237964064216a8433360745f69edddce19a606659163The Android Open Source Project 238064064216a8433360745f69edddce19a606659163The Android Open Source Project /* substracting one beacon interval */ 238164064216a8433360745f69edddce19a606659163The Android Open Source Project newOsTimeStamp -= (beaconInterval * 1024); /* im usec */ 238264064216a8433360745f69edddce19a606659163The Android Open Source Project 238364064216a8433360745f69edddce19a606659163The Android Open Source Project /* save just for debug printout */ 238464064216a8433360745f69edddce19a606659163The Android Open Source Project deltaTimeStamp +=osTimeStamp; /* uMsec */ 238564064216a8433360745f69edddce19a606659163The Android Open Source Project /* update the LSB of the TSF */ 238664064216a8433360745f69edddce19a606659163The Android Open Source Project newTsfTimestamp[0] = newOsTimeStamp & 0x000000ff; 238764064216a8433360745f69edddce19a606659163The Android Open Source Project newTsfTimestamp[1] = (newOsTimeStamp & 0x0000ff00) >> 8; 238864064216a8433360745f69edddce19a606659163The Android Open Source Project newTsfTimestamp[2] = (newOsTimeStamp & 0x00ff0000) >> 16; 238964064216a8433360745f69edddce19a606659163The Android Open Source Project newTsfTimestamp[3] = (newOsTimeStamp & 0xff000000) >> 24; 239064064216a8433360745f69edddce19a606659163The Android Open Source Project 239164064216a8433360745f69edddce19a606659163The Android Open Source Project /* increase the MSB in case of overflow */ 239264064216a8433360745f69edddce19a606659163The Android Open Source Project if (remainder > 0xff) 239364064216a8433360745f69edddce19a606659163The Android Open Source Project { 239464064216a8433360745f69edddce19a606659163The Android Open Source Project tsfMsdw++; 239564064216a8433360745f69edddce19a606659163The Android Open Source Project 239664064216a8433360745f69edddce19a606659163The Android Open Source Project } 239764064216a8433360745f69edddce19a606659163The Android Open Source Project /* update the MSB of the TSF */ 239864064216a8433360745f69edddce19a606659163The Android Open Source Project newTsfTimestamp[4] = tsfMsdw & 0x000000ff; 239964064216a8433360745f69edddce19a606659163The Android Open Source Project newTsfTimestamp[5] = (tsfMsdw & 0x0000ff00) >> 8; 240064064216a8433360745f69edddce19a606659163The Android Open Source Project newTsfTimestamp[6] = (tsfMsdw & 0x00ff0000) >> 16; 240164064216a8433360745f69edddce19a606659163The Android Open Source Project newTsfTimestamp[7] = (tsfMsdw & 0xff000000) >> 24; 240264064216a8433360745f69edddce19a606659163The Android Open Source Project 240364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 240464064216a8433360745f69edddce19a606659163The Android Open Source Project (" NEW TSF time: reversedTsfTimeStamp= 0x%x, New deltaTimeStamp= 0x%x, \n remainder=0x%x, new tsfTimeStamp=%x-%x-%x-%x-%x-%x-%x-%x\n", 240564064216a8433360745f69edddce19a606659163The Android Open Source Project newOsTimeStamp, deltaTimeStamp, remainder, 240664064216a8433360745f69edddce19a606659163The Android Open Source Project newTsfTimestamp[0], newTsfTimestamp[1], newTsfTimestamp[2], newTsfTimestamp[3], 240764064216a8433360745f69edddce19a606659163The Android Open Source Project newTsfTimestamp[4], newTsfTimestamp[5], newTsfTimestamp[6], newTsfTimestamp[7])); 240864064216a8433360745f69edddce19a606659163The Android Open Source Project 240964064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pAPConnection->hOs, tsfTimeStamp, newTsfTimestamp, TIME_STAMP_LEN); 241064064216a8433360745f69edddce19a606659163The Android Open Source Project} 241164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 241264064216a8433360745f69edddce19a606659163The Android Open Source Project 241364064216a8433360745f69edddce19a606659163The Android Open Source Project 241464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 241564064216a8433360745f69edddce19a606659163The Android Open Source Project* 241664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_invokeConnectionToNewAp 241764064216a8433360745f69edddce19a606659163The Android Open Source Project* 241864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 241964064216a8433360745f69edddce19a606659163The Android Open Source Project* 242064064216a8433360745f69edddce19a606659163The Android Open Source Project* Got CCKM (hand-off), start re-connection to another AP 242164064216a8433360745f69edddce19a606659163The Android Open Source Project* 242264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 242364064216a8433360745f69edddce19a606659163The Android Open Source Project* 242464064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context\n 242564064216a8433360745f69edddce19a606659163The Android Open Source Project* 242664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 242764064216a8433360745f69edddce19a606659163The Android Open Source Project* 242864064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 242964064216a8433360745f69edddce19a606659163The Android Open Source Project* 243064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 243164064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 243264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_invokeConnectionToNewAp(void *data) 243364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 243464064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 243564064216a8433360745f69edddce19a606659163The Android Open Source Project connType_e connType; 243645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt paramInfoPartial_t param; 243764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 staPrivacySupported, apPrivacySupported; 243864064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL renegotiateTspec = FALSE; 243964064216a8433360745f69edddce19a606659163The Android Open Source Project 244064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)data; 244164064216a8433360745f69edddce19a606659163The Android Open Source Project 244264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamingStartedTimestamp = os_timeStampMs(pAPConnection->hOs); 244364064216a8433360745f69edddce19a606659163The Android Open Source Project 244464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Check privacy compatibility */ 244564064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = RSN_ENCRYPTION_STATUS_PARAM; 244645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt rsn_getParamPartial(pAPConnection->hPrivacy, ¶m); 244764064216a8433360745f69edddce19a606659163The Android Open Source Project 244864064216a8433360745f69edddce19a606659163The Android Open Source Project staPrivacySupported = (param.content.rsnEncryptionStatus == RSN_CIPHER_NONE) ? FALSE : TRUE; 244964064216a8433360745f69edddce19a606659163The Android Open Source Project apPrivacySupported = ((pAPConnection->newAP->capabilities >> CAP_PRIVACY_SHIFT) & CAP_PRIVACY_MASK) ? TRUE : FALSE; 245064064216a8433360745f69edddce19a606659163The Android Open Source Project 245164064216a8433360745f69edddce19a606659163The Android Open Source Project if (staPrivacySupported != apPrivacySupported) 245264064216a8433360745f69edddce19a606659163The Android Open Source Project { 245364064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = RSN_MIXED_MODE; 245445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt rsn_getParamPartial(pAPConnection->hPrivacy, ¶m); 245564064216a8433360745f69edddce19a606659163The Android Open Source Project 245664064216a8433360745f69edddce19a606659163The Android Open Source Project if (apPrivacySupported || 245764064216a8433360745f69edddce19a606659163The Android Open Source Project (!param.content.rsnMixedMode && staPrivacySupported)) 245864064216a8433360745f69edddce19a606659163The Android Open Source Project { 245964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_WARNING(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 246064064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: failed privacy comparison %d vs. %d\n", __FUNCTION__, staPrivacySupported, apPrivacySupported)); 246164064216a8433360745f69edddce19a606659163The Android Open Source Project return (apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_NOT_OK, pAPConnection)); 246264064216a8433360745f69edddce19a606659163The Android Open Source Project } 246364064216a8433360745f69edddce19a606659163The Android Open Source Project } 246464064216a8433360745f69edddce19a606659163The Android Open Source Project 246564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Update data info of desired AP; in case of first attempt to roam, 246664064216a8433360745f69edddce19a606659163The Android Open Source Project store previous primary site info */ 246764064216a8433360745f69edddce19a606659163The Android Open Source Project if (siteMgr_overwritePrimarySite(pAPConnection->hSiteMgr, pAPConnection->newAP, pAPConnection->firstAttempt2Roam) != OK) 246864064216a8433360745f69edddce19a606659163The Android Open Source Project { 246964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_WARNING(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 247064064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: failed to ovewrite Primary Site\n", __FUNCTION__)); 247164064216a8433360745f69edddce19a606659163The Android Open Source Project return (apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_NOT_OK, pAPConnection)); 247264064216a8433360745f69edddce19a606659163The Android Open Source Project } 247364064216a8433360745f69edddce19a606659163The Android Open Source Project 247464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Update re-associate parameter of MLME */ 247564064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->requestType == AP_CONNECT_FAST_TO_AP) 247664064216a8433360745f69edddce19a606659163The Android Open Source Project { 247764064216a8433360745f69edddce19a606659163The Android Open Source Project connType = CONN_TYPE_ROAM; 247864064216a8433360745f69edddce19a606659163The Android Open Source Project } 247964064216a8433360745f69edddce19a606659163The Android Open Source Project else 248064064216a8433360745f69edddce19a606659163The Android Open Source Project { 248164064216a8433360745f69edddce19a606659163The Android Open Source Project connType = CONN_TYPE_FIRST_CONN; 248264064216a8433360745f69edddce19a606659163The Android Open Source Project } 248364064216a8433360745f69edddce19a606659163The Android Open Source Project 248464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 248564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Check the need in TSPEC re-negotiation */ 248664064216a8433360745f69edddce19a606659163The Android Open Source Project if ( (pAPConnection->voiceTspecConfigured || pAPConnection->videoTspecConfigured) 248764064216a8433360745f69edddce19a606659163The Android Open Source Project && pAPConnection->reNegotiateTSPEC ) 248864064216a8433360745f69edddce19a606659163The Android Open Source Project { 248964064216a8433360745f69edddce19a606659163The Android Open Source Project /* If the candidate AP is at least EXCver4 AP, try to re-negotiate TSPECs */ 249064064216a8433360745f69edddce19a606659163The Android Open Source Project if (excMngr_parseExcVer(pAPConnection->hExcMngr, 249164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->newAP->pBuffer, 249264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->newAP->bufferLength) >= 4) 249364064216a8433360745f69edddce19a606659163The Android Open Source Project { 249464064216a8433360745f69edddce19a606659163The Android Open Source Project renegotiateTspec = TRUE; 249564064216a8433360745f69edddce19a606659163The Android Open Source Project } 249664064216a8433360745f69edddce19a606659163The Android Open Source Project } 249764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 249864064216a8433360745f69edddce19a606659163The Android Open Source Project 249964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 250064064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: calls conn_start, removeKeys=%d, renegotiateTSPEC=%d\n", __FUNCTION__, 250164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->removeKeys, renegotiateTspec)); 250264064216a8433360745f69edddce19a606659163The Android Open Source Project 250364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Start Connection state machine */ 250464064216a8433360745f69edddce19a606659163The Android Open Source Project return conn_start(pAPConnection->hConnSm, 250564064216a8433360745f69edddce19a606659163The Android Open Source Project connType, 250664064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_ConnCompleteInd, 250764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection, 250864064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->removeKeys, 250964064216a8433360745f69edddce19a606659163The Android Open Source Project renegotiateTspec); 251064064216a8433360745f69edddce19a606659163The Android Open Source Project} 251164064216a8433360745f69edddce19a606659163The Android Open Source Project 251264064216a8433360745f69edddce19a606659163The Android Open Source Project 251364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 251464064216a8433360745f69edddce19a606659163The Android Open Source Project* 251564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_reportConnFail 251664064216a8433360745f69edddce19a606659163The Android Open Source Project* 251764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 251864064216a8433360745f69edddce19a606659163The Android Open Source Project* 251964064216a8433360745f69edddce19a606659163The Android Open Source Project* Got 'Failed' indication from Connection state machine - inform Roaming Manager Module 252064064216a8433360745f69edddce19a606659163The Android Open Source Project* 252164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 252264064216a8433360745f69edddce19a606659163The Android Open Source Project* 252364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context\n 252464064216a8433360745f69edddce19a606659163The Android Open Source Project* 252564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 252664064216a8433360745f69edddce19a606659163The Android Open Source Project* 252764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 252864064216a8433360745f69edddce19a606659163The Android Open Source Project* 252964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 253064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 253164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_reportConnFail(void *data) 253264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 253364064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection; 253464064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_connStatus_t reportStatus; 253545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt paramInfoPartial_t param; 253664064216a8433360745f69edddce19a606659163The Android Open Source Project 253764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection = (apConn_t *)data; 253864064216a8433360745f69edddce19a606659163The Android Open Source Project 253964064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->firstAttempt2Roam = FALSE; 254064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->resetReportedRoamingStatistics = FALSE; 254164064216a8433360745f69edddce19a606659163The Android Open Source Project 254264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Erase vendor specific info-element if was defined for last AP Assoc request */ 254364064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->vsIElength = 0; 254464064216a8433360745f69edddce19a606659163The Android Open Source Project 254564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Report to Roaming Manager */ 254664064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->reportStatusCallb != NULL) 254764064216a8433360745f69edddce19a606659163The Android Open Source Project { 254864064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = ASSOC_ASSOCIATION_RESP_PARAM; 254964064216a8433360745f69edddce19a606659163The Android Open Source Project 255045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt assoc_getParamPartial(pAPConnection->hAssoc, ¶m); 255164064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.dataBuf = (char *)(param.content.applicationConfigBuffer.buffer); 255264064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.dataBufLength = param.content.applicationConfigBuffer.bufferSize; 255364064216a8433360745f69edddce19a606659163The Android Open Source Project 255464064216a8433360745f69edddce19a606659163The Android Open Source Project reportStatus.status = CONN_STATUS_HANDOVER_FAILURE; 255564064216a8433360745f69edddce19a606659163The Android Open Source Project 255664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->reportStatusCallb(pAPConnection->hRoamMng, &reportStatus); 255764064216a8433360745f69edddce19a606659163The Android Open Source Project } 255864064216a8433360745f69edddce19a606659163The Android Open Source Project 255964064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 256064064216a8433360745f69edddce19a606659163The Android Open Source Project} 256164064216a8433360745f69edddce19a606659163The Android Open Source Project 256264064216a8433360745f69edddce19a606659163The Android Open Source Project 256364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 256464064216a8433360745f69edddce19a606659163The Android Open Source Project* 256564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_configureSCR 256664064216a8433360745f69edddce19a606659163The Android Open Source Project* 256764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 256864064216a8433360745f69edddce19a606659163The Android Open Source Project* 256964064216a8433360745f69edddce19a606659163The Android Open Source Project* Got 'Failed' indication from Connection state machine - inform Roaming Manager Module 257064064216a8433360745f69edddce19a606659163The Android Open Source Project* 257164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 257264064216a8433360745f69edddce19a606659163The Android Open Source Project* 257364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context\n 257464064216a8433360745f69edddce19a606659163The Android Open Source Project* 257564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 257664064216a8433360745f69edddce19a606659163The Android Open Source Project* 257764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 257864064216a8433360745f69edddce19a606659163The Android Open Source Project* 257964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 258064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 258164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_configureDriverBeforeRoaming(void *pData) 258264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 258364064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t*)pData; 258445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt paramInfoPartial_t param; 258564064216a8433360745f69edddce19a606659163The Android Open Source Project 258664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Configure SCR group of allowed clients according to 'Roaming' rule */ 258764064216a8433360745f69edddce19a606659163The Android Open Source Project scr_setGroup (pAPConnection->hScr, SCR_GID_ROAMING); 258864064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = QOS_MNGR_VOICE_RE_NEGOTIATE_TSPEC; 258945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt qosMngr_getParamsPatial(pAPConnection->hQos, ¶m); 259064064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->voiceTspecConfigured = param.content.TspecConfigure.voiceTspecConfigure; 259164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->videoTspecConfigured = param.content.TspecConfigure.videoTspecConfigure; 259264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->resetReportedRoamingStatistics = FALSE; 259364064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 259464064216a8433360745f69edddce19a606659163The Android Open Source Project} 259564064216a8433360745f69edddce19a606659163The Android Open Source Project 259664064216a8433360745f69edddce19a606659163The Android Open Source Project 259764064216a8433360745f69edddce19a606659163The Android Open Source Project/** 259864064216a8433360745f69edddce19a606659163The Android Open Source Project* 259964064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_swChFinished 260064064216a8433360745f69edddce19a606659163The Android Open Source Project* 260164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 260264064216a8433360745f69edddce19a606659163The Android Open Source Project* 260364064216a8433360745f69edddce19a606659163The Android Open Source Project* Switch channel completed; if there were roaming Manager triggers meanwhile, 260464064216a8433360745f69edddce19a606659163The Android Open Source Project* inform Roaming Manager Module 260564064216a8433360745f69edddce19a606659163The Android Open Source Project* 260664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 260764064216a8433360745f69edddce19a606659163The Android Open Source Project* 260864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context\n 260964064216a8433360745f69edddce19a606659163The Android Open Source Project* 261064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 261164064216a8433360745f69edddce19a606659163The Android Open Source Project* 261264064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 261364064216a8433360745f69edddce19a606659163The Android Open Source Project* 261464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 261564064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 261664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_swChFinished(void *pData) 261764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 261864064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)pData; 261964064216a8433360745f69edddce19a606659163The Android Open Source Project 262064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Inform Current BSS module */ 262164064216a8433360745f69edddce19a606659163The Android Open Source Project currBSS_restartRssiCounting(pAPConnection->hCurrBSS); 262264064216a8433360745f69edddce19a606659163The Android Open Source Project 262364064216a8433360745f69edddce19a606659163The Android Open Source Project /* If there are unreported roaming triggers of 'No AP' type, 262464064216a8433360745f69edddce19a606659163The Android Open Source Project report them now to roaming manager */ 262564064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->roamReason >= ROAMING_TRIGGER_MAX_TX_RETRIES) 262664064216a8433360745f69edddce19a606659163The Android Open Source Project { 262764064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pAPConnection->roamingEnabled == TRUE) && 262864064216a8433360745f69edddce19a606659163The Android Open Source Project (pAPConnection->roamEventCallb != NULL)) 262964064216a8433360745f69edddce19a606659163The Android Open Source Project { 263064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Report to Roaming Manager */ 263164064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamEventCallb(pAPConnection->hRoamMng, &pAPConnection->roamReason); 263264064216a8433360745f69edddce19a606659163The Android Open Source Project } 263364064216a8433360745f69edddce19a606659163The Android Open Source Project } 263464064216a8433360745f69edddce19a606659163The Android Open Source Project else 263564064216a8433360745f69edddce19a606659163The Android Open Source Project { 263664064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->roamReason = ROAMING_TRIGGER_NONE; 263764064216a8433360745f69edddce19a606659163The Android Open Source Project } 263864064216a8433360745f69edddce19a606659163The Android Open Source Project 263964064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 264064064216a8433360745f69edddce19a606659163The Android Open Source Project} 264164064216a8433360745f69edddce19a606659163The Android Open Source Project 264264064216a8433360745f69edddce19a606659163The Android Open Source Project 264364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 264464064216a8433360745f69edddce19a606659163The Android Open Source Project* 264564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_handleTspecReneg 264664064216a8433360745f69edddce19a606659163The Android Open Source Project* 264764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 264864064216a8433360745f69edddce19a606659163The Android Open Source Project* 264964064216a8433360745f69edddce19a606659163The Android Open Source Project* This function will be called when moving from CONNECTING state to 265064064216a8433360745f69edddce19a606659163The Android Open Source Project* START_TSPEC_RENEGOTIATION state. It checks if TSPEC re-negotiation was requested 265164064216a8433360745f69edddce19a606659163The Android Open Source Project* by roaming manager, if the TSPEC for voice was defined by user application, 265264064216a8433360745f69edddce19a606659163The Android Open Source Project* if the re-negotiation was performed during hand-over. 265364064216a8433360745f69edddce19a606659163The Android Open Source Project* If so, it will trigger moving to WAIT_ROAM state, otherwise it will start 265464064216a8433360745f69edddce19a606659163The Android Open Source Project* TSPEC negotiation, staying in the REESTABLISHING_VOICE state and waiting 265564064216a8433360745f69edddce19a606659163The Android Open Source Project* for results. 265664064216a8433360745f69edddce19a606659163The Android Open Source Project* 265764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 265864064216a8433360745f69edddce19a606659163The Android Open Source Project* 265964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to AP Connection context\n 266064064216a8433360745f69edddce19a606659163The Android Open Source Project* 266164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 266264064216a8433360745f69edddce19a606659163The Android Open Source Project* 266364064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 266464064216a8433360745f69edddce19a606659163The Android Open Source Project* 266564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 266664064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 266764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_handleTspecReneg (void *pData) 266864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 266964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)pData; 267064064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 267164064216a8433360745f69edddce19a606659163The Android Open Source Project 267264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->voiceTspecConfigured && pAPConnection->reNegotiateTSPEC) 267364064216a8433360745f69edddce19a606659163The Android Open Source Project { 267464064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = QOS_MNGR_VOICE_RE_NEGOTIATE_TSPEC; 267564064216a8433360745f69edddce19a606659163The Android Open Source Project qosMngr_getParams(pAPConnection->hQos, ¶m); 267664064216a8433360745f69edddce19a606659163The Android Open Source Project 267764064216a8433360745f69edddce19a606659163The Android Open Source Project if (param.content.TspecConfigure.voiceTspecConfigure == TRUE) 267864064216a8433360745f69edddce19a606659163The Android Open Source Project { 267964064216a8433360745f69edddce19a606659163The Android Open Source Project /* TSPEC is already configured, move to CONNECTED */ 268064064216a8433360745f69edddce19a606659163The Android Open Source Project return apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_OK, pAPConnection); 268164064216a8433360745f69edddce19a606659163The Android Open Source Project } 268264064216a8433360745f69edddce19a606659163The Android Open Source Project else 268364064216a8433360745f69edddce19a606659163The Android Open Source Project { 268464064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = QOS_MNGR_RESEND_TSPEC_REQUEST; 268564064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.qosRenegotiateTspecRequest.callback = (void *)apConn_qosMngrReportResultCallb; 268664064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.qosRenegotiateTspecRequest.handler = pData; 268764064216a8433360745f69edddce19a606659163The Android Open Source Project 268864064216a8433360745f69edddce19a606659163The Android Open Source Project if (qosMngr_setParams(pAPConnection->hQos, ¶m) != OK) 268964064216a8433360745f69edddce19a606659163The Android Open Source Project { 269064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Re-negotiation of TSPEC cannot be performed */ 269164064216a8433360745f69edddce19a606659163The Android Open Source Project return apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_NOT_OK, pAPConnection); 269264064216a8433360745f69edddce19a606659163The Android Open Source Project } 269364064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 269464064216a8433360745f69edddce19a606659163The Android Open Source Project } 269564064216a8433360745f69edddce19a606659163The Android Open Source Project } 269664064216a8433360745f69edddce19a606659163The Android Open Source Project else 269764064216a8433360745f69edddce19a606659163The Android Open Source Project { 269864064216a8433360745f69edddce19a606659163The Android Open Source Project /* No need to re-negotiate TSPEC, move to CONNECTED */ 269964064216a8433360745f69edddce19a606659163The Android Open Source Project return apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_OK, pAPConnection); 270064064216a8433360745f69edddce19a606659163The Android Open Source Project } 270164064216a8433360745f69edddce19a606659163The Android Open Source Project} 270264064216a8433360745f69edddce19a606659163The Android Open Source Project 270364064216a8433360745f69edddce19a606659163The Android Open Source Project 270464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 270564064216a8433360745f69edddce19a606659163The Android Open Source Project* 270664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_qosMngrReportResultCallb 270764064216a8433360745f69edddce19a606659163The Android Open Source Project* 270864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 270964064216a8433360745f69edddce19a606659163The Android Open Source Project* 271064064216a8433360745f69edddce19a606659163The Android Open Source Project* This function will be transferred to QoS manager upon request to start negotiation 271164064216a8433360745f69edddce19a606659163The Android Open Source Project* of the TSPEC for voice and signaling, and will be called when the voice TSPEC 271264064216a8433360745f69edddce19a606659163The Android Open Source Project* renegotiation is completed. The function will generate FINISHED_OK or 271364064216a8433360745f69edddce19a606659163The Android Open Source Project* FINISHED_NOK events to the state machine of AP Connection, triggering change of 271464064216a8433360745f69edddce19a606659163The Android Open Source Project* the current state. 271564064216a8433360745f69edddce19a606659163The Android Open Source Project* 271664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 271764064216a8433360745f69edddce19a606659163The Android Open Source Project* 271864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hApConn - pointer to AP Connection context\n 271964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - result - returned by Traffic admission control\n 272064064216a8433360745f69edddce19a606659163The Android Open Source Project* 272164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 272264064216a8433360745f69edddce19a606659163The Android Open Source Project* 272364064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 272464064216a8433360745f69edddce19a606659163The Android Open Source Project* 272564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 272664064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 272764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_qosMngrReportResultCallb (TI_HANDLE hApConn, trafficAdmRequestStatus_e result) 272864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 272964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_t *pAPConnection = (apConn_t *)hApConn; 273064064216a8433360745f69edddce19a606659163The Android Open Source Project 273164064216a8433360745f69edddce19a606659163The Android Open Source Project AP_CONN_VALIDATE_HANDLE(hApConn); 273264064216a8433360745f69edddce19a606659163The Android Open Source Project 273364064216a8433360745f69edddce19a606659163The Android Open Source Project if (result == STATUS_TRAFFIC_ADM_REQUEST_ACCEPT) 273464064216a8433360745f69edddce19a606659163The Android Open Source Project { 273564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_OK, pAPConnection); 273664064216a8433360745f69edddce19a606659163The Android Open Source Project } 273764064216a8433360745f69edddce19a606659163The Android Open Source Project else 273864064216a8433360745f69edddce19a606659163The Android Open Source Project { 273964064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_NOT_OK, pAPConnection); 274064064216a8433360745f69edddce19a606659163The Android Open Source Project } 274164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 274264064216a8433360745f69edddce19a606659163The Android Open Source Project} 274364064216a8433360745f69edddce19a606659163The Android Open Source Project 274464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 274564064216a8433360745f69edddce19a606659163The Android Open Source Project* 274664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_reportConnStatusToSME 274764064216a8433360745f69edddce19a606659163The Android Open Source Project* 274864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 274964064216a8433360745f69edddce19a606659163The Android Open Source Project* 275064064216a8433360745f69edddce19a606659163The Android Open Source Project* Sends report to SME regarding the connection status 275164064216a8433360745f69edddce19a606659163The Android Open Source Project* 275264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 275364064216a8433360745f69edddce19a606659163The Android Open Source Project* 275464064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pAPConnection - pointer to AP Connection context\n 275564064216a8433360745f69edddce19a606659163The Android Open Source Project* 275664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 275764064216a8433360745f69edddce19a606659163The Android Open Source Project* 275864064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 275964064216a8433360745f69edddce19a606659163The Android Open Source Project* 276064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 276164064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 276264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void apConn_reportConnStatusToSME (apConn_t *pAPConnection) 276364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 276464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, 276564064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s roamingTrigger = %d, APDisconnectStatusCode = %d, bNonRoamingDisAssocReason = %d\n", 276664064216a8433360745f69edddce19a606659163The Android Open Source Project __FUNCTION__, pAPConnection->roamReason, pAPConnection->APDisconnect.uStatusCode, 276764064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->bNonRoamingDisAssocReason)); 276864064216a8433360745f69edddce19a606659163The Android Open Source Project 276964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Check if an outside reason caused the disconnection. */ 277064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pAPConnection->bNonRoamingDisAssocReason) 277164064216a8433360745f69edddce19a606659163The Android Open Source Project { 277264064216a8433360745f69edddce19a606659163The Android Open Source Project pAPConnection->bNonRoamingDisAssocReason = FALSE; 277364064216a8433360745f69edddce19a606659163The Android Open Source Project smeSm_reportConnStatus(pAPConnection->hSme, STATUS_UNSPECIFIED, 0); 277464064216a8433360745f69edddce19a606659163The Android Open Source Project } 277564064216a8433360745f69edddce19a606659163The Android Open Source Project /* DisAssociation happened due to roaming trigger */ 277664064216a8433360745f69edddce19a606659163The Android Open Source Project else if (pAPConnection->roamReason == ROAMING_TRIGGER_AP_DISCONNECT) 277764064216a8433360745f69edddce19a606659163The Android Open Source Project { /* AP disconnect is a special case of the status delivered to SME */ 277864064216a8433360745f69edddce19a606659163The Android Open Source Project mgmtStatus_e mgmtStatus = ( pAPConnection->APDisconnect.bDeAuthenticate ? STATUS_AP_DEAUTHENTICATE : STATUS_AP_DISASSOCIATE ); 277964064216a8433360745f69edddce19a606659163The Android Open Source Project smeSm_reportConnStatus(pAPConnection->hSme, mgmtStatus, pAPConnection->APDisconnect.uStatusCode); 278064064216a8433360745f69edddce19a606659163The Android Open Source Project } 278164064216a8433360745f69edddce19a606659163The Android Open Source Project else /* Finally, just send the last roaming trigger */ 278264064216a8433360745f69edddce19a606659163The Android Open Source Project { 278364064216a8433360745f69edddce19a606659163The Android Open Source Project smeSm_reportConnStatus(pAPConnection->hSme, STATUS_ROAMING_TRIGGER, (UINT32)pAPConnection->roamReason); 278464064216a8433360745f69edddce19a606659163The Android Open Source Project } 278564064216a8433360745f69edddce19a606659163The Android Open Source Project} 278664064216a8433360745f69edddce19a606659163The Android Open Source Project 278764064216a8433360745f69edddce19a606659163The Android Open Source Project 2788