/*
 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
 * All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 *
 * File: 80211mgr.h
 *
 * Purpose: 802.11 management frames pre-defines.
 *
 *
 * Author: Lyndon Chen
 *
 * Date: May 8, 2002
 *
 */

#ifndef __80211MGR_H__
#define __80211MGR_H__

#include "ttype.h"
#include "80211hdr.h"

/*---------------------  Export Definitions -------------------------*/

#define WLAN_MIN_ARRAY          1

// Information Element ID value
#define WLAN_EID_SSID           0
#define WLAN_EID_SUPP_RATES     1
#define WLAN_EID_FH_PARMS       2
#define WLAN_EID_DS_PARMS       3
#define WLAN_EID_CF_PARMS       4
#define WLAN_EID_TIM            5
#define WLAN_EID_IBSS_PARMS     6
#define WLAN_EID_COUNTRY        7
#define WLAN_EID_CHALLENGE      16
#define WLAN_EID_PWR_CONSTRAINT 32
#define WLAN_EID_PWR_CAPABILITY 33
#define WLAN_EID_TPC_REQ        34
#define WLAN_EID_TPC_REP        35
#define WLAN_EID_SUPP_CH        36
#define WLAN_EID_CH_SWITCH      37
#define WLAN_EID_MEASURE_REQ    38
#define WLAN_EID_MEASURE_REP    39
#define WLAN_EID_QUIET          40
#define WLAN_EID_IBSS_DFS       41
#define WLAN_EID_ERP            42
// reference 802.11i 7.3.2 table 20
#define WLAN_EID_RSN            48
#define WLAN_EID_EXTSUPP_RATES  50
// reference WiFi WPA spec.
#define WLAN_EID_RSN_WPA        221

#ifdef Cisco_ccx
#define WLAN_EID_CCX        133
#define WLAN_EID_CCX_IP        149
#define WLAN_EID_CCX_Ver        221
#endif

#define WLAN_EID_ERP_NONERP_PRESENT             0x01
#define WLAN_EID_ERP_USE_PROTECTION             0x02
#define WLAN_EID_ERP_BARKER_MODE                0x04

// Reason Codes
#define WLAN_MGMT_REASON_RSVD                       0
#define WLAN_MGMT_REASON_UNSPEC                     1
#define WLAN_MGMT_REASON_PRIOR_AUTH_INVALID         2
#define WLAN_MGMT_REASON_DEAUTH_LEAVING             3
#define WLAN_MGMT_REASON_DISASSOC_INACTIVE          4
#define WLAN_MGMT_REASON_DISASSOC_AP_BUSY           5
#define WLAN_MGMT_REASON_CLASS2_NONAUTH             6
#define WLAN_MGMT_REASON_CLASS3_NONASSOC            7
#define WLAN_MGMT_REASON_DISASSOC_STA_HASLEFT       8
#define WLAN_MGMT_REASON_CANT_ASSOC_NONAUTH         9
#define WLAN_MGMT_REASON_DISASSOC_PWR_CAP_UNACCEPT      10
#define WLAN_MGMT_REASON_DISASSOC_SUPP_CH_UNACCEPT      11
#define WLAN_MGMT_REASON_INVALID_IE                 13
#define WLAN_MGMT_REASON_MIC_FAILURE                14
#define WLAN_MGMT_REASON_4WAY_HANDSHAKE_TIMEOUT     15
#define WLAN_MGMT_REASON_GRPKEY_UPDATE_TIMEOUT      16
#define WLAN_MGMT_REASON_4WAY_INFO_DIFFERENT        17
#define WLAN_MGMT_REASON_MULTCAST_CIPHER_INVALID    18
#define WLAN_MGMT_REASON_UNCAST_CIPHER_INVALID      19
#define WLAN_MGMT_REASON_AKMP_INVALID               20
#define WLAN_MGMT_REASON_RSNE_UNSUPPORTED           21
#define WLAN_MGMT_REASON_RSNE_CAP_INVALID           22
#define WLAN_MGMT_REASON_80211X_AUTH_FAILED         23

