mlme.h

来自「Ralink RT61 SoftAP Driver source code. 」· C头文件 代码 · 共 587 行 · 第 1/2 页

H
587
字号
	UCHAR		Rsv1:1;
	UCHAR		MaxSPLength:2;
	UCHAR		Rsv2:1;
#else		
	UCHAR		Rsv2:1;
	UCHAR		MaxSPLength:2;		
	UCHAR		Rsv1:1;
	UCHAR		UAPSD_AC_BE:1;
	UCHAR		UAPSD_AC_BK:1;
	UCHAR		UAPSD_AC_VI:1;
	UCHAR		UAPSD_AC_VO:1;
#endif
} QBSS_STA_INFO_PARM, *PQBSS_STA_INFO_PARM;

// QBSS Info field in QAP's Beacon/ProbeRsp
typedef struct {
    UCHAR		ParamSetCount:4;
	UCHAR		Rsv:3;
	UCHAR		UAPSD:1;
} QBSS_AP_INFO_PARM, *PQBSS_AP_INFO_PARM;

// QOS Capability reported in QAP's BEACON/ProbeRsp
// QOS Capability sent out in QSTA's AssociateReq/ReAssociateReq
typedef struct PACKED {
    BOOLEAN     bValid;                     // 1: variable contains valid value
    BOOLEAN     bQAck;
    BOOLEAN     bQueueRequest;
    BOOLEAN     bTxopRequest;
//  BOOLEAN     bMoreDataAck;
    UCHAR       EdcaUpdateCount;
} QOS_CAPABILITY_PARM, *PQOS_CAPABILITY_PARM;

typedef struct _MLME_QUEUE_ELEM {
	UCHAR             Msg[MAX_LEN_OF_MLME_BUFFER];
    ULONG             Machine;
    ULONG             MsgType;
    ULONG             MsgLen;
    LARGE_INTEGER     TimeStamp;
    UCHAR             Rssi;
    UCHAR             Channel;
    BOOLEAN           Occupied;
#ifdef APCLI_SUPPORT
	USHORT            ifIndex;
#endif
} MLME_QUEUE_ELEM, *PMLME_QUEUE_ELEM;

typedef struct _MLME_QUEUE {
    ULONG             Num;
    ULONG             Head;
    ULONG             Tail;
    spinlock_t        Lock;
    MLME_QUEUE_ELEM   Entry[MAX_LEN_OF_MLME_QUEUE];
} MLME_QUEUE, *PMLME_QUEUE;

typedef VOID (*STATE_MACHINE_FUNC)(VOID *Adaptor, MLME_QUEUE_ELEM *Elem);

typedef struct _STATE_MACHINE {
    ULONG                           Base;
    ULONG                           NrState;
    ULONG                           NrMsg;
    ULONG                           CurrState;
    STATE_MACHINE_FUNC             *TransFunc;
} STATE_MACHINE, *PSTATE_MACHINE;

#ifdef APCLI_SUPPORT
// MLME AUX data structure that hold temporarliy settings during a connection attempt.
// Once this attemp succeeds, all settings will be copy to pAd->ActiveCfg.
// A connection attempt (user set OID, roaming, CCX fast roaming,..) consists of
// several steps (JOIN, AUTH, ASSOC or REASSOC) and may fail at any step. We purposely
// separate this under-trial settings away from pAd->ActiveCfg so that once
// this new attempt failed, driver can auto-recover back to the active settings.
typedef struct _MLME_AUX {
    UCHAR               BssType;
    UCHAR               Ssid[MAX_LEN_OF_SSID];
    UCHAR               SsidLen;
    UCHAR               Bssid[MAC_ADDR_LEN];
    UCHAR               AutoReconnectSsid[MAX_LEN_OF_SSID];
    UCHAR               AutoReconnectSsidLen;
    USHORT              Alg;
    UCHAR               ScanType;
    UCHAR               Channel;
    USHORT              Aid;
    USHORT              CapabilityInfo;
    USHORT              BeaconPeriod;
    USHORT              CfpMaxDuration;
    USHORT              CfpPeriod;
    USHORT              AtimWin;
    
    // Copy supported rate from desired AP's beacon. We are trying to match
    // AP's supported and extended rate settings.
    UCHAR               SupRate[MAX_LEN_OF_SUPPORTED_RATES];
    UCHAR               ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
    UCHAR               SupRateLen;
    UCHAR               ExtRateLen;

    // new for QOS
    QOS_CAPABILITY_PARM APQosCapability;    // QOS capability of the current associated AP
    EDCA_PARM           APEdcaParm;         // EDCA parameters of the current associated AP
    QBSS_LOAD_PARM      APQbssLoad;         // QBSS load of the current associated AP

    // new to keep Ralink specific feature
    ULONG               APRalinkIe;
    
    ULONG               BssIdx;
    ULONG               RoamIdx;

    BOOLEAN             CurrReqIsFromNdis;  // TRUE - then we should call NdisMSetInformationComplete()
                                            // FALSE - req is from driver itself. 
                                            // no NdisMSetInformationComplete() is required

    UCHAR               VarIELen;           // Length of next VIE include EID & Length
    UCHAR               VarIEs[MAX_VIE_LEN];

    // Record the rssi value when receive Probe Rsp.
    UCHAR               Rssi;

    struct timer_list   ProbeTimer;
    struct timer_list   ApCliAuthTimer;
    struct timer_list   ApCliAssocTimer;
} MLME_AUX, *PMLME_AUX;
#endif /* APCLI_SUPPORT */

