Coverage Report

Created: 2026-05-30 06:11

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/hostap/src/common/ieee802_11_defs.h
Line
Count
Source
1
/*
2
 * IEEE 802.11 Frame type definitions
3
 * Copyright (c) 2002-2019, Jouni Malinen <j@w1.fi>
4
 * Copyright (c) 2007-2008 Intel Corporation
5
 *
6
 * This software may be distributed under the terms of the BSD license.
7
 * See README for more details.
8
 */
9
10
#ifndef IEEE802_11_DEFS_H
11
#define IEEE802_11_DEFS_H
12
13
#include <utils/common.h>
14
15
/* IEEE 802.11 defines */
16
17
#define WLAN_FC_PVER    0x0003
18
#define WLAN_FC_TODS    0x0100
19
#define WLAN_FC_FROMDS    0x0200
20
#define WLAN_FC_MOREFRAG  0x0400
21
#define WLAN_FC_RETRY   0x0800
22
#define WLAN_FC_PWRMGT    0x1000
23
#define WLAN_FC_MOREDATA  0x2000
24
#define WLAN_FC_PROTECTED 0x4000
25
#define WLAN_FC_HTC   0x8000
26
27
#define WLAN_FC_S1G_BEACON_NEXT_TBTT  0x0100
28
#define WLAN_FC_S1G_BEACON_COMP_SSID  0x0200
29
#define WLAN_FC_S1G_BEACON_ANO    0x0400
30
#define WLAN_FC_S1G_BEACON_BSS_BW 0x3800
31
#define WLAN_FC_S1G_BEACON_SECURITY 0x4000
32
#define WLAN_FC_S1G_BEACON_AP_PM  0x8000
33
34
#define WLAN_FC_GET_TYPE(fc)  (((fc) & 0x000c) >> 2)
35
#define WLAN_FC_GET_STYPE(fc) (((fc) & 0x00f0) >> 4)
36
37
#define WLAN_INVALID_MGMT_SEQ   0xFFFF
38
39
#define WLAN_GET_SEQ_FRAG(seq) ((seq) & (BIT(3) | BIT(2) | BIT(1) | BIT(0)))
40
#define WLAN_GET_SEQ_SEQ(seq) \
41
  (((seq) & (~(BIT(3) | BIT(2) | BIT(1) | BIT(0)))) >> 4)
