From 1cc02e52d946cc5c1e51ce7d2686258ab8413628 Mon Sep 17 00:00:00 2001 From: lesl Date: Thu, 26 Dec 2019 15:18:58 +0800 Subject: [PATCH] hostapd: Add SAE Support Bug: 142752869 Test: Manuel Test: vts-tradefed run commandAndExit vts-hal --skip-all-system-status-check --primary-abi-only --skip-preconditions --module VtsHalWifiHostapdV1_2Target -l INFO Change-Id: I811760206d05825f11f07f71cef21ed03a8c7204 --- current.txt | 2 +- wifi/hostapd/1.2/IHostapd.hal | 25 ++++ .../1.2/vts/functional/hostapd_hidl_test.cpp | 112 +++++++++++++++--- 3 files changed, 119 insertions(+), 20 deletions(-) diff --git a/current.txt b/current.txt index 78e66fe984..b19bd10b4a 100644 --- a/current.txt +++ b/current.txt @@ -650,7 +650,7 @@ a3eddd9bbdc87e8c22764070037dd1154f1cf006e6fba93364c4f85d4c134a19 android.hardwar 94e803236398bed1febb11cc21051bc42ec003700139b099d6c479e02a7ca3c3 android.hardware.neuralnetworks@1.3::IPreparedModelCallback 618a628f8c94d6f6e4cb401b69fa50ccb8b82191ea434e3a071252289b4f312c android.hardware.neuralnetworks@1.3::types 3e01d4446cd69fd1c48f8572efd97487bc179564b32bd795800b97bbe10be37b android.hardware.wifi@1.4::IWifi -514dc8b810658c45d7b0d34132b708cee2658ecedd9c7efc57d0d666ef182484 android.hardware.wifi.hostapd@1.2::IHostapd +42e72d7c8fd843d2611ffb9142bfae61dcdb5325860c6602825863f086a91bff android.hardware.wifi.hostapd@1.2::IHostapd 11f6448d15336361180391c8ebcdfd2d7cf77b3782d577e594d583aadc9c2877 android.hardware.wifi.hostapd@1.2::types a64467bae843569f0d465c5be7f0c7a5b987985b55a3ef4794dd5afc68538650 android.hardware.wifi.supplicant@1.3::ISupplicant c72cb37b3f66ef65aeb5c6438a3fbe17bbe847fdf62d1a76eafd7f3a8a526105 android.hardware.wifi.supplicant@1.3::ISupplicantStaIface diff --git a/wifi/hostapd/1.2/IHostapd.hal b/wifi/hostapd/1.2/IHostapd.hal index 5e6d80a616..5126d1299c 100644 --- a/wifi/hostapd/1.2/IHostapd.hal +++ b/wifi/hostapd/1.2/IHostapd.hal @@ -16,6 +16,7 @@ package android.hardware.wifi.hostapd@1.2; +import @1.0::IHostapd.EncryptionType; import @1.0::IHostapd.NetworkParams; import @1.1::IHostapd; import HostapdStatus; @@ -27,6 +28,12 @@ import DebugLevel; * Top-level object for managing SoftAPs. */ interface IHostapd extends @1.1::IHostapd { + /** Possible Security types. */ + enum EncryptionType : @1.0::IHostapd.EncryptionType { + WPA3_SAE_TRANSITION, + WPA3_SAE, + }; + /** * Band bitmMask to use for the SoftAp operations. * A combinatoin of these bits are used to identify the allowed bands @@ -150,6 +157,24 @@ interface IHostapd extends @1.1::IHostapd { ChannelParams channelParams; }; + /** + * Parameters to use for setting up the access point network. + */ + struct NetworkParams { + /** + * Baseline information as defined in HAL 1.0. + */ + @1.0::IHostapd.NetworkParams V1_0; + /** Key management mask for the replace V1_0.encryptionType. */ + EncryptionType encryptionType; + /** + * Passphrase for WPA3_SAE network, WPA3_SAE_TRANSITION and + * WPA2_PSK. Replaces @1.0::IHostapd.NetworkParams.pskPassphrase. + */ + string passphrase; + }; + + /** * Adds a new access point for hostapd to control. * diff --git a/wifi/hostapd/1.2/vts/functional/hostapd_hidl_test.cpp b/wifi/hostapd/1.2/vts/functional/hostapd_hidl_test.cpp index 94cbb424b6..9f57934a34 100644 --- a/wifi/hostapd/1.2/vts/functional/hostapd_hidl_test.cpp +++ b/wifi/hostapd/1.2/vts/functional/hostapd_hidl_test.cpp @@ -41,6 +41,9 @@ namespace { constexpr unsigned char kNwSsid[] = {'t', 'e', 's', 't', '1', '2', '3', '4', '5'}; constexpr char kNwPassphrase[] = "test12345"; +constexpr char kInvalidMaxPskNwPassphrase[] = + "0123456789012345678901234567890123456789012345678901234567890123456789"; +constexpr char kInvalidMinPskNwPassphrase[] = "test"; constexpr int kIfaceChannel = 6; constexpr int kIfaceInvalidChannel = 567; constexpr uint8_t kTestZeroMacAddr[] = {[0 ... 5] = 0x0}; @@ -61,7 +64,7 @@ class HostapdHidlTest ASSERT_NE(hostapd_.get(), nullptr); } - virtual void TearDown() override { stopHostapd(wifi_instance_name_); } + virtual void TearDown() override { stopHostapd(hostapd_instance_name_); } protected: std::string getPrimaryWlanIfaceName() { @@ -133,31 +136,59 @@ class HostapdHidlTest } IHostapd::NetworkParams getOpenNwParams() { - IHostapd::NetworkParams nw_params; - nw_params.ssid = + IHostapd::NetworkParams nw_params_1_2; + ::android::hardware::wifi::hostapd::V1_0::IHostapd::NetworkParams + nw_params_1_0; + nw_params_1_0.ssid = std::vector(kNwSsid, kNwSsid + sizeof(kNwSsid)); - nw_params.isHidden = false; - nw_params.encryptionType = IHostapd::EncryptionType::NONE; - return nw_params; + nw_params_1_0.isHidden = false; + nw_params_1_2.V1_0 = nw_params_1_0; + nw_params_1_2.encryptionType = IHostapd::EncryptionType::NONE; + return nw_params_1_2; } IHostapd::NetworkParams getPskNwParams() { - IHostapd::NetworkParams nw_params; - nw_params.ssid = - std::vector(kNwSsid, kNwSsid + sizeof(kNwSsid)); - nw_params.isHidden = false; - nw_params.encryptionType = IHostapd::EncryptionType::WPA2; - nw_params.pskPassphrase = kNwPassphrase; - return nw_params; + IHostapd::NetworkParams nw_params_1_2 = getOpenNwParams(); + nw_params_1_2.encryptionType = IHostapd::EncryptionType::WPA2; + nw_params_1_2.passphrase = kNwPassphrase; + return nw_params_1_2; } IHostapd::NetworkParams getInvalidPskNwParams() { - IHostapd::NetworkParams nw_params; - nw_params.ssid = - std::vector(kNwSsid, kNwSsid + sizeof(kNwSsid)); - nw_params.isHidden = false; - nw_params.encryptionType = IHostapd::EncryptionType::WPA2; - return nw_params; + IHostapd::NetworkParams nw_params_1_2 = getOpenNwParams(); + nw_params_1_2.encryptionType = IHostapd::EncryptionType::WPA2; + nw_params_1_2.passphrase = kInvalidMaxPskNwPassphrase; + + return nw_params_1_2; + } + + IHostapd::NetworkParams getSaeTransitionNwParams() { + IHostapd::NetworkParams nw_params_1_2 = getOpenNwParams(); + nw_params_1_2.encryptionType = + IHostapd::EncryptionType::WPA3_SAE_TRANSITION; + nw_params_1_2.passphrase = kNwPassphrase; + return nw_params_1_2; + } + + IHostapd::NetworkParams getInvalidSaeTransitionNwParams() { + IHostapd::NetworkParams nw_params_1_2 = getOpenNwParams(); + nw_params_1_2.encryptionType = IHostapd::EncryptionType::WPA2; + nw_params_1_2.passphrase = kInvalidMinPskNwPassphrase; + return nw_params_1_2; + } + + IHostapd::NetworkParams getSaeNwParams() { + IHostapd::NetworkParams nw_params_1_2 = getOpenNwParams(); + nw_params_1_2.encryptionType = IHostapd::EncryptionType::WPA3_SAE; + nw_params_1_2.passphrase = kNwPassphrase; + return nw_params_1_2; + } + + IHostapd::NetworkParams getInvalidSaeNwParams() { + IHostapd::NetworkParams nw_params_1_2 = getOpenNwParams(); + nw_params_1_2.encryptionType = IHostapd::EncryptionType::WPA3_SAE; + nw_params_1_2.passphrase = ""; + return nw_params_1_2; } IHostapd::IfaceParams getIfaceParamsWithInvalidChannel() { @@ -238,6 +269,27 @@ TEST_P(HostapdHidlTest, AddOpenAccessPointWithoutAcs) { EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code); } +/** + * Adds an access point with SAE Transition network config & ACS disabled. + * Access point creation should pass. + */ +TEST_P(HostapdHidlTest, AddSaeTransitionAccessPointWithoutAcs) { + auto status = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(), + getSaeTransitionNwParams()); + EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code); +} + +/** + * Adds an access point with SAE network config & ACS disabled. + * Access point creation should pass. + */ +TEST_P(HostapdHidlTest, AddSAEAccessPointWithoutAcs) { + auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithoutAcs(), getSaeNwParams()); + EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code); +} + /** * Adds & then removes an access point with PSK network config & ACS enabled. * Access point creation & removal should pass. @@ -292,6 +344,28 @@ TEST_P(HostapdHidlTest, AddInvalidPskAccessPointWithoutAcs) { EXPECT_NE(HostapdStatusCode::SUCCESS, status.code); } +/** + * Adds an access point with invalid SAE transition network config. + * Access point creation should fail. + */ +TEST_P(HostapdHidlTest, AddInvalidSaeTransitionAccessPointWithoutAcs) { + auto status = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(), + getInvalidSaeTransitionNwParams()); + EXPECT_NE(HostapdStatusCode::SUCCESS, status.code); +} + +/** + * Adds an access point with invalid SAE network config. + * Access point creation should fail. + */ +TEST_P(HostapdHidlTest, AddInvalidSaeAccessPointWithoutAcs) { + auto status = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(), + getInvalidSaeNwParams()); + EXPECT_NE(HostapdStatusCode::SUCCESS, status.code); +} + /** * forceClientDisconnect should return FAILURE_IFACE_UNKNOWN * when hotspot interface doesn't init..