typedef struct _MLME_DISASSOC_REQ_STRUCT{
    UCHAR     Addr[MAC_ADDR_LEN];
    USHORT    Reason;
} MLME_DISASSOC_REQ_STRUCT, *PMLME_DISASSOC_REQ_STRUCT;

typedef struct _MLME_DEAUTH_REQ_STRUCT {
    UCHAR        Addr[MAC_ADDR_LEN];
    USHORT       Reason;
} MLME_DEAUTH_REQ_STRUCT, *PMLME_DEAUTH_REQ_STRUCT;

typedef struct _MLME_SCAN_REQ_STRUCT {
    UCHAR      Bssid[MAC_ADDR_LEN];
    UCHAR      BssType;
    UCHAR      ScanType;
    UCHAR      SsidLen;
    CHAR       Ssid[MAX_LEN_OF_SSID];
} MLME_SCAN_REQ_STRUCT, *PMLME_SCAN_REQ_STRUCT;

#ifdef APCLI_SUPPORT
// assoc struct is equal to reassoc
typedef struct _MLME_ASSOC_REQ_STRUCT {
    UCHAR     Addr[MAC_ADDR_LEN];
    USHORT    CapabilityInfo;
    USHORT    ListenIntv;
    ULONG     Timeout;
} MLME_ASSOC_REQ_STRUCT, *PMLME_ASSOC_REQ_STRUCT, MLME_REASSOC_REQ_STRUCT, *PMLME_REASSOC_REQ_STRUCT;

typedef struct _MLME_AUTH_REQ_STRUCT {
    UCHAR     Addr[MAC_ADDR_LEN];
    USHORT    Alg;
    ULONG     Timeout;
} MLME_AUTH_REQ_STRUCT, *PMLME_AUTH_REQ_STRUCT;

typedef struct _MLME_JOIN_REQ_STRUCT {
    UCHAR     Bssid[MAC_ADDR_LEN];
    UCHAR     SsidLen;
    CHAR      Ssid[MAX_LEN_OF_SSID];
} MLME_JOIN_REQ_STRUCT;

typedef struct _APCLI_CTRL_JOIN_REQ_STRUCT {
    USHORT    Status;
} STA_CTRL_MSG_STRUCT, *PSTA_CTRL_MSG_STRUCT;

#endif /* APCLI_SUPPORT */

typedef struct {
    UCHAR   Eid;
    UCHAR   Len;
    CHAR   Octet[1];
} EID_STRUCT,*PEID_STRUCT;

// New for WPA cipher suite 
typedef	struct	_RSN_EID_STRUCT	{
	UCHAR	Eid;
	UCHAR	Length;
	UCHAR	Oui[4];
	USHORT	Version;
	UCHAR	Multicast[4];
	USHORT	Count;
	struct	{
		UCHAR	Oui[4];
	}	Unicast[1];
}	RSN_EID_STRUCT, *PRSN_EID_STRUCT;

typedef struct _MLME_DLS_REQ_STRUCT {
    UCHAR		Addr[MAC_ADDR_LEN];
    USHORT		Reason;
} MLME_DLS_REQ_STRUCT, *PMLME_DLS_REQ_STRUCT;