42
43
#define WLAN_FC_TYPE_MGMT   0
44
#define WLAN_FC_TYPE_CTRL   1
45
#define WLAN_FC_TYPE_DATA   2
46
#define WLAN_FC_TYPE_EXT    3
47
48
/* management */
49
#define WLAN_FC_STYPE_ASSOC_REQ   0
50
#define WLAN_FC_STYPE_ASSOC_RESP  1
51
#define WLAN_FC_STYPE_REASSOC_REQ 2
52
#define WLAN_FC_STYPE_REASSOC_RESP  3
53
#define WLAN_FC_STYPE_PROBE_REQ   4
54
#define WLAN_FC_STYPE_PROBE_RESP  5
55
#define WLAN_FC_STYPE_BEACON    8
56
#define WLAN_FC_STYPE_ATIM    9
57
#define WLAN_FC_STYPE_DISASSOC    10
58
#define WLAN_FC_STYPE_AUTH    11
59
#define WLAN_FC_STYPE_DEAUTH    12
60
#define WLAN_FC_STYPE_ACTION    13
61
#define WLAN_FC_STYPE_ACTION_NO_ACK 14
62
63
/* control */
64
#define WLAN_FC_STYPE_PSPOLL    10
65
#define WLAN_FC_STYPE_RTS   11
66
#define WLAN_FC_STYPE_CTS   12
67
#define WLAN_FC_STYPE_ACK   13
68
#define WLAN_FC_STYPE_CFEND   14
69
#define WLAN_FC_STYPE_CFENDACK    15
70
71
/* data */
72
#define WLAN_FC_STYPE_DATA    0
73
#define WLAN_FC_STYPE_DATA_CFACK  1
74
#define WLAN_FC_STYPE_DATA_CFPOLL 2
75
#define WLAN_FC_STYPE_DATA_CFACKPOLL  3
76
#define WLAN_FC_STYPE_NULLFUNC    4
77
#define WLAN_FC_STYPE_CFACK   5
78
#define WLAN_FC_STYPE_CFPOLL    6
79
#define WLAN_FC_STYPE_CFACKPOLL   7
80
#define WLAN_FC_STYPE_QOS_DATA    8
81
#define WLAN_FC_STYPE_QOS_DATA_CFACK  9
82
#define WLAN_FC_STYPE_QOS_DATA_CFPOLL 10
83
#define WLAN_FC_STYPE_QOS_DATA_CFACKPOLL  11
84
#define WLAN_FC_STYPE_QOS_NULL    12
85
#define WLAN_FC_STYPE_QOS_CFPOLL  14
86
#define WLAN_FC_STYPE_QOS_CFACKPOLL 15
87
88
/* extension */
89
#define WLAN_FC_STYPE_DMG_BEACON  0
90
#define WLAN_FC_STYPE_S1G_BEACON  1
91
92
/* Authentication algorithms */
93
#define WLAN_AUTH_OPEN      0
94
#define WLAN_AUTH_SHARED_KEY    1
95
#define WLAN_AUTH_FT      2
96
#define WLAN_AUTH_SAE     3
97
#define WLAN_AUTH_FILS_SK   4
98
#define WLAN_AUTH_FILS_SK_PFS   5
99
#define WLAN_AUTH_FILS_PK   6
100
#define WLAN_AUTH_PASN      7
101
#define WLAN_AUTH_802_1X    8
102
#define WLAN_AUTH_EPPKE     9
103
#define WLAN_AUTH_LEAP      128
104
105
/* Authentication transaction sequence number */
106
#define WLAN_AUTH_TR_SEQ_SAE_COMMIT 1
107
#define WLAN_AUTH_TR_SEQ_SAE_CONFIRM 2
108
109
#define WLAN_AUTH_TR_SEQ_PASN_AUTH1 1
110
#define WLAN_AUTH_TR_SEQ_PASN_AUTH2 2
111
#define WLAN_AUTH_TR_SEQ_PASN_AUTH3 3
112
113
#define WLAN_AUTH_CHALLENGE_LEN 128
114
115
/* IEEE Std 802.11-2024, 9.4.1.4 (Capability Information field) */
116
#define WLAN_CAPABILITY_ESS BIT(0)
117
#define WLAN_CAPABILITY_IBSS BIT(1)
118
/* bit 2 is reserved (was WLAN_CAPABILITY_CF_POLLABLE) */
119
/* bit 3 is reserved (was WLAN_CAPABILITY_CF_POLL_REQUEST) */
120
#define WLAN_CAPABILITY_PRIVACY BIT(4)
121
#define WLAN_CAPABILITY_SHORT_PREAMBLE BIT(5)
122
/* bit 6 is reserved (was WLAN_CAPABILITY_PBCC) */
123
/* bit 7 is reserved (was WLAN_CAPABILITY_CHANNEL_AGILITY) */
124
#define WLAN_CAPABILITY_SPECTRUM_MGMT BIT(8)
125
#define WLAN_CAPABILITY_QOS BIT(9)
126
#define WLAN_CAPABILITY_SHORT_SLOT_TIME BIT(10)
127
#define WLAN_CAPABILITY_APSD BIT(11)
128
#define WLAN_CAPABILITY_RADIO_MEASUREMENT BIT(12)
129
#define WLAN_CAPABILITY_EPD BIT(13)
130
/* bit 14 is reserved (was WLAN_CAPABILITY_DELAYED_BLOCK_ACK) */
131
/* bit 15 is reserved (was WLAN_CAPABILITY_IMM_BLOCK_ACK) */
132
133
/* Status codes (IEEE Std 802.11-2024, 9.4.1.9, Table 9-80) */
134
#define WLAN_STATUS_SUCCESS 0
135
#define WLAN_STATUS_UNSPECIFIED_FAILURE 1
136
#define WLAN_STATUS_TDLS_WAKEUP_ALTERNATE 2
137
#define WLAN_STATUS_TDLS_WAKEUP_REJECT 3
138
#define WLAN_STATUS_SECURITY_DISABLED 5
139
#define WLAN_STATUS_UNACCEPTABLE_LIFETIME 6
140
#define WLAN_STATUS_NOT_IN_SAME_BSS 7
141
#define WLAN_STATUS_CAPS_UNSUPPORTED 10
142
#define WLAN_STATUS_REASSOC_NO_ASSOC 11
143
#define WLAN_STATUS_ASSOC_DENIED_UNSPEC 12
144
#define WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG 13
145
#define WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION 14
146
#define WLAN_STATUS_CHALLENGE_FAIL 15
147
#define WLAN_STATUS_AUTH_TIMEOUT 16
148
#define WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA 17
149
#define WLAN_STATUS_ASSOC_DENIED_RATES 18
150
#define WLAN_STATUS_ASSOC_DENIED_NOSHORT 19
151
#define WLAN_STATUS_SPEC_MGMT_REQUIRED 22
152
#define WLAN_STATUS_PWR_CAPABILITY_NOT_VALID 23
153
#define WLAN_STATUS_SUPPORTED_CHANNEL_NOT_VALID 24
154
#define WLAN_STATUS_ASSOC_DENIED_NO_SHORT_SLOT_TIME 25
155
#define WLAN_STATUS_ASSOC_DENIED_NO_HT 27
156
#define WLAN_STATUS_R0KH_UNREACHABLE 28
157
#define WLAN_STATUS_ASSOC_DENIED_NO_PCO 29
158
#define WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY 30
159
#define WLAN_STATUS_ROBUST_MGMT_FRAME_POLICY_VIOLATION 31
160
#define WLAN_STATUS_UNSPECIFIED_QOS_FAILURE 32
161
#define WLAN_STATUS_DENIED_INSUFFICIENT_BANDWIDTH 33
162
#define WLAN_STATUS_DENIED_POOR_CHANNEL_CONDITIONS 34
163
#define WLAN_STATUS_DENIED_QOS_NOT_SUPPORTED 35
164
#define WLAN_STATUS_REQUEST_DECLINED 37
165
#define WLAN_STATUS_INVALID_PARAMETERS 38
166
#define WLAN_STATUS_REJECTED_WITH_SUGGESTED_CHANGES 39
167
#define WLAN_STATUS_INVALID_ELEMENT 40
168
#define WLAN_STATUS_INVALID_GROUP_CIPHER 41
169
#define WLAN_STATUS_INVALID_PAIRWISE_CIPHER 42
170
#define WLAN_STATUS_INVALID_AKMP 43
171
#define WLAN_STATUS_UNSUPPORTED_RSNE_VERSION 44
172
#define WLAN_STATUS_INVALID_RSNE_CAPABILITIES 45
173
#define WLAN_STATUS_CIPHER_OUT_OF_POLICY 46
174
#define WLAN_STATUS_TS_NOT_CREATED 47
175
#define WLAN_STATUS_DIRECT_LINK_NOT_ALLOWED 48
176
#define WLAN_STATUS_DEST_STA_NOT_PRESENT 49
177
#define WLAN_STATUS_DEST_STA_NOT_QOS_STA 50
178
#define WLAN_STATUS_ASSOC_DENIED_LISTEN_INT_TOO_LARGE 51
179
#define WLAN_STATUS_INVALID_FT_ACTION_FRAME_COUNT 52
180
#define WLAN_STATUS_INVALID_PMKID 53
181
#define WLAN_STATUS_INVALID_MDE 54
182
#define WLAN_STATUS_INVALID_FTE 55
183
#define WLAN_STATUS_REQUESTED_TCLAS_NOT_SUPPORTED 56
184
#define WLAN_STATUS_INSUFFICIENT_TCLAS_PROCESSING_RESOURCES 57
185
#define WLAN_STATUS_TRY_ANOTHER_BSS 58
186
#define WLAN_STATUS_GAS_ADV_PROTO_NOT_SUPPORTED 59
187
#define WLAN_STATUS_NO_OUTSTANDING_GAS_REQ 60
188
#define WLAN_STATUS_GAS_RESP_NOT_RECEIVED 61
189
#define WLAN_STATUS_STA_TIMED_OUT_WAITING_FOR_GAS_RESP 62
190
#define WLAN_STATUS_GAS_RESP_LARGER_THAN_LIMIT 63
191
#define WLAN_STATUS_REQ_REFUSED_HOME 64
192
#define WLAN_STATUS_ADV_SRV_UNREACHABLE 65
193
#define WLAN_STATUS_REQ_REFUSED_SSPN 67
194
#define WLAN_STATUS_REQ_REFUSED_UNAUTH_ACCESS 68
195
#define WLAN_STATUS_INVALID_RSNE 72
196
#define WLAN_STATUS_U_APSD_COEX_NOT_SUPPORTED 73
197
#define WLAN_STATUS_U_APSD_COEX_MODE_NOT_SUPPORTED 74
198
#define WLAN_STATUS_BAD_INTERVAL_WITH_U_APSD_COEX 75
199
#define WLAN_STATUS_ANTI_CLOGGING_TOKEN_REQ 76
200
#define WLAN_STATUS_FINITE_CYCLIC_GROUP_NOT_SUPPORTED 77
201
#define WLAN_STATUS_CANNOT_FIND_ALT_TBTT 78
202
#define WLAN_STATUS_TRANSMISSION_FAILURE 79
203
#define WLAN_STATUS_REQ_TCLAS_NOT_SUPPORTED 80
204
#define WLAN_STATUS_TCLAS_RESOURCES_EXCHAUSTED 81
205
#define WLAN_STATUS_REJECTED_WITH_SUGGESTED_BSS_TRANSITION 82
206
#define WLAN_STATUS_REJECT_WITH_SCHEDULE 83
207
#define WLAN_STATUS_REJECT_NO_WAKEUP_SPECIFIED 84
208
#define WLAN_STATUS_SUCCESS_POWER_SAVE_MODE 85
209
#define WLAN_STATUS_PENDING_ADMITTING_FST_SESSION 86
210
#define WLAN_STATUS_PERFORMING_FST_NOW 87
211
#define WLAN_STATUS_PENDING_GAP_IN_BA_WINDOW 88
212
#define WLAN_STATUS_REJECT_U_PID_SETTING 89
213
#define WLAN_STATUS_REFUSED_EXTERNAL_REASON 92
214
#define WLAN_STATUS_REFUSED_AP_OUT_OF_MEMORY 93
215
#define WLAN_STATUS_REJECTED_EMERGENCY_SERVICE_NOT_SUPPORTED 94
216
#define WLAN_STATUS_QUERY_RESP_OUTSTANDING 95
217
#define WLAN_STATUS_REJECT_DSE_BAND 96
218
#define WLAN_STATUS_TCLAS_PROCESSING_TERMINATED 97
219
#define WLAN_STATUS_TS_SCHEDULE_CONFLICT 98
220
#define WLAN_STATUS_DENIED_WITH_SUGGESTED_BAND_AND_CHANNEL 99
221
#define WLAN_STATUS_MCCAOP_RESERVATION_CONFLICT 100
222
#define WLAN_STATUS_MAF_LIMIT_EXCEEDED 101
223
#define WLAN_STATUS_MCCA_TRACK_LIMIT_EXCEEDED 102
224
#define WLAN_STATUS_DENIED_DUE_TO_SPECTRUM_MANAGEMENT 103
225
#define WLAN_STATUS_ASSOC_DENIED_NO_VHT 104
226
#define WLAN_STATUS_ENABLEMENT_DENIED 105
227
#define WLAN_STATUS_RESTRICTION_FROM_AUTHORIZED_GDB 106
228
#define WLAN_STATUS_AUTHORIZATION_DEENABLED 107
229
#define WLAN_STATUS_FILS_AUTHENTICATION_FAILURE 112
230
#define WLAN_STATUS_UNKNOWN_AUTHENTICATION_SERVER 113
231
#define WLAN_STATUS_UNKNOWN_PASSWORD_IDENTIFIER 123
232
#define WLAN_STATUS_DENIED_HE_NOT_SUPPORTED 124
233
#define WLAN_STATUS_SAE_HASH_TO_ELEMENT 126
234
#define WLAN_STATUS_SAE_PK 127
235
#define WLAN_STATUS_DENIED_STA_AFF_WITH_MLD_WITH_EXISTING_ASSOC 130
236
#define WLAN_STATUS_EPCS_DENIED_UNAUTHORIZED 131
237
#define WLAN_STATUS_EPCS_DENIED 132
238
#define WLAN_STATUS_DENIED_TID_TO_LINK_MAPPING 133
239
#define WLAN_STATUS_PREFERRED_TID_TO_LINK_MAPPING_SUGGESTED 134
240
#define WLAN_STATUS_DENIED_EHT_NOT_SUPPORTED 135
241
#define WLAN_STATUS_INVALID_PUBLIC_KEY 136
242
#define WLAN_STATUS_PASN_BASE_AKMP_FAILED 137
243
#define WLAN_STATUS_OCI_MISMATCH 138
244
#define WLAN_STATUS_DENIED_TX_LINK_NOT_ACCEPTED 139
245
#define WLAN_STATUS_EPCS_DENIED_VERIFICATION_FAILURE 140
246
#define WLAN_STATUS_DENIED_OPERATION_PARAMETER_UPDATE 141
247
#define WLAN_STATUS_802_1_X_AUTH_FAILED 152
248
#define WLAN_STATUS_802_1_X_AUTH_SUCCESS 153
249
#define WLAN_STATUS_REJECTED_ST_PREP_MAX_PREP_EXCEEDED 154
250
#define WLAN_STATUS_REJECTED_ST_EXEC_EXCEEDED_PREP_TIMEOUT 155
251
#define WLAN_STATUS_DENIED_UHR_NOT_SUPPORTED 157
252
#define WLAN_STATUS_REJECTED_ST_EXEC_TARGET_NOT_PREPARED 158
253
#define WLAN_STATUS_REJECTED_INVALID_SECURITY_PROFILE 159
254
255
/* Reason codes (IEEE Std 802.11-2020, 9.4.1.7, Table 9-90) */
256
#define WLAN_REASON_UNSPECIFIED 1
257
#define WLAN_REASON_PREV_AUTH_NOT_VALID 2
258
#define WLAN_REASON_DEAUTH_LEAVING 3
259
#define WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY 4
260
#define WLAN_REASON_DISASSOC_AP_BUSY 5
261
#define WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA 6
262
#define WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA 7
263
#define WLAN_REASON_DISASSOC_STA_HAS_LEFT 8
264
#define WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9
265
#define WLAN_REASON_PWR_CAPABILITY_NOT_VALID 10
266
#define WLAN_REASON_SUPPORTED_CHANNEL_NOT_VALID 11
267
#define WLAN_REASON_BSS_TRANSITION_DISASSOC 12
268
#define WLAN_REASON_INVALID_IE 13
269
#define WLAN_REASON_MICHAEL_MIC_FAILURE 14
270
#define WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT 15
271
#define WLAN_REASON_GROUP_KEY_UPDATE_TIMEOUT 16
272
#define WLAN_REASON_IE_IN_4WAY_DIFFERS 17
273
#define WLAN_REASON_GROUP_CIPHER_NOT_VALID 18
274
#define WLAN_REASON_PAIRWISE_CIPHER_NOT_VALID 19
275
#define WLAN_REASON_AKMP_NOT_VALID 20
276
#define WLAN_REASON_UNSUPPORTED_RSN_IE_VERSION 21
277
#define WLAN_REASON_INVALID_RSN_IE_CAPAB 22
278
#define WLAN_REASON_IEEE_802_1X_AUTH_FAILED 23
279
#define WLAN_REASON_CIPHER_SUITE_REJECTED 24
280
#define WLAN_REASON_TDLS_TEARDOWN_UNREACHABLE 25
281
#define WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED 26
282
#define WLAN_REASON_SSP_REQUESTED_DISASSOC 27
283
#define WLAN_REASON_NO_SSP_ROAMING_AGREEMENT 28
284
#define WLAN_REASON_BAD_CIPHER_OR_AKM 29
285
#define WLAN_REASON_NOT_AUTHORIZED_THIS_LOCATION 30
286
#define WLAN_REASON_SERVICE_CHANGE_PRECLUDES_TS 31
287
#define WLAN_REASON_UNSPECIFIED_QOS_REASON 32
288
#define WLAN_REASON_NOT_ENOUGH_BANDWIDTH 33
289
#define WLAN_REASON_DISASSOC_LOW_ACK 34
290
#define WLAN_REASON_EXCEEDED_TXOP 35
291
#define WLAN_REASON_STA_LEAVING 36
292
#define WLAN_REASON_END_TS_BA_DLS 37
293
#define WLAN_REASON_UNKNOWN_TS_BA 38
294
#define WLAN_REASON_TIMEOUT 39
295
#define WLAN_REASON_PEERKEY_MISMATCH 45
296
#define WLAN_REASON_AUTHORIZED_ACCESS_LIMIT_REACHED 46
297
#define WLAN_REASON_EXTERNAL_SERVICE_REQUIREMENTS 47
298
#define WLAN_REASON_INVALID_FT_ACTION_FRAME_COUNT 48
299
#define WLAN_REASON_INVALID_PMKID 49
300
#define WLAN_REASON_INVALID_MDE 50
301
#define WLAN_REASON_INVALID_FTE 51
302
#define WLAN_REASON_MESH_PEERING_CANCELLED 52
303
#define WLAN_REASON_MESH_MAX_PEERS 53
304
#define WLAN_REASON_MESH_CONFIG_POLICY_VIOLATION 54
305
#define WLAN_REASON_MESH_CLOSE_RCVD 55
306
#define WLAN_REASON_MESH_MAX_RETRIES 56
307
#define WLAN_REASON_MESH_CONFIRM_TIMEOUT 57
308
#define WLAN_REASON_MESH_INVALID_GTK 58
309
#define WLAN_REASON_MESH_INCONSISTENT_PARAMS 59
310
#define WLAN_REASON_MESH_INVALID_SECURITY_CAP 60
311
#define WLAN_REASON_MESH_PATH_ERROR_NO_PROXY_INFO 61
312
#define WLAN_REASON_MESH_PATH_ERROR_NO_FORWARDING_INFO 62
313
#define WLAN_REASON_MESH_PATH_ERROR_DEST_UNREACHABLE 63
314
#define WLAN_REASON_MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS 64
315
#define WLAN_REASON_MESH_CHANNEL_SWITCH_REGULATORY_REQ 65
316
#define WLAN_REASON_MESH_CHANNEL_SWITCH_UNSPECIFIED 66
317
318
319
/* Element IDs (IEEE Std 802.11-2020, 9.4.2.1, Table 9-92) */
320
#define WLAN_EID_SSID 0
321
#define WLAN_EID_SUPP_RATES 1
322
#define WLAN_EID_DS_PARAMS 3
323
#define WLAN_EID_CF_PARAMS 4
324
#define WLAN_EID_TIM 5
325
#define WLAN_EID_IBSS_PARAMS 6
326
#define WLAN_EID_COUNTRY 7
327
#define WLAN_EID_REQUEST 10
328
#define WLAN_EID_BSS_LOAD 11
329
#define WLAN_EID_EDCA_PARAM_SET 12
330
#define WLAN_EID_TSPEC 13
331
#define WLAN_EID_TCLAS 14
332
#define WLAN_EID_SCHEDULE 15
333
#define WLAN_EID_CHALLENGE 16
334
#define WLAN_EID_PWR_CONSTRAINT 32
335
#define WLAN_EID_PWR_CAPABILITY 33
336
#define WLAN_EID_TPC_REQUEST 34
337
#define WLAN_EID_TPC_REPORT 35
338
#define WLAN_EID_SUPPORTED_CHANNELS 36
339
#define WLAN_EID_CHANNEL_SWITCH 37
340
#define WLAN_EID_MEASURE_REQUEST 38
341
#define WLAN_EID_MEASURE_REPORT 39
342
#define WLAN_EID_QUIET 40
343
#define WLAN_EID_IBSS_DFS 41
344
#define WLAN_EID_ERP_INFO 42
345
#define WLAN_EID_TS_DELAY 43
346
#define WLAN_EID_TCLAS_PROCESSING 44
347
#define WLAN_EID_HT_CAP 45
348
#define WLAN_EID_QOS 46
349
#define WLAN_EID_RSN 48
350
#define WLAN_EID_EXT_SUPP_RATES 50
351
#define WLAN_EID_AP_CHANNEL_REPORT 51
352
#define WLAN_EID_NEIGHBOR_REPORT 52
353
#define WLAN_EID_RCPI 53
354
#define WLAN_EID_MOBILITY_DOMAIN 54
355
#define WLAN_EID_FAST_BSS_TRANSITION 55
356
#define WLAN_EID_TIMEOUT_INTERVAL 56
357
#define WLAN_EID_RIC_DATA 57
358
#define WLAN_EID_DSE_REGISTERED_LOCATION 58
359
#define WLAN_EID_SUPPORTED_OPERATING_CLASSES 59
360
#define WLAN_EID_EXT_CHANSWITCH_ANN 60
361
#define WLAN_EID_HT_OPERATION 61
362
#define WLAN_EID_SECONDARY_CHANNEL_OFFSET 62
363
#define WLAN_EID_BSS_AVERAGE_ACCESS_DELAY 63
364
#define WLAN_EID_ANTENNA 64
365
#define WLAN_EID_RSNI 65
366
#define WLAN_EID_MEASUREMENT_PILOT_TRANSMISSION 66
367
#define WLAN_EID_BSS_AVAILABLE_ADM_CAPA 67
368
#define WLAN_EID_BSS_AC_ACCESS_DELAY 68 /* note: also used by WAPI */
369
#define WLAN_EID_TIME_ADVERTISEMENT 69
370
#define WLAN_EID_RRM_ENABLED_CAPABILITIES 70
371
#define WLAN_EID_MULTIPLE_BSSID 71
372
#define WLAN_EID_20_40_BSS_COEXISTENCE 72
373
#define WLAN_EID_20_40_BSS_INTOLERANT 73
374
#define WLAN_EID_OVERLAPPING_BSS_SCAN_PARAMS 74
375
#define WLAN_EID_RIC_DESCRIPTOR 75
376
#define WLAN_EID_MMIE 76
377
#define WLAN_EID_EVENT_REQUEST 78
378
#define WLAN_EID_EVENT_REPORT 79
379
#define WLAN_EID_DIAGNOSTIC_REQUEST 80
380
#define WLAN_EID_DIAGNOSTIC_REPORT 81
381
#define WLAN_EID_LOCATION_PARAMETERS 82
382
#define WLAN_EID_NONTRANSMITTED_BSSID_CAPA 83
383
#define WLAN_EID_SSID_LIST 84
384
#define WLAN_EID_MULTIPLE_BSSID_INDEX 85
385
#define WLAN_EID_FMS_DESCRIPTOR 86
386
#define WLAN_EID_FMS_REQUEST 87
387
#define WLAN_EID_FMS_RESPONSE 88
388
#define WLAN_EID_QOS_TRAFFIC_CAPABILITY 89
389
#define WLAN_EID_BSS_MAX_IDLE_PERIOD 90
390
#define WLAN_EID_TFS_REQ 91
391
#define WLAN_EID_TFS_RESP 92
392
#define WLAN_EID_WNMSLEEP 93
393
#define WLAN_EID_TIM_BROADCAST_REQUEST 94
394
#define WLAN_EID_TIM_BROADCAST_RESPONSE 95
395
#define WLAN_EID_COLLOCATED_INTERFERENCE_REPORT 96
396
#define WLAN_EID_CHANNEL_USAGE 97
397
#define WLAN_EID_TIME_ZONE 98
398
#define WLAN_EID_DMS_REQUEST 99
399
#define WLAN_EID_DMS_RESPONSE 100
400
#define WLAN_EID_LINK_ID 101
401
#define WLAN_EID_WAKEUP_SCHEDULE 102
402
#define WLAN_EID_CHANNEL_SWITCH_TIMING 104
403
#define WLAN_EID_PTI_CONTROL 105
404
#define WLAN_EID_TPU_BUFFER_STATUS 106
405
#define WLAN_EID_INTERWORKING 107
406
#define WLAN_EID_ADV_PROTO 108
407
#define WLAN_EID_EXPEDITED_BANDWIDTH_REQ 109
408
#define WLAN_EID_QOS_MAP_SET 110
409
#define WLAN_EID_ROAMING_CONSORTIUM 111
410
#define WLAN_EID_EMERGENCY_ALERT_ID 112
411
#define WLAN_EID_MESH_CONFIG 113
412
#define WLAN_EID_MESH_ID 114
413
#define WLAN_EID_MESH_LINK_METRIC_REPORT 115
414
#define WLAN_EID_CONGESTION_NOTIFICATION 116
415
#define WLAN_EID_PEER_MGMT 117
416
#define WLAN_EID_MESH_CHANNEL_SWITCH_PARAMETERS 118
417
#define WLAN_EID_MESH_AWAKE_WINDOW 119
418
#define WLAN_EID_BEACON_TIMING 120
419
#define WLAN_EID_MCCAOP_SETUP_REQUEST 121
420
#define WLAN_EID_MCCAOP_SETUP_REPLY 122
421
#define WLAN_EID_MCCAOP_ADVERTISEMENT 123
422
#define WLAN_EID_MCCAOP_TEARDOWN 124
423
#define WLAN_EID_GANN 125
424
#define WLAN_EID_RANN 126
425
#define WLAN_EID_EXT_CAPAB 127
426
#define WLAN_EID_PREQ 130
427
#define WLAN_EID_PREP 131
428
#define WLAN_EID_PERR 132
429
#define WLAN_EID_PXU 137
430
#define WLAN_EID_PXUC 138
431
#define WLAN_EID_AMPE 139
432
#define WLAN_EID_MIC 140
433
#define WLAN_EID_DESTINATION_URI 141
434
#define WLAN_EID_U_APSD_COEX 142
435
#define WLAN_EID_DMG_WAKEUP_SCHEDULE 143
436
#define WLAN_EID_EXTENDED_SCHEDULE 144
437
#define WLAN_EID_STA_AVAILABILITY 145
438
#define WLAN_EID_DMG_TSPEC 146
439
#define WLAN_EID_NEXT_DMG_ATI 147
440
#define WLAN_EID_DMG_CAPABILITIES 148
441
#define WLAN_EID_DMG_OPERATION 151
442
#define WLAN_EID_DMG_BSS_PARAMETER_CHANGE 152
443
#define WLAN_EID_DMG_BEAM_REFINEMENT 153
444
#define WLAN_EID_CHANNEL_MEASUREMENT_FEEDBACK 154
445
#define WLAN_EID_CCKM 156
446
#define WLAN_EID_AWAKE_WINDOW 157
447
#define WLAN_EID_MULTI_BAND 158
448
#define WLAN_EID_ADDBA_EXTENSION 159
449
#define WLAN_EID_NEXTPCP_LIST 160
450
#define WLAN_EID_PCP_HANDOVER 161
451
#define WLAN_EID_DMG_LINK_MARGIN 162
452
#define WLAN_EID_SWITCHING_STREAM 163
453
#define WLAN_EID_SESSION_TRANSITION 164
454
#define WLAN_EID_DYNAMIC_TONE_PAIRING_REPORT 165
455
#define WLAN_EID_CLUSTER_REPORT 166
456
#define WLAN_EID_REPLAY_CAPABILITIES 167
457
#define WLAN_EID_RELAY_TRANSFER_PARAM_SET 168
458
#define WLAN_EID_BEAMLINK_MAINTENANCE 169
459
#define WLAN_EID_MULTIPLE_MAC_SUBLAYERS 170
460
#define WLAN_EID_U_PID 171
461
#define WLAN_EID_DMG_LINK_ADAPTATION_ACK 172
462
#define WLAN_EID_MCCAOP_ADVERTISEMENT_OVERVIEW 174
463
#define WLAN_EID_QUIET_PERIOD_REQUEST 175
464
#define WLAN_EID_QUIET_PERIOD_RESPONSE 177
465
#define WLAN_EID_QMF_POLICY 181
466
#define WLAN_EID_ECAPC_POLICY 182
467
#define WLAN_EID_CLUSTER_TIME_OFFSET 183
468
#define WLAN_EID_INTRA_ACCESS_CATEGORY_PRIORITY 184
469
#define WLAN_EID_SCS_DESCRIPTOR 185
470
#define WLAN_EID_QLOAD_REPORT 186
471
#define WLAN_EID_HCCA_TXOP_UPDATE_COUNT 187
472
#define WLAN_EID_HIGHER_LAYER_STREAM_ID 188
473
#define WLAN_EID_GCR_GROUP_ADDRESS 189
474
#define WLAN_EID_ANTENNA_SECTOR_ID_PATTERN 190
475
#define WLAN_EID_VHT_CAP 191
476
#define WLAN_EID_VHT_OPERATION 192
477
#define WLAN_EID_EXTENDED_BSS_LOAD 193
478
#define WLAN_EID_WIDE_BW_CHSWITCH  194
479
#define WLAN_EID_TRANSMIT_POWER_ENVELOPE 195
480
#define WLAN_EID_CHANNEL_SWITCH_WRAPPER 196
481
#define WLAN_EID_AID 197
482
#define WLAN_EID_QUIET_CHANNEL 198
483
#define WLAN_EID_OPERATING_MODE_NOTIFICATION 199
484
#define WLAN_EID_UPSIM 200
485
#define WLAN_EID_REDUCED_NEIGHBOR_REPORT 201
486
#define WLAN_EID_TVHT_OPERATION 202
487
#define WLAN_EID_DEVICE_LOCATION 204
488
#define WLAN_EID_WHITE_SPACE_MAP 205
489
#define WLAN_EID_FTM_PARAMETERS 206
490
#define WLAN_EID_S1G_BCN_COMPAT 213
491
#define WLAN_EID_TWT 216
492
#define WLAN_EID_S1G_CAPABILITIES 217
493
#define WLAN_EID_VENDOR_SPECIFIC 221
494
#define WLAN_EID_S1G_OPERATION 232
495
#define WLAN_EID_CAG_NUMBER 237
496
#define WLAN_EID_AP_CSN 239
497
#define WLAN_EID_FILS_INDICATION 240
498
#define WLAN_EID_DILS 241
499
#define WLAN_EID_FRAGMENT 242
500
#define WLAN_EID_RSNX 244
501
#define WLAN_EID_EXTENSION 255
502
503
/* Element ID Extension (EID 255) values */
504
#define WLAN_EID_EXT_ASSOC_DELAY_INFO 1
505
#define WLAN_EID_EXT_FILS_REQ_PARAMS 2
506
#define WLAN_EID_EXT_FILS_KEY_CONFIRM 3
507
#define WLAN_EID_EXT_FILS_SESSION 4
508
#define WLAN_EID_EXT_FILS_HLP_CONTAINER 5
509
#define WLAN_EID_EXT_FILS_IP_ADDR_ASSIGN 6
510
#define WLAN_EID_EXT_KEY_DELIVERY 7
511
#define WLAN_EID_EXT_WRAPPED_DATA 8
512
#define WLAN_EID_EXT_FTM_SYNC_INFO 9
513
#define WLAN_EID_EXT_EXTENDED_REQUEST 10
514
#define WLAN_EID_EXT_ESTIMATED_SERVICE_PARAMS 11
515
#define WLAN_EID_EXT_FILS_PUBLIC_KEY 12
516
#define WLAN_EID_EXT_NONCE 13
517
#define WLAN_EID_EXT_FUTURE_CHANNEL_GUIDANCE 14
518
#define WLAN_EID_EXT_OWE_DH_PARAM 32
519
#define WLAN_EID_EXT_PASSWORD_IDENTIFIER 33
520
#define WLAN_EID_EXT_HE_CAPABILITIES 35
521
#define WLAN_EID_EXT_HE_OPERATION 36
522
#define WLAN_EID_EXT_HE_MU_EDCA_PARAMS 38
523
#define WLAN_EID_EXT_SPATIAL_REUSE 39
524
#define WLAN_EID_EXT_COLOR_CHANGE_ANNOUNCEMENT 42
525
#define WLAN_EID_EXT_MAX_CHANNEL_SWITCH_TIME 52
526
#define WLAN_EID_EXT_OCV_OCI 54
527
#define WLAN_EID_EXT_MULTIPLE_BSSID_CONFIGURATION 55
528
#define WLAN_EID_EXT_NON_INHERITANCE 56
529
#define WLAN_EID_EXT_KNOWN_BSSID 57
530
#define WLAN_EID_EXT_SHORT_SSID_LIST 58
531
#define WLAN_EID_EXT_HE_6GHZ_BAND_CAP 59
532
#define WLAN_EID_EXT_EDMG_CAPABILITIES 61
533
#define WLAN_EID_EXT_EDMG_OPERATION 62
534
#define WLAN_EID_EXT_MSCS_DESCRIPTOR 88
535
#define WLAN_EID_EXT_TCLAS_MASK 89
536
#define WLAN_EID_EXT_REJECTED_GROUPS 92
537
#define WLAN_EID_EXT_ANTI_CLOGGING_TOKEN 93
538
#define WLAN_EID_EXT_PASN_PARAMS 100
539
#define WLAN_EID_EXT_EHT_OPERATION 106
540
#define WLAN_EID_EXT_MULTI_LINK 107
541
#define WLAN_EID_EXT_EHT_CAPABILITIES 108
542
#define WLAN_EID_EXT_TID_TO_LINK_MAPPING 109
543
#define WLAN_EID_EXT_MULTI_LINK_TRAFFIC_INDICATION 110
544
#define WLAN_EID_EXT_QOS_CHARACTERISTICS 113
545
#define WLAN_EID_EXT_AKM_SUITE_SELECTOR 114
546
#define WLAN_EID_EXT_BANDWIDTH_INDICATION 135
547
#define WLAN_EID_EXT_KNOWN_STA_IDENTIFICATION 136
548
#define WLAN_EID_EXT_PASN_ENCRYPTED_DATA 140
549
#define WLAN_EID_EXT_UHR_OPERATION 151
550
#define WLAN_EID_EXT_UHR_CAPABILITIES 152
551
#define WLAN_EID_EXT_MAPC 153
552
#define WLAN_EID_EXT_SMD_INFO 154
553
#define WLAN_EID_EXT_SMD_BSS_TR_PARAMS 155
554
#define WLAN_EID_EXT_EXT_CHAN_USAGE 156
555
#define WLAN_EID_EXT_UHR_MODE_CHANGE 157
556
#define WLAN_EID_EXT_UHR_PARAMS_UPDATE 158
557
#define WLAN_EID_EXT_TX_POWER_INDICATION 159
558
#define WLAN_EID_EXT_SUPPORTED_GROUPS 161
559
#define WLAN_EID_EXT_SECURITY_PROFILE 162
560
561
/* Extended Capabilities field */
562
#define WLAN_EXT_CAPAB_20_40_COEX 0
563
#define WLAN_EXT_CAPAB_GLK 1
564
#define WLAN_EXT_CAPAB_EXT_CHAN_SWITCH 2
565
#define WLAN_EXT_CAPAB_GLK_GCR 3
566
#define WLAN_EXT_CAPAB_PSMP 4
567
/* 5 - Reserved */
568
#define WLAN_EXT_CAPAB_S_PSMP 6
569
#define WLAN_EXT_CAPAB_EVENT 7
570
#define WLAN_EXT_CAPAB_DIAGNOSTICS 8
571
#define WLAN_EXT_CAPAB_MULTICAST_DIAGNOSTICS 9
572
#define WLAN_EXT_CAPAB_LOCATION_TRACKING 10
573
#define WLAN_EXT_CAPAB_FMS 11
574
#define WLAN_EXT_CAPAB_PROXY_ARP 12
575
#define WLAN_EXT_CAPAB_COLL_INTERF_REP 13
576
#define WLAN_EXT_CAPAB_CIVIC_LOCATION 14
577
#define WLAN_EXT_CAPAB_GEOSPATIAL_LOCATION 15
578
#define WLAN_EXT_CAPAB_TFS 16
579
#define WLAN_EXT_CAPAB_WNM_SLEEP_MODE 17
580
#define WLAN_EXT_CAPAB_TIM_BROADCAST 18
581
#define WLAN_EXT_CAPAB_BSS_TRANSITION 19
582
#define WLAN_EXT_CAPAB_QOS_TRAFFIC 20
583
#define WLAN_EXT_CAPAB_AC_STA_COUNT 21
584
#define WLAN_EXT_CAPAB_MULTIPLE_BSSID 22
585
#define WLAN_EXT_CAPAB_TIMING_MEASUREMENT 23
586
#define WLAN_EXT_CAPAB_CHANNEL_USAGE 24
587
#define WLAN_EXT_CAPAB_SSID_LIST 25
588
#define WLAN_EXT_CAPAB_DMS 26
589
#define WLAN_EXT_CAPAB_UTF_TSF_OFFSET 27
590
#define WLAN_EXT_CAPAB_TPU_BUFFER_STA 28
591
#define WLAN_EXT_CAPAB_TDLS_PEER_PSM 29
592
#define WLAN_EXT_CAPAB_TDLS_CHANNEL_SWITCH 30
593
#define WLAN_EXT_CAPAB_INTERWORKING 31
594
#define WLAN_EXT_CAPAB_QOS_MAP 32
595
#define WLAN_EXT_CAPAB_EBR 33
596
#define WLAN_EXT_CAPAB_SSPN_INTERFACE 34
597
/* 35 - Reserved */
598
#define WLAN_EXT_CAPAB_MSGCF 36
599
#define WLAN_EXT_CAPAB_TDLS 37
600
#define WLAN_EXT_CAPAB_TDLS_PROHIBITED 38
601
#define WLAN_EXT_CAPAB_TDLS_CHANNEL_SWITCH_PROHIBITED 39
602
#define WLAN_EXT_CAPAB_REJECT_UNADMITTED_FRAME 40
603
/* 41-43 - Service Interval Granularity */
604
#define WLAN_EXT_CAPAB_IDENTIFIER_LOCATION 44
605
#define WLAN_EXT_CAPAB_U_APSD_COEX 45
606
#define WLAN_EXT_CAPAB_WNM_NOTIFCATION 46
607
#define WLAN_EXT_CAPAB_QAB 47
608
#define WLAN_EXT_CAPAB_UTF_8_SSID 48
609
#define WLAN_EXT_CAPAB_QMF 49
610
#define WLAN_EXT_CAPAB_QMF_RECONFIG 50
611
#define WLAN_EXT_CAPAB_ROBUST_AV_STREAMING 51
612
#define WLAN_EXT_CAPAB_ADVANCED_GCR 52
613
#define WLAN_EXT_CAPAB_MESH_GCR 53
614
#define WLAN_EXT_CAPAB_SCS 54
615
#define WLAN_EXT_CAPAB_QLOAD_REPORT 55
616
#define WLAN_EXT_CAPAB_ALT_EDCA 56
617
#define WLAN_EXT_CAPAB_UNPROT_TXOP_NEG 57
618
#define WLAN_EXT_CAPAB_PROT_TXOP_NEG 58
619
/* 59 - Reserved */
620
#define WLAN_EXT_CAPAB_PROT_QLOAD_REPORT 60
621
#define WLAN_EXT_CAPAB_TDLS_WIDER_BW 61
622
#define WLAN_EXT_CAPAB_OPMODE_NOTIF 62
623
/* 63-64 - Max Number of MSDUs In A-MSDU */
624
#define WLAN_EXT_CAPAB_CHANNEL_SCHEDULE_MGMT 65
625
#define WLAN_EXT_CAPAB_GEODB_INBAND_ENABLING_SIGNAL 66
626
#define WLAN_EXT_CAPAB_NETWORK_CHANNEL_CTRL 67
627
#define WLAN_EXT_CAPAB_WHITE_SPACE_MAP 68
628
#define WLAN_EXT_CAPAB_CHANNEL_AVAIL_QUERY 69
629
#define WLAN_EXT_CAPAB_FTM_RESPONDER 70
630
#define WLAN_EXT_CAPAB_FTM_INITIATOR 71
631
#define WLAN_EXT_CAPAB_FILS 72
632
#define WLAN_EXT_CAPAB_EXT_SPECTRUM_MGMT 73
633
#define WLAN_EXT_CAPAB_FUTURE_CHANNEL_GUIDANCE 74
634
#define WLAN_EXT_CAPAB_PAD 75
635
/* 76-79 - Reserved */
636
#define WLAN_EXT_CAPAB_COMPLETE_NON_TX_BSSID_PROFILE 80
637
#define WLAN_EXT_CAPAB_SAE_PW_ID 81
638
#define WLAN_EXT_CAPAB_SAE_PW_ID_EXCLUSIVELY 82
639
#define WLAN_EXT_CAPAB_BEACON_PROTECTION 84
640
#define WLAN_EXT_CAPAB_MSCS 85
641
#define WLAN_EXT_CAPAB_SAE_PK_EXCLUSIVELY 88
642
#define WLAN_EXT_CAPAB_KNOWN_STA_IDENTIFICATION 102
643
644
/* Extended RSN Capabilities */
645
/* bits 0-3: Field length (n-1) */
646
#define WLAN_RSNX_CAPAB_PROTECTED_TWT 4
647
#define WLAN_RSNX_CAPAB_SAE_H2E 5
648
#define WLAN_RSNX_CAPAB_SAE_PK 6
649
#define WLAN_RSNX_CAPAB_SECURE_LTF 8
650
#define WLAN_RSNX_CAPAB_SECURE_RTT 9
651
#define WLAN_RSNX_CAPAB_URNM_MFPR_X20 10
652
#define WLAN_RSNX_CAPAB_SPP_A_MSDU 14
653
#define WLAN_RSNX_CAPAB_URNM_MFPR 15
654
#define WLAN_RSNX_CAPAB_KEK_IN_PASN 18
655
#define WLAN_RSNX_CAPAB_SSID_PROTECTION 21
656
#define WLAN_RSNX_CAPAB_ASSOC_FRAME_ENCRYPTION 27
657
#define WLAN_RSNX_CAPAB_802_1X_IN_AUTH_FRAMES 28
658
#define WLAN_RSNX_CAPAB_PMKSA_CACHING_PRIVACY 29
659
#define WLAN_RSNX_CAPAB_SAE_PW_ID_CHANGE 34
660
#define WLAN_RSNX_CAPAB_UNAUTH_EPPKE 36
661
662
/* Multiple BSSID element subelements */
663
#define WLAN_MBSSID_SUBELEMENT_NONTRANSMITTED_BSSID_PROFILE 0
664
665
/* Action frame categories (IEEE Std 802.11-2020, 9.4.1.11, Table 9-51) */
666
#define WLAN_ACTION_SPECTRUM_MGMT 0
667
#define WLAN_ACTION_QOS 1
668
#define WLAN_ACTION_DLS 2
669
#define WLAN_ACTION_BLOCK_ACK 3
670
#define WLAN_ACTION_PUBLIC 4
671
#define WLAN_ACTION_RADIO_MEASUREMENT 5
672
#define WLAN_ACTION_FT 6
673
#define WLAN_ACTION_HT 7
674
#define WLAN_ACTION_SA_QUERY 8
675
#define WLAN_ACTION_PROTECTED_DUAL 9
676
#define WLAN_ACTION_WNM 10
677
#define WLAN_ACTION_UNPROTECTED_WNM 11
678
#define WLAN_ACTION_TDLS 12
679
#define WLAN_ACTION_MESH 13
680
#define WLAN_ACTION_MULTIHOP 14
681
#define WLAN_ACTION_SELF_PROTECTED 15
682
#define WLAN_ACTION_DMG 16
683
#define WLAN_ACTION_WMM 17 /* WMM Specification 1.1 */
684
#define WLAN_ACTION_FST 18
685
#define WLAN_ACTION_ROBUST_AV_STREAMING 19
686
#define WLAN_ACTION_UNPROTECTED_DMG 20
687
#define WLAN_ACTION_VHT 21
688
#define WLAN_ACTION_UNPROTECTED_S1G 22
689
#define WLAN_ACTION_S1G 23
690
#define WLAN_ACTION_FLOW_CONTROL 24
691
#define WLAN_ACTION_CTRL_RESP_MCS_NEG 25
692
#define WLAN_ACTION_FILS 26
693
#define WLAN_ACTION_CDMG 27
694
#define WLAN_ACTION_CMMG 28
695
#define WLAN_ACTION_GLK 29
696
#define WLAN_ACTION_HE 30
697
#define WLAN_ACTION_PROTECTED_HE 31
698
#define WLAN_ACTION_WUR 32
699
#define WLAN_ACTION_PROTECTED_FTM 34
700
#define WLAN_ACTION_EHT 36
701
#define WLAN_ACTION_PROTECTED_EHT 37
702
#define WLAN_ACTION_PROTECTED_UHR 43
703
#define WLAN_ACTION_VENDOR_SPECIFIC_PROTECTED 126
704
#define WLAN_ACTION_VENDOR_SPECIFIC 127
705
/* Note: 128-255 used to report errors by setting category | 0x80 */
706
707
/* Public action codes (IEEE Std 802.11-2020, 9.6.7.1, Table 9-364) */
708
#define WLAN_PA_20_40_BSS_COEX 0
709
#define WLAN_PA_DSE_ENABLEMENT 1
710
#define WLAN_PA_DSE_DEENABLEMENT 2
711
#define WLAN_PA_DSE_REG_LOCATION_ANNOUNCE 3
712
#define WLAN_PA_EXT_CHANNEL_SWITCH_ANNOUNCE 4
713
#define WLAN_PA_DSE_MEASUREMENT_REQ 5
714
#define WLAN_PA_DSE_MEASUREMENT_RESP 6
715
#define WLAN_PA_MEASUREMENT_PILOT 7
716
#define WLAN_PA_DSE_POWER_CONSTRAINT 8
717
#define WLAN_PA_VENDOR_SPECIFIC 9
718
#define WLAN_PA_GAS_INITIAL_REQ 10
719
#define WLAN_PA_GAS_INITIAL_RESP 11
720
#define WLAN_PA_GAS_COMEBACK_REQ 12
721
#define WLAN_PA_GAS_COMEBACK_RESP 13
722
#define WLAN_TDLS_DISCOVERY_RESPONSE 14
723
#define WLAN_PA_LOCATION_TRACK_NOTIFICATION 15
724
#define WLAN_PA_QAB_REQUEST_FRAME 16
725
#define WLAN_PA_QAB_RESPONSE_FRAME 17
726
#define WLAN_PA_QMF_POLICY 18
727
#define WLAN_PA_QMF_POLICY_CHANGE 19
728
#define WLAN_PA_QLOAD_REQUEST 20
729
#define WLAN_PA_QLOAD_REPORT 21
730
#define WLAN_PA_HCCA_TXOP_ADVERTISEMENT 22
731
#define WLAN_PA_HCCA_TXOP_RESPONSE 23
732
#define WLAN_PA_PUBLIC_KEY 24
733
#define WLAN_PA_CHANNEL_AVAILABILITY_QUERY 25
734
#define WLAN_PA_CHANNEL_SCHEDULE_MANAGEMENT 26
735
#define WLAN_PA_CONTACT_VERIFICATION_SIGNAL 27
736
#define WLAN_PA_GDD_ENABLEMENT_REQ 28
737
#define WLAN_PA_GDD_ENABLEMENT_RESP 29
738
#define WLAN_PA_NETWORK_CHANNEL_CONTROL 30
739
#define WLAN_PA_WHITE_SPACE_MAP_ANNOUNCEMENT 31
740
#define WLAN_PA_FTM_REQUEST 32
741
#define WLAN_PA_FTM 33
742
#define WLAN_PA_FILS_DISCOVERY 34
743
#define WLAN_PA_LOCATION_MEASUREMENT_REPORT 47
744
745
/* HT Action field values (IEEE Std 802.11-2024, 9.6.11.1, Table 9-517) */
746
#define WLAN_HT_ACTION_NOTIFY_CHANWIDTH 0
747
#define WLAN_HT_ACTION_SMPS 1
748
#define WLAN_HT_ACTION_CSI 4
749
#define WLAN_HT_ACTION_NONCOMPRESSED_BF 5
750
#define WLAN_HT_ACTION_COMPRESSED_BF 6
751
#define WLAN_HT_ACTION_ASEL_IDX_FEEDBACK 7
752
753
/* VHT Action field values (IEEE Std 802.11-2024, 9.6.22.1, Table 9-605) */
754
#define WLAN_VHT_ACTION_COMPRESSED_BF 0
755
#define WLAN_VHT_ACTION_GROUP_ID_MGMT 1
756
#define WLAN_VHT_ACTION_OPMODE_NOTIF 2
757
758
/* Protected Dual of Public Action frames (IEEE Std 802.11-2020, 9.6.10,
759
 * Table 9-404) */