// Status Codes
#define WLAN_MGMT_STATUS_SUCCESS                        0
#define WLAN_MGMT_STATUS_UNSPEC_FAILURE                 1
#define WLAN_MGMT_STATUS_CAPS_UNSUPPORTED               10
#define WLAN_MGMT_STATUS_REASSOC_NO_ASSOC               11
#define WLAN_MGMT_STATUS_ASSOC_DENIED_UNSPEC            12
#define WLAN_MGMT_STATUS_UNSUPPORTED_AUTHALG            13
#define WLAN_MGMT_STATUS_RX_AUTH_NOSEQ                  14
#define WLAN_MGMT_STATUS_CHALLENGE_FAIL                 15
#define WLAN_MGMT_STATUS_AUTH_TIMEOUT                   16
#define WLAN_MGMT_STATUS_ASSOC_DENIED_BUSY              17
#define WLAN_MGMT_STATUS_ASSOC_DENIED_RATES             18
#define WLAN_MGMT_STATUS_ASSOC_DENIED_SHORTPREAMBLE     19
#define WLAN_MGMT_STATUS_ASSOC_DENIED_PBCC              20
#define WLAN_MGMT_STATUS_ASSOC_DENIED_AGILITY           21

// reference 802.11h 7.3.1.9
//
#define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_SPECTRUM_MNG  22
#define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_PWR_CAP       23
#define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_SUPP_CH       24
//
// reference 802.11g 7.3.1.9
//
#define WLAN_MGMT_STATUS_SHORTSLOTTIME_UNSUPPORTED      25
#define WLAN_MGMT_STATUS_DSSSOFDM_UNSUPPORTED           26
//
// reference 802.11i 7.3.1.9 table 19
//
#define WLAN_MGMT_STATUS_INVALID_IE                     40
#define WLAN_MGMT_STATUS_GROUP_CIPHER_INVALID           41
#define WLAN_MGMT_STATUS_PAIRWISE_CIPHER_INVALID        42
#define WLAN_MGMT_STATUS_AKMP_INVALID                   43
#define WLAN_MGMT_STATUS_UNSUPPORT_RSN_IE_VER           44
#define WLAN_MGMT_STATUS_INVALID_RSN_IE_CAP             45
#define WLAN_MGMT_STATUS_CIPHER_REJECT                  46



// Auth Algorithm
#define WLAN_AUTH_ALG_OPENSYSTEM                0
#define WLAN_AUTH_ALG_SHAREDKEY                 1



// Management Frame Field Offsets
// Note: Not all fields are listed because of variable lengths.
// Note: These offsets are from the start of the frame data

#define WLAN_BEACON_OFF_TS                  0
#define WLAN_BEACON_OFF_BCN_INT             8
#define WLAN_BEACON_OFF_CAPINFO             10
#define WLAN_BEACON_OFF_SSID                12

#define WLAN_DISASSOC_OFF_REASON            0

#define WLAN_ASSOCREQ_OFF_CAP_INFO          0
#define WLAN_ASSOCREQ_OFF_LISTEN_INT        2
#define WLAN_ASSOCREQ_OFF_SSID              4

#define WLAN_ASSOCRESP_OFF_CAP_INFO         0
#define WLAN_ASSOCRESP_OFF_STATUS           2
#define WLAN_ASSOCRESP_OFF_AID              4
#define WLAN_ASSOCRESP_OFF_SUPP_RATES       6

#define WLAN_REASSOCREQ_OFF_CAP_INFO        0
#define WLAN_REASSOCREQ_OFF_LISTEN_INT      2
#define WLAN_REASSOCREQ_OFF_CURR_AP         4
#define WLAN_REASSOCREQ_OFF_SSID            10

#define WLAN_REASSOCRESP_OFF_CAP_INFO       0
#define WLAN_REASSOCRESP_OFF_STATUS         2
#define WLAN_REASSOCRESP_OFF_AID            4
#define WLAN_REASSOCRESP_OFF_SUPP_RATES     6

