diff options
author | Jimmy Chen <jimmycmchen@google.com> | 2019-08-28 17:54:29 +0800 |
---|---|---|
committer | Jimmy Chen <jimmycmchen@google.com> | 2019-09-25 10:05:51 +0800 |
commit | 1eb823636d1b09347e6c0b5a0530f67e1294d988 (patch) | |
tree | 66092c9dd60810eedfd91631be7a77eace0f0880 /wifi | |
parent | b893a6d1547992b722b20960a2db3b8c9a50df40 (diff) | |
download | platform_hardware_interfaces-1eb823636d1b09347e6c0b5a0530f67e1294d988.tar.gz platform_hardware_interfaces-1eb823636d1b09347e6c0b5a0530f67e1294d988.tar.bz2 platform_hardware_interfaces-1eb823636d1b09347e6c0b5a0530f67e1294d988.zip |
wifi: add pmk cache interface
Bug: 36505680
Test: atest VtsHalWifiSupplicantV1_3TargetTest
Test: connect EAP access point and verify PMK cache works correctly.
Change-Id: Iab3a8a69b5fd23bda209c4fa8cf1518c9a1602db
Diffstat (limited to 'wifi')
9 files changed, 304 insertions, 0 deletions
diff --git a/wifi/supplicant/1.3/Android.bp b/wifi/supplicant/1.3/Android.bp index 6633d9d1e3..3f2053132b 100644 --- a/wifi/supplicant/1.3/Android.bp +++ b/wifi/supplicant/1.3/Android.bp @@ -9,6 +9,8 @@ hidl_interface { srcs: [ "types.hal", "ISupplicant.hal", + "ISupplicantStaIface.hal", + "ISupplicantStaIfaceCallback.hal", "ISupplicantStaNetwork.hal", ], interfaces: [ diff --git a/wifi/supplicant/1.3/ISupplicantStaIface.hal b/wifi/supplicant/1.3/ISupplicantStaIface.hal new file mode 100644 index 0000000000..62b40333e9 --- /dev/null +++ b/wifi/supplicant/1.3/ISupplicantStaIface.hal @@ -0,0 +1,46 @@ +/* + * Copyright 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.wifi.supplicant@1.3; + +import @1.0::SupplicantStatus; +import @1.2::ISupplicantStaIface; +import @1.3::ISupplicantStaIfaceCallback; + +/** + * Interface exposed by the supplicant for each station mode network + * interface (e.g wlan0) it controls. + */ +interface ISupplicantStaIface extends @1.2::ISupplicantStaIface { + /** + * Register for callbacks from this interface. + * + * These callbacks are invoked for events that are specific to this interface. + * Registration of multiple callback objects is supported. These objects must + * be automatically deleted when the corresponding client process is dead or + * if this interface is removed. + * + * @param callback An instance of the |ISupplicantStaIfaceCallback| HIDL + * interface object. + * @return status Status of the operation. + * Possible status codes: + * |SupplicantStatusCode.SUCCESS|, + * |SupplicantStatusCode.FAILURE_UNKNOWN|, + * |SupplicantStatusCode.FAILURE_IFACE_INVALID| + */ + registerCallback_1_3(ISupplicantStaIfaceCallback callback) + generates (SupplicantStatus status); +}; diff --git a/wifi/supplicant/1.3/ISupplicantStaIfaceCallback.hal b/wifi/supplicant/1.3/ISupplicantStaIfaceCallback.hal new file mode 100644 index 0000000000..107e0fc0f6 --- /dev/null +++ b/wifi/supplicant/1.3/ISupplicantStaIfaceCallback.hal @@ -0,0 +1,38 @@ +/* + * Copyright 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.wifi.supplicant@1.3; + +import @1.2::ISupplicantStaIfaceCallback; + +/** + * Callback Interface exposed by the supplicant service + * for each station mode interface (ISupplicantStaIface). + * + * Clients need to host an instance of this HIDL interface object and + * pass a reference of the object to the supplicant via the + * corresponding |ISupplicantStaIface.registerCallback_1_3| method. + */ +interface ISupplicantStaIfaceCallback extends @1.2::ISupplicantStaIfaceCallback { + /** + * Indicates PMK cache added event. + * + * @param expirationTimeInSec expiration time in seconds + * @param serializedEntry is serialized PMK cache entry, the content is + * opaque for the framework and depends on the native implementation. + */ + oneway onPmkCacheAdded(int64_t expirationTimeInSec, vec<uint8_t> serializedEntry); +}; diff --git a/wifi/supplicant/1.3/ISupplicantStaNetwork.hal b/wifi/supplicant/1.3/ISupplicantStaNetwork.hal index eb9de9a53e..5e265c6257 100644 --- a/wifi/supplicant/1.3/ISupplicantStaNetwork.hal +++ b/wifi/supplicant/1.3/ISupplicantStaNetwork.hal @@ -47,4 +47,19 @@ interface ISupplicantStaNetwork extends @1.2::ISupplicantStaNetwork { * @return ocspType ocsp type. */ getOcsp() generates (SupplicantStatus status, OcspType ocspType); + + /** + * Add a PMK into supplicant PMK cache. + * + * @param serializedEntry is serialized PMK cache entry, the content is + * opaque for the framework and depends on the native implementation. + * @return status Status of the operation + * Possible status codes: + * |SupplicantStatusCode.SUCCESS|, + * |SupplicantStatusCode.FAILURE_ARGS_INVALID|, + * |SupplicantStatusCode.FAILURE_UNKNOWN|, + * |SupplicantStatusCode.FAILURE_NETWORK_INVALID| + */ + setPmkCache(vec<uint8_t> serializedEntry) + generates (SupplicantStatus status); }; diff --git a/wifi/supplicant/1.3/vts/functional/Android.bp b/wifi/supplicant/1.3/vts/functional/Android.bp index 67c73481f2..abb86008b5 100644 --- a/wifi/supplicant/1.3/vts/functional/Android.bp +++ b/wifi/supplicant/1.3/vts/functional/Android.bp @@ -42,6 +42,7 @@ cc_test { defaults: ["VtsHalTargetTestDefaults"], srcs: [ "VtsHalWifiSupplicantV1_3TargetTest.cpp", + "supplicant_sta_iface_hidl_test.cpp", "supplicant_sta_network_hidl_test.cpp", ], static_libs: [ diff --git a/wifi/supplicant/1.3/vts/functional/supplicant_hidl_test_utils_1_3.cpp b/wifi/supplicant/1.3/vts/functional/supplicant_hidl_test_utils_1_3.cpp index 86959eba97..308808deff 100644 --- a/wifi/supplicant/1.3/vts/functional/supplicant_hidl_test_utils_1_3.cpp +++ b/wifi/supplicant/1.3/vts/functional/supplicant_hidl_test_utils_1_3.cpp @@ -21,8 +21,13 @@ #include "supplicant_hidl_test_utils_1_3.h" using ::android::sp; +using ::android::hardware::wifi::supplicant::V1_3::ISupplicantStaIface; using ::android::hardware::wifi::supplicant::V1_3::ISupplicantStaNetwork; +sp<ISupplicantStaIface> getSupplicantStaIface_1_3() { + return ISupplicantStaIface::castFrom(getSupplicantStaIface()); +} + sp<ISupplicantStaNetwork> createSupplicantStaNetwork_1_3() { return ISupplicantStaNetwork::castFrom(createSupplicantStaNetwork()); } diff --git a/wifi/supplicant/1.3/vts/functional/supplicant_hidl_test_utils_1_3.h b/wifi/supplicant/1.3/vts/functional/supplicant_hidl_test_utils_1_3.h index 8e64162d04..39dbb8fc96 100644 --- a/wifi/supplicant/1.3/vts/functional/supplicant_hidl_test_utils_1_3.h +++ b/wifi/supplicant/1.3/vts/functional/supplicant_hidl_test_utils_1_3.h @@ -17,8 +17,11 @@ #ifndef SUPPLICANT_HIDL_TEST_UTILS_1_3_H #define SUPPLICANT_HIDL_TEST_UTILS_1_3_H +#include <android/hardware/wifi/supplicant/1.3/ISupplicantStaIface.h> #include <android/hardware/wifi/supplicant/1.3/ISupplicantStaNetwork.h> +android::sp<android::hardware::wifi::supplicant::V1_3::ISupplicantStaIface> +getSupplicantStaIface_1_3(); android::sp<android::hardware::wifi::supplicant::V1_3::ISupplicantStaNetwork> createSupplicantStaNetwork_1_3(); diff --git a/wifi/supplicant/1.3/vts/functional/supplicant_sta_iface_hidl_test.cpp b/wifi/supplicant/1.3/vts/functional/supplicant_sta_iface_hidl_test.cpp new file mode 100644 index 0000000000..9b68a4708d --- /dev/null +++ b/wifi/supplicant/1.3/vts/functional/supplicant_sta_iface_hidl_test.cpp @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <VtsHalHidlTargetTestBase.h> +#include <android/hardware/wifi/supplicant/1.2/types.h> +#include <android/hardware/wifi/supplicant/1.3/ISupplicantStaIface.h> +#include <android/hardware/wifi/supplicant/1.3/ISupplicantStaIfaceCallback.h> +#include <android/hardware/wifi/supplicant/1.3/ISupplicantStaNetwork.h> +#include <android/hardware/wifi/supplicant/1.3/types.h> +#include <hidl/HidlSupport.h> +#include <hidl/Status.h> + +#include "supplicant_hidl_test_utils.h" +#include "supplicant_hidl_test_utils_1_3.h" + +using ::android::sp; +using ::android::hardware::hidl_array; +using ::android::hardware::hidl_string; +using ::android::hardware::hidl_vec; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::hardware::wifi::supplicant::V1_0::SupplicantStatus; +using ::android::hardware::wifi::supplicant::V1_0::SupplicantStatusCode; +using ::android::hardware::wifi::supplicant::V1_2::DppAkm; +using ::android::hardware::wifi::supplicant::V1_2::DppFailureCode; +using ::android::hardware::wifi::supplicant::V1_2::DppProgressCode; +using ::android::hardware::wifi::supplicant::V1_3::ISupplicantStaIface; +using ::android::hardware::wifi::supplicant::V1_3::ISupplicantStaIfaceCallback; +using ::android::hardware::wifi::supplicant::V1_3::ISupplicantStaNetwork; + +class SupplicantStaIfaceHidlTest : public ::testing::VtsHalHidlTargetTestBase { + public: + virtual void SetUp() override { + startSupplicantAndWaitForHidlService(); + EXPECT_TRUE(turnOnExcessiveLogging()); + sta_iface_ = getSupplicantStaIface_1_3(); + ASSERT_NE(sta_iface_.get(), nullptr); + } + + virtual void TearDown() override { stopSupplicant(); } + + int64_t pmkCacheExpirationTimeInSec; + std::vector<uint8_t> serializedPmkCacheEntry; + + protected: + // ISupplicantStaIface object used for all tests in this fixture. + sp<ISupplicantStaIface> sta_iface_; +}; + +class IfaceCallback : public ISupplicantStaIfaceCallback { + Return<void> onNetworkAdded(uint32_t /* id */) override { return Void(); } + Return<void> onNetworkRemoved(uint32_t /* id */) override { return Void(); } + Return<void> onStateChanged( + ISupplicantStaIfaceCallback::State /* newState */, + const hidl_array<uint8_t, 6>& /*bssid */, uint32_t /* id */, + const hidl_vec<uint8_t>& /* ssid */) override { + return Void(); + } + Return<void> onAnqpQueryDone( + const hidl_array<uint8_t, 6>& /* bssid */, + const ISupplicantStaIfaceCallback::AnqpData& /* data */, + const ISupplicantStaIfaceCallback::Hs20AnqpData& /* hs20Data */) + override { + return Void(); + } + virtual Return<void> onHs20IconQueryDone( + const hidl_array<uint8_t, 6>& /* bssid */, + const hidl_string& /* fileName */, + const hidl_vec<uint8_t>& /* data */) override { + return Void(); + } + virtual Return<void> onHs20SubscriptionRemediation( + const hidl_array<uint8_t, 6>& /* bssid */, + ISupplicantStaIfaceCallback::OsuMethod /* osuMethod */, + const hidl_string& /* url*/) override { + return Void(); + } + Return<void> onHs20DeauthImminentNotice( + const hidl_array<uint8_t, 6>& /* bssid */, uint32_t /* reasonCode */, + uint32_t /* reAuthDelayInSec */, + const hidl_string& /* url */) override { + return Void(); + } + Return<void> onDisconnected(const hidl_array<uint8_t, 6>& /* bssid */, + bool /* locallyGenerated */, + ISupplicantStaIfaceCallback::ReasonCode + /* reasonCode */) override { + return Void(); + } + Return<void> onAssociationRejected( + const hidl_array<uint8_t, 6>& /* bssid */, + ISupplicantStaIfaceCallback::StatusCode /* statusCode */, + bool /*timedOut */) override { + return Void(); + } + Return<void> onAuthenticationTimeout( + const hidl_array<uint8_t, 6>& /* bssid */) override { + return Void(); + } + Return<void> onBssidChanged( + ISupplicantStaIfaceCallback::BssidChangeReason /* reason */, + const hidl_array<uint8_t, 6>& /* bssid */) override { + return Void(); + } + Return<void> onEapFailure() override { return Void(); } + Return<void> onEapFailure_1_1( + ISupplicantStaIfaceCallback::EapErrorCode /* eapErrorCode */) override { + return Void(); + } + Return<void> onWpsEventSuccess() override { return Void(); } + Return<void> onWpsEventFail( + const hidl_array<uint8_t, 6>& /* bssid */, + ISupplicantStaIfaceCallback::WpsConfigError /* configError */, + ISupplicantStaIfaceCallback::WpsErrorIndication /* errorInd */) + override { + return Void(); + } + Return<void> onWpsEventPbcOverlap() override { return Void(); } + Return<void> onExtRadioWorkStart(uint32_t /* id */) override { + return Void(); + } + Return<void> onExtRadioWorkTimeout(uint32_t /* id*/) override { + return Void(); + } + Return<void> onDppSuccessConfigReceived( + const hidl_vec<uint8_t>& /* ssid */, const hidl_string& /* password */, + const hidl_array<uint8_t, 32>& /* psk */, + DppAkm /* securityAkm */) override { + return Void(); + } + Return<void> onDppSuccessConfigSent() override { return Void(); } + Return<void> onDppProgress(DppProgressCode /* code */) override { + return Void(); + } + Return<void> onDppFailure(DppFailureCode /* code */) override { + return Void(); + } + Return<void> onPmkCacheAdded( + int64_t /* expirationTimeInSec */, + const hidl_vec<uint8_t>& /* serializedEntry */) override { + return Void(); + } +}; + +class IfacePmkCacheCallback : public IfaceCallback { + SupplicantStaIfaceHidlTest& parent_; + Return<void> onPmkCacheAdded( + int64_t expirationTimeInSec, + const hidl_vec<uint8_t>& serializedEntry) override { + parent_.pmkCacheExpirationTimeInSec = expirationTimeInSec; + parent_.serializedPmkCacheEntry = serializedEntry; + return Void(); + } + + public: + IfacePmkCacheCallback(SupplicantStaIfaceHidlTest& parent) + : parent_(parent) {} +}; + +/* + * RegisterCallback_1_3 + */ +TEST_F(SupplicantStaIfaceHidlTest, RegisterCallback_1_3) { + sta_iface_->registerCallback_1_3( + new IfaceCallback(), [](const SupplicantStatus& status) { + EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code); + }); +} diff --git a/wifi/supplicant/1.3/vts/functional/supplicant_sta_network_hidl_test.cpp b/wifi/supplicant/1.3/vts/functional/supplicant_sta_network_hidl_test.cpp index e5be0ccfef..07bc9d8103 100644 --- a/wifi/supplicant/1.3/vts/functional/supplicant_sta_network_hidl_test.cpp +++ b/wifi/supplicant/1.3/vts/functional/supplicant_sta_network_hidl_test.cpp @@ -71,3 +71,16 @@ TEST_F(SupplicantStaNetworkHidlTest, SetGetOcsp) { EXPECT_EQ(testOcspType, ocspType); }); } + +/* + * SetPmkCacheEntry + */ +TEST_F(SupplicantStaNetworkHidlTest, SetPmkCache) { + uint8_t bytes[128] = {0}; + std::vector<uint8_t> serializedEntry(bytes, bytes + sizeof(bytes)); + + sta_network_->setPmkCache( + serializedEntry, [](const SupplicantStatus &status) { + EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code); + }); +} |