760
#define WLAN_PROT_DSE_ENABLEMENT 1
761
#define WLAN_PROT_DSE_DEENABLEMENT 2
762
#define WLAN_PROT_EXT_CSA 4
763
#define WLAN_PROT_MEASUREMENT_REQ 5
764
#define WLAN_PROT_MEASUREMENT_REPORT 6
765
#define WLAN_PROT_DSE_POWER_CONSTRAINT 8
766
#define WLAN_PROT_VENDOR_SPECIFIC 9
767
#define WLAN_PROT_GAS_INITIAL_REQ 10
768
#define WLAN_PROT_GAS_INITIAL_RESP 11
769
#define WLAN_PROT_GAS_COMEBACK_REQ 12
770
#define WLAN_PROT_GAS_COMEBACK_RESP 13
771
#define WLAN_PROT_QAB_REQUEST_FRAME 16
772
#define WLAN_PROT_QAB_RESPONSE_FRAME 17
773
#define WLAN_PROT_QMF_POLICY 18
774
#define WLAN_PROT_QMF_POLICY_CHANGE 19
775
#define WLAN_PROT_QLOAD_REQUEST 20
776
#define WLAN_PROT_QLOAD_REPORT 21
777
#define WLAN_PROT_HCCA_TXOP_ADVERTISEMENT 22
778
#define WLAN_PROT_HCCA_TXOP_RESPONSE 23
779
#define WLAN_PROT_CHANNEL_AVAILABILITY_QUERY 25
780
#define WLAN_PROT_CHANNEL_SCHEDULE_MANAGEMENT 26
781
#define WLAN_PROT_CONTACT_VERIFICATION_SIGNAL 27
782
#define WLAN_PROT_GDD_ENABLEMENT_REQ 28
783
#define WLAN_PROT_GDD_ENABLEMENT_RESP 29
784
#define WLAN_PROT_NETWORK_CHANNEL_CONTROL 30
785
#define WLAN_PROT_WHITE_SPACE_MAP_ANNOUNCEMENT 31
786
787
/* SA Query Action frame (IEEE Std 802.11-2020, 9.6.9) */
788
#define WLAN_SA_QUERY_REQUEST 0
789
#define WLAN_SA_QUERY_RESPONSE 1
790
791
#define WLAN_SA_QUERY_TR_ID_LEN 2
792
793
/* TDLS action codes */
794
#define WLAN_TDLS_SETUP_REQUEST 0
795
#define WLAN_TDLS_SETUP_RESPONSE 1
796
#define WLAN_TDLS_SETUP_CONFIRM 2
797
#define WLAN_TDLS_TEARDOWN 3
798
#define WLAN_TDLS_PEER_TRAFFIC_INDICATION 4
799
#define WLAN_TDLS_CHANNEL_SWITCH_REQUEST 5
800
#define WLAN_TDLS_CHANNEL_SWITCH_RESPONSE 6
801
#define WLAN_TDLS_PEER_PSM_REQUEST 7
802
#define WLAN_TDLS_PEER_PSM_RESPONSE 8
803
#define WLAN_TDLS_PEER_TRAFFIC_RESPONSE 9
804
#define WLAN_TDLS_DISCOVERY_REQUEST 10
805
806
/* Radio Measurement Action codes */
807
#define WLAN_RRM_RADIO_MEASUREMENT_REQUEST 0
808
#define WLAN_RRM_RADIO_MEASUREMENT_REPORT 1
809
#define WLAN_RRM_LINK_MEASUREMENT_REQUEST 2
810
#define WLAN_RRM_LINK_MEASUREMENT_REPORT 3
811
#define WLAN_RRM_NEIGHBOR_REPORT_REQUEST 4
812
#define WLAN_RRM_NEIGHBOR_REPORT_RESPONSE 5
813
814
/* Protected Fine Timing Frame Action Field value */
815
#define WLAN_PROT_FTM_REQUEST 1
816
#define WLAN_PROT_FTM 2
817
#define WLAN_PROT_FTM_REPORT 3
818
819
/* Protected EHT Action field values (IEEE Std 802.11be-2024, Table 9-658d) */
820
#define WLAN_PROT_EHT_T2L_MAPPING_REQUEST 0
821
#define WLAN_PROT_EHT_T2L_MAPPING_RESPONSE 1
822
#define WLAN_PROT_EHT_T2L_MAPPING_TEARDOWN 2
823
#define WLAN_PROT_EHT_EPCS_ENABLE_REQUEST 3
824
#define WLAN_PROT_EHT_EPCS_ENABLE_RESPONSE 4
825
#define WLAN_PROT_EHT_EPCS_ENABLE_TEARDOWN 5
826
#define WLAN_PROT_EHT_EML_OPMODE_NOTIF 6
827
#define WLAN_PROT_EHT_LINK_RECOMMENDATION 7
828
#define WLAN_PROT_EHT_MLO_UPDATE_REQUEST 8
829
#define WLAN_PROT_EHT_MLO_UPDATE_RESPONSE 9
830
#define WLAN_PROT_EHT_LINK_RECONFIG_NOTIFY 10
831
#define WLAN_PROT_EHT_LINK_RECONFIG_REQUEST 11
832
#define WLAN_PROT_EHT_LINK_RECONFIG_RESPONSE 12
833
834
/* Radio Measurement capabilities (from RM Enabled Capabilities element)
835
 * IEEE Std 802.11-2020, 9.4.2.44, Table 9-179 */
836
/* byte 1 (out of 5) */
837
#define WLAN_RRM_CAPS_LINK_MEASUREMENT BIT(0)
838
#define WLAN_RRM_CAPS_NEIGHBOR_REPORT BIT(1)
839
#define WLAN_RRM_CAPS_BEACON_REPORT_PASSIVE BIT(4)
840
#define WLAN_RRM_CAPS_BEACON_REPORT_ACTIVE BIT(5)
841
#define WLAN_RRM_CAPS_BEACON_REPORT_TABLE BIT(6)
842
/* byte 2 (out of 5) */
843
#define WLAN_RRM_CAPS_LCI_MEASUREMENT BIT(4)
844
/* byte 5 (out of 5) */
845
#define WLAN_RRM_CAPS_FTM_RANGE_REPORT BIT(2)
846
#define WLAN_RRM_CAPS_CIVIC_LOCATION_MEASUREMENT BIT(3)
847
848
/*
849
 * IEEE Std 802.11-2020, 9.4.2.20.19 (Fine Timing Measurement Range
850
 * request) - Minimum AP Count
851
 */
852
#define WLAN_RRM_RANGE_REQ_MAX_MIN_AP 15
853
854
/* Timeout Interval Type */
855
#define WLAN_TIMEOUT_REASSOC_DEADLINE 1
856
#define WLAN_TIMEOUT_KEY_LIFETIME 2
857
#define WLAN_TIMEOUT_ASSOC_COMEBACK 3
858
859
/* Interworking element (IEEE Std 802.11-2020, 9.4.2.91) -
860
 * Access Network Options */
861
#define INTERWORKING_ANO_ACCESS_NETWORK_MASK 0x0f
862
#define INTERWORKING_ANO_INTERNET 0x10
863
#define INTERWORKING_ANO_ASRA 0x20
864
#define INTERWORKING_ANO_ESR 0x40
865
#define INTERWORKING_ANO_UESA 0x80
866
867
#define INTERWORKING_ANT_PRIVATE 0
868
#define INTERWORKING_ANT_PRIVATE_WITH_GUEST 1
869
#define INTERWORKING_ANT_CHARGEABLE_PUBLIC 2
870
#define INTERWORKING_ANT_FREE_PUBLIC 3
871
#define INTERWORKING_ANT_PERSONAL_DEVICE 4
872
#define INTERWORKING_ANT_EMERGENCY_SERVICES 5
873
#define INTERWORKING_ANT_TEST 6
874
#define INTERWORKING_ANT_WILDCARD 15
875
876
/* Advertisement Protocol ID definitions (IEEE Std 802.11-2020, Table 9-237) */
877
enum adv_proto_id {
878
  ACCESS_NETWORK_QUERY_PROTOCOL = 0,
879
  MIH_INFO_SERVICE = 1,
880
  MIH_CMD_AND_EVENT_DISCOVERY = 2,
881
  EMERGENCY_ALERT_SYSTEM = 3,
882
  REGISTERED_LOCATION_QUERY_PROTO = 4,
883
  ADV_PROTO_VENDOR_SPECIFIC = 221
884
};
885
886
/* ANQP-element definitions (IEEE Std 802.11-2020, Table 9-331) */
887
enum anqp_info_id {
888
  ANQP_QUERY_LIST = 256,
889
  ANQP_CAPABILITY_LIST = 257,
890
  ANQP_VENUE_NAME = 258,
891
  ANQP_EMERGENCY_CALL_NUMBER = 259,
892
  ANQP_NETWORK_AUTH_TYPE = 260,
893
  ANQP_ROAMING_CONSORTIUM = 261,
894
  ANQP_IP_ADDR_TYPE_AVAILABILITY = 262,
895
  ANQP_NAI_REALM = 263,
896
  ANQP_3GPP_CELLULAR_NETWORK = 264,
897
  ANQP_AP_GEOSPATIAL_LOCATION = 265,
898
  ANQP_AP_CIVIC_LOCATION = 266,
899
  ANQP_AP_LOCATION_PUBLIC_URI = 267,
900
  ANQP_DOMAIN_NAME = 268,
901
  ANQP_EMERGENCY_ALERT_URI = 269,
902
  ANQP_TDLS_CAPABILITY = 270,
903
  ANQP_EMERGENCY_NAI = 271,
904
  ANQP_NEIGHBOR_REPORT = 272,
905
  ANQP_QUERY_AP_LIST = 273,
906
  ANQP_AP_LIST_RESPONSE = 274,
907
  ANQP_FILS_REALM_INFO = 275,
908
  ANQP_CAG = 276,
909
  ANQP_VENUE_URL = 277,
910
  ANQP_ADVICE_OF_CHARGE = 278,
911
  ANQP_LOCAL_CONTENT = 279,
912
  ANQP_NETWORK_AUTH_TYPE_TIMESTAMP = 280,
913
  ANQP_VENDOR_SPECIFIC = 56797
914
};
915
916
/* NAI Realm list - EAP Method subfield - Authentication Parameter ID */
917
enum nai_realm_eap_auth_param {
918
  NAI_REALM_EAP_AUTH_EXPANDED_EAP_METHOD = 1,
919
  NAI_REALM_EAP_AUTH_NON_EAP_INNER_AUTH = 2,
920
  NAI_REALM_EAP_AUTH_INNER_AUTH_EAP_METHOD = 3,
921
  NAI_REALM_EAP_AUTH_EXPANDED_INNER_EAP_METHOD = 4,
922
  NAI_REALM_EAP_AUTH_CRED_TYPE = 5,
923
  NAI_REALM_EAP_AUTH_TUNNELED_CRED_TYPE = 6,
924
  NAI_REALM_EAP_AUTH_VENDOR_SPECIFIC = 221
925
};
926
927
enum nai_realm_eap_auth_inner_non_eap {
928
  NAI_REALM_INNER_NON_EAP_PAP = 1,
929
  NAI_REALM_INNER_NON_EAP_CHAP = 2,
930
  NAI_REALM_INNER_NON_EAP_MSCHAP = 3,
931
  NAI_REALM_INNER_NON_EAP_MSCHAPV2 = 4
932
};
933
934
enum nai_realm_eap_cred_type {
935
  NAI_REALM_CRED_TYPE_SIM = 1,
936
  NAI_REALM_CRED_TYPE_USIM = 2,
937
  NAI_REALM_CRED_TYPE_NFC_SECURE_ELEMENT = 3,
938
  NAI_REALM_CRED_TYPE_HARDWARE_TOKEN = 4,
939
  NAI_REALM_CRED_TYPE_SOFTOKEN = 5,
940
  NAI_REALM_CRED_TYPE_CERTIFICATE = 6,
941
  NAI_REALM_CRED_TYPE_USERNAME_PASSWORD = 7,
942
  NAI_REALM_CRED_TYPE_NONE = 8,
943
  NAI_REALM_CRED_TYPE_ANONYMOUS = 9,
944
  NAI_REALM_CRED_TYPE_VENDOR_SPECIFIC = 10
945
};
946
947
/* Unprotected S1G Action field values for WLAN_ACTION_S1G */
948
#define S1G_ACT_AID_SWITCH_REQUEST   0
949
#define S1G_ACT_AID_SWITCH_RESPONSE  1
950
#define S1G_ACT_SYNC_CONTROL         2
951
#define S1G_ACT_STA_INFO_ANNOUNCE    3
952
#define S1G_ACT_EDCA_PARAM_SET       4
953
#define S1G_ACT_EL_OPERATION         5
954
#define S1G_ACT_TWT_SETUP            6
955
#define S1G_ACT_TWT_TEARDOWN         7
956
#define S1G_ACT_SECT_GROUP_ID_LIST   8
957
#define S1G_ACT_SECT_ID_FEEDBACK     9
958
#define S1G_ACT_TWT_INFORMATION      11
959
960
/*
961
 * IEEE Std 802.11-2020, Table 9-98 - Measurement type definitions for
962
 * measurement requests
963
 */
964
enum measure_type {
965
  MEASURE_TYPE_BASIC = 0,
966
  MEASURE_TYPE_CCA = 1,
967
  MEASURE_TYPE_RPI_HIST = 2,
968
  MEASURE_TYPE_CHANNEL_LOAD = 3,
969
  MEASURE_TYPE_NOISE_HIST = 4,
970
  MEASURE_TYPE_BEACON = 5,
971
  MEASURE_TYPE_FRAME = 6,
972
  MEASURE_TYPE_STA_STATISTICS = 7,
973
  MEASURE_TYPE_LCI = 8,
974
  MEASURE_TYPE_TRANSMIT_STREAM = 9,
975
  MEASURE_TYPE_MULTICAST_DIAG = 10,
976
  MEASURE_TYPE_LOCATION_CIVIC = 11,
977
  MEASURE_TYPE_LOCATION_ID = 12,
978
  MEASURE_TYPE_DIRECTIONAL_CHAN_QUALITY = 13,
979
  MEASURE_TYPE_DIRECTIONAL_MEASURE = 14,
980
  MEASURE_TYPE_DIRECTIONAL_STATS = 15,
981
  MEASURE_TYPE_FTM_RANGE = 16,
982
  MEASURE_TYPE_MEASURE_PAUSE = 255,
983
};
984
985
/* IEEE Std 802.11-2020, Table 9-110 - Location Subject field definition */
986
enum location_subject {
987
  LOCATION_SUBJECT_LOCAL = 0,
988
  LOCATION_SUBJECT_REMOTE = 1,
989
  LOCATION_SUBJECT_3RD_PARTY = 2,
990
};
991
992
/*
993
 * IEEE Std 802.11-2020, Table 9-111 - Optional subelement IDs for LCI request
994
 */
995
enum lci_req_subelem {
996
  LCI_REQ_SUBELEM_AZIMUTH_REQ = 1,
997
  LCI_REQ_SUBELEM_ORIGINATOR_MAC_ADDR = 2,
998
  LCI_REQ_SUBELEM_TARGET_MAC_ADDR = 3,
999
  LCI_REQ_SUBELEM_MAX_AGE = 4,
1000
};
1001
1002
#define NONCE_LEN 16
1003
#define FILS_SESSION_LEN 8
1004
#define FILS_CACHE_ID_LEN 2
1005
#define FILS_MAX_KEY_AUTH_LEN 48
1006
1007
#ifdef _MSC_VER
1008
#pragma pack(push, 1)
1009
#endif /* _MSC_VER */
1010
1011
struct ieee80211_hdr {
1012
  le16 frame_control;
1013
  le16 duration_id;
1014
  u8 addr1[6];
1015
  u8 addr2[6];
1016
  u8 addr3[6];
1017
  le16 seq_ctrl;
1018
  /* followed by 'u8 addr4[6];' if ToDS and FromDS is set in data frame
1019
   */
1020
} STRUCT_PACKED;
1021
1022
#define IEEE80211_DA_FROMDS addr1
1023
#define IEEE80211_BSSID_FROMDS addr2
1024
#define IEEE80211_SA_FROMDS addr3
1025
1026
#define IEEE80211_HDRLEN (sizeof(struct ieee80211_hdr))
1027
1028
struct ieee80211_hdr_s1g_beacon {
1029
  le16 frame_control;
1030
  le16 duration_id;
1031
  u8 sa[6];
1032
  u8 timestamp[4];
1033
  u8 change_seq[1];
1034
  /* followed by:
1035
   *   'u8 next_tbtt[3];' if the Next TBTT Present field in the
1036
   *      Frame Control field is 1
1037
   *   'u8 compressed_ssid[4];' if the Compressed SSID Present field in
1038
   *      the Frame Control is 1
1039
   *   'u8 ano[1];' if the ANO field in the Frame Control field is 1
1040
   */
1041
} STRUCT_PACKED;
1042
1043
#define IEEE80211_HDRLEN_S1G_BEACON (sizeof(struct ieee80211_hdr_s1g_beacon))
1044
1045
#define IEEE80211_FC(type, stype) host_to_le16((type << 2) | (stype << 4))
1046
1047
struct ieee80211_mgmt {
1048
  le16 frame_control;
1049
  le16 duration;
1050
  u8 da[6];
1051
  u8 sa[6];
1052
  u8 bssid[6];
1053
  le16 seq_ctrl;
1054
  union {
1055
    struct {
1056
      le16 auth_alg;
1057
      le16 auth_transaction;
1058
      le16 status_code;
1059
      /* possibly followed by Challenge text */
1060
      u8 variable[];
1061
    } STRUCT_PACKED auth;
1062
    struct {
1063
      le16 reason_code;
1064
      u8 variable[];
1065
    } STRUCT_PACKED deauth;
1066
    struct {
1067
      le16 capab_info;
1068
      le16 listen_interval;
1069
      /* followed by SSID and Supported rates */
1070
      u8 variable[];
1071
    } STRUCT_PACKED assoc_req;
1072
    struct {
1073
      le16 capab_info;
1074
      le16 status_code;
1075
      le16 aid;
1076
      /* followed by Supported rates */
1077
      u8 variable[];
1078
    } STRUCT_PACKED assoc_resp, reassoc_resp;
1079
    struct {
1080
      le16 capab_info;
1081
      le16 listen_interval;
1082
      u8 current_ap[6];
1083
      /* followed by SSID and Supported rates */
1084
      u8 variable[];
1085
    } STRUCT_PACKED reassoc_req;
1086
    struct {
1087
      le16 reason_code;
1088
      u8 variable[];
1089
    } STRUCT_PACKED disassoc;
1090
    struct {
1091
      u8 timestamp[8];
1092
      le16 beacon_int;
1093
      le16 capab_info;
1094
      /* followed by some of SSID, Supported rates,
1095
       * FH Params, DS Params, CF Params, IBSS Params, TIM */
1096
      u8 variable[];
1097
    } STRUCT_PACKED beacon;
1098
    /* probe_req: only variable items: SSID, Supported rates */
1099
    struct {
1100
      u8 timestamp[8];
1101
      le16 beacon_int;
1102
      le16 capab_info;
1103
      /* followed by some of SSID, Supported rates,
1104
       * FH Params, DS Params, CF Params, IBSS Params */
1105
      u8 variable[];
1106
    } STRUCT_PACKED probe_resp;
1107
    struct {
1108
      u8 category;
1109
      union {
1110
        struct {
1111
          u8 action_code;
1112
          u8 dialog_token;
1113
          u8 status_code;
1114
          u8 variable[];
1115
        } STRUCT_PACKED wmm_action;
1116
        struct{
1117
          u8 action_code;
1118
          u8 element_id;
1119
          u8 length;
1120
          u8 switch_mode;
1121
          u8 new_chan;
1122
          u8 switch_count;
1123
        } STRUCT_PACKED chan_switch;
1124
        struct {
1125
          u8 action;
1126
          u8 sta_addr[ETH_ALEN];
1127
          u8 target_ap_addr[ETH_ALEN];
1128
          u8 variable[]; /* FT Request */
1129
        } STRUCT_PACKED ft_action_req;
1130
        struct {
1131
          u8 action;
1132
          u8 sta_addr[ETH_ALEN];
1133
          u8 target_ap_addr[ETH_ALEN];
1134
          le16 status_code;
1135
          u8 variable[]; /* FT Request */
1136
        } STRUCT_PACKED ft_action_resp;
1137
        struct {
1138
          u8 action;
1139
          u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN];
1140
          u8 variable[]; /* OCI element */
1141
        } STRUCT_PACKED sa_query_req;
1142
        struct {
1143
          u8 action; /* */
1144
          u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN];
1145
          u8 variable[]; /* OCI element */
1146
        } STRUCT_PACKED sa_query_resp;
1147
        struct {
1148
          u8 action;
1149
          u8 dialogtoken;
1150
          u8 variable[];
1151
        } STRUCT_PACKED wnm_sleep_req;
1152
        struct {
1153
          u8 action;
1154
          u8 dialogtoken;
1155
          le16 keydata_len;
1156
          u8 variable[];
1157
        } STRUCT_PACKED wnm_sleep_resp;
1158
        struct {
1159
          u8 action;
1160
          u8 variable[];
1161
        } STRUCT_PACKED public_action;
1162
        struct {
1163
          u8 action; /* 9 */
1164
          u8 oui[3];
1165
          /* Vendor-specific content */
1166
          u8 variable[];
1167
        } STRUCT_PACKED vs_public_action;
1168
        struct {
1169
          u8 action; /* 7 */
1170
          u8 dialog_token;
1171
          u8 req_mode;
1172
          le16 disassoc_timer;
1173
          u8 validity_interval;
1174
          /* BSS Termination Duration (optional),
1175
           * Session Information URL (optional),
1176
           * BSS Transition Candidate List
1177
           * Entries */
1178
          u8 variable[];
1179
        } STRUCT_PACKED bss_tm_req;
1180
        struct {
1181
          u8 action; /* 8 */
1182
          u8 dialog_token;
1183
          u8 status_code;
1184
          u8 bss_termination_delay;
1185
          /* Target BSSID (optional),
1186
           * BSS Transition Candidate List
1187
           * Entries (optional) */
1188
          u8 variable[];
1189
        } STRUCT_PACKED bss_tm_resp;
1190
        struct {
1191
          u8 action; /* 6 */
1192
          u8 dialog_token;
1193
          u8 query_reason;
1194
          /* BSS Transition Candidate List
1195
           * Entries (optional) */
1196
          u8 variable[];
1197
        } STRUCT_PACKED bss_tm_query;
1198
        struct {
1199
          u8 action; /* 11 */
1200
          u8 dialog_token;
1201
          u8 req_info;
1202
        } STRUCT_PACKED coloc_intf_req;
1203
        struct {
1204
          u8 action; /* 12 */
1205
          u8 dialog_token;
1206
          u8 variable[];
1207
        } STRUCT_PACKED coloc_intf_report;
1208
        struct {
1209
          u8 action; /* 15 */
1210
          u8 variable[];
1211
        } STRUCT_PACKED slf_prot_action;
1212
        struct {
1213
          u8 action;
1214
          u8 variable[];
1215
        } STRUCT_PACKED fst_action;
1216
        struct {
1217
          u8 action;
1218
          u8 dialog_token;
1219
          u8 variable[];
1220
        } STRUCT_PACKED rrm;
1221
        struct {
1222
          u8 action; /* Protected EHT - 11 */
1223
          u8 dialog_token;
1224
          /* Reconfiguration Multi-Link element,
1225
          * OCI element (optional) */
1226
          u8 variable[];
1227
        } STRUCT_PACKED link_reconf_req;
1228
        struct {
1229
          u8 action; /* Protected EHT - 12 */
1230
          u8 dialog_token;
1231
          u8 count;
1232
          /* Reconfiguration status list,
1233
           * Group Key Data (optional),
1234
           * OCI element (optional),
1235
           * Basic Multi-Link element (optional) */
1236
          u8 variable[];
1237
        } STRUCT_PACKED link_reconf_resp;
1238
        struct {
1239
          u8 action;
1240
          u8 oui[3];
1241
          u8 oui_type;
1242
          u8 subtype;
1243
          u8 variable[0];
1244
        } STRUCT_PACKED naf;
1245
      } u;
1246
    } STRUCT_PACKED action;
1247
  } u;
1248
} STRUCT_PACKED;
1249
1250
1251
#define IEEE80211_MIN_ACTION_LEN(type)  \
1252
  (offsetof(struct ieee80211_mgmt, u.action.u.type) + \
1253
   sizeof(((struct ieee80211_mgmt *) 0)->u.action.u.type))
