cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

p80211mgmt.h (15648B)


      1/* SPDX-License-Identifier: (GPL-2.0 OR MPL-1.1) */
      2/*
      3 *
      4 * Macros, types, and functions to handle 802.11 mgmt frames
      5 *
      6 * Copyright (C) 1999 AbsoluteValue Systems, Inc.  All Rights Reserved.
      7 * --------------------------------------------------------------------
      8 *
      9 * linux-wlan
     10 *
     11 *   The contents of this file are subject to the Mozilla Public
     12 *   License Version 1.1 (the "License"); you may not use this file
     13 *   except in compliance with the License. You may obtain a copy of
     14 *   the License at http://www.mozilla.org/MPL/
     15 *
     16 *   Software distributed under the License is distributed on an "AS
     17 *   IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
     18 *   implied. See the License for the specific language governing
     19 *   rights and limitations under the License.
     20 *
     21 *   Alternatively, the contents of this file may be used under the
     22 *   terms of the GNU Public License version 2 (the "GPL"), in which
     23 *   case the provisions of the GPL are applicable instead of the
     24 *   above.  If you wish to allow the use of your version of this file
     25 *   only under the terms of the GPL and not to allow others to use
     26 *   your version of this file under the MPL, indicate your decision
     27 *   by deleting the provisions above and replace them with the notice
     28 *   and other provisions required by the GPL.  If you do not delete
     29 *   the provisions above, a recipient may use your version of this
     30 *   file under either the MPL or the GPL.
     31 *
     32 * --------------------------------------------------------------------
     33 *
     34 * Inquiries regarding the linux-wlan Open Source project can be
     35 * made directly to:
     36 *
     37 * AbsoluteValue Systems Inc.
     38 * info@linux-wlan.com
     39 * http://www.linux-wlan.com
     40 *
     41 * --------------------------------------------------------------------
     42 *
     43 * Portions of the development of this software were funded by
     44 * Intersil Corporation as part of PRISM(R) chipset product development.
     45 *
     46 * --------------------------------------------------------------------
     47 *
     48 * This file declares the constants and types used in the interface
     49 * between a wlan driver and the user mode utilities.
     50 *
     51 * Notes:
     52 *  - Constant values are always in HOST byte order.  To assign
     53 *    values to multi-byte fields they _must_ be converted to
     54 *    ieee byte order.  To retrieve multi-byte values from incoming
     55 *    frames, they must be converted to host order.
     56 *
     57 *  - The len member of the frame structure does NOT!!! include
     58 *    the MAC CRC.  Therefore, the len field on rx'd frames should
     59 *    have 4 subtracted from it.
     60 *
     61 * All functions declared here are implemented in p80211.c
     62 *
     63 * The types, macros, and functions defined here are primarily
     64 * used for encoding and decoding management frames.  They are
     65 * designed to follow these patterns of use:
     66 *
     67 * DECODE:
     68 * 1) a frame of length len is received into buffer b
     69 * 2) using the hdr structure and macros, we determine the type
     70 * 3) an appropriate mgmt frame structure, mf, is allocated and zeroed
     71 * 4) mf.hdr = b
     72 *    mf.buf = b
     73 *    mf.len = len
     74 * 5) call mgmt_decode( mf )
     75 * 6) the frame field pointers in mf are now set.  Note that any
     76 *    multi-byte frame field values accessed using the frame field
     77 *    pointers are in ieee byte order and will have to be converted
     78 *    to host order.
     79 *
     80 * ENCODE:
     81 * 1) Library client allocates buffer space for maximum length
     82 *    frame of the desired type
     83 * 2) Library client allocates a mgmt frame structure, called mf,
     84 *    of the desired type
     85 * 3) Set the following:
     86 *    mf.type = <desired type>
     87 *    mf.buf = <allocated buffer address>
     88 * 4) call mgmt_encode( mf )
     89 * 5) all of the fixed field pointers and fixed length information element
     90 *    pointers in mf are now set to their respective locations in the
     91 *    allocated space (fortunately, all variable length information elements
     92 *    fall at the end of their respective frames).
     93 * 5a) The length field is set to include the last of the fixed and fixed
     94 *     length fields.  It may have to be updated for optional or variable
     95 *	length information elements.
     96 * 6) Optional and variable length information elements are special cases
     97 *    and must be handled individually by the client code.
     98 * --------------------------------------------------------------------
     99 */
    100
    101#ifndef _P80211MGMT_H
    102#define _P80211MGMT_H
    103
    104#ifndef _P80211HDR_H
    105#include "p80211hdr.h"
    106#endif
    107
    108/*-- Information Element IDs --------------------*/
    109#define WLAN_EID_SSID		0
    110#define WLAN_EID_SUPP_RATES	1
    111#define WLAN_EID_FH_PARMS	2
    112#define WLAN_EID_DS_PARMS	3
    113#define WLAN_EID_CF_PARMS	4
    114#define WLAN_EID_TIM		5
    115#define WLAN_EID_IBSS_PARMS	6
    116/*-- values 7-15 reserved --*/
    117#define WLAN_EID_CHALLENGE	16
    118/*-- values 17-31 reserved for challenge text extension --*/
    119/*-- values 32-255 reserved --*/
    120
    121/*-- Reason Codes -------------------------------*/
    122#define WLAN_MGMT_REASON_RSVD			0
    123#define WLAN_MGMT_REASON_UNSPEC			1
    124#define WLAN_MGMT_REASON_PRIOR_AUTH_INVALID	2
    125#define WLAN_MGMT_REASON_DEAUTH_LEAVING		3
    126#define WLAN_MGMT_REASON_DISASSOC_INACTIVE	4
    127#define WLAN_MGMT_REASON_DISASSOC_AP_BUSY	5
    128#define WLAN_MGMT_REASON_CLASS2_NONAUTH		6
    129#define WLAN_MGMT_REASON_CLASS3_NONASSOC	7
    130#define WLAN_MGMT_REASON_DISASSOC_STA_HASLEFT	8
    131#define WLAN_MGMT_REASON_CANT_ASSOC_NONAUTH	9
    132
    133/*-- Status Codes -------------------------------*/
    134#define WLAN_MGMT_STATUS_SUCCESS		0
    135#define WLAN_MGMT_STATUS_UNSPEC_FAILURE		1
    136#define WLAN_MGMT_STATUS_CAPS_UNSUPPORTED	10
    137#define WLAN_MGMT_STATUS_REASSOC_NO_ASSOC	11
    138#define WLAN_MGMT_STATUS_ASSOC_DENIED_UNSPEC	12
    139#define WLAN_MGMT_STATUS_UNSUPPORTED_AUTHALG	13
    140#define WLAN_MGMT_STATUS_RX_AUTH_NOSEQ		14
    141#define WLAN_MGMT_STATUS_CHALLENGE_FAIL		15
    142#define WLAN_MGMT_STATUS_AUTH_TIMEOUT		16
    143#define WLAN_MGMT_STATUS_ASSOC_DENIED_BUSY	17
    144#define WLAN_MGMT_STATUS_ASSOC_DENIED_RATES	18
    145  /* p80211b additions */
    146#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOSHORT	19
    147#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOPBCC	20
    148#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOAGILITY	21
    149
    150/*-- Auth Algorithm Field ---------------------------*/
    151#define WLAN_AUTH_ALG_OPENSYSTEM		0
    152#define WLAN_AUTH_ALG_SHAREDKEY			1
    153
    154/*-- Management Frame Field Offsets -------------*/
    155/* Note: Not all fields are listed because of variable lengths,   */
    156/*       see the code in p80211.c to see how we search for fields */
    157/* Note: These offsets are from the start of the frame data       */
    158
    159#define WLAN_BEACON_OFF_TS			0
    160#define WLAN_BEACON_OFF_BCN_int			8
    161#define WLAN_BEACON_OFF_CAPINFO			10
    162#define WLAN_BEACON_OFF_SSID			12
    163
    164#define WLAN_DISASSOC_OFF_REASON		0
    165
    166#define WLAN_ASSOCREQ_OFF_CAP_INFO		0
    167#define WLAN_ASSOCREQ_OFF_LISTEN_int		2
    168#define WLAN_ASSOCREQ_OFF_SSID			4
    169
    170#define WLAN_ASSOCRESP_OFF_CAP_INFO		0
    171#define WLAN_ASSOCRESP_OFF_STATUS		2
    172#define WLAN_ASSOCRESP_OFF_AID			4
    173#define WLAN_ASSOCRESP_OFF_SUPP_RATES		6
    174
    175#define WLAN_REASSOCREQ_OFF_CAP_INFO		0
    176#define WLAN_REASSOCREQ_OFF_LISTEN_int		2
    177#define WLAN_REASSOCREQ_OFF_CURR_AP		4
    178#define WLAN_REASSOCREQ_OFF_SSID		10
    179
    180#define WLAN_REASSOCRESP_OFF_CAP_INFO		0
    181#define WLAN_REASSOCRESP_OFF_STATUS		2
    182#define WLAN_REASSOCRESP_OFF_AID		4
    183#define WLAN_REASSOCRESP_OFF_SUPP_RATES		6
    184
    185#define WLAN_PROBEREQ_OFF_SSID			0
    186
    187#define WLAN_PROBERESP_OFF_TS			0
    188#define WLAN_PROBERESP_OFF_BCN_int		8
    189#define WLAN_PROBERESP_OFF_CAP_INFO		10
    190#define WLAN_PROBERESP_OFF_SSID			12
    191
    192#define WLAN_AUTHEN_OFF_AUTH_ALG		0
    193#define WLAN_AUTHEN_OFF_AUTH_SEQ		2
    194#define WLAN_AUTHEN_OFF_STATUS			4
    195#define WLAN_AUTHEN_OFF_CHALLENGE		6
    196
    197#define WLAN_DEAUTHEN_OFF_REASON		0
    198
    199/*-- Capability Field ---------------------------*/
    200#define WLAN_GET_MGMT_CAP_INFO_ESS(n)		((n) & BIT(0))
    201#define WLAN_GET_MGMT_CAP_INFO_IBSS(n)		(((n) & BIT(1)) >> 1)
    202#define WLAN_GET_MGMT_CAP_INFO_CFPOLLABLE(n)	(((n) & BIT(2)) >> 2)
    203#define WLAN_GET_MGMT_CAP_INFO_CFPOLLREQ(n)	(((n) & BIT(3)) >> 3)
    204#define WLAN_GET_MGMT_CAP_INFO_PRIVACY(n)	(((n) & BIT(4)) >> 4)
    205  /* p80211b additions */
    206#define WLAN_GET_MGMT_CAP_INFO_SHORT(n)		(((n) & BIT(5)) >> 5)
    207#define WLAN_GET_MGMT_CAP_INFO_PBCC(n)		(((n) & BIT(6)) >> 6)
    208#define WLAN_GET_MGMT_CAP_INFO_AGILITY(n)	(((n) & BIT(7)) >> 7)
    209
    210#define WLAN_SET_MGMT_CAP_INFO_ESS(n)		(n)
    211#define WLAN_SET_MGMT_CAP_INFO_IBSS(n)		((n) << 1)
    212#define WLAN_SET_MGMT_CAP_INFO_CFPOLLABLE(n)	((n) << 2)
    213#define WLAN_SET_MGMT_CAP_INFO_CFPOLLREQ(n)	((n) << 3)
    214#define WLAN_SET_MGMT_CAP_INFO_PRIVACY(n)	((n) << 4)
    215  /* p80211b additions */
    216#define WLAN_SET_MGMT_CAP_INFO_SHORT(n)		((n) << 5)
    217#define WLAN_SET_MGMT_CAP_INFO_PBCC(n)		((n) << 6)
    218#define WLAN_SET_MGMT_CAP_INFO_AGILITY(n)	((n) << 7)
    219
    220/*-- Information Element Types --------------------*/
    221/* prototype structure, all IEs start with these members */
    222
    223struct wlan_ie {
    224	u8 eid;
    225	u8 len;
    226} __packed;
    227
    228/*-- Service Set Identity (SSID)  -----------------*/
    229struct wlan_ie_ssid {
    230	u8 eid;
    231	u8 len;
    232	u8 ssid[1];		/* may be zero, ptrs may overlap */
    233} __packed;
    234
    235/*-- Supported Rates  -----------------------------*/
    236struct wlan_ie_supp_rates {
    237	u8 eid;
    238	u8 len;
    239	u8 rates[1];		/* had better be at LEAST one! */
    240} __packed;
    241
    242/*-- FH Parameter Set  ----------------------------*/
    243struct wlan_ie_fh_parms {
    244	u8 eid;
    245	u8 len;
    246	u16 dwell;
    247	u8 hopset;
    248	u8 hoppattern;
    249	u8 hopindex;
    250} __packed;
    251
    252/*-- DS Parameter Set  ----------------------------*/
    253struct wlan_ie_ds_parms {
    254	u8 eid;
    255	u8 len;
    256	u8 curr_ch;
    257} __packed;
    258
    259/*-- CF Parameter Set  ----------------------------*/
    260
    261struct wlan_ie_cf_parms {
    262	u8 eid;
    263	u8 len;
    264	u8 cfp_cnt;
    265	u8 cfp_period;
    266	u16 cfp_maxdur;
    267	u16 cfp_durremaining;
    268} __packed;
    269
    270/*-- TIM ------------------------------------------*/
    271struct wlan_ie_tim {
    272	u8 eid;
    273	u8 len;
    274	u8 dtim_cnt;
    275	u8 dtim_period;
    276	u8 bitmap_ctl;
    277	u8 virt_bm[1];
    278} __packed;
    279
    280/*-- IBSS Parameter Set ---------------------------*/
    281struct wlan_ie_ibss_parms {
    282	u8 eid;
    283	u8 len;
    284	u16 atim_win;
    285} __packed;
    286
    287/*-- Challenge Text  ------------------------------*/
    288struct wlan_ie_challenge {
    289	u8 eid;
    290	u8 len;
    291	u8 challenge[1];
    292} __packed;
    293
    294/*-------------------------------------------------*/
    295/*  Frame Types  */
    296
    297/* prototype structure, all mgmt frame types will start with these members */
    298struct wlan_fr_mgmt {
    299	u16 type;
    300	u16 len;		/* DOES NOT include CRC !!!! */
    301	u8 *buf;
    302	struct p80211_hdr *hdr;
    303	/* used for target specific data, skb in Linux */
    304	void *priv;
    305	/*-- fixed fields -----------*/
    306	/*-- info elements ----------*/
    307};
    308
    309/*-- Beacon ---------------------------------------*/
    310struct wlan_fr_beacon {
    311	u16 type;
    312	u16 len;
    313	u8 *buf;
    314	struct p80211_hdr *hdr;
    315	/* used for target specific data, skb in Linux */
    316	void *priv;
    317	/*-- fixed fields -----------*/
    318	u64 *ts;
    319	u16 *bcn_int;
    320	u16 *cap_info;
    321	/*-- info elements ----------*/
    322	struct wlan_ie_ssid *ssid;
    323	struct wlan_ie_supp_rates *supp_rates;
    324	struct wlan_ie_fh_parms *fh_parms;
    325	struct wlan_ie_ds_parms *ds_parms;
    326	struct wlan_ie_cf_parms *cf_parms;
    327	struct wlan_ie_ibss_parms *ibss_parms;
    328	struct wlan_ie_tim *tim;
    329
    330};
    331
    332/*-- IBSS ATIM ------------------------------------*/
    333struct wlan_fr_ibssatim {
    334	u16 type;
    335	u16 len;
    336	u8 *buf;
    337	struct p80211_hdr *hdr;
    338	/* used for target specific data, skb in Linux */
    339	void *priv;
    340
    341	/*-- fixed fields -----------*/
    342	/*-- info elements ----------*/
    343
    344	/* this frame type has a null body */
    345
    346};
    347
    348/*-- Disassociation -------------------------------*/
    349struct wlan_fr_disassoc {
    350	u16 type;
    351	u16 len;
    352	u8 *buf;
    353	struct p80211_hdr *hdr;
    354	/* used for target specific data, skb in Linux */
    355	void *priv;
    356	/*-- fixed fields -----------*/
    357	u16 *reason;
    358
    359	/*-- info elements ----------*/
    360
    361};
    362
    363/*-- Association Request --------------------------*/
    364struct wlan_fr_assocreq {
    365	u16 type;
    366	u16 len;
    367	u8 *buf;
    368	struct p80211_hdr *hdr;
    369	/* used for target specific data, skb in Linux */
    370	void *priv;
    371	/*-- fixed fields -----------*/
    372	u16 *cap_info;
    373	u16 *listen_int;
    374	/*-- info elements ----------*/
    375	struct wlan_ie_ssid *ssid;
    376	struct wlan_ie_supp_rates *supp_rates;
    377
    378};
    379
    380/*-- Association Response -------------------------*/
    381struct wlan_fr_assocresp {
    382	u16 type;
    383	u16 len;
    384	u8 *buf;
    385	struct p80211_hdr *hdr;
    386	/* used for target specific data, skb in Linux */
    387	void *priv;
    388	/*-- fixed fields -----------*/
    389	u16 *cap_info;
    390	u16 *status;
    391	u16 *aid;
    392	/*-- info elements ----------*/
    393	struct wlan_ie_supp_rates *supp_rates;
    394
    395};
    396
    397/*-- Reassociation Request ------------------------*/
    398struct wlan_fr_reassocreq {
    399	u16 type;
    400	u16 len;
    401	u8 *buf;
    402	struct p80211_hdr *hdr;
    403	/* used for target specific data, skb in Linux */
    404	void *priv;
    405	/*-- fixed fields -----------*/
    406	u16 *cap_info;
    407	u16 *listen_int;
    408	u8 *curr_ap;
    409	/*-- info elements ----------*/
    410	struct wlan_ie_ssid *ssid;
    411	struct wlan_ie_supp_rates *supp_rates;
    412
    413};
    414
    415/*-- Reassociation Response -----------------------*/
    416struct wlan_fr_reassocresp {
    417	u16 type;
    418	u16 len;
    419	u8 *buf;
    420	struct p80211_hdr *hdr;
    421	/* used for target specific data, skb in Linux */
    422	void *priv;
    423	/*-- fixed fields -----------*/
    424	u16 *cap_info;
    425	u16 *status;
    426	u16 *aid;
    427	/*-- info elements ----------*/
    428	struct wlan_ie_supp_rates *supp_rates;
    429
    430};
    431
    432/*-- Probe Request --------------------------------*/
    433struct wlan_fr_probereq {
    434	u16 type;
    435	u16 len;
    436	u8 *buf;
    437	struct p80211_hdr *hdr;
    438	/* used for target specific data, skb in Linux */
    439	void *priv;
    440	/*-- fixed fields -----------*/
    441	/*-- info elements ----------*/
    442	struct wlan_ie_ssid *ssid;
    443	struct wlan_ie_supp_rates *supp_rates;
    444
    445};
    446
    447/*-- Probe Response -------------------------------*/
    448struct wlan_fr_proberesp {
    449	u16 type;
    450	u16 len;
    451	u8 *buf;
    452	struct p80211_hdr *hdr;
    453	/* used for target specific data, skb in Linux */
    454	void *priv;
    455	/*-- fixed fields -----------*/
    456	u64 *ts;
    457	u16 *bcn_int;
    458	u16 *cap_info;
    459	/*-- info elements ----------*/
    460	struct wlan_ie_ssid *ssid;
    461	struct wlan_ie_supp_rates *supp_rates;
    462	struct wlan_ie_fh_parms *fh_parms;
    463	struct wlan_ie_ds_parms *ds_parms;
    464	struct wlan_ie_cf_parms *cf_parms;
    465	struct wlan_ie_ibss_parms *ibss_parms;
    466};
    467
    468/*-- Authentication -------------------------------*/
    469struct wlan_fr_authen {
    470	u16 type;
    471	u16 len;
    472	u8 *buf;
    473	struct p80211_hdr *hdr;
    474	/* used for target specific data, skb in Linux */
    475	void *priv;
    476	/*-- fixed fields -----------*/
    477	u16 *auth_alg;
    478	u16 *auth_seq;
    479	u16 *status;
    480	/*-- info elements ----------*/
    481	struct wlan_ie_challenge *challenge;
    482
    483};
    484
    485/*-- Deauthenication -----------------------------*/
    486struct wlan_fr_deauthen {
    487	u16 type;
    488	u16 len;
    489	u8 *buf;
    490	struct p80211_hdr *hdr;
    491	/* used for target specific data, skb in Linux */
    492	void *priv;
    493	/*-- fixed fields -----------*/
    494	u16 *reason;
    495
    496	/*-- info elements ----------*/
    497
    498};
    499
    500void wlan_mgmt_encode_beacon(struct wlan_fr_beacon *f);
    501void wlan_mgmt_decode_beacon(struct wlan_fr_beacon *f);
    502void wlan_mgmt_encode_disassoc(struct wlan_fr_disassoc *f);
    503void wlan_mgmt_decode_disassoc(struct wlan_fr_disassoc *f);
    504void wlan_mgmt_encode_assocreq(struct wlan_fr_assocreq *f);
    505void wlan_mgmt_decode_assocreq(struct wlan_fr_assocreq *f);
    506void wlan_mgmt_encode_assocresp(struct wlan_fr_assocresp *f);
    507void wlan_mgmt_decode_assocresp(struct wlan_fr_assocresp *f);
    508void wlan_mgmt_encode_reassocreq(struct wlan_fr_reassocreq *f);
    509void wlan_mgmt_decode_reassocreq(struct wlan_fr_reassocreq *f);
    510void wlan_mgmt_encode_reassocresp(struct wlan_fr_reassocresp *f);
    511void wlan_mgmt_decode_reassocresp(struct wlan_fr_reassocresp *f);
    512void wlan_mgmt_encode_probereq(struct wlan_fr_probereq *f);
    513void wlan_mgmt_decode_probereq(struct wlan_fr_probereq *f);
    514void wlan_mgmt_encode_proberesp(struct wlan_fr_proberesp *f);
    515void wlan_mgmt_decode_proberesp(struct wlan_fr_proberesp *f);
    516void wlan_mgmt_encode_authen(struct wlan_fr_authen *f);
    517void wlan_mgmt_decode_authen(struct wlan_fr_authen *f);
    518void wlan_mgmt_encode_deauthen(struct wlan_fr_deauthen *f);
    519void wlan_mgmt_decode_deauthen(struct wlan_fr_deauthen *f);
    520
    521#endif /* _P80211MGMT_H */