#ifndef __NET_CFG80211_H1#define __NET_CFG80211_H2/*3* 802.11 device and configuration interface4*5* Copyright 2006-2010 Johannes Berg <[email protected]>6*7* This program is free software; you can redistribute it and/or modify8* it under the terms of the GNU General Public License version 2 as9* published by the Free Software Foundation.10*/1112#include <linux/netdevice.h>13#include <linux/debugfs.h>14#include <linux/list.h>15#include <linux/netlink.h>16#include <linux/skbuff.h>17#include <linux/nl80211.h>18#include <linux/if_ether.h>19#include <linux/ieee80211.h>20#include <net/regulatory.h>2122/* remove once we remove the wext stuff */23#include <net/iw_handler.h>24#include <linux/wireless.h>252627/**28* DOC: Introduction29*30* cfg80211 is the configuration API for 802.11 devices in Linux. It bridges31* userspace and drivers, and offers some utility functionality associated32* with 802.11. cfg80211 must, directly or indirectly via mac80211, be used33* by all modern wireless drivers in Linux, so that they offer a consistent34* API through nl80211. For backward compatibility, cfg80211 also offers35* wireless extensions to userspace, but hides them from drivers completely.36*37* Additionally, cfg80211 contains code to help enforce regulatory spectrum38* use restrictions.39*/404142/**43* DOC: Device registration44*45* In order for a driver to use cfg80211, it must register the hardware device46* with cfg80211. This happens through a number of hardware capability structs47* described below.48*49* The fundamental structure for each device is the 'wiphy', of which each50* instance describes a physical wireless device connected to the system. Each51* such wiphy can have zero, one, or many virtual interfaces associated with52* it, which need to be identified as such by pointing the network interface's53* @ieee80211_ptr pointer to a &struct wireless_dev which further describes54* the wireless part of the interface, normally this struct is embedded in the55* network interface's private data area. Drivers can optionally allow creating56* or destroying virtual interfaces on the fly, but without at least one or the57* ability to create some the wireless device isn't useful.58*59* Each wiphy structure contains device capability information, and also has60* a pointer to the various operations the driver offers. The definitions and61* structures here describe these capabilities in detail.62*/6364/*65* wireless hardware capability structures66*/6768/**69* enum ieee80211_band - supported frequency bands70*71* The bands are assigned this way because the supported72* bitrates differ in these bands.73*74* @IEEE80211_BAND_2GHZ: 2.4GHz ISM band75* @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7)76* @IEEE80211_NUM_BANDS: number of defined bands77*/78enum ieee80211_band {79IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ,80IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ,8182/* keep last */83IEEE80211_NUM_BANDS84};8586/**87* enum ieee80211_channel_flags - channel flags88*89* Channel flags set by the regulatory control code.90*91* @IEEE80211_CHAN_DISABLED: This channel is disabled.92* @IEEE80211_CHAN_PASSIVE_SCAN: Only passive scanning is permitted93* on this channel.94* @IEEE80211_CHAN_NO_IBSS: IBSS is not allowed on this channel.95* @IEEE80211_CHAN_RADAR: Radar detection is required on this channel.96* @IEEE80211_CHAN_NO_HT40PLUS: extension channel above this channel97* is not permitted.98* @IEEE80211_CHAN_NO_HT40MINUS: extension channel below this channel99* is not permitted.100*/101enum ieee80211_channel_flags {102IEEE80211_CHAN_DISABLED = 1<<0,103IEEE80211_CHAN_PASSIVE_SCAN = 1<<1,104IEEE80211_CHAN_NO_IBSS = 1<<2,105IEEE80211_CHAN_RADAR = 1<<3,106IEEE80211_CHAN_NO_HT40PLUS = 1<<4,107IEEE80211_CHAN_NO_HT40MINUS = 1<<5,108};109110#define IEEE80211_CHAN_NO_HT40 \111(IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS)112113/**114* struct ieee80211_channel - channel definition115*116* This structure describes a single channel for use117* with cfg80211.118*119* @center_freq: center frequency in MHz120* @hw_value: hardware-specific value for the channel121* @flags: channel flags from &enum ieee80211_channel_flags.122* @orig_flags: channel flags at registration time, used by regulatory123* code to support devices with additional restrictions124* @band: band this channel belongs to.125* @max_antenna_gain: maximum antenna gain in dBi126* @max_power: maximum transmission power (in dBm)127* @beacon_found: helper to regulatory code to indicate when a beacon128* has been found on this channel. Use regulatory_hint_found_beacon()129* to enable this, this is useful only on 5 GHz band.130* @orig_mag: internal use131* @orig_mpwr: internal use132*/133struct ieee80211_channel {134enum ieee80211_band band;135u16 center_freq;136u16 hw_value;137u32 flags;138int max_antenna_gain;139int max_power;140bool beacon_found;141u32 orig_flags;142int orig_mag, orig_mpwr;143};144145/**146* enum ieee80211_rate_flags - rate flags147*148* Hardware/specification flags for rates. These are structured149* in a way that allows using the same bitrate structure for150* different bands/PHY modes.151*152* @IEEE80211_RATE_SHORT_PREAMBLE: Hardware can send with short153* preamble on this bitrate; only relevant in 2.4GHz band and154* with CCK rates.155* @IEEE80211_RATE_MANDATORY_A: This bitrate is a mandatory rate156* when used with 802.11a (on the 5 GHz band); filled by the157* core code when registering the wiphy.158* @IEEE80211_RATE_MANDATORY_B: This bitrate is a mandatory rate159* when used with 802.11b (on the 2.4 GHz band); filled by the160* core code when registering the wiphy.161* @IEEE80211_RATE_MANDATORY_G: This bitrate is a mandatory rate162* when used with 802.11g (on the 2.4 GHz band); filled by the163* core code when registering the wiphy.164* @IEEE80211_RATE_ERP_G: This is an ERP rate in 802.11g mode.165*/166enum ieee80211_rate_flags {167IEEE80211_RATE_SHORT_PREAMBLE = 1<<0,168IEEE80211_RATE_MANDATORY_A = 1<<1,169IEEE80211_RATE_MANDATORY_B = 1<<2,170IEEE80211_RATE_MANDATORY_G = 1<<3,171IEEE80211_RATE_ERP_G = 1<<4,172};173174/**175* struct ieee80211_rate - bitrate definition176*177* This structure describes a bitrate that an 802.11 PHY can178* operate with. The two values @hw_value and @hw_value_short179* are only for driver use when pointers to this structure are180* passed around.181*182* @flags: rate-specific flags183* @bitrate: bitrate in units of 100 Kbps184* @hw_value: driver/hardware value for this rate185* @hw_value_short: driver/hardware value for this rate when186* short preamble is used187*/188struct ieee80211_rate {189u32 flags;190u16 bitrate;191u16 hw_value, hw_value_short;192};193194/**195* struct ieee80211_sta_ht_cap - STA's HT capabilities196*197* This structure describes most essential parameters needed198* to describe 802.11n HT capabilities for an STA.199*200* @ht_supported: is HT supported by the STA201* @cap: HT capabilities map as described in 802.11n spec202* @ampdu_factor: Maximum A-MPDU length factor203* @ampdu_density: Minimum A-MPDU spacing204* @mcs: Supported MCS rates205*/206struct ieee80211_sta_ht_cap {207u16 cap; /* use IEEE80211_HT_CAP_ */208bool ht_supported;209u8 ampdu_factor;210u8 ampdu_density;211struct ieee80211_mcs_info mcs;212};213214/**215* struct ieee80211_supported_band - frequency band definition216*217* This structure describes a frequency band a wiphy218* is able to operate in.219*220* @channels: Array of channels the hardware can operate in221* in this band.222* @band: the band this structure represents223* @n_channels: Number of channels in @channels224* @bitrates: Array of bitrates the hardware can operate with225* in this band. Must be sorted to give a valid "supported226* rates" IE, i.e. CCK rates first, then OFDM.227* @n_bitrates: Number of bitrates in @bitrates228* @ht_cap: HT capabilities in this band229*/230struct ieee80211_supported_band {231struct ieee80211_channel *channels;232struct ieee80211_rate *bitrates;233enum ieee80211_band band;234int n_channels;235int n_bitrates;236struct ieee80211_sta_ht_cap ht_cap;237};238239/*240* Wireless hardware/device configuration structures and methods241*/242243/**244* DOC: Actions and configuration245*246* Each wireless device and each virtual interface offer a set of configuration247* operations and other actions that are invoked by userspace. Each of these248* actions is described in the operations structure, and the parameters these249* operations use are described separately.250*251* Additionally, some operations are asynchronous and expect to get status252* information via some functions that drivers need to call.253*254* Scanning and BSS list handling with its associated functionality is described255* in a separate chapter.256*/257258/**259* struct vif_params - describes virtual interface parameters260* @use_4addr: use 4-address frames261*/262struct vif_params {263int use_4addr;264};265266/**267* struct key_params - key information268*269* Information about a key270*271* @key: key material272* @key_len: length of key material273* @cipher: cipher suite selector274* @seq: sequence counter (IV/PN) for TKIP and CCMP keys, only used275* with the get_key() callback, must be in little endian,276* length given by @seq_len.277* @seq_len: length of @seq.278*/279struct key_params {280u8 *key;281u8 *seq;282int key_len;283int seq_len;284u32 cipher;285};286287/**288* enum survey_info_flags - survey information flags289*290* @SURVEY_INFO_NOISE_DBM: noise (in dBm) was filled in291* @SURVEY_INFO_IN_USE: channel is currently being used292* @SURVEY_INFO_CHANNEL_TIME: channel active time (in ms) was filled in293* @SURVEY_INFO_CHANNEL_TIME_BUSY: channel busy time was filled in294* @SURVEY_INFO_CHANNEL_TIME_EXT_BUSY: extension channel busy time was filled in295* @SURVEY_INFO_CHANNEL_TIME_RX: channel receive time was filled in296* @SURVEY_INFO_CHANNEL_TIME_TX: channel transmit time was filled in297*298* Used by the driver to indicate which info in &struct survey_info299* it has filled in during the get_survey().300*/301enum survey_info_flags {302SURVEY_INFO_NOISE_DBM = 1<<0,303SURVEY_INFO_IN_USE = 1<<1,304SURVEY_INFO_CHANNEL_TIME = 1<<2,305SURVEY_INFO_CHANNEL_TIME_BUSY = 1<<3,306SURVEY_INFO_CHANNEL_TIME_EXT_BUSY = 1<<4,307SURVEY_INFO_CHANNEL_TIME_RX = 1<<5,308SURVEY_INFO_CHANNEL_TIME_TX = 1<<6,309};310311/**312* struct survey_info - channel survey response313*314* @channel: the channel this survey record reports, mandatory315* @filled: bitflag of flags from &enum survey_info_flags316* @noise: channel noise in dBm. This and all following fields are317* optional318* @channel_time: amount of time in ms the radio spent on the channel319* @channel_time_busy: amount of time the primary channel was sensed busy320* @channel_time_ext_busy: amount of time the extension channel was sensed busy321* @channel_time_rx: amount of time the radio spent receiving data322* @channel_time_tx: amount of time the radio spent transmitting data323*324* Used by dump_survey() to report back per-channel survey information.325*326* This structure can later be expanded with things like327* channel duty cycle etc.328*/329struct survey_info {330struct ieee80211_channel *channel;331u64 channel_time;332u64 channel_time_busy;333u64 channel_time_ext_busy;334u64 channel_time_rx;335u64 channel_time_tx;336u32 filled;337s8 noise;338};339340/**341* struct beacon_parameters - beacon parameters342*343* Used to configure the beacon for an interface.344*345* @head: head portion of beacon (before TIM IE)346* or %NULL if not changed347* @tail: tail portion of beacon (after TIM IE)348* or %NULL if not changed349* @interval: beacon interval or zero if not changed350* @dtim_period: DTIM period or zero if not changed351* @head_len: length of @head352* @tail_len: length of @tail353*/354struct beacon_parameters {355u8 *head, *tail;356int interval, dtim_period;357int head_len, tail_len;358};359360/**361* enum plink_action - actions to perform in mesh peers362*363* @PLINK_ACTION_INVALID: action 0 is reserved364* @PLINK_ACTION_OPEN: start mesh peer link establishment365* @PLINK_ACTION_BLOCK: block traffic from this mesh peer366*/367enum plink_actions {368PLINK_ACTION_INVALID,369PLINK_ACTION_OPEN,370PLINK_ACTION_BLOCK,371};372373/**374* struct station_parameters - station parameters375*376* Used to change and create a new station.377*378* @vlan: vlan interface station should belong to379* @supported_rates: supported rates in IEEE 802.11 format380* (or NULL for no change)381* @supported_rates_len: number of supported rates382* @sta_flags_mask: station flags that changed383* (bitmask of BIT(NL80211_STA_FLAG_...))384* @sta_flags_set: station flags values385* (bitmask of BIT(NL80211_STA_FLAG_...))386* @listen_interval: listen interval or -1 for no change387* @aid: AID or zero for no change388* @plink_action: plink action to take389* @plink_state: set the peer link state for a station390* @ht_capa: HT capabilities of station391*/392struct station_parameters {393u8 *supported_rates;394struct net_device *vlan;395u32 sta_flags_mask, sta_flags_set;396int listen_interval;397u16 aid;398u8 supported_rates_len;399u8 plink_action;400u8 plink_state;401struct ieee80211_ht_cap *ht_capa;402};403404/**405* enum station_info_flags - station information flags406*407* Used by the driver to indicate which info in &struct station_info408* it has filled in during get_station() or dump_station().409*410* @STATION_INFO_INACTIVE_TIME: @inactive_time filled411* @STATION_INFO_RX_BYTES: @rx_bytes filled412* @STATION_INFO_TX_BYTES: @tx_bytes filled413* @STATION_INFO_LLID: @llid filled414* @STATION_INFO_PLID: @plid filled415* @STATION_INFO_PLINK_STATE: @plink_state filled416* @STATION_INFO_SIGNAL: @signal filled417* @STATION_INFO_TX_BITRATE: @txrate fields are filled418* (tx_bitrate, tx_bitrate_flags and tx_bitrate_mcs)419* @STATION_INFO_RX_PACKETS: @rx_packets filled420* @STATION_INFO_TX_PACKETS: @tx_packets filled421* @STATION_INFO_TX_RETRIES: @tx_retries filled422* @STATION_INFO_TX_FAILED: @tx_failed filled423* @STATION_INFO_RX_DROP_MISC: @rx_dropped_misc filled424* @STATION_INFO_SIGNAL_AVG: @signal_avg filled425* @STATION_INFO_RX_BITRATE: @rxrate fields are filled426* @STATION_INFO_BSS_PARAM: @bss_param filled427* @STATION_INFO_CONNECTED_TIME: @connected_time filled428*/429enum station_info_flags {430STATION_INFO_INACTIVE_TIME = 1<<0,431STATION_INFO_RX_BYTES = 1<<1,432STATION_INFO_TX_BYTES = 1<<2,433STATION_INFO_LLID = 1<<3,434STATION_INFO_PLID = 1<<4,435STATION_INFO_PLINK_STATE = 1<<5,436STATION_INFO_SIGNAL = 1<<6,437STATION_INFO_TX_BITRATE = 1<<7,438STATION_INFO_RX_PACKETS = 1<<8,439STATION_INFO_TX_PACKETS = 1<<9,440STATION_INFO_TX_RETRIES = 1<<10,441STATION_INFO_TX_FAILED = 1<<11,442STATION_INFO_RX_DROP_MISC = 1<<12,443STATION_INFO_SIGNAL_AVG = 1<<13,444STATION_INFO_RX_BITRATE = 1<<14,445STATION_INFO_BSS_PARAM = 1<<15,446STATION_INFO_CONNECTED_TIME = 1<<16447};448449/**450* enum station_info_rate_flags - bitrate info flags451*452* Used by the driver to indicate the specific rate transmission453* type for 802.11n transmissions.454*455* @RATE_INFO_FLAGS_MCS: @tx_bitrate_mcs filled456* @RATE_INFO_FLAGS_40_MHZ_WIDTH: 40 Mhz width transmission457* @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval458*/459enum rate_info_flags {460RATE_INFO_FLAGS_MCS = 1<<0,461RATE_INFO_FLAGS_40_MHZ_WIDTH = 1<<1,462RATE_INFO_FLAGS_SHORT_GI = 1<<2,463};464465/**466* struct rate_info - bitrate information467*468* Information about a receiving or transmitting bitrate469*470* @flags: bitflag of flags from &enum rate_info_flags471* @mcs: mcs index if struct describes a 802.11n bitrate472* @legacy: bitrate in 100kbit/s for 802.11abg473*/474struct rate_info {475u8 flags;476u8 mcs;477u16 legacy;478};479480/**481* enum station_info_rate_flags - bitrate info flags482*483* Used by the driver to indicate the specific rate transmission484* type for 802.11n transmissions.485*486* @BSS_PARAM_FLAGS_CTS_PROT: whether CTS protection is enabled487* @BSS_PARAM_FLAGS_SHORT_PREAMBLE: whether short preamble is enabled488* @BSS_PARAM_FLAGS_SHORT_SLOT_TIME: whether short slot time is enabled489*/490enum bss_param_flags {491BSS_PARAM_FLAGS_CTS_PROT = 1<<0,492BSS_PARAM_FLAGS_SHORT_PREAMBLE = 1<<1,493BSS_PARAM_FLAGS_SHORT_SLOT_TIME = 1<<2,494};495496/**497* struct sta_bss_parameters - BSS parameters for the attached station498*499* Information about the currently associated BSS500*501* @flags: bitflag of flags from &enum bss_param_flags502* @dtim_period: DTIM period for the BSS503* @beacon_interval: beacon interval504*/505struct sta_bss_parameters {506u8 flags;507u8 dtim_period;508u16 beacon_interval;509};510511/**512* struct station_info - station information513*514* Station information filled by driver for get_station() and dump_station.515*516* @filled: bitflag of flags from &enum station_info_flags517* @connected_time: time(in secs) since a station is last connected518* @inactive_time: time since last station activity (tx/rx) in milliseconds519* @rx_bytes: bytes received from this station520* @tx_bytes: bytes transmitted to this station521* @llid: mesh local link id522* @plid: mesh peer link id523* @plink_state: mesh peer link state524* @signal: signal strength of last received packet in dBm525* @signal_avg: signal strength average in dBm526* @txrate: current unicast bitrate from this station527* @rxrate: current unicast bitrate to this station528* @rx_packets: packets received from this station529* @tx_packets: packets transmitted to this station530* @tx_retries: cumulative retry counts531* @tx_failed: number of failed transmissions (retries exceeded, no ACK)532* @rx_dropped_misc: Dropped for un-specified reason.533* @bss_param: current BSS parameters534* @generation: generation number for nl80211 dumps.535* This number should increase every time the list of stations536* changes, i.e. when a station is added or removed, so that537* userspace can tell whether it got a consistent snapshot.538*/539struct station_info {540u32 filled;541u32 connected_time;542u32 inactive_time;543u32 rx_bytes;544u32 tx_bytes;545u16 llid;546u16 plid;547u8 plink_state;548s8 signal;549s8 signal_avg;550struct rate_info txrate;551struct rate_info rxrate;552u32 rx_packets;553u32 tx_packets;554u32 tx_retries;555u32 tx_failed;556u32 rx_dropped_misc;557struct sta_bss_parameters bss_param;558559int generation;560};561562/**563* enum monitor_flags - monitor flags564*565* Monitor interface configuration flags. Note that these must be the bits566* according to the nl80211 flags.567*568* @MONITOR_FLAG_FCSFAIL: pass frames with bad FCS569* @MONITOR_FLAG_PLCPFAIL: pass frames with bad PLCP570* @MONITOR_FLAG_CONTROL: pass control frames571* @MONITOR_FLAG_OTHER_BSS: disable BSSID filtering572* @MONITOR_FLAG_COOK_FRAMES: report frames after processing573*/574enum monitor_flags {575MONITOR_FLAG_FCSFAIL = 1<<NL80211_MNTR_FLAG_FCSFAIL,576MONITOR_FLAG_PLCPFAIL = 1<<NL80211_MNTR_FLAG_PLCPFAIL,577MONITOR_FLAG_CONTROL = 1<<NL80211_MNTR_FLAG_CONTROL,578MONITOR_FLAG_OTHER_BSS = 1<<NL80211_MNTR_FLAG_OTHER_BSS,579MONITOR_FLAG_COOK_FRAMES = 1<<NL80211_MNTR_FLAG_COOK_FRAMES,580};581582/**583* enum mpath_info_flags - mesh path information flags584*585* Used by the driver to indicate which info in &struct mpath_info it has filled586* in during get_station() or dump_station().587*588* @MPATH_INFO_FRAME_QLEN: @frame_qlen filled589* @MPATH_INFO_SN: @sn filled590* @MPATH_INFO_METRIC: @metric filled591* @MPATH_INFO_EXPTIME: @exptime filled592* @MPATH_INFO_DISCOVERY_TIMEOUT: @discovery_timeout filled593* @MPATH_INFO_DISCOVERY_RETRIES: @discovery_retries filled594* @MPATH_INFO_FLAGS: @flags filled595*/596enum mpath_info_flags {597MPATH_INFO_FRAME_QLEN = BIT(0),598MPATH_INFO_SN = BIT(1),599MPATH_INFO_METRIC = BIT(2),600MPATH_INFO_EXPTIME = BIT(3),601MPATH_INFO_DISCOVERY_TIMEOUT = BIT(4),602MPATH_INFO_DISCOVERY_RETRIES = BIT(5),603MPATH_INFO_FLAGS = BIT(6),604};605606/**607* struct mpath_info - mesh path information608*609* Mesh path information filled by driver for get_mpath() and dump_mpath().610*611* @filled: bitfield of flags from &enum mpath_info_flags612* @frame_qlen: number of queued frames for this destination613* @sn: target sequence number614* @metric: metric (cost) of this mesh path615* @exptime: expiration time for the mesh path from now, in msecs616* @flags: mesh path flags617* @discovery_timeout: total mesh path discovery timeout, in msecs618* @discovery_retries: mesh path discovery retries619* @generation: generation number for nl80211 dumps.620* This number should increase every time the list of mesh paths621* changes, i.e. when a station is added or removed, so that622* userspace can tell whether it got a consistent snapshot.623*/624struct mpath_info {625u32 filled;626u32 frame_qlen;627u32 sn;628u32 metric;629u32 exptime;630u32 discovery_timeout;631u8 discovery_retries;632u8 flags;633634int generation;635};636637/**638* struct bss_parameters - BSS parameters639*640* Used to change BSS parameters (mainly for AP mode).641*642* @use_cts_prot: Whether to use CTS protection643* (0 = no, 1 = yes, -1 = do not change)644* @use_short_preamble: Whether the use of short preambles is allowed645* (0 = no, 1 = yes, -1 = do not change)646* @use_short_slot_time: Whether the use of short slot time is allowed647* (0 = no, 1 = yes, -1 = do not change)648* @basic_rates: basic rates in IEEE 802.11 format649* (or NULL for no change)650* @basic_rates_len: number of basic rates651* @ap_isolate: do not forward packets between connected stations652* @ht_opmode: HT Operation mode653* (u16 = opmode, -1 = do not change)654*/655struct bss_parameters {656int use_cts_prot;657int use_short_preamble;658int use_short_slot_time;659u8 *basic_rates;660u8 basic_rates_len;661int ap_isolate;662int ht_opmode;663};664665/*666* struct mesh_config - 802.11s mesh configuration667*668* These parameters can be changed while the mesh is active.669*/670struct mesh_config {671/* Timeouts in ms */672/* Mesh plink management parameters */673u16 dot11MeshRetryTimeout;674u16 dot11MeshConfirmTimeout;675u16 dot11MeshHoldingTimeout;676u16 dot11MeshMaxPeerLinks;677u8 dot11MeshMaxRetries;678u8 dot11MeshTTL;679/* ttl used in path selection information elements */680u8 element_ttl;681bool auto_open_plinks;682/* HWMP parameters */683u8 dot11MeshHWMPmaxPREQretries;684u32 path_refresh_time;685u16 min_discovery_timeout;686u32 dot11MeshHWMPactivePathTimeout;687u16 dot11MeshHWMPpreqMinInterval;688u16 dot11MeshHWMPnetDiameterTraversalTime;689u8 dot11MeshHWMPRootMode;690};691692/**693* struct mesh_setup - 802.11s mesh setup configuration694* @mesh_id: the mesh ID695* @mesh_id_len: length of the mesh ID, at least 1 and at most 32 bytes696* @path_sel_proto: which path selection protocol to use697* @path_metric: which metric to use698* @ie: vendor information elements (optional)699* @ie_len: length of vendor information elements700* @is_authenticated: this mesh requires authentication701* @is_secure: this mesh uses security702*703* These parameters are fixed when the mesh is created.704*/705struct mesh_setup {706const u8 *mesh_id;707u8 mesh_id_len;708u8 path_sel_proto;709u8 path_metric;710const u8 *ie;711u8 ie_len;712bool is_authenticated;713bool is_secure;714};715716/**717* struct ieee80211_txq_params - TX queue parameters718* @queue: TX queue identifier (NL80211_TXQ_Q_*)719* @txop: Maximum burst time in units of 32 usecs, 0 meaning disabled720* @cwmin: Minimum contention window [a value of the form 2^n-1 in the range721* 1..32767]722* @cwmax: Maximum contention window [a value of the form 2^n-1 in the range723* 1..32767]724* @aifs: Arbitration interframe space [0..255]725*/726struct ieee80211_txq_params {727enum nl80211_txq_q queue;728u16 txop;729u16 cwmin;730u16 cwmax;731u8 aifs;732};733734/* from net/wireless.h */735struct wiphy;736737/**738* DOC: Scanning and BSS list handling739*740* The scanning process itself is fairly simple, but cfg80211 offers quite741* a bit of helper functionality. To start a scan, the scan operation will742* be invoked with a scan definition. This scan definition contains the743* channels to scan, and the SSIDs to send probe requests for (including the744* wildcard, if desired). A passive scan is indicated by having no SSIDs to745* probe. Additionally, a scan request may contain extra information elements746* that should be added to the probe request. The IEs are guaranteed to be747* well-formed, and will not exceed the maximum length the driver advertised748* in the wiphy structure.749*750* When scanning finds a BSS, cfg80211 needs to be notified of that, because751* it is responsible for maintaining the BSS list; the driver should not752* maintain a list itself. For this notification, various functions exist.753*754* Since drivers do not maintain a BSS list, there are also a number of755* functions to search for a BSS and obtain information about it from the756* BSS structure cfg80211 maintains. The BSS list is also made available757* to userspace.758*/759760/**761* struct cfg80211_ssid - SSID description762* @ssid: the SSID763* @ssid_len: length of the ssid764*/765struct cfg80211_ssid {766u8 ssid[IEEE80211_MAX_SSID_LEN];767u8 ssid_len;768};769770/**771* struct cfg80211_scan_request - scan request description772*773* @ssids: SSIDs to scan for (active scan only)774* @n_ssids: number of SSIDs775* @channels: channels to scan on.776* @n_channels: total number of channels to scan777* @ie: optional information element(s) to add into Probe Request or %NULL778* @ie_len: length of ie in octets779* @wiphy: the wiphy this was for780* @dev: the interface781* @aborted: (internal) scan request was notified as aborted782*/783struct cfg80211_scan_request {784struct cfg80211_ssid *ssids;785int n_ssids;786u32 n_channels;787const u8 *ie;788size_t ie_len;789790/* internal */791struct wiphy *wiphy;792struct net_device *dev;793bool aborted;794795/* keep last */796struct ieee80211_channel *channels[0];797};798799/**800* struct cfg80211_sched_scan_request - scheduled scan request description801*802* @ssids: SSIDs to scan for (passed in the probe_reqs in active scans)803* @n_ssids: number of SSIDs804* @n_channels: total number of channels to scan805* @interval: interval between each scheduled scan cycle806* @ie: optional information element(s) to add into Probe Request or %NULL807* @ie_len: length of ie in octets808* @wiphy: the wiphy this was for809* @dev: the interface810* @channels: channels to scan811*/812struct cfg80211_sched_scan_request {813struct cfg80211_ssid *ssids;814int n_ssids;815u32 n_channels;816u32 interval;817const u8 *ie;818size_t ie_len;819820/* internal */821struct wiphy *wiphy;822struct net_device *dev;823824/* keep last */825struct ieee80211_channel *channels[0];826};827828/**829* enum cfg80211_signal_type - signal type830*831* @CFG80211_SIGNAL_TYPE_NONE: no signal strength information available832* @CFG80211_SIGNAL_TYPE_MBM: signal strength in mBm (100*dBm)833* @CFG80211_SIGNAL_TYPE_UNSPEC: signal strength, increasing from 0 through 100834*/835enum cfg80211_signal_type {836CFG80211_SIGNAL_TYPE_NONE,837CFG80211_SIGNAL_TYPE_MBM,838CFG80211_SIGNAL_TYPE_UNSPEC,839};840841/**842* struct cfg80211_bss - BSS description843*844* This structure describes a BSS (which may also be a mesh network)845* for use in scan results and similar.846*847* @channel: channel this BSS is on848* @bssid: BSSID of the BSS849* @tsf: timestamp of last received update850* @beacon_interval: the beacon interval as from the frame851* @capability: the capability field in host byte order852* @information_elements: the information elements (Note that there853* is no guarantee that these are well-formed!); this is a pointer to854* either the beacon_ies or proberesp_ies depending on whether Probe855* Response frame has been received856* @len_information_elements: total length of the information elements857* @beacon_ies: the information elements from the last Beacon frame858* @len_beacon_ies: total length of the beacon_ies859* @proberesp_ies: the information elements from the last Probe Response frame860* @len_proberesp_ies: total length of the proberesp_ies861* @signal: signal strength value (type depends on the wiphy's signal_type)862* @free_priv: function pointer to free private data863* @priv: private area for driver use, has at least wiphy->bss_priv_size bytes864*/865struct cfg80211_bss {866struct ieee80211_channel *channel;867868u8 bssid[ETH_ALEN];869u64 tsf;870u16 beacon_interval;871u16 capability;872u8 *information_elements;873size_t len_information_elements;874u8 *beacon_ies;875size_t len_beacon_ies;876u8 *proberesp_ies;877size_t len_proberesp_ies;878879s32 signal;880881void (*free_priv)(struct cfg80211_bss *bss);882u8 priv[0] __attribute__((__aligned__(sizeof(void *))));883};884885/**886* ieee80211_bss_get_ie - find IE with given ID887* @bss: the bss to search888* @ie: the IE ID889* Returns %NULL if not found.890*/891const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 ie);892893894/**895* struct cfg80211_crypto_settings - Crypto settings896* @wpa_versions: indicates which, if any, WPA versions are enabled897* (from enum nl80211_wpa_versions)898* @cipher_group: group key cipher suite (or 0 if unset)899* @n_ciphers_pairwise: number of AP supported unicast ciphers900* @ciphers_pairwise: unicast key cipher suites901* @n_akm_suites: number of AKM suites902* @akm_suites: AKM suites903* @control_port: Whether user space controls IEEE 802.1X port, i.e.,904* sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is905* required to assume that the port is unauthorized until authorized by906* user space. Otherwise, port is marked authorized by default.907* @control_port_ethertype: the control port protocol that should be908* allowed through even on unauthorized ports909* @control_port_no_encrypt: TRUE to prevent encryption of control port910* protocol frames.911*/912struct cfg80211_crypto_settings {913u32 wpa_versions;914u32 cipher_group;915int n_ciphers_pairwise;916u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES];917int n_akm_suites;918u32 akm_suites[NL80211_MAX_NR_AKM_SUITES];919bool control_port;920__be16 control_port_ethertype;921bool control_port_no_encrypt;922};923924/**925* struct cfg80211_auth_request - Authentication request data926*927* This structure provides information needed to complete IEEE 802.11928* authentication.929*930* @bss: The BSS to authenticate with.931* @auth_type: Authentication type (algorithm)932* @ie: Extra IEs to add to Authentication frame or %NULL933* @ie_len: Length of ie buffer in octets934* @key_len: length of WEP key for shared key authentication935* @key_idx: index of WEP key for shared key authentication936* @key: WEP key for shared key authentication937* @local_state_change: This is a request for a local state only, i.e., no938* Authentication frame is to be transmitted and authentication state is939* to be changed without having to wait for a response from the peer STA940* (AP).941*/942struct cfg80211_auth_request {943struct cfg80211_bss *bss;944const u8 *ie;945size_t ie_len;946enum nl80211_auth_type auth_type;947const u8 *key;948u8 key_len, key_idx;949bool local_state_change;950};951952/**953* struct cfg80211_assoc_request - (Re)Association request data954*955* This structure provides information needed to complete IEEE 802.11956* (re)association.957* @bss: The BSS to associate with.958* @ie: Extra IEs to add to (Re)Association Request frame or %NULL959* @ie_len: Length of ie buffer in octets960* @use_mfp: Use management frame protection (IEEE 802.11w) in this association961* @crypto: crypto settings962* @prev_bssid: previous BSSID, if not %NULL use reassociate frame963*/964struct cfg80211_assoc_request {965struct cfg80211_bss *bss;966const u8 *ie, *prev_bssid;967size_t ie_len;968struct cfg80211_crypto_settings crypto;969bool use_mfp;970};971972/**973* struct cfg80211_deauth_request - Deauthentication request data974*975* This structure provides information needed to complete IEEE 802.11976* deauthentication.977*978* @bss: the BSS to deauthenticate from979* @ie: Extra IEs to add to Deauthentication frame or %NULL980* @ie_len: Length of ie buffer in octets981* @reason_code: The reason code for the deauthentication982* @local_state_change: This is a request for a local state only, i.e., no983* Deauthentication frame is to be transmitted.984*/985struct cfg80211_deauth_request {986struct cfg80211_bss *bss;987const u8 *ie;988size_t ie_len;989u16 reason_code;990bool local_state_change;991};992993/**994* struct cfg80211_disassoc_request - Disassociation request data995*996* This structure provides information needed to complete IEEE 802.11997* disassocation.998*999* @bss: the BSS to disassociate from1000* @ie: Extra IEs to add to Disassociation frame or %NULL1001* @ie_len: Length of ie buffer in octets1002* @reason_code: The reason code for the disassociation1003* @local_state_change: This is a request for a local state only, i.e., no1004* Disassociation frame is to be transmitted.1005*/1006struct cfg80211_disassoc_request {1007struct cfg80211_bss *bss;1008const u8 *ie;1009size_t ie_len;1010u16 reason_code;1011bool local_state_change;1012};10131014/**1015* struct cfg80211_ibss_params - IBSS parameters1016*1017* This structure defines the IBSS parameters for the join_ibss()1018* method.1019*1020* @ssid: The SSID, will always be non-null.1021* @ssid_len: The length of the SSID, will always be non-zero.1022* @bssid: Fixed BSSID requested, maybe be %NULL, if set do not1023* search for IBSSs with a different BSSID.1024* @channel: The channel to use if no IBSS can be found to join.1025* @channel_fixed: The channel should be fixed -- do not search for1026* IBSSs to join on other channels.1027* @ie: information element(s) to include in the beacon1028* @ie_len: length of that1029* @beacon_interval: beacon interval to use1030* @privacy: this is a protected network, keys will be configured1031* after joining1032* @basic_rates: bitmap of basic rates to use when creating the IBSS1033* @mcast_rate: per-band multicast rate index + 1 (0: disabled)1034*/1035struct cfg80211_ibss_params {1036u8 *ssid;1037u8 *bssid;1038struct ieee80211_channel *channel;1039u8 *ie;1040u8 ssid_len, ie_len;1041u16 beacon_interval;1042u32 basic_rates;1043bool channel_fixed;1044bool privacy;1045int mcast_rate[IEEE80211_NUM_BANDS];1046};10471048/**1049* struct cfg80211_connect_params - Connection parameters1050*1051* This structure provides information needed to complete IEEE 802.111052* authentication and association.1053*1054* @channel: The channel to use or %NULL if not specified (auto-select based1055* on scan results)1056* @bssid: The AP BSSID or %NULL if not specified (auto-select based on scan1057* results)1058* @ssid: SSID1059* @ssid_len: Length of ssid in octets1060* @auth_type: Authentication type (algorithm)1061* @ie: IEs for association request1062* @ie_len: Length of assoc_ie in octets1063* @privacy: indicates whether privacy-enabled APs should be used1064* @crypto: crypto settings1065* @key_len: length of WEP key for shared key authentication1066* @key_idx: index of WEP key for shared key authentication1067* @key: WEP key for shared key authentication1068*/1069struct cfg80211_connect_params {1070struct ieee80211_channel *channel;1071u8 *bssid;1072u8 *ssid;1073size_t ssid_len;1074enum nl80211_auth_type auth_type;1075u8 *ie;1076size_t ie_len;1077bool privacy;1078struct cfg80211_crypto_settings crypto;1079const u8 *key;1080u8 key_len, key_idx;1081};10821083/**1084* enum wiphy_params_flags - set_wiphy_params bitfield values1085* @WIPHY_PARAM_RETRY_SHORT: wiphy->retry_short has changed1086* @WIPHY_PARAM_RETRY_LONG: wiphy->retry_long has changed1087* @WIPHY_PARAM_FRAG_THRESHOLD: wiphy->frag_threshold has changed1088* @WIPHY_PARAM_RTS_THRESHOLD: wiphy->rts_threshold has changed1089* @WIPHY_PARAM_COVERAGE_CLASS: coverage class changed1090*/1091enum wiphy_params_flags {1092WIPHY_PARAM_RETRY_SHORT = 1 << 0,1093WIPHY_PARAM_RETRY_LONG = 1 << 1,1094WIPHY_PARAM_FRAG_THRESHOLD = 1 << 2,1095WIPHY_PARAM_RTS_THRESHOLD = 1 << 3,1096WIPHY_PARAM_COVERAGE_CLASS = 1 << 4,1097};10981099/*1100* cfg80211_bitrate_mask - masks for bitrate control1101*/1102struct cfg80211_bitrate_mask {1103struct {1104u32 legacy;1105/* TODO: add support for masking MCS rates; e.g.: */1106/* u8 mcs[IEEE80211_HT_MCS_MASK_LEN]; */1107} control[IEEE80211_NUM_BANDS];1108};1109/**1110* struct cfg80211_pmksa - PMK Security Association1111*1112* This structure is passed to the set/del_pmksa() method for PMKSA1113* caching.1114*1115* @bssid: The AP's BSSID.1116* @pmkid: The PMK material itself.1117*/1118struct cfg80211_pmksa {1119u8 *bssid;1120u8 *pmkid;1121};11221123/**1124* struct cfg80211_wowlan_trig_pkt_pattern - packet pattern1125* @mask: bitmask where to match pattern and where to ignore bytes,1126* one bit per byte, in same format as nl802111127* @pattern: bytes to match where bitmask is 11128* @pattern_len: length of pattern (in bytes)1129*1130* Internal note: @mask and @pattern are allocated in one chunk of1131* memory, free @mask only!1132*/1133struct cfg80211_wowlan_trig_pkt_pattern {1134u8 *mask, *pattern;1135int pattern_len;1136};11371138/**1139* struct cfg80211_wowlan - Wake on Wireless-LAN support info1140*1141* This structure defines the enabled WoWLAN triggers for the device.1142* @any: wake up on any activity -- special trigger if device continues1143* operating as normal during suspend1144* @disconnect: wake up if getting disconnected1145* @magic_pkt: wake up on receiving magic packet1146* @patterns: wake up on receiving packet matching a pattern1147* @n_patterns: number of patterns1148*/1149struct cfg80211_wowlan {1150bool any, disconnect, magic_pkt;1151struct cfg80211_wowlan_trig_pkt_pattern *patterns;1152int n_patterns;1153};11541155/**1156* struct cfg80211_ops - backend description for wireless configuration1157*1158* This struct is registered by fullmac card drivers and/or wireless stacks1159* in order to handle configuration requests on their interfaces.1160*1161* All callbacks except where otherwise noted should return 01162* on success or a negative error code.1163*1164* All operations are currently invoked under rtnl for consistency with the1165* wireless extensions but this is subject to reevaluation as soon as this1166* code is used more widely and we have a first user without wext.1167*1168* @suspend: wiphy device needs to be suspended. The variable @wow will1169* be %NULL or contain the enabled Wake-on-Wireless triggers that are1170* configured for the device.1171* @resume: wiphy device needs to be resumed1172*1173* @add_virtual_intf: create a new virtual interface with the given name,1174* must set the struct wireless_dev's iftype. Beware: You must create1175* the new netdev in the wiphy's network namespace! Returns the netdev,1176* or an ERR_PTR.1177*1178* @del_virtual_intf: remove the virtual interface determined by ifindex.1179*1180* @change_virtual_intf: change type/configuration of virtual interface,1181* keep the struct wireless_dev's iftype updated.1182*1183* @add_key: add a key with the given parameters. @mac_addr will be %NULL1184* when adding a group key.1185*1186* @get_key: get information about the key with the given parameters.1187* @mac_addr will be %NULL when requesting information for a group1188* key. All pointers given to the @callback function need not be valid1189* after it returns. This function should return an error if it is1190* not possible to retrieve the key, -ENOENT if it doesn't exist.1191*1192* @del_key: remove a key given the @mac_addr (%NULL for a group key)1193* and @key_index, return -ENOENT if the key doesn't exist.1194*1195* @set_default_key: set the default key on an interface1196*1197* @set_default_mgmt_key: set the default management frame key on an interface1198*1199* @add_beacon: Add a beacon with given parameters, @head, @interval1200* and @dtim_period will be valid, @tail is optional.1201* @set_beacon: Change the beacon parameters for an access point mode1202* interface. This should reject the call when no beacon has been1203* configured.1204* @del_beacon: Remove beacon configuration and stop sending the beacon.1205*1206* @add_station: Add a new station.1207* @del_station: Remove a station; @mac may be NULL to remove all stations.1208* @change_station: Modify a given station.1209* @get_station: get station information for the station identified by @mac1210* @dump_station: dump station callback -- resume dump at index @idx1211*1212* @add_mpath: add a fixed mesh path1213* @del_mpath: delete a given mesh path1214* @change_mpath: change a given mesh path1215* @get_mpath: get a mesh path for the given parameters1216* @dump_mpath: dump mesh path callback -- resume dump at index @idx1217* @join_mesh: join the mesh network with the specified parameters1218* @leave_mesh: leave the current mesh network1219*1220* @get_mesh_config: Get the current mesh configuration1221*1222* @update_mesh_config: Update mesh parameters on a running mesh.1223* The mask is a bitfield which tells us which parameters to1224* set, and which to leave alone.1225*1226* @change_bss: Modify parameters for a given BSS.1227*1228* @set_txq_params: Set TX queue parameters1229*1230* @set_channel: Set channel for a given wireless interface. Some devices1231* may support multi-channel operation (by channel hopping) so cfg802111232* doesn't verify much. Note, however, that the passed netdev may be1233* %NULL as well if the user requested changing the channel for the1234* device itself, or for a monitor interface.1235*1236* @scan: Request to do a scan. If returning zero, the scan request is given1237* the driver, and will be valid until passed to cfg80211_scan_done().1238* For scan results, call cfg80211_inform_bss(); you can call this outside1239* the scan/scan_done bracket too.1240*1241* @auth: Request to authenticate with the specified peer1242* @assoc: Request to (re)associate with the specified peer1243* @deauth: Request to deauthenticate from the specified peer1244* @disassoc: Request to disassociate from the specified peer1245*1246* @connect: Connect to the ESS with the specified parameters. When connected,1247* call cfg80211_connect_result() with status code %WLAN_STATUS_SUCCESS.1248* If the connection fails for some reason, call cfg80211_connect_result()1249* with the status from the AP.1250* @disconnect: Disconnect from the BSS/ESS.1251*1252* @join_ibss: Join the specified IBSS (or create if necessary). Once done, call1253* cfg80211_ibss_joined(), also call that function when changing BSSID due1254* to a merge.1255* @leave_ibss: Leave the IBSS.1256*1257* @set_wiphy_params: Notify that wiphy parameters have changed;1258* @changed bitfield (see &enum wiphy_params_flags) describes which values1259* have changed. The actual parameter values are available in1260* struct wiphy. If returning an error, no value should be changed.1261*1262* @set_tx_power: set the transmit power according to the parameters1263* @get_tx_power: store the current TX power into the dbm variable;1264* return 0 if successful1265*1266* @set_wds_peer: set the WDS peer for a WDS interface1267*1268* @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting1269* functions to adjust rfkill hw state1270*1271* @dump_survey: get site survey information.1272*1273* @remain_on_channel: Request the driver to remain awake on the specified1274* channel for the specified duration to complete an off-channel1275* operation (e.g., public action frame exchange). When the driver is1276* ready on the requested channel, it must indicate this with an event1277* notification by calling cfg80211_ready_on_channel().1278* @cancel_remain_on_channel: Cancel an on-going remain-on-channel operation.1279* This allows the operation to be terminated prior to timeout based on1280* the duration value.1281* @mgmt_tx: Transmit a management frame.1282* @mgmt_tx_cancel_wait: Cancel the wait time from transmitting a management1283* frame on another channel1284*1285* @testmode_cmd: run a test mode command1286*1287* @set_bitrate_mask: set the bitrate mask configuration1288*1289* @set_pmksa: Cache a PMKID for a BSSID. This is mostly useful for fullmac1290* devices running firmwares capable of generating the (re) association1291* RSN IE. It allows for faster roaming between WPA2 BSSIDs.1292* @del_pmksa: Delete a cached PMKID.1293* @flush_pmksa: Flush all cached PMKIDs.1294* @set_power_mgmt: Configure WLAN power management. A timeout value of -11295* allows the driver to adjust the dynamic ps timeout value.1296* @set_cqm_rssi_config: Configure connection quality monitor RSSI threshold.1297* @sched_scan_start: Tell the driver to start a scheduled scan.1298* @sched_scan_stop: Tell the driver to stop an ongoing scheduled1299* scan. The driver_initiated flag specifies whether the driver1300* itself has informed that the scan has stopped.1301*1302* @mgmt_frame_register: Notify driver that a management frame type was1303* registered. Note that this callback may not sleep, and cannot run1304* concurrently with itself.1305*1306* @set_antenna: Set antenna configuration (tx_ant, rx_ant) on the device.1307* Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may1308* reject TX/RX mask combinations they cannot support by returning -EINVAL1309* (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX).1310*1311* @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant).1312*1313* @set_ringparam: Set tx and rx ring sizes.1314*1315* @get_ringparam: Get tx and rx ring current and maximum sizes.1316*/1317struct cfg80211_ops {1318int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);1319int (*resume)(struct wiphy *wiphy);13201321struct net_device * (*add_virtual_intf)(struct wiphy *wiphy,1322char *name,1323enum nl80211_iftype type,1324u32 *flags,1325struct vif_params *params);1326int (*del_virtual_intf)(struct wiphy *wiphy, struct net_device *dev);1327int (*change_virtual_intf)(struct wiphy *wiphy,1328struct net_device *dev,1329enum nl80211_iftype type, u32 *flags,1330struct vif_params *params);13311332int (*add_key)(struct wiphy *wiphy, struct net_device *netdev,1333u8 key_index, bool pairwise, const u8 *mac_addr,1334struct key_params *params);1335int (*get_key)(struct wiphy *wiphy, struct net_device *netdev,1336u8 key_index, bool pairwise, const u8 *mac_addr,1337void *cookie,1338void (*callback)(void *cookie, struct key_params*));1339int (*del_key)(struct wiphy *wiphy, struct net_device *netdev,1340u8 key_index, bool pairwise, const u8 *mac_addr);1341int (*set_default_key)(struct wiphy *wiphy,1342struct net_device *netdev,1343u8 key_index, bool unicast, bool multicast);1344int (*set_default_mgmt_key)(struct wiphy *wiphy,1345struct net_device *netdev,1346u8 key_index);13471348int (*add_beacon)(struct wiphy *wiphy, struct net_device *dev,1349struct beacon_parameters *info);1350int (*set_beacon)(struct wiphy *wiphy, struct net_device *dev,1351struct beacon_parameters *info);1352int (*del_beacon)(struct wiphy *wiphy, struct net_device *dev);135313541355int (*add_station)(struct wiphy *wiphy, struct net_device *dev,1356u8 *mac, struct station_parameters *params);1357int (*del_station)(struct wiphy *wiphy, struct net_device *dev,1358u8 *mac);1359int (*change_station)(struct wiphy *wiphy, struct net_device *dev,1360u8 *mac, struct station_parameters *params);1361int (*get_station)(struct wiphy *wiphy, struct net_device *dev,1362u8 *mac, struct station_info *sinfo);1363int (*dump_station)(struct wiphy *wiphy, struct net_device *dev,1364int idx, u8 *mac, struct station_info *sinfo);13651366int (*add_mpath)(struct wiphy *wiphy, struct net_device *dev,1367u8 *dst, u8 *next_hop);1368int (*del_mpath)(struct wiphy *wiphy, struct net_device *dev,1369u8 *dst);1370int (*change_mpath)(struct wiphy *wiphy, struct net_device *dev,1371u8 *dst, u8 *next_hop);1372int (*get_mpath)(struct wiphy *wiphy, struct net_device *dev,1373u8 *dst, u8 *next_hop,1374struct mpath_info *pinfo);1375int (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev,1376int idx, u8 *dst, u8 *next_hop,1377struct mpath_info *pinfo);1378int (*get_mesh_config)(struct wiphy *wiphy,1379struct net_device *dev,1380struct mesh_config *conf);1381int (*update_mesh_config)(struct wiphy *wiphy,1382struct net_device *dev, u32 mask,1383const struct mesh_config *nconf);1384int (*join_mesh)(struct wiphy *wiphy, struct net_device *dev,1385const struct mesh_config *conf,1386const struct mesh_setup *setup);1387int (*leave_mesh)(struct wiphy *wiphy, struct net_device *dev);13881389int (*change_bss)(struct wiphy *wiphy, struct net_device *dev,1390struct bss_parameters *params);13911392int (*set_txq_params)(struct wiphy *wiphy,1393struct ieee80211_txq_params *params);13941395int (*set_channel)(struct wiphy *wiphy, struct net_device *dev,1396struct ieee80211_channel *chan,1397enum nl80211_channel_type channel_type);13981399int (*scan)(struct wiphy *wiphy, struct net_device *dev,1400struct cfg80211_scan_request *request);14011402int (*auth)(struct wiphy *wiphy, struct net_device *dev,1403struct cfg80211_auth_request *req);1404int (*assoc)(struct wiphy *wiphy, struct net_device *dev,1405struct cfg80211_assoc_request *req);1406int (*deauth)(struct wiphy *wiphy, struct net_device *dev,1407struct cfg80211_deauth_request *req,1408void *cookie);1409int (*disassoc)(struct wiphy *wiphy, struct net_device *dev,1410struct cfg80211_disassoc_request *req,1411void *cookie);14121413int (*connect)(struct wiphy *wiphy, struct net_device *dev,1414struct cfg80211_connect_params *sme);1415int (*disconnect)(struct wiphy *wiphy, struct net_device *dev,1416u16 reason_code);14171418int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev,1419struct cfg80211_ibss_params *params);1420int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev);14211422int (*set_wiphy_params)(struct wiphy *wiphy, u32 changed);14231424int (*set_tx_power)(struct wiphy *wiphy,1425enum nl80211_tx_power_setting type, int mbm);1426int (*get_tx_power)(struct wiphy *wiphy, int *dbm);14271428int (*set_wds_peer)(struct wiphy *wiphy, struct net_device *dev,1429const u8 *addr);14301431void (*rfkill_poll)(struct wiphy *wiphy);14321433#ifdef CONFIG_NL80211_TESTMODE1434int (*testmode_cmd)(struct wiphy *wiphy, void *data, int len);1435#endif14361437int (*set_bitrate_mask)(struct wiphy *wiphy,1438struct net_device *dev,1439const u8 *peer,1440const struct cfg80211_bitrate_mask *mask);14411442int (*dump_survey)(struct wiphy *wiphy, struct net_device *netdev,1443int idx, struct survey_info *info);14441445int (*set_pmksa)(struct wiphy *wiphy, struct net_device *netdev,1446struct cfg80211_pmksa *pmksa);1447int (*del_pmksa)(struct wiphy *wiphy, struct net_device *netdev,1448struct cfg80211_pmksa *pmksa);1449int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev);14501451int (*remain_on_channel)(struct wiphy *wiphy,1452struct net_device *dev,1453struct ieee80211_channel *chan,1454enum nl80211_channel_type channel_type,1455unsigned int duration,1456u64 *cookie);1457int (*cancel_remain_on_channel)(struct wiphy *wiphy,1458struct net_device *dev,1459u64 cookie);14601461int (*mgmt_tx)(struct wiphy *wiphy, struct net_device *dev,1462struct ieee80211_channel *chan, bool offchan,1463enum nl80211_channel_type channel_type,1464bool channel_type_valid, unsigned int wait,1465const u8 *buf, size_t len, u64 *cookie);1466int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy,1467struct net_device *dev,1468u64 cookie);14691470int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev,1471bool enabled, int timeout);14721473int (*set_cqm_rssi_config)(struct wiphy *wiphy,1474struct net_device *dev,1475s32 rssi_thold, u32 rssi_hyst);14761477void (*mgmt_frame_register)(struct wiphy *wiphy,1478struct net_device *dev,1479u16 frame_type, bool reg);14801481int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant);1482int (*get_antenna)(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant);14831484int (*set_ringparam)(struct wiphy *wiphy, u32 tx, u32 rx);1485void (*get_ringparam)(struct wiphy *wiphy,1486u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);14871488int (*sched_scan_start)(struct wiphy *wiphy,1489struct net_device *dev,1490struct cfg80211_sched_scan_request *request);1491int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev);1492};14931494/*1495* wireless hardware and networking interfaces structures1496* and registration/helper functions1497*/14981499/**1500* enum wiphy_flags - wiphy capability flags1501*1502* @WIPHY_FLAG_CUSTOM_REGULATORY: tells us the driver for this device1503* has its own custom regulatory domain and cannot identify the1504* ISO / IEC 3166 alpha2 it belongs to. When this is enabled1505* we will disregard the first regulatory hint (when the1506* initiator is %REGDOM_SET_BY_CORE).1507* @WIPHY_FLAG_STRICT_REGULATORY: tells us the driver for this device will1508* ignore regulatory domain settings until it gets its own regulatory1509* domain via its regulatory_hint() unless the regulatory hint is1510* from a country IE. After its gets its own regulatory domain it will1511* only allow further regulatory domain settings to further enhance1512* compliance. For example if channel 13 and 14 are disabled by this1513* regulatory domain no user regulatory domain can enable these channels1514* at a later time. This can be used for devices which do not have1515* calibration information guaranteed for frequencies or settings1516* outside of its regulatory domain.1517* @WIPHY_FLAG_DISABLE_BEACON_HINTS: enable this if your driver needs to ensure1518* that passive scan flags and beaconing flags may not be lifted by1519* cfg80211 due to regulatory beacon hints. For more information on beacon1520* hints read the documenation for regulatory_hint_found_beacon()1521* @WIPHY_FLAG_NETNS_OK: if not set, do not allow changing the netns of this1522* wiphy at all1523* @WIPHY_FLAG_ENFORCE_COMBINATIONS: Set this flag to enforce interface1524* combinations for this device. This flag is used for backward1525* compatibility only until all drivers advertise combinations and1526* they will always be enforced.1527* @WIPHY_FLAG_PS_ON_BY_DEFAULT: if set to true, powersave will be enabled1528* by default -- this flag will be set depending on the kernel's default1529* on wiphy_new(), but can be changed by the driver if it has a good1530* reason to override the default1531* @WIPHY_FLAG_4ADDR_AP: supports 4addr mode even on AP (with a single station1532* on a VLAN interface)1533* @WIPHY_FLAG_4ADDR_STATION: supports 4addr mode even as a station1534* @WIPHY_FLAG_CONTROL_PORT_PROTOCOL: This device supports setting the1535* control port protocol ethertype. The device also honours the1536* control_port_no_encrypt flag.1537* @WIPHY_FLAG_IBSS_RSN: The device supports IBSS RSN.1538* @WIPHY_FLAG_MESH_AUTH: The device supports mesh authentication by routing1539* auth frames to userspace. See @NL80211_MESH_SETUP_USERSPACE_AUTH.1540* @WIPHY_FLAG_SUPPORTS_SCHED_SCAN: The device supports scheduled scans.1541*/1542enum wiphy_flags {1543WIPHY_FLAG_CUSTOM_REGULATORY = BIT(0),1544WIPHY_FLAG_STRICT_REGULATORY = BIT(1),1545WIPHY_FLAG_DISABLE_BEACON_HINTS = BIT(2),1546WIPHY_FLAG_NETNS_OK = BIT(3),1547WIPHY_FLAG_PS_ON_BY_DEFAULT = BIT(4),1548WIPHY_FLAG_4ADDR_AP = BIT(5),1549WIPHY_FLAG_4ADDR_STATION = BIT(6),1550WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7),1551WIPHY_FLAG_IBSS_RSN = BIT(8),1552WIPHY_FLAG_MESH_AUTH = BIT(10),1553WIPHY_FLAG_SUPPORTS_SCHED_SCAN = BIT(11),1554WIPHY_FLAG_ENFORCE_COMBINATIONS = BIT(12),1555};15561557/**1558* struct ieee80211_iface_limit - limit on certain interface types1559* @max: maximum number of interfaces of these types1560* @types: interface types (bits)1561*/1562struct ieee80211_iface_limit {1563u16 max;1564u16 types;1565};15661567/**1568* struct ieee80211_iface_combination - possible interface combination1569* @limits: limits for the given interface types1570* @n_limits: number of limitations1571* @num_different_channels: can use up to this many different channels1572* @max_interfaces: maximum number of interfaces in total allowed in this1573* group1574* @beacon_int_infra_match: In this combination, the beacon intervals1575* between infrastructure and AP types must match. This is required1576* only in special cases.1577*1578* These examples can be expressed as follows:1579*1580* Allow #STA <= 1, #AP <= 1, matching BI, channels = 1, 2 total:1581*1582* struct ieee80211_iface_limit limits1[] = {1583* { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },1584* { .max = 1, .types = BIT(NL80211_IFTYPE_AP}, },1585* };1586* struct ieee80211_iface_combination combination1 = {1587* .limits = limits1,1588* .n_limits = ARRAY_SIZE(limits1),1589* .max_interfaces = 2,1590* .beacon_int_infra_match = true,1591* };1592*1593*1594* Allow #{AP, P2P-GO} <= 8, channels = 1, 8 total:1595*1596* struct ieee80211_iface_limit limits2[] = {1597* { .max = 8, .types = BIT(NL80211_IFTYPE_AP) |1598* BIT(NL80211_IFTYPE_P2P_GO), },1599* };1600* struct ieee80211_iface_combination combination2 = {1601* .limits = limits2,1602* .n_limits = ARRAY_SIZE(limits2),1603* .max_interfaces = 8,1604* .num_different_channels = 1,1605* };1606*1607*1608* Allow #STA <= 1, #{P2P-client,P2P-GO} <= 3 on two channels, 4 total.1609* This allows for an infrastructure connection and three P2P connections.1610*1611* struct ieee80211_iface_limit limits3[] = {1612* { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },1613* { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) |1614* BIT(NL80211_IFTYPE_P2P_CLIENT), },1615* };1616* struct ieee80211_iface_combination combination3 = {1617* .limits = limits3,1618* .n_limits = ARRAY_SIZE(limits3),1619* .max_interfaces = 4,1620* .num_different_channels = 2,1621* };1622*/1623struct ieee80211_iface_combination {1624const struct ieee80211_iface_limit *limits;1625u32 num_different_channels;1626u16 max_interfaces;1627u8 n_limits;1628bool beacon_int_infra_match;1629};16301631struct mac_address {1632u8 addr[ETH_ALEN];1633};16341635struct ieee80211_txrx_stypes {1636u16 tx, rx;1637};16381639/**1640* enum wiphy_wowlan_support_flags - WoWLAN support flags1641* @WIPHY_WOWLAN_ANY: supports wakeup for the special "any"1642* trigger that keeps the device operating as-is and1643* wakes up the host on any activity, for example a1644* received packet that passed filtering; note that the1645* packet should be preserved in that case1646* @WIPHY_WOWLAN_MAGIC_PKT: supports wakeup on magic packet1647* (see nl80211.h)1648* @WIPHY_WOWLAN_DISCONNECT: supports wakeup on disconnect1649*/1650enum wiphy_wowlan_support_flags {1651WIPHY_WOWLAN_ANY = BIT(0),1652WIPHY_WOWLAN_MAGIC_PKT = BIT(1),1653WIPHY_WOWLAN_DISCONNECT = BIT(2),1654};16551656/**1657* struct wiphy_wowlan_support - WoWLAN support data1658* @flags: see &enum wiphy_wowlan_support_flags1659* @n_patterns: number of supported wakeup patterns1660* (see nl80211.h for the pattern definition)1661* @pattern_max_len: maximum length of each pattern1662* @pattern_min_len: minimum length of each pattern1663*/1664struct wiphy_wowlan_support {1665u32 flags;1666int n_patterns;1667int pattern_max_len;1668int pattern_min_len;1669};16701671/**1672* struct wiphy - wireless hardware description1673* @reg_notifier: the driver's regulatory notification callback,1674* note that if your driver uses wiphy_apply_custom_regulatory()1675* the reg_notifier's request can be passed as NULL1676* @regd: the driver's regulatory domain, if one was requested via1677* the regulatory_hint() API. This can be used by the driver1678* on the reg_notifier() if it chooses to ignore future1679* regulatory domain changes caused by other drivers.1680* @signal_type: signal type reported in &struct cfg80211_bss.1681* @cipher_suites: supported cipher suites1682* @n_cipher_suites: number of supported cipher suites1683* @retry_short: Retry limit for short frames (dot11ShortRetryLimit)1684* @retry_long: Retry limit for long frames (dot11LongRetryLimit)1685* @frag_threshold: Fragmentation threshold (dot11FragmentationThreshold);1686* -1 = fragmentation disabled, only odd values >= 256 used1687* @rts_threshold: RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled1688* @_net: the network namespace this wiphy currently lives in1689* @perm_addr: permanent MAC address of this device1690* @addr_mask: If the device supports multiple MAC addresses by masking,1691* set this to a mask with variable bits set to 1, e.g. if the last1692* four bits are variable then set it to 00:...:00:0f. The actual1693* variable bits shall be determined by the interfaces added, with1694* interfaces not matching the mask being rejected to be brought up.1695* @n_addresses: number of addresses in @addresses.1696* @addresses: If the device has more than one address, set this pointer1697* to a list of addresses (6 bytes each). The first one will be used1698* by default for perm_addr. In this case, the mask should be set to1699* all-zeroes. In this case it is assumed that the device can handle1700* the same number of arbitrary MAC addresses.1701* @debugfsdir: debugfs directory used for this wiphy, will be renamed1702* automatically on wiphy renames1703* @dev: (virtual) struct device for this wiphy1704* @wext: wireless extension handlers1705* @priv: driver private data (sized according to wiphy_new() parameter)1706* @interface_modes: bitmask of interfaces types valid for this wiphy,1707* must be set by driver1708* @iface_combinations: Valid interface combinations array, should not1709* list single interface types.1710* @n_iface_combinations: number of entries in @iface_combinations array.1711* @software_iftypes: bitmask of software interface types, these are not1712* subject to any restrictions since they are purely managed in SW.1713* @flags: wiphy flags, see &enum wiphy_flags1714* @bss_priv_size: each BSS struct has private data allocated with it,1715* this variable determines its size1716* @max_scan_ssids: maximum number of SSIDs the device can scan for in1717* any given scan1718* @max_scan_ie_len: maximum length of user-controlled IEs device can1719* add to probe request frames transmitted during a scan, must not1720* include fixed IEs like supported rates1721* @coverage_class: current coverage class1722* @fw_version: firmware version for ethtool reporting1723* @hw_version: hardware version for ethtool reporting1724* @max_num_pmkids: maximum number of PMKIDs supported by device1725* @privid: a pointer that drivers can use to identify if an arbitrary1726* wiphy is theirs, e.g. in global notifiers1727* @bands: information about bands/channels supported by this device1728*1729* @mgmt_stypes: bitmasks of frame subtypes that can be subscribed to or1730* transmitted through nl80211, points to an array indexed by interface1731* type1732*1733* @available_antennas_tx: bitmap of antennas which are available to be1734* configured as TX antennas. Antenna configuration commands will be1735* rejected unless this or @available_antennas_rx is set.1736*1737* @available_antennas_rx: bitmap of antennas which are available to be1738* configured as RX antennas. Antenna configuration commands will be1739* rejected unless this or @available_antennas_tx is set.1740*1741* @max_remain_on_channel_duration: Maximum time a remain-on-channel operation1742* may request, if implemented.1743*1744* @wowlan: WoWLAN support information1745*/1746struct wiphy {1747/* assign these fields before you register the wiphy */17481749/* permanent MAC address(es) */1750u8 perm_addr[ETH_ALEN];1751u8 addr_mask[ETH_ALEN];17521753struct mac_address *addresses;17541755const struct ieee80211_txrx_stypes *mgmt_stypes;17561757const struct ieee80211_iface_combination *iface_combinations;1758int n_iface_combinations;1759u16 software_iftypes;17601761u16 n_addresses;17621763/* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */1764u16 interface_modes;17651766u32 flags;17671768enum cfg80211_signal_type signal_type;17691770int bss_priv_size;1771u8 max_scan_ssids;1772u16 max_scan_ie_len;17731774int n_cipher_suites;1775const u32 *cipher_suites;17761777u8 retry_short;1778u8 retry_long;1779u32 frag_threshold;1780u32 rts_threshold;1781u8 coverage_class;17821783char fw_version[ETHTOOL_BUSINFO_LEN];1784u32 hw_version;17851786struct wiphy_wowlan_support wowlan;17871788u16 max_remain_on_channel_duration;17891790u8 max_num_pmkids;17911792u32 available_antennas_tx;1793u32 available_antennas_rx;17941795/* If multiple wiphys are registered and you're handed e.g.1796* a regular netdev with assigned ieee80211_ptr, you won't1797* know whether it points to a wiphy your driver has registered1798* or not. Assign this to something global to your driver to1799* help determine whether you own this wiphy or not. */1800const void *privid;18011802struct ieee80211_supported_band *bands[IEEE80211_NUM_BANDS];18031804/* Lets us get back the wiphy on the callback */1805int (*reg_notifier)(struct wiphy *wiphy,1806struct regulatory_request *request);18071808/* fields below are read-only, assigned by cfg80211 */18091810const struct ieee80211_regdomain *regd;18111812/* the item in /sys/class/ieee80211/ points to this,1813* you need use set_wiphy_dev() (see below) */1814struct device dev;18151816/* dir in debugfs: ieee80211/<wiphyname> */1817struct dentry *debugfsdir;18181819#ifdef CONFIG_NET_NS1820/* the network namespace this phy lives in currently */1821struct net *_net;1822#endif18231824#ifdef CONFIG_CFG80211_WEXT1825const struct iw_handler_def *wext;1826#endif18271828char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));1829};18301831static inline struct net *wiphy_net(struct wiphy *wiphy)1832{1833return read_pnet(&wiphy->_net);1834}18351836static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net)1837{1838write_pnet(&wiphy->_net, net);1839}18401841/**1842* wiphy_priv - return priv from wiphy1843*1844* @wiphy: the wiphy whose priv pointer to return1845*/1846static inline void *wiphy_priv(struct wiphy *wiphy)1847{1848BUG_ON(!wiphy);1849return &wiphy->priv;1850}18511852/**1853* priv_to_wiphy - return the wiphy containing the priv1854*1855* @priv: a pointer previously returned by wiphy_priv1856*/1857static inline struct wiphy *priv_to_wiphy(void *priv)1858{1859BUG_ON(!priv);1860return container_of(priv, struct wiphy, priv);1861}18621863/**1864* set_wiphy_dev - set device pointer for wiphy1865*1866* @wiphy: The wiphy whose device to bind1867* @dev: The device to parent it to1868*/1869static inline void set_wiphy_dev(struct wiphy *wiphy, struct device *dev)1870{1871wiphy->dev.parent = dev;1872}18731874/**1875* wiphy_dev - get wiphy dev pointer1876*1877* @wiphy: The wiphy whose device struct to look up1878*/1879static inline struct device *wiphy_dev(struct wiphy *wiphy)1880{1881return wiphy->dev.parent;1882}18831884/**1885* wiphy_name - get wiphy name1886*1887* @wiphy: The wiphy whose name to return1888*/1889static inline const char *wiphy_name(const struct wiphy *wiphy)1890{1891return dev_name(&wiphy->dev);1892}18931894/**1895* wiphy_new - create a new wiphy for use with cfg802111896*1897* @ops: The configuration operations for this device1898* @sizeof_priv: The size of the private area to allocate1899*1900* Create a new wiphy and associate the given operations with it.1901* @sizeof_priv bytes are allocated for private use.1902*1903* The returned pointer must be assigned to each netdev's1904* ieee80211_ptr for proper operation.1905*/1906struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv);19071908/**1909* wiphy_register - register a wiphy with cfg802111910*1911* @wiphy: The wiphy to register.1912*1913* Returns a non-negative wiphy index or a negative error code.1914*/1915extern int wiphy_register(struct wiphy *wiphy);19161917/**1918* wiphy_unregister - deregister a wiphy from cfg802111919*1920* @wiphy: The wiphy to unregister.1921*1922* After this call, no more requests can be made with this priv1923* pointer, but the call may sleep to wait for an outstanding1924* request that is being handled.1925*/1926extern void wiphy_unregister(struct wiphy *wiphy);19271928/**1929* wiphy_free - free wiphy1930*1931* @wiphy: The wiphy to free1932*/1933extern void wiphy_free(struct wiphy *wiphy);19341935/* internal structs */1936struct cfg80211_conn;1937struct cfg80211_internal_bss;1938struct cfg80211_cached_keys;19391940#define MAX_AUTH_BSSES 419411942/**1943* struct wireless_dev - wireless per-netdev state1944*1945* This structure must be allocated by the driver/stack1946* that uses the ieee80211_ptr field in struct net_device1947* (this is intentional so it can be allocated along with1948* the netdev.)1949*1950* @wiphy: pointer to hardware description1951* @iftype: interface type1952* @list: (private) Used to collect the interfaces1953* @netdev: (private) Used to reference back to the netdev1954* @current_bss: (private) Used by the internal configuration code1955* @channel: (private) Used by the internal configuration code to track1956* user-set AP, monitor and WDS channels for wireless extensions1957* @bssid: (private) Used by the internal configuration code1958* @ssid: (private) Used by the internal configuration code1959* @ssid_len: (private) Used by the internal configuration code1960* @mesh_id_len: (private) Used by the internal configuration code1961* @mesh_id_up_len: (private) Used by the internal configuration code1962* @wext: (private) Used by the internal wireless extensions compat code1963* @use_4addr: indicates 4addr mode is used on this interface, must be1964* set by driver (if supported) on add_interface BEFORE registering the1965* netdev and may otherwise be used by driver read-only, will be update1966* by cfg80211 on change_interface1967* @mgmt_registrations: list of registrations for management frames1968* @mgmt_registrations_lock: lock for the list1969* @mtx: mutex used to lock data in this struct1970* @cleanup_work: work struct used for cleanup that can't be done directly1971* @beacon_interval: beacon interval used on this device for transmitting1972* beacons, 0 when not valid1973*/1974struct wireless_dev {1975struct wiphy *wiphy;1976enum nl80211_iftype iftype;19771978/* the remainder of this struct should be private to cfg80211 */1979struct list_head list;1980struct net_device *netdev;19811982struct list_head mgmt_registrations;1983spinlock_t mgmt_registrations_lock;19841985struct mutex mtx;19861987struct work_struct cleanup_work;19881989bool use_4addr;19901991/* currently used for IBSS and SME - might be rearranged later */1992u8 ssid[IEEE80211_MAX_SSID_LEN];1993u8 ssid_len, mesh_id_len, mesh_id_up_len;1994enum {1995CFG80211_SME_IDLE,1996CFG80211_SME_CONNECTING,1997CFG80211_SME_CONNECTED,1998} sme_state;1999struct cfg80211_conn *conn;2000struct cfg80211_cached_keys *connect_keys;20012002struct list_head event_list;2003spinlock_t event_lock;20042005struct cfg80211_internal_bss *authtry_bsses[MAX_AUTH_BSSES];2006struct cfg80211_internal_bss *auth_bsses[MAX_AUTH_BSSES];2007struct cfg80211_internal_bss *current_bss; /* associated / joined */2008struct ieee80211_channel *channel;20092010bool ps;2011int ps_timeout;20122013int beacon_interval;20142015#ifdef CONFIG_CFG80211_WEXT2016/* wext data */2017struct {2018struct cfg80211_ibss_params ibss;2019struct cfg80211_connect_params connect;2020struct cfg80211_cached_keys *keys;2021u8 *ie;2022size_t ie_len;2023u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN];2024u8 ssid[IEEE80211_MAX_SSID_LEN];2025s8 default_key, default_mgmt_key;2026bool prev_bssid_valid;2027} wext;2028#endif2029};20302031/**2032* wdev_priv - return wiphy priv from wireless_dev2033*2034* @wdev: The wireless device whose wiphy's priv pointer to return2035*/2036static inline void *wdev_priv(struct wireless_dev *wdev)2037{2038BUG_ON(!wdev);2039return wiphy_priv(wdev->wiphy);2040}20412042/**2043* DOC: Utility functions2044*2045* cfg80211 offers a number of utility functions that can be useful.2046*/20472048/**2049* ieee80211_channel_to_frequency - convert channel number to frequency2050* @chan: channel number2051* @band: band, necessary due to channel number overlap2052*/2053extern int ieee80211_channel_to_frequency(int chan, enum ieee80211_band band);20542055/**2056* ieee80211_frequency_to_channel - convert frequency to channel number2057* @freq: center frequency2058*/2059extern int ieee80211_frequency_to_channel(int freq);20602061/*2062* Name indirection necessary because the ieee80211 code also has2063* a function named "ieee80211_get_channel", so if you include2064* cfg80211's header file you get cfg80211's version, if you try2065* to include both header files you'll (rightfully!) get a symbol2066* clash.2067*/2068extern struct ieee80211_channel *__ieee80211_get_channel(struct wiphy *wiphy,2069int freq);2070/**2071* ieee80211_get_channel - get channel struct from wiphy for specified frequency2072* @wiphy: the struct wiphy to get the channel for2073* @freq: the center frequency of the channel2074*/2075static inline struct ieee80211_channel *2076ieee80211_get_channel(struct wiphy *wiphy, int freq)2077{2078return __ieee80211_get_channel(wiphy, freq);2079}20802081/**2082* ieee80211_get_response_rate - get basic rate for a given rate2083*2084* @sband: the band to look for rates in2085* @basic_rates: bitmap of basic rates2086* @bitrate: the bitrate for which to find the basic rate2087*2088* This function returns the basic rate corresponding to a given2089* bitrate, that is the next lower bitrate contained in the basic2090* rate map, which is, for this function, given as a bitmap of2091* indices of rates in the band's bitrate table.2092*/2093struct ieee80211_rate *2094ieee80211_get_response_rate(struct ieee80211_supported_band *sband,2095u32 basic_rates, int bitrate);20962097/*2098* Radiotap parsing functions -- for controlled injection support2099*2100* Implemented in net/wireless/radiotap.c2101* Documentation in Documentation/networking/radiotap-headers.txt2102*/21032104struct radiotap_align_size {2105uint8_t align:4, size:4;2106};21072108struct ieee80211_radiotap_namespace {2109const struct radiotap_align_size *align_size;2110int n_bits;2111uint32_t oui;2112uint8_t subns;2113};21142115struct ieee80211_radiotap_vendor_namespaces {2116const struct ieee80211_radiotap_namespace *ns;2117int n_ns;2118};21192120/**2121* struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args2122* @this_arg_index: index of current arg, valid after each successful call2123* to ieee80211_radiotap_iterator_next()2124* @this_arg: pointer to current radiotap arg; it is valid after each2125* call to ieee80211_radiotap_iterator_next() but also after2126* ieee80211_radiotap_iterator_init() where it will point to2127* the beginning of the actual data portion2128* @this_arg_size: length of the current arg, for convenience2129* @current_namespace: pointer to the current namespace definition2130* (or internally %NULL if the current namespace is unknown)2131* @is_radiotap_ns: indicates whether the current namespace is the default2132* radiotap namespace or not2133*2134* @_rtheader: pointer to the radiotap header we are walking through2135* @_max_length: length of radiotap header in cpu byte ordering2136* @_arg_index: next argument index2137* @_arg: next argument pointer2138* @_next_bitmap: internal pointer to next present u322139* @_bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present2140* @_vns: vendor namespace definitions2141* @_next_ns_data: beginning of the next namespace's data2142* @_reset_on_ext: internal; reset the arg index to 0 when going to the2143* next bitmap word2144*2145* Describes the radiotap parser state. Fields prefixed with an underscore2146* must not be used by users of the parser, only by the parser internally.2147*/21482149struct ieee80211_radiotap_iterator {2150struct ieee80211_radiotap_header *_rtheader;2151const struct ieee80211_radiotap_vendor_namespaces *_vns;2152const struct ieee80211_radiotap_namespace *current_namespace;21532154unsigned char *_arg, *_next_ns_data;2155__le32 *_next_bitmap;21562157unsigned char *this_arg;2158int this_arg_index;2159int this_arg_size;21602161int is_radiotap_ns;21622163int _max_length;2164int _arg_index;2165uint32_t _bitmap_shifter;2166int _reset_on_ext;2167};21682169extern int ieee80211_radiotap_iterator_init(2170struct ieee80211_radiotap_iterator *iterator,2171struct ieee80211_radiotap_header *radiotap_header,2172int max_length, const struct ieee80211_radiotap_vendor_namespaces *vns);21732174extern int ieee80211_radiotap_iterator_next(2175struct ieee80211_radiotap_iterator *iterator);217621772178extern const unsigned char rfc1042_header[6];2179extern const unsigned char bridge_tunnel_header[6];21802181/**2182* ieee80211_get_hdrlen_from_skb - get header length from data2183*2184* Given an skb with a raw 802.11 header at the data pointer this function2185* returns the 802.11 header length in bytes (not including encryption2186* headers). If the data in the sk_buff is too short to contain a valid 802.112187* header the function returns 0.2188*2189* @skb: the frame2190*/2191unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb);21922193/**2194* ieee80211_hdrlen - get header length in bytes from frame control2195* @fc: frame control field in little-endian format2196*/2197unsigned int __attribute_const__ ieee80211_hdrlen(__le16 fc);21982199/**2200* DOC: Data path helpers2201*2202* In addition to generic utilities, cfg80211 also offers2203* functions that help implement the data path for devices2204* that do not do the 802.11/802.3 conversion on the device.2205*/22062207/**2208* ieee80211_data_to_8023 - convert an 802.11 data frame to 802.32209* @skb: the 802.11 data frame2210* @addr: the device MAC address2211* @iftype: the virtual interface type2212*/2213int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr,2214enum nl80211_iftype iftype);22152216/**2217* ieee80211_data_from_8023 - convert an 802.3 frame to 802.112218* @skb: the 802.3 frame2219* @addr: the device MAC address2220* @iftype: the virtual interface type2221* @bssid: the network bssid (used only for iftype STATION and ADHOC)2222* @qos: build 802.11 QoS data frame2223*/2224int ieee80211_data_from_8023(struct sk_buff *skb, const u8 *addr,2225enum nl80211_iftype iftype, u8 *bssid, bool qos);22262227/**2228* ieee80211_amsdu_to_8023s - decode an IEEE 802.11n A-MSDU frame2229*2230* Decode an IEEE 802.11n A-MSDU frame and convert it to a list of2231* 802.3 frames. The @list will be empty if the decode fails. The2232* @skb is consumed after the function returns.2233*2234* @skb: The input IEEE 802.11n A-MSDU frame.2235* @list: The output list of 802.3 frames. It must be allocated and2236* initialized by by the caller.2237* @addr: The device MAC address.2238* @iftype: The device interface type.2239* @extra_headroom: The hardware extra headroom for SKBs in the @list.2240* @has_80211_header: Set it true if SKB is with IEEE 802.11 header.2241*/2242void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,2243const u8 *addr, enum nl80211_iftype iftype,2244const unsigned int extra_headroom,2245bool has_80211_header);22462247/**2248* cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame2249* @skb: the data frame2250*/2251unsigned int cfg80211_classify8021d(struct sk_buff *skb);22522253/**2254* cfg80211_find_ie - find information element in data2255*2256* @eid: element ID2257* @ies: data consisting of IEs2258* @len: length of data2259*2260* This function will return %NULL if the element ID could2261* not be found or if the element is invalid (claims to be2262* longer than the given data), or a pointer to the first byte2263* of the requested element, that is the byte containing the2264* element ID. There are no checks on the element length2265* other than having to fit into the given data.2266*/2267const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len);22682269/**2270* DOC: Regulatory enforcement infrastructure2271*2272* TODO2273*/22742275/**2276* regulatory_hint - driver hint to the wireless core a regulatory domain2277* @wiphy: the wireless device giving the hint (used only for reporting2278* conflicts)2279* @alpha2: the ISO/IEC 3166 alpha2 the driver claims its regulatory domain2280* should be in. If @rd is set this should be NULL. Note that if you2281* set this to NULL you should still set rd->alpha2 to some accepted2282* alpha2.2283*2284* Wireless drivers can use this function to hint to the wireless core2285* what it believes should be the current regulatory domain by2286* giving it an ISO/IEC 3166 alpha2 country code it knows its regulatory2287* domain should be in or by providing a completely build regulatory domain.2288* If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried2289* for a regulatory domain structure for the respective country.2290*2291* The wiphy must have been registered to cfg80211 prior to this call.2292* For cfg80211 drivers this means you must first use wiphy_register(),2293* for mac80211 drivers you must first use ieee80211_register_hw().2294*2295* Drivers should check the return value, its possible you can get2296* an -ENOMEM.2297*/2298extern int regulatory_hint(struct wiphy *wiphy, const char *alpha2);22992300/**2301* wiphy_apply_custom_regulatory - apply a custom driver regulatory domain2302* @wiphy: the wireless device we want to process the regulatory domain on2303* @regd: the custom regulatory domain to use for this wiphy2304*2305* Drivers can sometimes have custom regulatory domains which do not apply2306* to a specific country. Drivers can use this to apply such custom regulatory2307* domains. This routine must be called prior to wiphy registration. The2308* custom regulatory domain will be trusted completely and as such previous2309* default channel settings will be disregarded. If no rule is found for a2310* channel on the regulatory domain the channel will be disabled.2311*/2312extern void wiphy_apply_custom_regulatory(2313struct wiphy *wiphy,2314const struct ieee80211_regdomain *regd);23152316/**2317* freq_reg_info - get regulatory information for the given frequency2318* @wiphy: the wiphy for which we want to process this rule for2319* @center_freq: Frequency in KHz for which we want regulatory information for2320* @desired_bw_khz: the desired max bandwidth you want to use per2321* channel. Note that this is still 20 MHz if you want to use HT402322* as HT40 makes use of two channels for its 40 MHz width bandwidth.2323* If set to 0 we'll assume you want the standard 20 MHz.2324* @reg_rule: the regulatory rule which we have for this frequency2325*2326* Use this function to get the regulatory rule for a specific frequency on2327* a given wireless device. If the device has a specific regulatory domain2328* it wants to follow we respect that unless a country IE has been received2329* and processed already.2330*2331* Returns 0 if it was able to find a valid regulatory rule which does2332* apply to the given center_freq otherwise it returns non-zero. It will2333* also return -ERANGE if we determine the given center_freq does not even have2334* a regulatory rule for a frequency range in the center_freq's band. See2335* freq_in_rule_band() for our current definition of a band -- this is purely2336* subjective and right now its 802.11 specific.2337*/2338extern int freq_reg_info(struct wiphy *wiphy,2339u32 center_freq,2340u32 desired_bw_khz,2341const struct ieee80211_reg_rule **reg_rule);23422343/*2344* Temporary wext handlers & helper functions2345*2346* In the future cfg80211 will simply assign the entire wext handler2347* structure to netdevs it manages, but we're not there yet.2348*/2349int cfg80211_wext_giwname(struct net_device *dev,2350struct iw_request_info *info,2351char *name, char *extra);2352int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,2353u32 *mode, char *extra);2354int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info,2355u32 *mode, char *extra);2356int cfg80211_wext_siwscan(struct net_device *dev,2357struct iw_request_info *info,2358union iwreq_data *wrqu, char *extra);2359int cfg80211_wext_giwscan(struct net_device *dev,2360struct iw_request_info *info,2361struct iw_point *data, char *extra);2362int cfg80211_wext_siwmlme(struct net_device *dev,2363struct iw_request_info *info,2364struct iw_point *data, char *extra);2365int cfg80211_wext_giwrange(struct net_device *dev,2366struct iw_request_info *info,2367struct iw_point *data, char *extra);2368int cfg80211_wext_siwgenie(struct net_device *dev,2369struct iw_request_info *info,2370struct iw_point *data, char *extra);2371int cfg80211_wext_siwauth(struct net_device *dev,2372struct iw_request_info *info,2373struct iw_param *data, char *extra);2374int cfg80211_wext_giwauth(struct net_device *dev,2375struct iw_request_info *info,2376struct iw_param *data, char *extra);23772378int cfg80211_wext_siwfreq(struct net_device *dev,2379struct iw_request_info *info,2380struct iw_freq *freq, char *extra);2381int cfg80211_wext_giwfreq(struct net_device *dev,2382struct iw_request_info *info,2383struct iw_freq *freq, char *extra);2384int cfg80211_wext_siwessid(struct net_device *dev,2385struct iw_request_info *info,2386struct iw_point *data, char *ssid);2387int cfg80211_wext_giwessid(struct net_device *dev,2388struct iw_request_info *info,2389struct iw_point *data, char *ssid);2390int cfg80211_wext_siwrate(struct net_device *dev,2391struct iw_request_info *info,2392struct iw_param *rate, char *extra);2393int cfg80211_wext_giwrate(struct net_device *dev,2394struct iw_request_info *info,2395struct iw_param *rate, char *extra);23962397int cfg80211_wext_siwrts(struct net_device *dev,2398struct iw_request_info *info,2399struct iw_param *rts, char *extra);2400int cfg80211_wext_giwrts(struct net_device *dev,2401struct iw_request_info *info,2402struct iw_param *rts, char *extra);2403int cfg80211_wext_siwfrag(struct net_device *dev,2404struct iw_request_info *info,2405struct iw_param *frag, char *extra);2406int cfg80211_wext_giwfrag(struct net_device *dev,2407struct iw_request_info *info,2408struct iw_param *frag, char *extra);2409int cfg80211_wext_siwretry(struct net_device *dev,2410struct iw_request_info *info,2411struct iw_param *retry, char *extra);2412int cfg80211_wext_giwretry(struct net_device *dev,2413struct iw_request_info *info,2414struct iw_param *retry, char *extra);2415int cfg80211_wext_siwencodeext(struct net_device *dev,2416struct iw_request_info *info,2417struct iw_point *erq, char *extra);2418int cfg80211_wext_siwencode(struct net_device *dev,2419struct iw_request_info *info,2420struct iw_point *erq, char *keybuf);2421int cfg80211_wext_giwencode(struct net_device *dev,2422struct iw_request_info *info,2423struct iw_point *erq, char *keybuf);2424int cfg80211_wext_siwtxpower(struct net_device *dev,2425struct iw_request_info *info,2426union iwreq_data *data, char *keybuf);2427int cfg80211_wext_giwtxpower(struct net_device *dev,2428struct iw_request_info *info,2429union iwreq_data *data, char *keybuf);2430struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev);24312432int cfg80211_wext_siwpower(struct net_device *dev,2433struct iw_request_info *info,2434struct iw_param *wrq, char *extra);2435int cfg80211_wext_giwpower(struct net_device *dev,2436struct iw_request_info *info,2437struct iw_param *wrq, char *extra);24382439int cfg80211_wext_siwap(struct net_device *dev,2440struct iw_request_info *info,2441struct sockaddr *ap_addr, char *extra);2442int cfg80211_wext_giwap(struct net_device *dev,2443struct iw_request_info *info,2444struct sockaddr *ap_addr, char *extra);24452446int cfg80211_wext_siwpmksa(struct net_device *dev,2447struct iw_request_info *info,2448struct iw_point *data, char *extra);24492450/*2451* callbacks for asynchronous cfg80211 methods, notification2452* functions and BSS handling helpers2453*/24542455/**2456* cfg80211_scan_done - notify that scan finished2457*2458* @request: the corresponding scan request2459* @aborted: set to true if the scan was aborted for any reason,2460* userspace will be notified of that2461*/2462void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted);24632464/**2465* cfg80211_sched_scan_results - notify that new scan results are available2466*2467* @wiphy: the wiphy which got scheduled scan results2468*/2469void cfg80211_sched_scan_results(struct wiphy *wiphy);24702471/**2472* cfg80211_sched_scan_stopped - notify that the scheduled scan has stopped2473*2474* @wiphy: the wiphy on which the scheduled scan stopped2475*2476* The driver can call this function to inform cfg80211 that the2477* scheduled scan had to be stopped, for whatever reason. The driver2478* is then called back via the sched_scan_stop operation when done.2479*/2480void cfg80211_sched_scan_stopped(struct wiphy *wiphy);24812482/**2483* cfg80211_inform_bss_frame - inform cfg80211 of a received BSS frame2484*2485* @wiphy: the wiphy reporting the BSS2486* @channel: The channel the frame was received on2487* @mgmt: the management frame (probe response or beacon)2488* @len: length of the management frame2489* @signal: the signal strength, type depends on the wiphy's signal_type2490* @gfp: context flags2491*2492* This informs cfg80211 that BSS information was found and2493* the BSS should be updated/added.2494*/2495struct cfg80211_bss*2496cfg80211_inform_bss_frame(struct wiphy *wiphy,2497struct ieee80211_channel *channel,2498struct ieee80211_mgmt *mgmt, size_t len,2499s32 signal, gfp_t gfp);25002501/**2502* cfg80211_inform_bss - inform cfg80211 of a new BSS2503*2504* @wiphy: the wiphy reporting the BSS2505* @channel: The channel the frame was received on2506* @bssid: the BSSID of the BSS2507* @timestamp: the TSF timestamp sent by the peer2508* @capability: the capability field sent by the peer2509* @beacon_interval: the beacon interval announced by the peer2510* @ie: additional IEs sent by the peer2511* @ielen: length of the additional IEs2512* @signal: the signal strength, type depends on the wiphy's signal_type2513* @gfp: context flags2514*2515* This informs cfg80211 that BSS information was found and2516* the BSS should be updated/added.2517*/2518struct cfg80211_bss*2519cfg80211_inform_bss(struct wiphy *wiphy,2520struct ieee80211_channel *channel,2521const u8 *bssid,2522u64 timestamp, u16 capability, u16 beacon_interval,2523const u8 *ie, size_t ielen,2524s32 signal, gfp_t gfp);25252526struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy,2527struct ieee80211_channel *channel,2528const u8 *bssid,2529const u8 *ssid, size_t ssid_len,2530u16 capa_mask, u16 capa_val);2531static inline struct cfg80211_bss *2532cfg80211_get_ibss(struct wiphy *wiphy,2533struct ieee80211_channel *channel,2534const u8 *ssid, size_t ssid_len)2535{2536return cfg80211_get_bss(wiphy, channel, NULL, ssid, ssid_len,2537WLAN_CAPABILITY_IBSS, WLAN_CAPABILITY_IBSS);2538}25392540struct cfg80211_bss *cfg80211_get_mesh(struct wiphy *wiphy,2541struct ieee80211_channel *channel,2542const u8 *meshid, size_t meshidlen,2543const u8 *meshcfg);2544void cfg80211_put_bss(struct cfg80211_bss *bss);25452546/**2547* cfg80211_unlink_bss - unlink BSS from internal data structures2548* @wiphy: the wiphy2549* @bss: the bss to remove2550*2551* This function removes the given BSS from the internal data structures2552* thereby making it no longer show up in scan results etc. Use this2553* function when you detect a BSS is gone. Normally BSSes will also time2554* out, so it is not necessary to use this function at all.2555*/2556void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss);25572558/**2559* cfg80211_send_rx_auth - notification of processed authentication2560* @dev: network device2561* @buf: authentication frame (header + body)2562* @len: length of the frame data2563*2564* This function is called whenever an authentication has been processed in2565* station mode. The driver is required to call either this function or2566* cfg80211_send_auth_timeout() to indicate the result of cfg80211_ops::auth()2567* call. This function may sleep.2568*/2569void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len);25702571/**2572* cfg80211_send_auth_timeout - notification of timed out authentication2573* @dev: network device2574* @addr: The MAC address of the device with which the authentication timed out2575*2576* This function may sleep.2577*/2578void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr);25792580/**2581* __cfg80211_auth_canceled - notify cfg80211 that authentication was canceled2582* @dev: network device2583* @addr: The MAC address of the device with which the authentication timed out2584*2585* When a pending authentication had no action yet, the driver may decide2586* to not send a deauth frame, but in that case must calls this function2587* to tell cfg80211 about this decision. It is only valid to call this2588* function within the deauth() callback.2589*/2590void __cfg80211_auth_canceled(struct net_device *dev, const u8 *addr);25912592/**2593* cfg80211_send_rx_assoc - notification of processed association2594* @dev: network device2595* @buf: (re)association response frame (header + body)2596* @len: length of the frame data2597*2598* This function is called whenever a (re)association response has been2599* processed in station mode. The driver is required to call either this2600* function or cfg80211_send_assoc_timeout() to indicate the result of2601* cfg80211_ops::assoc() call. This function may sleep.2602*/2603void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len);26042605/**2606* cfg80211_send_assoc_timeout - notification of timed out association2607* @dev: network device2608* @addr: The MAC address of the device with which the association timed out2609*2610* This function may sleep.2611*/2612void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr);26132614/**2615* cfg80211_send_deauth - notification of processed deauthentication2616* @dev: network device2617* @buf: deauthentication frame (header + body)2618* @len: length of the frame data2619*2620* This function is called whenever deauthentication has been processed in2621* station mode. This includes both received deauthentication frames and2622* locally generated ones. This function may sleep.2623*/2624void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len);26252626/**2627* __cfg80211_send_deauth - notification of processed deauthentication2628* @dev: network device2629* @buf: deauthentication frame (header + body)2630* @len: length of the frame data2631*2632* Like cfg80211_send_deauth(), but doesn't take the wdev lock.2633*/2634void __cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len);26352636/**2637* cfg80211_send_disassoc - notification of processed disassociation2638* @dev: network device2639* @buf: disassociation response frame (header + body)2640* @len: length of the frame data2641*2642* This function is called whenever disassociation has been processed in2643* station mode. This includes both received disassociation frames and locally2644* generated ones. This function may sleep.2645*/2646void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len);26472648/**2649* __cfg80211_send_disassoc - notification of processed disassociation2650* @dev: network device2651* @buf: disassociation response frame (header + body)2652* @len: length of the frame data2653*2654* Like cfg80211_send_disassoc(), but doesn't take the wdev lock.2655*/2656void __cfg80211_send_disassoc(struct net_device *dev, const u8 *buf,2657size_t len);26582659/**2660* cfg80211_send_unprot_deauth - notification of unprotected deauthentication2661* @dev: network device2662* @buf: deauthentication frame (header + body)2663* @len: length of the frame data2664*2665* This function is called whenever a received Deauthentication frame has been2666* dropped in station mode because of MFP being used but the Deauthentication2667* frame was not protected. This function may sleep.2668*/2669void cfg80211_send_unprot_deauth(struct net_device *dev, const u8 *buf,2670size_t len);26712672/**2673* cfg80211_send_unprot_disassoc - notification of unprotected disassociation2674* @dev: network device2675* @buf: disassociation frame (header + body)2676* @len: length of the frame data2677*2678* This function is called whenever a received Disassociation frame has been2679* dropped in station mode because of MFP being used but the Disassociation2680* frame was not protected. This function may sleep.2681*/2682void cfg80211_send_unprot_disassoc(struct net_device *dev, const u8 *buf,2683size_t len);26842685/**2686* cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP)2687* @dev: network device2688* @addr: The source MAC address of the frame2689* @key_type: The key type that the received frame used2690* @key_id: Key identifier (0..3). Can be -1 if missing.2691* @tsc: The TSC value of the frame that generated the MIC failure (6 octets)2692* @gfp: allocation flags2693*2694* This function is called whenever the local MAC detects a MIC failure in a2695* received frame. This matches with MLME-MICHAELMICFAILURE.indication()2696* primitive.2697*/2698void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr,2699enum nl80211_key_type key_type, int key_id,2700const u8 *tsc, gfp_t gfp);27012702/**2703* cfg80211_ibss_joined - notify cfg80211 that device joined an IBSS2704*2705* @dev: network device2706* @bssid: the BSSID of the IBSS joined2707* @gfp: allocation flags2708*2709* This function notifies cfg80211 that the device joined an IBSS or2710* switched to a different BSSID. Before this function can be called,2711* either a beacon has to have been received from the IBSS, or one of2712* the cfg80211_inform_bss{,_frame} functions must have been called2713* with the locally generated beacon -- this guarantees that there is2714* always a scan result for this IBSS. cfg80211 will handle the rest.2715*/2716void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp);27172718/**2719* cfg80211_notify_new_candidate - notify cfg80211 of a new mesh peer candidate2720*2721* @dev: network device2722* @macaddr: the MAC address of the new candidate2723* @ie: information elements advertised by the peer candidate2724* @ie_len: lenght of the information elements buffer2725* @gfp: allocation flags2726*2727* This function notifies cfg80211 that the mesh peer candidate has been2728* detected, most likely via a beacon or, less likely, via a probe response.2729* cfg80211 then sends a notification to userspace.2730*/2731void cfg80211_notify_new_peer_candidate(struct net_device *dev,2732const u8 *macaddr, const u8 *ie, u8 ie_len, gfp_t gfp);27332734/**2735* DOC: RFkill integration2736*2737* RFkill integration in cfg80211 is almost invisible to drivers,2738* as cfg80211 automatically registers an rfkill instance for each2739* wireless device it knows about. Soft kill is also translated2740* into disconnecting and turning all interfaces off, drivers are2741* expected to turn off the device when all interfaces are down.2742*2743* However, devices may have a hard RFkill line, in which case they2744* also need to interact with the rfkill subsystem, via cfg80211.2745* They can do this with a few helper functions documented here.2746*/27472748/**2749* wiphy_rfkill_set_hw_state - notify cfg80211 about hw block state2750* @wiphy: the wiphy2751* @blocked: block status2752*/2753void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked);27542755/**2756* wiphy_rfkill_start_polling - start polling rfkill2757* @wiphy: the wiphy2758*/2759void wiphy_rfkill_start_polling(struct wiphy *wiphy);27602761/**2762* wiphy_rfkill_stop_polling - stop polling rfkill2763* @wiphy: the wiphy2764*/2765void wiphy_rfkill_stop_polling(struct wiphy *wiphy);27662767#ifdef CONFIG_NL80211_TESTMODE2768/**2769* DOC: Test mode2770*2771* Test mode is a set of utility functions to allow drivers to2772* interact with driver-specific tools to aid, for instance,2773* factory programming.2774*2775* This chapter describes how drivers interact with it, for more2776* information see the nl80211 book's chapter on it.2777*/27782779/**2780* cfg80211_testmode_alloc_reply_skb - allocate testmode reply2781* @wiphy: the wiphy2782* @approxlen: an upper bound of the length of the data that will2783* be put into the skb2784*2785* This function allocates and pre-fills an skb for a reply to2786* the testmode command. Since it is intended for a reply, calling2787* it outside of the @testmode_cmd operation is invalid.2788*2789* The returned skb (or %NULL if any errors happen) is pre-filled2790* with the wiphy index and set up in a way that any data that is2791* put into the skb (with skb_put(), nla_put() or similar) will end2792* up being within the %NL80211_ATTR_TESTDATA attribute, so all that2793* needs to be done with the skb is adding data for the corresponding2794* userspace tool which can then read that data out of the testdata2795* attribute. You must not modify the skb in any other way.2796*2797* When done, call cfg80211_testmode_reply() with the skb and return2798* its error code as the result of the @testmode_cmd operation.2799*/2800struct sk_buff *cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy,2801int approxlen);28022803/**2804* cfg80211_testmode_reply - send the reply skb2805* @skb: The skb, must have been allocated with2806* cfg80211_testmode_alloc_reply_skb()2807*2808* Returns an error code or 0 on success, since calling this2809* function will usually be the last thing before returning2810* from the @testmode_cmd you should return the error code.2811* Note that this function consumes the skb regardless of the2812* return value.2813*/2814int cfg80211_testmode_reply(struct sk_buff *skb);28152816/**2817* cfg80211_testmode_alloc_event_skb - allocate testmode event2818* @wiphy: the wiphy2819* @approxlen: an upper bound of the length of the data that will2820* be put into the skb2821* @gfp: allocation flags2822*2823* This function allocates and pre-fills an skb for an event on the2824* testmode multicast group.2825*2826* The returned skb (or %NULL if any errors happen) is set up in the2827* same way as with cfg80211_testmode_alloc_reply_skb() but prepared2828* for an event. As there, you should simply add data to it that will2829* then end up in the %NL80211_ATTR_TESTDATA attribute. Again, you must2830* not modify the skb in any other way.2831*2832* When done filling the skb, call cfg80211_testmode_event() with the2833* skb to send the event.2834*/2835struct sk_buff *cfg80211_testmode_alloc_event_skb(struct wiphy *wiphy,2836int approxlen, gfp_t gfp);28372838/**2839* cfg80211_testmode_event - send the event2840* @skb: The skb, must have been allocated with2841* cfg80211_testmode_alloc_event_skb()2842* @gfp: allocation flags2843*2844* This function sends the given @skb, which must have been allocated2845* by cfg80211_testmode_alloc_event_skb(), as an event. It always2846* consumes it.2847*/2848void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp);28492850#define CFG80211_TESTMODE_CMD(cmd) .testmode_cmd = (cmd),2851#else2852#define CFG80211_TESTMODE_CMD(cmd)2853#endif28542855/**2856* cfg80211_connect_result - notify cfg80211 of connection result2857*2858* @dev: network device2859* @bssid: the BSSID of the AP2860* @req_ie: association request IEs (maybe be %NULL)2861* @req_ie_len: association request IEs length2862* @resp_ie: association response IEs (may be %NULL)2863* @resp_ie_len: assoc response IEs length2864* @status: status code, 0 for successful connection, use2865* %WLAN_STATUS_UNSPECIFIED_FAILURE if your device cannot give you2866* the real status code for failures.2867* @gfp: allocation flags2868*2869* It should be called by the underlying driver whenever connect() has2870* succeeded.2871*/2872void cfg80211_connect_result(struct net_device *dev, const u8 *bssid,2873const u8 *req_ie, size_t req_ie_len,2874const u8 *resp_ie, size_t resp_ie_len,2875u16 status, gfp_t gfp);28762877/**2878* cfg80211_roamed - notify cfg80211 of roaming2879*2880* @dev: network device2881* @channel: the channel of the new AP2882* @bssid: the BSSID of the new AP2883* @req_ie: association request IEs (maybe be %NULL)2884* @req_ie_len: association request IEs length2885* @resp_ie: association response IEs (may be %NULL)2886* @resp_ie_len: assoc response IEs length2887* @gfp: allocation flags2888*2889* It should be called by the underlying driver whenever it roamed2890* from one AP to another while connected.2891*/2892void cfg80211_roamed(struct net_device *dev,2893struct ieee80211_channel *channel,2894const u8 *bssid,2895const u8 *req_ie, size_t req_ie_len,2896const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp);28972898/**2899* cfg80211_disconnected - notify cfg80211 that connection was dropped2900*2901* @dev: network device2902* @ie: information elements of the deauth/disassoc frame (may be %NULL)2903* @ie_len: length of IEs2904* @reason: reason code for the disconnection, set it to 0 if unknown2905* @gfp: allocation flags2906*2907* After it calls this function, the driver should enter an idle state2908* and not try to connect to any AP any more.2909*/2910void cfg80211_disconnected(struct net_device *dev, u16 reason,2911u8 *ie, size_t ie_len, gfp_t gfp);29122913/**2914* cfg80211_ready_on_channel - notification of remain_on_channel start2915* @dev: network device2916* @cookie: the request cookie2917* @chan: The current channel (from remain_on_channel request)2918* @channel_type: Channel type2919* @duration: Duration in milliseconds that the driver intents to remain on the2920* channel2921* @gfp: allocation flags2922*/2923void cfg80211_ready_on_channel(struct net_device *dev, u64 cookie,2924struct ieee80211_channel *chan,2925enum nl80211_channel_type channel_type,2926unsigned int duration, gfp_t gfp);29272928/**2929* cfg80211_remain_on_channel_expired - remain_on_channel duration expired2930* @dev: network device2931* @cookie: the request cookie2932* @chan: The current channel (from remain_on_channel request)2933* @channel_type: Channel type2934* @gfp: allocation flags2935*/2936void cfg80211_remain_on_channel_expired(struct net_device *dev,2937u64 cookie,2938struct ieee80211_channel *chan,2939enum nl80211_channel_type channel_type,2940gfp_t gfp);294129422943/**2944* cfg80211_new_sta - notify userspace about station2945*2946* @dev: the netdev2947* @mac_addr: the station's address2948* @sinfo: the station information2949* @gfp: allocation flags2950*/2951void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr,2952struct station_info *sinfo, gfp_t gfp);29532954/**2955* cfg80211_del_sta - notify userspace about deletion of a station2956*2957* @dev: the netdev2958* @mac_addr: the station's address2959* @gfp: allocation flags2960*/2961void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp);29622963/**2964* cfg80211_rx_mgmt - notification of received, unprocessed management frame2965* @dev: network device2966* @freq: Frequency on which the frame was received in MHz2967* @buf: Management frame (header + body)2968* @len: length of the frame data2969* @gfp: context flags2970*2971* Returns %true if a user space application has registered for this frame.2972* For action frames, that makes it responsible for rejecting unrecognized2973* action frames; %false otherwise, in which case for action frames the2974* driver is responsible for rejecting the frame.2975*2976* This function is called whenever an Action frame is received for a station2977* mode interface, but is not processed in kernel.2978*/2979bool cfg80211_rx_mgmt(struct net_device *dev, int freq, const u8 *buf,2980size_t len, gfp_t gfp);29812982/**2983* cfg80211_mgmt_tx_status - notification of TX status for management frame2984* @dev: network device2985* @cookie: Cookie returned by cfg80211_ops::mgmt_tx()2986* @buf: Management frame (header + body)2987* @len: length of the frame data2988* @ack: Whether frame was acknowledged2989* @gfp: context flags2990*2991* This function is called whenever a management frame was requested to be2992* transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the2993* transmission attempt.2994*/2995void cfg80211_mgmt_tx_status(struct net_device *dev, u64 cookie,2996const u8 *buf, size_t len, bool ack, gfp_t gfp);299729982999/**3000* cfg80211_cqm_rssi_notify - connection quality monitoring rssi event3001* @dev: network device3002* @rssi_event: the triggered RSSI event3003* @gfp: context flags3004*3005* This function is called when a configured connection quality monitoring3006* rssi threshold reached event occurs.3007*/3008void cfg80211_cqm_rssi_notify(struct net_device *dev,3009enum nl80211_cqm_rssi_threshold_event rssi_event,3010gfp_t gfp);30113012/**3013* cfg80211_cqm_pktloss_notify - notify userspace about packetloss to peer3014* @dev: network device3015* @peer: peer's MAC address3016* @num_packets: how many packets were lost -- should be a fixed threshold3017* but probably no less than maybe 50, or maybe a throughput dependent3018* threshold (to account for temporary interference)3019* @gfp: context flags3020*/3021void cfg80211_cqm_pktloss_notify(struct net_device *dev,3022const u8 *peer, u32 num_packets, gfp_t gfp);30233024/* Logging, debugging and troubleshooting/diagnostic helpers. */30253026/* wiphy_printk helpers, similar to dev_printk */30273028#define wiphy_printk(level, wiphy, format, args...) \3029dev_printk(level, &(wiphy)->dev, format, ##args)3030#define wiphy_emerg(wiphy, format, args...) \3031dev_emerg(&(wiphy)->dev, format, ##args)3032#define wiphy_alert(wiphy, format, args...) \3033dev_alert(&(wiphy)->dev, format, ##args)3034#define wiphy_crit(wiphy, format, args...) \3035dev_crit(&(wiphy)->dev, format, ##args)3036#define wiphy_err(wiphy, format, args...) \3037dev_err(&(wiphy)->dev, format, ##args)3038#define wiphy_warn(wiphy, format, args...) \3039dev_warn(&(wiphy)->dev, format, ##args)3040#define wiphy_notice(wiphy, format, args...) \3041dev_notice(&(wiphy)->dev, format, ##args)3042#define wiphy_info(wiphy, format, args...) \3043dev_info(&(wiphy)->dev, format, ##args)30443045#define wiphy_debug(wiphy, format, args...) \3046wiphy_printk(KERN_DEBUG, wiphy, format, ##args)30473048#define wiphy_dbg(wiphy, format, args...) \3049dev_dbg(&(wiphy)->dev, format, ##args)30503051#if defined(VERBOSE_DEBUG)3052#define wiphy_vdbg wiphy_dbg3053#else3054#define wiphy_vdbg(wiphy, format, args...) \3055({ \3056if (0) \3057wiphy_printk(KERN_DEBUG, wiphy, format, ##args); \30580; \3059})3060#endif30613062/*3063* wiphy_WARN() acts like wiphy_printk(), but with the key difference3064* of using a WARN/WARN_ON to get the message out, including the3065* file/line information and a backtrace.3066*/3067#define wiphy_WARN(wiphy, format, args...) \3068WARN(1, "wiphy: %s\n" format, wiphy_name(wiphy), ##args);30693070#endif /* __NET_CFG80211_H */307130723073