blob: b44d75946489d0f611eee0d82edb67373d543968 [file] [log] [blame]
// Copyright 2022 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.
library fuchsia.wlan.common;
/// Indicates where and how scan logic is orchestrated.
/// See IEEE 802.11-2016 11.1.4.2 and 11.1.4.3.
/// This is a discovery extension, expected to be used for softmac only.
type ScanOffloadExtension = struct {
/// If true, driver orchestrates scans; otherwise MLME must do so.
// TODO(https://fxbug.dev/321627682): Deprecate and remove this field.
supported bool;
@available(added=10)
scan_cancel_supported bool;
};
/// Indicates where and how probe responses are to be handled.
/// See IEEE 802.11-2016 11.1.4.3.
/// This is a discovery extension, expected to be used for softmac only.
type ProbeResponseOffloadExtension = struct {
/// If true, driver responds to probe requests; otherwise MLME must respond.
supported bool;
};
/// Features related to discovery of potential BSSs.
/// See IEEE 802.11-2016 11.1.4.2 and 11.1.4.3.
type DiscoverySupport = struct {
scan_offload ScanOffloadExtension;
probe_response_offload ProbeResponseOffloadExtension;
};
/// Indicates where and how rate selection logic is orchestrated.
/// See IEEE 802.11-2016 10.7.
/// This is a MAC sublayer extension, expected to be used for softmac only.
type RateSelectionOffloadExtension = struct {
/// If true, driver orchestrates rate selection; otherwise MLME must do so.
supported bool;
};
/// Indicates where data plane is implemented.
type DataPlaneType = strict enum : uint8 {
ETHERNET_DEVICE = 1;
GENERIC_NETWORK_DEVICE = 2;
};
/// Indicates where the data plane is implemented.
/// This is a MAC sublayer extension, usable for fullmac or softmac. This
/// extension is not part of the 802.11-2016 spec.
// TODO(https://fxbug.dev/42174359) Move/remove extension, it's not a real feature.
type DataPlaneExtension = struct {
data_plane_type DataPlaneType;
};
/// Indicates where MAC layer is implemented.
type MacImplementationType = strict enum : uint8 {
SOFTMAC = 1;
FULLMAC = 2;
};
/// Feature-like information specific to the device.
/// This is a MAC sublayer extension. This extension is not part of the
/// 802.11-2016 spec.
// TODO(https://fxbug.dev/42174359) Move/remove extension, it's not a real feature.
type DeviceExtension = struct {
/// Indicates that device is not a real hardware device. This extension only
/// exists to support the SYNTH value in
/// fuchsia.hardware.ethernet/EthernetFeature.
// TODO(https://fxbug.dev/42175310) Adjust/adapt for GND DeviceClass.
is_synthetic bool;
/// Indicates where MAC layer is implemented.
mac_implementation_type MacImplementationType;
/// Indicates whether device supports transmission reports.
tx_status_report_supported bool;
};
/// Features related to the MAC sublayer (below MLME).
/// See IEEE 802.11-2016 10.
type MacSublayerSupport = struct {
rate_selection_offload RateSelectionOffloadExtension;
data_plane DataPlaneExtension;
device DeviceExtension;
};
/// Simultaneous Authentication of Equals.
/// See IEEE 802.11-2016 12.4.
/// This is a security feature, usable for fullmac or softmac.
type SaeFeature = struct {
// A driver may support more than one SAE handler mechanism.
/// SAE can be handled by the driver.
driver_handler_supported bool;
/// SAE can be handled by SME.
sme_handler_supported bool;
};
/// Management Frame Protection.
/// See IEEE 802.11-2016 4.5.4.9.
/// This is a security feature, usable for fullmac or softmac.
type MfpFeature = struct {
supported bool;
};
/// Features related to security / access control and data confidentiality.
/// See IEEE 802.11-2016 4.5.4 and 802.11-2016 12.
type SecuritySupport = struct {
sae SaeFeature;
mfp MfpFeature;
};
/// Dynamic Frequency Selection.
/// See IEEE 802.11-2016 11.9.
/// This is a spectrum management feature, usable for fullmac or softmac.
type DfsFeature = struct {
/// If true, driver implements DFS procedures (e.g. vacate channel upon
/// detecting RADAR). Based on whether the driver implements DFS procedures,
/// higher layers may adjust their logic (e.g. to include/exclude channels
/// that require DFS).
supported bool;
};
/// Features related to spectrum management.
/// See IEEE 802.11-2016 4.5.5, 11.8, and 11.9.
type SpectrumManagementSupport = struct {
dfs DfsFeature;
};