#define WLAN_PROBEREQ_OFF_SSID              0

#define WLAN_PROBERESP_OFF_TS               0
#define WLAN_PROBERESP_OFF_BCN_INT          8
#define WLAN_PROBERESP_OFF_CAP_INFO         10
#define WLAN_PROBERESP_OFF_SSID             12

#define WLAN_AUTHEN_OFF_AUTH_ALG            0
#define WLAN_AUTHEN_OFF_AUTH_SEQ            2
#define WLAN_AUTHEN_OFF_STATUS              4
#define WLAN_AUTHEN_OFF_CHALLENGE           6

#define WLAN_DEAUTHEN_OFF_REASON            0


//
// Cipher Suite Selectors defiened in 802.11i
//
#define WLAN_11i_CSS_USE_GROUP              0
#define WLAN_11i_CSS_WEP40                  1
#define WLAN_11i_CSS_TKIP                   2
#define WLAN_11i_CSS_CCMP                   4
#define WLAN_11i_CSS_WEP104                 5
#define WLAN_11i_CSS_UNKNOWN                255

//
// Authentication and Key Management Suite Selectors defined in 802.11i
//
#define WLAN_11i_AKMSS_802_1X               1
#define WLAN_11i_AKMSS_PSK                  2
#define WLAN_11i_AKMSS_UNKNOWN              255

// Measurement type definitions reference ieee 802.11h Table 20b
#define MEASURE_TYPE_BASIC      0
#define MEASURE_TYPE_CCA        1
#define MEASURE_TYPE_RPI        2

// Measurement request mode definitions reference ieee 802.11h Figure 46h
#define MEASURE_MODE_ENABLE     0x02
#define MEASURE_MODE_REQ        0x04
#define MEASURE_MODE_REP        0x08

// Measurement report mode definitions reference ieee 802.11h Figure 46m
#define MEASURE_MODE_LATE       0x01
#define MEASURE_MODE_INCAPABLE  0x02
#define MEASURE_MODE_REFUSED    0x04

/*---------------------  Export Classes  ----------------------------*/

/*---------------------  Export Variables  --------------------------*/

/*---------------------  Export Types  ------------------------------*/

// Information Element Types

#pragma pack(1)
typedef struct tagWLAN_IE {
    BYTE   byElementID;
    BYTE   len;
} __attribute__ ((__packed__))
WLAN_IE, *PWLAN_IE;

// Service Set Identity (SSID)
#pragma pack(1)
typedef struct tagWLAN_IE_SSID {
    BYTE   byElementID;
    BYTE   len;
    BYTE   abySSID[1];
} __attribute__ ((__packed__))
WLAN_IE_SSID, *PWLAN_IE_SSID;

// Supported Rates
#pragma pack(1)
typedef struct tagWLAN_IE_SUPP_RATES {
    BYTE   byElementID;
    BYTE   len;
    BYTE   abyRates[1];
} __attribute__ ((__packed__))
WLAN_IE_SUPP_RATES,  *PWLAN_IE_SUPP_RATES;

// FH Parameter Set
#pragma pack(1)
typedef struct _WLAN_IE_FH_PARMS {
    BYTE    byElementID;
    BYTE    len;
    WORD    wDwellTime;
    BYTE    byHopSet;
    BYTE    byHopPattern;
    BYTE    byHopIndex;
} WLAN_IE_FH_PARMS,  *PWLAN_IE_FH_PARMS;

// DS Parameter Set
#pragma pack(1)
typedef struct tagWLAN_IE_DS_PARMS {
    BYTE   byElementID;
    BYTE   len;
    BYTE   byCurrChannel;
} __attribute__ ((__packed__))
WLAN_IE_DS_PARMS,  *PWLAN_IE_DS_PARMS;

