/*
* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: Declaration of the WlanDot11State class
*
*/
/*
* %version: 57 %
*/
#ifndef WLANDOT11STATE_H
#define WLANDOT11STATE_H
#include "umacinternaldefinitions.h"
#include "UmacMacActionState.h"
class WlanWsaAddKey;
class WlanElementLocator;
/**
* ?one_line_short_description.
* ?other_description_lines
*
* @lib wlanumac.lib
* @since S60 3.1
*/
class WlanDot11State : public WlanMacActionState
{
public:
/**
* Destructor.
*/
virtual ~WlanDot11State() {};
void AddDefaultBroadcastWepKeyComplete(
WlanContextImpl& aCtxImpl ) const;
// Functions from base classes
/**
* Scan all available networks.
* This SW module decides is background scan or foreground scan used
* @param aCtxImpl statemachine context
* @param aMode passive or active scan see #TScanMode
* @param aSSID Network that APs are scanned. Can be broadcast SSID.
* @param aScanRate Rate that is used in active scanning see #TRate
* @param aMinChannelTime min. time to listen beacons/probe responses on
* a channel
* @param aMaxChannelTime max. time to listen beacons/probe responses on
* a channel
* @param aSplitScan if ETrue, use split scan
* @return KErrNone = command completed successfully,
* any other = failure
*/
virtual TBool Scan(
WlanContextImpl& aCtxImpl,
TScanMode aMode,
const TSSID& aSSID,
TRate aScanRate,
SChannels& aChannels,
TUint32 aMinChannelTime,
TUint32 aMaxChannelTime,
TBool aSplitScan );
/**
* From WlanMacState.
* Stop a previously started scan process.
*
* @since S60 3.2
* @param aCtxImpl global statemachine context
* @return ETrue if a state transition occurred
* EFalse otherwise
*/
virtual TBool StopScan( WlanContextImpl& aCtxImpl );
/**
* From WlanMacState.
* Set 802.11 power mgmt mode in infrastructure networks.
* @param aCtxImpl statemachine context
* @param aPowerMode desired power mode
* @param aDisableDynamicPowerModeManagement If ETrue, disables the dynamic
* power mode management handling. Relevant only when aPowerMode
* is EPowerModePs
* @param aWakeupModeInLightPs WLAN wake-up mode in Light PS mode
* @param aListenIntervalInLightPs specifies the value of N for wake-up
* modes 2 and 3 in Light PS mode.
* @param aWakeupModeInDeepPs WLAN wake-up mode in Deep PS mode
* @param aListenIntervalInDeepPs specifies the value of N for wake-up
* modes 2 and 3 in Deep PS mode
* @return ETrue if a state transition occurred
* EFalse otherwise
*/
virtual TBool SetPowerMode(
WlanContextImpl& aCtxImpl,
TPowerMode aPowerMode,
TBool aDisableDynamicPowerModeManagement,
TWlanWakeUpInterval aWakeupModeInLightPs,
TUint8 aListenIntervalInLightPs,
TWlanWakeUpInterval aWakeupModeInDeepPs,
TUint8 aListenIntervalInDeepPs );
/**
* Enable user data from/to protcol stack
* (802.1x: pass data through after succesfull authentication)
* @param aCtxImpl statemachine context
* @return KErrNone command completed successfully
*/
virtual TBool EnableUserData(
WlanContextImpl& aCtxImpl );
/**
* Disable user data from/to protcol stack
* (802.1x: block data during authentication).
* @param aCtxImpl global state machine context
* @return KErrNone command completed successfully
* any other = failure
*/
virtual TBool DisableUserData(
WlanContextImpl& aCtxImpl );
/**
* Transmit a protocol stack frame
*
* The frame to be sent needs to be in 802.3 format
* @param aCtxImpl global state machine context
* @param aDataBuffer meta header of the frame to be transmitted
* @param aMore ETrue if another frame is also ready to be transmitted
* EFalse otherwise
*/
virtual TBool TxData(
WlanContextImpl& aCtxImpl,
TDataBuffer& aDataBuffer,
TBool aMore );
virtual void TxMgmtData(
WlanContextImpl& aCtxImpl,
TDataBuffer& aDataBuffer );
// Frame receive
virtual TAny* RequestForBuffer (
WlanContextImpl& aCtxImpl,
TUint16 aLength );
virtual void ReceivePacket(
WlanContextImpl& aCtxImpl,
WHA::TStatus aStatus,
const void* aFrame,
TUint16 aLength,
WHA::TRate aRate,
WHA::TRcpi aRcpi,
WHA::TChannelNumber aChannel,
TUint8* aBuffer,
TUint32 aFlags );
// from packet scheduler
/**
* Method called when packet has been transferred to the WLAN device
*
* @since S60 3.1
* @param aCtxImpl global state machine context
* @param aPacketId packet whose transfer is complete
* @param aMetaHeader frame meta header
*/
virtual void OnPacketTransferComplete(
WlanContextImpl& aCtxImpl,
TUint32 aPacketId,
TDataBuffer* aMetaHeader );
virtual void OnPacketSendComplete(
WlanContextImpl& aCtxImpl,
WHA::TStatus aStatus,
TUint32 aPacketId,
WHA::TRate aRate,
TUint32 aPacketQueueDelay,
TUint32 aMediaDelay,
TUint aTotalTxDelay,
TUint8 aAckFailures,
WHA::TQueueId aQueueId,
WHA::TRate aRequestedRate,
TBool aMulticastData );
/**
* Method called when Packet Scheduler's packet scheduling method
* should be called, as there exists a packet that is suitable for
* transmission.
* NOTE: if any other Packet Scheduler method is called within this
* context the result is undefined.
*
* @param aMore ETrue if another frame is also ready to be transmitted
* EFalse otherwise
*/
virtual void CallPacketSchedule(
WlanContextImpl& aCtxImpl,
TBool aMore );
/**
* Method called when packet has been flushed (removed)
* from packet scheduler
*
* @since S60 3.1
* @param aCtxImpl global state machine context
* @param aPacketId packet that was flushed
* @param aMetaHeader frame meta header
*/
virtual void OnPacketFlushEvent(
WlanContextImpl& aCtxImpl,
TUint32 aPacketId,
TDataBuffer* aMetaHeader );
virtual void OnPacketPushPossible( WlanContextImpl& aCtxImpl );
virtual void Indication(
WlanContextImpl& aCtxImpl,
WHA::TIndicationId aIndicationId,
const WHA::UIndicationParams& aIndicationParams );
/**
* Configure Tx queue parameters to WHA (adaptation) layer
*
* @param aCtxImpl statemachine context
* @param aQueueId Id of the queue to configure
* @param aCompleteManagementRequest ETrue if this request came from the
* WLAN Mgmt client and that request
* needs to be completed.
* EFalse otherwise.
* @return ETrue if a state change occurred in the state machine
* EFalse otherwise
*/
TBool ConfigureTxQueue(
WlanContextImpl& aCtxImpl,
WHA::TQueueId aQueueId,
TBool aCompleteManagementRequest = EFalse );
virtual TBool ConfigureAcParams(
WlanContextImpl& aCtxImpl );
/**
* ?member_description.
* @since Series 60 3.1
* @param aCtxImpl global statemachine context
*/
virtual TBool SetCtsToSelfMib( WlanContextImpl& aCtxImpl );
/**
* Informs lower layer about the dynamic HT configuration
* of the target/current network
* @param aCtxImpl statemachine context
* @return ETrue if a state change occurred
* EFalse otherwise
*/
virtual TBool ConfigureHtBssOperation( WlanContextImpl& aCtxImpl );
protected:
static const TUint32 KCompleteManagementRequest = 0xACDCACDC;
/**
* C++ default constructor.
*/
WlanDot11State() {};
/**
* Add/set (or replace) a broadcast WEP key,
* conditionally set it as the default key and as a pairwise key
*
* @since S60 3.1
* @param aCtxImpl statemachine context
* @param aKeyIndex Index of the key in the default key table
* @param aUseAsDefaulKey use as the default key
* @param aUseAsPairwiseKey use as the pairwise key
* @param aKeyLength Length of the key in BYTES
* @param aKey The WEP key
* @param aMac MAC address associated with the key
* @return ETrue if state transition occurred, EFalse otherwise
*/
TBool OnAddBroadcastWepKey(
WlanContextImpl& aCtxImpl,
TUint32 aKeyIndex,
TBool aUseAsDefaulKey,
TBool aUseAsPairwiseKey,
TUint32 aKeyLength,
const TUint8 aKey[KMaxWEPKeyLength],
const TMacAddress& aMac );
/**
* Set inital WLAN specific parameters.
* @param aCtxImpl statemachine context
* @param aRTSThreshold
* limit for packet size when to use RTS/CTS protocol
* @param aMaxTxMSDULifetime
* Max. time to (re-)send whole MSDU packet. (In TUs.)
* @return status of the command,
*/
static void OnConfigureUmacMib(
WlanContextImpl& aCtxImpl,
TUint16 aRTSThreshold,
TUint32 aMaxTxMSDULifetime);
/**
*
*
* @since S60 3.2
* @param aCtxImpl statemachine context
* @param
* @return ETrue if ...
*/
TBool InitNetworkConnect(
WlanContextImpl& aCtxImpl,
TUint16 aScanResponseFrameBodyLength,
const TUint8* aScanResponseFrameBody ) const;
/**
* Resolves correct transmit queue for frame
*
* @since S60 3.1
* @param aCtxImpl statemachine context
* @param aDot11MacHeader start of dot11 mac header
* @return transmit queue id to use for the packet
*/
WHA::TQueueId QueueId(
const WlanContextImpl& aCtxImpl,
const TUint8* aDot11MacHeader ) const;
/**
* Transmit dot11-deauthenticate frame.
*
* @since S60 3.1
* @param aCtxImpl global statemachine context
* @param aReason reason code of the frame
* @param aWaitIfIntTxBufNotFree if ETrue, the caller wants to wait for the
* internal Tx buffer to become free if it is not free now
* if EFalse, the caller doesn't want to wait for the internal Tx
* buffer in case it happens to be occupied
* @return ETrue if Packet Scheduler accepted the frame for transmit
* EFalse otherwise
*/
TBool TxDeauthenticate(
WlanContextImpl& aCtxImpl,
T802Dot11ManagementReasonCode aReason,
TBool aWaitIfIntTxBufNotFree = EFalse ) const;
/**
* Transmit dot11-disassociate frame.
*
* @since S60 3.1
* @param aCtxImpl global statemachine context
* @param aReason reason code of the frame
* @param aWaitIfIntTxBufNotFree if ETrue, the caller wants to wait for the
* internal Tx buffer to become free if it is not free now
* if EFalse, the caller doesn't want to wait for the internal Tx
* buffer in case it happens to be occupied
* @return ETrue if Packet Scheduler accepted the frame for transmit
* EFalse otherwise
*/
TBool TxDisassociate(
WlanContextImpl& aCtxImpl,
T802Dot11ManagementReasonCode aReason,
TBool aWaitIfIntTxBufNotFree = EFalse ) const;
/**
* Creates AES pairwise key setting context
*
* @since Series 60 3.1
* @param aCtxImpl global statemachine context
* @param aWhaAddKey reference to WHA Add Key command object
* @param aMacAddr MAC address to be associated to the key
*/
static WHA::SAesPairwiseKey* CreateAesPtkCtx(
WlanContextImpl& aCtxImpl,
WlanWsaAddKey& aWhaAddKey,
const TUint8* aData,
const TMacAddress& aMacAddr );
/**
* Creates TKIP pairwise key setting context
*
* @since Series 60 3.1
* @param aCtxImpl global statemachine context
* @param aWhaAddKey reference to WHA Add Key command object
* @param aMacAddr MAC address to be associated to the key
*/
static WHA::STkipPairwiseKey* CreateTkipPtkCtx(
WlanContextImpl& aCtxImpl,
WlanWsaAddKey& aWhaAddKey,
const TUint8* aData,
T802Dot11WepKeyId aKeyIndex,
const TMacAddress& aMacAddr );
/**
* Creates WEP pairwise key setting context
*
* @since Series 60 3.1
* @param aCtxImpl global statemachine context
* @param aWhaAddKey reference to WHA Add Key command object
* @param aMacAddr MAC address to be associated with the key
* @param aKeyLength length of the key
* @param aKey the key
*/
static WHA::SWepPairwiseKey* CreateUnicastWepKeyCtx(
WlanContextImpl& aCtxImpl,
WlanWsaAddKey& aWhaAddKey,
const TMacAddress& aMacAddr,
TUint32 aKeyLength,
const TUint8 aKey[KMaxWEPKeyLength] );
/**
* Creates WAPI pairwise key setting context
*
* @param aCtxImpl global statemachine context
* @param aWhaAddKey reference to WHA Add Key command object
* @param aData key data
* @param aKeyIndex key index
* @param aMacAddr MAC address to be associated to the key
*/
static WHA::SWapiPairwiseKey* CreateWapiPtkCtx(
WlanContextImpl& aCtxImpl,
WlanWsaAddKey& aWhaAddKey,
const TUint8* aData,
T802Dot11WepKeyId aKeyIndex,
const TMacAddress& aMacAddr );
/**
* Determines the initial transmit rate for Null Data, Qos Null
* and PS Poll templates.
* @since Series 60 3.1
* @param aCtxImpl Global statemachine context
* @return Initial transmit rate
*/
WHA::TRate InitialSpecialFrameTxRate(
const WlanContextImpl& aCtxImpl ) const;
/**
* Transfers a dot11 frame up to the client of the management interface
*
* @since Series 60 3.2
* @param aCtxImpl global statemachine context
* @param aFrame frame to be transferred
* @param aLength length of the frame
* @param aRcpi RCPI of the frame
* @param aBuffer pointer to the beginning of the Rx buffer allocated
* for the frame
*/
TBool XferDot11FrameToMgmtClient(
WlanContextImpl& aCtxImpl,
const void* aFrame,
TUint32 aLength,
const WHA::TRcpi aRcpi,
TUint8* aBuffer ) const;
virtual TBool DoErrorIndication(
WlanContextImpl& aCtxImpl,
WHA::TStatus aStatus );
virtual void OnWhaCommandResponse(
WlanContextImpl& aCtxImpl,
WHA::TCommandId aCommandId,
WHA::TStatus aStatus,
const WHA::UCommandResponseParams& aCommandResponseParams,
TUint32 aAct );
virtual TBool OnWlanWakeUpIntervalChange( WlanContextImpl& aCtxImpl );
/**
* Returns a WHA queue ID / WMM Access Category corresponding to the 802.1d
* priority given as the parameter
* @since Series 60 3.1
* @param aPriority 802.1d priority
*/
static WHA::TQueueId Queue( TUint8 aPriority );
static TBool UapsdEnabledInNetwork(
const SRxWmmIeData& aRxWmmIE );
static TBool UapsdEnabledInNetwork(
const SWmmParamElemData& aWmmParamElem );
static void EnableQos( WlanContextImpl& aCtxImpl,
TBool aUapsdEnabledInNw );
/**
* Determines if U-APSD will be used for the ACs/Tx Queues.
* This depends on whether U-APSD is supported by the AP, and if it
* is, whether WLAN Mgmt Client has requested U-APSD to be used
* for the AC.
* Also freezes the dynamic power mode management traffic override
* settings.
*
* @since S60 v3.2
* @param aCtxImpl statemachine context
*/
static void DetermineAcUapsdUsage( WlanContextImpl& aCtxImpl );
/**
* Resets the specified AC (Access Category) parameters to default values.
*
* @param aCtxImpl statemachine context
* @param aAccessCategory access category
* @param aUseAandGvalues If ETrue uses the 802.11a/g specific
* default values. Otherwise uses the 802.11b default values
*/
static void ResetAcParameters(
WlanContextImpl& aCtxImpl,
WHA::TQueueId aAccessCategory,
TBool aUseAandGvalues );
/**
* Resets the AC (Access Category) parameters of every AC to default values.
* @param aCtxImpl statemachine context
* @param aUseAandGvalues If ETrue uses the 802.11a/g specific
* default values. Otherwise uses the 802.11b default values
*/
static void ResetAcParameters(
WlanContextImpl& aCtxImpl,
TBool aUseAandGvalues = EFalse );
/**
* Checks if the AC parameters of the specified AC are valid & reasonable
* @param aCtxImpl statemachine context
* @param aAccessCategory access category
*/
static TBool AcParametersValid(
WlanContextImpl& aCtxImpl,
WHA::TQueueId aAccessCategory );
static void ParseAcParameters(
WlanContextImpl& aCtxImpl,
const SWmmParamElemData& aWmmParamElem );
/**
* Stores the Tx Rate Policy related information provided by wlan mgmt
* client
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aRatePolicy rate policy (policy objects)
* @param aQueue2RateClass Tx queue (AC) to rate policy object mapping
* @param aInitialMaxTxRate4RateClass initial max Tx rate for the
* policy objects
* @param aAutoRatePolicy auto rate policy
* @param aHtMcsPolicy HT MCS policy
*/
static void StoreTxRatePolicyInfo(
WlanContextImpl& aCtxImpl,
const TTxRatePolicy& aRatePolicy,
const TQueue2RateClass& aQueue2RateClass,
const TInitialMaxTxRate4RateClass& aInitialMaxTxRate4RateClass,
const TTxAutoRatePolicy& aAutoRatePolicy,
const THtMcsPolicy& aHtMcsPolicy );
/**
* Configures the Tx rate policies according to the information provided
* by the WLAN mgmt client
*
* @since Series 60 3.1
* @param aCtxImpl Global statemachine context
* @param aCompleteMgmtRequest If ETrue, a WLAN Mgmt client request needs
* to be completed
* If EFalse, a request doesn't need to be completed
* @return ETrue if the operation succeeded & a state change occurred
* EFalse if a fatal error occurred
*/
TBool ConfigureTxRatePolicies(
WlanContextImpl& aCtxImpl,
TBool aCompleteMgmtRequest = EFalse );
/**
* Determines whether the outgoing data frame is question is a multicast
*
* @since Series 60 3.2
* @param aDataFrameHdr ptr to the start of the data MAC frame header
* @return ETrue if the DA of the frame is a multicast address
* EFalse otherwise
*/
static TBool OutgoingMulticastDataFrame( const SDataFrameHeader* aDataFrameHdr );
/**
* Updates frame statistics after completed data frame transmit attempt
*
* @since Series 60 3.2
* @param aCtxImpl Global statemachine context
* @param aAccessCategory AC/Queue via which the frame was transmitted
* @param aStatus frame Tx status
* @param aMulticastData ETrue if the frame was a multicast
* @param aAckFailures The number of times the frame was transmitted
* without receiving an acknowledgement
* @param aMediaDelay The total time the packet spent in the WLAN device
* before transmission was completed.
* @param aTotalTxDelay The time between SendPacket and SendPacketComplete
*/
static void UpdateTxDataFrameStatistics(
WlanContextImpl& aCtxImpl,
WHA::TQueueId aAccessCategory,
WHA::TStatus aStatus,
TBool aMulticastData,
TUint aAckFailures,
TUint32 aMediaDelay,
TUint aTotalTxDelay );
/**
* Configures Tx rate policy objects, sets the policy object to use for
* every Tx Queue / QoS AC, and also sets the Initial Max Tx Rate to be
* used for the configured policy objects
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aRatePolicy rate policy (policy objects)
* @param aQueue2RateClass Tx queue (AC) to rate policy object mapping
* @param aInitialMaxTxRate4RateClass initial max Tx rate for the
* policy objects
* @param aAutoRatePolicy auto rate policy
* @param aHtMcsPolicy HT MCS policy
* @return ETrue if a state change occurred
* EFalse otherwise
*/
virtual TBool ConfigureTxRatePolicies(
WlanContextImpl& aCtxImpl,
const TTxRatePolicy& aRatePolicy,
const TQueue2RateClass& aQueue2RateClass,
const TInitialMaxTxRate4RateClass& aInitialMaxTxRate4RateClass,
const TTxAutoRatePolicy& aAutoRatePolicy,
const THtMcsPolicy& aHtMcsPolicy );
/**
* Determines if there is a meaningful diffrence between the desired 802.11
* PS Mode wake-up settings compared to the current settings
* @param aCtxImpl statemachine context
* @return ETrue a meaningful difference exists
* EFalse otherwise
*/
TBool DifferenceInPsModeWakeupSettings(
const WlanContextImpl& aCtxImpl ) const;
/**
* Informs lower layer about the HT capabilities
* of the target network
* @param aCtxImpl statemachine context
* @return ETrue if a state change occurred
* EFalse otherwise
*/
TBool ConfigureHtCapabilities(
WlanContextImpl& aCtxImpl );
/**
* Resets the HT Capabilities MIB to its default value
* @param aCtxImpl statemachine context
*/
void ResetHtCapabilitiesMib( WlanContextImpl& aCtxImpl );
/**
* Resets the HT Block Ack Configure MIB to its default value
* @param aCtxImpl statemachine context
*/
void ResetHtBlockAckConfigureMib( WlanContextImpl& aCtxImpl );
/**
* Determines if HT control field is present in received
* 802.11 management or 802.11 data frame
* @param aCtxImpl statemachine context
* @param aFrame received frame
* @param aFlags flags from WHA frame receive method
* @return ETrue if HT control field is present
* EFalse otherwise
*/
static TBool HtcFieldPresent(
WlanContextImpl& aCtxImpl,
const TAny* aFrame,
TUint32 aFlags );
private:
/**
* @param aCtxImpl statemachine context
* @param aRate TRate value
* @return ETrue mapping success, any other failure
*/
static void ResolveScanRate(
WlanContextImpl& aCtxImpl,
const TRate aRate,
WHA::TRate& aScanRate );
static TBool NetworkCapabilityInformationMet(
WlanContextImpl& aCtxImpl );
static TBool AreSupportedRatesMet( WlanContextImpl& aCtxImpl,
TBool aCheckAlsoExtendedRates );
static TBool ProcessSingleSupportedRateElement(
WlanContextImpl& aCtxImpl,
const TUint8 aApRate,
TUint32& aRateBitmask );
/**
* Sets the WHA::KMibArpIpAddressTable MIB
*
* @param aCtxImpl statemachine context
* @param aEnableFiltering If ETrue, filtering is enabled
* If EFalse, filtering is disabled
* @param aIpv4Address Address to set in the MIB. Relevant only when
* enabling filtering
* @return ETrue if a state change occurred in the state machine
* EFalse otherwise
*/
TBool SetArpIpAddressTableMib(
WlanContextImpl& aCtxImpl,
TBool aEnableFiltering,
TIpv4Address aIpv4Address );
// Functions from base classes
virtual TBool OnDot11PwrMgmtTransitRequired(
WlanContextImpl& aCtxImpl );
/**
* Indicates Consecutive Beacons Lost
* to WLAN Mgmt Client; if necessary
*
* @since S60 5.0
* @param aCtxImpl global statemachine context
*/
virtual void DoConsecutiveBeaconsLostIndication( WlanContextImpl& aCtxImpl );
virtual void DoRegainedBSSIndication( WlanContextImpl& aCtxImpl );
virtual void DoRadarIndication( WlanContextImpl& aCtxImpl );
virtual void DoRcpiIndication(
WlanContextImpl& aCtxImpl,
WHA::TRcpi aRcpi );
/**
* Indicates that the WLAN device has detected problems in the power
* save mode operation of the AP
*
* @param aCtxImpl global statemachine context
*/
virtual void DoPsModeErrorIndication( WlanContextImpl& aCtxImpl );
/**
* Add (or replace) a TKIP key
* @param aCtxImpl statemachine context
* @param aData data blob that holds TKIP parameters
* @param aLength length of the data blob
* @param aKeyIndex value for key id filed of WEP IV
* @return ETrue if state transition occurred, EFalse otherwise
*/
virtual TBool AddTkIPKey(
WlanContextImpl& aCtxImpl,
const TUint8* aData,
TUint32 aLength,
T802Dot11WepKeyId aKeyIndex,
const TMacAddress& aMacAddr );
/**
*
* Add (or replace) a multicast TKIP key.
* @param aCtxImpl statemachine context
* @param aKeyIndex Value for the key id field of WEP IV.
* @param aLength Length of the TKIP parameters.
* @param aData TKIP parameters.
* @return ETrue if state transition occurred, EFalse otherwise
*/
virtual TBool AddMulticastTKIPKey(
WlanContextImpl& aCtxImpl,
T802Dot11WepKeyId aKeyIndex,
TUint32 aLength,
const TUint8* aData );
/**
* Add (or replace) a pairwise AES key.
*
* @param aCtxImpl statemachine context
* @param aLength Length of the AES parameters.
* @param aData AES parameters.
* @return ETrue if state transition occurred, EFalse otherwise
*/
virtual TBool AddAesKey(
WlanContextImpl& aCtxImpl,
const TUint8* aData,
TUint32 aLength,
const TMacAddress& aMacAddr );
/**
* Add (or replace) an AES group key.
*
* @param aCtxImpl statemachine context
* @param aKeyIndex Value for the key id field of WEP IV.
* @param aLength Length of the AES parameters.
* @param aData AES parameters.
* @return ETrue if state transition occurred, EFalse otherwise
*/
virtual TBool AddMulticastAesKey(
WlanContextImpl& aCtxImpl,
T802Dot11WepKeyId aKeyIndex,
TUint32 aLength,
const TUint8* aData );
/**
* Add (or replace) a unicast WEP key.
* @param aCtxImpl statemachine context
* @param aMacAddr MAC address to which the WEP key corresponds to
* @param aKeyLength Length of the key in BYTES
* @param aKey The WEP key
* @return ETrue if state transition occurred, EFalse otherwise
*/
virtual TBool AddUnicastWepKey(
WlanContextImpl& aCtxImpl,
const TMacAddress& aMacAddr,
TUint32 aKeyLength,
const TUint8 aKey[KMaxWEPKeyLength]);
/**
* From MWlanUserEvent
* Add (or replace) a multicast WAPI key.
*
* @param aCtxImpl statemachine context
* @param aKeyIndex Value for the key id field of WEP IV.
* @param aLength Length of the WAPI parameters.
* @param aData WAPI parameters.
* @return ETrue if state transition occurred, EFalse otherwise
*/
virtual TBool AddMulticastWapiKey(
WlanContextImpl& aCtxImpl,
T802Dot11WepKeyId aKeyIndex,
TUint32 aLength,
const TUint8* aData );
/**
* From MWlanUserEvent
* Add (or replace) a pairwise WAPI key.
*
* @param aCtxImpl statemachine context
* @param aData data blob that holds WAPI parameters
* @param aLength length of the data blob
* @param aKeyIndex value for key id field of WEP IV
* @param aMacAddr MAC address of the peer station
* @return ETrue if state transition occurred, EFalse otherwise
*/
virtual TBool AddUnicastWapiKey(
WlanContextImpl& aCtxImpl,
const TUint8* aData,
TUint32 aLength,
T802Dot11WepKeyId aKeyIndex,
const TMacAddress& aMacAddr );
/**
* Set transmission power level.
* This has to be legal at the current region.
* @param aCtxImpl statemachine context
* @param aLevel Transmission power level in mW.
* @return KErrNone command completed successfully
* any other = failure
*/
virtual TBool SetTxPowerLevel(
WlanContextImpl& aCtxImpl,
TUint32 aLevel);
/**
* Gets last RCPI value
* @param aCtxImpl statemachine context
* @return KErrNone command completed successfully
* any other = failure
*/
virtual TBool GetLastRcpi(
WlanContextImpl& aCtxImpl );
/**
* Configures the parameters which define when BSS lost is indicated.
* The indication is sent when either one of the specified thresholds
* is exceeded.
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aBeaconLostCount beacon lost count threshold
* @aFailedTxPacketCount failed Tx packet count threshold
* @return ETrue if a state change occurred
* EFalse otherwise
*/
virtual TBool ConfigureBssLost(
WlanContextImpl& aCtxImpl,
TUint32 aBeaconLostCount,
TUint8 aFailedTxPacketCount );
/**
* Sets the Tx rate adaptation algorithm parameters
*
* @since S60 3.1
* @param aCtxImpl statemachine context
* @param aMinStepUpCheckpoint minimum and initial rate increase
* checkpoint in units of frames
* Range: [aStepDownCheckpoint,aMaxStepUpCheckpoint]
* @param aMaxStepUpCheckpoint maximum rate increase checkpoint in units
* of frames
* Range: [aStepDownCheckpoint,UCHAR_MAX]
* @param aStepUpCheckpointFactor StepUpCheckpoint is multiplied with this
* value if sending a probe frame fails
* Range: [1,aMaxStepUpCheckpoint]
* @param aStepDownCheckpoint after this many frames the need to decrease
* the rate is checked
* Range: [2,UCHAR_MAX]
* @param aMinStepUpThreshold minimum and initial StepUpThreshold
* percentage
* Range: [1,aMaxStepUpThreshold]
* @param aMaxStepUpThreshold maximum StepUpThreshold percentage
* Range: [1,100]
* @param aStepUpThresholdIncrement StepUpThreshold is incremented by this
* value if sending a probe frame fails
* Range: [0,aMaxStepUpThreshold]
* @param aStepDownThreshold if the percentage of frames which failed to
* be transmitted at the originally requested rate is at least
* aStepDownThreshold at the aStepDownCheckpoint, the rate will
* be decreased
* Range: [1,100]
* @param aDisableProbeHandling if EFalse, the rate adaptation algorithm
* handles the first frame transmitted after a rate increase in a
* special way. Otherwise the special handling is disabled
* @return ETrue if a state change occurred
* EFalse otherwise
*/
virtual TBool SetTxRateAdaptParams(
WlanContextImpl& aCtxImpl,
TUint8 aMinStepUpCheckpoint,
TUint8 aMaxStepUpCheckpoint,
TUint8 aStepUpCheckpointFactor,
TUint8 aStepDownCheckpoint,
TUint8 aMinStepUpThreshold,
TUint8 aMaxStepUpThreshold,
TUint8 aStepUpThresholdIncrement,
TUint8 aStepDownThreshold,
TBool aDisableProbeHandling );
/**
* Sets the dynamic power mode transition algorithm parameters
*
* @since S60 3.1
* @param aCtxImpl statemachine context
* @param aToLightPsTimeout time interval in microseconds after which
* transition from Active mode to Light PS mode is considered
* @param aToLightPsFrameThreshold frame count threshold used when
* considering transition from Active to Light PS mode
* @param aToActiveTimeout time interval in microseconds after which the
* frame counter used when considering transition from Light PS
* to Active mode is reset
* @param aToActiveFrameThreshold frame count threshold used when
* considering transition from Light PS to Active mode
* @param aToDeepPsTimeout time interval in microseconds after which
* transition from Light PS mode to Deep PS mode is considered
* @param aToDeepPsFrameThreshold frame count threshold used when
* considering transition from Light PS to Deep PS mode
* @param aUapsdRxFrameLengthThreshold received frame
* payload length (in bytes) threshold in U-APSD network for
* Best Effort Access Category
* @return ETrue if a state change occurred
* EFalse otherwise
*/
virtual TBool SetPowerModeManagementParameters(
WlanContextImpl& aCtxImpl,
TUint32 aToLightPsTimeout,
TUint16 aToLightPsFrameThreshold,
TUint32 aToActiveTimeout,
TUint16 aToActiveFrameThreshold,
TUint32 aToDeepPsTimeout,
TUint16 aToDeepPsFrameThreshold,
TUint16 aUapsdRxFrameLengthThreshold );
/**
* Configures dynamic power mode management traffic override
*
* The settings here become effective once using the PS mode has been
* allowed by WLAN Mgmt Client.
* When a setting below is ETrue, any amount of Rx or Tx traffic via
* the AC in question won't cause a change from PS to CAM mode once PS
* mode has been entered, and traffic via that AC won't make us to
* stay in CAM either.
* Every AC has a separate setting for U-APSD and legacy PS.
* The U-APSD setting is used if U-APSD is used for the AC in question.
* Otherwise the corresponding legacy setting is used.
*
* @since S60 3.2
* @param aCtxImpl statemachine context
* @param aStayInPsDespiteUapsdVoiceTraffic U-APSD Voice AC setting
* @param aStayInPsDespiteUapsdVideoTraffic U-APSD Video AC setting
* @param aStayInPsDespiteUapsdBestEffortTraffic U-APSD Best Effort AC
* setting
* @param aStayInPsDespiteUapsdBackgroundTraffic U-APSD Background AC
* setting
* @param aStayInPsDespiteLegacyVoiceTraffic legacy Voice AC setting
* @param aStayInPsDespiteLegacyVideoTraffic legacy Video AC setting
* @param aStayInPsDespiteLegacyBestEffortTraffic legacy Best Effort AC
* setting
* @param aStayInPsDespiteLegacyBackgroundTraffic legacy Background AC
* setting
* @return ETrue if a state change occurred
* EFalse otherwise
*/
virtual TBool ConfigurePwrModeMgmtTrafficOverride(
WlanContextImpl& aCtxImpl,
TBool aStayInPsDespiteUapsdVoiceTraffic,
TBool aStayInPsDespiteUapsdVideoTraffic,
TBool aStayInPsDespiteUapsdBestEffortTraffic,
TBool aStayInPsDespiteUapsdBackgroundTraffic,
TBool aStayInPsDespiteLegacyVoiceTraffic,
TBool aStayInPsDespiteLegacyVideoTraffic,
TBool aStayInPsDespiteLegacyBestEffortTraffic,
TBool aStayInPsDespiteLegacyBackgroundTraffic );
/**
* Gets data frame Rx & Tx statistics
*
* @since S60 v3.2
* @param aCtxImpl statemachine context
* @return ETrue if a state change occurred
* EFalse otherwise
*/
virtual TBool GetFrameStatistics( WlanContextImpl& aCtxImpl );
/**
* Configures U-APSD usage
*
* @since S60 v3.2
* @param aCtxImpl statemachine context
* @param aMaxServicePeriodLength
* @param aUapsdForVoice if ETrue the Voice AC is made both trigger and
* delivery enabled when connecting to a QoS AP
* supporting U-APSD.
* Otherwise it's made neither trigger nor delivery
* enabled
* @param aUapsdForVideo if ETrue the Video AC is made both trigger and
* delivery enabled
* when connecting to a QoS AP supporting U-APSD.
* Otherwise it's made neither trigger nor delivery
* enabled
* @param aUapsdForBestEffort if ETrue the Best Effort AC is made both
* trigger and delivery enabled when connecting
* to a QoS AP supporting U-APSD.
* Otherwise it's made neither trigger nor
* delivery enabled
* @param aUapsdForBackground if ETrue the Background AC is made both
* trigger and delivery enabled when connecting
* to a QoS AP supporting U-APSD.
* Otherwise it's made neither trigger nor
* delivery enabled
*/
virtual TBool ConfigureUapsd(
WlanContextImpl& aCtxImpl,
TMaxServicePeriodLength aMaxServicePeriodLength,
TBool aUapsdForVoice,
TBool aUapsdForVideo,
TBool aUapsdForBestEffort,
TBool aUapsdForBackground );
/**
* Get our own MAC address
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @return ETrue if a state change occurred
* EFalse otherwise
*/
virtual TBool GetMacAddress(
WlanContextImpl& aCtxImpl );
/**
* Configures ARP IP address filtering
*
* @param aCtxImpl statemachine context
* @param aEnableFiltering If ETrue, filtering is enabled
* If EFalse, filtering is disabled
* @param aIpv4Address If the target IP Address in a received ARP request
* doesn't match this address, the packet shall be discarded
* on the lower layers.
* Relevant only when enabling filtering.
* @return ETrue if a state change occurred in the state machine
* EFalse otherwise
*/
virtual TBool ConfigureArpIpAddressFiltering(
WlanContextImpl& aCtxImpl,
TBool aEnableFiltering,
TIpv4Address aIpv4Address );
/**
* Configures HT Block Ack use
*
* @param aCtxImpl statemachine context
* @param aTxBlockAckUsage Bit map defining Block Ack use in Tx direction
* @param aRxBlockAckUsage Bit map defining Block Ack use in Rx direction
* @return ETrue if a state change occurred in the state machine
* EFalse otherwise
*/
virtual TBool ConfigureHtBlockAck(
WlanContextImpl& aCtxImpl,
TUint8 aTxBlockAckUsage,
TUint8 aRxBlockAckUsage );
/**
* Configures Proprietary SNAP header.
* Valid received 802.11 Data frames containing this SNAP header
* are accepted and forwarded to the WLAN Management Client.
*
* @param aCtxImpl statemachine context
* @param
* @return ETrue if a state change occurred in the state machine
* EFalse otherwise
*/
virtual TBool ConfigureProprietarySnapHdr(
WlanContextImpl& aCtxImpl,
const TSnapHeader& aSnapHeader );
/**
* Sets the beacon lost count value
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aBeaconLostCount beacon lost count
* @return ETrue if a state change occurred
* EFalse otherwise
*/
TBool SetBeaconLostCountMib(
WlanContextImpl& aCtxImpl,
TUint32 aBeaconLostCount);
/**
* Resorts to using only a single Tx rate policy.
* This is done when the WLAN Mgmt client provides us with more rate
* classes / policies than the lower layers are able to handle
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aRatePolicy the rate policy
* @param aQueue2RateClass Tx queue to rate class mapping
*/
void ResortToSingleTxRatePolicy(
WlanContextImpl& aCtxImpl,
TTxRatePolicy& aRatePolicy,
TQueue2RateClass& aQueue2RateClass ) const;
/**
* Finalize the 802.11b/g non-autorate policy so that it contains only
* rates which are also supported by the lower layers and the current
* network
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aRatePolicy the rate policy
* @param aRateMasks intersection of 802.11b/g rates which are:
* - included in the rate class AND
* - supported by the lower layers AND
* - supported by the current network
* @param aInitialMaxTxRate4RateClass initial max Tx rate for every
* rate class
*/
void FinalizeTxRatePolicy(
WlanContextImpl& aCtxImpl,
TTxRatePolicy& aRatePolicy,
TWhaRateMasks& aRateMasks,
TInitialMaxTxRate4RateClass& aInitialMaxTxRate4RateClass ) const;
/**
* Builds a rate mask by including aRate in it if that rate has non-zero
* Tx Attempts and is supported both by the nw and by WHA layer.
* Additionally makes aTxAttempts zero if aRate is not supported either by
* the nw or by WHA layer. Otherwise keeps the aTxAttempts value intact
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aRate the rate
* @param aTxAttempts nbr of Tx attempts to make with aRate
* @param aRateMask the rate mask
*/
void HandleRate(
WlanContextImpl& aCtxImpl,
WHA::TRate aRate,
TUint8& aTxAttempts,
WHA::TRate& aRateMask ) const;
/**
* Builds a rate mask from a Rate Class and updates Tx attempts value in
* the Rate Class when necessary (see HandleRate()).
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aRateClass the rate class
* @param aRateMask the rate mask
*/
void HandleRates(
WlanContextImpl& aCtxImpl,
TTxRateClass& aRateClass,
WHA::TRate& aRateMask ) const;
/**
* Updates rate class and rate mask to contain the rates which both the
* WHA layer and the nw support
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aRatePolicy the rate policy
* @param aRateClassInd denotes the rate class within the rate policy
* @param aRateMask the rate mask
*/
void RecoverRatePolicy(
WlanContextImpl& aCtxImpl,
TTxRatePolicy& aRatePolicy,
TUint aRateClassInd,
WHA::TRate& aRateMask ) const;
/**
* Finalize the 802.11 b/g autorate policies so that they contain only
* rates which are also supported by the lower layers and the current
* network
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aRatePolicy the rate policy
* @param aAutoRatePolicy the autorate policies
*/
void FinalizeTxAutoratePolicy(
WlanContextImpl& aCtxImpl,
const TTxRatePolicy& aRatePolicy,
TTxAutoRatePolicy& aAutoRatePolicy ) const;
/**
* Modifies the rate policy configuration by adding a new special policy,
* which can be used for the transmission of certain frames, whose
* successful delivery is of special importance
*
* @param aCtxImpl statemachine context
* @param aRatePolicy the rate policy
* @param aAutoRatePolicy the autorate policies
* @param aHtMcsPolicy HT MCS policy
*/
void SpecialTxAutoratePolicy(
WlanContextImpl& aCtxImpl,
TTxRatePolicy& aRatePolicy,
TTxAutoRatePolicy& aAutoRatePolicy,
THtMcsPolicy& aHtMcsPolicy ) const;
/**
* Configures autorate policies to lower layers.
* Before that, finalizes the MCS policies so that they contain only
* MCSs which are also supported by the lower layers and the current
* network.
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aRatePolicy the rate policy
* @param aQueue2RateClass Tx queue to rate class mapping
* @param aHtMcsPolicy HT MCS policy
* @param aCompleteMgmtRequest If ETrue, a WLAN Mgmt client request needs
* to be completed
* If EFalse, a request doesn't need to be completed
*/
void ConfigureForTxAutoratePolicy(
WlanContextImpl& aCtxImpl,
const TTxRatePolicy& aRatePolicy,
const TQueue2RateClass& aQueue2RateClass,
THtMcsPolicy& aHtMcsPolicy,
TBool aCompleteMgmtRequest );
/**
* Updates - if necessary - the provided HT MCS policy to contain only
* MCSs which both the WHA layer and the nw support
*
* @param aCtxImpl statemachine context
* @param aHtMcsPolicy HT MCS policy
* @param aNbrOfMcsSets Number of MCS sets in the MCS policy
*/
void HandleHtMcsPolicy(
WlanContextImpl& aCtxImpl,
THtMcsPolicy& aHtMcsPolicy,
TUint aNbrOfMcsSets ) const;
/**
* Takes non-autorate policy into use.
*
* @since S60 v3.1
* @param aCtxImpl statemachine context
* @param aRatePolicy the rate policy
* @param aRateMasks intersection of 802.11b/g rates which are:
* - included in the rate class AND
* - supported by the lower layers AND
* - supported by the current network
* @param aQueue2RateClass Tx queue to rate class mapping
* @param aInitialMaxTxRate4RateClass initial max Tx rate for every
* rate class
* @param aCompleteMgmtRequest If ETrue, a WLAN Mgmt client request needs
* to be completed
* If EFalse, a request doesn't need to be completed
*/
TBool ConfigureForTxRatePolicy(
WlanContextImpl& aCtxImpl,
const TTxRatePolicy& aRatePolicy,
const TWhaRateMasks& aRateMasks,
const TQueue2RateClass& aQueue2RateClass,
const TInitialMaxTxRate4RateClass& initialMaxTxRate4RateClass,
TBool aCompleteMgmtRequest );
/**
* Locates and stores the HT Capabilities element data of the target nw
*
* @param aCtxImpl Statemachine context
* @param aElementLocator Initialized Element locator which can
* be used to locate information elements related to the
* target network
* @return ETrue if connecting to the target network is possible
* EFalse otherwise
*/
TBool HandleHtCapabilities(
WlanContextImpl& aCtxImpl,
WlanElementLocator& aElementLocator ) const;
/**
* Locates and stores the HT Operation element data of the target nw
*
* @param aCtxImpl Statemachine context
* @param aElementLocator Initialized Element locator which can
* be used to locate information elements related to the
* target network
* @return ETrue if connecting to the target network is possible
* EFalse otherwise
*/
TBool HandleHtOperation(
WlanContextImpl& aCtxImpl,
WlanElementLocator& aElementLocator ) const;
/**
* Locates the relevant HT related elements of the target nw and
* stores their data
*
* @param aCtxImpl Statemachine context
* @param aElementLocator Initialized Element locator which can
* be used to locate information elements related to the
* target network
* @return ETrue if connecting to the target network is possible
* EFalse otherwise
*/
TBool HandleDot11n(
WlanContextImpl& aCtxImpl,
WlanElementLocator& aElementLocator ) const;
};
#endif // WLANDOT11STATE_H