| // Copyright 2018 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. |
| |
| #include "convert.h" |
| |
| #include <net/ethernet.h> |
| #include <wlan/common/band.h> |
| #include <wlan/common/element.h> |
| #include <wlan/common/logging.h> |
| #include <wlan/protocol/mac.h> |
| #include <bitset> |
| |
| namespace wlanif { |
| |
| namespace wlan_common = ::fuchsia::wlan::common; |
| namespace wlan_mlme = ::fuchsia::wlan::mlme; |
| namespace wlan_stats = ::fuchsia::wlan::stats; |
| |
| uint8_t ConvertBSSType(wlan_mlme::BSSTypes bss_type) { |
| switch (bss_type) { |
| case wlan_mlme::BSSTypes::INFRASTRUCTURE: |
| return WLAN_BSS_TYPE_INFRASTRUCTURE; |
| case wlan_mlme::BSSTypes::PERSONAL: |
| return WLAN_BSS_TYPE_PERSONAL; |
| case wlan_mlme::BSSTypes::INDEPENDENT: |
| return WLAN_BSS_TYPE_IBSS; |
| case wlan_mlme::BSSTypes::MESH: |
| return WLAN_BSS_TYPE_MESH; |
| case wlan_mlme::BSSTypes::ANY_BSS: |
| return WLAN_BSS_TYPE_ANY_BSS; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| uint8_t ConvertScanType(wlan_mlme::ScanTypes scan_type) { |
| switch (scan_type) { |
| case wlan_mlme::ScanTypes::ACTIVE: |
| return WLAN_SCAN_TYPE_ACTIVE; |
| case wlan_mlme::ScanTypes::PASSIVE: |
| return WLAN_SCAN_TYPE_PASSIVE; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| uint8_t ConvertCBW(wlan_common::CBW cbw) { |
| switch (cbw) { |
| case wlan_common::CBW::CBW20: |
| return CBW20; |
| case wlan_common::CBW::CBW40: |
| return CBW40; |
| case wlan_common::CBW::CBW40BELOW: |
| return CBW40BELOW; |
| case wlan_common::CBW::CBW80: |
| return CBW80; |
| case wlan_common::CBW::CBW160: |
| return CBW160; |
| case wlan_common::CBW::CBW80P80: |
| return CBW80P80; |
| } |
| ZX_ASSERT(0); |
| } |
| |
| void ConvertWlanChan(wlan_channel_t* wlanif_chan, const wlan_common::WlanChan& fidl_chan) { |
| // primary |
| wlanif_chan->primary = fidl_chan.primary; |
| |
| // CBW |
| wlanif_chan->cbw = ConvertCBW(fidl_chan.cbw); |
| |
| // secondary80 |
| wlanif_chan->secondary80 = fidl_chan.secondary80; |
| } |
| |
| void CopySSID(const ::std::vector<uint8_t>& in_ssid, wlanif_ssid_t* out_ssid) { |
| size_t ssid_len = in_ssid.size(); |
| if (ssid_len > WLAN_MAX_SSID_LEN) { |
| warnf("wlanif: truncating ssid from %zu to %d\n", ssid_len, WLAN_MAX_SSID_LEN); |
| ssid_len = WLAN_MAX_SSID_LEN; |
| } |
| std::memcpy(out_ssid->data, in_ssid.data(), ssid_len); |
| out_ssid->len = ssid_len; |
| } |
| |
| void CopyRSNE(const ::std::vector<uint8_t>& in_rsne, uint8_t* out_rsne, size_t* out_rsne_len) { |
| if (in_rsne.size() > WLAN_RSNE_MAX_LEN) { |
| warnf("wlanif: RSNE length truncated from %lu to %d\n", in_rsne.size(), WLAN_RSNE_MAX_LEN); |
| *out_rsne_len = WLAN_RSNE_MAX_LEN; |
| } else { |
| *out_rsne_len = in_rsne.size(); |
| } |
| std::memcpy(out_rsne, in_rsne.data(), *out_rsne_len); |
| } |
| |
| void ConvertRateSets(wlanif_bss_description_t* wlanif_desc, |
| const wlan_mlme::BSSDescription& fidl_desc) { |
| std::vector<uint8_t> basic_rates(fidl_desc.basic_rate_set); |
| std::vector<uint8_t> op_rates(fidl_desc.op_rate_set); |
| |
| if (op_rates.size() > WLAN_MAC_MAX_RATES) { |
| warnf("op_rates.size() is %lu > max allowed size: %d\n", op_rates.size(), |
| WLAN_MAC_MAX_RATES); |
| ZX_DEBUG_ASSERT(op_rates.size() <= WLAN_MAC_MAX_RATES); |
| } |
| |
| std::sort(basic_rates.begin(), basic_rates.end()); |
| std::sort(op_rates.begin(), op_rates.end()); |
| wlanif_desc->num_rates = 0; |
| for (const auto& r : op_rates) { |
| if (wlanif_desc->num_rates == WLAN_MAC_MAX_RATES) { break; } |
| const bool is_basic = std::binary_search(basic_rates.cbegin(), basic_rates.cend(), r); |
| wlanif_desc->rates[wlanif_desc->num_rates++] = |
| is_basic ? (r | 0b10000000) : (r & 0b01111111); |
| } |
| } |
| |
| void ConvertBSSDescription(wlanif_bss_description_t* wlanif_desc, |
| const wlan_mlme::BSSDescription& fidl_desc) { |
| // bssid |
| std::memcpy(wlanif_desc->bssid, fidl_desc.bssid.data(), ETH_ALEN); |
| |
| // ssid |
| CopySSID(fidl_desc.ssid, &wlanif_desc->ssid); |
| |
| // bss_type |
| wlanif_desc->bss_type = ConvertBSSType(fidl_desc.bss_type); |
| |
| // beacon_period |
| wlanif_desc->beacon_period = fidl_desc.beacon_period; |
| |
| // dtim_period |
| wlanif_desc->dtim_period = fidl_desc.dtim_period; |
| |
| // timestamp |
| wlanif_desc->timestamp = fidl_desc.timestamp; |
| |
| // local_time |
| wlanif_desc->local_time = fidl_desc.local_time; |
| |
| // capability |
| wlanif_desc->cap = ConvertCapabilityInfo(fidl_desc.cap); |
| |
| // basic_rate_set and op_rate_set |
| ConvertRateSets(wlanif_desc, fidl_desc); |
| |
| // rsne |
| CopyRSNE(fidl_desc.rsn, wlanif_desc->rsne, &wlanif_desc->rsne_len); |
| |
| // chan |
| ConvertWlanChan(&wlanif_desc->chan, fidl_desc.chan); |
| |
| // rssi_dbm |
| wlanif_desc->rssi_dbm = fidl_desc.rssi_dbm; |
| |
| // rcpi_dbmh |
| wlanif_desc->rcpi_dbmh = fidl_desc.rcpi_dbmh; |
| |
| // rsni_dbh |
| wlanif_desc->rsni_dbh = fidl_desc.rsni_dbh; |
| } |
| |
| wlan_mlme::BSSTypes ConvertBSSType(uint8_t bss_type) { |
| switch (bss_type) { |
| case WLAN_BSS_TYPE_INFRASTRUCTURE: |
| return wlan_mlme::BSSTypes::INFRASTRUCTURE; |
| case WLAN_BSS_TYPE_PERSONAL: |
| return wlan_mlme::BSSTypes::PERSONAL; |
| case WLAN_BSS_TYPE_IBSS: |
| return wlan_mlme::BSSTypes::INDEPENDENT; |
| case WLAN_BSS_TYPE_MESH: |
| return wlan_mlme::BSSTypes::MESH; |
| case WLAN_BSS_TYPE_ANY_BSS: |
| return wlan_mlme::BSSTypes::ANY_BSS; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| wlan_common::CBW ConvertCBW(uint8_t cbw) { |
| switch (cbw) { |
| case CBW20: |
| return wlan_common::CBW::CBW20; |
| case CBW40: |
| return wlan_common::CBW::CBW40; |
| case CBW40BELOW: |
| return wlan_common::CBW::CBW40BELOW; |
| case CBW80: |
| return wlan_common::CBW::CBW80; |
| case CBW160: |
| return wlan_common::CBW::CBW160; |
| case CBW80P80: |
| return wlan_common::CBW::CBW80P80; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| void ConvertWlanChan(wlan_common::WlanChan* fidl_chan, const wlan_channel_t& wlanif_chan) { |
| // primary |
| fidl_chan->primary = wlanif_chan.primary; |
| |
| // CBW |
| fidl_chan->cbw = ConvertCBW(wlanif_chan.cbw); |
| |
| // secondary80 |
| fidl_chan->secondary80 = wlanif_chan.secondary80; |
| } |
| |
| template <typename T> |
| static void ArrayToVector(::fidl::VectorPtr<T>* vecptr, const T* data, size_t len) { |
| if (len > 0) { (*vecptr)->assign(data, data + len); } |
| } |
| |
| void ConvertRateSets(::std::vector<uint8_t>* basic, ::std::vector<uint8_t>* op, |
| const wlanif_bss_description_t& wlanif_desc) { |
| (*basic).resize(0); |
| (*op).resize(0); |
| |
| // TODO(eyw): Use WlanRate data structure when it is available. |
| |
| constexpr uint8_t kBasicRateMask = 0b10000000; |
| constexpr uint8_t kHalfMbpsMask = 0b01111111; |
| |
| for (uint8_t i = 0; i < wlanif_desc.num_rates; ++i) { |
| uint8_t rate = wlanif_desc.rates[i]; |
| if (rate & kBasicRateMask) { basic->push_back(rate & kHalfMbpsMask); } |
| op->push_back(rate & kHalfMbpsMask); |
| } |
| } |
| |
| void ConvertBSSDescription(wlan_mlme::BSSDescription* fidl_desc, |
| const wlanif_bss_description_t& wlanif_desc) { |
| // bssid |
| std::memcpy(fidl_desc->bssid.mutable_data(), wlanif_desc.bssid, ETH_ALEN); |
| |
| // ssid |
| auto in_ssid = &wlanif_desc.ssid; |
| std::vector<uint8_t> ssid(in_ssid->data, in_ssid->data + in_ssid->len); |
| fidl_desc->ssid = std::move(ssid); |
| |
| // bss_type |
| fidl_desc->bss_type = ConvertBSSType(wlanif_desc.bss_type); |
| |
| // beacon_period |
| fidl_desc->beacon_period = wlanif_desc.beacon_period; |
| |
| // dtim_period |
| fidl_desc->dtim_period = wlanif_desc.dtim_period; |
| |
| // timestamp |
| fidl_desc->timestamp = wlanif_desc.timestamp; |
| |
| // local_time |
| fidl_desc->local_time = wlanif_desc.local_time; |
| |
| // capability |
| fidl_desc->cap = ConvertCapabilityInfo(wlanif_desc.cap); |
| |
| // basic_rate_set and op_rate_set |
| ConvertRateSets(&fidl_desc->basic_rate_set, &fidl_desc->op_rate_set, wlanif_desc); |
| |
| // rsne |
| ArrayToVector(&fidl_desc->rsn, wlanif_desc.rsne, wlanif_desc.rsne_len); |
| |
| // chan |
| ConvertWlanChan(&fidl_desc->chan, wlanif_desc.chan); |
| |
| // rssi_dbm |
| fidl_desc->rssi_dbm = wlanif_desc.rssi_dbm; |
| |
| // rcpi_dbmh |
| fidl_desc->rcpi_dbmh = wlanif_desc.rcpi_dbmh; |
| |
| // rsni_dbh |
| fidl_desc->rsni_dbh = wlanif_desc.rsni_dbh; |
| } |
| |
| // IEEE Std 802.11-2016, 9.4.1.4 |
| uint16_t ConvertCapabilityInfo(wlan_mlme::CapabilityInfo cap_info) { |
| std::bitset<16> cap(0); |
| if (cap_info.ess) { cap.set(0); } |
| if (cap_info.ibss) { cap.set(1); } |
| if (cap_info.cf_pollable) { cap.set(2); } |
| if (cap_info.cf_poll_req) { cap.set(3); } |
| if (cap_info.privacy) { cap.set(4); } |
| if (cap_info.short_preamble) { cap.set(5); } |
| // bit 6-7 reserved |
| if (cap_info.spectrum_mgmt) { cap.set(8); } |
| if (cap_info.qos) { cap.set(9); } |
| if (cap_info.short_slot_time) { cap.set(10); } |
| if (cap_info.apsd) { cap.set(11); } |
| if (cap_info.radio_msmt) { cap.set(12); } |
| // bit 13 reserved |
| if (cap_info.delayed_block_ack) { cap.set(14); } |
| if (cap_info.immediate_block_ack) { cap.set(15); } |
| return static_cast<uint16_t>(cap.to_ulong()); |
| } |
| |
| wlan_mlme::CapabilityInfo ConvertCapabilityInfo(uint16_t capability) { |
| std::bitset<16> cap(capability); |
| wlan_mlme::CapabilityInfo cap_info; |
| cap_info.ess = cap.test(0); |
| cap_info.ibss = cap.test(1); |
| cap_info.cf_pollable = cap.test(2); |
| cap_info.cf_poll_req = cap.test(3); |
| cap_info.privacy = cap.test(4); |
| cap_info.short_preamble = cap.test(5); |
| // bit 6-7 reserved |
| cap_info.spectrum_mgmt = cap.test(8); |
| cap_info.qos = cap.test(9); |
| cap_info.short_slot_time = cap.test(10); |
| cap_info.apsd = cap.test(11); |
| cap_info.radio_msmt = cap.test(12); |
| // bit 13 reserved |
| cap_info.delayed_block_ack = cap.test(14); |
| cap_info.immediate_block_ack = cap.test(15); |
| return cap_info; |
| } |
| |
| uint8_t ConvertAuthType(wlan_mlme::AuthenticationTypes auth_type) { |
| switch (auth_type) { |
| case wlan_mlme::AuthenticationTypes::OPEN_SYSTEM: |
| return WLAN_AUTH_TYPE_OPEN_SYSTEM; |
| case wlan_mlme::AuthenticationTypes::SHARED_KEY: |
| return WLAN_AUTH_TYPE_SHARED_KEY; |
| case wlan_mlme::AuthenticationTypes::FAST_BSS_TRANSITION: |
| return WLAN_AUTH_TYPE_FAST_BSS_TRANSITION; |
| case wlan_mlme::AuthenticationTypes::SAE: |
| return WLAN_AUTH_TYPE_SAE; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| uint16_t ConvertDeauthReasonCode(wlan_mlme::ReasonCode reason) { |
| switch (reason) { |
| case wlan_mlme::ReasonCode::UNSPECIFIED_REASON: |
| return WLAN_DEAUTH_REASON_UNSPECIFIED; |
| case wlan_mlme::ReasonCode::INVALID_AUTHENTICATION: |
| return WLAN_DEAUTH_REASON_INVALID_AUTHENTICATION; |
| case wlan_mlme::ReasonCode::LEAVING_NETWORK_DEAUTH: |
| return WLAN_DEAUTH_REASON_LEAVING_NETWORK_DEAUTH; |
| case wlan_mlme::ReasonCode::REASON_INACTIVITY: |
| return WLAN_DEAUTH_REASON_INACTIVITY; |
| case wlan_mlme::ReasonCode::NO_MORE_STAS: |
| return WLAN_DEAUTH_REASON_NO_MORE_STAS; |
| case wlan_mlme::ReasonCode::INVALID_CLASS2_FRAME: |
| return WLAN_DEAUTH_REASON_INVALID_CLASS2_FRAME; |
| case wlan_mlme::ReasonCode::INVALID_CLASS3_FRAME: |
| return WLAN_DEAUTH_REASON_INVALID_CLASS3_FRAME; |
| case wlan_mlme::ReasonCode::LEAVING_NETWORK_DISASSOC: |
| return WLAN_DEAUTH_REASON_LEAVING_NETWORK_DISASSOC; |
| case wlan_mlme::ReasonCode::NOT_AUTHENTICATED: |
| return WLAN_DEAUTH_REASON_NOT_AUTHENTICATED; |
| case wlan_mlme::ReasonCode::UNACCEPTABLE_POWER_CA: |
| return WLAN_DEAUTH_REASON_UNACCEPTABLE_POWER_CA; |
| case wlan_mlme::ReasonCode::UNACCEPTABLE_SUPPORTED_CHANNELS: |
| return WLAN_DEAUTH_REASON_UNACCEPTABLE_SUPPORTED_CHANNELS; |
| case wlan_mlme::ReasonCode::BSS_TRANSITION_DISASSOC: |
| return WLAN_DEAUTH_REASON_BSS_TRANSITION_DISASSOC; |
| case wlan_mlme::ReasonCode::REASON_INVALID_ELEMENT: |
| return WLAN_DEAUTH_REASON_INVALID_ELEMENT; |
| case wlan_mlme::ReasonCode::MIC_FAILURE: |
| return WLAN_DEAUTH_REASON_MIC_FAILURE; |
| case wlan_mlme::ReasonCode::FOURWAY_HANDSHAKE_TIMEOUT: |
| return WLAN_DEAUTH_REASON_FOURWAY_HANDSHAKE_TIMEOUT; |
| case wlan_mlme::ReasonCode::GK_HANDSHAKE_TIMEOUT: |
| return WLAN_DEAUTH_REASON_GK_HANDSHAKE_TIMEOUT; |
| case wlan_mlme::ReasonCode::HANDSHAKE_ELEMENT_MISMATCH: |
| return WLAN_DEAUTH_REASON_HANDSHAKE_ELEMENT_MISMATCH; |
| case wlan_mlme::ReasonCode::REASON_INVALID_GROUP_CIPHER: |
| return WLAN_DEAUTH_REASON_INVALID_GROUP_CIPHER; |
| case wlan_mlme::ReasonCode::REASON_INVALID_PAIRWISE_CIPHER: |
| return WLAN_DEAUTH_REASON_INVALID_PAIRWISE_CIPHER; |
| case wlan_mlme::ReasonCode::REASON_INVALID_AKMP: |
| return WLAN_DEAUTH_REASON_INVALID_AKMP; |
| case wlan_mlme::ReasonCode::UNSUPPORTED_RSNE_VERSION: |
| return WLAN_DEAUTH_REASON_UNSUPPORTED_RSNE_VERSION; |
| case wlan_mlme::ReasonCode::INVALID_RSNE_CAPABILITIES: |
| return WLAN_DEAUTH_REASON_INVALID_RSNE_CAPABILITIES; |
| case wlan_mlme::ReasonCode::IEEE802_1_X_AUTH_FAILED: |
| return WLAN_DEAUTH_REASON_IEEE802_1_X_AUTH_FAILED; |
| case wlan_mlme::ReasonCode::REASON_CIPHER_OUT_OF_POLICY: |
| return WLAN_DEAUTH_REASON_CIPHER_OUT_OF_POLICY; |
| case wlan_mlme::ReasonCode::TDLS_PEER_UNREACHABLE: |
| return WLAN_DEAUTH_REASON_TDLS_PEER_UNREACHABLE; |
| case wlan_mlme::ReasonCode::TDLS_UNSPECIFIED_REASON: |
| return WLAN_DEAUTH_REASON_TDLS_UNSPECIFIED; |
| case wlan_mlme::ReasonCode::SSP_REQUESTED_DISASSOC: |
| return WLAN_DEAUTH_REASON_SSP_REQUESTED_DISASSOC; |
| case wlan_mlme::ReasonCode::NO_SSP_ROAMING_AGREEMENT: |
| return WLAN_DEAUTH_REASON_NO_SSP_ROAMING_AGREEMENT; |
| case wlan_mlme::ReasonCode::BAD_CIPHER_OR_AKM: |
| return WLAN_DEAUTH_REASON_BAD_CIPHER_OR_AKM; |
| case wlan_mlme::ReasonCode::NOT_AUTHORIZED_THIS_LOCATION: |
| return WLAN_DEAUTH_REASON_NOT_AUTHORIZED_THIS_LOCATION; |
| case wlan_mlme::ReasonCode::SERVICE_CHANGE_PRECLUDES_TS: |
| return WLAN_DEAUTH_REASON_SERVICE_CHANGE_PRECLUDES_TS; |
| case wlan_mlme::ReasonCode::UNSPECIFIED_QOS_REASON: |
| return WLAN_DEAUTH_REASON_UNSPECIFIED_QOS; |
| case wlan_mlme::ReasonCode::NOT_ENOUGH_BANDWIDTH: |
| return WLAN_DEAUTH_REASON_NOT_ENOUGH_BANDWIDTH; |
| case wlan_mlme::ReasonCode::MISSING_ACKS: |
| return WLAN_DEAUTH_REASON_MISSING_ACKS; |
| case wlan_mlme::ReasonCode::EXCEEDED_TXOP: |
| return WLAN_DEAUTH_REASON_EXCEEDED_TXOP; |
| case wlan_mlme::ReasonCode::STA_LEAVING: |
| return WLAN_DEAUTH_REASON_STA_LEAVING; |
| case wlan_mlme::ReasonCode::END_TS_BA_DLS: |
| return WLAN_DEAUTH_REASON_END_TS_BA_DLS; |
| case wlan_mlme::ReasonCode::UNKNOWN_TS_BA: |
| return WLAN_DEAUTH_REASON_UNKNOWN_TS_BA; |
| case wlan_mlme::ReasonCode::TIMEOUT: |
| return WLAN_DEAUTH_REASON_TIMEOUT; |
| case wlan_mlme::ReasonCode::PEERKEY_MISMATCH: |
| return WLAN_DEAUTH_REASON_PEERKEY_MISMATCH; |
| case wlan_mlme::ReasonCode::PEER_INITIATED: |
| return WLAN_DEAUTH_REASON_PEER_INITIATED; |
| case wlan_mlme::ReasonCode::AP_INITIATED: |
| return WLAN_DEAUTH_REASON_AP_INITIATED; |
| case wlan_mlme::ReasonCode::REASON_INVALID_FT_ACTION_FRAME_COUNT: |
| return WLAN_DEAUTH_REASON_INVALID_FT_ACTION_FRAME_COUNT; |
| case wlan_mlme::ReasonCode::REASON_INVALID_PMKID: |
| return WLAN_DEAUTH_REASON_INVALID_PMKID; |
| case wlan_mlme::ReasonCode::REASON_INVALID_MDE: |
| return WLAN_DEAUTH_REASON_INVALID_MDE; |
| case wlan_mlme::ReasonCode::REASON_INVALID_FTE: |
| return WLAN_DEAUTH_REASON_INVALID_FTE; |
| case wlan_mlme::ReasonCode::MESH_PEERING_CANCELED: |
| return WLAN_DEAUTH_REASON_MESH_PEERING_CANCELED; |
| case wlan_mlme::ReasonCode::MESH_MAX_PEERS: |
| return WLAN_DEAUTH_REASON_MESH_MAX_PEERS; |
| case wlan_mlme::ReasonCode::MESH_CONFIGURATION_POLICY_VIOLATION: |
| return WLAN_DEAUTH_REASON_MESH_CONFIGURATION_POLICY_VIOLATION; |
| case wlan_mlme::ReasonCode::MESH_CLOSE_RCVD: |
| return WLAN_DEAUTH_REASON_MESH_CLOSE_RCVD; |
| case wlan_mlme::ReasonCode::MESH_MAX_RETRIES: |
| return WLAN_DEAUTH_REASON_MESH_MAX_RETRIES; |
| case wlan_mlme::ReasonCode::MESH_CONFIRM_TIMEOUT: |
| return WLAN_DEAUTH_REASON_MESH_CONFIRM_TIMEOUT; |
| case wlan_mlme::ReasonCode::MESH_INVALID_GTK: |
| return WLAN_DEAUTH_REASON_MESH_INVALID_GTK; |
| case wlan_mlme::ReasonCode::MESH_INCONSISTENT_PARAMETERS: |
| return WLAN_DEAUTH_REASON_MESH_INCONSISTENT_PARAMETERS; |
| case wlan_mlme::ReasonCode::MESH_INVALID_SECURITY_CAPABILITY: |
| return WLAN_DEAUTH_REASON_MESH_INVALID_SECURITY_CAPABILITY; |
| case wlan_mlme::ReasonCode::MESH_PATH_ERROR_NO_PROXY_INFORMATION: |
| return WLAN_DEAUTH_REASON_MESH_PATH_ERROR_NO_PROXY_INFORMATION; |
| case wlan_mlme::ReasonCode::MESH_PATH_ERROR_NO_FORWARDING_INFORMATION: |
| return WLAN_DEAUTH_REASON_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION; |
| case wlan_mlme::ReasonCode::MESH_PATH_ERROR_DESTINATION_UNREACHABLE: |
| return WLAN_DEAUTH_REASON_MESH_PATH_ERROR_DESTINATION_UNREACHABLE; |
| case wlan_mlme::ReasonCode::MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS: |
| return WLAN_DEAUTH_REASON_MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS; |
| case wlan_mlme::ReasonCode::MESH_CHANNEL_SWITCH_REGULATORY_REQUIREMENTS: |
| return WLAN_DEAUTH_REASON_MESH_CHANNEL_SWITCH_REGULATORY_REQUIREMENTS; |
| case wlan_mlme::ReasonCode::MESH_CHANNEL_SWITCH_UNSPECIFIED: |
| return WLAN_DEAUTH_REASON_MESH_CHANNEL_SWITCH_UNSPECIFIED; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| uint8_t ConvertKeyType(wlan_mlme::KeyType key_type) { |
| switch (key_type) { |
| case wlan_mlme::KeyType::GROUP: |
| return WLAN_KEY_TYPE_GROUP; |
| case wlan_mlme::KeyType::PAIRWISE: |
| return WLAN_KEY_TYPE_PAIRWISE; |
| case wlan_mlme::KeyType::PEER_KEY: |
| return WLAN_KEY_TYPE_PEER; |
| case wlan_mlme::KeyType::IGTK: |
| return WLAN_KEY_TYPE_IGTK; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| void ConvertSetKeyDescriptor(set_key_descriptor_t* key_desc, |
| const wlan_mlme::SetKeyDescriptor& fidl_key_desc) { |
| // key |
| key_desc->key = const_cast<uint8_t*>(fidl_key_desc.key.data()); |
| |
| // length |
| key_desc->length = fidl_key_desc.key.size(); |
| |
| // key_id |
| key_desc->key_id = fidl_key_desc.key_id; |
| |
| // key_type |
| key_desc->key_type = ConvertKeyType(fidl_key_desc.key_type); |
| |
| // address |
| std::memcpy(key_desc->address, fidl_key_desc.address.data(), ETH_ALEN); |
| |
| // rsc |
| std::memcpy(key_desc->rsc, fidl_key_desc.rsc.data(), sizeof(key_desc->rsc)); |
| |
| // cipher_suite_oui |
| std::memcpy(key_desc->cipher_suite_oui, fidl_key_desc.cipher_suite_oui.data(), |
| sizeof(key_desc->cipher_suite_oui)); |
| |
| // cipher_suite_type |
| key_desc->cipher_suite_type = fidl_key_desc.cipher_suite_type; |
| } |
| |
| void ConvertDeleteKeyDescriptor(delete_key_descriptor_t* key_desc, |
| const wlan_mlme::DeleteKeyDescriptor& fidl_key_desc) { |
| // key_id |
| key_desc->key_id = fidl_key_desc.key_id; |
| |
| // key_type |
| key_desc->key_type = ConvertKeyType(fidl_key_desc.key_type); |
| |
| // address |
| std::memcpy(key_desc->address, fidl_key_desc.address.data(), ETH_ALEN); |
| } |
| |
| wlan_mlme::ScanResultCodes ConvertScanResultCode(uint8_t code) { |
| switch (code) { |
| case WLAN_SCAN_RESULT_SUCCESS: |
| return wlan_mlme::ScanResultCodes::SUCCESS; |
| case WLAN_SCAN_RESULT_NOT_SUPPORTED: |
| return wlan_mlme::ScanResultCodes::NOT_SUPPORTED; |
| case WLAN_SCAN_RESULT_INVALID_ARGS: |
| return wlan_mlme::ScanResultCodes::INVALID_ARGS; |
| case WLAN_SCAN_RESULT_INTERNAL_ERROR: |
| return wlan_mlme::ScanResultCodes::INTERNAL_ERROR; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| wlan_mlme::JoinResultCodes ConvertJoinResultCode(uint8_t code) { |
| switch (code) { |
| case WLAN_JOIN_RESULT_SUCCESS: |
| return wlan_mlme::JoinResultCodes::SUCCESS; |
| case WLAN_JOIN_RESULT_FAILURE_TIMEOUT: |
| return wlan_mlme::JoinResultCodes::JOIN_FAILURE_TIMEOUT; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| wlan_mlme::AuthenticationTypes ConvertAuthType(uint8_t auth_type) { |
| switch (auth_type) { |
| case WLAN_AUTH_TYPE_OPEN_SYSTEM: |
| return wlan_mlme::AuthenticationTypes::OPEN_SYSTEM; |
| case WLAN_AUTH_TYPE_SHARED_KEY: |
| return wlan_mlme::AuthenticationTypes::SHARED_KEY; |
| case WLAN_AUTH_TYPE_FAST_BSS_TRANSITION: |
| return wlan_mlme::AuthenticationTypes::FAST_BSS_TRANSITION; |
| case WLAN_AUTH_TYPE_SAE: |
| return wlan_mlme::AuthenticationTypes::SAE; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| wlan_mlme::AuthenticateResultCodes ConvertAuthResultCode(uint8_t code) { |
| switch (code) { |
| case WLAN_AUTH_RESULT_SUCCESS: |
| return wlan_mlme::AuthenticateResultCodes::SUCCESS; |
| case WLAN_AUTH_RESULT_REFUSED: |
| return wlan_mlme::AuthenticateResultCodes::REFUSED; |
| case WLAN_AUTH_RESULT_ANTI_CLOGGING_TOKEN_REQUIRED: |
| return wlan_mlme::AuthenticateResultCodes::ANTI_CLOGGING_TOKEN_REQUIRED; |
| case WLAN_AUTH_RESULT_FINITE_CYCLIC_GROUP_NOT_SUPPORTED: |
| return wlan_mlme::AuthenticateResultCodes::FINITE_CYCLIC_GROUP_NOT_SUPPORTED; |
| case WLAN_AUTH_RESULT_REJECTED: |
| return wlan_mlme::AuthenticateResultCodes::AUTHENTICATION_REJECTED; |
| case WLAN_AUTH_RESULT_FAILURE_TIMEOUT: |
| return wlan_mlme::AuthenticateResultCodes::AUTH_FAILURE_TIMEOUT; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| uint8_t ConvertAuthResultCode(wlan_mlme::AuthenticateResultCodes code) { |
| switch (code) { |
| case wlan_mlme::AuthenticateResultCodes::SUCCESS: |
| return WLAN_AUTH_RESULT_SUCCESS; |
| case wlan_mlme::AuthenticateResultCodes::REFUSED: |
| return WLAN_AUTH_RESULT_REFUSED; |
| case wlan_mlme::AuthenticateResultCodes::ANTI_CLOGGING_TOKEN_REQUIRED: |
| return WLAN_AUTH_RESULT_ANTI_CLOGGING_TOKEN_REQUIRED; |
| case wlan_mlme::AuthenticateResultCodes::FINITE_CYCLIC_GROUP_NOT_SUPPORTED: |
| return WLAN_AUTH_RESULT_FINITE_CYCLIC_GROUP_NOT_SUPPORTED; |
| case wlan_mlme::AuthenticateResultCodes::AUTHENTICATION_REJECTED: |
| return WLAN_AUTH_RESULT_REJECTED; |
| case wlan_mlme::AuthenticateResultCodes::AUTH_FAILURE_TIMEOUT: |
| return WLAN_AUTH_RESULT_FAILURE_TIMEOUT; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| wlan_mlme::ReasonCode ConvertDeauthReasonCode(uint16_t reason) { |
| switch (reason) { |
| case WLAN_DEAUTH_REASON_UNSPECIFIED: |
| return wlan_mlme::ReasonCode::UNSPECIFIED_REASON; |
| case WLAN_DEAUTH_REASON_INVALID_AUTHENTICATION: |
| return wlan_mlme::ReasonCode::INVALID_AUTHENTICATION; |
| case WLAN_DEAUTH_REASON_LEAVING_NETWORK_DEAUTH: |
| return wlan_mlme::ReasonCode::LEAVING_NETWORK_DEAUTH; |
| case WLAN_DEAUTH_REASON_INACTIVITY: |
| return wlan_mlme::ReasonCode::REASON_INACTIVITY; |
| case WLAN_DEAUTH_REASON_NO_MORE_STAS: |
| return wlan_mlme::ReasonCode::NO_MORE_STAS; |
| case WLAN_DEAUTH_REASON_INVALID_CLASS2_FRAME: |
| return wlan_mlme::ReasonCode::INVALID_CLASS2_FRAME; |
| case WLAN_DEAUTH_REASON_INVALID_CLASS3_FRAME: |
| return wlan_mlme::ReasonCode::INVALID_CLASS3_FRAME; |
| case WLAN_DEAUTH_REASON_LEAVING_NETWORK_DISASSOC: |
| return wlan_mlme::ReasonCode::LEAVING_NETWORK_DISASSOC; |
| case WLAN_DEAUTH_REASON_NOT_AUTHENTICATED: |
| return wlan_mlme::ReasonCode::NOT_AUTHENTICATED; |
| case WLAN_DEAUTH_REASON_UNACCEPTABLE_POWER_CA: |
| return wlan_mlme::ReasonCode::UNACCEPTABLE_POWER_CA; |
| case WLAN_DEAUTH_REASON_UNACCEPTABLE_SUPPORTED_CHANNELS: |
| return wlan_mlme::ReasonCode::UNACCEPTABLE_SUPPORTED_CHANNELS; |
| case WLAN_DEAUTH_REASON_BSS_TRANSITION_DISASSOC: |
| return wlan_mlme::ReasonCode::BSS_TRANSITION_DISASSOC; |
| case WLAN_DEAUTH_REASON_INVALID_ELEMENT: |
| return wlan_mlme::ReasonCode::REASON_INVALID_ELEMENT; |
| case WLAN_DEAUTH_REASON_MIC_FAILURE: |
| return wlan_mlme::ReasonCode::MIC_FAILURE; |
| case WLAN_DEAUTH_REASON_FOURWAY_HANDSHAKE_TIMEOUT: |
| return wlan_mlme::ReasonCode::FOURWAY_HANDSHAKE_TIMEOUT; |
| case WLAN_DEAUTH_REASON_GK_HANDSHAKE_TIMEOUT: |
| return wlan_mlme::ReasonCode::GK_HANDSHAKE_TIMEOUT; |
| case WLAN_DEAUTH_REASON_HANDSHAKE_ELEMENT_MISMATCH: |
| return wlan_mlme::ReasonCode::HANDSHAKE_ELEMENT_MISMATCH; |
| case WLAN_DEAUTH_REASON_INVALID_GROUP_CIPHER: |
| return wlan_mlme::ReasonCode::REASON_INVALID_GROUP_CIPHER; |
| case WLAN_DEAUTH_REASON_INVALID_PAIRWISE_CIPHER: |
| return wlan_mlme::ReasonCode::REASON_INVALID_PAIRWISE_CIPHER; |
| case WLAN_DEAUTH_REASON_INVALID_AKMP: |
| return wlan_mlme::ReasonCode::REASON_INVALID_AKMP; |
| case WLAN_DEAUTH_REASON_UNSUPPORTED_RSNE_VERSION: |
| return wlan_mlme::ReasonCode::UNSUPPORTED_RSNE_VERSION; |
| case WLAN_DEAUTH_REASON_INVALID_RSNE_CAPABILITIES: |
| return wlan_mlme::ReasonCode::INVALID_RSNE_CAPABILITIES; |
| case WLAN_DEAUTH_REASON_IEEE802_1_X_AUTH_FAILED: |
| return wlan_mlme::ReasonCode::IEEE802_1_X_AUTH_FAILED; |
| case WLAN_DEAUTH_REASON_CIPHER_OUT_OF_POLICY: |
| return wlan_mlme::ReasonCode::REASON_CIPHER_OUT_OF_POLICY; |
| case WLAN_DEAUTH_REASON_TDLS_PEER_UNREACHABLE: |
| return wlan_mlme::ReasonCode::TDLS_PEER_UNREACHABLE; |
| case WLAN_DEAUTH_REASON_TDLS_UNSPECIFIED: |
| return wlan_mlme::ReasonCode::TDLS_UNSPECIFIED_REASON; |
| case WLAN_DEAUTH_REASON_SSP_REQUESTED_DISASSOC: |
| return wlan_mlme::ReasonCode::SSP_REQUESTED_DISASSOC; |
| case WLAN_DEAUTH_REASON_NO_SSP_ROAMING_AGREEMENT: |
| return wlan_mlme::ReasonCode::NO_SSP_ROAMING_AGREEMENT; |
| case WLAN_DEAUTH_REASON_BAD_CIPHER_OR_AKM: |
| return wlan_mlme::ReasonCode::BAD_CIPHER_OR_AKM; |
| case WLAN_DEAUTH_REASON_NOT_AUTHORIZED_THIS_LOCATION: |
| return wlan_mlme::ReasonCode::NOT_AUTHORIZED_THIS_LOCATION; |
| case WLAN_DEAUTH_REASON_SERVICE_CHANGE_PRECLUDES_TS: |
| return wlan_mlme::ReasonCode::SERVICE_CHANGE_PRECLUDES_TS; |
| case WLAN_DEAUTH_REASON_UNSPECIFIED_QOS: |
| return wlan_mlme::ReasonCode::UNSPECIFIED_QOS_REASON; |
| case WLAN_DEAUTH_REASON_NOT_ENOUGH_BANDWIDTH: |
| return wlan_mlme::ReasonCode::NOT_ENOUGH_BANDWIDTH; |
| case WLAN_DEAUTH_REASON_MISSING_ACKS: |
| return wlan_mlme::ReasonCode::MISSING_ACKS; |
| case WLAN_DEAUTH_REASON_EXCEEDED_TXOP: |
| return wlan_mlme::ReasonCode::EXCEEDED_TXOP; |
| case WLAN_DEAUTH_REASON_STA_LEAVING: |
| return wlan_mlme::ReasonCode::STA_LEAVING; |
| case WLAN_DEAUTH_REASON_END_TS_BA_DLS: |
| return wlan_mlme::ReasonCode::END_TS_BA_DLS; |
| case WLAN_DEAUTH_REASON_UNKNOWN_TS_BA: |
| return wlan_mlme::ReasonCode::UNKNOWN_TS_BA; |
| case WLAN_DEAUTH_REASON_TIMEOUT: |
| return wlan_mlme::ReasonCode::TIMEOUT; |
| case WLAN_DEAUTH_REASON_PEERKEY_MISMATCH: |
| return wlan_mlme::ReasonCode::PEERKEY_MISMATCH; |
| case WLAN_DEAUTH_REASON_PEER_INITIATED: |
| return wlan_mlme::ReasonCode::PEER_INITIATED; |
| case WLAN_DEAUTH_REASON_AP_INITIATED: |
| return wlan_mlme::ReasonCode::AP_INITIATED; |
| case WLAN_DEAUTH_REASON_INVALID_FT_ACTION_FRAME_COUNT: |
| return wlan_mlme::ReasonCode::REASON_INVALID_FT_ACTION_FRAME_COUNT; |
| case WLAN_DEAUTH_REASON_INVALID_PMKID: |
| return wlan_mlme::ReasonCode::REASON_INVALID_PMKID; |
| case WLAN_DEAUTH_REASON_INVALID_MDE: |
| return wlan_mlme::ReasonCode::REASON_INVALID_MDE; |
| case WLAN_DEAUTH_REASON_INVALID_FTE: |
| return wlan_mlme::ReasonCode::REASON_INVALID_FTE; |
| case WLAN_DEAUTH_REASON_MESH_PEERING_CANCELED: |
| return wlan_mlme::ReasonCode::MESH_PEERING_CANCELED; |
| case WLAN_DEAUTH_REASON_MESH_MAX_PEERS: |
| return wlan_mlme::ReasonCode::MESH_MAX_PEERS; |
| case WLAN_DEAUTH_REASON_MESH_CONFIGURATION_POLICY_VIOLATION: |
| return wlan_mlme::ReasonCode::MESH_CONFIGURATION_POLICY_VIOLATION; |
| case WLAN_DEAUTH_REASON_MESH_CLOSE_RCVD: |
| return wlan_mlme::ReasonCode::MESH_CLOSE_RCVD; |
| case WLAN_DEAUTH_REASON_MESH_MAX_RETRIES: |
| return wlan_mlme::ReasonCode::MESH_MAX_RETRIES; |
| case WLAN_DEAUTH_REASON_MESH_CONFIRM_TIMEOUT: |
| return wlan_mlme::ReasonCode::MESH_CONFIRM_TIMEOUT; |
| case WLAN_DEAUTH_REASON_MESH_INVALID_GTK: |
| return wlan_mlme::ReasonCode::MESH_INVALID_GTK; |
| case WLAN_DEAUTH_REASON_MESH_INCONSISTENT_PARAMETERS: |
| return wlan_mlme::ReasonCode::MESH_INCONSISTENT_PARAMETERS; |
| case WLAN_DEAUTH_REASON_MESH_INVALID_SECURITY_CAPABILITY: |
| return wlan_mlme::ReasonCode::MESH_INVALID_SECURITY_CAPABILITY; |
| case WLAN_DEAUTH_REASON_MESH_PATH_ERROR_NO_PROXY_INFORMATION: |
| return wlan_mlme::ReasonCode::MESH_PATH_ERROR_NO_PROXY_INFORMATION; |
| case WLAN_DEAUTH_REASON_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION: |
| return wlan_mlme::ReasonCode::MESH_PATH_ERROR_NO_FORWARDING_INFORMATION; |
| case WLAN_DEAUTH_REASON_MESH_PATH_ERROR_DESTINATION_UNREACHABLE: |
| return wlan_mlme::ReasonCode::MESH_PATH_ERROR_DESTINATION_UNREACHABLE; |
| case WLAN_DEAUTH_REASON_MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS: |
| return wlan_mlme::ReasonCode::MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS; |
| case WLAN_DEAUTH_REASON_MESH_CHANNEL_SWITCH_REGULATORY_REQUIREMENTS: |
| return wlan_mlme::ReasonCode::MESH_CHANNEL_SWITCH_REGULATORY_REQUIREMENTS; |
| case WLAN_DEAUTH_REASON_MESH_CHANNEL_SWITCH_UNSPECIFIED: |
| return wlan_mlme::ReasonCode::MESH_CHANNEL_SWITCH_UNSPECIFIED; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| wlan_mlme::AssociateResultCodes ConvertAssocResultCode(uint8_t code) { |
| switch (code) { |
| case WLAN_ASSOC_RESULT_SUCCESS: |
| return wlan_mlme::AssociateResultCodes::SUCCESS; |
| case WLAN_ASSOC_RESULT_REFUSED_REASON_UNSPECIFIED: |
| return wlan_mlme::AssociateResultCodes::REFUSED_REASON_UNSPECIFIED; |
| case WLAN_ASSOC_RESULT_REFUSED_NOT_AUTHENTICATED: |
| return wlan_mlme::AssociateResultCodes::REFUSED_NOT_AUTHENTICATED; |
| case WLAN_ASSOC_RESULT_REFUSED_CAPABILITIES_MISMATCH: |
| return wlan_mlme::AssociateResultCodes::REFUSED_CAPABILITIES_MISMATCH; |
| case WLAN_ASSOC_RESULT_REFUSED_EXTERNAL_REASON: |
| return wlan_mlme::AssociateResultCodes::REFUSED_EXTERNAL_REASON; |
| case WLAN_ASSOC_RESULT_REFUSED_AP_OUT_OF_MEMORY: |
| return wlan_mlme::AssociateResultCodes::REFUSED_AP_OUT_OF_MEMORY; |
| case WLAN_ASSOC_RESULT_REFUSED_BASIC_RATES_MISMATCH: |
| return wlan_mlme::AssociateResultCodes::REFUSED_BASIC_RATES_MISMATCH; |
| case WLAN_ASSOC_RESULT_REJECTED_EMERGENCY_SERVICES_NOT_SUPPORTED: |
| return wlan_mlme::AssociateResultCodes::REJECTED_EMERGENCY_SERVICES_NOT_SUPPORTED; |
| case WLAN_ASSOC_RESULT_REFUSED_TEMPORARILY: |
| return wlan_mlme::AssociateResultCodes::REFUSED_TEMPORARILY; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| uint8_t ConvertAssocResultCode(wlan_mlme::AssociateResultCodes code) { |
| switch (code) { |
| case wlan_mlme::AssociateResultCodes::SUCCESS: |
| return WLAN_ASSOC_RESULT_SUCCESS; |
| case wlan_mlme::AssociateResultCodes::REFUSED_REASON_UNSPECIFIED: |
| return WLAN_ASSOC_RESULT_REFUSED_REASON_UNSPECIFIED; |
| case wlan_mlme::AssociateResultCodes::REFUSED_NOT_AUTHENTICATED: |
| return WLAN_ASSOC_RESULT_REFUSED_NOT_AUTHENTICATED; |
| case wlan_mlme::AssociateResultCodes::REFUSED_CAPABILITIES_MISMATCH: |
| return WLAN_ASSOC_RESULT_REFUSED_CAPABILITIES_MISMATCH; |
| case wlan_mlme::AssociateResultCodes::REFUSED_EXTERNAL_REASON: |
| return WLAN_ASSOC_RESULT_REFUSED_EXTERNAL_REASON; |
| case wlan_mlme::AssociateResultCodes::REFUSED_AP_OUT_OF_MEMORY: |
| return WLAN_ASSOC_RESULT_REFUSED_AP_OUT_OF_MEMORY; |
| case wlan_mlme::AssociateResultCodes::REFUSED_BASIC_RATES_MISMATCH: |
| return WLAN_ASSOC_RESULT_REFUSED_BASIC_RATES_MISMATCH; |
| case wlan_mlme::AssociateResultCodes::REJECTED_EMERGENCY_SERVICES_NOT_SUPPORTED: |
| return WLAN_ASSOC_RESULT_REJECTED_EMERGENCY_SERVICES_NOT_SUPPORTED; |
| case wlan_mlme::AssociateResultCodes::REFUSED_TEMPORARILY: |
| return WLAN_ASSOC_RESULT_REFUSED_TEMPORARILY; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| wlan_mlme::StartResultCodes ConvertStartResultCode(uint8_t code) { |
| switch (code) { |
| case WLAN_START_RESULT_SUCCESS: |
| return wlan_mlme::StartResultCodes::SUCCESS; |
| case WLAN_START_RESULT_BSS_ALREADY_STARTED_OR_JOINED: |
| return wlan_mlme::StartResultCodes::BSS_ALREADY_STARTED_OR_JOINED; |
| case WLAN_START_RESULT_RESET_REQUIRED_BEFORE_START: |
| return wlan_mlme::StartResultCodes::RESET_REQUIRED_BEFORE_START; |
| case WLAN_START_RESULT_NOT_SUPPORTED: |
| return wlan_mlme::StartResultCodes::NOT_SUPPORTED; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| wlan_mlme::StopResultCodes ConvertStopResultCode(uint8_t code) { |
| switch (code) { |
| case WLAN_STOP_RESULT_SUCCESS: |
| return wlan_mlme::StopResultCodes::SUCCESS; |
| case WLAN_STOP_RESULT_BSS_ALREADY_STOPPED: |
| return wlan_mlme::StopResultCodes::BSS_ALREADY_STOPPED; |
| case WLAN_STOP_RESULT_INTERNAL_ERROR: |
| return wlan_mlme::StopResultCodes::INTERNAL_ERROR; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| wlan_mlme::EapolResultCodes ConvertEapolResultCode(uint8_t code) { |
| switch (code) { |
| case WLAN_EAPOL_RESULT_SUCCESS: |
| return wlan_mlme::EapolResultCodes::SUCCESS; |
| case WLAN_EAPOL_RESULT_TRANSMISSION_FAILURE: |
| return wlan_mlme::EapolResultCodes::TRANSMISSION_FAILURE; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| wlan_mlme::MacRole ConvertMacRole(uint8_t role) { |
| switch (role) { |
| case WLAN_MAC_ROLE_CLIENT: |
| return wlan_mlme::MacRole::CLIENT; |
| case WLAN_MAC_ROLE_AP: |
| return wlan_mlme::MacRole::AP; |
| case WLAN_MAC_ROLE_MESH: |
| return wlan_mlme::MacRole::MESH; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| void ConvertBandCapabilities(wlan_mlme::BandCapabilities* fidl_band, |
| const wlanif_band_capabilities_t& band) { |
| fidl_band->band_id = ::wlan::common::BandToFidl(band.band_id); |
| |
| // basic_rates |
| fidl_band->basic_rates.resize(0); |
| fidl_band->basic_rates.assign(band.basic_rates, band.basic_rates + band.num_basic_rates); |
| |
| // base_frequency |
| fidl_band->base_frequency = band.base_frequency; |
| |
| // channels |
| fidl_band->channels.resize(0); |
| fidl_band->channels.assign(band.channels, band.channels + band.num_channels); |
| |
| if (band.ht_supported) { |
| fidl_band->ht_cap = std::make_unique<wlan_mlme::HtCapabilities>( |
| ::wlan::HtCapabilities::FromDdk(band.ht_caps).ToFidl()); |
| } |
| |
| if (band.vht_supported) { |
| fidl_band->vht_cap = std::make_unique<wlan_mlme::VhtCapabilities>( |
| ::wlan::VhtCapabilities::FromDdk(band.vht_caps).ToFidl()); |
| } |
| } |
| |
| void ConvertCounter(wlan_stats::Counter* fidl_counter, const wlanif_counter_t& counter) { |
| fidl_counter->count = counter.count; |
| if (counter.name != nullptr) { |
| fidl_counter->name = counter.name; |
| } else { |
| fidl_counter->name = ""; |
| } |
| } |
| |
| void ConvertPacketCounter(wlan_stats::PacketCounter* fidl_counter, |
| const wlanif_packet_counter_t& counter) { |
| ConvertCounter(&fidl_counter->in, counter.in); |
| ConvertCounter(&fidl_counter->out, counter.out); |
| ConvertCounter(&fidl_counter->drop, counter.drop); |
| ConvertCounter(&fidl_counter->in_bytes, counter.in_bytes); |
| ConvertCounter(&fidl_counter->out_bytes, counter.out_bytes); |
| ConvertCounter(&fidl_counter->drop_bytes, counter.drop_bytes); |
| } |
| |
| void ConvertDispatcherStats(wlan_stats::DispatcherStats* fidl_stats, |
| const wlanif_dispatcher_stats_t& stats) { |
| ConvertPacketCounter(&fidl_stats->any_packet, stats.any_packet); |
| ConvertPacketCounter(&fidl_stats->mgmt_frame, stats.mgmt_frame); |
| ConvertPacketCounter(&fidl_stats->ctrl_frame, stats.ctrl_frame); |
| ConvertPacketCounter(&fidl_stats->data_frame, stats.data_frame); |
| } |
| |
| void ConvertRssiStats(wlan_stats::RssiStats* fidl_stats, const wlanif_rssi_stats& stats) { |
| fidl_stats->hist.resize(0); |
| fidl_stats->hist.assign(stats.hist, stats.hist + stats.hist_len); |
| } |
| |
| wlan_stats::ClientMlmeStats BuildClientMlmeStats(const wlanif_client_mlme_stats_t& client_stats) { |
| wlan_stats::ClientMlmeStats fidl_client_stats; |
| |
| ConvertPacketCounter(&fidl_client_stats.svc_msg, client_stats.svc_msg); |
| ConvertPacketCounter(&fidl_client_stats.data_frame, client_stats.data_frame); |
| ConvertPacketCounter(&fidl_client_stats.mgmt_frame, client_stats.mgmt_frame); |
| ConvertPacketCounter(&fidl_client_stats.tx_frame, client_stats.tx_frame); |
| ConvertPacketCounter(&fidl_client_stats.rx_frame, client_stats.rx_frame); |
| |
| ConvertRssiStats(&fidl_client_stats.assoc_data_rssi, client_stats.assoc_data_rssi); |
| ConvertRssiStats(&fidl_client_stats.beacon_rssi, client_stats.beacon_rssi); |
| |
| return fidl_client_stats; |
| } |
| |
| wlan_stats::ApMlmeStats BuildApMlmeStats(const wlanif_ap_mlme_stats_t& ap_stats) { |
| wlan_stats::ApMlmeStats fidl_ap_stats; |
| |
| ConvertPacketCounter(&fidl_ap_stats.not_used, ap_stats.not_used); |
| |
| return fidl_ap_stats; |
| } |
| |
| void ConvertMlmeStats(wlan_stats::MlmeStats* fidl_stats, const wlanif_mlme_stats_t& stats) { |
| switch (stats.tag) { |
| case WLANIF_MLME_STATS_TYPE_CLIENT: |
| fidl_stats->set_client_mlme_stats(BuildClientMlmeStats(stats.client_mlme_stats)); |
| break; |
| case WLANIF_MLME_STATS_TYPE_AP: |
| fidl_stats->set_ap_mlme_stats(BuildApMlmeStats(stats.ap_mlme_stats)); |
| break; |
| default: |
| ZX_ASSERT(0); |
| } |
| } |
| |
| void ConvertIfaceStats(wlan_stats::IfaceStats* fidl_stats, const wlanif_stats_t& stats) { |
| ConvertDispatcherStats(&fidl_stats->dispatcher_stats, stats.dispatcher_stats); |
| if (stats.mlme_stats != nullptr) { |
| fidl_stats->mlme_stats = ::std::make_unique<wlan_stats::MlmeStats>(); |
| ConvertMlmeStats(fidl_stats->mlme_stats.get(), *stats.mlme_stats); |
| } |
| } |
| |
| } // namespace wlanif |