// CF Parameter Set
#pragma pack(1)
typedef struct tagWLAN_IE_CF_PARMS {
    BYTE   byElementID;
    BYTE   len;
    BYTE   byCFPCount;
    BYTE   byCFPPeriod;
    WORD   wCFPMaxDuration;
    WORD   wCFPDurRemaining;
} __attribute__ ((__packed__))
WLAN_IE_CF_PARMS,  *PWLAN_IE_CF_PARMS;

// TIM
#pragma pack(1)
typedef struct tagWLAN_IE_TIM {
    BYTE   byElementID;
    BYTE   len;
    BYTE   byDTIMCount;
    BYTE   byDTIMPeriod;
    BYTE   byBitMapCtl;
    BYTE   byVirtBitMap[1];
} __attribute__ ((__packed__))
WLAN_IE_TIM,  *PWLAN_IE_TIM;

// IBSS Parameter Set
#pragma pack(1)
typedef struct tagWLAN_IE_IBSS_PARMS {
    BYTE   byElementID;
    BYTE   len;
    WORD   wATIMWindow;
} __attribute__ ((__packed__))
WLAN_IE_IBSS_PARMS, *PWLAN_IE_IBSS_PARMS;

// Challenge Text
#pragma pack(1)
typedef struct tagWLAN_IE_CHALLENGE {
    BYTE   byElementID;
    BYTE   len;
    BYTE   abyChallenge[1];
} __attribute__ ((__packed__))
WLAN_IE_CHALLENGE,  *PWLAN_IE_CHALLENGE;

#pragma pack(1)
typedef struct tagWLAN_IE_RSN_EXT {
    BYTE byElementID;
    BYTE len;
    BYTE abyOUI[4];
    WORD wVersion;
    BYTE abyMulticast[4];
    WORD wPKCount;
    struct {
        BYTE abyOUI[4];
    } PKSList[1]; // the rest is variable so need to
    // overlay ieauth structure
} WLAN_IE_RSN_EXT, *PWLAN_IE_RSN_EXT;

#pragma pack(1)
typedef struct tagWLAN_IE_RSN_AUTH {
    WORD wAuthCount;
    struct {
        BYTE abyOUI[4];
    } AuthKSList[1];
} WLAN_IE_RSN_AUTH, *PWLAN_IE_RSN_AUTH;

// RSN Identity
#pragma pack(1)
typedef struct tagWLAN_IE_RSN {
    BYTE   byElementID;
    BYTE   len;
    WORD   wVersion;
    BYTE   abyRSN[WLAN_MIN_ARRAY];
} WLAN_IE_RSN, *PWLAN_IE_RSN;


// CCX Identity DavidWang
#pragma pack(1)
typedef struct tagWLAN_IE_CCX {
BYTE   byElementID;
BYTE   len;
BYTE   abyCCX[30];
} WLAN_IE_CCX, *PWLAN_IE_CCX;
#pragma pack(1)
typedef struct tagWLAN_IE_CCX_IP {
BYTE   byElementID;
BYTE   len;
BYTE   abyCCXOUI[4];
BYTE   abyCCXIP[4];
BYTE   abyCCXREV[2];
} WLAN_IE_CCX_IP, *PWLAN_IE_CCX_IP;
#pragma pack(1)
typedef struct tagWLAN_IE_CCX_Ver {
BYTE   byElementID;
BYTE   len;
BYTE   abyCCXVer[5];
} WLAN_IE_CCX_Ver, *PWLAN_IE_CCX_Ver;



// ERP
#pragma pack(1)
typedef struct tagWLAN_IE_ERP {
    BYTE   byElementID;
    BYTE   len;
    BYTE   byContext;
} __attribute__ ((__packed__))
WLAN_IE_ERP,  *PWLAN_IE_ERP;

#pragma pack(1)
typedef struct _MEASEURE_REQ {
    BYTE                byChannel;
    BYTE                abyStartTime[8];
    BYTE                abyDuration[2];
} MEASEURE_REQ, *PMEASEURE_REQ,
  MEASEURE_REQ_BASIC, *PMEASEURE_REQ_BASIC,
  MEASEURE_REQ_CCA, *PMEASEURE_REQ_CCA,
  MEASEURE_REQ_RPI, *PMEASEURE_REQ_RPI;

