/*
 * 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: 80211hdr.h
 *
 * Purpose: 802.11 MAC headers related pre-defines and macros.
 *
 *
 * Author: Lyndon Chen
 *
 * Date: Apr 8, 2002
 *
 */

#ifndef __80211HDR_H__
#define __80211HDR_H__

#include "ttype.h"

/*---------------------  Export Definitions -------------------------*/
// bit type
#define BIT0	0x00000001
#define BIT1	0x00000002
#define BIT2	0x00000004
#define BIT3	0x00000008
#define BIT4	0x00000010
#define BIT5	0x00000020
#define BIT6	0x00000040
#define BIT7	0x00000080
#define BIT8	0x00000100
#define BIT9	0x00000200
#define BIT10	0x00000400
#define BIT11	0x00000800
#define BIT12	0x00001000
#define BIT13	0x00002000
#define BIT14	0x00004000
#define BIT15	0x00008000
#define BIT16	0x00010000
#define BIT17	0x00020000
#define BIT18	0x00040000
#define BIT19	0x00080000
#define BIT20	0x00100000
#define BIT21	0x00200000
#define BIT22	0x00400000
#define BIT23	0x00800000
#define BIT24	0x01000000
#define BIT25	0x02000000
#define BIT26	0x04000000
#define BIT27	0x08000000
#define BIT28	0x10000000
#define BIT29	0x20000000
#define BIT30	0x40000000
#define BIT31	0x80000000

// 802.11 frame related, defined as 802.11 spec
#define WLAN_ADDR_LEN               6
#define WLAN_CRC_LEN                4
#define WLAN_CRC32_LEN              4
#define WLAN_FCS_LEN                4
#define WLAN_BSSID_LEN              6
#define WLAN_BSS_TS_LEN             8
#define WLAN_HDR_ADDR2_LEN          16
#define WLAN_HDR_ADDR3_LEN          24
#define WLAN_HDR_ADDR4_LEN          30
#define WLAN_IEHDR_LEN              2
#define WLAN_SSID_MAXLEN            32
//#define WLAN_RATES_MAXLEN           255
#define WLAN_RATES_MAXLEN           16
#define WLAN_RATES_MAXLEN_11B       4
#define WLAN_RSN_MAXLEN             32
#define WLAN_DATA_MAXLEN            2312
#define WLAN_A3FR_MAXLEN            (WLAN_HDR_ADDR3_LEN + WLAN_DATA_MAXLEN + WLAN_CRC_LEN)


#define WLAN_BEACON_FR_MAXLEN       WLAN_A3FR_MAXLEN
#define WLAN_ATIM_FR_MAXLEN         (WLAN_HDR_ADDR3_LEN + 0)
#define WLAN_NULLDATA_FR_MAXLEN     (WLAN_HDR_ADDR3_LEN + 0)
#define WLAN_DISASSOC_FR_MAXLEN     (WLAN_HDR_ADDR3_LEN + 2)
#define WLAN_ASSOCREQ_FR_MAXLEN     WLAN_A3FR_MAXLEN
#define WLAN_ASSOCRESP_FR_MAXLEN    WLAN_A3FR_MAXLEN
#define WLAN_REASSOCREQ_FR_MAXLEN   WLAN_A3FR_MAXLEN
#define WLAN_REASSOCRESP_FR_MAXLEN  WLAN_A3FR_MAXLEN
#define WLAN_PROBEREQ_FR_MAXLEN     WLAN_A3FR_MAXLEN
#define WLAN_PROBERESP_FR_MAXLEN    WLAN_A3FR_MAXLEN
#define WLAN_AUTHEN_FR_MAXLEN       WLAN_A3FR_MAXLEN
#define WLAN_DEAUTHEN_FR_MAXLEN     (WLAN_HDR_ADDR3_LEN + 2)


#define WLAN_WEP_NKEYS              4
#define WLAN_WEP40_KEYLEN           5
#define WLAN_WEP104_KEYLEN          13
#define WLAN_WEP232_KEYLEN          29
//#define WLAN_WEPMAX_KEYLEN          29
#define WLAN_WEPMAX_KEYLEN          32
#define WLAN_CHALLENGE_IE_MAXLEN    255
#define WLAN_CHALLENGE_IE_LEN       130
#define WLAN_CHALLENGE_LEN          128
#define WLAN_WEP_IV_LEN             4
#define WLAN_WEP_ICV_LEN            4
#define WLAN_FRAGS_MAX              16

// Frame Type
#define WLAN_TYPE_MGR 0x00
#define WLAN_TYPE_CTL  0x01
#define WLAN_TYPE_DATA 0x02

