[BACK]Return to ieee80211.h CVS log [TXT][DIR] Up to [local] / sys / net80211

Annotation of sys/net80211/ieee80211.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: ieee80211.h,v 1.33 2007/08/01 12:23:26 damien Exp $   */
        !             2: /*     $NetBSD: ieee80211.h,v 1.6 2004/04/30 23:51:53 dyoung Exp $     */
        !             3:
        !             4: /*-
        !             5:  * Copyright (c) 2001 Atsushi Onoe
        !             6:  * Copyright (c) 2002, 2003 Sam Leffler, Errno Consulting
        !             7:  * All rights reserved.
        !             8:  *
        !             9:  * Redistribution and use in source and binary forms, with or without
        !            10:  * modification, are permitted provided that the following conditions
        !            11:  * are met:
        !            12:  * 1. Redistributions of source code must retain the above copyright
        !            13:  *    notice, this list of conditions and the following disclaimer.
        !            14:  * 2. Redistributions in binary form must reproduce the above copyright
        !            15:  *    notice, this list of conditions and the following disclaimer in the
        !            16:  *    documentation and/or other materials provided with the distribution.
        !            17:  * 3. The name of the author may not be used to endorse or promote products
        !            18:  *    derived from this software without specific prior written permission.
        !            19:  *
        !            20:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            21:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
        !            22:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            23:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
        !            24:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
        !            25:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        !            26:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        !            27:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        !            28:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
        !            29:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        !            30:  *
        !            31:  * $FreeBSD: src/sys/net80211/ieee80211.h,v 1.5 2004/04/05 17:47:40 sam Exp $
        !            32:  */
        !            33: #ifndef _NET80211_IEEE80211_H_
        !            34: #define _NET80211_IEEE80211_H_
        !            35:
        !            36: /*
        !            37:  * 802.11 protocol definitions.
        !            38:  */
        !            39:
        !            40: #define        IEEE80211_ADDR_LEN      6               /* size of 802.11 address */
        !            41: /* is 802.11 address multicast/broadcast? */
        !            42: #define        IEEE80211_IS_MULTICAST(_a)      (*(_a) & 0x01)
        !            43:
        !            44: /* IEEE 802.11 PLCP header */
        !            45: struct ieee80211_plcp_hdr {
        !            46:        u_int16_t       i_sfd;
        !            47:        u_int8_t        i_signal;
        !            48:        u_int8_t        i_service;
        !            49:        u_int16_t       i_length;
        !            50:        u_int16_t       i_crc;
        !            51: } __packed;
        !            52:
        !            53: #define IEEE80211_PLCP_SFD      0xF3A0
        !            54: #define IEEE80211_PLCP_SERVICE  0x00
        !            55: #define IEEE80211_PLCP_SERVICE_PBCC  0x08      /* PBCC encoded */
        !            56: #define IEEE80211_PLCP_SERVICE_LENEXT  0x80    /* length extension bit */
        !            57:
        !            58: /*
        !            59:  * generic definitions for IEEE 802.11 frames
        !            60:  */
        !            61: struct ieee80211_frame {
        !            62:        u_int8_t        i_fc[2];
        !            63:        u_int8_t        i_dur[2];
        !            64:        u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
        !            65:        u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
        !            66:        u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
        !            67:        u_int8_t        i_seq[2];
        !            68: } __packed;
        !            69:
        !            70: struct ieee80211_qosframe {
        !            71:        u_int8_t        i_fc[2];
        !            72:        u_int8_t        i_dur[2];
        !            73:        u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
        !            74:        u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
        !            75:        u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
        !            76:        u_int8_t        i_seq[2];
        !            77:        u_int8_t        i_qos[2];
        !            78: } __packed;
        !            79:
        !            80: /* 802.11n/D2.02 */
        !            81: struct ieee80211_htframe {
        !            82:        u_int8_t        i_fc[2];
        !            83:        u_int8_t        i_dur[2];
        !            84:        u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
        !            85:        u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
        !            86:        u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
        !            87:        u_int8_t        i_seq[2];
        !            88:        u_int8_t        i_qos[2];
        !            89:        u_int8_t        i_ht[4];
        !            90: } __packed;
        !            91:
        !            92: struct ieee80211_frame_addr4 {
        !            93:        u_int8_t        i_fc[2];
        !            94:        u_int8_t        i_dur[2];
        !            95:        u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
        !            96:        u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
        !            97:        u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
        !            98:        u_int8_t        i_seq[2];
        !            99:        u_int8_t        i_addr4[IEEE80211_ADDR_LEN];
        !           100: } __packed;
        !           101:
        !           102: struct ieee80211_qosframe_addr4 {
        !           103:        u_int8_t        i_fc[2];
        !           104:        u_int8_t        i_dur[2];
        !           105:        u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
        !           106:        u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
        !           107:        u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
        !           108:        u_int8_t        i_seq[2];
        !           109:        u_int8_t        i_addr4[IEEE80211_ADDR_LEN];
        !           110:        u_int8_t        i_qos[2];
        !           111: } __packed;
        !           112:
        !           113: /* 802.11n/D2.02 */
        !           114: struct ieee80211_htframe_addr4 {
        !           115:        u_int8_t        i_fc[2];
        !           116:        u_int8_t        i_dur[2];
        !           117:        u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
        !           118:        u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
        !           119:        u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
        !           120:        u_int8_t        i_seq[2];
        !           121:        u_int8_t        i_addr4[IEEE80211_ADDR_LEN];
        !           122:        u_int8_t        i_qos[2];
        !           123:        u_int8_t        i_ht[4];
        !           124: } __packed;
        !           125:
        !           126: /*
        !           127:  * Management Notification Frame
        !           128:  */
        !           129: struct ieee80211_mnf {
        !           130:        u_int8_t        mnf_category;
        !           131:        u_int8_t        mnf_action;
        !           132:        u_int8_t        mnf_dialog;
        !           133:        u_int8_t        mnf_status;
        !           134: } __packed;
        !           135: #define        MNF_SETUP_REQ   0
        !           136: #define        MNF_SETUP_RESP  1
        !           137: #define        MNF_TEARDOWN    2
        !           138:
        !           139:
        !           140: #define        IEEE80211_FC0_VERSION_MASK              0x03
        !           141: #define        IEEE80211_FC0_VERSION_SHIFT             0
        !           142: #define        IEEE80211_FC0_VERSION_0                 0x00
        !           143: #define        IEEE80211_FC0_TYPE_MASK                 0x0c
        !           144: #define        IEEE80211_FC0_TYPE_SHIFT                2
        !           145: #define        IEEE80211_FC0_TYPE_MGT                  0x00
        !           146: #define        IEEE80211_FC0_TYPE_CTL                  0x04
        !           147: #define        IEEE80211_FC0_TYPE_DATA                 0x08
        !           148:
        !           149: #define        IEEE80211_FC0_SUBTYPE_MASK              0xf0
        !           150: #define        IEEE80211_FC0_SUBTYPE_SHIFT             4
        !           151: /* for TYPE_MGT */
        !           152: #define        IEEE80211_FC0_SUBTYPE_ASSOC_REQ         0x00
        !           153: #define        IEEE80211_FC0_SUBTYPE_ASSOC_RESP        0x10
        !           154: #define        IEEE80211_FC0_SUBTYPE_REASSOC_REQ       0x20
        !           155: #define        IEEE80211_FC0_SUBTYPE_REASSOC_RESP      0x30
        !           156: #define        IEEE80211_FC0_SUBTYPE_PROBE_REQ         0x40
        !           157: #define        IEEE80211_FC0_SUBTYPE_PROBE_RESP        0x50
        !           158: #define        IEEE80211_FC0_SUBTYPE_BEACON            0x80
        !           159: #define        IEEE80211_FC0_SUBTYPE_ATIM              0x90
        !           160: #define        IEEE80211_FC0_SUBTYPE_DISASSOC          0xa0
        !           161: #define        IEEE80211_FC0_SUBTYPE_AUTH              0xb0
        !           162: #define        IEEE80211_FC0_SUBTYPE_DEAUTH            0xc0
        !           163: #define IEEE80211_FC0_SUBTYPE_ACTION           0xd0
        !           164: #define IEEE80211_FC0_SUBTYPE_ACTION_NOACK     0xe0    /* 802.11n/D2.00 */
        !           165: /* for TYPE_CTL */
        !           166: #define        IEEE80211_FC0_SUBTYPE_PS_POLL           0xa0
        !           167: #define        IEEE80211_FC0_SUBTYPE_RTS               0xb0
        !           168: #define        IEEE80211_FC0_SUBTYPE_CTS               0xc0
        !           169: #define        IEEE80211_FC0_SUBTYPE_ACK               0xd0
        !           170: #define        IEEE80211_FC0_SUBTYPE_CF_END            0xe0
        !           171: #define        IEEE80211_FC0_SUBTYPE_CF_END_ACK        0xf0
        !           172: /* for TYPE_DATA (bit combination) */
        !           173: #define        IEEE80211_FC0_SUBTYPE_DATA              0x00
        !           174: #define        IEEE80211_FC0_SUBTYPE_CF_ACK            0x10
        !           175: #define        IEEE80211_FC0_SUBTYPE_CF_POLL           0x20
        !           176: #define        IEEE80211_FC0_SUBTYPE_CF_ACPL           0x30
        !           177: #define        IEEE80211_FC0_SUBTYPE_NODATA            0x40
        !           178: #define        IEEE80211_FC0_SUBTYPE_CFACK             0x50
        !           179: #define        IEEE80211_FC0_SUBTYPE_CFPOLL            0x60
        !           180: #define        IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK     0x70
        !           181: #define        IEEE80211_FC0_SUBTYPE_QOS               0x80
        !           182:
        !           183: #define        IEEE80211_FC1_DIR_MASK                  0x03
        !           184: #define        IEEE80211_FC1_DIR_NODS                  0x00    /* STA->STA */
        !           185: #define        IEEE80211_FC1_DIR_TODS                  0x01    /* STA->AP  */
        !           186: #define        IEEE80211_FC1_DIR_FROMDS                0x02    /* AP ->STA */
        !           187: #define        IEEE80211_FC1_DIR_DSTODS                0x03    /* AP ->AP  */
        !           188:
        !           189: #define        IEEE80211_FC1_MORE_FRAG                 0x04
        !           190: #define        IEEE80211_FC1_RETRY                     0x08
        !           191: #define        IEEE80211_FC1_PWR_MGT                   0x10
        !           192: #define        IEEE80211_FC1_MORE_DATA                 0x20
        !           193: #define        IEEE80211_FC1_PROTECTED                 0x40
        !           194: #define        IEEE80211_FC1_WEP                       0x40    /* pre-RSNA compat */
        !           195: #define        IEEE80211_FC1_ORDER                     0x80
        !           196:
        !           197: #define        IEEE80211_SEQ_FRAG_MASK                 0x000f
        !           198: #define        IEEE80211_SEQ_FRAG_SHIFT                0
        !           199: #define        IEEE80211_SEQ_SEQ_MASK                  0xfff0
        !           200: #define        IEEE80211_SEQ_SEQ_SHIFT                 4
        !           201:
        !           202: #define        IEEE80211_NWID_LEN                      32
        !           203:
        !           204: #define        IEEE80211_QOS_TXOP                      0x00ff
        !           205: /* bit 8 is reserved */
        !           206: #define        IEEE80211_QOS_ACKPOLICY                 0x0600
        !           207: #define        IEEE80211_QOS_ESOP                      0x0800
        !           208: #define        IEEE80211_QOS_TID                       0xf000
        !           209:
        !           210: /*
        !           211:  * Control frames.
        !           212:  */
        !           213: struct ieee80211_frame_min {
        !           214:        u_int8_t        i_fc[2];
        !           215:        u_int8_t        i_dur[2];
        !           216:        u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
        !           217:        u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
        !           218:        /* FCS */
        !           219: } __packed;
        !           220:
        !           221: struct ieee80211_frame_rts {
        !           222:        u_int8_t        i_fc[2];
        !           223:        u_int8_t        i_dur[2];
        !           224:        u_int8_t        i_ra[IEEE80211_ADDR_LEN];
        !           225:        u_int8_t        i_ta[IEEE80211_ADDR_LEN];
        !           226:        /* FCS */
        !           227: } __packed;
        !           228:
        !           229: struct ieee80211_frame_cts {
        !           230:        u_int8_t        i_fc[2];
        !           231:        u_int8_t        i_dur[2];
        !           232:        u_int8_t        i_ra[IEEE80211_ADDR_LEN];
        !           233:        /* FCS */
        !           234: } __packed;
        !           235:
        !           236: struct ieee80211_frame_ack {
        !           237:        u_int8_t        i_fc[2];
        !           238:        u_int8_t        i_dur[2];
        !           239:        u_int8_t        i_ra[IEEE80211_ADDR_LEN];
        !           240:        /* FCS */
        !           241: } __packed;
        !           242:
        !           243: struct ieee80211_frame_pspoll {
        !           244:        u_int8_t        i_fc[2];
        !           245:        u_int8_t        i_aid[2];
        !           246:        u_int8_t        i_bssid[IEEE80211_ADDR_LEN];
        !           247:        u_int8_t        i_ta[IEEE80211_ADDR_LEN];
        !           248:        /* FCS */
        !           249: } __packed;
        !           250:
        !           251: struct ieee80211_frame_cfend {         /* NB: also CF-End+CF-Ack */
        !           252:        u_int8_t        i_fc[2];
        !           253:        u_int8_t        i_dur[2];       /* should be zero */
        !           254:        u_int8_t        i_ra[IEEE80211_ADDR_LEN];
        !           255:        u_int8_t        i_bssid[IEEE80211_ADDR_LEN];
        !           256:        /* FCS */
        !           257: } __packed;
        !           258:
        !           259: #define        IEEE80211_CAPINFO_ESS                   0x0001
        !           260: #define        IEEE80211_CAPINFO_IBSS                  0x0002
        !           261: #define        IEEE80211_CAPINFO_CF_POLLABLE           0x0004
        !           262: #define        IEEE80211_CAPINFO_CF_POLLREQ            0x0008
        !           263: #define        IEEE80211_CAPINFO_PRIVACY               0x0010
        !           264: #define        IEEE80211_CAPINFO_SHORT_PREAMBLE        0x0020
        !           265: #define        IEEE80211_CAPINFO_PBCC                  0x0040
        !           266: #define        IEEE80211_CAPINFO_CHNL_AGILITY          0x0080
        !           267: #define IEEE80211_CAPINFO_SPECTRUM_MGMT                0x0100
        !           268: #define IEEE80211_CAPINFO_QOS                  0x0200
        !           269: #define        IEEE80211_CAPINFO_SHORT_SLOTTIME        0x0400
        !           270: #define        IEEE80211_CAPINFO_APSD                  0x0800
        !           271: /* bit 12 is reserved */
        !           272: #define        IEEE80211_CAPINFO_DSSSOFDM              0x2000
        !           273: #define IEEE80211_CAPINFO_DELAYED_B_ACK                0x4000
        !           274: #define IEEE80211_CAPINFO_IMMEDIATE_B_ACK      0x8000
        !           275: #define IEEE80211_CAPINFO_BITS                                 \
        !           276:        "\10\01ESS\02IBSS\03CF_POLLABLE\04CF_POLLREQ"           \
        !           277:        "\05PRIVACY\06SHORT_PREAMBLE\07PBCC\10CHNL_AGILITY"     \
        !           278:        "\11SPECTRUM_MGMT\12QOS\13SHORT_SLOTTIME\14APSD"        \
        !           279:        "\16DSSSOFDM\17DELAYED_B_ACK\20IMMEDIATE_B_ACK"
        !           280:
        !           281: /*
        !           282:  * Channel attributes
        !           283:  */
        !           284: #define        IEEE80211_CHAN_TURBO    0x0010  /* Turbo channel */
        !           285: #define        IEEE80211_CHAN_CCK      0x0020  /* CCK channel */
        !           286: #define        IEEE80211_CHAN_OFDM     0x0040  /* OFDM channel */
        !           287: #define        IEEE80211_CHAN_2GHZ     0x0080  /* 2 GHz spectrum channel. */
        !           288: #define        IEEE80211_CHAN_5GHZ     0x0100  /* 5 GHz spectrum channel */
        !           289: #define        IEEE80211_CHAN_PASSIVE  0x0200  /* Only passive scan allowed */
        !           290: #define        IEEE80211_CHAN_DYN      0x0400  /* Dynamic CCK-OFDM channel */
        !           291: #define        IEEE80211_CHAN_GFSK     0x0800  /* GFSK channel (FHSS PHY) */
        !           292: #define        IEEE80211_CHAN_XR       0x1000  /* Extended range OFDM channel */
        !           293:
        !           294: /*
        !           295:  * Useful combinations of channel characteristics.
        !           296:  */
        !           297: #define        IEEE80211_CHAN_FHSS \
        !           298:        (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_GFSK)
        !           299: #define        IEEE80211_CHAN_A \
        !           300:        (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
        !           301: #define        IEEE80211_CHAN_B \
        !           302:        (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
        !           303: #define        IEEE80211_CHAN_PUREG \
        !           304:        (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM)
        !           305: #define        IEEE80211_CHAN_G \
        !           306:        (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
        !           307: #define        IEEE80211_CHAN_T \
        !           308:        (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
        !           309: #define        IEEE80211_CHAN_TG \
        !           310:        (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
        !           311:
        !           312: /*
        !           313:  * Management information element payloads
        !           314:  */
        !           315: union ieee80211_information {
        !           316:        char    ssid[IEEE80211_NWID_LEN+1];
        !           317:        struct rates {
        !           318:                u_int8_t        *p;
        !           319:        } rates;
        !           320:        struct fh {
        !           321:                u_int16_t       dwell;
        !           322:                u_int8_t        set;
        !           323:                u_int8_t        pattern;
        !           324:                u_int8_t        index;
        !           325:        } fh;
        !           326:        struct ds {
        !           327:                u_int8_t        channel;
        !           328:        } ds;
        !           329:        struct cf {
        !           330:                u_int8_t        count;
        !           331:                u_int8_t        period;
        !           332:                u_int8_t        maxdur[2];
        !           333:                u_int8_t        dur[2];
        !           334:        } cf;
        !           335:        struct tim {
        !           336:                u_int8_t        count;
        !           337:                u_int8_t        period;
        !           338:                u_int8_t        bitctl;
        !           339:                /* u_int8_t     pvt[251]; The driver needs to use this. */
        !           340:        } tim;
        !           341:        struct ibss {
        !           342:                u_int16_t       atim;
        !           343:        } ibss;
        !           344:        struct challenge {
        !           345:                u_int8_t        *p;
        !           346:                u_int8_t        len;
        !           347:        } challenge;
        !           348:        struct erp {
        !           349:                u_int8_t        flags;
        !           350:        } erp;
        !           351:        struct country {
        !           352:                u_int8_t        cc[3];          /* ISO CC+(I)ndoor/(O)utdoor */
        !           353:                struct {
        !           354:                        u_int8_t schan;         /* starting channel */
        !           355:                        u_int8_t nchan;         /* number channels */
        !           356:                        u_int8_t maxtxpwr;
        !           357:                } band[4];                      /* up to 4 sub bands */
        !           358:        } country;
        !           359:        struct ath {
        !           360:                u_int8_t        flags;
        !           361:        } ath;
        !           362: };
        !           363:
        !           364: enum {
        !           365:        IEEE80211_ELEMID_SSID                   = 0,
        !           366:        IEEE80211_ELEMID_RATES                  = 1,
        !           367:        IEEE80211_ELEMID_FHPARMS                = 2,
        !           368:        IEEE80211_ELEMID_DSPARMS                = 3,
        !           369:        IEEE80211_ELEMID_CFPARMS                = 4,
        !           370:        IEEE80211_ELEMID_TIM                    = 5,
        !           371:        IEEE80211_ELEMID_IBSSPARMS              = 6,
        !           372:        IEEE80211_ELEMID_COUNTRY                = 7,
        !           373:        IEEE80211_ELEMID_QBSS_LOAD              = 11,
        !           374:        IEEE80211_ELEMID_EDCAPARMS              = 12,
        !           375:        IEEE80211_ELEMID_CHALLENGE              = 16,
        !           376:        /* 17-31 reserved for challenge text extension */
        !           377:        IEEE80211_ELEMID_ERP                    = 42,
        !           378:        IEEE80211_ELEMID_QOS_CAP                = 46,
        !           379:        IEEE80211_ELEMID_RSN                    = 48,
        !           380:        IEEE80211_ELEMID_XRATES                 = 50,
        !           381:        IEEE80211_ELEMID_TPC                    = 150,
        !           382:        IEEE80211_ELEMID_CCKM                   = 156,
        !           383:        IEEE80211_ELEMID_VENDOR                 = 221   /* vendor private */
        !           384: };
        !           385:
        !           386: #define IEEE80211_CHALLENGE_LEN                        128
        !           387:
        !           388: #define        IEEE80211_RATE_BASIC                    0x80
        !           389: #define        IEEE80211_RATE_VAL                      0x7f
        !           390: #define        IEEE80211_RATE_SIZE                     8       /* 802.11 standard */
        !           391: #define        IEEE80211_RATE_MAXSIZE                  15      /* max rates we'll handle */
        !           392:
        !           393: /* ERP information element flags */
        !           394: #define        IEEE80211_ERP_NON_ERP_PRESENT           0x01
        !           395: #define        IEEE80211_ERP_USE_PROTECTION            0x02
        !           396: #define        IEEE80211_ERP_BARKER_MODE               0x04
        !           397:
        !           398: /*
        !           399:  * 802.11e EDCA Access Categories.
        !           400:  */
        !           401: enum ieee80211_edca_ac {
        !           402:        EDCA_AC_BK  = 1,        /* Background */
        !           403:        EDCA_AC_BE  = 0,        /* Best Effort */
        !           404:        EDCA_AC_VI  = 2,        /* Video */
        !           405:        EDCA_AC_VO  = 3         /* Voice */
        !           406: };
        !           407: #define EDCA_NUM_AC    4
        !           408:
        !           409: /* number of TID values (traffic identifier) */
        !           410: #define IEEE80211_NUM_TID      16
        !           411:
        !           412: /* Atheros private advanced capabilities info */
        !           413: #define        ATHEROS_CAP_TURBO_PRIME                 0x01
        !           414: #define        ATHEROS_CAP_COMPRESSION                 0x02
        !           415: #define        ATHEROS_CAP_FAST_FRAME                  0x04
        !           416: /* bits 3-6 reserved */
        !           417: #define        ATHEROS_CAP_BOOST                       0x80
        !           418:
        !           419: /* Organizationally Unique Identifiers */
        !           420: /* See http://standards.ieee.org/regauth/oui/oui.txt for a list */
        !           421: #define ATHEROS_OUI    ((const u_int8_t[]){ 0x00, 0x03, 0x7f })
        !           422: #define BROADCOM_OUI   ((const u_int8_t[]){ 0c00, 0x90, 0x4c })
        !           423: #define IEEE80211_OUI  ((const u_int8_t[]){ 0x00, 0x0f, 0xac })
        !           424: #define MICROSOFT_OUI  ((const u_int8_t[]){ 0x00, 0x50, 0xf2 })
        !           425:
        !           426: #define        IEEE80211_AUTH_ALGORITHM(auth) \
        !           427:        ((auth)[0] | ((auth)[1] << 8))
        !           428: #define        IEEE80211_AUTH_TRANSACTION(auth) \
        !           429:        ((auth)[2] | ((auth)[3] << 8))
        !           430: #define        IEEE80211_AUTH_STATUS(auth) \
        !           431:        ((auth)[4] | ((auth)[5] << 8))
        !           432:
        !           433: #define        IEEE80211_AUTH_ALG_OPEN                 0x0000
        !           434: #define        IEEE80211_AUTH_ALG_SHARED               0x0001
        !           435: #define        IEEE80211_AUTH_ALG_LEAP                 0x0080
        !           436:
        !           437: enum {
        !           438:        IEEE80211_AUTH_OPEN_REQUEST             = 1,
        !           439:        IEEE80211_AUTH_OPEN_RESPONSE            = 2
        !           440: };
        !           441:
        !           442: enum {
        !           443:        IEEE80211_AUTH_SHARED_REQUEST           = 1,
        !           444:        IEEE80211_AUTH_SHARED_CHALLENGE         = 2,
        !           445:        IEEE80211_AUTH_SHARED_RESPONSE          = 3,
        !           446:        IEEE80211_AUTH_SHARED_PASS              = 4
        !           447: };
        !           448:
        !           449: /*
        !           450:  * Reason codes (see Table 22).
        !           451:  */
        !           452: enum {
        !           453:        IEEE80211_REASON_UNSPECIFIED            = 1,
        !           454:        IEEE80211_REASON_AUTH_EXPIRE            = 2,
        !           455:        IEEE80211_REASON_AUTH_LEAVE             = 3,
        !           456:        IEEE80211_REASON_ASSOC_EXPIRE           = 4,
        !           457:        IEEE80211_REASON_ASSOC_TOOMANY          = 5,
        !           458:        IEEE80211_REASON_NOT_AUTHED             = 6,
        !           459:        IEEE80211_REASON_NOT_ASSOCED            = 7,
        !           460:        IEEE80211_REASON_ASSOC_LEAVE            = 8,
        !           461:        IEEE80211_REASON_ASSOC_NOT_AUTHED       = 9,
        !           462:
        !           463:        /* XXX the following two reason codes are not correct */
        !           464:        IEEE80211_REASON_RSN_REQUIRED           = 11,
        !           465:        IEEE80211_REASON_RSN_INCONSISTENT       = 12,
        !           466:
        !           467:        IEEE80211_REASON_IE_INVALID             = 13,
        !           468:        IEEE80211_REASON_MIC_FAILURE            = 14,
        !           469:
        !           470:        IEEE80211_REASON_BAD_GROUP_CIPHER       = 18,
        !           471:        IEEE80211_REASON_BAD_PAIRWISE_CIPHER    = 19,
        !           472:        IEEE80211_REASON_BAD_AKMP               = 20,
        !           473:        IEEE80211_REASON_RSN_IE_VER_UNSUP       = 21,
        !           474:        IEEE80211_REASON_RSN_IE_BAD_CAP         = 22,
        !           475:
        !           476:        IEEE80211_REASON_CIPHER_REJ             = 24
        !           477: };
        !           478:
        !           479: /*
        !           480:  * Status codes (see Table 23).
        !           481:  */
        !           482: enum {
        !           483:        IEEE80211_STATUS_SUCCESS                = 0,
        !           484:        IEEE80211_STATUS_UNSPECIFIED            = 1,
        !           485:        IEEE80211_STATUS_CAPINFO                = 10,
        !           486:        IEEE80211_STATUS_NOT_ASSOCED            = 11,
        !           487:        IEEE80211_STATUS_OTHER                  = 12,
        !           488:        IEEE80211_STATUS_ALG                    = 13,
        !           489:        IEEE80211_STATUS_SEQUENCE               = 14,
        !           490:        IEEE80211_STATUS_CHALLENGE              = 15,
        !           491:        IEEE80211_STATUS_TIMEOUT                = 16,
        !           492:        IEEE80211_STATUS_TOOMANY                = 17,
        !           493:        IEEE80211_STATUS_BASIC_RATE             = 18,
        !           494:        IEEE80211_STATUS_SP_REQUIRED            = 19,
        !           495:        IEEE80211_STATUS_PBCC_REQUIRED          = 20,
        !           496:        IEEE80211_STATUS_CA_REQUIRED            = 21,
        !           497:        IEEE80211_STATUS_TOO_MANY_STATIONS      = 22,
        !           498:        IEEE80211_STATUS_RATES                  = 23,
        !           499:        IEEE80211_STATUS_SHORTSLOT_REQUIRED     = 25,
        !           500:        IEEE80211_STATUS_DSSSOFDM_REQUIRED      = 26
        !           501: };
        !           502:
        !           503: #define        IEEE80211_WEP_KEYLEN                    5       /* 40bit */
        !           504: #define        IEEE80211_WEP_NKID                      4       /* number of key ids */
        !           505:
        !           506: /* WEP header constants */
        !           507: #define        IEEE80211_WEP_IVLEN                     3       /* 24bit */
        !           508: #define        IEEE80211_WEP_KIDLEN                    1       /* 1 octet */
        !           509: #define        IEEE80211_WEP_CRCLEN                    4       /* CRC-32 */
        !           510: #define        IEEE80211_CRC_LEN                       4
        !           511: #define        IEEE80211_WEP_TOTLEN            (IEEE80211_WEP_IVLEN + \
        !           512:                                         IEEE80211_WEP_KIDLEN + \
        !           513:                                         IEEE80211_WEP_CRCLEN)
        !           514:
        !           515: /*
        !           516:  * 802.11i defines an extended IV for use with non-WEP ciphers.
        !           517:  * When the EXTIV bit is set in the key id byte an additional
        !           518:  * 4 bytes immediately follow the IV for TKIP.  For CCMP the
        !           519:  * EXTIV bit is likewise set but the 8 bytes represent the
        !           520:  * CCMP header rather than IV+extended-IV.
        !           521:  */
        !           522: #define        IEEE80211_WEP_EXTIV             0x20
        !           523: #define        IEEE80211_WEP_EXTIVLEN          4       /* extended IV length */
        !           524: #define        IEEE80211_WEP_MICLEN            8       /* trailing MIC */
        !           525:
        !           526: /*
        !           527:  * Maximum acceptable MTU is:
        !           528:  *     IEEE80211_MAX_LEN - WEP overhead - CRC -
        !           529:  *             QoS overhead - RSN/WPA overhead
        !           530:  * Min is arbitrarily chosen > IEEE80211_MIN_LEN.  The default
        !           531:  * mtu is Ethernet-compatible; it's set by ether_ifattach.
        !           532:  */
        !           533: #define        IEEE80211_MTU_MAX                       2290
        !           534: #define        IEEE80211_MTU_MIN                       32
        !           535:
        !           536: #define        IEEE80211_MAX_LEN                       (2300 + IEEE80211_CRC_LEN + \
        !           537:     (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))
        !           538: #define        IEEE80211_ACK_LEN \
        !           539:        (sizeof(struct ieee80211_frame_ack) + IEEE80211_CRC_LEN)
        !           540: #define        IEEE80211_MIN_LEN \
        !           541:        (sizeof(struct ieee80211_frame_min) + IEEE80211_CRC_LEN)
        !           542:
        !           543: /*
        !           544:  * The 802.11 spec says at most 2007 stations may be
        !           545:  * associated at once.  For most AP's this is way more
        !           546:  * than is feasible so we use a default of 1800. This
        !           547:  * number may be overridden by the driver and/or by
        !           548:  * user configuration.
        !           549:  */
        !           550: #define        IEEE80211_AID_MAX               2007
        !           551: #define        IEEE80211_AID_DEF               1800
        !           552:
        !           553: #define        IEEE80211_AID(b)                ((b) &~ 0xc000)
        !           554: #define        IEEE80211_AID_SET(b, w) \
        !           555:        ((w)[IEEE80211_AID(b) / 32] |= (1 << (IEEE80211_AID(b) % 32)))
        !           556: #define        IEEE80211_AID_CLR(b, w) \
        !           557:        ((w)[IEEE80211_AID(b) / 32] &= ~(1 << (IEEE80211_AID(b) % 32)))
        !           558: #define        IEEE80211_AID_ISSET(b, w) \
        !           559:        ((w)[IEEE80211_AID(b) / 32] & (1 << (IEEE80211_AID(b) % 32)))
        !           560:
        !           561: /*
        !           562:  * RTS frame length parameters.  The default is specified in
        !           563:  * the 802.11 spec.  The max may be wrong for jumbo frames.
        !           564:  */
        !           565: #define        IEEE80211_RTS_DEFAULT                   512
        !           566: #define        IEEE80211_RTS_MIN                       1
        !           567: #define        IEEE80211_RTS_MAX                       IEEE80211_MAX_LEN
        !           568:
        !           569: /* One Time Unit (TU) is 1Kus = 1024 microseconds. */
        !           570: #define IEEE80211_DUR_TU               1024
        !           571:
        !           572: /* IEEE 802.11b durations for DSSS PHY in microseconds */
        !           573: #define IEEE80211_DUR_DS_LONG_PREAMBLE 144
        !           574: #define IEEE80211_DUR_DS_SHORT_PREAMBLE        72
        !           575: #define        IEEE80211_DUR_DS_PREAMBLE_DIFFERENCE    \
        !           576:     (IEEE80211_DUR_DS_LONG_PREAMBLE - IEEE80211_DUR_DS_SHORT_PREAMBLE)
        !           577: #define IEEE80211_DUR_DS_FAST_PLCPHDR  24
        !           578: #define IEEE80211_DUR_DS_SLOW_PLCPHDR  48
        !           579: #define        IEEE80211_DUR_DS_PLCPHDR_DIFFERENCE     \
        !           580:     (IEEE80211_DUR_DS_SLOW_PLCPHDR - IEEE80211_DUR_DS_FAST_PLCPHDR)
        !           581: #define IEEE80211_DUR_DS_SLOW_ACK      112
        !           582: #define IEEE80211_DUR_DS_FAST_ACK      56
        !           583: #define IEEE80211_DUR_DS_SLOW_CTS      112
        !           584: #define IEEE80211_DUR_DS_FAST_CTS      56
        !           585: #define IEEE80211_DUR_DS_SLOT          20
        !           586: #define IEEE80211_DUR_DS_SIFS          10
        !           587: #define IEEE80211_DUR_DS_PIFS  (IEEE80211_DUR_DS_SIFS + IEEE80211_DUR_DS_SLOT)
        !           588: #define IEEE80211_DUR_DS_DIFS  (IEEE80211_DUR_DS_SIFS + \
        !           589:                                 2 * IEEE80211_DUR_DS_SLOT)
        !           590: #define IEEE80211_DUR_DS_EIFS  (IEEE80211_DUR_DS_SIFS + \
        !           591:                                 IEEE80211_DUR_DS_SLOW_ACK + \
        !           592:                                 IEEE80211_DUR_DS_LONG_PREAMBLE + \
        !           593:                                 IEEE80211_DUR_DS_SLOW_PLCPHDR + \
        !           594:                                 IEEE80211_DUR_DIFS)
        !           595:
        !           596: enum {
        !           597:        IEEE80211_AUTH_NONE     = 0,
        !           598:        IEEE80211_AUTH_OPEN     = 1,            /* open */
        !           599:        IEEE80211_AUTH_SHARED   = 2,            /* shared-key */
        !           600:        IEEE80211_AUTH_8021X    = 3,            /* 802.1x */
        !           601:        IEEE80211_AUTH_AUTO     = 4,            /* auto-select/accept */
        !           602:        IEEE80211_AUTH_WPA      = 5,            /* WPA w/ 802.1x */
        !           603:        IEEE80211_AUTH_WPA_PSK  = 6,            /* WPA w/ preshared key */
        !           604:        IEEE80211_AUTH_WPA2     = 7,            /* WPA2 w/ 802.1x */
        !           605:        IEEE80211_AUTH_WPA2_PSK = 8             /* WPA2 w/ preshared key */
        !           606: };
        !           607:
        !           608: /*
        !           609:  * The RSNA key descriptor used by IEEE 802.11 does not use the IEEE 802.1X
        !           610:  * key descriptor.  Instead, it uses the key descriptor described in 8.5.2.
        !           611:  */
        !           612: #define EAPOL_VERSION  1
        !           613:
        !           614: #define EAPOL_KEY_NONCE_LEN    32
        !           615: #define EAPOL_KEY_IV_LEN       16
        !           616: #define EAPOL_KEY_MIC_LEN      16
        !           617:
        !           618: struct ieee80211_eapol_key {
        !           619:        u_int8_t        version;
        !           620:        u_int8_t        type;
        !           621: /* IEEE Std 802.1X-2004, 7.5.4 (only type EAPOL-Key is used here) */
        !           622: #define EAP_PACKET     0
        !           623: #define EAPOL_START    1
        !           624: #define EAPOL_LOGOFF   2
        !           625: #define EAPOL_KEY      3
        !           626: #define EAPOL_ASF_ALERT        4
        !           627:
        !           628:        u_int8_t        len[2];
        !           629:        u_int8_t        desc;
        !           630: /* IEEE Std 802.1X-2004, 7.6.1 */
        !           631: #define EAPOL_KEY_DESC_RC4               1     /* deprecated */
        !           632: #define EAPOL_KEY_DESC_IEEE80211         2
        !           633: #define EAPOL_KEY_DESC_WPA1            254     /* non-standard WPA1 */
        !           634:
        !           635:        u_int8_t        info[2];
        !           636: #define EAPOL_KEY_VERSION_MASK 0x7
        !           637: #define EAPOL_KEY_DESC_V1      1
        !           638: #define EAPOL_KEY_DESC_V2      2
        !           639: #define EAPOL_KEY_PAIRWISE     (1 <<  3)
        !           640: #define EAPOL_KEY_INSTALL      (1 <<  6)       /* I */
        !           641: #define EAPOL_KEY_KEYACK       (1 <<  7)       /* A */
        !           642: #define EAPOL_KEY_KEYMIC       (1 <<  8)       /* M */
        !           643: #define EAPOL_KEY_SECURE       (1 <<  9)       /* S */
        !           644: #define EAPOL_KEY_ERROR                (1 << 10)
        !           645: #define EAPOL_KEY_REQUEST      (1 << 11)
        !           646: #define EAPOL_KEY_ENCRYPTED    (1 << 12)
        !           647: #define EAPOL_KEY_SMK          (1 << 13)
        !           648: /* WPA1 compatibility */
        !           649: #define EAPOL_KEY_WPA_KID_MASK 0x3
        !           650: #define EAPOL_KEY_WPA_KID_SHIFT        4
        !           651: #define EAPOL_KEY_WPA_TX       EAPOL_KEY_INSTALL
        !           652:
        !           653:        u_int8_t        keylen[2];
        !           654:        u_int8_t        replaycnt[8];
        !           655:        u_int8_t        nonce[EAPOL_KEY_NONCE_LEN];
        !           656:        u_int8_t        iv[EAPOL_KEY_IV_LEN];
        !           657:        u_int8_t        rsc[8];
        !           658:        u_int8_t        reserved[8];
        !           659:        u_int8_t        mic[EAPOL_KEY_MIC_LEN];
        !           660:        u_int8_t        paylen[2];
        !           661: } __packed;
        !           662:
        !           663: /* Pairwise Transient Key (see 8.5.1.2) */
        !           664: struct ieee80211_ptk {
        !           665:        u_int8_t        kck[16];        /* Key Confirmation Key */
        !           666:        u_int8_t        kek[16];        /* Key Encryption Key */
        !           667:        u_int8_t        tk[32];         /* Temporal Key */
        !           668: } __packed;
        !           669:
        !           670: #define IEEE80211_PMKID_LEN    16
        !           671: #define IEEE80211_SMKID_LEN    16
        !           672:
        !           673: /*
        !           674:  * Key Data Encapsulation (see Table 62).
        !           675:  */
        !           676: enum {
        !           677:        IEEE80211_KDE_GTK       = 1,
        !           678:        IEEE80211_KDE_MACADDR   = 3,
        !           679:        IEEE80211_KDE_PMKID     = 4,
        !           680:        IEEE80211_KDE_SMK       = 5,
        !           681:        IEEE80211_KDE_NONCE     = 6,
        !           682:        IEEE80211_KDE_LIFETIME  = 7,
        !           683:        IEEE80211_KDE_ERROR     = 8
        !           684: };
        !           685:
        !           686: #endif /* _NET80211_IEEE80211_H_ */

CVSweb