typedef struct _MEASEURE_REP_BASIC {
    BYTE                byChannel;
    BYTE                abyStartTime[8];
    BYTE                abyDuration[2];
    BYTE                byMap;
} MEASEURE_REP_BASIC, *PMEASEURE_REP_BASIC;

typedef struct _MEASEURE_REP_CCA {
    BYTE                byChannel;
    BYTE                abyStartTime[8];
    BYTE                abyDuration[2];
    BYTE                byCCABusyFraction;
} MEASEURE_REP_CCA, *PMEASEURE_REP_CCA;

typedef struct _MEASEURE_REP_RPI {
    BYTE                byChannel;
    BYTE                abyStartTime[8];
    BYTE                abyDuration[2];
    BYTE                abyRPIdensity[8];
} MEASEURE_REP_RPI, *PMEASEURE_REP_RPI;

typedef union _MEASEURE_REP {

    MEASEURE_REP_BASIC  sBasic;
    MEASEURE_REP_CCA    sCCA;
    MEASEURE_REP_RPI    sRPI;

} MEASEURE_REP, *PMEASEURE_REP;

typedef struct _WLAN_IE_MEASURE_REQ {
    BYTE                byElementID;
    BYTE                len;
    BYTE                byToken;
    BYTE                byMode;
    BYTE                byType;
    MEASEURE_REQ        sReq;
} WLAN_IE_MEASURE_REQ, *PWLAN_IE_MEASURE_REQ;

typedef struct _WLAN_IE_MEASURE_REP {
    BYTE                byElementID;
    BYTE                len;
    BYTE                byToken;
    BYTE                byMode;
    BYTE                byType;
    MEASEURE_REP        sRep;
} WLAN_IE_MEASURE_REP, *PWLAN_IE_MEASURE_REP;

typedef struct _WLAN_IE_CH_SW {
    BYTE                byElementID;
    BYTE                len;
    BYTE                byMode;
    BYTE                byChannel;
    BYTE                byCount;
} WLAN_IE_CH_SW, *PWLAN_IE_CH_SW;

typedef struct _WLAN_IE_QUIET {
    BYTE                byElementID;
    BYTE                len;
    BYTE                byQuietCount;
    BYTE                byQuietPeriod;
    BYTE                abyQuietDuration[2];
    BYTE                abyQuietOffset[2];
} WLAN_IE_QUIET, *PWLAN_IE_QUIET;

typedef struct _WLAN_IE_COUNTRY {
    BYTE                byElementID;
    BYTE                len;
    BYTE                abyCountryString[3];
    BYTE                abyCountryInfo[3];
} WLAN_IE_COUNTRY, *PWLAN_IE_COUNTRY;

typedef struct _WLAN_IE_PW_CONST {
    BYTE                byElementID;
    BYTE                len;
    BYTE                byPower;
} WLAN_IE_PW_CONST, *PWLAN_IE_PW_CONST;

typedef struct _WLAN_IE_PW_CAP {
    BYTE                byElementID;
    BYTE                len;
    BYTE                byMinPower;
    BYTE                byMaxPower;
} WLAN_IE_PW_CAP, *PWLAN_IE_PW_CAP;

typedef struct _WLAN_IE_SUPP_CH {
    BYTE                byElementID;
    BYTE                len;
    BYTE                abyChannelTuple[2];
} WLAN_IE_SUPP_CH, *PWLAN_IE_SUPP_CH;

typedef struct _WLAN_IE_TPC_REQ {
    BYTE                byElementID;
    BYTE                len;
} WLAN_IE_TPC_REQ, *PWLAN_IE_TPC_REQ;

typedef struct _WLAN_IE_TPC_REP {
    BYTE                byElementID;
    BYTE                len;
    BYTE                byTxPower;
    BYTE                byLinkMargin;
} WLAN_IE_TPC_REP, *PWLAN_IE_TPC_REP;


