| // Copyright 2023 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 <gtest/gtest.h> |
| #include <sdk/lib/driver/logging/cpp/logger.h> |
| #include <src/connectivity/wlan/drivers/wlanif/convert.h> |
| |
| #include "fidl/fuchsia.wlan.ieee80211/cpp/wire_types.h" |
| #include "fuchsia/wlan/common/c/banjo.h" |
| |
| namespace wlan::drivers { |
| |
| namespace wlan_fullmac = fuchsia_wlan_fullmac::wire; |
| namespace wlan_common = fuchsia_wlan_common::wire; |
| namespace wlan_ieee80211 = fuchsia_wlan_ieee80211::wire; |
| namespace wlan_internal = fuchsia_wlan_internal::wire; |
| |
| /* Metadata which is used as input and expected output for the under-test conversion functions*/ |
| |
| // Fake metadata -- general |
| static constexpr uint8_t kFakeMacAddr[wlan_ieee80211::kMacAddrLen] = {6, 5, 4, 3, 2, 2}; |
| static constexpr uint8_t kFakeRate = 206; |
| static constexpr uint8_t kFakeHtCapBytes[wlan_ieee80211::kHtCapLen] = { |
| 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4, 6, 2, 6, 4, 3, 3}; |
| static constexpr uint8_t kFakeVhtCapBytes[wlan_ieee80211::kVhtCapLen] = {8, 3, 2, 7, 9, 5, |
| 0, 2, 8, 8, 4, 1}; |
| static constexpr uint8_t kFakeIeLen = 18; |
| static constexpr uint8_t kFakeIeBytes[kFakeIeLen] = {4, 5, 0, 1, 3, 0, 9, 9, 5, |
| 1, 0, 1, 1, 1, 4, 1, 0, 1}; |
| static constexpr uint8_t kFakeChannel = 15; |
| static constexpr uint8_t kFakeSsidLen = 9; |
| static constexpr uint8_t kFakeSsid[kFakeSsidLen] = {'w', 'h', 'a', 't', 'a', 't', 'e', 's', 't'}; |
| static constexpr uint8_t kFakeKey[wlan_ieee80211::kMaxKeyLen] = { |
| 6, 9, 3, 9, 9, 3, 7, 5, 1, 0, 5, 8, 2, 0, 9, 7, 4, 9, 4, 4, 5, 9, 2, 3, 0, 7, 8, 1, 6, 4, 0, 6}; |
| static constexpr uint8_t kFakeOui[wlan_ieee80211::kOuiLen] = {9, 7, 1}; |
| static constexpr size_t kFakeBucketSize = 5; |
| static constexpr zx_time_t kFakeTime = 6859760; |
| |
| static constexpr bool kPopulaterBool = true; |
| static constexpr uint8_t kRandomPopulaterUint8 = 118; |
| static constexpr uint16_t kRandomPopulaterUint16 = 53535; |
| static constexpr uint32_t kRandomPopulaterUint32 = 4062722468; |
| static constexpr uint64_t kRandomPopulaterUint64 = 1518741085930693; |
| static constexpr int8_t kRandomPopulaterInt8 = -95; |
| |
| // Fake metadata -- FIDL |
| static constexpr wlan_common::WlanMacRole kFakeFidlMacRole = wlan_common::WlanMacRole::kAp; |
| static constexpr wlan_common::WlanBand kFakeFidlBand = wlan_common::WlanBand::kFiveGhz; |
| static constexpr wlan_fullmac::WlanScanType kFakeFidlScanType = wlan_fullmac::WlanScanType::kActive; |
| static constexpr wlan_fullmac::WlanAuthType kFakeFidlAuthType = wlan_fullmac::WlanAuthType::kSae; |
| static constexpr wlan_common::BssType kFakeFidlBssType = wlan_common::BssType::kMesh; |
| static constexpr wlan_common::WlanKeyType kFakeFidlKeyType = wlan_common::WlanKeyType::kGroup; |
| static constexpr wlan_common::ChannelBandwidth kFakeFidlChannelBandwidth = |
| wlan_common::ChannelBandwidth::kCbw160; |
| static constexpr wlan_ieee80211::CipherSuiteType kFakeFidlCipherSuiteType = |
| wlan_ieee80211::CipherSuiteType::kGcmp128; |
| static constexpr wlan_fullmac::WlanAssocResult kFakeFidlAssocResult = |
| wlan_fullmac::WlanAssocResult::kRefusedBasicRatesMismatch; |
| static constexpr wlan_common::DataPlaneType kFakeFidlDataPlaneType = |
| wlan_common::DataPlaneType::kGenericNetworkDevice; |
| static constexpr wlan_common::MacImplementationType kFakeFidlMacImplementationType = |
| wlan_common::MacImplementationType::kFullmac; |
| static constexpr wlan_fullmac::WlanFullmacAntennaFreq kFakeFidlAntennaFreq = |
| wlan_fullmac::WlanFullmacAntennaFreq::kAntenna5G; |
| static constexpr wlan_fullmac::WlanFullmacHistScope kFakeFidlHistScope = |
| wlan_fullmac::WlanFullmacHistScope::kPerAntenna; |
| static constexpr wlan_fullmac::WlanScanResult kFakeFidlScanResult = |
| wlan_fullmac::WlanScanResult::kInvalidArgs; |
| static constexpr wlan_ieee80211::StatusCode kFakeFidlStatusCode = |
| wlan_ieee80211::StatusCode::kTdlsRejected; |
| static constexpr wlan_fullmac::WlanEapolResult kFakeFidlEapolResult = |
| wlan_fullmac::WlanEapolResult::kTransmissionFailure; |
| |
| // Fake metadata -- banjo |
| static constexpr uint32_t kFakeBanjoMacRole = WLAN_MAC_ROLE_AP; |
| static constexpr uint8_t kFakeBanjoBand = WLAN_BAND_FIVE_GHZ; |
| static constexpr uint8_t kFakeBanjoScanType = WLAN_SCAN_TYPE_ACTIVE; |
| static constexpr uint8_t kFakeBanjoAuthType = WLAN_AUTH_TYPE_SAE; |
| static constexpr uint32_t kFakeBanjoBssType = BSS_TYPE_MESH; |
| static constexpr uint8_t kFakeBanjoKeyType = WLAN_KEY_TYPE_GROUP; |
| static constexpr uint32_t kFakeBanjoChannelBandwidth = CHANNEL_BANDWIDTH_CBW160; |
| static constexpr uint32_t kFakeBanjoCipherSuiteType = CIPHER_SUITE_TYPE_GCMP_128; |
| static constexpr uint8_t kFakeBanjoAssocResult = WLAN_ASSOC_RESULT_REFUSED_BASIC_RATES_MISMATCH; |
| static constexpr uint8_t kFakeBanjoDataPlaneType = DATA_PLANE_TYPE_GENERIC_NETWORK_DEVICE; |
| static constexpr uint8_t kFakeBanjoMacImplementationType = MAC_IMPLEMENTATION_TYPE_FULLMAC; |
| static constexpr uint8_t kFakeBanjoAntennaFreq = WLAN_FULLMAC_ANTENNA_FREQ_ANTENNA_5_G; |
| static constexpr uint8_t kFakeBanjoHistScope = WLAN_FULLMAC_HIST_SCOPE_PER_ANTENNA; |
| static constexpr uint8_t kFakeBanjoScanResult = WLAN_SCAN_RESULT_INVALID_ARGS; |
| static constexpr uint16_t kFakeBanjoStatusCode = STATUS_CODE_TDLS_REJECTED; |
| static constexpr uint8_t kFakeBanjoEapolResult = WLAN_EAPOL_RESULT_TRANSMISSION_FAILURE; |
| |
| class ConvertTest : public ::testing::Test { |
| void SetUp() override {} |
| void TearDown() override {} |
| }; |
| |
| /* Tests for to-FIDL conversions */ |
| |
| TEST_F(ConvertTest, ToFidlStartScanRequest) { |
| wlan_fullmac_impl_base_start_scan_request_t in; |
| in.txn_id = kRandomPopulaterUint64; |
| in.scan_type = kFakeBanjoScanType; |
| |
| uint8_t channels_array[wlan_ieee80211::kMaxUniqueChannelNumbers]; |
| for (size_t i = 0; i < wlan_ieee80211::kMaxUniqueChannelNumbers; i++) { |
| channels_array[i] = kFakeChannel; |
| } |
| in.channels_list = channels_array; |
| in.channels_count = wlan_ieee80211::kMaxUniqueChannelNumbers; |
| |
| cssid_t ssids_array[wlan_ieee80211::kSsidListMax]; |
| for (size_t i = 0; i < wlan_ieee80211::kSsidListMax; i++) { |
| ssids_array[i].len = kFakeSsidLen; |
| memcpy(ssids_array[i].data, kFakeSsid, kFakeSsidLen); |
| } |
| in.ssids_list = ssids_array; |
| in.ssids_count = wlan_ieee80211::kSsidListMax; |
| in.min_channel_time = kRandomPopulaterUint32; |
| in.max_channel_time = kRandomPopulaterUint32; |
| |
| fidl::Arena arena; |
| fuchsia_wlan_fullmac::wire::WlanFullmacImplBaseStartScanRequest out; |
| wlanif::ConvertScanReq(in, &out, arena); |
| |
| EXPECT_EQ(kRandomPopulaterUint64, out.txn_id()); |
| EXPECT_EQ(kFakeFidlScanType, out.scan_type()); |
| EXPECT_EQ(wlan_ieee80211::kMaxUniqueChannelNumbers, out.channels().count()); |
| for (size_t i = 0; i < wlan_ieee80211::kMaxUniqueChannelNumbers; i++) { |
| EXPECT_EQ(kFakeChannel, out.channels().data()[i]); |
| } |
| EXPECT_EQ(wlan_ieee80211::kSsidListMax, out.ssids().count()); |
| for (size_t i = 0; i < wlan_ieee80211::kSsidListMax; i++) { |
| EXPECT_EQ(kFakeSsidLen, out.ssids().data()[i].len); |
| EXPECT_EQ(0, memcmp(kFakeSsid, out.ssids().data()[i].data.data(), kFakeSsidLen)); |
| } |
| EXPECT_EQ(kRandomPopulaterUint32, out.min_channel_time()); |
| EXPECT_EQ(kRandomPopulaterUint32, out.max_channel_time()); |
| } |
| |
| TEST_F(ConvertTest, ToFidlQueryConnectReqRequest) { |
| wlan_fullmac_impl_base_connect_request_t in; |
| bss_description_t bss; |
| |
| memcpy(bss.bssid, kFakeMacAddr, sizeof(kFakeMacAddr)); |
| bss.bss_type = kFakeBanjoBssType; |
| bss.beacon_period = kRandomPopulaterUint16; |
| bss.capability_info = kRandomPopulaterUint16; |
| bss.ies_list = kFakeIeBytes; |
| bss.ies_count = kFakeIeLen; |
| bss.channel.primary = kFakeChannel; |
| bss.channel.cbw = kFakeBanjoChannelBandwidth; |
| bss.channel.secondary80 = kFakeChannel; |
| bss.rssi_dbm = kRandomPopulaterInt8; |
| bss.snr_db = kRandomPopulaterInt8; |
| in.selected_bss = bss; |
| |
| in.connect_failure_timeout = kRandomPopulaterUint32; |
| in.auth_type = kFakeBanjoAuthType; |
| |
| in.sae_password_list = kFakeKey; |
| in.sae_password_count = wlan_ieee80211::kMaxKeyLen; |
| |
| wlan_key_config_t key_config; |
| key_config.protection = WLAN_PROTECTION_RX_TX; |
| key_config.key_list = kFakeKey; |
| key_config.key_count = wlan_ieee80211::kMaxKeyLen; |
| key_config.key_idx = kRandomPopulaterUint8; |
| key_config.key_type = kFakeBanjoKeyType; |
| memcpy(key_config.peer_addr, kFakeMacAddr, sizeof(kFakeMacAddr)); |
| key_config.rsc = kRandomPopulaterUint64; |
| for (size_t i = 0; i < wlan_ieee80211::kOuiLen; i++) { |
| key_config.cipher_oui[i] = kFakeOui[i]; |
| } |
| key_config.cipher_type = kFakeBanjoCipherSuiteType; |
| in.wep_key = key_config; |
| |
| in.security_ie_list = kFakeIeBytes; |
| in.security_ie_count = kFakeIeLen; |
| |
| fidl::Arena arena; |
| fuchsia_wlan_fullmac::wire::WlanFullmacImplBaseConnectRequest out; |
| |
| wlanif::ConvertConnectReq(in, &out, arena); |
| |
| EXPECT_EQ(0, memcmp(out.selected_bss().bssid.data(), kFakeMacAddr, sizeof(kFakeMacAddr))); |
| EXPECT_EQ(kFakeFidlBssType, out.selected_bss().bss_type); |
| EXPECT_EQ(kRandomPopulaterUint16, out.selected_bss().beacon_period); |
| EXPECT_EQ(kRandomPopulaterUint16, out.selected_bss().capability_info); |
| EXPECT_EQ(0, memcmp(out.selected_bss().ies.data(), kFakeIeBytes, kFakeIeLen)); |
| EXPECT_EQ(kFakeIeLen, out.selected_bss().ies.count()); |
| EXPECT_EQ(kFakeChannel, out.selected_bss().channel.primary); |
| EXPECT_EQ(kFakeFidlChannelBandwidth, out.selected_bss().channel.cbw); |
| EXPECT_EQ(kFakeChannel, out.selected_bss().channel.secondary80); |
| EXPECT_EQ(kRandomPopulaterInt8, out.selected_bss().rssi_dbm); |
| EXPECT_EQ(kRandomPopulaterInt8, out.selected_bss().snr_db); |
| |
| EXPECT_EQ(kRandomPopulaterUint32, out.connect_failure_timeout()); |
| EXPECT_EQ(kFakeFidlAuthType, out.auth_type()); |
| EXPECT_EQ(0, memcmp(out.sae_password().data(), kFakeKey, wlan_ieee80211::kMaxKeyLen)); |
| EXPECT_EQ(wlan_ieee80211::kMaxKeyLen, out.sae_password().count()); |
| |
| EXPECT_EQ(0, memcmp(out.wep_key().key().data(), kFakeKey, wlan_ieee80211::kMaxKeyLen)); |
| EXPECT_EQ(wlan_ieee80211::kMaxKeyLen, out.wep_key().key().count()); |
| |
| EXPECT_EQ(kRandomPopulaterUint8, out.wep_key().key_idx()); |
| EXPECT_EQ(kFakeFidlKeyType, out.wep_key().key_type()); |
| EXPECT_EQ(0, memcmp(out.wep_key().peer_addr().data(), kFakeMacAddr, sizeof(kFakeMacAddr))); |
| EXPECT_EQ(kRandomPopulaterUint64, out.wep_key().rsc()); |
| for (size_t i = 0; i < wlan_ieee80211::kOuiLen; i++) { |
| EXPECT_EQ(kFakeOui[i], out.wep_key().cipher_oui()[i]); |
| } |
| EXPECT_EQ(kFakeFidlCipherSuiteType, out.wep_key().cipher_type()); |
| EXPECT_EQ(0, memcmp(out.security_ie().data(), kFakeIeBytes, kFakeIeLen)); |
| EXPECT_EQ(kFakeIeLen, out.security_ie().count()); |
| } |
| |
| TEST_F(ConvertTest, ToFidlDeleteKeyDescriptor) { |
| delete_key_descriptor_t in; |
| in.key_id = kRandomPopulaterUint16; |
| in.key_type = kFakeBanjoKeyType; |
| memcpy(in.address, kFakeMacAddr, sizeof(kFakeMacAddr)); |
| |
| fuchsia_wlan_fullmac::wire::DeleteKeyDescriptor out; |
| wlanif::ConvertDeleteKeyDescriptor(in, &out); |
| |
| EXPECT_EQ(kRandomPopulaterUint16, out.key_id); |
| EXPECT_EQ(kFakeFidlKeyType, out.key_type); |
| EXPECT_EQ(0, memcmp(kFakeMacAddr, out.address.data(), sizeof(kFakeMacAddr))); |
| } |
| |
| TEST_F(ConvertTest, ToFidlAssocResult) { |
| uint8_t in = kFakeBanjoAssocResult; |
| wlan_fullmac::WlanAssocResult out = wlanif::ConvertAssocResult(in); |
| EXPECT_EQ(kFakeFidlAssocResult, out); |
| } |
| |
| /* Tests for to-banjo conversions */ |
| |
| TEST_F(ConvertTest, ToBanjoQueryInfo) { |
| fdf::Logger logger("test", FUCHSIA_LOG_INFO, zx::socket{}, |
| fidl::WireClient<fuchsia_logger::LogSink>{}); |
| fdf::Logger::SetGlobalInstance(&logger); |
| fidl::Arena arena; |
| wlan_fullmac::WlanFullmacQueryInfo in; |
| |
| fidl::Array<uint8_t, wlan_ieee80211::kMacAddrLen> sta_addr; |
| memcpy(sta_addr.begin(), kFakeMacAddr, sta_addr.size()); |
| in.sta_addr = sta_addr; |
| in.role = kFakeFidlMacRole; |
| |
| fidl::Array<wlan_fullmac::WlanFullmacBandCapability, wlan_common::kMaxBands> band_caps_buffer; |
| |
| for (size_t i = 0; i < wlan_common::kMaxBands; i++) { |
| band_caps_buffer[i].band = kFakeFidlBand; |
| band_caps_buffer[i].basic_rate_count = wlan_ieee80211::kMaxSupportedBasicRates; |
| |
| fidl::Array<uint8_t, wlan_ieee80211::kMaxSupportedBasicRates> basic_rate_array; |
| for (size_t j = 0; j < wlan_ieee80211::kMaxSupportedBasicRates; j++) { |
| basic_rate_array[j] = kFakeRate; |
| } |
| band_caps_buffer[i].basic_rate_list = basic_rate_array; |
| band_caps_buffer[i].ht_supported = kPopulaterBool; |
| wlan_ieee80211::HtCapabilities ht_caps; |
| memcpy(ht_caps.bytes.begin(), kFakeHtCapBytes, wlan_ieee80211::kHtCapLen); |
| band_caps_buffer[i].ht_caps = ht_caps; |
| band_caps_buffer[i].vht_supported = kPopulaterBool; |
| wlan_ieee80211::VhtCapabilities vht_caps; |
| memcpy(vht_caps.bytes.begin(), kFakeVhtCapBytes, wlan_ieee80211::kVhtCapLen); |
| band_caps_buffer[i].vht_caps = vht_caps; |
| band_caps_buffer[i].operating_channel_count = wlan_ieee80211::kMaxUniqueChannelNumbers; |
| fidl::Array<uint8_t, wlan_ieee80211::kMaxUniqueChannelNumbers> operating_channel_array; |
| |
| for (size_t j = 0; j < wlan_ieee80211::kMaxUniqueChannelNumbers; j++) { |
| operating_channel_array[j] = kFakeChannel; |
| } |
| band_caps_buffer[i].operating_channel_list = operating_channel_array; |
| } |
| |
| in.band_cap_list = band_caps_buffer; |
| in.band_cap_count = wlan_common::kMaxBands; |
| |
| wlan_fullmac_query_info_t out; |
| |
| wlanif::ConvertQueryInfo(in, &out); |
| |
| EXPECT_EQ(0, memcmp(out.sta_addr, kFakeMacAddr, wlan_ieee80211::kMacAddrLen)); |
| EXPECT_EQ(kFakeBanjoMacRole, out.role); |
| EXPECT_EQ(wlan_common::kMaxBands, out.band_cap_count); |
| |
| for (size_t i = 0; i < wlan_common::kMaxBands; i++) { |
| auto band_cap = out.band_cap_list[i]; |
| EXPECT_EQ(kFakeBanjoBand, band_cap.band); |
| EXPECT_EQ(wlan_ieee80211::kMaxSupportedBasicRates, band_cap.basic_rate_count); |
| for (size_t j = 0; j < wlan_ieee80211::kMaxSupportedBasicRates; j++) { |
| EXPECT_EQ(kFakeRate, band_cap.basic_rate_list[j]); |
| } |
| EXPECT_EQ(kPopulaterBool, band_cap.ht_supported); |
| EXPECT_EQ(0, memcmp(band_cap.ht_caps.bytes, kFakeHtCapBytes, wlan_ieee80211::kHtCapLen)); |
| EXPECT_EQ(kPopulaterBool, band_cap.vht_supported); |
| EXPECT_EQ(0, memcmp(band_cap.vht_caps.bytes, kFakeVhtCapBytes, wlan_ieee80211::kVhtCapLen)); |
| EXPECT_EQ(wlan_ieee80211::kMaxUniqueChannelNumbers, band_cap.operating_channel_count); |
| for (size_t j = 0; j < wlan_ieee80211::kMaxUniqueChannelNumbers; j++) { |
| EXPECT_EQ(kFakeChannel, band_cap.operating_channel_list[j]); |
| } |
| } |
| } |
| |
| TEST_F(ConvertTest, ToBanjoMacSublayerSupport) { |
| wlan_common::MacSublayerSupport in; |
| mac_sublayer_support_t out; |
| |
| in.rate_selection_offload.supported = kPopulaterBool; |
| in.data_plane.data_plane_type = kFakeFidlDataPlaneType; |
| in.device.is_synthetic = kPopulaterBool; |
| in.device.mac_implementation_type = kFakeFidlMacImplementationType; |
| in.device.tx_status_report_supported = kPopulaterBool; |
| |
| wlanif::ConvertMacSublayerSupport(in, &out); |
| |
| EXPECT_EQ(kPopulaterBool, out.rate_selection_offload.supported); |
| EXPECT_EQ(kFakeBanjoDataPlaneType, out.data_plane.data_plane_type); |
| EXPECT_EQ(kPopulaterBool, out.device.is_synthetic); |
| EXPECT_EQ(kFakeBanjoMacImplementationType, out.device.mac_implementation_type); |
| EXPECT_EQ(kPopulaterBool, out.device.tx_status_report_supported); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoSecuritySupport) { |
| wlan_common::SecuritySupport in; |
| security_support_t out; |
| |
| in.sae.driver_handler_supported = kPopulaterBool; |
| in.sae.sme_handler_supported = kPopulaterBool; |
| in.mfp.supported = kPopulaterBool; |
| |
| wlanif::ConvertSecuritySupport(in, &out); |
| |
| EXPECT_EQ(kPopulaterBool, in.sae.driver_handler_supported); |
| EXPECT_EQ(kPopulaterBool, in.sae.sme_handler_supported); |
| EXPECT_EQ(kPopulaterBool, in.mfp.supported); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoSpectrumManagementSupport) { |
| wlan_common::SpectrumManagementSupport in; |
| spectrum_management_support_t out; |
| in.dfs.supported = kPopulaterBool; |
| wlanif::ConvertSpectrumManagementSupport(in, &out); |
| EXPECT_EQ(kPopulaterBool, out.dfs.supported); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoIfaceCounterStats) { |
| fuchsia_wlan_fullmac::wire::WlanFullmacIfaceCounterStats in; |
| wlan_fullmac_iface_counter_stats_t out; |
| in.rx_unicast_total = kRandomPopulaterUint64; |
| in.rx_unicast_drop = kRandomPopulaterUint64; |
| in.rx_multicast = kRandomPopulaterUint64; |
| in.tx_total = kRandomPopulaterUint64; |
| in.tx_drop = kRandomPopulaterUint64; |
| |
| wlanif::ConvertIfaceCounterStats(in, &out); |
| |
| EXPECT_EQ(kRandomPopulaterUint64, out.rx_unicast_total); |
| EXPECT_EQ(kRandomPopulaterUint64, out.rx_unicast_drop); |
| EXPECT_EQ(kRandomPopulaterUint64, out.rx_multicast); |
| EXPECT_EQ(kRandomPopulaterUint64, out.tx_total); |
| EXPECT_EQ(kRandomPopulaterUint64, out.tx_drop); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoNoiseFloorHistogram) { |
| wlan_fullmac::WlanFullmacNoiseFloorHistogram in; |
| wlan_fullmac_noise_floor_histogram_t out; |
| wlan_fullmac_hist_bucket_t out_bucket_buffer[kFakeBucketSize]; |
| out.noise_floor_samples_list = out_bucket_buffer; |
| |
| in.hist_scope = kFakeFidlHistScope; |
| in.antenna_id.freq = kFakeFidlAntennaFreq; |
| in.antenna_id.index = kRandomPopulaterUint8; |
| |
| wlan_fullmac::WlanFullmacHistBucket bucket_array[kFakeBucketSize]; |
| for (size_t i = 0; i < kFakeBucketSize; i++) { |
| bucket_array[i].bucket_index = kRandomPopulaterUint16; |
| bucket_array[i].num_samples = kRandomPopulaterUint64; |
| } |
| in.noise_floor_samples = fidl::VectorView<wlan_fullmac::WlanFullmacHistBucket>::FromExternal( |
| bucket_array, kFakeBucketSize); |
| in.invalid_samples = kRandomPopulaterUint64; |
| |
| wlanif::ConvertNoiseFloorHistogram(in, &out); |
| |
| EXPECT_EQ(kFakeBanjoHistScope, out.hist_scope); |
| EXPECT_EQ(kFakeBanjoAntennaFreq, out.antenna_id.freq); |
| EXPECT_EQ(kRandomPopulaterUint8, out.antenna_id.index); |
| for (size_t i = 0; i < kFakeBucketSize; i++) { |
| EXPECT_EQ(kRandomPopulaterUint16, out.noise_floor_samples_list[i].bucket_index); |
| EXPECT_EQ(kRandomPopulaterUint64, out.noise_floor_samples_list[i].num_samples); |
| } |
| EXPECT_EQ(kFakeBucketSize, out.noise_floor_samples_count); |
| |
| EXPECT_EQ(kRandomPopulaterUint64, out.invalid_samples); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoRxRateIndexHistogram) { |
| wlan_fullmac::WlanFullmacRxRateIndexHistogram in; |
| wlan_fullmac_rx_rate_index_histogram_t out; |
| wlan_fullmac_hist_bucket_t out_bucket_buffer[kFakeBucketSize]; |
| out.rx_rate_index_samples_list = out_bucket_buffer; |
| |
| in.hist_scope = kFakeFidlHistScope; |
| in.antenna_id.freq = kFakeFidlAntennaFreq; |
| in.antenna_id.index = kRandomPopulaterUint8; |
| |
| wlan_fullmac::WlanFullmacHistBucket bucket_array[kFakeBucketSize]; |
| for (size_t i = 0; i < kFakeBucketSize; i++) { |
| bucket_array[i].bucket_index = kRandomPopulaterUint16; |
| bucket_array[i].num_samples = kRandomPopulaterUint64; |
| } |
| in.rx_rate_index_samples = fidl::VectorView<wlan_fullmac::WlanFullmacHistBucket>::FromExternal( |
| bucket_array, kFakeBucketSize); |
| in.invalid_samples = kRandomPopulaterUint64; |
| |
| wlanif::ConvertRxRateIndexHistogram(in, &out); |
| |
| EXPECT_EQ(kFakeBanjoHistScope, out.hist_scope); |
| EXPECT_EQ(kFakeBanjoAntennaFreq, out.antenna_id.freq); |
| EXPECT_EQ(kRandomPopulaterUint8, out.antenna_id.index); |
| for (size_t i = 0; i < kFakeBucketSize; i++) { |
| EXPECT_EQ(kRandomPopulaterUint16, out.rx_rate_index_samples_list[i].bucket_index); |
| EXPECT_EQ(kRandomPopulaterUint64, out.rx_rate_index_samples_list[i].num_samples); |
| } |
| EXPECT_EQ(kFakeBucketSize, out.rx_rate_index_samples_count); |
| |
| EXPECT_EQ(kRandomPopulaterUint64, out.invalid_samples); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoRssiHistogram) { |
| wlan_fullmac::WlanFullmacRssiHistogram in; |
| wlan_fullmac_rssi_histogram_t out; |
| wlan_fullmac_hist_bucket_t out_bucket_buffer[kFakeBucketSize]; |
| out.rssi_samples_list = out_bucket_buffer; |
| |
| in.hist_scope = kFakeFidlHistScope; |
| in.antenna_id.freq = kFakeFidlAntennaFreq; |
| in.antenna_id.index = kRandomPopulaterUint8; |
| |
| wlan_fullmac::WlanFullmacHistBucket bucket_array[kFakeBucketSize]; |
| for (size_t i = 0; i < kFakeBucketSize; i++) { |
| bucket_array[i].bucket_index = kRandomPopulaterUint16; |
| bucket_array[i].num_samples = kRandomPopulaterUint64; |
| } |
| in.rssi_samples = fidl::VectorView<wlan_fullmac::WlanFullmacHistBucket>::FromExternal( |
| bucket_array, kFakeBucketSize); |
| in.invalid_samples = kRandomPopulaterUint64; |
| |
| wlanif::ConvertRssiHistogram(in, &out); |
| |
| EXPECT_EQ(kFakeBanjoHistScope, out.hist_scope); |
| EXPECT_EQ(kFakeBanjoAntennaFreq, out.antenna_id.freq); |
| EXPECT_EQ(kRandomPopulaterUint8, out.antenna_id.index); |
| for (size_t i = 0; i < kFakeBucketSize; i++) { |
| EXPECT_EQ(kRandomPopulaterUint16, out.rssi_samples_list[i].bucket_index); |
| EXPECT_EQ(kRandomPopulaterUint64, out.rssi_samples_list[i].num_samples); |
| } |
| EXPECT_EQ(kFakeBucketSize, out.rssi_samples_count); |
| |
| EXPECT_EQ(kRandomPopulaterUint64, out.invalid_samples); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoSnrHistogram) { |
| wlan_fullmac::WlanFullmacSnrHistogram in; |
| wlan_fullmac_snr_histogram_t out; |
| wlan_fullmac_hist_bucket_t out_bucket_buffer[kFakeBucketSize]; |
| out.snr_samples_list = out_bucket_buffer; |
| |
| in.hist_scope = kFakeFidlHistScope; |
| in.antenna_id.freq = kFakeFidlAntennaFreq; |
| in.antenna_id.index = kRandomPopulaterUint8; |
| |
| wlan_fullmac::WlanFullmacHistBucket bucket_array[kFakeBucketSize]; |
| for (size_t i = 0; i < kFakeBucketSize; i++) { |
| bucket_array[i].bucket_index = kRandomPopulaterUint16; |
| bucket_array[i].num_samples = kRandomPopulaterUint64; |
| } |
| in.snr_samples = fidl::VectorView<wlan_fullmac::WlanFullmacHistBucket>::FromExternal( |
| bucket_array, kFakeBucketSize); |
| in.invalid_samples = kRandomPopulaterUint64; |
| |
| wlanif::ConvertSnrHistogram(in, &out); |
| |
| EXPECT_EQ(kFakeBanjoHistScope, out.hist_scope); |
| EXPECT_EQ(kFakeBanjoAntennaFreq, out.antenna_id.freq); |
| EXPECT_EQ(kRandomPopulaterUint8, out.antenna_id.index); |
| for (size_t i = 0; i < kFakeBucketSize; i++) { |
| EXPECT_EQ(kRandomPopulaterUint16, out.snr_samples_list[i].bucket_index); |
| EXPECT_EQ(kRandomPopulaterUint64, out.snr_samples_list[i].num_samples); |
| } |
| EXPECT_EQ(kFakeBucketSize, out.snr_samples_count); |
| |
| EXPECT_EQ(kRandomPopulaterUint64, out.invalid_samples); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoFullmacScanResult) { |
| fuchsia_wlan_fullmac::wire::WlanFullmacScanResult in; |
| wlan_fullmac_scan_result_t out; |
| |
| in.txn_id = kRandomPopulaterUint64; |
| in.timestamp_nanos = kFakeTime; |
| |
| memcpy(in.bss.bssid.data(), kFakeMacAddr, sizeof(kFakeMacAddr)); |
| in.bss.bss_type = kFakeFidlBssType; |
| in.bss.beacon_period = kRandomPopulaterUint16; |
| in.bss.capability_info = kRandomPopulaterUint16; |
| in.bss.ies = |
| fidl::VectorView<uint8_t>::FromExternal(const_cast<uint8_t*>(kFakeIeBytes), kFakeIeLen); |
| in.bss.channel.primary = kFakeChannel; |
| in.bss.channel.cbw = kFakeFidlChannelBandwidth; |
| in.bss.channel.secondary80 = kFakeChannel; |
| in.bss.rssi_dbm = kRandomPopulaterInt8; |
| in.bss.snr_db = kRandomPopulaterInt8; |
| |
| wlanif::ConvertFullmacScanResult(in, &out); |
| |
| EXPECT_EQ(kRandomPopulaterUint64, out.txn_id); |
| EXPECT_EQ(kFakeTime, out.timestamp_nanos); |
| EXPECT_EQ(0, memcmp(kFakeMacAddr, out.bss.bssid, sizeof(kFakeMacAddr))); |
| EXPECT_EQ(kFakeBanjoBssType, out.bss.bss_type); |
| EXPECT_EQ(kRandomPopulaterUint16, out.bss.beacon_period); |
| EXPECT_EQ(kRandomPopulaterUint16, out.bss.capability_info); |
| EXPECT_EQ(0, memcmp(kFakeIeBytes, out.bss.ies_list, kFakeIeLen)); |
| EXPECT_EQ(kFakeIeLen, out.bss.ies_count); |
| EXPECT_EQ(kFakeChannel, out.bss.channel.primary); |
| EXPECT_EQ(kFakeBanjoChannelBandwidth, out.bss.channel.cbw); |
| EXPECT_EQ(kFakeChannel, out.bss.channel.secondary80); |
| EXPECT_EQ(kRandomPopulaterInt8, out.bss.rssi_dbm); |
| EXPECT_EQ(kRandomPopulaterInt8, out.bss.snr_db); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoScanEnd) { |
| wlan_fullmac::WlanFullmacScanEnd in; |
| wlan_fullmac_scan_end_t out; |
| |
| in.txn_id = kRandomPopulaterUint64; |
| in.code = kFakeFidlScanResult; |
| |
| wlanif::ConvertScanEnd(in, &out); |
| |
| EXPECT_EQ(kRandomPopulaterUint64, out.txn_id); |
| EXPECT_EQ(kFakeBanjoScanResult, out.code); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoConnectConfirm) { |
| wlan_fullmac::WlanFullmacConnectConfirm in; |
| wlan_fullmac_connect_confirm_t out; |
| |
| memcpy(in.peer_sta_address.data(), kFakeMacAddr, sizeof(kFakeMacAddr)); |
| in.result_code = kFakeFidlStatusCode; |
| in.association_id = kRandomPopulaterUint16; |
| in.association_ies = |
| fidl::VectorView<uint8_t>::FromExternal(const_cast<uint8_t*>(kFakeIeBytes), kFakeIeLen); |
| |
| wlanif::ConvertConnectConfirm(in, &out); |
| |
| EXPECT_EQ(0, memcmp(kFakeMacAddr, out.peer_sta_address, sizeof(kFakeMacAddr))); |
| EXPECT_EQ(kFakeBanjoStatusCode, out.result_code); |
| EXPECT_EQ(kRandomPopulaterUint16, out.association_id); |
| EXPECT_EQ(0, memcmp(kFakeIeBytes, out.association_ies_list, kFakeIeLen)); |
| EXPECT_EQ(kFakeIeLen, out.association_ies_count); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoEapolConf) { |
| wlan_fullmac::WlanFullmacEapolConfirm in; |
| wlan_fullmac_eapol_confirm_t out; |
| |
| in.result_code = kFakeFidlEapolResult; |
| memcpy(in.dst_addr.data(), kFakeMacAddr, sizeof(kFakeMacAddr)); |
| |
| wlanif::ConvertEapolConf(in, &out); |
| |
| EXPECT_EQ(kFakeBanjoEapolResult, out.result_code); |
| EXPECT_EQ(0, memcmp(kFakeMacAddr, out.dst_addr, sizeof(kFakeMacAddr))); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoSaeFrame) { |
| wlan_fullmac::WlanFullmacSaeFrame in; |
| wlan_fullmac_sae_frame_t out; |
| |
| memcpy(in.peer_sta_address.data(), kFakeMacAddr, sizeof(kFakeMacAddr)); |
| in.status_code = kFakeFidlStatusCode; |
| in.seq_num = kRandomPopulaterUint16; |
| |
| constexpr size_t kSaeFieldsSize = 50; |
| uint8_t sae_fields_buffer[kSaeFieldsSize]; |
| for (size_t i = 0; i < kSaeFieldsSize; i++) { |
| sae_fields_buffer[i] = kRandomPopulaterUint8; |
| } |
| in.sae_fields = fidl::VectorView<uint8_t>::FromExternal(sae_fields_buffer, kSaeFieldsSize); |
| |
| wlanif::ConvertSaeFrame(in, &out); |
| |
| EXPECT_EQ(0, memcmp(kFakeMacAddr, out.peer_sta_address, sizeof(kFakeMacAddr))); |
| EXPECT_EQ(kFakeBanjoStatusCode, out.status_code); |
| EXPECT_EQ(kRandomPopulaterUint16, out.seq_num); |
| EXPECT_EQ(0, memcmp(sae_fields_buffer, out.sae_fields_list, kSaeFieldsSize)); |
| EXPECT_EQ(kSaeFieldsSize, out.sae_fields_count); |
| } |
| |
| TEST_F(ConvertTest, ToBanjoWmmParams) { |
| wlan_common::WlanWmmParameters in; |
| wlan_wmm_parameters_t out; |
| |
| in.apsd = kPopulaterBool; |
| in.ac_be_params.ecw_min = kRandomPopulaterUint8; |
| in.ac_be_params.ecw_max = kRandomPopulaterUint8; |
| in.ac_be_params.aifsn = kRandomPopulaterUint8; |
| in.ac_be_params.txop_limit = kRandomPopulaterUint16; |
| in.ac_be_params.acm = kPopulaterBool; |
| |
| in.ac_bk_params.ecw_min = kRandomPopulaterUint8; |
| in.ac_bk_params.ecw_max = kRandomPopulaterUint8; |
| in.ac_bk_params.aifsn = kRandomPopulaterUint8; |
| in.ac_bk_params.txop_limit = kRandomPopulaterUint16; |
| in.ac_bk_params.acm = kPopulaterBool; |
| |
| in.ac_vi_params.ecw_min = kRandomPopulaterUint8; |
| in.ac_vi_params.ecw_max = kRandomPopulaterUint8; |
| in.ac_vi_params.aifsn = kRandomPopulaterUint8; |
| in.ac_vi_params.txop_limit = kRandomPopulaterUint16; |
| in.ac_vi_params.acm = kPopulaterBool; |
| |
| in.ac_vo_params.ecw_min = kRandomPopulaterUint8; |
| in.ac_vo_params.ecw_max = kRandomPopulaterUint8; |
| in.ac_vo_params.aifsn = kRandomPopulaterUint8; |
| in.ac_vo_params.txop_limit = kRandomPopulaterUint16; |
| in.ac_vo_params.acm = kPopulaterBool; |
| |
| wlanif::ConvertWmmParams(in, &out); |
| |
| EXPECT_EQ(out.apsd, kPopulaterBool); |
| EXPECT_EQ(out.ac_be_params.ecw_min, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_be_params.ecw_max, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_be_params.aifsn, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_be_params.txop_limit, kRandomPopulaterUint16); |
| EXPECT_EQ(out.ac_be_params.acm, kPopulaterBool); |
| |
| EXPECT_EQ(out.ac_bk_params.ecw_min, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_bk_params.ecw_max, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_bk_params.aifsn, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_bk_params.txop_limit, kRandomPopulaterUint16); |
| EXPECT_EQ(out.ac_bk_params.acm, kPopulaterBool); |
| |
| EXPECT_EQ(out.ac_vi_params.ecw_min, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_vi_params.ecw_max, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_vi_params.aifsn, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_vi_params.txop_limit, kRandomPopulaterUint16); |
| EXPECT_EQ(out.ac_vi_params.acm, kPopulaterBool); |
| |
| EXPECT_EQ(out.ac_vo_params.ecw_min, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_vo_params.ecw_max, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_vo_params.aifsn, kRandomPopulaterUint8); |
| EXPECT_EQ(out.ac_vo_params.txop_limit, kRandomPopulaterUint16); |
| EXPECT_EQ(out.ac_vo_params.acm, kPopulaterBool); |
| } |
| } // namespace wlan::drivers |