Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/net/cfg80211.h
26289 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
#ifndef __NET_CFG80211_H
3
#define __NET_CFG80211_H
4
/*
5
* 802.11 device and configuration interface
6
*
7
* Copyright 2006-2010 Johannes Berg <[email protected]>
8
* Copyright 2013-2014 Intel Mobile Communications GmbH
9
* Copyright 2015-2017 Intel Deutschland GmbH
10
* Copyright (C) 2018-2025 Intel Corporation
11
*/
12
13
#include <linux/ethtool.h>
14
#include <uapi/linux/rfkill.h>
15
#include <linux/netdevice.h>
16
#include <linux/debugfs.h>
17
#include <linux/list.h>
18
#include <linux/bug.h>
19
#include <linux/netlink.h>
20
#include <linux/skbuff.h>
21
#include <linux/nl80211.h>
22
#include <linux/if_ether.h>
23
#include <linux/ieee80211.h>
24
#include <linux/net.h>
25
#include <linux/rfkill.h>
26
#include <net/regulatory.h>
27
28
/**
29
* DOC: Introduction
30
*
31
* cfg80211 is the configuration API for 802.11 devices in Linux. It bridges
32
* userspace and drivers, and offers some utility functionality associated
33
* with 802.11. cfg80211 must, directly or indirectly via mac80211, be used
34
* by all modern wireless drivers in Linux, so that they offer a consistent
35
* API through nl80211. For backward compatibility, cfg80211 also offers
36
* wireless extensions to userspace, but hides them from drivers completely.
37
*
38
* Additionally, cfg80211 contains code to help enforce regulatory spectrum
39
* use restrictions.
40
*/
41
42
43
/**
44
* DOC: Device registration
45
*
46
* In order for a driver to use cfg80211, it must register the hardware device
47
* with cfg80211. This happens through a number of hardware capability structs
48
* described below.
49
*
50
* The fundamental structure for each device is the 'wiphy', of which each
51
* instance describes a physical wireless device connected to the system. Each
52
* such wiphy can have zero, one, or many virtual interfaces associated with
53
* it, which need to be identified as such by pointing the network interface's
54
* @ieee80211_ptr pointer to a &struct wireless_dev which further describes
55
* the wireless part of the interface. Normally this struct is embedded in the
56
* network interface's private data area. Drivers can optionally allow creating
57
* or destroying virtual interfaces on the fly, but without at least one or the
58
* ability to create some the wireless device isn't useful.
59
*
60
* Each wiphy structure contains device capability information, and also has
61
* a pointer to the various operations the driver offers. The definitions and
62
* structures here describe these capabilities in detail.
63
*/
64
65
struct wiphy;
66
67
/*
68
* wireless hardware capability structures
69
*/
70
71
/**
72
* enum ieee80211_channel_flags - channel flags
73
*
74
* Channel flags set by the regulatory control code.
75
*
76
* @IEEE80211_CHAN_DISABLED: This channel is disabled.
77
* @IEEE80211_CHAN_NO_IR: do not initiate radiation, this includes
78
* sending probe requests or beaconing.
79
* @IEEE80211_CHAN_PSD: Power spectral density (in dBm) is set for this
80
* channel.
81
* @IEEE80211_CHAN_RADAR: Radar detection is required on this channel.
82
* @IEEE80211_CHAN_NO_HT40PLUS: extension channel above this channel
83
* is not permitted.
84
* @IEEE80211_CHAN_NO_HT40MINUS: extension channel below this channel
85
* is not permitted.
86
* @IEEE80211_CHAN_NO_OFDM: OFDM is not allowed on this channel.
87
* @IEEE80211_CHAN_NO_80MHZ: If the driver supports 80 MHz on the band,
88
* this flag indicates that an 80 MHz channel cannot use this
89
* channel as the control or any of the secondary channels.
90
* This may be due to the driver or due to regulatory bandwidth
91
* restrictions.
92
* @IEEE80211_CHAN_NO_160MHZ: If the driver supports 160 MHz on the band,
93
* this flag indicates that an 160 MHz channel cannot use this
94
* channel as the control or any of the secondary channels.
95
* This may be due to the driver or due to regulatory bandwidth
96
* restrictions.
97
* @IEEE80211_CHAN_INDOOR_ONLY: see %NL80211_FREQUENCY_ATTR_INDOOR_ONLY
98
* @IEEE80211_CHAN_IR_CONCURRENT: see %NL80211_FREQUENCY_ATTR_IR_CONCURRENT
99
* @IEEE80211_CHAN_NO_20MHZ: 20 MHz bandwidth is not permitted
100
* on this channel.
101
* @IEEE80211_CHAN_NO_10MHZ: 10 MHz bandwidth is not permitted
102
* on this channel.
103
* @IEEE80211_CHAN_NO_HE: HE operation is not permitted on this channel.
104
* @IEEE80211_CHAN_1MHZ: 1 MHz bandwidth is permitted
105
* on this channel.
106
* @IEEE80211_CHAN_2MHZ: 2 MHz bandwidth is permitted
107
* on this channel.
108
* @IEEE80211_CHAN_4MHZ: 4 MHz bandwidth is permitted
109
* on this channel.
110
* @IEEE80211_CHAN_8MHZ: 8 MHz bandwidth is permitted
111
* on this channel.
112
* @IEEE80211_CHAN_16MHZ: 16 MHz bandwidth is permitted
113
* on this channel.
114
* @IEEE80211_CHAN_NO_320MHZ: If the driver supports 320 MHz on the band,
115
* this flag indicates that a 320 MHz channel cannot use this
116
* channel as the control or any of the secondary channels.
117
* This may be due to the driver or due to regulatory bandwidth
118
* restrictions.
119
* @IEEE80211_CHAN_NO_EHT: EHT operation is not permitted on this channel.
120
* @IEEE80211_CHAN_DFS_CONCURRENT: See %NL80211_RRF_DFS_CONCURRENT
121
* @IEEE80211_CHAN_NO_6GHZ_VLP_CLIENT: Client connection with VLP AP
122
* not permitted using this channel
123
* @IEEE80211_CHAN_NO_6GHZ_AFC_CLIENT: Client connection with AFC AP
124
* not permitted using this channel
125
* @IEEE80211_CHAN_CAN_MONITOR: This channel can be used for monitor
126
* mode even in the presence of other (regulatory) restrictions,
127
* even if it is otherwise disabled.
128
* @IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP: Allow using this channel for AP operation
129
* with very low power (VLP), even if otherwise set to NO_IR.
130
* @IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY: Allow activity on a 20 MHz channel,
131
* even if otherwise set to NO_IR.
132
*/
133
enum ieee80211_channel_flags {
134
IEEE80211_CHAN_DISABLED = BIT(0),
135
IEEE80211_CHAN_NO_IR = BIT(1),
136
IEEE80211_CHAN_PSD = BIT(2),
137
IEEE80211_CHAN_RADAR = BIT(3),
138
IEEE80211_CHAN_NO_HT40PLUS = BIT(4),
139
IEEE80211_CHAN_NO_HT40MINUS = BIT(5),
140
IEEE80211_CHAN_NO_OFDM = BIT(6),
141
IEEE80211_CHAN_NO_80MHZ = BIT(7),
142
IEEE80211_CHAN_NO_160MHZ = BIT(8),
143
IEEE80211_CHAN_INDOOR_ONLY = BIT(9),
144
IEEE80211_CHAN_IR_CONCURRENT = BIT(10),
145
IEEE80211_CHAN_NO_20MHZ = BIT(11),
146
IEEE80211_CHAN_NO_10MHZ = BIT(12),
147
IEEE80211_CHAN_NO_HE = BIT(13),
148
IEEE80211_CHAN_1MHZ = BIT(14),
149
IEEE80211_CHAN_2MHZ = BIT(15),
150
IEEE80211_CHAN_4MHZ = BIT(16),
151
IEEE80211_CHAN_8MHZ = BIT(17),
152
IEEE80211_CHAN_16MHZ = BIT(18),
153
IEEE80211_CHAN_NO_320MHZ = BIT(19),
154
IEEE80211_CHAN_NO_EHT = BIT(20),
155
IEEE80211_CHAN_DFS_CONCURRENT = BIT(21),
156
IEEE80211_CHAN_NO_6GHZ_VLP_CLIENT = BIT(22),
157
IEEE80211_CHAN_NO_6GHZ_AFC_CLIENT = BIT(23),
158
IEEE80211_CHAN_CAN_MONITOR = BIT(24),
159
IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP = BIT(25),
160
IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY = BIT(26),
161
};
162
163
#define IEEE80211_CHAN_NO_HT40 \
164
(IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS)
165
166
#define IEEE80211_DFS_MIN_CAC_TIME_MS 60000
167
#define IEEE80211_DFS_MIN_NOP_TIME_MS (30 * 60 * 1000)
168
169
/**
170
* struct ieee80211_channel - channel definition
171
*
172
* This structure describes a single channel for use
173
* with cfg80211.
174
*
175
* @center_freq: center frequency in MHz
176
* @freq_offset: offset from @center_freq, in KHz
177
* @hw_value: hardware-specific value for the channel
178
* @flags: channel flags from &enum ieee80211_channel_flags.
179
* @orig_flags: channel flags at registration time, used by regulatory
180
* code to support devices with additional restrictions
181
* @band: band this channel belongs to.
182
* @max_antenna_gain: maximum antenna gain in dBi
183
* @max_power: maximum transmission power (in dBm)
184
* @max_reg_power: maximum regulatory transmission power (in dBm)
185
* @beacon_found: helper to regulatory code to indicate when a beacon
186
* has been found on this channel. Use regulatory_hint_found_beacon()
187
* to enable this, this is useful only on 5 GHz band.
188
* @orig_mag: internal use
189
* @orig_mpwr: internal use
190
* @dfs_state: current state of this channel. Only relevant if radar is required
191
* on this channel.
192
* @dfs_state_entered: timestamp (jiffies) when the dfs state was entered.
193
* @dfs_cac_ms: DFS CAC time in milliseconds, this is valid for DFS channels.
194
* @psd: power spectral density (in dBm)
195
*/
196
struct ieee80211_channel {
197
enum nl80211_band band;
198
u32 center_freq;
199
u16 freq_offset;
200
u16 hw_value;
201
u32 flags;
202
int max_antenna_gain;
203
int max_power;
204
int max_reg_power;
205
bool beacon_found;
206
u32 orig_flags;
207
int orig_mag, orig_mpwr;
208
enum nl80211_dfs_state dfs_state;
209
unsigned long dfs_state_entered;
210
unsigned int dfs_cac_ms;
211
s8 psd;
212
};
213
214
/**
215
* enum ieee80211_rate_flags - rate flags
216
*
217
* Hardware/specification flags for rates. These are structured
218
* in a way that allows using the same bitrate structure for
219
* different bands/PHY modes.
220
*
221
* @IEEE80211_RATE_SHORT_PREAMBLE: Hardware can send with short
222
* preamble on this bitrate; only relevant in 2.4GHz band and
223
* with CCK rates.
224
* @IEEE80211_RATE_MANDATORY_A: This bitrate is a mandatory rate
225
* when used with 802.11a (on the 5 GHz band); filled by the
226
* core code when registering the wiphy.
227
* @IEEE80211_RATE_MANDATORY_B: This bitrate is a mandatory rate
228
* when used with 802.11b (on the 2.4 GHz band); filled by the
229
* core code when registering the wiphy.
230
* @IEEE80211_RATE_MANDATORY_G: This bitrate is a mandatory rate
231
* when used with 802.11g (on the 2.4 GHz band); filled by the
232
* core code when registering the wiphy.
233
* @IEEE80211_RATE_ERP_G: This is an ERP rate in 802.11g mode.
234
* @IEEE80211_RATE_SUPPORTS_5MHZ: Rate can be used in 5 MHz mode
235
* @IEEE80211_RATE_SUPPORTS_10MHZ: Rate can be used in 10 MHz mode
236
*/
237
enum ieee80211_rate_flags {
238
IEEE80211_RATE_SHORT_PREAMBLE = BIT(0),
239
IEEE80211_RATE_MANDATORY_A = BIT(1),
240
IEEE80211_RATE_MANDATORY_B = BIT(2),
241
IEEE80211_RATE_MANDATORY_G = BIT(3),
242
IEEE80211_RATE_ERP_G = BIT(4),
243
IEEE80211_RATE_SUPPORTS_5MHZ = BIT(5),
244
IEEE80211_RATE_SUPPORTS_10MHZ = BIT(6),
245
};
246
247
/**
248
* enum ieee80211_bss_type - BSS type filter
249
*
250
* @IEEE80211_BSS_TYPE_ESS: Infrastructure BSS
251
* @IEEE80211_BSS_TYPE_PBSS: Personal BSS
252
* @IEEE80211_BSS_TYPE_IBSS: Independent BSS
253
* @IEEE80211_BSS_TYPE_MBSS: Mesh BSS
254
* @IEEE80211_BSS_TYPE_ANY: Wildcard value for matching any BSS type
255
*/
256
enum ieee80211_bss_type {
257
IEEE80211_BSS_TYPE_ESS,
258
IEEE80211_BSS_TYPE_PBSS,
259
IEEE80211_BSS_TYPE_IBSS,
260
IEEE80211_BSS_TYPE_MBSS,
261
IEEE80211_BSS_TYPE_ANY
262
};
263
264
/**
265
* enum ieee80211_privacy - BSS privacy filter
266
*
267
* @IEEE80211_PRIVACY_ON: privacy bit set
268
* @IEEE80211_PRIVACY_OFF: privacy bit clear
269
* @IEEE80211_PRIVACY_ANY: Wildcard value for matching any privacy setting
270
*/
271
enum ieee80211_privacy {
272
IEEE80211_PRIVACY_ON,
273
IEEE80211_PRIVACY_OFF,
274
IEEE80211_PRIVACY_ANY
275
};
276
277
#define IEEE80211_PRIVACY(x) \
278
((x) ? IEEE80211_PRIVACY_ON : IEEE80211_PRIVACY_OFF)
279
280
/**
281
* struct ieee80211_rate - bitrate definition
282
*
283
* This structure describes a bitrate that an 802.11 PHY can
284
* operate with. The two values @hw_value and @hw_value_short
285
* are only for driver use when pointers to this structure are
286
* passed around.
287
*
288
* @flags: rate-specific flags from &enum ieee80211_rate_flags
289
* @bitrate: bitrate in units of 100 Kbps
290
* @hw_value: driver/hardware value for this rate
291
* @hw_value_short: driver/hardware value for this rate when
292
* short preamble is used
293
*/
294
struct ieee80211_rate {
295
u32 flags;
296
u16 bitrate;
297
u16 hw_value, hw_value_short;
298
};
299
300
/**
301
* struct ieee80211_he_obss_pd - AP settings for spatial reuse
302
*
303
* @enable: is the feature enabled.
304
* @sr_ctrl: The SR Control field of SRP element.
305
* @non_srg_max_offset: non-SRG maximum tx power offset
306
* @min_offset: minimal tx power offset an associated station shall use
307
* @max_offset: maximum tx power offset an associated station shall use
308
* @bss_color_bitmap: bitmap that indicates the BSS color values used by
309
* members of the SRG
310
* @partial_bssid_bitmap: bitmap that indicates the partial BSSID values
311
* used by members of the SRG
312
*/
313
struct ieee80211_he_obss_pd {
314
bool enable;
315
u8 sr_ctrl;
316
u8 non_srg_max_offset;
317
u8 min_offset;
318
u8 max_offset;
319
u8 bss_color_bitmap[8];
320
u8 partial_bssid_bitmap[8];
321
};
322
323
/**
324
* struct cfg80211_he_bss_color - AP settings for BSS coloring
325
*
326
* @color: the current color.
327
* @enabled: HE BSS color is used
328
* @partial: define the AID equation.
329
*/
330
struct cfg80211_he_bss_color {
331
u8 color;
332
bool enabled;
333
bool partial;
334
};
335
336
/**
337
* struct ieee80211_sta_ht_cap - STA's HT capabilities
338
*
339
* This structure describes most essential parameters needed
340
* to describe 802.11n HT capabilities for an STA.
341
*
342
* @ht_supported: is HT supported by the STA
343
* @cap: HT capabilities map as described in 802.11n spec
344
* @ampdu_factor: Maximum A-MPDU length factor
345
* @ampdu_density: Minimum A-MPDU spacing
346
* @mcs: Supported MCS rates
347
*/
348
struct ieee80211_sta_ht_cap {
349
u16 cap; /* use IEEE80211_HT_CAP_ */
350
bool ht_supported;
351
u8 ampdu_factor;
352
u8 ampdu_density;
353
struct ieee80211_mcs_info mcs;
354
};
355
356
/**
357
* struct ieee80211_sta_vht_cap - STA's VHT capabilities
358
*
359
* This structure describes most essential parameters needed
360
* to describe 802.11ac VHT capabilities for an STA.
361
*
362
* @vht_supported: is VHT supported by the STA
363
* @cap: VHT capabilities map as described in 802.11ac spec
364
* @vht_mcs: Supported VHT MCS rates
365
*/
366
struct ieee80211_sta_vht_cap {
367
bool vht_supported;
368
u32 cap; /* use IEEE80211_VHT_CAP_ */
369
struct ieee80211_vht_mcs_info vht_mcs;
370
};
371
372
#define IEEE80211_HE_PPE_THRES_MAX_LEN 25
373
374
/**
375
* struct ieee80211_sta_he_cap - STA's HE capabilities
376
*
377
* This structure describes most essential parameters needed
378
* to describe 802.11ax HE capabilities for a STA.
379
*
380
* @has_he: true iff HE data is valid.
381
* @he_cap_elem: Fixed portion of the HE capabilities element.
382
* @he_mcs_nss_supp: The supported NSS/MCS combinations.
383
* @ppe_thres: Holds the PPE Thresholds data.
384
*/
385
struct ieee80211_sta_he_cap {
386
bool has_he;
387
struct ieee80211_he_cap_elem he_cap_elem;
388
struct ieee80211_he_mcs_nss_supp he_mcs_nss_supp;
389
u8 ppe_thres[IEEE80211_HE_PPE_THRES_MAX_LEN];
390
};
391
392
/**
393
* struct ieee80211_eht_mcs_nss_supp - EHT max supported NSS per MCS
394
*
395
* See P802.11be_D1.3 Table 9-401k - "Subfields of the Supported EHT-MCS
396
* and NSS Set field"
397
*
398
* @only_20mhz: MCS/NSS support for 20 MHz-only STA.
399
* @bw: MCS/NSS support for 80, 160 and 320 MHz
400
* @bw._80: MCS/NSS support for BW <= 80 MHz
401
* @bw._160: MCS/NSS support for BW = 160 MHz
402
* @bw._320: MCS/NSS support for BW = 320 MHz
403
*/
404
struct ieee80211_eht_mcs_nss_supp {
405
union {
406
struct ieee80211_eht_mcs_nss_supp_20mhz_only only_20mhz;
407
struct {
408
struct ieee80211_eht_mcs_nss_supp_bw _80;
409
struct ieee80211_eht_mcs_nss_supp_bw _160;
410
struct ieee80211_eht_mcs_nss_supp_bw _320;
411
} __packed bw;
412
} __packed;
413
} __packed;
414
415
#define IEEE80211_EHT_PPE_THRES_MAX_LEN 32
416
417
/**
418
* struct ieee80211_sta_eht_cap - STA's EHT capabilities
419
*
420
* This structure describes most essential parameters needed
421
* to describe 802.11be EHT capabilities for a STA.
422
*
423
* @has_eht: true iff EHT data is valid.
424
* @eht_cap_elem: Fixed portion of the eht capabilities element.
425
* @eht_mcs_nss_supp: The supported NSS/MCS combinations.
426
* @eht_ppe_thres: Holds the PPE Thresholds data.
427
*/
428
struct ieee80211_sta_eht_cap {
429
bool has_eht;
430
struct ieee80211_eht_cap_elem_fixed eht_cap_elem;
431
struct ieee80211_eht_mcs_nss_supp eht_mcs_nss_supp;
432
u8 eht_ppe_thres[IEEE80211_EHT_PPE_THRES_MAX_LEN];
433
};
434
435
/* sparse defines __CHECKER__; see Documentation/dev-tools/sparse.rst */
436
#ifdef __CHECKER__
437
/*
438
* This is used to mark the sband->iftype_data pointer which is supposed
439
* to be an array with special access semantics (per iftype), but a lot
440
* of code got it wrong in the past, so with this marking sparse will be
441
* noisy when the pointer is used directly.
442
*/
443
# define __iftd __attribute__((noderef, address_space(__iftype_data)))
444
#else
445
# define __iftd
446
#endif /* __CHECKER__ */
447
448
/**
449
* struct ieee80211_sband_iftype_data - sband data per interface type
450
*
451
* This structure encapsulates sband data that is relevant for the
452
* interface types defined in @types_mask. Each type in the
453
* @types_mask must be unique across all instances of iftype_data.
454
*
455
* @types_mask: interface types mask
456
* @he_cap: holds the HE capabilities
457
* @he_6ghz_capa: HE 6 GHz capabilities, must be filled in for a
458
* 6 GHz band channel (and 0 may be valid value).
459
* @eht_cap: STA's EHT capabilities
460
* @vendor_elems: vendor element(s) to advertise
461
* @vendor_elems.data: vendor element(s) data
462
* @vendor_elems.len: vendor element(s) length
463
*/
464
struct ieee80211_sband_iftype_data {
465
u16 types_mask;
466
struct ieee80211_sta_he_cap he_cap;
467
struct ieee80211_he_6ghz_capa he_6ghz_capa;
468
struct ieee80211_sta_eht_cap eht_cap;
469
struct {
470
const u8 *data;
471
unsigned int len;
472
} vendor_elems;
473
};
474
475
/**
476
* enum ieee80211_edmg_bw_config - allowed channel bandwidth configurations
477
*
478
* @IEEE80211_EDMG_BW_CONFIG_4: 2.16GHz
479
* @IEEE80211_EDMG_BW_CONFIG_5: 2.16GHz and 4.32GHz
480
* @IEEE80211_EDMG_BW_CONFIG_6: 2.16GHz, 4.32GHz and 6.48GHz
481
* @IEEE80211_EDMG_BW_CONFIG_7: 2.16GHz, 4.32GHz, 6.48GHz and 8.64GHz
482
* @IEEE80211_EDMG_BW_CONFIG_8: 2.16GHz and 2.16GHz + 2.16GHz
483
* @IEEE80211_EDMG_BW_CONFIG_9: 2.16GHz, 4.32GHz and 2.16GHz + 2.16GHz
484
* @IEEE80211_EDMG_BW_CONFIG_10: 2.16GHz, 4.32GHz, 6.48GHz and 2.16GHz+2.16GHz
485
* @IEEE80211_EDMG_BW_CONFIG_11: 2.16GHz, 4.32GHz, 6.48GHz, 8.64GHz and
486
* 2.16GHz+2.16GHz
487
* @IEEE80211_EDMG_BW_CONFIG_12: 2.16GHz, 2.16GHz + 2.16GHz and
488
* 4.32GHz + 4.32GHz
489
* @IEEE80211_EDMG_BW_CONFIG_13: 2.16GHz, 4.32GHz, 2.16GHz + 2.16GHz and
490
* 4.32GHz + 4.32GHz
491
* @IEEE80211_EDMG_BW_CONFIG_14: 2.16GHz, 4.32GHz, 6.48GHz, 2.16GHz + 2.16GHz
492
* and 4.32GHz + 4.32GHz
493
* @IEEE80211_EDMG_BW_CONFIG_15: 2.16GHz, 4.32GHz, 6.48GHz, 8.64GHz,
494
* 2.16GHz + 2.16GHz and 4.32GHz + 4.32GHz
495
*/
496
enum ieee80211_edmg_bw_config {
497
IEEE80211_EDMG_BW_CONFIG_4 = 4,
498
IEEE80211_EDMG_BW_CONFIG_5 = 5,
499
IEEE80211_EDMG_BW_CONFIG_6 = 6,
500
IEEE80211_EDMG_BW_CONFIG_7 = 7,
501
IEEE80211_EDMG_BW_CONFIG_8 = 8,
502
IEEE80211_EDMG_BW_CONFIG_9 = 9,
503
IEEE80211_EDMG_BW_CONFIG_10 = 10,
504
IEEE80211_EDMG_BW_CONFIG_11 = 11,
505
IEEE80211_EDMG_BW_CONFIG_12 = 12,
506
IEEE80211_EDMG_BW_CONFIG_13 = 13,
507
IEEE80211_EDMG_BW_CONFIG_14 = 14,
508
IEEE80211_EDMG_BW_CONFIG_15 = 15,
509
};
510
511
/**
512
* struct ieee80211_edmg - EDMG configuration
513
*
514
* This structure describes most essential parameters needed
515
* to describe 802.11ay EDMG configuration
516
*
517
* @channels: bitmap that indicates the 2.16 GHz channel(s)
518
* that are allowed to be used for transmissions.
519
* Bit 0 indicates channel 1, bit 1 indicates channel 2, etc.
520
* Set to 0 indicate EDMG not supported.
521
* @bw_config: Channel BW Configuration subfield encodes
522
* the allowed channel bandwidth configurations
523
*/
524
struct ieee80211_edmg {
525
u8 channels;
526
enum ieee80211_edmg_bw_config bw_config;
527
};
528
529
/**
530
* struct ieee80211_sta_s1g_cap - STA's S1G capabilities
531
*
532
* This structure describes most essential parameters needed
533
* to describe 802.11ah S1G capabilities for a STA.
534
*
535
* @s1g: is STA an S1G STA
536
* @cap: S1G capabilities information
537
* @nss_mcs: Supported NSS MCS set
538
*/
539
struct ieee80211_sta_s1g_cap {
540
bool s1g;
541
u8 cap[10]; /* use S1G_CAPAB_ */
542
u8 nss_mcs[5];
543
};
544
545
/**
546
* struct ieee80211_supported_band - frequency band definition
547
*
548
* This structure describes a frequency band a wiphy
549
* is able to operate in.
550
*
551
* @channels: Array of channels the hardware can operate with
552
* in this band.
553
* @band: the band this structure represents
554
* @n_channels: Number of channels in @channels
555
* @bitrates: Array of bitrates the hardware can operate with
556
* in this band. Must be sorted to give a valid "supported
557
* rates" IE, i.e. CCK rates first, then OFDM.
558
* @n_bitrates: Number of bitrates in @bitrates
559
* @ht_cap: HT capabilities in this band
560
* @vht_cap: VHT capabilities in this band
561
* @s1g_cap: S1G capabilities in this band
562
* @edmg_cap: EDMG capabilities in this band
563
* @s1g_cap: S1G capabilities in this band (S1G band only, of course)
564
* @n_iftype_data: number of iftype data entries
565
* @iftype_data: interface type data entries. Note that the bits in
566
* @types_mask inside this structure cannot overlap (i.e. only
567
* one occurrence of each type is allowed across all instances of
568
* iftype_data).
569
*/
570
struct ieee80211_supported_band {
571
struct ieee80211_channel *channels;
572
struct ieee80211_rate *bitrates;
573
enum nl80211_band band;
574
int n_channels;
575
int n_bitrates;
576
struct ieee80211_sta_ht_cap ht_cap;
577
struct ieee80211_sta_vht_cap vht_cap;
578
struct ieee80211_sta_s1g_cap s1g_cap;
579
struct ieee80211_edmg edmg_cap;
580
u16 n_iftype_data;
581
const struct ieee80211_sband_iftype_data __iftd *iftype_data;
582
};
583
584
/**
585
* _ieee80211_set_sband_iftype_data - set sband iftype data array
586
* @sband: the sband to initialize
587
* @iftd: the iftype data array pointer
588
* @n_iftd: the length of the iftype data array
589
*
590
* Set the sband iftype data array; use this where the length cannot
591
* be derived from the ARRAY_SIZE() of the argument, but prefer
592
* ieee80211_set_sband_iftype_data() where it can be used.
593
*/
594
static inline void
595
_ieee80211_set_sband_iftype_data(struct ieee80211_supported_band *sband,
596
const struct ieee80211_sband_iftype_data *iftd,
597
u16 n_iftd)
598
{
599
sband->iftype_data = (const void __iftd __force *)iftd;
600
sband->n_iftype_data = n_iftd;
601
}
602
603
/**
604
* ieee80211_set_sband_iftype_data - set sband iftype data array
605
* @sband: the sband to initialize
606
* @iftd: the iftype data array
607
*/
608
#define ieee80211_set_sband_iftype_data(sband, iftd) \
609
_ieee80211_set_sband_iftype_data(sband, iftd, ARRAY_SIZE(iftd))
610
611
/**
612
* for_each_sband_iftype_data - iterate sband iftype data entries
613
* @sband: the sband whose iftype_data array to iterate
614
* @i: iterator counter
615
* @iftd: iftype data pointer to set
616
*/
617
#define for_each_sband_iftype_data(sband, i, iftd) \
618
for (i = 0, iftd = (const void __force *)&(sband)->iftype_data[i]; \
619
i < (sband)->n_iftype_data; \
620
i++, iftd = (const void __force *)&(sband)->iftype_data[i])
621
622
/**
623
* ieee80211_get_sband_iftype_data - return sband data for a given iftype
624
* @sband: the sband to search for the STA on
625
* @iftype: enum nl80211_iftype
626
*
627
* Return: pointer to struct ieee80211_sband_iftype_data, or NULL is none found
628
*/
629
static inline const struct ieee80211_sband_iftype_data *
630
ieee80211_get_sband_iftype_data(const struct ieee80211_supported_band *sband,
631
u8 iftype)
632
{
633
const struct ieee80211_sband_iftype_data *data;
634
int i;
635
636
if (WARN_ON(iftype >= NUM_NL80211_IFTYPES))
637
return NULL;
638
639
if (iftype == NL80211_IFTYPE_AP_VLAN)
640
iftype = NL80211_IFTYPE_AP;
641
642
for_each_sband_iftype_data(sband, i, data) {
643
if (data->types_mask & BIT(iftype))
644
return data;
645
}
646
647
return NULL;
648
}
649
650
/**
651
* ieee80211_get_he_iftype_cap - return HE capabilities for an sband's iftype
652
* @sband: the sband to search for the iftype on
653
* @iftype: enum nl80211_iftype
654
*
655
* Return: pointer to the struct ieee80211_sta_he_cap, or NULL is none found
656
*/
657
static inline const struct ieee80211_sta_he_cap *
658
ieee80211_get_he_iftype_cap(const struct ieee80211_supported_band *sband,
659
u8 iftype)
660
{
661
const struct ieee80211_sband_iftype_data *data =
662
ieee80211_get_sband_iftype_data(sband, iftype);
663
664
if (data && data->he_cap.has_he)
665
return &data->he_cap;
666
667
return NULL;
668
}
669
670
/**
671
* ieee80211_get_he_6ghz_capa - return HE 6 GHz capabilities
672
* @sband: the sband to search for the STA on
673
* @iftype: the iftype to search for
674
*
675
* Return: the 6GHz capabilities
676
*/
677
static inline __le16
678
ieee80211_get_he_6ghz_capa(const struct ieee80211_supported_band *sband,
679
enum nl80211_iftype iftype)
680
{
681
const struct ieee80211_sband_iftype_data *data =
682
ieee80211_get_sband_iftype_data(sband, iftype);
683
684
if (WARN_ON(!data || !data->he_cap.has_he))
685
return 0;
686
687
return data->he_6ghz_capa.capa;
688
}
689
690
/**
691
* ieee80211_get_eht_iftype_cap - return ETH capabilities for an sband's iftype
692
* @sband: the sband to search for the iftype on
693
* @iftype: enum nl80211_iftype
694
*
695
* Return: pointer to the struct ieee80211_sta_eht_cap, or NULL is none found
696
*/
697
static inline const struct ieee80211_sta_eht_cap *
698
ieee80211_get_eht_iftype_cap(const struct ieee80211_supported_band *sband,
699
enum nl80211_iftype iftype)
700
{
701
const struct ieee80211_sband_iftype_data *data =
702
ieee80211_get_sband_iftype_data(sband, iftype);
703
704
if (data && data->eht_cap.has_eht)
705
return &data->eht_cap;
706
707
return NULL;
708
}
709
710
/**
711
* wiphy_read_of_freq_limits - read frequency limits from device tree
712
*
713
* @wiphy: the wireless device to get extra limits for
714
*
715
* Some devices may have extra limitations specified in DT. This may be useful
716
* for chipsets that normally support more bands but are limited due to board
717
* design (e.g. by antennas or external power amplifier).
718
*
719
* This function reads info from DT and uses it to *modify* channels (disable
720
* unavailable ones). It's usually a *bad* idea to use it in drivers with
721
* shared channel data as DT limitations are device specific. You should make
722
* sure to call it only if channels in wiphy are copied and can be modified
723
* without affecting other devices.
724
*
725
* As this function access device node it has to be called after set_wiphy_dev.
726
* It also modifies channels so they have to be set first.
727
* If using this helper, call it before wiphy_register().
728
*/
729
#ifdef CONFIG_OF
730
void wiphy_read_of_freq_limits(struct wiphy *wiphy);
731
#else /* CONFIG_OF */
732
static inline void wiphy_read_of_freq_limits(struct wiphy *wiphy)
733
{
734
}
735
#endif /* !CONFIG_OF */
736
737
738
/*
739
* Wireless hardware/device configuration structures and methods
740
*/
741
742
/**
743
* DOC: Actions and configuration
744
*
745
* Each wireless device and each virtual interface offer a set of configuration
746
* operations and other actions that are invoked by userspace. Each of these
747
* actions is described in the operations structure, and the parameters these
748
* operations use are described separately.
749
*
750
* Additionally, some operations are asynchronous and expect to get status
751
* information via some functions that drivers need to call.
752
*
753
* Scanning and BSS list handling with its associated functionality is described
754
* in a separate chapter.
755
*/
756
757
#define VHT_MUMIMO_GROUPS_DATA_LEN (WLAN_MEMBERSHIP_LEN +\
758
WLAN_USER_POSITION_LEN)
759
760
/**
761
* struct vif_params - describes virtual interface parameters
762
* @flags: monitor interface flags, unchanged if 0, otherwise
763
* %MONITOR_FLAG_CHANGED will be set
764
* @use_4addr: use 4-address frames
765
* @macaddr: address to use for this virtual interface.
766
* If this parameter is set to zero address the driver may
767
* determine the address as needed.
768
* This feature is only fully supported by drivers that enable the
769
* %NL80211_FEATURE_MAC_ON_CREATE flag. Others may support creating
770
** only p2p devices with specified MAC.
771
* @vht_mumimo_groups: MU-MIMO groupID, used for monitoring MU-MIMO packets
772
* belonging to that MU-MIMO groupID; %NULL if not changed
773
* @vht_mumimo_follow_addr: MU-MIMO follow address, used for monitoring
774
* MU-MIMO packets going to the specified station; %NULL if not changed
775
*/
776
struct vif_params {
777
u32 flags;
778
int use_4addr;
779
u8 macaddr[ETH_ALEN];
780
const u8 *vht_mumimo_groups;
781
const u8 *vht_mumimo_follow_addr;
782
};
783
784
/**
785
* struct key_params - key information
786
*
787
* Information about a key
788
*
789
* @key: key material
790
* @key_len: length of key material
791
* @cipher: cipher suite selector
792
* @seq: sequence counter (IV/PN) for TKIP and CCMP keys, only used
793
* with the get_key() callback, must be in little endian,
794
* length given by @seq_len.
795
* @seq_len: length of @seq.
796
* @vlan_id: vlan_id for VLAN group key (if nonzero)
797
* @mode: key install mode (RX_TX, NO_TX or SET_TX)
798
*/
799
struct key_params {
800
const u8 *key;
801
const u8 *seq;
802
int key_len;
803
int seq_len;
804
u16 vlan_id;
805
u32 cipher;
806
enum nl80211_key_mode mode;
807
};
808
809
/**
810
* struct cfg80211_chan_def - channel definition
811
* @chan: the (control) channel
812
* @width: channel width
813
* @center_freq1: center frequency of first segment
814
* @center_freq2: center frequency of second segment
815
* (only with 80+80 MHz)
816
* @edmg: define the EDMG channels configuration.
817
* If edmg is requested (i.e. the .channels member is non-zero),
818
* chan will define the primary channel and all other
819
* parameters are ignored.
820
* @freq1_offset: offset from @center_freq1, in KHz
821
* @punctured: mask of the punctured 20 MHz subchannels, with
822
* bits turned on being disabled (punctured); numbered
823
* from lower to higher frequency (like in the spec)
824
*/
825
struct cfg80211_chan_def {
826
struct ieee80211_channel *chan;
827
enum nl80211_chan_width width;
828
u32 center_freq1;
829
u32 center_freq2;
830
struct ieee80211_edmg edmg;
831
u16 freq1_offset;
832
u16 punctured;
833
};
834
835
/*
836
* cfg80211_bitrate_mask - masks for bitrate control
837
*/
838
struct cfg80211_bitrate_mask {
839
struct {
840
u32 legacy;
841
u8 ht_mcs[IEEE80211_HT_MCS_MASK_LEN];
842
u16 vht_mcs[NL80211_VHT_NSS_MAX];
843
u16 he_mcs[NL80211_HE_NSS_MAX];
844
enum nl80211_txrate_gi gi;
845
enum nl80211_he_gi he_gi;
846
enum nl80211_he_ltf he_ltf;
847
} control[NUM_NL80211_BANDS];
848
};
849
850
851
/**
852
* struct cfg80211_tid_cfg - TID specific configuration
853
* @config_override: Flag to notify driver to reset TID configuration
854
* of the peer.
855
* @tids: bitmap of TIDs to modify
856
* @mask: bitmap of attributes indicating which parameter changed,
857
* similar to &nl80211_tid_config_supp.
858
* @noack: noack configuration value for the TID
859
* @retry_long: retry count value
860
* @retry_short: retry count value
861
* @ampdu: Enable/Disable MPDU aggregation
862
* @rtscts: Enable/Disable RTS/CTS
863
* @amsdu: Enable/Disable MSDU aggregation
864
* @txrate_type: Tx bitrate mask type
865
* @txrate_mask: Tx bitrate to be applied for the TID
866
*/
867
struct cfg80211_tid_cfg {
868
bool config_override;
869
u8 tids;
870
u64 mask;
871
enum nl80211_tid_config noack;
872
u8 retry_long, retry_short;
873
enum nl80211_tid_config ampdu;
874
enum nl80211_tid_config rtscts;
875
enum nl80211_tid_config amsdu;
876
enum nl80211_tx_rate_setting txrate_type;
877
struct cfg80211_bitrate_mask txrate_mask;
878
};
879
880
/**
881
* struct cfg80211_tid_config - TID configuration
882
* @peer: Station's MAC address
883
* @n_tid_conf: Number of TID specific configurations to be applied
884
* @tid_conf: Configuration change info
885
*/
886
struct cfg80211_tid_config {
887
const u8 *peer;
888
u32 n_tid_conf;
889
struct cfg80211_tid_cfg tid_conf[] __counted_by(n_tid_conf);
890
};
891
892
/**
893
* struct cfg80211_fils_aad - FILS AAD data
894
* @macaddr: STA MAC address
895
* @kek: FILS KEK
896
* @kek_len: FILS KEK length
897
* @snonce: STA Nonce
898
* @anonce: AP Nonce
899
*/
900
struct cfg80211_fils_aad {
901
const u8 *macaddr;
902
const u8 *kek;
903
u8 kek_len;
904
const u8 *snonce;
905
const u8 *anonce;
906
};
907
908
/**
909
* struct cfg80211_set_hw_timestamp - enable/disable HW timestamping
910
* @macaddr: peer MAC address. NULL to enable/disable HW timestamping for all
911
* addresses.
912
* @enable: if set, enable HW timestamping for the specified MAC address.
913
* Otherwise disable HW timestamping for the specified MAC address.
914
*/
915
struct cfg80211_set_hw_timestamp {
916
const u8 *macaddr;
917
bool enable;
918
};
919
920
/**
921
* cfg80211_get_chandef_type - return old channel type from chandef
922
* @chandef: the channel definition
923
*
924
* Return: The old channel type (NOHT, HT20, HT40+/-) from a given
925
* chandef, which must have a bandwidth allowing this conversion.
926
*/
927
static inline enum nl80211_channel_type
928
cfg80211_get_chandef_type(const struct cfg80211_chan_def *chandef)
929
{
930
switch (chandef->width) {
931
case NL80211_CHAN_WIDTH_20_NOHT:
932
return NL80211_CHAN_NO_HT;
933
case NL80211_CHAN_WIDTH_20:
934
return NL80211_CHAN_HT20;
935
case NL80211_CHAN_WIDTH_40:
936
if (chandef->center_freq1 > chandef->chan->center_freq)
937
return NL80211_CHAN_HT40PLUS;
938
return NL80211_CHAN_HT40MINUS;
939
default:
940
WARN_ON(1);
941
return NL80211_CHAN_NO_HT;
942
}
943
}
944
945
/**
946
* cfg80211_chandef_create - create channel definition using channel type
947
* @chandef: the channel definition struct to fill
948
* @channel: the control channel
949
* @chantype: the channel type
950
*
951
* Given a channel type, create a channel definition.
952
*/
953
void cfg80211_chandef_create(struct cfg80211_chan_def *chandef,
954
struct ieee80211_channel *channel,
955
enum nl80211_channel_type chantype);
956
957
/**
958
* cfg80211_chandef_identical - check if two channel definitions are identical
959
* @chandef1: first channel definition
960
* @chandef2: second channel definition
961
*
962
* Return: %true if the channels defined by the channel definitions are
963
* identical, %false otherwise.
964
*/
965
static inline bool
966
cfg80211_chandef_identical(const struct cfg80211_chan_def *chandef1,
967
const struct cfg80211_chan_def *chandef2)
968
{
969
return (chandef1->chan == chandef2->chan &&
970
chandef1->width == chandef2->width &&
971
chandef1->center_freq1 == chandef2->center_freq1 &&
972
chandef1->freq1_offset == chandef2->freq1_offset &&
973
chandef1->center_freq2 == chandef2->center_freq2 &&
974
chandef1->punctured == chandef2->punctured);
975
}
976
977
/**
978
* cfg80211_chandef_is_edmg - check if chandef represents an EDMG channel
979
*
980
* @chandef: the channel definition
981
*
982
* Return: %true if EDMG defined, %false otherwise.
983
*/
984
static inline bool
985
cfg80211_chandef_is_edmg(const struct cfg80211_chan_def *chandef)
986
{
987
return chandef->edmg.channels || chandef->edmg.bw_config;
988
}
989
990
/**
991
* cfg80211_chandef_compatible - check if two channel definitions are compatible
992
* @chandef1: first channel definition
993
* @chandef2: second channel definition
994
*
995
* Return: %NULL if the given channel definitions are incompatible,
996
* chandef1 or chandef2 otherwise.
997
*/
998
const struct cfg80211_chan_def *
999
cfg80211_chandef_compatible(const struct cfg80211_chan_def *chandef1,
1000
const struct cfg80211_chan_def *chandef2);
1001
1002
/**
1003
* nl80211_chan_width_to_mhz - get the channel width in MHz
1004
* @chan_width: the channel width from &enum nl80211_chan_width
1005
*
1006
* Return: channel width in MHz if the chan_width from &enum nl80211_chan_width
1007
* is valid. -1 otherwise.
1008
*/
1009
int nl80211_chan_width_to_mhz(enum nl80211_chan_width chan_width);
1010
1011
/**
1012
* cfg80211_chandef_get_width - return chandef width in MHz
1013
* @c: chandef to return bandwidth for
1014
* Return: channel width in MHz for the given chandef; note that it returns
1015
* 80 for 80+80 configurations
1016
*/
1017
static inline int cfg80211_chandef_get_width(const struct cfg80211_chan_def *c)
1018
{
1019
return nl80211_chan_width_to_mhz(c->width);
1020
}
1021
1022
/**
1023
* cfg80211_chandef_valid - check if a channel definition is valid
1024
* @chandef: the channel definition to check
1025
* Return: %true if the channel definition is valid. %false otherwise.
1026
*/
1027
bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef);
1028
1029
/**
1030
* cfg80211_chandef_usable - check if secondary channels can be used
1031
* @wiphy: the wiphy to validate against
1032
* @chandef: the channel definition to check
1033
* @prohibited_flags: the regulatory channel flags that must not be set
1034
* Return: %true if secondary channels are usable. %false otherwise.
1035
*/
1036
bool cfg80211_chandef_usable(struct wiphy *wiphy,
1037
const struct cfg80211_chan_def *chandef,
1038
u32 prohibited_flags);
1039
1040
/**
1041
* cfg80211_chandef_dfs_required - checks if radar detection is required
1042
* @wiphy: the wiphy to validate against
1043
* @chandef: the channel definition to check
1044
* @iftype: the interface type as specified in &enum nl80211_iftype
1045
* Returns:
1046
* 1 if radar detection is required, 0 if it is not, < 0 on error
1047
*/
1048
int cfg80211_chandef_dfs_required(struct wiphy *wiphy,
1049
const struct cfg80211_chan_def *chandef,
1050
enum nl80211_iftype iftype);
1051
1052
/**
1053
* cfg80211_chandef_dfs_usable - checks if chandef is DFS usable and we
1054
* can/need start CAC on such channel
1055
* @wiphy: the wiphy to validate against
1056
* @chandef: the channel definition to check
1057
*
1058
* Return: true if all channels available and at least
1059
* one channel requires CAC (NL80211_DFS_USABLE)
1060
*/
1061
bool cfg80211_chandef_dfs_usable(struct wiphy *wiphy,
1062
const struct cfg80211_chan_def *chandef);
1063
1064
/**
1065
* cfg80211_chandef_dfs_cac_time - get the DFS CAC time (in ms) for given
1066
* channel definition
1067
* @wiphy: the wiphy to validate against
1068
* @chandef: the channel definition to check
1069
*
1070
* Returns: DFS CAC time (in ms) which applies for this channel definition
1071
*/
1072
unsigned int
1073
cfg80211_chandef_dfs_cac_time(struct wiphy *wiphy,
1074
const struct cfg80211_chan_def *chandef);
1075
1076
/**
1077
* cfg80211_chandef_primary - calculate primary 40/80/160 MHz freq
1078
* @chandef: chandef to calculate for
1079
* @primary_chan_width: primary channel width to calculate center for
1080
* @punctured: punctured sub-channel bitmap, will be recalculated
1081
* according to the new bandwidth, can be %NULL
1082
*
1083
* Returns: the primary 40/80/160 MHz channel center frequency, or -1
1084
* for errors, updating the punctured bitmap
1085
*/
1086
int cfg80211_chandef_primary(const struct cfg80211_chan_def *chandef,
1087
enum nl80211_chan_width primary_chan_width,
1088
u16 *punctured);
1089
1090
/**
1091
* nl80211_send_chandef - sends the channel definition.
1092
* @msg: the msg to send channel definition
1093
* @chandef: the channel definition to check
1094
*
1095
* Returns: 0 if sent the channel definition to msg, < 0 on error
1096
**/
1097
int nl80211_send_chandef(struct sk_buff *msg, const struct cfg80211_chan_def *chandef);
1098
1099
/**
1100
* ieee80211_chandef_max_power - maximum transmission power for the chandef
1101
*
1102
* In some regulations, the transmit power may depend on the configured channel
1103
* bandwidth which may be defined as dBm/MHz. This function returns the actual
1104
* max_power for non-standard (20 MHz) channels.
1105
*
1106
* @chandef: channel definition for the channel
1107
*
1108
* Returns: maximum allowed transmission power in dBm for the chandef
1109
*/
1110
static inline int
1111
ieee80211_chandef_max_power(struct cfg80211_chan_def *chandef)
1112
{
1113
switch (chandef->width) {
1114
case NL80211_CHAN_WIDTH_5:
1115
return min(chandef->chan->max_reg_power - 6,
1116
chandef->chan->max_power);
1117
case NL80211_CHAN_WIDTH_10:
1118
return min(chandef->chan->max_reg_power - 3,
1119
chandef->chan->max_power);
1120
default:
1121
break;
1122
}
1123
return chandef->chan->max_power;
1124
}
1125
1126
/**
1127
* cfg80211_any_usable_channels - check for usable channels
1128
* @wiphy: the wiphy to check for
1129
* @band_mask: which bands to check on
1130
* @prohibited_flags: which channels to not consider usable,
1131
* %IEEE80211_CHAN_DISABLED is always taken into account
1132
*
1133
* Return: %true if usable channels found, %false otherwise
1134
*/
1135
bool cfg80211_any_usable_channels(struct wiphy *wiphy,
1136
unsigned long band_mask,
1137
u32 prohibited_flags);
1138
1139
/**
1140
* enum survey_info_flags - survey information flags
1141
*
1142
* @SURVEY_INFO_NOISE_DBM: noise (in dBm) was filled in
1143
* @SURVEY_INFO_IN_USE: channel is currently being used
1144
* @SURVEY_INFO_TIME: active time (in ms) was filled in
1145
* @SURVEY_INFO_TIME_BUSY: busy time was filled in
1146
* @SURVEY_INFO_TIME_EXT_BUSY: extension channel busy time was filled in
1147
* @SURVEY_INFO_TIME_RX: receive time was filled in
1148
* @SURVEY_INFO_TIME_TX: transmit time was filled in
1149
* @SURVEY_INFO_TIME_SCAN: scan time was filled in
1150
* @SURVEY_INFO_TIME_BSS_RX: local BSS receive time was filled in
1151
*
1152
* Used by the driver to indicate which info in &struct survey_info
1153
* it has filled in during the get_survey().
1154
*/
1155
enum survey_info_flags {
1156
SURVEY_INFO_NOISE_DBM = BIT(0),
1157
SURVEY_INFO_IN_USE = BIT(1),
1158
SURVEY_INFO_TIME = BIT(2),
1159
SURVEY_INFO_TIME_BUSY = BIT(3),
1160
SURVEY_INFO_TIME_EXT_BUSY = BIT(4),
1161
SURVEY_INFO_TIME_RX = BIT(5),
1162
SURVEY_INFO_TIME_TX = BIT(6),
1163
SURVEY_INFO_TIME_SCAN = BIT(7),
1164
SURVEY_INFO_TIME_BSS_RX = BIT(8),
1165
};
1166
1167
/**
1168
* struct survey_info - channel survey response
1169
*
1170
* @channel: the channel this survey record reports, may be %NULL for a single
1171
* record to report global statistics
1172
* @filled: bitflag of flags from &enum survey_info_flags
1173
* @noise: channel noise in dBm. This and all following fields are
1174
* optional
1175
* @time: amount of time in ms the radio was turn on (on the channel)
1176
* @time_busy: amount of time the primary channel was sensed busy
1177
* @time_ext_busy: amount of time the extension channel was sensed busy
1178
* @time_rx: amount of time the radio spent receiving data
1179
* @time_tx: amount of time the radio spent transmitting data
1180
* @time_scan: amount of time the radio spent for scanning
1181
* @time_bss_rx: amount of time the radio spent receiving data on a local BSS
1182
*
1183
* Used by dump_survey() to report back per-channel survey information.
1184
*
1185
* This structure can later be expanded with things like
1186
* channel duty cycle etc.
1187
*/
1188
struct survey_info {
1189
struct ieee80211_channel *channel;
1190
u64 time;
1191
u64 time_busy;
1192
u64 time_ext_busy;
1193
u64 time_rx;
1194
u64 time_tx;
1195
u64 time_scan;
1196
u64 time_bss_rx;
1197
u32 filled;
1198
s8 noise;
1199
};
1200
1201
#define CFG80211_MAX_NUM_AKM_SUITES 10
1202
1203
/**
1204
* struct cfg80211_crypto_settings - Crypto settings
1205
* @wpa_versions: indicates which, if any, WPA versions are enabled
1206
* (from enum nl80211_wpa_versions)
1207
* @cipher_group: group key cipher suite (or 0 if unset)
1208
* @n_ciphers_pairwise: number of AP supported unicast ciphers
1209
* @ciphers_pairwise: unicast key cipher suites
1210
* @n_akm_suites: number of AKM suites
1211
* @akm_suites: AKM suites
1212
* @control_port: Whether user space controls IEEE 802.1X port, i.e.,
1213
* sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is
1214
* required to assume that the port is unauthorized until authorized by
1215
* user space. Otherwise, port is marked authorized by default.
1216
* @control_port_ethertype: the control port protocol that should be
1217
* allowed through even on unauthorized ports
1218
* @control_port_no_encrypt: TRUE to prevent encryption of control port
1219
* protocol frames.
1220
* @control_port_over_nl80211: TRUE if userspace expects to exchange control
1221
* port frames over NL80211 instead of the network interface.
1222
* @control_port_no_preauth: disables pre-auth rx over the nl80211 control
1223
* port for mac80211
1224
* @psk: PSK (for devices supporting 4-way-handshake offload)
1225
* @sae_pwd: password for SAE authentication (for devices supporting SAE
1226
* offload)
1227
* @sae_pwd_len: length of SAE password (for devices supporting SAE offload)
1228
* @sae_pwe: The mechanisms allowed for SAE PWE derivation:
1229
*
1230
* NL80211_SAE_PWE_UNSPECIFIED
1231
* Not-specified, used to indicate userspace did not specify any
1232
* preference. The driver should follow its internal policy in
1233
* such a scenario.
1234
*
1235
* NL80211_SAE_PWE_HUNT_AND_PECK
1236
* Allow hunting-and-pecking loop only
1237
*
1238
* NL80211_SAE_PWE_HASH_TO_ELEMENT
1239
* Allow hash-to-element only
1240
*
1241
* NL80211_SAE_PWE_BOTH
1242
* Allow either hunting-and-pecking loop or hash-to-element
1243
*/
1244
struct cfg80211_crypto_settings {
1245
u32 wpa_versions;
1246
u32 cipher_group;
1247
int n_ciphers_pairwise;
1248
u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES];
1249
int n_akm_suites;
1250
u32 akm_suites[CFG80211_MAX_NUM_AKM_SUITES];
1251
bool control_port;
1252
__be16 control_port_ethertype;
1253
bool control_port_no_encrypt;
1254
bool control_port_over_nl80211;
1255
bool control_port_no_preauth;
1256
const u8 *psk;
1257
const u8 *sae_pwd;
1258
u8 sae_pwd_len;
1259
enum nl80211_sae_pwe_mechanism sae_pwe;
1260
};
1261
1262
/**
1263
* struct cfg80211_mbssid_config - AP settings for multi bssid
1264
*
1265
* @tx_wdev: pointer to the transmitted interface in the MBSSID set
1266
* @tx_link_id: link ID of the transmitted profile in an MLD.
1267
* @index: index of this AP in the multi bssid group.
1268
* @ema: set to true if the beacons should be sent out in EMA mode.
1269
*/
1270
struct cfg80211_mbssid_config {
1271
struct wireless_dev *tx_wdev;
1272
u8 tx_link_id;
1273
u8 index;
1274
bool ema;
1275
};
1276
1277
/**
1278
* struct cfg80211_mbssid_elems - Multiple BSSID elements
1279
*
1280
* @cnt: Number of elements in array %elems.
1281
*
1282
* @elem: Array of multiple BSSID element(s) to be added into Beacon frames.
1283
* @elem.data: Data for multiple BSSID elements.
1284
* @elem.len: Length of data.
1285
*/
1286
struct cfg80211_mbssid_elems {
1287
u8 cnt;
1288
struct {
1289
const u8 *data;
1290
size_t len;
1291
} elem[] __counted_by(cnt);
1292
};
1293
1294
/**
1295
* struct cfg80211_rnr_elems - Reduced neighbor report (RNR) elements
1296
*
1297
* @cnt: Number of elements in array %elems.
1298
*
1299
* @elem: Array of RNR element(s) to be added into Beacon frames.
1300
* @elem.data: Data for RNR elements.
1301
* @elem.len: Length of data.
1302
*/
1303
struct cfg80211_rnr_elems {
1304
u8 cnt;
1305
struct {
1306
const u8 *data;
1307
size_t len;
1308
} elem[] __counted_by(cnt);
1309
};
1310
1311
/**
1312
* struct cfg80211_beacon_data - beacon data
1313
* @link_id: the link ID for the AP MLD link sending this beacon
1314
* @head: head portion of beacon (before TIM IE)
1315
* or %NULL if not changed
1316
* @tail: tail portion of beacon (after TIM IE)
1317
* or %NULL if not changed
1318
* @head_len: length of @head
1319
* @tail_len: length of @tail
1320
* @beacon_ies: extra information element(s) to add into Beacon frames or %NULL
1321
* @beacon_ies_len: length of beacon_ies in octets
1322
* @proberesp_ies: extra information element(s) to add into Probe Response
1323
* frames or %NULL
1324
* @proberesp_ies_len: length of proberesp_ies in octets
1325
* @assocresp_ies: extra information element(s) to add into (Re)Association
1326
* Response frames or %NULL
1327
* @assocresp_ies_len: length of assocresp_ies in octets
1328
* @probe_resp_len: length of probe response template (@probe_resp)
1329
* @probe_resp: probe response template (AP mode only)
1330
* @mbssid_ies: multiple BSSID elements
1331
* @rnr_ies: reduced neighbor report elements
1332
* @ftm_responder: enable FTM responder functionality; -1 for no change
1333
* (which also implies no change in LCI/civic location data)
1334
* @lci: Measurement Report element content, starting with Measurement Token
1335
* (measurement type 8)
1336
* @civicloc: Measurement Report element content, starting with Measurement
1337
* Token (measurement type 11)
1338
* @lci_len: LCI data length
1339
* @civicloc_len: Civic location data length
1340
* @he_bss_color: BSS Color settings
1341
* @he_bss_color_valid: indicates whether bss color
1342
* attribute is present in beacon data or not.
1343
*/
1344
struct cfg80211_beacon_data {
1345
unsigned int link_id;
1346
1347
const u8 *head, *tail;
1348
const u8 *beacon_ies;
1349
const u8 *proberesp_ies;
1350
const u8 *assocresp_ies;
1351
const u8 *probe_resp;
1352
const u8 *lci;
1353
const u8 *civicloc;
1354
struct cfg80211_mbssid_elems *mbssid_ies;
1355
struct cfg80211_rnr_elems *rnr_ies;
1356
s8 ftm_responder;
1357
1358
size_t head_len, tail_len;
1359
size_t beacon_ies_len;
1360
size_t proberesp_ies_len;
1361
size_t assocresp_ies_len;
1362
size_t probe_resp_len;
1363
size_t lci_len;
1364
size_t civicloc_len;
1365
struct cfg80211_he_bss_color he_bss_color;
1366
bool he_bss_color_valid;
1367
};
1368
1369
struct mac_address {
1370
u8 addr[ETH_ALEN];
1371
};
1372
1373
/**
1374
* struct cfg80211_acl_data - Access control list data
1375
*
1376
* @acl_policy: ACL policy to be applied on the station's
1377
* entry specified by mac_addr
1378
* @n_acl_entries: Number of MAC address entries passed
1379
* @mac_addrs: List of MAC addresses of stations to be used for ACL
1380
*/
1381
struct cfg80211_acl_data {
1382
enum nl80211_acl_policy acl_policy;
1383
int n_acl_entries;
1384
1385
/* Keep it last */
1386
struct mac_address mac_addrs[] __counted_by(n_acl_entries);
1387
};
1388
1389
/**
1390
* struct cfg80211_fils_discovery - FILS discovery parameters from
1391
* IEEE Std 802.11ai-2016, Annex C.3 MIB detail.
1392
*
1393
* @update: Set to true if the feature configuration should be updated.
1394
* @min_interval: Minimum packet interval in TUs (0 - 10000)
1395
* @max_interval: Maximum packet interval in TUs (0 - 10000)
1396
* @tmpl_len: Template length
1397
* @tmpl: Template data for FILS discovery frame including the action
1398
* frame headers.
1399
*/
1400
struct cfg80211_fils_discovery {
1401
bool update;
1402
u32 min_interval;
1403
u32 max_interval;
1404
size_t tmpl_len;
1405
const u8 *tmpl;
1406
};
1407
1408
/**
1409
* struct cfg80211_unsol_bcast_probe_resp - Unsolicited broadcast probe
1410
* response parameters in 6GHz.
1411
*
1412
* @update: Set to true if the feature configuration should be updated.
1413
* @interval: Packet interval in TUs. Maximum allowed is 20 TU, as mentioned
1414
* in IEEE P802.11ax/D6.0 26.17.2.3.2 - AP behavior for fast passive
1415
* scanning
1416
* @tmpl_len: Template length
1417
* @tmpl: Template data for probe response
1418
*/
1419
struct cfg80211_unsol_bcast_probe_resp {
1420
bool update;
1421
u32 interval;
1422
size_t tmpl_len;
1423
const u8 *tmpl;
1424
};
1425
1426
/**
1427
* struct cfg80211_s1g_short_beacon - S1G short beacon data.
1428
*
1429
* @update: Set to true if the feature configuration should be updated.
1430
* @short_head: Short beacon head.
1431
* @short_tail: Short beacon tail.
1432
* @short_head_len: Short beacon head len.
1433
* @short_tail_len: Short beacon tail len.
1434
*/
1435
struct cfg80211_s1g_short_beacon {
1436
bool update;
1437
const u8 *short_head;
1438
const u8 *short_tail;
1439
size_t short_head_len;
1440
size_t short_tail_len;
1441
};
1442
1443
/**
1444
* struct cfg80211_ap_settings - AP configuration
1445
*
1446
* Used to configure an AP interface.
1447
*
1448
* @chandef: defines the channel to use
1449
* @beacon: beacon data
1450
* @beacon_interval: beacon interval
1451
* @dtim_period: DTIM period
1452
* @ssid: SSID to be used in the BSS (note: may be %NULL if not provided from
1453
* user space)
1454
* @ssid_len: length of @ssid
1455
* @hidden_ssid: whether to hide the SSID in Beacon/Probe Response frames
1456
* @crypto: crypto settings
1457
* @privacy: the BSS uses privacy
1458
* @auth_type: Authentication type (algorithm)
1459
* @inactivity_timeout: time in seconds to determine station's inactivity.
1460
* @p2p_ctwindow: P2P CT Window
1461
* @p2p_opp_ps: P2P opportunistic PS
1462
* @acl: ACL configuration used by the drivers which has support for
1463
* MAC address based access control
1464
* @pbss: If set, start as a PCP instead of AP. Relevant for DMG
1465
* networks.
1466
* @beacon_rate: bitrate to be used for beacons
1467
* @ht_cap: HT capabilities (or %NULL if HT isn't enabled)
1468
* @vht_cap: VHT capabilities (or %NULL if VHT isn't enabled)
1469
* @he_cap: HE capabilities (or %NULL if HE isn't enabled)
1470
* @eht_cap: EHT capabilities (or %NULL if EHT isn't enabled)
1471
* @eht_oper: EHT operation IE (or %NULL if EHT isn't enabled)
1472
* @ht_required: stations must support HT
1473
* @vht_required: stations must support VHT
1474
* @twt_responder: Enable Target Wait Time
1475
* @he_required: stations must support HE
1476
* @sae_h2e_required: stations must support direct H2E technique in SAE
1477
* @flags: flags, as defined in &enum nl80211_ap_settings_flags
1478
* @he_obss_pd: OBSS Packet Detection settings
1479
* @he_oper: HE operation IE (or %NULL if HE isn't enabled)
1480
* @fils_discovery: FILS discovery transmission parameters
1481
* @unsol_bcast_probe_resp: Unsolicited broadcast probe response parameters
1482
* @mbssid_config: AP settings for multiple bssid
1483
* @s1g_long_beacon_period: S1G long beacon period
1484
* @s1g_short_beacon: S1G short beacon data
1485
*/
1486
struct cfg80211_ap_settings {
1487
struct cfg80211_chan_def chandef;
1488
1489
struct cfg80211_beacon_data beacon;
1490
1491
int beacon_interval, dtim_period;
1492
const u8 *ssid;
1493
size_t ssid_len;
1494
enum nl80211_hidden_ssid hidden_ssid;
1495
struct cfg80211_crypto_settings crypto;
1496
bool privacy;
1497
enum nl80211_auth_type auth_type;
1498
int inactivity_timeout;
1499
u8 p2p_ctwindow;
1500
bool p2p_opp_ps;
1501
const struct cfg80211_acl_data *acl;
1502
bool pbss;
1503
struct cfg80211_bitrate_mask beacon_rate;
1504
1505
const struct ieee80211_ht_cap *ht_cap;
1506
const struct ieee80211_vht_cap *vht_cap;
1507
const struct ieee80211_he_cap_elem *he_cap;
1508
const struct ieee80211_he_operation *he_oper;
1509
const struct ieee80211_eht_cap_elem *eht_cap;
1510
const struct ieee80211_eht_operation *eht_oper;
1511
bool ht_required, vht_required, he_required, sae_h2e_required;
1512
bool twt_responder;
1513
u32 flags;
1514
struct ieee80211_he_obss_pd he_obss_pd;
1515
struct cfg80211_fils_discovery fils_discovery;
1516
struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
1517
struct cfg80211_mbssid_config mbssid_config;
1518
u8 s1g_long_beacon_period;
1519
struct cfg80211_s1g_short_beacon s1g_short_beacon;
1520
};
1521
1522
1523
/**
1524
* struct cfg80211_ap_update - AP configuration update
1525
*
1526
* Subset of &struct cfg80211_ap_settings, for updating a running AP.
1527
*
1528
* @beacon: beacon data
1529
* @fils_discovery: FILS discovery transmission parameters
1530
* @unsol_bcast_probe_resp: Unsolicited broadcast probe response parameters
1531
* @s1g_short_beacon: S1G short beacon data
1532
*/
1533
struct cfg80211_ap_update {
1534
struct cfg80211_beacon_data beacon;
1535
struct cfg80211_fils_discovery fils_discovery;
1536
struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
1537
struct cfg80211_s1g_short_beacon s1g_short_beacon;
1538
};
1539
1540
/**
1541
* struct cfg80211_csa_settings - channel switch settings
1542
*
1543
* Used for channel switch
1544
*
1545
* @chandef: defines the channel to use after the switch
1546
* @beacon_csa: beacon data while performing the switch
1547
* @counter_offsets_beacon: offsets of the counters within the beacon (tail)
1548
* @counter_offsets_presp: offsets of the counters within the probe response
1549
* @n_counter_offsets_beacon: number of csa counters the beacon (tail)
1550
* @n_counter_offsets_presp: number of csa counters in the probe response
1551
* @beacon_after: beacon data to be used on the new channel
1552
* @unsol_bcast_probe_resp: Unsolicited broadcast probe response parameters
1553
* @radar_required: whether radar detection is required on the new channel
1554
* @block_tx: whether transmissions should be blocked while changing
1555
* @count: number of beacons until switch
1556
* @link_id: defines the link on which channel switch is expected during
1557
* MLO. 0 in case of non-MLO.
1558
*/
1559
struct cfg80211_csa_settings {
1560
struct cfg80211_chan_def chandef;
1561
struct cfg80211_beacon_data beacon_csa;
1562
const u16 *counter_offsets_beacon;
1563
const u16 *counter_offsets_presp;
1564
unsigned int n_counter_offsets_beacon;
1565
unsigned int n_counter_offsets_presp;
1566
struct cfg80211_beacon_data beacon_after;
1567
struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
1568
bool radar_required;
1569
bool block_tx;
1570
u8 count;
1571
u8 link_id;
1572
};
1573
1574
/**
1575
* struct cfg80211_color_change_settings - color change settings
1576
*
1577
* Used for bss color change
1578
*
1579
* @beacon_color_change: beacon data while performing the color countdown
1580
* @counter_offset_beacon: offsets of the counters within the beacon (tail)
1581
* @counter_offset_presp: offsets of the counters within the probe response
1582
* @beacon_next: beacon data to be used after the color change
1583
* @unsol_bcast_probe_resp: Unsolicited broadcast probe response parameters
1584
* @count: number of beacons until the color change
1585
* @color: the color used after the change
1586
* @link_id: defines the link on which color change is expected during MLO.
1587
* 0 in case of non-MLO.
1588
*/
1589
struct cfg80211_color_change_settings {
1590
struct cfg80211_beacon_data beacon_color_change;
1591
u16 counter_offset_beacon;
1592
u16 counter_offset_presp;
1593
struct cfg80211_beacon_data beacon_next;
1594
struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
1595
u8 count;
1596
u8 color;
1597
u8 link_id;
1598
};
1599
1600
/**
1601
* struct iface_combination_params - input parameters for interface combinations
1602
*
1603
* Used to pass interface combination parameters
1604
*
1605
* @radio_idx: wiphy radio index or -1 for global
1606
* @num_different_channels: the number of different channels we want
1607
* to use for verification
1608
* @radar_detect: a bitmap where each bit corresponds to a channel
1609
* width where radar detection is needed, as in the definition of
1610
* &struct ieee80211_iface_combination.@radar_detect_widths
1611
* @iftype_num: array with the number of interfaces of each interface
1612
* type. The index is the interface type as specified in &enum
1613
* nl80211_iftype.
1614
* @new_beacon_int: set this to the beacon interval of a new interface
1615
* that's not operating yet, if such is to be checked as part of
1616
* the verification
1617
*/
1618
struct iface_combination_params {
1619
int radio_idx;
1620
int num_different_channels;
1621
u8 radar_detect;
1622
int iftype_num[NUM_NL80211_IFTYPES];
1623
u32 new_beacon_int;
1624
};
1625
1626
/**
1627
* enum station_parameters_apply_mask - station parameter values to apply
1628
* @STATION_PARAM_APPLY_UAPSD: apply new uAPSD parameters (uapsd_queues, max_sp)
1629
* @STATION_PARAM_APPLY_CAPABILITY: apply new capability
1630
* @STATION_PARAM_APPLY_PLINK_STATE: apply new plink state
1631
*
1632
* Not all station parameters have in-band "no change" signalling,
1633
* for those that don't these flags will are used.
1634
*/
1635
enum station_parameters_apply_mask {
1636
STATION_PARAM_APPLY_UAPSD = BIT(0),
1637
STATION_PARAM_APPLY_CAPABILITY = BIT(1),
1638
STATION_PARAM_APPLY_PLINK_STATE = BIT(2),
1639
};
1640
1641
/**
1642
* struct sta_txpwr - station txpower configuration
1643
*
1644
* Used to configure txpower for station.
1645
*
1646
* @power: tx power (in dBm) to be used for sending data traffic. If tx power
1647
* is not provided, the default per-interface tx power setting will be
1648
* overriding. Driver should be picking up the lowest tx power, either tx
1649
* power per-interface or per-station.
1650
* @type: In particular if TPC %type is NL80211_TX_POWER_LIMITED then tx power
1651
* will be less than or equal to specified from userspace, whereas if TPC
1652
* %type is NL80211_TX_POWER_AUTOMATIC then it indicates default tx power.
1653
* NL80211_TX_POWER_FIXED is not a valid configuration option for
1654
* per peer TPC.
1655
*/
1656
struct sta_txpwr {
1657
s16 power;
1658
enum nl80211_tx_power_setting type;
1659
};
1660
1661
/**
1662
* struct link_station_parameters - link station parameters
1663
*
1664
* Used to change and create a new link station.
1665
*
1666
* @mld_mac: MAC address of the station
1667
* @link_id: the link id (-1 for non-MLD station)
1668
* @link_mac: MAC address of the link
1669
* @supported_rates: supported rates in IEEE 802.11 format
1670
* (or NULL for no change)
1671
* @supported_rates_len: number of supported rates
1672
* @ht_capa: HT capabilities of station
1673
* @vht_capa: VHT capabilities of station
1674
* @opmode_notif: operating mode field from Operating Mode Notification
1675
* @opmode_notif_used: information if operating mode field is used
1676
* @he_capa: HE capabilities of station
1677
* @he_capa_len: the length of the HE capabilities
1678
* @txpwr: transmit power for an associated station
1679
* @txpwr_set: txpwr field is set
1680
* @he_6ghz_capa: HE 6 GHz Band capabilities of station
1681
* @eht_capa: EHT capabilities of station
1682
* @eht_capa_len: the length of the EHT capabilities
1683
* @s1g_capa: S1G capabilities of station
1684
*/
1685
struct link_station_parameters {
1686
const u8 *mld_mac;
1687
int link_id;
1688
const u8 *link_mac;
1689
const u8 *supported_rates;
1690
u8 supported_rates_len;
1691
const struct ieee80211_ht_cap *ht_capa;
1692
const struct ieee80211_vht_cap *vht_capa;
1693
u8 opmode_notif;
1694
bool opmode_notif_used;
1695
const struct ieee80211_he_cap_elem *he_capa;
1696
u8 he_capa_len;
1697
struct sta_txpwr txpwr;
1698
bool txpwr_set;
1699
const struct ieee80211_he_6ghz_capa *he_6ghz_capa;
1700
const struct ieee80211_eht_cap_elem *eht_capa;
1701
u8 eht_capa_len;
1702
const struct ieee80211_s1g_cap *s1g_capa;
1703
};
1704
1705
/**
1706
* struct link_station_del_parameters - link station deletion parameters
1707
*
1708
* Used to delete a link station entry (or all stations).
1709
*
1710
* @mld_mac: MAC address of the station
1711
* @link_id: the link id
1712
*/
1713
struct link_station_del_parameters {
1714
const u8 *mld_mac;
1715
u32 link_id;
1716
};
1717
1718
/**
1719
* struct cfg80211_ttlm_params: TID to link mapping parameters
1720
*
1721
* Used for setting a TID to link mapping.
1722
*
1723
* @dlink: Downlink TID to link mapping, as defined in section 9.4.2.314
1724
* (TID-To-Link Mapping element) in Draft P802.11be_D4.0.
1725
* @ulink: Uplink TID to link mapping, as defined in section 9.4.2.314
1726
* (TID-To-Link Mapping element) in Draft P802.11be_D4.0.
1727
*/
1728
struct cfg80211_ttlm_params {
1729
u16 dlink[8];
1730
u16 ulink[8];
1731
};
1732
1733
/**
1734
* struct station_parameters - station parameters
1735
*
1736
* Used to change and create a new station.
1737
*
1738
* @vlan: vlan interface station should belong to
1739
* @sta_flags_mask: station flags that changed
1740
* (bitmask of BIT(%NL80211_STA_FLAG_...))
1741
* @sta_flags_set: station flags values
1742
* (bitmask of BIT(%NL80211_STA_FLAG_...))
1743
* @listen_interval: listen interval or -1 for no change
1744
* @aid: AID or zero for no change
1745
* @vlan_id: VLAN ID for station (if nonzero)
1746
* @peer_aid: mesh peer AID or zero for no change
1747
* @plink_action: plink action to take
1748
* @plink_state: set the peer link state for a station
1749
* @uapsd_queues: bitmap of queues configured for uapsd. same format
1750
* as the AC bitmap in the QoS info field
1751
* @max_sp: max Service Period. same format as the MAX_SP in the
1752
* QoS info field (but already shifted down)
1753
* @sta_modify_mask: bitmap indicating which parameters changed
1754
* (for those that don't have a natural "no change" value),
1755
* see &enum station_parameters_apply_mask
1756
* @local_pm: local link-specific mesh power save mode (no change when set
1757
* to unknown)
1758
* @capability: station capability
1759
* @ext_capab: extended capabilities of the station
1760
* @ext_capab_len: number of extended capabilities
1761
* @supported_channels: supported channels in IEEE 802.11 format
1762
* @supported_channels_len: number of supported channels
1763
* @supported_oper_classes: supported oper classes in IEEE 802.11 format
1764
* @supported_oper_classes_len: number of supported operating classes
1765
* @support_p2p_ps: information if station supports P2P PS mechanism
1766
* @airtime_weight: airtime scheduler weight for this station
1767
* @eml_cap_present: Specifies if EML capabilities field (@eml_cap) is
1768
* present/updated
1769
* @eml_cap: EML capabilities of this station
1770
* @link_sta_params: link related params.
1771
*/
1772
struct station_parameters {
1773
struct net_device *vlan;
1774
u32 sta_flags_mask, sta_flags_set;
1775
u32 sta_modify_mask;
1776
int listen_interval;
1777
u16 aid;
1778
u16 vlan_id;
1779
u16 peer_aid;
1780
u8 plink_action;
1781
u8 plink_state;
1782
u8 uapsd_queues;
1783
u8 max_sp;
1784
enum nl80211_mesh_power_mode local_pm;
1785
u16 capability;
1786
const u8 *ext_capab;
1787
u8 ext_capab_len;
1788
const u8 *supported_channels;
1789
u8 supported_channels_len;
1790
const u8 *supported_oper_classes;
1791
u8 supported_oper_classes_len;
1792
int support_p2p_ps;
1793
u16 airtime_weight;
1794
bool eml_cap_present;
1795
u16 eml_cap;
1796
struct link_station_parameters link_sta_params;
1797
};
1798
1799
/**
1800
* struct station_del_parameters - station deletion parameters
1801
*
1802
* Used to delete a station entry (or all stations).
1803
*
1804
* @mac: MAC address of the station to remove or NULL to remove all stations
1805
* @subtype: Management frame subtype to use for indicating removal
1806
* (10 = Disassociation, 12 = Deauthentication)
1807
* @reason_code: Reason code for the Disassociation/Deauthentication frame
1808
* @link_id: Link ID indicating a link that stations to be flushed must be
1809
* using; valid only for MLO, but can also be -1 for MLO to really
1810
* remove all stations.
1811
*/
1812
struct station_del_parameters {
1813
const u8 *mac;
1814
u8 subtype;
1815
u16 reason_code;
1816
int link_id;
1817
};
1818
1819
/**
1820
* enum cfg80211_station_type - the type of station being modified
1821
* @CFG80211_STA_AP_CLIENT: client of an AP interface
1822
* @CFG80211_STA_AP_CLIENT_UNASSOC: client of an AP interface that is still
1823
* unassociated (update properties for this type of client is permitted)
1824
* @CFG80211_STA_AP_MLME_CLIENT: client of an AP interface that has
1825
* the AP MLME in the device
1826
* @CFG80211_STA_AP_STA: AP station on managed interface
1827
* @CFG80211_STA_IBSS: IBSS station
1828
* @CFG80211_STA_TDLS_PEER_SETUP: TDLS peer on managed interface (dummy entry
1829
* while TDLS setup is in progress, it moves out of this state when
1830
* being marked authorized; use this only if TDLS with external setup is
1831
* supported/used)
1832
* @CFG80211_STA_TDLS_PEER_ACTIVE: TDLS peer on managed interface (active
1833
* entry that is operating, has been marked authorized by userspace)
1834
* @CFG80211_STA_MESH_PEER_KERNEL: peer on mesh interface (kernel managed)
1835
* @CFG80211_STA_MESH_PEER_USER: peer on mesh interface (user managed)
1836
*/
1837
enum cfg80211_station_type {
1838
CFG80211_STA_AP_CLIENT,
1839
CFG80211_STA_AP_CLIENT_UNASSOC,
1840
CFG80211_STA_AP_MLME_CLIENT,
1841
CFG80211_STA_AP_STA,
1842
CFG80211_STA_IBSS,
1843
CFG80211_STA_TDLS_PEER_SETUP,
1844
CFG80211_STA_TDLS_PEER_ACTIVE,
1845
CFG80211_STA_MESH_PEER_KERNEL,
1846
CFG80211_STA_MESH_PEER_USER,
1847
};
1848
1849
/**
1850
* cfg80211_check_station_change - validate parameter changes
1851
* @wiphy: the wiphy this operates on
1852
* @params: the new parameters for a station
1853
* @statype: the type of station being modified
1854
*
1855
* Utility function for the @change_station driver method. Call this function
1856
* with the appropriate station type looking up the station (and checking that
1857
* it exists). It will verify whether the station change is acceptable.
1858
*
1859
* Return: 0 if the change is acceptable, otherwise an error code. Note that
1860
* it may modify the parameters for backward compatibility reasons, so don't
1861
* use them before calling this.
1862
*/
1863
int cfg80211_check_station_change(struct wiphy *wiphy,
1864
struct station_parameters *params,
1865
enum cfg80211_station_type statype);
1866
1867
/**
1868
* enum rate_info_flags - bitrate info flags
1869
*
1870
* Used by the driver to indicate the specific rate transmission
1871
* type for 802.11n transmissions.
1872
*
1873
* @RATE_INFO_FLAGS_MCS: mcs field filled with HT MCS
1874
* @RATE_INFO_FLAGS_VHT_MCS: mcs field filled with VHT MCS
1875
* @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval
1876
* @RATE_INFO_FLAGS_DMG: 60GHz MCS
1877
* @RATE_INFO_FLAGS_HE_MCS: HE MCS information
1878
* @RATE_INFO_FLAGS_EDMG: 60GHz MCS in EDMG mode
1879
* @RATE_INFO_FLAGS_EXTENDED_SC_DMG: 60GHz extended SC MCS
1880
* @RATE_INFO_FLAGS_EHT_MCS: EHT MCS information
1881
* @RATE_INFO_FLAGS_S1G_MCS: MCS field filled with S1G MCS
1882
*/
1883
enum rate_info_flags {
1884
RATE_INFO_FLAGS_MCS = BIT(0),
1885
RATE_INFO_FLAGS_VHT_MCS = BIT(1),
1886
RATE_INFO_FLAGS_SHORT_GI = BIT(2),
1887
RATE_INFO_FLAGS_DMG = BIT(3),
1888
RATE_INFO_FLAGS_HE_MCS = BIT(4),
1889
RATE_INFO_FLAGS_EDMG = BIT(5),
1890
RATE_INFO_FLAGS_EXTENDED_SC_DMG = BIT(6),
1891
RATE_INFO_FLAGS_EHT_MCS = BIT(7),
1892
RATE_INFO_FLAGS_S1G_MCS = BIT(8),
1893
};
1894
1895
/**
1896
* enum rate_info_bw - rate bandwidth information
1897
*
1898
* Used by the driver to indicate the rate bandwidth.
1899
*
1900
* @RATE_INFO_BW_5: 5 MHz bandwidth
1901
* @RATE_INFO_BW_10: 10 MHz bandwidth
1902
* @RATE_INFO_BW_20: 20 MHz bandwidth
1903
* @RATE_INFO_BW_40: 40 MHz bandwidth
1904
* @RATE_INFO_BW_80: 80 MHz bandwidth
1905
* @RATE_INFO_BW_160: 160 MHz bandwidth
1906
* @RATE_INFO_BW_HE_RU: bandwidth determined by HE RU allocation
1907
* @RATE_INFO_BW_320: 320 MHz bandwidth
1908
* @RATE_INFO_BW_EHT_RU: bandwidth determined by EHT RU allocation
1909
* @RATE_INFO_BW_1: 1 MHz bandwidth
1910
* @RATE_INFO_BW_2: 2 MHz bandwidth
1911
* @RATE_INFO_BW_4: 4 MHz bandwidth
1912
* @RATE_INFO_BW_8: 8 MHz bandwidth
1913
* @RATE_INFO_BW_16: 16 MHz bandwidth
1914
*/
1915
enum rate_info_bw {
1916
RATE_INFO_BW_20 = 0,
1917
RATE_INFO_BW_5,
1918
RATE_INFO_BW_10,
1919
RATE_INFO_BW_40,
1920
RATE_INFO_BW_80,
1921
RATE_INFO_BW_160,
1922
RATE_INFO_BW_HE_RU,
1923
RATE_INFO_BW_320,
1924
RATE_INFO_BW_EHT_RU,
1925
RATE_INFO_BW_1,
1926
RATE_INFO_BW_2,
1927
RATE_INFO_BW_4,
1928
RATE_INFO_BW_8,
1929
RATE_INFO_BW_16,
1930
};
1931
1932
/**
1933
* struct rate_info - bitrate information
1934
*
1935
* Information about a receiving or transmitting bitrate
1936
*
1937
* @flags: bitflag of flags from &enum rate_info_flags
1938
* @legacy: bitrate in 100kbit/s for 802.11abg
1939
* @mcs: mcs index if struct describes an HT/VHT/HE/EHT/S1G rate
1940
* @nss: number of streams (VHT & HE only)
1941
* @bw: bandwidth (from &enum rate_info_bw)
1942
* @he_gi: HE guard interval (from &enum nl80211_he_gi)
1943
* @he_dcm: HE DCM value
1944
* @he_ru_alloc: HE RU allocation (from &enum nl80211_he_ru_alloc,
1945
* only valid if bw is %RATE_INFO_BW_HE_RU)
1946
* @n_bonded_ch: In case of EDMG the number of bonded channels (1-4)
1947
* @eht_gi: EHT guard interval (from &enum nl80211_eht_gi)
1948
* @eht_ru_alloc: EHT RU allocation (from &enum nl80211_eht_ru_alloc,
1949
* only valid if bw is %RATE_INFO_BW_EHT_RU)
1950
*/
1951
struct rate_info {
1952
u16 flags;
1953
u16 legacy;
1954
u8 mcs;
1955
u8 nss;
1956
u8 bw;
1957
u8 he_gi;
1958
u8 he_dcm;
1959
u8 he_ru_alloc;
1960
u8 n_bonded_ch;
1961
u8 eht_gi;
1962
u8 eht_ru_alloc;
1963
};
1964
1965
/**
1966
* enum bss_param_flags - bitrate info flags
1967
*
1968
* Used by the driver to indicate the specific rate transmission
1969
* type for 802.11n transmissions.
1970
*
1971
* @BSS_PARAM_FLAGS_CTS_PROT: whether CTS protection is enabled
1972
* @BSS_PARAM_FLAGS_SHORT_PREAMBLE: whether short preamble is enabled
1973
* @BSS_PARAM_FLAGS_SHORT_SLOT_TIME: whether short slot time is enabled
1974
*/
1975
enum bss_param_flags {
1976
BSS_PARAM_FLAGS_CTS_PROT = BIT(0),
1977
BSS_PARAM_FLAGS_SHORT_PREAMBLE = BIT(1),
1978
BSS_PARAM_FLAGS_SHORT_SLOT_TIME = BIT(2),
1979
};
1980
1981
/**
1982
* struct sta_bss_parameters - BSS parameters for the attached station
1983
*
1984
* Information about the currently associated BSS
1985
*
1986
* @flags: bitflag of flags from &enum bss_param_flags
1987
* @dtim_period: DTIM period for the BSS
1988
* @beacon_interval: beacon interval
1989
*/
1990
struct sta_bss_parameters {
1991
u8 flags;
1992
u8 dtim_period;
1993
u16 beacon_interval;
1994
};
1995
1996
/**
1997
* struct cfg80211_txq_stats - TXQ statistics for this TID
1998
* @filled: bitmap of flags using the bits of &enum nl80211_txq_stats to
1999
* indicate the relevant values in this struct are filled
2000
* @backlog_bytes: total number of bytes currently backlogged
2001
* @backlog_packets: total number of packets currently backlogged
2002
* @flows: number of new flows seen
2003
* @drops: total number of packets dropped
2004
* @ecn_marks: total number of packets marked with ECN CE
2005
* @overlimit: number of drops due to queue space overflow
2006
* @overmemory: number of drops due to memory limit overflow
2007
* @collisions: number of hash collisions
2008
* @tx_bytes: total number of bytes dequeued
2009
* @tx_packets: total number of packets dequeued
2010
* @max_flows: maximum number of flows supported
2011
*/
2012
struct cfg80211_txq_stats {
2013
u32 filled;
2014
u32 backlog_bytes;
2015
u32 backlog_packets;
2016
u32 flows;
2017
u32 drops;
2018
u32 ecn_marks;
2019
u32 overlimit;
2020
u32 overmemory;
2021
u32 collisions;
2022
u32 tx_bytes;
2023
u32 tx_packets;
2024
u32 max_flows;
2025
};
2026
2027
/**
2028
* struct cfg80211_tid_stats - per-TID statistics
2029
* @filled: bitmap of flags using the bits of &enum nl80211_tid_stats to
2030
* indicate the relevant values in this struct are filled
2031
* @rx_msdu: number of received MSDUs
2032
* @tx_msdu: number of (attempted) transmitted MSDUs
2033
* @tx_msdu_retries: number of retries (not counting the first) for
2034
* transmitted MSDUs
2035
* @tx_msdu_failed: number of failed transmitted MSDUs
2036
* @txq_stats: TXQ statistics
2037
*/
2038
struct cfg80211_tid_stats {
2039
u32 filled;
2040
u64 rx_msdu;
2041
u64 tx_msdu;
2042
u64 tx_msdu_retries;
2043
u64 tx_msdu_failed;
2044
struct cfg80211_txq_stats txq_stats;
2045
};
2046
2047
#define IEEE80211_MAX_CHAINS 4
2048
2049
/**
2050
* struct link_station_info - link station information
2051
*
2052
* Link station information filled by driver for get_station() and
2053
* dump_station().
2054
* @filled: bit flag of flags using the bits of &enum nl80211_sta_info to
2055
* indicate the relevant values in this struct for them
2056
* @connected_time: time(in secs) since a link of station is last connected
2057
* @inactive_time: time since last activity for link station(tx/rx)
2058
* in milliseconds
2059
* @assoc_at: bootime (ns) of the last association of link of station
2060
* @rx_bytes: bytes (size of MPDUs) received from this link of station
2061
* @tx_bytes: bytes (size of MPDUs) transmitted to this link of station
2062
* @signal: The signal strength, type depends on the wiphy's signal_type.
2063
* For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
2064
* @signal_avg: Average signal strength, type depends on the wiphy's
2065
* signal_type. For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_
2066
* @chains: bitmask for filled values in @chain_signal, @chain_signal_avg
2067
* @chain_signal: per-chain signal strength of last received packet in dBm
2068
* @chain_signal_avg: per-chain signal strength average in dBm
2069
* @txrate: current unicast bitrate from this link of station
2070
* @rxrate: current unicast bitrate to this link of station
2071
* @rx_packets: packets (MSDUs & MMPDUs) received from this link of station
2072
* @tx_packets: packets (MSDUs & MMPDUs) transmitted to this link of station
2073
* @tx_retries: cumulative retry counts (MPDUs) for this link of station
2074
* @tx_failed: number of failed transmissions (MPDUs) (retries exceeded, no ACK)
2075
* @rx_dropped_misc: Dropped for un-specified reason.
2076
* @bss_param: current BSS parameters
2077
* @beacon_loss_count: Number of times beacon loss event has triggered.
2078
* @expected_throughput: expected throughput in kbps (including 802.11 headers)
2079
* towards this station.
2080
* @rx_beacon: number of beacons received from this peer
2081
* @rx_beacon_signal_avg: signal strength average (in dBm) for beacons received
2082
* from this peer
2083
* @rx_duration: aggregate PPDU duration(usecs) for all the frames from a peer
2084
* @tx_duration: aggregate PPDU duration(usecs) for all the frames to a peer
2085
* @airtime_weight: current airtime scheduling weight
2086
* @pertid: per-TID statistics, see &struct cfg80211_tid_stats, using the last
2087
* (IEEE80211_NUM_TIDS) index for MSDUs not encapsulated in QoS-MPDUs.
2088
* Note that this doesn't use the @filled bit, but is used if non-NULL.
2089
* @ack_signal: signal strength (in dBm) of the last ACK frame.
2090
* @avg_ack_signal: average rssi value of ack packet for the no of msdu's has
2091
* been sent.
2092
* @rx_mpdu_count: number of MPDUs received from this station
2093
* @fcs_err_count: number of packets (MPDUs) received from this station with
2094
* an FCS error. This counter should be incremented only when TA of the
2095
* received packet with an FCS error matches the peer MAC address.
2096
* @addr: For MLO STA connection, filled with address of the link of station.
2097
*/
2098
struct link_station_info {
2099
u64 filled;
2100
u32 connected_time;
2101
u32 inactive_time;
2102
u64 assoc_at;
2103
u64 rx_bytes;
2104
u64 tx_bytes;
2105
s8 signal;
2106
s8 signal_avg;
2107
2108
u8 chains;
2109
s8 chain_signal[IEEE80211_MAX_CHAINS];
2110
s8 chain_signal_avg[IEEE80211_MAX_CHAINS];
2111
2112
struct rate_info txrate;
2113
struct rate_info rxrate;
2114
u32 rx_packets;
2115
u32 tx_packets;
2116
u32 tx_retries;
2117
u32 tx_failed;
2118
u32 rx_dropped_misc;
2119
struct sta_bss_parameters bss_param;
2120
2121
u32 beacon_loss_count;
2122
2123
u32 expected_throughput;
2124
2125
u64 tx_duration;
2126
u64 rx_duration;
2127
u64 rx_beacon;
2128
u8 rx_beacon_signal_avg;
2129
2130
u16 airtime_weight;
2131
2132
s8 ack_signal;
2133
s8 avg_ack_signal;
2134
struct cfg80211_tid_stats *pertid;
2135
2136
u32 rx_mpdu_count;
2137
u32 fcs_err_count;
2138
2139
u8 addr[ETH_ALEN] __aligned(2);
2140
};
2141
2142
/**
2143
* struct station_info - station information
2144
*
2145
* Station information filled by driver for get_station() and dump_station.
2146
*
2147
* @filled: bitflag of flags using the bits of &enum nl80211_sta_info to
2148
* indicate the relevant values in this struct for them
2149
* @connected_time: time(in secs) since a station is last connected
2150
* @inactive_time: time since last station activity (tx/rx) in milliseconds
2151
* @assoc_at: bootime (ns) of the last association
2152
* @rx_bytes: bytes (size of MPDUs) received from this station
2153
* @tx_bytes: bytes (size of MPDUs) transmitted to this station
2154
* @signal: The signal strength, type depends on the wiphy's signal_type.
2155
* For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
2156
* @signal_avg: Average signal strength, type depends on the wiphy's signal_type.
2157
* For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
2158
* @chains: bitmask for filled values in @chain_signal, @chain_signal_avg
2159
* @chain_signal: per-chain signal strength of last received packet in dBm
2160
* @chain_signal_avg: per-chain signal strength average in dBm
2161
* @txrate: current unicast bitrate from this station
2162
* @rxrate: current unicast bitrate to this station
2163
* @rx_packets: packets (MSDUs & MMPDUs) received from this station
2164
* @tx_packets: packets (MSDUs & MMPDUs) transmitted to this station
2165
* @tx_retries: cumulative retry counts (MPDUs)
2166
* @tx_failed: number of failed transmissions (MPDUs) (retries exceeded, no ACK)
2167
* @rx_dropped_misc: Dropped for un-specified reason.
2168
* @bss_param: current BSS parameters
2169
* @generation: generation number for nl80211 dumps.
2170
* This number should increase every time the list of stations
2171
* changes, i.e. when a station is added or removed, so that
2172
* userspace can tell whether it got a consistent snapshot.
2173
* @beacon_loss_count: Number of times beacon loss event has triggered.
2174
* @assoc_req_ies: IEs from (Re)Association Request.
2175
* This is used only when in AP mode with drivers that do not use
2176
* user space MLME/SME implementation. The information is provided for
2177
* the cfg80211_new_sta() calls to notify user space of the IEs.
2178
* @assoc_req_ies_len: Length of assoc_req_ies buffer in octets.
2179
* @sta_flags: station flags mask & values
2180
* @t_offset: Time offset of the station relative to this host.
2181
* @llid: mesh local link id
2182
* @plid: mesh peer link id
2183
* @plink_state: mesh peer link state
2184
* @connected_to_gate: true if mesh STA has a path to mesh gate
2185
* @connected_to_as: true if mesh STA has a path to authentication server
2186
* @airtime_link_metric: mesh airtime link metric.
2187
* @local_pm: local mesh STA power save mode
2188
* @peer_pm: peer mesh STA power save mode
2189
* @nonpeer_pm: non-peer mesh STA power save mode
2190
* @expected_throughput: expected throughput in kbps (including 802.11 headers)
2191
* towards this station.
2192
* @rx_beacon: number of beacons received from this peer
2193
* @rx_beacon_signal_avg: signal strength average (in dBm) for beacons received
2194
* from this peer
2195
* @rx_duration: aggregate PPDU duration(usecs) for all the frames from a peer
2196
* @tx_duration: aggregate PPDU duration(usecs) for all the frames to a peer
2197
* @airtime_weight: current airtime scheduling weight
2198
* @pertid: per-TID statistics, see &struct cfg80211_tid_stats, using the last
2199
* (IEEE80211_NUM_TIDS) index for MSDUs not encapsulated in QoS-MPDUs.
2200
* Note that this doesn't use the @filled bit, but is used if non-NULL.
2201
* @ack_signal: signal strength (in dBm) of the last ACK frame.
2202
* @avg_ack_signal: average rssi value of ack packet for the no of msdu's has
2203
* been sent.
2204
* @rx_mpdu_count: number of MPDUs received from this station
2205
* @fcs_err_count: number of packets (MPDUs) received from this station with
2206
* an FCS error. This counter should be incremented only when TA of the
2207
* received packet with an FCS error matches the peer MAC address.
2208
* @mlo_params_valid: Indicates @assoc_link_id and @mld_addr fields are filled
2209
* by driver. Drivers use this only in cfg80211_new_sta() calls when AP
2210
* MLD's MLME/SME is offload to driver. Drivers won't fill this
2211
* information in cfg80211_del_sta_sinfo(), get_station() and
2212
* dump_station() callbacks.
2213
* @assoc_link_id: Indicates MLO link ID of the AP, with which the station
2214
* completed (re)association. This information filled for both MLO
2215
* and non-MLO STA connections when the AP affiliated with an MLD.
2216
* @mld_addr: For MLO STA connection, filled with MLD address of the station.
2217
* For non-MLO STA connection, filled with all zeros.
2218
* @assoc_resp_ies: IEs from (Re)Association Response.
2219
* This is used only when in AP mode with drivers that do not use user
2220
* space MLME/SME implementation. The information is provided only for the
2221
* cfg80211_new_sta() calls to notify user space of the IEs. Drivers won't
2222
* fill this information in cfg80211_del_sta_sinfo(), get_station() and
2223
* dump_station() callbacks. User space needs this information to determine
2224
* the accepted and rejected affiliated links of the connected station.
2225
* @assoc_resp_ies_len: Length of @assoc_resp_ies buffer in octets.
2226
* @valid_links: bitmap of valid links, or 0 for non-MLO. Drivers fill this
2227
* information in cfg80211_new_sta(), cfg80211_del_sta_sinfo(),
2228
* get_station() and dump_station() callbacks.
2229
* @links: reference to Link sta entries for MLO STA, all link specific
2230
* information is accessed through links[link_id].
2231
*/
2232
struct station_info {
2233
u64 filled;
2234
u32 connected_time;
2235
u32 inactive_time;
2236
u64 assoc_at;
2237
u64 rx_bytes;
2238
u64 tx_bytes;
2239
s8 signal;
2240
s8 signal_avg;
2241
2242
u8 chains;
2243
s8 chain_signal[IEEE80211_MAX_CHAINS];
2244
s8 chain_signal_avg[IEEE80211_MAX_CHAINS];
2245
2246
struct rate_info txrate;
2247
struct rate_info rxrate;
2248
u32 rx_packets;
2249
u32 tx_packets;
2250
u32 tx_retries;
2251
u32 tx_failed;
2252
u32 rx_dropped_misc;
2253
struct sta_bss_parameters bss_param;
2254
struct nl80211_sta_flag_update sta_flags;
2255
2256
int generation;
2257
2258
u32 beacon_loss_count;
2259
2260
const u8 *assoc_req_ies;
2261
size_t assoc_req_ies_len;
2262
2263
s64 t_offset;
2264
u16 llid;
2265
u16 plid;
2266
u8 plink_state;
2267
u8 connected_to_gate;
2268
u8 connected_to_as;
2269
u32 airtime_link_metric;
2270
enum nl80211_mesh_power_mode local_pm;
2271
enum nl80211_mesh_power_mode peer_pm;
2272
enum nl80211_mesh_power_mode nonpeer_pm;
2273
2274
u32 expected_throughput;
2275
2276
u16 airtime_weight;
2277
2278
s8 ack_signal;
2279
s8 avg_ack_signal;
2280
struct cfg80211_tid_stats *pertid;
2281
2282
u64 tx_duration;
2283
u64 rx_duration;
2284
u64 rx_beacon;
2285
u8 rx_beacon_signal_avg;
2286
2287
u32 rx_mpdu_count;
2288
u32 fcs_err_count;
2289
2290
bool mlo_params_valid;
2291
u8 assoc_link_id;
2292
u8 mld_addr[ETH_ALEN] __aligned(2);
2293
const u8 *assoc_resp_ies;
2294
size_t assoc_resp_ies_len;
2295
2296
u16 valid_links;
2297
struct link_station_info *links[IEEE80211_MLD_MAX_NUM_LINKS];
2298
};
2299
2300
/**
2301
* struct cfg80211_sar_sub_specs - sub specs limit
2302
* @power: power limitation in 0.25dbm
2303
* @freq_range_index: index the power limitation applies to
2304
*/
2305
struct cfg80211_sar_sub_specs {
2306
s32 power;
2307
u32 freq_range_index;
2308
};
2309
2310
/**
2311
* struct cfg80211_sar_specs - sar limit specs
2312
* @type: it's set with power in 0.25dbm or other types
2313
* @num_sub_specs: number of sar sub specs
2314
* @sub_specs: memory to hold the sar sub specs
2315
*/
2316
struct cfg80211_sar_specs {
2317
enum nl80211_sar_type type;
2318
u32 num_sub_specs;
2319
struct cfg80211_sar_sub_specs sub_specs[] __counted_by(num_sub_specs);
2320
};
2321
2322
2323
/**
2324
* struct cfg80211_sar_freq_ranges - sar frequency ranges
2325
* @start_freq: start range edge frequency
2326
* @end_freq: end range edge frequency
2327
*/
2328
struct cfg80211_sar_freq_ranges {
2329
u32 start_freq;
2330
u32 end_freq;
2331
};
2332
2333
/**
2334
* struct cfg80211_sar_capa - sar limit capability
2335
* @type: it's set via power in 0.25dbm or other types
2336
* @num_freq_ranges: number of frequency ranges
2337
* @freq_ranges: memory to hold the freq ranges.
2338
*
2339
* Note: WLAN driver may append new ranges or split an existing
2340
* range to small ones and then append them.
2341
*/
2342
struct cfg80211_sar_capa {
2343
enum nl80211_sar_type type;
2344
u32 num_freq_ranges;
2345
const struct cfg80211_sar_freq_ranges *freq_ranges;
2346
};
2347
2348
#if IS_ENABLED(CONFIG_CFG80211)
2349
/**
2350
* cfg80211_get_station - retrieve information about a given station
2351
* @dev: the device where the station is supposed to be connected to
2352
* @mac_addr: the mac address of the station of interest
2353
* @sinfo: pointer to the structure to fill with the information
2354
*
2355
* Return: 0 on success and sinfo is filled with the available information
2356
* otherwise returns a negative error code and the content of sinfo has to be
2357
* considered undefined.
2358
*/
2359
int cfg80211_get_station(struct net_device *dev, const u8 *mac_addr,
2360
struct station_info *sinfo);
2361
#else
2362
static inline int cfg80211_get_station(struct net_device *dev,
2363
const u8 *mac_addr,
2364
struct station_info *sinfo)
2365
{
2366
return -ENOENT;
2367
}
2368
#endif
2369
2370
/**
2371
* enum monitor_flags - monitor flags
2372
*
2373
* Monitor interface configuration flags. Note that these must be the bits
2374
* according to the nl80211 flags.
2375
*
2376
* @MONITOR_FLAG_CHANGED: set if the flags were changed
2377
* @MONITOR_FLAG_FCSFAIL: pass frames with bad FCS
2378
* @MONITOR_FLAG_PLCPFAIL: pass frames with bad PLCP
2379
* @MONITOR_FLAG_CONTROL: pass control frames
2380
* @MONITOR_FLAG_OTHER_BSS: disable BSSID filtering
2381
* @MONITOR_FLAG_COOK_FRAMES: deprecated, will unconditionally be refused
2382
* @MONITOR_FLAG_ACTIVE: active monitor, ACKs frames on its MAC address
2383
* @MONITOR_FLAG_SKIP_TX: do not pass locally transmitted frames
2384
*/
2385
enum monitor_flags {
2386
MONITOR_FLAG_CHANGED = BIT(__NL80211_MNTR_FLAG_INVALID),
2387
MONITOR_FLAG_FCSFAIL = BIT(NL80211_MNTR_FLAG_FCSFAIL),
2388
MONITOR_FLAG_PLCPFAIL = BIT(NL80211_MNTR_FLAG_PLCPFAIL),
2389
MONITOR_FLAG_CONTROL = BIT(NL80211_MNTR_FLAG_CONTROL),
2390
MONITOR_FLAG_OTHER_BSS = BIT(NL80211_MNTR_FLAG_OTHER_BSS),
2391
MONITOR_FLAG_COOK_FRAMES = BIT(NL80211_MNTR_FLAG_COOK_FRAMES),
2392
MONITOR_FLAG_ACTIVE = BIT(NL80211_MNTR_FLAG_ACTIVE),
2393
MONITOR_FLAG_SKIP_TX = BIT(NL80211_MNTR_FLAG_SKIP_TX),
2394
};
2395
2396
/**
2397
* enum mpath_info_flags - mesh path information flags
2398
*
2399
* Used by the driver to indicate which info in &struct mpath_info it has filled
2400
* in during get_station() or dump_station().
2401
*
2402
* @MPATH_INFO_FRAME_QLEN: @frame_qlen filled
2403
* @MPATH_INFO_SN: @sn filled
2404
* @MPATH_INFO_METRIC: @metric filled
2405
* @MPATH_INFO_EXPTIME: @exptime filled
2406
* @MPATH_INFO_DISCOVERY_TIMEOUT: @discovery_timeout filled
2407
* @MPATH_INFO_DISCOVERY_RETRIES: @discovery_retries filled
2408
* @MPATH_INFO_FLAGS: @flags filled
2409
* @MPATH_INFO_HOP_COUNT: @hop_count filled
2410
* @MPATH_INFO_PATH_CHANGE: @path_change_count filled
2411
*/
2412
enum mpath_info_flags {
2413
MPATH_INFO_FRAME_QLEN = BIT(0),
2414
MPATH_INFO_SN = BIT(1),
2415
MPATH_INFO_METRIC = BIT(2),
2416
MPATH_INFO_EXPTIME = BIT(3),
2417
MPATH_INFO_DISCOVERY_TIMEOUT = BIT(4),
2418
MPATH_INFO_DISCOVERY_RETRIES = BIT(5),
2419
MPATH_INFO_FLAGS = BIT(6),
2420
MPATH_INFO_HOP_COUNT = BIT(7),
2421
MPATH_INFO_PATH_CHANGE = BIT(8),
2422
};
2423
2424
/**
2425
* struct mpath_info - mesh path information
2426
*
2427
* Mesh path information filled by driver for get_mpath() and dump_mpath().
2428
*
2429
* @filled: bitfield of flags from &enum mpath_info_flags
2430
* @frame_qlen: number of queued frames for this destination
2431
* @sn: target sequence number
2432
* @metric: metric (cost) of this mesh path
2433
* @exptime: expiration time for the mesh path from now, in msecs
2434
* @flags: mesh path flags from &enum mesh_path_flags
2435
* @discovery_timeout: total mesh path discovery timeout, in msecs
2436
* @discovery_retries: mesh path discovery retries
2437
* @generation: generation number for nl80211 dumps.
2438
* This number should increase every time the list of mesh paths
2439
* changes, i.e. when a station is added or removed, so that
2440
* userspace can tell whether it got a consistent snapshot.
2441
* @hop_count: hops to destination
2442
* @path_change_count: total number of path changes to destination
2443
*/
2444
struct mpath_info {
2445
u32 filled;
2446
u32 frame_qlen;
2447
u32 sn;
2448
u32 metric;
2449
u32 exptime;
2450
u32 discovery_timeout;
2451
u8 discovery_retries;
2452
u8 flags;
2453
u8 hop_count;
2454
u32 path_change_count;
2455
2456
int generation;
2457
};
2458
2459
/**
2460
* struct bss_parameters - BSS parameters
2461
*
2462
* Used to change BSS parameters (mainly for AP mode).
2463
*
2464
* @link_id: link_id or -1 for non-MLD
2465
* @use_cts_prot: Whether to use CTS protection
2466
* (0 = no, 1 = yes, -1 = do not change)
2467
* @use_short_preamble: Whether the use of short preambles is allowed
2468
* (0 = no, 1 = yes, -1 = do not change)
2469
* @use_short_slot_time: Whether the use of short slot time is allowed
2470
* (0 = no, 1 = yes, -1 = do not change)
2471
* @basic_rates: basic rates in IEEE 802.11 format
2472
* (or NULL for no change)
2473
* @basic_rates_len: number of basic rates
2474
* @ap_isolate: do not forward packets between connected stations
2475
* (0 = no, 1 = yes, -1 = do not change)
2476
* @ht_opmode: HT Operation mode
2477
* (u16 = opmode, -1 = do not change)
2478
* @p2p_ctwindow: P2P CT Window (-1 = no change)
2479
* @p2p_opp_ps: P2P opportunistic PS (-1 = no change)
2480
*/
2481
struct bss_parameters {
2482
int link_id;
2483
int use_cts_prot;
2484
int use_short_preamble;
2485
int use_short_slot_time;
2486
const u8 *basic_rates;
2487
u8 basic_rates_len;
2488
int ap_isolate;
2489
int ht_opmode;
2490
s8 p2p_ctwindow, p2p_opp_ps;
2491
};
2492
2493
/**
2494
* struct mesh_config - 802.11s mesh configuration
2495
*
2496
* These parameters can be changed while the mesh is active.
2497
*
2498
* @dot11MeshRetryTimeout: the initial retry timeout in millisecond units used
2499
* by the Mesh Peering Open message
2500
* @dot11MeshConfirmTimeout: the initial retry timeout in millisecond units
2501
* used by the Mesh Peering Open message
2502
* @dot11MeshHoldingTimeout: the confirm timeout in millisecond units used by
2503
* the mesh peering management to close a mesh peering
2504
* @dot11MeshMaxPeerLinks: the maximum number of peer links allowed on this
2505
* mesh interface
2506
* @dot11MeshMaxRetries: the maximum number of peer link open retries that can
2507
* be sent to establish a new peer link instance in a mesh
2508
* @dot11MeshTTL: the value of TTL field set at a source mesh STA
2509
* @element_ttl: the value of TTL field set at a mesh STA for path selection
2510
* elements
2511
* @auto_open_plinks: whether we should automatically open peer links when we
2512
* detect compatible mesh peers
2513
* @dot11MeshNbrOffsetMaxNeighbor: the maximum number of neighbors to
2514
* synchronize to for 11s default synchronization method
2515
* @dot11MeshHWMPmaxPREQretries: the number of action frames containing a PREQ
2516
* that an originator mesh STA can send to a particular path target
2517
* @path_refresh_time: how frequently to refresh mesh paths in milliseconds
2518
* @min_discovery_timeout: the minimum length of time to wait until giving up on
2519
* a path discovery in milliseconds
2520
* @dot11MeshHWMPactivePathTimeout: the time (in TUs) for which mesh STAs
2521
* receiving a PREQ shall consider the forwarding information from the
2522
* root to be valid. (TU = time unit)
2523
* @dot11MeshHWMPpreqMinInterval: the minimum interval of time (in TUs) during
2524
* which a mesh STA can send only one action frame containing a PREQ
2525
* element
2526
* @dot11MeshHWMPperrMinInterval: the minimum interval of time (in TUs) during
2527
* which a mesh STA can send only one Action frame containing a PERR
2528
* element
2529
* @dot11MeshHWMPnetDiameterTraversalTime: the interval of time (in TUs) that
2530
* it takes for an HWMP information element to propagate across the mesh
2531
* @dot11MeshHWMPRootMode: the configuration of a mesh STA as root mesh STA
2532
* @dot11MeshHWMPRannInterval: the interval of time (in TUs) between root
2533
* announcements are transmitted
2534
* @dot11MeshGateAnnouncementProtocol: whether to advertise that this mesh
2535
* station has access to a broader network beyond the MBSS. (This is
2536
* missnamed in draft 12.0: dot11MeshGateAnnouncementProtocol set to true
2537
* only means that the station will announce others it's a mesh gate, but
2538
* not necessarily using the gate announcement protocol. Still keeping the
2539
* same nomenclature to be in sync with the spec)
2540
* @dot11MeshForwarding: whether the Mesh STA is forwarding or non-forwarding
2541
* entity (default is TRUE - forwarding entity)
2542
* @rssi_threshold: the threshold for average signal strength of candidate
2543
* station to establish a peer link
2544
* @ht_opmode: mesh HT protection mode
2545
*
2546
* @dot11MeshHWMPactivePathToRootTimeout: The time (in TUs) for which mesh STAs
2547
* receiving a proactive PREQ shall consider the forwarding information to
2548
* the root mesh STA to be valid.
2549
*
2550
* @dot11MeshHWMProotInterval: The interval of time (in TUs) between proactive
2551
* PREQs are transmitted.
2552
* @dot11MeshHWMPconfirmationInterval: The minimum interval of time (in TUs)
2553
* during which a mesh STA can send only one Action frame containing
2554
* a PREQ element for root path confirmation.
2555
* @power_mode: The default mesh power save mode which will be the initial
2556
* setting for new peer links.
2557
* @dot11MeshAwakeWindowDuration: The duration in TUs the STA will remain awake
2558
* after transmitting its beacon.
2559
* @plink_timeout: If no tx activity is seen from a STA we've established
2560
* peering with for longer than this time (in seconds), then remove it
2561
* from the STA's list of peers. Default is 30 minutes.
2562
* @dot11MeshConnectedToAuthServer: if set to true then this mesh STA
2563
* will advertise that it is connected to a authentication server
2564
* in the mesh formation field.
2565
* @dot11MeshConnectedToMeshGate: if set to true, advertise that this STA is
2566
* connected to a mesh gate in mesh formation info. If false, the
2567
* value in mesh formation is determined by the presence of root paths
2568
* in the mesh path table
2569
* @dot11MeshNolearn: Try to avoid multi-hop path discovery (e.g. PREQ/PREP
2570
* for HWMP) if the destination is a direct neighbor. Note that this might
2571
* not be the optimal decision as a multi-hop route might be better. So
2572
* if using this setting you will likely also want to disable
2573
* dot11MeshForwarding and use another mesh routing protocol on top.
2574
*/
2575
struct mesh_config {
2576
u16 dot11MeshRetryTimeout;
2577
u16 dot11MeshConfirmTimeout;
2578
u16 dot11MeshHoldingTimeout;
2579
u16 dot11MeshMaxPeerLinks;
2580
u8 dot11MeshMaxRetries;
2581
u8 dot11MeshTTL;
2582
u8 element_ttl;
2583
bool auto_open_plinks;
2584
u32 dot11MeshNbrOffsetMaxNeighbor;
2585
u8 dot11MeshHWMPmaxPREQretries;
2586
u32 path_refresh_time;
2587
u16 min_discovery_timeout;
2588
u32 dot11MeshHWMPactivePathTimeout;
2589
u16 dot11MeshHWMPpreqMinInterval;
2590
u16 dot11MeshHWMPperrMinInterval;
2591
u16 dot11MeshHWMPnetDiameterTraversalTime;
2592
u8 dot11MeshHWMPRootMode;
2593
bool dot11MeshConnectedToMeshGate;
2594
bool dot11MeshConnectedToAuthServer;
2595
u16 dot11MeshHWMPRannInterval;
2596
bool dot11MeshGateAnnouncementProtocol;
2597
bool dot11MeshForwarding;
2598
s32 rssi_threshold;
2599
u16 ht_opmode;
2600
u32 dot11MeshHWMPactivePathToRootTimeout;
2601
u16 dot11MeshHWMProotInterval;
2602
u16 dot11MeshHWMPconfirmationInterval;
2603
enum nl80211_mesh_power_mode power_mode;
2604
u16 dot11MeshAwakeWindowDuration;
2605
u32 plink_timeout;
2606
bool dot11MeshNolearn;
2607
};
2608
2609
/**
2610
* struct mesh_setup - 802.11s mesh setup configuration
2611
* @chandef: defines the channel to use
2612
* @mesh_id: the mesh ID
2613
* @mesh_id_len: length of the mesh ID, at least 1 and at most 32 bytes
2614
* @sync_method: which synchronization method to use
2615
* @path_sel_proto: which path selection protocol to use
2616
* @path_metric: which metric to use
2617
* @auth_id: which authentication method this mesh is using
2618
* @ie: vendor information elements (optional)
2619
* @ie_len: length of vendor information elements
2620
* @is_authenticated: this mesh requires authentication
2621
* @is_secure: this mesh uses security
2622
* @user_mpm: userspace handles all MPM functions
2623
* @dtim_period: DTIM period to use
2624
* @beacon_interval: beacon interval to use
2625
* @mcast_rate: multicast rate for Mesh Node [6Mbps is the default for 802.11a]
2626
* @basic_rates: basic rates to use when creating the mesh
2627
* @beacon_rate: bitrate to be used for beacons
2628
* @userspace_handles_dfs: whether user space controls DFS operation, i.e.
2629
* changes the channel when a radar is detected. This is required
2630
* to operate on DFS channels.
2631
* @control_port_over_nl80211: TRUE if userspace expects to exchange control
2632
* port frames over NL80211 instead of the network interface.
2633
*
2634
* These parameters are fixed when the mesh is created.
2635
*/
2636
struct mesh_setup {
2637
struct cfg80211_chan_def chandef;
2638
const u8 *mesh_id;
2639
u8 mesh_id_len;
2640
u8 sync_method;
2641
u8 path_sel_proto;
2642
u8 path_metric;
2643
u8 auth_id;
2644
const u8 *ie;
2645
u8 ie_len;
2646
bool is_authenticated;
2647
bool is_secure;
2648
bool user_mpm;
2649
u8 dtim_period;
2650
u16 beacon_interval;
2651
int mcast_rate[NUM_NL80211_BANDS];
2652
u32 basic_rates;
2653
struct cfg80211_bitrate_mask beacon_rate;
2654
bool userspace_handles_dfs;
2655
bool control_port_over_nl80211;
2656
};
2657
2658
/**
2659
* struct ocb_setup - 802.11p OCB mode setup configuration
2660
* @chandef: defines the channel to use
2661
*
2662
* These parameters are fixed when connecting to the network
2663
*/
2664
struct ocb_setup {
2665
struct cfg80211_chan_def chandef;
2666
};
2667
2668
/**
2669
* struct ieee80211_txq_params - TX queue parameters
2670
* @ac: AC identifier
2671
* @txop: Maximum burst time in units of 32 usecs, 0 meaning disabled
2672
* @cwmin: Minimum contention window [a value of the form 2^n-1 in the range
2673
* 1..32767]
2674
* @cwmax: Maximum contention window [a value of the form 2^n-1 in the range
2675
* 1..32767]
2676
* @aifs: Arbitration interframe space [0..255]
2677
* @link_id: link_id or -1 for non-MLD
2678
*/
2679
struct ieee80211_txq_params {
2680
enum nl80211_ac ac;
2681
u16 txop;
2682
u16 cwmin;
2683
u16 cwmax;
2684
u8 aifs;
2685
int link_id;
2686
};
2687
2688
/**
2689
* DOC: Scanning and BSS list handling
2690
*
2691
* The scanning process itself is fairly simple, but cfg80211 offers quite
2692
* a bit of helper functionality. To start a scan, the scan operation will
2693
* be invoked with a scan definition. This scan definition contains the
2694
* channels to scan, and the SSIDs to send probe requests for (including the
2695
* wildcard, if desired). A passive scan is indicated by having no SSIDs to
2696
* probe. Additionally, a scan request may contain extra information elements
2697
* that should be added to the probe request. The IEs are guaranteed to be
2698
* well-formed, and will not exceed the maximum length the driver advertised
2699
* in the wiphy structure.
2700
*
2701
* When scanning finds a BSS, cfg80211 needs to be notified of that, because
2702
* it is responsible for maintaining the BSS list; the driver should not
2703
* maintain a list itself. For this notification, various functions exist.
2704
*
2705
* Since drivers do not maintain a BSS list, there are also a number of
2706
* functions to search for a BSS and obtain information about it from the
2707
* BSS structure cfg80211 maintains. The BSS list is also made available
2708
* to userspace.
2709
*/
2710
2711
/**
2712
* struct cfg80211_ssid - SSID description
2713
* @ssid: the SSID
2714
* @ssid_len: length of the ssid
2715
*/
2716
struct cfg80211_ssid {
2717
u8 ssid[IEEE80211_MAX_SSID_LEN];
2718
u8 ssid_len;
2719
};
2720
2721
/**
2722
* struct cfg80211_scan_info - information about completed scan
2723
* @scan_start_tsf: scan start time in terms of the TSF of the BSS that the
2724
* wireless device that requested the scan is connected to. If this
2725
* information is not available, this field is left zero.
2726
* @tsf_bssid: the BSSID according to which %scan_start_tsf is set.
2727
* @aborted: set to true if the scan was aborted for any reason,
2728
* userspace will be notified of that
2729
*/
2730
struct cfg80211_scan_info {
2731
u64 scan_start_tsf;
2732
u8 tsf_bssid[ETH_ALEN] __aligned(2);
2733
bool aborted;
2734
};
2735
2736
/**
2737
* struct cfg80211_scan_6ghz_params - relevant for 6 GHz only
2738
*
2739
* @short_ssid: short ssid to scan for
2740
* @bssid: bssid to scan for
2741
* @channel_idx: idx of the channel in the channel array in the scan request
2742
* which the above info is relevant to
2743
* @unsolicited_probe: the AP transmits unsolicited probe response every 20 TU
2744
* @short_ssid_valid: @short_ssid is valid and can be used
2745
* @psc_no_listen: when set, and the channel is a PSC channel, no need to wait
2746
* 20 TUs before starting to send probe requests.
2747
* @psd_20: The AP's 20 MHz PSD value.
2748
*/
2749
struct cfg80211_scan_6ghz_params {
2750
u32 short_ssid;
2751
u32 channel_idx;
2752
u8 bssid[ETH_ALEN];
2753
bool unsolicited_probe;
2754
bool short_ssid_valid;
2755
bool psc_no_listen;
2756
s8 psd_20;
2757
};
2758
2759
/**
2760
* struct cfg80211_scan_request - scan request description
2761
*
2762
* @ssids: SSIDs to scan for (active scan only)
2763
* @n_ssids: number of SSIDs
2764
* @channels: channels to scan on.
2765
* @n_channels: total number of channels to scan
2766
* @ie: optional information element(s) to add into Probe Request or %NULL
2767
* @ie_len: length of ie in octets
2768
* @duration: how long to listen on each channel, in TUs. If
2769
* %duration_mandatory is not set, this is the maximum dwell time and
2770
* the actual dwell time may be shorter.
2771
* @duration_mandatory: if set, the scan duration must be as specified by the
2772
* %duration field.
2773
* @flags: control flags from &enum nl80211_scan_flags
2774
* @rates: bitmap of rates to advertise for each band
2775
* @wiphy: the wiphy this was for
2776
* @scan_start: time (in jiffies) when the scan started
2777
* @wdev: the wireless device to scan for
2778
* @no_cck: used to send probe requests at non CCK rate in 2GHz band
2779
* @mac_addr: MAC address used with randomisation
2780
* @mac_addr_mask: MAC address mask used with randomisation, bits that
2781
* are 0 in the mask should be randomised, bits that are 1 should
2782
* be taken from the @mac_addr
2783
* @scan_6ghz: relevant for split scan request only,
2784
* true if this is a 6 GHz scan request
2785
* @first_part: %true if this is the first part of a split scan request or a
2786
* scan that was not split. May be %true for a @scan_6ghz scan if no other
2787
* channels were requested
2788
* @n_6ghz_params: number of 6 GHz params
2789
* @scan_6ghz_params: 6 GHz params
2790
* @bssid: BSSID to scan for (most commonly, the wildcard BSSID)
2791
* @tsf_report_link_id: for MLO, indicates the link ID of the BSS that should be
2792
* used for TSF reporting. Can be set to -1 to indicate no preference.
2793
*/
2794
struct cfg80211_scan_request {
2795
struct cfg80211_ssid *ssids;
2796
int n_ssids;
2797
u32 n_channels;
2798
const u8 *ie;
2799
size_t ie_len;
2800
u16 duration;
2801
bool duration_mandatory;
2802
u32 flags;
2803
2804
u32 rates[NUM_NL80211_BANDS];
2805
2806
struct wireless_dev *wdev;
2807
2808
u8 mac_addr[ETH_ALEN] __aligned(2);
2809
u8 mac_addr_mask[ETH_ALEN] __aligned(2);
2810
u8 bssid[ETH_ALEN] __aligned(2);
2811
struct wiphy *wiphy;
2812
unsigned long scan_start;
2813
bool no_cck;
2814
bool scan_6ghz;
2815
bool first_part;
2816
u32 n_6ghz_params;
2817
struct cfg80211_scan_6ghz_params *scan_6ghz_params;
2818
s8 tsf_report_link_id;
2819
2820
/* keep last */
2821
struct ieee80211_channel *channels[];
2822
};
2823
2824
static inline void get_random_mask_addr(u8 *buf, const u8 *addr, const u8 *mask)
2825
{
2826
int i;
2827
2828
get_random_bytes(buf, ETH_ALEN);
2829
for (i = 0; i < ETH_ALEN; i++) {
2830
buf[i] &= ~mask[i];
2831
buf[i] |= addr[i] & mask[i];
2832
}
2833
}
2834
2835
/**
2836
* struct cfg80211_match_set - sets of attributes to match
2837
*
2838
* @ssid: SSID to be matched; may be zero-length in case of BSSID match
2839
* or no match (RSSI only)
2840
* @bssid: BSSID to be matched; may be all-zero BSSID in case of SSID match
2841
* or no match (RSSI only)
2842
* @rssi_thold: don't report scan results below this threshold (in s32 dBm)
2843
*/
2844
struct cfg80211_match_set {
2845
struct cfg80211_ssid ssid;
2846
u8 bssid[ETH_ALEN];
2847
s32 rssi_thold;
2848
};
2849
2850
/**
2851
* struct cfg80211_sched_scan_plan - scan plan for scheduled scan
2852
*
2853
* @interval: interval between scheduled scan iterations. In seconds.
2854
* @iterations: number of scan iterations in this scan plan. Zero means
2855
* infinite loop.
2856
* The last scan plan will always have this parameter set to zero,
2857
* all other scan plans will have a finite number of iterations.
2858
*/
2859
struct cfg80211_sched_scan_plan {
2860
u32 interval;
2861
u32 iterations;
2862
};
2863
2864
/**
2865
* struct cfg80211_bss_select_adjust - BSS selection with RSSI adjustment.
2866
*
2867
* @band: band of BSS which should match for RSSI level adjustment.
2868
* @delta: value of RSSI level adjustment.
2869
*/
2870
struct cfg80211_bss_select_adjust {
2871
enum nl80211_band band;
2872
s8 delta;
2873
};
2874
2875
/**
2876
* struct cfg80211_sched_scan_request - scheduled scan request description
2877
*
2878
* @reqid: identifies this request.
2879
* @ssids: SSIDs to scan for (passed in the probe_reqs in active scans)
2880
* @n_ssids: number of SSIDs
2881
* @n_channels: total number of channels to scan
2882
* @ie: optional information element(s) to add into Probe Request or %NULL
2883
* @ie_len: length of ie in octets
2884
* @flags: control flags from &enum nl80211_scan_flags
2885
* @match_sets: sets of parameters to be matched for a scan result
2886
* entry to be considered valid and to be passed to the host
2887
* (others are filtered out).
2888
* If omitted, all results are passed.
2889
* @n_match_sets: number of match sets
2890
* @report_results: indicates that results were reported for this request
2891
* @wiphy: the wiphy this was for
2892
* @dev: the interface
2893
* @scan_start: start time of the scheduled scan
2894
* @channels: channels to scan
2895
* @min_rssi_thold: for drivers only supporting a single threshold, this
2896
* contains the minimum over all matchsets
2897
* @mac_addr: MAC address used with randomisation
2898
* @mac_addr_mask: MAC address mask used with randomisation, bits that
2899
* are 0 in the mask should be randomised, bits that are 1 should
2900
* be taken from the @mac_addr
2901
* @scan_plans: scan plans to be executed in this scheduled scan. Lowest
2902
* index must be executed first.
2903
* @n_scan_plans: number of scan plans, at least 1.
2904
* @rcu_head: RCU callback used to free the struct
2905
* @owner_nlportid: netlink portid of owner (if this should is a request
2906
* owned by a particular socket)
2907
* @nl_owner_dead: netlink owner socket was closed - this request be freed
2908
* @list: for keeping list of requests.
2909
* @delay: delay in seconds to use before starting the first scan
2910
* cycle. The driver may ignore this parameter and start
2911
* immediately (or at any other time), if this feature is not
2912
* supported.
2913
* @relative_rssi_set: Indicates whether @relative_rssi is set or not.
2914
* @relative_rssi: Relative RSSI threshold in dB to restrict scan result
2915
* reporting in connected state to cases where a matching BSS is determined
2916
* to have better or slightly worse RSSI than the current connected BSS.
2917
* The relative RSSI threshold values are ignored in disconnected state.
2918
* @rssi_adjust: delta dB of RSSI preference to be given to the BSSs that belong
2919
* to the specified band while deciding whether a better BSS is reported
2920
* using @relative_rssi. If delta is a negative number, the BSSs that
2921
* belong to the specified band will be penalized by delta dB in relative
2922
* comparisons.
2923
*/
2924
struct cfg80211_sched_scan_request {
2925
u64 reqid;
2926
struct cfg80211_ssid *ssids;
2927
int n_ssids;
2928
u32 n_channels;
2929
const u8 *ie;
2930
size_t ie_len;
2931
u32 flags;
2932
struct cfg80211_match_set *match_sets;
2933
int n_match_sets;
2934
s32 min_rssi_thold;
2935
u32 delay;
2936
struct cfg80211_sched_scan_plan *scan_plans;
2937
int n_scan_plans;
2938
2939
u8 mac_addr[ETH_ALEN] __aligned(2);
2940
u8 mac_addr_mask[ETH_ALEN] __aligned(2);
2941
2942
bool relative_rssi_set;
2943
s8 relative_rssi;
2944
struct cfg80211_bss_select_adjust rssi_adjust;
2945
2946
/* internal */
2947
struct wiphy *wiphy;
2948
struct net_device *dev;
2949
unsigned long scan_start;
2950
bool report_results;
2951
struct rcu_head rcu_head;
2952
u32 owner_nlportid;
2953
bool nl_owner_dead;
2954
struct list_head list;
2955
2956
/* keep last */
2957
struct ieee80211_channel *channels[] __counted_by(n_channels);
2958
};
2959
2960
/**
2961
* enum cfg80211_signal_type - signal type
2962
*
2963
* @CFG80211_SIGNAL_TYPE_NONE: no signal strength information available
2964
* @CFG80211_SIGNAL_TYPE_MBM: signal strength in mBm (100*dBm)
2965
* @CFG80211_SIGNAL_TYPE_UNSPEC: signal strength, increasing from 0 through 100
2966
*/
2967
enum cfg80211_signal_type {
2968
CFG80211_SIGNAL_TYPE_NONE,
2969
CFG80211_SIGNAL_TYPE_MBM,
2970
CFG80211_SIGNAL_TYPE_UNSPEC,
2971
};
2972
2973
/**
2974
* struct cfg80211_inform_bss - BSS inform data
2975
* @chan: channel the frame was received on
2976
* @signal: signal strength value, according to the wiphy's
2977
* signal type
2978
* @boottime_ns: timestamp (CLOCK_BOOTTIME) when the information was
2979
* received; should match the time when the frame was actually
2980
* received by the device (not just by the host, in case it was
2981
* buffered on the device) and be accurate to about 10ms.
2982
* If the frame isn't buffered, just passing the return value of
2983
* ktime_get_boottime_ns() is likely appropriate.
2984
* @parent_tsf: the time at the start of reception of the first octet of the
2985
* timestamp field of the frame. The time is the TSF of the BSS specified
2986
* by %parent_bssid.
2987
* @parent_bssid: the BSS according to which %parent_tsf is set. This is set to
2988
* the BSS that requested the scan in which the beacon/probe was received.
2989
* @chains: bitmask for filled values in @chain_signal.
2990
* @chain_signal: per-chain signal strength of last received BSS in dBm.
2991
* @restrict_use: restrict usage, if not set, assume @use_for is
2992
* %NL80211_BSS_USE_FOR_NORMAL.
2993
* @use_for: bitmap of possible usage for this BSS, see
2994
* &enum nl80211_bss_use_for
2995
* @cannot_use_reasons: the reasons (bitmap) for not being able to connect,
2996
* if @restrict_use is set and @use_for is zero (empty); may be 0 for
2997
* unspecified reasons; see &enum nl80211_bss_cannot_use_reasons
2998
* @drv_data: Data to be passed through to @inform_bss
2999
*/
3000
struct cfg80211_inform_bss {
3001
struct ieee80211_channel *chan;
3002
s32 signal;
3003
u64 boottime_ns;
3004
u64 parent_tsf;
3005
u8 parent_bssid[ETH_ALEN] __aligned(2);
3006
u8 chains;
3007
s8 chain_signal[IEEE80211_MAX_CHAINS];
3008
3009
u8 restrict_use:1, use_for:7;
3010
u8 cannot_use_reasons;
3011
3012
void *drv_data;
3013
};
3014
3015
/**
3016
* struct cfg80211_bss_ies - BSS entry IE data
3017
* @tsf: TSF contained in the frame that carried these IEs
3018
* @rcu_head: internal use, for freeing
3019
* @len: length of the IEs
3020
* @from_beacon: these IEs are known to come from a beacon
3021
* @data: IE data
3022
*/
3023
struct cfg80211_bss_ies {
3024
u64 tsf;
3025
struct rcu_head rcu_head;
3026
int len;
3027
bool from_beacon;
3028
u8 data[];
3029
};
3030
3031
/**
3032
* struct cfg80211_bss - BSS description
3033
*
3034
* This structure describes a BSS (which may also be a mesh network)
3035
* for use in scan results and similar.
3036
*
3037
* @channel: channel this BSS is on
3038
* @bssid: BSSID of the BSS
3039
* @beacon_interval: the beacon interval as from the frame
3040
* @capability: the capability field in host byte order
3041
* @ies: the information elements (Note that there is no guarantee that these
3042
* are well-formed!); this is a pointer to either the beacon_ies or
3043
* proberesp_ies depending on whether Probe Response frame has been
3044
* received. It is always non-%NULL.
3045
* @beacon_ies: the information elements from the last Beacon frame
3046
* (implementation note: if @hidden_beacon_bss is set this struct doesn't
3047
* own the beacon_ies, but they're just pointers to the ones from the
3048
* @hidden_beacon_bss struct)
3049
* @proberesp_ies: the information elements from the last Probe Response frame
3050
* @proberesp_ecsa_stuck: ECSA element is stuck in the Probe Response frame,
3051
* cannot rely on it having valid data
3052
* @hidden_beacon_bss: in case this BSS struct represents a probe response from
3053
* a BSS that hides the SSID in its beacon, this points to the BSS struct
3054
* that holds the beacon data. @beacon_ies is still valid, of course, and
3055
* points to the same data as hidden_beacon_bss->beacon_ies in that case.
3056
* @transmitted_bss: pointer to the transmitted BSS, if this is a
3057
* non-transmitted one (multi-BSSID support)
3058
* @nontrans_list: list of non-transmitted BSS, if this is a transmitted one
3059
* (multi-BSSID support)
3060
* @signal: signal strength value (type depends on the wiphy's signal_type)
3061
* @ts_boottime: timestamp of the last BSS update in nanoseconds since boot
3062
* @chains: bitmask for filled values in @chain_signal.
3063
* @chain_signal: per-chain signal strength of last received BSS in dBm.
3064
* @bssid_index: index in the multiple BSS set
3065
* @max_bssid_indicator: max number of members in the BSS set
3066
* @use_for: bitmap of possible usage for this BSS, see
3067
* &enum nl80211_bss_use_for
3068
* @cannot_use_reasons: the reasons (bitmap) for not being able to connect,
3069
* if @restrict_use is set and @use_for is zero (empty); may be 0 for
3070
* unspecified reasons; see &enum nl80211_bss_cannot_use_reasons
3071
* @priv: private area for driver use, has at least wiphy->bss_priv_size bytes
3072
*/
3073
struct cfg80211_bss {
3074
struct ieee80211_channel *channel;
3075
3076
const struct cfg80211_bss_ies __rcu *ies;
3077
const struct cfg80211_bss_ies __rcu *beacon_ies;
3078
const struct cfg80211_bss_ies __rcu *proberesp_ies;
3079
3080
struct cfg80211_bss *hidden_beacon_bss;
3081
struct cfg80211_bss *transmitted_bss;
3082
struct list_head nontrans_list;
3083
3084
s32 signal;
3085
3086
u64 ts_boottime;
3087
3088
u16 beacon_interval;
3089
u16 capability;
3090
3091
u8 bssid[ETH_ALEN];
3092
u8 chains;
3093
s8 chain_signal[IEEE80211_MAX_CHAINS];
3094
3095
u8 proberesp_ecsa_stuck:1;
3096
3097
u8 bssid_index;
3098
u8 max_bssid_indicator;
3099
3100
u8 use_for;
3101
u8 cannot_use_reasons;
3102
3103
u8 priv[] __aligned(sizeof(void *));
3104
};
3105
3106
/**
3107
* ieee80211_bss_get_elem - find element with given ID
3108
* @bss: the bss to search
3109
* @id: the element ID
3110
*
3111
* Note that the return value is an RCU-protected pointer, so
3112
* rcu_read_lock() must be held when calling this function.
3113
* Return: %NULL if not found.
3114
*/
3115
const struct element *ieee80211_bss_get_elem(struct cfg80211_bss *bss, u8 id);
3116
3117
/**
3118
* ieee80211_bss_get_ie - find IE with given ID
3119
* @bss: the bss to search
3120
* @id: the element ID
3121
*
3122
* Note that the return value is an RCU-protected pointer, so
3123
* rcu_read_lock() must be held when calling this function.
3124
* Return: %NULL if not found.
3125
*/
3126
static inline const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 id)
3127
{
3128
return (const void *)ieee80211_bss_get_elem(bss, id);
3129
}
3130
3131
3132
/**
3133
* struct cfg80211_auth_request - Authentication request data
3134
*
3135
* This structure provides information needed to complete IEEE 802.11
3136
* authentication.
3137
*
3138
* @bss: The BSS to authenticate with, the callee must obtain a reference
3139
* to it if it needs to keep it.
3140
* @supported_selectors: List of selectors that should be assumed to be
3141
* supported by the station.
3142
* SAE_H2E must be assumed supported if set to %NULL.
3143
* @supported_selectors_len: Length of supported_selectors in octets.
3144
* @auth_type: Authentication type (algorithm)
3145
* @ie: Extra IEs to add to Authentication frame or %NULL
3146
* @ie_len: Length of ie buffer in octets
3147
* @key_len: length of WEP key for shared key authentication
3148
* @key_idx: index of WEP key for shared key authentication
3149
* @key: WEP key for shared key authentication
3150
* @auth_data: Fields and elements in Authentication frames. This contains
3151
* the authentication frame body (non-IE and IE data), excluding the
3152
* Authentication algorithm number, i.e., starting at the Authentication
3153
* transaction sequence number field.
3154
* @auth_data_len: Length of auth_data buffer in octets
3155
* @link_id: if >= 0, indicates authentication should be done as an MLD,
3156
* the interface address is included as the MLD address and the
3157
* necessary link (with the given link_id) will be created (and
3158
* given an MLD address) by the driver
3159
* @ap_mld_addr: AP MLD address in case of authentication request with
3160
* an AP MLD, valid iff @link_id >= 0
3161
*/
3162
struct cfg80211_auth_request {
3163
struct cfg80211_bss *bss;
3164
const u8 *ie;
3165
size_t ie_len;
3166
const u8 *supported_selectors;
3167
u8 supported_selectors_len;
3168
enum nl80211_auth_type auth_type;
3169
const u8 *key;
3170
u8 key_len;
3171
s8 key_idx;
3172
const u8 *auth_data;
3173
size_t auth_data_len;
3174
s8 link_id;
3175
const u8 *ap_mld_addr;
3176
};
3177
3178
/**
3179
* struct cfg80211_assoc_link - per-link information for MLO association
3180
* @bss: the BSS pointer, see also &struct cfg80211_assoc_request::bss;
3181
* if this is %NULL for a link, that link is not requested
3182
* @elems: extra elements for the per-STA profile for this link
3183
* @elems_len: length of the elements
3184
* @disabled: If set this link should be included during association etc. but it
3185
* should not be used until enabled by the AP MLD.
3186
* @error: per-link error code, must be <= 0. If there is an error, then the
3187
* operation as a whole must fail.
3188
*/
3189
struct cfg80211_assoc_link {
3190
struct cfg80211_bss *bss;
3191
const u8 *elems;
3192
size_t elems_len;
3193
bool disabled;
3194
int error;
3195
};
3196
3197
/**
3198
* struct cfg80211_ml_reconf_req - MLO link reconfiguration request
3199
* @add_links: data for links to add, see &struct cfg80211_assoc_link
3200
* @rem_links: bitmap of links to remove
3201
* @ext_mld_capa_ops: extended MLD capabilities and operations set by
3202
* userspace for the ML reconfiguration action frame
3203
*/
3204
struct cfg80211_ml_reconf_req {
3205
struct cfg80211_assoc_link add_links[IEEE80211_MLD_MAX_NUM_LINKS];
3206
u16 rem_links;
3207
u16 ext_mld_capa_ops;
3208
};
3209
3210
/**
3211
* enum cfg80211_assoc_req_flags - Over-ride default behaviour in association.
3212
*
3213
* @ASSOC_REQ_DISABLE_HT: Disable HT (802.11n)
3214
* @ASSOC_REQ_DISABLE_VHT: Disable VHT
3215
* @ASSOC_REQ_USE_RRM: Declare RRM capability in this association
3216
* @CONNECT_REQ_EXTERNAL_AUTH_SUPPORT: User space indicates external
3217
* authentication capability. Drivers can offload authentication to
3218
* userspace if this flag is set. Only applicable for cfg80211_connect()
3219
* request (connect callback).
3220
* @ASSOC_REQ_DISABLE_HE: Disable HE
3221
* @ASSOC_REQ_DISABLE_EHT: Disable EHT
3222
* @CONNECT_REQ_MLO_SUPPORT: Userspace indicates support for handling MLD links.
3223
* Drivers shall disable MLO features for the current association if this
3224
* flag is not set.
3225
* @ASSOC_REQ_SPP_AMSDU: SPP A-MSDUs will be used on this connection (if any)
3226
*/
3227
enum cfg80211_assoc_req_flags {
3228
ASSOC_REQ_DISABLE_HT = BIT(0),
3229
ASSOC_REQ_DISABLE_VHT = BIT(1),
3230
ASSOC_REQ_USE_RRM = BIT(2),
3231
CONNECT_REQ_EXTERNAL_AUTH_SUPPORT = BIT(3),
3232
ASSOC_REQ_DISABLE_HE = BIT(4),
3233
ASSOC_REQ_DISABLE_EHT = BIT(5),
3234
CONNECT_REQ_MLO_SUPPORT = BIT(6),
3235
ASSOC_REQ_SPP_AMSDU = BIT(7),
3236
};
3237
3238
/**
3239
* struct cfg80211_assoc_request - (Re)Association request data
3240
*
3241
* This structure provides information needed to complete IEEE 802.11
3242
* (re)association.
3243
* @bss: The BSS to associate with. If the call is successful the driver is
3244
* given a reference that it must give back to cfg80211_send_rx_assoc()
3245
* or to cfg80211_assoc_timeout(). To ensure proper refcounting, new
3246
* association requests while already associating must be rejected.
3247
* This also applies to the @links.bss parameter, which is used instead
3248
* of this one (it is %NULL) for MLO associations.
3249
* @ie: Extra IEs to add to (Re)Association Request frame or %NULL
3250
* @ie_len: Length of ie buffer in octets
3251
* @use_mfp: Use management frame protection (IEEE 802.11w) in this association
3252
* @crypto: crypto settings
3253
* @prev_bssid: previous BSSID, if not %NULL use reassociate frame. This is used
3254
* to indicate a request to reassociate within the ESS instead of a request
3255
* do the initial association with the ESS. When included, this is set to
3256
* the BSSID of the current association, i.e., to the value that is
3257
* included in the Current AP address field of the Reassociation Request
3258
* frame.
3259
* @flags: See &enum cfg80211_assoc_req_flags
3260
* @supported_selectors: supported BSS selectors in IEEE 802.11 format
3261
* (or %NULL for no change).
3262
* If %NULL, then support for SAE_H2E should be assumed.
3263
* @supported_selectors_len: number of supported BSS selectors
3264
* @ht_capa: HT Capabilities over-rides. Values set in ht_capa_mask
3265
* will be used in ht_capa. Un-supported values will be ignored.
3266
* @ht_capa_mask: The bits of ht_capa which are to be used.
3267
* @vht_capa: VHT capability override
3268
* @vht_capa_mask: VHT capability mask indicating which fields to use
3269
* @fils_kek: FILS KEK for protecting (Re)Association Request/Response frame or
3270
* %NULL if FILS is not used.
3271
* @fils_kek_len: Length of fils_kek in octets
3272
* @fils_nonces: FILS nonces (part of AAD) for protecting (Re)Association
3273
* Request/Response frame or %NULL if FILS is not used. This field starts
3274
* with 16 octets of STA Nonce followed by 16 octets of AP Nonce.
3275
* @s1g_capa: S1G capability override
3276
* @s1g_capa_mask: S1G capability override mask
3277
* @links: per-link information for MLO connections
3278
* @link_id: >= 0 for MLO connections, where links are given, and indicates
3279
* the link on which the association request should be sent
3280
* @ap_mld_addr: AP MLD address in case of MLO association request,
3281
* valid iff @link_id >= 0
3282
* @ext_mld_capa_ops: extended MLD capabilities and operations set by
3283
* userspace for the association
3284
*/
3285
struct cfg80211_assoc_request {
3286
struct cfg80211_bss *bss;
3287
const u8 *ie, *prev_bssid;
3288
size_t ie_len;
3289
struct cfg80211_crypto_settings crypto;
3290
bool use_mfp;
3291
u32 flags;
3292
const u8 *supported_selectors;
3293
u8 supported_selectors_len;
3294
struct ieee80211_ht_cap ht_capa;
3295
struct ieee80211_ht_cap ht_capa_mask;
3296
struct ieee80211_vht_cap vht_capa, vht_capa_mask;
3297
const u8 *fils_kek;
3298
size_t fils_kek_len;
3299
const u8 *fils_nonces;
3300
struct ieee80211_s1g_cap s1g_capa, s1g_capa_mask;
3301
struct cfg80211_assoc_link links[IEEE80211_MLD_MAX_NUM_LINKS];
3302
const u8 *ap_mld_addr;
3303
s8 link_id;
3304
u16 ext_mld_capa_ops;
3305
};
3306
3307
/**
3308
* struct cfg80211_deauth_request - Deauthentication request data
3309
*
3310
* This structure provides information needed to complete IEEE 802.11
3311
* deauthentication.
3312
*
3313
* @bssid: the BSSID or AP MLD address to deauthenticate from
3314
* @ie: Extra IEs to add to Deauthentication frame or %NULL
3315
* @ie_len: Length of ie buffer in octets
3316
* @reason_code: The reason code for the deauthentication
3317
* @local_state_change: if set, change local state only and
3318
* do not set a deauth frame
3319
*/
3320
struct cfg80211_deauth_request {
3321
const u8 *bssid;
3322
const u8 *ie;
3323
size_t ie_len;
3324
u16 reason_code;
3325
bool local_state_change;
3326
};
3327
3328
/**
3329
* struct cfg80211_disassoc_request - Disassociation request data
3330
*
3331
* This structure provides information needed to complete IEEE 802.11
3332
* disassociation.
3333
*
3334
* @ap_addr: the BSSID or AP MLD address to disassociate from
3335
* @ie: Extra IEs to add to Disassociation frame or %NULL
3336
* @ie_len: Length of ie buffer in octets
3337
* @reason_code: The reason code for the disassociation
3338
* @local_state_change: This is a request for a local state only, i.e., no
3339
* Disassociation frame is to be transmitted.
3340
*/
3341
struct cfg80211_disassoc_request {
3342
const u8 *ap_addr;
3343
const u8 *ie;
3344
size_t ie_len;
3345
u16 reason_code;
3346
bool local_state_change;
3347
};
3348
3349
/**
3350
* struct cfg80211_ibss_params - IBSS parameters
3351
*
3352
* This structure defines the IBSS parameters for the join_ibss()
3353
* method.
3354
*
3355
* @ssid: The SSID, will always be non-null.
3356
* @ssid_len: The length of the SSID, will always be non-zero.
3357
* @bssid: Fixed BSSID requested, maybe be %NULL, if set do not
3358
* search for IBSSs with a different BSSID.
3359
* @chandef: defines the channel to use if no other IBSS to join can be found
3360
* @channel_fixed: The channel should be fixed -- do not search for
3361
* IBSSs to join on other channels.
3362
* @ie: information element(s) to include in the beacon
3363
* @ie_len: length of that
3364
* @beacon_interval: beacon interval to use
3365
* @privacy: this is a protected network, keys will be configured
3366
* after joining
3367
* @control_port: whether user space controls IEEE 802.1X port, i.e.,
3368
* sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is
3369
* required to assume that the port is unauthorized until authorized by
3370
* user space. Otherwise, port is marked authorized by default.
3371
* @control_port_over_nl80211: TRUE if userspace expects to exchange control
3372
* port frames over NL80211 instead of the network interface.
3373
* @userspace_handles_dfs: whether user space controls DFS operation, i.e.
3374
* changes the channel when a radar is detected. This is required
3375
* to operate on DFS channels.
3376
* @basic_rates: bitmap of basic rates to use when creating the IBSS
3377
* @mcast_rate: per-band multicast rate index + 1 (0: disabled)
3378
* @ht_capa: HT Capabilities over-rides. Values set in ht_capa_mask
3379
* will be used in ht_capa. Un-supported values will be ignored.
3380
* @ht_capa_mask: The bits of ht_capa which are to be used.
3381
* @wep_keys: static WEP keys, if not NULL points to an array of
3382
* CFG80211_MAX_WEP_KEYS WEP keys
3383
* @wep_tx_key: key index (0..3) of the default TX static WEP key
3384
*/
3385
struct cfg80211_ibss_params {
3386
const u8 *ssid;
3387
const u8 *bssid;
3388
struct cfg80211_chan_def chandef;
3389
const u8 *ie;
3390
u8 ssid_len, ie_len;
3391
u16 beacon_interval;
3392
u32 basic_rates;
3393
bool channel_fixed;
3394
bool privacy;
3395
bool control_port;
3396
bool control_port_over_nl80211;
3397
bool userspace_handles_dfs;
3398
int mcast_rate[NUM_NL80211_BANDS];
3399
struct ieee80211_ht_cap ht_capa;
3400
struct ieee80211_ht_cap ht_capa_mask;
3401
struct key_params *wep_keys;
3402
int wep_tx_key;
3403
};
3404
3405
/**
3406
* struct cfg80211_bss_selection - connection parameters for BSS selection.
3407
*
3408
* @behaviour: requested BSS selection behaviour.
3409
* @param: parameters for requestion behaviour.
3410
* @param.band_pref: preferred band for %NL80211_BSS_SELECT_ATTR_BAND_PREF.
3411
* @param.adjust: parameters for %NL80211_BSS_SELECT_ATTR_RSSI_ADJUST.
3412
*/
3413
struct cfg80211_bss_selection {
3414
enum nl80211_bss_select_attr behaviour;
3415
union {
3416
enum nl80211_band band_pref;
3417
struct cfg80211_bss_select_adjust adjust;
3418
} param;
3419
};
3420
3421
/**
3422
* struct cfg80211_connect_params - Connection parameters
3423
*
3424
* This structure provides information needed to complete IEEE 802.11
3425
* authentication and association.
3426
*
3427
* @channel: The channel to use or %NULL if not specified (auto-select based
3428
* on scan results)
3429
* @channel_hint: The channel of the recommended BSS for initial connection or
3430
* %NULL if not specified
3431
* @bssid: The AP BSSID or %NULL if not specified (auto-select based on scan
3432
* results)
3433
* @bssid_hint: The recommended AP BSSID for initial connection to the BSS or
3434
* %NULL if not specified. Unlike the @bssid parameter, the driver is
3435
* allowed to ignore this @bssid_hint if it has knowledge of a better BSS
3436
* to use.
3437
* @ssid: SSID
3438
* @ssid_len: Length of ssid in octets
3439
* @auth_type: Authentication type (algorithm)
3440
* @ie: IEs for association request
3441
* @ie_len: Length of assoc_ie in octets
3442
* @privacy: indicates whether privacy-enabled APs should be used
3443
* @mfp: indicate whether management frame protection is used
3444
* @crypto: crypto settings
3445
* @key_len: length of WEP key for shared key authentication
3446
* @key_idx: index of WEP key for shared key authentication
3447
* @key: WEP key for shared key authentication
3448
* @flags: See &enum cfg80211_assoc_req_flags
3449
* @bg_scan_period: Background scan period in seconds
3450
* or -1 to indicate that default value is to be used.
3451
* @ht_capa: HT Capabilities over-rides. Values set in ht_capa_mask
3452
* will be used in ht_capa. Un-supported values will be ignored.
3453
* @ht_capa_mask: The bits of ht_capa which are to be used.
3454
* @vht_capa: VHT Capability overrides
3455
* @vht_capa_mask: The bits of vht_capa which are to be used.
3456
* @pbss: if set, connect to a PCP instead of AP. Valid for DMG
3457
* networks.
3458
* @bss_select: criteria to be used for BSS selection.
3459
* @prev_bssid: previous BSSID, if not %NULL use reassociate frame. This is used
3460
* to indicate a request to reassociate within the ESS instead of a request
3461
* do the initial association with the ESS. When included, this is set to
3462
* the BSSID of the current association, i.e., to the value that is
3463
* included in the Current AP address field of the Reassociation Request
3464
* frame.
3465
* @fils_erp_username: EAP re-authentication protocol (ERP) username part of the
3466
* NAI or %NULL if not specified. This is used to construct FILS wrapped
3467
* data IE.
3468
* @fils_erp_username_len: Length of @fils_erp_username in octets.
3469
* @fils_erp_realm: EAP re-authentication protocol (ERP) realm part of NAI or
3470
* %NULL if not specified. This specifies the domain name of ER server and
3471
* is used to construct FILS wrapped data IE.
3472
* @fils_erp_realm_len: Length of @fils_erp_realm in octets.
3473
* @fils_erp_next_seq_num: The next sequence number to use in the FILS ERP
3474
* messages. This is also used to construct FILS wrapped data IE.
3475
* @fils_erp_rrk: ERP re-authentication Root Key (rRK) used to derive additional
3476
* keys in FILS or %NULL if not specified.
3477
* @fils_erp_rrk_len: Length of @fils_erp_rrk in octets.
3478
* @want_1x: indicates user-space supports and wants to use 802.1X driver
3479
* offload of 4-way handshake.
3480
* @edmg: define the EDMG channels.
3481
* This may specify multiple channels and bonding options for the driver
3482
* to choose from, based on BSS configuration.
3483
*/
3484
struct cfg80211_connect_params {
3485
struct ieee80211_channel *channel;
3486
struct ieee80211_channel *channel_hint;
3487
const u8 *bssid;
3488
const u8 *bssid_hint;
3489
const u8 *ssid;
3490
size_t ssid_len;
3491
enum nl80211_auth_type auth_type;
3492
const u8 *ie;
3493
size_t ie_len;
3494
bool privacy;
3495
enum nl80211_mfp mfp;
3496
struct cfg80211_crypto_settings crypto;
3497
const u8 *key;
3498
u8 key_len, key_idx;
3499
u32 flags;
3500
int bg_scan_period;
3501
struct ieee80211_ht_cap ht_capa;
3502
struct ieee80211_ht_cap ht_capa_mask;
3503
struct ieee80211_vht_cap vht_capa;
3504
struct ieee80211_vht_cap vht_capa_mask;
3505
bool pbss;
3506
struct cfg80211_bss_selection bss_select;
3507
const u8 *prev_bssid;
3508
const u8 *fils_erp_username;
3509
size_t fils_erp_username_len;
3510
const u8 *fils_erp_realm;
3511
size_t fils_erp_realm_len;
3512
u16 fils_erp_next_seq_num;
3513
const u8 *fils_erp_rrk;
3514
size_t fils_erp_rrk_len;
3515
bool want_1x;
3516
struct ieee80211_edmg edmg;
3517
};
3518
3519
/**
3520
* enum cfg80211_connect_params_changed - Connection parameters being updated
3521
*
3522
* This enum provides information of all connect parameters that
3523
* have to be updated as part of update_connect_params() call.
3524
*
3525
* @UPDATE_ASSOC_IES: Indicates whether association request IEs are updated
3526
* @UPDATE_FILS_ERP_INFO: Indicates that FILS connection parameters (realm,
3527
* username, erp sequence number and rrk) are updated
3528
* @UPDATE_AUTH_TYPE: Indicates that authentication type is updated
3529
*/
3530
enum cfg80211_connect_params_changed {
3531
UPDATE_ASSOC_IES = BIT(0),
3532
UPDATE_FILS_ERP_INFO = BIT(1),
3533
UPDATE_AUTH_TYPE = BIT(2),
3534
};
3535
3536
/**
3537
* enum wiphy_params_flags - set_wiphy_params bitfield values
3538
* @WIPHY_PARAM_RETRY_SHORT: wiphy->retry_short has changed
3539
* @WIPHY_PARAM_RETRY_LONG: wiphy->retry_long has changed
3540
* @WIPHY_PARAM_FRAG_THRESHOLD: wiphy->frag_threshold has changed
3541
* @WIPHY_PARAM_RTS_THRESHOLD: wiphy->rts_threshold has changed
3542
* @WIPHY_PARAM_COVERAGE_CLASS: coverage class changed
3543
* @WIPHY_PARAM_DYN_ACK: dynack has been enabled
3544
* @WIPHY_PARAM_TXQ_LIMIT: TXQ packet limit has been changed
3545
* @WIPHY_PARAM_TXQ_MEMORY_LIMIT: TXQ memory limit has been changed
3546
* @WIPHY_PARAM_TXQ_QUANTUM: TXQ scheduler quantum
3547
*/
3548
enum wiphy_params_flags {
3549
WIPHY_PARAM_RETRY_SHORT = BIT(0),
3550
WIPHY_PARAM_RETRY_LONG = BIT(1),
3551
WIPHY_PARAM_FRAG_THRESHOLD = BIT(2),
3552
WIPHY_PARAM_RTS_THRESHOLD = BIT(3),
3553
WIPHY_PARAM_COVERAGE_CLASS = BIT(4),
3554
WIPHY_PARAM_DYN_ACK = BIT(5),
3555
WIPHY_PARAM_TXQ_LIMIT = BIT(6),
3556
WIPHY_PARAM_TXQ_MEMORY_LIMIT = BIT(7),
3557
WIPHY_PARAM_TXQ_QUANTUM = BIT(8),
3558
};
3559
3560
#define IEEE80211_DEFAULT_AIRTIME_WEIGHT 256
3561
3562
/* The per TXQ device queue limit in airtime */
3563
#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_L 5000
3564
#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_H 12000
3565
3566
/* The per interface airtime threshold to switch to lower queue limit */
3567
#define IEEE80211_AQL_THRESHOLD 24000
3568
3569
/**
3570
* struct cfg80211_pmksa - PMK Security Association
3571
*
3572
* This structure is passed to the set/del_pmksa() method for PMKSA
3573
* caching.
3574
*
3575
* @bssid: The AP's BSSID (may be %NULL).
3576
* @pmkid: The identifier to refer a PMKSA.
3577
* @pmk: The PMK for the PMKSA identified by @pmkid. This is used for key
3578
* derivation by a FILS STA. Otherwise, %NULL.
3579
* @pmk_len: Length of the @pmk. The length of @pmk can differ depending on
3580
* the hash algorithm used to generate this.
3581
* @ssid: SSID to specify the ESS within which a PMKSA is valid when using FILS
3582
* cache identifier (may be %NULL).
3583
* @ssid_len: Length of the @ssid in octets.
3584
* @cache_id: 2-octet cache identifier advertized by a FILS AP identifying the
3585
* scope of PMKSA. This is valid only if @ssid_len is non-zero (may be
3586
* %NULL).
3587
* @pmk_lifetime: Maximum lifetime for PMKSA in seconds
3588
* (dot11RSNAConfigPMKLifetime) or 0 if not specified.
3589
* The configured PMKSA must not be used for PMKSA caching after
3590
* expiration and any keys derived from this PMK become invalid on
3591
* expiration, i.e., the current association must be dropped if the PMK
3592
* used for it expires.
3593
* @pmk_reauth_threshold: Threshold time for reauthentication (percentage of
3594
* PMK lifetime, dot11RSNAConfigPMKReauthThreshold) or 0 if not specified.
3595
* Drivers are expected to trigger a full authentication instead of using
3596
* this PMKSA for caching when reassociating to a new BSS after this
3597
* threshold to generate a new PMK before the current one expires.
3598
*/
3599
struct cfg80211_pmksa {
3600
const u8 *bssid;
3601
const u8 *pmkid;
3602
const u8 *pmk;
3603
size_t pmk_len;
3604
const u8 *ssid;
3605
size_t ssid_len;
3606
const u8 *cache_id;
3607
u32 pmk_lifetime;
3608
u8 pmk_reauth_threshold;
3609
};
3610
3611
/**
3612
* struct cfg80211_pkt_pattern - packet pattern
3613
* @mask: bitmask where to match pattern and where to ignore bytes,
3614
* one bit per byte, in same format as nl80211
3615
* @pattern: bytes to match where bitmask is 1
3616
* @pattern_len: length of pattern (in bytes)
3617
* @pkt_offset: packet offset (in bytes)
3618
*
3619
* Internal note: @mask and @pattern are allocated in one chunk of
3620
* memory, free @mask only!
3621
*/
3622
struct cfg80211_pkt_pattern {
3623
const u8 *mask, *pattern;
3624
int pattern_len;
3625
int pkt_offset;
3626
};
3627
3628
/**
3629
* struct cfg80211_wowlan_tcp - TCP connection parameters
3630
*
3631
* @sock: (internal) socket for source port allocation
3632
* @src: source IP address
3633
* @dst: destination IP address
3634
* @dst_mac: destination MAC address
3635
* @src_port: source port
3636
* @dst_port: destination port
3637
* @payload_len: data payload length
3638
* @payload: data payload buffer
3639
* @payload_seq: payload sequence stamping configuration
3640
* @data_interval: interval at which to send data packets
3641
* @wake_len: wakeup payload match length
3642
* @wake_data: wakeup payload match data
3643
* @wake_mask: wakeup payload match mask
3644
* @tokens_size: length of the tokens buffer
3645
* @payload_tok: payload token usage configuration
3646
*/
3647
struct cfg80211_wowlan_tcp {
3648
struct socket *sock;
3649
__be32 src, dst;
3650
u16 src_port, dst_port;
3651
u8 dst_mac[ETH_ALEN];
3652
int payload_len;
3653
const u8 *payload;
3654
struct nl80211_wowlan_tcp_data_seq payload_seq;
3655
u32 data_interval;
3656
u32 wake_len;
3657
const u8 *wake_data, *wake_mask;
3658
u32 tokens_size;
3659
/* must be last, variable member */
3660
struct nl80211_wowlan_tcp_data_token payload_tok;
3661
};
3662
3663
/**
3664
* struct cfg80211_wowlan - Wake on Wireless-LAN support info
3665
*
3666
* This structure defines the enabled WoWLAN triggers for the device.
3667
* @any: wake up on any activity -- special trigger if device continues
3668
* operating as normal during suspend
3669
* @disconnect: wake up if getting disconnected
3670
* @magic_pkt: wake up on receiving magic packet
3671
* @patterns: wake up on receiving packet matching a pattern
3672
* @n_patterns: number of patterns
3673
* @gtk_rekey_failure: wake up on GTK rekey failure
3674
* @eap_identity_req: wake up on EAP identity request packet
3675
* @four_way_handshake: wake up on 4-way handshake
3676
* @rfkill_release: wake up when rfkill is released
3677
* @tcp: TCP connection establishment/wakeup parameters, see nl80211.h.
3678
* NULL if not configured.
3679
* @nd_config: configuration for the scan to be used for net detect wake.
3680
*/
3681
struct cfg80211_wowlan {
3682
bool any, disconnect, magic_pkt, gtk_rekey_failure,
3683
eap_identity_req, four_way_handshake,
3684
rfkill_release;
3685
struct cfg80211_pkt_pattern *patterns;
3686
struct cfg80211_wowlan_tcp *tcp;
3687
int n_patterns;
3688
struct cfg80211_sched_scan_request *nd_config;
3689
};
3690
3691
/**
3692
* struct cfg80211_coalesce_rules - Coalesce rule parameters
3693
*
3694
* This structure defines coalesce rule for the device.
3695
* @delay: maximum coalescing delay in msecs.
3696
* @condition: condition for packet coalescence.
3697
* see &enum nl80211_coalesce_condition.
3698
* @patterns: array of packet patterns
3699
* @n_patterns: number of patterns
3700
*/
3701
struct cfg80211_coalesce_rules {
3702
int delay;
3703
enum nl80211_coalesce_condition condition;
3704
struct cfg80211_pkt_pattern *patterns;
3705
int n_patterns;
3706
};
3707
3708
/**
3709
* struct cfg80211_coalesce - Packet coalescing settings
3710
*
3711
* This structure defines coalescing settings.
3712
* @rules: array of coalesce rules
3713
* @n_rules: number of rules
3714
*/
3715
struct cfg80211_coalesce {
3716
int n_rules;
3717
struct cfg80211_coalesce_rules rules[] __counted_by(n_rules);
3718
};
3719
3720
/**
3721
* struct cfg80211_wowlan_nd_match - information about the match
3722
*
3723
* @ssid: SSID of the match that triggered the wake up
3724
* @n_channels: Number of channels where the match occurred. This
3725
* value may be zero if the driver can't report the channels.
3726
* @channels: center frequencies of the channels where a match
3727
* occurred (in MHz)
3728
*/
3729
struct cfg80211_wowlan_nd_match {
3730
struct cfg80211_ssid ssid;
3731
int n_channels;
3732
u32 channels[] __counted_by(n_channels);
3733
};
3734
3735
/**
3736
* struct cfg80211_wowlan_nd_info - net detect wake up information
3737
*
3738
* @n_matches: Number of match information instances provided in
3739
* @matches. This value may be zero if the driver can't provide
3740
* match information.
3741
* @matches: Array of pointers to matches containing information about
3742
* the matches that triggered the wake up.
3743
*/
3744
struct cfg80211_wowlan_nd_info {
3745
int n_matches;
3746
struct cfg80211_wowlan_nd_match *matches[] __counted_by(n_matches);
3747
};
3748
3749
/**
3750
* struct cfg80211_wowlan_wakeup - wakeup report
3751
* @disconnect: woke up by getting disconnected
3752
* @magic_pkt: woke up by receiving magic packet
3753
* @gtk_rekey_failure: woke up by GTK rekey failure
3754
* @eap_identity_req: woke up by EAP identity request packet
3755
* @four_way_handshake: woke up by 4-way handshake
3756
* @rfkill_release: woke up by rfkill being released
3757
* @pattern_idx: pattern that caused wakeup, -1 if not due to pattern
3758
* @packet_present_len: copied wakeup packet data
3759
* @packet_len: original wakeup packet length
3760
* @packet: The packet causing the wakeup, if any.
3761
* @packet_80211: For pattern match, magic packet and other data
3762
* frame triggers an 802.3 frame should be reported, for
3763
* disconnect due to deauth 802.11 frame. This indicates which
3764
* it is.
3765
* @tcp_match: TCP wakeup packet received
3766
* @tcp_connlost: TCP connection lost or failed to establish
3767
* @tcp_nomoretokens: TCP data ran out of tokens
3768
* @net_detect: if not %NULL, woke up because of net detect
3769
* @unprot_deauth_disassoc: woke up due to unprotected deauth or
3770
* disassoc frame (in MFP).
3771
*/
3772
struct cfg80211_wowlan_wakeup {
3773
bool disconnect, magic_pkt, gtk_rekey_failure,
3774
eap_identity_req, four_way_handshake,
3775
rfkill_release, packet_80211,
3776
tcp_match, tcp_connlost, tcp_nomoretokens,
3777
unprot_deauth_disassoc;
3778
s32 pattern_idx;
3779
u32 packet_present_len, packet_len;
3780
const void *packet;
3781
struct cfg80211_wowlan_nd_info *net_detect;
3782
};
3783
3784
/**
3785
* struct cfg80211_gtk_rekey_data - rekey data
3786
* @kek: key encryption key (@kek_len bytes)
3787
* @kck: key confirmation key (@kck_len bytes)
3788
* @replay_ctr: replay counter (NL80211_REPLAY_CTR_LEN bytes)
3789
* @kek_len: length of kek
3790
* @kck_len: length of kck
3791
* @akm: akm (oui, id)
3792
*/
3793
struct cfg80211_gtk_rekey_data {
3794
const u8 *kek, *kck, *replay_ctr;
3795
u32 akm;
3796
u8 kek_len, kck_len;
3797
};
3798
3799
/**
3800
* struct cfg80211_update_ft_ies_params - FT IE Information
3801
*
3802
* This structure provides information needed to update the fast transition IE
3803
*
3804
* @md: The Mobility Domain ID, 2 Octet value
3805
* @ie: Fast Transition IEs
3806
* @ie_len: Length of ft_ie in octets
3807
*/
3808
struct cfg80211_update_ft_ies_params {
3809
u16 md;
3810
const u8 *ie;
3811
size_t ie_len;
3812
};
3813
3814
/**
3815
* struct cfg80211_mgmt_tx_params - mgmt tx parameters
3816
*
3817
* This structure provides information needed to transmit a mgmt frame
3818
*
3819
* @chan: channel to use
3820
* @offchan: indicates whether off channel operation is required
3821
* @wait: duration for ROC
3822
* @buf: buffer to transmit
3823
* @len: buffer length
3824
* @no_cck: don't use cck rates for this frame
3825
* @dont_wait_for_ack: tells the low level not to wait for an ack
3826
* @n_csa_offsets: length of csa_offsets array
3827
* @csa_offsets: array of all the csa offsets in the frame
3828
* @link_id: for MLO, the link ID to transmit on, -1 if not given; note
3829
* that the link ID isn't validated (much), it's in range but the
3830
* link might not exist (or be used by the receiver STA)
3831
*/
3832
struct cfg80211_mgmt_tx_params {
3833
struct ieee80211_channel *chan;
3834
bool offchan;
3835
unsigned int wait;
3836
const u8 *buf;
3837
size_t len;
3838
bool no_cck;
3839
bool dont_wait_for_ack;
3840
int n_csa_offsets;
3841
const u16 *csa_offsets;
3842
int link_id;
3843
};
3844
3845
/**
3846
* struct cfg80211_dscp_exception - DSCP exception
3847
*
3848
* @dscp: DSCP value that does not adhere to the user priority range definition
3849
* @up: user priority value to which the corresponding DSCP value belongs
3850
*/
3851
struct cfg80211_dscp_exception {
3852
u8 dscp;
3853
u8 up;
3854
};
3855
3856
/**
3857
* struct cfg80211_dscp_range - DSCP range definition for user priority
3858
*
3859
* @low: lowest DSCP value of this user priority range, inclusive
3860
* @high: highest DSCP value of this user priority range, inclusive
3861
*/
3862
struct cfg80211_dscp_range {
3863
u8 low;
3864
u8 high;
3865
};
3866
3867
/* QoS Map Set element length defined in IEEE Std 802.11-2012, 8.4.2.97 */
3868
#define IEEE80211_QOS_MAP_MAX_EX 21
3869
#define IEEE80211_QOS_MAP_LEN_MIN 16
3870
#define IEEE80211_QOS_MAP_LEN_MAX \
3871
(IEEE80211_QOS_MAP_LEN_MIN + 2 * IEEE80211_QOS_MAP_MAX_EX)
3872
3873
/**
3874
* struct cfg80211_qos_map - QoS Map Information
3875
*
3876
* This struct defines the Interworking QoS map setting for DSCP values
3877
*
3878
* @num_des: number of DSCP exceptions (0..21)
3879
* @dscp_exception: optionally up to maximum of 21 DSCP exceptions from
3880
* the user priority DSCP range definition
3881
* @up: DSCP range definition for a particular user priority
3882
*/
3883
struct cfg80211_qos_map {
3884
u8 num_des;
3885
struct cfg80211_dscp_exception dscp_exception[IEEE80211_QOS_MAP_MAX_EX];
3886
struct cfg80211_dscp_range up[8];
3887
};
3888
3889
/**
3890
* struct cfg80211_nan_conf - NAN configuration
3891
*
3892
* This struct defines NAN configuration parameters
3893
*
3894
* @master_pref: master preference (1 - 255)
3895
* @bands: operating bands, a bitmap of &enum nl80211_band values.
3896
* For instance, for NL80211_BAND_2GHZ, bit 0 would be set
3897
* (i.e. BIT(NL80211_BAND_2GHZ)).
3898
*/
3899
struct cfg80211_nan_conf {
3900
u8 master_pref;
3901
u8 bands;
3902
};
3903
3904
/**
3905
* enum cfg80211_nan_conf_changes - indicates changed fields in NAN
3906
* configuration
3907
*
3908
* @CFG80211_NAN_CONF_CHANGED_PREF: master preference
3909
* @CFG80211_NAN_CONF_CHANGED_BANDS: operating bands
3910
*/
3911
enum cfg80211_nan_conf_changes {
3912
CFG80211_NAN_CONF_CHANGED_PREF = BIT(0),
3913
CFG80211_NAN_CONF_CHANGED_BANDS = BIT(1),
3914
};
3915
3916
/**
3917
* struct cfg80211_nan_func_filter - a NAN function Rx / Tx filter
3918
*
3919
* @filter: the content of the filter
3920
* @len: the length of the filter
3921
*/
3922
struct cfg80211_nan_func_filter {
3923
const u8 *filter;
3924
u8 len;
3925
};
3926
3927
/**
3928
* struct cfg80211_nan_func - a NAN function
3929
*
3930
* @type: &enum nl80211_nan_function_type
3931
* @service_id: the service ID of the function
3932
* @publish_type: &nl80211_nan_publish_type
3933
* @close_range: if true, the range should be limited. Threshold is
3934
* implementation specific.
3935
* @publish_bcast: if true, the solicited publish should be broadcasted
3936
* @subscribe_active: if true, the subscribe is active
3937
* @followup_id: the instance ID for follow up
3938
* @followup_reqid: the requester instance ID for follow up
3939
* @followup_dest: MAC address of the recipient of the follow up
3940
* @ttl: time to live counter in DW.
3941
* @serv_spec_info: Service Specific Info
3942
* @serv_spec_info_len: Service Specific Info length
3943
* @srf_include: if true, SRF is inclusive
3944
* @srf_bf: Bloom Filter
3945
* @srf_bf_len: Bloom Filter length
3946
* @srf_bf_idx: Bloom Filter index
3947
* @srf_macs: SRF MAC addresses
3948
* @srf_num_macs: number of MAC addresses in SRF
3949
* @rx_filters: rx filters that are matched with corresponding peer's tx_filter
3950
* @tx_filters: filters that should be transmitted in the SDF.
3951
* @num_rx_filters: length of &rx_filters.
3952
* @num_tx_filters: length of &tx_filters.
3953
* @instance_id: driver allocated id of the function.
3954
* @cookie: unique NAN function identifier.
3955
*/
3956
struct cfg80211_nan_func {
3957
enum nl80211_nan_function_type type;
3958
u8 service_id[NL80211_NAN_FUNC_SERVICE_ID_LEN];
3959
u8 publish_type;
3960
bool close_range;
3961
bool publish_bcast;
3962
bool subscribe_active;
3963
u8 followup_id;
3964
u8 followup_reqid;
3965
struct mac_address followup_dest;
3966
u32 ttl;
3967
const u8 *serv_spec_info;
3968
u8 serv_spec_info_len;
3969
bool srf_include;
3970
const u8 *srf_bf;
3971
u8 srf_bf_len;
3972
u8 srf_bf_idx;
3973
struct mac_address *srf_macs;
3974
int srf_num_macs;
3975
struct cfg80211_nan_func_filter *rx_filters;
3976
struct cfg80211_nan_func_filter *tx_filters;
3977
u8 num_tx_filters;
3978
u8 num_rx_filters;
3979
u8 instance_id;
3980
u64 cookie;
3981
};
3982
3983
/**
3984
* struct cfg80211_pmk_conf - PMK configuration
3985
*
3986
* @aa: authenticator address
3987
* @pmk_len: PMK length in bytes.
3988
* @pmk: the PMK material
3989
* @pmk_r0_name: PMK-R0 Name. NULL if not applicable (i.e., the PMK
3990
* is not PMK-R0). When pmk_r0_name is not NULL, the pmk field
3991
* holds PMK-R0.
3992
*/
3993
struct cfg80211_pmk_conf {
3994
const u8 *aa;
3995
u8 pmk_len;
3996
const u8 *pmk;
3997
const u8 *pmk_r0_name;
3998
};
3999
4000
/**
4001
* struct cfg80211_external_auth_params - Trigger External authentication.
4002
*
4003
* Commonly used across the external auth request and event interfaces.
4004
*
4005
* @action: action type / trigger for external authentication. Only significant
4006
* for the authentication request event interface (driver to user space).
4007
* @bssid: BSSID of the peer with which the authentication has
4008
* to happen. Used by both the authentication request event and
4009
* authentication response command interface.
4010
* @ssid: SSID of the AP. Used by both the authentication request event and
4011
* authentication response command interface.
4012
* @key_mgmt_suite: AKM suite of the respective authentication. Used by the
4013
* authentication request event interface.
4014
* @status: status code, %WLAN_STATUS_SUCCESS for successful authentication,
4015
* use %WLAN_STATUS_UNSPECIFIED_FAILURE if user space cannot give you
4016
* the real status code for failures. Used only for the authentication
4017
* response command interface (user space to driver).
4018
* @pmkid: The identifier to refer a PMKSA.
4019
* @mld_addr: MLD address of the peer. Used by the authentication request event
4020
* interface. Driver indicates this to enable MLO during the authentication
4021
* offload to user space. Driver shall look at %NL80211_ATTR_MLO_SUPPORT
4022
* flag capability in NL80211_CMD_CONNECT to know whether the user space
4023
* supports enabling MLO during the authentication offload.
4024
* User space should use the address of the interface (on which the
4025
* authentication request event reported) as self MLD address. User space
4026
* and driver should use MLD addresses in RA, TA and BSSID fields of
4027
* authentication frames sent or received via cfg80211. The driver
4028
* translates the MLD addresses to/from link addresses based on the link
4029
* chosen for the authentication.
4030
*/
4031
struct cfg80211_external_auth_params {
4032
enum nl80211_external_auth_action action;
4033
u8 bssid[ETH_ALEN] __aligned(2);
4034
struct cfg80211_ssid ssid;
4035
unsigned int key_mgmt_suite;
4036
u16 status;
4037
const u8 *pmkid;
4038
u8 mld_addr[ETH_ALEN] __aligned(2);
4039
};
4040
4041
/**
4042
* struct cfg80211_ftm_responder_stats - FTM responder statistics
4043
*
4044
* @filled: bitflag of flags using the bits of &enum nl80211_ftm_stats to
4045
* indicate the relevant values in this struct for them
4046
* @success_num: number of FTM sessions in which all frames were successfully
4047
* answered
4048
* @partial_num: number of FTM sessions in which part of frames were
4049
* successfully answered
4050
* @failed_num: number of failed FTM sessions
4051
* @asap_num: number of ASAP FTM sessions
4052
* @non_asap_num: number of non-ASAP FTM sessions
4053
* @total_duration_ms: total sessions durations - gives an indication
4054
* of how much time the responder was busy
4055
* @unknown_triggers_num: number of unknown FTM triggers - triggers from
4056
* initiators that didn't finish successfully the negotiation phase with
4057
* the responder
4058
* @reschedule_requests_num: number of FTM reschedule requests - initiator asks
4059
* for a new scheduling although it already has scheduled FTM slot
4060
* @out_of_window_triggers_num: total FTM triggers out of scheduled window
4061
*/
4062
struct cfg80211_ftm_responder_stats {
4063
u32 filled;
4064
u32 success_num;
4065
u32 partial_num;
4066
u32 failed_num;
4067
u32 asap_num;
4068
u32 non_asap_num;
4069
u64 total_duration_ms;
4070
u32 unknown_triggers_num;
4071
u32 reschedule_requests_num;
4072
u32 out_of_window_triggers_num;
4073
};
4074
4075
/**
4076
* struct cfg80211_pmsr_ftm_result - FTM result
4077
* @failure_reason: if this measurement failed (PMSR status is
4078
* %NL80211_PMSR_STATUS_FAILURE), this gives a more precise
4079
* reason than just "failure"
4080
* @burst_index: if reporting partial results, this is the index
4081
* in [0 .. num_bursts-1] of the burst that's being reported
4082
* @num_ftmr_attempts: number of FTM request frames transmitted
4083
* @num_ftmr_successes: number of FTM request frames acked
4084
* @busy_retry_time: if failure_reason is %NL80211_PMSR_FTM_FAILURE_PEER_BUSY,
4085
* fill this to indicate in how many seconds a retry is deemed possible
4086
* by the responder
4087
* @num_bursts_exp: actual number of bursts exponent negotiated
4088
* @burst_duration: actual burst duration negotiated
4089
* @ftms_per_burst: actual FTMs per burst negotiated
4090
* @lci_len: length of LCI information (if present)
4091
* @civicloc_len: length of civic location information (if present)
4092
* @lci: LCI data (may be %NULL)
4093
* @civicloc: civic location data (may be %NULL)
4094
* @rssi_avg: average RSSI over FTM action frames reported
4095
* @rssi_spread: spread of the RSSI over FTM action frames reported
4096
* @tx_rate: bitrate for transmitted FTM action frame response
4097
* @rx_rate: bitrate of received FTM action frame
4098
* @rtt_avg: average of RTTs measured (must have either this or @dist_avg)
4099
* @rtt_variance: variance of RTTs measured (note that standard deviation is
4100
* the square root of the variance)
4101
* @rtt_spread: spread of the RTTs measured
4102
* @dist_avg: average of distances (mm) measured
4103
* (must have either this or @rtt_avg)
4104
* @dist_variance: variance of distances measured (see also @rtt_variance)
4105
* @dist_spread: spread of distances measured (see also @rtt_spread)
4106
* @num_ftmr_attempts_valid: @num_ftmr_attempts is valid
4107
* @num_ftmr_successes_valid: @num_ftmr_successes is valid
4108
* @rssi_avg_valid: @rssi_avg is valid
4109
* @rssi_spread_valid: @rssi_spread is valid
4110
* @tx_rate_valid: @tx_rate is valid
4111
* @rx_rate_valid: @rx_rate is valid
4112
* @rtt_avg_valid: @rtt_avg is valid
4113
* @rtt_variance_valid: @rtt_variance is valid
4114
* @rtt_spread_valid: @rtt_spread is valid
4115
* @dist_avg_valid: @dist_avg is valid
4116
* @dist_variance_valid: @dist_variance is valid
4117
* @dist_spread_valid: @dist_spread is valid
4118
*/
4119
struct cfg80211_pmsr_ftm_result {
4120
const u8 *lci;
4121
const u8 *civicloc;
4122
unsigned int lci_len;
4123
unsigned int civicloc_len;
4124
enum nl80211_peer_measurement_ftm_failure_reasons failure_reason;
4125
u32 num_ftmr_attempts, num_ftmr_successes;
4126
s16 burst_index;
4127
u8 busy_retry_time;
4128
u8 num_bursts_exp;
4129
u8 burst_duration;
4130
u8 ftms_per_burst;
4131
s32 rssi_avg;
4132
s32 rssi_spread;
4133
struct rate_info tx_rate, rx_rate;
4134
s64 rtt_avg;
4135
s64 rtt_variance;
4136
s64 rtt_spread;
4137
s64 dist_avg;
4138
s64 dist_variance;
4139
s64 dist_spread;
4140
4141
u16 num_ftmr_attempts_valid:1,
4142
num_ftmr_successes_valid:1,
4143
rssi_avg_valid:1,
4144
rssi_spread_valid:1,
4145
tx_rate_valid:1,
4146
rx_rate_valid:1,
4147
rtt_avg_valid:1,
4148
rtt_variance_valid:1,
4149
rtt_spread_valid:1,
4150
dist_avg_valid:1,
4151
dist_variance_valid:1,
4152
dist_spread_valid:1;
4153
};
4154
4155
/**
4156
* struct cfg80211_pmsr_result - peer measurement result
4157
* @addr: address of the peer
4158
* @host_time: host time (use ktime_get_boottime() adjust to the time when the
4159
* measurement was made)
4160
* @ap_tsf: AP's TSF at measurement time
4161
* @status: status of the measurement
4162
* @final: if reporting partial results, mark this as the last one; if not
4163
* reporting partial results always set this flag
4164
* @ap_tsf_valid: indicates the @ap_tsf value is valid
4165
* @type: type of the measurement reported, note that we only support reporting
4166
* one type at a time, but you can report multiple results separately and
4167
* they're all aggregated for userspace.
4168
* @ftm: FTM result
4169
*/
4170
struct cfg80211_pmsr_result {
4171
u64 host_time, ap_tsf;
4172
enum nl80211_peer_measurement_status status;
4173
4174
u8 addr[ETH_ALEN];
4175
4176
u8 final:1,
4177
ap_tsf_valid:1;
4178
4179
enum nl80211_peer_measurement_type type;
4180
4181
union {
4182
struct cfg80211_pmsr_ftm_result ftm;
4183
};
4184
};
4185
4186
/**
4187
* struct cfg80211_pmsr_ftm_request_peer - FTM request data
4188
* @requested: indicates FTM is requested
4189
* @preamble: frame preamble to use
4190
* @burst_period: burst period to use
4191
* @asap: indicates to use ASAP mode
4192
* @num_bursts_exp: number of bursts exponent
4193
* @burst_duration: burst duration
4194
* @ftms_per_burst: number of FTMs per burst
4195
* @ftmr_retries: number of retries for FTM request
4196
* @request_lci: request LCI information
4197
* @request_civicloc: request civic location information
4198
* @trigger_based: use trigger based ranging for the measurement
4199
* If neither @trigger_based nor @non_trigger_based is set,
4200
* EDCA based ranging will be used.
4201
* @non_trigger_based: use non trigger based ranging for the measurement
4202
* If neither @trigger_based nor @non_trigger_based is set,
4203
* EDCA based ranging will be used.
4204
* @lmr_feedback: negotiate for I2R LMR feedback. Only valid if either
4205
* @trigger_based or @non_trigger_based is set.
4206
* @bss_color: the bss color of the responder. Optional. Set to zero to
4207
* indicate the driver should set the BSS color. Only valid if
4208
* @non_trigger_based or @trigger_based is set.
4209
*
4210
* See also nl80211 for the respective attribute documentation.
4211
*/
4212
struct cfg80211_pmsr_ftm_request_peer {
4213
enum nl80211_preamble preamble;
4214
u16 burst_period;
4215
u8 requested:1,
4216
asap:1,
4217
request_lci:1,
4218
request_civicloc:1,
4219
trigger_based:1,
4220
non_trigger_based:1,
4221
lmr_feedback:1;
4222
u8 num_bursts_exp;
4223
u8 burst_duration;
4224
u8 ftms_per_burst;
4225
u8 ftmr_retries;
4226
u8 bss_color;
4227
};
4228
4229
/**
4230
* struct cfg80211_pmsr_request_peer - peer data for a peer measurement request
4231
* @addr: MAC address
4232
* @chandef: channel to use
4233
* @report_ap_tsf: report the associated AP's TSF
4234
* @ftm: FTM data, see &struct cfg80211_pmsr_ftm_request_peer
4235
*/
4236
struct cfg80211_pmsr_request_peer {
4237
u8 addr[ETH_ALEN];
4238
struct cfg80211_chan_def chandef;
4239
u8 report_ap_tsf:1;
4240
struct cfg80211_pmsr_ftm_request_peer ftm;
4241
};
4242
4243
/**
4244
* struct cfg80211_pmsr_request - peer measurement request
4245
* @cookie: cookie, set by cfg80211
4246
* @nl_portid: netlink portid - used by cfg80211
4247
* @drv_data: driver data for this request, if required for aborting,
4248
* not otherwise freed or anything by cfg80211
4249
* @mac_addr: MAC address used for (randomised) request
4250
* @mac_addr_mask: MAC address mask used for randomisation, bits that
4251
* are 0 in the mask should be randomised, bits that are 1 should
4252
* be taken from the @mac_addr
4253
* @list: used by cfg80211 to hold on to the request
4254
* @timeout: timeout (in milliseconds) for the whole operation, if
4255
* zero it means there's no timeout
4256
* @n_peers: number of peers to do measurements with
4257
* @peers: per-peer measurement request data
4258
*/
4259
struct cfg80211_pmsr_request {
4260
u64 cookie;
4261
void *drv_data;
4262
u32 n_peers;
4263
u32 nl_portid;
4264
4265
u32 timeout;
4266
4267
u8 mac_addr[ETH_ALEN] __aligned(2);
4268
u8 mac_addr_mask[ETH_ALEN] __aligned(2);
4269
4270
struct list_head list;
4271
4272
struct cfg80211_pmsr_request_peer peers[] __counted_by(n_peers);
4273
};
4274
4275
/**
4276
* struct cfg80211_update_owe_info - OWE Information
4277
*
4278
* This structure provides information needed for the drivers to offload OWE
4279
* (Opportunistic Wireless Encryption) processing to the user space.
4280
*
4281
* Commonly used across update_owe_info request and event interfaces.
4282
*
4283
* @peer: MAC address of the peer device for which the OWE processing
4284
* has to be done.
4285
* @status: status code, %WLAN_STATUS_SUCCESS for successful OWE info
4286
* processing, use %WLAN_STATUS_UNSPECIFIED_FAILURE if user space
4287
* cannot give you the real status code for failures. Used only for
4288
* OWE update request command interface (user space to driver).
4289
* @ie: IEs obtained from the peer or constructed by the user space. These are
4290
* the IEs of the remote peer in the event from the host driver and
4291
* the constructed IEs by the user space in the request interface.
4292
* @ie_len: Length of IEs in octets.
4293
* @assoc_link_id: MLO link ID of the AP, with which (re)association requested
4294
* by peer. This will be filled by driver for both MLO and non-MLO station
4295
* connections when the AP affiliated with an MLD. For non-MLD AP mode, it
4296
* will be -1. Used only with OWE update event (driver to user space).
4297
* @peer_mld_addr: For MLO connection, MLD address of the peer. For non-MLO
4298
* connection, it will be all zeros. This is applicable only when
4299
* @assoc_link_id is not -1, i.e., the AP affiliated with an MLD. Used only
4300
* with OWE update event (driver to user space).
4301
*/
4302
struct cfg80211_update_owe_info {
4303
u8 peer[ETH_ALEN] __aligned(2);
4304
u16 status;
4305
const u8 *ie;
4306
size_t ie_len;
4307
int assoc_link_id;
4308
u8 peer_mld_addr[ETH_ALEN] __aligned(2);
4309
};
4310
4311
/**
4312
* struct mgmt_frame_regs - management frame registrations data
4313
* @global_stypes: bitmap of management frame subtypes registered
4314
* for the entire device
4315
* @interface_stypes: bitmap of management frame subtypes registered
4316
* for the given interface
4317
* @global_mcast_stypes: mcast RX is needed globally for these subtypes
4318
* @interface_mcast_stypes: mcast RX is needed on this interface
4319
* for these subtypes
4320
*/
4321
struct mgmt_frame_regs {
4322
u32 global_stypes, interface_stypes;
4323
u32 global_mcast_stypes, interface_mcast_stypes;
4324
};
4325
4326
/**
4327
* struct cfg80211_ops - backend description for wireless configuration
4328
*
4329
* This struct is registered by fullmac card drivers and/or wireless stacks
4330
* in order to handle configuration requests on their interfaces.
4331
*
4332
* All callbacks except where otherwise noted should return 0
4333
* on success or a negative error code.
4334
*
4335
* All operations are invoked with the wiphy mutex held. The RTNL may be
4336
* held in addition (due to wireless extensions) but this cannot be relied
4337
* upon except in cases where documented below. Note that due to ordering,
4338
* the RTNL also cannot be acquired in any handlers.
4339
*
4340
* @suspend: wiphy device needs to be suspended. The variable @wow will
4341
* be %NULL or contain the enabled Wake-on-Wireless triggers that are
4342
* configured for the device.
4343
* @resume: wiphy device needs to be resumed
4344
* @set_wakeup: Called when WoWLAN is enabled/disabled, use this callback
4345
* to call device_set_wakeup_enable() to enable/disable wakeup from
4346
* the device.
4347
*
4348
* @add_virtual_intf: create a new virtual interface with the given name,
4349
* must set the struct wireless_dev's iftype. Beware: You must create
4350
* the new netdev in the wiphy's network namespace! Returns the struct
4351
* wireless_dev, or an ERR_PTR. For P2P device wdevs, the driver must
4352
* also set the address member in the wdev.
4353
* This additionally holds the RTNL to be able to do netdev changes.
4354
*
4355
* @del_virtual_intf: remove the virtual interface
4356
* This additionally holds the RTNL to be able to do netdev changes.
4357
*
4358
* @change_virtual_intf: change type/configuration of virtual interface,
4359
* keep the struct wireless_dev's iftype updated.
4360
* This additionally holds the RTNL to be able to do netdev changes.
4361
*
4362
* @add_intf_link: Add a new MLO link to the given interface. Note that
4363
* the wdev->link[] data structure has been updated, so the new link
4364
* address is available.
4365
* @del_intf_link: Remove an MLO link from the given interface.
4366
*
4367
* @add_key: add a key with the given parameters. @mac_addr will be %NULL
4368
* when adding a group key. @link_id will be -1 for non-MLO connection.
4369
* For MLO connection, @link_id will be >= 0 for group key and -1 for
4370
* pairwise key, @mac_addr will be peer's MLD address for MLO pairwise key.
4371
*
4372
* @get_key: get information about the key with the given parameters.
4373
* @mac_addr will be %NULL when requesting information for a group
4374
* key. All pointers given to the @callback function need not be valid
4375
* after it returns. This function should return an error if it is
4376
* not possible to retrieve the key, -ENOENT if it doesn't exist.
4377
* @link_id will be -1 for non-MLO connection. For MLO connection,
4378
* @link_id will be >= 0 for group key and -1 for pairwise key, @mac_addr
4379
* will be peer's MLD address for MLO pairwise key.
4380
*
4381
* @del_key: remove a key given the @mac_addr (%NULL for a group key)
4382
* and @key_index, return -ENOENT if the key doesn't exist. @link_id will
4383
* be -1 for non-MLO connection. For MLO connection, @link_id will be >= 0
4384
* for group key and -1 for pairwise key, @mac_addr will be peer's MLD
4385
* address for MLO pairwise key.
4386
*
4387
* @set_default_key: set the default key on an interface. @link_id will be >= 0
4388
* for MLO connection and -1 for non-MLO connection.
4389
*
4390
* @set_default_mgmt_key: set the default management frame key on an interface.
4391
* @link_id will be >= 0 for MLO connection and -1 for non-MLO connection.
4392
*
4393
* @set_default_beacon_key: set the default Beacon frame key on an interface.
4394
* @link_id will be >= 0 for MLO connection and -1 for non-MLO connection.
4395
*
4396
* @set_rekey_data: give the data necessary for GTK rekeying to the driver
4397
*
4398
* @start_ap: Start acting in AP mode defined by the parameters.
4399
* @change_beacon: Change the beacon parameters for an access point mode
4400
* interface. This should reject the call when AP mode wasn't started.
4401
* @stop_ap: Stop being an AP, including stopping beaconing.
4402
*
4403
* @add_station: Add a new station.
4404
* @del_station: Remove a station
4405
* @change_station: Modify a given station. Note that flags changes are not much
4406
* validated in cfg80211, in particular the auth/assoc/authorized flags
4407
* might come to the driver in invalid combinations -- make sure to check
4408
* them, also against the existing state! Drivers must call
4409
* cfg80211_check_station_change() to validate the information.
4410
* @get_station: get station information for the station identified by @mac
4411
* @dump_station: dump station callback -- resume dump at index @idx
4412
*
4413
* @add_mpath: add a fixed mesh path
4414
* @del_mpath: delete a given mesh path
4415
* @change_mpath: change a given mesh path
4416
* @get_mpath: get a mesh path for the given parameters
4417
* @dump_mpath: dump mesh path callback -- resume dump at index @idx
4418
* @get_mpp: get a mesh proxy path for the given parameters
4419
* @dump_mpp: dump mesh proxy path callback -- resume dump at index @idx
4420
* @join_mesh: join the mesh network with the specified parameters
4421
* (invoked with the wireless_dev mutex held)
4422
* @leave_mesh: leave the current mesh network
4423
* (invoked with the wireless_dev mutex held)
4424
*
4425
* @get_mesh_config: Get the current mesh configuration
4426
*
4427
* @update_mesh_config: Update mesh parameters on a running mesh.
4428
* The mask is a bitfield which tells us which parameters to
4429
* set, and which to leave alone.
4430
*
4431
* @change_bss: Modify parameters for a given BSS.
4432
*
4433
* @inform_bss: Called by cfg80211 while being informed about new BSS data
4434
* for every BSS found within the reported data or frame. This is called
4435
* from within the cfg8011 inform_bss handlers while holding the bss_lock.
4436
* The data parameter is passed through from drv_data inside
4437
* struct cfg80211_inform_bss.
4438
* The new IE data for the BSS is explicitly passed.
4439
*
4440
* @set_txq_params: Set TX queue parameters
4441
*
4442
* @libertas_set_mesh_channel: Only for backward compatibility for libertas,
4443
* as it doesn't implement join_mesh and needs to set the channel to
4444
* join the mesh instead.
4445
*
4446
* @set_monitor_channel: Set the monitor mode channel for the device. If other
4447
* interfaces are active this callback should reject the configuration.
4448
* If no interfaces are active or the device is down, the channel should
4449
* be stored for when a monitor interface becomes active.
4450
*
4451
* @scan: Request to do a scan. If returning zero, the scan request is given
4452
* the driver, and will be valid until passed to cfg80211_scan_done().
4453
* For scan results, call cfg80211_inform_bss(); you can call this outside
4454
* the scan/scan_done bracket too.
4455
* @abort_scan: Tell the driver to abort an ongoing scan. The driver shall
4456
* indicate the status of the scan through cfg80211_scan_done().
4457
*
4458
* @auth: Request to authenticate with the specified peer
4459
* (invoked with the wireless_dev mutex held)
4460
* @assoc: Request to (re)associate with the specified peer
4461
* (invoked with the wireless_dev mutex held)
4462
* @deauth: Request to deauthenticate from the specified peer
4463
* (invoked with the wireless_dev mutex held)
4464
* @disassoc: Request to disassociate from the specified peer
4465
* (invoked with the wireless_dev mutex held)
4466
*
4467
* @connect: Connect to the ESS with the specified parameters. When connected,
4468
* call cfg80211_connect_result()/cfg80211_connect_bss() with status code
4469
* %WLAN_STATUS_SUCCESS. If the connection fails for some reason, call
4470
* cfg80211_connect_result()/cfg80211_connect_bss() with the status code
4471
* from the AP or cfg80211_connect_timeout() if no frame with status code
4472
* was received.
4473
* The driver is allowed to roam to other BSSes within the ESS when the
4474
* other BSS matches the connect parameters. When such roaming is initiated
4475
* by the driver, the driver is expected to verify that the target matches
4476
* the configured security parameters and to use Reassociation Request
4477
* frame instead of Association Request frame.
4478
* The connect function can also be used to request the driver to perform a
4479
* specific roam when connected to an ESS. In that case, the prev_bssid
4480
* parameter is set to the BSSID of the currently associated BSS as an
4481
* indication of requesting reassociation.
4482
* In both the driver-initiated and new connect() call initiated roaming
4483
* cases, the result of roaming is indicated with a call to
4484
* cfg80211_roamed(). (invoked with the wireless_dev mutex held)
4485
* @update_connect_params: Update the connect parameters while connected to a
4486
* BSS. The updated parameters can be used by driver/firmware for
4487
* subsequent BSS selection (roaming) decisions and to form the
4488
* Authentication/(Re)Association Request frames. This call does not
4489
* request an immediate disassociation or reassociation with the current
4490
* BSS, i.e., this impacts only subsequent (re)associations. The bits in
4491
* changed are defined in &enum cfg80211_connect_params_changed.
4492
* (invoked with the wireless_dev mutex held)
4493
* @disconnect: Disconnect from the BSS/ESS or stop connection attempts if
4494
* connection is in progress. Once done, call cfg80211_disconnected() in
4495
* case connection was already established (invoked with the
4496
* wireless_dev mutex held), otherwise call cfg80211_connect_timeout().
4497
*
4498
* @join_ibss: Join the specified IBSS (or create if necessary). Once done, call
4499
* cfg80211_ibss_joined(), also call that function when changing BSSID due
4500
* to a merge.
4501
* (invoked with the wireless_dev mutex held)
4502
* @leave_ibss: Leave the IBSS.
4503
* (invoked with the wireless_dev mutex held)
4504
*
4505
* @set_mcast_rate: Set the specified multicast rate (only if vif is in ADHOC or
4506
* MESH mode)
4507
*
4508
* @set_wiphy_params: Notify that wiphy parameters have changed;
4509
* @changed bitfield (see &enum wiphy_params_flags) describes which values
4510
* have changed. The actual parameter values are available in
4511
* struct wiphy. If returning an error, no value should be changed.
4512
*
4513
* @set_tx_power: set the transmit power according to the parameters,
4514
* the power passed is in mBm, to get dBm use MBM_TO_DBM(). The
4515
* wdev may be %NULL if power was set for the wiphy, and will
4516
* always be %NULL unless the driver supports per-vif TX power
4517
* (as advertised by the nl80211 feature flag.)
4518
* @get_tx_power: store the current TX power into the dbm variable;
4519
* return 0 if successful
4520
*
4521
* @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting
4522
* functions to adjust rfkill hw state
4523
*
4524
* @dump_survey: get site survey information.
4525
*
4526
* @remain_on_channel: Request the driver to remain awake on the specified
4527
* channel for the specified duration to complete an off-channel
4528
* operation (e.g., public action frame exchange). When the driver is
4529
* ready on the requested channel, it must indicate this with an event
4530
* notification by calling cfg80211_ready_on_channel().
4531
* @cancel_remain_on_channel: Cancel an on-going remain-on-channel operation.
4532
* This allows the operation to be terminated prior to timeout based on
4533
* the duration value.
4534
* @mgmt_tx: Transmit a management frame.
4535
* @mgmt_tx_cancel_wait: Cancel the wait time from transmitting a management
4536
* frame on another channel
4537
*
4538
* @testmode_cmd: run a test mode command; @wdev may be %NULL
4539
* @testmode_dump: Implement a test mode dump. The cb->args[2] and up may be
4540
* used by the function, but 0 and 1 must not be touched. Additionally,
4541
* return error codes other than -ENOBUFS and -ENOENT will terminate the
4542
* dump and return to userspace with an error, so be careful. If any data
4543
* was passed in from userspace then the data/len arguments will be present
4544
* and point to the data contained in %NL80211_ATTR_TESTDATA.
4545
*
4546
* @set_bitrate_mask: set the bitrate mask configuration
4547
*
4548
* @set_pmksa: Cache a PMKID for a BSSID. This is mostly useful for fullmac
4549
* devices running firmwares capable of generating the (re) association
4550
* RSN IE. It allows for faster roaming between WPA2 BSSIDs.
4551
* @del_pmksa: Delete a cached PMKID.
4552
* @flush_pmksa: Flush all cached PMKIDs.
4553
* @set_power_mgmt: Configure WLAN power management. A timeout value of -1
4554
* allows the driver to adjust the dynamic ps timeout value.
4555
* @set_cqm_rssi_config: Configure connection quality monitor RSSI threshold.
4556
* After configuration, the driver should (soon) send an event indicating
4557
* the current level is above/below the configured threshold; this may
4558
* need some care when the configuration is changed (without first being
4559
* disabled.)
4560
* @set_cqm_rssi_range_config: Configure two RSSI thresholds in the
4561
* connection quality monitor. An event is to be sent only when the
4562
* signal level is found to be outside the two values. The driver should
4563
* set %NL80211_EXT_FEATURE_CQM_RSSI_LIST if this method is implemented.
4564
* If it is provided then there's no point providing @set_cqm_rssi_config.
4565
* @set_cqm_txe_config: Configure connection quality monitor TX error
4566
* thresholds.
4567
* @sched_scan_start: Tell the driver to start a scheduled scan.
4568
* @sched_scan_stop: Tell the driver to stop an ongoing scheduled scan with
4569
* given request id. This call must stop the scheduled scan and be ready
4570
* for starting a new one before it returns, i.e. @sched_scan_start may be
4571
* called immediately after that again and should not fail in that case.
4572
* The driver should not call cfg80211_sched_scan_stopped() for a requested
4573
* stop (when this method returns 0).
4574
*
4575
* @update_mgmt_frame_registrations: Notify the driver that management frame
4576
* registrations were updated. The callback is allowed to sleep.
4577
*
4578
* @set_antenna: Set antenna configuration (tx_ant, rx_ant) on the device.
4579
* Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may
4580
* reject TX/RX mask combinations they cannot support by returning -EINVAL
4581
* (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX).
4582
*
4583
* @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant).
4584
*
4585
* @tdls_mgmt: Transmit a TDLS management frame.
4586
* @tdls_oper: Perform a high-level TDLS operation (e.g. TDLS link setup).
4587
*
4588
* @probe_client: probe an associated client, must return a cookie that it
4589
* later passes to cfg80211_probe_status().
4590
*
4591
* @set_noack_map: Set the NoAck Map for the TIDs.
4592
*
4593
* @get_channel: Get the current operating channel for the virtual interface.
4594
* For monitor interfaces, it should return %NULL unless there's a single
4595
* current monitoring channel.
4596
*
4597
* @start_p2p_device: Start the given P2P device.
4598
* @stop_p2p_device: Stop the given P2P device.
4599
*
4600
* @set_mac_acl: Sets MAC address control list in AP and P2P GO mode.
4601
* Parameters include ACL policy, an array of MAC address of stations
4602
* and the number of MAC addresses. If there is already a list in driver
4603
* this new list replaces the existing one. Driver has to clear its ACL
4604
* when number of MAC addresses entries is passed as 0. Drivers which
4605
* advertise the support for MAC based ACL have to implement this callback.
4606
*
4607
* @start_radar_detection: Start radar detection in the driver.
4608
*
4609
* @end_cac: End running CAC, probably because a related CAC
4610
* was finished on another phy.
4611
*
4612
* @update_ft_ies: Provide updated Fast BSS Transition information to the
4613
* driver. If the SME is in the driver/firmware, this information can be
4614
* used in building Authentication and Reassociation Request frames.
4615
*
4616
* @crit_proto_start: Indicates a critical protocol needs more link reliability
4617
* for a given duration (milliseconds). The protocol is provided so the
4618
* driver can take the most appropriate actions.
4619
* @crit_proto_stop: Indicates critical protocol no longer needs increased link
4620
* reliability. This operation can not fail.
4621
* @set_coalesce: Set coalesce parameters.
4622
*
4623
* @channel_switch: initiate channel-switch procedure (with CSA). Driver is
4624
* responsible for veryfing if the switch is possible. Since this is
4625
* inherently tricky driver may decide to disconnect an interface later
4626
* with cfg80211_stop_iface(). This doesn't mean driver can accept
4627
* everything. It should do it's best to verify requests and reject them
4628
* as soon as possible.
4629
*
4630
* @set_qos_map: Set QoS mapping information to the driver
4631
*
4632
* @set_ap_chanwidth: Set the AP (including P2P GO) mode channel width for the
4633
* given interface This is used e.g. for dynamic HT 20/40 MHz channel width
4634
* changes during the lifetime of the BSS.
4635
*
4636
* @add_tx_ts: validate (if admitted_time is 0) or add a TX TS to the device
4637
* with the given parameters; action frame exchange has been handled by
4638
* userspace so this just has to modify the TX path to take the TS into
4639
* account.
4640
* If the admitted time is 0 just validate the parameters to make sure
4641
* the session can be created at all; it is valid to just always return
4642
* success for that but that may result in inefficient behaviour (handshake
4643
* with the peer followed by immediate teardown when the addition is later
4644
* rejected)
4645
* @del_tx_ts: remove an existing TX TS
4646
*
4647
* @join_ocb: join the OCB network with the specified parameters
4648
* (invoked with the wireless_dev mutex held)
4649
* @leave_ocb: leave the current OCB network
4650
* (invoked with the wireless_dev mutex held)
4651
*
4652
* @tdls_channel_switch: Start channel-switching with a TDLS peer. The driver
4653
* is responsible for continually initiating channel-switching operations
4654
* and returning to the base channel for communication with the AP.
4655
* @tdls_cancel_channel_switch: Stop channel-switching with a TDLS peer. Both
4656
* peers must be on the base channel when the call completes.
4657
* @start_nan: Start the NAN interface.
4658
* @stop_nan: Stop the NAN interface.
4659
* @add_nan_func: Add a NAN function. Returns negative value on failure.
4660
* On success @nan_func ownership is transferred to the driver and
4661
* it may access it outside of the scope of this function. The driver
4662
* should free the @nan_func when no longer needed by calling
4663
* cfg80211_free_nan_func().
4664
* On success the driver should assign an instance_id in the
4665
* provided @nan_func.
4666
* @del_nan_func: Delete a NAN function.
4667
* @nan_change_conf: changes NAN configuration. The changed parameters must
4668
* be specified in @changes (using &enum cfg80211_nan_conf_changes);
4669
* All other parameters must be ignored.
4670
*
4671
* @set_multicast_to_unicast: configure multicast to unicast conversion for BSS
4672
*
4673
* @get_txq_stats: Get TXQ stats for interface or phy. If wdev is %NULL, this
4674
* function should return phy stats, and interface stats otherwise.
4675
*
4676
* @set_pmk: configure the PMK to be used for offloaded 802.1X 4-Way handshake.
4677
* If not deleted through @del_pmk the PMK remains valid until disconnect
4678
* upon which the driver should clear it.
4679
* (invoked with the wireless_dev mutex held)
4680
* @del_pmk: delete the previously configured PMK for the given authenticator.
4681
* (invoked with the wireless_dev mutex held)
4682
*
4683
* @external_auth: indicates result of offloaded authentication processing from
4684
* user space
4685
*
4686
* @tx_control_port: TX a control port frame (EAPoL). The noencrypt parameter
4687
* tells the driver that the frame should not be encrypted.
4688
*
4689
* @get_ftm_responder_stats: Retrieve FTM responder statistics, if available.
4690
* Statistics should be cumulative, currently no way to reset is provided.
4691
* @start_pmsr: start peer measurement (e.g. FTM)
4692
* @abort_pmsr: abort peer measurement
4693
*
4694
* @update_owe_info: Provide updated OWE info to driver. Driver implementing SME
4695
* but offloading OWE processing to the user space will get the updated
4696
* DH IE through this interface.
4697
*
4698
* @probe_mesh_link: Probe direct Mesh peer's link quality by sending data frame
4699
* and overrule HWMP path selection algorithm.
4700
* @set_tid_config: TID specific configuration, this can be peer or BSS specific
4701
* This callback may sleep.
4702
* @reset_tid_config: Reset TID specific configuration for the peer, for the
4703
* given TIDs. This callback may sleep.
4704
*
4705
* @set_sar_specs: Update the SAR (TX power) settings.
4706
*
4707
* @color_change: Initiate a color change.
4708
*
4709
* @set_fils_aad: Set FILS AAD data to the AP driver so that the driver can use
4710
* those to decrypt (Re)Association Request and encrypt (Re)Association
4711
* Response frame.
4712
*
4713
* @set_radar_background: Configure dedicated offchannel chain available for
4714
* radar/CAC detection on some hw. This chain can't be used to transmit
4715
* or receive frames and it is bounded to a running wdev.
4716
* Background radar/CAC detection allows to avoid the CAC downtime
4717
* switching to a different channel during CAC detection on the selected
4718
* radar channel.
4719
* The caller is expected to set chandef pointer to NULL in order to
4720
* disable background CAC/radar detection.
4721
* @add_link_station: Add a link to a station.
4722
* @mod_link_station: Modify a link of a station.
4723
* @del_link_station: Remove a link of a station.
4724
*
4725
* @set_hw_timestamp: Enable/disable HW timestamping of TM/FTM frames.
4726
* @set_ttlm: set the TID to link mapping.
4727
* @set_epcs: Enable/Disable EPCS for station mode.
4728
* @get_radio_mask: get bitmask of radios in use.
4729
* (invoked with the wiphy mutex held)
4730
* @assoc_ml_reconf: Request a non-AP MLO connection to perform ML
4731
* reconfiguration, i.e., add and/or remove links to/from the
4732
* association using ML reconfiguration action frames. Successfully added
4733
* links will be added to the set of valid links. Successfully removed
4734
* links will be removed from the set of valid links. The driver must
4735
* indicate removed links by calling cfg80211_links_removed() and added
4736
* links by calling cfg80211_mlo_reconf_add_done(). When calling
4737
* cfg80211_mlo_reconf_add_done() the bss pointer must be given for each
4738
* link for which MLO reconfiguration 'add' operation was requested.
4739
*/
4740
struct cfg80211_ops {
4741
int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
4742
int (*resume)(struct wiphy *wiphy);
4743
void (*set_wakeup)(struct wiphy *wiphy, bool enabled);
4744
4745
struct wireless_dev * (*add_virtual_intf)(struct wiphy *wiphy,
4746
const char *name,
4747
unsigned char name_assign_type,
4748
enum nl80211_iftype type,
4749
struct vif_params *params);
4750
int (*del_virtual_intf)(struct wiphy *wiphy,
4751
struct wireless_dev *wdev);
4752
int (*change_virtual_intf)(struct wiphy *wiphy,
4753
struct net_device *dev,
4754
enum nl80211_iftype type,
4755
struct vif_params *params);
4756
4757
int (*add_intf_link)(struct wiphy *wiphy,
4758
struct wireless_dev *wdev,
4759
unsigned int link_id);
4760
void (*del_intf_link)(struct wiphy *wiphy,
4761
struct wireless_dev *wdev,
4762
unsigned int link_id);
4763
4764
int (*add_key)(struct wiphy *wiphy, struct net_device *netdev,
4765
int link_id, u8 key_index, bool pairwise,
4766
const u8 *mac_addr, struct key_params *params);
4767
int (*get_key)(struct wiphy *wiphy, struct net_device *netdev,
4768
int link_id, u8 key_index, bool pairwise,
4769
const u8 *mac_addr, void *cookie,
4770
void (*callback)(void *cookie, struct key_params*));
4771
int (*del_key)(struct wiphy *wiphy, struct net_device *netdev,
4772
int link_id, u8 key_index, bool pairwise,
4773
const u8 *mac_addr);
4774
int (*set_default_key)(struct wiphy *wiphy,
4775
struct net_device *netdev, int link_id,
4776
u8 key_index, bool unicast, bool multicast);
4777
int (*set_default_mgmt_key)(struct wiphy *wiphy,
4778
struct net_device *netdev, int link_id,
4779
u8 key_index);
4780
int (*set_default_beacon_key)(struct wiphy *wiphy,
4781
struct net_device *netdev,
4782
int link_id,
4783
u8 key_index);
4784
4785
int (*start_ap)(struct wiphy *wiphy, struct net_device *dev,
4786
struct cfg80211_ap_settings *settings);
4787
int (*change_beacon)(struct wiphy *wiphy, struct net_device *dev,
4788
struct cfg80211_ap_update *info);
4789
int (*stop_ap)(struct wiphy *wiphy, struct net_device *dev,
4790
unsigned int link_id);
4791
4792
4793
int (*add_station)(struct wiphy *wiphy, struct net_device *dev,
4794
const u8 *mac,
4795
struct station_parameters *params);
4796
int (*del_station)(struct wiphy *wiphy, struct net_device *dev,
4797
struct station_del_parameters *params);
4798
int (*change_station)(struct wiphy *wiphy, struct net_device *dev,
4799
const u8 *mac,
4800
struct station_parameters *params);
4801
int (*get_station)(struct wiphy *wiphy, struct net_device *dev,
4802
const u8 *mac, struct station_info *sinfo);
4803
int (*dump_station)(struct wiphy *wiphy, struct net_device *dev,
4804
int idx, u8 *mac, struct station_info *sinfo);
4805
4806
int (*add_mpath)(struct wiphy *wiphy, struct net_device *dev,
4807
const u8 *dst, const u8 *next_hop);
4808
int (*del_mpath)(struct wiphy *wiphy, struct net_device *dev,
4809
const u8 *dst);
4810
int (*change_mpath)(struct wiphy *wiphy, struct net_device *dev,
4811
const u8 *dst, const u8 *next_hop);
4812
int (*get_mpath)(struct wiphy *wiphy, struct net_device *dev,
4813
u8 *dst, u8 *next_hop, struct mpath_info *pinfo);
4814
int (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev,
4815
int idx, u8 *dst, u8 *next_hop,
4816
struct mpath_info *pinfo);
4817
int (*get_mpp)(struct wiphy *wiphy, struct net_device *dev,
4818
u8 *dst, u8 *mpp, struct mpath_info *pinfo);
4819
int (*dump_mpp)(struct wiphy *wiphy, struct net_device *dev,
4820
int idx, u8 *dst, u8 *mpp,
4821
struct mpath_info *pinfo);
4822
int (*get_mesh_config)(struct wiphy *wiphy,
4823
struct net_device *dev,
4824
struct mesh_config *conf);
4825
int (*update_mesh_config)(struct wiphy *wiphy,
4826
struct net_device *dev, u32 mask,
4827
const struct mesh_config *nconf);
4828
int (*join_mesh)(struct wiphy *wiphy, struct net_device *dev,
4829
const struct mesh_config *conf,
4830
const struct mesh_setup *setup);
4831
int (*leave_mesh)(struct wiphy *wiphy, struct net_device *dev);
4832
4833
int (*join_ocb)(struct wiphy *wiphy, struct net_device *dev,
4834
struct ocb_setup *setup);
4835
int (*leave_ocb)(struct wiphy *wiphy, struct net_device *dev);
4836
4837
int (*change_bss)(struct wiphy *wiphy, struct net_device *dev,
4838
struct bss_parameters *params);
4839
4840
void (*inform_bss)(struct wiphy *wiphy, struct cfg80211_bss *bss,
4841
const struct cfg80211_bss_ies *ies, void *data);
4842
4843
int (*set_txq_params)(struct wiphy *wiphy, struct net_device *dev,
4844
struct ieee80211_txq_params *params);
4845
4846
int (*libertas_set_mesh_channel)(struct wiphy *wiphy,
4847
struct net_device *dev,
4848
struct ieee80211_channel *chan);
4849
4850
int (*set_monitor_channel)(struct wiphy *wiphy,
4851
struct net_device *dev,
4852
struct cfg80211_chan_def *chandef);
4853
4854
int (*scan)(struct wiphy *wiphy,
4855
struct cfg80211_scan_request *request);
4856
void (*abort_scan)(struct wiphy *wiphy, struct wireless_dev *wdev);
4857
4858
int (*auth)(struct wiphy *wiphy, struct net_device *dev,
4859
struct cfg80211_auth_request *req);
4860
int (*assoc)(struct wiphy *wiphy, struct net_device *dev,
4861
struct cfg80211_assoc_request *req);
4862
int (*deauth)(struct wiphy *wiphy, struct net_device *dev,
4863
struct cfg80211_deauth_request *req);
4864
int (*disassoc)(struct wiphy *wiphy, struct net_device *dev,
4865
struct cfg80211_disassoc_request *req);
4866
4867
int (*connect)(struct wiphy *wiphy, struct net_device *dev,
4868
struct cfg80211_connect_params *sme);
4869
int (*update_connect_params)(struct wiphy *wiphy,
4870
struct net_device *dev,
4871
struct cfg80211_connect_params *sme,
4872
u32 changed);
4873
int (*disconnect)(struct wiphy *wiphy, struct net_device *dev,
4874
u16 reason_code);
4875
4876
int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev,
4877
struct cfg80211_ibss_params *params);
4878
int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev);
4879
4880
int (*set_mcast_rate)(struct wiphy *wiphy, struct net_device *dev,
4881
int rate[NUM_NL80211_BANDS]);
4882
4883
int (*set_wiphy_params)(struct wiphy *wiphy, int radio_idx,
4884
u32 changed);
4885
4886
int (*set_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev,
4887
int radio_idx,
4888
enum nl80211_tx_power_setting type, int mbm);
4889
int (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev,
4890
int radio_idx, unsigned int link_id, int *dbm);
4891
4892
void (*rfkill_poll)(struct wiphy *wiphy);
4893
4894
#ifdef CONFIG_NL80211_TESTMODE
4895
int (*testmode_cmd)(struct wiphy *wiphy, struct wireless_dev *wdev,
4896
void *data, int len);
4897
int (*testmode_dump)(struct wiphy *wiphy, struct sk_buff *skb,
4898
struct netlink_callback *cb,
4899
void *data, int len);
4900
#endif
4901
4902
int (*set_bitrate_mask)(struct wiphy *wiphy,
4903
struct net_device *dev,
4904
unsigned int link_id,
4905
const u8 *peer,
4906
const struct cfg80211_bitrate_mask *mask);
4907
4908
int (*dump_survey)(struct wiphy *wiphy, struct net_device *netdev,
4909
int idx, struct survey_info *info);
4910
4911
int (*set_pmksa)(struct wiphy *wiphy, struct net_device *netdev,
4912
struct cfg80211_pmksa *pmksa);
4913
int (*del_pmksa)(struct wiphy *wiphy, struct net_device *netdev,
4914
struct cfg80211_pmksa *pmksa);
4915
int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev);
4916
4917
int (*remain_on_channel)(struct wiphy *wiphy,
4918
struct wireless_dev *wdev,
4919
struct ieee80211_channel *chan,
4920
unsigned int duration,
4921
u64 *cookie);
4922
int (*cancel_remain_on_channel)(struct wiphy *wiphy,
4923
struct wireless_dev *wdev,
4924
u64 cookie);
4925
4926
int (*mgmt_tx)(struct wiphy *wiphy, struct wireless_dev *wdev,
4927
struct cfg80211_mgmt_tx_params *params,
4928
u64 *cookie);
4929
int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy,
4930
struct wireless_dev *wdev,
4931
u64 cookie);
4932
4933
int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev,
4934
bool enabled, int timeout);
4935
4936
int (*set_cqm_rssi_config)(struct wiphy *wiphy,
4937
struct net_device *dev,
4938
s32 rssi_thold, u32 rssi_hyst);
4939
4940
int (*set_cqm_rssi_range_config)(struct wiphy *wiphy,
4941
struct net_device *dev,
4942
s32 rssi_low, s32 rssi_high);
4943
4944
int (*set_cqm_txe_config)(struct wiphy *wiphy,
4945
struct net_device *dev,
4946
u32 rate, u32 pkts, u32 intvl);
4947
4948
void (*update_mgmt_frame_registrations)(struct wiphy *wiphy,
4949
struct wireless_dev *wdev,
4950
struct mgmt_frame_regs *upd);
4951
4952
int (*set_antenna)(struct wiphy *wiphy, int radio_idx,
4953
u32 tx_ant, u32 rx_ant);
4954
int (*get_antenna)(struct wiphy *wiphy, int radio_idx,
4955
u32 *tx_ant, u32 *rx_ant);
4956
4957
int (*sched_scan_start)(struct wiphy *wiphy,
4958
struct net_device *dev,
4959
struct cfg80211_sched_scan_request *request);
4960
int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev,
4961
u64 reqid);
4962
4963
int (*set_rekey_data)(struct wiphy *wiphy, struct net_device *dev,
4964
struct cfg80211_gtk_rekey_data *data);
4965
4966
int (*tdls_mgmt)(struct wiphy *wiphy, struct net_device *dev,
4967
const u8 *peer, int link_id,
4968
u8 action_code, u8 dialog_token, u16 status_code,
4969
u32 peer_capability, bool initiator,
4970
const u8 *buf, size_t len);
4971
int (*tdls_oper)(struct wiphy *wiphy, struct net_device *dev,
4972
const u8 *peer, enum nl80211_tdls_operation oper);
4973
4974
int (*probe_client)(struct wiphy *wiphy, struct net_device *dev,
4975
const u8 *peer, u64 *cookie);
4976
4977
int (*set_noack_map)(struct wiphy *wiphy,
4978
struct net_device *dev,
4979
u16 noack_map);
4980
4981
int (*get_channel)(struct wiphy *wiphy,
4982
struct wireless_dev *wdev,
4983
unsigned int link_id,
4984
struct cfg80211_chan_def *chandef);
4985
4986
int (*start_p2p_device)(struct wiphy *wiphy,
4987
struct wireless_dev *wdev);
4988
void (*stop_p2p_device)(struct wiphy *wiphy,
4989
struct wireless_dev *wdev);
4990
4991
int (*set_mac_acl)(struct wiphy *wiphy, struct net_device *dev,
4992
const struct cfg80211_acl_data *params);
4993
4994
int (*start_radar_detection)(struct wiphy *wiphy,
4995
struct net_device *dev,
4996
struct cfg80211_chan_def *chandef,
4997
u32 cac_time_ms, int link_id);
4998
void (*end_cac)(struct wiphy *wiphy,
4999
struct net_device *dev, unsigned int link_id);
5000
int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev,
5001
struct cfg80211_update_ft_ies_params *ftie);
5002
int (*crit_proto_start)(struct wiphy *wiphy,
5003
struct wireless_dev *wdev,
5004
enum nl80211_crit_proto_id protocol,
5005
u16 duration);
5006
void (*crit_proto_stop)(struct wiphy *wiphy,
5007
struct wireless_dev *wdev);
5008
int (*set_coalesce)(struct wiphy *wiphy,
5009
struct cfg80211_coalesce *coalesce);
5010
5011
int (*channel_switch)(struct wiphy *wiphy,
5012
struct net_device *dev,
5013
struct cfg80211_csa_settings *params);
5014
5015
int (*set_qos_map)(struct wiphy *wiphy,
5016
struct net_device *dev,
5017
struct cfg80211_qos_map *qos_map);
5018
5019
int (*set_ap_chanwidth)(struct wiphy *wiphy, struct net_device *dev,
5020
unsigned int link_id,
5021
struct cfg80211_chan_def *chandef);
5022
5023
int (*add_tx_ts)(struct wiphy *wiphy, struct net_device *dev,
5024
u8 tsid, const u8 *peer, u8 user_prio,
5025
u16 admitted_time);
5026
int (*del_tx_ts)(struct wiphy *wiphy, struct net_device *dev,
5027
u8 tsid, const u8 *peer);
5028
5029
int (*tdls_channel_switch)(struct wiphy *wiphy,
5030
struct net_device *dev,
5031
const u8 *addr, u8 oper_class,
5032
struct cfg80211_chan_def *chandef);
5033
void (*tdls_cancel_channel_switch)(struct wiphy *wiphy,
5034
struct net_device *dev,
5035
const u8 *addr);
5036
int (*start_nan)(struct wiphy *wiphy, struct wireless_dev *wdev,
5037
struct cfg80211_nan_conf *conf);
5038
void (*stop_nan)(struct wiphy *wiphy, struct wireless_dev *wdev);
5039
int (*add_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev,
5040
struct cfg80211_nan_func *nan_func);
5041
void (*del_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev,
5042
u64 cookie);
5043
int (*nan_change_conf)(struct wiphy *wiphy,
5044
struct wireless_dev *wdev,
5045
struct cfg80211_nan_conf *conf,
5046
u32 changes);
5047
5048
int (*set_multicast_to_unicast)(struct wiphy *wiphy,
5049
struct net_device *dev,
5050
const bool enabled);
5051
5052
int (*get_txq_stats)(struct wiphy *wiphy,
5053
struct wireless_dev *wdev,
5054
struct cfg80211_txq_stats *txqstats);
5055
5056
int (*set_pmk)(struct wiphy *wiphy, struct net_device *dev,
5057
const struct cfg80211_pmk_conf *conf);
5058
int (*del_pmk)(struct wiphy *wiphy, struct net_device *dev,
5059
const u8 *aa);
5060
int (*external_auth)(struct wiphy *wiphy, struct net_device *dev,
5061
struct cfg80211_external_auth_params *params);
5062
5063
int (*tx_control_port)(struct wiphy *wiphy,
5064
struct net_device *dev,
5065
const u8 *buf, size_t len,
5066
const u8 *dest, const __be16 proto,
5067
const bool noencrypt, int link_id,
5068
u64 *cookie);
5069
5070
int (*get_ftm_responder_stats)(struct wiphy *wiphy,
5071
struct net_device *dev,
5072
struct cfg80211_ftm_responder_stats *ftm_stats);
5073
5074
int (*start_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev,
5075
struct cfg80211_pmsr_request *request);
5076
void (*abort_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev,
5077
struct cfg80211_pmsr_request *request);
5078
int (*update_owe_info)(struct wiphy *wiphy, struct net_device *dev,
5079
struct cfg80211_update_owe_info *owe_info);
5080
int (*probe_mesh_link)(struct wiphy *wiphy, struct net_device *dev,
5081
const u8 *buf, size_t len);
5082
int (*set_tid_config)(struct wiphy *wiphy, struct net_device *dev,
5083
struct cfg80211_tid_config *tid_conf);
5084
int (*reset_tid_config)(struct wiphy *wiphy, struct net_device *dev,
5085
const u8 *peer, u8 tids);
5086
int (*set_sar_specs)(struct wiphy *wiphy,
5087
struct cfg80211_sar_specs *sar);
5088
int (*color_change)(struct wiphy *wiphy,
5089
struct net_device *dev,
5090
struct cfg80211_color_change_settings *params);
5091
int (*set_fils_aad)(struct wiphy *wiphy, struct net_device *dev,
5092
struct cfg80211_fils_aad *fils_aad);
5093
int (*set_radar_background)(struct wiphy *wiphy,
5094
struct cfg80211_chan_def *chandef);
5095
int (*add_link_station)(struct wiphy *wiphy, struct net_device *dev,
5096
struct link_station_parameters *params);
5097
int (*mod_link_station)(struct wiphy *wiphy, struct net_device *dev,
5098
struct link_station_parameters *params);
5099
int (*del_link_station)(struct wiphy *wiphy, struct net_device *dev,
5100
struct link_station_del_parameters *params);
5101
int (*set_hw_timestamp)(struct wiphy *wiphy, struct net_device *dev,
5102
struct cfg80211_set_hw_timestamp *hwts);
5103
int (*set_ttlm)(struct wiphy *wiphy, struct net_device *dev,
5104
struct cfg80211_ttlm_params *params);
5105
u32 (*get_radio_mask)(struct wiphy *wiphy, struct net_device *dev);
5106
int (*assoc_ml_reconf)(struct wiphy *wiphy, struct net_device *dev,
5107
struct cfg80211_ml_reconf_req *req);
5108
int (*set_epcs)(struct wiphy *wiphy, struct net_device *dev,
5109
bool val);
5110
};
5111
5112
/*
5113
* wireless hardware and networking interfaces structures
5114
* and registration/helper functions
5115
*/
5116
5117
/**
5118
* enum wiphy_flags - wiphy capability flags
5119
*
5120
* @WIPHY_FLAG_SPLIT_SCAN_6GHZ: if set to true, the scan request will be split
5121
* into two, first for legacy bands and second for 6 GHz.
5122
* @WIPHY_FLAG_NETNS_OK: if not set, do not allow changing the netns of this
5123
* wiphy at all
5124
* @WIPHY_FLAG_PS_ON_BY_DEFAULT: if set to true, powersave will be enabled
5125
* by default -- this flag will be set depending on the kernel's default
5126
* on wiphy_new(), but can be changed by the driver if it has a good
5127
* reason to override the default
5128
* @WIPHY_FLAG_4ADDR_AP: supports 4addr mode even on AP (with a single station
5129
* on a VLAN interface). This flag also serves an extra purpose of
5130
* supporting 4ADDR AP mode on devices which do not support AP/VLAN iftype.
5131
* @WIPHY_FLAG_4ADDR_STATION: supports 4addr mode even as a station
5132
* @WIPHY_FLAG_CONTROL_PORT_PROTOCOL: This device supports setting the
5133
* control port protocol ethertype. The device also honours the
5134
* control_port_no_encrypt flag.
5135
* @WIPHY_FLAG_IBSS_RSN: The device supports IBSS RSN.
5136
* @WIPHY_FLAG_MESH_AUTH: The device supports mesh authentication by routing
5137
* auth frames to userspace. See @NL80211_MESH_SETUP_USERSPACE_AUTH.
5138
* @WIPHY_FLAG_SUPPORTS_FW_ROAM: The device supports roaming feature in the
5139
* firmware.
5140
* @WIPHY_FLAG_AP_UAPSD: The device supports uapsd on AP.
5141
* @WIPHY_FLAG_SUPPORTS_TDLS: The device supports TDLS (802.11z) operation.
5142
* @WIPHY_FLAG_TDLS_EXTERNAL_SETUP: The device does not handle TDLS (802.11z)
5143
* link setup/discovery operations internally. Setup, discovery and
5144
* teardown packets should be sent through the @NL80211_CMD_TDLS_MGMT
5145
* command. When this flag is not set, @NL80211_CMD_TDLS_OPER should be
5146
* used for asking the driver/firmware to perform a TDLS operation.
5147
* @WIPHY_FLAG_HAVE_AP_SME: device integrates AP SME
5148
* @WIPHY_FLAG_REPORTS_OBSS: the device will report beacons from other BSSes
5149
* when there are virtual interfaces in AP mode by calling
5150
* cfg80211_report_obss_beacon().
5151
* @WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD: When operating as an AP, the device
5152
* responds to probe-requests in hardware.
5153
* @WIPHY_FLAG_OFFCHAN_TX: Device supports direct off-channel TX.
5154
* @WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL: Device supports remain-on-channel call.
5155
* @WIPHY_FLAG_SUPPORTS_5_10_MHZ: Device supports 5 MHz and 10 MHz channels.
5156
* @WIPHY_FLAG_HAS_CHANNEL_SWITCH: Device supports channel switch in
5157
* beaconing mode (AP, IBSS, Mesh, ...).
5158
* @WIPHY_FLAG_SUPPORTS_EXT_KEK_KCK: The device supports bigger kek and kck keys
5159
* @WIPHY_FLAG_SUPPORTS_MLO: This is a temporary flag gating the MLO APIs,
5160
* in order to not have them reachable in normal drivers, until we have
5161
* complete feature/interface combinations/etc. advertisement. No driver
5162
* should set this flag for now.
5163
* @WIPHY_FLAG_SUPPORTS_EXT_KCK_32: The device supports 32-byte KCK keys.
5164
* @WIPHY_FLAG_NOTIFY_REGDOM_BY_DRIVER: The device could handle reg notify for
5165
* NL80211_REGDOM_SET_BY_DRIVER.
5166
* @WIPHY_FLAG_CHANNEL_CHANGE_ON_BEACON: reg_call_notifier() is called if driver
5167
* set this flag to update channels on beacon hints.
5168
* @WIPHY_FLAG_SUPPORTS_NSTR_NONPRIMARY: support connection to non-primary link
5169
* of an NSTR mobile AP MLD.
5170
* @WIPHY_FLAG_DISABLE_WEXT: disable wireless extensions for this device
5171
*/
5172
enum wiphy_flags {
5173
WIPHY_FLAG_SUPPORTS_EXT_KEK_KCK = BIT(0),
5174
WIPHY_FLAG_SUPPORTS_MLO = BIT(1),
5175
WIPHY_FLAG_SPLIT_SCAN_6GHZ = BIT(2),
5176
WIPHY_FLAG_NETNS_OK = BIT(3),
5177
WIPHY_FLAG_PS_ON_BY_DEFAULT = BIT(4),
5178
WIPHY_FLAG_4ADDR_AP = BIT(5),
5179
WIPHY_FLAG_4ADDR_STATION = BIT(6),
5180
WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7),
5181
WIPHY_FLAG_IBSS_RSN = BIT(8),
5182
WIPHY_FLAG_DISABLE_WEXT = BIT(9),
5183
WIPHY_FLAG_MESH_AUTH = BIT(10),
5184
WIPHY_FLAG_SUPPORTS_EXT_KCK_32 = BIT(11),
5185
WIPHY_FLAG_SUPPORTS_NSTR_NONPRIMARY = BIT(12),
5186
WIPHY_FLAG_SUPPORTS_FW_ROAM = BIT(13),
5187
WIPHY_FLAG_AP_UAPSD = BIT(14),
5188
WIPHY_FLAG_SUPPORTS_TDLS = BIT(15),
5189
WIPHY_FLAG_TDLS_EXTERNAL_SETUP = BIT(16),
5190
WIPHY_FLAG_HAVE_AP_SME = BIT(17),
5191
WIPHY_FLAG_REPORTS_OBSS = BIT(18),
5192
WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD = BIT(19),
5193
WIPHY_FLAG_OFFCHAN_TX = BIT(20),
5194
WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL = BIT(21),
5195
WIPHY_FLAG_SUPPORTS_5_10_MHZ = BIT(22),
5196
WIPHY_FLAG_HAS_CHANNEL_SWITCH = BIT(23),
5197
WIPHY_FLAG_NOTIFY_REGDOM_BY_DRIVER = BIT(24),
5198
WIPHY_FLAG_CHANNEL_CHANGE_ON_BEACON = BIT(25),
5199
};
5200
5201
/**
5202
* struct ieee80211_iface_limit - limit on certain interface types
5203
* @max: maximum number of interfaces of these types
5204
* @types: interface types (bits)
5205
*/
5206
struct ieee80211_iface_limit {
5207
u16 max;
5208
u16 types;
5209
};
5210
5211
/**
5212
* struct ieee80211_iface_combination - possible interface combination
5213
*
5214
* With this structure the driver can describe which interface
5215
* combinations it supports concurrently. When set in a struct wiphy_radio,
5216
* the combinations refer to combinations of interfaces currently active on
5217
* that radio.
5218
*
5219
* Examples:
5220
*
5221
* 1. Allow #STA <= 1, #AP <= 1, matching BI, channels = 1, 2 total:
5222
*
5223
* .. code-block:: c
5224
*
5225
* struct ieee80211_iface_limit limits1[] = {
5226
* { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },
5227
* { .max = 1, .types = BIT(NL80211_IFTYPE_AP), },
5228
* };
5229
* struct ieee80211_iface_combination combination1 = {
5230
* .limits = limits1,
5231
* .n_limits = ARRAY_SIZE(limits1),
5232
* .max_interfaces = 2,
5233
* .beacon_int_infra_match = true,
5234
* };
5235
*
5236
*
5237
* 2. Allow #{AP, P2P-GO} <= 8, channels = 1, 8 total:
5238
*
5239
* .. code-block:: c
5240
*
5241
* struct ieee80211_iface_limit limits2[] = {
5242
* { .max = 8, .types = BIT(NL80211_IFTYPE_AP) |
5243
* BIT(NL80211_IFTYPE_P2P_GO), },
5244
* };
5245
* struct ieee80211_iface_combination combination2 = {
5246
* .limits = limits2,
5247
* .n_limits = ARRAY_SIZE(limits2),
5248
* .max_interfaces = 8,
5249
* .num_different_channels = 1,
5250
* };
5251
*
5252
*
5253
* 3. Allow #STA <= 1, #{P2P-client,P2P-GO} <= 3 on two channels, 4 total.
5254
*
5255
* This allows for an infrastructure connection and three P2P connections.
5256
*
5257
* .. code-block:: c
5258
*
5259
* struct ieee80211_iface_limit limits3[] = {
5260
* { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },
5261
* { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) |
5262
* BIT(NL80211_IFTYPE_P2P_CLIENT), },
5263
* };
5264
* struct ieee80211_iface_combination combination3 = {
5265
* .limits = limits3,
5266
* .n_limits = ARRAY_SIZE(limits3),
5267
* .max_interfaces = 4,
5268
* .num_different_channels = 2,
5269
* };
5270
*
5271
*/
5272
struct ieee80211_iface_combination {
5273
/**
5274
* @limits:
5275
* limits for the given interface types
5276
*/
5277
const struct ieee80211_iface_limit *limits;
5278
5279
/**
5280
* @num_different_channels:
5281
* can use up to this many different channels
5282
*/
5283
u32 num_different_channels;
5284
5285
/**
5286
* @max_interfaces:
5287
* maximum number of interfaces in total allowed in this group
5288
*/
5289
u16 max_interfaces;
5290
5291
/**
5292
* @n_limits:
5293
* number of limitations
5294
*/
5295
u8 n_limits;
5296
5297
/**
5298
* @beacon_int_infra_match:
5299
* In this combination, the beacon intervals between infrastructure
5300
* and AP types must match. This is required only in special cases.
5301
*/
5302
bool beacon_int_infra_match;
5303
5304
/**
5305
* @radar_detect_widths:
5306
* bitmap of channel widths supported for radar detection
5307
*/
5308
u8 radar_detect_widths;
5309
5310
/**
5311
* @radar_detect_regions:
5312
* bitmap of regions supported for radar detection
5313
*/
5314
u8 radar_detect_regions;
5315
5316
/**
5317
* @beacon_int_min_gcd:
5318
* This interface combination supports different beacon intervals.
5319
*
5320
* = 0
5321
* all beacon intervals for different interface must be same.
5322
* > 0
5323
* any beacon interval for the interface part of this combination AND
5324
* GCD of all beacon intervals from beaconing interfaces of this
5325
* combination must be greater or equal to this value.
5326
*/
5327
u32 beacon_int_min_gcd;
5328
};
5329
5330
struct ieee80211_txrx_stypes {
5331
u16 tx, rx;
5332
};
5333
5334
/**
5335
* enum wiphy_wowlan_support_flags - WoWLAN support flags
5336
* @WIPHY_WOWLAN_ANY: supports wakeup for the special "any"
5337
* trigger that keeps the device operating as-is and
5338
* wakes up the host on any activity, for example a
5339
* received packet that passed filtering; note that the
5340
* packet should be preserved in that case
5341
* @WIPHY_WOWLAN_MAGIC_PKT: supports wakeup on magic packet
5342
* (see nl80211.h)
5343
* @WIPHY_WOWLAN_DISCONNECT: supports wakeup on disconnect
5344
* @WIPHY_WOWLAN_SUPPORTS_GTK_REKEY: supports GTK rekeying while asleep
5345
* @WIPHY_WOWLAN_GTK_REKEY_FAILURE: supports wakeup on GTK rekey failure
5346
* @WIPHY_WOWLAN_EAP_IDENTITY_REQ: supports wakeup on EAP identity request
5347
* @WIPHY_WOWLAN_4WAY_HANDSHAKE: supports wakeup on 4-way handshake failure
5348
* @WIPHY_WOWLAN_RFKILL_RELEASE: supports wakeup on RF-kill release
5349
* @WIPHY_WOWLAN_NET_DETECT: supports wakeup on network detection
5350
*/
5351
enum wiphy_wowlan_support_flags {
5352
WIPHY_WOWLAN_ANY = BIT(0),
5353
WIPHY_WOWLAN_MAGIC_PKT = BIT(1),
5354
WIPHY_WOWLAN_DISCONNECT = BIT(2),
5355
WIPHY_WOWLAN_SUPPORTS_GTK_REKEY = BIT(3),
5356
WIPHY_WOWLAN_GTK_REKEY_FAILURE = BIT(4),
5357
WIPHY_WOWLAN_EAP_IDENTITY_REQ = BIT(5),
5358
WIPHY_WOWLAN_4WAY_HANDSHAKE = BIT(6),
5359
WIPHY_WOWLAN_RFKILL_RELEASE = BIT(7),
5360
WIPHY_WOWLAN_NET_DETECT = BIT(8),
5361
};
5362
5363
struct wiphy_wowlan_tcp_support {
5364
const struct nl80211_wowlan_tcp_data_token_feature *tok;
5365
u32 data_payload_max;
5366
u32 data_interval_max;
5367
u32 wake_payload_max;
5368
bool seq;
5369
};
5370
5371
/**
5372
* struct wiphy_wowlan_support - WoWLAN support data
5373
* @flags: see &enum wiphy_wowlan_support_flags
5374
* @n_patterns: number of supported wakeup patterns
5375
* (see nl80211.h for the pattern definition)
5376
* @pattern_max_len: maximum length of each pattern
5377
* @pattern_min_len: minimum length of each pattern
5378
* @max_pkt_offset: maximum Rx packet offset
5379
* @max_nd_match_sets: maximum number of matchsets for net-detect,
5380
* similar, but not necessarily identical, to max_match_sets for
5381
* scheduled scans.
5382
* See &struct cfg80211_sched_scan_request.@match_sets for more
5383
* details.
5384
* @tcp: TCP wakeup support information
5385
*/
5386
struct wiphy_wowlan_support {
5387
u32 flags;
5388
int n_patterns;
5389
int pattern_max_len;
5390
int pattern_min_len;
5391
int max_pkt_offset;
5392
int max_nd_match_sets;
5393
const struct wiphy_wowlan_tcp_support *tcp;
5394
};
5395
5396
/**
5397
* struct wiphy_coalesce_support - coalesce support data
5398
* @n_rules: maximum number of coalesce rules
5399
* @max_delay: maximum supported coalescing delay in msecs
5400
* @n_patterns: number of supported patterns in a rule
5401
* (see nl80211.h for the pattern definition)
5402
* @pattern_max_len: maximum length of each pattern
5403
* @pattern_min_len: minimum length of each pattern
5404
* @max_pkt_offset: maximum Rx packet offset
5405
*/
5406
struct wiphy_coalesce_support {
5407
int n_rules;
5408
int max_delay;
5409
int n_patterns;
5410
int pattern_max_len;
5411
int pattern_min_len;
5412
int max_pkt_offset;
5413
};
5414
5415
/**
5416
* enum wiphy_vendor_command_flags - validation flags for vendor commands
5417
* @WIPHY_VENDOR_CMD_NEED_WDEV: vendor command requires wdev
5418
* @WIPHY_VENDOR_CMD_NEED_NETDEV: vendor command requires netdev
5419
* @WIPHY_VENDOR_CMD_NEED_RUNNING: interface/wdev must be up & running
5420
* (must be combined with %_WDEV or %_NETDEV)
5421
*/
5422
enum wiphy_vendor_command_flags {
5423
WIPHY_VENDOR_CMD_NEED_WDEV = BIT(0),
5424
WIPHY_VENDOR_CMD_NEED_NETDEV = BIT(1),
5425
WIPHY_VENDOR_CMD_NEED_RUNNING = BIT(2),
5426
};
5427
5428
/**
5429
* enum wiphy_opmode_flag - Station's ht/vht operation mode information flags
5430
*
5431
* @STA_OPMODE_MAX_BW_CHANGED: Max Bandwidth changed
5432
* @STA_OPMODE_SMPS_MODE_CHANGED: SMPS mode changed
5433
* @STA_OPMODE_N_SS_CHANGED: max N_SS (number of spatial streams) changed
5434
*
5435
*/
5436
enum wiphy_opmode_flag {
5437
STA_OPMODE_MAX_BW_CHANGED = BIT(0),
5438
STA_OPMODE_SMPS_MODE_CHANGED = BIT(1),
5439
STA_OPMODE_N_SS_CHANGED = BIT(2),
5440
};
5441
5442
/**
5443
* struct sta_opmode_info - Station's ht/vht operation mode information
5444
* @changed: contains value from &enum wiphy_opmode_flag
5445
* @smps_mode: New SMPS mode value from &enum nl80211_smps_mode of a station
5446
* @bw: new max bandwidth value from &enum nl80211_chan_width of a station
5447
* @rx_nss: new rx_nss value of a station
5448
*/
5449
5450
struct sta_opmode_info {
5451
u32 changed;
5452
enum nl80211_smps_mode smps_mode;
5453
enum nl80211_chan_width bw;
5454
u8 rx_nss;
5455
};
5456
5457
#define VENDOR_CMD_RAW_DATA ((const struct nla_policy *)(long)(-ENODATA))
5458
5459
/**
5460
* struct wiphy_vendor_command - vendor command definition
5461
* @info: vendor command identifying information, as used in nl80211
5462
* @flags: flags, see &enum wiphy_vendor_command_flags
5463
* @doit: callback for the operation, note that wdev is %NULL if the
5464
* flags didn't ask for a wdev and non-%NULL otherwise; the data
5465
* pointer may be %NULL if userspace provided no data at all
5466
* @dumpit: dump callback, for transferring bigger/multiple items. The
5467
* @storage points to cb->args[5], ie. is preserved over the multiple
5468
* dumpit calls.
5469
* @policy: policy pointer for attributes within %NL80211_ATTR_VENDOR_DATA.
5470
* Set this to %VENDOR_CMD_RAW_DATA if no policy can be given and the
5471
* attribute is just raw data (e.g. a firmware command).
5472
* @maxattr: highest attribute number in policy
5473
* It's recommended to not have the same sub command with both @doit and
5474
* @dumpit, so that userspace can assume certain ones are get and others
5475
* are used with dump requests.
5476
*/
5477
struct wiphy_vendor_command {
5478
struct nl80211_vendor_cmd_info info;
5479
u32 flags;
5480
int (*doit)(struct wiphy *wiphy, struct wireless_dev *wdev,
5481
const void *data, int data_len);
5482
int (*dumpit)(struct wiphy *wiphy, struct wireless_dev *wdev,
5483
struct sk_buff *skb, const void *data, int data_len,
5484
unsigned long *storage);
5485
const struct nla_policy *policy;
5486
unsigned int maxattr;
5487
};
5488
5489
/**
5490
* struct wiphy_iftype_ext_capab - extended capabilities per interface type
5491
* @iftype: interface type
5492
* @extended_capabilities: extended capabilities supported by the driver,
5493
* additional capabilities might be supported by userspace; these are the
5494
* 802.11 extended capabilities ("Extended Capabilities element") and are
5495
* in the same format as in the information element. See IEEE Std
5496
* 802.11-2012 8.4.2.29 for the defined fields.
5497
* @extended_capabilities_mask: mask of the valid values
5498
* @extended_capabilities_len: length of the extended capabilities
5499
* @eml_capabilities: EML capabilities (for MLO)
5500
* @mld_capa_and_ops: MLD capabilities and operations (for MLO)
5501
*/
5502
struct wiphy_iftype_ext_capab {
5503
enum nl80211_iftype iftype;
5504
const u8 *extended_capabilities;
5505
const u8 *extended_capabilities_mask;
5506
u8 extended_capabilities_len;
5507
u16 eml_capabilities;
5508
u16 mld_capa_and_ops;
5509
};
5510
5511
/**
5512
* cfg80211_get_iftype_ext_capa - lookup interface type extended capability
5513
* @wiphy: the wiphy to look up from
5514
* @type: the interface type to look up
5515
*
5516
* Return: The extended capability for the given interface @type, may be %NULL
5517
*/
5518
const struct wiphy_iftype_ext_capab *
5519
cfg80211_get_iftype_ext_capa(struct wiphy *wiphy, enum nl80211_iftype type);
5520
5521
/**
5522
* struct cfg80211_pmsr_capabilities - cfg80211 peer measurement capabilities
5523
* @max_peers: maximum number of peers in a single measurement
5524
* @report_ap_tsf: can report assoc AP's TSF for radio resource measurement
5525
* @randomize_mac_addr: can randomize MAC address for measurement
5526
* @ftm: FTM measurement data
5527
* @ftm.supported: FTM measurement is supported
5528
* @ftm.asap: ASAP-mode is supported
5529
* @ftm.non_asap: non-ASAP-mode is supported
5530
* @ftm.request_lci: can request LCI data
5531
* @ftm.request_civicloc: can request civic location data
5532
* @ftm.preambles: bitmap of preambles supported (&enum nl80211_preamble)
5533
* @ftm.bandwidths: bitmap of bandwidths supported (&enum nl80211_chan_width)
5534
* @ftm.max_bursts_exponent: maximum burst exponent supported
5535
* (set to -1 if not limited; note that setting this will necessarily
5536
* forbid using the value 15 to let the responder pick)
5537
* @ftm.max_ftms_per_burst: maximum FTMs per burst supported (set to 0 if
5538
* not limited)
5539
* @ftm.trigger_based: trigger based ranging measurement is supported
5540
* @ftm.non_trigger_based: non trigger based ranging measurement is supported
5541
*/
5542
struct cfg80211_pmsr_capabilities {
5543
unsigned int max_peers;
5544
u8 report_ap_tsf:1,
5545
randomize_mac_addr:1;
5546
5547
struct {
5548
u32 preambles;
5549
u32 bandwidths;
5550
s8 max_bursts_exponent;
5551
u8 max_ftms_per_burst;
5552
u8 supported:1,
5553
asap:1,
5554
non_asap:1,
5555
request_lci:1,
5556
request_civicloc:1,
5557
trigger_based:1,
5558
non_trigger_based:1;
5559
} ftm;
5560
};
5561
5562
/**
5563
* struct wiphy_iftype_akm_suites - This structure encapsulates supported akm
5564
* suites for interface types defined in @iftypes_mask. Each type in the
5565
* @iftypes_mask must be unique across all instances of iftype_akm_suites.
5566
*
5567
* @iftypes_mask: bitmask of interfaces types
5568
* @akm_suites: points to an array of supported akm suites
5569
* @n_akm_suites: number of supported AKM suites
5570
*/
5571
struct wiphy_iftype_akm_suites {
5572
u16 iftypes_mask;
5573
const u32 *akm_suites;
5574
int n_akm_suites;
5575
};
5576
5577
/**
5578
* struct wiphy_radio_cfg - physical radio config of a wiphy
5579
* This structure describes the configurations of a physical radio in a
5580
* wiphy. It is used to denote per-radio attributes belonging to a wiphy.
5581
*
5582
* @rts_threshold: RTS threshold (dot11RTSThreshold);
5583
* -1 (default) = RTS/CTS disabled
5584
*/
5585
struct wiphy_radio_cfg {
5586
u32 rts_threshold;
5587
};
5588
5589
/**
5590
* struct wiphy_radio_freq_range - wiphy frequency range
5591
* @start_freq: start range edge frequency (kHz)
5592
* @end_freq: end range edge frequency (kHz)
5593
*/
5594
struct wiphy_radio_freq_range {
5595
u32 start_freq;
5596
u32 end_freq;
5597
};
5598
5599
5600
/**
5601
* struct wiphy_radio - physical radio of a wiphy
5602
* This structure describes a physical radio belonging to a wiphy.
5603
* It is used to describe concurrent-channel capabilities. Only one channel
5604
* can be active on the radio described by struct wiphy_radio.
5605
*
5606
* @freq_range: frequency range that the radio can operate on.
5607
* @n_freq_range: number of elements in @freq_range
5608
*
5609
* @iface_combinations: Valid interface combinations array, should not
5610
* list single interface types.
5611
* @n_iface_combinations: number of entries in @iface_combinations array.
5612
*
5613
* @antenna_mask: bitmask of antennas connected to this radio.
5614
*/
5615
struct wiphy_radio {
5616
const struct wiphy_radio_freq_range *freq_range;
5617
int n_freq_range;
5618
5619
const struct ieee80211_iface_combination *iface_combinations;
5620
int n_iface_combinations;
5621
5622
u32 antenna_mask;
5623
};
5624
5625
#define CFG80211_HW_TIMESTAMP_ALL_PEERS 0xffff
5626
5627
/**
5628
* struct wiphy - wireless hardware description
5629
* @mtx: mutex for the data (structures) of this device
5630
* @reg_notifier: the driver's regulatory notification callback,
5631
* note that if your driver uses wiphy_apply_custom_regulatory()
5632
* the reg_notifier's request can be passed as NULL
5633
* @regd: the driver's regulatory domain, if one was requested via
5634
* the regulatory_hint() API. This can be used by the driver
5635
* on the reg_notifier() if it chooses to ignore future
5636
* regulatory domain changes caused by other drivers.
5637
* @signal_type: signal type reported in &struct cfg80211_bss.
5638
* @cipher_suites: supported cipher suites
5639
* @n_cipher_suites: number of supported cipher suites
5640
* @akm_suites: supported AKM suites. These are the default AKMs supported if
5641
* the supported AKMs not advertized for a specific interface type in
5642
* iftype_akm_suites.
5643
* @n_akm_suites: number of supported AKM suites
5644
* @iftype_akm_suites: array of supported akm suites info per interface type.
5645
* Note that the bits in @iftypes_mask inside this structure cannot
5646
* overlap (i.e. only one occurrence of each type is allowed across all
5647
* instances of iftype_akm_suites).
5648
* @num_iftype_akm_suites: number of interface types for which supported akm
5649
* suites are specified separately.
5650
* @retry_short: Retry limit for short frames (dot11ShortRetryLimit)
5651
* @retry_long: Retry limit for long frames (dot11LongRetryLimit)
5652
* @frag_threshold: Fragmentation threshold (dot11FragmentationThreshold);
5653
* -1 = fragmentation disabled, only odd values >= 256 used
5654
* @rts_threshold: RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled
5655
* @_net: the network namespace this wiphy currently lives in
5656
* @perm_addr: permanent MAC address of this device
5657
* @addr_mask: If the device supports multiple MAC addresses by masking,
5658
* set this to a mask with variable bits set to 1, e.g. if the last
5659
* four bits are variable then set it to 00-00-00-00-00-0f. The actual
5660
* variable bits shall be determined by the interfaces added, with
5661
* interfaces not matching the mask being rejected to be brought up.
5662
* @n_addresses: number of addresses in @addresses.
5663
* @addresses: If the device has more than one address, set this pointer
5664
* to a list of addresses (6 bytes each). The first one will be used
5665
* by default for perm_addr. In this case, the mask should be set to
5666
* all-zeroes. In this case it is assumed that the device can handle
5667
* the same number of arbitrary MAC addresses.
5668
* @registered: protects ->resume and ->suspend sysfs callbacks against
5669
* unregister hardware
5670
* @debugfsdir: debugfs directory used for this wiphy (ieee80211/<wiphyname>).
5671
* It will be renamed automatically on wiphy renames
5672
* @dev: (virtual) struct device for this wiphy. The item in
5673
* /sys/class/ieee80211/ points to this. You need use set_wiphy_dev()
5674
* (see below).
5675
* @wext: wireless extension handlers
5676
* @priv: driver private data (sized according to wiphy_new() parameter)
5677
* @interface_modes: bitmask of interfaces types valid for this wiphy,
5678
* must be set by driver
5679
* @iface_combinations: Valid interface combinations array, should not
5680
* list single interface types.
5681
* @n_iface_combinations: number of entries in @iface_combinations array.
5682
* @software_iftypes: bitmask of software interface types, these are not
5683
* subject to any restrictions since they are purely managed in SW.
5684
* @flags: wiphy flags, see &enum wiphy_flags
5685
* @regulatory_flags: wiphy regulatory flags, see
5686
* &enum ieee80211_regulatory_flags
5687
* @features: features advertised to nl80211, see &enum nl80211_feature_flags.
5688
* @ext_features: extended features advertised to nl80211, see
5689
* &enum nl80211_ext_feature_index.
5690
* @bss_priv_size: each BSS struct has private data allocated with it,
5691
* this variable determines its size
5692
* @max_scan_ssids: maximum number of SSIDs the device can scan for in
5693
* any given scan
5694
* @max_sched_scan_reqs: maximum number of scheduled scan requests that
5695
* the device can run concurrently.
5696
* @max_sched_scan_ssids: maximum number of SSIDs the device can scan
5697
* for in any given scheduled scan
5698
* @max_match_sets: maximum number of match sets the device can handle
5699
* when performing a scheduled scan, 0 if filtering is not
5700
* supported.
5701
* @max_scan_ie_len: maximum length of user-controlled IEs device can
5702
* add to probe request frames transmitted during a scan, must not
5703
* include fixed IEs like supported rates
5704
* @max_sched_scan_ie_len: same as max_scan_ie_len, but for scheduled
5705
* scans
5706
* @max_sched_scan_plans: maximum number of scan plans (scan interval and number
5707
* of iterations) for scheduled scan supported by the device.
5708
* @max_sched_scan_plan_interval: maximum interval (in seconds) for a
5709
* single scan plan supported by the device.
5710
* @max_sched_scan_plan_iterations: maximum number of iterations for a single
5711
* scan plan supported by the device.
5712
* @coverage_class: current coverage class
5713
* @fw_version: firmware version for ethtool reporting
5714
* @hw_version: hardware version for ethtool reporting
5715
* @max_num_pmkids: maximum number of PMKIDs supported by device
5716
* @privid: a pointer that drivers can use to identify if an arbitrary
5717
* wiphy is theirs, e.g. in global notifiers
5718
* @bands: information about bands/channels supported by this device
5719
*
5720
* @mgmt_stypes: bitmasks of frame subtypes that can be subscribed to or
5721
* transmitted through nl80211, points to an array indexed by interface
5722
* type
5723
*
5724
* @available_antennas_tx: bitmap of antennas which are available to be
5725
* configured as TX antennas. Antenna configuration commands will be
5726
* rejected unless this or @available_antennas_rx is set.
5727
*
5728
* @available_antennas_rx: bitmap of antennas which are available to be
5729
* configured as RX antennas. Antenna configuration commands will be
5730
* rejected unless this or @available_antennas_tx is set.
5731
*
5732
* @probe_resp_offload:
5733
* Bitmap of supported protocols for probe response offloading.
5734
* See &enum nl80211_probe_resp_offload_support_attr. Only valid
5735
* when the wiphy flag @WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD is set.
5736
*
5737
* @max_remain_on_channel_duration: Maximum time a remain-on-channel operation
5738
* may request, if implemented.
5739
*
5740
* @wowlan: WoWLAN support information
5741
* @wowlan_config: current WoWLAN configuration; this should usually not be
5742
* used since access to it is necessarily racy, use the parameter passed
5743
* to the suspend() operation instead.
5744
*
5745
* @ap_sme_capa: AP SME capabilities, flags from &enum nl80211_ap_sme_features.
5746
* @ht_capa_mod_mask: Specify what ht_cap values can be over-ridden.
5747
* If null, then none can be over-ridden.
5748
* @vht_capa_mod_mask: Specify what VHT capabilities can be over-ridden.
5749
* If null, then none can be over-ridden.
5750
*
5751
* @wdev_list: the list of associated (virtual) interfaces; this list must
5752
* not be modified by the driver, but can be read with RTNL/RCU protection.
5753
*
5754
* @max_acl_mac_addrs: Maximum number of MAC addresses that the device
5755
* supports for ACL.
5756
*
5757
* @extended_capabilities: extended capabilities supported by the driver,
5758
* additional capabilities might be supported by userspace; these are
5759
* the 802.11 extended capabilities ("Extended Capabilities element")
5760
* and are in the same format as in the information element. See
5761
* 802.11-2012 8.4.2.29 for the defined fields. These are the default
5762
* extended capabilities to be used if the capabilities are not specified
5763
* for a specific interface type in iftype_ext_capab.
5764
* @extended_capabilities_mask: mask of the valid values
5765
* @extended_capabilities_len: length of the extended capabilities
5766
* @iftype_ext_capab: array of extended capabilities per interface type
5767
* @num_iftype_ext_capab: number of interface types for which extended
5768
* capabilities are specified separately.
5769
* @coalesce: packet coalescing support information
5770
*
5771
* @vendor_commands: array of vendor commands supported by the hardware
5772
* @n_vendor_commands: number of vendor commands
5773
* @vendor_events: array of vendor events supported by the hardware
5774
* @n_vendor_events: number of vendor events
5775
*
5776
* @max_ap_assoc_sta: maximum number of associated stations supported in AP mode
5777
* (including P2P GO) or 0 to indicate no such limit is advertised. The
5778
* driver is allowed to advertise a theoretical limit that it can reach in
5779
* some cases, but may not always reach.
5780
*
5781
* @max_num_csa_counters: Number of supported csa_counters in beacons
5782
* and probe responses. This value should be set if the driver
5783
* wishes to limit the number of csa counters. Default (0) means
5784
* infinite.
5785
* @bss_select_support: bitmask indicating the BSS selection criteria supported
5786
* by the driver in the .connect() callback. The bit position maps to the
5787
* attribute indices defined in &enum nl80211_bss_select_attr.
5788
*
5789
* @nan_supported_bands: bands supported by the device in NAN mode, a
5790
* bitmap of &enum nl80211_band values. For instance, for
5791
* NL80211_BAND_2GHZ, bit 0 would be set
5792
* (i.e. BIT(NL80211_BAND_2GHZ)).
5793
*
5794
* @txq_limit: configuration of internal TX queue frame limit
5795
* @txq_memory_limit: configuration internal TX queue memory limit
5796
* @txq_quantum: configuration of internal TX queue scheduler quantum
5797
*
5798
* @tx_queue_len: allow setting transmit queue len for drivers not using
5799
* wake_tx_queue
5800
*
5801
* @support_mbssid: can HW support association with nontransmitted AP
5802
* @support_only_he_mbssid: don't parse MBSSID elements if it is not
5803
* HE AP, in order to avoid compatibility issues.
5804
* @support_mbssid must be set for this to have any effect.
5805
*
5806
* @pmsr_capa: peer measurement capabilities
5807
*
5808
* @tid_config_support: describes the per-TID config support that the
5809
* device has
5810
* @tid_config_support.vif: bitmap of attributes (configurations)
5811
* supported by the driver for each vif
5812
* @tid_config_support.peer: bitmap of attributes (configurations)
5813
* supported by the driver for each peer
5814
* @tid_config_support.max_retry: maximum supported retry count for
5815
* long/short retry configuration
5816
*
5817
* @max_data_retry_count: maximum supported per TID retry count for
5818
* configuration through the %NL80211_TID_CONFIG_ATTR_RETRY_SHORT and
5819
* %NL80211_TID_CONFIG_ATTR_RETRY_LONG attributes
5820
* @sar_capa: SAR control capabilities
5821
* @rfkill: a pointer to the rfkill structure
5822
*
5823
* @mbssid_max_interfaces: maximum number of interfaces supported by the driver
5824
* in a multiple BSSID set. This field must be set to a non-zero value
5825
* by the driver to advertise MBSSID support.
5826
* @ema_max_profile_periodicity: maximum profile periodicity supported by
5827
* the driver. Setting this field to a non-zero value indicates that the
5828
* driver supports enhanced multi-BSSID advertisements (EMA AP).
5829
* @max_num_akm_suites: maximum number of AKM suites allowed for
5830
* configuration through %NL80211_CMD_CONNECT, %NL80211_CMD_ASSOCIATE and
5831
* %NL80211_CMD_START_AP. Set to NL80211_MAX_NR_AKM_SUITES if not set by
5832
* driver. If set by driver minimum allowed value is
5833
* NL80211_MAX_NR_AKM_SUITES in order to avoid compatibility issues with
5834
* legacy userspace and maximum allowed value is
5835
* CFG80211_MAX_NUM_AKM_SUITES.
5836
*
5837
* @hw_timestamp_max_peers: maximum number of peers that the driver supports
5838
* enabling HW timestamping for concurrently. Setting this field to a
5839
* non-zero value indicates that the driver supports HW timestamping.
5840
* A value of %CFG80211_HW_TIMESTAMP_ALL_PEERS indicates the driver
5841
* supports enabling HW timestamping for all peers (i.e. no need to
5842
* specify a mac address).
5843
*
5844
* @radio_cfg: configuration of radios belonging to a muli-radio wiphy. This
5845
* struct contains a list of all radio specific attributes and should be
5846
* used only for multi-radio wiphy.
5847
*
5848
* @radio: radios belonging to this wiphy
5849
* @n_radio: number of radios
5850
*/
5851
struct wiphy {
5852
struct mutex mtx;
5853
5854
/* assign these fields before you register the wiphy */
5855
5856
u8 perm_addr[ETH_ALEN];
5857
u8 addr_mask[ETH_ALEN];
5858
5859
struct mac_address *addresses;
5860
5861
const struct ieee80211_txrx_stypes *mgmt_stypes;
5862
5863
const struct ieee80211_iface_combination *iface_combinations;
5864
int n_iface_combinations;
5865
u16 software_iftypes;
5866
5867
u16 n_addresses;
5868
5869
/* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */
5870
u16 interface_modes;
5871
5872
u16 max_acl_mac_addrs;
5873
5874
u32 flags, regulatory_flags, features;
5875
u8 ext_features[DIV_ROUND_UP(NUM_NL80211_EXT_FEATURES, 8)];
5876
5877
u32 ap_sme_capa;
5878
5879
enum cfg80211_signal_type signal_type;
5880
5881
int bss_priv_size;
5882
u8 max_scan_ssids;
5883
u8 max_sched_scan_reqs;
5884
u8 max_sched_scan_ssids;
5885
u8 max_match_sets;
5886
u16 max_scan_ie_len;
5887
u16 max_sched_scan_ie_len;
5888
u32 max_sched_scan_plans;
5889
u32 max_sched_scan_plan_interval;
5890
u32 max_sched_scan_plan_iterations;
5891
5892
int n_cipher_suites;
5893
const u32 *cipher_suites;
5894
5895
int n_akm_suites;
5896
const u32 *akm_suites;
5897
5898
const struct wiphy_iftype_akm_suites *iftype_akm_suites;
5899
unsigned int num_iftype_akm_suites;
5900
5901
u8 retry_short;
5902
u8 retry_long;
5903
u32 frag_threshold;
5904
u32 rts_threshold;
5905
u8 coverage_class;
5906
5907
char fw_version[ETHTOOL_FWVERS_LEN];
5908
u32 hw_version;
5909
5910
#ifdef CONFIG_PM
5911
const struct wiphy_wowlan_support *wowlan;
5912
struct cfg80211_wowlan *wowlan_config;
5913
#endif
5914
5915
u16 max_remain_on_channel_duration;
5916
5917
u8 max_num_pmkids;
5918
5919
u32 available_antennas_tx;
5920
u32 available_antennas_rx;
5921
5922
u32 probe_resp_offload;
5923
5924
const u8 *extended_capabilities, *extended_capabilities_mask;
5925
u8 extended_capabilities_len;
5926
5927
const struct wiphy_iftype_ext_capab *iftype_ext_capab;
5928
unsigned int num_iftype_ext_capab;
5929
5930
const void *privid;
5931
5932
struct ieee80211_supported_band *bands[NUM_NL80211_BANDS];
5933
5934
void (*reg_notifier)(struct wiphy *wiphy,
5935
struct regulatory_request *request);
5936
5937
struct wiphy_radio_cfg *radio_cfg;
5938
5939
/* fields below are read-only, assigned by cfg80211 */
5940
5941
const struct ieee80211_regdomain __rcu *regd;
5942
5943
struct device dev;
5944
5945
bool registered;
5946
5947
struct dentry *debugfsdir;
5948
5949
const struct ieee80211_ht_cap *ht_capa_mod_mask;
5950
const struct ieee80211_vht_cap *vht_capa_mod_mask;
5951
5952
struct list_head wdev_list;
5953
5954
possible_net_t _net;
5955
5956
#ifdef CONFIG_CFG80211_WEXT
5957
const struct iw_handler_def *wext;
5958
#endif
5959
5960
const struct wiphy_coalesce_support *coalesce;
5961
5962
const struct wiphy_vendor_command *vendor_commands;
5963
const struct nl80211_vendor_cmd_info *vendor_events;
5964
int n_vendor_commands, n_vendor_events;
5965
5966
u16 max_ap_assoc_sta;
5967
5968
u8 max_num_csa_counters;
5969
5970
u32 bss_select_support;
5971
5972
u8 nan_supported_bands;
5973
5974
u32 txq_limit;
5975
u32 txq_memory_limit;
5976
u32 txq_quantum;
5977
5978
unsigned long tx_queue_len;
5979
5980
u8 support_mbssid:1,
5981
support_only_he_mbssid:1;
5982
5983
const struct cfg80211_pmsr_capabilities *pmsr_capa;
5984
5985
struct {
5986
u64 peer, vif;
5987
u8 max_retry;
5988
} tid_config_support;
5989
5990
u8 max_data_retry_count;
5991
5992
const struct cfg80211_sar_capa *sar_capa;
5993
5994
struct rfkill *rfkill;
5995
5996
u8 mbssid_max_interfaces;
5997
u8 ema_max_profile_periodicity;
5998
u16 max_num_akm_suites;
5999
6000
u16 hw_timestamp_max_peers;
6001
6002
int n_radio;
6003
const struct wiphy_radio *radio;
6004
6005
char priv[] __aligned(NETDEV_ALIGN);
6006
};
6007
6008
static inline struct net *wiphy_net(struct wiphy *wiphy)
6009
{
6010
return read_pnet(&wiphy->_net);
6011
}
6012
6013
static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net)
6014
{
6015
write_pnet(&wiphy->_net, net);
6016
}
6017
6018
/**
6019
* wiphy_priv - return priv from wiphy
6020
*
6021
* @wiphy: the wiphy whose priv pointer to return
6022
* Return: The priv of @wiphy.
6023
*/
6024
static inline void *wiphy_priv(struct wiphy *wiphy)
6025
{
6026
BUG_ON(!wiphy);
6027
return &wiphy->priv;
6028
}
6029
6030
/**
6031
* priv_to_wiphy - return the wiphy containing the priv
6032
*
6033
* @priv: a pointer previously returned by wiphy_priv
6034
* Return: The wiphy of @priv.
6035
*/
6036
static inline struct wiphy *priv_to_wiphy(void *priv)
6037
{
6038
BUG_ON(!priv);
6039
return container_of(priv, struct wiphy, priv);
6040
}
6041
6042
/**
6043
* set_wiphy_dev - set device pointer for wiphy
6044
*
6045
* @wiphy: The wiphy whose device to bind
6046
* @dev: The device to parent it to
6047
*/
6048
static inline void set_wiphy_dev(struct wiphy *wiphy, struct device *dev)
6049
{
6050
wiphy->dev.parent = dev;
6051
}
6052
6053
/**
6054
* wiphy_dev - get wiphy dev pointer
6055
*
6056
* @wiphy: The wiphy whose device struct to look up
6057
* Return: The dev of @wiphy.
6058
*/
6059
static inline struct device *wiphy_dev(struct wiphy *wiphy)
6060
{
6061
return wiphy->dev.parent;
6062
}
6063
6064
/**
6065
* wiphy_name - get wiphy name
6066
*
6067
* @wiphy: The wiphy whose name to return
6068
* Return: The name of @wiphy.
6069
*/
6070
static inline const char *wiphy_name(const struct wiphy *wiphy)
6071
{
6072
return dev_name(&wiphy->dev);
6073
}
6074
6075
/**
6076
* wiphy_new_nm - create a new wiphy for use with cfg80211
6077
*
6078
* @ops: The configuration operations for this device
6079
* @sizeof_priv: The size of the private area to allocate
6080
* @requested_name: Request a particular name.
6081
* NULL is valid value, and means use the default phy%d naming.
6082
*
6083
* Create a new wiphy and associate the given operations with it.
6084
* @sizeof_priv bytes are allocated for private use.
6085
*
6086
* Return: A pointer to the new wiphy. This pointer must be
6087
* assigned to each netdev's ieee80211_ptr for proper operation.
6088
*/
6089
struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
6090
const char *requested_name);
6091
6092
/**
6093
* wiphy_new - create a new wiphy for use with cfg80211
6094
*
6095
* @ops: The configuration operations for this device
6096
* @sizeof_priv: The size of the private area to allocate
6097
*
6098
* Create a new wiphy and associate the given operations with it.
6099
* @sizeof_priv bytes are allocated for private use.
6100
*
6101
* Return: A pointer to the new wiphy. This pointer must be
6102
* assigned to each netdev's ieee80211_ptr for proper operation.
6103
*/
6104
static inline struct wiphy *wiphy_new(const struct cfg80211_ops *ops,
6105
int sizeof_priv)
6106
{
6107
return wiphy_new_nm(ops, sizeof_priv, NULL);
6108
}
6109
6110
/**
6111
* wiphy_register - register a wiphy with cfg80211
6112
*
6113
* @wiphy: The wiphy to register.
6114
*
6115
* Return: A non-negative wiphy index or a negative error code.
6116
*/
6117
int wiphy_register(struct wiphy *wiphy);
6118
6119
/* this is a define for better error reporting (file/line) */
6120
#define lockdep_assert_wiphy(wiphy) lockdep_assert_held(&(wiphy)->mtx)
6121
6122
/**
6123
* rcu_dereference_wiphy - rcu_dereference with debug checking
6124
* @wiphy: the wiphy to check the locking on
6125
* @p: The pointer to read, prior to dereferencing
6126
*
6127
* Do an rcu_dereference(p), but check caller either holds rcu_read_lock()
6128
* or RTNL. Note: Please prefer wiphy_dereference() or rcu_dereference().
6129
*/
6130
#define rcu_dereference_wiphy(wiphy, p) \
6131
rcu_dereference_check(p, lockdep_is_held(&wiphy->mtx))
6132
6133
/**
6134
* wiphy_dereference - fetch RCU pointer when updates are prevented by wiphy mtx
6135
* @wiphy: the wiphy to check the locking on
6136
* @p: The pointer to read, prior to dereferencing
6137
*
6138
* Return: the value of the specified RCU-protected pointer, but omit the
6139
* READ_ONCE(), because caller holds the wiphy mutex used for updates.
6140
*/
6141
#define wiphy_dereference(wiphy, p) \
6142
rcu_dereference_protected(p, lockdep_is_held(&wiphy->mtx))
6143
6144
/**
6145
* get_wiphy_regdom - get custom regdomain for the given wiphy
6146
* @wiphy: the wiphy to get the regdomain from
6147
*
6148
* Context: Requires any of RTNL, wiphy mutex or RCU protection.
6149
*
6150
* Return: pointer to the regulatory domain associated with the wiphy
6151
*/
6152
const struct ieee80211_regdomain *get_wiphy_regdom(struct wiphy *wiphy);
6153
6154
/**
6155
* wiphy_unregister - deregister a wiphy from cfg80211
6156
*
6157
* @wiphy: The wiphy to unregister.
6158
*
6159
* After this call, no more requests can be made with this priv
6160
* pointer, but the call may sleep to wait for an outstanding
6161
* request that is being handled.
6162
*/
6163
void wiphy_unregister(struct wiphy *wiphy);
6164
6165
/**
6166
* wiphy_free - free wiphy
6167
*
6168
* @wiphy: The wiphy to free
6169
*/
6170
void wiphy_free(struct wiphy *wiphy);
6171
6172
/* internal structs */
6173
struct cfg80211_conn;
6174
struct cfg80211_internal_bss;
6175
struct cfg80211_cached_keys;
6176
struct cfg80211_cqm_config;
6177
6178
/**
6179
* wiphy_lock - lock the wiphy
6180
* @wiphy: the wiphy to lock
6181
*
6182
* This is needed around registering and unregistering netdevs that
6183
* aren't created through cfg80211 calls, since that requires locking
6184
* in cfg80211 when the notifiers is called, but that cannot
6185
* differentiate which way it's called.
6186
*
6187
* It can also be used by drivers for their own purposes.
6188
*
6189
* When cfg80211 ops are called, the wiphy is already locked.
6190
*
6191
* Note that this makes sure that no workers that have been queued
6192
* with wiphy_queue_work() are running.
6193
*/
6194
static inline void wiphy_lock(struct wiphy *wiphy)
6195
__acquires(&wiphy->mtx)
6196
{
6197
mutex_lock(&wiphy->mtx);
6198
__acquire(&wiphy->mtx);
6199
}
6200
6201
/**
6202
* wiphy_unlock - unlock the wiphy again
6203
* @wiphy: the wiphy to unlock
6204
*/
6205
static inline void wiphy_unlock(struct wiphy *wiphy)
6206
__releases(&wiphy->mtx)
6207
{
6208
__release(&wiphy->mtx);
6209
mutex_unlock(&wiphy->mtx);
6210
}
6211
6212
DEFINE_GUARD(wiphy, struct wiphy *,
6213
mutex_lock(&_T->mtx),
6214
mutex_unlock(&_T->mtx))
6215
6216
struct wiphy_work;
6217
typedef void (*wiphy_work_func_t)(struct wiphy *, struct wiphy_work *);
6218
6219
struct wiphy_work {
6220
struct list_head entry;
6221
wiphy_work_func_t func;
6222
};
6223
6224
static inline void wiphy_work_init(struct wiphy_work *work,
6225
wiphy_work_func_t func)
6226
{
6227
INIT_LIST_HEAD(&work->entry);
6228
work->func = func;
6229
}
6230
6231
/**
6232
* wiphy_work_queue - queue work for the wiphy
6233
* @wiphy: the wiphy to queue for
6234
* @work: the work item
6235
*
6236
* This is useful for work that must be done asynchronously, and work
6237
* queued here has the special property that the wiphy mutex will be
6238
* held as if wiphy_lock() was called, and that it cannot be running
6239
* after wiphy_lock() was called. Therefore, wiphy_cancel_work() can
6240
* use just cancel_work() instead of cancel_work_sync(), it requires
6241
* being in a section protected by wiphy_lock().
6242
*/
6243
void wiphy_work_queue(struct wiphy *wiphy, struct wiphy_work *work);
6244
6245
/**
6246
* wiphy_work_cancel - cancel previously queued work
6247
* @wiphy: the wiphy, for debug purposes
6248
* @work: the work to cancel
6249
*
6250
* Cancel the work *without* waiting for it, this assumes being
6251
* called under the wiphy mutex acquired by wiphy_lock().
6252
*/
6253
void wiphy_work_cancel(struct wiphy *wiphy, struct wiphy_work *work);
6254
6255
/**
6256
* wiphy_work_flush - flush previously queued work
6257
* @wiphy: the wiphy, for debug purposes
6258
* @work: the work to flush, this can be %NULL to flush all work
6259
*
6260
* Flush the work (i.e. run it if pending). This must be called
6261
* under the wiphy mutex acquired by wiphy_lock().
6262
*/
6263
void wiphy_work_flush(struct wiphy *wiphy, struct wiphy_work *work);
6264
6265
struct wiphy_delayed_work {
6266
struct wiphy_work work;
6267
struct wiphy *wiphy;
6268
struct timer_list timer;
6269
};
6270
6271
void wiphy_delayed_work_timer(struct timer_list *t);
6272
6273
static inline void wiphy_delayed_work_init(struct wiphy_delayed_work *dwork,
6274
wiphy_work_func_t func)
6275
{
6276
timer_setup(&dwork->timer, wiphy_delayed_work_timer, 0);
6277
wiphy_work_init(&dwork->work, func);
6278
}
6279
6280
/**
6281
* wiphy_delayed_work_queue - queue delayed work for the wiphy
6282
* @wiphy: the wiphy to queue for
6283
* @dwork: the delayable worker
6284
* @delay: number of jiffies to wait before queueing
6285
*
6286
* This is useful for work that must be done asynchronously, and work
6287
* queued here has the special property that the wiphy mutex will be
6288
* held as if wiphy_lock() was called, and that it cannot be running
6289
* after wiphy_lock() was called. Therefore, wiphy_cancel_work() can
6290
* use just cancel_work() instead of cancel_work_sync(), it requires
6291
* being in a section protected by wiphy_lock().
6292
*/
6293
void wiphy_delayed_work_queue(struct wiphy *wiphy,
6294
struct wiphy_delayed_work *dwork,
6295
unsigned long delay);
6296
6297
/**
6298
* wiphy_delayed_work_cancel - cancel previously queued delayed work
6299
* @wiphy: the wiphy, for debug purposes
6300
* @dwork: the delayed work to cancel
6301
*
6302
* Cancel the work *without* waiting for it, this assumes being
6303
* called under the wiphy mutex acquired by wiphy_lock().
6304
*/
6305
void wiphy_delayed_work_cancel(struct wiphy *wiphy,
6306
struct wiphy_delayed_work *dwork);
6307
6308
/**
6309
* wiphy_delayed_work_flush - flush previously queued delayed work
6310
* @wiphy: the wiphy, for debug purposes
6311
* @dwork: the delayed work to flush
6312
*
6313
* Flush the work (i.e. run it if pending). This must be called
6314
* under the wiphy mutex acquired by wiphy_lock().
6315
*/
6316
void wiphy_delayed_work_flush(struct wiphy *wiphy,
6317
struct wiphy_delayed_work *dwork);
6318
6319
/**
6320
* wiphy_delayed_work_pending - Find out whether a wiphy delayable
6321
* work item is currently pending.
6322
*
6323
* @wiphy: the wiphy, for debug purposes
6324
* @dwork: the delayed work in question
6325
*
6326
* Return: true if timer is pending, false otherwise
6327
*
6328
* How wiphy_delayed_work_queue() works is by setting a timer which
6329
* when it expires calls wiphy_work_queue() to queue the wiphy work.
6330
* Because wiphy_delayed_work_queue() uses mod_timer(), if it is
6331
* called twice and the second call happens before the first call
6332
* deadline, the work will rescheduled for the second deadline and
6333
* won't run before that.
6334
*
6335
* wiphy_delayed_work_pending() can be used to detect if calling
6336
* wiphy_work_delayed_work_queue() would start a new work schedule
6337
* or delayed a previous one. As seen below it cannot be used to
6338
* detect precisely if the work has finished to execute nor if it
6339
* is currently executing.
6340
*
6341
* CPU0 CPU1
6342
* wiphy_delayed_work_queue(wk)
6343
* mod_timer(wk->timer)
6344
* wiphy_delayed_work_pending(wk) -> true
6345
*
6346
* [...]
6347
* expire_timers(wk->timer)
6348
* detach_timer(wk->timer)
6349
* wiphy_delayed_work_pending(wk) -> false
6350
* wk->timer->function() |
6351
* wiphy_work_queue(wk) | delayed work pending
6352
* list_add_tail() | returns false but
6353
* queue_work(cfg80211_wiphy_work) | wk->func() has not
6354
* | been run yet
6355
* [...] |
6356
* cfg80211_wiphy_work() |
6357
* wk->func() V
6358
*
6359
*/
6360
bool wiphy_delayed_work_pending(struct wiphy *wiphy,
6361
struct wiphy_delayed_work *dwork);
6362
6363
/**
6364
* enum ieee80211_ap_reg_power - regulatory power for an Access Point
6365
*
6366
* @IEEE80211_REG_UNSET_AP: Access Point has no regulatory power mode
6367
* @IEEE80211_REG_LPI_AP: Indoor Access Point
6368
* @IEEE80211_REG_SP_AP: Standard power Access Point
6369
* @IEEE80211_REG_VLP_AP: Very low power Access Point
6370
*/
6371
enum ieee80211_ap_reg_power {
6372
IEEE80211_REG_UNSET_AP,
6373
IEEE80211_REG_LPI_AP,
6374
IEEE80211_REG_SP_AP,
6375
IEEE80211_REG_VLP_AP,
6376
};
6377
6378
/**
6379
* struct wireless_dev - wireless device state
6380
*
6381
* For netdevs, this structure must be allocated by the driver
6382
* that uses the ieee80211_ptr field in struct net_device (this
6383
* is intentional so it can be allocated along with the netdev.)
6384
* It need not be registered then as netdev registration will
6385
* be intercepted by cfg80211 to see the new wireless device,
6386
* however, drivers must lock the wiphy before registering or
6387
* unregistering netdevs if they pre-create any netdevs (in ops
6388
* called from cfg80211, the wiphy is already locked.)
6389
*
6390
* For non-netdev uses, it must also be allocated by the driver
6391
* in response to the cfg80211 callbacks that require it, as
6392
* there's no netdev registration in that case it may not be
6393
* allocated outside of callback operations that return it.
6394
*
6395
* @wiphy: pointer to hardware description
6396
* @iftype: interface type
6397
* @registered: is this wdev already registered with cfg80211
6398
* @registering: indicates we're doing registration under wiphy lock
6399
* for the notifier
6400
* @list: (private) Used to collect the interfaces
6401
* @netdev: (private) Used to reference back to the netdev, may be %NULL
6402
* @identifier: (private) Identifier used in nl80211 to identify this
6403
* wireless device if it has no netdev
6404
* @u: union containing data specific to @iftype
6405
* @connected: indicates if connected or not (STA mode)
6406
* @wext: (private) Used by the internal wireless extensions compat code
6407
* @wext.ibss: (private) IBSS data part of wext handling
6408
* @wext.connect: (private) connection handling data
6409
* @wext.keys: (private) (WEP) key data
6410
* @wext.ie: (private) extra elements for association
6411
* @wext.ie_len: (private) length of extra elements
6412
* @wext.bssid: (private) selected network BSSID
6413
* @wext.ssid: (private) selected network SSID
6414
* @wext.default_key: (private) selected default key index
6415
* @wext.default_mgmt_key: (private) selected default management key index
6416
* @wext.prev_bssid: (private) previous BSSID for reassociation
6417
* @wext.prev_bssid_valid: (private) previous BSSID validity
6418
* @use_4addr: indicates 4addr mode is used on this interface, must be
6419
* set by driver (if supported) on add_interface BEFORE registering the
6420
* netdev and may otherwise be used by driver read-only, will be update
6421
* by cfg80211 on change_interface
6422
* @mgmt_registrations: list of registrations for management frames
6423
* @mgmt_registrations_need_update: mgmt registrations were updated,
6424
* need to propagate the update to the driver
6425
* @address: The address for this device, valid only if @netdev is %NULL
6426
* @is_running: true if this is a non-netdev device that has been started, e.g.
6427
* the P2P Device.
6428
* @ps: powersave mode is enabled
6429
* @ps_timeout: dynamic powersave timeout
6430
* @ap_unexpected_nlportid: (private) netlink port ID of application
6431
* registered for unexpected class 3 frames (AP mode)
6432
* @conn: (private) cfg80211 software SME connection state machine data
6433
* @connect_keys: (private) keys to set after connection is established
6434
* @conn_bss_type: connecting/connected BSS type
6435
* @conn_owner_nlportid: (private) connection owner socket port ID
6436
* @disconnect_wk: (private) auto-disconnect work
6437
* @disconnect_bssid: (private) the BSSID to use for auto-disconnect
6438
* @event_list: (private) list for internal event processing
6439
* @event_lock: (private) lock for event list
6440
* @owner_nlportid: (private) owner socket port ID
6441
* @nl_owner_dead: (private) owner socket went away
6442
* @cqm_rssi_work: (private) CQM RSSI reporting work
6443
* @cqm_config: (private) nl80211 RSSI monitor state
6444
* @pmsr_list: (private) peer measurement requests
6445
* @pmsr_lock: (private) peer measurements requests/results lock
6446
* @pmsr_free_wk: (private) peer measurements cleanup work
6447
* @unprot_beacon_reported: (private) timestamp of last
6448
* unprotected beacon report
6449
* @links: array of %IEEE80211_MLD_MAX_NUM_LINKS elements containing @addr
6450
* @ap and @client for each link
6451
* @links.cac_started: true if DFS channel availability check has been
6452
* started
6453
* @links.cac_start_time: timestamp (jiffies) when the dfs state was
6454
* entered.
6455
* @links.cac_time_ms: CAC time in ms
6456
* @valid_links: bitmap describing what elements of @links are valid
6457
* @radio_mask: Bitmask of radios that this interface is allowed to operate on.
6458
*/
6459
struct wireless_dev {
6460
struct wiphy *wiphy;
6461
enum nl80211_iftype iftype;
6462
6463
/* the remainder of this struct should be private to cfg80211 */
6464
struct list_head list;
6465
struct net_device *netdev;
6466
6467
u32 identifier;
6468
6469
struct list_head mgmt_registrations;
6470
u8 mgmt_registrations_need_update:1;
6471
6472
bool use_4addr, is_running, registered, registering;
6473
6474
u8 address[ETH_ALEN] __aligned(sizeof(u16));
6475
6476
/* currently used for IBSS and SME - might be rearranged later */
6477
struct cfg80211_conn *conn;
6478
struct cfg80211_cached_keys *connect_keys;
6479
enum ieee80211_bss_type conn_bss_type;
6480
u32 conn_owner_nlportid;
6481
6482
struct work_struct disconnect_wk;
6483
u8 disconnect_bssid[ETH_ALEN];
6484
6485
struct list_head event_list;
6486
spinlock_t event_lock;
6487
6488
u8 connected:1;
6489
6490
bool ps;
6491
int ps_timeout;
6492
6493
u32 ap_unexpected_nlportid;
6494
6495
u32 owner_nlportid;
6496
bool nl_owner_dead;
6497
6498
#ifdef CONFIG_CFG80211_WEXT
6499
/* wext data */
6500
struct {
6501
struct cfg80211_ibss_params ibss;
6502
struct cfg80211_connect_params connect;
6503
struct cfg80211_cached_keys *keys;
6504
const u8 *ie;
6505
size_t ie_len;
6506
u8 bssid[ETH_ALEN];
6507
u8 prev_bssid[ETH_ALEN];
6508
u8 ssid[IEEE80211_MAX_SSID_LEN];
6509
s8 default_key, default_mgmt_key;
6510
bool prev_bssid_valid;
6511
} wext;
6512
#endif
6513
6514
struct wiphy_work cqm_rssi_work;
6515
struct cfg80211_cqm_config __rcu *cqm_config;
6516
6517
struct list_head pmsr_list;
6518
spinlock_t pmsr_lock;
6519
struct work_struct pmsr_free_wk;
6520
6521
unsigned long unprot_beacon_reported;
6522
6523
union {
6524
struct {
6525
u8 connected_addr[ETH_ALEN] __aligned(2);
6526
u8 ssid[IEEE80211_MAX_SSID_LEN];
6527
u8 ssid_len;
6528
} client;
6529
struct {
6530
int beacon_interval;
6531
struct cfg80211_chan_def preset_chandef;
6532
struct cfg80211_chan_def chandef;
6533
u8 id[IEEE80211_MAX_MESH_ID_LEN];
6534
u8 id_len, id_up_len;
6535
} mesh;
6536
struct {
6537
struct cfg80211_chan_def preset_chandef;
6538
u8 ssid[IEEE80211_MAX_SSID_LEN];
6539
u8 ssid_len;
6540
} ap;
6541
struct {
6542
struct cfg80211_internal_bss *current_bss;
6543
struct cfg80211_chan_def chandef;
6544
int beacon_interval;
6545
u8 ssid[IEEE80211_MAX_SSID_LEN];
6546
u8 ssid_len;
6547
} ibss;
6548
struct {
6549
struct cfg80211_chan_def chandef;
6550
} ocb;
6551
} u;
6552
6553
struct {
6554
u8 addr[ETH_ALEN] __aligned(2);
6555
union {
6556
struct {
6557
unsigned int beacon_interval;
6558
struct cfg80211_chan_def chandef;
6559
} ap;
6560
struct {
6561
struct cfg80211_internal_bss *current_bss;
6562
} client;
6563
};
6564
6565
bool cac_started;
6566
unsigned long cac_start_time;
6567
unsigned int cac_time_ms;
6568
} links[IEEE80211_MLD_MAX_NUM_LINKS];
6569
u16 valid_links;
6570
6571
u32 radio_mask;
6572
};
6573
6574
static inline const u8 *wdev_address(struct wireless_dev *wdev)
6575
{
6576
if (wdev->netdev)
6577
return wdev->netdev->dev_addr;
6578
return wdev->address;
6579
}
6580
6581
static inline bool wdev_running(struct wireless_dev *wdev)
6582
{
6583
if (wdev->netdev)
6584
return netif_running(wdev->netdev);
6585
return wdev->is_running;
6586
}
6587
6588
/**
6589
* wdev_priv - return wiphy priv from wireless_dev
6590
*
6591
* @wdev: The wireless device whose wiphy's priv pointer to return
6592
* Return: The wiphy priv of @wdev.
6593
*/
6594
static inline void *wdev_priv(struct wireless_dev *wdev)
6595
{
6596
BUG_ON(!wdev);
6597
return wiphy_priv(wdev->wiphy);
6598
}
6599
6600
/**
6601
* wdev_chandef - return chandef pointer from wireless_dev
6602
* @wdev: the wdev
6603
* @link_id: the link ID for MLO
6604
*
6605
* Return: The chandef depending on the mode, or %NULL.
6606
*/
6607
struct cfg80211_chan_def *wdev_chandef(struct wireless_dev *wdev,
6608
unsigned int link_id);
6609
6610
static inline void WARN_INVALID_LINK_ID(struct wireless_dev *wdev,
6611
unsigned int link_id)
6612
{
6613
WARN_ON(link_id && !wdev->valid_links);
6614
WARN_ON(wdev->valid_links &&
6615
!(wdev->valid_links & BIT(link_id)));
6616
}
6617
6618
#define for_each_valid_link(link_info, link_id) \
6619
for (link_id = 0; \
6620
link_id < ((link_info)->valid_links ? \
6621
ARRAY_SIZE((link_info)->links) : 1); \
6622
link_id++) \
6623
if (!(link_info)->valid_links || \
6624
((link_info)->valid_links & BIT(link_id)))
6625
6626
/**
6627
* DOC: Utility functions
6628
*
6629
* cfg80211 offers a number of utility functions that can be useful.
6630
*/
6631
6632
/**
6633
* ieee80211_channel_equal - compare two struct ieee80211_channel
6634
*
6635
* @a: 1st struct ieee80211_channel
6636
* @b: 2nd struct ieee80211_channel
6637
* Return: true if center frequency of @a == @b
6638
*/
6639
static inline bool
6640
ieee80211_channel_equal(struct ieee80211_channel *a,
6641
struct ieee80211_channel *b)
6642
{
6643
return (a->center_freq == b->center_freq &&
6644
a->freq_offset == b->freq_offset);
6645
}
6646
6647
/**
6648
* ieee80211_channel_to_khz - convert ieee80211_channel to frequency in KHz
6649
* @chan: struct ieee80211_channel to convert
6650
* Return: The corresponding frequency (in KHz)
6651
*/
6652
static inline u32
6653
ieee80211_channel_to_khz(const struct ieee80211_channel *chan)
6654
{
6655
return MHZ_TO_KHZ(chan->center_freq) + chan->freq_offset;
6656
}
6657
6658
/**
6659
* ieee80211_s1g_channel_width - get allowed channel width from @chan
6660
*
6661
* Only allowed for band NL80211_BAND_S1GHZ
6662
* @chan: channel
6663
* Return: The allowed channel width for this center_freq
6664
*/
6665
enum nl80211_chan_width
6666
ieee80211_s1g_channel_width(const struct ieee80211_channel *chan);
6667
6668
/**
6669
* ieee80211_channel_to_freq_khz - convert channel number to frequency
6670
* @chan: channel number
6671
* @band: band, necessary due to channel number overlap
6672
* Return: The corresponding frequency (in KHz), or 0 if the conversion failed.
6673
*/
6674
u32 ieee80211_channel_to_freq_khz(int chan, enum nl80211_band band);
6675
6676
/**
6677
* ieee80211_channel_to_frequency - convert channel number to frequency
6678
* @chan: channel number
6679
* @band: band, necessary due to channel number overlap
6680
* Return: The corresponding frequency (in MHz), or 0 if the conversion failed.
6681
*/
6682
static inline int
6683
ieee80211_channel_to_frequency(int chan, enum nl80211_band band)
6684
{
6685
return KHZ_TO_MHZ(ieee80211_channel_to_freq_khz(chan, band));
6686
}
6687
6688
/**
6689
* ieee80211_freq_khz_to_channel - convert frequency to channel number
6690
* @freq: center frequency in KHz
6691
* Return: The corresponding channel, or 0 if the conversion failed.
6692
*/
6693
int ieee80211_freq_khz_to_channel(u32 freq);
6694
6695
/**
6696
* ieee80211_frequency_to_channel - convert frequency to channel number
6697
* @freq: center frequency in MHz
6698
* Return: The corresponding channel, or 0 if the conversion failed.
6699
*/
6700
static inline int
6701
ieee80211_frequency_to_channel(int freq)
6702
{
6703
return ieee80211_freq_khz_to_channel(MHZ_TO_KHZ(freq));
6704
}
6705
6706
/**
6707
* ieee80211_get_channel_khz - get channel struct from wiphy for specified
6708
* frequency
6709
* @wiphy: the struct wiphy to get the channel for
6710
* @freq: the center frequency (in KHz) of the channel
6711
* Return: The channel struct from @wiphy at @freq.
6712
*/
6713
struct ieee80211_channel *
6714
ieee80211_get_channel_khz(struct wiphy *wiphy, u32 freq);
6715
6716
/**
6717
* ieee80211_get_channel - get channel struct from wiphy for specified frequency
6718
*
6719
* @wiphy: the struct wiphy to get the channel for
6720
* @freq: the center frequency (in MHz) of the channel
6721
* Return: The channel struct from @wiphy at @freq.
6722
*/
6723
static inline struct ieee80211_channel *
6724
ieee80211_get_channel(struct wiphy *wiphy, int freq)
6725
{
6726
return ieee80211_get_channel_khz(wiphy, MHZ_TO_KHZ(freq));
6727
}
6728
6729
/**
6730
* cfg80211_channel_is_psc - Check if the channel is a 6 GHz PSC
6731
* @chan: control channel to check
6732
*
6733
* The Preferred Scanning Channels (PSC) are defined in
6734
* Draft IEEE P802.11ax/D5.0, 26.17.2.3.3
6735
*
6736
* Return: %true if channel is a PSC, %false otherwise
6737
*/
6738
static inline bool cfg80211_channel_is_psc(struct ieee80211_channel *chan)
6739
{
6740
if (chan->band != NL80211_BAND_6GHZ)
6741
return false;
6742
6743
return ieee80211_frequency_to_channel(chan->center_freq) % 16 == 5;
6744
}
6745
6746
/**
6747
* cfg80211_radio_chandef_valid - Check if the radio supports the chandef
6748
*
6749
* @radio: wiphy radio
6750
* @chandef: chandef for current channel
6751
*
6752
* Return: whether or not the given chandef is valid for the given radio
6753
*/
6754
bool cfg80211_radio_chandef_valid(const struct wiphy_radio *radio,
6755
const struct cfg80211_chan_def *chandef);
6756
6757
/**
6758
* cfg80211_wdev_channel_allowed - Check if the wdev may use the channel
6759
*
6760
* @wdev: the wireless device
6761
* @chan: channel to check
6762
*
6763
* Return: whether or not the wdev may use the channel
6764
*/
6765
bool cfg80211_wdev_channel_allowed(struct wireless_dev *wdev,
6766
struct ieee80211_channel *chan);
6767
6768
/**
6769
* ieee80211_get_response_rate - get basic rate for a given rate
6770
*
6771
* @sband: the band to look for rates in
6772
* @basic_rates: bitmap of basic rates
6773
* @bitrate: the bitrate for which to find the basic rate
6774
*
6775
* Return: The basic rate corresponding to a given bitrate, that
6776
* is the next lower bitrate contained in the basic rate map,
6777
* which is, for this function, given as a bitmap of indices of
6778
* rates in the band's bitrate table.
6779
*/
6780
const struct ieee80211_rate *
6781
ieee80211_get_response_rate(struct ieee80211_supported_band *sband,
6782
u32 basic_rates, int bitrate);
6783
6784
/**
6785
* ieee80211_mandatory_rates - get mandatory rates for a given band
6786
* @sband: the band to look for rates in
6787
*
6788
* Return: a bitmap of the mandatory rates for the given band, bits
6789
* are set according to the rate position in the bitrates array.
6790
*/
6791
u32 ieee80211_mandatory_rates(struct ieee80211_supported_band *sband);
6792
6793
/*
6794
* Radiotap parsing functions -- for controlled injection support
6795
*
6796
* Implemented in net/wireless/radiotap.c
6797
* Documentation in Documentation/networking/radiotap-headers.rst
6798
*/
6799
6800
struct radiotap_align_size {
6801
uint8_t align:4, size:4;
6802
};
6803
6804
struct ieee80211_radiotap_namespace {
6805
const struct radiotap_align_size *align_size;
6806
int n_bits;
6807
uint32_t oui;
6808
uint8_t subns;
6809
};
6810
6811
struct ieee80211_radiotap_vendor_namespaces {
6812
const struct ieee80211_radiotap_namespace *ns;
6813
int n_ns;
6814
};
6815
6816
/**
6817
* struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args
6818
* @this_arg_index: index of current arg, valid after each successful call
6819
* to ieee80211_radiotap_iterator_next()
6820
* @this_arg: pointer to current radiotap arg; it is valid after each
6821
* call to ieee80211_radiotap_iterator_next() but also after
6822
* ieee80211_radiotap_iterator_init() where it will point to
6823
* the beginning of the actual data portion
6824
* @this_arg_size: length of the current arg, for convenience
6825
* @current_namespace: pointer to the current namespace definition
6826
* (or internally %NULL if the current namespace is unknown)
6827
* @is_radiotap_ns: indicates whether the current namespace is the default
6828
* radiotap namespace or not
6829
*
6830
* @_rtheader: pointer to the radiotap header we are walking through
6831
* @_max_length: length of radiotap header in cpu byte ordering
6832
* @_arg_index: next argument index
6833
* @_arg: next argument pointer
6834
* @_next_bitmap: internal pointer to next present u32
6835
* @_bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present
6836
* @_vns: vendor namespace definitions
6837
* @_next_ns_data: beginning of the next namespace's data
6838
* @_reset_on_ext: internal; reset the arg index to 0 when going to the
6839
* next bitmap word
6840
*
6841
* Describes the radiotap parser state. Fields prefixed with an underscore
6842
* must not be used by users of the parser, only by the parser internally.
6843
*/
6844
6845
struct ieee80211_radiotap_iterator {
6846
struct ieee80211_radiotap_header *_rtheader;
6847
const struct ieee80211_radiotap_vendor_namespaces *_vns;
6848
const struct ieee80211_radiotap_namespace *current_namespace;
6849
6850
unsigned char *_arg, *_next_ns_data;
6851
__le32 *_next_bitmap;
6852
6853
unsigned char *this_arg;
6854
int this_arg_index;
6855
int this_arg_size;
6856
6857
int is_radiotap_ns;
6858
6859
int _max_length;
6860
int _arg_index;
6861
uint32_t _bitmap_shifter;
6862
int _reset_on_ext;
6863
};
6864
6865
int
6866
ieee80211_radiotap_iterator_init(struct ieee80211_radiotap_iterator *iterator,
6867
struct ieee80211_radiotap_header *radiotap_header,
6868
int max_length,
6869
const struct ieee80211_radiotap_vendor_namespaces *vns);
6870
6871
int
6872
ieee80211_radiotap_iterator_next(struct ieee80211_radiotap_iterator *iterator);
6873
6874
6875
extern const unsigned char rfc1042_header[6];
6876
extern const unsigned char bridge_tunnel_header[6];
6877
6878
/**
6879
* ieee80211_get_hdrlen_from_skb - get header length from data
6880
*
6881
* @skb: the frame
6882
*
6883
* Given an skb with a raw 802.11 header at the data pointer this function
6884
* returns the 802.11 header length.
6885
*
6886
* Return: The 802.11 header length in bytes (not including encryption
6887
* headers). Or 0 if the data in the sk_buff is too short to contain a valid
6888
* 802.11 header.
6889
*/
6890
unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb);
6891
6892
/**
6893
* ieee80211_hdrlen - get header length in bytes from frame control
6894
* @fc: frame control field in little-endian format
6895
* Return: The header length in bytes.
6896
*/
6897
unsigned int __attribute_const__ ieee80211_hdrlen(__le16 fc);
6898
6899
/**
6900
* ieee80211_get_mesh_hdrlen - get mesh extension header length
6901
* @meshhdr: the mesh extension header, only the flags field
6902
* (first byte) will be accessed
6903
* Return: The length of the extension header, which is always at
6904
* least 6 bytes and at most 18 if address 5 and 6 are present.
6905
*/
6906
unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr);
6907
6908
/**
6909
* DOC: Data path helpers
6910
*
6911
* In addition to generic utilities, cfg80211 also offers
6912
* functions that help implement the data path for devices
6913
* that do not do the 802.11/802.3 conversion on the device.
6914
*/
6915
6916
/**
6917
* ieee80211_data_to_8023_exthdr - convert an 802.11 data frame to 802.3
6918
* @skb: the 802.11 data frame
6919
* @ehdr: pointer to a &struct ethhdr that will get the header, instead
6920
* of it being pushed into the SKB
6921
* @addr: the device MAC address
6922
* @iftype: the virtual interface type
6923
* @data_offset: offset of payload after the 802.11 header
6924
* @is_amsdu: true if the 802.11 header is A-MSDU
6925
* Return: 0 on success. Non-zero on error.
6926
*/
6927
int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
6928
const u8 *addr, enum nl80211_iftype iftype,
6929
u8 data_offset, bool is_amsdu);
6930
6931
/**
6932
* ieee80211_data_to_8023 - convert an 802.11 data frame to 802.3
6933
* @skb: the 802.11 data frame
6934
* @addr: the device MAC address
6935
* @iftype: the virtual interface type
6936
* Return: 0 on success. Non-zero on error.
6937
*/
6938
static inline int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr,
6939
enum nl80211_iftype iftype)
6940
{
6941
return ieee80211_data_to_8023_exthdr(skb, NULL, addr, iftype, 0, false);
6942
}
6943
6944
/**
6945
* ieee80211_is_valid_amsdu - check if subframe lengths of an A-MSDU are valid
6946
*
6947
* This is used to detect non-standard A-MSDU frames, e.g. the ones generated
6948
* by ath10k and ath11k, where the subframe length includes the length of the
6949
* mesh control field.
6950
*
6951
* @skb: The input A-MSDU frame without any headers.
6952
* @mesh_hdr: the type of mesh header to test
6953
* 0: non-mesh A-MSDU length field
6954
* 1: big-endian mesh A-MSDU length field
6955
* 2: little-endian mesh A-MSDU length field
6956
* Returns: true if subframe header lengths are valid for the @mesh_hdr mode
6957
*/
6958
bool ieee80211_is_valid_amsdu(struct sk_buff *skb, u8 mesh_hdr);
6959
6960
/**
6961
* ieee80211_amsdu_to_8023s - decode an IEEE 802.11n A-MSDU frame
6962
*
6963
* Decode an IEEE 802.11 A-MSDU and convert it to a list of 802.3 frames.
6964
* The @list will be empty if the decode fails. The @skb must be fully
6965
* header-less before being passed in here; it is freed in this function.
6966
*
6967
* @skb: The input A-MSDU frame without any headers.
6968
* @list: The output list of 802.3 frames. It must be allocated and
6969
* initialized by the caller.
6970
* @addr: The device MAC address.
6971
* @iftype: The device interface type.
6972
* @extra_headroom: The hardware extra headroom for SKBs in the @list.
6973
* @check_da: DA to check in the inner ethernet header, or NULL
6974
* @check_sa: SA to check in the inner ethernet header, or NULL
6975
* @mesh_control: see mesh_hdr in ieee80211_is_valid_amsdu
6976
*/
6977
void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
6978
const u8 *addr, enum nl80211_iftype iftype,
6979
const unsigned int extra_headroom,
6980
const u8 *check_da, const u8 *check_sa,
6981
u8 mesh_control);
6982
6983
/**
6984
* ieee80211_get_8023_tunnel_proto - get RFC1042 or bridge tunnel encap protocol
6985
*
6986
* Check for RFC1042 or bridge tunnel header and fetch the encapsulated
6987
* protocol.
6988
*
6989
* @hdr: pointer to the MSDU payload
6990
* @proto: destination pointer to store the protocol
6991
* Return: true if encapsulation was found
6992
*/
6993
bool ieee80211_get_8023_tunnel_proto(const void *hdr, __be16 *proto);
6994
6995
/**
6996
* ieee80211_strip_8023_mesh_hdr - strip mesh header from converted 802.3 frames
6997
*
6998
* Strip the mesh header, which was left in by ieee80211_data_to_8023 as part
6999
* of the MSDU data. Also move any source/destination addresses from the mesh
7000
* header to the ethernet header (if present).
7001
*
7002
* @skb: The 802.3 frame with embedded mesh header
7003
*
7004
* Return: 0 on success. Non-zero on error.
7005
*/
7006
int ieee80211_strip_8023_mesh_hdr(struct sk_buff *skb);
7007
7008
/**
7009
* cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame
7010
* @skb: the data frame
7011
* @qos_map: Interworking QoS mapping or %NULL if not in use
7012
* Return: The 802.1p/1d tag.
7013
*/
7014
unsigned int cfg80211_classify8021d(struct sk_buff *skb,
7015
struct cfg80211_qos_map *qos_map);
7016
7017
/**
7018
* cfg80211_find_elem_match - match information element and byte array in data
7019
*
7020
* @eid: element ID
7021
* @ies: data consisting of IEs
7022
* @len: length of data
7023
* @match: byte array to match
7024
* @match_len: number of bytes in the match array
7025
* @match_offset: offset in the IE data where the byte array should match.
7026
* Note the difference to cfg80211_find_ie_match() which considers
7027
* the offset to start from the element ID byte, but here we take
7028
* the data portion instead.
7029
*
7030
* Return: %NULL if the element ID could not be found or if
7031
* the element is invalid (claims to be longer than the given
7032
* data) or if the byte array doesn't match; otherwise return the
7033
* requested element struct.
7034
*
7035
* Note: There are no checks on the element length other than
7036
* having to fit into the given data and being large enough for the
7037
* byte array to match.
7038
*/
7039
const struct element *
7040
cfg80211_find_elem_match(u8 eid, const u8 *ies, unsigned int len,
7041
const u8 *match, unsigned int match_len,
7042
unsigned int match_offset);
7043
7044
/**
7045
* cfg80211_find_ie_match - match information element and byte array in data
7046
*
7047
* @eid: element ID
7048
* @ies: data consisting of IEs
7049
* @len: length of data
7050
* @match: byte array to match
7051
* @match_len: number of bytes in the match array
7052
* @match_offset: offset in the IE where the byte array should match.
7053
* If match_len is zero, this must also be set to zero.
7054
* Otherwise this must be set to 2 or more, because the first
7055
* byte is the element id, which is already compared to eid, and
7056
* the second byte is the IE length.
7057
*
7058
* Return: %NULL if the element ID could not be found or if
7059
* the element is invalid (claims to be longer than the given
7060
* data) or if the byte array doesn't match, or a pointer to the first
7061
* byte of the requested element, that is the byte containing the
7062
* element ID.
7063
*
7064
* Note: There are no checks on the element length other than
7065
* having to fit into the given data and being large enough for the
7066
* byte array to match.
7067
*/
7068
static inline const u8 *
7069
cfg80211_find_ie_match(u8 eid, const u8 *ies, unsigned int len,
7070
const u8 *match, unsigned int match_len,
7071
unsigned int match_offset)
7072
{
7073
/* match_offset can't be smaller than 2, unless match_len is
7074
* zero, in which case match_offset must be zero as well.
7075
*/
7076
if (WARN_ON((match_len && match_offset < 2) ||
7077
(!match_len && match_offset)))
7078
return NULL;
7079
7080
return (const void *)cfg80211_find_elem_match(eid, ies, len,
7081
match, match_len,
7082
match_offset ?
7083
match_offset - 2 : 0);
7084
}
7085
7086
/**
7087
* cfg80211_find_elem - find information element in data
7088
*
7089
* @eid: element ID
7090
* @ies: data consisting of IEs
7091
* @len: length of data
7092
*
7093
* Return: %NULL if the element ID could not be found or if
7094
* the element is invalid (claims to be longer than the given
7095
* data) or if the byte array doesn't match; otherwise return the
7096
* requested element struct.
7097
*
7098
* Note: There are no checks on the element length other than
7099
* having to fit into the given data.
7100
*/
7101
static inline const struct element *
7102
cfg80211_find_elem(u8 eid, const u8 *ies, int len)
7103
{
7104
return cfg80211_find_elem_match(eid, ies, len, NULL, 0, 0);
7105
}
7106
7107
/**
7108
* cfg80211_find_ie - find information element in data
7109
*
7110
* @eid: element ID
7111
* @ies: data consisting of IEs
7112
* @len: length of data
7113
*
7114
* Return: %NULL if the element ID could not be found or if
7115
* the element is invalid (claims to be longer than the given
7116
* data), or a pointer to the first byte of the requested
7117
* element, that is the byte containing the element ID.
7118
*
7119
* Note: There are no checks on the element length other than
7120
* having to fit into the given data.
7121
*/
7122
static inline const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len)
7123
{
7124
return cfg80211_find_ie_match(eid, ies, len, NULL, 0, 0);
7125
}
7126
7127
/**
7128
* cfg80211_find_ext_elem - find information element with EID Extension in data
7129
*
7130
* @ext_eid: element ID Extension
7131
* @ies: data consisting of IEs
7132
* @len: length of data
7133
*
7134
* Return: %NULL if the extended element could not be found or if
7135
* the element is invalid (claims to be longer than the given
7136
* data) or if the byte array doesn't match; otherwise return the
7137
* requested element struct.
7138
*
7139
* Note: There are no checks on the element length other than
7140
* having to fit into the given data.
7141
*/
7142
static inline const struct element *
7143
cfg80211_find_ext_elem(u8 ext_eid, const u8 *ies, int len)
7144
{
7145
return cfg80211_find_elem_match(WLAN_EID_EXTENSION, ies, len,
7146
&ext_eid, 1, 0);
7147
}
7148
7149
/**
7150
* cfg80211_find_ext_ie - find information element with EID Extension in data
7151
*
7152
* @ext_eid: element ID Extension
7153
* @ies: data consisting of IEs
7154
* @len: length of data
7155
*
7156
* Return: %NULL if the extended element ID could not be found or if
7157
* the element is invalid (claims to be longer than the given
7158
* data), or a pointer to the first byte of the requested
7159
* element, that is the byte containing the element ID.
7160
*
7161
* Note: There are no checks on the element length other than
7162
* having to fit into the given data.
7163
*/
7164
static inline const u8 *cfg80211_find_ext_ie(u8 ext_eid, const u8 *ies, int len)
7165
{
7166
return cfg80211_find_ie_match(WLAN_EID_EXTENSION, ies, len,
7167
&ext_eid, 1, 2);
7168
}
7169
7170
/**
7171
* cfg80211_find_vendor_elem - find vendor specific information element in data
7172
*
7173
* @oui: vendor OUI
7174
* @oui_type: vendor-specific OUI type (must be < 0xff), negative means any
7175
* @ies: data consisting of IEs
7176
* @len: length of data
7177
*
7178
* Return: %NULL if the vendor specific element ID could not be found or if the
7179
* element is invalid (claims to be longer than the given data); otherwise
7180
* return the element structure for the requested element.
7181
*
7182
* Note: There are no checks on the element length other than having to fit into
7183
* the given data.
7184
*/
7185
const struct element *cfg80211_find_vendor_elem(unsigned int oui, int oui_type,
7186
const u8 *ies,
7187
unsigned int len);
7188
7189
/**
7190
* cfg80211_find_vendor_ie - find vendor specific information element in data
7191
*
7192
* @oui: vendor OUI
7193
* @oui_type: vendor-specific OUI type (must be < 0xff), negative means any
7194
* @ies: data consisting of IEs
7195
* @len: length of data
7196
*
7197
* Return: %NULL if the vendor specific element ID could not be found or if the
7198
* element is invalid (claims to be longer than the given data), or a pointer to
7199
* the first byte of the requested element, that is the byte containing the
7200
* element ID.
7201
*
7202
* Note: There are no checks on the element length other than having to fit into
7203
* the given data.
7204
*/
7205
static inline const u8 *
7206
cfg80211_find_vendor_ie(unsigned int oui, int oui_type,
7207
const u8 *ies, unsigned int len)
7208
{
7209
return (const void *)cfg80211_find_vendor_elem(oui, oui_type, ies, len);
7210
}
7211
7212
/**
7213
* enum cfg80211_rnr_iter_ret - reduced neighbor report iteration state
7214
* @RNR_ITER_CONTINUE: continue iterating with the next entry
7215
* @RNR_ITER_BREAK: break iteration and return success
7216
* @RNR_ITER_ERROR: break iteration and return error
7217
*/
7218
enum cfg80211_rnr_iter_ret {
7219
RNR_ITER_CONTINUE,
7220
RNR_ITER_BREAK,
7221
RNR_ITER_ERROR,
7222
};
7223
7224
/**
7225
* cfg80211_iter_rnr - iterate reduced neighbor report entries
7226
* @elems: the frame elements to iterate RNR elements and then
7227
* their entries in
7228
* @elems_len: length of the elements
7229
* @iter: iteration function, see also &enum cfg80211_rnr_iter_ret
7230
* for the return value
7231
* @iter_data: additional data passed to the iteration function
7232
* Return: %true on success (after successfully iterating all entries
7233
* or if the iteration function returned %RNR_ITER_BREAK),
7234
* %false on error (iteration function returned %RNR_ITER_ERROR
7235
* or elements were malformed.)
7236
*/
7237
bool cfg80211_iter_rnr(const u8 *elems, size_t elems_len,
7238
enum cfg80211_rnr_iter_ret
7239
(*iter)(void *data, u8 type,
7240
const struct ieee80211_neighbor_ap_info *info,
7241
const u8 *tbtt_info, u8 tbtt_info_len),
7242
void *iter_data);
7243
7244
/**
7245
* cfg80211_defragment_element - Defrag the given element data into a buffer
7246
*
7247
* @elem: the element to defragment
7248
* @ies: elements where @elem is contained
7249
* @ieslen: length of @ies
7250
* @data: buffer to store element data, or %NULL to just determine size
7251
* @data_len: length of @data, or 0
7252
* @frag_id: the element ID of fragments
7253
*
7254
* Return: length of @data, or -EINVAL on error
7255
*
7256
* Copy out all data from an element that may be fragmented into @data, while
7257
* skipping all headers.
7258
*
7259
* The function uses memmove() internally. It is acceptable to defragment an
7260
* element in-place.
7261
*/
7262
ssize_t cfg80211_defragment_element(const struct element *elem, const u8 *ies,
7263
size_t ieslen, u8 *data, size_t data_len,
7264
u8 frag_id);
7265
7266
/**
7267
* cfg80211_send_layer2_update - send layer 2 update frame
7268
*
7269
* @dev: network device
7270
* @addr: STA MAC address
7271
*
7272
* Wireless drivers can use this function to update forwarding tables in bridge
7273
* devices upon STA association.
7274
*/
7275
void cfg80211_send_layer2_update(struct net_device *dev, const u8 *addr);
7276
7277
/**
7278
* DOC: Regulatory enforcement infrastructure
7279
*
7280
* TODO
7281
*/
7282
7283
/**
7284
* regulatory_hint - driver hint to the wireless core a regulatory domain
7285
* @wiphy: the wireless device giving the hint (used only for reporting
7286
* conflicts)
7287
* @alpha2: the ISO/IEC 3166 alpha2 the driver claims its regulatory domain
7288
* should be in. If @rd is set this should be NULL. Note that if you
7289
* set this to NULL you should still set rd->alpha2 to some accepted
7290
* alpha2.
7291
*
7292
* Wireless drivers can use this function to hint to the wireless core
7293
* what it believes should be the current regulatory domain by
7294
* giving it an ISO/IEC 3166 alpha2 country code it knows its regulatory
7295
* domain should be in or by providing a completely build regulatory domain.
7296
* If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried
7297
* for a regulatory domain structure for the respective country.
7298
*
7299
* The wiphy must have been registered to cfg80211 prior to this call.
7300
* For cfg80211 drivers this means you must first use wiphy_register(),
7301
* for mac80211 drivers you must first use ieee80211_register_hw().
7302
*
7303
* Drivers should check the return value, its possible you can get
7304
* an -ENOMEM.
7305
*
7306
* Return: 0 on success. -ENOMEM.
7307
*/
7308
int regulatory_hint(struct wiphy *wiphy, const char *alpha2);
7309
7310
/**
7311
* regulatory_set_wiphy_regd - set regdom info for self managed drivers
7312
* @wiphy: the wireless device we want to process the regulatory domain on
7313
* @rd: the regulatory domain information to use for this wiphy
7314
*
7315
* Set the regulatory domain information for self-managed wiphys, only they
7316
* may use this function. See %REGULATORY_WIPHY_SELF_MANAGED for more
7317
* information.
7318
*
7319
* Return: 0 on success. -EINVAL, -EPERM
7320
*/
7321
int regulatory_set_wiphy_regd(struct wiphy *wiphy,
7322
struct ieee80211_regdomain *rd);
7323
7324
/**
7325
* regulatory_set_wiphy_regd_sync - set regdom for self-managed drivers
7326
* @wiphy: the wireless device we want to process the regulatory domain on
7327
* @rd: the regulatory domain information to use for this wiphy
7328
*
7329
* This functions requires the RTNL and the wiphy mutex to be held and
7330
* applies the new regdomain synchronously to this wiphy. For more details
7331
* see regulatory_set_wiphy_regd().
7332
*
7333
* Return: 0 on success. -EINVAL, -EPERM
7334
*/
7335
int regulatory_set_wiphy_regd_sync(struct wiphy *wiphy,
7336
struct ieee80211_regdomain *rd);
7337
7338
/**
7339
* wiphy_apply_custom_regulatory - apply a custom driver regulatory domain
7340
* @wiphy: the wireless device we want to process the regulatory domain on
7341
* @regd: the custom regulatory domain to use for this wiphy
7342
*
7343
* Drivers can sometimes have custom regulatory domains which do not apply
7344
* to a specific country. Drivers can use this to apply such custom regulatory
7345
* domains. This routine must be called prior to wiphy registration. The
7346
* custom regulatory domain will be trusted completely and as such previous
7347
* default channel settings will be disregarded. If no rule is found for a
7348
* channel on the regulatory domain the channel will be disabled.
7349
* Drivers using this for a wiphy should also set the wiphy flag
7350
* REGULATORY_CUSTOM_REG or cfg80211 will set it for the wiphy
7351
* that called this helper.
7352
*/
7353
void wiphy_apply_custom_regulatory(struct wiphy *wiphy,
7354
const struct ieee80211_regdomain *regd);
7355
7356
/**
7357
* freq_reg_info - get regulatory information for the given frequency
7358
* @wiphy: the wiphy for which we want to process this rule for
7359
* @center_freq: Frequency in KHz for which we want regulatory information for
7360
*
7361
* Use this function to get the regulatory rule for a specific frequency on
7362
* a given wireless device. If the device has a specific regulatory domain
7363
* it wants to follow we respect that unless a country IE has been received
7364
* and processed already.
7365
*
7366
* Return: A valid pointer, or, when an error occurs, for example if no rule
7367
* can be found, the return value is encoded using ERR_PTR(). Use IS_ERR() to
7368
* check and PTR_ERR() to obtain the numeric return value. The numeric return
7369
* value will be -ERANGE if we determine the given center_freq does not even
7370
* have a regulatory rule for a frequency range in the center_freq's band.
7371
* See freq_in_rule_band() for our current definition of a band -- this is
7372
* purely subjective and right now it's 802.11 specific.
7373
*/
7374
const struct ieee80211_reg_rule *freq_reg_info(struct wiphy *wiphy,
7375
u32 center_freq);
7376
7377
/**
7378
* reg_initiator_name - map regulatory request initiator enum to name
7379
* @initiator: the regulatory request initiator
7380
*
7381
* You can use this to map the regulatory request initiator enum to a
7382
* proper string representation.
7383
*
7384
* Return: pointer to string representation of the initiator
7385
*/
7386
const char *reg_initiator_name(enum nl80211_reg_initiator initiator);
7387
7388
/**
7389
* regulatory_pre_cac_allowed - check if pre-CAC allowed in the current regdom
7390
* @wiphy: wiphy for which pre-CAC capability is checked.
7391
*
7392
* Pre-CAC is allowed only in some regdomains (notable ETSI).
7393
*
7394
* Return: %true if allowed, %false otherwise
7395
*/
7396
bool regulatory_pre_cac_allowed(struct wiphy *wiphy);
7397
7398
/**
7399
* DOC: Internal regulatory db functions
7400
*
7401
*/
7402
7403
/**
7404
* reg_query_regdb_wmm - Query internal regulatory db for wmm rule
7405
* Regulatory self-managed driver can use it to proactively
7406
*
7407
* @alpha2: the ISO/IEC 3166 alpha2 wmm rule to be queried.
7408
* @freq: the frequency (in MHz) to be queried.
7409
* @rule: pointer to store the wmm rule from the regulatory db.
7410
*
7411
* Self-managed wireless drivers can use this function to query
7412
* the internal regulatory database to check whether the given
7413
* ISO/IEC 3166 alpha2 country and freq have wmm rule limitations.
7414
*
7415
* Drivers should check the return value, its possible you can get
7416
* an -ENODATA.
7417
*
7418
* Return: 0 on success. -ENODATA.
7419
*/
7420
int reg_query_regdb_wmm(char *alpha2, int freq,
7421
struct ieee80211_reg_rule *rule);
7422
7423
/*
7424
* callbacks for asynchronous cfg80211 methods, notification
7425
* functions and BSS handling helpers
7426
*/
7427
7428
/**
7429
* cfg80211_scan_done - notify that scan finished
7430
*
7431
* @request: the corresponding scan request
7432
* @info: information about the completed scan
7433
*/
7434
void cfg80211_scan_done(struct cfg80211_scan_request *request,
7435
struct cfg80211_scan_info *info);
7436
7437
/**
7438
* cfg80211_sched_scan_results - notify that new scan results are available
7439
*
7440
* @wiphy: the wiphy which got scheduled scan results
7441
* @reqid: identifier for the related scheduled scan request
7442
*/
7443
void cfg80211_sched_scan_results(struct wiphy *wiphy, u64 reqid);
7444
7445
/**
7446
* cfg80211_sched_scan_stopped - notify that the scheduled scan has stopped
7447
*
7448
* @wiphy: the wiphy on which the scheduled scan stopped
7449
* @reqid: identifier for the related scheduled scan request
7450
*
7451
* The driver can call this function to inform cfg80211 that the
7452
* scheduled scan had to be stopped, for whatever reason. The driver
7453
* is then called back via the sched_scan_stop operation when done.
7454
*/
7455
void cfg80211_sched_scan_stopped(struct wiphy *wiphy, u64 reqid);
7456
7457
/**
7458
* cfg80211_sched_scan_stopped_locked - notify that the scheduled scan has stopped
7459
*
7460
* @wiphy: the wiphy on which the scheduled scan stopped
7461
* @reqid: identifier for the related scheduled scan request
7462
*
7463
* The driver can call this function to inform cfg80211 that the
7464
* scheduled scan had to be stopped, for whatever reason. The driver
7465
* is then called back via the sched_scan_stop operation when done.
7466
* This function should be called with the wiphy mutex held.
7467
*/
7468
void cfg80211_sched_scan_stopped_locked(struct wiphy *wiphy, u64 reqid);
7469
7470
/**
7471
* cfg80211_inform_bss_frame_data - inform cfg80211 of a received BSS frame
7472
* @wiphy: the wiphy reporting the BSS
7473
* @data: the BSS metadata
7474
* @mgmt: the management frame (probe response or beacon)
7475
* @len: length of the management frame
7476
* @gfp: context flags
7477
*
7478
* This informs cfg80211 that BSS information was found and
7479
* the BSS should be updated/added.
7480
*
7481
* Return: A referenced struct, must be released with cfg80211_put_bss()!
7482
* Or %NULL on error.
7483
*/
7484
struct cfg80211_bss * __must_check
7485
cfg80211_inform_bss_frame_data(struct wiphy *wiphy,
7486
struct cfg80211_inform_bss *data,
7487
struct ieee80211_mgmt *mgmt, size_t len,
7488
gfp_t gfp);
7489
7490
static inline struct cfg80211_bss * __must_check
7491
cfg80211_inform_bss_frame(struct wiphy *wiphy,
7492
struct ieee80211_channel *rx_channel,
7493
struct ieee80211_mgmt *mgmt, size_t len,
7494
s32 signal, gfp_t gfp)
7495
{
7496
struct cfg80211_inform_bss data = {
7497
.chan = rx_channel,
7498
.signal = signal,
7499
};
7500
7501
return cfg80211_inform_bss_frame_data(wiphy, &data, mgmt, len, gfp);
7502
}
7503
7504
/**
7505
* cfg80211_gen_new_bssid - generate a nontransmitted BSSID for multi-BSSID
7506
* @bssid: transmitter BSSID
7507
* @max_bssid: max BSSID indicator, taken from Multiple BSSID element
7508
* @mbssid_index: BSSID index, taken from Multiple BSSID index element
7509
* @new_bssid: calculated nontransmitted BSSID
7510
*/
7511
static inline void cfg80211_gen_new_bssid(const u8 *bssid, u8 max_bssid,
7512
u8 mbssid_index, u8 *new_bssid)
7513
{
7514
u64 bssid_u64 = ether_addr_to_u64(bssid);
7515
u64 mask = GENMASK_ULL(max_bssid - 1, 0);
7516
u64 new_bssid_u64;
7517
7518
new_bssid_u64 = bssid_u64 & ~mask;
7519
7520
new_bssid_u64 |= ((bssid_u64 & mask) + mbssid_index) & mask;
7521
7522
u64_to_ether_addr(new_bssid_u64, new_bssid);
7523
}
7524
7525
/**
7526
* cfg80211_is_element_inherited - returns if element ID should be inherited
7527
* @element: element to check
7528
* @non_inherit_element: non inheritance element
7529
*
7530
* Return: %true if should be inherited, %false otherwise
7531
*/
7532
bool cfg80211_is_element_inherited(const struct element *element,
7533
const struct element *non_inherit_element);
7534
7535
/**
7536
* cfg80211_merge_profile - merges a MBSSID profile if it is split between IEs
7537
* @ie: ies
7538
* @ielen: length of IEs
7539
* @mbssid_elem: current MBSSID element
7540
* @sub_elem: current MBSSID subelement (profile)
7541
* @merged_ie: location of the merged profile
7542
* @max_copy_len: max merged profile length
7543
*
7544
* Return: the number of bytes merged
7545
*/
7546
size_t cfg80211_merge_profile(const u8 *ie, size_t ielen,
7547
const struct element *mbssid_elem,
7548
const struct element *sub_elem,
7549
u8 *merged_ie, size_t max_copy_len);
7550
7551
/**
7552
* enum cfg80211_bss_frame_type - frame type that the BSS data came from
7553
* @CFG80211_BSS_FTYPE_UNKNOWN: driver doesn't know whether the data is
7554
* from a beacon or probe response
7555
* @CFG80211_BSS_FTYPE_BEACON: data comes from a beacon
7556
* @CFG80211_BSS_FTYPE_PRESP: data comes from a probe response
7557
* @CFG80211_BSS_FTYPE_S1G_BEACON: data comes from an S1G beacon
7558
*/
7559
enum cfg80211_bss_frame_type {
7560
CFG80211_BSS_FTYPE_UNKNOWN,
7561
CFG80211_BSS_FTYPE_BEACON,
7562
CFG80211_BSS_FTYPE_PRESP,
7563
CFG80211_BSS_FTYPE_S1G_BEACON,
7564
};
7565
7566
/**
7567
* cfg80211_get_ies_channel_number - returns the channel number from ies
7568
* @ie: IEs
7569
* @ielen: length of IEs
7570
* @band: enum nl80211_band of the channel
7571
*
7572
* Return: the channel number, or -1 if none could be determined.
7573
*/
7574
int cfg80211_get_ies_channel_number(const u8 *ie, size_t ielen,
7575
enum nl80211_band band);
7576
7577
/**
7578
* cfg80211_ssid_eq - compare two SSIDs
7579
* @a: first SSID
7580
* @b: second SSID
7581
*
7582
* Return: %true if SSIDs are equal, %false otherwise.
7583
*/
7584
static inline bool
7585
cfg80211_ssid_eq(struct cfg80211_ssid *a, struct cfg80211_ssid *b)
7586
{
7587
if (WARN_ON(!a || !b))
7588
return false;
7589
if (a->ssid_len != b->ssid_len)
7590
return false;
7591
return memcmp(a->ssid, b->ssid, a->ssid_len) ? false : true;
7592
}
7593
7594
/**
7595
* cfg80211_inform_bss_data - inform cfg80211 of a new BSS
7596
*
7597
* @wiphy: the wiphy reporting the BSS
7598
* @data: the BSS metadata
7599
* @ftype: frame type (if known)
7600
* @bssid: the BSSID of the BSS
7601
* @tsf: the TSF sent by the peer in the beacon/probe response (or 0)
7602
* @capability: the capability field sent by the peer
7603
* @beacon_interval: the beacon interval announced by the peer
7604
* @ie: additional IEs sent by the peer
7605
* @ielen: length of the additional IEs
7606
* @gfp: context flags
7607
*
7608
* This informs cfg80211 that BSS information was found and
7609
* the BSS should be updated/added.
7610
*
7611
* Return: A referenced struct, must be released with cfg80211_put_bss()!
7612
* Or %NULL on error.
7613
*/
7614
struct cfg80211_bss * __must_check
7615
cfg80211_inform_bss_data(struct wiphy *wiphy,
7616
struct cfg80211_inform_bss *data,
7617
enum cfg80211_bss_frame_type ftype,
7618
const u8 *bssid, u64 tsf, u16 capability,
7619
u16 beacon_interval, const u8 *ie, size_t ielen,
7620
gfp_t gfp);
7621
7622
static inline struct cfg80211_bss * __must_check
7623
cfg80211_inform_bss(struct wiphy *wiphy,
7624
struct ieee80211_channel *rx_channel,
7625
enum cfg80211_bss_frame_type ftype,
7626
const u8 *bssid, u64 tsf, u16 capability,
7627
u16 beacon_interval, const u8 *ie, size_t ielen,
7628
s32 signal, gfp_t gfp)
7629
{
7630
struct cfg80211_inform_bss data = {
7631
.chan = rx_channel,
7632
.signal = signal,
7633
};
7634
7635
return cfg80211_inform_bss_data(wiphy, &data, ftype, bssid, tsf,
7636
capability, beacon_interval, ie, ielen,
7637
gfp);
7638
}
7639
7640
/**
7641
* __cfg80211_get_bss - get a BSS reference
7642
* @wiphy: the wiphy this BSS struct belongs to
7643
* @channel: the channel to search on (or %NULL)
7644
* @bssid: the desired BSSID (or %NULL)
7645
* @ssid: the desired SSID (or %NULL)
7646
* @ssid_len: length of the SSID (or 0)
7647
* @bss_type: type of BSS, see &enum ieee80211_bss_type
7648
* @privacy: privacy filter, see &enum ieee80211_privacy
7649
* @use_for: indicates which use is intended
7650
*
7651
* Return: Reference-counted BSS on success. %NULL on error.
7652
*/
7653
struct cfg80211_bss *__cfg80211_get_bss(struct wiphy *wiphy,
7654
struct ieee80211_channel *channel,
7655
const u8 *bssid,
7656
const u8 *ssid, size_t ssid_len,
7657
enum ieee80211_bss_type bss_type,
7658
enum ieee80211_privacy privacy,
7659
u32 use_for);
7660
7661
/**
7662
* cfg80211_get_bss - get a BSS reference
7663
* @wiphy: the wiphy this BSS struct belongs to
7664
* @channel: the channel to search on (or %NULL)
7665
* @bssid: the desired BSSID (or %NULL)
7666
* @ssid: the desired SSID (or %NULL)
7667
* @ssid_len: length of the SSID (or 0)
7668
* @bss_type: type of BSS, see &enum ieee80211_bss_type
7669
* @privacy: privacy filter, see &enum ieee80211_privacy
7670
*
7671
* This version implies regular usage, %NL80211_BSS_USE_FOR_NORMAL.
7672
*
7673
* Return: Reference-counted BSS on success. %NULL on error.
7674
*/
7675
static inline struct cfg80211_bss *
7676
cfg80211_get_bss(struct wiphy *wiphy, struct ieee80211_channel *channel,
7677
const u8 *bssid, const u8 *ssid, size_t ssid_len,
7678
enum ieee80211_bss_type bss_type,
7679
enum ieee80211_privacy privacy)
7680
{
7681
return __cfg80211_get_bss(wiphy, channel, bssid, ssid, ssid_len,
7682
bss_type, privacy,
7683
NL80211_BSS_USE_FOR_NORMAL);
7684
}
7685
7686
static inline struct cfg80211_bss *
7687
cfg80211_get_ibss(struct wiphy *wiphy,
7688
struct ieee80211_channel *channel,
7689
const u8 *ssid, size_t ssid_len)
7690
{
7691
return cfg80211_get_bss(wiphy, channel, NULL, ssid, ssid_len,
7692
IEEE80211_BSS_TYPE_IBSS,
7693
IEEE80211_PRIVACY_ANY);
7694
}
7695
7696
/**
7697
* cfg80211_ref_bss - reference BSS struct
7698
* @wiphy: the wiphy this BSS struct belongs to
7699
* @bss: the BSS struct to reference
7700
*
7701
* Increments the refcount of the given BSS struct.
7702
*/
7703
void cfg80211_ref_bss(struct wiphy *wiphy, struct cfg80211_bss *bss);
7704
7705
/**
7706
* cfg80211_put_bss - unref BSS struct
7707
* @wiphy: the wiphy this BSS struct belongs to
7708
* @bss: the BSS struct
7709
*
7710
* Decrements the refcount of the given BSS struct.
7711
*/
7712
void cfg80211_put_bss(struct wiphy *wiphy, struct cfg80211_bss *bss);
7713
7714
/**
7715
* cfg80211_unlink_bss - unlink BSS from internal data structures
7716
* @wiphy: the wiphy
7717
* @bss: the bss to remove
7718
*
7719
* This function removes the given BSS from the internal data structures
7720
* thereby making it no longer show up in scan results etc. Use this
7721
* function when you detect a BSS is gone. Normally BSSes will also time
7722
* out, so it is not necessary to use this function at all.
7723
*/
7724
void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss);
7725
7726
/**
7727
* cfg80211_bss_iter - iterate all BSS entries
7728
*
7729
* This function iterates over the BSS entries associated with the given wiphy
7730
* and calls the callback for the iterated BSS. The iterator function is not
7731
* allowed to call functions that might modify the internal state of the BSS DB.
7732
*
7733
* @wiphy: the wiphy
7734
* @chandef: if given, the iterator function will be called only if the channel
7735
* of the currently iterated BSS is a subset of the given channel.
7736
* @iter: the iterator function to call
7737
* @iter_data: an argument to the iterator function
7738
*/
7739
void cfg80211_bss_iter(struct wiphy *wiphy,
7740
struct cfg80211_chan_def *chandef,
7741
void (*iter)(struct wiphy *wiphy,
7742
struct cfg80211_bss *bss,
7743
void *data),
7744
void *iter_data);
7745
7746
/**
7747
* cfg80211_rx_mlme_mgmt - notification of processed MLME management frame
7748
* @dev: network device
7749
* @buf: authentication frame (header + body)
7750
* @len: length of the frame data
7751
*
7752
* This function is called whenever an authentication, disassociation or
7753
* deauthentication frame has been received and processed in station mode.
7754
* After being asked to authenticate via cfg80211_ops::auth() the driver must
7755
* call either this function or cfg80211_auth_timeout().
7756
* After being asked to associate via cfg80211_ops::assoc() the driver must
7757
* call either this function or cfg80211_auth_timeout().
7758
* While connected, the driver must calls this for received and processed
7759
* disassociation and deauthentication frames. If the frame couldn't be used
7760
* because it was unprotected, the driver must call the function
7761
* cfg80211_rx_unprot_mlme_mgmt() instead.
7762
*
7763
* This function may sleep. The caller must hold the corresponding wdev's mutex.
7764
*/
7765
void cfg80211_rx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len);
7766
7767
/**
7768
* cfg80211_auth_timeout - notification of timed out authentication
7769
* @dev: network device
7770
* @addr: The MAC address of the device with which the authentication timed out
7771
*
7772
* This function may sleep. The caller must hold the corresponding wdev's
7773
* mutex.
7774
*/
7775
void cfg80211_auth_timeout(struct net_device *dev, const u8 *addr);
7776
7777
/**
7778
* struct cfg80211_rx_assoc_resp_data - association response data
7779
* @buf: (Re)Association Response frame (header + body)
7780
* @len: length of the frame data
7781
* @uapsd_queues: bitmap of queues configured for uapsd. Same format
7782
* as the AC bitmap in the QoS info field
7783
* @req_ies: information elements from the (Re)Association Request frame
7784
* @req_ies_len: length of req_ies data
7785
* @ap_mld_addr: AP MLD address (in case of MLO)
7786
* @links: per-link information indexed by link ID, use links[0] for
7787
* non-MLO connections
7788
* @links.bss: the BSS that association was requested with, ownership of the
7789
* pointer moves to cfg80211 in the call to cfg80211_rx_assoc_resp()
7790
* @links.status: Set this (along with a BSS pointer) for links that
7791
* were rejected by the AP.
7792
*/
7793
struct cfg80211_rx_assoc_resp_data {
7794
const u8 *buf;
7795
size_t len;
7796
const u8 *req_ies;
7797
size_t req_ies_len;
7798
int uapsd_queues;
7799
const u8 *ap_mld_addr;
7800
struct {
7801
u8 addr[ETH_ALEN] __aligned(2);
7802
struct cfg80211_bss *bss;
7803
u16 status;
7804
} links[IEEE80211_MLD_MAX_NUM_LINKS];
7805
};
7806
7807
/**
7808
* cfg80211_rx_assoc_resp - notification of processed association response
7809
* @dev: network device
7810
* @data: association response data, &struct cfg80211_rx_assoc_resp_data
7811
*
7812
* After being asked to associate via cfg80211_ops::assoc() the driver must
7813
* call either this function or cfg80211_auth_timeout().
7814
*
7815
* This function may sleep. The caller must hold the corresponding wdev's mutex.
7816
*/
7817
void cfg80211_rx_assoc_resp(struct net_device *dev,
7818
const struct cfg80211_rx_assoc_resp_data *data);
7819
7820
/**
7821
* struct cfg80211_assoc_failure - association failure data
7822
* @ap_mld_addr: AP MLD address, or %NULL
7823
* @bss: list of BSSes, must use entry 0 for non-MLO connections
7824
* (@ap_mld_addr is %NULL)
7825
* @timeout: indicates the association failed due to timeout, otherwise
7826
* the association was abandoned for a reason reported through some
7827
* other API (e.g. deauth RX)
7828
*/
7829
struct cfg80211_assoc_failure {
7830
const u8 *ap_mld_addr;
7831
struct cfg80211_bss *bss[IEEE80211_MLD_MAX_NUM_LINKS];
7832
bool timeout;
7833
};
7834
7835
/**
7836
* cfg80211_assoc_failure - notification of association failure
7837
* @dev: network device
7838
* @data: data describing the association failure
7839
*
7840
* This function may sleep. The caller must hold the corresponding wdev's mutex.
7841
*/
7842
void cfg80211_assoc_failure(struct net_device *dev,
7843
struct cfg80211_assoc_failure *data);
7844
7845
/**
7846
* cfg80211_tx_mlme_mgmt - notification of transmitted deauth/disassoc frame
7847
* @dev: network device
7848
* @buf: 802.11 frame (header + body)
7849
* @len: length of the frame data
7850
* @reconnect: immediate reconnect is desired (include the nl80211 attribute)
7851
*
7852
* This function is called whenever deauthentication has been processed in
7853
* station mode. This includes both received deauthentication frames and
7854
* locally generated ones. This function may sleep. The caller must hold the
7855
* corresponding wdev's mutex.
7856
*/
7857
void cfg80211_tx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len,
7858
bool reconnect);
7859
7860
/**
7861
* cfg80211_rx_unprot_mlme_mgmt - notification of unprotected mlme mgmt frame
7862
* @dev: network device
7863
* @buf: received management frame (header + body)
7864
* @len: length of the frame data
7865
*
7866
* This function is called whenever a received deauthentication or dissassoc
7867
* frame has been dropped in station mode because of MFP being used but the
7868
* frame was not protected. This is also used to notify reception of a Beacon
7869
* frame that was dropped because it did not include a valid MME MIC while
7870
* beacon protection was enabled (BIGTK configured in station mode).
7871
*
7872
* This function may sleep.
7873
*/
7874
void cfg80211_rx_unprot_mlme_mgmt(struct net_device *dev,
7875
const u8 *buf, size_t len);
7876
7877
/**
7878
* cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP)
7879
* @dev: network device
7880
* @addr: The source MAC address of the frame
7881
* @key_type: The key type that the received frame used
7882
* @key_id: Key identifier (0..3). Can be -1 if missing.
7883
* @tsc: The TSC value of the frame that generated the MIC failure (6 octets)
7884
* @gfp: allocation flags
7885
*
7886
* This function is called whenever the local MAC detects a MIC failure in a
7887
* received frame. This matches with MLME-MICHAELMICFAILURE.indication()
7888
* primitive.
7889
*/
7890
void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr,
7891
enum nl80211_key_type key_type, int key_id,
7892
const u8 *tsc, gfp_t gfp);
7893
7894
/**
7895
* cfg80211_ibss_joined - notify cfg80211 that device joined an IBSS
7896
*
7897
* @dev: network device
7898
* @bssid: the BSSID of the IBSS joined
7899
* @channel: the channel of the IBSS joined
7900
* @gfp: allocation flags
7901
*
7902
* This function notifies cfg80211 that the device joined an IBSS or
7903
* switched to a different BSSID. Before this function can be called,
7904
* either a beacon has to have been received from the IBSS, or one of
7905
* the cfg80211_inform_bss{,_frame} functions must have been called
7906
* with the locally generated beacon -- this guarantees that there is
7907
* always a scan result for this IBSS. cfg80211 will handle the rest.
7908
*/
7909
void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid,
7910
struct ieee80211_channel *channel, gfp_t gfp);
7911
7912
/**
7913
* cfg80211_notify_new_peer_candidate - notify cfg80211 of a new mesh peer
7914
* candidate
7915
*
7916
* @dev: network device
7917
* @macaddr: the MAC address of the new candidate
7918
* @ie: information elements advertised by the peer candidate
7919
* @ie_len: length of the information elements buffer
7920
* @sig_dbm: signal level in dBm
7921
* @gfp: allocation flags
7922
*
7923
* This function notifies cfg80211 that the mesh peer candidate has been
7924
* detected, most likely via a beacon or, less likely, via a probe response.
7925
* cfg80211 then sends a notification to userspace.
7926
*/
7927
void cfg80211_notify_new_peer_candidate(struct net_device *dev,
7928
const u8 *macaddr, const u8 *ie, u8 ie_len,
7929
int sig_dbm, gfp_t gfp);
7930
7931
/**
7932
* DOC: RFkill integration
7933
*
7934
* RFkill integration in cfg80211 is almost invisible to drivers,
7935
* as cfg80211 automatically registers an rfkill instance for each
7936
* wireless device it knows about. Soft kill is also translated
7937
* into disconnecting and turning all interfaces off. Drivers are
7938
* expected to turn off the device when all interfaces are down.
7939
*
7940
* However, devices may have a hard RFkill line, in which case they
7941
* also need to interact with the rfkill subsystem, via cfg80211.
7942
* They can do this with a few helper functions documented here.
7943
*/
7944
7945
/**
7946
* wiphy_rfkill_set_hw_state_reason - notify cfg80211 about hw block state
7947
* @wiphy: the wiphy
7948
* @blocked: block status
7949
* @reason: one of reasons in &enum rfkill_hard_block_reasons
7950
*/
7951
void wiphy_rfkill_set_hw_state_reason(struct wiphy *wiphy, bool blocked,
7952
enum rfkill_hard_block_reasons reason);
7953
7954
static inline void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked)
7955
{
7956
wiphy_rfkill_set_hw_state_reason(wiphy, blocked,
7957
RFKILL_HARD_BLOCK_SIGNAL);
7958
}
7959
7960
/**
7961
* wiphy_rfkill_start_polling - start polling rfkill
7962
* @wiphy: the wiphy
7963
*/
7964
void wiphy_rfkill_start_polling(struct wiphy *wiphy);
7965
7966
/**
7967
* wiphy_rfkill_stop_polling - stop polling rfkill
7968
* @wiphy: the wiphy
7969
*/
7970
static inline void wiphy_rfkill_stop_polling(struct wiphy *wiphy)
7971
{
7972
rfkill_pause_polling(wiphy->rfkill);
7973
}
7974
7975
/**
7976
* DOC: Vendor commands
7977
*
7978
* Occasionally, there are special protocol or firmware features that
7979
* can't be implemented very openly. For this and similar cases, the
7980
* vendor command functionality allows implementing the features with
7981
* (typically closed-source) userspace and firmware, using nl80211 as
7982
* the configuration mechanism.
7983
*
7984
* A driver supporting vendor commands must register them as an array
7985
* in struct wiphy, with handlers for each one. Each command has an
7986
* OUI and sub command ID to identify it.
7987
*
7988
* Note that this feature should not be (ab)used to implement protocol
7989
* features that could openly be shared across drivers. In particular,
7990
* it must never be required to use vendor commands to implement any
7991
* "normal" functionality that higher-level userspace like connection
7992
* managers etc. need.
7993
*/
7994
7995
struct sk_buff *__cfg80211_alloc_reply_skb(struct wiphy *wiphy,
7996
enum nl80211_commands cmd,
7997
enum nl80211_attrs attr,
7998
int approxlen);
7999
8000
struct sk_buff *__cfg80211_alloc_event_skb(struct wiphy *wiphy,
8001
struct wireless_dev *wdev,
8002
enum nl80211_commands cmd,
8003
enum nl80211_attrs attr,
8004
unsigned int portid,
8005
int vendor_event_idx,
8006
int approxlen, gfp_t gfp);
8007
8008
void __cfg80211_send_event_skb(struct sk_buff *skb, gfp_t gfp);
8009
8010
/**
8011
* cfg80211_vendor_cmd_alloc_reply_skb - allocate vendor command reply
8012
* @wiphy: the wiphy
8013
* @approxlen: an upper bound of the length of the data that will
8014
* be put into the skb
8015
*
8016
* This function allocates and pre-fills an skb for a reply to
8017
* a vendor command. Since it is intended for a reply, calling
8018
* it outside of a vendor command's doit() operation is invalid.
8019
*
8020
* The returned skb is pre-filled with some identifying data in
8021
* a way that any data that is put into the skb (with skb_put(),
8022
* nla_put() or similar) will end up being within the
8023
* %NL80211_ATTR_VENDOR_DATA attribute, so all that needs to be done
8024
* with the skb is adding data for the corresponding userspace tool
8025
* which can then read that data out of the vendor data attribute.
8026
* You must not modify the skb in any other way.
8027
*
8028
* When done, call cfg80211_vendor_cmd_reply() with the skb and return
8029
* its error code as the result of the doit() operation.
8030
*
8031
* Return: An allocated and pre-filled skb. %NULL if any errors happen.
8032
*/
8033
static inline struct sk_buff *
8034
cfg80211_vendor_cmd_alloc_reply_skb(struct wiphy *wiphy, int approxlen)
8035
{
8036
return __cfg80211_alloc_reply_skb(wiphy, NL80211_CMD_VENDOR,
8037
NL80211_ATTR_VENDOR_DATA, approxlen);
8038
}
8039
8040
/**
8041
* cfg80211_vendor_cmd_reply - send the reply skb
8042
* @skb: The skb, must have been allocated with
8043
* cfg80211_vendor_cmd_alloc_reply_skb()
8044
*
8045
* Since calling this function will usually be the last thing
8046
* before returning from the vendor command doit() you should
8047
* return the error code. Note that this function consumes the
8048
* skb regardless of the return value.
8049
*
8050
* Return: An error code or 0 on success.
8051
*/
8052
int cfg80211_vendor_cmd_reply(struct sk_buff *skb);
8053
8054
/**
8055
* cfg80211_vendor_cmd_get_sender - get the current sender netlink ID
8056
* @wiphy: the wiphy
8057
*
8058
* Return: the current netlink port ID in a vendor command handler.
8059
*
8060
* Context: May only be called from a vendor command handler
8061
*/
8062
unsigned int cfg80211_vendor_cmd_get_sender(struct wiphy *wiphy);
8063
8064
/**
8065
* cfg80211_vendor_event_alloc - allocate vendor-specific event skb
8066
* @wiphy: the wiphy
8067
* @wdev: the wireless device
8068
* @event_idx: index of the vendor event in the wiphy's vendor_events
8069
* @approxlen: an upper bound of the length of the data that will
8070
* be put into the skb
8071
* @gfp: allocation flags
8072
*
8073
* This function allocates and pre-fills an skb for an event on the
8074
* vendor-specific multicast group.
8075
*
8076
* If wdev != NULL, both the ifindex and identifier of the specified
8077
* wireless device are added to the event message before the vendor data
8078
* attribute.
8079
*
8080
* When done filling the skb, call cfg80211_vendor_event() with the
8081
* skb to send the event.
8082
*
8083
* Return: An allocated and pre-filled skb. %NULL if any errors happen.
8084
*/
8085
static inline struct sk_buff *
8086
cfg80211_vendor_event_alloc(struct wiphy *wiphy, struct wireless_dev *wdev,
8087
int approxlen, int event_idx, gfp_t gfp)
8088
{
8089
return __cfg80211_alloc_event_skb(wiphy, wdev, NL80211_CMD_VENDOR,
8090
NL80211_ATTR_VENDOR_DATA,
8091
0, event_idx, approxlen, gfp);
8092
}
8093
8094
/**
8095
* cfg80211_vendor_event_alloc_ucast - alloc unicast vendor-specific event skb
8096
* @wiphy: the wiphy
8097
* @wdev: the wireless device
8098
* @event_idx: index of the vendor event in the wiphy's vendor_events
8099
* @portid: port ID of the receiver
8100
* @approxlen: an upper bound of the length of the data that will
8101
* be put into the skb
8102
* @gfp: allocation flags
8103
*
8104
* This function allocates and pre-fills an skb for an event to send to
8105
* a specific (userland) socket. This socket would previously have been
8106
* obtained by cfg80211_vendor_cmd_get_sender(), and the caller MUST take
8107
* care to register a netlink notifier to see when the socket closes.
8108
*
8109
* If wdev != NULL, both the ifindex and identifier of the specified
8110
* wireless device are added to the event message before the vendor data
8111
* attribute.
8112
*
8113
* When done filling the skb, call cfg80211_vendor_event() with the
8114
* skb to send the event.
8115
*
8116
* Return: An allocated and pre-filled skb. %NULL if any errors happen.
8117
*/
8118
static inline struct sk_buff *
8119
cfg80211_vendor_event_alloc_ucast(struct wiphy *wiphy,
8120
struct wireless_dev *wdev,
8121
unsigned int portid, int approxlen,
8122
int event_idx, gfp_t gfp)
8123
{
8124
return __cfg80211_alloc_event_skb(wiphy, wdev, NL80211_CMD_VENDOR,
8125
NL80211_ATTR_VENDOR_DATA,
8126
portid, event_idx, approxlen, gfp);
8127
}
8128
8129
/**
8130
* cfg80211_vendor_event - send the event
8131
* @skb: The skb, must have been allocated with cfg80211_vendor_event_alloc()
8132
* @gfp: allocation flags
8133
*
8134
* This function sends the given @skb, which must have been allocated
8135
* by cfg80211_vendor_event_alloc(), as an event. It always consumes it.
8136
*/
8137
static inline void cfg80211_vendor_event(struct sk_buff *skb, gfp_t gfp)
8138
{
8139
__cfg80211_send_event_skb(skb, gfp);
8140
}
8141
8142
#ifdef CONFIG_NL80211_TESTMODE
8143
/**
8144
* DOC: Test mode
8145
*
8146
* Test mode is a set of utility functions to allow drivers to
8147
* interact with driver-specific tools to aid, for instance,
8148
* factory programming.
8149
*
8150
* This chapter describes how drivers interact with it. For more
8151
* information see the nl80211 book's chapter on it.
8152
*/
8153
8154
/**
8155
* cfg80211_testmode_alloc_reply_skb - allocate testmode reply
8156
* @wiphy: the wiphy
8157
* @approxlen: an upper bound of the length of the data that will
8158
* be put into the skb
8159
*
8160
* This function allocates and pre-fills an skb for a reply to
8161
* the testmode command. Since it is intended for a reply, calling
8162
* it outside of the @testmode_cmd operation is invalid.
8163
*
8164
* The returned skb is pre-filled with the wiphy index and set up in
8165
* a way that any data that is put into the skb (with skb_put(),
8166
* nla_put() or similar) will end up being within the
8167
* %NL80211_ATTR_TESTDATA attribute, so all that needs to be done
8168
* with the skb is adding data for the corresponding userspace tool
8169
* which can then read that data out of the testdata attribute. You
8170
* must not modify the skb in any other way.
8171
*
8172
* When done, call cfg80211_testmode_reply() with the skb and return
8173
* its error code as the result of the @testmode_cmd operation.
8174
*
8175
* Return: An allocated and pre-filled skb. %NULL if any errors happen.
8176
*/
8177
static inline struct sk_buff *
8178
cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, int approxlen)
8179
{
8180
return __cfg80211_alloc_reply_skb(wiphy, NL80211_CMD_TESTMODE,
8181
NL80211_ATTR_TESTDATA, approxlen);
8182
}
8183
8184
/**
8185
* cfg80211_testmode_reply - send the reply skb
8186
* @skb: The skb, must have been allocated with
8187
* cfg80211_testmode_alloc_reply_skb()
8188
*
8189
* Since calling this function will usually be the last thing
8190
* before returning from the @testmode_cmd you should return
8191
* the error code. Note that this function consumes the skb
8192
* regardless of the return value.
8193
*
8194
* Return: An error code or 0 on success.
8195
*/
8196
static inline int cfg80211_testmode_reply(struct sk_buff *skb)
8197
{
8198
return cfg80211_vendor_cmd_reply(skb);
8199
}
8200
8201
/**
8202
* cfg80211_testmode_alloc_event_skb - allocate testmode event
8203
* @wiphy: the wiphy
8204
* @approxlen: an upper bound of the length of the data that will
8205
* be put into the skb
8206
* @gfp: allocation flags
8207
*
8208
* This function allocates and pre-fills an skb for an event on the
8209
* testmode multicast group.
8210
*
8211
* The returned skb is set up in the same way as with
8212
* cfg80211_testmode_alloc_reply_skb() but prepared for an event. As
8213
* there, you should simply add data to it that will then end up in the
8214
* %NL80211_ATTR_TESTDATA attribute. Again, you must not modify the skb
8215
* in any other way.
8216
*
8217
* When done filling the skb, call cfg80211_testmode_event() with the
8218
* skb to send the event.
8219
*
8220
* Return: An allocated and pre-filled skb. %NULL if any errors happen.
8221
*/
8222
static inline struct sk_buff *
8223
cfg80211_testmode_alloc_event_skb(struct wiphy *wiphy, int approxlen, gfp_t gfp)
8224
{
8225
return __cfg80211_alloc_event_skb(wiphy, NULL, NL80211_CMD_TESTMODE,
8226
NL80211_ATTR_TESTDATA, 0, -1,
8227
approxlen, gfp);
8228
}
8229
8230
/**
8231
* cfg80211_testmode_event - send the event
8232
* @skb: The skb, must have been allocated with
8233
* cfg80211_testmode_alloc_event_skb()
8234
* @gfp: allocation flags
8235
*
8236
* This function sends the given @skb, which must have been allocated
8237
* by cfg80211_testmode_alloc_event_skb(), as an event. It always
8238
* consumes it.
8239
*/
8240
static inline void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp)
8241
{
8242
__cfg80211_send_event_skb(skb, gfp);
8243
}
8244
8245
#define CFG80211_TESTMODE_CMD(cmd) .testmode_cmd = (cmd),
8246
#define CFG80211_TESTMODE_DUMP(cmd) .testmode_dump = (cmd),
8247
#else
8248
#define CFG80211_TESTMODE_CMD(cmd)
8249
#define CFG80211_TESTMODE_DUMP(cmd)
8250
#endif
8251
8252
/**
8253
* struct cfg80211_fils_resp_params - FILS connection response params
8254
* @kek: KEK derived from a successful FILS connection (may be %NULL)
8255
* @kek_len: Length of @fils_kek in octets
8256
* @update_erp_next_seq_num: Boolean value to specify whether the value in
8257
* @erp_next_seq_num is valid.
8258
* @erp_next_seq_num: The next sequence number to use in ERP message in
8259
* FILS Authentication. This value should be specified irrespective of the
8260
* status for a FILS connection.
8261
* @pmk: A new PMK if derived from a successful FILS connection (may be %NULL).
8262
* @pmk_len: Length of @pmk in octets
8263
* @pmkid: A new PMKID if derived from a successful FILS connection or the PMKID
8264
* used for this FILS connection (may be %NULL).
8265
*/
8266
struct cfg80211_fils_resp_params {
8267
const u8 *kek;
8268
size_t kek_len;
8269
bool update_erp_next_seq_num;
8270
u16 erp_next_seq_num;
8271
const u8 *pmk;
8272
size_t pmk_len;
8273
const u8 *pmkid;
8274
};
8275
8276
/**
8277
* struct cfg80211_connect_resp_params - Connection response params
8278
* @status: Status code, %WLAN_STATUS_SUCCESS for successful connection, use
8279
* %WLAN_STATUS_UNSPECIFIED_FAILURE if your device cannot give you
8280
* the real status code for failures. If this call is used to report a
8281
* failure due to a timeout (e.g., not receiving an Authentication frame
8282
* from the AP) instead of an explicit rejection by the AP, -1 is used to
8283
* indicate that this is a failure, but without a status code.
8284
* @timeout_reason is used to report the reason for the timeout in that
8285
* case.
8286
* @req_ie: Association request IEs (may be %NULL)
8287
* @req_ie_len: Association request IEs length
8288
* @resp_ie: Association response IEs (may be %NULL)
8289
* @resp_ie_len: Association response IEs length
8290
* @fils: FILS connection response parameters.
8291
* @timeout_reason: Reason for connection timeout. This is used when the
8292
* connection fails due to a timeout instead of an explicit rejection from
8293
* the AP. %NL80211_TIMEOUT_UNSPECIFIED is used when the timeout reason is
8294
* not known. This value is used only if @status < 0 to indicate that the
8295
* failure is due to a timeout and not due to explicit rejection by the AP.
8296
* This value is ignored in other cases (@status >= 0).
8297
* @valid_links: For MLO connection, BIT mask of the valid link ids. Otherwise
8298
* zero.
8299
* @ap_mld_addr: For MLO connection, MLD address of the AP. Otherwise %NULL.
8300
* @links : For MLO connection, contains link info for the valid links indicated
8301
* using @valid_links. For non-MLO connection, links[0] contains the
8302
* connected AP info.
8303
* @links.addr: For MLO connection, MAC address of the STA link. Otherwise
8304
* %NULL.
8305
* @links.bssid: For MLO connection, MAC address of the AP link. For non-MLO
8306
* connection, links[0].bssid points to the BSSID of the AP (may be %NULL).
8307
* @links.bss: For MLO connection, entry of bss to which STA link is connected.
8308
* For non-MLO connection, links[0].bss points to entry of bss to which STA
8309
* is connected. It can be obtained through cfg80211_get_bss() (may be
8310
* %NULL). It is recommended to store the bss from the connect_request and
8311
* hold a reference to it and return through this param to avoid a warning
8312
* if the bss is expired during the connection, esp. for those drivers
8313
* implementing connect op. Only one parameter among @bssid and @bss needs
8314
* to be specified.
8315
* @links.status: per-link status code, to report a status code that's not
8316
* %WLAN_STATUS_SUCCESS for a given link, it must also be in the
8317
* @valid_links bitmap and may have a BSS pointer (which is then released)
8318
*/
8319
struct cfg80211_connect_resp_params {
8320
int status;
8321
const u8 *req_ie;
8322
size_t req_ie_len;
8323
const u8 *resp_ie;
8324
size_t resp_ie_len;
8325
struct cfg80211_fils_resp_params fils;
8326
enum nl80211_timeout_reason timeout_reason;
8327
8328
const u8 *ap_mld_addr;
8329
u16 valid_links;
8330
struct {
8331
const u8 *addr;
8332
const u8 *bssid;
8333
struct cfg80211_bss *bss;
8334
u16 status;
8335
} links[IEEE80211_MLD_MAX_NUM_LINKS];
8336
};
8337
8338
/**
8339
* cfg80211_connect_done - notify cfg80211 of connection result
8340
*
8341
* @dev: network device
8342
* @params: connection response parameters
8343
* @gfp: allocation flags
8344
*
8345
* It should be called by the underlying driver once execution of the connection
8346
* request from connect() has been completed. This is similar to
8347
* cfg80211_connect_bss(), but takes a structure pointer for connection response
8348
* parameters. Only one of the functions among cfg80211_connect_bss(),
8349
* cfg80211_connect_result(), cfg80211_connect_timeout(),
8350
* and cfg80211_connect_done() should be called.
8351
*/
8352
void cfg80211_connect_done(struct net_device *dev,
8353
struct cfg80211_connect_resp_params *params,
8354
gfp_t gfp);
8355
8356
/**
8357
* cfg80211_connect_bss - notify cfg80211 of connection result
8358
*
8359
* @dev: network device
8360
* @bssid: the BSSID of the AP
8361
* @bss: Entry of bss to which STA got connected to, can be obtained through
8362
* cfg80211_get_bss() (may be %NULL). But it is recommended to store the
8363
* bss from the connect_request and hold a reference to it and return
8364
* through this param to avoid a warning if the bss is expired during the
8365
* connection, esp. for those drivers implementing connect op.
8366
* Only one parameter among @bssid and @bss needs to be specified.
8367
* @req_ie: association request IEs (maybe be %NULL)
8368
* @req_ie_len: association request IEs length
8369
* @resp_ie: association response IEs (may be %NULL)
8370
* @resp_ie_len: assoc response IEs length
8371
* @status: status code, %WLAN_STATUS_SUCCESS for successful connection, use
8372
* %WLAN_STATUS_UNSPECIFIED_FAILURE if your device cannot give you
8373
* the real status code for failures. If this call is used to report a
8374
* failure due to a timeout (e.g., not receiving an Authentication frame
8375
* from the AP) instead of an explicit rejection by the AP, -1 is used to
8376
* indicate that this is a failure, but without a status code.
8377
* @timeout_reason is used to report the reason for the timeout in that
8378
* case.
8379
* @gfp: allocation flags
8380
* @timeout_reason: reason for connection timeout. This is used when the
8381
* connection fails due to a timeout instead of an explicit rejection from
8382
* the AP. %NL80211_TIMEOUT_UNSPECIFIED is used when the timeout reason is
8383
* not known. This value is used only if @status < 0 to indicate that the
8384
* failure is due to a timeout and not due to explicit rejection by the AP.
8385
* This value is ignored in other cases (@status >= 0).
8386
*
8387
* It should be called by the underlying driver once execution of the connection
8388
* request from connect() has been completed. This is similar to
8389
* cfg80211_connect_result(), but with the option of identifying the exact bss
8390
* entry for the connection. Only one of the functions among
8391
* cfg80211_connect_bss(), cfg80211_connect_result(),
8392
* cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.
8393
*/
8394
static inline void
8395
cfg80211_connect_bss(struct net_device *dev, const u8 *bssid,
8396
struct cfg80211_bss *bss, const u8 *req_ie,
8397
size_t req_ie_len, const u8 *resp_ie,
8398
size_t resp_ie_len, int status, gfp_t gfp,
8399
enum nl80211_timeout_reason timeout_reason)
8400
{
8401
struct cfg80211_connect_resp_params params;
8402
8403
memset(&params, 0, sizeof(params));
8404
params.status = status;
8405
params.links[0].bssid = bssid;
8406
params.links[0].bss = bss;
8407
params.req_ie = req_ie;
8408
params.req_ie_len = req_ie_len;
8409
params.resp_ie = resp_ie;
8410
params.resp_ie_len = resp_ie_len;
8411
params.timeout_reason = timeout_reason;
8412
8413
cfg80211_connect_done(dev, &params, gfp);
8414
}
8415
8416
/**
8417
* cfg80211_connect_result - notify cfg80211 of connection result
8418
*
8419
* @dev: network device
8420
* @bssid: the BSSID of the AP
8421
* @req_ie: association request IEs (maybe be %NULL)
8422
* @req_ie_len: association request IEs length
8423
* @resp_ie: association response IEs (may be %NULL)
8424
* @resp_ie_len: assoc response IEs length
8425
* @status: status code, %WLAN_STATUS_SUCCESS for successful connection, use
8426
* %WLAN_STATUS_UNSPECIFIED_FAILURE if your device cannot give you
8427
* the real status code for failures.
8428
* @gfp: allocation flags
8429
*
8430
* It should be called by the underlying driver once execution of the connection
8431
* request from connect() has been completed. This is similar to
8432
* cfg80211_connect_bss() which allows the exact bss entry to be specified. Only
8433
* one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(),
8434
* cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.
8435
*/
8436
static inline void
8437
cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
8438
const u8 *req_ie, size_t req_ie_len,
8439
const u8 *resp_ie, size_t resp_ie_len,
8440
u16 status, gfp_t gfp)
8441
{
8442
cfg80211_connect_bss(dev, bssid, NULL, req_ie, req_ie_len, resp_ie,
8443
resp_ie_len, status, gfp,
8444
NL80211_TIMEOUT_UNSPECIFIED);
8445
}
8446
8447
/**
8448
* cfg80211_connect_timeout - notify cfg80211 of connection timeout
8449
*
8450
* @dev: network device
8451
* @bssid: the BSSID of the AP
8452
* @req_ie: association request IEs (maybe be %NULL)
8453
* @req_ie_len: association request IEs length
8454
* @gfp: allocation flags
8455
* @timeout_reason: reason for connection timeout.
8456
*
8457
* It should be called by the underlying driver whenever connect() has failed
8458
* in a sequence where no explicit authentication/association rejection was
8459
* received from the AP. This could happen, e.g., due to not being able to send
8460
* out the Authentication or Association Request frame or timing out while
8461
* waiting for the response. Only one of the functions among
8462
* cfg80211_connect_bss(), cfg80211_connect_result(),
8463
* cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.
8464
*/
8465
static inline void
8466
cfg80211_connect_timeout(struct net_device *dev, const u8 *bssid,
8467
const u8 *req_ie, size_t req_ie_len, gfp_t gfp,
8468
enum nl80211_timeout_reason timeout_reason)
8469
{
8470
cfg80211_connect_bss(dev, bssid, NULL, req_ie, req_ie_len, NULL, 0, -1,
8471
gfp, timeout_reason);
8472
}
8473
8474
/**
8475
* struct cfg80211_roam_info - driver initiated roaming information
8476
*
8477
* @req_ie: association request IEs (maybe be %NULL)
8478
* @req_ie_len: association request IEs length
8479
* @resp_ie: association response IEs (may be %NULL)
8480
* @resp_ie_len: assoc response IEs length
8481
* @fils: FILS related roaming information.
8482
* @valid_links: For MLO roaming, BIT mask of the new valid links is set.
8483
* Otherwise zero.
8484
* @ap_mld_addr: For MLO roaming, MLD address of the new AP. Otherwise %NULL.
8485
* @links : For MLO roaming, contains new link info for the valid links set in
8486
* @valid_links. For non-MLO roaming, links[0] contains the new AP info.
8487
* @links.addr: For MLO roaming, MAC address of the STA link. Otherwise %NULL.
8488
* @links.bssid: For MLO roaming, MAC address of the new AP link. For non-MLO
8489
* roaming, links[0].bssid points to the BSSID of the new AP. May be
8490
* %NULL if %links.bss is set.
8491
* @links.channel: the channel of the new AP.
8492
* @links.bss: For MLO roaming, entry of new bss to which STA link got
8493
* roamed. For non-MLO roaming, links[0].bss points to entry of bss to
8494
* which STA got roamed (may be %NULL if %links.bssid is set)
8495
*/
8496
struct cfg80211_roam_info {
8497
const u8 *req_ie;
8498
size_t req_ie_len;
8499
const u8 *resp_ie;
8500
size_t resp_ie_len;
8501
struct cfg80211_fils_resp_params fils;
8502
8503
const u8 *ap_mld_addr;
8504
u16 valid_links;
8505
struct {
8506
const u8 *addr;
8507
const u8 *bssid;
8508
struct ieee80211_channel *channel;
8509
struct cfg80211_bss *bss;
8510
} links[IEEE80211_MLD_MAX_NUM_LINKS];
8511
};
8512
8513
/**
8514
* cfg80211_roamed - notify cfg80211 of roaming
8515
*
8516
* @dev: network device
8517
* @info: information about the new BSS. struct &cfg80211_roam_info.
8518
* @gfp: allocation flags
8519
*
8520
* This function may be called with the driver passing either the BSSID of the
8521
* new AP or passing the bss entry to avoid a race in timeout of the bss entry.
8522
* It should be called by the underlying driver whenever it roamed from one AP
8523
* to another while connected. Drivers which have roaming implemented in
8524
* firmware should pass the bss entry to avoid a race in bss entry timeout where
8525
* the bss entry of the new AP is seen in the driver, but gets timed out by the
8526
* time it is accessed in __cfg80211_roamed() due to delay in scheduling
8527
* rdev->event_work. In case of any failures, the reference is released
8528
* either in cfg80211_roamed() or in __cfg80211_romed(), Otherwise, it will be
8529
* released while disconnecting from the current bss.
8530
*/
8531
void cfg80211_roamed(struct net_device *dev, struct cfg80211_roam_info *info,
8532
gfp_t gfp);
8533
8534
/**
8535
* cfg80211_port_authorized - notify cfg80211 of successful security association
8536
*
8537
* @dev: network device
8538
* @peer_addr: BSSID of the AP/P2P GO in case of STA/GC or STA/GC MAC address
8539
* in case of AP/P2P GO
8540
* @td_bitmap: transition disable policy
8541
* @td_bitmap_len: Length of transition disable policy
8542
* @gfp: allocation flags
8543
*
8544
* This function should be called by a driver that supports 4 way handshake
8545
* offload after a security association was successfully established (i.e.,
8546
* the 4 way handshake was completed successfully). The call to this function
8547
* should be preceded with a call to cfg80211_connect_result(),
8548
* cfg80211_connect_done(), cfg80211_connect_bss() or cfg80211_roamed() to
8549
* indicate the 802.11 association.
8550
* This function can also be called by AP/P2P GO driver that supports
8551
* authentication offload. In this case the peer_mac passed is that of
8552
* associated STA/GC.
8553
*/
8554
void cfg80211_port_authorized(struct net_device *dev, const u8 *peer_addr,
8555
const u8* td_bitmap, u8 td_bitmap_len, gfp_t gfp);
8556
8557
/**
8558
* cfg80211_disconnected - notify cfg80211 that connection was dropped
8559
*
8560
* @dev: network device
8561
* @ie: information elements of the deauth/disassoc frame (may be %NULL)
8562
* @ie_len: length of IEs
8563
* @reason: reason code for the disconnection, set it to 0 if unknown
8564
* @locally_generated: disconnection was requested locally
8565
* @gfp: allocation flags
8566
*
8567
* After it calls this function, the driver should enter an idle state
8568
* and not try to connect to any AP any more.
8569
*/
8570
void cfg80211_disconnected(struct net_device *dev, u16 reason,
8571
const u8 *ie, size_t ie_len,
8572
bool locally_generated, gfp_t gfp);
8573
8574
/**
8575
* cfg80211_ready_on_channel - notification of remain_on_channel start
8576
* @wdev: wireless device
8577
* @cookie: the request cookie
8578
* @chan: The current channel (from remain_on_channel request)
8579
* @duration: Duration in milliseconds that the driver intents to remain on the
8580
* channel
8581
* @gfp: allocation flags
8582
*/
8583
void cfg80211_ready_on_channel(struct wireless_dev *wdev, u64 cookie,
8584
struct ieee80211_channel *chan,
8585
unsigned int duration, gfp_t gfp);
8586
8587
/**
8588
* cfg80211_remain_on_channel_expired - remain_on_channel duration expired
8589
* @wdev: wireless device
8590
* @cookie: the request cookie
8591
* @chan: The current channel (from remain_on_channel request)
8592
* @gfp: allocation flags
8593
*/
8594
void cfg80211_remain_on_channel_expired(struct wireless_dev *wdev, u64 cookie,
8595
struct ieee80211_channel *chan,
8596
gfp_t gfp);
8597
8598
/**
8599
* cfg80211_tx_mgmt_expired - tx_mgmt duration expired
8600
* @wdev: wireless device
8601
* @cookie: the requested cookie
8602
* @chan: The current channel (from tx_mgmt request)
8603
* @gfp: allocation flags
8604
*/
8605
void cfg80211_tx_mgmt_expired(struct wireless_dev *wdev, u64 cookie,
8606
struct ieee80211_channel *chan, gfp_t gfp);
8607
8608
/**
8609
* cfg80211_sinfo_alloc_tid_stats - allocate per-tid statistics.
8610
*
8611
* @sinfo: the station information
8612
* @gfp: allocation flags
8613
*
8614
* Return: 0 on success. Non-zero on error.
8615
*/
8616
int cfg80211_sinfo_alloc_tid_stats(struct station_info *sinfo, gfp_t gfp);
8617
8618
/**
8619
* cfg80211_link_sinfo_alloc_tid_stats - allocate per-tid statistics.
8620
*
8621
* @link_sinfo: the link station information
8622
* @gfp: allocation flags
8623
*
8624
* Return: 0 on success. Non-zero on error.
8625
*/
8626
int cfg80211_link_sinfo_alloc_tid_stats(struct link_station_info *link_sinfo,
8627
gfp_t gfp);
8628
8629
/**
8630
* cfg80211_sinfo_release_content - release contents of station info
8631
* @sinfo: the station information
8632
*
8633
* Releases any potentially allocated sub-information of the station
8634
* information, but not the struct itself (since it's typically on
8635
* the stack.)
8636
*/
8637
static inline void cfg80211_sinfo_release_content(struct station_info *sinfo)
8638
{
8639
kfree(sinfo->pertid);
8640
8641
for (int link_id = 0; link_id < ARRAY_SIZE(sinfo->links); link_id++) {
8642
if (sinfo->links[link_id]) {
8643
kfree(sinfo->links[link_id]->pertid);
8644
kfree(sinfo->links[link_id]);
8645
}
8646
}
8647
}
8648
8649
/**
8650
* cfg80211_new_sta - notify userspace about station
8651
*
8652
* @dev: the netdev
8653
* @mac_addr: the station's address
8654
* @sinfo: the station information
8655
* @gfp: allocation flags
8656
*/
8657
void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr,
8658
struct station_info *sinfo, gfp_t gfp);
8659
8660
/**
8661
* cfg80211_del_sta_sinfo - notify userspace about deletion of a station
8662
* @dev: the netdev
8663
* @mac_addr: the station's address. For MLD station, MLD address is used.
8664
* @sinfo: the station information/statistics
8665
* @gfp: allocation flags
8666
*/
8667
void cfg80211_del_sta_sinfo(struct net_device *dev, const u8 *mac_addr,
8668
struct station_info *sinfo, gfp_t gfp);
8669
8670
/**
8671
* cfg80211_del_sta - notify userspace about deletion of a station
8672
*
8673
* @dev: the netdev
8674
* @mac_addr: the station's address. For MLD station, MLD address is used.
8675
* @gfp: allocation flags
8676
*/
8677
static inline void cfg80211_del_sta(struct net_device *dev,
8678
const u8 *mac_addr, gfp_t gfp)
8679
{
8680
cfg80211_del_sta_sinfo(dev, mac_addr, NULL, gfp);
8681
}
8682
8683
/**
8684
* cfg80211_conn_failed - connection request failed notification
8685
*
8686
* @dev: the netdev
8687
* @mac_addr: the station's address
8688
* @reason: the reason for connection failure
8689
* @gfp: allocation flags
8690
*
8691
* Whenever a station tries to connect to an AP and if the station
8692
* could not connect to the AP as the AP has rejected the connection
8693
* for some reasons, this function is called.
8694
*
8695
* The reason for connection failure can be any of the value from
8696
* nl80211_connect_failed_reason enum
8697
*/
8698
void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
8699
enum nl80211_connect_failed_reason reason,
8700
gfp_t gfp);
8701
8702
/**
8703
* struct cfg80211_rx_info - received management frame info
8704
*
8705
* @freq: Frequency on which the frame was received in kHz
8706
* @sig_dbm: signal strength in dBm, or 0 if unknown
8707
* @have_link_id: indicates the frame was received on a link of
8708
* an MLD, i.e. the @link_id field is valid
8709
* @link_id: the ID of the link the frame was received on
8710
* @buf: Management frame (header + body)
8711
* @len: length of the frame data
8712
* @flags: flags, as defined in &enum nl80211_rxmgmt_flags
8713
* @rx_tstamp: Hardware timestamp of frame RX in nanoseconds
8714
* @ack_tstamp: Hardware timestamp of ack TX in nanoseconds
8715
*/
8716
struct cfg80211_rx_info {
8717
int freq;
8718
int sig_dbm;
8719
bool have_link_id;
8720
u8 link_id;
8721
const u8 *buf;
8722
size_t len;
8723
u32 flags;
8724
u64 rx_tstamp;
8725
u64 ack_tstamp;
8726
};
8727
8728
/**
8729
* cfg80211_rx_mgmt_ext - management frame notification with extended info
8730
* @wdev: wireless device receiving the frame
8731
* @info: RX info as defined in struct cfg80211_rx_info
8732
*
8733
* This function is called whenever an Action frame is received for a station
8734
* mode interface, but is not processed in kernel.
8735
*
8736
* Return: %true if a user space application has registered for this frame.
8737
* For action frames, that makes it responsible for rejecting unrecognized
8738
* action frames; %false otherwise, in which case for action frames the
8739
* driver is responsible for rejecting the frame.
8740
*/
8741
bool cfg80211_rx_mgmt_ext(struct wireless_dev *wdev,
8742
struct cfg80211_rx_info *info);
8743
8744
/**
8745
* cfg80211_rx_mgmt_khz - notification of received, unprocessed management frame
8746
* @wdev: wireless device receiving the frame
8747
* @freq: Frequency on which the frame was received in KHz
8748
* @sig_dbm: signal strength in dBm, or 0 if unknown
8749
* @buf: Management frame (header + body)
8750
* @len: length of the frame data
8751
* @flags: flags, as defined in enum nl80211_rxmgmt_flags
8752
*
8753
* This function is called whenever an Action frame is received for a station
8754
* mode interface, but is not processed in kernel.
8755
*
8756
* Return: %true if a user space application has registered for this frame.
8757
* For action frames, that makes it responsible for rejecting unrecognized
8758
* action frames; %false otherwise, in which case for action frames the
8759
* driver is responsible for rejecting the frame.
8760
*/
8761
static inline bool cfg80211_rx_mgmt_khz(struct wireless_dev *wdev, int freq,
8762
int sig_dbm, const u8 *buf, size_t len,
8763
u32 flags)
8764
{
8765
struct cfg80211_rx_info info = {
8766
.freq = freq,
8767
.sig_dbm = sig_dbm,
8768
.buf = buf,
8769
.len = len,
8770
.flags = flags
8771
};
8772
8773
return cfg80211_rx_mgmt_ext(wdev, &info);
8774
}
8775
8776
/**
8777
* cfg80211_rx_mgmt - notification of received, unprocessed management frame
8778
* @wdev: wireless device receiving the frame
8779
* @freq: Frequency on which the frame was received in MHz
8780
* @sig_dbm: signal strength in dBm, or 0 if unknown
8781
* @buf: Management frame (header + body)
8782
* @len: length of the frame data
8783
* @flags: flags, as defined in enum nl80211_rxmgmt_flags
8784
*
8785
* This function is called whenever an Action frame is received for a station
8786
* mode interface, but is not processed in kernel.
8787
*
8788
* Return: %true if a user space application has registered for this frame.
8789
* For action frames, that makes it responsible for rejecting unrecognized
8790
* action frames; %false otherwise, in which case for action frames the
8791
* driver is responsible for rejecting the frame.
8792
*/
8793
static inline bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq,
8794
int sig_dbm, const u8 *buf, size_t len,
8795
u32 flags)
8796
{
8797
struct cfg80211_rx_info info = {
8798
.freq = MHZ_TO_KHZ(freq),
8799
.sig_dbm = sig_dbm,
8800
.buf = buf,
8801
.len = len,
8802
.flags = flags
8803
};
8804
8805
return cfg80211_rx_mgmt_ext(wdev, &info);
8806
}
8807
8808
/**
8809
* struct cfg80211_tx_status - TX status for management frame information
8810
*
8811
* @cookie: Cookie returned by cfg80211_ops::mgmt_tx()
8812
* @tx_tstamp: hardware TX timestamp in nanoseconds
8813
* @ack_tstamp: hardware ack RX timestamp in nanoseconds
8814
* @buf: Management frame (header + body)
8815
* @len: length of the frame data
8816
* @ack: Whether frame was acknowledged
8817
*/
8818
struct cfg80211_tx_status {
8819
u64 cookie;
8820
u64 tx_tstamp;
8821
u64 ack_tstamp;
8822
const u8 *buf;
8823
size_t len;
8824
bool ack;
8825
};
8826
8827
/**
8828
* cfg80211_mgmt_tx_status_ext - TX status notification with extended info
8829
* @wdev: wireless device receiving the frame
8830
* @status: TX status data
8831
* @gfp: context flags
8832
*
8833
* This function is called whenever a management frame was requested to be
8834
* transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the
8835
* transmission attempt with extended info.
8836
*/
8837
void cfg80211_mgmt_tx_status_ext(struct wireless_dev *wdev,
8838
struct cfg80211_tx_status *status, gfp_t gfp);
8839
8840
/**
8841
* cfg80211_mgmt_tx_status - notification of TX status for management frame
8842
* @wdev: wireless device receiving the frame
8843
* @cookie: Cookie returned by cfg80211_ops::mgmt_tx()
8844
* @buf: Management frame (header + body)
8845
* @len: length of the frame data
8846
* @ack: Whether frame was acknowledged
8847
* @gfp: context flags
8848
*
8849
* This function is called whenever a management frame was requested to be
8850
* transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the
8851
* transmission attempt.
8852
*/
8853
static inline void cfg80211_mgmt_tx_status(struct wireless_dev *wdev,
8854
u64 cookie, const u8 *buf,
8855
size_t len, bool ack, gfp_t gfp)
8856
{
8857
struct cfg80211_tx_status status = {
8858
.cookie = cookie,
8859
.buf = buf,
8860
.len = len,
8861
.ack = ack
8862
};
8863
8864
cfg80211_mgmt_tx_status_ext(wdev, &status, gfp);
8865
}
8866
8867
/**
8868
* cfg80211_control_port_tx_status - notification of TX status for control
8869
* port frames
8870
* @wdev: wireless device receiving the frame
8871
* @cookie: Cookie returned by cfg80211_ops::tx_control_port()
8872
* @buf: Data frame (header + body)
8873
* @len: length of the frame data
8874
* @ack: Whether frame was acknowledged
8875
* @gfp: context flags
8876
*
8877
* This function is called whenever a control port frame was requested to be
8878
* transmitted with cfg80211_ops::tx_control_port() to report the TX status of
8879
* the transmission attempt.
8880
*/
8881
void cfg80211_control_port_tx_status(struct wireless_dev *wdev, u64 cookie,
8882
const u8 *buf, size_t len, bool ack,
8883
gfp_t gfp);
8884
8885
/**
8886
* cfg80211_rx_control_port - notification about a received control port frame
8887
* @dev: The device the frame matched to
8888
* @skb: The skbuf with the control port frame. It is assumed that the skbuf
8889
* is 802.3 formatted (with 802.3 header). The skb can be non-linear.
8890
* This function does not take ownership of the skb, so the caller is
8891
* responsible for any cleanup. The caller must also ensure that
8892
* skb->protocol is set appropriately.
8893
* @unencrypted: Whether the frame was received unencrypted
8894
* @link_id: the link the frame was received on, -1 if not applicable or unknown
8895
*
8896
* This function is used to inform userspace about a received control port
8897
* frame. It should only be used if userspace indicated it wants to receive
8898
* control port frames over nl80211.
8899
*
8900
* The frame is the data portion of the 802.3 or 802.11 data frame with all
8901
* network layer headers removed (e.g. the raw EAPoL frame).
8902
*
8903
* Return: %true if the frame was passed to userspace
8904
*/
8905
bool cfg80211_rx_control_port(struct net_device *dev, struct sk_buff *skb,
8906
bool unencrypted, int link_id);
8907
8908
/**
8909
* cfg80211_cqm_rssi_notify - connection quality monitoring rssi event
8910
* @dev: network device
8911
* @rssi_event: the triggered RSSI event
8912
* @rssi_level: new RSSI level value or 0 if not available
8913
* @gfp: context flags
8914
*
8915
* This function is called when a configured connection quality monitoring
8916
* rssi threshold reached event occurs.
8917
*/
8918
void cfg80211_cqm_rssi_notify(struct net_device *dev,
8919
enum nl80211_cqm_rssi_threshold_event rssi_event,
8920
s32 rssi_level, gfp_t gfp);
8921
8922
/**
8923
* cfg80211_cqm_pktloss_notify - notify userspace about packetloss to peer
8924
* @dev: network device
8925
* @peer: peer's MAC address
8926
* @num_packets: how many packets were lost -- should be a fixed threshold
8927
* but probably no less than maybe 50, or maybe a throughput dependent
8928
* threshold (to account for temporary interference)
8929
* @gfp: context flags
8930
*/
8931
void cfg80211_cqm_pktloss_notify(struct net_device *dev,
8932
const u8 *peer, u32 num_packets, gfp_t gfp);
8933
8934
/**
8935
* cfg80211_cqm_txe_notify - TX error rate event
8936
* @dev: network device
8937
* @peer: peer's MAC address
8938
* @num_packets: how many packets were lost
8939
* @rate: % of packets which failed transmission
8940
* @intvl: interval (in s) over which the TX failure threshold was breached.
8941
* @gfp: context flags
8942
*
8943
* Notify userspace when configured % TX failures over number of packets in a
8944
* given interval is exceeded.
8945
*/
8946
void cfg80211_cqm_txe_notify(struct net_device *dev, const u8 *peer,
8947
u32 num_packets, u32 rate, u32 intvl, gfp_t gfp);
8948
8949
/**
8950
* cfg80211_cqm_beacon_loss_notify - beacon loss event
8951
* @dev: network device
8952
* @gfp: context flags
8953
*
8954
* Notify userspace about beacon loss from the connected AP.
8955
*/
8956
void cfg80211_cqm_beacon_loss_notify(struct net_device *dev, gfp_t gfp);
8957
8958
/**
8959
* __cfg80211_radar_event - radar detection event
8960
* @wiphy: the wiphy
8961
* @chandef: chandef for the current channel
8962
* @offchan: the radar has been detected on the offchannel chain
8963
* @gfp: context flags
8964
*
8965
* This function is called when a radar is detected on the current chanenl.
8966
*/
8967
void __cfg80211_radar_event(struct wiphy *wiphy,
8968
struct cfg80211_chan_def *chandef,
8969
bool offchan, gfp_t gfp);
8970
8971
static inline void
8972
cfg80211_radar_event(struct wiphy *wiphy,
8973
struct cfg80211_chan_def *chandef,
8974
gfp_t gfp)
8975
{
8976
__cfg80211_radar_event(wiphy, chandef, false, gfp);
8977
}
8978
8979
static inline void
8980
cfg80211_background_radar_event(struct wiphy *wiphy,
8981
struct cfg80211_chan_def *chandef,
8982
gfp_t gfp)
8983
{
8984
__cfg80211_radar_event(wiphy, chandef, true, gfp);
8985
}
8986
8987
/**
8988
* cfg80211_sta_opmode_change_notify - STA's ht/vht operation mode change event
8989
* @dev: network device
8990
* @mac: MAC address of a station which opmode got modified
8991
* @sta_opmode: station's current opmode value
8992
* @gfp: context flags
8993
*
8994
* Driver should call this function when station's opmode modified via action
8995
* frame.
8996
*/
8997
void cfg80211_sta_opmode_change_notify(struct net_device *dev, const u8 *mac,
8998
struct sta_opmode_info *sta_opmode,
8999
gfp_t gfp);
9000
9001
/**
9002
* cfg80211_cac_event - Channel availability check (CAC) event
9003
* @netdev: network device
9004
* @chandef: chandef for the current channel
9005
* @event: type of event
9006
* @gfp: context flags
9007
* @link_id: valid link_id for MLO operation or 0 otherwise.
9008
*
9009
* This function is called when a Channel availability check (CAC) is finished
9010
* or aborted. This must be called to notify the completion of a CAC process,
9011
* also by full-MAC drivers.
9012
*/
9013
void cfg80211_cac_event(struct net_device *netdev,
9014
const struct cfg80211_chan_def *chandef,
9015
enum nl80211_radar_event event, gfp_t gfp,
9016
unsigned int link_id);
9017
9018
/**
9019
* cfg80211_background_cac_abort - Channel Availability Check offchan abort event
9020
* @wiphy: the wiphy
9021
*
9022
* This function is called by the driver when a Channel Availability Check
9023
* (CAC) is aborted by a offchannel dedicated chain.
9024
*/
9025
void cfg80211_background_cac_abort(struct wiphy *wiphy);
9026
9027
/**
9028
* cfg80211_gtk_rekey_notify - notify userspace about driver rekeying
9029
* @dev: network device
9030
* @bssid: BSSID of AP (to avoid races)
9031
* @replay_ctr: new replay counter
9032
* @gfp: allocation flags
9033
*/
9034
void cfg80211_gtk_rekey_notify(struct net_device *dev, const u8 *bssid,
9035
const u8 *replay_ctr, gfp_t gfp);
9036
9037
/**
9038
* cfg80211_pmksa_candidate_notify - notify about PMKSA caching candidate
9039
* @dev: network device
9040
* @index: candidate index (the smaller the index, the higher the priority)
9041
* @bssid: BSSID of AP
9042
* @preauth: Whether AP advertises support for RSN pre-authentication
9043
* @gfp: allocation flags
9044
*/
9045
void cfg80211_pmksa_candidate_notify(struct net_device *dev, int index,
9046
const u8 *bssid, bool preauth, gfp_t gfp);
9047
9048
/**
9049
* cfg80211_rx_spurious_frame - inform userspace about a spurious frame
9050
* @dev: The device the frame matched to
9051
* @link_id: the link the frame was received on, -1 if not applicable or unknown
9052
* @addr: the transmitter address
9053
* @gfp: context flags
9054
*
9055
* This function is used in AP mode (only!) to inform userspace that
9056
* a spurious class 3 frame was received, to be able to deauth the
9057
* sender.
9058
* Return: %true if the frame was passed to userspace (or this failed
9059
* for a reason other than not having a subscription.)
9060
*/
9061
bool cfg80211_rx_spurious_frame(struct net_device *dev, const u8 *addr,
9062
int link_id, gfp_t gfp);
9063
9064
/**
9065
* cfg80211_rx_unexpected_4addr_frame - inform about unexpected WDS frame
9066
* @dev: The device the frame matched to
9067
* @addr: the transmitter address
9068
* @link_id: the link the frame was received on, -1 if not applicable or unknown
9069
* @gfp: context flags
9070
*
9071
* This function is used in AP mode (only!) to inform userspace that
9072
* an associated station sent a 4addr frame but that wasn't expected.
9073
* It is allowed and desirable to send this event only once for each
9074
* station to avoid event flooding.
9075
* Return: %true if the frame was passed to userspace (or this failed
9076
* for a reason other than not having a subscription.)
9077
*/
9078
bool cfg80211_rx_unexpected_4addr_frame(struct net_device *dev, const u8 *addr,
9079
int link_id, gfp_t gfp);
9080
9081
/**
9082
* cfg80211_probe_status - notify userspace about probe status
9083
* @dev: the device the probe was sent on
9084
* @addr: the address of the peer
9085
* @cookie: the cookie filled in @probe_client previously
9086
* @acked: indicates whether probe was acked or not
9087
* @ack_signal: signal strength (in dBm) of the ACK frame.
9088
* @is_valid_ack_signal: indicates the ack_signal is valid or not.
9089
* @gfp: allocation flags
9090
*/
9091
void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
9092
u64 cookie, bool acked, s32 ack_signal,
9093
bool is_valid_ack_signal, gfp_t gfp);
9094
9095
/**
9096
* cfg80211_report_obss_beacon_khz - report beacon from other APs
9097
* @wiphy: The wiphy that received the beacon
9098
* @frame: the frame
9099
* @len: length of the frame
9100
* @freq: frequency the frame was received on in KHz
9101
* @sig_dbm: signal strength in dBm, or 0 if unknown
9102
*
9103
* Use this function to report to userspace when a beacon was
9104
* received. It is not useful to call this when there is no
9105
* netdev that is in AP/GO mode.
9106
*/
9107
void cfg80211_report_obss_beacon_khz(struct wiphy *wiphy, const u8 *frame,
9108
size_t len, int freq, int sig_dbm);
9109
9110
/**
9111
* cfg80211_report_obss_beacon - report beacon from other APs
9112
* @wiphy: The wiphy that received the beacon
9113
* @frame: the frame
9114
* @len: length of the frame
9115
* @freq: frequency the frame was received on
9116
* @sig_dbm: signal strength in dBm, or 0 if unknown
9117
*
9118
* Use this function to report to userspace when a beacon was
9119
* received. It is not useful to call this when there is no
9120
* netdev that is in AP/GO mode.
9121
*/
9122
static inline void cfg80211_report_obss_beacon(struct wiphy *wiphy,
9123
const u8 *frame, size_t len,
9124
int freq, int sig_dbm)
9125
{
9126
cfg80211_report_obss_beacon_khz(wiphy, frame, len, MHZ_TO_KHZ(freq),
9127
sig_dbm);
9128
}
9129
9130
/**
9131
* struct cfg80211_beaconing_check_config - beacon check configuration
9132
* @iftype: the interface type to check for
9133
* @relax: allow IR-relaxation conditions to apply (e.g. another
9134
* interface connected already on the same channel)
9135
* NOTE: If this is set, wiphy mutex must be held.
9136
* @reg_power: &enum ieee80211_ap_reg_power value indicating the
9137
* advertised/used 6 GHz regulatory power setting
9138
*/
9139
struct cfg80211_beaconing_check_config {
9140
enum nl80211_iftype iftype;
9141
enum ieee80211_ap_reg_power reg_power;
9142
bool relax;
9143
};
9144
9145
/**
9146
* cfg80211_reg_check_beaconing - check if beaconing is allowed
9147
* @wiphy: the wiphy
9148
* @chandef: the channel definition
9149
* @cfg: additional parameters for the checking
9150
*
9151
* Return: %true if there is no secondary channel or the secondary channel(s)
9152
* can be used for beaconing (i.e. is not a radar channel etc.)
9153
*/
9154
bool cfg80211_reg_check_beaconing(struct wiphy *wiphy,
9155
struct cfg80211_chan_def *chandef,
9156
struct cfg80211_beaconing_check_config *cfg);
9157
9158
/**
9159
* cfg80211_reg_can_beacon - check if beaconing is allowed
9160
* @wiphy: the wiphy
9161
* @chandef: the channel definition
9162
* @iftype: interface type
9163
*
9164
* Return: %true if there is no secondary channel or the secondary channel(s)
9165
* can be used for beaconing (i.e. is not a radar channel etc.)
9166
*/
9167
static inline bool
9168
cfg80211_reg_can_beacon(struct wiphy *wiphy,
9169
struct cfg80211_chan_def *chandef,
9170
enum nl80211_iftype iftype)
9171
{
9172
struct cfg80211_beaconing_check_config config = {
9173
.iftype = iftype,
9174
};
9175
9176
return cfg80211_reg_check_beaconing(wiphy, chandef, &config);
9177
}
9178
9179
/**
9180
* cfg80211_reg_can_beacon_relax - check if beaconing is allowed with relaxation
9181
* @wiphy: the wiphy
9182
* @chandef: the channel definition
9183
* @iftype: interface type
9184
*
9185
* Return: %true if there is no secondary channel or the secondary channel(s)
9186
* can be used for beaconing (i.e. is not a radar channel etc.). This version
9187
* also checks if IR-relaxation conditions apply, to allow beaconing under
9188
* more permissive conditions.
9189
*
9190
* Context: Requires the wiphy mutex to be held.
9191
*/
9192
static inline bool
9193
cfg80211_reg_can_beacon_relax(struct wiphy *wiphy,
9194
struct cfg80211_chan_def *chandef,
9195
enum nl80211_iftype iftype)
9196
{
9197
struct cfg80211_beaconing_check_config config = {
9198
.iftype = iftype,
9199
.relax = true,
9200
};
9201
9202
return cfg80211_reg_check_beaconing(wiphy, chandef, &config);
9203
}
9204
9205
/**
9206
* cfg80211_ch_switch_notify - update wdev channel and notify userspace
9207
* @dev: the device which switched channels
9208
* @chandef: the new channel definition
9209
* @link_id: the link ID for MLO, must be 0 for non-MLO
9210
*
9211
* Caller must hold wiphy mutex, therefore must only be called from sleepable
9212
* driver context!
9213
*/
9214
void cfg80211_ch_switch_notify(struct net_device *dev,
9215
struct cfg80211_chan_def *chandef,
9216
unsigned int link_id);
9217
9218
/**
9219
* cfg80211_ch_switch_started_notify - notify channel switch start
9220
* @dev: the device on which the channel switch started
9221
* @chandef: the future channel definition
9222
* @link_id: the link ID for MLO, must be 0 for non-MLO
9223
* @count: the number of TBTTs until the channel switch happens
9224
* @quiet: whether or not immediate quiet was requested by the AP
9225
*
9226
* Inform the userspace about the channel switch that has just
9227
* started, so that it can take appropriate actions (eg. starting
9228
* channel switch on other vifs), if necessary.
9229
*/
9230
void cfg80211_ch_switch_started_notify(struct net_device *dev,
9231
struct cfg80211_chan_def *chandef,
9232
unsigned int link_id, u8 count,
9233
bool quiet);
9234
9235
/**
9236
* ieee80211_operating_class_to_band - convert operating class to band
9237
*
9238
* @operating_class: the operating class to convert
9239
* @band: band pointer to fill
9240
*
9241
* Return: %true if the conversion was successful, %false otherwise.
9242
*/
9243
bool ieee80211_operating_class_to_band(u8 operating_class,
9244
enum nl80211_band *band);
9245
9246
/**
9247
* ieee80211_operating_class_to_chandef - convert operating class to chandef
9248
*
9249
* @operating_class: the operating class to convert
9250
* @chan: the ieee80211_channel to convert
9251
* @chandef: a pointer to the resulting chandef
9252
*
9253
* Return: %true if the conversion was successful, %false otherwise.
9254
*/
9255
bool ieee80211_operating_class_to_chandef(u8 operating_class,
9256
struct ieee80211_channel *chan,
9257
struct cfg80211_chan_def *chandef);
9258
9259
/**
9260
* ieee80211_chandef_to_operating_class - convert chandef to operation class
9261
*
9262
* @chandef: the chandef to convert
9263
* @op_class: a pointer to the resulting operating class
9264
*
9265
* Return: %true if the conversion was successful, %false otherwise.
9266
*/
9267
bool ieee80211_chandef_to_operating_class(struct cfg80211_chan_def *chandef,
9268
u8 *op_class);
9269
9270
/**
9271
* ieee80211_chandef_to_khz - convert chandef to frequency in KHz
9272
*
9273
* @chandef: the chandef to convert
9274
*
9275
* Return: the center frequency of chandef (1st segment) in KHz.
9276
*/
9277
static inline u32
9278
ieee80211_chandef_to_khz(const struct cfg80211_chan_def *chandef)
9279
{
9280
return MHZ_TO_KHZ(chandef->center_freq1) + chandef->freq1_offset;
9281
}
9282
9283
/**
9284
* cfg80211_tdls_oper_request - request userspace to perform TDLS operation
9285
* @dev: the device on which the operation is requested
9286
* @peer: the MAC address of the peer device
9287
* @oper: the requested TDLS operation (NL80211_TDLS_SETUP or
9288
* NL80211_TDLS_TEARDOWN)
9289
* @reason_code: the reason code for teardown request
9290
* @gfp: allocation flags
9291
*
9292
* This function is used to request userspace to perform TDLS operation that
9293
* requires knowledge of keys, i.e., link setup or teardown when the AP
9294
* connection uses encryption. This is optional mechanism for the driver to use
9295
* if it can automatically determine when a TDLS link could be useful (e.g.,
9296
* based on traffic and signal strength for a peer).
9297
*/
9298
void cfg80211_tdls_oper_request(struct net_device *dev, const u8 *peer,
9299
enum nl80211_tdls_operation oper,
9300
u16 reason_code, gfp_t gfp);
9301
9302
/**
9303
* cfg80211_calculate_bitrate - calculate actual bitrate (in 100Kbps units)
9304
* @rate: given rate_info to calculate bitrate from
9305
*
9306
* Return: calculated bitrate
9307
*/
9308
u32 cfg80211_calculate_bitrate(struct rate_info *rate);
9309
9310
/**
9311
* cfg80211_unregister_wdev - remove the given wdev
9312
* @wdev: struct wireless_dev to remove
9313
*
9314
* This function removes the device so it can no longer be used. It is necessary
9315
* to call this function even when cfg80211 requests the removal of the device
9316
* by calling the del_virtual_intf() callback. The function must also be called
9317
* when the driver wishes to unregister the wdev, e.g. when the hardware device
9318
* is unbound from the driver.
9319
*
9320
* Context: Requires the RTNL and wiphy mutex to be held.
9321
*/
9322
void cfg80211_unregister_wdev(struct wireless_dev *wdev);
9323
9324
/**
9325
* cfg80211_register_netdevice - register the given netdev
9326
* @dev: the netdev to register
9327
*
9328
* Note: In contexts coming from cfg80211 callbacks, you must call this rather
9329
* than register_netdevice(), unregister_netdev() is impossible as the RTNL is
9330
* held. Otherwise, both register_netdevice() and register_netdev() are usable
9331
* instead as well.
9332
*
9333
* Context: Requires the RTNL and wiphy mutex to be held.
9334
*
9335
* Return: 0 on success. Non-zero on error.
9336
*/
9337
int cfg80211_register_netdevice(struct net_device *dev);
9338
9339
/**
9340
* cfg80211_unregister_netdevice - unregister the given netdev
9341
* @dev: the netdev to register
9342
*
9343
* Note: In contexts coming from cfg80211 callbacks, you must call this rather
9344
* than unregister_netdevice(), unregister_netdev() is impossible as the RTNL
9345
* is held. Otherwise, both unregister_netdevice() and unregister_netdev() are
9346
* usable instead as well.
9347
*
9348
* Context: Requires the RTNL and wiphy mutex to be held.
9349
*/
9350
static inline void cfg80211_unregister_netdevice(struct net_device *dev)
9351
{
9352
#if IS_ENABLED(CONFIG_CFG80211)
9353
cfg80211_unregister_wdev(dev->ieee80211_ptr);
9354
#endif
9355
}
9356
9357
/**
9358
* struct cfg80211_ft_event_params - FT Information Elements
9359
* @ies: FT IEs
9360
* @ies_len: length of the FT IE in bytes
9361
* @target_ap: target AP's MAC address
9362
* @ric_ies: RIC IE
9363
* @ric_ies_len: length of the RIC IE in bytes
9364
*/
9365
struct cfg80211_ft_event_params {
9366
const u8 *ies;
9367
size_t ies_len;
9368
const u8 *target_ap;
9369
const u8 *ric_ies;
9370
size_t ric_ies_len;
9371
};
9372
9373
/**
9374
* cfg80211_ft_event - notify userspace about FT IE and RIC IE
9375
* @netdev: network device
9376
* @ft_event: IE information
9377
*/
9378
void cfg80211_ft_event(struct net_device *netdev,
9379
struct cfg80211_ft_event_params *ft_event);
9380
9381
/**
9382
* cfg80211_get_p2p_attr - find and copy a P2P attribute from IE buffer
9383
* @ies: the input IE buffer
9384
* @len: the input length
9385
* @attr: the attribute ID to find
9386
* @buf: output buffer, can be %NULL if the data isn't needed, e.g.
9387
* if the function is only called to get the needed buffer size
9388
* @bufsize: size of the output buffer
9389
*
9390
* The function finds a given P2P attribute in the (vendor) IEs and
9391
* copies its contents to the given buffer.
9392
*
9393
* Return: A negative error code (-%EILSEQ or -%ENOENT) if the data is
9394
* malformed or the attribute can't be found (respectively), or the
9395
* length of the found attribute (which can be zero).
9396
*/
9397
int cfg80211_get_p2p_attr(const u8 *ies, unsigned int len,
9398
enum ieee80211_p2p_attr_id attr,
9399
u8 *buf, unsigned int bufsize);
9400
9401
/**
9402
* ieee80211_ie_split_ric - split an IE buffer according to ordering (with RIC)
9403
* @ies: the IE buffer
9404
* @ielen: the length of the IE buffer
9405
* @ids: an array with element IDs that are allowed before
9406
* the split. A WLAN_EID_EXTENSION value means that the next
9407
* EID in the list is a sub-element of the EXTENSION IE.
9408
* @n_ids: the size of the element ID array
9409
* @after_ric: array IE types that come after the RIC element
9410
* @n_after_ric: size of the @after_ric array
9411
* @offset: offset where to start splitting in the buffer
9412
*
9413
* This function splits an IE buffer by updating the @offset
9414
* variable to point to the location where the buffer should be
9415
* split.
9416
*
9417
* It assumes that the given IE buffer is well-formed, this
9418
* has to be guaranteed by the caller!
9419
*
9420
* It also assumes that the IEs in the buffer are ordered
9421
* correctly, if not the result of using this function will not
9422
* be ordered correctly either, i.e. it does no reordering.
9423
*
9424
* Return: The offset where the next part of the buffer starts, which
9425
* may be @ielen if the entire (remainder) of the buffer should be
9426
* used.
9427
*/
9428
size_t ieee80211_ie_split_ric(const u8 *ies, size_t ielen,
9429
const u8 *ids, int n_ids,
9430
const u8 *after_ric, int n_after_ric,
9431
size_t offset);
9432
9433
/**
9434
* ieee80211_ie_split - split an IE buffer according to ordering
9435
* @ies: the IE buffer
9436
* @ielen: the length of the IE buffer
9437
* @ids: an array with element IDs that are allowed before
9438
* the split. A WLAN_EID_EXTENSION value means that the next
9439
* EID in the list is a sub-element of the EXTENSION IE.
9440
* @n_ids: the size of the element ID array
9441
* @offset: offset where to start splitting in the buffer
9442
*
9443
* This function splits an IE buffer by updating the @offset
9444
* variable to point to the location where the buffer should be
9445
* split.
9446
*
9447
* It assumes that the given IE buffer is well-formed, this
9448
* has to be guaranteed by the caller!
9449
*
9450
* It also assumes that the IEs in the buffer are ordered
9451
* correctly, if not the result of using this function will not
9452
* be ordered correctly either, i.e. it does no reordering.
9453
*
9454
* Return: The offset where the next part of the buffer starts, which
9455
* may be @ielen if the entire (remainder) of the buffer should be
9456
* used.
9457
*/
9458
static inline size_t ieee80211_ie_split(const u8 *ies, size_t ielen,
9459
const u8 *ids, int n_ids, size_t offset)
9460
{
9461
return ieee80211_ie_split_ric(ies, ielen, ids, n_ids, NULL, 0, offset);
9462
}
9463
9464
/**
9465
* ieee80211_fragment_element - fragment the last element in skb
9466
* @skb: The skbuf that the element was added to
9467
* @len_pos: Pointer to length of the element to fragment
9468
* @frag_id: The element ID to use for fragments
9469
*
9470
* This function fragments all data after @len_pos, adding fragmentation
9471
* elements with the given ID as appropriate. The SKB will grow in size
9472
* accordingly.
9473
*/
9474
void ieee80211_fragment_element(struct sk_buff *skb, u8 *len_pos, u8 frag_id);
9475
9476
/**
9477
* cfg80211_report_wowlan_wakeup - report wakeup from WoWLAN
9478
* @wdev: the wireless device reporting the wakeup
9479
* @wakeup: the wakeup report
9480
* @gfp: allocation flags
9481
*
9482
* This function reports that the given device woke up. If it
9483
* caused the wakeup, report the reason(s), otherwise you may
9484
* pass %NULL as the @wakeup parameter to advertise that something
9485
* else caused the wakeup.
9486
*/
9487
void cfg80211_report_wowlan_wakeup(struct wireless_dev *wdev,
9488
struct cfg80211_wowlan_wakeup *wakeup,
9489
gfp_t gfp);
9490
9491
/**
9492
* cfg80211_crit_proto_stopped() - indicate critical protocol stopped by driver.
9493
*
9494
* @wdev: the wireless device for which critical protocol is stopped.
9495
* @gfp: allocation flags
9496
*
9497
* This function can be called by the driver to indicate it has reverted
9498
* operation back to normal. One reason could be that the duration given
9499
* by .crit_proto_start() has expired.
9500
*/
9501
void cfg80211_crit_proto_stopped(struct wireless_dev *wdev, gfp_t gfp);
9502
9503
/**
9504
* ieee80211_get_num_supported_channels - get number of channels device has
9505
* @wiphy: the wiphy
9506
*
9507
* Return: the number of channels supported by the device.
9508
*/
9509
unsigned int ieee80211_get_num_supported_channels(struct wiphy *wiphy);
9510
9511
/**
9512
* cfg80211_check_combinations - check interface combinations
9513
*
9514
* @wiphy: the wiphy
9515
* @params: the interface combinations parameter
9516
*
9517
* This function can be called by the driver to check whether a
9518
* combination of interfaces and their types are allowed according to
9519
* the interface combinations.
9520
*
9521
* Return: 0 if combinations are allowed. Non-zero on error.
9522
*/
9523
int cfg80211_check_combinations(struct wiphy *wiphy,
9524
struct iface_combination_params *params);
9525
9526
/**
9527
* cfg80211_iter_combinations - iterate over matching combinations
9528
*
9529
* @wiphy: the wiphy
9530
* @params: the interface combinations parameter
9531
* @iter: function to call for each matching combination
9532
* @data: pointer to pass to iter function
9533
*
9534
* This function can be called by the driver to check what possible
9535
* combinations it fits in at a given moment, e.g. for channel switching
9536
* purposes.
9537
*
9538
* Return: 0 on success. Non-zero on error.
9539
*/
9540
int cfg80211_iter_combinations(struct wiphy *wiphy,
9541
struct iface_combination_params *params,
9542
void (*iter)(const struct ieee80211_iface_combination *c,
9543
void *data),
9544
void *data);
9545
/**
9546
* cfg80211_get_radio_idx_by_chan - get the radio index by the channel
9547
*
9548
* @wiphy: the wiphy
9549
* @chan: channel for which the supported radio index is required
9550
*
9551
* Return: radio index on success or a negative error code
9552
*/
9553
int cfg80211_get_radio_idx_by_chan(struct wiphy *wiphy,
9554
const struct ieee80211_channel *chan);
9555
9556
9557
/**
9558
* cfg80211_stop_iface - trigger interface disconnection
9559
*
9560
* @wiphy: the wiphy
9561
* @wdev: wireless device
9562
* @gfp: context flags
9563
*
9564
* Trigger interface to be stopped as if AP was stopped, IBSS/mesh left, STA
9565
* disconnected.
9566
*
9567
* Note: This doesn't need any locks and is asynchronous.
9568
*/
9569
void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
9570
gfp_t gfp);
9571
9572
/**
9573
* cfg80211_shutdown_all_interfaces - shut down all interfaces for a wiphy
9574
* @wiphy: the wiphy to shut down
9575
*
9576
* This function shuts down all interfaces belonging to this wiphy by
9577
* calling dev_close() (and treating non-netdev interfaces as needed).
9578
* It shouldn't really be used unless there are some fatal device errors
9579
* that really can't be recovered in any other way.
9580
*
9581
* Callers must hold the RTNL and be able to deal with callbacks into
9582
* the driver while the function is running.
9583
*/
9584
void cfg80211_shutdown_all_interfaces(struct wiphy *wiphy);
9585
9586
/**
9587
* wiphy_ext_feature_set - set the extended feature flag
9588
*
9589
* @wiphy: the wiphy to modify.
9590
* @ftidx: extended feature bit index.
9591
*
9592
* The extended features are flagged in multiple bytes (see
9593
* &struct wiphy.@ext_features)
9594
*/
9595
static inline void wiphy_ext_feature_set(struct wiphy *wiphy,
9596
enum nl80211_ext_feature_index ftidx)
9597
{
9598
u8 *ft_byte;
9599
9600
ft_byte = &wiphy->ext_features[ftidx / 8];
9601
*ft_byte |= BIT(ftidx % 8);
9602
}
9603
9604
/**
9605
* wiphy_ext_feature_isset - check the extended feature flag
9606
*
9607
* @wiphy: the wiphy to modify.
9608
* @ftidx: extended feature bit index.
9609
*
9610
* The extended features are flagged in multiple bytes (see
9611
* &struct wiphy.@ext_features)
9612
*
9613
* Return: %true if extended feature flag is set, %false otherwise
9614
*/
9615
static inline bool
9616
wiphy_ext_feature_isset(struct wiphy *wiphy,
9617
enum nl80211_ext_feature_index ftidx)
9618
{
9619
u8 ft_byte;
9620
9621
ft_byte = wiphy->ext_features[ftidx / 8];
9622
return (ft_byte & BIT(ftidx % 8)) != 0;
9623
}
9624
9625
/**
9626
* cfg80211_free_nan_func - free NAN function
9627
* @f: NAN function that should be freed
9628
*
9629
* Frees all the NAN function and all it's allocated members.
9630
*/
9631
void cfg80211_free_nan_func(struct cfg80211_nan_func *f);
9632
9633
/**
9634
* struct cfg80211_nan_match_params - NAN match parameters
9635
* @type: the type of the function that triggered a match. If it is
9636
* %NL80211_NAN_FUNC_SUBSCRIBE it means that we replied to a subscriber.
9637
* If it is %NL80211_NAN_FUNC_PUBLISH, it means that we got a discovery
9638
* result.
9639
* If it is %NL80211_NAN_FUNC_FOLLOW_UP, we received a follow up.
9640
* @inst_id: the local instance id
9641
* @peer_inst_id: the instance id of the peer's function
9642
* @addr: the MAC address of the peer
9643
* @info_len: the length of the &info
9644
* @info: the Service Specific Info from the peer (if any)
9645
* @cookie: unique identifier of the corresponding function
9646
*/
9647
struct cfg80211_nan_match_params {
9648
enum nl80211_nan_function_type type;
9649
u8 inst_id;
9650
u8 peer_inst_id;
9651
const u8 *addr;
9652
u8 info_len;
9653
const u8 *info;
9654
u64 cookie;
9655
};
9656
9657
/**
9658
* cfg80211_nan_match - report a match for a NAN function.
9659
* @wdev: the wireless device reporting the match
9660
* @match: match notification parameters
9661
* @gfp: allocation flags
9662
*
9663
* This function reports that the a NAN function had a match. This
9664
* can be a subscribe that had a match or a solicited publish that
9665
* was sent. It can also be a follow up that was received.
9666
*/
9667
void cfg80211_nan_match(struct wireless_dev *wdev,
9668
struct cfg80211_nan_match_params *match, gfp_t gfp);
9669
9670
/**
9671
* cfg80211_nan_func_terminated - notify about NAN function termination.
9672
*
9673
* @wdev: the wireless device reporting the match
9674
* @inst_id: the local instance id
9675
* @reason: termination reason (one of the NL80211_NAN_FUNC_TERM_REASON_*)
9676
* @cookie: unique NAN function identifier
9677
* @gfp: allocation flags
9678
*
9679
* This function reports that the a NAN function is terminated.
9680
*/
9681
void cfg80211_nan_func_terminated(struct wireless_dev *wdev,
9682
u8 inst_id,
9683
enum nl80211_nan_func_term_reason reason,
9684
u64 cookie, gfp_t gfp);
9685
9686
/* ethtool helper */
9687
void cfg80211_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info);
9688
9689
/**
9690
* cfg80211_external_auth_request - userspace request for authentication
9691
* @netdev: network device
9692
* @params: External authentication parameters
9693
* @gfp: allocation flags
9694
* Returns: 0 on success, < 0 on error
9695
*/
9696
int cfg80211_external_auth_request(struct net_device *netdev,
9697
struct cfg80211_external_auth_params *params,
9698
gfp_t gfp);
9699
9700
/**
9701
* cfg80211_pmsr_report - report peer measurement result data
9702
* @wdev: the wireless device reporting the measurement
9703
* @req: the original measurement request
9704
* @result: the result data
9705
* @gfp: allocation flags
9706
*/
9707
void cfg80211_pmsr_report(struct wireless_dev *wdev,
9708
struct cfg80211_pmsr_request *req,
9709
struct cfg80211_pmsr_result *result,
9710
gfp_t gfp);
9711
9712
/**
9713
* cfg80211_pmsr_complete - report peer measurement completed
9714
* @wdev: the wireless device reporting the measurement
9715
* @req: the original measurement request
9716
* @gfp: allocation flags
9717
*
9718
* Report that the entire measurement completed, after this
9719
* the request pointer will no longer be valid.
9720
*/
9721
void cfg80211_pmsr_complete(struct wireless_dev *wdev,
9722
struct cfg80211_pmsr_request *req,
9723
gfp_t gfp);
9724
9725
/**
9726
* cfg80211_iftype_allowed - check whether the interface can be allowed
9727
* @wiphy: the wiphy
9728
* @iftype: interface type
9729
* @is_4addr: use_4addr flag, must be '0' when check_swif is '1'
9730
* @check_swif: check iftype against software interfaces
9731
*
9732
* Check whether the interface is allowed to operate; additionally, this API
9733
* can be used to check iftype against the software interfaces when
9734
* check_swif is '1'.
9735
*
9736
* Return: %true if allowed, %false otherwise
9737
*/
9738
bool cfg80211_iftype_allowed(struct wiphy *wiphy, enum nl80211_iftype iftype,
9739
bool is_4addr, u8 check_swif);
9740
9741
9742
/**
9743
* cfg80211_assoc_comeback - notification of association that was
9744
* temporarily rejected with a comeback
9745
* @netdev: network device
9746
* @ap_addr: AP (MLD) address that rejected the association
9747
* @timeout: timeout interval value TUs.
9748
*
9749
* this function may sleep. the caller must hold the corresponding wdev's mutex.
9750
*/
9751
void cfg80211_assoc_comeback(struct net_device *netdev,
9752
const u8 *ap_addr, u32 timeout);
9753
9754
/* Logging, debugging and troubleshooting/diagnostic helpers. */
9755
9756
/* wiphy_printk helpers, similar to dev_printk */
9757
9758
#define wiphy_printk(level, wiphy, format, args...) \
9759
dev_printk(level, &(wiphy)->dev, format, ##args)
9760
#define wiphy_emerg(wiphy, format, args...) \
9761
dev_emerg(&(wiphy)->dev, format, ##args)
9762
#define wiphy_alert(wiphy, format, args...) \
9763
dev_alert(&(wiphy)->dev, format, ##args)
9764
#define wiphy_crit(wiphy, format, args...) \
9765
dev_crit(&(wiphy)->dev, format, ##args)
9766
#define wiphy_err(wiphy, format, args...) \
9767
dev_err(&(wiphy)->dev, format, ##args)
9768
#define wiphy_warn(wiphy, format, args...) \
9769
dev_warn(&(wiphy)->dev, format, ##args)
9770
#define wiphy_notice(wiphy, format, args...) \
9771
dev_notice(&(wiphy)->dev, format, ##args)
9772
#define wiphy_info(wiphy, format, args...) \
9773
dev_info(&(wiphy)->dev, format, ##args)
9774
#define wiphy_info_once(wiphy, format, args...) \
9775
dev_info_once(&(wiphy)->dev, format, ##args)
9776
9777
#define wiphy_err_ratelimited(wiphy, format, args...) \
9778
dev_err_ratelimited(&(wiphy)->dev, format, ##args)
9779
#define wiphy_warn_ratelimited(wiphy, format, args...) \
9780
dev_warn_ratelimited(&(wiphy)->dev, format, ##args)
9781
9782
#define wiphy_debug(wiphy, format, args...) \
9783
wiphy_printk(KERN_DEBUG, wiphy, format, ##args)
9784
9785
#define wiphy_dbg(wiphy, format, args...) \
9786
dev_dbg(&(wiphy)->dev, format, ##args)
9787
9788
#if defined(VERBOSE_DEBUG)
9789
#define wiphy_vdbg wiphy_dbg
9790
#else
9791
#define wiphy_vdbg(wiphy, format, args...) \
9792
({ \
9793
if (0) \
9794
wiphy_printk(KERN_DEBUG, wiphy, format, ##args); \
9795
0; \
9796
})
9797
#endif
9798
9799
/*
9800
* wiphy_WARN() acts like wiphy_printk(), but with the key difference
9801
* of using a WARN/WARN_ON to get the message out, including the
9802
* file/line information and a backtrace.
9803
*/
9804
#define wiphy_WARN(wiphy, format, args...) \
9805
WARN(1, "wiphy: %s\n" format, wiphy_name(wiphy), ##args);
9806
9807
/**
9808
* cfg80211_update_owe_info_event - Notify the peer's OWE info to user space
9809
* @netdev: network device
9810
* @owe_info: peer's owe info
9811
* @gfp: allocation flags
9812
*/
9813
void cfg80211_update_owe_info_event(struct net_device *netdev,
9814
struct cfg80211_update_owe_info *owe_info,
9815
gfp_t gfp);
9816
9817
/**
9818
* cfg80211_bss_flush - resets all the scan entries
9819
* @wiphy: the wiphy
9820
*/
9821
void cfg80211_bss_flush(struct wiphy *wiphy);
9822
9823
/**
9824
* cfg80211_bss_color_notify - notify about bss color event
9825
* @dev: network device
9826
* @cmd: the actual event we want to notify
9827
* @count: the number of TBTTs until the color change happens
9828
* @color_bitmap: representations of the colors that the local BSS is aware of
9829
* @link_id: valid link_id in case of MLO or 0 for non-MLO.
9830
*
9831
* Return: 0 on success. Non-zero on error.
9832
*/
9833
int cfg80211_bss_color_notify(struct net_device *dev,
9834
enum nl80211_commands cmd, u8 count,
9835
u64 color_bitmap, u8 link_id);
9836
9837
/**
9838
* cfg80211_obss_color_collision_notify - notify about bss color collision
9839
* @dev: network device
9840
* @color_bitmap: representations of the colors that the local BSS is aware of
9841
* @link_id: valid link_id in case of MLO or 0 for non-MLO.
9842
*
9843
* Return: 0 on success. Non-zero on error.
9844
*/
9845
static inline int cfg80211_obss_color_collision_notify(struct net_device *dev,
9846
u64 color_bitmap,
9847
u8 link_id)
9848
{
9849
return cfg80211_bss_color_notify(dev, NL80211_CMD_OBSS_COLOR_COLLISION,
9850
0, color_bitmap, link_id);
9851
}
9852
9853
/**
9854
* cfg80211_color_change_started_notify - notify color change start
9855
* @dev: the device on which the color is switched
9856
* @count: the number of TBTTs until the color change happens
9857
* @link_id: valid link_id in case of MLO or 0 for non-MLO.
9858
*
9859
* Inform the userspace about the color change that has started.
9860
*
9861
* Return: 0 on success. Non-zero on error.
9862
*/
9863
static inline int cfg80211_color_change_started_notify(struct net_device *dev,
9864
u8 count, u8 link_id)
9865
{
9866
return cfg80211_bss_color_notify(dev, NL80211_CMD_COLOR_CHANGE_STARTED,
9867
count, 0, link_id);
9868
}
9869
9870
/**
9871
* cfg80211_color_change_aborted_notify - notify color change abort
9872
* @dev: the device on which the color is switched
9873
* @link_id: valid link_id in case of MLO or 0 for non-MLO.
9874
*
9875
* Inform the userspace about the color change that has aborted.
9876
*
9877
* Return: 0 on success. Non-zero on error.
9878
*/
9879
static inline int cfg80211_color_change_aborted_notify(struct net_device *dev,
9880
u8 link_id)
9881
{
9882
return cfg80211_bss_color_notify(dev, NL80211_CMD_COLOR_CHANGE_ABORTED,
9883
0, 0, link_id);
9884
}
9885
9886
/**
9887
* cfg80211_color_change_notify - notify color change completion
9888
* @dev: the device on which the color was switched
9889
* @link_id: valid link_id in case of MLO or 0 for non-MLO.
9890
*
9891
* Inform the userspace about the color change that has completed.
9892
*
9893
* Return: 0 on success. Non-zero on error.
9894
*/
9895
static inline int cfg80211_color_change_notify(struct net_device *dev,
9896
u8 link_id)
9897
{
9898
return cfg80211_bss_color_notify(dev,
9899
NL80211_CMD_COLOR_CHANGE_COMPLETED,
9900
0, 0, link_id);
9901
}
9902
9903
/**
9904
* cfg80211_links_removed - Notify about removed STA MLD setup links.
9905
* @dev: network device.
9906
* @link_mask: BIT mask of removed STA MLD setup link IDs.
9907
*
9908
* Inform cfg80211 and the userspace about removed STA MLD setup links due to
9909
* AP MLD removing the corresponding affiliated APs with Multi-Link
9910
* reconfiguration. Note that it's not valid to remove all links, in this
9911
* case disconnect instead.
9912
* Also note that the wdev mutex must be held.
9913
*/
9914
void cfg80211_links_removed(struct net_device *dev, u16 link_mask);
9915
9916
/**
9917
* struct cfg80211_mlo_reconf_done_data - MLO reconfiguration data
9918
* @buf: MLO Reconfiguration Response frame (header + body)
9919
* @len: length of the frame data
9920
* @driver_initiated: Indicates whether the add links request is initiated by
9921
* driver. This is set to true when the link reconfiguration request
9922
* initiated by driver due to AP link recommendation requests
9923
* (Ex: BTM (BSS Transition Management) request) handling offloaded to
9924
* driver.
9925
* @added_links: BIT mask of links successfully added to the association
9926
* @links: per-link information indexed by link ID
9927
* @links.bss: the BSS that MLO reconfiguration was requested for, ownership of
9928
* the pointer moves to cfg80211 in the call to
9929
* cfg80211_mlo_reconf_add_done().
9930
*
9931
* The BSS pointer must be set for each link for which 'add' operation was
9932
* requested in the assoc_ml_reconf callback.
9933
*/
9934
struct cfg80211_mlo_reconf_done_data {
9935
const u8 *buf;
9936
size_t len;
9937
bool driver_initiated;
9938
u16 added_links;
9939
struct {
9940
struct cfg80211_bss *bss;
9941
u8 *addr;
9942
} links[IEEE80211_MLD_MAX_NUM_LINKS];
9943
};
9944
9945
/**
9946
* cfg80211_mlo_reconf_add_done - Notify about MLO reconfiguration result
9947
* @dev: network device.
9948
* @data: MLO reconfiguration done data, &struct cfg80211_mlo_reconf_done_data
9949
*
9950
* Inform cfg80211 and the userspace that processing of ML reconfiguration
9951
* request to add links to the association is done.
9952
*/
9953
void cfg80211_mlo_reconf_add_done(struct net_device *dev,
9954
struct cfg80211_mlo_reconf_done_data *data);
9955
9956
/**
9957
* cfg80211_schedule_channels_check - schedule regulatory check if needed
9958
* @wdev: the wireless device to check
9959
*
9960
* In case the device supports NO_IR or DFS relaxations, schedule regulatory
9961
* channels check, as previous concurrent operation conditions may not
9962
* hold anymore.
9963
*/
9964
void cfg80211_schedule_channels_check(struct wireless_dev *wdev);
9965
9966
/**
9967
* cfg80211_epcs_changed - Notify about a change in EPCS state
9968
* @netdev: the wireless device whose EPCS state changed
9969
* @enabled: set to true if EPCS was enabled, otherwise set to false.
9970
*/
9971
void cfg80211_epcs_changed(struct net_device *netdev, bool enabled);
9972
9973
#ifdef CONFIG_CFG80211_DEBUGFS
9974
/**
9975
* wiphy_locked_debugfs_read - do a locked read in debugfs
9976
* @wiphy: the wiphy to use
9977
* @file: the file being read
9978
* @buf: the buffer to fill and then read from
9979
* @bufsize: size of the buffer
9980
* @userbuf: the user buffer to copy to
9981
* @count: read count
9982
* @ppos: read position
9983
* @handler: the read handler to call (under wiphy lock)
9984
* @data: additional data to pass to the read handler
9985
*
9986
* Return: the number of characters read, or a negative errno
9987
*/
9988
ssize_t wiphy_locked_debugfs_read(struct wiphy *wiphy, struct file *file,
9989
char *buf, size_t bufsize,
9990
char __user *userbuf, size_t count,
9991
loff_t *ppos,
9992
ssize_t (*handler)(struct wiphy *wiphy,
9993
struct file *file,
9994
char *buf,
9995
size_t bufsize,
9996
void *data),
9997
void *data);
9998
9999
/**
10000
* wiphy_locked_debugfs_write - do a locked write in debugfs
10001
* @wiphy: the wiphy to use
10002
* @file: the file being written to
10003
* @buf: the buffer to copy the user data to
10004
* @bufsize: size of the buffer
10005
* @userbuf: the user buffer to copy from
10006
* @count: read count
10007
* @handler: the write handler to call (under wiphy lock)
10008
* @data: additional data to pass to the write handler
10009
*
10010
* Return: the number of characters written, or a negative errno
10011
*/
10012
ssize_t wiphy_locked_debugfs_write(struct wiphy *wiphy, struct file *file,
10013
char *buf, size_t bufsize,
10014
const char __user *userbuf, size_t count,
10015
ssize_t (*handler)(struct wiphy *wiphy,
10016
struct file *file,
10017
char *buf,
10018
size_t count,
10019
void *data),
10020
void *data);
10021
#endif
10022
10023
#endif /* __NET_CFG80211_H */
10024
10025