typedef struct _WLAN_IE_IBSS_DFS {
    BYTE                byElementID;
    BYTE                len;
    BYTE                abyDFSOwner[6];
    BYTE                byDFSRecovery;
    BYTE                abyChannelMap[2];
} WLAN_IE_IBSS_DFS, *PWLAN_IE_IBSS_DFS;

#pragma pack()



// Frame Types
// prototype structure, all mgmt frame types will start with these members
typedef struct tagWLAN_FR_MGMT {

    unsigned int                  uType;
    unsigned int                  len;
    PBYTE                 pBuf;
    PUWLAN_80211HDR       pHdr;

} WLAN_FR_MGMT,  *PWLAN_FR_MGMT;

// Beacon frame
typedef struct tagWLAN_FR_BEACON {

    unsigned int                    uType;
    unsigned int                    len;
    PBYTE                   pBuf;
    PUWLAN_80211HDR         pHdr;
    // fixed fields
    PQWORD                  pqwTimestamp;
    PWORD                   pwBeaconInterval;
    PWORD                   pwCapInfo;
    /*-- info elements ----------*/
    PWLAN_IE_SSID           pSSID;
    PWLAN_IE_SUPP_RATES     pSuppRates;
//  PWLAN_IE_FH_PARMS       pFHParms;
    PWLAN_IE_DS_PARMS       pDSParms;
    PWLAN_IE_CF_PARMS       pCFParms;
    PWLAN_IE_TIM            pTIM;
    PWLAN_IE_IBSS_PARMS     pIBSSParms;
    PWLAN_IE_RSN            pRSN;
    PWLAN_IE_RSN_EXT        pRSNWPA;
    PWLAN_IE_ERP            pERP;
    PWLAN_IE_SUPP_RATES     pExtSuppRates;
    PWLAN_IE_COUNTRY        pIE_Country;
    PWLAN_IE_PW_CONST       pIE_PowerConstraint;
    PWLAN_IE_CH_SW          pIE_CHSW;
    PWLAN_IE_IBSS_DFS       pIE_IBSSDFS;
    PWLAN_IE_QUIET          pIE_Quiet;

} WLAN_FR_BEACON, *PWLAN_FR_BEACON;


// IBSS ATIM frame
typedef struct tagWLAN_FR_IBSSATIM {

    unsigned int                    uType;
    unsigned int                    len;
    PBYTE                   pBuf;
    PUWLAN_80211HDR         pHdr;

    // fixed fields
    // info elements
    // this frame type has a null body

} WLAN_FR_IBSSATIM, *PWLAN_FR_IBSSATIM;

// Disassociation
typedef struct tagWLAN_FR_DISASSOC {

    unsigned int                    uType;
    unsigned int                    len;
    PBYTE                   pBuf;
    PUWLAN_80211HDR         pHdr;
    /*-- fixed fields -----------*/
    PWORD                   pwReason;
    /*-- info elements ----------*/

} WLAN_FR_DISASSOC, *PWLAN_FR_DISASSOC;

// Association Request
typedef struct tagWLAN_FR_ASSOCREQ {

    unsigned int                    uType;
    unsigned int                    len;
    PBYTE                   pBuf;
    PUWLAN_80211HDR         pHdr;
    /*-- fixed fields -----------*/
    PWORD                   pwCapInfo;
    PWORD                   pwListenInterval;
    /*-- info elements ----------*/
    PWLAN_IE_SSID           pSSID;
    PWLAN_IE_SUPP_RATES     pSuppRates;
    PWLAN_IE_RSN            pRSN;
    PWLAN_IE_CCX            pCCX;
    PWLAN_IE_CCX_IP            pCCXIP;
    PWLAN_IE_CCX_Ver            pCCXVER;
    PWLAN_IE_RSN_EXT        pRSNWPA;
    PWLAN_IE_SUPP_RATES     pExtSuppRates;
    PWLAN_IE_PW_CAP         pCurrPowerCap;
    PWLAN_IE_SUPP_CH        pCurrSuppCh;

} WLAN_FR_ASSOCREQ, *PWLAN_FR_ASSOCREQ;

