/*
 * 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 <linux/types.h>
#include "linux/ieee80211.h"

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

#define WLAN_MIN_ARRAY          1

/* Information Element ID value */
#define WLAN_EID_FH_PARMS       2
#define WLAN_EID_DS_PARMS       3
#define WLAN_EID_CF_PARMS       4
#define WLAN_EID_IBSS_PARMS     6
#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_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;
	__le64 *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;
	__le64 *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__ */