1254
1255
#define IEEE80211_MAX_MMPDU_SIZE 2304
1256
1257
/* Rx MCS bitmask is in the first 77 bits of supported_mcs_set */
1258
#define IEEE80211_HT_MCS_MASK_LEN 10
1259
1260
/* HT Capabilities element */
1261
struct ieee80211_ht_capabilities {
1262
  le16 ht_capabilities_info;
1263
  u8 a_mpdu_params; /* Maximum A-MPDU Length Exponent B0..B1
1264
         * Minimum MPDU Start Spacing B2..B4
1265
         * Reserved B5..B7 */
1266
  u8 supported_mcs_set[16];
1267
  le16 ht_extended_capabilities;
1268
  le32 tx_bf_capability_info;
1269
  u8 asel_capabilities;
1270
} STRUCT_PACKED;
1271
1272
1273
/* HT Operation element */
1274
struct ieee80211_ht_operation {
1275
  u8 primary_chan;
1276
  /* Five octets of HT Operation Information */
1277
  u8 ht_param; /* B0..B7 */
1278
  le16 operation_mode; /* B8..B23 */
1279
  le16 param; /* B24..B39 */
1280
  u8 basic_mcs_set[16];
1281
} STRUCT_PACKED;
1282
1283
1284
struct ieee80211_obss_scan_parameters {
1285
  le16 scan_passive_dwell;
1286
  le16 scan_active_dwell;
1287
  le16 width_trigger_scan_interval;
1288
  le16 scan_passive_total_per_channel;
1289
  le16 scan_active_total_per_channel;
1290
  le16 channel_transition_delay_factor;
1291
  le16 scan_activity_threshold;
1292
} STRUCT_PACKED;
1293
1294
1295
struct ieee80211_vht_capabilities {
1296
  le32 vht_capabilities_info;
1297
  struct {
1298
    le16 rx_map;
1299
    le16 rx_highest;
1300
    le16 tx_map;
1301
    le16 tx_highest;
1302
  } vht_supported_mcs_set;
1303
} STRUCT_PACKED;
1304
1305
struct ieee80211_vht_operation {
1306
  u8 vht_op_info_chwidth;
1307
  u8 vht_op_info_chan_center_freq_seg0_idx;
1308
  u8 vht_op_info_chan_center_freq_seg1_idx;
1309
  le16 vht_basic_mcs_set;
1310
} STRUCT_PACKED;
1311
1312
struct ieee80211_ampe_ie {
1313
  u8 selected_pairwise_suite[4];
1314
  u8 local_nonce[32];
1315
  u8 peer_nonce[32];
1316
  /* Followed by
1317
   * Key Replay Counter[8] (optional)
1318
   *  (only in Mesh Group Key Inform/Acknowledge frames)
1319
   * GTKdata[variable] (optional)
1320
   *  (MGTK[variable] || Key RSC[8] || GTKExpirationTime[4])
1321
   * IGTKdata[variable] (optional)
1322
   *  (Key ID[2], IPN[6], IGTK[variable] in IGTK KDE format)
1323
   */
1324
} STRUCT_PACKED;
1325
1326
1327
#define ERP_INFO_NON_ERP_PRESENT BIT(0)
1328
#define ERP_INFO_USE_PROTECTION BIT(1)
1329
#define ERP_INFO_BARKER_PREAMBLE_MODE BIT(2)
1330
1331
#define OVERLAPPING_BSS_TRANS_DELAY_FACTOR 5
1332
1333
/* HT Capabilities Info field within HT Capabilities element */
1334
#define HT_CAP_INFO_LDPC_CODING_CAP   ((u16) BIT(0))
1335
#define HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET  ((u16) BIT(1))
1336
#define HT_CAP_INFO_SMPS_MASK     ((u16) (BIT(2) | BIT(3)))
1337
#define HT_CAP_INFO_SMPS_STATIC     ((u16) 0)
1338
#define HT_CAP_INFO_SMPS_DYNAMIC    ((u16) BIT(2))
1339
#define HT_CAP_INFO_SMPS_DISABLED   ((u16) (BIT(2) | BIT(3)))
1340
#define HT_CAP_INFO_GREEN_FIELD     ((u16) BIT(4))
1341
#define HT_CAP_INFO_SHORT_GI20MHZ   ((u16) BIT(5))
1342
#define HT_CAP_INFO_SHORT_GI40MHZ   ((u16) BIT(6))
1343
#define HT_CAP_INFO_TX_STBC     ((u16) BIT(7))
1344
#define HT_CAP_INFO_RX_STBC_MASK    ((u16) (BIT(8) | BIT(9)))
1345
#define HT_CAP_INFO_RX_STBC_1     ((u16) BIT(8))
1346
#define HT_CAP_INFO_RX_STBC_12      ((u16) BIT(9))
1347
#define HT_CAP_INFO_RX_STBC_123     ((u16) (BIT(8) | BIT(9)))
1348
#define HT_CAP_INFO_DELAYED_BA      ((u16) BIT(10))
1349
#define HT_CAP_INFO_MAX_AMSDU_SIZE    ((u16) BIT(11))
1350
#define HT_CAP_INFO_DSSS_CCK40MHZ   ((u16) BIT(12))
1351
/* B13 - Reserved (was PSMP support during P802.11n development) */
1352
#define HT_CAP_INFO_40MHZ_INTOLERANT    ((u16) BIT(14))
1353
#define HT_CAP_INFO_LSIG_TXOP_PROTECT_SUPPORT ((u16) BIT(15))
1354
1355
/* HT Extended Capabilities field within HT Capabilities element */
1356
#define EXT_HT_CAP_INFO_PCO     ((u16) BIT(0))
1357
#define EXT_HT_CAP_INFO_PCO_TRANS_TIME_MASK ((u16) (BIT(1) | BIT(2)))
1358
#define EXT_HT_CAP_INFO_TRANS_TIME_OFFSET 1
1359
/* B3..B7 - Reserved */
1360
#define EXT_HT_CAP_INFO_MCS_FEEDBACK_MASK ((u16) (BIT(8) | BIT(9)))
1361
#define EXT_HT_CAP_INFO_MCS_FEEDBACK_OFFSET 8
1362
#define EXT_HT_CAP_INFO_HTC_SUPPORT   ((u16) BIT(10))
1363
#define EXT_HT_CAP_INFO_RD_RESPONDER    ((u16) BIT(11))
1364
/* B12..B15 - Reserved */
1365
1366
/* Transmit Beanforming Capabilities within HT Capabilities element */
1367
#define TX_BF_CAP_IMPLICIT_TXBF_RX_CAP ((u32) BIT(0))
1368
#define TX_BF_CAP_RX_STAGGERED_SOUNDING_CAP ((u32) BIT(1))
1369
#define TX_BF_CAP_TX_STAGGERED_SOUNDING_CAP ((u32) BIT(2))
1370
#define TX_BF_CAP_RX_NDP_CAP ((u32) BIT(3))
1371
#define TX_BF_CAP_TX_NDP_CAP ((u32) BIT(4))
1372
#define TX_BF_CAP_IMPLICIT_TX_BF_CAP ((u32) BIT(5))
1373
#define TX_BF_CAP_CALIBRATION_MASK ((u32) (BIT(6) | BIT(7))
1374
#define TX_BF_CAP_CALIB_OFFSET 6
1375
#define TX_BF_CAP_EXPLICIT_CSI_TXBF_CAP ((u32) BIT(8))
1376
#define TX_BF_CAP_EXPLICIT_NONCOMPR_STEERING_CAP ((u32) BIT(9))
1377
#define TX_BF_CAP_EXPLICIT_COMPR_STEERING_CAP ((u32) BIT(10))
1378
#define TX_BF_CAP_EXPLICIT_TX_BF_CSI_FEEDBACK_MASK ((u32) (BIT(10) | BIT(11)))
1379
#define TX_BF_CAP_EXPLICIT_BF_CSI_FEEDBACK_OFFSET 11
1380
#define TX_BF_CAP_EXPLICIT_UNCOMPR_STEERING_MATRIX_FEEDBACK_OFFSET 13
1381
#define TX_BF_CAP_EXPLICIT_COMPRESSED_STEERING_MATRIX_FEEDBACK_OFFSET 15
1382
#define TX_BF_CAP_MINIMAL_GROUPING_OFFSET 17
1383
#define TX_BF_CAP_CSI_NUM_BEAMFORMER_ANT_OFFSET 19
1384
#define TX_BF_CAP_UNCOMPRESSED_STEERING_MATRIX_BEAMFORMER_ANT_OFFSET 21
1385
#define TX_BF_CAP_COMPRESSED_STEERING_MATRIX_BEAMFORMER_ANT_OFFSET 23
1386
#define TX_BF_CAP_SCI_MAX_OF_ROWS_BEANFORMER_SUPPORTED_OFFSET 25
1387
#define TX_BF_CAP_CHANNEL_ESTIMATION_CAP_MASK ((u32) (BIT(27) | BIT(28)))
1388
#define TX_BF_CAP_CHANNEL_ESTIMATION_CAP_OFFSET 27
1389
/* B29..B31 - Reserved */
1390
1391
/* ASEL Capability field within HT Capabilities element */
1392
#define ASEL_CAP_ASEL_CAPABLE ((u8) BIT(0))
1393
#define ASEL_CAP_EXPLICIT_CSI_FEEDBACK_BASED_TX_AS_CAP ((u8) BIT(1))
1394
#define ASEL_CAP_ANT_INDICES_FEEDBACK_BASED_TX_AS_CAP ((u8) BIT(2))
1395
#define ASEL_CAP_EXPLICIT_CSI_FEEDBACK_CAP ((u8) BIT(3))
1396
#define ASEL_CAP_ANT_INDICES_FEEDBACK_CAP ((u8) BIT(4))
1397
#define ASEL_CAP_RX_AS_CAP ((u8) BIT(5))
1398
#define ASEL_CAP_TX_SOUNDING_PPDUS_CAP ((u8) BIT(6))
1399
/* B7 - Reserved */
1400
1401
/* First octet of HT Operation Information within HT Operation element */
1402
#define HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK  ((u8) BIT(0) | BIT(1))
1403
#define HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE   ((u8) BIT(0))
1404
#define HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW   ((u8) BIT(0) | BIT(1))
1405
#define HT_INFO_HT_PARAM_STA_CHNL_WIDTH     ((u8) BIT(2))
1406
#define HT_INFO_HT_PARAM_RIFS_MODE      ((u8) BIT(3))
1407
/* B4..B7 - Reserved */
1408
1409
/* HT Protection (B8..B9 of HT Operation Information) */
1410
#define HT_PROT_NO_PROTECTION           0
1411
#define HT_PROT_NONMEMBER_PROTECTION    1
1412
#define HT_PROT_20MHZ_PROTECTION        2
1413
#define HT_PROT_NON_HT_MIXED            3
1414
/* Bits within ieee80211_ht_operation::operation_mode (BIT(0) maps to B8 in
1415
 * HT Operation Information) */
1416
#define HT_OPER_OP_MODE_HT_PROT_MASK ((u16) (BIT(0) | BIT(1))) /* B8..B9 */
1417
#define HT_OPER_OP_MODE_NON_GF_HT_STAS_PRESENT  ((u16) BIT(2)) /* B10 */
1418
/* BIT(3), i.e., B11 in HT Operation Information field - Reserved */
1419
#define HT_OPER_OP_MODE_OBSS_NON_HT_STAS_PRESENT  ((u16) BIT(4)) /* B12 */
1420
/* BIT(5)..BIT(15), i.e., B13..B23 - Reserved */
1421
1422
/* Last two octets of HT Operation Information (BIT(0) = B24) */
1423
/* B24..B29 - Reserved */
1424
#define HT_OPER_PARAM_DUAL_BEACON     ((u16) BIT(6))
1425
#define HT_OPER_PARAM_DUAL_CTS_PROTECTION   ((u16) BIT(7))
1426
#define HT_OPER_PARAM_STBC_BEACON     ((u16) BIT(8))
1427
#define HT_OPER_PARAM_LSIG_TXOP_PROT_FULL_SUPP    ((u16) BIT(9))
1428
#define HT_OPER_PARAM_PCO_ACTIVE      ((u16) BIT(10))
1429
#define HT_OPER_PARAM_PCO_PHASE       ((u16) BIT(11))
1430
/* B36..B39 - Reserved */
1431
1432
#define BSS_MEMBERSHIP_SELECTOR_UHR_PHY 120
1433
#define BSS_MEMBERSHIP_SELECTOR_EHT_PHY 121
1434
#define BSS_MEMBERSHIP_SELECTOR_HE_PHY 122
1435
#define BSS_MEMBERSHIP_SELECTOR_SAE_H2E_ONLY 123
1436
#define BSS_MEMBERSHIP_SELECTOR_EPD 124
1437
#define BSS_MEMBERSHIP_SELECTOR_GLK 125
1438
#define BSS_MEMBERSHIP_SELECTOR_VHT_PHY 126
1439
#define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127
1440
1441
/* VHT Defines */
1442
#define VHT_CAP_MAX_MPDU_LENGTH_7991                ((u32) BIT(0))
1443
#define VHT_CAP_MAX_MPDU_LENGTH_11454               ((u32) BIT(1))
1444
#define VHT_CAP_MAX_MPDU_LENGTH_MASK                ((u32) BIT(0) | BIT(1))
1445
#define VHT_CAP_MAX_MPDU_LENGTH_MASK_SHIFT          0
1446
#define VHT_CAP_SUPP_CHAN_WIDTH_160MHZ              ((u32) BIT(2))
1447
#define VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ     ((u32) BIT(3))
1448
#define VHT_CAP_SUPP_CHAN_WIDTH_MASK                ((u32) BIT(2) | BIT(3))
1449
#define VHT_CAP_SUPP_CHAN_WIDTH_MASK_SHIFT          2
1450
#define VHT_CAP_RXLDPC                              ((u32) BIT(4))
1451
#define VHT_CAP_SHORT_GI_80                         ((u32) BIT(5))
1452
#define VHT_CAP_SHORT_GI_160                        ((u32) BIT(6))
1453
#define VHT_CAP_TXSTBC                              ((u32) BIT(7))
1454
#define VHT_CAP_RXSTBC_1                            ((u32) BIT(8))
1455
#define VHT_CAP_RXSTBC_2                            ((u32) BIT(9))
1456
#define VHT_CAP_RXSTBC_3                            ((u32) BIT(8) | BIT(9))
1457
#define VHT_CAP_RXSTBC_4                            ((u32) BIT(10))
1458
#define VHT_CAP_RXSTBC_MASK                         ((u32) BIT(8) | BIT(9) | \
1459
                 BIT(10))
1460
#define VHT_CAP_RXSTBC_MASK_SHIFT                   8
1461
#define VHT_CAP_SU_BEAMFORMER_CAPABLE               ((u32) BIT(11))
1462
#define VHT_CAP_SU_BEAMFORMEE_CAPABLE               ((u32) BIT(12))
1463
#define VHT_CAP_BEAMFORMEE_STS_MAX                  ((u32) BIT(13) | \
1464
                 BIT(14) | BIT(15))
1465
#define VHT_CAP_BEAMFORMEE_STS_MAX_SHIFT            13
1466
#define VHT_CAP_BEAMFORMEE_STS_OFFSET               13
1467
#define VHT_CAP_SOUNDING_DIMENSION_MAX              ((u32) BIT(16) | \
1468
                 BIT(17) | BIT(18))
1469
#define VHT_CAP_SOUNDING_DIMENSION_MAX_SHIFT        16
1470
#define VHT_CAP_SOUNDING_DIMENSION_OFFSET           16
1471
#define VHT_CAP_MU_BEAMFORMER_CAPABLE               ((u32) BIT(19))
1472
#define VHT_CAP_MU_BEAMFORMEE_CAPABLE               ((u32) BIT(20))
1473
#define VHT_CAP_VHT_TXOP_PS                         ((u32) BIT(21))
1474
#define VHT_CAP_HTC_VHT                             ((u32) BIT(22))
1475
1476
#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_1        ((u32) BIT(23))
1477
#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_2        ((u32) BIT(24))
1478
#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_3        ((u32) BIT(23) | BIT(24))
1479
#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_4        ((u32) BIT(25))
1480
#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_5        ((u32) BIT(23) | BIT(25))
1481
#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_6        ((u32) BIT(24) | BIT(25))
1482
#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MAX      ((u32) BIT(23) | \
1483
                 BIT(24) | BIT(25))
1484
#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MAX_SHIFT 23
1485
#define VHT_CAP_VHT_LINK_ADAPTATION_VHT_UNSOL_MFB   ((u32) BIT(27))
1486
#define VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB     ((u32) BIT(26) | BIT(27))
1487
#define VHT_CAP_RX_ANTENNA_PATTERN                  ((u32) BIT(28))
1488
#define VHT_CAP_TX_ANTENNA_PATTERN                  ((u32) BIT(29))
1489
1490
#define VHT_OPMODE_CHANNEL_WIDTH_MASK       ((u8) BIT(0) | BIT(1))
1491
#define VHT_OPMODE_CHANNEL_RxNSS_MASK       ((u8) BIT(4) | BIT(5) | \
1492
                 BIT(6))
1493
#define VHT_OPMODE_NOTIF_RX_NSS_SHIFT       4
1494
1495
#define VHT_RX_NSS_MAX_STREAMS          8
1496
1497
#define VHT_OPMODE_CHANNEL_40MHZ        ((u8) BIT(0))
1498
#define VHT_OPMODE_CHANNEL_80MHZ        ((u8) BIT(1))
1499
#define VHT_OPMODE_CHANNEL_160MHZ       ((u8) BIT(1) | BIT(2))
1500
1501
/* VHT operation information - channel widths */
1502
#define CHANWIDTH_USE_HT  0
1503
#define CHANWIDTH_80MHZ   1
1504
#define CHANWIDTH_160MHZ  2
1505
#define CHANWIDTH_80P80MHZ  3
1506
1507
#define HE_NSS_MAX_STREAMS          8
1508
1509
#define OUI_MICROSOFT 0x0050f2 /* Microsoft (also used in Wi-Fi specs)
1510
        * 00:50:F2 */
1511
#define WPA_IE_VENDOR_TYPE 0x0050f201
1512
#define WMM_IE_VENDOR_TYPE 0x0050f202
1513
#define WPS_IE_VENDOR_TYPE 0x0050f204
1514
#define OUI_WFA 0x506f9a
1515
#define P2P_IE_VENDOR_TYPE 0x506f9a09
1516
#define P2P2_IE_VENDOR_TYPE 0x506f9a28
1517
#define WFD_IE_VENDOR_TYPE 0x506f9a0a
1518
#define WFD_OUI_TYPE 10
1519
#define HS20_IE_VENDOR_TYPE 0x506f9a10
1520
#define NAN_IE_VENDOR_TYPE 0x506f9a13
1521
#define NAN_SDF_VENDOR_TYPE 0x506f9a13
1522
#define NAN_SDF_OUI_TYPE 0x13
1523
#define MBO_IE_VENDOR_TYPE 0x506f9a16
1524
#define NAN_NAF_VENDOR_TYPE 0x506f9a18
1525
#define NAN_NAF_OUI_TYPE 0x18
1526
#define MBO_OUI_TYPE 22
1527
#define OWE_IE_VENDOR_TYPE 0x506f9a1c
1528
#define OWE_OUI_TYPE 28
1529
#define MULTI_AP_OUI_TYPE 0x1B
1530
#define DPP_CC_IE_VENDOR_TYPE 0x506f9a1e
1531
#define DPP_CC_OUI_TYPE 0x1e
1532
#define SAE_PK_IE_VENDOR_TYPE 0x506f9a1f
1533
#define SAE_PK_OUI_TYPE 0x1f
1534
#define QM_IE_VENDOR_TYPE 0x506f9a22
1535
#define QM_IE_OUI_TYPE 0x22
1536
#define WFA_CAPA_IE_VENDOR_TYPE 0x506f9a23
1537
#define WFA_CAPA_OUI_TYPE 0x23
1538
#define WFA_RSNE_OVERRIDE_OUI_TYPE 0x29
1539
#define WFA_RSNE_OVERRIDE_2_OUI_TYPE 0x2a
1540
#define WFA_RSNXE_OVERRIDE_OUI_TYPE 0x2b
1541
#define WFA_RSN_SELECTION_OUI_TYPE 0x2c
1542
#define RSNE_OVERRIDE_IE_VENDOR_TYPE 0x506f9a29
1543
#define RSNE_OVERRIDE_2_IE_VENDOR_TYPE 0x506f9a2a
1544
#define RSNXE_OVERRIDE_IE_VENDOR_TYPE 0x506f9a2b
1545
#define RSN_SELECTION_IE_VENDOR_TYPE 0x506f9a2c
1546
/* Proximity Ranging (PR) */
1547
#define PR_IE_VENDOR_TYPE 0x506f9a2e
1548
#define PR_OUI_TYPE 0x2e
1549
1550
#define MULTI_AP_SUB_ELEM_TYPE 0x06
1551
#define MULTI_AP_PROFILE_SUB_ELEM_TYPE 0x07
1552
#define MULTI_AP_VLAN_SUB_ELEM_TYPE 0x08
1553
1554
#define MULTI_AP_PROFILE2_BACKHAUL_STA_DISALLOWED BIT(2)
1555
#define MULTI_AP_PROFILE1_BACKHAUL_STA_DISALLOWED BIT(3)
1556
#define MULTI_AP_TEAR_DOWN BIT(4)
1557
#define MULTI_AP_FRONTHAUL_BSS BIT(5)
1558
#define MULTI_AP_BACKHAUL_BSS BIT(6)
1559
#define MULTI_AP_BACKHAUL_STA BIT(7)
1560
1561
#define MULTI_AP_PROFILE_1  1
1562
#define MULTI_AP_PROFILE_2  2
1563
#define MULTI_AP_PROFILE_MAX  6
1564
1565
#define WMM_OUI_TYPE 2
1566
#define WMM_OUI_SUBTYPE_INFORMATION_ELEMENT 0
1567
#define WMM_OUI_SUBTYPE_PARAMETER_ELEMENT 1
1568
#define WMM_OUI_SUBTYPE_TSPEC_ELEMENT 2
1569
#define WMM_VERSION 1
1570
1571
#define WMM_ACTION_CODE_ADDTS_REQ 0
1572
#define WMM_ACTION_CODE_ADDTS_RESP 1
1573
#define WMM_ACTION_CODE_DELTS 2
1574
1575
#define WMM_ADDTS_STATUS_ADMISSION_ACCEPTED 0
1576
#define WMM_ADDTS_STATUS_INVALID_PARAMETERS 1
1577
/* 2 - Reserved */
1578
#define WMM_ADDTS_STATUS_REFUSED 3
1579
/* 4-255 - Reserved */
1580
1581
/* WMM TSPEC Direction Field Values */
1582
#define WMM_TSPEC_DIRECTION_UPLINK 0
1583
#define WMM_TSPEC_DIRECTION_DOWNLINK 1
1584
/* 2 - Reserved */
1585
#define WMM_TSPEC_DIRECTION_BI_DIRECTIONAL 3
1586
1587
/*
1588
 * WMM Information Element (used in (Re)Association Request frames; may also be
1589
 * used in Beacon frames)
1590
 */
1591
struct wmm_information_element {
1592
  /* Element ID: 221 (0xdd); Length: 7 */
1593
  /* required fields for WMM version 1 */
1594
  u8 oui[3]; /* 00:50:f2 */
1595
  u8 oui_type; /* 2 */
1596
  u8 oui_subtype; /* 0 */
1597
  u8 version; /* 1 for WMM version 1.0 */
1598
  u8 qos_info; /* AP/STA specific QoS info */
1599
1600
} STRUCT_PACKED;
1601
1602
#define WMM_QOSINFO_AP_UAPSD 0x80
1603
1604
#define WMM_QOSINFO_STA_AC_MASK 0x0f
1605
#define WMM_QOSINFO_STA_SP_MASK 0x03
1606
#define WMM_QOSINFO_STA_SP_SHIFT 5
1607
1608
#define WMM_AC_AIFSN_MASK 0x0f
1609
#define WMM_AC_AIFNS_SHIFT 0
1610
#define WMM_AC_ACM 0x10
1611
#define WMM_AC_ACI_MASK 0x60
1612
#define WMM_AC_ACI_SHIFT 5
1613
1614
#define WMM_AC_ECWMIN_MASK 0x0f
1615
#define WMM_AC_ECWMIN_SHIFT 0
1616
#define WMM_AC_ECWMAX_MASK 0xf0
1617
#define WMM_AC_ECWMAX_SHIFT 4
1618
1619
struct wmm_ac_parameter {
1620
  u8 aci_aifsn; /* AIFSN, ACM, ACI */
1621
  u8 cw; /* ECWmin, ECWmax (CW = 2^ECW - 1) */
1622
  le16 txop_limit;
1623
}  STRUCT_PACKED;
1624
1625
/*
1626
 * WMM Parameter Element (used in Beacon, Probe Response, and (Re)Association
1627
 * Response frmaes)
1628
 */