// Association Response
typedef struct tagWLAN_FR_ASSOCRESP {

    unsigned int                    uType;
    unsigned int                    len;
    PBYTE                   pBuf;
    PUWLAN_80211HDR         pHdr;
    /*-- fixed fields -----------*/
    PWORD                   pwCapInfo;
    PWORD                   pwStatus;
    PWORD                   pwAid;
    /*-- info elements ----------*/
    PWLAN_IE_SUPP_RATES     pSuppRates;
    PWLAN_IE_SUPP_RATES     pExtSuppRates;

} WLAN_FR_ASSOCRESP, *PWLAN_FR_ASSOCRESP;

// Reassociation Request
typedef struct tagWLAN_FR_REASSOCREQ {

    unsigned int                    uType;
    unsigned int                    len;
    PBYTE                   pBuf;
    PUWLAN_80211HDR         pHdr;

    /*-- fixed fields -----------*/
    PWORD                   pwCapInfo;
    PWORD                   pwListenInterval;
    PIEEE_ADDR              pAddrCurrAP;

    /*-- info elements ----------*/
    PWLAN_IE_SSID           pSSID;
    PWLAN_IE_SUPP_RATES     pSuppRates;
    PWLAN_IE_RSN            pRSN;
    PWLAN_IE_CCX            pCCX;
    PWLAN_IE_CCX_IP            pCCXIP;
    PWLAN_IE_CCX_Ver            pCCXVER;
    PWLAN_IE_RSN_EXT        pRSNWPA;
    PWLAN_IE_SUPP_RATES     pExtSuppRates;

} WLAN_FR_REASSOCREQ, *PWLAN_FR_REASSOCREQ;

// Reassociation Response
typedef struct tagWLAN_FR_REASSOCRESP {

    unsigned int                    uType;
    unsigned int                    len;
    PBYTE                   pBuf;
    PUWLAN_80211HDR         pHdr;
    /*-- fixed fields -----------*/
    PWORD                   pwCapInfo;
    PWORD                   pwStatus;
    PWORD                   pwAid;
    /*-- info elements ----------*/
    PWLAN_IE_SUPP_RATES     pSuppRates;
    PWLAN_IE_SUPP_RATES     pExtSuppRates;

} WLAN_FR_REASSOCRESP, *PWLAN_FR_REASSOCRESP;

// Probe Request
typedef struct tagWLAN_FR_PROBEREQ {

    unsigned int                    uType;
    unsigned int                    len;
    PBYTE                   pBuf;
    PUWLAN_80211HDR         pHdr;
    /*-- fixed fields -----------*/
    /*-- info elements ----------*/
    PWLAN_IE_SSID           pSSID;
    PWLAN_IE_SUPP_RATES     pSuppRates;
    PWLAN_IE_SUPP_RATES     pExtSuppRates;

} WLAN_FR_PROBEREQ, *PWLAN_FR_PROBEREQ;

// Probe Response
typedef struct tagWLAN_FR_PROBERESP {

    unsigned int                    uType;
    unsigned int                    len;
    PBYTE                   pBuf;
    PUWLAN_80211HDR         pHdr;
    /*-- fixed fields -----------*/
    PQWORD                  pqwTimestamp;
    PWORD                   pwBeaconInterval;
    PWORD                   pwCapInfo;
    /*-- info elements ----------*/
    PWLAN_IE_SSID           pSSID;
    PWLAN_IE_SUPP_RATES     pSuppRates;
    PWLAN_IE_DS_PARMS       pDSParms;
    PWLAN_IE_CF_PARMS       pCFParms;
    PWLAN_IE_IBSS_PARMS     pIBSSParms;
    PWLAN_IE_RSN            pRSN;
    PWLAN_IE_RSN_EXT        pRSNWPA;
    PWLAN_IE_ERP            pERP;
    PWLAN_IE_SUPP_RATES     pExtSuppRates;
    PWLAN_IE_COUNTRY        pIE_Country;
    PWLAN_IE_PW_CONST       pIE_PowerConstraint;
    PWLAN_IE_CH_SW          pIE_CHSW;
    PWLAN_IE_IBSS_DFS       pIE_IBSSDFS;
    PWLAN_IE_QUIET          pIE_Quiet;

} WLAN_FR_PROBERESP, *PWLAN_FR_PROBERESP;

