blob: c920dec9f5bc7ceeed9d1f18f6234b68079eab18 [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.
/// This header contains structs and enums derived from the IEEE 802.11
/// specification, in particular IEEE Std 802.11-2016. Accordingly:
///
/// * All uses of declarations from 802.11-2016 should be placed in this file.
/// * This file should not contain anything that is not explicitly defined in
/// 802.11-2016.
library ddk.hw.wlan.ieee80211;
/// IEEE Std 802.11-2016, 9.4.2.2
// TODO(fxbug.dev/73049): Unify with fuchsia.wlan.ieee80211.MAX_SSID_LEN once ddk migrates to FIDL.
const uint32 IEEE80211_MAX_SSID_LEN = 32;
/// IEEE Std 802.11-2016, 9.2.4.5
const uint32 IEEE80211_TIDS_MAX = 16;
/// IEEE Std 802.11-2016 12.5.3.2
const uint32 IEEE80211_CCMP_HDR_LEN = 8;
const uint32 IEEE80211_CCMP_PN_LEN = 6;
const uint32 IEEE80211_CCMP_128_MIC_LEN = 8;
const uint32 IEEE80211_CCMP_256_MIC_LEN = 16;
/// Bitfields in the HT Capabilities element "Supported MCS Set" field. These
/// are approximately as defined in 9.4.2.56.4.
[Packed]
struct Ieee80211HtCapabilitiesSupportedMcsSetFields {
uint64 rx_mcs_head;
uint32 rx_mcs_tail;
uint32 tx_mcs;
};
[Packed]
union Ieee80211HtCapabilitiesSupportedMcsSet {
1: array<uint8>:16 bytes;
2: Ieee80211HtCapabilitiesSupportedMcsSetFields fields;
};
/// The HT capabilities element, as defined in 9.4.2.56.
[Packed]
struct Ieee80211HtCapabilities {
uint16 ht_capability_info;
uint8 ampdu_params;
Ieee80211HtCapabilitiesSupportedMcsSet supported_mcs_set;
uint16 ht_ext_capabilities;
uint32 tx_beamforming_capabilities;
uint8 asel_capabilities;
};
/// The VHT capabilities element, as defined in 9.4.2.158.
[Packed]
struct Ieee80211VhtCapabilities {
uint32 vht_capability_info;
uint64 supported_vht_mcs_and_nss_set;
};
/// 802.11 reason codes. These values are common throughout the standard.
/// IEEE Std 802.11-2016, 9.4.1.7, Table 9-45
enum ReasonCode : uint16 {
/// 0 reserved.
UNSPECIFIED_REASON = 1;
INVALID_AUTHENTICATION = 2;
LEAVING_NETWORK_DEAUTH = 3;
REASON_INACTIVITY = 4;
NO_MORE_STAS = 5;
INVALID_CLASS2_FRAME = 6;
INVALID_CLASS3_FRAME = 7;
LEAVING_NETWORK_DISASSOC = 8;
NOT_AUTHENTICATED = 9;
UNACCEPTABLE_POWER_CAPABILITY = 10;
UNACCEPTABLE_SUPPORTED_CHANNELS = 11;
BSS_TRANSITION_DISASSOC = 12;
REASON_INVALID_ELEMENT = 13;
MIC_FAILURE = 14;
/// 15 is named "4WAY_HANDSHAKE_TIMEOUT" in 802.11-2016.
FOURWAY_HANDSHAKE_TIMEOUT = 15;
GK_HANDSHAKE_TIMEOUT = 16;
HANDSHAKE_ELEMENT_MISMATCH = 17;
REASON_INVALID_GROUP_CIPHER = 18;
REASON_INVALID_PAIRWISE_CIPHER = 19;
REASON_INVALID_AKMP = 20;
UNSUPPORTED_RSNE_VERSION = 21;
INVALID_RSNE_CAPABILITIES = 22;
/// 23 is named "802_1_X_AUTH_FAILED" in 802.11-2016.
IEEE802_1_X_AUTH_FAILED = 23;
REASON_CIPHER_OUT_OF_POLICY = 24;
TDLS_PEER_UNREACHABLE = 25;
TDLS_UNSPECIFIED_REASON = 26;
SSP_REQUESTED_DISASSOC = 27;
NO_SSP_ROAMING_AGREEMENT = 28;
BAD_CIPHER_OR_AKM = 29;
NOT_AUTHORIZED_THIS_LOCATION = 30;
SERVICE_CHANGE_PRECLUDES_TS = 31;
UNSPECIFIED_QOS_REASON = 32;
NOT_ENOUGH_BANDWIDTH = 33;
MISSING_ACKS = 34;
EXCEEDED_TXOP = 35;
STA_LEAVING = 36;
/// 37 is assigned to multiple names "END_TS", "END_BA", and "END_DLS" in 802.11-2016.
END_TS_BA_DLS = 37;
/// 38 is assigned to multiple names "UNKNOWN_TS" and "UNKNOWN_BA" in 802.11-2016.
UNKNOWN_TS_BA = 38;
TIMEOUT = 39;
PEERKEY_MISMATCH = 45;
PEER_INITIATED = 46;
AP_INITIATED = 47;
REASON_INVALID_FT_ACTION_FRAME_COUNT = 48;
REASON_INVALID_PMKID = 49;
REASON_INVALID_MDE = 50;
REASON_INVALID_FTE = 51;
MESH_PEERING_CANCELED = 52;
MESH_MAX_PEERS = 53;
MESH_CONFIGURATION_POLICY_VIOLATION = 54;
MESH_CLOSE_RCVD = 55;
MESH_MAX_RETRIES = 56;
MESH_CONFIRM_TIMEOUT = 57;
MESH_INVALID_GTK = 58;
MESH_INCONSISTENT_PARAMETERS = 59;
MESH_INVALID_SECURITY_CAPABILITY = 60;
MESH_PATH_ERROR_NO_PROXY_INFORMATION = 61;
MESH_PATH_ERROR_NO_FORWARDING_INFORMATION = 62;
MESH_PATH_ERROR_DESTINATION_UNREACHABLE = 63;
MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS = 64;
MESH_CHANNEL_SWITCH_REGULATORY_REQUIREMENTS = 65;
MESH_CHANNEL_SWITCH_UNSPECIFIED = 66;
/// Reserved values we will use for our own purposes.
/// -----
/// MLME lost the link, usually caused by loss of signal with the AP.
MLME_LINK_FAILED = 128;
/// Driver detected a lack of rx frames.
FW_RX_STALLED = 129;
};
/// 802.11 status codes. These values are common throughout the standard.
/// IEEE Std 802.11-2016, 9.4.1.9, Table 9-46
enum StatusCode : uint16 {
SUCCESS = 0;
REFUSED_REASON_UNSPECIFIED = 1;
TDLS_REJECTED_ALTERNATIVE_PROVIDED = 2;
TDLS_REJECTED = 3;
/// 4 reserved.
SECURITY_DISABLED = 5;
UNACCEPTABLE_LIFETIME = 6;
NOT_IN_SAME_BSS = 7;
/// 8-9 reserved.
REFUSED_CAPABILITIES_MISMATCH = 10;
DENIED_NO_ASSOCIATION_EXISTS = 11;
DENIED_OTHER_REASON = 12;
UNSUPPORTED_AUTH_ALGORITHM = 13;
TRANSACTION_SEQUENCE_ERROR = 14;
CHALLENGE_FAILURE = 15;
REJECTED_SEQUENCE_TIMEOUT = 16;
DENIED_NO_MORE_STAS = 17;
REFUSED_BASIC_RATES_MISMATCH = 18;
DENIED_NO_SHORT_PREAMBLE_SUPPORT = 19;
/// 20-21 reserved.
REJECTED_SPECTRUM_MANAGEMENT_REQUIRED = 22;
REJECTED_BAD_POWER_CAPABILITY = 23;
REJECTED_BAD_SUPPORTED_CHANNELS = 24;
DENIED_NO_SHORT_SLOT_TIME_SUPPORT = 25;
/// 26 reserved.
DENIED_NO_HT_SUPPORT = 27;
R0KH_UNREACHABLE = 28;
DENIED_PCO_TIME_NOT_SUPPORTED = 29;
REFUSED_TEMPORARILY = 30;
ROBUST_MANAGEMENT_POLICY_VIOLATION = 31;
UNSPECIFIED_QOS_FAILURE = 32;
DENIED_INSUFFICIENT_BANDWIDTH = 33;
DENIED_POOR_CHANNEL_CONDITIONS = 34;
DENIED_QOS_NOT_SUPPORTED = 35;
REQUEST_DECLINED = 37;
INVALID_PARAMETERS = 38;
REJECTED_WITH_SUGGESTED_CHANGES = 39;
STATUS_INVALID_ELEMENT = 40;
STATUS_INVALID_GROUP_CIPHER = 41;
STATUS_INVALID_PAIRWISE_CIPHER = 42;
STATUS_INVALID_AKMP = 43;
UNSUPPORTED_RSNE_VERSION = 44;
INVALID_RSNE_CAPABILITIES = 45;
STATUS_CIPHER_OUT_OF_POLICY = 46;
REJECTED_FOR_DELAY_PERIOD = 47;
DLS_NOT_ALLOWED = 48;
NOT_PRESENT = 49;
NOT_QOS_STA = 50;
DENIED_LISTEN_INTERVAL_TOO_LARGE = 51;
STATUS_INVALID_FT_ACTION_FRAME_COUNT = 52;
STATUS_INVALID_PMKID = 53;
STATUS_INVALID_MDE = 54;
STATUS_INVALID_FTE = 55;
/// 56 is assigned to "REQUESTED_TCLAS_NOT_SUPPORTED_BY_AP" in 802.11-2016, duplicate with 80.
/// Name below is as listed in the 802.11 Assigned Numbers Authority database.
REQUESTED_TCLAS_NOT_SUPPORTED_BY_AP = 56;
INSUFFICIENT_TCLAS_PROCESSING_RESOURCES = 57;
TRY_ANOTHER_BSS = 58;
GAS_ADVERTISEMENT_PROTOCOL_NOT_SUPPORTED = 59;
NO_OUTSTANDING_GAS_REQUEST = 60;
GAS_RESPONSE_NOT_RECEIVED_FROM_SERVER = 61;
GAS_QUERY_TIMEOUT = 62;
GAS_QUERY_RESPONSE_TOO_LARGE = 63;
REJECTED_HOME_WITH_SUGGESTED_CHANGES = 64;
SERVER_UNREACHABLE = 65;
/// 66 reserved.
REJECTED_FOR_SSP_PERMISSIONS = 67;
REFUSED_UNAUTHENTICATED_ACCESS_NOT_SUPPORTED = 68;
/// 69-71 reserved.
INVALID_RSNE = 72;
U_APSD_COEXISTANCE_NOT_SUPPORTED = 73;
U_APSD_COEX_MODE_NOT_SUPPORTED = 74;
BAD_INTERVAL_WITH_U_APSD_COEX = 75;
ANTI_CLOGGING_TOKEN_REQUIRED = 76;
UNSUPPORTED_FINITE_CYCLIC_GROUP = 77;
CANNOT_FIND_ALTERNATIVE_TBTT = 78;
TRANSMISSION_FAILURE = 79;
/// See assignment for 56.
REQUESTED_TCLAS_NOT_SUPPORTED = 80;
TCLAS_RESOURCES_EXHAUSTED = 81;
REJECTED_WITH_SUGGESTED_BSS_TRANSITION = 82;
REJECT_WITH_SCHEDULE = 83;
REJECT_NO_WAKEUP_SPECIFIED = 84;
SUCCESS_POWER_SAVE_MODE = 85;
PENDING_ADMITTING_FST_SESSION = 86;
PERFORMING_FST_NOW = 87;
PENDING_GAP_IN_BA_WINDOW = 88;
REJECT_U_PID_SETTING = 89;
REFUSED_EXTERNAL_REASON = 92;
REFUSED_AP_OUT_OF_MEMORY = 93;
REJECTED_EMERGENCY_SERVICES_NOT_SUPPORTED = 94;
QUERY_RESPONSE_OUTSTANDING = 95;
REJECT_DSE_BAND = 96;
TCLAS_PROCESSING_TERMINATED = 97;
TS_SCHEDULE_CONFLICT = 98;
DENIED_WITH_SUGGESTED_BAND_AND_CHANNEL = 99;
MCCAOP_RESERVATION_CONFLICT = 100;
MAF_LIMIT_EXCEEDED = 101;
MCCA_TRACK_LIMIT_EXCEEDED = 102;
DENIED_DUE_TO_SPECTRUM_MANAGEMENT = 103;
DENIED_VHT_NOT_SUPPORTED = 104;
ENABLEMENT_DENIED = 105;
RESTRICTION_FROM_AUTHORIZED_GDB = 106;
AUTHORIZATION_DEENABLED = 107;
};