1629
struct wmm_parameter_element {
1630
  /* Element ID: 221 (0xdd); Length: 24 */
1631
  /* required fields for WMM version 1 */
1632
  u8 oui[3]; /* 00:50:f2 */
1633
  u8 oui_type; /* 2 */
1634
  u8 oui_subtype; /* 1 */
1635
  u8 version; /* 1 for WMM version 1.0 */
1636
  u8 qos_info; /* AP/STA specific QoS info */
1637
  u8 reserved; /* 0 */
1638
  struct wmm_ac_parameter ac[4]; /* AC_BE, AC_BK, AC_VI, AC_VO */
1639
1640
} STRUCT_PACKED;
1641
1642
/* WMM TSPEC Element */
1643
struct wmm_tspec_element {
1644
  u8 eid; /* 221 = 0xdd */
1645
  u8 length; /* 6 + 55 = 61 */
1646
  u8 oui[3]; /* 00:50:f2 */
1647
  u8 oui_type; /* 2 */
1648
  u8 oui_subtype; /* 2 */
1649
  u8 version; /* 1 */
1650
  /* WMM TSPEC body (55 octets): */
1651
  u8 ts_info[3];
1652
  le16 nominal_msdu_size;
1653
  le16 maximum_msdu_size;
1654
  le32 minimum_service_interval;
1655
  le32 maximum_service_interval;
1656
  le32 inactivity_interval;
1657
  le32 suspension_interval;
1658
  le32 service_start_time;
1659
  le32 minimum_data_rate;
1660
  le32 mean_data_rate;
1661
  le32 peak_data_rate;
1662
  le32 maximum_burst_size;
1663
  le32 delay_bound;
1664
  le32 minimum_phy_rate;
1665
  le16 surplus_bandwidth_allowance;
1666
  le16 medium_time;
1667
} STRUCT_PACKED;
1668
1669
1670
/* Access Categories / ACI to AC coding */
1671
enum wmm_ac {
1672
  WMM_AC_BE = 0 /* Best Effort */,
1673
  WMM_AC_BK = 1 /* Background */,
1674
  WMM_AC_VI = 2 /* Video */,
1675
  WMM_AC_VO = 3 /* Voice */,
1676
  WMM_AC_NUM = 4
1677
};
1678
1679
1680
#define HS20_INDICATION_OUI_TYPE 16
1681
#define HS20_ANQP_OUI_TYPE 17
1682
#define HS20_ROAMING_CONS_SEL_OUI_TYPE 29
1683
#define HS20_STYPE_QUERY_LIST 1
1684
#define HS20_STYPE_CAPABILITY_LIST 2
1685
#define HS20_STYPE_OPERATOR_FRIENDLY_NAME 3
1686
#define HS20_STYPE_WAN_METRICS 4
1687
#define HS20_STYPE_CONNECTION_CAPABILITY 5
1688
#define HS20_STYPE_NAI_HOME_REALM_QUERY 6
1689
#define HS20_STYPE_OPERATING_CLASS 7
1690
1691
#define HS20_DGAF_DISABLED 0x01
1692
#define HS20_PPS_MO_ID_PRESENT 0x02
1693
#define HS20_ANQP_DOMAIN_ID_PRESENT 0x04
1694
#ifndef HS20_VERSION
1695
#define HS20_VERSION 0x20 /* Release 3 */
1696
#endif /* HS20_VERSION */
1697
1698
/* WNM-Notification WFA vendors specific subtypes */
1699
#define HS20_WNM_DEAUTH_IMMINENT_NOTICE 1
1700
#define WFA_WNM_NOTIF_SUBELEM_NON_PREF_CHAN_REPORT 2
1701
#define WFA_WNM_NOTIF_SUBELEM_CELL_DATA_CAPA 3
1702
#define HS20_WNM_T_C_ACCEPTANCE 4
1703
1704
#define HS20_DEAUTH_REASON_CODE_BSS 0
1705
#define HS20_DEAUTH_REASON_CODE_ESS 1
1706
1707
/* MBO v0.0_r19, 4.2: MBO Attributes */
1708
/* Table 4-5: MBO Attributes */
1709
/* OCE v0.0.10, Table 4-3: OCE Attributes */
1710
enum mbo_attr_id {
1711
  MBO_ATTR_ID_AP_CAPA_IND = 1,
1712
  MBO_ATTR_ID_NON_PREF_CHAN_REPORT = 2,
1713
  MBO_ATTR_ID_CELL_DATA_CAPA = 3,
1714
  MBO_ATTR_ID_ASSOC_DISALLOW = 4,
1715
  MBO_ATTR_ID_CELL_DATA_PREF = 5,
1716
  MBO_ATTR_ID_TRANSITION_REASON = 6,
1717
  MBO_ATTR_ID_TRANSITION_REJECT_REASON = 7,
1718
  MBO_ATTR_ID_ASSOC_RETRY_DELAY = 8,
1719
  OCE_ATTR_ID_CAPA_IND = 101,
1720
  OCE_ATTR_ID_RSSI_BASED_ASSOC_REJECT = 102,
1721
  OCE_ATTR_ID_REDUCED_WAN_METRICS = 103,
1722
  OCE_ATTR_ID_RNR_COMPLETENESS = 104,
1723
};
1724
1725
/* MBO v0.0_r19, 4.2.1: MBO AP Capability Indication Attribute */
1726
/* Table 4-7: MBO AP Capability Indication Field Values */
1727
#define MBO_AP_CAPA_CELL_AWARE BIT(6)
1728
1729
/* MBO v0.0_r19, 4.2.2: Non-preferred Channel Report Attribute */
1730
/* Table 4-10: Reason Code Field Values */
1731
enum mbo_non_pref_chan_reason {
1732
  MBO_NON_PREF_CHAN_REASON_UNSPECIFIED = 0,
1733
  MBO_NON_PREF_CHAN_REASON_RSSI = 1,
1734
  MBO_NON_PREF_CHAN_REASON_EXT_INTERFERENCE = 2,
1735
  MBO_NON_PREF_CHAN_REASON_INT_INTERFERENCE = 3,
1736
};
1737
1738
/* MBO v0.0_r19, 4.2.3: Cellular Data Capabilities Attribute */
1739
/* Table 4-13: Cellular Data Connectivity Field */
1740
enum mbo_cellular_capa {
1741
  MBO_CELL_CAPA_AVAILABLE = 1,
1742
  MBO_CELL_CAPA_NOT_AVAILABLE = 2,
1743
  MBO_CELL_CAPA_NOT_SUPPORTED = 3,
1744
};
1745
1746
/* MBO v0.0_r19, 4.2.4: Association Disallowed Attribute */
1747
/* Table 4-15: Reason Code Field Values */
1748
enum mbo_assoc_disallow_reason {
1749
  MBO_ASSOC_DISALLOW_REASON_UNSPECIFIED = 1,
1750
  MBO_ASSOC_DISALLOW_REASON_MAX_STA = 2,
1751
  MBO_ASSOC_DISALLOW_REASON_AIR_INTERFERENCE = 3,
1752
  MBO_ASSOC_DISALLOW_REASON_AUTH_SERVER_OVERLOAD = 4,
1753
  MBO_ASSOC_DISALLOW_REASON_LOW_RSSI = 5,
1754
};
1755
1756
/* MBO v0.0_r19, 4.2.5: Cellular Data Connection Preference Attribute */
1757
/* Table 4-17: Cellular Preference Field Values */
1758
enum mbo_cell_pref {
1759
  MBO_CELL_PREF_EXCLUDED = 0,
1760
  MBO_CELL_PREF_NO_USE = 1,
1761
  MBO_CELL_PREF_USE = 255
1762
};
1763
1764
/* MBO v0.0_r19, 4.2.6: Transition Reason Code Attribute */
1765
/* Table 4-19: Transition Reason Code Field Values */
1766
enum mbo_transition_reason {
1767
  MBO_TRANSITION_REASON_UNSPECIFIED = 0,
1768
  MBO_TRANSITION_REASON_FRAME_LOSS = 1,
1769
  MBO_TRANSITION_REASON_DELAY = 2,
1770
  MBO_TRANSITION_REASON_BANDWIDTH = 3,
1771
  MBO_TRANSITION_REASON_LOAD_BALANCE = 4,
1772
  MBO_TRANSITION_REASON_RSSI = 5,
1773
  MBO_TRANSITION_REASON_RETRANSMISSIONS = 6,
1774
  MBO_TRANSITION_REASON_INTERFERENCE = 7,
1775
  MBO_TRANSITION_REASON_GRAY_ZONE = 8,
1776
  MBO_TRANSITION_REASON_PREMIUM_AP = 9,
1777
};
1778
1779
/* MBO v0.0_r19, 4.2.7: Transition Rejection Reason Code Attribute */
1780
/* Table 4-21: Transition Rejection Reason Code Field Values */
1781
enum mbo_transition_reject_reason {
1782
  MBO_TRANSITION_REJECT_REASON_UNSPECIFIED = 0,
1783
  MBO_TRANSITION_REJECT_REASON_FRAME_LOSS = 1,
1784
  MBO_TRANSITION_REJECT_REASON_DELAY = 2,
1785
  MBO_TRANSITION_REJECT_REASON_QOS_CAPACITY = 3,
1786
  MBO_TRANSITION_REJECT_REASON_RSSI = 4,
1787
  MBO_TRANSITION_REJECT_REASON_INTERFERENCE = 5,
1788
  MBO_TRANSITION_REJECT_REASON_SERVICES = 6,
1789
};
1790
1791
/* MBO v0.0_r27, 4.3: MBO ANQP-elements */
1792
#define MBO_ANQP_OUI_TYPE 0x12
1793
#define MBO_ANQP_SUBTYPE_QUERY_LIST 1
1794
#define MBO_ANQP_SUBTYPE_CELL_CONN_PREF 2
1795
#define MAX_MBO_ANQP_SUBTYPE MBO_ANQP_SUBTYPE_CELL_CONN_PREF
1796
1797
/* OCE v0.0.10, 4.2.1: OCE Capability Indication Attribute */
1798
#define OCE_RELEASE 1
1799
#define OCE_RELEASE_MASK (BIT(0) | BIT(1) | BIT(2))
1800
#define OCE_IS_STA_CFON BIT(3)
1801
#define OCE_IS_NON_OCE_AP_PRESENT BIT(4)
1802
1803
/* Wi-Fi Direct (P2P) */
1804
1805
#define P2P_OUI_TYPE 9
1806
#define P2P2_OUI_TYPE 0x28
1807
1808
enum p2p_attr_id {
1809
  P2P_ATTR_STATUS = 0,
1810
  P2P_ATTR_MINOR_REASON_CODE = 1,
1811
  P2P_ATTR_CAPABILITY = 2,
1812
  P2P_ATTR_DEVICE_ID = 3,
1813
  P2P_ATTR_GROUP_OWNER_INTENT = 4,
1814
  P2P_ATTR_CONFIGURATION_TIMEOUT = 5,
1815
  P2P_ATTR_LISTEN_CHANNEL = 6,
1816
  P2P_ATTR_GROUP_BSSID = 7,
1817
  P2P_ATTR_EXT_LISTEN_TIMING = 8,
1818
  P2P_ATTR_INTENDED_INTERFACE_ADDR = 9,
1819
  P2P_ATTR_MANAGEABILITY = 10,
1820
  P2P_ATTR_CHANNEL_LIST = 11,
1821
  P2P_ATTR_NOTICE_OF_ABSENCE = 12,
1822
  P2P_ATTR_DEVICE_INFO = 13,
1823
  P2P_ATTR_GROUP_INFO = 14,
1824
  P2P_ATTR_GROUP_ID = 15,
1825
  P2P_ATTR_INTERFACE = 16,
1826
  P2P_ATTR_OPERATING_CHANNEL = 17,
1827
  P2P_ATTR_INVITATION_FLAGS = 18,
1828
  P2P_ATTR_OOB_GO_NEG_CHANNEL = 19,
1829
  P2P_ATTR_SERVICE_HASH = 21,
1830
  P2P_ATTR_SESSION_INFORMATION_DATA = 22,
1831
  P2P_ATTR_CONNECTION_CAPABILITY = 23,
1832
  P2P_ATTR_ADVERTISEMENT_ID = 24,
1833
  P2P_ATTR_ADVERTISED_SERVICE = 25,
1834
  P2P_ATTR_SESSION_ID = 26,
1835
  P2P_ATTR_FEATURE_CAPABILITY = 27,
1836
  P2P_ATTR_PERSISTENT_GROUP = 28,
1837
  P2P_ATTR_CAPABILITY_EXTENSION = 29,
1838
  P2P_ATTR_WLAN_AP_INFORMATION = 30,
1839
  P2P_ATTR_DEVICE_IDENTITY_KEY = 31,
1840
  P2P_ATTR_DEVICE_IDENTITY_RESOLUTION = 32,
1841
  P2P_ATTR_PAIRING_AND_BOOTSTRAPPING = 33,
1842
  P2P_ATTR_PASSWORD = 34,
1843
  P2P_ATTR_ACTION_FRAME_WRAPPER = 35,
1844
  P2P_ATTR_VENDOR_SPECIFIC = 221
1845
};
1846
1847
#define P2P_MAX_GO_INTENT 15
1848
1849
/* P2P Capability - Device Capability bitmap */
1850
#define P2P_DEV_CAPAB_SERVICE_DISCOVERY BIT(0)
1851
#define P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY BIT(1)
1852
#define P2P_DEV_CAPAB_CONCURRENT_OPER BIT(2)
1853
#define P2P_DEV_CAPAB_INFRA_MANAGED BIT(3)
1854
#define P2P_DEV_CAPAB_DEVICE_LIMIT BIT(4)
1855
#define P2P_DEV_CAPAB_INVITATION_PROCEDURE BIT(5)
1856
#define P2P_DEV_CAPAB_6GHZ_BAND_CAPABLE BIT(6)
1857
1858
/* P2P Capability - Group Capability bitmap */
1859
#define P2P_GROUP_CAPAB_GROUP_OWNER BIT(0)
1860
#define P2P_GROUP_CAPAB_PERSISTENT_GROUP BIT(1)
1861
#define P2P_GROUP_CAPAB_GROUP_LIMIT BIT(2)
1862
#define P2P_GROUP_CAPAB_INTRA_BSS_DIST BIT(3)
1863
#define P2P_GROUP_CAPAB_CROSS_CONN BIT(4)
1864
#define P2P_GROUP_CAPAB_PERSISTENT_RECONN BIT(5)
1865
#define P2P_GROUP_CAPAB_GROUP_FORMATION BIT(6)
1866
#define P2P_GROUP_CAPAB_IP_ADDR_ALLOCATION BIT(7)
1867
1868
/* P2P Capability Extension attribute - Capability info */
1869
#define P2P_PCEA_LEN_MASK (BIT(0) | BIT(1) | BIT(2) | BIT(3))
1870
#define P2P_PCEA_6GHZ BIT(4)
1871
#define P2P_PCEA_REG_INFO BIT(5)
1872
#define P2P_PCEA_DFS_OWNER BIT(6)
1873
#define P2P_PCEA_CLI_REQ_CS BIT(7)
1874
#define P2P_PCEA_PAIRING_CAPABLE BIT(8)
1875
#define P2P_PCEA_PAIRING_SETUP_ENABLED BIT(9)
1876
#define P2P_PCEA_PMK_CACHING BIT(10)
1877
#define P2P_PCEA_PASN_TYPE BIT(11)
1878
#define P2P_PCEA_TWT_POWER_MGMT BIT(12)
1879
1880
/* P2P Pairing Bootstrapping Method attribute - Bootstrapping Method */
1881
#define P2P_PBMA_OPPORTUNISTIC       BIT(0)
1882
#define P2P_PBMA_PIN_CODE_DISPLAY    BIT(1)
1883
#define P2P_PBMA_PASSPHRASE_DISPLAY  BIT(2)
1884
#define P2P_PBMA_QR_DISPLAY          BIT(3)
1885
#define P2P_PBMA_NFC_TAG             BIT(4)
1886
#define P2P_PBMA_PIN_CODE_KEYPAD     BIT(5)
1887
#define P2P_PBMA_PASSPHRASE_KEYPAD   BIT(6)
1888
#define P2P_PBMA_QR_SCAN             BIT(7)
1889
#define P2P_PBMA_NFC_READER          BIT(8)
1890
#define P2P_PBMA_SERVICE_MANAGED     BIT(14)
1891
#define P2P_PBMA_HANDSHAKE_SKIP      BIT(15)
1892
1893
/* P2PS Coordination Protocol Transport Bitmap */
1894
#define P2PS_FEATURE_CAPAB_UDP_TRANSPORT BIT(0)
1895
#define P2PS_FEATURE_CAPAB_MAC_TRANSPORT BIT(1)
1896
1897
struct p2ps_feature_capab {
1898
  u8 cpt;
1899
  u8 reserved;
1900
} STRUCT_PACKED;
1901
1902
/* Invitation Flags */
1903
#define P2P_INVITATION_FLAGS_TYPE BIT(0)
1904
1905
/* P2P Manageability */
1906
#define P2P_MAN_DEVICE_MANAGEMENT BIT(0)
1907
#define P2P_MAN_CROSS_CONNECTION_PERMITTED BIT(1)
1908
#define P2P_MAN_COEXISTENCE_OPTIONAL BIT(2)
1909
1910
enum p2p_status_code {
1911
  P2P_SC_SUCCESS = 0,
1912
  P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE = 1,
1913
  P2P_SC_FAIL_INCOMPATIBLE_PARAMS = 2,
1914
  P2P_SC_FAIL_LIMIT_REACHED = 3,
1915
  P2P_SC_FAIL_INVALID_PARAMS = 4,
1916
  P2P_SC_FAIL_UNABLE_TO_ACCOMMODATE = 5,
1917
  P2P_SC_FAIL_PREV_PROTOCOL_ERROR = 6,
1918
  P2P_SC_FAIL_NO_COMMON_CHANNELS = 7,
1919
  P2P_SC_FAIL_UNKNOWN_GROUP = 8,
1920
  P2P_SC_FAIL_BOTH_GO_INTENT_15 = 9,
1921
  P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD = 10,
1922
  P2P_SC_FAIL_REJECTED_BY_USER = 11,
1923
  P2P_SC_SUCCESS_DEFERRED = 12,
1924
  P2P_SC_COMEBACK = 13,
1925
};
1926
1927
enum p2p_role_indication {
1928
  P2P_DEVICE_NOT_IN_GROUP = 0x00,
1929
  P2P_CLIENT_IN_A_GROUP = 0x01,
1930
  P2P_GO_IN_A_GROUP = 0x02,
1931
};
1932
1933
#define P2P_WILDCARD_SSID "DIRECT-"
1934
#define P2P_WILDCARD_SSID_LEN 7
1935
1936
/* P2P action frames */
1937
enum p2p_act_frame_type {
1938
  P2P_NOA = 0,
1939
  P2P_PRESENCE_REQ = 1,
1940
  P2P_PRESENCE_RESP = 2,
1941
  P2P_GO_DISC_REQ = 3
1942
};
1943
1944
/* P2P public action frames */
1945
enum p2p_action_frame_type {
1946
  P2P_GO_NEG_REQ = 0,
1947
  P2P_GO_NEG_RESP = 1,
1948
  P2P_GO_NEG_CONF = 2,
1949
  P2P_INVITATION_REQ = 3,
1950
  P2P_INVITATION_RESP = 4,
1951
  P2P_DEV_DISC_REQ = 5,
1952
  P2P_DEV_DISC_RESP = 6,
1953
  P2P_PROV_DISC_REQ = 7,
1954
  P2P_PROV_DISC_RESP = 8
1955
};
1956
1957
enum p2p_service_protocol_type {
1958
  P2P_SERV_ALL_SERVICES = 0,
1959
  P2P_SERV_BONJOUR = 1,
1960
  P2P_SERV_UPNP = 2,
1961
  P2P_SERV_WS_DISCOVERY = 3,
1962
  P2P_SERV_WIFI_DISPLAY = 4,
1963
  P2P_SERV_P2PS = 11,
1964
  P2P_SERV_VENDOR_SPECIFIC = 255
1965
};
1966
1967
enum p2p_sd_status {
1968
  P2P_SD_SUCCESS = 0,
1969
  P2P_SD_PROTO_NOT_AVAILABLE = 1,
1970
  P2P_SD_REQUESTED_INFO_NOT_AVAILABLE = 2,
1971
  P2P_SD_BAD_REQUEST = 3
1972
};
1973
1974
1975
enum wifi_display_subelem {
1976
  WFD_SUBELEM_DEVICE_INFO = 0,
1977
  WFD_SUBELEM_ASSOCIATED_BSSID = 1,
1978
  WFD_SUBELEM_AUDIO_FORMATS = 2,
1979
  WFD_SUBELEM_VIDEO_FORMATS = 3,
1980
  WFD_SUBELEM_3D_VIDEO_FORMATS = 4,
1981
  WFD_SUBELEM_CONTENT_PROTECTION = 5,
1982
  WFD_SUBELEM_COUPLED_SINK = 6,
1983
  WFD_SUBELEM_EXT_CAPAB = 7,
1984
  WFD_SUBELEM_LOCAL_IP_ADDRESS = 8,
1985
  WFD_SUBELEM_SESSION_INFO = 9,
1986
  WFD_SUBELEM_MAC_INFO = 10,
1987
  WFD_SUBELEM_R2_DEVICE_INFO = 11,
1988
};
1989
1990
/* 802.11s */
1991
#define MESH_SYNC_METHOD_NEIGHBOR_OFFSET 1
1992
#define MESH_SYNC_METHOD_VENDOR   255
1993
#define MESH_PATH_PROTOCOL_HWMP   1
1994
#define MESH_PATH_PROTOCOL_VENDOR 255
1995
#define MESH_PATH_METRIC_AIRTIME  1
1996
#define MESH_PATH_METRIC_VENDOR   255
1997
/* IEEE 802.11s - Mesh Capability */
1998
#define MESH_CAP_ACCEPT_ADDITIONAL_PEER BIT(0)
1999
#define MESH_CAP_MCCA_SUPPORTED   BIT(1)
2000
#define MESH_CAP_MCCA_ENABLED   BIT(2)
2001
#define MESH_CAP_FORWARDING   BIT(3)
2002
#define MESH_CAP_MBCA_ENABLED   BIT(4)
2003
#define MESH_CAP_TBTT_ADJUSTING   BIT(5)
2004
#define MESH_CAP_MESH_PS_LEVEL    BIT(6)
2005
2006
enum plink_action_field {
2007
  PLINK_OPEN = 1,
2008
  PLINK_CONFIRM,
2009
  PLINK_CLOSE
2010
};
2011
2012
#define OUI_BROADCOM 0x00904c /* Broadcom (Epigram) */
2013
#define VENDOR_VHT_TYPE   0x04
2014
#define VENDOR_VHT_SUBTYPE  0x08
2015
#define VENDOR_VHT_SUBTYPE2 0x00
2016
2017
#define VENDOR_HT_CAPAB_OUI_TYPE 0x33 /* 00-90-4c:0x33 */
2018
2019
2020
/* IEEE 802.11v - WNM Action field values */
2021
enum wnm_action {
2022
  WNM_EVENT_REQ = 0,
2023
  WNM_EVENT_REPORT = 1,
2024
  WNM_DIAGNOSTIC_REQ = 2,
2025
  WNM_DIAGNOSTIC_REPORT = 3,
2026
  WNM_LOCATION_CFG_REQ = 4,
2027
  WNM_LOCATION_CFG_RESP = 5,
2028
  WNM_BSS_TRANS_MGMT_QUERY = 6,
2029
  WNM_BSS_TRANS_MGMT_REQ = 7,
2030
  WNM_BSS_TRANS_MGMT_RESP = 8,
2031
  WNM_FMS_REQ = 9,
2032
  WNM_FMS_RESP = 10,
2033
  WNM_COLLOCATED_INTERFERENCE_REQ = 11,
2034
  WNM_COLLOCATED_INTERFERENCE_REPORT = 12,
2035
  WNM_TFS_REQ = 13,
2036
  WNM_TFS_RESP = 14,
2037
  WNM_TFS_NOTIFY = 15,
2038
  WNM_SLEEP_MODE_REQ = 16,
2039
  WNM_SLEEP_MODE_RESP = 17,
2040
  WNM_TIM_BROADCAST_REQ = 18,
2041
  WNM_TIM_BROADCAST_RESP = 19,
2042
  WNM_QOS_TRAFFIC_CAPAB_UPDATE = 20,
2043
  WNM_CHANNEL_USAGE_REQ = 21,
2044
  WNM_CHANNEL_USAGE_RESP = 22,
2045
  WNM_DMS_REQ = 23,
2046
  WNM_DMS_RESP = 24,
2047
  WNM_TIMING_MEASUREMENT_REQ = 25,
2048
  WNM_NOTIFICATION_REQ = 26,
2049
  WNM_NOTIFICATION_RESP = 27
2050
};
2051
2052
/* IEEE 802.11v - BSS Transition Management Request - Request Mode */
2053
#define WNM_BSS_TM_REQ_PREF_CAND_LIST_INCLUDED BIT(0)
2054
#define WNM_BSS_TM_REQ_ABRIDGED BIT(1)
2055
#define WNM_BSS_TM_REQ_DISASSOC_IMMINENT BIT(2)
2056
#define WNM_BSS_TM_REQ_BSS_TERMINATION_INCLUDED BIT(3)
2057
#define WNM_BSS_TM_REQ_ESS_DISASSOC_IMMINENT BIT(4)
2058
#define WNM_BSS_TM_REQ_LINK_REMOVAL_IMMINENT BIT(5)
2059
2060
/* IEEE Std 802.11-2020, Table 9-428 (BTM status code definitions) */
2061
enum bss_trans_mgmt_status_code {
2062
  WNM_BSS_TM_ACCEPT = 0,
2063
  WNM_BSS_TM_REJECT_UNSPECIFIED = 1,
2064
  WNM_BSS_TM_REJECT_INSUFFICIENT_BEACON = 2,
2065
  WNM_BSS_TM_REJECT_INSUFFICIENT_CAPABITY = 3,
2066
  WNM_BSS_TM_REJECT_UNDESIRED = 4,
2067
  WNM_BSS_TM_REJECT_DELAY_REQUEST = 5,
2068
  WNM_BSS_TM_REJECT_STA_CANDIDATE_LIST_PROVIDED = 6,
2069
  WNM_BSS_TM_REJECT_NO_SUITABLE_CANDIDATES = 7,
2070
  WNM_BSS_TM_REJECT_LEAVING_ESS = 8
2071
};
2072
2073
/* BSS transition management reasons
2074
 * IEEE Std 802.11-2020, Table 9-198 (Transition and Transition Query reasons)
2075
 */
2076
enum bss_trans_mgmt_reason {
2077
  WNM_TRANSITION_REASON_UNSPECIFIED = 0,
2078
  WNM_TRANSITION_REASON_EXCESSIVE_FRAME_LOSS = 1,
2079
  WNM_TRANSITION_REASON_EXCESSIVE_DELAY = 2,
2080
  WNM_TRANSITION_REASON_INSUFFICIENT_QOS = 3,
2081
  WNM_TRANSITION_REASON_FIRST_ESS_ASSOC = 4,
2082
  WNM_TRANSITION_REASON_LOAD_BALANCING = 5,
2083
  WNM_TRANSITION_REASON_BETTER_AP_FOUND = 6,
2084
  WNM_TRANSITION_REASON_DEAUTH_FROM_PREV_AP = 7,
2085
  WNM_TRANSITION_REASON_AP_FAILED_EAP = 8,
2086
  WNM_TRANSITION_REASON_AP_FAILED_4WAY_HS = 9,
2087
  WNM_TRANSITION_REASON_RX_TOO_MANY_REPLAYS = 10,
2088
  WNM_TRANSITION_REASON_RX_TOO_MANY_MIC_FAILURES = 11,
2089
  WNM_TRANSITION_REASON_EXCEEDED_MAX_RETRANS = 12,
2090
  WNM_TRANSITION_REASON_RX_TOO_MANY_BC_DISASSOC = 13,
2091
  WNM_TRANSITION_REASON_RX_TOO_MANY_BC_DEAUTH = 14,
2092
  WNM_TRANSITION_REASON_PREV_TRANSITION_FAILED = 15,
2093
  WNM_TRANSITION_REASON_LOW_RSSI = 16,
2094
  WNM_TRANSITION_REASON_ROAM_FROM_NON_802_11 = 17,
2095
  WNM_TRANSITION_REASON_TRANSITION_DUE_TO_BTM_REQ = 18,
2096
  WNM_TRANSITION_REASON_PREF_TRANSITION_CANDIDATE_LIST = 19,
2097
  WNM_TRANSITION_REASON_LEAVING_ESS = 20,
2098
};
2099
2100
/*
2101
 * IEEE Std 802.11-2020, Table 9-173 - Optional subelement IDs for
2102
 * Neighbor Report
2103
 */