#define WLAN_FTYPE_MGMT 0x00
#define WLAN_FTYPE_CTL  0x01
#define WLAN_FTYPE_DATA 0x02


// Frame Subtypes
#define WLAN_FSTYPE_ASSOCREQ        0x00
#define WLAN_FSTYPE_ASSOCRESP       0x01
#define WLAN_FSTYPE_REASSOCREQ      0x02
#define WLAN_FSTYPE_REASSOCRESP     0x03
#define WLAN_FSTYPE_PROBEREQ        0x04
#define WLAN_FSTYPE_PROBERESP       0x05
#define WLAN_FSTYPE_BEACON          0x08
#define WLAN_FSTYPE_ATIM            0x09
#define WLAN_FSTYPE_DISASSOC        0x0a
#define WLAN_FSTYPE_AUTHEN          0x0b
#define WLAN_FSTYPE_DEAUTHEN        0x0c
#define WLAN_FSTYPE_ACTION          0x0d

// Control
#define WLAN_FSTYPE_PSPOLL          0x0a
#define WLAN_FSTYPE_RTS             0x0b
#define WLAN_FSTYPE_CTS             0x0c
#define WLAN_FSTYPE_ACK             0x0d
#define WLAN_FSTYPE_CFEND           0x0e
#define WLAN_FSTYPE_CFENDCFACK      0x0f

// Data
#define WLAN_FSTYPE_DATAONLY        0x00
#define WLAN_FSTYPE_DATA_CFACK      0x01
#define WLAN_FSTYPE_DATA_CFPOLL     0x02
#define WLAN_FSTYPE_DATA_CFACK_CFPOLL   0x03
#define WLAN_FSTYPE_NULL            0x04
#define WLAN_FSTYPE_CFACK           0x05
#define WLAN_FSTYPE_CFPOLL          0x06
#define WLAN_FSTYPE_CFACK_CFPOLL    0x07


#ifdef __BIG_ENDIAN

// GET & SET Frame Control bit
#define WLAN_GET_FC_PRVER(n)    ((((WORD)(n) >> 8) & (BIT0 | BIT1))
#define WLAN_GET_FC_FTYPE(n)    ((((WORD)(n) >> 8) & (BIT2 | BIT3)) >> 2)
#define WLAN_GET_FC_FSTYPE(n)   ((((WORD)(n) >> 8) & (BIT4|BIT5|BIT6|BIT7)) >> 4)
#define WLAN_GET_FC_TODS(n)     ((((WORD)(n) << 8) & (BIT8)) >> 8)
#define WLAN_GET_FC_FROMDS(n)   ((((WORD)(n) << 8) & (BIT9)) >> 9)
#define WLAN_GET_FC_MOREFRAG(n) ((((WORD)(n) << 8) & (BIT10)) >> 10)
#define WLAN_GET_FC_RETRY(n)    ((((WORD)(n) << 8) & (BIT11)) >> 11)
#define WLAN_GET_FC_PWRMGT(n)   ((((WORD)(n) << 8) & (BIT12)) >> 12)
#define WLAN_GET_FC_MOREDATA(n) ((((WORD)(n) << 8) & (BIT13)) >> 13)
#define WLAN_GET_FC_ISWEP(n)    ((((WORD)(n) << 8) & (BIT14)) >> 14)
#define WLAN_GET_FC_ORDER(n)    ((((WORD)(n) << 8) & (BIT15)) >> 15)

// Sequence Field bit
#define WLAN_GET_SEQ_FRGNUM(n) (((WORD)(n) >> 8) & (BIT0|BIT1|BIT2|BIT3))
#define WLAN_GET_SEQ_SEQNUM(n) ((((WORD)(n) >> 8) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4)


// Capability Field bit
#define WLAN_GET_CAP_INFO_ESS(n)           (((n) >> 8) & BIT0)
#define WLAN_GET_CAP_INFO_IBSS(n)          ((((n) >> 8) & BIT1) >> 1)
#define WLAN_GET_CAP_INFO_CFPOLLABLE(n)    ((((n) >> 8) & BIT2) >> 2)
#define WLAN_GET_CAP_INFO_CFPOLLREQ(n)     ((((n) >> 8) & BIT3) >> 3)
#define WLAN_GET_CAP_INFO_PRIVACY(n)       ((((n) >> 8) & BIT4) >> 4)
#define WLAN_GET_CAP_INFO_SHORTPREAMBLE(n) ((((n) >> 8) & BIT5) >> 5)
#define WLAN_GET_CAP_INFO_PBCC(n)          ((((n) >> 8) & BIT6) >> 6)
#define WLAN_GET_CAP_INFO_AGILITY(n)       ((((n) >> 8) & BIT7) >> 7)
#define WLAN_GET_CAP_INFO_SPECTRUMMNG(n)   ((((n))      & BIT8) >> 10)
#define WLAN_GET_CAP_INFO_SHORTSLOTTIME(n) ((((n))      & BIT10) >> 10)
#define WLAN_GET_CAP_INFO_DSSSOFDM(n)      ((((n))      & BIT13) >> 13)
#define WLAN_GET_CAP_INFO_GRPACK(n)        ((((n))      & BIT14) >> 14)


