2007-04-23 23:20:05 +04:00
# ifndef __NET_CFG80211_H
# define __NET_CFG80211_H
# include <linux/netlink.h>
# include <linux/skbuff.h>
2007-09-20 21:09:35 +04:00
# include <linux/nl80211.h>
2009-02-10 23:25:55 +03:00
# include <linux/if_ether.h>
# include <linux/ieee80211.h>
# include <linux/wireless.h>
# include <net/iw_handler.h>
2007-04-23 23:20:05 +04:00
# include <net/genetlink.h>
2008-11-27 00:36:31 +03:00
/* remove once we remove the wext stuff */
# include <net/iw_handler.h>
2007-04-23 23:20:05 +04:00
/*
* 802.11 configuration in - kernel interface
*
2007-09-20 21:09:35 +04:00
* Copyright 2006 , 2007 Johannes Berg < johannes @ sipsolutions . net >
2007-04-23 23:20:05 +04:00
*/
2008-02-23 17:17:06 +03:00
/**
* struct vif_params - describes virtual interface parameters
* @ mesh_id : mesh ID to use
* @ mesh_id_len : length of the mesh ID
*/
struct vif_params {
u8 * mesh_id ;
int mesh_id_len ;
} ;
2007-07-10 21:29:38 +04:00
/* Radiotap header iteration
* implemented in net / wireless / radiotap . c
* docs in Documentation / networking / radiotap - headers . txt
*/
/**
* struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args
* @ rtheader : pointer to the radiotap header we are walking through
* @ max_length : length of radiotap header in cpu byte ordering
* @ this_arg_index : IEEE80211_RADIOTAP_ . . . index of current arg
* @ this_arg : pointer to current radiotap arg
* @ arg_index : internal next argument index
* @ arg : internal next argument pointer
* @ next_bitmap : internal pointer to next present u32
* @ bitmap_shifter : internal shifter for curr u32 bitmap , b0 set = = arg present
*/
struct ieee80211_radiotap_iterator {
struct ieee80211_radiotap_header * rtheader ;
int max_length ;
int this_arg_index ;
u8 * this_arg ;
int arg_index ;
u8 * arg ;
__le32 * next_bitmap ;
u32 bitmap_shifter ;
} ;
extern int ieee80211_radiotap_iterator_init (
struct ieee80211_radiotap_iterator * iterator ,
struct ieee80211_radiotap_header * radiotap_header ,
int max_length ) ;
extern int ieee80211_radiotap_iterator_next (
struct ieee80211_radiotap_iterator * iterator ) ;
2007-12-19 04:03:29 +03:00
/**
* struct key_params - key information
*
* Information about a key
*
* @ key : key material
* @ key_len : length of key material
* @ cipher : cipher suite selector
* @ seq : sequence counter ( IV / PN ) for TKIP and CCMP keys , only used
* with the get_key ( ) callback , must be in little endian ,
* length given by @ seq_len .
*/
struct key_params {
u8 * key ;
u8 * seq ;
int key_len ;
int seq_len ;
u32 cipher ;
} ;
2007-12-19 04:03:32 +03:00
/**
* struct beacon_parameters - beacon parameters
*
* Used to configure the beacon for an interface .
*
* @ head : head portion of beacon ( before TIM IE )
* or % NULL if not changed
* @ tail : tail portion of beacon ( after TIM IE )
* or % NULL if not changed
* @ interval : beacon interval or zero if not changed
* @ dtim_period : DTIM period or zero if not changed
* @ head_len : length of @ head
* @ tail_len : length of @ tail
*/
struct beacon_parameters {
u8 * head , * tail ;
int interval , dtim_period ;
int head_len , tail_len ;
} ;
2007-12-19 04:03:34 +03:00
/**
* enum station_flags - station flags
*
* Station capability flags . Note that these must be the bits
* according to the nl80211 flags .
*
* @ STATION_FLAG_CHANGED : station flags were changed
* @ STATION_FLAG_AUTHORIZED : station is authorized to send frames ( 802.1 X )
* @ STATION_FLAG_SHORT_PREAMBLE : station is capable of receiving frames
* with short preambles
* @ STATION_FLAG_WME : station is WME / QoS capable
2009-01-08 14:31:59 +03:00
* @ STATION_FLAG_MFP : station uses management frame protection
2007-12-19 04:03:34 +03:00
*/
enum station_flags {
STATION_FLAG_CHANGED = 1 < < 0 ,
STATION_FLAG_AUTHORIZED = 1 < < NL80211_STA_FLAG_AUTHORIZED ,
STATION_FLAG_SHORT_PREAMBLE = 1 < < NL80211_STA_FLAG_SHORT_PREAMBLE ,
STATION_FLAG_WME = 1 < < NL80211_STA_FLAG_WME ,
2009-01-08 14:31:59 +03:00
STATION_FLAG_MFP = 1 < < NL80211_STA_FLAG_MFP ,
2007-12-19 04:03:34 +03:00
} ;
2008-02-23 17:17:06 +03:00
/**
* enum plink_action - actions to perform in mesh peers
*
* @ PLINK_ACTION_INVALID : action 0 is reserved
* @ PLINK_ACTION_OPEN : start mesh peer link establishment
* @ PLINK_ACTION_BLOCL : block traffic from this mesh peer
*/
enum plink_actions {
PLINK_ACTION_INVALID ,
PLINK_ACTION_OPEN ,
PLINK_ACTION_BLOCK ,
} ;
2007-12-19 04:03:34 +03:00
/**
* struct station_parameters - station parameters
*
* Used to change and create a new station .
*
* @ vlan : vlan interface station should belong to
* @ supported_rates : supported rates in IEEE 802.11 format
* ( or NULL for no change )
* @ supported_rates_len : number of supported rates
* @ station_flags : station flags ( see & enum station_flags )
* @ listen_interval : listen interval or - 1 for no change
* @ aid : AID or zero for no change
*/
struct station_parameters {
u8 * supported_rates ;
struct net_device * vlan ;
u32 station_flags ;
int listen_interval ;
u16 aid ;
u8 supported_rates_len ;
2008-02-23 17:17:06 +03:00
u8 plink_action ;
2008-08-25 12:58:58 +04:00
struct ieee80211_ht_cap * ht_capa ;
2007-12-19 04:03:34 +03:00
} ;
2007-12-19 04:03:36 +03:00
/**
2008-02-23 17:17:06 +03:00
* enum station_info_flags - station information flags
2007-12-19 04:03:36 +03:00
*
2008-02-23 17:17:06 +03:00
* Used by the driver to indicate which info in & struct station_info
* it has filled in during get_station ( ) or dump_station ( ) .
2007-12-19 04:03:36 +03:00
*
2008-02-23 17:17:06 +03:00
* @ STATION_INFO_INACTIVE_TIME : @ inactive_time filled
* @ STATION_INFO_RX_BYTES : @ rx_bytes filled
* @ STATION_INFO_TX_BYTES : @ tx_bytes filled
* @ STATION_INFO_LLID : @ llid filled
* @ STATION_INFO_PLID : @ plid filled
* @ STATION_INFO_PLINK_STATE : @ plink_state filled
2008-12-12 00:04:19 +03:00
* @ STATION_INFO_SIGNAL : @ signal filled
* @ STATION_INFO_TX_BITRATE : @ tx_bitrate fields are filled
* ( tx_bitrate , tx_bitrate_flags and tx_bitrate_mcs )
2009-02-17 14:24:57 +03:00
* @ STATION_INFO_RX_PACKETS : @ rx_packets filled
* @ STATION_INFO_TX_PACKETS : @ tx_packets filled
2007-12-19 04:03:36 +03:00
*/
2008-02-23 17:17:06 +03:00
enum station_info_flags {
STATION_INFO_INACTIVE_TIME = 1 < < 0 ,
STATION_INFO_RX_BYTES = 1 < < 1 ,
STATION_INFO_TX_BYTES = 1 < < 2 ,
STATION_INFO_LLID = 1 < < 3 ,
STATION_INFO_PLID = 1 < < 4 ,
STATION_INFO_PLINK_STATE = 1 < < 5 ,
2008-12-12 00:04:19 +03:00
STATION_INFO_SIGNAL = 1 < < 6 ,
STATION_INFO_TX_BITRATE = 1 < < 7 ,
2009-02-17 14:24:57 +03:00
STATION_INFO_RX_PACKETS = 1 < < 8 ,
STATION_INFO_TX_PACKETS = 1 < < 9 ,
2008-12-12 00:04:19 +03:00
} ;
/**
* enum station_info_rate_flags - bitrate info flags
*
* Used by the driver to indicate the specific rate transmission
* type for 802.11 n transmissions .
*
* @ RATE_INFO_FLAGS_MCS : @ tx_bitrate_mcs filled
* @ RATE_INFO_FLAGS_40_MHZ_WIDTH : 40 Mhz width transmission
* @ RATE_INFO_FLAGS_SHORT_GI : 400 ns guard interval
*/
enum rate_info_flags {
RATE_INFO_FLAGS_MCS = 1 < < 0 ,
RATE_INFO_FLAGS_40_MHZ_WIDTH = 1 < < 1 ,
RATE_INFO_FLAGS_SHORT_GI = 1 < < 2 ,
} ;
/**
* struct rate_info - bitrate information
*
* Information about a receiving or transmitting bitrate
*
* @ flags : bitflag of flags from & enum rate_info_flags
* @ mcs : mcs index if struct describes a 802.11 n bitrate
* @ legacy : bitrate in 100 kbit / s for 802.11 abg
*/
struct rate_info {
u8 flags ;
u8 mcs ;
u16 legacy ;
2007-12-19 04:03:36 +03:00
} ;
/**
2008-02-23 17:17:06 +03:00
* struct station_info - station information
2007-12-19 04:03:36 +03:00
*
2008-02-23 17:17:06 +03:00
* Station information filled by driver for get_station ( ) and dump_station .
2007-12-19 04:03:36 +03:00
*
2008-02-23 17:17:06 +03:00
* @ filled : bitflag of flags from & enum station_info_flags
2007-12-19 04:03:36 +03:00
* @ inactive_time : time since last station activity ( tx / rx ) in milliseconds
* @ rx_bytes : bytes received from this station
* @ tx_bytes : bytes transmitted to this station
2008-02-23 17:17:06 +03:00
* @ llid : mesh local link id
* @ plid : mesh peer link id
* @ plink_state : mesh peer link state
2008-12-12 00:04:19 +03:00
* @ signal : signal strength of last received packet in dBm
* @ txrate : current unicast bitrate to this station
2009-02-17 14:24:57 +03:00
* @ rx_packets : packets received from this station
* @ tx_packets : packets transmitted to this station
2007-12-19 04:03:36 +03:00
*/
2008-02-23 17:17:06 +03:00
struct station_info {
2007-12-19 04:03:36 +03:00
u32 filled ;
u32 inactive_time ;
u32 rx_bytes ;
u32 tx_bytes ;
2008-02-23 17:17:06 +03:00
u16 llid ;
u16 plid ;
u8 plink_state ;
2008-12-12 00:04:19 +03:00
s8 signal ;
struct rate_info txrate ;
2009-02-17 14:24:57 +03:00
u32 rx_packets ;
u32 tx_packets ;
2007-12-19 04:03:36 +03:00
} ;
2008-01-31 21:48:22 +03:00
/**
* enum monitor_flags - monitor flags
*
* Monitor interface configuration flags . Note that these must be the bits
* according to the nl80211 flags .
*
* @ MONITOR_FLAG_FCSFAIL : pass frames with bad FCS
* @ MONITOR_FLAG_PLCPFAIL : pass frames with bad PLCP
* @ MONITOR_FLAG_CONTROL : pass control frames
* @ MONITOR_FLAG_OTHER_BSS : disable BSSID filtering
* @ MONITOR_FLAG_COOK_FRAMES : report frames after processing
*/
enum monitor_flags {
MONITOR_FLAG_FCSFAIL = 1 < < NL80211_MNTR_FLAG_FCSFAIL ,
MONITOR_FLAG_PLCPFAIL = 1 < < NL80211_MNTR_FLAG_PLCPFAIL ,
MONITOR_FLAG_CONTROL = 1 < < NL80211_MNTR_FLAG_CONTROL ,
MONITOR_FLAG_OTHER_BSS = 1 < < NL80211_MNTR_FLAG_OTHER_BSS ,
MONITOR_FLAG_COOK_FRAMES = 1 < < NL80211_MNTR_FLAG_COOK_FRAMES ,
} ;
2008-02-23 17:17:06 +03:00
/**
* enum mpath_info_flags - mesh path information flags
*
* Used by the driver to indicate which info in & struct mpath_info it has filled
* in during get_station ( ) or dump_station ( ) .
*
* MPATH_INFO_FRAME_QLEN : @ frame_qlen filled
* MPATH_INFO_DSN : @ dsn filled
* MPATH_INFO_METRIC : @ metric filled
* MPATH_INFO_EXPTIME : @ exptime filled
* MPATH_INFO_DISCOVERY_TIMEOUT : @ discovery_timeout filled
* MPATH_INFO_DISCOVERY_RETRIES : @ discovery_retries filled
* MPATH_INFO_FLAGS : @ flags filled
*/
enum mpath_info_flags {
MPATH_INFO_FRAME_QLEN = BIT ( 0 ) ,
MPATH_INFO_DSN = BIT ( 1 ) ,
MPATH_INFO_METRIC = BIT ( 2 ) ,
MPATH_INFO_EXPTIME = BIT ( 3 ) ,
MPATH_INFO_DISCOVERY_TIMEOUT = BIT ( 4 ) ,
MPATH_INFO_DISCOVERY_RETRIES = BIT ( 5 ) ,
MPATH_INFO_FLAGS = BIT ( 6 ) ,
} ;
/**
* struct mpath_info - mesh path information
*
* Mesh path information filled by driver for get_mpath ( ) and dump_mpath ( ) .
*
* @ filled : bitfield of flags from & enum mpath_info_flags
* @ frame_qlen : number of queued frames for this destination
* @ dsn : destination sequence number
* @ metric : metric ( cost ) of this mesh path
* @ exptime : expiration time for the mesh path from now , in msecs
* @ flags : mesh path flags
* @ discovery_timeout : total mesh path discovery timeout , in msecs
* @ discovery_retries : mesh path discovery retries
*/
struct mpath_info {
u32 filled ;
u32 frame_qlen ;
u32 dsn ;
u32 metric ;
u32 exptime ;
u32 discovery_timeout ;
u8 discovery_retries ;
u8 flags ;
} ;
2008-08-07 21:07:01 +04:00
/**
* struct bss_parameters - BSS parameters
*
* Used to change BSS parameters ( mainly for AP mode ) .
*
* @ use_cts_prot : Whether to use CTS protection
* ( 0 = no , 1 = yes , - 1 = do not change )
* @ use_short_preamble : Whether the use of short preambles is allowed
* ( 0 = no , 1 = yes , - 1 = do not change )
* @ use_short_slot_time : Whether the use of short slot time is allowed
* ( 0 = no , 1 = yes , - 1 = do not change )
2008-10-30 17:59:22 +03:00
* @ basic_rates : basic rates in IEEE 802.11 format
* ( or NULL for no change )
* @ basic_rates_len : number of basic rates
2008-08-07 21:07:01 +04:00
*/
struct bss_parameters {
int use_cts_prot ;
int use_short_preamble ;
int use_short_slot_time ;
2008-10-30 17:59:22 +03:00
u8 * basic_rates ;
u8 basic_rates_len ;
2008-08-07 21:07:01 +04:00
} ;
2008-02-23 17:17:06 +03:00
2008-09-10 10:19:48 +04:00
/**
* enum reg_set_by - Indicates who is trying to set the regulatory domain
* @ REGDOM_SET_BY_INIT : regulatory domain was set by initialization . We will be
* using a static world regulatory domain by default .
* @ REGDOM_SET_BY_CORE : Core queried CRDA for a dynamic world regulatory domain .
* @ REGDOM_SET_BY_USER : User asked the wireless core to set the
* regulatory domain .
* @ REGDOM_SET_BY_DRIVER : a wireless drivers has hinted to the wireless core
* it thinks its knows the regulatory domain we should be in .
* @ REGDOM_SET_BY_COUNTRY_IE : the wireless core has received an 802.11 country
* information element with regulatory information it thinks we
* should consider .
*/
enum reg_set_by {
REGDOM_SET_BY_INIT ,
REGDOM_SET_BY_CORE ,
REGDOM_SET_BY_USER ,
REGDOM_SET_BY_DRIVER ,
REGDOM_SET_BY_COUNTRY_IE ,
} ;
2009-01-23 02:05:51 +03:00
/**
* enum environment_cap - Environment parsed from country IE
* @ ENVIRON_ANY : indicates country IE applies to both indoor and
* outdoor operation .
* @ ENVIRON_INDOOR : indicates country IE applies only to indoor operation
* @ ENVIRON_OUTDOOR : indicates country IE applies only to outdoor operation
*/
enum environment_cap {
ENVIRON_ANY ,
ENVIRON_INDOOR ,
ENVIRON_OUTDOOR ,
} ;
/**
* struct regulatory_request - receipt of last regulatory request
*
* @ wiphy : this is set if this request ' s initiator is
* % REGDOM_SET_BY_COUNTRY_IE or % REGDOM_SET_BY_DRIVER . This
* can be used by the wireless core to deal with conflicts
* and potentially inform users of which devices specifically
* cased the conflicts .
* @ initiator : indicates who sent this request , could be any of
* of those set in reg_set_by , % REGDOM_SET_BY_ *
* @ alpha2 : the ISO / IEC 3166 alpha2 country code of the requested
* regulatory domain . We have a few special codes :
* 00 - World regulatory domain
* 99 - built by driver but a specific alpha2 cannot be determined
* 98 - result of an intersection between two regulatory domains
* @ intersect : indicates whether the wireless core should intersect
* the requested regulatory domain with the presently set regulatory
* domain .
* @ country_ie_checksum : checksum of the last processed and accepted
* country IE
* @ country_ie_env : lets us know if the AP is telling us we are outdoor ,
* indoor , or if it doesn ' t matter
*/
struct regulatory_request {
struct wiphy * wiphy ;
enum reg_set_by initiator ;
char alpha2 [ 2 ] ;
bool intersect ;
u32 country_ie_checksum ;
enum environment_cap country_ie_env ;
} ;
2008-09-10 10:19:48 +04:00
struct ieee80211_freq_range {
u32 start_freq_khz ;
u32 end_freq_khz ;
u32 max_bandwidth_khz ;
} ;
struct ieee80211_power_rule {
u32 max_antenna_gain ;
u32 max_eirp ;
} ;
struct ieee80211_reg_rule {
struct ieee80211_freq_range freq_range ;
struct ieee80211_power_rule power_rule ;
u32 flags ;
} ;
struct ieee80211_regdomain {
u32 n_reg_rules ;
char alpha2 [ 2 ] ;
struct ieee80211_reg_rule reg_rules [ ] ;
} ;
2008-10-30 23:33:55 +03:00
# define MHZ_TO_KHZ(freq) ((freq) * 1000)
# define KHZ_TO_MHZ(freq) ((freq) / 1000)
# define DBI_TO_MBI(gain) ((gain) * 100)
# define MBI_TO_DBI(gain) ((gain) / 100)
# define DBM_TO_MBM(gain) ((gain) * 100)
# define MBM_TO_DBM(gain) ((gain) / 100)
2008-09-10 10:19:48 +04:00
# define REG_RULE(start, end, bw, gain, eirp, reg_flags) { \
2008-10-30 23:33:55 +03:00
. freq_range . start_freq_khz = MHZ_TO_KHZ ( start ) , \
. freq_range . end_freq_khz = MHZ_TO_KHZ ( end ) , \
. freq_range . max_bandwidth_khz = MHZ_TO_KHZ ( bw ) , \
. power_rule . max_antenna_gain = DBI_TO_MBI ( gain ) , \
. power_rule . max_eirp = DBM_TO_MBM ( eirp ) , \
2008-09-10 10:19:48 +04:00
. flags = reg_flags , \
}
2008-10-21 23:03:48 +04:00
struct mesh_config {
/* Timeouts in ms */
/* Mesh plink management parameters */
u16 dot11MeshRetryTimeout ;
u16 dot11MeshConfirmTimeout ;
u16 dot11MeshHoldingTimeout ;
u16 dot11MeshMaxPeerLinks ;
u8 dot11MeshMaxRetries ;
u8 dot11MeshTTL ;
bool auto_open_plinks ;
/* HWMP parameters */
u8 dot11MeshHWMPmaxPREQretries ;
u32 path_refresh_time ;
u16 min_discovery_timeout ;
u32 dot11MeshHWMPactivePathTimeout ;
u16 dot11MeshHWMPpreqMinInterval ;
u16 dot11MeshHWMPnetDiameterTraversalTime ;
} ;
2008-10-30 17:59:24 +03:00
/**
* struct ieee80211_txq_params - TX queue parameters
* @ queue : TX queue identifier ( NL80211_TXQ_Q_ * )
* @ txop : Maximum burst time in units of 32 usecs , 0 meaning disabled
* @ cwmin : Minimum contention window [ a value of the form 2 ^ n - 1 in the range
* 1. .32767 ]
* @ cwmax : Maximum contention window [ a value of the form 2 ^ n - 1 in the range
* 1. .32767 ]
* @ aifs : Arbitration interframe space [ 0. .255 ]
*/
struct ieee80211_txq_params {
enum nl80211_txq_q queue ;
u16 txop ;
u16 cwmin ;
u16 cwmax ;
u8 aifs ;
} ;
2009-01-13 17:03:29 +03:00
/**
* struct mgmt_extra_ie_params - Extra management frame IE parameters
*
* Used to add extra IE ( s ) into management frames . If the driver cannot add the
* requested data into all management frames of the specified subtype that are
* generated in kernel or firmware / hardware , it must reject the configuration
* call . The IE data buffer is added to the end of the specified management
* frame body after all other IEs . This addition is not applied to frames that
* are injected through a monitor interface .
*
* @ subtype : Management frame subtype
* @ ies : IE data buffer or % NULL to remove previous data
* @ ies_len : Length of @ ies in octets
*/
struct mgmt_extra_ie_params {
u8 subtype ;
u8 * ies ;
int ies_len ;
} ;
2007-04-23 23:20:05 +04:00
/* from net/wireless.h */
struct wiphy ;
2008-11-26 17:15:24 +03:00
/* from net/ieee80211.h */
struct ieee80211_channel ;
2009-02-10 23:25:55 +03:00
/**
* struct cfg80211_ssid - SSID description
* @ ssid : the SSID
* @ ssid_len : length of the ssid
*/
struct cfg80211_ssid {
u8 ssid [ IEEE80211_MAX_SSID_LEN ] ;
u8 ssid_len ;
} ;
/**
* struct cfg80211_scan_request - scan request description
*
* @ ssids : SSIDs to scan for ( active scan only )
* @ n_ssids : number of SSIDs
* @ channels : channels to scan on .
* @ n_channels : number of channels for each band
2009-02-16 20:39:13 +03:00
* @ ie : optional information element ( s ) to add into Probe Request or % NULL
* @ ie_len : length of ie in octets
2009-02-10 23:25:55 +03:00
* @ wiphy : the wiphy this was for
* @ ifidx : the interface index
*/
struct cfg80211_scan_request {
struct cfg80211_ssid * ssids ;
int n_ssids ;
struct ieee80211_channel * * channels ;
u32 n_channels ;
2009-02-16 20:39:13 +03:00
u8 * ie ;
size_t ie_len ;
2009-02-10 23:25:55 +03:00
/* internal */
struct wiphy * wiphy ;
int ifidx ;
} ;
/**
* enum cfg80211_signal_type - signal type
*
* @ CFG80211_SIGNAL_TYPE_NONE : no signal strength information available
* @ CFG80211_SIGNAL_TYPE_MBM : signal strength in mBm ( 100 * dBm )
* @ CFG80211_SIGNAL_TYPE_UNSPEC : signal strength , increasing from 0 through 100
*/
enum cfg80211_signal_type {
CFG80211_SIGNAL_TYPE_NONE ,
CFG80211_SIGNAL_TYPE_MBM ,
CFG80211_SIGNAL_TYPE_UNSPEC ,
} ;
/**
* struct cfg80211_bss - BSS description
*
* This structure describes a BSS ( which may also be a mesh network )
* for use in scan results and similar .
*
* @ bssid : BSSID of the BSS
* @ tsf : timestamp of last received update
* @ beacon_interval : the beacon interval as from the frame
* @ capability : the capability field in host byte order
* @ information_elements : the information elements ( Note that there
* is no guarantee that these are well - formed ! )
* @ len_information_elements : total length of the information elements
2009-02-18 20:45:06 +03:00
* @ signal : signal strength value ( type depends on the wiphy ' s signal_type )
2009-02-10 23:25:57 +03:00
* @ free_priv : function pointer to free private data
2009-02-10 23:25:55 +03:00
* @ priv : private area for driver use , has at least wiphy - > bss_priv_size bytes
*/
struct cfg80211_bss {
struct ieee80211_channel * channel ;
u8 bssid [ ETH_ALEN ] ;
u64 tsf ;
u16 beacon_interval ;
u16 capability ;
u8 * information_elements ;
size_t len_information_elements ;
s32 signal ;
2009-02-10 23:25:57 +03:00
void ( * free_priv ) ( struct cfg80211_bss * bss ) ;
2009-02-10 23:25:55 +03:00
u8 priv [ 0 ] __attribute__ ( ( __aligned__ ( sizeof ( void * ) ) ) ) ;
} ;
2007-04-23 23:20:05 +04:00
/**
* struct cfg80211_ops - backend description for wireless configuration
*
* This struct is registered by fullmac card drivers and / or wireless stacks
* in order to handle configuration requests on their interfaces .
*
* All callbacks except where otherwise noted should return 0
* on success or a negative error code .
*
2007-04-25 01:07:27 +04:00
* All operations are currently invoked under rtnl for consistency with the
* wireless extensions but this is subject to reevaluation as soon as this
* code is used more widely and we have a first user without wext .
*
2009-01-19 19:20:52 +03:00
* @ suspend : wiphy device needs to be suspended
* @ resume : wiphy device needs to be resumed
*
2008-09-16 16:55:09 +04:00
* @ add_virtual_intf : create a new virtual interface with the given name ,
* must set the struct wireless_dev ' s iftype .
2007-04-23 23:20:05 +04:00
*
* @ del_virtual_intf : remove the virtual interface determined by ifindex .
2007-09-20 21:09:35 +04:00
*
2008-09-16 16:55:09 +04:00
* @ change_virtual_intf : change type / configuration of virtual interface ,
* keep the struct wireless_dev ' s iftype updated .
2007-09-20 21:09:35 +04:00
*
2007-12-19 04:03:29 +03:00
* @ add_key : add a key with the given parameters . @ mac_addr will be % NULL
* when adding a group key .
*
* @ get_key : get information about the key with the given parameters .
* @ mac_addr will be % NULL when requesting information for a group
* key . All pointers given to the @ callback function need not be valid
* after it returns .
*
* @ del_key : remove a key given the @ mac_addr ( % NULL for a group key )
* and @ key_index
*
* @ set_default_key : set the default key on an interface
2007-12-19 04:03:32 +03:00
*
2009-01-08 14:32:02 +03:00
* @ set_default_mgmt_key : set the default management frame key on an interface
*
2007-12-19 04:03:32 +03:00
* @ add_beacon : Add a beacon with given parameters , @ head , @ interval
* and @ dtim_period will be valid , @ tail is optional .
* @ set_beacon : Change the beacon parameters for an access point mode
* interface . This should reject the call when no beacon has been
* configured .
* @ del_beacon : Remove beacon configuration and stop sending the beacon .
2007-12-19 04:03:34 +03:00
*
* @ add_station : Add a new station .
*
* @ del_station : Remove a station ; @ mac may be NULL to remove all stations .
*
* @ change_station : Modify a given station .
2008-02-23 17:17:06 +03:00
*
2008-10-21 23:03:48 +04:00
* @ get_mesh_params : Put the current mesh parameters into * params
*
* @ set_mesh_params : Set mesh parameters .
* The mask is a bitfield which tells us which parameters to
* set , and which to leave alone .
*
2008-02-23 17:17:06 +03:00
* @ set_mesh_cfg : set mesh parameters ( by now , just mesh id )
2008-08-07 21:07:01 +04:00
*
* @ change_bss : Modify parameters for a given BSS .
2008-10-30 17:59:24 +03:00
*
* @ set_txq_params : Set TX queue parameters
2008-11-26 17:15:24 +03:00
*
* @ set_channel : Set channel
2009-01-13 17:03:29 +03:00
*
* @ set_mgmt_extra_ie : Set extra IE data for management frames
2009-02-10 23:25:55 +03:00
*
* @ scan : Request to do a scan . If returning zero , the scan request is given
* the driver , and will be valid until passed to cfg80211_scan_done ( ) .
* For scan results , call cfg80211_inform_bss ( ) ; you can call this outside
* the scan / scan_done bracket too .
2007-04-23 23:20:05 +04:00
*/
struct cfg80211_ops {
2009-01-19 19:20:52 +03:00
int ( * suspend ) ( struct wiphy * wiphy ) ;
int ( * resume ) ( struct wiphy * wiphy ) ;
2007-04-23 23:20:05 +04:00
int ( * add_virtual_intf ) ( struct wiphy * wiphy , char * name ,
2008-02-23 17:17:06 +03:00
enum nl80211_iftype type , u32 * flags ,
struct vif_params * params ) ;
2007-04-23 23:20:05 +04:00
int ( * del_virtual_intf ) ( struct wiphy * wiphy , int ifindex ) ;
2007-09-20 21:09:35 +04:00
int ( * change_virtual_intf ) ( struct wiphy * wiphy , int ifindex ,
2008-02-23 17:17:06 +03:00
enum nl80211_iftype type , u32 * flags ,
struct vif_params * params ) ;
2007-12-19 04:03:29 +03:00
int ( * add_key ) ( struct wiphy * wiphy , struct net_device * netdev ,
u8 key_index , u8 * mac_addr ,
struct key_params * params ) ;
int ( * get_key ) ( struct wiphy * wiphy , struct net_device * netdev ,
u8 key_index , u8 * mac_addr , void * cookie ,
void ( * callback ) ( void * cookie , struct key_params * ) ) ;
int ( * del_key ) ( struct wiphy * wiphy , struct net_device * netdev ,
u8 key_index , u8 * mac_addr ) ;
int ( * set_default_key ) ( struct wiphy * wiphy ,
struct net_device * netdev ,
u8 key_index ) ;
2009-01-08 14:32:02 +03:00
int ( * set_default_mgmt_key ) ( struct wiphy * wiphy ,
struct net_device * netdev ,
u8 key_index ) ;
2007-12-19 04:03:32 +03:00
int ( * add_beacon ) ( struct wiphy * wiphy , struct net_device * dev ,
struct beacon_parameters * info ) ;
int ( * set_beacon ) ( struct wiphy * wiphy , struct net_device * dev ,
struct beacon_parameters * info ) ;
int ( * del_beacon ) ( struct wiphy * wiphy , struct net_device * dev ) ;
2007-12-19 04:03:34 +03:00
int ( * add_station ) ( struct wiphy * wiphy , struct net_device * dev ,
u8 * mac , struct station_parameters * params ) ;
int ( * del_station ) ( struct wiphy * wiphy , struct net_device * dev ,
u8 * mac ) ;
int ( * change_station ) ( struct wiphy * wiphy , struct net_device * dev ,
u8 * mac , struct station_parameters * params ) ;
2007-12-19 04:03:36 +03:00
int ( * get_station ) ( struct wiphy * wiphy , struct net_device * dev ,
2008-02-23 17:17:06 +03:00
u8 * mac , struct station_info * sinfo ) ;
int ( * dump_station ) ( struct wiphy * wiphy , struct net_device * dev ,
int idx , u8 * mac , struct station_info * sinfo ) ;
int ( * add_mpath ) ( struct wiphy * wiphy , struct net_device * dev ,
u8 * dst , u8 * next_hop ) ;
int ( * del_mpath ) ( struct wiphy * wiphy , struct net_device * dev ,
u8 * dst ) ;
int ( * change_mpath ) ( struct wiphy * wiphy , struct net_device * dev ,
u8 * dst , u8 * next_hop ) ;
int ( * get_mpath ) ( struct wiphy * wiphy , struct net_device * dev ,
u8 * dst , u8 * next_hop ,
struct mpath_info * pinfo ) ;
int ( * dump_mpath ) ( struct wiphy * wiphy , struct net_device * dev ,
int idx , u8 * dst , u8 * next_hop ,
struct mpath_info * pinfo ) ;
2008-10-21 23:03:48 +04:00
int ( * get_mesh_params ) ( struct wiphy * wiphy ,
struct net_device * dev ,
struct mesh_config * conf ) ;
int ( * set_mesh_params ) ( struct wiphy * wiphy ,
struct net_device * dev ,
const struct mesh_config * nconf , u32 mask ) ;
2008-08-07 21:07:01 +04:00
int ( * change_bss ) ( struct wiphy * wiphy , struct net_device * dev ,
struct bss_parameters * params ) ;
2008-10-30 17:59:24 +03:00
int ( * set_txq_params ) ( struct wiphy * wiphy ,
struct ieee80211_txq_params * params ) ;
2008-11-26 17:15:24 +03:00
int ( * set_channel ) ( struct wiphy * wiphy ,
struct ieee80211_channel * chan ,
2008-12-12 09:27:43 +03:00
enum nl80211_channel_type channel_type ) ;
2009-01-13 17:03:29 +03:00
int ( * set_mgmt_extra_ie ) ( struct wiphy * wiphy ,
struct net_device * dev ,
struct mgmt_extra_ie_params * params ) ;
2009-02-10 23:25:55 +03:00
int ( * scan ) ( struct wiphy * wiphy , struct net_device * dev ,
struct cfg80211_scan_request * request ) ;
2007-04-23 23:20:05 +04:00
} ;
2008-11-27 00:36:31 +03:00
/* temporary wext handlers */
int cfg80211_wext_giwname ( struct net_device * dev ,
struct iw_request_info * info ,
char * name , char * extra ) ;
2008-11-27 01:31:40 +03:00
int cfg80211_wext_siwmode ( struct net_device * dev , struct iw_request_info * info ,
u32 * mode , char * extra ) ;
int cfg80211_wext_giwmode ( struct net_device * dev , struct iw_request_info * info ,
u32 * mode , char * extra ) ;
2009-02-10 23:25:55 +03:00
int cfg80211_wext_siwscan ( struct net_device * dev ,
struct iw_request_info * info ,
union iwreq_data * wrqu , char * extra ) ;
int cfg80211_wext_giwscan ( struct net_device * dev ,
struct iw_request_info * info ,
struct iw_point * data , char * extra ) ;
/**
* cfg80211_scan_done - notify that scan finished
*
* @ request : the corresponding scan request
* @ aborted : set to true if the scan was aborted for any reason ,
* userspace will be notified of that
*/
void cfg80211_scan_done ( struct cfg80211_scan_request * request , bool aborted ) ;
/**
* cfg80211_inform_bss - inform cfg80211 of a new BSS
*
* @ wiphy : the wiphy reporting the BSS
* @ bss : the found BSS
2009-02-18 20:45:06 +03:00
* @ signal : the signal strength , type depends on the wiphy ' s signal_type
2009-02-10 23:25:55 +03:00
* @ gfp : context flags
*
* This informs cfg80211 that BSS information was found and
* the BSS should be updated / added .
*/
struct cfg80211_bss *
cfg80211_inform_bss_frame ( struct wiphy * wiphy ,
struct ieee80211_channel * channel ,
struct ieee80211_mgmt * mgmt , size_t len ,
2009-02-18 20:45:06 +03:00
s32 signal , gfp_t gfp ) ;
2009-02-10 23:25:55 +03:00
struct cfg80211_bss * cfg80211_get_bss ( struct wiphy * wiphy ,
struct ieee80211_channel * channel ,
const u8 * bssid ,
2009-02-10 23:25:59 +03:00
const u8 * ssid , size_t ssid_len ,
u16 capa_mask , u16 capa_val ) ;
static inline struct cfg80211_bss *
cfg80211_get_ibss ( struct wiphy * wiphy ,
struct ieee80211_channel * channel ,
const u8 * ssid , size_t ssid_len )
{
return cfg80211_get_bss ( wiphy , channel , NULL , ssid , ssid_len ,
WLAN_CAPABILITY_IBSS , WLAN_CAPABILITY_IBSS ) ;
}
2009-02-10 23:25:55 +03:00
struct cfg80211_bss * cfg80211_get_mesh ( struct wiphy * wiphy ,
struct ieee80211_channel * channel ,
const u8 * meshid , size_t meshidlen ,
const u8 * meshcfg ) ;
void cfg80211_put_bss ( struct cfg80211_bss * bss ) ;
2009-02-10 23:25:58 +03:00
/**
* cfg80211_unlink_bss - unlink BSS from internal data structures
* @ wiphy : the wiphy
* @ bss : the bss to remove
*
* This function removes the given BSS from the internal data structures
* thereby making it no longer show up in scan results etc . Use this
* function when you detect a BSS is gone . Normally BSSes will also time
* out , so it is not necessary to use this function at all .
*/
void cfg80211_unlink_bss ( struct wiphy * wiphy , struct cfg80211_bss * bss ) ;
2008-11-27 00:36:31 +03:00
2007-04-23 23:20:05 +04:00
# endif /* __NET_CFG80211_H */