blob: 37906ea64b7b26e0c7fe53ef5b2623e47d014814 [file] [log] [blame]
// Copyright 2021 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;
using fuchsia.wlan.ieee80211;
type RequestStatus = strict enum {
ACKNOWLEDGED = 0;
REJECTED_NOT_SUPPORTED = 1;
REJECTED_INCOMPATIBLE_MODE = 2;
REJECTED_ALREADY_IN_USE = 3;
REJECTED_DUPLICATE_REQUEST = 4;
};
/// PHY types supporting different MCS and payload data rates.
/// Based off of dot11PHYType from IEEE 802.11-2016/2020 Annex C + Amendments
@available(added=13)
type WlanPhyType = flexible enum {
/// IEEE 802.11-2016 Clause 15:
/// Direct Sequence Spread Spectrum
/// Supports 1, 2 Mbps.
DSSS = 1;
/// IEEE 802.11-2016 Clause 16:
/// High Rate DSSS
/// Supports 5.5, 11 Mbps.
/// Also referred to as ERP-CCK
HR = 2;
/// IEEE 802.11a/g or IEEE 802.11-2016 Clause 17:
/// Orthogonal Frequency Division Multiplexing
/// Supports 6, 9, 12, 18, 24, 36, 48, and 54 Mbps.
OFDM = 3;
/// IEEE 802.11g or IEEE 802.11-2016 Clause 18:
/// Extended Rate PHY
/// Supports 1, 2, 5.5, 11, 12, 24 Mbps + optionally 6, 54 Mbps.
/// Encompasses DSSS/HR/OFDM rates and modulation.
ERP = 4;
/// IEEE 802.11n or IEEE 802.11-2016 Clause 19:
/// High Throughput PHY
/// Supports rates up to 495 Mbps.
HT = 5;
/// 802.11ad or IEEE 802.11-2016 Clause 20:
/// Directional Multi-Gigabit PHY
DMG = 6;
/// IEEE 802.11ac or IEEE 802.11-2016 Clause 21:
/// Very High Throughput PHY
/// Supports rates up to 6.9 Gbps.
VHT = 7;
/// IEEE 802.11af or IEEE 802.11-2016 Clause 22:
/// Television Very High Throughput PHY
/// Supports rates of up to 568.9 Mbps in TV spectrum
TVHT = 8;
/// IEEE 802.11ah or IEEE 802.11-2020 Clause 23:
/// Sub 1-GHz PHY
S1G = 9;
/// IEEE 802.11aj or IEEE 802.11-2020 Clause 24:
/// China Directional Multi-Gigabit PHY
CDMG = 10;
/// IEEE 802.11aj or IEEE 802.11-2020 Clause 25:
/// China Millimeter-wave Multi-Gigabit PHY
CMMG = 11;
/// IEEE 802.11ax: High Efficiency PHY
/// Supports rates of up to 9.6 Gbps (whew!)
HE = 12;
};
/// This constant defines fixed length for arrays containing PHY types supported by
/// PHY entities.
@namespaced
const MAX_SUPPORTED_PHY_TYPES uint8 = 64;
// Numbers defined to guarantee consistent numbering between all code bindings
// to ease conversion.
@available(added=13)
type WlanMacRole = flexible enum {
CLIENT = 1;
AP = 2;
MESH = 3;
};
/// This constant defines fixed length for arrays containing MAC roles supported by
/// PHY entities.
@namespaced
const MAX_SUPPORTED_MAC_ROLES uint8 = 16;
/// This constant defined the fixed length for arrays containing the capabilities
/// for each band supported by a device driver.
@namespaced
const MAX_BANDS uint8 = 16;
@available(added=13)
type ChannelBandwidth = flexible enum { // Channel Bandwidth
CBW20 = 1;
CBW40 = 2;
CBW40BELOW = 3;
CBW80 = 4;
CBW160 = 5;
CBW80P80 = 6;
};
type WlanChannel = struct {
primary uint8;
cbw ChannelBandwidth;
secondary80 uint8;
};
type WlanBand = flexible enum : uint8 {
TWO_GHZ = 0;
FIVE_GHZ = 1;
};
type ScanType = strict enum {
ACTIVE = 1;
PASSIVE = 2;
};
/// HT and VHT guard interval.
/// See IEEE 802.11-2016 Table 19-1 and Table 21-1.
type GuardInterval = strict enum : uint8 {
LONG_GI = 1; // 800 ns
SHORT_GI = 2; // 400 ns
};
// Powersave types. Since vendor implementations of power save mode vary
// greatly, this is an attempt to generalize the setting and indicated
// as an enum (bitfield).
type PowerSaveType = strict enum : uint32 {
// Close to power off state.
PS_MODE_ULTRA_LOW_POWER = 0x0;
// Tuned for power over performance
PS_MODE_LOW_POWER = 0x1;
// Tuned for a balance between power and performance
PS_MODE_BALANCED = 0x2;
// Tuned for best performance
PS_MODE_PERFORMANCE = 0x3;
};
@namespaced
const WLAN_TX_VECTOR_IDX_INVALID uint16 = 0;
@namespaced
@available(added=13)
const WLAN_TX_RESULT_MAX_ENTRY uint32 = 8;
/// One entry in a WlanTxResult report. Indicates a number of attempted transmissions on
/// a particular tx vector, but does not imply successful transmission.
@available(added=13)
type WlanTxResultEntry = struct {
tx_vector_idx uint16;
/// Number of total attempts with this specific tx vector, including successful attempts.
/// DDK assumes the number of attempts per packet will not exceed 255. (typically <= 8)
attempts uint8;
};
/// Outcome of a packet transmission.
@available(added=13)
type WlanTxResultCode = flexible enum : uint8 {
/// ACK was not received or transmission otherwise failed.
FAILED = 0x0;
/// ACK was received from peer.
SUCCESS = 0x1;
};
/// TX status reports are used by the Minstrel rate selection algorithm
/// Tests should use the default value in //src/connectivity/wlan/testing/hw-sim/src/lib.rs
@available(added=13)
type WlanTxResult = struct {
/// up to 8 different tx_vector for one PPDU frame.
/// WLAN_TX_VECTOR_IDX_INVALID indicates no more entries.
tx_result_entry array<WlanTxResultEntry, WLAN_TX_RESULT_MAX_ENTRY>;
/// Destination mac address, or addr1 in packet header.
peer_addr fuchsia.wlan.ieee80211.MacAddr;
result_code WlanTxResultCode;
};
type WlanSoftmacHardwareCapabilityBit = strict enum : uint32 {
/// Short packet preamble.
SHORT_PREAMBLE = 0x0020;
/// Spectrum management.
SPECTRUM_MGMT = 0x0100;
// QoS capable.
QOS = 0x0200;
/// Short slot times after packet collision.
SHORT_SLOT_TIME = 0x0400;
/// Radio measurement.
RADIO_MSMT = 0x1000;
// Supports simutaneous client-ap use
// TODO(https://fxbug.dev/42132496): Move SIMULTANEOUS_CLIENT_AP to a different Fuchsia specific
// capability enum. This enum should only be used for IEEE 802.11 fields. This type
// should also be reduced to uint16_t once this is done.
SIMULTANEOUS_CLIENT_AP = 0x10000;
};
// IEEE Std 802.11-2016, 9.4.1.4
alias WlanSoftmacHardwareCapability = uint32;
@available(added=13)
type BssType = flexible enum : uint32 {
// The UNKNOWN value is added to this type instead of created a new
// enum like `DetectedBssType` so that language bindings can avoid the use
// of verbose constants like DETECTED_BSS_TYPE_INFRASTRUCTURE. The tradeoff
// is to handle UNKNOWN when specifying the BSS type of a new AP.
@unknown
UNKNOWN = 0;
INFRASTRUCTURE = 1;
INDEPENDENT = 2;
MESH = 3;
PERSONAL = 4;
};
// Input parameters for a join request. This definition is shared between softmac.fidl
// and wlantap.fidl.
@available(added=13)
type JoinBssRequest = table {
1: bssid fuchsia.wlan.ieee80211.MacAddr;
2: bss_type BssType;
3: remote bool;
4: beacon_period uint16; // in TU
};
@available(added=HEAD)
type WlanProtection = strict enum : uint8 {
NONE = 0;
RX = 1;
TX = 2;
RX_TX = 3;
};
@available(added=HEAD)
type WlanKeyConfig = table {
/// Which path to protect: None, TX, RX, or TX and RX.
1: protection WlanProtection;
/// IEEE Cipher suite selector.
/// See IEEE Std 802.11-2016, 9.4.2.25.2, Table 9-131
/// Optional. If not specified, it's assumed that this is the IEEE OUI.
2: cipher_oui array<uint8, 3>;
/// The cipher type.
/// Required.
3: cipher_type fuchsia.wlan.ieee80211.CipherSuiteType;
/// Whether this key is a pairwise, group or peer key.
/// Required.
4: key_type WlanKeyType;
/// The peer MAC address for pairwise and peer keys.
/// For group keys this value is always the broadcast address.
/// Required.
5: peer_addr fuchsia.wlan.ieee80211.MacAddr;
/// Index for rotating keys, e.g. group keys.
/// This value is always 0 for key types which aren't rotating, e.g. pairwise keys.
/// Required.
6: key_idx uint8;
/// They key's actual bytes.
/// Required.
7: key vector<uint8>:fuchsia.wlan.ieee80211.MAX_KEY_LEN;
/// Receive Sequence Counter for group keys only.
/// In all other cases the RSC will be 0.
/// Optional.
8: rsc uint64;
};