// Authentication
typedef struct tagWLAN_FR_AUTHEN {

    unsigned int                    uType;
    unsigned int                    len;
    PBYTE                   pBuf;
    PUWLAN_80211HDR         pHdr;
    /*-- fixed fields -----------*/
    PWORD                   pwAuthAlgorithm;
    PWORD                   pwAuthSequence;
    PWORD                   pwStatus;
    /*-- info elements ----------*/
    PWLAN_IE_CHALLENGE      pChallenge;

} WLAN_FR_AUTHEN, *PWLAN_FR_AUTHEN;

// Deauthenication
typedef struct tagWLAN_FR_DEAUTHEN {

    unsigned int                    uType;
    unsigned int                    len;
    PBYTE                   pBuf;
    PUWLAN_80211HDR         pHdr;
    /*-- fixed fields -----------*/
    PWORD                   pwReason;

    /*-- info elements ----------*/

} WLAN_FR_DEAUTHEN, *PWLAN_FR_DEAUTHEN;

/*---------------------  Export Functions  --------------------------*/
void
vMgrEncodeBeacon(
      PWLAN_FR_BEACON  pFrame
     );

void
vMgrDecodeBeacon(
      PWLAN_FR_BEACON  pFrame
    );

void
vMgrEncodeIBSSATIM(
      PWLAN_FR_IBSSATIM   pFrame
    );

void
vMgrDecodeIBSSATIM(
      PWLAN_FR_IBSSATIM   pFrame
    );

void
vMgrEncodeDisassociation(
      PWLAN_FR_DISASSOC  pFrame
    );

void
vMgrDecodeDisassociation(
      PWLAN_FR_DISASSOC  pFrame
    );

void
vMgrEncodeAssocRequest(
      PWLAN_FR_ASSOCREQ  pFrame
    );

void
vMgrDecodeAssocRequest(
      PWLAN_FR_ASSOCREQ  pFrame
    );

void
vMgrEncodeAssocResponse(
      PWLAN_FR_ASSOCRESP  pFrame
    );

void
vMgrDecodeAssocResponse(
     PWLAN_FR_ASSOCRESP  pFrame
    );

void
vMgrEncodeReassocRequest(
      PWLAN_FR_REASSOCREQ  pFrame
    );

void
vMgrDecodeReassocRequest(
      PWLAN_FR_REASSOCREQ  pFrame
    );

void
vMgrEncodeProbeRequest(
     PWLAN_FR_PROBEREQ  pFrame
    );

void
vMgrDecodeProbeRequest(
     PWLAN_FR_PROBEREQ  pFrame
    );

void
vMgrEncodeProbeResponse(
     PWLAN_FR_PROBERESP  pFrame
    );

void
vMgrDecodeProbeResponse(
     PWLAN_FR_PROBERESP  pFrame
    );

void
vMgrEncodeAuthen(
      PWLAN_FR_AUTHEN  pFrame
    );

void
vMgrDecodeAuthen(
      PWLAN_FR_AUTHEN  pFrame
    );

void
vMgrEncodeDeauthen(
      PWLAN_FR_DEAUTHEN  pFrame
    );

void
vMgrDecodeDeauthen(
      PWLAN_FR_DEAUTHEN  pFrame
    );

void
vMgrEncodeReassocResponse(
      PWLAN_FR_REASSOCRESP  pFrame
    );

void
vMgrDecodeReassocResponse(
      PWLAN_FR_REASSOCRESP  pFrame
    );

#endif// __80211MGR_H__
