blob: 99f47cc62499fd2d70ccb26e34aae19afd19d7e4 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use fidl_fuchsia_wlan_common as fidl_common;
pub use fidl_fuchsia_wlan_mlme as fidl_mlme;
use crate::{
ie::fake_ies::{fake_ht_cap_bytes, fake_ht_op_bytes, fake_vht_cap_bytes, fake_vht_op_bytes},
mac,
test_utils::fake_frames::{
fake_eap_rsne, fake_wpa1_ie, fake_wpa2_enterprise_rsne, fake_wpa2_legacy_rsne,
fake_wpa2_mixed_rsne, fake_wpa2_rsne, fake_wpa2_wpa3_rsne,
fake_wpa3_enterprise_192_bit_rsne, fake_wpa3_rsne,
},
};
pub enum FakeProtectionCfg__ {
Open,
Wep,
Wpa1,
Wpa1Enhanced,
Wpa2Legacy,
Wpa1Wpa2,
Wpa2Mixed,
Wpa2Enterprise,
Wpa2,
Wpa2Wpa3,
Wpa3,
Wpa3Enterprise,
Wpa2NoPrivacy,
Eap,
}
pub fn build_fake_bss__(protection_cfg: FakeProtectionCfg__) -> fidl_mlme::BssDescription {
fidl_mlme::BssDescription {
bssid: [7, 1, 2, 77, 53, 8],
ssid: b"fake-ssid".to_vec(),
bss_type: fidl_mlme::BssTypes::Infrastructure,
beacon_period: 100,
dtim_period: 100,
timestamp: 0,
local_time: 0,
rates: vec![0x82, 0x84, 0x8b, 0x96, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c],
country: None,
rcpi_dbmh: 0,
rsni_dbh: 0,
ht_cap: Some(Box::new(fidl_mlme::HtCapabilities { bytes: fake_ht_cap_bytes() })),
ht_op: Some(Box::new(fidl_mlme::HtOperation { bytes: fake_ht_op_bytes() })),
vht_cap: Some(Box::new(fidl_mlme::VhtCapabilities { bytes: fake_vht_cap_bytes() })),
vht_op: Some(Box::new(fidl_mlme::VhtOperation { bytes: fake_vht_op_bytes() })),
chan: fidl_common::WlanChan { primary: 3, secondary80: 0, cbw: fidl_common::Cbw::Cbw40 },
rssi_dbm: 0,
snr_db: 0,
cap: mac::CapabilityInfo(0)
.with_privacy(match protection_cfg {
FakeProtectionCfg__::Open | FakeProtectionCfg__::Wpa2NoPrivacy => false,
_ => true,
})
.0,
rsne: match protection_cfg {
FakeProtectionCfg__::Wpa3Enterprise => Some(fake_wpa3_enterprise_192_bit_rsne()),
FakeProtectionCfg__::Wpa2Enterprise => Some(fake_wpa2_enterprise_rsne()),
FakeProtectionCfg__::Wpa3 => Some(fake_wpa3_rsne()),
FakeProtectionCfg__::Wpa2Wpa3 => Some(fake_wpa2_wpa3_rsne()),
FakeProtectionCfg__::Wpa2Mixed => Some(fake_wpa2_mixed_rsne()),
FakeProtectionCfg__::Wpa2Legacy => Some(fake_wpa2_legacy_rsne()),
FakeProtectionCfg__::Wpa1Wpa2
| FakeProtectionCfg__::Wpa2
| FakeProtectionCfg__::Wpa2NoPrivacy => Some(fake_wpa2_rsne()),
FakeProtectionCfg__::Eap => Some(fake_eap_rsne()),
_ => None,
},
vendor_ies: match protection_cfg {
FakeProtectionCfg__::Wpa1 | FakeProtectionCfg__::Wpa1Wpa2 => Some(fake_wpa1_ie(false)),
FakeProtectionCfg__::Wpa1Enhanced => Some(fake_wpa1_ie(true)),
_ => None,
},
}
}
#[macro_export]
macro_rules! fake_bss {
($protection_type:ident$(, $bss_key:ident: $bss_value:expr)* $(,)?) => {
$crate::test_utils::fake_stas::fidl_mlme::BssDescription {
$(
$bss_key: $bss_value,
)*
..$crate::test_utils::fake_stas::build_fake_bss__($crate::test_utils::fake_stas::FakeProtectionCfg__::$protection_type)
}
}
}