cfg80211 subsystem¶
cfg80211 is the configuration API for 802.11 devices in Linux. It bridges userspace and drivers, and offers some utility functionality associated with 802.11. cfg80211 must, directly or indirectly via mac80211, be used by all modern wireless drivers in Linux, so that they offer a consistent API through nl80211. For backward compatibility, cfg80211 also offers wireless extensions to userspace, but hides them from drivers completely.
Additionally, cfg80211 contains code to help enforce regulatory spectrum use restrictions.
Device registration¶
In order for a driver to use cfg80211, it must register the hardware device with cfg80211. This happens through a number of hardware capability structs described below.
The fundamental structure for each device is the ‘wiphy’, of which each
instance describes a physical wireless device connected to the system. Each
such wiphy can have zero, one, or many virtual interfaces associated with
it, which need to be identified as such by pointing the network interface’s
ieee80211_ptr pointer to a struct wireless_dev which further describes
the wireless part of the interface, normally this struct is embedded in the
network interface’s private data area. Drivers can optionally allow creating
or destroying virtual interfaces on the fly, but without at least one or the
ability to create some the wireless device isn’t useful.
Each wiphy structure contains device capability information, and also has a pointer to the various operations the driver offers. The definitions and structures here describe these capabilities in detail.
-
enum ieee80211_channel_flags¶
channel flags
Constants
IEEE80211_CHAN_DISABLEDThis channel is disabled.
IEEE80211_CHAN_NO_IRdo not initiate radiation, this includes sending probe requests or beaconing.
IEEE80211_CHAN_RADARRadar detection is required on this channel.
IEEE80211_CHAN_NO_HT40PLUSextension channel above this channel is not permitted.
IEEE80211_CHAN_NO_HT40MINUSextension channel below this channel is not permitted.
IEEE80211_CHAN_NO_OFDMOFDM is not allowed on this channel.
IEEE80211_CHAN_NO_80MHZIf the driver supports 80 MHz on the band, this flag indicates that an 80 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions.
IEEE80211_CHAN_NO_160MHZIf the driver supports 160 MHz on the band, this flag indicates that an 160 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions.
IEEE80211_CHAN_INDOOR_ONLYsee
NL80211_FREQUENCY_ATTR_INDOOR_ONLYIEEE80211_CHAN_IR_CONCURRENTsee
NL80211_FREQUENCY_ATTR_IR_CONCURRENTIEEE80211_CHAN_NO_20MHZ20 MHz bandwidth is not permitted on this channel.
IEEE80211_CHAN_NO_10MHZ10 MHz bandwidth is not permitted on this channel.
IEEE80211_CHAN_NO_HEHE operation is not permitted on this channel.
IEEE80211_CHAN_1MHZ1 MHz bandwidth is permitted on this channel.
IEEE80211_CHAN_2MHZ2 MHz bandwidth is permitted on this channel.
IEEE80211_CHAN_4MHZ4 MHz bandwidth is permitted on this channel.
IEEE80211_CHAN_8MHZ8 MHz bandwidth is permitted on this channel.
IEEE80211_CHAN_16MHZ16 MHz bandwidth is permitted on this channel.
IEEE80211_CHAN_NO_320MHZIf the driver supports 320 MHz on the band, this flag indicates that a 320 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions.
IEEE80211_CHAN_NO_EHTEHT operation is not permitted on this channel.
Description
Channel flags set by the regulatory control code.
-
struct ieee80211_channel¶
channel definition
Definition:
struct ieee80211_channel {
enum nl80211_band band;
u32 center_freq;
u16 freq_offset;
u16 hw_value;
u32 flags;
int max_antenna_gain;
int max_power;
int max_reg_power;
bool beacon_found;
u32 orig_flags;
int orig_mag, orig_mpwr;
enum nl80211_dfs_state dfs_state;
unsigned long dfs_state_entered;
unsigned int dfs_cac_ms;
};
Members
bandband this channel belongs to.
center_freqcenter frequency in MHz
freq_offsetoffset from center_freq, in KHz
hw_valuehardware-specific value for the channel
flagschannel flags from
enum ieee80211_channel_flags.max_antenna_gainmaximum antenna gain in dBi
max_powermaximum transmission power (in dBm)
max_reg_powermaximum regulatory transmission power (in dBm)
beacon_foundhelper to regulatory code to indicate when a beacon has been found on this channel. Use regulatory_hint_found_beacon() to enable this, this is useful only on 5 GHz band.
orig_flagschannel flags at registration time, used by regulatory code to support devices with additional restrictions
orig_maginternal use
orig_mpwrinternal use
dfs_statecurrent state of this channel. Only relevant if radar is required on this channel.
dfs_state_enteredtimestamp (jiffies) when the dfs state was entered.
dfs_cac_msDFS CAC time in milliseconds, this is valid for DFS channels.
Description
This structure describes a single channel for use with cfg80211.
-
enum ieee80211_rate_flags¶
rate flags
Constants
IEEE80211_RATE_SHORT_PREAMBLEHardware can send with short preamble on this bitrate; only relevant in 2.4GHz band and with CCK rates.
IEEE80211_RATE_MANDATORY_AThis bitrate is a mandatory rate when used with 802.11a (on the 5 GHz band); filled by the core code when registering the wiphy.
IEEE80211_RATE_MANDATORY_BThis bitrate is a mandatory rate when used with 802.11b (on the 2.4 GHz band); filled by the core code when registering the wiphy.
IEEE80211_RATE_MANDATORY_GThis bitrate is a mandatory rate when used with 802.11g (on the 2.4 GHz band); filled by the core code when registering the wiphy.
IEEE80211_RATE_ERP_GThis is an ERP rate in 802.11g mode.
IEEE80211_RATE_SUPPORTS_5MHZRate can be used in 5 MHz mode
IEEE80211_RATE_SUPPORTS_10MHZRate can be used in 10 MHz mode
Description
Hardware/specification flags for rates. These are structured in a way that allows using the same bitrate structure for different bands/PHY modes.
-
struct ieee80211_rate¶
bitrate definition
Definition:
struct ieee80211_rate {
u32 flags;
u16 bitrate;
u16 hw_value, hw_value_short;
};
Members
flagsrate-specific flags
bitratebitrate in units of 100 Kbps
hw_valuedriver/hardware value for this rate
hw_value_shortdriver/hardware value for this rate when short preamble is used
Description
This structure describes a bitrate that an 802.11 PHY can operate with. The two values hw_value and hw_value_short are only for driver use when pointers to this structure are passed around.
-
struct ieee80211_sta_ht_cap¶
STA’s HT capabilities
Definition:
struct ieee80211_sta_ht_cap {
u16 cap;
bool ht_supported;
u8 ampdu_factor;
u8 ampdu_density;
struct ieee80211_mcs_info mcs;
};
Members
capHT capabilities map as described in 802.11n spec
ht_supportedis HT supported by the STA
ampdu_factorMaximum A-MPDU length factor
ampdu_densityMinimum A-MPDU spacing
mcsSupported MCS rates
Description
This structure describes most essential parameters needed to describe 802.11n HT capabilities for an STA.
-
struct ieee80211_supported_band¶
frequency band definition
Definition:
struct ieee80211_supported_band {
struct ieee80211_channel *channels;
struct ieee80211_rate *bitrates;
enum nl80211_band band;
int n_channels;
int n_bitrates;
struct ieee80211_sta_ht_cap ht_cap;
struct ieee80211_sta_vht_cap vht_cap;
struct ieee80211_sta_s1g_cap s1g_cap;
struct ieee80211_edmg edmg_cap;
u16 n_iftype_data;
const struct ieee80211_sband_iftype_data *iftype_data;
};
Members
channelsArray of channels the hardware can operate with in this band.
bitratesArray of bitrates the hardware can operate with in this band. Must be sorted to give a valid “supported rates” IE, i.e. CCK rates first, then OFDM.
bandthe band this structure represents
n_channelsNumber of channels in channels
n_bitratesNumber of bitrates in bitrates
ht_capHT capabilities in this band
vht_capVHT capabilities in this band
s1g_capS1G capabilities in this band (S1B band only, of course)
edmg_capEDMG capabilities in this band
n_iftype_datanumber of iftype data entries
iftype_datainterface type data entries. Note that the bits in types_mask inside this structure cannot overlap (i.e. only one occurrence of each type is allowed across all instances of iftype_data).
Description
This structure describes a frequency band a wiphy is able to operate in.
Parameters
struct wiphy *wiphythe wireless device to get extra limits for
Description
Some devices may have extra limitations specified in DT. This may be useful for chipsets that normally support more bands but are limited due to board design (e.g. by antennas or external power amplifier).
This function reads info from DT and uses it to modify channels (disable unavailable ones). It’s usually a bad idea to use it in drivers with shared channel data as DT limitations are device specific. You should make sure to call it only if channels in wiphy are copied and can be modified without affecting other devices.
As this function access device node it has to be called after set_wiphy_dev.
It also modifies channels so they have to be set first.
If using this helper, call it before wiphy_register().
-
enum cfg80211_signal_type¶
signal type
Constants
CFG80211_SIGNAL_TYPE_NONEno signal strength information available
CFG80211_SIGNAL_TYPE_MBMsignal strength in mBm (100*dBm)
CFG80211_SIGNAL_TYPE_UNSPECsignal strength, increasing from 0 through 100
-
enum wiphy_params_flags¶
set_wiphy_params bitfield values
Constants
WIPHY_PARAM_RETRY_SHORTwiphy->retry_short has changed
WIPHY_PARAM_RETRY_LONGwiphy->retry_long has changed
WIPHY_PARAM_FRAG_THRESHOLDwiphy->frag_threshold has changed
WIPHY_PARAM_RTS_THRESHOLDwiphy->rts_threshold has changed
WIPHY_PARAM_COVERAGE_CLASScoverage class changed
WIPHY_PARAM_DYN_ACKdynack has been enabled
WIPHY_PARAM_TXQ_LIMITTXQ packet limit has been changed
WIPHY_PARAM_TXQ_MEMORY_LIMITTXQ memory limit has been changed
WIPHY_PARAM_TXQ_QUANTUMTXQ scheduler quantum
-
enum wiphy_flags¶
wiphy capability flags
Constants
WIPHY_FLAG_SUPPORTS_EXT_KEK_KCKThe device supports bigger kek and kck keys
WIPHY_FLAG_SUPPORTS_MLOThis is a temporary flag gating the MLO APIs, in order to not have them reachable in normal drivers, until we have complete feature/interface combinations/etc. advertisement. No driver should set this flag for now.
WIPHY_FLAG_SPLIT_SCAN_6GHZif set to true, the scan request will be split into two, first for legacy bands and second for UHB.
WIPHY_FLAG_NETNS_OKif not set, do not allow changing the netns of this wiphy at all
WIPHY_FLAG_PS_ON_BY_DEFAULTif set to true, powersave will be enabled by default – this flag will be set depending on the kernel’s default on
wiphy_new(), but can be changed by the driver if it has a good reason to override the defaultWIPHY_FLAG_4ADDR_APsupports 4addr mode even on AP (with a single station on a VLAN interface). This flag also serves an extra purpose of supporting 4ADDR AP mode on devices which do not support AP/VLAN iftype.
WIPHY_FLAG_4ADDR_STATIONsupports 4addr mode even as a station
WIPHY_FLAG_CONTROL_PORT_PROTOCOLThis device supports setting the control port protocol ethertype. The device also honours the control_port_no_encrypt flag.
WIPHY_FLAG_IBSS_RSNThe device supports IBSS RSN.
WIPHY_FLAG_MESH_AUTHThe device supports mesh authentication by routing auth frames to userspace. See NL80211_MESH_SETUP_USERSPACE_AUTH.
WIPHY_FLAG_SUPPORTS_EXT_KCK_32The device supports 32-byte KCK keys.
WIPHY_FLAG_SUPPORTS_FW_ROAMThe device supports roaming feature in the firmware.
WIPHY_FLAG_AP_UAPSDThe device supports uapsd on AP.
WIPHY_FLAG_SUPPORTS_TDLSThe device supports TDLS (802.11z) operation.
WIPHY_FLAG_TDLS_EXTERNAL_SETUPThe device does not handle TDLS (802.11z) link setup/discovery operations internally. Setup, discovery and teardown packets should be sent through the NL80211_CMD_TDLS_MGMT command. When this flag is not set, NL80211_CMD_TDLS_OPER should be used for asking the driver/firmware to perform a TDLS operation.
WIPHY_FLAG_HAVE_AP_SMEdevice integrates AP SME
WIPHY_FLAG_REPORTS_OBSSthe device will report beacons from other BSSes when there are virtual interfaces in AP mode by calling cfg80211_report_obss_beacon().
WIPHY_FLAG_AP_PROBE_RESP_OFFLOADWhen operating as an AP, the device responds to probe-requests in hardware.
WIPHY_FLAG_OFFCHAN_TXDevice supports direct off-channel TX.
WIPHY_FLAG_HAS_REMAIN_ON_CHANNELDevice supports remain-on-channel call.
WIPHY_FLAG_SUPPORTS_5_10_MHZDevice supports 5 MHz and 10 MHz channels.
WIPHY_FLAG_HAS_CHANNEL_SWITCHDevice supports channel switch in beaconing mode (AP, IBSS, Mesh, …).
WIPHY_FLAG_NOTIFY_REGDOM_BY_DRIVERThe device could handle reg notify for NL80211_REGDOM_SET_BY_DRIVER.
-
struct ieee80211_iface_limit¶
limit on certain interface types
Definition:
struct ieee80211_iface_limit {
u16 max;
u16 types;
};
Members
maxmaximum number of interfaces of these types
typesinterface types (bits)
-
struct ieee80211_iface_combination¶
possible interface combination
Definition:
struct ieee80211_iface_combination {
const struct ieee80211_iface_limit *limits;
u32 num_different_channels;
u16 max_interfaces;
u8 n_limits;
bool beacon_int_infra_match;
u8 radar_detect_widths;
u8 radar_detect_regions;
u32 beacon_int_min_gcd;
};
Members
limitslimits for the given interface types
num_different_channelscan use up to this many different channels
max_interfacesmaximum number of interfaces in total allowed in this group
n_limitsnumber of limitations
beacon_int_infra_matchIn this combination, the beacon intervals between infrastructure and AP types must match. This is required only in special cases.
radar_detect_widthsbitmap of channel widths supported for radar detection
radar_detect_regionsbitmap of regions supported for radar detection
beacon_int_min_gcdThis interface combination supports different beacon intervals.
- = 0
all beacon intervals for different interface must be same.
- > 0
any beacon interval for the interface part of this combination AND GCD of all beacon intervals from beaconing interfaces of this combination must be greater or equal to this value.
Description
With this structure the driver can describe which interface combinations it supports concurrently.
Allow #STA <= 1, #AP <= 1, matching BI, channels = 1, 2 total:
struct ieee80211_iface_limit limits1[] = { { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, { .max = 1, .types = BIT(NL80211_IFTYPE_AP), }, }; struct ieee80211_iface_combination combination1 = { .limits = limits1, .n_limits = ARRAY_SIZE(limits1), .max_interfaces = 2, .beacon_int_infra_match = true, };
Allow #{AP, P2P-GO} <= 8, channels = 1, 8 total:
struct ieee80211_iface_limit limits2[] = { { .max = 8, .types = BIT(NL80211_IFTYPE_AP) | BIT(NL80211_IFTYPE_P2P_GO), }, }; struct ieee80211_iface_combination combination2 = { .limits = limits2, .n_limits = ARRAY_SIZE(limits2), .max_interfaces = 8, .num_different_channels = 1, };
Allow #STA <= 1, #{P2P-client,P2P-GO} <= 3 on two channels, 4 total.
This allows for an infrastructure connection and three P2P connections.
struct ieee80211_iface_limit limits3[] = { { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) | BIT(NL80211_IFTYPE_P2P_CLIENT), }, }; struct ieee80211_iface_combination combination3 = { .limits = limits3, .n_limits = ARRAY_SIZE(limits3), .max_interfaces = 4, .num_different_channels = 2, };
Examples
-
struct wiphy¶
wireless hardware description
Definition:
struct wiphy {
struct mutex mtx;
u8 perm_addr[ETH_ALEN];
u8 addr_mask[ETH_ALEN];
struct mac_address *addresses;
const struct ieee80211_txrx_stypes *mgmt_stypes;
const struct ieee80211_iface_combination *iface_combinations;
int n_iface_combinations;
u16 software_iftypes;
u16 n_addresses;
u16 interface_modes;
u16 max_acl_mac_addrs;
u32 flags, regulatory_flags, features;
u8 ext_features[DIV_ROUND_UP(NUM_NL80211_EXT_FEATURES, 8)];
u32 ap_sme_capa;
enum cfg80211_signal_type signal_type;
int bss_priv_size;
u8 max_scan_ssids;
u8 max_sched_scan_reqs;
u8 max_sched_scan_ssids;
u8 max_match_sets;
u16 max_scan_ie_len;
u16 max_sched_scan_ie_len;
u32 max_sched_scan_plans;
u32 max_sched_scan_plan_interval;
u32 max_sched_scan_plan_iterations;
int n_cipher_suites;
const u32 *cipher_suites;
int n_akm_suites;
const u32 *akm_suites;
const struct wiphy_iftype_akm_suites *iftype_akm_suites;
unsigned int num_iftype_akm_suites;
u8 retry_short;
u8 retry_long;
u32 frag_threshold;
u32 rts_threshold;
u8 coverage_class;
char fw_version[ETHTOOL_FWVERS_LEN];
u32 hw_version;
#ifdef CONFIG_PM;
const struct wiphy_wowlan_support *wowlan;
struct cfg80211_wowlan *wowlan_config;
#endif;
u16 max_remain_on_channel_duration;
u8 max_num_pmkids;
u32 available_antennas_tx;
u32 available_antennas_rx;
u32 probe_resp_offload;
const u8 *extended_capabilities, *extended_capabilities_mask;
u8 extended_capabilities_len;
const struct wiphy_iftype_ext_capab *iftype_ext_capab;
unsigned int num_iftype_ext_capab;
const void *privid;
struct ieee80211_supported_band *bands[NUM_NL80211_BANDS];
void (*reg_notifier)(struct wiphy *wiphy, struct regulatory_request *request);
const struct ieee80211_regdomain __rcu *regd;
struct device dev;
bool registered;
struct dentry *debugfsdir;
const struct ieee80211_ht_cap *ht_capa_mod_mask;
const struct ieee80211_vht_cap *vht_capa_mod_mask;
struct list_head wdev_list;
possible_net_t _net;
#ifdef CONFIG_CFG80211_WEXT;
const struct iw_handler_def *wext;
#endif;
const struct wiphy_coalesce_support *coalesce;
const struct wiphy_vendor_command *vendor_commands;
const struct nl80211_vendor_cmd_info *vendor_events;
int n_vendor_commands, n_vendor_events;
u16 max_ap_assoc_sta;
u8 max_num_csa_counters;
u32 bss_select_support;
u8 nan_supported_bands;
u32 txq_limit;
u32 txq_memory_limit;
u32 txq_quantum;
unsigned long tx_queue_len;
u8 support_mbssid:1, support_only_he_mbssid:1;
const struct cfg80211_pmsr_capabilities *pmsr_capa;
struct {
u64 peer, vif;
u8 max_retry;
} tid_config_support;
u8 max_data_retry_count;
const struct cfg80211_sar_capa *sar_capa;
struct rfkill *rfkill;
u8 mbssid_max_interfaces;
u8 ema_max_profile_periodicity;
u16 max_num_akm_suites;
char priv[] ;
};
Members
mtxmutex for the data (structures) of this device
perm_addrpermanent MAC address of this device
addr_maskIf the device supports multiple MAC addresses by masking, set this to a mask with variable bits set to 1, e.g. if the last four bits are variable then set it to 00-00-00-00-00-0f. The actual variable bits shall be determined by the interfaces added, with interfaces not matching the mask being rejected to be brought up.
addressesIf the device has more than one address, set this pointer to a list of addresses (6 bytes each). The first one will be used by default for perm_addr. In this case, the mask should be set to all-zeroes. In this case it is assumed that the device can handle the same number of arbitrary MAC addresses.
mgmt_stypesbitmasks of frame subtypes that can be subscribed to or transmitted through nl80211, points to an array indexed by interface type
iface_combinationsValid interface combinations array, should not list single interface types.
n_iface_combinationsnumber of entries in iface_combinations array.
software_iftypesbitmask of software interface types, these are not subject to any restrictions since they are purely managed in SW.
n_addressesnumber of addresses in addresses.
interface_modesbitmask of interfaces types valid for this wiphy, must be set by driver
max_acl_mac_addrsMaximum number of MAC addresses that the device supports for ACL.
flagswiphy flags, see
enum wiphy_flagsregulatory_flagswiphy regulatory flags, see
enum ieee80211_regulatory_flagsfeaturesfeatures advertised to nl80211, see
enum nl80211_feature_flags.ext_featuresextended features advertised to nl80211, see
enum nl80211_ext_feature_index.ap_sme_capaAP SME capabilities, flags from
enum nl80211_ap_sme_features.signal_typesignal type reported in
struct cfg80211_bss.bss_priv_sizeeach BSS struct has private data allocated with it, this variable determines its size
max_scan_ssidsmaximum number of SSIDs the device can scan for in any given scan
max_sched_scan_reqsmaximum number of scheduled scan requests that the device can run concurrently.
max_sched_scan_ssidsmaximum number of SSIDs the device can scan for in any given scheduled scan
max_match_setsmaximum number of match sets the device can handle when performing a scheduled scan, 0 if filtering is not supported.
max_scan_ie_lenmaximum length of user-controlled IEs device can add to probe request frames transmitted during a scan, must not include fixed IEs like supported rates
max_sched_scan_ie_lensame as max_scan_ie_len, but for scheduled scans
max_sched_scan_plansmaximum number of scan plans (scan interval and number of iterations) for scheduled scan supported by the device.
max_sched_scan_plan_intervalmaximum interval (in seconds) for a single scan plan supported by the device.
max_sched_scan_plan_iterationsmaximum number of iterations for a single scan plan supported by the device.
n_cipher_suitesnumber of supported cipher suites
cipher_suitessupported cipher suites
n_akm_suitesnumber of supported AKM suites
akm_suitessupported AKM suites. These are the default AKMs supported if the supported AKMs not advertized for a specific interface type in iftype_akm_suites.
iftype_akm_suitesarray of supported akm suites info per interface type. Note that the bits in iftypes_mask inside this structure cannot overlap (i.e. only one occurrence of each type is allowed across all instances of iftype_akm_suites).
num_iftype_akm_suitesnumber of interface types for which supported akm suites are specified separately.
retry_shortRetry limit for short frames (dot11ShortRetryLimit)
retry_longRetry limit for long frames (dot11LongRetryLimit)
frag_thresholdFragmentation threshold (dot11FragmentationThreshold); -1 = fragmentation disabled, only odd values >= 256 used
rts_thresholdRTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled
coverage_classcurrent coverage class
fw_versionfirmware version for ethtool reporting
hw_versionhardware version for ethtool reporting
wowlanWoWLAN support information
wowlan_configcurrent WoWLAN configuration; this should usually not be used since access to it is necessarily racy, use the parameter passed to the suspend() operation instead.
max_remain_on_channel_durationMaximum time a remain-on-channel operation may request, if implemented.
max_num_pmkidsmaximum number of PMKIDs supported by device
available_antennas_txbitmap of antennas which are available to be configured as TX antennas. Antenna configuration commands will be rejected unless this or available_antennas_rx is set.
available_antennas_rxbitmap of antennas which are available to be configured as RX antennas. Antenna configuration commands will be rejected unless this or available_antennas_tx is set.
probe_resp_offload
Bitmap of supported protocols for probe response offloading. See
enum nl80211_probe_resp_offload_support_attr. Only valid when the wiphy flag WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD is set.
extended_capabilitiesextended capabilities supported by the driver, additional capabilities might be supported by userspace; these are the 802.11 extended capabilities (“Extended Capabilities element”) and are in the same format as in the information element. See 802.11-2012 8.4.2.29 for the defined fields. These are the default extended capabilities to be used if the capabilities are not specified for a specific interface type in iftype_ext_capab.
extended_capabilities_maskmask of the valid values
extended_capabilities_lenlength of the extended capabilities
iftype_ext_capabarray of extended capabilities per interface type
num_iftype_ext_capabnumber of interface types for which extended capabilities are specified separately.
privida pointer that drivers can use to identify if an arbitrary wiphy is theirs, e.g. in global notifiers
bandsinformation about bands/channels supported by this device
reg_notifierthe driver’s regulatory notification callback, note that if your driver uses
wiphy_apply_custom_regulatory()the reg_notifier’s request can be passed as NULLregdthe driver’s regulatory domain, if one was requested via the
regulatory_hint()API. This can be used by the driver on the reg_notifier() if it chooses to ignore future regulatory domain changes caused by other drivers.dev(virtual)
struct devicefor this wiphy. The item in /sys/class/ieee80211/ points to this. You need useset_wiphy_dev()(see below).registeredprotects ->resume and ->suspend sysfs callbacks against unregister hardware
debugfsdirdebugfs directory used for this wiphy (ieee80211/<wiphyname>). It will be renamed automatically on wiphy renames
ht_capa_mod_maskSpecify what ht_cap values can be over-ridden. If null, then none can be over-ridden.
vht_capa_mod_maskSpecify what VHT capabilities can be over-ridden. If null, then none can be over-ridden.
wdev_listthe list of associated (virtual) interfaces; this list must not be modified by the driver, but can be read with RTNL/RCU protection.
_netthe network namespace this wiphy currently lives in
wextwireless extension handlers
coalescepacket coalescing support information
vendor_commandsarray of vendor commands supported by the hardware
vendor_eventsarray of vendor events supported by the hardware
n_vendor_commandsnumber of vendor commands
n_vendor_eventsnumber of vendor events
max_ap_assoc_stamaximum number of associated stations supported in AP mode (including P2P GO) or 0 to indicate no such limit is advertised. The driver is allowed to advertise a theoretical limit that it can reach in some cases, but may not always reach.
max_num_csa_countersNumber of supported csa_counters in beacons and probe responses. This value should be set if the driver wishes to limit the number of csa counters. Default (0) means infinite.
bss_select_supportbitmask indicating the BSS selection criteria supported by the driver in the .connect() callback. The bit position maps to the attribute indices defined in
enum nl80211_bss_select_attr.nan_supported_bandsbands supported by the device in NAN mode, a bitmap of
enum nl80211_bandvalues. For instance, for NL80211_BAND_2GHZ, bit 0 would be set (i.e. BIT(NL80211_BAND_2GHZ)).txq_limitconfiguration of internal TX queue frame limit
txq_memory_limitconfiguration internal TX queue memory limit
txq_quantumconfiguration of internal TX queue scheduler quantum
tx_queue_lenallow setting transmit queue len for drivers not using wake_tx_queue
support_mbssidcan HW support association with nontransmitted AP
support_only_he_mbssiddon’t parse MBSSID elements if it is not HE AP, in order to avoid compatibility issues. support_mbssid must be set for this to have any effect.
pmsr_capapeer measurement capabilities
tid_config_supportdescribes the per-TID config support that the device has
tid_config_support.peerbitmap of attributes (configurations) supported by the driver for each peer
tid_config_support.vifbitmap of attributes (configurations) supported by the driver for each vif
tid_config_support.max_retrymaximum supported retry count for long/short retry configuration
max_data_retry_countmaximum supported per TID retry count for configuration through the
NL80211_TID_CONFIG_ATTR_RETRY_SHORTandNL80211_TID_CONFIG_ATTR_RETRY_LONGattributessar_capaSAR control capabilities
rfkilla pointer to the rfkill structure
mbssid_max_interfacesmaximum number of interfaces supported by the driver in a multiple BSSID set. This field must be set to a non-zero value by the driver to advertise MBSSID support.
ema_max_profile_periodicitymaximum profile periodicity supported by the driver. Setting this field to a non-zero value indicates that the driver supports enhanced multi-BSSID advertisements (EMA AP).
max_num_akm_suitesmaximum number of AKM suites allowed for configuration through
NL80211_CMD_CONNECT,NL80211_CMD_ASSOCIATEandNL80211_CMD_START_AP. Set to NL80211_MAX_NR_AKM_SUITES if not set by driver. If set by driver minimum allowed value is NL80211_MAX_NR_AKM_SUITES in order to avoid compatibility issues with legacy userspace and maximum allowed value is CFG80211_MAX_NUM_AKM_SUITES.privdriver private data (sized according to
wiphy_new()parameter)
Parameters
struct wiphy *wiphythe wiphy whose priv pointer to return
Return
The priv of wiphy.
Parameters
void *priva pointer previously returned by wiphy_priv
Return
The wiphy of priv.
Parameters
struct wiphy *wiphyThe wiphy whose device to bind
struct device *devThe device to parent it to
Parameters
struct wiphy *wiphyThe wiphy whose device struct to look up
Return
The dev of wiphy.
Parameters
const struct wiphy *wiphyThe wiphy whose name to return
Return
The name of wiphy.
-
struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv)¶
create a new wiphy for use with cfg80211
Parameters
const struct cfg80211_ops *opsThe configuration operations for this device
int sizeof_privThe size of the private area to allocate
Description
Create a new wiphy and associate the given operations with it. sizeof_priv bytes are allocated for private use.
Return
A pointer to the new wiphy. This pointer must be assigned to each netdev’s ieee80211_ptr for proper operation.
Parameters
struct wiphy *wiphyThe wiphy to register.
Return
A non-negative wiphy index or a negative error code.
Parameters
struct wiphy *wiphyThe wiphy to unregister.
Description
After this call, no more requests can be made with this priv pointer, but the call may sleep to wait for an outstanding request that is being handled.
Parameters
struct wiphy *wiphyThe wiphy to free
-
struct wireless_dev¶
wireless device state
Definition:
struct wireless_dev {
struct wiphy *wiphy;
enum nl80211_iftype iftype;
struct list_head list;
struct net_device *netdev;
u32 identifier;
struct list_head mgmt_registrations;
u8 mgmt_registrations_need_update:1;
struct mutex mtx;
bool use_4addr, is_running, registered, registering;
u8 address[ETH_ALEN] ;
struct cfg80211_conn *conn;
struct cfg80211_cached_keys *connect_keys;
enum ieee80211_bss_type conn_bss_type;
u32 conn_owner_nlportid;
struct work_struct disconnect_wk;
u8 disconnect_bssid[ETH_ALEN];
struct list_head event_list;
spinlock_t event_lock;
u8 connected:1;
bool ps;
int ps_timeout;
u32 ap_unexpected_nlportid;
u32 owner_nlportid;
bool nl_owner_dead;
bool cac_started;
unsigned long cac_start_time;
unsigned int cac_time_ms;
#ifdef CONFIG_CFG80211_WEXT;
struct {
struct cfg80211_ibss_params ibss;
struct cfg80211_connect_params connect;
struct cfg80211_cached_keys *keys;
const u8 *ie;
size_t ie_len;
u8 bssid[ETH_ALEN];
u8 prev_bssid[ETH_ALEN];
u8 ssid[IEEE80211_MAX_SSID_LEN];
s8 default_key, default_mgmt_key;
bool prev_bssid_valid;
} wext;
#endif;
struct cfg80211_cqm_config *cqm_config;
struct list_head pmsr_list;
spinlock_t pmsr_lock;
struct work_struct pmsr_free_wk;
unsigned long unprot_beacon_reported;
union {
struct {
u8 connected_addr[ETH_ALEN] ;
u8 ssid[IEEE80211_MAX_SSID_LEN];
u8 ssid_len;
} client;
struct {
int beacon_interval;
struct cfg80211_chan_def preset_chandef;
struct cfg80211_chan_def chandef;
u8 id[IEEE80211_MAX_SSID_LEN];
u8 id_len, id_up_len;
} mesh;
struct {
struct cfg80211_chan_def preset_chandef;
u8 ssid[IEEE80211_MAX_SSID_LEN];
u8 ssid_len;
} ap;
struct {
struct cfg80211_internal_bss *current_bss;
struct cfg80211_chan_def chandef;
int beacon_interval;
u8 ssid[IEEE80211_MAX_SSID_LEN];
u8 ssid_len;
} ibss;
struct {
struct cfg80211_chan_def chandef;
} ocb;
} u;
struct {
u8 addr[ETH_ALEN] ;
union {
struct {
unsigned int beacon_interval;
struct cfg80211_chan_def chandef;
} ap;
struct {
struct cfg80211_internal_bss *current_bss;
} client;
};
} links[IEEE80211_MLD_MAX_NUM_LINKS];
u16 valid_links;
};
Members
wiphypointer to hardware description
iftypeinterface type
list(private) Used to collect the interfaces
netdev(private) Used to reference back to the netdev, may be
NULLidentifier(private) Identifier used in nl80211 to identify this wireless device if it has no netdev
mgmt_registrationslist of registrations for management frames
mgmt_registrations_need_updatemgmt registrations were updated, need to propagate the update to the driver
mtxmutex used to lock data in this struct, may be used by drivers and some API functions require it held
use_4addrindicates 4addr mode is used on this interface, must be set by driver (if supported) on add_interface BEFORE registering the netdev and may otherwise be used by driver read-only, will be update by cfg80211 on change_interface
is_runningtrue if this is a non-netdev device that has been started, e.g. the P2P Device.
registeredis this wdev already registered with cfg80211
registeringindicates we’re doing registration under wiphy lock for the notifier
addressThe address for this device, valid only if netdev is
NULLconn(private) cfg80211 software SME connection state machine data
connect_keys(private) keys to set after connection is established
conn_bss_typeconnecting/connected BSS type
conn_owner_nlportid(private) connection owner socket port ID
disconnect_wk(private) auto-disconnect work
disconnect_bssid(private) the BSSID to use for auto-disconnect
event_list(private) list for internal event processing
event_lock(private) lock for event list
connectedindicates if connected or not (STA mode)
pspowersave mode is enabled
ps_timeoutdynamic powersave timeout
ap_unexpected_nlportid(private) netlink port ID of application registered for unexpected class 3 frames (AP mode)
owner_nlportid(private) owner socket port ID
nl_owner_dead(private) owner socket went away
cac_startedtrue if DFS channel availability check has been started
cac_start_timetimestamp (jiffies) when the dfs state was entered.
cac_time_msCAC time in ms
wext(private) Used by the internal wireless extensions compat code
wext.ibss(private) IBSS data part of wext handling
wext.connect(private) connection handling data
wext.keys(private) (WEP) key data
wext.ie(private) extra elements for association
wext.ie_len(private) length of extra elements
wext.bssid(private) selected network BSSID
wext.prev_bssid(private) previous BSSID for reassociation
wext.ssid(private) selected network SSID
wext.default_key(private) selected default key index
wext.default_mgmt_key(private) selected default management key index
wext.prev_bssid_valid(private) previous BSSID validity
cqm_config(private) nl80211 RSSI monitor state
pmsr_list(private) peer measurement requests
pmsr_lock(private) peer measurements requests/results lock
pmsr_free_wk(private) peer measurements cleanup work
unprot_beacon_reported(private) timestamp of last unprotected beacon report
uunion containing data specific to iftype
linksarray of
IEEE80211_MLD_MAX_NUM_LINKSelements containing addr ap and client for each link{unnamed_union}anonymous
valid_linksbitmap describing what elements of links are valid
Description
For netdevs, this structure must be allocated by the driver
that uses the ieee80211_ptr field in struct net_device (this
is intentional so it can be allocated along with the netdev.)
It need not be registered then as netdev registration will
be intercepted by cfg80211 to see the new wireless device,
however, drivers must lock the wiphy before registering or
unregistering netdevs if they pre-create any netdevs (in ops
called from cfg80211, the wiphy is already locked.)
For non-netdev uses, it must also be allocated by the driver in response to the cfg80211 callbacks that require it, as there’s no netdev registration in that case it may not be allocated outside of callback operations that return it.
-
void *wdev_priv(struct wireless_dev *wdev)¶
return wiphy priv from wireless_dev
Parameters
struct wireless_dev *wdevThe wireless device whose wiphy’s priv pointer to return
Return
The wiphy priv of wdev.
-
int cfg80211_check_combinations(struct wiphy *wiphy, struct iface_combination_params *params)¶
check interface combinations
Parameters
struct wiphy *wiphythe wiphy
struct iface_combination_params *paramsthe interface combinations parameter
Description
This function can be called by the driver to check whether a combination of interfaces and their types are allowed according to the interface combinations.
Actions and configuration¶
Each wireless device and each virtual interface offer a set of configuration operations and other actions that are invoked by userspace. Each of these actions is described in the operations structure, and the parameters these operations use are described separately.
Additionally, some operations are asynchronous and expect to get status information via some functions that drivers need to call.
Scanning and BSS list handling with its associated functionality is described in a separate chapter.
-
struct vif_params¶
describes virtual interface parameters
Definition:
struct vif_params {
u32 flags;
int use_4addr;
u8 macaddr[ETH_ALEN];
const u8 *vht_mumimo_groups;
const u8 *vht_mumimo_follow_addr;
};
Members
flagsmonitor interface flags, unchanged if 0, otherwise
MONITOR_FLAG_CHANGEDwill be setuse_4addruse 4-address frames
macaddraddress to use for this virtual interface. If this parameter is set to zero address the driver may determine the address as needed. This feature is only fully supported by drivers that enable the
NL80211_FEATURE_MAC_ON_CREATEflag. Others may support creating * only p2p devices with specified MAC.vht_mumimo_groupsMU-MIMO groupID, used for monitoring MU-MIMO packets belonging to that MU-MIMO groupID;
NULLif not changedvht_mumimo_follow_addrMU-MIMO follow address, used for monitoring MU-MIMO packets going to the specified station;
NULLif not changed
-
struct key_params¶
key information
Definition:
struct key_params {
const u8 *key;
const u8 *seq;
int key_len;
int seq_len;
u16 vlan_id;
u32 cipher;
enum nl80211_key_mode mode;
};
Members
keykey material
seqsequence 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.
key_lenlength of key material
seq_lenlength of seq.
vlan_idvlan_id for VLAN group key (if nonzero)
ciphercipher suite selector
modekey install mode (RX_TX, NO_TX or SET_TX)
Description
Information about a key
-
enum survey_info_flags¶
survey information flags
Constants
SURVEY_INFO_NOISE_DBMnoise (in dBm) was filled in
SURVEY_INFO_IN_USEchannel is currently being used
SURVEY_INFO_TIMEactive time (in ms) was filled in
SURVEY_INFO_TIME_BUSYbusy time was filled in
SURVEY_INFO_TIME_EXT_BUSYextension channel busy time was filled in
SURVEY_INFO_TIME_RXreceive time was filled in
SURVEY_INFO_TIME_TXtransmit time was filled in
SURVEY_INFO_TIME_SCANscan time was filled in
SURVEY_INFO_TIME_BSS_RXlocal BSS receive time was filled in
Description
Used by the driver to indicate which info in struct survey_info
it has filled in during the get_survey().
-
struct survey_info¶
channel survey response
Definition:
struct survey_info {
struct ieee80211_channel *channel;
u64 time;
u64 time_busy;
u64 time_ext_busy;
u64 time_rx;
u64 time_tx;
u64 time_scan;
u64 time_bss_rx;
u32 filled;
s8 noise;
};
Members
channelthe channel this survey record reports, may be
NULLfor a single record to report global statisticstimeamount of time in ms the radio was turn on (on the channel)
time_busyamount of time the primary channel was sensed busy
time_ext_busyamount of time the extension channel was sensed busy
time_rxamount of time the radio spent receiving data
time_txamount of time the radio spent transmitting data
time_scanamount of time the radio spent for scanning
time_bss_rxamount of time the radio spent receiving data on a local BSS
filledbitflag of flags from
enum survey_info_flagsnoisechannel noise in dBm. This and all following fields are optional
Description
Used by dump_survey() to report back per-channel survey information.
This structure can later be expanded with things like channel duty cycle etc.
-
struct cfg80211_crypto_settings¶
Crypto settings
Definition:
struct cfg80211_crypto_settings {
u32 wpa_versions;
u32 cipher_group;
int n_ciphers_pairwise;
u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES];
int n_akm_suites;
u32 akm_suites[CFG80211_MAX_NUM_AKM_SUITES];
bool control_port;
__be16 control_port_ethertype;
bool control_port_no_encrypt;
bool control_port_over_nl80211;
bool control_port_no_preauth;
const u8 *psk;
const u8 *sae_pwd;
u8 sae_pwd_len;
enum nl80211_sae_pwe_mechanism sae_pwe;
};
Members
wpa_versionsindicates which, if any, WPA versions are enabled (from enum nl80211_wpa_versions)
cipher_groupgroup key cipher suite (or 0 if unset)
n_ciphers_pairwisenumber of AP supported unicast ciphers
ciphers_pairwiseunicast key cipher suites
n_akm_suitesnumber of AKM suites
akm_suitesAKM suites
control_portWhether user space controls IEEE 802.1X port, i.e., sets/clears
NL80211_STA_FLAG_AUTHORIZED. If true, the driver is required to assume that the port is unauthorized until authorized by user space. Otherwise, port is marked authorized by default.control_port_ethertypethe control port protocol that should be allowed through even on unauthorized ports
control_port_no_encryptTRUE to prevent encryption of control port protocol frames.
control_port_over_nl80211TRUE if userspace expects to exchange control port frames over NL80211 instead of the network interface.
control_port_no_preauthdisables pre-auth rx over the nl80211 control port for mac80211
pskPSK (for devices supporting 4-way-handshake offload)
sae_pwdpassword for SAE authentication (for devices supporting SAE offload)
sae_pwd_lenlength of SAE password (for devices supporting SAE offload)
sae_pweThe mechanisms allowed for SAE PWE derivation:
- NL80211_SAE_PWE_UNSPECIFIED
Not-specified, used to indicate userspace did not specify any preference. The driver should follow its internal policy in such a scenario.
- NL80211_SAE_PWE_HUNT_AND_PECK
Allow hunting-and-pecking loop only
- NL80211_SAE_PWE_HASH_TO_ELEMENT
Allow hash-to-element only
- NL80211_SAE_PWE_BOTH
Allow either hunting-and-pecking loop or hash-to-element
-
struct cfg80211_beacon_data¶
beacon data
Definition:
struct cfg80211_beacon_data {
unsigned int link_id;
const u8 *head, *tail;
const u8 *beacon_ies;
const u8 *proberesp_ies;
const u8 *assocresp_ies;
const u8 *probe_resp;
const u8 *lci;
const u8 *civicloc;
struct cfg80211_mbssid_elems *mbssid_ies;
s8 ftm_responder;
size_t head_len, tail_len;
size_t beacon_ies_len;
size_t proberesp_ies_len;
size_t assocresp_ies_len;
size_t probe_resp_len;
size_t lci_len;
size_t civicloc_len;
struct cfg80211_he_bss_color he_bss_color;
bool he_bss_color_valid;
};
Members
link_idthe link ID for the AP MLD link sending this beacon
headhead portion of beacon (before TIM IE) or
NULLif not changedtailtail portion of beacon (after TIM IE) or
NULLif not changedbeacon_iesextra information element(s) to add into Beacon frames or
NULLproberesp_iesextra information element(s) to add into Probe Response frames or
NULLassocresp_iesextra information element(s) to add into (Re)Association Response frames or
NULLprobe_respprobe response template (AP mode only)
lciMeasurement Report element content, starting with Measurement Token (measurement type 8)
civiclocMeasurement Report element content, starting with Measurement Token (measurement type 11)
mbssid_iesmultiple BSSID elements
ftm_responderenable FTM responder functionality; -1 for no change (which also implies no change in LCI/civic location data)
head_lenlength of head
tail_lenlength of tail
beacon_ies_lenlength of beacon_ies in octets
proberesp_ies_lenlength of proberesp_ies in octets
assocresp_ies_lenlength of assocresp_ies in octets
probe_resp_lenlength of probe response template (probe_resp)
lci_lenLCI data length
civicloc_lenCivic location data length
he_bss_colorBSS Color settings
he_bss_color_validindicates whether bss color attribute is present in beacon data or not.
-
struct cfg80211_ap_settings¶
AP configuration
Definition:
struct cfg80211_ap_settings {
struct cfg80211_chan_def chandef;
struct cfg80211_beacon_data beacon;
int beacon_interval, dtim_period;
const u8 *ssid;
size_t ssid_len;
enum nl80211_hidden_ssid hidden_ssid;
struct cfg80211_crypto_settings crypto;
bool privacy;
enum nl80211_auth_type auth_type;
enum nl80211_smps_mode smps_mode;
int inactivity_timeout;
u8 p2p_ctwindow;
bool p2p_opp_ps;
const struct cfg80211_acl_data *acl;
bool pbss;
struct cfg80211_bitrate_mask beacon_rate;
const struct ieee80211_ht_cap *ht_cap;
const struct ieee80211_vht_cap *vht_cap;
const struct ieee80211_he_cap_elem *he_cap;
const struct ieee80211_he_operation *he_oper;
const struct ieee80211_eht_cap_elem *eht_cap;
const struct ieee80211_eht_operation *eht_oper;
bool ht_required, vht_required, he_required, sae_h2e_required;
bool twt_responder;
u32 flags;
struct ieee80211_he_obss_pd he_obss_pd;
struct cfg80211_fils_discovery fils_discovery;
struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
struct cfg80211_mbssid_config mbssid_config;
u16 punct_bitmap;
};
Members
chandefdefines the channel to use
beaconbeacon data
beacon_intervalbeacon interval
dtim_periodDTIM period
ssidSSID to be used in the BSS (note: may be
NULLif not provided from user space)ssid_lenlength of ssid
hidden_ssidwhether to hide the SSID in Beacon/Probe Response frames
cryptocrypto settings
privacythe BSS uses privacy
auth_typeAuthentication type (algorithm)
smps_modeSMPS mode
inactivity_timeouttime in seconds to determine station’s inactivity.
p2p_ctwindowP2P CT Window
p2p_opp_psP2P opportunistic PS
aclACL configuration used by the drivers which has support for MAC address based access control
pbssIf set, start as a PCP instead of AP. Relevant for DMG networks.
beacon_ratebitrate to be used for beacons
ht_capHT capabilities (or
NULLif HT isn’t enabled)vht_capVHT capabilities (or
NULLif VHT isn’t enabled)he_capHE capabilities (or
NULLif HE isn’t enabled)he_operHE operation IE (or
NULLif HE isn’t enabled)eht_capEHT capabilities (or
NULLif EHT isn’t enabled)eht_operEHT operation IE (or
NULLif EHT isn’t enabled)ht_requiredstations must support HT
vht_requiredstations must support VHT
he_requiredstations must support HE
sae_h2e_requiredstations must support direct H2E technique in SAE
twt_responderEnable Target Wait Time
flagsflags, as defined in enum cfg80211_ap_settings_flags
he_obss_pdOBSS Packet Detection settings
fils_discoveryFILS discovery transmission parameters
unsol_bcast_probe_respUnsolicited broadcast probe response parameters
mbssid_configAP settings for multiple bssid
punct_bitmapPreamble puncturing bitmap. Each bit represents a 20 MHz channel, lowest bit corresponding to the lowest channel. Bit set to 1 indicates that the channel is punctured.
Description
Used to configure an AP interface.
-
struct station_parameters¶
station parameters
Definition:
struct station_parameters {
struct net_device *vlan;
u32 sta_flags_mask, sta_flags_set;
u32 sta_modify_mask;
int listen_interval;
u16 aid;
u16 vlan_id;
u16 peer_aid;
u8 plink_action;
u8 plink_state;
u8 uapsd_queues;
u8 max_sp;
enum nl80211_mesh_power_mode local_pm;
u16 capability;
const u8 *ext_capab;
u8 ext_capab_len;
const u8 *supported_channels;
u8 supported_channels_len;
const u8 *supported_oper_classes;
u8 supported_oper_classes_len;
int support_p2p_ps;
u16 airtime_weight;
struct link_station_parameters link_sta_params;
};
Members
vlanvlan interface station should belong to
sta_flags_maskstation flags that changed (bitmask of BIT(
NL80211_STA_FLAG_…))sta_flags_setstation flags values (bitmask of BIT(
NL80211_STA_FLAG_…))sta_modify_maskbitmap indicating which parameters changed (for those that don’t have a natural “no change” value), see
enum station_parameters_apply_masklisten_intervallisten interval or -1 for no change
aidAID or zero for no change
vlan_idVLAN ID for station (if nonzero)
peer_aidmesh peer AID or zero for no change
plink_actionplink action to take
plink_stateset the peer link state for a station
uapsd_queuesbitmap of queues configured for uapsd. same format as the AC bitmap in the QoS info field
max_spmax Service Period. same format as the MAX_SP in the QoS info field (but already shifted down)
local_pmlocal link-specific mesh power save mode (no change when set to unknown)
capabilitystation capability
ext_capabextended capabilities of the station
ext_capab_lennumber of extended capabilities
supported_channelssupported channels in IEEE 802.11 format
supported_channels_lennumber of supported channels
supported_oper_classessupported oper classes in IEEE 802.11 format
supported_oper_classes_lennumber of supported operating classes
support_p2p_psinformation if station supports P2P PS mechanism
airtime_weightairtime scheduler weight for this station
link_sta_paramslink related params.
Description
Used to change and create a new station.
-
enum rate_info_flags¶
bitrate info flags
Constants
RATE_INFO_FLAGS_MCSmcs field filled with HT MCS
RATE_INFO_FLAGS_VHT_MCSmcs field filled with VHT MCS
RATE_INFO_FLAGS_SHORT_GI400ns guard interval
RATE_INFO_FLAGS_DMG60GHz MCS
RATE_INFO_FLAGS_HE_MCSHE MCS information
RATE_INFO_FLAGS_EDMG60GHz MCS in EDMG mode
RATE_INFO_FLAGS_EXTENDED_SC_DMG60GHz extended SC MCS
RATE_INFO_FLAGS_EHT_MCSEHT MCS information
Description
Used by the driver to indicate the specific rate transmission type for 802.11n transmissions.
-
struct rate_info¶
bitrate information
Definition:
struct rate_info {
u8 flags;
u8 mcs;
u16 legacy;
u8 nss;
u8 bw;
u8 he_gi;
u8 he_dcm;
u8 he_ru_alloc;
u8 n_bonded_ch;
u8 eht_gi;
u8 eht_ru_alloc;
};
Members
flagsbitflag of flags from
enum rate_info_flagsmcsmcs index if struct describes an HT/VHT/HE rate
legacybitrate in 100kbit/s for 802.11abg
nssnumber of streams (VHT & HE only)
bwbandwidth (from
enum rate_info_bw)he_giHE guard interval (from
enum nl80211_he_gi)he_dcmHE DCM value
he_ru_allocHE RU allocation (from
enum nl80211_he_ru_alloc, only valid if bw isRATE_INFO_BW_HE_RU)n_bonded_chIn case of EDMG the number of bonded channels (1-4)
eht_giEHT guard interval (from
enum nl80211_eht_gi)eht_ru_allocEHT RU allocation (from
enum nl80211_eht_ru_alloc, only valid if bw isRATE_INFO_BW_EHT_RU)
Description
Information about a receiving or transmitting bitrate
-
struct station_info¶
station information
Definition:
struct station_info {
u64 filled;
u32 connected_time;
u32 inactive_time;
u64 assoc_at;
u64 rx_bytes;
u64 tx_bytes;
u16 llid;
u16 plid;
u8 plink_state;
s8 signal;
s8 signal_avg;
u8 chains;
s8 chain_signal[IEEE80211_MAX_CHAINS];
s8 chain_signal_avg[IEEE80211_MAX_CHAINS];
struct rate_info txrate;
struct rate_info rxrate;
u32 rx_packets;
u32 tx_packets;
u32 tx_retries;
u32 tx_failed;
u32 rx_dropped_misc;
struct sta_bss_parameters bss_param;
struct nl80211_sta_flag_update sta_flags;
int generation;
const u8 *assoc_req_ies;
size_t assoc_req_ies_len;
u32 beacon_loss_count;
s64 t_offset;
enum nl80211_mesh_power_mode local_pm;
enum nl80211_mesh_power_mode peer_pm;
enum nl80211_mesh_power_mode nonpeer_pm;
u32 expected_throughput;
u64 tx_duration;
u64 rx_duration;
u64 rx_beacon;
u8 rx_beacon_signal_avg;
u8 connected_to_gate;
struct cfg80211_tid_stats *pertid;
s8 ack_signal;
s8 avg_ack_signal;
u16 airtime_weight;
u32 rx_mpdu_count;
u32 fcs_err_count;
u32 airtime_link_metric;
u8 connected_to_as;
bool mlo_params_valid;
u8 assoc_link_id;
u8 mld_addr[ETH_ALEN] ;
const u8 *assoc_resp_ies;
size_t assoc_resp_ies_len;
};
Members
filledbitflag of flags using the bits of
enum nl80211_sta_infoto indicate the relevant values in this struct for themconnected_timetime(in secs) since a station is last connected
inactive_timetime since last station activity (tx/rx) in milliseconds
assoc_atbootime (ns) of the last association
rx_bytesbytes (size of MPDUs) received from this station
tx_bytesbytes (size of MPDUs) transmitted to this station
llidmesh local link id
plidmesh peer link id
plink_statemesh peer link state
signalThe signal strength, type depends on the wiphy’s signal_type. For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
signal_avgAverage signal strength, type depends on the wiphy’s signal_type. For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
chainsbitmask for filled values in chain_signal, chain_signal_avg
chain_signalper-chain signal strength of last received packet in dBm
chain_signal_avgper-chain signal strength average in dBm
txratecurrent unicast bitrate from this station
rxratecurrent unicast bitrate to this station
rx_packetspackets (MSDUs & MMPDUs) received from this station
tx_packetspackets (MSDUs & MMPDUs) transmitted to this station
tx_retriescumulative retry counts (MPDUs)
tx_failednumber of failed transmissions (MPDUs) (retries exceeded, no ACK)
rx_dropped_miscDropped for un-specified reason.
bss_paramcurrent BSS parameters
sta_flagsstation flags mask & values
generationgeneration number for nl80211 dumps. This number should increase every time the list of stations changes, i.e. when a station is added or removed, so that userspace can tell whether it got a consistent snapshot.
assoc_req_iesIEs from (Re)Association Request. This is used only when in AP mode with drivers that do not use user space MLME/SME implementation. The information is provided for the
cfg80211_new_sta()calls to notify user space of the IEs.assoc_req_ies_lenLength of assoc_req_ies buffer in octets.
beacon_loss_countNumber of times beacon loss event has triggered.
t_offsetTime offset of the station relative to this host.
local_pmlocal mesh STA power save mode
peer_pmpeer mesh STA power save mode
nonpeer_pmnon-peer mesh STA power save mode
expected_throughputexpected throughput in kbps (including 802.11 headers) towards this station.
tx_durationaggregate PPDU duration(usecs) for all the frames to a peer
rx_durationaggregate PPDU duration(usecs) for all the frames from a peer
rx_beaconnumber of beacons received from this peer
rx_beacon_signal_avgsignal strength average (in dBm) for beacons received from this peer
connected_to_gatetrue if mesh STA has a path to mesh gate
pertidper-TID statistics, see
struct cfg80211_tid_stats, using the last (IEEE80211_NUM_TIDS) index for MSDUs not encapsulated in QoS-MPDUs. Note that this doesn’t use the filled bit, but is used if non-NULL.ack_signalsignal strength (in dBm) of the last ACK frame.
avg_ack_signalaverage rssi value of ack packet for the no of msdu’s has been sent.
airtime_weightcurrent airtime scheduling weight
rx_mpdu_countnumber of MPDUs received from this station
fcs_err_countnumber of packets (MPDUs) received from this station with an FCS error. This counter should be incremented only when TA of the received packet with an FCS error matches the peer MAC address.
airtime_link_metricmesh airtime link metric.
connected_to_astrue if mesh STA has a path to authentication server
mlo_params_validIndicates assoc_link_id and mld_addr fields are filled by driver. Drivers use this only in
cfg80211_new_sta()calls when AP MLD’s MLME/SME is offload to driver. Drivers won’t fill this information in cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks.assoc_link_idIndicates MLO link ID of the AP, with which the station completed (re)association. This information filled for both MLO and non-MLO STA connections when the AP affiliated with an MLD.
mld_addrFor MLO STA connection, filled with MLD address of the station. For non-MLO STA connection, filled with all zeros.
assoc_resp_iesIEs from (Re)Association Response. This is used only when in AP mode with drivers that do not use user space MLME/SME implementation. The information is provided only for the
cfg80211_new_sta()calls to notify user space of the IEs. Drivers won’t fill this information in cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks. User space needs this information to determine the accepted and rejected affiliated links of the connected station.assoc_resp_ies_lenLength of assoc_resp_ies buffer in octets.
Description
Station information filled by driver for get_station() and dump_station.
-
enum monitor_flags¶
monitor flags
Constants
MONITOR_FLAG_CHANGEDset if the flags were changed
MONITOR_FLAG_FCSFAILpass frames with bad FCS
MONITOR_FLAG_PLCPFAILpass frames with bad PLCP
MONITOR_FLAG_CONTROLpass control frames
MONITOR_FLAG_OTHER_BSSdisable BSSID filtering
MONITOR_FLAG_COOK_FRAMESreport frames after processing
MONITOR_FLAG_ACTIVEactive monitor, ACKs frames on its MAC address
Description
Monitor interface configuration flags. Note that these must be the bits according to the nl80211 flags.
-
enum mpath_info_flags¶
mesh path information flags
Constants
MPATH_INFO_FRAME_QLENframe_qlen filled
MPATH_INFO_SNsn filled
MPATH_INFO_METRICmetric filled
MPATH_INFO_EXPTIMEexptime filled
MPATH_INFO_DISCOVERY_TIMEOUTdiscovery_timeout filled
MPATH_INFO_DISCOVERY_RETRIESdiscovery_retries filled
MPATH_INFO_FLAGSflags filled
MPATH_INFO_HOP_COUNThop_count filled
MPATH_INFO_PATH_CHANGEpath_change_count filled
Description
Used by the driver to indicate which info in struct mpath_info it has filled
in during get_station() or dump_station().
-
struct mpath_info¶
mesh path information
Definition:
struct mpath_info {
u32 filled;
u32 frame_qlen;
u32 sn;
u32 metric;
u32 exptime;
u32 discovery_timeout;
u8 discovery_retries;
u8 flags;
u8 hop_count;
u32 path_change_count;
int generation;
};
Members
filledbitfield of flags from
enum mpath_info_flagsframe_qlennumber of queued frames for this destination
sntarget sequence number
metricmetric (cost) of this mesh path
exptimeexpiration time for the mesh path from now, in msecs
discovery_timeouttotal mesh path discovery timeout, in msecs
discovery_retriesmesh path discovery retries
flagsmesh path flags
hop_counthops to destination
path_change_counttotal number of path changes to destination
generationgeneration number for nl80211 dumps. This number should increase every time the list of mesh paths changes, i.e. when a station is added or removed, so that userspace can tell whether it got a consistent snapshot.
Description
Mesh path information filled by driver for get_mpath() and dump_mpath().
-
struct bss_parameters¶
BSS parameters
Definition:
struct bss_parameters {
int link_id;
int use_cts_prot;
int use_short_preamble;
int use_short_slot_time;
const u8 *basic_rates;
u8 basic_rates_len;
int ap_isolate;
int ht_opmode;
s8 p2p_ctwindow, p2p_opp_ps;
};
Members
link_idlink_id or -1 for non-MLD
use_cts_protWhether to use CTS protection (0 = no, 1 = yes, -1 = do not change)
use_short_preambleWhether the use of short preambles is allowed (0 = no, 1 = yes, -1 = do not change)
use_short_slot_timeWhether the use of short slot time is allowed (0 = no, 1 = yes, -1 = do not change)
basic_ratesbasic rates in IEEE 802.11 format (or NULL for no change)
basic_rates_lennumber of basic rates
ap_isolatedo not forward packets between connected stations (0 = no, 1 = yes, -1 = do not change)
ht_opmodeHT Operation mode (u16 = opmode, -1 = do not change)
p2p_ctwindowP2P CT Window (-1 = no change)
p2p_opp_psP2P opportunistic PS (-1 = no change)
Description
Used to change BSS parameters (mainly for AP mode).
-
struct ieee80211_txq_params¶
TX queue parameters
Definition:
struct ieee80211_txq_params {
enum nl80211_ac ac;
u16 txop;
u16 cwmin;
u16 cwmax;
u8 aifs;
int link_id;
};
Members
acAC identifier
txopMaximum burst time in units of 32 usecs, 0 meaning disabled
cwminMinimum contention window [a value of the form 2^n-1 in the range 1..32767]
cwmaxMaximum contention window [a value of the form 2^n-1 in the range 1..32767]
aifsArbitration interframe space [0..255]
link_idlink_id or -1 for non-MLD
-
struct cfg80211_auth_request¶
Authentication request data
Definition:
struct cfg80211_auth_request {
struct cfg80211_bss *bss;
const u8 *ie;
size_t ie_len;
enum nl80211_auth_type auth_type;
const u8 *key;
u8 key_len;
s8 key_idx;
const u8 *auth_data;
size_t auth_data_len;
s8 link_id;
const u8 *ap_mld_addr;
};
Members
bssThe BSS to authenticate with, the callee must obtain a reference to it if it needs to keep it.
ieExtra IEs to add to Authentication frame or
NULLie_lenLength of ie buffer in octets
auth_typeAuthentication type (algorithm)
keyWEP key for shared key authentication
key_lenlength of WEP key for shared key authentication
key_idxindex of WEP key for shared key authentication
auth_dataFields and elements in Authentication frames. This contains the authentication frame body (non-IE and IE data), excluding the Authentication algorithm number, i.e., starting at the Authentication transaction sequence number field.
auth_data_lenLength of auth_data buffer in octets
link_idif >= 0, indicates authentication should be done as an MLD, the interface address is included as the MLD address and the necessary link (with the given link_id) will be created (and given an MLD address) by the driver
ap_mld_addrAP MLD address in case of authentication request with an AP MLD, valid iff link_id >= 0
Description
This structure provides information needed to complete IEEE 802.11 authentication.
-
struct cfg80211_assoc_request¶
(Re)Association request data
Definition:
struct cfg80211_assoc_request {
struct cfg80211_bss *bss;
const u8 *ie, *prev_bssid;
size_t ie_len;
struct cfg80211_crypto_settings crypto;
bool use_mfp;
u32 flags;
struct ieee80211_ht_cap ht_capa;
struct ieee80211_ht_cap ht_capa_mask;
struct ieee80211_vht_cap vht_capa, vht_capa_mask;
const u8 *fils_kek;
size_t fils_kek_len;
const u8 *fils_nonces;
struct ieee80211_s1g_cap s1g_capa, s1g_capa_mask;
struct cfg80211_assoc_link links[IEEE80211_MLD_MAX_NUM_LINKS];
const u8 *ap_mld_addr;
s8 link_id;
};
Members
bssThe BSS to associate with. If the call is successful the driver is given a reference that it must give back to cfg80211_send_rx_assoc() or to cfg80211_assoc_timeout(). To ensure proper refcounting, new association requests while already associating must be rejected. This also applies to the links.bss parameter, which is used instead of this one (it is
NULL) for MLO associations.ieExtra IEs to add to (Re)Association Request frame or
NULLprev_bssidprevious BSSID, if not
NULLuse reassociate frame. This is used to indicate a request to reassociate within the ESS instead of a request do the initial association with the ESS. When included, this is set to the BSSID of the current association, i.e., to the value that is included in the Current AP address field of the Reassociation Request frame.ie_lenLength of ie buffer in octets
cryptocrypto settings
use_mfpUse management frame protection (IEEE 802.11w) in this association
flagsSee
enum cfg80211_assoc_req_flagsht_capaHT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored.
ht_capa_maskThe bits of ht_capa which are to be used.
vht_capaVHT capability override
vht_capa_maskVHT capability mask indicating which fields to use
fils_kekFILS KEK for protecting (Re)Association Request/Response frame or
NULLif FILS is not used.fils_kek_lenLength of fils_kek in octets
fils_noncesFILS nonces (part of AAD) for protecting (Re)Association Request/Response frame or
NULLif FILS is not used. This field starts with 16 octets of STA Nonce followed by 16 octets of AP Nonce.s1g_capaS1G capability override
s1g_capa_maskS1G capability override mask
linksper-link information for MLO connections
ap_mld_addrAP MLD address in case of MLO association request, valid iff link_id >= 0
link_id>= 0 for MLO connections, where links are given, and indicates the link on which the association request should be sent
Description
This structure provides information needed to complete IEEE 802.11 (re)association.
-
struct cfg80211_deauth_request¶
Deauthentication request data
Definition:
struct cfg80211_deauth_request {
const u8 *bssid;
const u8 *ie;
size_t ie_len;
u16 reason_code;
bool local_state_change;
};
Members
bssidthe BSSID or AP MLD address to deauthenticate from
ieExtra IEs to add to Deauthentication frame or
NULLie_lenLength of ie buffer in octets
reason_codeThe reason code for the deauthentication
local_state_changeif set, change local state only and do not set a deauth frame
Description
This structure provides information needed to complete IEEE 802.11 deauthentication.
-
struct cfg80211_disassoc_request¶
Disassociation request data
Definition:
struct cfg80211_disassoc_request {
const u8 *ap_addr;
const u8 *ie;
size_t ie_len;
u16 reason_code;
bool local_state_change;
};
Members
ap_addrthe BSSID or AP MLD address to disassociate from
ieExtra IEs to add to Disassociation frame or
NULLie_lenLength of ie buffer in octets
reason_codeThe reason code for the disassociation
local_state_changeThis is a request for a local state only, i.e., no Disassociation frame is to be transmitted.
Description
This structure provides information needed to complete IEEE 802.11 disassociation.
-
struct cfg80211_ibss_params¶
IBSS parameters
Definition:
struct cfg80211_ibss_params {
const u8 *ssid;
const u8 *bssid;
struct cfg80211_chan_def chandef;
const u8 *ie;
u8 ssid_len, ie_len;
u16 beacon_interval;
u32 basic_rates;
bool channel_fixed;
bool privacy;
bool control_port;
bool control_port_over_nl80211;
bool userspace_handles_dfs;
int mcast_rate[NUM_NL80211_BANDS];
struct ieee80211_ht_cap ht_capa;
struct ieee80211_ht_cap ht_capa_mask;
struct key_params *wep_keys;
int wep_tx_key;
};
Members
ssidThe SSID, will always be non-null.
bssidFixed BSSID requested, maybe be
NULL, if set do not search for IBSSs with a different BSSID.chandefdefines the channel to use if no other IBSS to join can be found
ieinformation element(s) to include in the beacon
ssid_lenThe length of the SSID, will always be non-zero.
ie_lenlength of that
beacon_intervalbeacon interval to use
basic_ratesbitmap of basic rates to use when creating the IBSS
channel_fixedThe channel should be fixed – do not search for IBSSs to join on other channels.
privacythis is a protected network, keys will be configured after joining
control_portwhether user space controls IEEE 802.1X port, i.e., sets/clears
NL80211_STA_FLAG_AUTHORIZED. If true, the driver is required to assume that the port is unauthorized until authorized by user space. Otherwise, port is marked authorized by default.control_port_over_nl80211TRUE if userspace expects to exchange control port frames over NL80211 instead of the network interface.
userspace_handles_dfswhether user space controls DFS operation, i.e. changes the channel when a radar is detected. This is required to operate on DFS channels.
mcast_rateper-band multicast rate index + 1 (0: disabled)
ht_capaHT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored.
ht_capa_maskThe bits of ht_capa which are to be used.
wep_keysstatic WEP keys, if not NULL points to an array of CFG80211_MAX_WEP_KEYS WEP keys
wep_tx_keykey index (0..3) of the default TX static WEP key
Description
This structure defines the IBSS parameters for the join_ibss() method.
-
struct cfg80211_connect_params¶
Connection parameters
Definition:
struct cfg80211_connect_params {
struct ieee80211_channel *channel;
struct ieee80211_channel *channel_hint;
const u8 *bssid;
const u8 *bssid_hint;
const u8 *ssid;
size_t ssid_len;
enum nl80211_auth_type auth_type;
const u8 *ie;
size_t ie_len;
bool privacy;
enum nl80211_mfp mfp;
struct cfg80211_crypto_settings crypto;
const u8 *key;
u8 key_len, key_idx;
u32 flags;
int bg_scan_period;
struct ieee80211_ht_cap ht_capa;
struct ieee80211_ht_cap ht_capa_mask;
struct ieee80211_vht_cap vht_capa;
struct ieee80211_vht_cap vht_capa_mask;
bool pbss;
struct cfg80211_bss_selection bss_select;
const u8 *prev_bssid;
const u8 *fils_erp_username;
size_t fils_erp_username_len;
const u8 *fils_erp_realm;
size_t fils_erp_realm_len;
u16 fils_erp_next_seq_num;
const u8 *fils_erp_rrk;
size_t fils_erp_rrk_len;
bool want_1x;
struct ieee80211_edmg edmg;
};
Members
channelThe channel to use or
NULLif not specified (auto-select based on scan results)channel_hintThe channel of the recommended BSS for initial connection or
NULLif not specifiedbssidThe AP BSSID or
NULLif not specified (auto-select based on scan results)bssid_hintThe recommended AP BSSID for initial connection to the BSS or
NULLif not specified. Unlike the bssid parameter, the driver is allowed to ignore this bssid_hint if it has knowledge of a better BSS to use.ssidSSID
ssid_lenLength of ssid in octets
auth_typeAuthentication type (algorithm)
ieIEs for association request
ie_lenLength of assoc_ie in octets
privacyindicates whether privacy-enabled APs should be used
mfpindicate whether management frame protection is used
cryptocrypto settings
keyWEP key for shared key authentication
key_lenlength of WEP key for shared key authentication
key_idxindex of WEP key for shared key authentication
flagsSee
enum cfg80211_assoc_req_flagsbg_scan_periodBackground scan period in seconds or -1 to indicate that default value is to be used.
ht_capaHT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored.
ht_capa_maskThe bits of ht_capa which are to be used.
vht_capaVHT Capability overrides
vht_capa_maskThe bits of vht_capa which are to be used.
pbssif set, connect to a PCP instead of AP. Valid for DMG networks.
bss_selectcriteria to be used for BSS selection.
prev_bssidprevious BSSID, if not
NULLuse reassociate frame. This is used to indicate a request to reassociate within the ESS instead of a request do the initial association with the ESS. When included, this is set to the BSSID of the current association, i.e., to the value that is included in the Current AP address field of the Reassociation Request frame.fils_erp_usernameEAP re-authentication protocol (ERP) username part of the NAI or
NULLif not specified. This is used to construct FILS wrapped data IE.fils_erp_username_lenLength of fils_erp_username in octets.
fils_erp_realmEAP re-authentication protocol (ERP) realm part of NAI or
NULLif not specified. This specifies the domain name of ER server and is used to construct FILS wrapped data IE.fils_erp_realm_lenLength of fils_erp_realm in octets.
fils_erp_next_seq_numThe next sequence number to use in the FILS ERP messages. This is also used to construct FILS wrapped data IE.
fils_erp_rrkERP re-authentication Root Key (rRK) used to derive additional keys in FILS or
NULLif not specified.fils_erp_rrk_lenLength of fils_erp_rrk in octets.
want_1xindicates user-space supports and wants to use 802.1X driver offload of 4-way handshake.
edmgdefine the EDMG channels. This may specify multiple channels and bonding options for the driver to choose from, based on BSS configuration.
Description
This structure provides information needed to complete IEEE 802.11 authentication and association.
-
struct cfg80211_pmksa¶
PMK Security Association
Definition:
struct cfg80211_pmksa {
const u8 *bssid;
const u8 *pmkid;
const u8 *pmk;
size_t pmk_len;
const u8 *ssid;
size_t ssid_len;
const u8 *cache_id;
u32 pmk_lifetime;
u8 pmk_reauth_threshold;
};
Members
bssidThe AP’s BSSID (may be
NULL).pmkidThe identifier to refer a PMKSA.
pmkThe PMK for the PMKSA identified by pmkid. This is used for key derivation by a FILS STA. Otherwise,
NULL.pmk_lenLength of the pmk. The length of pmk can differ depending on the hash algorithm used to generate this.
ssidSSID to specify the ESS within which a PMKSA is valid when using FILS cache identifier (may be
NULL).ssid_lenLength of the ssid in octets.
cache_id2-octet cache identifier advertized by a FILS AP identifying the scope of PMKSA. This is valid only if ssid_len is non-zero (may be
NULL).pmk_lifetimeMaximum lifetime for PMKSA in seconds (dot11RSNAConfigPMKLifetime) or 0 if not specified. The configured PMKSA must not be used for PMKSA caching after expiration and any keys derived from this PMK become invalid on expiration, i.e., the current association must be dropped if the PMK used for it expires.
pmk_reauth_thresholdThreshold time for reauthentication (percentage of PMK lifetime, dot11RSNAConfigPMKReauthThreshold) or 0 if not specified. Drivers are expected to trigger a full authentication instead of using this PMKSA for caching when reassociating to a new BSS after this threshold to generate a new PMK before the current one expires.
Description
This structure is passed to the set/del_pmksa() method for PMKSA caching.
-
struct cfg80211_ops¶
backend description for wireless configuration
Definition:
struct cfg80211_ops {
int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
int (*resume)(struct wiphy *wiphy);
void (*set_wakeup)(struct wiphy *wiphy, bool enabled);
struct wireless_dev * (*add_virtual_intf)(struct wiphy *wiphy,const char *name,unsigned char name_assign_type,enum nl80211_iftype type, struct vif_params *params);
int (*del_virtual_intf)(struct wiphy *wiphy, struct wireless_dev *wdev);
int (*change_virtual_intf)(struct wiphy *wiphy,struct net_device *dev,enum nl80211_iftype type, struct vif_params *params);
int (*add_intf_link)(struct wiphy *wiphy,struct wireless_dev *wdev, unsigned int link_id);
void (*del_intf_link)(struct wiphy *wiphy,struct wireless_dev *wdev, unsigned int link_id);
int (*add_key)(struct wiphy *wiphy, struct net_device *netdev,int link_id, u8 key_index, bool pairwise, const u8 *mac_addr, struct key_params *params);
int (*get_key)(struct wiphy *wiphy, struct net_device *netdev,int link_id, u8 key_index, bool pairwise,const u8 *mac_addr, void *cookie, void (*callback)(void *cookie, struct key_params*));
int (*del_key)(struct wiphy *wiphy, struct net_device *netdev,int link_id, u8 key_index, bool pairwise, const u8 *mac_addr);
int (*set_default_key)(struct wiphy *wiphy,struct net_device *netdev, int link_id, u8 key_index, bool unicast, bool multicast);
int (*set_default_mgmt_key)(struct wiphy *wiphy,struct net_device *netdev, int link_id, u8 key_index);
int (*set_default_beacon_key)(struct wiphy *wiphy,struct net_device *netdev,int link_id, u8 key_index);
int (*start_ap)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ap_settings *settings);
int (*change_beacon)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_beacon_data *info);
int (*stop_ap)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id);
int (*add_station)(struct wiphy *wiphy, struct net_device *dev,const u8 *mac, struct station_parameters *params);
int (*del_station)(struct wiphy *wiphy, struct net_device *dev, struct station_del_parameters *params);
int (*change_station)(struct wiphy *wiphy, struct net_device *dev,const u8 *mac, struct station_parameters *params);
int (*get_station)(struct wiphy *wiphy, struct net_device *dev, const 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, const u8 *dst, const u8 *next_hop);
int (*del_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst);
int (*change_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst, const 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);
int (*get_mpp)(struct wiphy *wiphy, struct net_device *dev, u8 *dst, u8 *mpp, struct mpath_info *pinfo);
int (*dump_mpp)(struct wiphy *wiphy, struct net_device *dev,int idx, u8 *dst, u8 *mpp, struct mpath_info *pinfo);
int (*get_mesh_config)(struct wiphy *wiphy,struct net_device *dev, struct mesh_config *conf);
int (*update_mesh_config)(struct wiphy *wiphy,struct net_device *dev, u32 mask, const struct mesh_config *nconf);
int (*join_mesh)(struct wiphy *wiphy, struct net_device *dev,const struct mesh_config *conf, const struct mesh_setup *setup);
int (*leave_mesh)(struct wiphy *wiphy, struct net_device *dev);
int (*join_ocb)(struct wiphy *wiphy, struct net_device *dev, struct ocb_setup *setup);
int (*leave_ocb)(struct wiphy *wiphy, struct net_device *dev);
int (*change_bss)(struct wiphy *wiphy, struct net_device *dev, struct bss_parameters *params);
int (*set_txq_params)(struct wiphy *wiphy, struct net_device *dev, struct ieee80211_txq_params *params);
int (*libertas_set_mesh_channel)(struct wiphy *wiphy,struct net_device *dev, struct ieee80211_channel *chan);
int (*set_monitor_channel)(struct wiphy *wiphy, struct cfg80211_chan_def *chandef);
int (*scan)(struct wiphy *wiphy, struct cfg80211_scan_request *request);
void (*abort_scan)(struct wiphy *wiphy, struct wireless_dev *wdev);
int (*auth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_auth_request *req);
int (*assoc)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_assoc_request *req);
int (*deauth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_deauth_request *req);
int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_disassoc_request *req);
int (*connect)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_connect_params *sme);
int (*update_connect_params)(struct wiphy *wiphy,struct net_device *dev,struct cfg80211_connect_params *sme, u32 changed);
int (*disconnect)(struct wiphy *wiphy, struct net_device *dev, u16 reason_code);
int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ibss_params *params);
int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev);
int (*set_mcast_rate)(struct wiphy *wiphy, struct net_device *dev, int rate[NUM_NL80211_BANDS]);
int (*set_wiphy_params)(struct wiphy *wiphy, u32 changed);
int (*set_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, enum nl80211_tx_power_setting type, int mbm);
int (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, int *dbm);
void (*rfkill_poll)(struct wiphy *wiphy);
#ifdef CONFIG_NL80211_TESTMODE;
int (*testmode_cmd)(struct wiphy *wiphy, struct wireless_dev *wdev, void *data, int len);
int (*testmode_dump)(struct wiphy *wiphy, struct sk_buff *skb,struct netlink_callback *cb, void *data, int len);
#endif;
int (*set_bitrate_mask)(struct wiphy *wiphy,struct net_device *dev,unsigned int link_id,const u8 *peer, const struct cfg80211_bitrate_mask *mask);
int (*dump_survey)(struct wiphy *wiphy, struct net_device *netdev, int idx, struct survey_info *info);
int (*set_pmksa)(struct wiphy *wiphy, struct net_device *netdev, struct cfg80211_pmksa *pmksa);
int (*del_pmksa)(struct wiphy *wiphy, struct net_device *netdev, struct cfg80211_pmksa *pmksa);
int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev);
int (*remain_on_channel)(struct wiphy *wiphy,struct wireless_dev *wdev,struct ieee80211_channel *chan,unsigned int duration, u64 *cookie);
int (*cancel_remain_on_channel)(struct wiphy *wiphy,struct wireless_dev *wdev, u64 cookie);
int (*mgmt_tx)(struct wiphy *wiphy, struct wireless_dev *wdev,struct cfg80211_mgmt_tx_params *params, u64 *cookie);
int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy,struct wireless_dev *wdev, u64 cookie);
int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, bool enabled, int timeout);
int (*set_cqm_rssi_config)(struct wiphy *wiphy,struct net_device *dev, s32 rssi_thold, u32 rssi_hyst);
int (*set_cqm_rssi_range_config)(struct wiphy *wiphy,struct net_device *dev, s32 rssi_low, s32 rssi_high);
int (*set_cqm_txe_config)(struct wiphy *wiphy,struct net_device *dev, u32 rate, u32 pkts, u32 intvl);
void (*update_mgmt_frame_registrations)(struct wiphy *wiphy,struct wireless_dev *wdev, struct mgmt_frame_regs *upd);
int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant);
int (*get_antenna)(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant);
int (*sched_scan_start)(struct wiphy *wiphy,struct net_device *dev, struct cfg80211_sched_scan_request *request);
int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev, u64 reqid);
int (*set_rekey_data)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_gtk_rekey_data *data);
int (*tdls_mgmt)(struct wiphy *wiphy, struct net_device *dev,const u8 *peer, u8 action_code, u8 dialog_token,u16 status_code, u32 peer_capability, bool initiator, const u8 *buf, size_t len);
int (*tdls_oper)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, enum nl80211_tdls_operation oper);
int (*probe_client)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, u64 *cookie);
int (*set_noack_map)(struct wiphy *wiphy,struct net_device *dev, u16 noack_map);
int (*get_channel)(struct wiphy *wiphy,struct wireless_dev *wdev,unsigned int link_id, struct cfg80211_chan_def *chandef);
int (*start_p2p_device)(struct wiphy *wiphy, struct wireless_dev *wdev);
void (*stop_p2p_device)(struct wiphy *wiphy, struct wireless_dev *wdev);
int (*set_mac_acl)(struct wiphy *wiphy, struct net_device *dev, const struct cfg80211_acl_data *params);
int (*start_radar_detection)(struct wiphy *wiphy,struct net_device *dev,struct cfg80211_chan_def *chandef, u32 cac_time_ms);
void (*end_cac)(struct wiphy *wiphy, struct net_device *dev);
int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_update_ft_ies_params *ftie);
int (*crit_proto_start)(struct wiphy *wiphy,struct wireless_dev *wdev,enum nl80211_crit_proto_id protocol, u16 duration);
void (*crit_proto_stop)(struct wiphy *wiphy, struct wireless_dev *wdev);
int (*set_coalesce)(struct wiphy *wiphy, struct cfg80211_coalesce *coalesce);
int (*channel_switch)(struct wiphy *wiphy,struct net_device *dev, struct cfg80211_csa_settings *params);
int (*set_qos_map)(struct wiphy *wiphy,struct net_device *dev, struct cfg80211_qos_map *qos_map);
int (*set_ap_chanwidth)(struct wiphy *wiphy, struct net_device *dev,unsigned int link_id, struct cfg80211_chan_def *chandef);
int (*add_tx_ts)(struct wiphy *wiphy, struct net_device *dev,u8 tsid, const u8 *peer, u8 user_prio, u16 admitted_time);
int (*del_tx_ts)(struct wiphy *wiphy, struct net_device *dev, u8 tsid, const u8 *peer);
int (*tdls_channel_switch)(struct wiphy *wiphy,struct net_device *dev,const u8 *addr, u8 oper_class, struct cfg80211_chan_def *chandef);
void (*tdls_cancel_channel_switch)(struct wiphy *wiphy,struct net_device *dev, const u8 *addr);
int (*start_nan)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_conf *conf);
void (*stop_nan)(struct wiphy *wiphy, struct wireless_dev *wdev);
int (*add_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_func *nan_func);
void (*del_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie);
int (*nan_change_conf)(struct wiphy *wiphy,struct wireless_dev *wdev,struct cfg80211_nan_conf *conf, u32 changes);
int (*set_multicast_to_unicast)(struct wiphy *wiphy,struct net_device *dev, const bool enabled);
int (*get_txq_stats)(struct wiphy *wiphy,struct wireless_dev *wdev, struct cfg80211_txq_stats *txqstats);
int (*set_pmk)(struct wiphy *wiphy, struct net_device *dev, const struct cfg80211_pmk_conf *conf);
int (*del_pmk)(struct wiphy *wiphy, struct net_device *dev, const u8 *aa);
int (*external_auth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_external_auth_params *params);
int (*tx_control_port)(struct wiphy *wiphy,struct net_device *dev,const u8 *buf, size_t len,const u8 *dest, const __be16 proto,const bool noencrypt, int link_id, u64 *cookie);
int (*get_ftm_responder_stats)(struct wiphy *wiphy,struct net_device *dev, struct cfg80211_ftm_responder_stats *ftm_stats);
int (*start_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_pmsr_request *request);
void (*abort_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_pmsr_request *request);
int (*update_owe_info)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_update_owe_info *owe_info);
int (*probe_mesh_link)(struct wiphy *wiphy, struct net_device *dev, const u8 *buf, size_t len);
int (*set_tid_config)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_tid_config *tid_conf);
int (*reset_tid_config)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, u8 tids);
int (*set_sar_specs)(struct wiphy *wiphy, struct cfg80211_sar_specs *sar);
int (*color_change)(struct wiphy *wiphy,struct net_device *dev, struct cfg80211_color_change_settings *params);
int (*set_fils_aad)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_fils_aad *fils_aad);
int (*set_radar_background)(struct wiphy *wiphy, struct cfg80211_chan_def *chandef);
int (*add_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_parameters *params);
int (*mod_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_parameters *params);
int (*del_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_del_parameters *params);
};
Members
suspendwiphy device needs to be suspended. The variable wow will be
NULLor contain the enabled Wake-on-Wireless triggers that are configured for the device.resumewiphy device needs to be resumed
set_wakeupCalled when WoWLAN is enabled/disabled, use this callback to call device_set_wakeup_enable() to enable/disable wakeup from the device.
add_virtual_intfcreate a new virtual interface with the given name, must set the
struct wireless_dev’s iftype. Beware: You must create the new netdev in the wiphy’s network namespace! Returns thestruct wireless_dev, or an ERR_PTR. For P2P device wdevs, the driver must also set the address member in the wdev. This additionally holds the RTNL to be able to do netdev changes.del_virtual_intfremove the virtual interface This additionally holds the RTNL to be able to do netdev changes.
change_virtual_intfchange type/configuration of virtual interface, keep the
struct wireless_dev’s iftype updated. This additionally holds the RTNL to be able to do netdev changes.add_intf_linkAdd a new MLO link to the given interface. Note that the wdev->link[] data structure has been updated, so the new link address is available.
del_intf_linkRemove an MLO link from the given interface.
add_keyadd a key with the given parameters. mac_addr will be
NULLwhen adding a group key. link_id will be -1 for non-MLO connection. For MLO connection, link_id will be >= 0 for group key and -1 for pairwise key, mac_addr will be peer’s MLD address for MLO pairwise key.get_keyget information about the key with the given parameters. mac_addr will be
NULLwhen requesting information for a group key. All pointers given to the callback function need not be valid after it returns. This function should return an error if it is not possible to retrieve the key, -ENOENT if it doesn’t exist. link_id will be -1 for non-MLO connection. For MLO connection, link_id will be >= 0 for group key and -1 for pairwise key, mac_addr will be peer’s MLD address for MLO pairwise key.del_keyremove a key given the mac_addr (
NULLfor a group key) and key_index, return -ENOENT if the key doesn’t exist. link_id will be -1 for non-MLO connection. For MLO connection, link_id will be >= 0 for group key and -1 for pairwise key, mac_addr will be peer’s MLD address for MLO pairwise key.set_default_keyset the default key on an interface. link_id will be >= 0 for MLO connection and -1 for non-MLO connection.
set_default_mgmt_keyset the default management frame key on an interface. link_id will be >= 0 for MLO connection and -1 for non-MLO connection.
set_default_beacon_keyset the default Beacon frame key on an interface. link_id will be >= 0 for MLO connection and -1 for non-MLO connection.
start_apStart acting in AP mode defined by the parameters.
change_beaconChange the beacon parameters for an access point mode interface. This should reject the call when AP mode wasn’t started.
stop_apStop being an AP, including stopping beaconing.
add_stationAdd a new station.
del_stationRemove a station
change_stationModify a given station. Note that flags changes are not much validated in cfg80211, in particular the auth/assoc/authorized flags might come to the driver in invalid combinations – make sure to check them, also against the existing state! Drivers must call cfg80211_check_station_change() to validate the information.
get_stationget station information for the station identified by mac
dump_stationdump station callback – resume dump at index idx
add_mpathadd a fixed mesh path
del_mpathdelete a given mesh path
change_mpathchange a given mesh path
get_mpathget a mesh path for the given parameters
dump_mpathdump mesh path callback – resume dump at index idx
get_mppget a mesh proxy path for the given parameters
dump_mppdump mesh proxy path callback – resume dump at index idx
get_mesh_configGet the current mesh configuration
update_mesh_configUpdate mesh parameters on a running mesh. The mask is a bitfield which tells us which parameters to set, and which to leave alone.
join_meshjoin the mesh network with the specified parameters (invoked with the wireless_dev mutex held)
leave_meshleave the current mesh network (invoked with the wireless_dev mutex held)
join_ocbjoin the OCB network with the specified parameters (invoked with the wireless_dev mutex held)
leave_ocbleave the current OCB network (invoked with the wireless_dev mutex held)
change_bssModify parameters for a given BSS.
set_txq_paramsSet TX queue parameters
libertas_set_mesh_channelOnly for backward compatibility for libertas, as it doesn’t implement join_mesh and needs to set the channel to join the mesh instead.
set_monitor_channelSet the monitor mode channel for the device. If other interfaces are active this callback should reject the configuration. If no interfaces are active or the device is down, the channel should be stored for when a monitor interface becomes active.
scanRequest 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, callcfg80211_inform_bss(); you can call this outside the scan/scan_done bracket too.abort_scanTell the driver to abort an ongoing scan. The driver shall indicate the status of the scan through
cfg80211_scan_done().authRequest to authenticate with the specified peer (invoked with the wireless_dev mutex held)
assocRequest to (re)associate with the specified peer (invoked with the wireless_dev mutex held)
deauthRequest to deauthenticate from the specified peer (invoked with the wireless_dev mutex held)
disassocRequest to disassociate from the specified peer (invoked with the wireless_dev mutex held)
connectConnect to the ESS with the specified parameters. When connected, call
cfg80211_connect_result()/cfg80211_connect_bss()with status codeWLAN_STATUS_SUCCESS. If the connection fails for some reason, callcfg80211_connect_result()/cfg80211_connect_bss()with the status code from the AP orcfg80211_connect_timeout()if no frame with status code was received. The driver is allowed to roam to other BSSes within the ESS when the other BSS matches the connect parameters. When such roaming is initiated by the driver, the driver is expected to verify that the target matches the configured security parameters and to use Reassociation Request frame instead of Association Request frame. The connect function can also be used to request the driver to perform a specific roam when connected to an ESS. In that case, the prev_bssid parameter is set to the BSSID of the currently associated BSS as an indication of requesting reassociation. In both the driver-initiated and new connect() call initiated roaming cases, the result of roaming is indicated with a call tocfg80211_roamed(). (invoked with the wireless_dev mutex held)update_connect_paramsUpdate the connect parameters while connected to a BSS. The updated parameters can be used by driver/firmware for subsequent BSS selection (roaming) decisions and to form the Authentication/(Re)Association Request frames. This call does not request an immediate disassociation or reassociation with the current BSS, i.e., this impacts only subsequent (re)associations. The bits in changed are defined in
enum cfg80211_connect_params_changed. (invoked with the wireless_dev mutex held)disconnectDisconnect from the BSS/ESS or stop connection attempts if connection is in progress. Once done, call
cfg80211_disconnected()in case connection was already established (invoked with the wireless_dev mutex held), otherwise callcfg80211_connect_timeout().join_ibssJoin the specified IBSS (or create if necessary). Once done, call
cfg80211_ibss_joined(), also call that function when changing BSSID due to a merge. (invoked with the wireless_dev mutex held)leave_ibssLeave the IBSS. (invoked with the wireless_dev mutex held)
set_mcast_rateSet the specified multicast rate (only if vif is in ADHOC or MESH mode)
set_wiphy_paramsNotify that wiphy parameters have changed; changed bitfield (see
enum wiphy_params_flags) describes which values have changed. The actual parameter values are available instruct wiphy. If returning an error, no value should be changed.set_tx_powerset the transmit power according to the parameters, the power passed is in mBm, to get dBm use MBM_TO_DBM(). The wdev may be
NULLif power was set for the wiphy, and will always beNULLunless the driver supports per-vif TX power (as advertised by the nl80211 feature flag.)get_tx_powerstore the current TX power into the dbm variable; return 0 if successful
rfkill_pollpolls the hw rfkill line, use cfg80211 reporting functions to adjust rfkill hw state
testmode_cmdrun a test mode command; wdev may be
NULLtestmode_dumpImplement a test mode dump. The cb->args[2] and up may be used by the function, but 0 and 1 must not be touched. Additionally, return error codes other than -ENOBUFS and -ENOENT will terminate the dump and return to userspace with an error, so be careful. If any data was passed in from userspace then the data/len arguments will be present and point to the data contained in
NL80211_ATTR_TESTDATA.set_bitrate_maskset the bitrate mask configuration
dump_surveyget site survey information.
set_pmksaCache a PMKID for a BSSID. This is mostly useful for fullmac devices running firmwares capable of generating the (re) association RSN IE. It allows for faster roaming between WPA2 BSSIDs.
del_pmksaDelete a cached PMKID.
flush_pmksaFlush all cached PMKIDs.
remain_on_channelRequest the driver to remain awake on the specified channel for the specified duration to complete an off-channel operation (e.g., public action frame exchange). When the driver is ready on the requested channel, it must indicate this with an event notification by calling
cfg80211_ready_on_channel().cancel_remain_on_channelCancel an on-going remain-on-channel operation. This allows the operation to be terminated prior to timeout based on the duration value.
mgmt_txTransmit a management frame.
mgmt_tx_cancel_waitCancel the wait time from transmitting a management frame on another channel
set_power_mgmtConfigure WLAN power management. A timeout value of -1 allows the driver to adjust the dynamic ps timeout value.
set_cqm_rssi_configConfigure connection quality monitor RSSI threshold. After configuration, the driver should (soon) send an event indicating the current level is above/below the configured threshold; this may need some care when the configuration is changed (without first being disabled.)
set_cqm_rssi_range_configConfigure two RSSI thresholds in the connection quality monitor. An event is to be sent only when the signal level is found to be outside the two values. The driver should set
NL80211_EXT_FEATURE_CQM_RSSI_LISTif this method is implemented. If it is provided then there’s no point providing set_cqm_rssi_config.set_cqm_txe_configConfigure connection quality monitor TX error thresholds.
update_mgmt_frame_registrationsNotify the driver that management frame registrations were updated. The callback is allowed to sleep.
set_antennaSet antenna configuration (tx_ant, rx_ant) on the device. Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may reject TX/RX mask combinations they cannot support by returning -EINVAL (also see nl80211.h NL80211_ATTR_WIPHY_ANTENNA_TX).
get_antennaGet current antenna configuration from device (tx_ant, rx_ant).
sched_scan_startTell the driver to start a scheduled scan.
sched_scan_stopTell the driver to stop an ongoing scheduled scan with given request id. This call must stop the scheduled scan and be ready for starting a new one before it returns, i.e. sched_scan_start may be called immediately after that again and should not fail in that case. The driver should not call cfg80211_sched_scan_stopped() for a requested stop (when this method returns 0).
set_rekey_datagive the data necessary for GTK rekeying to the driver
tdls_mgmtTransmit a TDLS management frame.
tdls_operPerform a high-level TDLS operation (e.g. TDLS link setup).
probe_clientprobe an associated client, must return a cookie that it later passes to cfg80211_probe_status().
set_noack_mapSet the NoAck Map for the TIDs.
get_channelGet the current operating channel for the virtual interface. For monitor interfaces, it should return
NULLunless there’s a single current monitoring channel.start_p2p_deviceStart the given P2P device.
stop_p2p_deviceStop the given P2P device.
set_mac_aclSets MAC address control list in AP and P2P GO mode. Parameters include ACL policy, an array of MAC address of stations and the number of MAC addresses. If there is already a list in driver this new list replaces the existing one. Driver has to clear its ACL when number of MAC addresses entries is passed as 0. Drivers which advertise the support for MAC based ACL have to implement this callback.
start_radar_detectionStart radar detection in the driver.
end_cacEnd running CAC, probably because a related CAC was finished on another phy.
update_ft_iesProvide updated Fast BSS Transition information to the driver. If the SME is in the driver/firmware, this information can be used in building Authentication and Reassociation Request frames.
crit_proto_startIndicates a critical protocol needs more link reliability for a given duration (milliseconds). The protocol is provided so the driver can take the most appropriate actions.
crit_proto_stopIndicates critical protocol no longer needs increased link reliability. This operation can not fail.
set_coalesceSet coalesce parameters.
channel_switchinitiate channel-switch procedure (with CSA). Driver is responsible for veryfing if the switch is possible. Since this is inherently tricky driver may decide to disconnect an interface later with cfg80211_stop_iface(). This doesn’t mean driver can accept everything. It should do it’s best to verify requests and reject them as soon as possible.
set_qos_mapSet QoS mapping information to the driver
set_ap_chanwidthSet the AP (including P2P GO) mode channel width for the given interface This is used e.g. for dynamic HT 20/40 MHz channel width changes during the lifetime of the BSS.
add_tx_tsvalidate (if admitted_time is 0) or add a TX TS to the device with the given parameters; action frame exchange has been handled by userspace so this just has to modify the TX path to take the TS into account. If the admitted time is 0 just validate the parameters to make sure the session can be created at all; it is valid to just always return success for that but that may result in inefficient behaviour (handshake with the peer followed by immediate teardown when the addition is later rejected)
del_tx_tsremove an existing TX TS
tdls_channel_switchStart channel-switching with a TDLS peer. The driver is responsible for continually initiating channel-switching operations and returning to the base channel for communication with the AP.
tdls_cancel_channel_switchStop channel-switching with a TDLS peer. Both peers must be on the base channel when the call completes.
start_nanStart the NAN interface.
stop_nanStop the NAN interface.
add_nan_funcAdd a NAN function. Returns negative value on failure. On success nan_func ownership is transferred to the driver and it may access it outside of the scope of this function. The driver should free the nan_func when no longer needed by calling cfg80211_free_nan_func(). On success the driver should assign an instance_id in the provided nan_func.
del_nan_funcDelete a NAN function.
nan_change_confchanges NAN configuration. The changed parameters must be specified in changes (using
enum cfg80211_nan_conf_changes); All other parameters must be ignored.set_multicast_to_unicastconfigure multicast to unicast conversion for BSS
get_txq_statsGet TXQ stats for interface or phy. If wdev is
NULL, this function should return phy stats, and interface stats otherwise.set_pmkconfigure the PMK to be used for offloaded 802.1X 4-Way handshake. If not deleted through del_pmk the PMK remains valid until disconnect upon which the driver should clear it. (invoked with the wireless_dev mutex held)
del_pmkdelete the previously configured PMK for the given authenticator. (invoked with the wireless_dev mutex held)
external_authindicates result of offloaded authentication processing from user space
tx_control_portTX a control port frame (EAPoL). The noencrypt parameter tells the driver that the frame should not be encrypted.
get_ftm_responder_statsRetrieve FTM responder statistics, if available. Statistics should be cumulative, currently no way to reset is provided.
start_pmsrstart peer measurement (e.g. FTM)
abort_pmsrabort peer measurement
update_owe_infoProvide updated OWE info to driver. Driver implementing SME but offloading OWE processing to the user space will get the updated DH IE through this interface.
probe_mesh_linkProbe direct Mesh peer’s link quality by sending data frame and overrule HWMP path selection algorithm.
set_tid_configTID specific configuration, this can be peer or BSS specific This callback may sleep.
reset_tid_configReset TID specific configuration for the peer, for the given TIDs. This callback may sleep.
set_sar_specsUpdate the SAR (TX power) settings.
color_changeInitiate a color change.
set_fils_aadSet FILS AAD data to the AP driver so that the driver can use those to decrypt (Re)Association Request and encrypt (Re)Association Response frame.
set_radar_backgroundConfigure dedicated offchannel chain available for radar/CAC detection on some hw. This chain can’t be used to transmit or receive frames and it is bounded to a running wdev. Background radar/CAC detection allows to avoid the CAC downtime switching to a different channel during CAC detection on the selected radar channel. The caller is expected to set chandef pointer to NULL in order to disable background CAC/radar detection.
add_link_stationAdd a link to a station.
mod_link_stationModify a link of a station.
del_link_stationRemove a link of a station.
Description
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.
All operations are invoked with the wiphy mutex held. The RTNL may be held in addition (due to wireless extensions) but this cannot be relied upon except in cases where documented below. Note that due to ordering, the RTNL also cannot be acquired in any handlers.
-
void cfg80211_rx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len)¶
notification of processed MLME management frame
Parameters
struct net_device *devnetwork device
const u8 *bufauthentication frame (header + body)
size_t lenlength of the frame data
Description
This function is called whenever an authentication, disassociation or
deauthentication frame has been received and processed in station mode.
After being asked to authenticate via cfg80211_ops::auth() the driver must
call either this function or cfg80211_auth_timeout().
After being asked to associate via cfg80211_ops::assoc() the driver must
call either this function or cfg80211_auth_timeout().
While connected, the driver must calls this for received and processed
disassociation and deauthentication frames. If the frame couldn’t be used
because it was unprotected, the driver must call the function
cfg80211_rx_unprot_mlme_mgmt() instead.
This function may sleep. The caller must hold the corresponding wdev’s mutex.
-
void cfg80211_auth_timeout(struct net_device *dev, const u8 *addr)¶
notification of timed out authentication
Parameters
struct net_device *devnetwork device
const u8 *addrThe MAC address of the device with which the authentication timed out
Description
This function may sleep. The caller must hold the corresponding wdev’s mutex.
-
struct cfg80211_rx_assoc_resp¶
association response data
Definition:
struct cfg80211_rx_assoc_resp {
const u8 *buf;
size_t len;
const u8 *req_ies;
size_t req_ies_len;
int uapsd_queues;
const u8 *ap_mld_addr;
struct {
const u8 *addr;
struct cfg80211_bss *bss;
u16 status;
} links[IEEE80211_MLD_MAX_NUM_LINKS];
};
Members
buf(Re)Association Response frame (header + body)
lenlength of the frame data
req_iesinformation elements from the (Re)Association Request frame
req_ies_lenlength of req_ies data
uapsd_queuesbitmap of queues configured for uapsd. Same format as the AC bitmap in the QoS info field
ap_mld_addrAP MLD address (in case of MLO)
linksper-link information indexed by link ID, use links[0] for non-MLO connections
links.statusSet this (along with a BSS pointer) for links that were rejected by the AP.
-
void cfg80211_rx_assoc_resp(struct net_device *dev, struct cfg80211_rx_assoc_resp *data)
notification of processed association response
Parameters
struct net_device *devnetwork device
struct cfg80211_rx_assoc_resp *dataassociation response data,
struct cfg80211_rx_assoc_resp
Description
After being asked to associate via cfg80211_ops::assoc() the driver must
call either this function or cfg80211_auth_timeout().
This function may sleep. The caller must hold the corresponding wdev’s mutex.
-
void cfg80211_tx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len, bool reconnect)¶
notification of transmitted deauth/disassoc frame
Parameters
struct net_device *devnetwork device
const u8 *buf802.11 frame (header + body)
size_t lenlength of the frame data
bool reconnectimmediate reconnect is desired (include the nl80211 attribute)
Description
This function is called whenever deauthentication has been processed in station mode. This includes both received deauthentication frames and locally generated ones. This function may sleep. The caller must hold the corresponding wdev’s mutex.
-
void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, enum nl80211_key_type key_type, int key_id, const u8 *tsc, gfp_t gfp)¶
notification of Michael MIC failure (TKIP)
Parameters
struct net_device *devnetwork device
const u8 *addrThe source MAC address of the frame
enum nl80211_key_type key_typeThe key type that the received frame used
int key_idKey identifier (0..3). Can be -1 if missing.
const u8 *tscThe TSC value of the frame that generated the MIC failure (6 octets)
gfp_t gfpallocation flags
Description
This function is called whenever the local MAC detects a MIC failure in a received frame. This matches with MLME-MICHAELMICFAILURE.indication() primitive.
-
void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, struct ieee80211_channel *channel, gfp_t gfp)¶
notify cfg80211 that device joined an IBSS
Parameters
struct net_device *devnetwork device
const u8 *bssidthe BSSID of the IBSS joined
struct ieee80211_channel *channelthe channel of the IBSS joined
gfp_t gfpallocation flags
Description
This function notifies cfg80211 that the device joined an IBSS or switched to a different BSSID. Before this function can be called, either a beacon has to have been received from the IBSS, or one of the cfg80211_inform_bss{,_frame} functions must have been called with the locally generated beacon – this guarantees that there is always a scan result for this IBSS. cfg80211 will handle the rest.
-
struct cfg80211_connect_resp_params¶
Connection response params
Definition:
struct cfg80211_connect_resp_params {
int status;
const u8 *req_ie;
size_t req_ie_len;
const u8 *resp_ie;
size_t resp_ie_len;
struct cfg80211_fils_resp_params fils;
enum nl80211_timeout_reason timeout_reason;
const u8 *ap_mld_addr;
u16 valid_links;
struct {
const u8 *addr;
const u8 *bssid;
struct cfg80211_bss *bss;
u16 status;
} links[IEEE80211_MLD_MAX_NUM_LINKS];
};
Members
statusStatus code,
WLAN_STATUS_SUCCESSfor successful connection, useWLAN_STATUS_UNSPECIFIED_FAILUREif your device cannot give you the real status code for failures. If this call is used to report a failure due to a timeout (e.g., not receiving an Authentication frame from the AP) instead of an explicit rejection by the AP, -1 is used to indicate that this is a failure, but without a status code. timeout_reason is used to report the reason for the timeout in that case.req_ieAssociation request IEs (may be
NULL)req_ie_lenAssociation request IEs length
resp_ieAssociation response IEs (may be
NULL)resp_ie_lenAssociation response IEs length
filsFILS connection response parameters.
timeout_reasonReason for connection timeout. This is used when the connection fails due to a timeout instead of an explicit rejection from the AP.
NL80211_TIMEOUT_UNSPECIFIEDis used when the timeout reason is not known. This value is used only if status < 0 to indicate that the failure is due to a timeout and not due to explicit rejection by the AP. This value is ignored in other cases (status >= 0).ap_mld_addrFor MLO connection, MLD address of the AP. Otherwise
NULL.valid_linksFor MLO connection, BIT mask of the valid link ids. Otherwise zero.
linksFor MLO connection, contains link info for the valid links indicated using valid_links. For non-MLO connection, links[0] contains the connected AP info.
links.addrFor MLO connection, MAC address of the STA link. Otherwise
NULL.links.bssidFor MLO connection, MAC address of the AP link. For non-MLO connection, links[0].bssid points to the BSSID of the AP (may be
NULL).links.bssFor MLO connection, entry of bss to which STA link is connected. For non-MLO connection, links[0].bss points to entry of bss to which STA is connected. It can be obtained through cfg80211_get_bss() (may be
NULL). It is recommended to store the bss from the connect_request and hold a reference to it and return through this param to avoid a warning if the bss is expired during the connection, esp. for those drivers implementing connect op. Only one parameter among bssid and bss needs to be specified.links.statusper-link status code, to report a status code that’s not
WLAN_STATUS_SUCCESSfor a given link, it must also be in the valid_links bitmap and may have a BSS pointer (which is then released)
-
void cfg80211_connect_done(struct net_device *dev, struct cfg80211_connect_resp_params *params, gfp_t gfp)¶
notify cfg80211 of connection result
Parameters
struct net_device *devnetwork device
struct cfg80211_connect_resp_params *paramsconnection response parameters
gfp_t gfpallocation flags
Description
It should be called by the underlying driver once execution of the connection
request from connect() has been completed. This is similar to
cfg80211_connect_bss(), but takes a structure pointer for connection response
parameters. Only one of the functions among cfg80211_connect_bss(),
cfg80211_connect_result(), cfg80211_connect_timeout(),
and cfg80211_connect_done() should be called.
-
void cfg80211_connect_bss(struct net_device *dev, const u8 *bssid, struct cfg80211_bss *bss, const u8 *req_ie, size_t req_ie_len, const u8 *resp_ie, size_t resp_ie_len, int status, gfp_t gfp, enum nl80211_timeout_reason timeout_reason)¶
notify cfg80211 of connection result
Parameters
struct net_device *devnetwork device
const u8 *bssidthe BSSID of the AP
struct cfg80211_bss *bssEntry of bss to which STA got connected to, can be obtained through cfg80211_get_bss() (may be
NULL). But it is recommended to store the bss from the connect_request and hold a reference to it and return through this param to avoid a warning if the bss is expired during the connection, esp. for those drivers implementing connect op. Only one parameter among bssid and bss needs to be specified.const u8 *req_ieassociation request IEs (maybe be
NULL)size_t req_ie_lenassociation request IEs length
const u8 *resp_ieassociation response IEs (may be
NULL)size_t resp_ie_lenassoc response IEs length
int statusstatus code,
WLAN_STATUS_SUCCESSfor successful connection, useWLAN_STATUS_UNSPECIFIED_FAILUREif your device cannot give you the real status code for failures. If this call is used to report a failure due to a timeout (e.g., not receiving an Authentication frame from the AP) instead of an explicit rejection by the AP, -1 is used to indicate that this is a failure, but without a status code. timeout_reason is used to report the reason for the timeout in that case.gfp_t gfpallocation flags
enum nl80211_timeout_reason timeout_reasonreason for connection timeout. This is used when the connection fails due to a timeout instead of an explicit rejection from the AP.
NL80211_TIMEOUT_UNSPECIFIEDis used when the timeout reason is not known. This value is used only if status < 0 to indicate that the failure is due to a timeout and not due to explicit rejection by the AP. This value is ignored in other cases (status >= 0).
Description
It should be called by the underlying driver once execution of the connection
request from connect() has been completed. This is similar to
cfg80211_connect_result(), but with the option of identifying the exact bss
entry for the connection. Only one of the functions among
cfg80211_connect_bss(), cfg80211_connect_result(),
cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.
-
void cfg80211_connect_result(struct net_device *dev, const u8 *bssid, const u8 *req_ie, size_t req_ie_len, const u8 *resp_ie, size_t resp_ie_len, u16 status, gfp_t gfp)¶
notify cfg80211 of connection result
Parameters
struct net_device *devnetwork device
const u8 *bssidthe BSSID of the AP
const u8 *req_ieassociation request IEs (maybe be
NULL)size_t req_ie_lenassociation request IEs length
const u8 *resp_ieassociation response IEs (may be
NULL)size_t resp_ie_lenassoc response IEs length
u16 statusstatus code,
WLAN_STATUS_SUCCESSfor successful connection, useWLAN_STATUS_UNSPECIFIED_FAILUREif your device cannot give you the real status code for failures.gfp_t gfpallocation flags
Description
It should be called by the underlying driver once execution of the connection
request from connect() has been completed. This is similar to
cfg80211_connect_bss() which allows the exact bss entry to be specified. Only
one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(),
cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.
-
void cfg80211_connect_timeout(struct net_device *dev, const u8 *bssid, const u8 *req_ie, size_t req_ie_len, gfp_t gfp, enum nl80211_timeout_reason timeout_reason)¶
notify cfg80211 of connection timeout
Parameters
struct net_device *devnetwork device
const u8 *bssidthe BSSID of the AP
const u8 *req_ieassociation request IEs (maybe be
NULL)size_t req_ie_lenassociation request IEs length
gfp_t gfpallocation flags
enum nl80211_timeout_reason timeout_reasonreason for connection timeout.
Description
It should be called by the underlying driver whenever connect() has failed
in a sequence where no explicit authentication/association rejection was
received from the AP. This could happen, e.g., due to not being able to send
out the Authentication or Association Request frame or timing out while
waiting for the response. Only one of the functions among
cfg80211_connect_bss(), cfg80211_connect_result(),
cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.
-
void cfg80211_roamed(struct net_device *dev, struct cfg80211_roam_info *info, gfp_t gfp)¶
notify cfg80211 of roaming
Parameters
struct net_device *devnetwork device
struct cfg80211_roam_info *infoinformation about the new BSS. struct
cfg80211_roam_info.gfp_t gfpallocation flags
Description
This function may be called with the driver passing either the BSSID of the
new AP or passing the bss entry to avoid a race in timeout of the bss entry.
It should be called by the underlying driver whenever it roamed from one AP
to another while connected. Drivers which have roaming implemented in
firmware should pass the bss entry to avoid a race in bss entry timeout where
the bss entry of the new AP is seen in the driver, but gets timed out by the
time it is accessed in __cfg80211_roamed() due to delay in scheduling
rdev->event_work. In case of any failures, the reference is released
either in cfg80211_roamed() or in __cfg80211_romed(), Otherwise, it will be
released while disconnecting from the current bss.
-
void cfg80211_disconnected(struct net_device *dev, u16 reason, const u8 *ie, size_t ie_len, bool locally_generated, gfp_t gfp)¶
notify cfg80211 that connection was dropped
Parameters
struct net_device *devnetwork device
u16 reasonreason code for the disconnection, set it to 0 if unknown
const u8 *ieinformation elements of the deauth/disassoc frame (may be
NULL)size_t ie_lenlength of IEs
bool locally_generateddisconnection was requested locally
gfp_t gfpallocation flags
Description
After it calls this function, the driver should enter an idle state and not try to connect to any AP any more.
-
void cfg80211_ready_on_channel(struct wireless_dev *wdev, u64 cookie, struct ieee80211_channel *chan, unsigned int duration, gfp_t gfp)¶
notification of remain_on_channel start
Parameters
struct wireless_dev *wdevwireless device
u64 cookiethe request cookie
struct ieee80211_channel *chanThe current channel (from remain_on_channel request)
unsigned int durationDuration in milliseconds that the driver intents to remain on the channel
gfp_t gfpallocation flags
-
void cfg80211_remain_on_channel_expired(struct wireless_dev *wdev, u64 cookie, struct ieee80211_channel *chan, gfp_t gfp)¶
remain_on_channel duration expired
Parameters
struct wireless_dev *wdevwireless device
u64 cookiethe request cookie
struct ieee80211_channel *chanThe current channel (from remain_on_channel request)
gfp_t gfpallocation flags
-
void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr, struct station_info *sinfo, gfp_t gfp)¶
notify userspace about station
Parameters
struct net_device *devthe netdev
const u8 *mac_addrthe station’s address
struct station_info *sinfothe station information
gfp_t gfpallocation flags
-
bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm, const u8 *buf, size_t len, u32 flags)¶
notification of received, unprocessed management frame
Parameters
struct wireless_dev *wdevwireless device receiving the frame
int freqFrequency on which the frame was received in MHz
int sig_dbmsignal strength in dBm, or 0 if unknown
const u8 *bufManagement frame (header + body)
size_t lenlength of the frame data
u32 flagsflags, as defined in enum nl80211_rxmgmt_flags
Description
This function is called whenever an Action frame is received for a station mode interface, but is not processed in kernel.
Return
true if a user space application has registered for this frame.
For action frames, that makes it responsible for rejecting unrecognized
action frames; false otherwise, in which case for action frames the
driver is responsible for rejecting the frame.
-
void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie, const u8 *buf, size_t len, bool ack, gfp_t gfp)¶
notification of TX status for management frame
Parameters
struct wireless_dev *wdevwireless device receiving the frame
u64 cookieCookie returned by cfg80211_ops::mgmt_tx()
const u8 *bufManagement frame (header + body)
size_t lenlength of the frame data
bool ackWhether frame was acknowledged
gfp_t gfpcontext flags
Description
This function is called whenever a management frame was requested to be transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the transmission attempt.
-
void cfg80211_cqm_rssi_notify(struct net_device *dev, enum nl80211_cqm_rssi_threshold_event rssi_event, s32 rssi_level, gfp_t gfp)¶
connection quality monitoring rssi event
Parameters
struct net_device *devnetwork device
enum nl80211_cqm_rssi_threshold_event rssi_eventthe triggered RSSI event
s32 rssi_levelnew RSSI level value or 0 if not available
gfp_t gfpcontext flags
Description
This function is called when a configured connection quality monitoring rssi threshold reached event occurs.
-
void cfg80211_cqm_pktloss_notify(struct net_device *dev, const u8 *peer, u32 num_packets, gfp_t gfp)¶
notify userspace about packetloss to peer
Parameters
struct net_device *devnetwork device
const u8 *peerpeer’s MAC address
u32 num_packetshow many packets were lost – should be a fixed threshold but probably no less than maybe 50, or maybe a throughput dependent threshold (to account for temporary interference)
gfp_t gfpcontext flags
Scanning and BSS list handling¶
The scanning process itself is fairly simple, but cfg80211 offers quite a bit of helper functionality. To start a scan, the scan operation will be invoked with a scan definition. This scan definition contains the channels to scan, and the SSIDs to send probe requests for (including the wildcard, if desired). A passive scan is indicated by having no SSIDs to probe. Additionally, a scan request may contain extra information elements that should be added to the probe request. The IEs are guaranteed to be well-formed, and will not exceed the maximum length the driver advertised in the wiphy structure.
When scanning finds a BSS, cfg80211 needs to be notified of that, because it is responsible for maintaining the BSS list; the driver should not maintain a list itself. For this notification, various functions exist.
Since drivers do not maintain a BSS list, there are also a number of functions to search for a BSS and obtain information about it from the BSS structure cfg80211 maintains. The BSS list is also made available to userspace.
-
struct cfg80211_ssid¶
SSID description
Definition:
struct cfg80211_ssid {
u8 ssid[IEEE80211_MAX_SSID_LEN];
u8 ssid_len;
};
Members
ssidthe SSID
ssid_lenlength of the ssid
-
struct cfg80211_scan_request¶
scan request description
Definition:
struct cfg80211_scan_request {
struct cfg80211_ssid *ssids;
int n_ssids;
u32 n_channels;
enum nl80211_bss_scan_width scan_width;
const u8 *ie;
size_t ie_len;
u16 duration;
bool duration_mandatory;
u32 flags;
u32 rates[NUM_NL80211_BANDS];
struct wireless_dev *wdev;
u8 mac_addr[ETH_ALEN] ;
u8 mac_addr_mask[ETH_ALEN] ;
u8 bssid[ETH_ALEN] ;
struct wiphy *wiphy;
unsigned long scan_start;
struct cfg80211_scan_info info;
bool notified;
bool no_cck;
bool scan_6ghz;
u32 n_6ghz_params;
struct cfg80211_scan_6ghz_params *scan_6ghz_params;
struct ieee80211_channel *channels[];
};
Members
ssidsSSIDs to scan for (active scan only)
n_ssidsnumber of SSIDs
n_channelstotal number of channels to scan
scan_widthchannel width for scanning
ieoptional information element(s) to add into Probe Request or
NULLie_lenlength of ie in octets
durationhow long to listen on each channel, in TUs. If
duration_mandatoryis not set, this is the maximum dwell time and the actual dwell time may be shorter.duration_mandatoryif set, the scan duration must be as specified by the
durationfield.flagsbit field of flags controlling operation
ratesbitmap of rates to advertise for each band
wdevthe wireless device to scan for
mac_addrMAC address used with randomisation
mac_addr_maskMAC address mask used with randomisation, bits that are 0 in the mask should be randomised, bits that are 1 should be taken from the mac_addr
bssidBSSID to scan for (most commonly, the wildcard BSSID)
wiphythe wiphy this was for
scan_starttime (in jiffies) when the scan started
info(internal) information about completed scan
notified(internal) scan request was notified as done or aborted
no_cckused to send probe requests at non CCK rate in 2GHz band
scan_6ghzrelevant for split scan request only, true if this is the second scan request
n_6ghz_paramsnumber of 6 GHz params
scan_6ghz_params6 GHz params
channelschannels to scan on.
-
struct cfg80211_inform_bss¶
BSS inform data
Definition:
struct cfg80211_inform_bss {
struct ieee80211_channel *chan;
enum nl80211_bss_scan_width scan_width;
s32 signal;
u64 boottime_ns;
u64 parent_tsf;
u8 parent_bssid[ETH_ALEN] ;
u8 chains;
s8 chain_signal[IEEE80211_MAX_CHAINS];
};
Members
chanchannel the frame was received on
scan_widthscan width that was used
signalsignal strength value, according to the wiphy’s signal type
boottime_nstimestamp (CLOCK_BOOTTIME) when the information was received; should match the time when the frame was actually received by the device (not just by the host, in case it was buffered on the device) and be accurate to about 10ms. If the frame isn’t buffered, just passing the return value of
ktime_get_boottime_ns()is likely appropriate.parent_tsfthe time at the start of reception of the first octet of the timestamp field of the frame. The time is the TSF of the BSS specified by
parent_bssid.parent_bssidthe BSS according to which
parent_tsfis set. This is set to the BSS that requested the scan in which the beacon/probe was received.chainsbitmask for filled values in chain_signal.
chain_signalper-chain signal strength of last received BSS in dBm.
-
struct cfg80211_bss¶
BSS description
Definition:
struct cfg80211_bss {
struct ieee80211_channel *channel;
enum nl80211_bss_scan_width scan_width;
const struct cfg80211_bss_ies __rcu *ies;
const struct cfg80211_bss_ies __rcu *beacon_ies;
const struct cfg80211_bss_ies __rcu *proberesp_ies;
struct cfg80211_bss *hidden_beacon_bss;
struct cfg80211_bss *transmitted_bss;
struct list_head nontrans_list;
s32 signal;
u16 beacon_interval;
u16 capability;
u8 bssid[ETH_ALEN];
u8 chains;
s8 chain_signal[IEEE80211_MAX_CHAINS];
u8 bssid_index;
u8 max_bssid_indicator;
u8 priv[] ;
};
Members
channelchannel this BSS is on
scan_widthwidth of the control channel
iesthe information elements (Note that there is no guarantee that these are well-formed!); this is a pointer to either the beacon_ies or proberesp_ies depending on whether Probe Response frame has been received. It is always non-
NULL.beacon_iesthe information elements from the last Beacon frame (implementation note: if hidden_beacon_bss is set this struct doesn’t own the beacon_ies, but they’re just pointers to the ones from the hidden_beacon_bss struct)
proberesp_iesthe information elements from the last Probe Response frame
hidden_beacon_bssin case this BSS struct represents a probe response from a BSS that hides the SSID in its beacon, this points to the BSS struct that holds the beacon data. beacon_ies is still valid, of course, and points to the same data as hidden_beacon_bss->beacon_ies in that case.
transmitted_bsspointer to the transmitted BSS, if this is a non-transmitted one (multi-BSSID support)
nontrans_listlist of non-transmitted BSS, if this is a transmitted one (multi-BSSID support)
signalsignal strength value (type depends on the wiphy’s signal_type)
beacon_intervalthe beacon interval as from the frame
capabilitythe capability field in host byte order
bssidBSSID of the BSS
chainsbitmask for filled values in chain_signal.
chain_signalper-chain signal strength of last received BSS in dBm.
bssid_indexindex in the multiple BSS set
max_bssid_indicatormax number of members in the BSS set
privprivate area for driver use, has at least wiphy->bss_priv_size bytes
Description
This structure describes a BSS (which may also be a mesh network) for use in scan results and similar.
-
const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 id)¶
find IE with given ID
Parameters
struct cfg80211_bss *bssthe bss to search
u8 idthe element ID
Description
Note that the return value is an RCU-protected pointer, so
rcu_read_lock() must be held when calling this function.
Return
NULL if not found.
-
const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len)¶
find information element in data
Parameters
u8 eidelement ID
const u8 *iesdata consisting of IEs
int lenlength of data
Return
NULL if the element ID could not be found or if
the element is invalid (claims to be longer than the given
data), or a pointer to the first byte of the requested
element, that is the byte containing the element ID.
Note
There are no checks on the element length other than having to fit into the given data.
-
void cfg80211_scan_done(struct cfg80211_scan_request *request, struct cfg80211_scan_info *info)¶
notify that scan finished
Parameters
struct cfg80211_scan_request *requestthe corresponding scan request
struct cfg80211_scan_info *infoinformation about the completed scan
-
struct cfg80211_bss *cfg80211_inform_bss_frame_data(struct wiphy *wiphy, struct cfg80211_inform_bss *data, struct ieee80211_mgmt *mgmt, size_t len, gfp_t gfp)¶
inform cfg80211 of a received BSS frame
Parameters
struct wiphy *wiphythe wiphy reporting the BSS
struct cfg80211_inform_bss *datathe BSS metadata
struct ieee80211_mgmt *mgmtthe management frame (probe response or beacon)
size_t lenlength of the management frame
gfp_t gfpcontext flags
Description
This informs cfg80211 that BSS information was found and the BSS should be updated/added.
Return
A referenced struct, must be released with cfg80211_put_bss()!
Or NULL on error.
-
struct cfg80211_bss *cfg80211_inform_bss_data(struct wiphy *wiphy, struct cfg80211_inform_bss *data, enum cfg80211_bss_frame_type ftype, const u8 *bssid, u64 tsf, u16 capability, u16 beacon_interval, const u8 *ie, size_t ielen, gfp_t gfp)¶
inform cfg80211 of a new BSS
Parameters
struct wiphy *wiphythe wiphy reporting the BSS
struct cfg80211_inform_bss *datathe BSS metadata
enum cfg80211_bss_frame_type ftypeframe type (if known)
const u8 *bssidthe BSSID of the BSS
u64 tsfthe TSF sent by the peer in the beacon/probe response (or 0)
u16 capabilitythe capability field sent by the peer
u16 beacon_intervalthe beacon interval announced by the peer
const u8 *ieadditional IEs sent by the peer
size_t ielenlength of the additional IEs
gfp_t gfpcontext flags
Description
This informs cfg80211 that BSS information was found and the BSS should be updated/added.
Return
A referenced struct, must be released with cfg80211_put_bss()!
Or NULL on error.
-
void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss)¶
unlink BSS from internal data structures
Parameters
struct wiphy *wiphythe wiphy
struct cfg80211_bss *bssthe bss to remove
Description
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.
Utility functions¶
cfg80211 offers a number of utility functions that can be useful.
-
int ieee80211_channel_to_frequency(int chan, enum nl80211_band band)¶
convert channel number to frequency
Parameters
int chanchannel number
enum nl80211_band bandband, necessary due to channel number overlap
Return
The corresponding frequency (in MHz), or 0 if the conversion failed.
-
int ieee80211_frequency_to_channel(int freq)¶
convert frequency to channel number
Parameters
int freqcenter frequency in MHz
Return
The corresponding channel, or 0 if the conversion failed.
-
struct ieee80211_channel *ieee80211_get_channel(struct wiphy *wiphy, int freq)¶
get channel struct from wiphy for specified frequency
Parameters
struct wiphy *wiphythe
struct wiphyto get the channel forint freqthe center frequency (in MHz) of the channel
Return
The channel struct from wiphy at freq.
-
const struct ieee80211_rate *ieee80211_get_response_rate(struct ieee80211_supported_band *sband, u32 basic_rates, int bitrate)¶
get basic rate for a given rate
Parameters
struct ieee80211_supported_band *sbandthe band to look for rates in
u32 basic_ratesbitmap of basic rates
int bitratethe bitrate for which to find the basic rate
Return
The basic rate corresponding to a given bitrate, that is the next lower bitrate contained in the basic rate map, which is, for this function, given as a bitmap of indices of rates in the band’s bitrate table.
-
struct ieee80211_radiotap_iterator¶
tracks walk thru present radiotap args
Definition:
struct ieee80211_radiotap_iterator {
struct ieee80211_radiotap_header *_rtheader;
const struct ieee80211_radiotap_vendor_namespaces *_vns;
const struct ieee80211_radiotap_namespace *current_namespace;
unsigned char *_arg, *_next_ns_data;
__le32 *_next_bitmap;
unsigned char *this_arg;
int this_arg_index;
int this_arg_size;
int is_radiotap_ns;
int _max_length;
int _arg_index;
uint32_t _bitmap_shifter;
int _reset_on_ext;
};
Members
_rtheaderpointer to the radiotap header we are walking through
_vnsvendor namespace definitions
current_namespacepointer to the current namespace definition (or internally
NULLif the current namespace is unknown)_argnext argument pointer
_next_ns_databeginning of the next namespace’s data
_next_bitmapinternal pointer to next present u32
this_argpointer to current radiotap arg; it is valid after each call to ieee80211_radiotap_iterator_next() but also after ieee80211_radiotap_iterator_init() where it will point to the beginning of the actual data portion
this_arg_indexindex of current arg, valid after each successful call to ieee80211_radiotap_iterator_next()
this_arg_sizelength of the current arg, for convenience
is_radiotap_nsindicates whether the current namespace is the default radiotap namespace or not
_max_lengthlength of radiotap header in cpu byte ordering
_arg_indexnext argument index
_bitmap_shifterinternal shifter for curr u32 bitmap, b0 set == arg present
_reset_on_extinternal; reset the arg index to 0 when going to the next bitmap word
Description
Describes the radiotap parser state. Fields prefixed with an underscore must not be used by users of the parser, only by the parser internally.
Parameters
const struct sk_buff *skbthe frame
Description
Given an skb with a raw 802.11 header at the data pointer this function returns the 802.11 header length.
Return
The 802.11 header length in bytes (not including encryption headers). Or 0 if the data in the sk_buff is too short to contain a valid 802.11 header.
-
unsigned int ieee80211_hdrlen(__le16 fc)¶
get header length in bytes from frame control
Parameters
__le16 fcframe control field in little-endian format
Return
The header length in bytes.
Data path helpers¶
In addition to generic utilities, cfg80211 also offers functions that help implement the data path for devices that do not do the 802.11/802.3 conversion on the device.
-
int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr, enum nl80211_iftype iftype)¶
convert an 802.11 data frame to 802.3
Parameters
struct sk_buff *skbthe 802.11 data frame
const u8 *addrthe device MAC address
enum nl80211_iftype iftypethe virtual interface type
Return
0 on success. Non-zero on error.
-
void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list, const u8 *addr, enum nl80211_iftype iftype, const unsigned int extra_headroom, const u8 *check_da, const u8 *check_sa, bool mesh_control)¶
decode an IEEE 802.11n A-MSDU frame
Parameters
struct sk_buff *skbThe input A-MSDU frame without any headers.
struct sk_buff_head *listThe output list of 802.3 frames. It must be allocated and initialized by the caller.
const u8 *addrThe device MAC address.
enum nl80211_iftype iftypeThe device interface type.
const unsigned int extra_headroomThe hardware extra headroom for SKBs in the list.
const u8 *check_daDA to check in the inner ethernet header, or NULL
const u8 *check_saSA to check in the inner ethernet header, or NULL
bool mesh_controlA-MSDU subframe header includes the mesh control field
Description
Decode an IEEE 802.11 A-MSDU and convert it to a list of 802.3 frames. The list will be empty if the decode fails. The skb must be fully header-less before being passed in here; it is freed in this function.
-
unsigned int cfg80211_classify8021d(struct sk_buff *skb, struct cfg80211_qos_map *qos_map)¶
determine the 802.1p/1d tag for a data frame
Parameters
struct sk_buff *skbthe data frame
struct cfg80211_qos_map *qos_mapInterworking QoS mapping or
NULLif not in use
Return
The 802.1p/1d tag.
Regulatory enforcement infrastructure¶
TODO
-
int regulatory_hint(struct wiphy *wiphy, const char *alpha2)¶
driver hint to the wireless core a regulatory domain
Parameters
struct wiphy *wiphythe wireless device giving the hint (used only for reporting conflicts)
const char *alpha2the ISO/IEC 3166 alpha2 the driver claims its regulatory domain should be in. If rd is set this should be NULL. Note that if you set this to NULL you should still set rd->alpha2 to some accepted alpha2.
Description
Wireless drivers can use this function to hint to the wireless core what it believes should be the current regulatory domain by giving it an ISO/IEC 3166 alpha2 country code it knows its regulatory domain should be in or by providing a completely build regulatory domain. If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried for a regulatory domain structure for the respective country.
The wiphy must have been registered to cfg80211 prior to this call.
For cfg80211 drivers this means you must first use wiphy_register(),
for mac80211 drivers you must first use ieee80211_register_hw().
Drivers should check the return value, its possible you can get an -ENOMEM.
Return
0 on success. -ENOMEM.
-
void wiphy_apply_custom_regulatory(struct wiphy *wiphy, const struct ieee80211_regdomain *regd)¶
apply a custom driver regulatory domain
Parameters
struct wiphy *wiphythe wireless device we want to process the regulatory domain on
const struct ieee80211_regdomain *regdthe custom regulatory domain to use for this wiphy
Description
Drivers can sometimes have custom regulatory domains which do not apply to a specific country. Drivers can use this to apply such custom regulatory domains. This routine must be called prior to wiphy registration. The custom regulatory domain will be trusted completely and as such previous default channel settings will be disregarded. If no rule is found for a channel on the regulatory domain the channel will be disabled. Drivers using this for a wiphy should also set the wiphy flag REGULATORY_CUSTOM_REG or cfg80211 will set it for the wiphy that called this helper.
-
const struct ieee80211_reg_rule *freq_reg_info(struct wiphy *wiphy, u32 center_freq)¶
get regulatory information for the given frequency
Parameters
struct wiphy *wiphythe wiphy for which we want to process this rule for
u32 center_freqFrequency in KHz for which we want regulatory information for
Description
Use this function to get the regulatory rule for a specific frequency on a given wireless device. If the device has a specific regulatory domain it wants to follow we respect that unless a country IE has been received and processed already.
Return
A valid pointer, or, when an error occurs, for example if no rule can be found, the return value is encoded using ERR_PTR(). Use IS_ERR() to check and PTR_ERR() to obtain the numeric return value. The numeric return value will be -ERANGE if we determine the given center_freq does not even have a regulatory rule for a frequency range in the center_freq’s band. See freq_in_rule_band() for our current definition of a band – this is purely subjective and right now it’s 802.11 specific.
RFkill integration¶
RFkill integration in cfg80211 is almost invisible to drivers, as cfg80211 automatically registers an rfkill instance for each wireless device it knows about. Soft kill is also translated into disconnecting and turning all interfaces off, drivers are expected to turn off the device when all interfaces are down.
However, devices may have a hard RFkill line, in which case they also need to interact with the rfkill subsystem, via cfg80211. They can do this with a few helper functions documented here.
Parameters
struct wiphy *wiphythe wiphy
Parameters
struct wiphy *wiphythe wiphy
Test mode¶
Test mode is a set of utility functions to allow drivers to interact with driver-specific tools to aid, for instance, factory programming.
This chapter describes how drivers interact with it, for more information see the nl80211 book’s chapter on it.
-
struct sk_buff *cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, int approxlen)¶
allocate testmode reply
Parameters
struct wiphy *wiphythe wiphy
int approxlenan upper bound of the length of the data that will be put into the skb
Description
This function allocates and pre-fills an skb for a reply to the testmode command. Since it is intended for a reply, calling it outside of the testmode_cmd operation is invalid.
The returned skb is pre-filled with the wiphy index and set up in
a way that any data that is put into the skb (with skb_put(),
nla_put() or similar) will end up being within the
NL80211_ATTR_TESTDATA attribute, so all that needs to be done
with the skb is adding data for the corresponding userspace tool
which can then read that data out of the testdata attribute. You
must not modify the skb in any other way.
When done, call cfg80211_testmode_reply() with the skb and return
its error code as the result of the testmode_cmd operation.
Return
An allocated and pre-filled skb. NULL if any errors happen.
Parameters
struct sk_buff *skbThe skb, must have been allocated with
cfg80211_testmode_alloc_reply_skb()
Description
Since calling this function will usually be the last thing before returning from the testmode_cmd you should return the error code. Note that this function consumes the skb regardless of the return value.
Return
An error code or 0 on success.
-
struct sk_buff *cfg80211_testmode_alloc_event_skb(struct wiphy *wiphy, int approxlen, gfp_t gfp)¶
allocate testmode event
Parameters
struct wiphy *wiphythe wiphy
int approxlenan upper bound of the length of the data that will be put into the skb
gfp_t gfpallocation flags
Description
This function allocates and pre-fills an skb for an event on the testmode multicast group.
The returned skb is set up in the same way as with
cfg80211_testmode_alloc_reply_skb() but prepared for an event. As
there, you should simply add data to it that will then end up in the
NL80211_ATTR_TESTDATA attribute. Again, you must not modify the skb
in any other way.
When done filling the skb, call cfg80211_testmode_event() with the
skb to send the event.
Return
An allocated and pre-filled skb. NULL if any errors happen.
Parameters
struct sk_buff *skbThe skb, must have been allocated with
cfg80211_testmode_alloc_event_skb()gfp_t gfpallocation flags
Description
This function sends the given skb, which must have been allocated
by cfg80211_testmode_alloc_event_skb(), as an event. It always
consumes it.