network_types/
mac.rs

1use crate::bitfield::BitfieldUnit;
2
3#[repr(C, packed)]
4#[derive(Debug, Clone)]
5#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
6pub struct MacHdr {
7    _bitfield_frame_ctl: BitfieldUnit<[u8; 2]>,
8    duration_id: [u8; 2],
9    address1: [u8; 6],
10    address2: [u8; 6],
11    address3: [u8; 6],
12    sequence_ctl: [u8; 2],
13    address4: [u8; 6],
14    qos_ctl: [u8; 2],
15}
16
17impl MacHdr {
18    pub const LEN: usize = ::core::mem::size_of::<MacHdr>();
19
20    #[inline]
21    pub fn protocol_version(&self) -> u16 {
22        unsafe { ::core::mem::transmute(self._bitfield_frame_ctl.get(0, 2) as u16) }
23    }
24    #[inline]
25    pub fn set_protocol_version(&mut self, val: u16) {
26        unsafe {
27            let val: u16 = ::core::mem::transmute(val);
28            self._bitfield_frame_ctl.set(0, 2, val as u64)
29        }
30    }
31    #[inline]
32    pub fn ty(&self) -> u16 {
33        unsafe { ::core::mem::transmute(self._bitfield_frame_ctl.get(2, 4) as u16) }
34    }
35    #[inline]
36    pub fn set_ty(&mut self, val: u16) {
37        unsafe {
38            let val: u16 = ::core::mem::transmute(val);
39            self._bitfield_frame_ctl.set(2, 4, val as u64)
40        }
41    }
42    #[inline]
43    pub fn sub_ty(&self) -> u16 {
44        unsafe { ::core::mem::transmute(self._bitfield_frame_ctl.get(4, 8) as u16) }
45    }
46    #[inline]
47    pub fn set_sub_ty(&mut self, val: u16) {
48        unsafe {
49            let val: u16 = ::core::mem::transmute(val);
50            self._bitfield_frame_ctl.set(4, 8, val as u64)
51        }
52    }
53    #[inline]
54    pub fn tds(&self) -> u16 {
55        unsafe { ::core::mem::transmute(self._bitfield_frame_ctl.get(8, 9) as u16) }
56    }
57    #[inline]
58    pub fn set_tds(&mut self, val: u16) {
59        unsafe {
60            let val: u16 = ::core::mem::transmute(val);
61            self._bitfield_frame_ctl.set(8, 9, val as u64)
62        }
63    }
64    #[inline]
65    pub fn fds(&self) -> u16 {
66        unsafe { ::core::mem::transmute(self._bitfield_frame_ctl.get(9, 10) as u16) }
67    }
68    // set to from_ds
69    #[inline]
70    pub fn set_fds(&mut self, val: u16) {
71        unsafe {
72            let val: u16 = ::core::mem::transmute(val);
73            self._bitfield_frame_ctl.set(9, 10, val as u64)
74        }
75    }
76    #[inline]
77    pub fn mflag(&self) -> u16 {
78        unsafe { ::core::mem::transmute(self._bitfield_frame_ctl.get(10, 11) as u16) }
79    }
80    #[inline]
81    pub fn set_mflag(&mut self, val: u16) {
82        unsafe {
83            let val: u16 = ::core::mem::transmute(val);
84            self._bitfield_frame_ctl.set(10, 11, val as u64)
85        }
86    }
87    #[inline]
88    pub fn retry(&self) -> u16 {
89        unsafe { ::core::mem::transmute(self._bitfield_frame_ctl.get(11, 12) as u16) }
90    }
91    #[inline]
92    pub fn set_retry(&mut self, val: u16) {
93        unsafe {
94            let val: u16 = ::core::mem::transmute(val);
95            self._bitfield_frame_ctl.set(11, 12, val as u64)
96        }
97    }
98    #[inline]
99    pub fn pmgmt(&self) -> u16 {
100        unsafe { ::core::mem::transmute(self._bitfield_frame_ctl.get(12, 13) as u16) }
101    }
102    // set to power_mgmt
103    #[inline]
104    pub fn set_pmgmt(&mut self, val: u16) {
105        unsafe {
106            let val: u16 = ::core::mem::transmute(val);
107            self._bitfield_frame_ctl.set(12, 13, val as u64)
108        }
109    }
110    #[inline]
111    pub fn mdata(&self) -> u16 {
112        unsafe { ::core::mem::transmute(self._bitfield_frame_ctl.get(13, 14) as u16) }
113    }
114    // set to power_mgmt
115    #[inline]
116    pub fn set_mdata(&mut self, val: u16) {
117        unsafe {
118            let val: u16 = ::core::mem::transmute(val);
119            self._bitfield_frame_ctl.set(13, 14, val as u64)
120        }
121    }
122    #[inline]
123    pub fn protected_frame(&self) -> u16 {
124        unsafe { ::core::mem::transmute(self._bitfield_frame_ctl.get(14, 15) as u16) }
125    }
126    #[inline]
127    pub fn set_protected_frame(&mut self, val: u16) {
128        unsafe {
129            let val: u16 = ::core::mem::transmute(val);
130            self._bitfield_frame_ctl.set(14, 15, val as u64)
131        }
132    }
133    #[inline]
134    pub fn order(&self) -> u16 {
135        unsafe { ::core::mem::transmute(self._bitfield_frame_ctl.get(15, 16) as u16) }
136    }
137    #[inline]
138    pub fn set_order(&mut self, val: u16) {
139        unsafe {
140            let val: u16 = ::core::mem::transmute(val);
141            self._bitfield_frame_ctl.set(15, 16, val as u64)
142        }
143    }
144    #[inline]
145    pub fn new_bitfield_frame_ctl(
146        protocol_version: u16,
147        ty: u16,
148        sub_ty: u16,
149        tds: u16,
150        fds: u16,
151        mflag: u16,
152        retry: u16,
153        pmgmt: u16,
154        mdata: u16,
155        protected_frame: u16,
156        order: u16,
157    ) -> BitfieldUnit<[u8; 2usize]> {
158        let mut bitfield_unit: BitfieldUnit<[u8; 2]> = Default::default();
159        bitfield_unit.set(0, 2, {
160            let protocol_version: u16 = unsafe { ::core::mem::transmute(protocol_version) };
161            protocol_version as u64
162        });
163        bitfield_unit.set(2, 2, {
164            let ty: u16 = unsafe { ::core::mem::transmute(ty) };
165            ty as u64
166        });
167        bitfield_unit.set(4, 4, {
168            let sub_ty: u16 = unsafe { ::core::mem::transmute(sub_ty) };
169            sub_ty as u64
170        });
171        bitfield_unit.set(8, 1, {
172            let tds: u16 = unsafe { ::core::mem::transmute(tds) };
173            tds as u64
174        });
175        bitfield_unit.set(9, 1, {
176            let fds: u16 = unsafe { ::core::mem::transmute(fds) };
177            fds as u64
178        });
179        bitfield_unit.set(10, 1, {
180            let mflag: u16 = unsafe { ::core::mem::transmute(mflag) };
181            mflag as u64
182        });
183        bitfield_unit.set(11, 1, {
184            let retry: u16 = unsafe { ::core::mem::transmute(retry) };
185            retry as u64
186        });
187        bitfield_unit.set(12, 1, {
188            let pmgmt: u16 = unsafe { ::core::mem::transmute(pmgmt) };
189            pmgmt as u64
190        });
191        bitfield_unit.set(13, 1, {
192            let mdata: u16 = unsafe { ::core::mem::transmute(mdata) };
193            mdata as u64
194        });
195        bitfield_unit.set(14, 1, {
196            let protected_frame: u16 = unsafe { ::core::mem::transmute(protected_frame) };
197            protected_frame as u64
198        });
199        bitfield_unit.set(15, 1, {
200            let order: u16 = unsafe { ::core::mem::transmute(order) };
201            order as u64
202        });
203        bitfield_unit
204    }
205}