Skip to main content

drivers_only_common/
sme_helpers.rs

1// Copyright 2024 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 fidl_fuchsia_wlan_ieee80211 as fidl_ieee80211;
6use fidl_fuchsia_wlan_sme as fidl_sme;
7use rand::Rng;
8use rand::distr::Alphanumeric;
9use std::sync::LazyLock;
10
11pub static DEFAULT_OPEN_AP_CONFIG: LazyLock<fidl_sme::ApConfig> =
12    LazyLock::new(|| fidl_sme::ApConfig {
13        ssid: random_ssid(),
14        password: vec![],
15        radio_cfg: fidl_sme::RadioConfig {
16            phy: fidl_ieee80211::WlanPhyType::Ofdm,
17            channel: fidl_ieee80211::WlanChannel {
18                primary: 1,
19                cbw: fidl_ieee80211::ChannelBandwidth::Cbw20,
20                secondary80: 0,
21            },
22        },
23    });
24
25pub async fn get_client_sme(
26    generic_sme_proxy: &fidl_sme::GenericSmeProxy,
27) -> fidl_sme::ClientSmeProxy {
28    let (client_sme_proxy, client_sme_server) = fidl::endpoints::create_proxy();
29    generic_sme_proxy
30        .get_client_sme(client_sme_server)
31        .await
32        .expect("FIDL error")
33        .expect("GetClientSme Error");
34    client_sme_proxy
35}
36
37pub async fn get_telemetry(
38    generic_sme_proxy: &fidl_sme::GenericSmeProxy,
39) -> fidl_sme::TelemetryProxy {
40    let (telemetry_proxy, telemetry_server) = fidl::endpoints::create_proxy();
41    generic_sme_proxy
42        .get_sme_telemetry(telemetry_server)
43        .await
44        .expect("FIDL error")
45        .expect("GetTelemetry error");
46    telemetry_proxy
47}
48
49pub async fn get_ap_sme(generic_sme_proxy: &fidl_sme::GenericSmeProxy) -> fidl_sme::ApSmeProxy {
50    let (ap_sme_proxy, ap_sme_server) = fidl::endpoints::create_proxy();
51    generic_sme_proxy.get_ap_sme(ap_sme_server).await.expect("FIDL error").expect("GetApSme Error");
52    ap_sme_proxy
53}
54
55pub fn random_string_as_bytes(len: usize) -> Vec<u8> {
56    rand::rng().sample_iter(&Alphanumeric).take(len).collect()
57}
58
59pub fn random_ssid() -> Vec<u8> {
60    let ssid_len = rand::random_range(1..=fidl_ieee80211::MAX_SSID_BYTE_LEN as usize);
61    random_string_as_bytes(ssid_len)
62}
63
64pub fn random_password() -> Vec<u8> {
65    let pw_len = rand::random_range(8..=63);
66    random_string_as_bytes(pw_len)
67}