banjo_fuchsia_wlan_ieee80211/
banjo_fuchsia_wlan_ieee80211.rs

1// Copyright 2018 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// WARNING: THIS FILE IS MACHINE GENERATED. DO NOT EDIT.
6// Generated from the fuchsia.wlan.ieee80211 banjo file
7
8#![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