#else

// GET & SET Frame Control bit
#define WLAN_GET_FC_PRVER(n)    (((WORD)(n)) & (BIT0 | BIT1))
#define WLAN_GET_FC_FTYPE(n)    ((((WORD)(n)) & (BIT2 | BIT3)) >> 2)
#define WLAN_GET_FC_FSTYPE(n)   ((((WORD)(n)) & (BIT4|BIT5|BIT6|BIT7)) >> 4)
#define WLAN_GET_FC_TODS(n)     ((((WORD)(n)) & (BIT8)) >> 8)
#define WLAN_GET_FC_FROMDS(n)   ((((WORD)(n)) & (BIT9)) >> 9)
#define WLAN_GET_FC_MOREFRAG(n) ((((WORD)(n)) & (BIT10)) >> 10)
#define WLAN_GET_FC_RETRY(n)    ((((WORD)(n)) & (BIT11)) >> 11)
#define WLAN_GET_FC_PWRMGT(n)   ((((WORD)(n)) & (BIT12)) >> 12)
#define WLAN_GET_FC_MOREDATA(n) ((((WORD)(n)) & (BIT13)) >> 13)
#define WLAN_GET_FC_ISWEP(n)    ((((WORD)(n)) & (BIT14)) >> 14)
#define WLAN_GET_FC_ORDER(n)    ((((WORD)(n)) & (BIT15)) >> 15)


// Sequence Field bit
#define WLAN_GET_SEQ_FRGNUM(n) (((WORD)(n)) & (BIT0|BIT1|BIT2|BIT3))
#define WLAN_GET_SEQ_SEQNUM(n) ((((WORD)(n)) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4)


// Capability Field bit
#define WLAN_GET_CAP_INFO_ESS(n)           ((n) & BIT0)
#define WLAN_GET_CAP_INFO_IBSS(n)          (((n) & BIT1) >> 1)
#define WLAN_GET_CAP_INFO_CFPOLLABLE(n)    (((n) & BIT2) >> 2)
#define WLAN_GET_CAP_INFO_CFPOLLREQ(n)     (((n) & BIT3) >> 3)
#define WLAN_GET_CAP_INFO_PRIVACY(n)       (((n) & BIT4) >> 4)
#define WLAN_GET_CAP_INFO_SHORTPREAMBLE(n) (((n) & BIT5) >> 5)
#define WLAN_GET_CAP_INFO_PBCC(n)          (((n) & BIT6) >> 6)
#define WLAN_GET_CAP_INFO_AGILITY(n)       (((n) & BIT7) >> 7)
#define WLAN_GET_CAP_INFO_SPECTRUMMNG(n)   (((n) & BIT8) >> 10)
#define WLAN_GET_CAP_INFO_SHORTSLOTTIME(n) (((n) & BIT10) >> 10)
#define WLAN_GET_CAP_INFO_DSSSOFDM(n)      (((n) & BIT13) >> 13)
#define WLAN_GET_CAP_INFO_GRPACK(n)        (((n) & BIT14) >> 14)


#endif //#ifdef __BIG_ENDIAN


#define WLAN_SET_CAP_INFO_ESS(n)           (n)
#define WLAN_SET_CAP_INFO_IBSS(n)          ((n) << 1)
#define WLAN_SET_CAP_INFO_CFPOLLABLE(n)    ((n) << 2)
#define WLAN_SET_CAP_INFO_CFPOLLREQ(n)     ((n) << 3)
#define WLAN_SET_CAP_INFO_PRIVACY(n)       ((n) << 4)
#define WLAN_SET_CAP_INFO_SHORTPREAMBLE(n) ((n) << 5)
#define WLAN_SET_CAP_INFO_SPECTRUMMNG(n)   ((n) << 8)
#define WLAN_SET_CAP_INFO_PBCC(n)          ((n) << 6)
#define WLAN_SET_CAP_INFO_AGILITY(n)       ((n) << 7)
#define WLAN_SET_CAP_INFO_SHORTSLOTTIME(n) ((n) << 10)
#define WLAN_SET_CAP_INFO_DSSSOFDM(n)      ((n) << 13)
#define WLAN_SET_CAP_INFO_GRPACK(n)        ((n) << 14)


