Annotation of qemu/roms/ipxe/src/drivers/net/p80211hdr.h, revision 1.1.1.1

1.1       root        1: /* src/include/wlan/p80211hdr.h
                      2: *
                      3: * Macros, types, and functions for handling 802.11 MAC headers
                      4: *
                      5: * Copyright (C) 1999 AbsoluteValue Systems, Inc.  All Rights Reserved.
                      6: * --------------------------------------------------------------------
                      7: *
                      8: * linux-wlan
                      9: *
                     10: *   The contents of this file are subject to the Mozilla Public
                     11: *   License Version 1.1 (the "License"); you may not use this file
                     12: *   except in compliance with the License. You may obtain a copy of
                     13: *   the License at http://www.mozilla.org/MPL/
                     14: *
                     15: *   Software distributed under the License is distributed on an "AS
                     16: *   IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
                     17: *   implied. See the License for the specific language governing
                     18: *   rights and limitations under the License.
                     19: *
                     20: *   Alternatively, the contents of this file may be used under the
                     21: *   terms of the GNU Public License version 2 (the "GPL"), in which
                     22: *   case the provisions of the GPL are applicable instead of the
                     23: *   above.  If you wish to allow the use of your version of this file
                     24: *   only under the terms of the GPL and not to allow others to use
                     25: *   your version of this file under the MPL, indicate your decision
                     26: *   by deleting the provisions above and replace them with the notice
                     27: *   and other provisions required by the GPL.  If you do not delete
                     28: *   the provisions above, a recipient may use your version of this
                     29: *   file under either the MPL or the GPL.
                     30: *
                     31: * --------------------------------------------------------------------
                     32: *
                     33: * Inquiries regarding the linux-wlan Open Source project can be
                     34: * made directly to:
                     35: *
                     36: * AbsoluteValue Systems Inc.
                     37: * [email protected]
                     38: * http://www.linux-wlan.com
                     39: *
                     40: * --------------------------------------------------------------------
                     41: *
                     42: * Portions of the development of this software were funded by 
                     43: * Intersil Corporation as part of PRISM(R) chipset product development.
                     44: *
                     45: * --------------------------------------------------------------------
                     46: *
                     47: * This file declares the constants and types used in the interface
                     48: * between a wlan driver and the user mode utilities.
                     49: *
                     50: * Note: 
                     51: *  - Constant values are always in HOST byte order.  To assign
                     52: *    values to multi-byte fields they _must_ be converted to
                     53: *    ieee byte order.  To retrieve multi-byte values from incoming
                     54: *    frames, they must be converted to host order.
                     55: *
                     56: * All functions declared here are implemented in p80211.c
                     57: * --------------------------------------------------------------------
                     58: */
                     59: 
                     60: FILE_LICENCE ( GPL2_ONLY );
                     61: 
                     62: #ifndef _P80211HDR_H
                     63: #define _P80211HDR_H
                     64: 
                     65: /*================================================================*/
                     66: /* System Includes */
                     67: 
                     68: /*================================================================*/
                     69: /* Project Includes */
                     70: 
                     71: #ifndef  _WLAN_COMPAT_H
                     72: #include <wlan/wlan_compat.h>
                     73: #endif
                     74: 
                     75: 
                     76: /*================================================================*/
                     77: /* Constants */
                     78: 
                     79: /*--- Sizes -----------------------------------------------*/
                     80: #define WLAN_ADDR_LEN                  6
                     81: #define WLAN_CRC_LEN                   4
                     82: #define WLAN_BSSID_LEN                 6
                     83: #define WLAN_BSS_TS_LEN                        8
                     84: #define WLAN_HDR_A3_LEN                        24
                     85: #define WLAN_HDR_A4_LEN                        30
                     86: #define WLAN_SSID_MAXLEN               32
                     87: #define WLAN_DATA_MAXLEN               2312
                     88: #define WLAN_A3FR_MAXLEN               (WLAN_HDR_A3_LEN + WLAN_DATA_MAXLEN + WLAN_CRC_LEN)
                     89: #define WLAN_A4FR_MAXLEN               (WLAN_HDR_A4_LEN + WLAN_DATA_MAXLEN + WLAN_CRC_LEN)
                     90: #define WLAN_BEACON_FR_MAXLEN          (WLAN_HDR_A3_LEN + 334)
                     91: #define WLAN_ATIM_FR_MAXLEN            (WLAN_HDR_A3_LEN + 0)
                     92: #define WLAN_DISASSOC_FR_MAXLEN                (WLAN_HDR_A3_LEN + 2)
                     93: #define WLAN_ASSOCREQ_FR_MAXLEN                (WLAN_HDR_A3_LEN + 48)
                     94: #define WLAN_ASSOCRESP_FR_MAXLEN       (WLAN_HDR_A3_LEN + 16)
                     95: #define WLAN_REASSOCREQ_FR_MAXLEN      (WLAN_HDR_A3_LEN + 54)
                     96: #define WLAN_REASSOCRESP_FR_MAXLEN     (WLAN_HDR_A3_LEN + 16)
                     97: #define WLAN_PROBEREQ_FR_MAXLEN                (WLAN_HDR_A3_LEN + 44)
                     98: #define WLAN_PROBERESP_FR_MAXLEN       (WLAN_HDR_A3_LEN + 78)
                     99: #define WLAN_AUTHEN_FR_MAXLEN          (WLAN_HDR_A3_LEN + 261)
                    100: #define WLAN_DEAUTHEN_FR_MAXLEN                (WLAN_HDR_A3_LEN + 2)
                    101: #define WLAN_WEP_NKEYS                 4
                    102: #define WLAN_WEP_MAXKEYLEN             13
                    103: #define WLAN_CHALLENGE_IE_LEN          130
                    104: #define WLAN_CHALLENGE_LEN             128
                    105: #define WLAN_WEP_IV_LEN                        4
                    106: #define WLAN_WEP_ICV_LEN               4
                    107: 
                    108: /*--- Frame Control Field -------------------------------------*/
                    109: /* Frame Types */
                    110: #define WLAN_FTYPE_MGMT                        0x00
                    111: #define WLAN_FTYPE_CTL                 0x01
                    112: #define WLAN_FTYPE_DATA                        0x02
                    113: 
                    114: /* Frame subtypes */
                    115: /* Management */
                    116: #define WLAN_FSTYPE_ASSOCREQ           0x00
                    117: #define WLAN_FSTYPE_ASSOCRESP          0x01
                    118: #define WLAN_FSTYPE_REASSOCREQ         0x02
                    119: #define WLAN_FSTYPE_REASSOCRESP                0x03
                    120: #define WLAN_FSTYPE_PROBEREQ           0x04 
                    121: #define WLAN_FSTYPE_PROBERESP          0x05
                    122: #define WLAN_FSTYPE_BEACON             0x08
                    123: #define WLAN_FSTYPE_ATIM               0x09
                    124: #define WLAN_FSTYPE_DISASSOC           0x0a
                    125: #define WLAN_FSTYPE_AUTHEN             0x0b
                    126: #define WLAN_FSTYPE_DEAUTHEN           0x0c
                    127: 
                    128: /* Control */
                    129: #define WLAN_FSTYPE_BLOCKACKREQ                0x8
                    130: #define WLAN_FSTYPE_BLOCKACK           0x9
                    131: #define WLAN_FSTYPE_PSPOLL             0x0a
                    132: #define WLAN_FSTYPE_RTS                        0x0b
                    133: #define WLAN_FSTYPE_CTS                        0x0c
                    134: #define WLAN_FSTYPE_ACK                        0x0d
                    135: #define WLAN_FSTYPE_CFEND              0x0e
                    136: #define WLAN_FSTYPE_CFENDCFACK         0x0f
                    137: 
                    138: /* Data */
                    139: #define WLAN_FSTYPE_DATAONLY           0x00
                    140: #define WLAN_FSTYPE_DATA_CFACK         0x01
                    141: #define WLAN_FSTYPE_DATA_CFPOLL                0x02
                    142: #define WLAN_FSTYPE_DATA_CFACK_CFPOLL  0x03
                    143: #define WLAN_FSTYPE_NULL               0x04
                    144: #define WLAN_FSTYPE_CFACK              0x05
                    145: #define WLAN_FSTYPE_CFPOLL             0x06
                    146: #define WLAN_FSTYPE_CFACK_CFPOLL       0x07
                    147: 
                    148: 
                    149: /*================================================================*/
                    150: /* Macros */
                    151: 
                    152: /*--- FC Macros ----------------------------------------------*/
                    153: /* Macros to get/set the bitfields of the Frame Control Field */
                    154: /*  GET_FC_??? - takes the host byte-order value of an FC     */
                    155: /*               and retrieves the value of one of the        */
                    156: /*               bitfields and moves that value so its lsb is */
                    157: /*               in bit 0.                                    */
                    158: /*  SET_FC_??? - takes a host order value for one of the FC   */
                    159: /*               bitfields and moves it to the proper bit     */
                    160: /*               location for ORing into a host order FC.     */
                    161: /*               To send the FC produced from SET_FC_???,     */
                    162: /*               one must put the bytes in IEEE order.        */
                    163: /*  e.g.                                                      */
                    164: /*     printf("the frame subtype is %x",                      */
                    165: /*                 GET_FC_FTYPE( ieee2host( rx.fc )))         */
                    166: /*                                                            */
                    167: /*     tx.fc = host2ieee( SET_FC_FTYPE(WLAN_FTYP_CTL) |       */
                    168: /*                        SET_FC_FSTYPE(WLAN_FSTYPE_RTS) );   */
                    169: /*------------------------------------------------------------*/
                    170: 
                    171: #define WLAN_GET_FC_PVER(n)     (((UINT16)(n)) & (BIT0 | BIT1))
                    172: #define WLAN_GET_FC_FTYPE(n)   ((((UINT16)(n)) & (BIT2 | BIT3)) >> 2)
                    173: #define WLAN_GET_FC_FSTYPE(n)  ((((UINT16)(n)) & (BIT4|BIT5|BIT6|BIT7)) >> 4)
                    174: #define WLAN_GET_FC_TODS(n)    ((((UINT16)(n)) & (BIT8)) >> 8)
                    175: #define WLAN_GET_FC_FROMDS(n)  ((((UINT16)(n)) & (BIT9)) >> 9)
                    176: #define WLAN_GET_FC_MOREFRAG(n) ((((UINT16)(n)) & (BIT10)) >> 10)
                    177: #define WLAN_GET_FC_RETRY(n)   ((((UINT16)(n)) & (BIT11)) >> 11)
                    178: #define WLAN_GET_FC_PWRMGT(n)  ((((UINT16)(n)) & (BIT12)) >> 12)
                    179: #define WLAN_GET_FC_MOREDATA(n) ((((UINT16)(n)) & (BIT13)) >> 13)
                    180: #define WLAN_GET_FC_ISWEP(n)   ((((UINT16)(n)) & (BIT14)) >> 14)
                    181: #define WLAN_GET_FC_ORDER(n)   ((((UINT16)(n)) & (BIT15)) >> 15)
                    182: 
                    183: #define WLAN_SET_FC_PVER(n)    ((UINT16)(n))
                    184: #define WLAN_SET_FC_FTYPE(n)   (((UINT16)(n)) << 2)
                    185: #define WLAN_SET_FC_FSTYPE(n)  (((UINT16)(n)) << 4)
                    186: #define WLAN_SET_FC_TODS(n)    (((UINT16)(n)) << 8)
                    187: #define WLAN_SET_FC_FROMDS(n)  (((UINT16)(n)) << 9)
                    188: #define WLAN_SET_FC_MOREFRAG(n) (((UINT16)(n)) << 10)
                    189: #define WLAN_SET_FC_RETRY(n)   (((UINT16)(n)) << 11)
                    190: #define WLAN_SET_FC_PWRMGT(n)  (((UINT16)(n)) << 12)
                    191: #define WLAN_SET_FC_MOREDATA(n) (((UINT16)(n)) << 13)
                    192: #define WLAN_SET_FC_ISWEP(n)   (((UINT16)(n)) << 14)
                    193: #define WLAN_SET_FC_ORDER(n)   (((UINT16)(n)) << 15)
                    194: 
                    195: /*--- Duration Macros ----------------------------------------*/
                    196: /* Macros to get/set the bitfields of the Duration Field      */
                    197: /*  - the duration value is only valid when bit15 is zero     */
                    198: /*  - the firmware handles these values, so I'm not going     */
                    199: /*    these macros right now.                                 */
                    200: /*------------------------------------------------------------*/
                    201: 
                    202: /*--- Sequence Control  Macros -------------------------------*/
                    203: /* Macros to get/set the bitfields of the Sequence Control    */
                    204: /* Field.                                                     */
                    205: /*------------------------------------------------------------*/
                    206: #define WLAN_GET_SEQ_FRGNUM(n) (((UINT16)(n)) & (BIT0|BIT1|BIT2|BIT3))
                    207: #define WLAN_GET_SEQ_SEQNUM(n) ((((UINT16)(n)) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4) 
                    208: 
                    209: /*--- Data ptr macro -----------------------------------------*/
                    210: /* Creates a UINT8* to the data portion of a frame            */
                    211: /* Assumes you're passing in a ptr to the beginning of the hdr*/
                    212: /*------------------------------------------------------------*/
                    213: #define WLAN_HDR_A3_DATAP(p) (((UINT8*)(p)) + WLAN_HDR_A3_LEN)
                    214: #define WLAN_HDR_A4_DATAP(p) (((UINT8*)(p)) + WLAN_HDR_A4_LEN)
                    215: 
                    216: #define DOT11_RATE5_ISBASIC_GET(r)     (((UINT8)(r)) & BIT7)
                    217: 
                    218: /*================================================================*/
                    219: /* Types */
                    220: 
                    221: /* BSS Timestamp */
                    222: typedef UINT8 wlan_bss_ts_t[WLAN_BSS_TS_LEN];
                    223: 
                    224: /* Generic 802.11 Header types */
                    225: 
                    226: typedef struct p80211_hdr_a3
                    227: {
                    228:        UINT16  fc;
                    229:        UINT16  dur;
                    230:        UINT8   a1[WLAN_ADDR_LEN];
                    231:        UINT8   a2[WLAN_ADDR_LEN];
                    232:        UINT8   a3[WLAN_ADDR_LEN];
                    233:        UINT16  seq;
                    234: } __WLAN_ATTRIB_PACK__ p80211_hdr_a3_t;
                    235: 
                    236: typedef struct p80211_hdr_a4
                    237: {
                    238:        UINT16  fc;
                    239:        UINT16  dur;
                    240:        UINT8   a1[WLAN_ADDR_LEN];
                    241:        UINT8   a2[WLAN_ADDR_LEN];
                    242:        UINT8   a3[WLAN_ADDR_LEN];
                    243:        UINT16  seq;
                    244:        UINT8   a4[WLAN_ADDR_LEN];
                    245: } __WLAN_ATTRIB_PACK__ p80211_hdr_a4_t;
                    246: 
                    247: typedef union p80211_hdr
                    248: {
                    249:        p80211_hdr_a3_t         a3;
                    250:        p80211_hdr_a4_t         a4;
                    251: } __WLAN_ATTRIB_PACK__ p80211_hdr_t;
                    252: 
                    253: 
                    254: /*================================================================*/
                    255: /* Extern Declarations */
                    256: 
                    257: 
                    258: /*================================================================*/
                    259: /* Function Declarations */
                    260: 
                    261: /* Frame and header lenght macros */
                    262: 
                    263: #define WLAN_CTL_FRAMELEN(fstype) (\
                    264:        (fstype) == WLAN_FSTYPE_BLOCKACKREQ     ? 24 : \
                    265:        (fstype) == WLAN_FSTYPE_BLOCKACK        ? 152 : \
                    266:        (fstype) == WLAN_FSTYPE_PSPOLL          ? 20 : \
                    267:        (fstype) == WLAN_FSTYPE_RTS             ? 20 : \
                    268:        (fstype) == WLAN_FSTYPE_CTS             ? 14 : \
                    269:        (fstype) == WLAN_FSTYPE_ACK             ? 14 : \
                    270:        (fstype) == WLAN_FSTYPE_CFEND           ? 20 : \
                    271:        (fstype) == WLAN_FSTYPE_CFENDCFACK      ? 20 : 4)
                    272: 
                    273: #define WLAN_FCS_LEN                   4
                    274: 
                    275: /* ftcl in HOST order */
                    276: inline static UINT16 p80211_headerlen(UINT16 fctl)
                    277: {
                    278:        UINT16 hdrlen = 0;
                    279: 
                    280:        switch ( WLAN_GET_FC_FTYPE(fctl) ) {
                    281:        case WLAN_FTYPE_MGMT:
                    282:                hdrlen = WLAN_HDR_A3_LEN;
                    283:                break;
                    284:        case WLAN_FTYPE_DATA:
                    285:                hdrlen = WLAN_HDR_A3_LEN;
                    286:                if ( WLAN_GET_FC_TODS(fctl) && WLAN_GET_FC_FROMDS(fctl) ) {
                    287:                        hdrlen += WLAN_ADDR_LEN;
                    288:                }
                    289:                break;
                    290:        case WLAN_FTYPE_CTL:
                    291:                hdrlen = WLAN_CTL_FRAMELEN(WLAN_GET_FC_FSTYPE(fctl)) - 
                    292:                        WLAN_FCS_LEN; 
                    293:                break;
                    294:        default:
                    295:                hdrlen = WLAN_HDR_A3_LEN;
                    296:        }
                    297:        
                    298:        return hdrlen;
                    299: }
                    300: 
                    301: #endif /* _P80211HDR_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.