2104
#define WNM_NEIGHBOR_TSF                         1
2105
#define WNM_NEIGHBOR_CONDENSED_COUNTRY_STRING    2
2106
#define WNM_NEIGHBOR_BSS_TRANSITION_CANDIDATE    3
2107
#define WNM_NEIGHBOR_BSS_TERMINATION_DURATION    4
2108
#define WNM_NEIGHBOR_BEARING                     5
2109
#define WNM_NEIGHBOR_WIDE_BW_CHAN                6
2110
#define WNM_NEIGHBOR_MEASUREMENT_REPORT         39
2111
#define WNM_NEIGHBOR_HT_CAPAB                   45
2112
#define WNM_NEIGHBOR_HT_OPER                    61
2113
#define WNM_NEIGHBOR_SEC_CHAN_OFFSET            62
2114
#define WNM_NEIGHBOR_MEASUREMENT_PILOT          66
2115
#define WNM_NEIGHBOR_RRM_ENABLED_CAPABILITIES   70
2116
#define WNM_NEIGHBOR_MULTIPLE_BSSID             71
2117
#define WNM_NEIGHBOR_VHT_CAPAB                 191
2118
#define WNM_NEIGHBOR_VHT_OPER                  192
2119
#define WNM_NEIGHBOR_MULTI_LINK                201
2120
2121
/* QoS action */
2122
enum qos_action {
2123
  QOS_ADDTS_REQ = 0,
2124
  QOS_ADDTS_RESP = 1,
2125
  QOS_DELTS = 2,
2126
  QOS_SCHEDULE = 3,
2127
  QOS_QOS_MAP_CONFIG = 4,
2128
};
2129
2130
/* IEEE Std 802.11-2020, 9.4.2.59 (20/40 BSS Coexistence element) */
2131
#define WLAN_20_40_BSS_COEX_INFO_REQ            BIT(0)
2132
#define WLAN_20_40_BSS_COEX_40MHZ_INTOL         BIT(1)
2133
#define WLAN_20_40_BSS_COEX_20MHZ_WIDTH_REQ     BIT(2)
2134
#define WLAN_20_40_BSS_COEX_OBSS_EXEMPT_REQ     BIT(3)
2135
#define WLAN_20_40_BSS_COEX_OBSS_EXEMPT_GRNT    BIT(4)
2136
2137
struct ieee80211_2040_bss_coex_ie {
2138
  u8 element_id;
2139
  u8 length;
2140
  u8 coex_param;
2141
} STRUCT_PACKED;
2142
2143
struct ieee80211_2040_intol_chan_report {
2144
  u8 element_id;
2145
  u8 length;
2146
  u8 op_class;
2147
  u8 variable[0]; /* Channel List */
2148
} STRUCT_PACKED;
2149
2150
/* IEEE 802.11v - WNM-Sleep Mode element */
2151
struct wnm_sleep_element {
2152
  u8 eid;     /* WLAN_EID_WNMSLEEP */
2153
  u8 len;
2154
  u8 action_type; /* WNM_SLEEP_ENTER/WNM_SLEEP_MODE_EXIT */
2155
  u8 status;
2156
  le16 intval;
2157
} STRUCT_PACKED;
2158
2159
#define WNM_SLEEP_MODE_ENTER 0
2160
#define WNM_SLEEP_MODE_EXIT 1
2161
2162
enum wnm_sleep_mode_response_status {
2163
  WNM_STATUS_SLEEP_ACCEPT = 0,
2164
  WNM_STATUS_SLEEP_EXIT_ACCEPT_GTK_UPDATE = 1,
2165
  WNM_STATUS_DENIED_ACTION = 2,
2166
  WNM_STATUS_DENIED_TMP = 3,
2167
  WNM_STATUS_DENIED_KEY = 4,
2168
  WNM_STATUS_DENIED_OTHER_WNM_SERVICE = 5
2169
};
2170
2171
/* WNM-Sleep Mode subelement IDs */
2172
enum wnm_sleep_mode_subelement_id {
2173
  WNM_SLEEP_SUBELEM_GTK = 0,
2174
  WNM_SLEEP_SUBELEM_IGTK = 1,
2175
  WNM_SLEEP_SUBELEM_BIGTK = 2,
2176
};
2177
2178
/* WNM notification type (IEEE Std 802.11-2020, Table 9-431) */
2179
enum wnm_notification_Type {
2180
  WNM_NOTIF_TYPE_FIRMWARE_UPDATE = 0,
2181
  WNM_NOTIF_TYPE_BEACON_PROTECTION_FAILURE = 2,
2182
  WNM_NOTIF_TYPE_VENDOR_SPECIFIC = 221,
2183
};
2184
2185
struct wnm_event_report_element {
2186
  u8 eid; /* WLAN_EID_EVENT_REPORT */
2187
  u8 len;
2188
  u8 token;
2189
  u8 type;
2190
  u8 status;
2191
  /* Followed by conditional fields */
2192
  union {
2193
    struct {
2194
      u8 tsf[8]; /* Event TSF */
2195
      u8 color_bitmap[8]; /* Event Report field */
2196
    } STRUCT_PACKED bss_color_collision;
2197
    struct {
2198
      u8 tsf[8]; /* Event TSF */
2199
      u8 color; /* Event Report field */
2200
    } STRUCT_PACKED bss_color_in_use;
2201
  } u;
2202
} STRUCT_PACKED;
2203
2204
enum wnm_event_report_status {
2205
  WNM_STATUS_SUCCESSFUL = 0,
2206
  WNM_STATUS_REQ_FAILED = 1,
2207
  WNM_STATUS_REQ_REFUSED = 2,
2208
  WNM_STATUS_REQ_INCAPABLE = 3,
2209
  WNM_STATUS_FREQUENT_TRANSITION = 4,
2210
};
2211
2212
enum wnm_event_report_type {
2213
       WNM_EVENT_TYPE_TRANSITION = 0,
2214
       WNM_EVENT_TYPE_RSNA = 1,
2215
       WNM_EVENT_TYPE_P2P_LINK = 2,
2216
       WNM_EVENT_TYPE_WNM_LOG = 3,
2217
       WNM_EVENT_TYPE_BSS_COLOR_COLLISION = 4,
2218
       WNM_EVENT_TYPE_BSS_COLOR_IN_USE = 5,
2219
};
2220
2221
/* Channel Switch modes (802.11h) */
2222
#define CHAN_SWITCH_MODE_ALLOW_TX 0
2223
#define CHAN_SWITCH_MODE_BLOCK_TX 1
2224
2225
struct tpc_report {
2226
  u8 eid;
2227
  u8 len;
2228
  u8 tx_power;
2229
  u8 link_margin;
2230
} STRUCT_PACKED;
2231
2232
/*
2233
 * IEEE Std 802.11ax-2021, Table 9-275a - Maximum Transmit Power
2234
 * Interpretation subfield encoding
2235
 */
2236
enum max_tx_pwr_interpretation {
2237
  LOCAL_EIRP = 0,
2238
  LOCAL_EIRP_PSD = 1,
2239
  REGULATORY_CLIENT_EIRP = 2,
2240
  REGULATORY_CLIENT_EIRP_PSD = 3,
2241
};
2242
2243
/*
2244
 * IEEE Std 802.11ax-2021, Table E-13 - Maximum Transmit Power
2245
 * Category subfield encoding in the United States
2246
 */
2247
enum reg_6g_client_type {
2248
  REG_DEFAULT_CLIENT = 0,
2249
  REG_SUBORDINATE_CLIENT = 1,
2250
};
2251
2252
#define RRM_CAPABILITIES_IE_LEN 5
2253
2254
/* IEEE Std 802.11-2020, 9.6.6.4 - Link Measurement Request frame format */
2255
struct rrm_link_measurement_request {
2256
  u8 dialog_token;
2257
  s8 tx_power;
2258
  s8 max_tp;
2259
  u8 variable[0];
2260
} STRUCT_PACKED;
2261
2262
/* IEEE Std 802.11-2020, 9.6.6.5 - Link Measurement Report frame format */
2263
struct rrm_link_measurement_report {
2264
  u8 dialog_token;
2265
  struct tpc_report tpc;
2266
  u8 rx_ant_id;
2267
  u8 tx_ant_id;
2268
  u8 rcpi;
2269
  u8 rsni;
2270
  u8 variable[0];
2271
} STRUCT_PACKED;
2272
2273
/* IEEE Std 802.11-2020, 9.4.2.20 - Measurement Request element */
2274
struct rrm_measurement_request_element {
2275
  u8 eid; /* Element ID */
2276
  u8 len; /* Length */
2277
  u8 token; /* Measurement Token */
2278
  u8 mode; /* Measurement Request Mode */
2279
  u8 type; /* Measurement Type */
2280
  u8 variable[0]; /* Measurement Request */
2281
} STRUCT_PACKED;
2282
2283
/* IEEE Std 802.11-2020, Figure 9-180 - Measurement Request Mode field format */
2284
#define MEASUREMENT_REQUEST_MODE_PARALLEL BIT(0)
2285
#define MEASUREMENT_REQUEST_MODE_ENABLE BIT(1)
2286
#define MEASUREMENT_REQUEST_MODE_REQUEST BIT(2)
2287
#define MEASUREMENT_REQUEST_MODE_REPORT BIT(3)
2288
#define MEASUREMENT_REQUEST_MODE_DURATION_MANDATORY BIT(4)
2289
2290
/* IEEE Std 802.11-2020, 9.4.2.20.7 - Beacon request */
2291
struct rrm_measurement_beacon_request {
2292
  u8 oper_class; /* Operating Class */
2293
  u8 channel; /* Channel Number */
2294
  le16 rand_interval; /* Randomization Interval (in TUs) */
2295
  le16 duration; /* Measurement Duration (in TUs) */
2296
  u8 mode; /* Measurement Mode */
2297
  u8 bssid[ETH_ALEN]; /* BSSID */
2298
  u8 variable[0]; /* Optional Subelements */
2299
} STRUCT_PACKED;
2300
2301
/*
2302
 * IEEE Std 802.11-2020, Table 9-103 - Measurement Mode definitions for Beacon
2303
 * request
2304
 */
2305
enum beacon_report_mode {
2306
  BEACON_REPORT_MODE_PASSIVE = 0,
2307
  BEACON_REPORT_MODE_ACTIVE = 1,
2308
  BEACON_REPORT_MODE_TABLE = 2,
2309
};
2310
2311
/* IEEE Std 802.11-2020, Table 9-104 - Optional subelement IDs for
2312
 * Beacon request */
2313
#define WLAN_BEACON_REQUEST_SUBELEM_SSID  0
2314
#define WLAN_BEACON_REQUEST_SUBELEM_INFO  1 /* Beacon Reporting */
2315
#define WLAN_BEACON_REQUEST_SUBELEM_DETAIL  2 /* Reporting Detail */
2316
#define WLAN_BEACON_REQUEST_SUBELEM_REQUEST 10
2317
#define WLAN_BEACON_REQUEST_SUBELEM_EXT_REQUEST 11
2318
#define WLAN_BEACON_REQUEST_SUBELEM_AP_CHANNEL  51 /* AP Channel Report */
2319
#define WLAN_BEACON_REQUEST_SUBELEM_WIDE_BW_CS  163
2320
#define WLAN_BEACON_REQUEST_SUBELEM_LAST_INDICATION 164
2321
#define WLAN_BEACON_REQUEST_SUBELEM_VENDOR  221
2322
2323
/* IEEE Std 802.11-2020, Table 9-106 - Reporting Detail values */
2324
enum beacon_report_detail {
2325
  /* No fixed-length fields or elements */
2326
  BEACON_REPORT_DETAIL_NONE = 0,
2327
  /* All fixed-length fields and any requested elements in the Request
2328
   * element if present */
2329
  BEACON_REPORT_DETAIL_REQUESTED_ONLY = 1,
2330
  /* All fixed-length fields and elements (default, used when Reporting
2331
   * Detail subelement is not included in a Beacon request) */
2332
  BEACON_REPORT_DETAIL_ALL_FIELDS_AND_ELEMENTS = 2,
2333
};
2334
2335
/* IEEE Std 802.11-2020, 9.4.2.21 - Measurement Report element */
2336
struct rrm_measurement_report_element {
2337
  u8 eid; /* Element ID */
2338
  u8 len; /* Length */
2339
  u8 token; /* Measurement Token */
2340
  u8 mode; /* Measurement Report Mode */
2341
  u8 type; /* Measurement Type */
2342
  u8 variable[0]; /* Measurement Report */
2343
} STRUCT_PACKED;
2344
2345
/* IEEE Std 802.11-2020, Figure 9-223 - Measurement Report Mode field */
2346
#define MEASUREMENT_REPORT_MODE_ACCEPT 0
2347
#define MEASUREMENT_REPORT_MODE_REJECT_LATE BIT(0)
2348
#define MEASUREMENT_REPORT_MODE_REJECT_INCAPABLE BIT(1)
2349
#define MEASUREMENT_REPORT_MODE_REJECT_REFUSED BIT(2)
2350
2351
/* IEEE Std 802.11-2020, 9.4.2.21.7 - Beacon report */
2352
struct rrm_measurement_beacon_report {
2353
  u8 op_class; /* Operating Class */
2354
  u8 channel; /* Channel Number */
2355
  le64 start_time; /* Actual Measurement Start Time
2356
        * (in TSF of the BSS requesting the measurement) */
2357
  le16 duration; /* in TUs */
2358
  u8 report_info; /* Reported Frame Information */
2359
  u8 rcpi; /* RCPI */
2360
  u8 rsni; /* RSNI */
2361
  u8 bssid[ETH_ALEN]; /* BSSID */
2362
  u8 antenna_id; /* Antenna ID */
2363
  le32 parent_tsf; /* Parent TSF */
2364
  u8 variable[0]; /* Optional Subelements */
2365
} STRUCT_PACKED;
2366
2367
/* IEEE Std 802.11-2020, Table 9-130 - Optional subelement IDs for
2368
 * Beacon report */
2369
#define WLAN_BEACON_REPORT_SUBELEM_FRAME_BODY 1
2370
#define WLAN_BEACON_REPORT_SUBELEM_FRAME_BODY_FRAGMENT_ID 2
2371
#define WLAN_BEACON_REPORT_SUBELEM_WID_BW_CS  163
2372
#define WLAN_BEACON_REPORT_SUBELEM_LAST_INDICATION  164
2373
#define WLAN_BEACON_REPORT_SUBELEM_VENDOR 221
2374
2375
/* IEEE Std 802.11-2020, Table 9-232 - Data field format (of the
2376
 * Reported Frame Body Fragment ID subelement) */
2377
#define REPORTED_FRAME_BODY_SUBELEM_LEN   4
2378
#define REPORTED_FRAME_BODY_MORE_FRAGMENTS  BIT(7)
2379
2380
/* IEEE Std 802.11-2020, 9.4.2.21.7 - Beacon report  */
2381
#define BEACON_REPORT_LAST_INDICATION_SUBELEM_LEN 3
2382
2383
/* IEEE Std 802.11-2020, 9.4.2.138 - Multi-band element */
2384
struct multi_band_ie {
2385
  u8 eid; /* WLAN_EID_MULTI_BAND */
2386
  u8 len;
2387
  u8 mb_ctrl;
2388
  u8 band_id;
2389
  u8 op_class;
2390
  u8 chan;
2391
  u8 bssid[ETH_ALEN];
2392
  le16 beacon_int;
2393
  u8 tsf_offs[8];
2394
  u8 mb_connection_capability;
2395
  u8 fst_session_tmout;
2396
  /* Optional:
2397
   *   STA MAC Address
2398
   *   Pairwise Cipher Suite Count
2399
   *   Pairwise Cipher Suite List
2400
   */
2401
  u8 variable[0];
2402
} STRUCT_PACKED;
2403
2404
enum mb_ctrl_sta_role {
2405
  MB_STA_ROLE_AP = 0,
2406
  MB_STA_ROLE_TDLS_STA = 1,
2407
  MB_STA_ROLE_IBSS_STA = 2,
2408
  MB_STA_ROLE_PCP = 3,
2409
  MB_STA_ROLE_NON_PCP_NON_AP = 4
2410
};
2411
2412
#define MB_CTRL_ROLE_MASK (BIT(0) | BIT(1) | BIT(2))
2413
#define MB_CTRL_ROLE(ctrl) ((u8) ((ctrl) & MB_CTRL_ROLE_MASK))
2414
#define MB_CTRL_STA_MAC_PRESENT ((u8) (BIT(3)))
2415
#define MB_CTRL_PAIRWISE_CIPHER_SUITE_PRESENT ((u8) (BIT(4)))
2416
2417
enum mb_band_id {
2418
  MB_BAND_ID_WIFI_2_4GHZ = 2, /* 2.4 GHz */
2419
  MB_BAND_ID_WIFI_5GHZ = 4, /* 4.9 and 5 GHz */
2420
  MB_BAND_ID_WIFI_60GHZ = 5, /* 60 GHz */
2421
};
2422
2423
#define MB_CONNECTION_CAPABILITY_AP ((u8) (BIT(0)))
2424
#define MB_CONNECTION_CAPABILITY_PCP ((u8) (BIT(1)))
2425
#define MB_CONNECTION_CAPABILITY_DLS ((u8) (BIT(2)))
2426
#define MB_CONNECTION_CAPABILITY_TDLS ((u8) (BIT(3)))
2427
#define MB_CONNECTION_CAPABILITY_IBSS ((u8) (BIT(4)))
2428
2429
/* IEEE Std 802.11-2020, Table 9-479 - FST Action field values */
2430
enum fst_action {
2431
  FST_ACTION_SETUP_REQUEST = 0,
2432
  FST_ACTION_SETUP_RESPONSE = 1,
2433
  FST_ACTION_TEAR_DOWN = 2,
2434
  FST_ACTION_ACK_REQUEST = 3,
2435
  FST_ACTION_ACK_RESPONSE = 4,
2436
  FST_ACTION_ON_CHANNEL_TUNNEL = 5,
2437
};
2438
2439
/* IEEE Std 802.11-2020, Annex C - dot11PHYType */
2440
enum phy_type {
2441
  PHY_TYPE_UNSPECIFIED = 0,
2442
  PHY_TYPE_DSSS = 2,
2443
  PHY_TYPE_OFDM = 4,
2444
  PHY_TYPE_HRDSSS = 5,
2445
  PHY_TYPE_ERP = 6,
2446
  PHY_TYPE_HT = 7,
2447
  PHY_TYPE_DMG = 8,
2448
  PHY_TYPE_VHT = 9,
2449
  PHY_TYPE_TVHT = 10,
2450
  PHY_TYPE_S1G = 11,
2451
  PHY_TYPE_CDMG = 12,
2452
  PHY_TYPE_CMMG = 13,
2453
  PHY_TYPE_HE = 14,
2454
};
2455
2456
/* IEEE Std 802.11-2024, 9.4.2.35 - Neighbor Report element */
2457
/* BSSID Information Field */
2458
#define NEI_REP_BSSID_INFO_AP_NOT_REACH BIT(0)
2459
#define NEI_REP_BSSID_INFO_AP_UNKNOWN_REACH BIT(1)
2460
#define NEI_REP_BSSID_INFO_AP_REACHABLE (BIT(0) | BIT(1))
2461
#define NEI_REP_BSSID_INFO_SECURITY BIT(2)
2462
#define NEI_REP_BSSID_INFO_KEY_SCOPE BIT(3)
2463
#define NEI_REP_BSSID_INFO_SPECTRUM_MGMT BIT(4)
2464
#define NEI_REP_BSSID_INFO_QOS BIT(5)
2465
#define NEI_REP_BSSID_INFO_APSD BIT(6)
2466
#define NEI_REP_BSSID_INFO_RM BIT(7)
2467
/* bit 8 is reserved (was NEI_REP_BSSID_INFO_DELAYED_BA) */
2468
/* bit 9 is reserved (was NEI_REP_BSSID_INFO_IMM_BA) */
2469
#define NEI_REP_BSSID_INFO_MOBILITY_DOMAIN BIT(10)
2470
#define NEI_REP_BSSID_INFO_HT BIT(11)
2471
#define NEI_REP_BSSID_INFO_VHT BIT(12)
2472
#define NEI_REP_BSSID_INFO_FTM BIT(13)
2473
#define NEI_REP_BSSID_INFO_HE BIT(14)
2474
#define NEI_REP_BSSID_INFO_ER_BSS BIT(15)
2475
#define NEI_REP_BSSID_INFO_COLOCATED_AP BIT(16)
2476
#define NEI_REP_BSSID_INFO_UNSOLIC_PROBE_RESP BIT(17)
2477
#define NEI_REP_BSSID_INFO_MEMBER_OF_ESS_WITH_COLOC_AP BIT(18)
2478
#define NEI_REP_BSSID_INFO_OCT_WITH_REPORTING_AP BIT(19)
2479
#define NEI_REP_BSSID_INFO_COLOCATED_WITH_6GHZ BIT(20)
2480
#define NEI_REP_BSSID_INFO_EHT BIT(21)
2481
#define NEI_REP_BSSID_INFO_DMG_POSITIONING BIT(22)
2482
2483
/*
2484
 * IEEE Std 802.11-2020, Table 9-175 - HT/VHT Operation Information
2485
 * subfields.
2486
 * Note: These definitions are not the same as other CHANWIDTH_*.
2487
 */
2488
enum nr_chan_width {
2489
  NR_CHAN_WIDTH_20 = 0,
2490
  NR_CHAN_WIDTH_40 = 1,
2491
  NR_CHAN_WIDTH_80 = 2,
2492
  NR_CHAN_WIDTH_160 = 3,
2493
  NR_CHAN_WIDTH_80P80 = 4,
2494
};
2495
2496
struct ieee80211_he_capabilities {
2497
  u8 he_mac_capab_info[6];
2498
  u8 he_phy_capab_info[11];
2499
  /* Supported HE-MCS And NSS Set field */
2500
  struct {
2501
    le16 rx_map; /* Rx HE-MCS Map <= 80 MHz */
2502
    le16 tx_map; /* Tx HE-MCS Map <= 80 MHz */
2503
    /* Followed by 0, 4, or 8 octets of optional Rx/Tx HE-MCS maps
2504
     * for 160 MHz and 80+80 MHz. These are included in the
2505
     * optional[] below. */
2506
  } he_basic_supported_mcs_set;
2507
  /* Followed by optional variable length PPE Thresholds field. */
2508
  u8 optional[33];
2509
} STRUCT_PACKED;
2510
#define IEEE80211_HE_CAPAB_MIN_LEN (6 + 11)
2511
2512
struct ieee80211_he_operation {
2513
  le32 he_oper_params; /* HE Operation Parameters[3] and
2514
            * BSS Color Information[1] */
2515
  le16 he_mcs_nss_set;
2516
  /* Followed by conditional VHT Operation Information (3 octets),
2517
   * Max Co-Hosted BSSID Indicator subfield (1 octet), and/or 6 GHz
2518
   * Operation Information subfield (5 octets). */
2519
} STRUCT_PACKED;
2520
2521
/* IEEE Std 802.11ax-2021, Figure 9-788k - 6 GHz Operation Information field */
2522
struct ieee80211_he_6ghz_oper_info {
2523
  u8 primary_chan;
2524
  u8 control;
2525
  u8 chan_center_freq_seg0;
2526
  u8 chan_center_freq_seg1;
2527
  u8 min_rate;
2528
} STRUCT_PACKED;
2529
2530
/* IEEE Std 802.11ax-2021, Figure 9-788l - Control field format */
2531
#define HE_6GHZ_OPER_INFO_CTRL_CHAN_WIDTH_MASK  (BIT(0) | BIT(1))
2532
#define HE_6GHZ_OPER_INFO_CTRL_DUP_BEACON BIT(2)
2533
#define HE_6GHZ_OPER_INFO_CTRL_REG_INFO_MASK  (BIT(3) | BIT(4) | BIT(5))
2534
#define HE_6GHZ_OPER_INFO_CTRL_REG_INFO_SHIFT 3
2535
2536
/* IEEE Std 802.11ax-2021, 9.4.2.263 HE 6 GHz Band Capabilities element */
2537
struct ieee80211_he_6ghz_band_cap {
2538
   /* Minimum MPDU Start Spacing B0..B2
2539
    * Maximum A-MPDU Length Exponent B3..B5
2540
    * Maximum MPDU Length B6..B7
2541
    * SM Power Save B9..B10
2542
    * RD Responder B11
2543
    * Rx Antenna Pattern Consistency B12
2544
    * Tx Antenna Consistency B13 */
2545
  le16 capab; /* Capabilities Information field */
2546
} STRUCT_PACKED;
2547
2548
#define HE_6GHZ_BAND_CAP_MIN_MPDU_START              (BIT(0) | BIT(1) | BIT(2))
2549
#define HE_6GHZ_BAND_CAP_MAX_AMPDU_LEN_EXP_16K       BIT(3)
2550
#define HE_6GHZ_BAND_CAP_MAX_AMPDU_LEN_EXP_32K       BIT(4)
2551
#define HE_6GHZ_BAND_CAP_MAX_AMPDU_LEN_EXP_64K       (BIT(3) | BIT(4))
2552
#define HE_6GHZ_BAND_CAP_MAX_AMPDU_LEN_EXP_128K      BIT(5)
2553
#define HE_6GHZ_BAND_CAP_MAX_AMPDU_LEN_EXP_256K      (BIT(3) | BIT(5))
2554
#define HE_6GHZ_BAND_CAP_MAX_AMPDU_LEN_EXP_512K      (BIT(4) | BIT(5))
2555
#define HE_6GHZ_BAND_CAP_MAX_AMPDU_LEN_EXP_1024K     (BIT(3) | BIT(4) | BIT(5))
2556
#define HE_6GHZ_BAND_CAP_MAX_AMPDU_LEN_EXP_MASK      (BIT(3) | BIT(4) | BIT(5))
2557
#define HE_6GHZ_BAND_CAP_MAX_AMPDU_LEN_EXP_SHIFT     3
2558
#define HE_6GHZ_BAND_CAP_MAX_MPDU_LEN_7991           BIT(6)
2559
#define HE_6GHZ_BAND_CAP_MAX_MPDU_LEN_11454          BIT(7)
2560
#define HE_6GHZ_BAND_CAP_MAX_MPDU_LEN_MASK           (BIT(6) | BIT(7))
2561
#define HE_6GHZ_BAND_CAP_MAX_MPDU_LEN_SHIFT      6
2562
#define HE_6GHZ_BAND_CAP_SMPS_MASK                   (BIT(9) | BIT(10))
2563
#define HE_6GHZ_BAND_CAP_SMPS_STATIC                 0
2564
#define HE_6GHZ_BAND_CAP_SMPS_DYNAMIC                BIT(9)
2565
#define HE_6GHZ_BAND_CAP_SMPS_DISABLED               (BIT(9) | BIT(10))
2566
#define HE_6GHZ_BAND_CAP_RD_RESPONDER                BIT(11)
2567
#define HE_6GHZ_BAND_CAP_RX_ANTPAT_CONS              BIT(12)
2568
#define HE_6GHZ_BAND_CAP_TX_ANTPAT_CONS              BIT(13)
2569
2570
/*
2571
 * IEEE Std 802.11ax-2021, 9.4.2.252 Spatial Reuse Parameter Set element
2572
 */