#define WLAN_SET_FC_PRVER(n)    ((WORD)(n))
#define WLAN_SET_FC_FTYPE(n)    (((WORD)(n)) << 2)
#define WLAN_SET_FC_FSTYPE(n)   (((WORD)(n)) << 4)
#define WLAN_SET_FC_TODS(n)     (((WORD)(n)) << 8)
#define WLAN_SET_FC_FROMDS(n)   (((WORD)(n)) << 9)
#define WLAN_SET_FC_MOREFRAG(n) (((WORD)(n)) << 10)
#define WLAN_SET_FC_RETRY(n)    (((WORD)(n)) << 11)
#define WLAN_SET_FC_PWRMGT(n)   (((WORD)(n)) << 12)
#define WLAN_SET_FC_MOREDATA(n) (((WORD)(n)) << 13)
#define WLAN_SET_FC_ISWEP(n)    (((WORD)(n)) << 14)
#define WLAN_SET_FC_ORDER(n)    (((WORD)(n)) << 15)

#define WLAN_SET_SEQ_FRGNUM(n) ((WORD)(n))
#define WLAN_SET_SEQ_SEQNUM(n) (((WORD)(n)) << 4)

// ERP Field bit

#define WLAN_GET_ERP_NONERP_PRESENT(n)     ((n) & BIT0)
#define WLAN_GET_ERP_USE_PROTECTION(n)     (((n) & BIT1) >> 1)
#define WLAN_GET_ERP_BARKER_MODE(n)        (((n) & BIT2) >> 2)

#define WLAN_SET_ERP_NONERP_PRESENT(n)     (n)
#define WLAN_SET_ERP_USE_PROTECTION(n)     ((n) << 1)
#define WLAN_SET_ERP_BARKER_MODE(n)        ((n) << 2)



// Support & Basic Rates field
#define WLAN_MGMT_IS_BASICRATE(b)    ((b) & BIT7)
#define WLAN_MGMT_GET_RATE(b)        ((b) & ~BIT7)

// TIM field
#define WLAN_MGMT_IS_MULTICAST_TIM(b)   ((b) & BIT0)
#define WLAN_MGMT_GET_TIM_OFFSET(b)     (((b) & ~BIT0) >> 1)

// 3-Addr & 4-Addr
#define WLAN_HDR_A3_DATA_PTR(p) (((PBYTE)(p)) + WLAN_HDR_ADDR3_LEN)
#define WLAN_HDR_A4_DATA_PTR(p) (((PBYTE)(p)) + WLAN_HDR_ADDR4_LEN)

// IEEE ADDR
#define IEEE_ADDR_UNIVERSAL         0x02
#define IEEE_ADDR_GROUP             0x01

typedef struct {
    BYTE            abyAddr[6];
} IEEE_ADDR, *PIEEE_ADDR;

// 802.11 Header Format

typedef struct tagWLAN_80211HDR_A2 {

    WORD    wFrameCtl;
    WORD    wDurationID;
    BYTE    abyAddr1[WLAN_ADDR_LEN];
    BYTE    abyAddr2[WLAN_ADDR_LEN];

}__attribute__ ((__packed__))
WLAN_80211HDR_A2, *PWLAN_80211HDR_A2;

typedef struct tagWLAN_80211HDR_A3 {

    WORD    wFrameCtl;
    WORD    wDurationID;
    BYTE    abyAddr1[WLAN_ADDR_LEN];
    BYTE    abyAddr2[WLAN_ADDR_LEN];
    BYTE    abyAddr3[WLAN_ADDR_LEN];
    WORD    wSeqCtl;

}__attribute__ ((__packed__))
WLAN_80211HDR_A3, *PWLAN_80211HDR_A3;

typedef struct tagWLAN_80211HDR_A4 {

    WORD    wFrameCtl;
    WORD    wDurationID;
    BYTE    abyAddr1[WLAN_ADDR_LEN];
    BYTE    abyAddr2[WLAN_ADDR_LEN];
    BYTE    abyAddr3[WLAN_ADDR_LEN];
    WORD    wSeqCtl;
    BYTE    abyAddr4[WLAN_ADDR_LEN];

}__attribute__ ((__packed__))
WLAN_80211HDR_A4, *PWLAN_80211HDR_A4;


typedef union tagUWLAN_80211HDR {

    WLAN_80211HDR_A2        sA2;
    WLAN_80211HDR_A3        sA3;
    WLAN_80211HDR_A4        sA4;

} UWLAN_80211HDR, *PUWLAN_80211HDR;


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

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

/*---------------------  Export Functions  --------------------------*/



#endif // __80211HDR_H__


