/*
 * 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"

#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

#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 3.7.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 defined 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

/* Information Element Types */

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

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

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

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

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

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

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

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

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

#pragma pack(1)
typedef struct tagWLAN_IE_RSN_EXT {
	unsigned char byElementID;
	unsigned char len;
	unsigned char abyOUI[4];
	unsigned short wVersion;
	unsigned char abyMulticast[4];
	unsigned short wPKCount;
	struct {
		unsigned char 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 {
	unsigned short wAuthCount;
	struct {
		unsigned char abyOUI[4];
	} AuthKSList[1];
} WLAN_IE_RSN_AUTH, *PWLAN_IE_RSN_AUTH;

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

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

#pragma pack(1)
typedef struct _MEASEURE_REQ {
	unsigned char byChannel;
	unsigned char abyStartTime[8];
	unsigned char 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 {
	unsigned char byChannel;
	unsigned char abyStartTime[8];
	unsigned char abyDuration[2];
	unsigned char byMap;
} MEASEURE_REP_BASIC, *PMEASEURE_REP_BASIC;

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

typedef struct _MEASEURE_REP_RPI {
	unsigned char byChannel;
	unsigned char abyStartTime[8];
	unsigned char abyDuration[2];
	unsigned char 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 {
	unsigned char byElementID;
	unsigned char len;
	unsigned char byToken;
	unsigned char byMode;
	unsigned char byType;
	MEASEURE_REQ        sReq;
} WLAN_IE_MEASURE_REQ, *PWLAN_IE_MEASURE_REQ;

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

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

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

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

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

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

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

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

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

typedef struct _WLAN_IE_IBSS_DFS {
	unsigned char byElementID;
	unsigned char len;
	unsigned char abyDFSOwner[6];
	unsigned char byDFSRecovery;
	unsigned char 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;
	unsigned char *pBuf;
	PUWLAN_80211HDR       pHdr;
} WLAN_FR_MGMT,  *PWLAN_FR_MGMT;

/* Beacon frame */
typedef struct tagWLAN_FR_BEACON {
	unsigned int	uType;
	unsigned int	len;
	unsigned char *pBuf;
	PUWLAN_80211HDR         pHdr;
	PQWORD                  pqwTimestamp;
	unsigned short *pwBeaconInterval;
	unsigned short *pwCapInfo;
	PWLAN_IE_SSID           pSSID;
	PWLAN_IE_SUPP_RATES     pSuppRates;
	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;
	unsigned char *pBuf;
	PUWLAN_80211HDR         pHdr;
} WLAN_FR_IBSSATIM, *PWLAN_FR_IBSSATIM;

/* Disassociation */
typedef struct tagWLAN_FR_DISASSOC {
	unsigned int	uType;
	unsigned int	len;
	unsigned char *pBuf;
	PUWLAN_80211HDR         pHdr;
	unsigned short *pwReason;
} WLAN_FR_DISASSOC, *PWLAN_FR_DISASSOC;

/* Association Request */
typedef struct tagWLAN_FR_ASSOCREQ {
	unsigned int	uType;
	unsigned int	len;
	unsigned char *pBuf;
	PUWLAN_80211HDR         pHdr;
	unsigned short *pwCapInfo;
	unsigned short *pwListenInterval;
	PWLAN_IE_SSID           pSSID;
	PWLAN_IE_SUPP_RATES     pSuppRates;
	PWLAN_IE_RSN            pRSN;
	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;
	unsigned char *pBuf;
	PUWLAN_80211HDR         pHdr;
	unsigned short *pwCapInfo;
	unsigned short *pwStatus;
	unsigned short *pwAid;
	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;
	unsigned char *pBuf;
	PUWLAN_80211HDR         pHdr;
	unsigned short *pwCapInfo;
	unsigned short *pwListenInterval;
	PIEEE_ADDR              pAddrCurrAP;
	PWLAN_IE_SSID           pSSID;
	PWLAN_IE_SUPP_RATES     pSuppRates;
	PWLAN_IE_RSN            pRSN;
	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;
	unsigned char *pBuf;
	PUWLAN_80211HDR         pHdr;
	unsigned short *pwCapInfo;
	unsigned short *pwStatus;
	unsigned short *pwAid;
	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;
	unsigned char *pBuf;
	PUWLAN_80211HDR         pHdr;
	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;
	unsigned char *pBuf;
	PUWLAN_80211HDR         pHdr;
	PQWORD                  pqwTimestamp;
	unsigned short *pwBeaconInterval;
	unsigned short *pwCapInfo;
	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;
	unsigned char *pBuf;
	PUWLAN_80211HDR         pHdr;
	unsigned short *pwAuthAlgorithm;
	unsigned short *pwAuthSequence;
	unsigned short *pwStatus;
	PWLAN_IE_CHALLENGE      pChallenge;
} WLAN_FR_AUTHEN, *PWLAN_FR_AUTHEN;

/* Deauthenication */
typedef struct tagWLAN_FR_DEAUTHEN {
	unsigned int	uType;
	unsigned int	len;
	unsigned char *pBuf;
	PUWLAN_80211HDR         pHdr;
	unsigned short *pwReason;
} WLAN_FR_DEAUTHEN, *PWLAN_FR_DEAUTHEN;

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__ */
