wlan_common/
mgmt_writer.rs

1// Copyright 2019 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
5use crate::mac::{FrameControl, MgmtHdr, SequenceControl};
6use ieee80211::{Bssid, MacAddr};
7
8pub fn mgmt_hdr_to_ap(
9    frame_ctrl: FrameControl,
10    bssid: Bssid,
11    client_addr: MacAddr,
12    seq_ctrl: SequenceControl,
13) -> MgmtHdr {
14    MgmtHdr {
15        frame_ctrl,
16        duration: 0,
17        addr1: bssid.into(),
18        addr2: client_addr,
19        addr3: bssid.into(),
20        seq_ctrl,
21    }
22}
23
24pub fn mgmt_hdr_from_ap(
25    frame_ctrl: FrameControl,
26    client_addr: MacAddr,
27    bssid: Bssid,
28    seq_ctrl: SequenceControl,
29) -> MgmtHdr {
30    MgmtHdr {
31        frame_ctrl,
32        duration: 0,
33        addr1: client_addr,
34        addr2: bssid.into(),
35        addr3: bssid.into(),
36        seq_ctrl,
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use super::*;
43
44    #[test]
45    fn client_to_ap() {
46        let got = mgmt_hdr_to_ap(
47            FrameControl(1234),
48            Bssid::from([1; 6]),
49            MacAddr::from([2; 6]),
50            SequenceControl(4321),
51        );
52        let expected = MgmtHdr {
53            frame_ctrl: FrameControl(1234),
54            duration: 0,
55            addr1: MacAddr::from([1; 6]),
56            addr2: MacAddr::from([2; 6]),
57            addr3: MacAddr::from([1; 6]),
58            seq_ctrl: SequenceControl(4321),
59        };
60        assert_eq!(got, expected);
61    }
62}