From db87e8d0b68bd2c3df89551133d1e0cb1b1ce3c3 Mon Sep 17 00:00:00 2001 From: Sunil Ravi Date: Wed, 25 Sep 2024 21:15:06 +0000 Subject: [PATCH] wifi: Support for P2P Compatibility Mode This CL includes, 1. Added API to get the features supported by P2P interface. 2. Added Authentication Key management protocol field in Group started event and Peer client joined event. This is to get the security type of Group. Bug: 341971059 Test: Manual - Basic P2P connect/disconnect tests Test: TH Presubmit tests Test: atest VtsHalWifiSupplicantStaIfaceTargetTest \ VtsHalWifiSupplicantStaNetworkTargetTest \ VtsHalWifiSupplicantP2pIfaceTargetTest Change-Id: I4f06db96e602485b85b6002ce2745ebfc5e44f2d --- .../wifi/supplicant/ISupplicantP2pIface.aidl | 3 +++ .../P2pGroupStartedEventParams.aidl | 1 + .../P2pPeerClientJoinedEventParams.aidl | 1 + .../wifi/supplicant/ISupplicantP2pIface.aidl | 19 +++++++++++++++++++ .../P2pGroupStartedEventParams.aidl | 6 ++++++ .../P2pPeerClientJoinedEventParams.aidl | 6 ++++++ .../supplicant_p2p_iface_aidl_test.cpp | 11 +++++++++++ 7 files changed, 47 insertions(+) diff --git a/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/ISupplicantP2pIface.aidl b/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/ISupplicantP2pIface.aidl index 0b068e001f..0462fd34ba 100644 --- a/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/ISupplicantP2pIface.aidl +++ b/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/ISupplicantP2pIface.aidl @@ -123,4 +123,7 @@ interface ISupplicantP2pIface { void configureExtListenWithParams(in android.hardware.wifi.supplicant.P2pExtListenInfo extListenInfo); void addGroupWithConfigurationParams(in android.hardware.wifi.supplicant.P2pAddGroupConfigurationParams groupConfigurationParams); void createGroupOwner(in android.hardware.wifi.supplicant.P2pCreateGroupOwnerInfo groupOwnerInfo); + long getFeatureSet(); + const long P2P_FEATURE_V2 = (1 << 0) /* 1 */; + const long P2P_FEATURE_PCC_MODE_WPA3_COMPATIBILITY = (1 << 1) /* 2 */; } diff --git a/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/P2pGroupStartedEventParams.aidl b/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/P2pGroupStartedEventParams.aidl index e19ae4460d..227626c9d1 100644 --- a/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/P2pGroupStartedEventParams.aidl +++ b/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/P2pGroupStartedEventParams.aidl @@ -46,4 +46,5 @@ parcelable P2pGroupStartedEventParams { boolean isP2pClientEapolIpAddressInfoPresent; android.hardware.wifi.supplicant.P2pClientEapolIpAddressInfo p2pClientIpInfo; @nullable android.hardware.wifi.common.OuiKeyedData[] vendorData; + int keyMgmtMask; } diff --git a/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/P2pPeerClientJoinedEventParams.aidl b/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/P2pPeerClientJoinedEventParams.aidl index 40c8ff6d8a..578176a40a 100644 --- a/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/P2pPeerClientJoinedEventParams.aidl +++ b/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/P2pPeerClientJoinedEventParams.aidl @@ -39,4 +39,5 @@ parcelable P2pPeerClientJoinedEventParams { byte[6] clientDeviceAddress; int clientIpAddress; @nullable android.hardware.wifi.common.OuiKeyedData[] vendorData; + int keyMgmtMask; } diff --git a/wifi/supplicant/aidl/android/hardware/wifi/supplicant/ISupplicantP2pIface.aidl b/wifi/supplicant/aidl/android/hardware/wifi/supplicant/ISupplicantP2pIface.aidl index 12307935ac..6a9406a561 100644 --- a/wifi/supplicant/aidl/android/hardware/wifi/supplicant/ISupplicantP2pIface.aidl +++ b/wifi/supplicant/aidl/android/hardware/wifi/supplicant/ISupplicantP2pIface.aidl @@ -38,6 +38,15 @@ import android.hardware.wifi.supplicant.WpsProvisionMethod; */ @VintfStability interface ISupplicantP2pIface { + /** + * P2P features exposed by wpa_supplicant/chip. + */ + /* Support for P2P2 (Wi-Fi Alliance P2P v2.0) */ + const long P2P_FEATURE_V2 = 1 << 0; + + /* Support for WPA3 Compatibility Mode in PCC Mode */ + const long P2P_FEATURE_PCC_MODE_WPA3_COMPATIBILITY = 1 << 1; + /** * This command can be used to add a bonjour service. * @@ -938,4 +947,14 @@ interface ISupplicantP2pIface { * |SupplicantStatusCode.FAILURE_IFACE_INVALID| */ void createGroupOwner(in P2pCreateGroupOwnerInfo groupOwnerInfo); + + /** + * Get the features supported by P2P interface. + * + * @return The bitmask of ISupplicantP2pIface.P2P_FEATURE_* values. + * + * @throws ServiceSpecificException with one of the following values: + * |SupplicantStatusCode.FAILURE_UNKNOWN| + */ + long getFeatureSet(); } diff --git a/wifi/supplicant/aidl/android/hardware/wifi/supplicant/P2pGroupStartedEventParams.aidl b/wifi/supplicant/aidl/android/hardware/wifi/supplicant/P2pGroupStartedEventParams.aidl index 9db7a1eeda..55e2b2393c 100644 --- a/wifi/supplicant/aidl/android/hardware/wifi/supplicant/P2pGroupStartedEventParams.aidl +++ b/wifi/supplicant/aidl/android/hardware/wifi/supplicant/P2pGroupStartedEventParams.aidl @@ -70,4 +70,10 @@ parcelable P2pGroupStartedEventParams { * that no vendor data is provided. */ @nullable OuiKeyedData[] vendorData; + + /** + * Authentication key management protocol used to secure the group. + * This is a bitmask of |KeyMgmtMask| values. + */ + int keyMgmtMask; } diff --git a/wifi/supplicant/aidl/android/hardware/wifi/supplicant/P2pPeerClientJoinedEventParams.aidl b/wifi/supplicant/aidl/android/hardware/wifi/supplicant/P2pPeerClientJoinedEventParams.aidl index 4f46d705a0..2b04461c0b 100644 --- a/wifi/supplicant/aidl/android/hardware/wifi/supplicant/P2pPeerClientJoinedEventParams.aidl +++ b/wifi/supplicant/aidl/android/hardware/wifi/supplicant/P2pPeerClientJoinedEventParams.aidl @@ -47,4 +47,10 @@ parcelable P2pPeerClientJoinedEventParams { * that no vendor data is provided. */ @nullable OuiKeyedData[] vendorData; + + /** + * Authentication key management protocol used in connection. + * This is a bitmask of |KeyMgmtMask| values. + */ + int keyMgmtMask; } diff --git a/wifi/supplicant/aidl/vts/functional/supplicant_p2p_iface_aidl_test.cpp b/wifi/supplicant/aidl/vts/functional/supplicant_p2p_iface_aidl_test.cpp index 8f1c4bdee5..a8132aa52c 100644 --- a/wifi/supplicant/aidl/vts/functional/supplicant_p2p_iface_aidl_test.cpp +++ b/wifi/supplicant/aidl/vts/functional/supplicant_p2p_iface_aidl_test.cpp @@ -814,6 +814,17 @@ TEST_P(SupplicantP2pIfaceAidlTest, SetVendorElements) { LOG(INFO) << "SupplicantP2pIfaceAidlTest::SetVendorElements end"; } +/* + * getFeatureSet + */ +TEST_P(SupplicantP2pIfaceAidlTest, getFeatureSet) { + if (interface_version_ < 4) { + GTEST_SKIP() << "getFeatureSet is available as of Supplicant V4"; + } + int64_t featureSet; + EXPECT_TRUE(p2p_iface_->getFeatureSet(&featureSet).isOk()); +} + GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(SupplicantP2pIfaceAidlTest); INSTANTIATE_TEST_SUITE_P(Supplicant, SupplicantP2pIfaceAidlTest, testing::ValuesIn(android::getAidlHalInstanceNames(