The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/net80211/ieee80211.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $OpenBSD: ieee80211.h,v 1.63 2022/03/14 15:07:24 stsp 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  *
   18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   20  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   21  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   23  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   28  */
   29 #ifndef _NET80211_IEEE80211_H_
   30 #define _NET80211_IEEE80211_H_
   31 
   32 /*
   33  * 802.11 protocol definitions.
   34  */
   35 
   36 #define IEEE80211_ADDR_LEN      6       /* size of 802.11 address */
   37 /* is 802.11 address multicast/broadcast? */
   38 #define IEEE80211_IS_MULTICAST(_a)      (*(_a) & 0x01)
   39 
   40 /*
   41  * Generic definitions for IEEE 802.11 frames.
   42  */
   43 struct ieee80211_frame {
   44         u_int8_t        i_fc[2];
   45         u_int8_t        i_dur[2];
   46         u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
   47         u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
   48         u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
   49         u_int8_t        i_seq[2];
   50 } __packed;
   51 
   52 struct ieee80211_qosframe {
   53         u_int8_t        i_fc[2];
   54         u_int8_t        i_dur[2];
   55         u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
   56         u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
   57         u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
   58         u_int8_t        i_seq[2];
   59         u_int8_t        i_qos[2];
   60 } __packed;
   61 
   62 struct ieee80211_htframe {              /* 11n */
   63         u_int8_t        i_fc[2];
   64         u_int8_t        i_dur[2];
   65         u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
   66         u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
   67         u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
   68         u_int8_t        i_seq[2];
   69         u_int8_t        i_qos[2];
   70         u_int8_t        i_ht[4];
   71 } __packed;
   72 
   73 struct ieee80211_frame_addr4 {
   74         u_int8_t        i_fc[2];
   75         u_int8_t        i_dur[2];
   76         u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
   77         u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
   78         u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
   79         u_int8_t        i_seq[2];
   80         u_int8_t        i_addr4[IEEE80211_ADDR_LEN];
   81 } __packed;
   82 
   83 struct ieee80211_qosframe_addr4 {
   84         u_int8_t        i_fc[2];
   85         u_int8_t        i_dur[2];
   86         u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
   87         u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
   88         u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
   89         u_int8_t        i_seq[2];
   90         u_int8_t        i_addr4[IEEE80211_ADDR_LEN];
   91         u_int8_t        i_qos[2];
   92 } __packed;
   93 
   94 struct ieee80211_htframe_addr4 {        /* 11n */
   95         u_int8_t        i_fc[2];
   96         u_int8_t        i_dur[2];
   97         u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
   98         u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
   99         u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
  100         u_int8_t        i_seq[2];
  101         u_int8_t        i_addr4[IEEE80211_ADDR_LEN];
  102         u_int8_t        i_qos[2];
  103         u_int8_t        i_ht[4];
  104 } __packed;
  105 
  106 #define IEEE80211_FC0_VERSION_MASK              0x03
  107 #define IEEE80211_FC0_VERSION_SHIFT             0
  108 #define IEEE80211_FC0_VERSION_0                 0x00
  109 #define IEEE80211_FC0_TYPE_MASK                 0x0c
  110 #define IEEE80211_FC0_TYPE_SHIFT                2
  111 #define IEEE80211_FC0_TYPE_MGT                  0x00
  112 #define IEEE80211_FC0_TYPE_CTL                  0x04
  113 #define IEEE80211_FC0_TYPE_DATA                 0x08
  114 
  115 #define IEEE80211_FC0_SUBTYPE_MASK              0xf0
  116 #define IEEE80211_FC0_SUBTYPE_SHIFT             4
  117 /* for TYPE_MGT */
  118 #define IEEE80211_FC0_SUBTYPE_ASSOC_REQ         0x00
  119 #define IEEE80211_FC0_SUBTYPE_ASSOC_RESP        0x10
  120 #define IEEE80211_FC0_SUBTYPE_REASSOC_REQ       0x20
  121 #define IEEE80211_FC0_SUBTYPE_REASSOC_RESP      0x30
  122 #define IEEE80211_FC0_SUBTYPE_PROBE_REQ         0x40
  123 #define IEEE80211_FC0_SUBTYPE_PROBE_RESP        0x50
  124 #define IEEE80211_FC0_SUBTYPE_BEACON            0x80
  125 #define IEEE80211_FC0_SUBTYPE_ATIM              0x90
  126 #define IEEE80211_FC0_SUBTYPE_DISASSOC          0xa0
  127 #define IEEE80211_FC0_SUBTYPE_AUTH              0xb0
  128 #define IEEE80211_FC0_SUBTYPE_DEAUTH            0xc0
  129 #define IEEE80211_FC0_SUBTYPE_ACTION            0xd0
  130 #define IEEE80211_FC0_SUBTYPE_ACTION_NOACK      0xe0    /* 11n */
  131 /* for TYPE_CTL */
  132 #define IEEE80211_FC0_SUBTYPE_WRAPPER           0x70    /* 11n */
  133 #define IEEE80211_FC0_SUBTYPE_BAR               0x80
  134 #define IEEE80211_FC0_SUBTYPE_BA                0x90
  135 #define IEEE80211_FC0_SUBTYPE_PS_POLL           0xa0
  136 #define IEEE80211_FC0_SUBTYPE_RTS               0xb0
  137 #define IEEE80211_FC0_SUBTYPE_CTS               0xc0
  138 #define IEEE80211_FC0_SUBTYPE_ACK               0xd0
  139 #define IEEE80211_FC0_SUBTYPE_CF_END            0xe0
  140 #define IEEE80211_FC0_SUBTYPE_CF_END_ACK        0xf0
  141 /* for TYPE_DATA (bit combination) */
  142 #define IEEE80211_FC0_SUBTYPE_DATA              0x00
  143 #define IEEE80211_FC0_SUBTYPE_DATA_CF_ACK       0x10
  144 #define IEEE80211_FC0_SUBTYPE_DATA_CF_POLL      0x20
  145 #define IEEE80211_FC0_SUBTYPE_DATA_CF_ACKPOLL   0x30
  146 #define IEEE80211_FC0_SUBTYPE_NODATA            0x40
  147 #define IEEE80211_FC0_SUBTYPE_NODATA_CF_ACK     0x50
  148 #define IEEE80211_FC0_SUBTYPE_NODATA_CF_POLL    0x60
  149 #define IEEE80211_FC0_SUBTYPE_NODATA_CF_ACKPOLL 0x70
  150 #define IEEE80211_FC0_SUBTYPE_QOS               0x80
  151 
  152 #define IEEE80211_FC1_DIR_MASK                  0x03
  153 #define IEEE80211_FC1_DIR_NODS                  0x00    /* STA->STA */
  154 #define IEEE80211_FC1_DIR_TODS                  0x01    /* STA->AP  */
  155 #define IEEE80211_FC1_DIR_FROMDS                0x02    /* AP ->STA */
  156 #define IEEE80211_FC1_DIR_DSTODS                0x03    /* AP ->AP  */
  157 
  158 #define IEEE80211_FC1_MORE_FRAG                 0x04
  159 #define IEEE80211_FC1_RETRY                     0x08
  160 #define IEEE80211_FC1_PWR_MGT                   0x10
  161 #define IEEE80211_FC1_MORE_DATA                 0x20
  162 #define IEEE80211_FC1_PROTECTED                 0x40
  163 #define IEEE80211_FC1_WEP                       0x40    /* pre-RSNA compat */
  164 #define IEEE80211_FC1_ORDER                     0x80
  165 #define IEEE80211_FC1_BITS                                      \
  166         "\2\03MORE_FRAG\04RETRY\05PWR_MGT\06MORE_DATA"         \
  167         "\07PROTECTED\08ORDER"
  168 
  169 /*
  170  * Sequence Control field (see 802.11-2012 8.2.4.4).
  171  */
  172 #define IEEE80211_SEQ_FRAG_MASK                 0x000f
  173 #define IEEE80211_SEQ_FRAG_SHIFT                0
  174 #define IEEE80211_SEQ_SEQ_MASK                  0xfff0
  175 #define IEEE80211_SEQ_SEQ_SHIFT                 4
  176 
  177 #define IEEE80211_NWID_LEN                      32
  178 #define IEEE80211_MMIE_LEN                      18      /* 11w */
  179 
  180 /*
  181  * QoS Control field (see 802.11-2012 8.2.4.5).
  182  */
  183 #define IEEE80211_QOS_TXOP                      0xff00
  184 #define IEEE80211_QOS_AMSDU                     0x0080  /* 11n */
  185 #define IEEE80211_QOS_ACK_POLICY_NORMAL         0x0000
  186 #define IEEE80211_QOS_ACK_POLICY_NOACK          0x0020
  187 #define IEEE80211_QOS_ACK_POLICY_NOEXPLACK      0x0040
  188 #define IEEE80211_QOS_ACK_POLICY_BA             0x0060
  189 #define IEEE80211_QOS_ACK_POLICY_MASK           0x0060
  190 #define IEEE80211_QOS_ACK_POLICY_SHIFT          5
  191 #define IEEE80211_QOS_EOSP                      0x0010
  192 #define IEEE80211_QOS_TID                       0x000f
  193 
  194 /*
  195  * Control frames.
  196  */
  197 struct ieee80211_frame_min {
  198         u_int8_t        i_fc[2];
  199         u_int8_t        i_dur[2];
  200         u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
  201         u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
  202         /* FCS */
  203 } __packed;
  204 
  205 struct ieee80211_frame_rts {
  206         u_int8_t        i_fc[2];
  207         u_int8_t        i_dur[2];
  208         u_int8_t        i_ra[IEEE80211_ADDR_LEN];
  209         u_int8_t        i_ta[IEEE80211_ADDR_LEN];
  210         /* FCS */
  211 } __packed;
  212 
  213 struct ieee80211_frame_cts {
  214         u_int8_t        i_fc[2];
  215         u_int8_t        i_dur[2];
  216         u_int8_t        i_ra[IEEE80211_ADDR_LEN];
  217         /* FCS */
  218 } __packed;
  219 
  220 struct ieee80211_frame_ack {
  221         u_int8_t        i_fc[2];
  222         u_int8_t        i_dur[2];
  223         u_int8_t        i_ra[IEEE80211_ADDR_LEN];
  224         /* FCS */
  225 } __packed;
  226 
  227 struct ieee80211_frame_pspoll {
  228         u_int8_t        i_fc[2];
  229         u_int8_t        i_aid[2];
  230         u_int8_t        i_bssid[IEEE80211_ADDR_LEN];
  231         u_int8_t        i_ta[IEEE80211_ADDR_LEN];
  232         /* FCS */
  233 } __packed;
  234 
  235 struct ieee80211_frame_cfend {          /* NB: also CF-End+CF-Ack */
  236         u_int8_t        i_fc[2];
  237         u_int8_t        i_dur[2];       /* should be zero */
  238         u_int8_t        i_ra[IEEE80211_ADDR_LEN];
  239         u_int8_t        i_bssid[IEEE80211_ADDR_LEN];
  240         /* FCS */
  241 } __packed;
  242 
  243 #ifdef _KERNEL
  244 static __inline int
  245 ieee80211_has_seq(const struct ieee80211_frame *wh)
  246 {
  247         return (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) !=
  248             IEEE80211_FC0_TYPE_CTL;
  249 }
  250 
  251 static __inline int
  252 ieee80211_has_addr4(const struct ieee80211_frame *wh)
  253 {
  254         return (wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) ==
  255             IEEE80211_FC1_DIR_DSTODS;
  256 }
  257 
  258 static __inline int
  259 ieee80211_has_qos(const struct ieee80211_frame *wh)
  260 {
  261         return (wh->i_fc[0] &
  262             (IEEE80211_FC0_TYPE_MASK | IEEE80211_FC0_SUBTYPE_QOS)) ==
  263             (IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_QOS);
  264 }
  265 
  266 static __inline int
  267 ieee80211_has_htc(const struct ieee80211_frame *wh)
  268 {
  269         return (wh->i_fc[1] & IEEE80211_FC1_ORDER) &&
  270             (ieee80211_has_qos(wh) ||
  271              (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) ==
  272              IEEE80211_FC0_TYPE_MGT);
  273 }
  274 
  275 static __inline u_int16_t
  276 ieee80211_get_qos(const struct ieee80211_frame *wh)
  277 {
  278         const u_int8_t *frm;
  279 
  280         if (ieee80211_has_addr4(wh))
  281                 frm = ((const struct ieee80211_qosframe_addr4 *)wh)->i_qos;
  282         else
  283                 frm = ((const struct ieee80211_qosframe *)wh)->i_qos;
  284 
  285         return letoh16(*(const u_int16_t *)frm);
  286 }
  287 #endif  /* _KERNEL */
  288 
  289 /*
  290  * Capability Information field (see 802.11-2012 8.4.1.4).
  291  */
  292 #define IEEE80211_CAPINFO_ESS                   0x0001
  293 #define IEEE80211_CAPINFO_IBSS                  0x0002
  294 #define IEEE80211_CAPINFO_CF_POLLABLE           0x0004
  295 #define IEEE80211_CAPINFO_CF_POLLREQ            0x0008
  296 #define IEEE80211_CAPINFO_PRIVACY               0x0010
  297 #define IEEE80211_CAPINFO_SHORT_PREAMBLE        0x0020
  298 #define IEEE80211_CAPINFO_PBCC                  0x0040
  299 #define IEEE80211_CAPINFO_CHNL_AGILITY          0x0080
  300 #define IEEE80211_CAPINFO_SPECTRUM_MGMT         0x0100
  301 #define IEEE80211_CAPINFO_QOS                   0x0200
  302 #define IEEE80211_CAPINFO_SHORT_SLOTTIME        0x0400
  303 #define IEEE80211_CAPINFO_APSD                  0x0800
  304 #define IEEE80211_CAPINFO_RADIO_MEASUREMENT     0x1000
  305 #define IEEE80211_CAPINFO_DSSSOFDM              0x2000
  306 #define IEEE80211_CAPINFO_DELAYED_B_ACK         0x4000
  307 #define IEEE80211_CAPINFO_IMMEDIATE_B_ACK       0x8000
  308 #define IEEE80211_CAPINFO_BITS                                  \
  309         "\1\01ESS\02IBSS\03CF_POLLABLE\04CF_POLLREQ"           \
  310         "\05PRIVACY\06SHORT_PREAMBLE\07PBCC\10CHNL_AGILITY"     \
  311         "\11SPECTRUM_MGMT\12QOS\13SHORT_SLOTTIME\14APSD"        \
  312         "\15RADIO_MEASUREMENT\16DSSSOFDM\17DELAYED_B_ACK\20IMMEDIATE_B_ACK"
  313 
  314 /*
  315  * Information element IDs (see 802.11-2012 Table 8.4.2).
  316  */
  317 enum {
  318         IEEE80211_ELEMID_SSID                   = 0,
  319         IEEE80211_ELEMID_RATES                  = 1,
  320         IEEE80211_ELEMID_FHPARMS                = 2,
  321         IEEE80211_ELEMID_DSPARMS                = 3,
  322         IEEE80211_ELEMID_CFPARMS                = 4,
  323         IEEE80211_ELEMID_TIM                    = 5,
  324         IEEE80211_ELEMID_IBSSPARMS              = 6,
  325         IEEE80211_ELEMID_COUNTRY                = 7,
  326         IEEE80211_ELEMID_HOPPING_PARMS          = 8,
  327         IEEE80211_ELEMID_HOPPING_PATTERN        = 9,
  328         IEEE80211_ELEMID_REQUEST                = 10,
  329         IEEE80211_ELEMID_QBSS_LOAD              = 11,
  330         IEEE80211_ELEMID_EDCAPARMS              = 12,
  331         IEEE80211_ELEMID_TSPEC                  = 13,
  332         IEEE80211_ELEMID_TCLASS                 = 14,
  333         IEEE80211_ELEMID_SCHEDULE               = 15,
  334         IEEE80211_ELEMID_CHALLENGE              = 16,
  335         /* 17-31 reserved for challenge text extension */
  336         IEEE80211_ELEMID_POWER_CONSTRAINT       = 32,
  337         IEEE80211_ELEMID_POWER_CAP              = 33,
  338         IEEE80211_ELEMID_TPC_REQUEST            = 34,
  339         IEEE80211_ELEMID_TPC_REPORT             = 35,
  340         IEEE80211_ELEMID_SUPP_CHNLS             = 35,
  341         IEEE80211_ELEMID_CSA                    = 37,   /* 11h */
  342         IEEE80211_ELEMID_MEASUREMENT_REQUEST    = 38,   /* DFS */
  343         IEEE80211_ELEMID_MEASUREMENT_REPORT     = 39,   /* DFS */
  344         IEEE80211_ELEMID_QUIET                  = 40,
  345         IEEE80211_ELEMID_IBSS_DFS               = 41,
  346         IEEE80211_ELEMID_ERP                    = 42,
  347         IEEE80211_ELEMID_TS_DELAY               = 43,
  348         IEEE80211_ELEMID_TCLAS                  = 44,
  349         IEEE80211_ELEMID_HTCAPS                 = 45,   /* 11n */
  350         IEEE80211_ELEMID_QOS_CAP                = 46,
  351         /* 47 reserved */
  352         IEEE80211_ELEMID_RSN                    = 48,
  353         /* 49 reserved */
  354         IEEE80211_ELEMID_XRATES                 = 50,
  355         IEEE80211_ELEMID_AP_CHNL_REPORT         = 51,
  356         IEEE80211_ELEMID_NBR_REPORT             = 52,
  357         IEEE80211_ELEMID_RCPI                   = 53,
  358         IEEE80211_ELEMID_MDE                    = 54,
  359         IEEE80211_ELEMID_FTE                    = 55,
  360         IEEE80211_ELEMID_TIE                    = 56,   /* 11r */
  361         IEEE80211_ELEMID_RDE                    = 57,
  362         IEEE80211_ELEMID_DSE                    = 58,
  363         IEEE80211_ELEMID_SUPP_OPCLASS           = 59,
  364         IEEE80211_ELEMID_XCSA                   = 60,
  365         IEEE80211_ELEMID_HTOP                   = 61,   /* 11n */
  366         IEEE80211_ELEMID_SECONDARY_CHANL_OFFSET = 62,   /* 11n */
  367         IEEE80211_ELEMID_AVG_ACCESS_DELAY       = 63,
  368         IEEE80211_ELEMID_ANTENNA                = 64,
  369         IEEE80211_ELEMID_RSNI                   = 65,
  370         IEEE80211_ELEMID_MEASUREMENT_PILOT_TX   = 66,
  371         IEEE80211_ELEMID_AVAIL_CAPACITY         = 67,
  372         IEEE80211_ELEMID_AC_ACCESS_DELAY        = 68,
  373         IEEE80211_ELEMID_TIME_ADVERT            = 69,
  374         IEEE80211_ELEMID_RM                     = 70,
  375         IEEE80211_ELEMID_MULTI_BSSID            = 71,
  376         IEEE80211_ELEMID_20_40_CBW_COEX         = 72,   /* 11n */
  377         IEEE80211_ELEMID_20_40_CBW_INTOLERANT   = 73,   /* 11n */
  378         IEEE80211_ELEMID_SCAN_PARAM_OVERLAP     = 74,
  379         IEEE80211_ELEMID_RIC                    = 75,
  380         IEEE80211_ELEMID_MMIE                   = 76,   /* 11w */
  381         IEEE80211_ELEMID_EVENT_REQUEST          = 78,
  382         IEEE80211_ELEMID_EVENT_REPORT           = 79,
  383         IEEE80211_ELEMID_DIAG_REQUEST           = 80,
  384         IEEE80211_ELEMID_DIAG_REPORT            = 81,
  385         IEEE80211_ELEMID_LOCATION_PARMS         = 82,
  386         IEEE80211_ELEMID_NONTX_BSSID            = 83,
  387         IEEE80211_ELEMID_SSID_LIST              = 84,
  388         IEEE80211_ELEMID_MULTI_BSSID_IDX        = 85,
  389         IEEE80211_ELEMID_FMS_DESC               = 86,
  390         IEEE80211_ELEMID_FMS_REQUEST            = 87,
  391         IEEE80211_ELEMID_FMS_RESPONSE           = 88,
  392         IEEE80211_ELEMID_QOS_TRAFFIC_CAP        = 89,
  393         IEEE80211_ELEMID_MAX_IDLE_PERIOD        = 90,
  394         IEEE80211_ELEMID_TFS_REQUEST            = 91,
  395         IEEE80211_ELEMID_TFS_RESPONSE           = 92,
  396         IEEE80211_ELEMID_WNM_SLEEP              = 93,
  397         IEEE80211_ELEMID_TIM_BCAST_REQUEST      = 94,
  398         IEEE80211_ELEMID_TIM_BCAST_RESPONSE     = 95,
  399         IEEE80211_ELEMID_INTERFERENCE_REPORT    = 96,
  400         IEEE80211_ELEMID_CHNL_USAGE             = 97,
  401         IEEE80211_ELEMID_TIME_ZONE              = 98,
  402         IEEE80211_ELEMID_DMS_REQUEST            = 99,
  403         IEEE80211_ELEMID_DMS_RESPONSE           = 100,
  404         IEEE80211_ELEMID_LINK_ID                = 101,
  405         IEEE80211_ELEMID_WAKE_SCHED             = 102,
  406         /* 103 undefined */
  407         IEEE80211_ELEMID_CHNL_SWITCH_TIMING     = 104,
  408         IEEE80211_ELEMID_PTI_CTRL               = 105,
  409         IEEE80211_ELEMID_TPU_BUF_STATUS         = 106,
  410         IEEE80211_ELEMID_INTERWORKING           = 107,
  411         IEEE80211_ELEMID_ADVERT_PROTOCOL        = 108,
  412         IEEE80211_ELEMID_EXPEDITED_BW_REQUEST   = 109,
  413         IEEE80211_ELEMID_QOS_MAP_SET            = 110,
  414         IEEE80211_ELEMID_ROAMING_CONSORTIUM     = 111,
  415         IEEE80211_ELEMID_EMERGENCY_ALERT_ID     = 112,
  416         IEEE80211_ELEMID_MESHCONF               = 113,
  417         IEEE80211_ELEMID_MESHID                 = 114,
  418         IEEE80211_ELEMID_MESHLINK               = 115,
  419         IEEE80211_ELEMID_MESHCNGST              = 116,
  420         IEEE80211_ELEMID_MESHPEER               = 117,
  421         IEEE80211_ELEMID_MESHCSA                = 118,
  422         IEEE80211_ELEMID_MESHAWAKEW             = 119,
  423         IEEE80211_ELEMID_MESHBEACONT            = 120,
  424         IEEE80211_ELEMID_MCCAOP_SETUP_REQUEST   = 121,
  425         IEEE80211_ELEMID_MCCAOP_SETUP_REPLY     = 122,
  426         IEEE80211_ELEMID_MCCAOP_ADVERT          = 123,
  427         IEEE80211_ELEMID_MCCAOP_TEARDOWN        = 124,
  428         IEEE80211_ELEMID_MESHGANN               = 125,
  429         IEEE80211_ELEMID_MESHRANN               = 126,
  430         IEEE80211_ELEMID_XCAPS                  = 127,
  431         /* 128-129 reserved */
  432         IEEE80211_ELEMID_MESHPREQ               = 130,
  433         IEEE80211_ELEMID_MESHPREP               = 131,
  434         IEEE80211_ELEMID_MESHPERR               = 132,
  435         /* 133-136 reserved */
  436         IEEE80211_ELEMID_MESHPXU                = 137,
  437         IEEE80211_ELEMID_MESHPXUC               = 138,
  438         IEEE80211_ELEMID_AUTH_MESH_PEERING_XCHG = 139,
  439         IEEE80211_ELEMID_MIC                    = 140,
  440         IEEE80211_ELEMID_DEST_URI               = 141,
  441         IEEE80211_ELEMID_U_APSD_COEX            = 142,
  442         /* 143-174 reserved */
  443         IEEE80211_ELEMID_MCCAOP_ADVERT_OVIEW    = 174,
  444         /* 175-190 reserved */
  445         IEEE80211_ELEMID_VHTCAPS                = 191,  /* 11ac */
  446         IEEE80211_ELEMID_VHTOP                  = 192,  /* 11ac */
  447         IEEE80211_ELEMID_EXT_BSS_LOAD           = 193,  /* 11ac */
  448         IEEE80211_ELEMID_WIDEBAND_CHNL_SWITCH   = 194,  /* 11ac */
  449         IEEE80211_ELEMID_VHT_TXPOWER            = 195,  /* 11ac */
  450         IEEE80211_ELEMID_CHNL_SWITCH_WRAPPER    = 196,  /* 11ac */
  451         IEEE80211_ELEMID_AID                    = 197,  /* 11ac */
  452         IEEE80211_ELEMID_QUIET_CHNL             = 198,  /* 11ac */
  453         IEEE80211_ELEMID_OPMODE_NOTIF           = 199,  /* 11ac */
  454         /* 200-220 reserved */
  455         IEEE80211_ELEMID_VENDOR                 = 221   /* vendor private */
  456         /* 222-255 reserved */
  457 };
  458 
  459 /*
  460  * Action field category values (see 802.11-2012 8.4.1.11 Table 8-38).
  461  */
  462 enum {
  463         IEEE80211_CATEG_SPECTRUM                = 0,
  464         IEEE80211_CATEG_QOS                     = 1,
  465         IEEE80211_CATEG_DLS                     = 2,
  466         IEEE80211_CATEG_BA                      = 3,
  467         IEEE80211_CATEG_PUB                     = 4,
  468         IEEE80211_CATEG_RADIO_MSRMNT            = 5,
  469         IEEE80211_CATEG_FAST_BSS_TRANS          = 6,
  470         IEEE80211_CATEG_HT                      = 7,    /* 11n */
  471         IEEE80211_CATEG_SA_QUERY                = 8,    /* 11w */
  472         IEEE80211_CATEG_PROT_DUAL_PUBLIC_ACTION = 9,
  473         IEEE80211_CATEG_WNM                     = 10,
  474         IEEE80211_CATEG_UNPROT_WNM              = 11,
  475         IEEE80211_CATEG_TDLS                    = 12,
  476         IEEE80211_CATEG_MESH                    = 13,
  477         IEEE80211_CATEG_MULTIHOP                = 14,
  478         IEEE80211_CATEG_SELF_PROT               = 15,
  479         /* 16-125 reserved */
  480         IEEE80211_CATEG_PROT_VENDOR             = 126,
  481         IEEE80211_CATEG_VENDOR                  = 127
  482         /* 128-255 error */
  483 };
  484 
  485 /*
  486  * Block Ack Action field values (see 802.11-2012 8.5.5 Table 8-202).
  487  */
  488 #define IEEE80211_ACTION_ADDBA_REQ      0
  489 #define IEEE80211_ACTION_ADDBA_RESP     1
  490 #define IEEE80211_ACTION_DELBA          2
  491 /* 3-255 reserved */
  492 
  493 /*
  494  * SA Query Action field values (see 802.11-2012 8.5.10 Table 8-227).
  495  */
  496 #define IEEE80211_ACTION_SA_QUERY_REQ   0
  497 #define IEEE80211_ACTION_SA_QUERY_RESP  1
  498 
  499 /*
  500  * HT Action field values (see 802.11-2012 8.5.12 Table 8-229).
  501  */
  502 #define IEEE80211_ACTION_NOTIFYCW               0
  503 #define IEEE80211_ACTION_SM_PWRSAVE             1
  504 #define IEEE80211_ACTION_PSMP                   2
  505 #define IEEE80211_ACTION_SET_PCO_PHASE          3
  506 #define IEEE80211_ACTION_CSI                    4
  507 #define IEEE80211_ACTION_NONCOMPRESSED_BF       5
  508 #define IEEE80211_ACTION_COMPRESSED_BF          6
  509 #define IEEE80211_ACTION_ASEL_IDX_FEEDBACK      7
  510 /* 8-255 reserved */
  511 
  512 #define IEEE80211_RATE_BASIC                    0x80
  513 #define IEEE80211_RATE_VAL                      0x7f
  514 #define IEEE80211_RATE_SIZE                     8       /* 802.11 standard */
  515 #define IEEE80211_RATE_MAXSIZE                  15      /* max rates we'll handle */
  516 
  517 #define IEEE80211_HT_NUM_MCS                    77
  518 #define IEEE80211_VHT_NUM_MCS                   10
  519 
  520 /*
  521  * BlockAck/BlockAckReq Control field (see 802.11-2012 8.3.1.9 Figure 8-25).
  522  */
  523 #define IEEE80211_BA_ACK_POLICY         0x0001
  524 #define IEEE80211_BA_MULTI_TID          0x0002
  525 #define IEEE80211_BA_COMPRESSED         0x0004
  526 #define IEEE80211_BA_TID_INFO_MASK      0xf000
  527 #define IEEE80211_BA_TID_INFO_SHIFT     12
  528 
  529 /*
  530  * ADDBA Parameter Set field (see 802.11-2012 8.4.1.14 Figure 8-48).
  531  */
  532 #define IEEE80211_ADDBA_AMSDU           0x0001 /* A-MSDU in A-MPDU supported */
  533 #define IEEE80211_ADDBA_BA_POLICY       0x0002 /* 1=immediate BA 0=delayed BA */
  534 #define IEEE80211_ADDBA_TID_MASK        0x003c
  535 #define IEEE80211_ADDBA_TID_SHIFT       2
  536 #define IEEE80211_ADDBA_BUFSZ_MASK      0xffc0
  537 #define IEEE80211_ADDBA_BUFSZ_SHIFT     6
  538 
  539 /*
  540  * DELBA Parameter Set field (see 802.11-2012 8.4.1.16 Figure 8-50).
  541  */
  542 #define IEEE80211_DELBA_INITIATOR       0x0800
  543 #define IEEE80211_DELBA_TID_INFO_MASK   0xf000
  544 #define IEEE80211_DELBA_TID_INFO_SHIFT  12
  545 
  546 /*
  547  * ERP information element parameters (see 802.11-2012 8.4.2.14 Figure 8-95).
  548  */
  549 #define IEEE80211_ERP_NON_ERP_PRESENT           0x01
  550 #define IEEE80211_ERP_USE_PROTECTION            0x02
  551 #define IEEE80211_ERP_BARKER_MODE               0x04
  552 
  553 /*
  554  * RSN capabilities (see 802.11-2012 8.4.2.27.4).
  555  */
  556 #define IEEE80211_RSNCAP_PREAUTH                0x0001
  557 #define IEEE80211_RSNCAP_NOPAIRWISE             0x0002
  558 #define IEEE80211_RSNCAP_PTKSA_RCNT_MASK        0x000c
  559 #define IEEE80211_RSNCAP_PTKSA_RCNT_SHIFT       2
  560 #define IEEE80211_RSNCAP_GTKSA_RCNT_MASK        0x0030
  561 #define IEEE80211_RSNCAP_GTKSA_RCNT_SHIFT       4
  562 #define IEEE80211_RSNCAP_RCNT1                  0
  563 #define IEEE80211_RSNCAP_RCNT2                  1
  564 #define IEEE80211_RSNCAP_RCNT4                  2
  565 #define IEEE80211_RSNCAP_RCNT16                 3
  566 #define IEEE80211_RSNCAP_MFPR                   0x0040  /* 11w */
  567 #define IEEE80211_RSNCAP_MFPC                   0x0080  /* 11w */
  568 #define IEEE80211_RSNCAP_PEERKEYENA             0x0200
  569 #define IEEE80211_RSNCAP_SPPAMSDUC              0x0400  /* 11n */
  570 #define IEEE80211_RSNCAP_SPPAMSDUR              0x0800  /* 11n */
  571 #define IEEE80211_RSNCAP_PBAC                   0x1000  /* 11n */
  572 #define IEEE80211_RSNCAP_EXTENDED_KEYID         0x2000
  573 
  574 /*
  575  * HT Capabilities Info (see 802.11-2012 8.4.2.58.2).
  576  */
  577 #define IEEE80211_HTCAP_LDPC            0x00000001
  578 #define IEEE80211_HTCAP_CBW20_40        0x00000002
  579 #define IEEE80211_HTCAP_SMPS_MASK       0x0000000c
  580 #define IEEE80211_HTCAP_SMPS_SHIFT      2
  581 #define IEEE80211_HTCAP_SMPS_STA        0
  582 #define IEEE80211_HTCAP_SMPS_DYN        1
  583 #define IEEE80211_HTCAP_SMPS_DIS        3
  584 #define IEEE80211_HTCAP_GF              0x00000010
  585 #define IEEE80211_HTCAP_SGI20           0x00000020
  586 #define IEEE80211_HTCAP_SGI40           0x00000040
  587 #define IEEE80211_HTCAP_TXSTBC          0x00000080
  588 #define IEEE80211_HTCAP_RXSTBC_MASK     0x00000300
  589 #define IEEE80211_HTCAP_RXSTBC_SHIFT    8
  590 #define IEEE80211_HTCAP_DELAYEDBA       0x00000400
  591 #define IEEE80211_HTCAP_AMSDU7935       0x00000800
  592 #define IEEE80211_HTCAP_DSSSCCK40       0x00001000
  593 #define IEEE80211_HTCAP_PSMP            0x00002000
  594 #define IEEE80211_HTCAP_40INTOLERANT    0x00004000
  595 #define IEEE80211_HTCAP_LSIGTXOPPROT    0x00008000
  596 
  597 /*
  598  * HT A-MPDU parameters (see 802.11-2012 8.4.2.58.3).
  599  */
  600 #define IEEE80211_AMPDU_PARAM_LE        0x03
  601 #define IEEE80211_AMPDU_PARAM_SS        0x1c
  602 #define IEEE80211_AMPDU_PARAM_SS_NONE   (0 << 2)
  603 #define IEEE80211_AMPDU_PARAM_SS_0_25   (1 << 2)
  604 #define IEEE80211_AMPDU_PARAM_SS_0_5    (2 << 2)
  605 #define IEEE80211_AMPDU_PARAM_SS_1      (3 << 2)
  606 #define IEEE80211_AMPDU_PARAM_SS_2      (4 << 2)
  607 #define IEEE80211_AMPDU_PARAM_SS_4      (5 << 2)
  608 #define IEEE80211_AMPDU_PARAM_SS_8      (6 << 2)
  609 #define IEEE80211_AMPDU_PARAM_SS_16     (7 << 2)
  610 /* bits 5-7 reserved */
  611 
  612 /*
  613  * HT Supported MCS Set (see 802.11-2012 8.4.2.58.4).
  614  * This field is 16 bytes in size. Bitmasks given below
  615  * operate on 8 or 16 bit integer subsets of this field
  616  * for use with ieee80211com and ieee80211_node.
  617  */
  618 /* Bits 0-76: Supported Rx MCS bitmask */
  619 /* Bits 77-79: Reserved */
  620 /* Bits 80-89: Highest Rx rate in units of 1MB/s */
  621 #define IEEE80211_MCS_RX_RATE_HIGH      0x03ff
  622 /* Bits 90-95: Reserved */
  623 /* Bits 96-100: Tx MCS set */
  624 #define IEEE80211_TX_MCS_SET_DEFINED            0x01
  625 #define IEEE80211_TX_RX_MCS_NOT_EQUAL           0x02
  626 #define IEEE80211_TX_SPATIAL_STREAMS            0x0c
  627 #define IEEE80211_TX_UNEQUAL_MODULATION         0x10
  628 /* Bits 101-127: Reserved */
  629 
  630 /*
  631  * HT Extended Capabilities (see 802.11-2012 8.4.2.58.5).
  632  */
  633 #define IEEE80211_HTXCAP_PCO            0x0001
  634 #define IEEE80211_HTXCAP_PCOTT_MASK     0x0006
  635 #define IEEE80211_HTXCAP_PCOTT_SHIFT    1
  636 #define IEEE80211_HTXCAP_PCOTT_400      1
  637 #define IEEE80211_HTXCAP_PCOTT_1500     2
  638 #define IEEE80211_HTXCAP_PCOTT_5000     3
  639 /* Bits 3-7 are reserved. */
  640 #define IEEE80211_HTXCAP_MFB_MASK       0x0300
  641 #define IEEE80211_HTXCAP_MFB_SHIFT      8
  642 #define IEEE80211_HTXCAP_MFB_NONE       0
  643 #define IEEE80211_HTXCAP_MFB_UNSOL      2
  644 #define IEEE80211_HTXCAP_MFB_BOTH       3
  645 #define IEEE80211_HTXCAP_HTC            0x0400
  646 #define IEEE80211_HTXCAP_RDRESP         0x0800
  647 /* Bits 12-15 are reserved. */
  648 
  649 /*
  650  * Transmit Beamforming (TxBF) Capabilities (see 802.11-2012 8.4.2.58.6).
  651  */
  652 #define IEEE80211_TXBFCAP_IMPLICIT_RX                   0x00000001
  653 #define IEEE80211_TXBFCAP_RSSC                          0x00000002
  654 #define IEEE80211_TXBFCAP_TSSC                          0x00000004
  655 #define IEEE80211_TXBFCAP_RNDP                          0x00000008
  656 #define IEEE80211_TXBFCAP_TNDP                          0x00000010
  657 #define IEEE80211_TXBFCAP_IMPLICIT_TX                   0x00000020
  658 #define IEEE80211_TXBFCAP_CALIB_MASK                    0x000000c0
  659 #define IEEE80211_TXBFCAP_CALIB_SHIFT                   6
  660 #define IEEE80211_TXBFCAP_TX_CSI                        0x00000100
  661 #define IEEE80211_TXBFCAP_EXPLICIT_NSC                  0x00000200
  662 #define IEEE80211_TXBFCAP_EXPLICIT_CSC                  0x00000400
  663 #define IEEE80211_TXBFCAP_CSI_FB_DELAYED                0x00000800
  664 #define IEEE80211_TXBFCAP_CSI_FB_IMMEDIATE              0x00001000
  665 #define IEEE80211_TXBFCAP_EXPLICIT_NB_FB_DELAYED        0x00002000
  666 #define IEEE80211_TXBFCAP_EXPLICIT_NB_FB_IMMEDIATE      0x00004000
  667 #define IEEE80211_TXBFCAP_EXPLICIT_CB_FB_DELAYED        0x00008000
  668 #define IEEE80211_TXBFCAP_EXPLICIT_CB_FB_IMMEDIATE      0x00010000
  669 #define IEEE80211_TXBFCAP_MINIMAL_GROUPING_1_2          0x00020000
  670 #define IEEE80211_TXBFCAP_MINIMAL_GROUPING_1_4          0x00040000
  671 #define IEEE80211_TXBFCAP_CSI_NUM_ANT_MASK              0x00180000
  672 #define IEEE80211_TXBFCAP_CSI_NUM_ANT_SHIFT             19
  673 #define IEEE80211_TXBFCAP_NS_NUM_ANT_MASK               0x00600000
  674 #define IEEE80211_TXBFCAP_NS_NUM_ANT_SHIFT              21
  675 #define IEEE80211_TXBFCAP_CS_NUM_ANT_MASK               0x01800000
  676 #define IEEE80211_TXBFCAP_CS_NUM_ANT_SHIFT              23
  677 #define IEEE80211_TXBFCAP_CSI_NUM_ROWS_MASK             0x06000000
  678 #define IEEE80211_TXBFCAP_CSI_NUM_ROWS_SHIFT            25
  679 #define IEEE80211_TXBFCAP_CHANL_ESTIMATE_MASK           0x18000000
  680 #define IEEE80211_TXBFCAP_CHANL_ESTIMATE_SHIFT          27
  681 
  682 /*
  683  * Antenna Selection (ASEL) Capability (see 802.11-2012 8.4.2.58.7).
  684  */
  685 #define IEEE80211_ASELCAP_ASEL          0x01
  686 #define IEEE80211_ASELCAP_CSIFB_TX      0x02
  687 #define IEEE80211_ASELCAP_ANT_IDX_FB_TX 0x04
  688 #define IEEE80211_ASELCAP_CSIFB         0x08
  689 #define IEEE80211_ASELCAP_ANT_IDX_FB    0x10
  690 #define IEEE80211_ASELCAP_ASEL_RX       0x20
  691 #define IEEE80211_ASELCAP_TX_SOUND_PPDU 0x20
  692 /* Bit 7 is reserved. */
  693 
  694 /*
  695  * HT Operation element (see 802.11-2012 8.4.2.59).
  696  */
  697 /* Byte 0 contains primary channel number. */
  698 /* Byte 1. */
  699 #define IEEE80211_HTOP0_SCO_MASK        0x03
  700 #define IEEE80211_HTOP0_SCO_SHIFT       0
  701 #define IEEE80211_HTOP0_SCO_SCN         0
  702 #define IEEE80211_HTOP0_SCO_SCA         1
  703 #define IEEE80211_HTOP0_SCO_SCB         3
  704 #define IEEE80211_HTOP0_CHW             0x04
  705 #define IEEE80211_HTOP0_RIFS            0x08
  706 /* bits 4-7 reserved */
  707 /* Bytes 2-3. */
  708 #define IEEE80211_HTOP1_PROT_MASK       0x0003
  709 #define IEEE80211_HTOP1_PROT_SHIFT      0
  710 #define IEEE80211_HTOP1_NONGF_STA       0x0004
  711 /* Bit 3 is reserved. */
  712 #define IEEE80211_HTOP1_OBSS_NONHT_STA  0x0010
  713 /* Bits 5-15 are reserved. */
  714 /* Bytes 4-5. */
  715 /* Bits 0-5 are reserved. */
  716 #define IEEE80211_HTOP2_DUALBEACON      0x0040
  717 #define IEEE80211_HTOP2_DUALCTSPROT     0x0080
  718 #define IEEE80211_HTOP2_STBCBEACON      0x0100
  719 #define IEEE80211_HTOP2_LSIGTXOP        0x0200
  720 #define IEEE80211_HTOP2_PCOACTIVE       0x0400
  721 #define IEEE80211_HTOP2_PCOPHASE40      0x0800
  722 /* Bits 12-15 are reserved. */
  723 
  724 /*
  725  * VHT Capabilities Info (see 802.11ac-2013 8.4.2.160.2).
  726  */
  727 #define IEEE80211_VHTCAP_MAX_MPDU_LENGTH_MASK   0x00000003
  728 #define IEEE80211_VHTCAP_MAX_MPDU_LENGTH_SHIFT  0
  729 #define IEEE80211_VHTCAP_MAX_MPDU_LENGTH_3895   0
  730 #define IEEE80211_VHTCAP_MAX_MPDU_LENGTH_7991   1
  731 #define IEEE80211_VHTCAP_MAX_MPDU_LENGTH_11454  2
  732 #define IEEE80211_VHTCAP_CHAN_WIDTH_MASK        0x0c
  733 #define IEEE80211_VHTCAP_CHAN_WIDTH_SHIFT       2
  734 #define IEEE80211_VHTCAP_CHAN_WIDTH_80          0
  735 #define IEEE80211_VHTCAP_CHAN_WIDTH_160         1
  736 #define IEEE80211_VHTCAP_CHAN_WIDTH_160_8080    2
  737 #define IEEE80211_VHTCAP_RX_LDPC                0x00000010
  738 #define IEEE80211_VHTCAP_SGI80                  0x00000020
  739 #define IEEE80211_VHTCAP_SGI160                 0x00000040
  740 #define IEEE80211_VHTCAP_TX_STBC                0x00000080
  741 #define IEEE80211_VHTCAP_RX_STBC_SS_MASK        0x00000700
  742 #define IEEE80211_VHTCAP_RX_STBC_SS_SHIFT       8
  743 #define IEEE80211_VHTCAP_SU_BEAMFORMER          0x00000800
  744 #define IEEE80211_VHTCAP_SU_BEAMFORMEE          0x00001000
  745 #define IEEE80211_VHTCAP_BEAMFORMEE_STS_MASK    0x0000e000
  746 #define IEEE80211_VHTCAP_BEAMFORMEE_STS_SHIFT   13
  747 #define IEEE80211_VHTCAP_NUM_STS_MASK           0x00070000
  748 #define IEEE80211_VHTCAP_NUM_STS_SHIFT          16
  749 #define IEEE80211_VHTCAP_MU_BEAMFORMER          0x00080000
  750 #define IEEE80211_VHTCAP_MU_BEAMFORMEE          0x00100000
  751 #define IEEE80211_VHTCAP_TXOP_PS                0x00200000
  752 #define IEEE80211_VHTCAP_HTC_VHT                0x00400000
  753 #define IEEE80211_VHTCAP_MAX_AMPDU_LEN_MASK     0x03800000
  754 #define IEEE80211_VHTCAP_MAX_AMPDU_LEN_SHIFT    23
  755 #define IEEE80211_VHTCAP_MAX_AMPDU_LEN_8K       0
  756 #define IEEE80211_VHTCAP_MAX_AMPDU_LEN_16K      1
  757 #define IEEE80211_VHTCAP_MAX_AMPDU_LEN_32K      2
  758 #define IEEE80211_VHTCAP_MAX_AMPDU_LEN_64K      3
  759 #define IEEE80211_VHTCAP_MAX_AMPDU_LEN_128K     4
  760 #define IEEE80211_VHTCAP_MAX_AMPDU_LEN_256K     5
  761 #define IEEE80211_VHTCAP_MAX_AMPDU_LEN_512K     6
  762 #define IEEE80211_VHTCAP_MAX_AMPDU_LEN_1024K    7
  763 #define IEEE80211_VHTCAP_LINK_ADAPT_MASK        0x0c000000
  764 #define IEEE80211_VHTCAP_LINK_ADAPT_SHIFT       26
  765 #define IEEE80211_VHTCAP_LINK_ADAPT_UNSOL_MFB   2
  766 #define IEEE80211_VHTCAP_LINK_ADAPT_MRQ_MFB     3
  767 #define IEEE80211_VHTCAP_RX_ANT_PATTERN         0x10000000
  768 #define IEEE80211_VHTCAP_TX_ANT_PATTERN         0x20000000
  769 
  770 /*
  771  * VHT-MCS and NSS map (see 802.11ac-2013 8.4.2.160.3, Figure 8-401bs).
  772  * Set of VHT MCS supported for a given number of spatial streams, `n'.
  773  * Used by the VHT capabilities IE and by the basic VHT MSC set in
  774  * the VHT operation IE.
  775  */
  776 #define IEEE80211_VHT_MCS_FOR_SS_MASK(n)        (0x3 << (2*((n)-1)))
  777 #define IEEE80211_VHT_MCS_FOR_SS_SHIFT(n)       (2*((n)-1))
  778 #define IEEE80211_VHT_MCS_0_7           0
  779 #define IEEE80211_VHT_MCS_0_8           1
  780 #define IEEE80211_VHT_MCS_0_9           2
  781 #define IEEE80211_VHT_MCS_SS_NOT_SUPP   3
  782 
  783 #define IEEE80211_VHT_MAX_LGI_MBIT_S_MASK       0x1fff
  784 #define IEEE80211_VHT_MAX_LGI_MBIT_S_SHIFT      0
  785 
  786 /* The highest number of spatial streams supported by VHT. */
  787 #define IEEE80211_VHT_NUM_SS    8
  788 
  789 /*
  790  * VHT Operation element (see 802.11ac-2013 8.4.2.161).
  791  */
  792 /* Byte 0. */
  793 #define IEEE80211_VHTOP0_CHAN_WIDTH_MASK        0x03
  794 #define IEEE80211_VHTOP0_CHAN_WIDTH_SHIFT       0
  795 #define IEEE80211_VHTOP0_CHAN_WIDTH_HT          0
  796 #define IEEE80211_VHTOP0_CHAN_WIDTH_80          1
  797 #define IEEE80211_VHTOP0_CHAN_WIDTH_160         2
  798 #define IEEE80211_VHTOP0_CHAN_WIDTH_8080        3
  799 /* Byte 1 contains channel center frequency index 0 for 80, 80+80, 160 MHz. */
  800 /* Byte 2 contains channel center frequency index 1 for 80+80 MHz only. */
  801 
  802 /*
  803  * EDCA Access Categories.
  804  */
  805 enum ieee80211_edca_ac {
  806         EDCA_AC_BK  = 1,        /* Background */
  807         EDCA_AC_BE  = 0,        /* Best Effort */
  808         EDCA_AC_VI  = 2,        /* Video */
  809         EDCA_AC_VO  = 3         /* Voice */
  810 };
  811 #define EDCA_NUM_AC     4
  812 
  813 /* number of TID values (traffic identifier) */
  814 #define IEEE80211_NUM_TID       16
  815 
  816 /* Atheros private advanced capabilities info */
  817 #define ATHEROS_CAP_TURBO_PRIME                 0x01
  818 #define ATHEROS_CAP_COMPRESSION                 0x02
  819 #define ATHEROS_CAP_FAST_FRAME                  0x04
  820 /* bits 3-6 reserved */
  821 #define ATHEROS_CAP_BOOST                       0x80
  822 
  823 /*-
  824  * Organizationally Unique Identifiers.
  825  * See http://standards.ieee.org/regauth/oui/oui.txt for a list.
  826  */
  827 #define ATHEROS_OUI     ((const u_int8_t[]){ 0x00, 0x03, 0x7f })
  828 #define BROADCOM_OUI    ((const u_int8_t[]){ 0x00, 0x90, 0x4c })
  829 #define IEEE80211_OUI   ((const u_int8_t[]){ 0x00, 0x0f, 0xac })
  830 #define MICROSOFT_OUI   ((const u_int8_t[]){ 0x00, 0x50, 0xf2 })
  831 
  832 #define IEEE80211_AUTH_ALGORITHM(auth) \
  833         ((auth)[0] | ((auth)[1] << 8))
  834 #define IEEE80211_AUTH_TRANSACTION(auth) \
  835         ((auth)[2] | ((auth)[3] << 8))
  836 #define IEEE80211_AUTH_STATUS(auth) \
  837         ((auth)[4] | ((auth)[5] << 8))
  838 
  839 /*
  840  * Authentication Algorithm Number field (see 7.3.1.1).
  841  */
  842 #define IEEE80211_AUTH_ALG_OPEN                 0x0000
  843 #define IEEE80211_AUTH_ALG_SHARED               0x0001
  844 #define IEEE80211_AUTH_ALG_LEAP                 0x0080
  845 
  846 /*
  847  * Authentication Transaction Sequence Number field (see 7.3.1.2).
  848  */
  849 enum {
  850         IEEE80211_AUTH_OPEN_REQUEST             = 1,
  851         IEEE80211_AUTH_OPEN_RESPONSE            = 2
  852 };
  853 enum {
  854         IEEE80211_AUTH_SHARED_REQUEST           = 1,
  855         IEEE80211_AUTH_SHARED_CHALLENGE         = 2,
  856         IEEE80211_AUTH_SHARED_RESPONSE          = 3,
  857         IEEE80211_AUTH_SHARED_PASS              = 4
  858 };
  859 
  860 /*
  861  * Reason codes (see Table 22).
  862  */
  863 enum {
  864         IEEE80211_REASON_UNSPECIFIED            = 1,
  865         IEEE80211_REASON_AUTH_EXPIRE            = 2,
  866         IEEE80211_REASON_AUTH_LEAVE             = 3,
  867         IEEE80211_REASON_ASSOC_EXPIRE           = 4,
  868         IEEE80211_REASON_ASSOC_TOOMANY          = 5,
  869         IEEE80211_REASON_NOT_AUTHED             = 6,
  870         IEEE80211_REASON_NOT_ASSOCED            = 7,
  871         IEEE80211_REASON_ASSOC_LEAVE            = 8,
  872         IEEE80211_REASON_ASSOC_NOT_AUTHED       = 9,
  873 
  874         /* XXX the following two reason codes are not correct */
  875         IEEE80211_REASON_RSN_REQUIRED           = 11,
  876         IEEE80211_REASON_RSN_INCONSISTENT       = 12,
  877 
  878         IEEE80211_REASON_IE_INVALID             = 13,
  879         IEEE80211_REASON_MIC_FAILURE            = 14,
  880         IEEE80211_REASON_4WAY_TIMEOUT           = 15,
  881         IEEE80211_REASON_GROUP_TIMEOUT          = 16,
  882         IEEE80211_REASON_RSN_DIFFERENT_IE       = 17,
  883         IEEE80211_REASON_BAD_GROUP_CIPHER       = 18,
  884         IEEE80211_REASON_BAD_PAIRWISE_CIPHER    = 19,
  885         IEEE80211_REASON_BAD_AKMP               = 20,
  886         IEEE80211_REASON_RSN_IE_VER_UNSUP       = 21,
  887         IEEE80211_REASON_RSN_IE_BAD_CAP         = 22,
  888 
  889         IEEE80211_REASON_CIPHER_REJ_POLICY      = 24,
  890 
  891         IEEE80211_REASON_SETUP_REQUIRED         = 38,
  892         IEEE80211_REASON_TIMEOUT                = 39
  893 };
  894 
  895 /*
  896  * Status codes (see Table 23).
  897  */
  898 enum {
  899         IEEE80211_STATUS_SUCCESS                = 0,
  900         IEEE80211_STATUS_UNSPECIFIED            = 1,
  901         IEEE80211_STATUS_CAPINFO                = 10,
  902         IEEE80211_STATUS_NOT_ASSOCED            = 11,
  903         IEEE80211_STATUS_OTHER                  = 12,
  904         IEEE80211_STATUS_ALG                    = 13,
  905         IEEE80211_STATUS_SEQUENCE               = 14,
  906         IEEE80211_STATUS_CHALLENGE              = 15,
  907         IEEE80211_STATUS_TIMEOUT                = 16,
  908         IEEE80211_STATUS_TOOMANY                = 17,
  909         IEEE80211_STATUS_BASIC_RATE             = 18,
  910         IEEE80211_STATUS_SP_REQUIRED            = 19,
  911         IEEE80211_STATUS_PBCC_REQUIRED          = 20,
  912         IEEE80211_STATUS_CA_REQUIRED            = 21,
  913         IEEE80211_STATUS_TOO_MANY_STATIONS      = 22,
  914         IEEE80211_STATUS_RATES                  = 23,
  915         IEEE80211_STATUS_SHORTSLOT_REQUIRED     = 25,
  916         IEEE80211_STATUS_DSSSOFDM_REQUIRED      = 26,
  917 
  918         IEEE80211_STATUS_TRY_AGAIN_LATER        = 30,
  919         IEEE80211_STATUS_MFP_POLICY             = 31,
  920 
  921         IEEE80211_STATUS_REFUSED                = 37,
  922         IEEE80211_STATUS_INVALID_PARAM          = 38,
  923 
  924         IEEE80211_STATUS_IE_INVALID             = 40,
  925         IEEE80211_STATUS_BAD_GROUP_CIPHER       = 41,
  926         IEEE80211_STATUS_BAD_PAIRWISE_CIPHER    = 42,
  927         IEEE80211_STATUS_BAD_AKMP               = 43,
  928         IEEE80211_STATUS_RSN_IE_VER_UNSUP       = 44,
  929 
  930         IEEE80211_STATUS_CIPHER_REJ_POLICY      = 46
  931 };
  932 
  933 #define IEEE80211_WEP_KEYLEN                    5       /* 40bit */
  934 #define IEEE80211_WEP_NKID                      4       /* number of key ids */
  935 #define IEEE80211_CHALLENGE_LEN                 128
  936 
  937 /* WEP header constants */
  938 #define IEEE80211_WEP_IVLEN                     3       /* 24bit */
  939 #define IEEE80211_WEP_KIDLEN                    1       /* 1 octet */
  940 #define IEEE80211_WEP_CRCLEN                    4       /* CRC-32 */
  941 #define IEEE80211_CRC_LEN                       4
  942 #define IEEE80211_WEP_TOTLEN            (IEEE80211_WEP_IVLEN + \
  943                                          IEEE80211_WEP_KIDLEN + \
  944                                          IEEE80211_WEP_CRCLEN)
  945 
  946 /*
  947  * 802.11i defines an extended IV for use with non-WEP ciphers.
  948  * When the EXTIV bit is set in the key id byte an additional
  949  * 4 bytes immediately follow the IV for TKIP.  For CCMP the
  950  * EXTIV bit is likewise set but the 8 bytes represent the
  951  * CCMP header rather than IV+extended-IV.
  952  */
  953 #define IEEE80211_WEP_EXTIV             0x20
  954 #define IEEE80211_WEP_EXTIVLEN          4       /* extended IV length */
  955 #define IEEE80211_WEP_MICLEN            8       /* trailing MIC */
  956 
  957 /*
  958  * Maximum acceptable MTU is:
  959  *      IEEE80211_MAX_LEN - WEP overhead - CRC -
  960  *              QoS overhead - RSN/WPA overhead
  961  * Min is arbitrarily chosen > IEEE80211_MIN_LEN.  The default
  962  * mtu is Ethernet-compatible; it's set by ether_ifattach.
  963  */
  964 #define IEEE80211_MTU_MAX                       2290
  965 #define IEEE80211_MTU_MIN                       32
  966 
  967 #define IEEE80211_MAX_LEN                       (2300 + IEEE80211_CRC_LEN + \
  968     (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))
  969 #define IEEE80211_ACK_LEN \
  970         (sizeof(struct ieee80211_frame_ack) + IEEE80211_CRC_LEN)
  971 #define IEEE80211_MIN_LEN \
  972         (sizeof(struct ieee80211_frame_min) + IEEE80211_CRC_LEN)
  973 
  974 /*
  975  * The 802.11 spec says at most 2007 stations may be
  976  * associated at once.  For most AP's this is way more
  977  * than is feasible so we use a default of 1800. This
  978  * number may be overridden by the driver and/or by
  979  * user configuration.
  980  */
  981 #define IEEE80211_AID_MAX       2007
  982 #define IEEE80211_AID_DEF       1800
  983 #define IEEE80211_AID(b)        ((b) &~ 0xc000)
  984 
  985 /*
  986  * RTS frame length parameters.  The default is specified in
  987  * the 802.11 spec.  The max may be wrong for jumbo frames.
  988  */
  989 #define IEEE80211_RTS_DEFAULT                   512
  990 #define IEEE80211_RTS_MIN                       1
  991 #define IEEE80211_RTS_MAX                       IEEE80211_MAX_LEN
  992 
  993 #define IEEE80211_PLCP_SERVICE          0x00
  994 #define IEEE80211_PLCP_SERVICE_PBCC     0x08    /* PBCC encoded */
  995 #define IEEE80211_PLCP_SERVICE_LENEXT   0x80    /* length extension bit */
  996 
  997 /* One Time Unit (TU) is 1Kus = 1024 microseconds. */
  998 #define IEEE80211_DUR_TU                1024
  999 
 1000 /* IEEE 802.11b durations for DSSS PHY in microseconds */
 1001 #define IEEE80211_DUR_DS_LONG_PREAMBLE  144
 1002 #define IEEE80211_DUR_DS_SHORT_PREAMBLE 72
 1003 #define IEEE80211_DUR_DS_PREAMBLE_DIFFERENCE    \
 1004     (IEEE80211_DUR_DS_LONG_PREAMBLE - IEEE80211_DUR_DS_SHORT_PREAMBLE)
 1005 #define IEEE80211_DUR_DS_FAST_PLCPHDR   24
 1006 #define IEEE80211_DUR_DS_SLOW_PLCPHDR   48
 1007 #define IEEE80211_DUR_DS_PLCPHDR_DIFFERENCE     \
 1008     (IEEE80211_DUR_DS_SLOW_PLCPHDR - IEEE80211_DUR_DS_FAST_PLCPHDR)
 1009 #define IEEE80211_DUR_DS_SLOW_ACK       112
 1010 #define IEEE80211_DUR_DS_FAST_ACK       56
 1011 #define IEEE80211_DUR_DS_SLOW_CTS       112
 1012 #define IEEE80211_DUR_DS_FAST_CTS       56
 1013 #define IEEE80211_DUR_DS_SLOT           20
 1014 #define IEEE80211_DUR_DS_SHSLOT         9
 1015 #define IEEE80211_DUR_DS_SIFS           10
 1016 #define IEEE80211_DUR_DS_PIFS   (IEEE80211_DUR_DS_SIFS + IEEE80211_DUR_DS_SLOT)
 1017 #define IEEE80211_DUR_DS_DIFS   (IEEE80211_DUR_DS_SIFS + \
 1018                                  2 * IEEE80211_DUR_DS_SLOT)
 1019 #define IEEE80211_DUR_DS_EIFS   (IEEE80211_DUR_DS_SIFS + \
 1020                                  IEEE80211_DUR_DS_SLOW_ACK + \
 1021                                  IEEE80211_DUR_DS_LONG_PREAMBLE + \
 1022                                  IEEE80211_DUR_DS_SLOW_PLCPHDR + \
 1023                                  IEEE80211_DUR_DIFS)
 1024 
 1025 /*
 1026  * The RSNA key descriptor used by IEEE 802.11 does not use the IEEE 802.1X
 1027  * key descriptor.  Instead, it uses the key descriptor described in 8.5.2.
 1028  */
 1029 #define EAPOL_KEY_NONCE_LEN     32
 1030 #define EAPOL_KEY_IV_LEN        16
 1031 #define EAPOL_KEY_MIC_LEN       16
 1032 
 1033 struct ieee80211_eapol_key {
 1034         u_int8_t        version;
 1035 #define EAPOL_VERSION   1
 1036 
 1037         u_int8_t        type;
 1038 /* IEEE Std 802.1X-2004, 7.5.4 (only type EAPOL-Key is used here) */
 1039 #define EAP_PACKET      0
 1040 #define EAPOL_START     1
 1041 #define EAPOL_LOGOFF    2
 1042 #define EAPOL_KEY       3
 1043 #define EAPOL_ASF_ALERT 4
 1044 
 1045         u_int8_t        len[2];
 1046         u_int8_t        desc;
 1047 /* IEEE Std 802.1X-2004, 7.6.1 */
 1048 #define EAPOL_KEY_DESC_RC4                1     /* deprecated */
 1049 #define EAPOL_KEY_DESC_IEEE80211          2
 1050 #define EAPOL_KEY_DESC_WPA              254     /* non-standard WPA */
 1051 
 1052         u_int8_t        info[2];
 1053 #define EAPOL_KEY_VERSION_MASK  0x7
 1054 #define EAPOL_KEY_DESC_V1       1
 1055 #define EAPOL_KEY_DESC_V2       2
 1056 #define EAPOL_KEY_DESC_V3       3               /* 11r */
 1057 #define EAPOL_KEY_PAIRWISE      (1 <<  3)
 1058 #define EAPOL_KEY_INSTALL       (1 <<  6)       /* I */
 1059 #define EAPOL_KEY_KEYACK        (1 <<  7)       /* A */
 1060 #define EAPOL_KEY_KEYMIC        (1 <<  8)       /* M */
 1061 #define EAPOL_KEY_SECURE        (1 <<  9)       /* S */
 1062 #define EAPOL_KEY_ERROR         (1 << 10)
 1063 #define EAPOL_KEY_REQUEST       (1 << 11)
 1064 #define EAPOL_KEY_ENCRYPTED     (1 << 12)
 1065 #define EAPOL_KEY_SMK           (1 << 13)
 1066 /* WPA compatibility */
 1067 #define EAPOL_KEY_WPA_KID_MASK  0x3
 1068 #define EAPOL_KEY_WPA_KID_SHIFT 4
 1069 #define EAPOL_KEY_WPA_TX        EAPOL_KEY_INSTALL
 1070 
 1071         u_int8_t        keylen[2];
 1072         u_int8_t        replaycnt[8];
 1073         u_int8_t        nonce[EAPOL_KEY_NONCE_LEN];
 1074         u_int8_t        iv[EAPOL_KEY_IV_LEN];
 1075         u_int8_t        rsc[8];
 1076         u_int8_t        reserved[8];
 1077         u_int8_t        mic[EAPOL_KEY_MIC_LEN];
 1078         u_int8_t        paylen[2];
 1079 } __packed;
 1080 
 1081 /* Pairwise Transient Key (see 8.5.1.2) */
 1082 struct ieee80211_ptk {
 1083         u_int8_t        kck[16];        /* Key Confirmation Key */
 1084         u_int8_t        kek[16];        /* Key Encryption Key */
 1085         u_int8_t        tk[32];         /* Temporal Key */
 1086 } __packed;
 1087 
 1088 #define IEEE80211_PMKID_LEN     16
 1089 #define IEEE80211_SMKID_LEN     16
 1090 
 1091 /*
 1092  * Key Data Encapsulation (see Table 62).
 1093  */
 1094 enum {
 1095         IEEE80211_KDE_GTK       = 1,
 1096         IEEE80211_KDE_MACADDR   = 3,
 1097         IEEE80211_KDE_PMKID     = 4,
 1098         IEEE80211_KDE_SMK       = 5,
 1099         IEEE80211_KDE_NONCE     = 6,
 1100         IEEE80211_KDE_LIFETIME  = 7,
 1101         IEEE80211_KDE_ERROR     = 8,
 1102         IEEE80211_KDE_IGTK      = 9     /* 11w */
 1103 };
 1104 
 1105 /*
 1106  * HT protection modes (see 802.11-2012 8.4.2.59)
 1107  */
 1108 enum ieee80211_htprot {
 1109         IEEE80211_HTPROT_NONE = 0,      /* only 20/40MHz HT STAs exist */
 1110         IEEE80211_HTPROT_NONMEMBER,     /* non-HT STA overlaps our channel */ 
 1111         IEEE80211_HTPROT_20MHZ,         /* 20MHz HT STA on a 40MHz channel */
 1112         IEEE80211_HTPROT_NONHT_MIXED    /* non-HT STA associated to our BSS */
 1113 };
 1114 
 1115 #endif /* _NET80211_IEEE80211_H_ */

Cache object: f7d96c4853abefc1175b74cfa2cad84d


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.