banjo_fuchsia_wlan_ieee80211/
banjo_fuchsia_wlan_ieee80211.rs
1#![cfg_attr(rustfmt, rustfmt_skip)]
9#![allow(unused_imports, non_camel_case_types)]
10
11
12
13pub const CCMP_128_MIC_LEN: u32 = 8;
14pub const CCMP_256_MIC_LEN: u32 = 16;
15pub const CCMP_HDR_LEN: u32 = 8;
16pub const CCMP_PN_LEN: u32 = 6;
17pub const MAX_SSID_BYTE_LEN: u8 = 32;
18pub const HT_CAP_LEN: u8 = 26;
19pub const HT_OP_LEN: u8 = 22;
20pub const MAC_ADDR_LEN: u8 = 6;
21pub const MAX_KEY_LEN: u8 = 32;
22pub const MAX_MESH_ID_BYTE_LEN: u8 = 32;
23pub const MAX_MGMT_FRAME_MAC_HEADER_BYTE_LEN: u8 = 28;
24pub const MAX_MMPDU_BYTE_LEN: u16 = 2304;
25pub const MAX_SUPPORTED_BASIC_RATES: u8 = 12;
26pub const MAX_UNIQUE_CHANNEL_NUMBERS: u16 = 256;
27pub const MAX_VHT_MPDU_BYTE_LEN_0: u16 = 3895;
28pub const MAX_VHT_MPDU_BYTE_LEN_1: u16 = 7991;
29pub const MAX_VHT_MPDU_BYTE_LEN_2: u16 = 11454;
30pub const OUI_LEN: u8 = 3;
31pub const SSID_LIST_MAX: u8 = 84;
32pub const TIDS_MAX: u32 = 16;
33pub const VHT_CAP_LEN: u8 = 12;
34pub const VHT_OP_LEN: u8 = 5;
35pub const WLAN_IE_BODY_MAX_LEN: u32 = 255;
36pub const WLAN_IE_MAX_LEN: u32 = 257;
37pub const WLAN_MSDU_MAX_LEN: u32 = 2304;
38#[repr(C)]
39#[derive(Copy, Clone, Debug, PartialEq)]
40pub struct CSsid {
41 pub len: u8,
42 pub data: [u8; 32 as usize],
43}
44
45#[repr(C)]
46#[derive(Copy, Clone, Debug, PartialEq)]
47pub struct HtCapabilities {
48 pub bytes: [u8; 26 as usize],
49}
50
51#[repr(C)]
52#[derive(Copy, Clone, Debug, PartialEq)]
53pub struct HtOperation {
54 pub bytes: [u8; 22 as usize],
55}
56
57#[repr(C)]
58#[derive(Copy, Clone, Debug, PartialEq)]
59pub struct VhtCapabilities {
60 pub bytes: [u8; 12 as usize],
61}
62
63#[repr(C)]
64#[derive(Copy, Clone, Debug, PartialEq)]
65pub struct VhtOperation {
66 pub bytes: [u8; 5 as usize],
67}
68
69#[repr(C)]
70#[derive(Copy, Clone, Debug, PartialEq)]
71pub struct SetKeyDescriptor {
72 pub key_list: *const u8,
73 pub key_count: usize,
74 pub key_id: u16,
75 pub key_type: KeyType,
76 pub peer_addr: [u8; 6 as usize],
77 pub rsc: u64,
78 pub cipher_oui: [u8; 3 as usize],
79 pub cipher_type: CipherSuiteType,
80}
81
82#[repr(C)]
83#[derive(Copy, Clone, Debug, PartialEq, Eq)]
84pub struct CipherSuiteType(pub u32);
85
86impl CipherSuiteType {
87 pub const USE_GROUP: Self = Self(0);
88 pub const WEP_40: Self = Self(1);
89 pub const TKIP: Self = Self(2);
90 pub const RESERVED_3: Self = Self(3);
91 pub const CCMP_128: Self = Self(4);
92 pub const WEP_104: Self = Self(5);
93 pub const BIP_CMAC_128: Self = Self(6);
94 pub const GROUP_ADDRESSED_NOT_ALLOWED: Self = Self(7);
95 pub const GCMP_128: Self = Self(8);
96 pub const GCMP_256: Self = Self(9);
97 pub const CCMP_256: Self = Self(10);
98 pub const BIP_GMAC_128: Self = Self(11);
99 pub const BIP_GMAC_256: Self = Self(12);
100 pub const BIP_CMAC_256: Self = Self(13);
101 pub const RESERVED_14_TO_255: Self = Self(14);
102}
103
104impl std::ops::BitAnd for CipherSuiteType {
105 type Output = Self;
106 fn bitand(self, rhs: Self) -> Self {
107 Self(self.0 & rhs.0)
108 }
109}
110
111impl std::ops::BitAndAssign for CipherSuiteType {
112 fn bitand_assign(&mut self, rhs: Self) {
113 *self = Self(self.0 & rhs.0)
114 }
115}
116
117impl std::ops::BitOr for CipherSuiteType {
118 type Output = Self;
119 fn bitor(self, rhs: Self) -> Self {
120 Self(self.0 | rhs.0)
121 }
122}
123
124impl std::ops::BitOrAssign for CipherSuiteType {
125 fn bitor_assign(&mut self, rhs: Self) {
126 *self = Self(self.0 | rhs.0)
127 }
128}
129
130impl std::ops::BitXor for CipherSuiteType {
131 type Output = Self;
132 fn bitxor(self, rhs: Self) -> Self {
133 Self(self.0 ^ rhs.0)
134 }
135}
136
137impl std::ops::BitXorAssign for CipherSuiteType {
138 fn bitxor_assign(&mut self, rhs: Self) {
139 *self = Self(self.0 ^ rhs.0)
140 }
141}
142#[repr(C)]
143#[derive(Copy, Clone, Debug, PartialEq, Eq)]
144pub struct KeyType(pub u8);
145
146impl KeyType {
147 pub const PAIRWISE: Self = Self(1);
148 pub const GROUP: Self = Self(2);
149 pub const IGTK: Self = Self(3);
150 pub const PEER: Self = Self(4);
151}
152
153impl std::ops::BitAnd for KeyType {
154 type Output = Self;
155 fn bitand(self, rhs: Self) -> Self {
156 Self(self.0 & rhs.0)
157 }
158}
159
160impl std::ops::BitAndAssign for KeyType {
161 fn bitand_assign(&mut self, rhs: Self) {
162 *self = Self(self.0 & rhs.0)
163 }
164}
165
166impl std::ops::BitOr for KeyType {
167 type Output = Self;
168 fn bitor(self, rhs: Self) -> Self {
169 Self(self.0 | rhs.0)
170 }
171}
172
173impl std::ops::BitOrAssign for KeyType {
174 fn bitor_assign(&mut self, rhs: Self) {
175 *self = Self(self.0 | rhs.0)
176 }
177}
178
179impl std::ops::BitXor for KeyType {
180 type Output = Self;
181 fn bitxor(self, rhs: Self) -> Self {
182 Self(self.0 ^ rhs.0)
183 }
184}
185
186impl std::ops::BitXorAssign for KeyType {
187 fn bitxor_assign(&mut self, rhs: Self) {
188 *self = Self(self.0 ^ rhs.0)
189 }
190}
191#[repr(C)]
192#[derive(Copy, Clone, Debug, PartialEq, Eq)]
193pub struct ReasonCode(pub u16);
194
195impl ReasonCode {
196 pub const UNSPECIFIED_REASON: Self = Self(1);
197 pub const INVALID_AUTHENTICATION: Self = Self(2);
198 pub const LEAVING_NETWORK_DEAUTH: Self = Self(3);
199 pub const REASON_INACTIVITY: Self = Self(4);
200 pub const NO_MORE_STAS: Self = Self(5);
201 pub const INVALID_CLASS2_FRAME: Self = Self(6);
202 pub const INVALID_CLASS3_FRAME: Self = Self(7);
203 pub const LEAVING_NETWORK_DISASSOC: Self = Self(8);
204 pub const NOT_AUTHENTICATED: Self = Self(9);
205 pub const UNACCEPTABLE_POWER_CAPABILITY: Self = Self(10);
206 pub const UNACCEPTABLE_SUPPORTED_CHANNELS: Self = Self(11);
207 pub const BSS_TRANSITION_DISASSOC: Self = Self(12);
208 pub const REASON_INVALID_ELEMENT: Self = Self(13);
209 pub const MIC_FAILURE: Self = Self(14);
210 pub const FOURWAY_HANDSHAKE_TIMEOUT: Self = Self(15);
211 pub const GK_HANDSHAKE_TIMEOUT: Self = Self(16);
212 pub const HANDSHAKE_ELEMENT_MISMATCH: Self = Self(17);
213 pub const REASON_INVALID_GROUP_CIPHER: Self = Self(18);
214 pub const REASON_INVALID_PAIRWISE_CIPHER: Self = Self(19);
215 pub const REASON_INVALID_AKMP: Self = Self(20);
216 pub const UNSUPPORTED_RSNE_VERSION: Self = Self(21);
217 pub const INVALID_RSNE_CAPABILITIES: Self = Self(22);
218 pub const IEEE802_1_X_AUTH_FAILED: Self = Self(23);
219 pub const REASON_CIPHER_OUT_OF_POLICY: Self = Self(24);
220 pub const TDLS_PEER_UNREACHABLE: Self = Self(25);
221 pub const TDLS_UNSPECIFIED_REASON: Self = Self(26);
222 pub const SSP_REQUESTED_DISASSOC: Self = Self(27);
223 pub const NO_SSP_ROAMING_AGREEMENT: Self = Self(28);
224 pub const BAD_CIPHER_OR_AKM: Self = Self(29);
225 pub const NOT_AUTHORIZED_THIS_LOCATION: Self = Self(30);
226 pub const SERVICE_CHANGE_PRECLUDES_TS: Self = Self(31);
227 pub const UNSPECIFIED_QOS_REASON: Self = Self(32);
228 pub const NOT_ENOUGH_BANDWIDTH: Self = Self(33);
229 pub const MISSING_ACKS: Self = Self(34);
230 pub const EXCEEDED_TXOP: Self = Self(35);
231 pub const STA_LEAVING: Self = Self(36);
232 pub const END_TS_BA_DLS: Self = Self(37);
233 pub const UNKNOWN_TS_BA: Self = Self(38);
234 pub const TIMEOUT: Self = Self(39);
235 pub const PEERKEY_MISMATCH: Self = Self(45);
236 pub const PEER_INITIATED: Self = Self(46);
237 pub const AP_INITIATED: Self = Self(47);
238 pub const REASON_INVALID_FT_ACTION_FRAME_COUNT: Self = Self(48);
239 pub const REASON_INVALID_PMKID: Self = Self(49);
240 pub const REASON_INVALID_MDE: Self = Self(50);
241 pub const REASON_INVALID_FTE: Self = Self(51);
242 pub const MESH_PEERING_CANCELED: Self = Self(52);
243 pub const MESH_MAX_PEERS: Self = Self(53);
244 pub const MESH_CONFIGURATION_POLICY_VIOLATION: Self = Self(54);
245 pub const MESH_CLOSE_RCVD: Self = Self(55);
246 pub const MESH_MAX_RETRIES: Self = Self(56);
247 pub const MESH_CONFIRM_TIMEOUT: Self = Self(57);
248 pub const MESH_INVALID_GTK: Self = Self(58);
249 pub const MESH_INCONSISTENT_PARAMETERS: Self = Self(59);
250 pub const MESH_INVALID_SECURITY_CAPABILITY: Self = Self(60);
251 pub const MESH_PATH_ERROR_NO_PROXY_INFORMATION: Self = Self(61);
252 pub const MESH_PATH_ERROR_NO_FORWARDING_INFORMATION: Self = Self(62);
253 pub const MESH_PATH_ERROR_DESTINATION_UNREACHABLE: Self = Self(63);
254 pub const MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS: Self = Self(64);
255 pub const MESH_CHANNEL_SWITCH_REGULATORY_REQUIREMENTS: Self = Self(65);
256 pub const MESH_CHANNEL_SWITCH_UNSPECIFIED: Self = Self(66);
257 pub const MLME_LINK_FAILED: Self = Self(128);
258 pub const FW_RX_STALLED: Self = Self(129);
259 pub const FW_HIGH_WME_RX_ERR_RATE: Self = Self(130);
260}
261
262impl std::ops::BitAnd for ReasonCode {
263 type Output = Self;
264 fn bitand(self, rhs: Self) -> Self {
265 Self(self.0 & rhs.0)
266 }
267}
268
269impl std::ops::BitAndAssign for ReasonCode {
270 fn bitand_assign(&mut self, rhs: Self) {
271 *self = Self(self.0 & rhs.0)
272 }
273}
274
275impl std::ops::BitOr for ReasonCode {
276 type Output = Self;
277 fn bitor(self, rhs: Self) -> Self {
278 Self(self.0 | rhs.0)
279 }
280}
281
282impl std::ops::BitOrAssign for ReasonCode {
283 fn bitor_assign(&mut self, rhs: Self) {
284 *self = Self(self.0 | rhs.0)
285 }
286}
287
288impl std::ops::BitXor for ReasonCode {
289 type Output = Self;
290 fn bitxor(self, rhs: Self) -> Self {
291 Self(self.0 ^ rhs.0)
292 }
293}
294
295impl std::ops::BitXorAssign for ReasonCode {
296 fn bitxor_assign(&mut self, rhs: Self) {
297 *self = Self(self.0 ^ rhs.0)
298 }
299}
300#[repr(C)]
301#[derive(Copy, Clone, Debug, PartialEq, Eq)]
302pub struct StatusCode(pub u16);
303
304impl StatusCode {
305 pub const SUCCESS: Self = Self(0);
306 pub const REFUSED_REASON_UNSPECIFIED: Self = Self(1);
307 pub const TDLS_REJECTED_ALTERNATIVE_PROVIDED: Self = Self(2);
308 pub const TDLS_REJECTED: Self = Self(3);
309 pub const SECURITY_DISABLED: Self = Self(5);
310 pub const UNACCEPTABLE_LIFETIME: Self = Self(6);
311 pub const NOT_IN_SAME_BSS: Self = Self(7);
312 pub const REFUSED_CAPABILITIES_MISMATCH: Self = Self(10);
313 pub const DENIED_NO_ASSOCIATION_EXISTS: Self = Self(11);
314 pub const DENIED_OTHER_REASON: Self = Self(12);
315 pub const UNSUPPORTED_AUTH_ALGORITHM: Self = Self(13);
316 pub const TRANSACTION_SEQUENCE_ERROR: Self = Self(14);
317 pub const CHALLENGE_FAILURE: Self = Self(15);
318 pub const REJECTED_SEQUENCE_TIMEOUT: Self = Self(16);
319 pub const DENIED_NO_MORE_STAS: Self = Self(17);
320 pub const REFUSED_BASIC_RATES_MISMATCH: Self = Self(18);
321 pub const DENIED_NO_SHORT_PREAMBLE_SUPPORT: Self = Self(19);
322 pub const REJECTED_SPECTRUM_MANAGEMENT_REQUIRED: Self = Self(22);
323 pub const REJECTED_BAD_POWER_CAPABILITY: Self = Self(23);
324 pub const REJECTED_BAD_SUPPORTED_CHANNELS: Self = Self(24);
325 pub const DENIED_NO_SHORT_SLOT_TIME_SUPPORT: Self = Self(25);
326 pub const DENIED_NO_HT_SUPPORT: Self = Self(27);
327 pub const R0KH_UNREACHABLE: Self = Self(28);
328 pub const DENIED_PCO_TIME_NOT_SUPPORTED: Self = Self(29);
329 pub const REFUSED_TEMPORARILY: Self = Self(30);
330 pub const ROBUST_MANAGEMENT_POLICY_VIOLATION: Self = Self(31);
331 pub const UNSPECIFIED_QOS_FAILURE: Self = Self(32);
332 pub const DENIED_INSUFFICIENT_BANDWIDTH: Self = Self(33);
333 pub const DENIED_POOR_CHANNEL_CONDITIONS: Self = Self(34);
334 pub const DENIED_QOS_NOT_SUPPORTED: Self = Self(35);
335 pub const REQUEST_DECLINED: Self = Self(37);
336 pub const INVALID_PARAMETERS: Self = Self(38);
337 pub const REJECTED_WITH_SUGGESTED_CHANGES: Self = Self(39);
338 pub const STATUS_INVALID_ELEMENT: Self = Self(40);
339 pub const STATUS_INVALID_GROUP_CIPHER: Self = Self(41);
340 pub const STATUS_INVALID_PAIRWISE_CIPHER: Self = Self(42);
341 pub const STATUS_INVALID_AKMP: Self = Self(43);
342 pub const UNSUPPORTED_RSNE_VERSION: Self = Self(44);
343 pub const INVALID_RSNE_CAPABILITIES: Self = Self(45);
344 pub const STATUS_CIPHER_OUT_OF_POLICY: Self = Self(46);
345 pub const REJECTED_FOR_DELAY_PERIOD: Self = Self(47);
346 pub const DLS_NOT_ALLOWED: Self = Self(48);
347 pub const NOT_PRESENT: Self = Self(49);
348 pub const NOT_QOS_STA: Self = Self(50);
349 pub const DENIED_LISTEN_INTERVAL_TOO_LARGE: Self = Self(51);
350 pub const STATUS_INVALID_FT_ACTION_FRAME_COUNT: Self = Self(52);
351 pub const STATUS_INVALID_PMKID: Self = Self(53);
352 pub const STATUS_INVALID_MDE: Self = Self(54);
353 pub const STATUS_INVALID_FTE: Self = Self(55);
354 pub const REQUESTED_TCLAS_NOT_SUPPORTED_BY_AP: Self = Self(56);
355 pub const INSUFFICIENT_TCLAS_PROCESSING_RESOURCES: Self = Self(57);
356 pub const TRY_ANOTHER_BSS: Self = Self(58);
357 pub const GAS_ADVERTISEMENT_PROTOCOL_NOT_SUPPORTED: Self = Self(59);
358 pub const NO_OUTSTANDING_GAS_REQUEST: Self = Self(60);
359 pub const GAS_RESPONSE_NOT_RECEIVED_FROM_SERVER: Self = Self(61);
360 pub const GAS_QUERY_TIMEOUT: Self = Self(62);
361 pub const GAS_QUERY_RESPONSE_TOO_LARGE: Self = Self(63);
362 pub const REJECTED_HOME_WITH_SUGGESTED_CHANGES: Self = Self(64);
363 pub const SERVER_UNREACHABLE: Self = Self(65);
364 pub const REJECTED_FOR_SSP_PERMISSIONS: Self = Self(67);
365 pub const REFUSED_UNAUTHENTICATED_ACCESS_NOT_SUPPORTED: Self = Self(68);
366 pub const INVALID_RSNE: Self = Self(72);
367 pub const U_APSD_COEXISTANCE_NOT_SUPPORTED: Self = Self(73);
368 pub const U_APSD_COEX_MODE_NOT_SUPPORTED: Self = Self(74);
369 pub const BAD_INTERVAL_WITH_U_APSD_COEX: Self = Self(75);
370 pub const ANTI_CLOGGING_TOKEN_REQUIRED: Self = Self(76);
371 pub const UNSUPPORTED_FINITE_CYCLIC_GROUP: Self = Self(77);
372 pub const CANNOT_FIND_ALTERNATIVE_TBTT: Self = Self(78);
373 pub const TRANSMISSION_FAILURE: Self = Self(79);
374 pub const REQUESTED_TCLAS_NOT_SUPPORTED: Self = Self(80);
375 pub const TCLAS_RESOURCES_EXHAUSTED: Self = Self(81);
376 pub const REJECTED_WITH_SUGGESTED_BSS_TRANSITION: Self = Self(82);
377 pub const REJECT_WITH_SCHEDULE: Self = Self(83);
378 pub const REJECT_NO_WAKEUP_SPECIFIED: Self = Self(84);
379 pub const SUCCESS_POWER_SAVE_MODE: Self = Self(85);
380 pub const PENDING_ADMITTING_FST_SESSION: Self = Self(86);
381 pub const PERFORMING_FST_NOW: Self = Self(87);
382 pub const PENDING_GAP_IN_BA_WINDOW: Self = Self(88);
383 pub const REJECT_U_PID_SETTING: Self = Self(89);
384 pub const REFUSED_EXTERNAL_REASON: Self = Self(92);
385 pub const REFUSED_AP_OUT_OF_MEMORY: Self = Self(93);
386 pub const REJECTED_EMERGENCY_SERVICES_NOT_SUPPORTED: Self = Self(94);
387 pub const QUERY_RESPONSE_OUTSTANDING: Self = Self(95);
388 pub const REJECT_DSE_BAND: Self = Self(96);
389 pub const TCLAS_PROCESSING_TERMINATED: Self = Self(97);
390 pub const TS_SCHEDULE_CONFLICT: Self = Self(98);
391 pub const DENIED_WITH_SUGGESTED_BAND_AND_CHANNEL: Self = Self(99);
392 pub const MCCAOP_RESERVATION_CONFLICT: Self = Self(100);
393 pub const MAF_LIMIT_EXCEEDED: Self = Self(101);
394 pub const MCCA_TRACK_LIMIT_EXCEEDED: Self = Self(102);
395 pub const DENIED_DUE_TO_SPECTRUM_MANAGEMENT: Self = Self(103);
396 pub const DENIED_VHT_NOT_SUPPORTED: Self = Self(104);
397 pub const ENABLEMENT_DENIED: Self = Self(105);
398 pub const RESTRICTION_FROM_AUTHORIZED_GDB: Self = Self(106);
399 pub const AUTHORIZATION_DEENABLED: Self = Self(107);
400 pub const JOIN_FAILURE: Self = Self(256);
401 pub const SPURIOUS_DEAUTH_OR_DISASSOC: Self = Self(257);
402 pub const CANCELED: Self = Self(258);
403 pub const ESTABLISH_RSNA_FAILURE: Self = Self(259);
404}
405
406impl std::ops::BitAnd for StatusCode {
407 type Output = Self;
408 fn bitand(self, rhs: Self) -> Self {
409 Self(self.0 & rhs.0)
410 }
411}
412
413impl std::ops::BitAndAssign for StatusCode {
414 fn bitand_assign(&mut self, rhs: Self) {
415 *self = Self(self.0 & rhs.0)
416 }
417}
418
419impl std::ops::BitOr for StatusCode {
420 type Output = Self;
421 fn bitor(self, rhs: Self) -> Self {
422 Self(self.0 | rhs.0)
423 }
424}
425
426impl std::ops::BitOrAssign for StatusCode {
427 fn bitor_assign(&mut self, rhs: Self) {
428 *self = Self(self.0 | rhs.0)
429 }
430}
431
432impl std::ops::BitXor for StatusCode {
433 type Output = Self;
434 fn bitxor(self, rhs: Self) -> Self {
435 Self(self.0 ^ rhs.0)
436 }
437}
438
439impl std::ops::BitXorAssign for StatusCode {
440 fn bitxor_assign(&mut self, rhs: Self) {
441 *self = Self(self.0 ^ rhs.0)
442 }
443}
444#[repr(C)]
445#[derive(Copy, Clone, Debug, PartialEq, Eq)]
446pub struct WlanAccessCategory(pub u32);
447
448impl WlanAccessCategory {
449 pub const BACKGROUND: Self = Self(1);
450 pub const BEST_EFFORT: Self = Self(2);
451 pub const VIDEO: Self = Self(3);
452 pub const VOICE: Self = Self(4);
453}
454
455impl std::ops::BitAnd for WlanAccessCategory {
456 type Output = Self;
457 fn bitand(self, rhs: Self) -> Self {
458 Self(self.0 & rhs.0)
459 }
460}
461
462impl std::ops::BitAndAssign for WlanAccessCategory {
463 fn bitand_assign(&mut self, rhs: Self) {
464 *self = Self(self.0 & rhs.0)
465 }
466}
467
468impl std::ops::BitOr for WlanAccessCategory {
469 type Output = Self;
470 fn bitor(self, rhs: Self) -> Self {
471 Self(self.0 | rhs.0)
472 }
473}
474
475impl std::ops::BitOrAssign for WlanAccessCategory {
476 fn bitor_assign(&mut self, rhs: Self) {
477 *self = Self(self.0 | rhs.0)
478 }
479}
480
481impl std::ops::BitXor for WlanAccessCategory {
482 type Output = Self;
483 fn bitxor(self, rhs: Self) -> Self {
484 Self(self.0 ^ rhs.0)
485 }
486}
487
488impl std::ops::BitXorAssign for WlanAccessCategory {
489 fn bitxor_assign(&mut self, rhs: Self) {
490 *self = Self(self.0 ^ rhs.0)
491 }
492}
493#[repr(C)]
494#[derive(Copy, Clone, Debug, PartialEq, Eq)]
495pub struct WlanBand(pub u8);
496
497impl WlanBand {
498 pub const TWO_GHZ: Self = Self(0);
499 pub const FIVE_GHZ: Self = Self(1);
500}
501
502impl std::ops::BitAnd for WlanBand {
503 type Output = Self;
504 fn bitand(self, rhs: Self) -> Self {
505 Self(self.0 & rhs.0)
506 }
507}
508
509impl std::ops::BitAndAssign for WlanBand {
510 fn bitand_assign(&mut self, rhs: Self) {
511 *self = Self(self.0 & rhs.0)
512 }
513}
514
515impl std::ops::BitOr for WlanBand {
516 type Output = Self;
517 fn bitor(self, rhs: Self) -> Self {
518 Self(self.0 | rhs.0)
519 }
520}
521
522impl std::ops::BitOrAssign for WlanBand {
523 fn bitor_assign(&mut self, rhs: Self) {
524 *self = Self(self.0 | rhs.0)
525 }
526}
527
528impl std::ops::BitXor for WlanBand {
529 type Output = Self;
530 fn bitxor(self, rhs: Self) -> Self {
531 Self(self.0 ^ rhs.0)
532 }
533}
534
535impl std::ops::BitXorAssign for WlanBand {
536 fn bitxor_assign(&mut self, rhs: Self) {
537 *self = Self(self.0 ^ rhs.0)
538 }
539}
540
541
542