| // Copyright 2020 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.internal; |
| |
| using fuchsia.wlan.common; |
| |
| enum BssTypes { |
| INFRASTRUCTURE = 1; |
| PERSONAL = 2; |
| INDEPENDENT = 3; |
| MESH = 4; |
| ANY_BSS = 5; |
| //LAST = ANY_BSS; |
| }; |
| |
| // IEEE Std 802.11-2016, 9.4.1.4 |
| alias CapabilityInfo = uint16; |
| |
| // IEEE Std 802.11-2016 9.4.2.56 |
| const uint8 HT_CAP_LEN = 26; |
| // IEEE Std 802.11-2016 9.4.2.57 |
| const uint8 HT_OP_LEN = 22; |
| // IEEE Std 802.11-2016 9.5.2.158 |
| const uint8 VHT_CAP_LEN = 12; |
| // IEEE Std 802.11-2016 9.5.2.159 |
| const uint8 VHT_OP_LEN = 5; |
| // IEEE Std 802.11-2016 defines 12 values in dot11SupportedDataRatesRxTable and |
| // 2 values for BSS Membership Selector in Table 9-78. Only these 14 values are valid. |
| // But in fxbug.dev/41022, some of these values may be duplicated in both SupportedRates(SR) and |
| // ExtendedSupportedRates(ESR). Since the SR element allows 8 bytes, and assuming the ESR element |
| // duplicates all the values in the SR element plus contains all the remaining valid values, the |
| // maximum is set to 8 + 14 = 22. |
| const uint8 RATES_MAX_LEN = 22; |
| |
| // IEEE Std 802.11-2016 9.4.2.56 |
| struct HtCapabilities { |
| array<uint8>:HT_CAP_LEN bytes; |
| }; |
| |
| // IEEE Std 802.11-2016 9.4.2.57 |
| struct HtOperation { |
| array<uint8>:HT_OP_LEN bytes; |
| }; |
| |
| // IEEE Std 802.11-2016 9.5.2.158 |
| struct VhtCapabilities { |
| array<uint8>:VHT_CAP_LEN bytes; |
| }; |
| |
| // IEEE Std 802.11-2016 9.5.2.159 |
| struct VhtOperation { |
| array<uint8>:VHT_OP_LEN bytes; |
| }; |
| |
| // IEEE Std 802.11-2016 6.3.3.3.2 |
| struct BssDescription { |
| array<uint8>:6 bssid; |
| |
| BssTypes bss_type; |
| uint16 beacon_period; // in TU |
| uint64 timestamp; |
| uint64 local_time; |
| |
| CapabilityInfo cap; |
| |
| /// All info elements present in the beacon or probe response frame. |
| bytes ies; |
| |
| // List up non-standard, Fuchsia only parameters |
| fuchsia.wlan.common.WlanChan chan; |
| // The running average of received signal strength indicator in units of dBm. This value is |
| // updated periodically when the client is associated to an AP. |
| int8 rssi_dbm; // dBm |
| // The running average of snr in units of dB. This value is updated periodically when the |
| // client is associated to an AP. |
| int8 snr_db; |
| }; |
| |
| struct WmmStatusResponse { |
| bool apsd; |
| WmmAcParams ac_be_params; |
| WmmAcParams ac_bk_params; |
| WmmAcParams ac_vi_params; |
| WmmAcParams ac_vo_params; |
| }; |
| |
| /// WFA WMM v1.2, 2.2.2 |
| struct WmmAcParams { |
| /// Lower bound of contention window in exponential form |
| /// `cw_min = 2^(ecw_min) - 1`. The unit for contention window is "slot time", which |
| /// is different for each standard (e.g. 9 microseconds, 13 microseconds, etc.) |
| uint8 ecw_min; |
| /// Upper bound of contention window in exponential form |
| /// `cw_max = 2^(ecw_max) - 1`. The unit for contention window is "slot time", which |
| /// is different for each standard (e.g. 9 microseconds, 13 microseconds, etc.) |
| uint8 ecw_max; |
| /// Arbitration Interframe Spacing Number (control wait time between sending each frame) |
| uint8 aifsn; |
| /// TXOP limit in unit of 32 microseconds |
| uint16 txop_limit; |
| /// Whether admission control is mandatory |
| bool acm; |
| }; |