2573
struct ieee80211_spatial_reuse {
2574
  u8 sr_ctrl; /* SR Control */
2575
  /* Up to 19 octets of parameters:
2576
   * Non-SRG OBSS PD Max Offset[0 or 1]
2577
   * SRG OBSS PD Min Offset[0 or 1]
2578
   * SRG OBSS PD Max Offset[0 or 1]
2579
   * SRG BSS Color Bitmap[0 or 8]
2580
   * SRG Partial BSSID Bitmap[0 or 8]
2581
   */
2582
  u8 params[19];
2583
} STRUCT_PACKED;
2584
2585
#define HE_CAPABILITIES_ELEM_MIN_LEN    21
2586
2587
/* HE Capabilities Information defines */
2588
2589
#define HE_MACCAP_TWT_RESPONDER     ((u8) BIT(2))
2590
2591
#define HE_PHYCAP_CHANNEL_WIDTH_SET_IDX   0
2592
#define HE_PHYCAP_CHANNEL_WIDTH_MASK    ((u8) (BIT(1) | BIT(2) | \
2593
                  BIT(3) | BIT(4)))
2594
#define HE_PHYCAP_CHANNEL_WIDTH_SET_40MHZ_IN_2G         ((u8) BIT(1))
2595
#define HE_PHYCAP_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G ((u8) BIT(2))
2596
#define HE_PHYCAP_CHANNEL_WIDTH_SET_160MHZ_IN_5G  ((u8) BIT(3))
2597
#define HE_PHYCAP_CHANNEL_WIDTH_SET_80PLUS80MHZ_IN_5G ((u8) BIT(4))
2598
2599
#define HE_PHYCAP_SU_BEAMFORMER_CAPAB_IDX 3
2600
#define HE_PHYCAP_SU_BEAMFORMER_CAPAB   ((u8) BIT(7))
2601
#define HE_PHYCAP_SU_BEAMFORMEE_CAPAB_IDX 4
2602
#define HE_PHYCAP_SU_BEAMFORMEE_CAPAB   ((u8) BIT(0))
2603
#define HE_PHYCAP_MU_BEAMFORMER_CAPAB_IDX 4
2604
#define HE_PHYCAP_MU_BEAMFORMER_CAPAB   ((u8) BIT(1))
2605
2606
#define HE_PHYCAP_PPE_THRESHOLD_PRESENT_IDX 6
2607
#define HE_PHYCAP_PPE_THRESHOLD_PRESENT   ((u8) BIT(7))
2608
2609
/* HE PPE Threshold define */
2610
#define HE_PPE_THRES_RU_INDEX_BITMASK_MASK  0xf
2611
#define HE_PPE_THRES_RU_INDEX_BITMASK_SHIFT 3
2612
#define HE_PPE_THRES_NSS_MASK     0x7
2613
2614
/* HE Operation defines */
2615
/* HE Operation Parameters and BSS Color Information fields */
2616
#define HE_OPERATION_DFLT_PE_DURATION_MASK  ((u32) (BIT(0) | BIT(1) | \
2617
              BIT(2)))
2618
#define HE_OPERATION_DFLT_PE_DURATION_OFFSET  0
2619
#define HE_OPERATION_TWT_REQUIRED   ((u32) BIT(3))
2620
#define HE_OPERATION_RTS_THRESHOLD_MASK ((u32) (BIT(4) | BIT(5) | \
2621
            BIT(6) | BIT(7) | \
2622
            BIT(8) | BIT(9) | \
2623
            BIT(10) | BIT(11) | \
2624
            BIT(12) | BIT(13)))
2625
#define HE_OPERATION_RTS_THRESHOLD_OFFSET 4
2626
#define HE_OPERATION_VHT_OPER_INFO    ((u32) BIT(14))
2627
#define HE_OPERATION_COHOSTED_BSS   ((u32) BIT(15))
2628
#define HE_OPERATION_ER_SU_DISABLE    ((u32) BIT(16))
2629
#define HE_OPERATION_6GHZ_OPER_INFO   ((u32) BIT(17))
2630
#define HE_OPERATION_BSS_COLOR_MASK   ((u32) (BIT(24) | BIT(25) | \
2631
              BIT(26) | BIT(27) | \
2632
              BIT(28) | BIT(29)))
2633
#define HE_OPERATION_BSS_COLOR_PARTIAL    ((u32) BIT(30))
2634
#define HE_OPERATION_BSS_COLOR_DISABLED   ((u32) BIT(31))
2635
#define HE_OPERATION_BSS_COLOR_OFFSET   24
2636
#define HE_OPERATION_BSS_COLOR_MAX    64
2637
2638
/* HE operation fields length */
2639
#define HE_OPERATION_ELEM_MIN_LEN       6
2640
#define HE_OPERATION_VHT_OPER_INFO_LEN        3
2641
#define HE_OPERATION_COHOSTED_BSSID_INDICATOR_LEN   1
2642
#define HE_OPERATION_6GHZ_OPER_INFO_LEN       5
2643
2644
/**
2645
 * enum he_reg_info_6ghz_ap_type - Allowed Access Point types for 6 GHz Band
2646
 *
2647
 * IEEE Std 802.11-2024, Table E-12 (Regulatory Info subfield interpretation by
2648
 * non-AP STAs with dot11ExtendedRegInfoSupport not set to true)
2649
 */
2650
enum he_reg_info_6ghz_ap_type {
2651
  HE_REG_INFO_6GHZ_AP_TYPE_INDOOR         = 0,
2652
  HE_REG_INFO_6GHZ_AP_TYPE_SP   = 1,
2653
  HE_REG_INFO_6GHZ_AP_TYPE_VLP    = 2,
2654
  HE_REG_INFO_6GHZ_AP_TYPE_INDOOR_ENABLED = 3,
2655
  HE_REG_INFO_6GHZ_AP_TYPE_INDOOR_SP  = 4,
2656
  HE_REG_INFO_6GHZ_AP_TYPE_MAX = HE_REG_INFO_6GHZ_AP_TYPE_INDOOR_SP,
2657
};
2658
2659
static inline bool he_reg_is_indoor(enum he_reg_info_6ghz_ap_type type)
2660
0
{
2661
0
  return type == HE_REG_INFO_6GHZ_AP_TYPE_INDOOR ||
2662
0
    type == HE_REG_INFO_6GHZ_AP_TYPE_INDOOR_SP;
2663
0
}
2664
2665
static inline bool he_reg_is_sp(enum he_reg_info_6ghz_ap_type type)
2666
0
{
2667
0
  return type == HE_REG_INFO_6GHZ_AP_TYPE_SP ||
2668
0
    type == HE_REG_INFO_6GHZ_AP_TYPE_INDOOR_SP;
2669
0
}
2670
2671
/* Spatial Reuse defines */
2672
#define SPATIAL_REUSE_SRP_DISALLOWED    BIT(0)
2673
#define SPATIAL_REUSE_NON_SRG_OBSS_PD_SR_DISALLOWED BIT(1)
2674
#define SPATIAL_REUSE_NON_SRG_OFFSET_PRESENT  BIT(2)
2675
#define SPATIAL_REUSE_SRG_INFORMATION_PRESENT BIT(3)
2676
#define SPATIAL_REUSE_HESIGA_SR_VAL15_ALLOWED BIT(4)
2677
2678
struct ieee80211_he_mu_edca_parameter_set {
2679
  u8 he_qos_info;
2680
  u8 he_mu_ac_be_param[3];
2681
  u8 he_mu_ac_bk_param[3];
2682
  u8 he_mu_ac_vi_param[3];
2683
  u8 he_mu_ac_vo_param[3];
2684
} STRUCT_PACKED;
2685
2686
/* HE MU AC parameter record field format */
2687
/* ACI/AIFSN */
2688
#define HE_MU_AC_PARAM_ACI_IDX 0
2689
#define HE_MU_AC_PARAM_AIFSN ((u8) (BIT(0) | BIT(1) | BIT(2) | BIT(3)))
2690
#define HE_MU_AC_PARAM_ACM ((u8) BIT(4))
2691
#define HE_MU_AC_PARAM_ACI ((u8) (BIT(5) | BIT(6)))
2692
/* B7: Reserved */
2693
2694
/* ECWmin/ECWmax */
2695
#define HE_MU_AC_PARAM_ECW_IDX 1
2696
#define HE_MU_AC_PARAM_ECWMIN ((u8) (BIT(0) | BIT(1) | BIT(2) | BIT(3)))
2697
#define HE_MU_AC_PARAM_ECWMAX ((u8) (BIT(4) | BIT(5) | BIT(6) | BIT(7)))
2698
2699
/* MU EDCA Timer */
2700
#define HE_MU_AC_PARAM_TIMER_IDX 2
2701
2702
/* HE QoS Info field */
2703
#define HE_QOS_INFO_EDCA_PARAM_SET_COUNT ((u8) (BIT(0) | BIT(1) | \
2704
            BIT(2) | BIT(3)))
2705
#define HE_QOS_INFO_Q_ACK ((u8) (BIT(4)))
2706
#define HE_QOS_INFO_QUEUE_REQUEST ((u8) (BIT(5)))
2707
#define HE_QOS_INFO_TXOP_REQUEST ((u8) (BIT(6)))
2708
/* B7: Reserved if sent by an AP; More Data Ack if sent by a non-AP STA */
2709
#define HE_QOS_INFO_MORE_DATA_ACK ((u8) (BIT(7)))
2710
2711
/*
2712
 * IEEE Std 802.11-2020 and IEEE Std 802.11ax-2021
2713
 * 9.4.2.170 Reduced Neighbor Report element
2714
 */
2715
#define RNR_HEADER_LEN                              2
2716
#define RNR_TBTT_HEADER_LEN                         4
2717
#define RNR_TBTT_INFO_HDR_TYPE_MSK                  0x03
2718
#define RNR_TBTT_INFO_HDR_FILTERED_AP               0x04
2719
#define RNR_TBTT_INFO_HDR_CNT_MSK                   0xf0
2720
#define RNR_TBTT_INFO_COUNT(x)                      (((x) & 0xf) << 4)
2721
#define RNR_TBTT_INFO_COUNT_MAX                     16
2722
#define RNR_TBTT_INFO_COUNT_VAL(x)                  (((x) & 0xf0) >> 4)
2723
#define RNR_TBTT_INFO_LEN                           13
2724
#define RNR_TBTT_INFO_MLD_LEN                       16
2725
#define RNR_NEIGHBOR_AP_OFFSET_UNKNOWN              255
2726
/* Figure 9-632a - BSS Parameters subfield format */
2727
#define RNR_BSS_PARAM_OCT_RECOMMENDED               BIT(0)
2728
#define RNR_BSS_PARAM_SAME_SSID                     BIT(1)
2729
#define RNR_BSS_PARAM_MULTIPLE_BSSID                BIT(2)
2730
#define RNR_BSS_PARAM_TRANSMITTED_BSSID             BIT(3)
2731
#define RNR_BSS_PARAM_MEMBER_CO_LOCATED_ESS         BIT(4)
2732
#define RNR_BSS_PARAM_UNSOLIC_PROBE_RESP_ACTIVE     BIT(5)
2733
#define RNR_BSS_PARAM_CO_LOCATED                    BIT(6)
2734
/* Maximum transmit power in Y/2 dBm (-127..126); 127 indicates no maximum
2735
 * transmit power is specified for the corresponding 20 MHz channel. */
2736
#define RNR_20_MHZ_PSD_MAX_TXPOWER                  127
2737
2738
/* IEEE Std 802.11be-2024, Figure 9-734c - MLD Parameters subfield format */
2739
/* B0..B7: AP MLD ID */
2740
/* B8..B11: Link ID */
2741
/* B12..B19: BSS Parameters Change Count */
2742
/* B20: All Updates Included */
2743
#define RNR_TBTT_INFO_MLD_PARAM2_ALL_UPDATE_INC 0x10
2744
/* B21: Disabled Link Indication */
2745
#define RNR_TBTT_INFO_MLD_PARAM2_LINK_DISABLED  0x20
2746
2747
/* IEEE Std 802.11be-2024, 9.4.2.321 - EHT Operation element */
2748
#define EHT_OPERATION_ELEM_MIN_LEN                       1
2749
2750
/* Figure 9-1074j: EHT Operation Parameters field format */
2751
#define EHT_OPER_INFO_PRESENT                          BIT(0)
2752
#define EHT_OPER_DISABLED_SUBCHAN_BITMAP_PRESENT       BIT(1)
2753
#define EHT_OPER_DEFAULT_PE_DURATION                   BIT(2)
2754
#define EHT_OPER_GROUP_ADDR_BU_INDICATION_LIMIT        BIT(3)
2755
#define EHT_OPER_GROUP_ADDR_BU_INDICATION_EXPONENT     (BIT(4) | BIT(5))
2756
#define EHT_OPER_MCS15_DISABLE                         BIT(6)
2757
#define EHT_OPER_DISABLED_SUBCHAN_BITMAP_SIZE          2
2758
2759
/* Control subfield: Channel Width subfield; see Table 9-417e (Channel width,
2760
 * CCFS0, and CCFS1 subfields) */
2761
#define EHT_OPER_CHANNEL_WIDTH_MASK                    0x7
2762
#define EHT_OPER_CHANNEL_WIDTH_20MHZ                   0
2763
#define EHT_OPER_CHANNEL_WIDTH_40MHZ                   1
2764
#define EHT_OPER_CHANNEL_WIDTH_80MHZ                   2
2765
#define EHT_OPER_CHANNEL_WIDTH_160MHZ                  3
2766
#define EHT_OPER_CHANNEL_WIDTH_320MHZ                  4
2767
2768
/* Figure 9-1074k: EHT Operation Information field format */
2769
#define EHT_OPER_INFO_MIN_LEN                          3
2770
2771
struct ieee80211_eht_oper_info {
2772
  u8 control; /* B0..B2: Channel Width */
2773
  u8 ccfs0;
2774
  u8 ccfs1;
2775
  le16 disabled_chan_bitmap; /* 0 or 2 octets */
2776
} STRUCT_PACKED;
2777
2778
/* Figure 9-1074i: EHT Operation element format */
2779
struct ieee80211_eht_operation {
2780
  u8 oper_params; /* EHT Operation Parameters: EHT_OPER_* bits */
2781
  u8 basic_eht_mcs_nss_set[4];
2782
  struct ieee80211_eht_oper_info oper_info; /* 0 or 3 or 5 octets */
2783
} STRUCT_PACKED;
2784
2785
#define IEEE80211_EHT_OP_MIN_LEN (1 + 4)
2786
2787
/* IEEE Std 802.11be-2024, 9.4.2.323 - EHT Capabilities element */
2788
#define EHT_CAPABILITIES_ELEM_MIN_LEN             11
2789
2790
/* Figure 9-1074ap: EHT MAC Capabilities Information field format */
2791
#define EHT_MACCAP_EPCS_PRIO      BIT(0)
2792
#define EHT_MACCAP_OM_CONTROL     BIT(1)
2793
#define EHT_MACCAP_TRIGGERED_TXOP_MODE1   BIT(2)
2794
#define EHT_MACCAP_TRIGGERED_TXOP_MODE2   BIT(3)
2795
#define EHT_MACCAP_RESTRICTED_TWT   BIT(4)
2796
#define EHT_MACCAP_SCS_TRAFFIC_DESC   BIT(5)
2797
#define EHT_MACCAP_MAX_MPDU_LEN_MASK    (BIT(6) | BIT(7))
2798
#define EHT_MACCAP_MAX_MPDU_LEN_3895    0
2799
#define EHT_MACCAP_MAX_MPDU_LEN_7991    BIT(6)
2800
#define EHT_MACCAP_MAX_MPDU_LEN_11454   BIT(7)
2801
#define EHT_MACCAP_MAX_AMPDU_LEN_EXP_EXT  BIT(8)
2802
2803
/* Figure 9-1074aq: EHT PHY Capabilities Information field format
2804
 * _IDX indicates the octet index within the field */
2805
#define EHT_PHY_CAPAB_LEN     9
2806
2807
#define EHT_PHYCAP_320MHZ_IN_6GHZ_SUPPORT_IDX 0
2808
#define EHT_PHYCAP_320MHZ_IN_6GHZ_SUPPORT_MASK  ((u8) BIT(1))
2809
2810
#define EHT_PHYCAP_SU_BEAMFORMER_IDX    0
2811
#define EHT_PHYCAP_SU_BEAMFORMER    ((u8) BIT(5))
2812
#define EHT_PHYCAP_SU_BEAMFORMEE_IDX    0
2813
#define EHT_PHYCAP_SU_BEAMFORMEE    ((u8) BIT(6))
2814
2815
#define EHT_PHYCAP_PPE_THRESHOLD_PRESENT_IDX  5
2816
#define EHT_PHYCAP_PPE_THRESHOLD_PRESENT  ((u8) BIT(3))
2817
2818
#define EHT_PHYCAP_MU_BEAMFORMER_IDX    7
2819
#define EHT_PHYCAP_MU_BEAMFORMER_80MHZ    ((u8) BIT(4))
2820
#define EHT_PHYCAP_MU_BEAMFORMER_160MHZ   ((u8) BIT(5))
2821
#define EHT_PHYCAP_MU_BEAMFORMER_320MHZ   ((u8) BIT(6))
2822
#define EHT_PHYCAP_MU_BEAMFORMER_MASK (EHT_PHYCAP_MU_BEAMFORMER_80MHZ | \
2823
           EHT_PHYCAP_MU_BEAMFORMER_160MHZ | \
2824
           EHT_PHYCAP_MU_BEAMFORMER_320MHZ)
2825
2826
/* Figure 9-1074ar: Supported EHT-MCS and NSS Set field format */
2827
#define EHT_PHYCAP_MCS_NSS_LEN_20MHZ_ONLY 4
2828
#define EHT_PHYCAP_MCS_NSS_LEN_20MHZ_PLUS 3
2829
2830
#define EHT_MCS_NSS_CAPAB_LEN     9
2831
/*
2832
 * Figure 9-1074au: EHT PPE Thresholds field format
2833
 * Maximum PPE threshold length: 62 octets
2834
 * NSS: 4 bits (maximum NSS: 16), RU index: 5 bits, each pair: 6 bits
2835
 * 4 + 5 + 5 * 16 * 6 = 489 bits, Padding: 7 bits
2836
 */
2837
#define EHT_PPE_THRESH_CAPAB_LEN    62
2838
2839
/* 9.4.2.323.5: EHT PPE Thresholds field */
2840
#define EHT_PPE_THRES_NSS_SHIFT     0
2841
#define EHT_PPE_THRES_NSS_MASK      ((u8) (BIT(0) | BIT(1) | \
2842
                   BIT(2) | BIT(3)))
2843
#define EHT_PPE_THRES_RU_INDEX_SHIFT    4
2844
#define EHT_PPE_THRES_RU_INDEX_MASK   ((u16) (BIT(4) | BIT(5) | \
2845
              BIT(6) | BIT(7) | \
2846
              BIT(8)))
2847
2848
#define EHT_NSS_MAX_STREAMS     8
2849
2850
/* Figure 9-1074ao: EHT Capabilities element format */
2851
struct ieee80211_eht_capabilities {
2852
  /* EHT MAC Capabilities Information */
2853
  le16 mac_cap;
2854
  /* EHT PHY Capabilities Information */
2855
  u8 phy_cap[EHT_PHY_CAPAB_LEN];
2856
  /* Supported EHT-MCS And NSS Set and EHT PPE thresholds (Optional) */
2857
  u8 optional[EHT_MCS_NSS_CAPAB_LEN + EHT_PPE_THRESH_CAPAB_LEN];
2858
} STRUCT_PACKED;
2859
2860
#define IEEE80211_EHT_CAPAB_MIN_LEN (2 + 9)
2861
2862
/* IEEE Std P802.11be-2024, 9.4.2.322 - Multi-Link element */
2863
2864
/* Figure 9-1074n: Multi-Link Control field */
2865
#define MULTI_LINK_CONTROL_TYPE_MASK      0x07
2866
#define MULTI_LINK_CONTROL_LEN        2
2867
2868
/* Table 9-417f: [Multi-Link element] Type subfield encoding */
2869
#define MULTI_LINK_CONTROL_TYPE_BASIC     0
2870
#define MULTI_LINK_CONTROL_TYPE_PROBE_REQ   1
2871
#define MULTI_LINK_CONTROL_TYPE_RECONF      2
2872
#define MULTI_LINK_CONTROL_TYPE_TDLS      3
2873
#define MULTI_LINK_CONTROL_TYPE_PRIOR_ACCESS    4
2874
2875
/*
2876
 * Table 9-417g: Optional subelement IDs for Link Info field of the Multi-Link
2877
 * element
2878
 */
2879
#define MULTI_LINK_SUB_ELEM_ID_PER_STA_PROFILE    0
2880
#define MULTI_LINK_SUB_ELEM_ID_VENDOR     221
2881
#define MULTI_LINK_SUB_ELEM_ID_FRAGMENT     254
2882
2883
/* IEEE Std 802.11be-2024, 9.4.2.322.2 - Basic Multi-Link element */
2884
2885
/* Figure 9-1074o: Presence Bitmap subfield of the Basic Multi-Link element */
2886
#define BASIC_MULTI_LINK_CTRL_PRES_LINK_ID    0x0010
2887
#define BASIC_MULTI_LINK_CTRL_PRES_BSS_PARAM_CH_COUNT 0x0020
2888
#define BASIC_MULTI_LINK_CTRL_PRES_MSD_INFO   0x0040
2889
#define BASIC_MULTI_LINK_CTRL_PRES_EML_CAPA   0x0080
2890
#define BASIC_MULTI_LINK_CTRL_PRES_MLD_CAPA   0x0100
2891
#define BASIC_MULTI_LINK_CTRL_PRES_AP_MLD_ID    0x0200
2892
#define BASIC_MULTI_LINK_CTRL_PRES_EXT_MLD_CAP    0x0400
2893
#define BASIC_MULTI_LINK_CTRL_PRES_ENH_CRIT_UPD   0x0800
2894
2895
/*
2896
 * STA Control field definitions of Per-STA Profile subelement in Basic
2897
 * Multi-Link element as described in Figure 9-1074v: STA Control field format
2898
 * of the Basic Multi-Link element.
2899
 */
2900
#define BASIC_MLE_STA_CTRL_LEN        2
2901
#define BASIC_MLE_STA_CTRL_LINK_ID_MASK     0x000F
2902
#define BASIC_MLE_STA_CTRL_COMPLETE_PROFILE   0x0010
2903
#define BASIC_MLE_STA_CTRL_PRES_STA_MAC     0x0020
2904
#define BASIC_MLE_STA_CTRL_PRES_BEACON_INT    0x0040
2905
#define BASIC_MLE_STA_CTRL_PRES_TSF_OFFSET    0x0080
2906
#define BASIC_MLE_STA_CTRL_PRES_DTIM_INFO   0x0100
2907
#define BASIC_MLE_STA_CTRL_PRES_NSTR_LINK_PAIR    0x0200
2908
#define BASIC_MLE_STA_CTRL_NSTR_BITMAP      0x0400
2909
#define BASIC_MLE_STA_CTRL_PRES_BSS_PARAM_COUNT   0x0800
2910
#define BASIC_MLE_STA_CTRL_PRES_ENH_CRIT_UPD    0x1000
2911
2912
#define BASIC_MLE_STA_PROF_STA_MAC_IDX      3
2913
2914
/* IEEE Std 802.11be-2024, 9.4.2.322.2.3 - Common Info field of the Basic
2915
 * Multi-Link element */