// value domain of pMacEntry->AuthState
typedef enum _AuthState {
    AS_NOT_AUTH,
    AS_AUTH_OPEN,       // STA has been authenticated using OPEN SYSTEM
    AS_AUTH_KEY,        // STA has been authenticated using SHARED KEY
    AS_AUTHENTICATING   // STA is waiting for AUTH seq#3 using SHARED KEY
} AUTH_STATE;

//for-wpa value domain of pMacEntry->WpaState  802.1i D3   p.114
typedef enum _WpaState {
	AS_NOTUSE,		//0
	AS_DISCONNECT,		//   1
	AS_DISCONNECTED,		// 2
	AS_INITIALIZE,	// 3
	AS_AUTHENTICATION,
	AS_AUTHENTICATION2,  // 5
	AS_INITPMK,	// 6
	AS_INITPSK,		// 7
	AS_PTKSTART,	// 8
	AS_PTKINIT_NEGOTIATING,	// 9
	AS_PTKINITDONE,	// 10
	AS_UPDATEKEYS,
	AS_INTEGRITY_FAILURE,
	AS_KEYUPDATE,
} WPA_STATE;

// For supplicant state machine states. 802.11i Draft 4.1, p. 97
// We simplified it
typedef enum    _SsWpaState
{
    SS_NOTUSE,              // 0
    SS_START,               // 1
    SS_WAIT_MSG_3,          // 2
    SS_WAIT_GROUP,          // 3
    SS_FINISH,              // 4
    SS_KEYUPDATE,           // 5
}   SS_WPA_STATE;

typedef struct {
    UCHAR  Bssid[MAC_ADDR_LEN];
    UCHAR   Channel;
    UCHAR   BssType;
    USHORT  AtimWin;
    USHORT  BeaconPeriod;

    UCHAR   SupRate[MAX_LEN_OF_SUPPORTED_RATES];
    UCHAR   SupRateLen;
    UCHAR   ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
    UCHAR   ExtRateLen;
    UCHAR   Rssi;
    UCHAR   Privacy;            // Indicate security function ON/OFF. Don't mess up with auth mode.
    UCHAR   Hidden;

    USHORT  DtimPeriod;
    USHORT  CapabilityInfo;

    USHORT  CfpCount;
    USHORT  CfpPeriod;
    USHORT  CfpMaxDuration;
    USHORT  CfpDurRemaining;
    UCHAR   SsidLen;
    CHAR    Ssid[MAX_LEN_OF_SSID];
    
    ULONG   LastBeaconRxTime; // OS's timestamp

    // New for WPA2
    CIPHER_SUITE         WPA;
    CIPHER_SUITE         WPA2;

    // New for microsoft WPA support
    NDIS_802_11_FIXED_IEs   FixIEs;
    NDIS_802_11_AUTHENTICATION_MODE	AuthModeAux;	// Addition mode for WPA2 / WPA capable AP
    NDIS_802_11_AUTHENTICATION_MODE	AuthMode;
	NDIS_802_11_WEP_STATUS	WepStatus;				// Unicast Encryption Algorithm extract from VAR_IE
    UCHAR                   VarIELen;               // Length of next VIE include EID & Length
    UCHAR                   VarIEs[MAX_VIE_LEN];

	// CCX Ckip information
    UCHAR   CkipFlag;

	// CCX 2 TSF
	UCHAR	PTSF[4];		// Parent TSF
	UCHAR	TTSF[8];		// Target TSF

    // 802.11e d9, and WMM
	EDCA_PARM           EdcaParm;
	QOS_CAPABILITY_PARM QosCapability;
	QBSS_LOAD_PARM      QbssLoad;
} BSS_ENTRY, *PBSS_ENTRY;

typedef struct {
    UCHAR           BssNr;
    BSS_ENTRY       *BssEntry; //[MAX_LEN_OF_BSS_TABLE];
} BSS_TABLE, *PBSS_TABLE;

#define DEFAULT_DTIM_PERIOD     1

#define MAC_TABLE_AGEOUT_TIME            300		// unit: sec
#define MAC_TABLE_ASSOC_TIMEOUT          5			// unit: sec

#endif	// MLME_H__

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?