2916
struct eht_ml_basic_common_info {
2917
  u8 len;
2918
  u8 mld_addr[ETH_ALEN];
2919
2920
  /*
2921
   * Followed by optional fields based on the multi link basic presence
2922
   * bitmap
2923
   *
2924
   * Link ID Info: 1 octet
2925
   * BSS Parameters Change Count: 1 octet
2926
   * Medium Synchronization Delay Information: 2 octets
2927
   * EML Capabilities: 2 octets
2928
   * MLD Capabilities and Operations: 2 octets
2929
   * AP MLD ID: 1 octet
2930
   * Extended MLD Capabilities And Operations: 2 octets
2931
   */
2932
  u8 variable[];
2933
} STRUCT_PACKED;
2934
2935
/* Length of the EML Capabilities field in the Common Info field (in octets) */
2936
#define EHT_ML_EML_CAPA_LEN  2
2937
2938
/* Length of the Link ID Info field in the Common Info field (in octets) */
2939
#define EHT_ML_LINK_ID_LEN  1
2940
2941
#define EHT_ML_LINK_ID_MSK   0x0f
2942
2943
#define EHT_ML_MEDIUM_SYNC_DELAY_DURATION   0x00ff
2944
#define EHT_ML_MEDIUM_SYNC_DELAY_OFDM_ED_TH 0x0f00
2945
#define EHT_ML_MEDIUM_SYNC_DELAY_MAX_TXOP   0xf000
2946
2947
#define EHT_ML_EML_CAPA_EMLSR_SUPP               0x0001
2948
#define EHT_ML_EML_CAPA_EMLSR_PADDING_DELAY_MASK 0x000e
2949
#define EHT_ML_EML_CAPA_EMLSR_TRANS_DELAY_MASK   0x0070
2950
#define EHT_ML_EML_CAPA_EMLMR_SUPP               0x0080
2951
#define EHT_ML_EML_CAPA_TRANSITION_TIMEOUT_MASK  0x7800
2952
#define EHT_ML_EML_CAPA_RESERVED                 0x8700
2953
2954
#define EHT_ML_MLD_CAPA_MAX_NUM_SIM_LINKS_MASK        0x000f
2955
#define EHT_ML_MLD_CAPA_SRS_SUPP                      0x0010
2956
#define EHT_ML_MLD_CAPA_TID_TO_LINK_MAP_ALL_TO_ALL    0x0020
2957
#define EHT_ML_MLD_CAPA_TID_TO_LINK_MAP_ALL_TO_ONE    0x0040
2958
#define EHT_ML_MLD_CAPA_TID_TO_LINK_MAP_NEG_SUPP_MSK  0x0060
2959
#define EHT_ML_MLD_CAPA_AP_MLD_TYPE_IND_MASK          0x0080
2960
#define EHT_ML_MLD_CAPA_FREQ_SEP_FOR_STR_MASK         0x0f80
2961
#define EHT_ML_MLD_CAPA_AAR_SUPP                      0x1000
2962
#define EHT_ML_MLD_CAPA_LINK_RECONF_OP_SUPPORT        0x2000
2963
#define EHT_ML_MLD_CAPA_ALIGNED_TWT_SUPPORT           0x4000
2964
#define EHT_ML_MLD_CAPA_RESERVED                      0x8000
2965
2966
#define EHT_ML_EXT_MLD_CAPA_OP_PARAM_UPDATE           0x0001
2967
#define EHT_ML_EXT_MLD_CAPA_OP_RECO_MAX_LINKS_MASK    0x001e
2968
#define EHT_ML_EXT_MLD_CAPA_NSTR_UPDATE               0x0020
2969
#define EHT_ML_EXT_MLD_CAPA_EMLSR_ENA_ONE_LINK        0x0040
2970
#define EHT_ML_EXT_MLD_CAPA_BTM_MLD_RECO_MULTI_AP     0x0080
2971
2972
/* IEEE Std 802.11be-2024, Figure 9-1074u - Per-STA Profile subelement format
2973
 * of the Basic Multi-Link element*/
2974
struct ieee80211_eht_per_sta_profile {
2975
  le16 sta_control;
2976
2977
  /* Followed by STA Info and STA Profile fields */
2978
  u8 variable[];
2979
} STRUCT_PACKED;
2980
2981
/* IEEE Std 802.11be-2024, 9.4.2.322.3 - Probe Request Multi-Link element
2982
 * Figure 9-1074y - Presence Bitmap field format of the Probe Request
2983
 * Multi-Link element
2984
 * Presence Bitmap field is B4..B15 of the Multi-Link Control field, i.e.,
2985
 * B0 in the presence bitmap is B4 in the control field. */
2986
2987
#define EHT_ML_PRES_BM_PROBE_REQ_AP_MLD_ID 0x0010
2988
#define EHT_ML_PRES_BM_PROBE_REQ_MLD_MAC_ADDR 0x0020
2989
2990
struct eht_ml_probe_req_common_info {
2991
  u8 len;
2992
2993
  /*
2994
   * Followed by optional fields based on the multi link basic presence
2995
   * bitmap
2996
   *
2997
   * AP MLD ID: 1 octet
2998
   * MLD MAC Address: 6 cotets
2999
   */
3000
  u8 variable[];
3001
} STRUCT_PACKED;
3002
3003
/* IEEE Std 802.11be-2024, 9.4.2.322.4 - Reconfiguration Multi-Link element */
3004
3005
#define RECONF_MULTI_LINK_CTRL_PRES_MLD_MAC_ADDR   0x0001
3006
#define RECONF_MULTI_LINK_CTRL_PRES_EML_CAPA       0x0002
3007
#define RECONF_MULTI_LINK_CTRL_PRES_MLD_CAPA       0x0004
3008
#define RECONF_MULTI_LINK_CTRL_PRES_EXT_MLD_CAP    0x0008
3009
3010
#define EHT_PER_STA_RECONF_CTRL_LINK_ID_MSK        0x000f
3011
#define EHT_PER_STA_RECONF_CTRL_COMPLETE_PROFILE   0x0010
3012
#define EHT_PER_STA_RECONF_CTRL_MAC_ADDR           0x0020
3013
#define EHT_PER_STA_RECONF_CTRL_AP_REMOVAL_TIMER   0x0040
3014
#define EHT_PER_STA_RECONF_CTRL_OP_UPDATE_TYPE_MSK 0x0780
3015
#define EHT_PER_STA_RECONF_CTRL_OP_PARAMS          0x0800
3016
#define EHT_PER_STA_RECONF_CTRL_NSTR_BITMAP_SIZE   0x1000
3017
#define EHT_PER_STA_RECONF_CTRL_NSTR_INDICATION    0x2000
3018
3019
#define EHT_PER_STA_RECONF_CTRL_OP_UPDATE_TYPE_VAL(x) ((x) >> 7)
3020
3021
/* IEEE Std 802.11be-2024, Figure 9-1074ad - Common Info field format of the
3022
 * Reconfiguration Multi-Link element */
3023
struct eht_ml_reconf_common_info {
3024
  u8 len;
3025
3026
  /*
3027
   * Followed by optional fields based on the multi link reconf presence
3028
   * bitmap
3029
   *
3030
   * MLD MAC Address: 6 octets
3031
   * EML Capabilities: 2 octets
3032
   * MLD Capabilities and Operations: 2 octets
3033
   * Extended MLD Capabilities and Operations: 2 octets
3034
   */
3035
  u8 variable[];
3036
} STRUCT_PACKED;
3037
3038
3039
/* IEEE Std 802.11be-2024, Table 9-417p - Reconfiguration Operation Type
3040
 * subfield encoding */
3041
enum ieee80211_eht_reconf_mle_op_type {
3042
  EHT_RECONF_TYPE_AP_REMOVAL = 0,
3043
  EHT_RECONF_TYPE_OP_PARAM_UPDATE = 1,
3044
  EHT_RECONF_TYPE_ADD_LINK = 2,
3045
  EHT_RECONF_TYPE_DELETE_LINK = 3,
3046
  EHT_RECONF_TYPE_NSTR_STATUS_UPDATE = 4,
3047
};
3048
3049
/* IEEE Std 802.11be-2024, Figure 9-1074ag — STA Info field format for the
3050
 * Reconfiguration Multi-Link element */
3051
struct eht_ml_reconf_sta_info {
3052
  u8 len;
3053
3054
  /* Followed by optional fields based on STA control presence bitmap.
3055
   *
3056
   * STA MAC Address: 6 octets
3057
   * AP Removal Timer: 2 octets
3058
   * Operation Parameters: 3 octets
3059
   * NSTR Indication Bitmap: 1 or 2 octets
3060
   */
3061
  u8 variable[];
3062
} STRUCT_PACKED;
3063
3064
/* IEEE Std 802.11be-2024, 9.4.2.322.1 - Multi-Link element / General */
3065
3066
struct ieee80211_eht_ml {
3067
  le16 ml_control;
3068
3069
  /* Followed by Common Info and Link Info fields */
3070
  u8 variable[];
3071
} STRUCT_PACKED;
3072
3073
/* IEEE Std 802.11be-2024, 9.4.2.329 (Bandwidth Indication element) defines the
3074
 * Bandwidth Indication Information field to have the same definition as the
3075
 * EHT Operation Information field in the EHT Operation element.
3076
 */
3077
struct ieee80211_bw_ind_info {
3078
  u8 control; /* B0..B2: Channel Width */
3079
  u8 ccfs0;
3080
  u8 ccfs1;
3081
  le16 disabled_chan_bitmap; /* 0 or 2 octets */
3082
} STRUCT_PACKED;
3083
3084
/* Control subfield: Channel Width subfield; see Table 9-417e (Channel width,
3085
 * CCFS0, and CCFS1 subfields) in IEEE Std 802.11be-2024. */
3086
#define BW_IND_CHANNEL_WIDTH_20MHZ  EHT_OPER_CHANNEL_WIDTH_20MHZ
3087
#define BW_IND_CHANNEL_WIDTH_40MHZ  EHT_OPER_CHANNEL_WIDTH_40MHZ
3088
#define BW_IND_CHANNEL_WIDTH_80MHZ  EHT_OPER_CHANNEL_WIDTH_80MHZ
3089
#define BW_IND_CHANNEL_WIDTH_160MHZ EHT_OPER_CHANNEL_WIDTH_160MHZ
3090
#define BW_IND_CHANNEL_WIDTH_320MHZ EHT_OPER_CHANNEL_WIDTH_320MHZ
3091
3092
/* IEEE Std 802.11be-2024, 9.4.2.329 (Bandwidth Indication element) */
3093
struct ieee80211_bw_ind_element {
3094
  u8 bw_ind_params; /* Bandwidth Indication Parameters */
3095
  struct ieee80211_bw_ind_info bw_ind_info; /* 3 or 5 octets */
3096
} STRUCT_PACKED;
3097
3098
#define BW_IND_PARAMETER_DISABLED_SUBCHAN_BITMAP_PRESENT       BIT(1)
3099
3100
/* IEEE P802.11ay/D4.0, 9.4.2.251 - EDMG Operation element */
3101
#define EDMG_BSS_OPERATING_CHANNELS_OFFSET  6
3102
#define EDMG_OPERATING_CHANNEL_WIDTH_OFFSET 7
3103
3104
/* IEEE P802.11ay/D4.0, 29.3.4 - Channelization */
3105
enum edmg_channel {
3106
  EDMG_CHANNEL_9  = 9,
3107
  EDMG_CHANNEL_10 = 10,
3108
  EDMG_CHANNEL_11 = 11,
3109
  EDMG_CHANNEL_12 = 12,
3110
  EDMG_CHANNEL_13 = 13,
3111
};
3112
3113
/* Represent CB2 contiguous channels */
3114
#define EDMG_CHANNEL_9_SUBCHANNELS  (BIT(0) | BIT(1)) /* channels 1 and 2 */
3115
#define EDMG_CHANNEL_10_SUBCHANNELS (BIT(1) | BIT(2)) /* channels 2 and 3 */
3116
#define EDMG_CHANNEL_11_SUBCHANNELS (BIT(2) | BIT(3)) /* channels 3 and 4 */
3117
#define EDMG_CHANNEL_12_SUBCHANNELS (BIT(3) | BIT(4)) /* channels 4 and 5 */
3118
#define EDMG_CHANNEL_13_SUBCHANNELS (BIT(4) | BIT(5)) /* channels 5 and 6 */
3119
3120
/**
3121
 * enum edmg_bw_config - Allowed channel bandwidth configurations
3122
 * @EDMG_BW_CONFIG_4: 2.16 GHz
3123
 * @EDMG_BW_CONFIG_5: 2.16 GHz and 4.32 GHz
3124
 *
3125
 * IEEE P802.11ay/D4.0, 9.4.2.251 (EDMG Operation element),
3126
 * Table 13 (Channel BW Configuration subfield definition)
3127
 */
3128
enum edmg_bw_config {
3129
  EDMG_BW_CONFIG_4  = 4,
3130
  EDMG_BW_CONFIG_5  = 5,
3131
};
3132
3133
/* DPP Public Action frame identifiers - OUI_WFA */
3134
#define DPP_OUI_TYPE 0x1A
3135
3136
/* Robust AV streaming Action field values */
3137
enum robust_av_streaming_action {
3138
  ROBUST_AV_SCS_REQ = 0,
3139
  ROBUST_AV_SCS_RESP = 1,
3140
  ROBUST_AV_GROUP_MEMBERSHIP_REQ = 2,
3141
  ROBUST_AV_GROUP_MEMBERSHIP_RESP = 3,
3142
  ROBUST_AV_MSCS_REQ = 4,
3143
  ROBUST_AV_MSCS_RESP = 5,
3144
};
3145
3146
enum scs_request_type {
3147
  SCS_REQ_ADD = 0,
3148
  SCS_REQ_REMOVE = 1,
3149
  SCS_REQ_CHANGE = 2,
3150
};
3151
3152
/* IEEE Std 802.11be-2024, 9.4.2.324 (TID-To-Link Mapping element)
3153
 * Figure 9-1074ax (TID-TO-Link Mapping Control field format) */
3154
#define EHT_TID_TO_LINK_MAP_DIRECTION_DOWN  0
3155
#define EHT_TID_TO_LINK_MAP_DIRECTION_UP  1
3156
#define EHT_TID_TO_LINK_MAP_DIRECTION_BOTH  2
3157
#define EHT_TID_TO_LINK_MAP_DIRECTION_MSK 0x03
3158
#define EHT_TID_TO_LINK_MAP_DEFAULT   0x04
3159
#define EHT_TID_TO_LINK_MAP_SWITCH_TIME_PRESENT 0x08
3160
#define EHT_TID_TO_LINK_MAP_EXPECT_DUR_PRESENT  0x10
3161
#define EHT_TID_TO_LINK_MAP_LINK_MAPPING_SIZE 0x20
3162
3163
/*
3164
 * IEEE Std 802.11be-2024, 9.4.2.326 QoS Characteristics element,
3165
 * Table 9-417w (Direction subfield encoding)
3166
 */
3167
enum scs_direction {
3168
  SCS_DIRECTION_UP = 0,
3169
  SCS_DIRECTION_DOWN = 1,
3170
  SCS_DIRECTION_DIRECT = 2,
3171
};
3172
3173
/*
3174
 * IEEE Std 802.11be-2024, 9.4.2.326 QoS Characteristics element,
3175
 * Figure 9-1074bd (Control Info field format)
3176
 */
3177
#define EHT_QOS_CONTROL_INFO_DIRECTION_OFFSET   0
3178
#define EHT_QOS_CONTROL_INFO_TID_OFFSET     2
3179
#define EHT_QOS_CONTROL_INFO_USER_PRIORITY_OFFSET 6
3180
#define EHT_QOS_CONTROL_INFO_PRESENCE_MASK_OFFSET 9
3181
#define EHT_QOS_CONTROL_INFO_LINK_ID_OFFSET   25
3182
3183
/*
3184
 * IEEE Std 802.11be-2024, 9.4.2.326 QoS Characteristics element,
3185
 * Presence Bitmap Of Additional Parameters
3186
 */
3187
#define SCS_QOS_BIT_MAX_MSDU_SIZE     ((u16) BIT(0))
3188
#define SCS_QOS_BIT_SERVICE_START_TIME      ((u16) BIT(1))
3189
#define SCS_QOS_BIT_SERVICE_START_TIME_LINKID   ((u16) BIT(2))
3190
#define SCS_QOS_BIT_MEAN_DATA_RATE      ((u16) BIT(3))
3191
#define SCS_QOS_BIT_DELAYED_BOUNDED_BURST_SIZE    ((u16) BIT(4))
3192
#define SCS_QOS_BIT_MSDU_LIFETIME     ((u16) BIT(5))
3193
#define SCS_QOS_BIT_MSDU_DELIVERY_INFO      ((u16) BIT(6))
3194
#define SCS_QOS_BIT_MEDIUM_TIME       ((u16) BIT(7))
3195
3196
/* Optional subelement IDs for MSCS Descriptor element */
3197
enum mscs_description_subelem {
3198
  MCSC_SUBELEM_STATUS = 1,
3199
};
3200
3201
/*
3202
 * IEEE Std 802.11-2020, 9.6.7.36 FILS Discovery frame format,
3203
 * Figure 9-900 - FILS Discovery Frame Control subfield format
3204
 */
3205
#define FD_FRAME_CTL_CAP_PRESENT      ((u16) BIT(5))
3206
#define FD_FRAME_CTL_SHORT_SSID_PRESENT     ((u16) BIT(6))
3207
#define FD_FRAME_CTL_AP_CSN_PRESENT     ((u16) BIT(7))
3208
#define FD_FRAME_CTL_ANO_PRESENT      ((u16) BIT(8))
3209
#define FD_FRAME_CTL_FREQ_SEG1_PRESENT      ((u16) BIT(9))
3210
#define FD_FRAME_CTL_PRI_CHAN_PRESENT     ((u16) BIT(10))
3211
#define FD_FRAME_CTL_RSN_INFO_PRESENT     ((u16) BIT(11))
3212
#define FD_FRAME_CTL_LENGTH_PRESENT     ((u16) BIT(12))
3213
#define FD_FRAME_CTL_MD_PRESENT       ((u16) BIT(13))
3214
3215
/*
3216
 * IEEE Std 802.11-2020, 9.6.7.36 FILS Discovery frame format,
3217
 * Figure 9-901 - FD Capability subfield format
3218
 */
3219
#define FD_CAP_ESS          BIT(0)
3220
#define FD_CAP_PRIVACY          BIT(1)
3221
#define FD_CAP_MULTI_BSSID_PRESENT      BIT(9)
3222
3223
#define FD_CAP_BSS_CHWIDTH_20       0
3224
#define FD_CAP_BSS_CHWIDTH_40       1
3225
#define FD_CAP_BSS_CHWIDTH_80       2
3226
#define FD_CAP_BSS_CHWIDTH_160_80_80      3
3227
#define FD_CAP_BSS_CHWIDTH_320        4
3228
#define FD_CAP_BSS_CHWIDTH_SHIFT      2
3229
3230
#define FD_CAP_NSS_1          0
3231
#define FD_CAP_NSS_2          1
3232
#define FD_CAP_NSS_3          2
3233
#define FD_CAP_NSS_4          3
3234
#define FD_CAP_NSS_5_8          4
3235
#define FD_CAP_NSS_SHIFT        5
3236
3237
#define FD_CAP_PHY_INDEX_HR_DSSS      0
3238
#define FD_CAP_PHY_INDEX_ERP_OFDM     1
3239
#define FD_CAP_PHY_INDEX_HT       2
3240
#define FD_CAP_PHY_INDEX_VHT        3
3241
#define FD_CAP_PHY_INDEX_HE       4 /* P802.11ax */
3242
#define FD_CAP_PHY_INDEX_EHT        5 /* P802.11be */
3243
#define FD_CAP_PHY_INDEX_SHIFT        10
3244
3245
/*
3246
 * IEEE Std 802.11ax-2021, 26.17.2.3.2, AP behavior for fast passive scanning
3247
 */
3248
#define FD_MAX_INTERVAL_6GHZ                  20 /* TUs */
3249
3250
/* IEEE Std 802.11ax-2021, 26.17.3.5.1: AP needs to wait and see the collision
3251
 * persists for at least the minimum default timeout
3252
 * dot11BSSColorCollisionAPPeriod (50 seconds)
3253
 */
3254
#define DOT11BSS_COLOR_COLLISION_AP_PERIOD  50
3255
3256
/* Protected Vendor-specific QoS Management Action frame identifiers - WFA */
3257
#define QM_ACTION_VENDOR_TYPE 0x506f9a1a
3258
#define QM_ACTION_OUI_TYPE 0x1a
3259
3260
/* QoS Management Action frame OUI subtypes */
3261
#define QM_DSCP_POLICY_QUERY 0
3262
#define QM_DSCP_POLICY_REQ 1
3263
#define QM_DSCP_POLICY_RESP 2
3264
3265
/* QoS Management attributes */
3266
enum qm_attr_id {
3267
  QM_ATTR_PORT_RANGE = 1,
3268
  QM_ATTR_DSCP_POLICY = 2,
3269
  QM_ATTR_TCLAS = 3,
3270
  QM_ATTR_DOMAIN_NAME = 4,
3271
};
3272
3273
/* DSCP Policy attribute - Request Type */
3274
enum dscp_policy_request_type {
3275
  DSCP_POLICY_REQ_ADD = 0, /* ADD/UPDATE */
3276
  DSCP_POLICY_REQ_REMOVE = 1,
3277
};
3278
3279
/* Request/Response Control field of DSCP Policy Request/Response frame */
3280
#define DSCP_POLICY_CTRL_MORE BIT(0)
3281
#define DSCP_POLICY_CTRL_RESET  BIT(1)
3282
3283
/* Wi-Fi Alliance Capabilities element - Capabilities field */
3284
#define WFA_CAPA_QM_DSCP_POLICY BIT(0)
3285
#define WFA_CAPA_QM_UNSOLIC_DSCP BIT(1)
3286
#define WFA_CAPA_QM_NON_EHT_SCS_TRAFFIC_DESC BIT(2)
3287
3288
/* Wi-Fi Alliance Capabilities attributes */
3289
enum wfa_capa_attr_id {
3290
  WFA_CAPA_ATTR_GENERATIONAL_CAPAB = 1,
3291
  WFA_CAPA_ATTR_VENDOR_SPECIFIC = 221,
3292
};
3293
3294
/* Wi-Fi Alliance Capabilities frame */
3295
#define WFA_CAPAB_VENDOR_TYPE 0x506f9a1b
3296
3297
struct ieee80211_neighbor_ap_info {
3298
  u8 tbtt_info_hdr;
3299
  u8 tbtt_info_len;
3300
  u8 op_class;
3301
  u8 channel;
3302
3303
  /* Followed by the rest of the TBTT Information field contents */
3304
  u8 data[0];
3305
} STRUCT_PACKED;
3306
3307
/* S1G Beacon Compatibility element */
3308
struct ieee80211_s1g_beacon_compat {
3309
  u8 element_id;
3310
  u8 length;
3311
  le16 compat_info;
3312
  le16 beacon_interval;
3313
  le32 tsf_completion;
3314
} STRUCT_PACKED;
3315
3316
#define IEEE80211_UHR_MAC_CAP1_DBE_SUPP   0x04
3317
3318
/* DBE Maximum Supported Bandwidth
3319
 * IEEE P802.11bn/D1.4, Table 9-bb6 */
3320
#define IEEE80211_UHR_DBE_CAP_MAX_BW_MASK 0x07
3321
#define IEEE80211_UHR_DBE_CAP_MAX_BW_40MHZ  1
3322
#define IEEE80211_UHR_DBE_CAP_MAX_BW_80MHZ  2
3323
#define IEEE80211_UHR_DBE_CAP_MAX_BW_160MHZ 3
3324
#define IEEE80211_UHR_DBE_CAP_MAX_BW_320MHZ 4
3325
3326
/* UHR Capabilities element format */
3327
struct ieee80211_uhr_capabilities {
3328
  /* UHR MAC Capabilities Information */
3329
  u8 mac[6];
3330
  /* UHR PHY Capabilities Information */
3331
  u8 phy[5];
3332
  /* Followed by DBE Capability Parameters [0, 1, 4 or 7] */
3333
} STRUCT_PACKED;
3334
3335
/* UHR Operation Control field */
3336
#define UHR_OPER_CTRL_DPS_ENA               0x0001
3337
#define UHR_OPER_CTRL_NPCA_ENA              0x0002
3338
#define UHR_OPER_CTRL_P_EDCA_ENA            0x0004
3339
#define UHR_OPER_CTRL_DBE_ENA               0x0008
3340
#define UHR_OPER_CTRL_DBE_BW_SHIFT    4
3341
#define UHR_OPER_CTRL_DBE_BW_MASK           0x0070
3342
#define UHR_OPER_CTRL_DUO_OP_PARAMS_PRES    0x0080
3343
#define UHR_OPER_CTRL_DPS_OP_PARAMS_PRES    0x0100
3344
#define UHR_OPER_CTRL_NPCA_OP_PARAMS_PRES   0x0200
3345
#define UHR_OPER_CTRL_P_EDCA_OP_PARAMS_PRES 0x0400
3346
#define UHR_OPER_CTRL_DPE_OP_PARAMS_PRES    0x0800
3347
3348
/* UHR Operation element format */
3349
struct ieee80211_uhr_operation {
3350
  le16 oper_ctrl; /* UHR Operation Control: UHR_OPER_CTRL_* bits */
3351
  u8 basic_uhr_mcs_nss_set[4];
3352
  /* UHR Operations Parameters - variable */
3353
} STRUCT_PACKED;
3354
3355
/* DBE Operation Parameters field
3356
 * IEEE P802.11bn/D1.4, Figure 9-aa6
3357
 */
3358
#define IEEE80211_UHR_OPER_DBE_BW_40_MHZ    1
3359
#define IEEE80211_UHR_OPER_DBE_BW_80_MHZ    2
3360
#define IEEE80211_UHR_OPER_DBE_BW_160_MHZ   3
3361
#define IEEE80211_UHR_OPER_DBE_BW_320_1_MHZ   4
3362
#define IEEE80211_UHR_OPER_DBE_BW_320_2_MHZ   5
3363
#define IEEE80211_UHR_OPER_DBE_DIS_SUBCH_BMAP_PRES  0x8
3364
3365
/* Max size in IEEE P802.11bn/D1.4 with DUO, DPS, NPCA, P-EDCA, DBE */
3366
#define IEEE80211_UHR_OPER_MAX_SIZE \
3367
  (sizeof(struct ieee80211_uhr_operation) + 1 + 4 + 6 + 3 + 3)
3368
3369
/* IEEE P802.11bn/D1.4, Figure 9-aa4 (NPCA Operation Parameters field format) */
3370
#define UHR_OPER_PARAMS_NPCA_PRI_CHAN_OFFS    0x0000000F
3371
#define UHR_OPER_PARAMS_NPCA_NPCA_MIN_DUR_THRESH  0x000000F0
3372
#define UHR_OPER_PARAMS_NPCA_NPCA_SWITCH_DELAY    0x00003F00
3373
#define UHR_OPER_PARAMS_NPCA_NPCA_SWITCH_BACK_DELAY 0x000FC000
3374
#define UHR_OPER_PARAMS_NPCA_INIT_NPCA_QRSC   0x00300000
3375
#define UHR_OPER_PARAMS_NPCA_MOPLEN_NPCA    0x00400000
3376
#define UHR_OPER_PARAMS_NPCA_DIS_SUBCH_BITMAP_PRES  0x00800000
3377
3378
#ifdef _MSC_VER
3379
#pragma pack(pop)
3380
#endif /* _MSC_VER */
3381
3382
#endif /* IEEE802_11_DEFS_H */