Snap for 11479893 from be8a9382b6ac8748e68b7d1b53bb19f1aeb4be9e to 24Q2-release

Change-Id: I3d9f329ab6b7b64d650740cc589f3ff5081f2716
diff --git a/wifi/aidl/vts/functional/wifi_aidl_test_utils.cpp b/wifi/aidl/vts/functional/wifi_aidl_test_utils.cpp
index 986e3a8..21d50ac 100644
--- a/wifi/aidl/vts/functional/wifi_aidl_test_utils.cpp
+++ b/wifi/aidl/vts/functional/wifi_aidl_test_utils.cpp
@@ -62,6 +62,23 @@
     int mode_id;
     return configureChipToSupportConcurrencyTypeInternal(wifi_chip, type, &mode_id);
 }
+
+OuiKeyedData generateOuiKeyedData(int oui) {
+    PersistableBundle bundle;
+    bundle.putString("stringKey", "stringValue");
+    bundle.putInt("intKey", 12345);
+
+    OuiKeyedData data;
+    data.oui = oui;
+    data.vendorData = bundle;
+    return data;
+}
+
+// Wraps generateOuiKeyedData result in std::optional
+std::optional<OuiKeyedData> generateOuiKeyedDataOptional(int oui) {
+    return std::optional<OuiKeyedData>{generateOuiKeyedData(oui)};
+}
+
 }  // namespace
 
 bool checkStatusCode(ndk::ScopedAStatus* status, WifiStatusCode expected_code) {
@@ -238,3 +255,20 @@
 bool isAidlServiceAvailable(const char* instance_name) {
     return AServiceManager_isDeclared(instance_name);
 }
+
+std::vector<OuiKeyedData> generateOuiKeyedDataList(int size) {
+    std::vector<OuiKeyedData> dataList;
+    for (int i = 0; i < size; i++) {
+        dataList.push_back(generateOuiKeyedData(i + 1));
+    }
+    return dataList;
+}
+
+// Generate OuiKeyedData list fully wrapped in std::optional
+std::optional<std::vector<std::optional<OuiKeyedData>>> generateOuiKeyedDataListOptional(int size) {
+    std::vector<std::optional<OuiKeyedData>> dataList;
+    for (int i = 0; i < size; i++) {
+        dataList.push_back(generateOuiKeyedDataOptional(i + 1));
+    }
+    return std::optional<std::vector<std::optional<OuiKeyedData>>>{dataList};
+}
diff --git a/wifi/aidl/vts/functional/wifi_aidl_test_utils.h b/wifi/aidl/vts/functional/wifi_aidl_test_utils.h
index 921d689..1369dd4 100644
--- a/wifi/aidl/vts/functional/wifi_aidl_test_utils.h
+++ b/wifi/aidl/vts/functional/wifi_aidl_test_utils.h
@@ -21,6 +21,7 @@
 #include <aidl/android/hardware/wifi/IWifi.h>
 #include <aidl/android/hardware/wifi/IWifiChip.h>
 #include <android/binder_manager.h>
+#include <android/persistable_bundle_aidl.h>
 #include <wifi_system/interface_tool.h>
 
 using aidl::android::hardware::wifi::IfaceConcurrencyType;
@@ -30,6 +31,8 @@
 using aidl::android::hardware::wifi::IWifiNanIface;
 using aidl::android::hardware::wifi::IWifiStaIface;
 using aidl::android::hardware::wifi::WifiStatusCode;
+using aidl::android::hardware::wifi::common::OuiKeyedData;
+using aidl::android::os::PersistableBundle;
 
 // Helper functions to obtain references to the various AIDL interface objects.
 std::shared_ptr<IWifi> getWifi(const char* instance_name);
@@ -50,3 +53,6 @@
 int32_t getChipFeatureSet(const std::shared_ptr<IWifiChip>& wifi_chip);
 bool checkStatusCode(ndk::ScopedAStatus* status, WifiStatusCode expected_code);
 bool isAidlServiceAvailable(const char* instance_name);
+// Generate test vendor data.
+std::vector<OuiKeyedData> generateOuiKeyedDataList(int size);
+std::optional<std::vector<std::optional<OuiKeyedData>>> generateOuiKeyedDataListOptional(int size);
diff --git a/wifi/aidl/vts/functional/wifi_nan_iface_aidl_test.cpp b/wifi/aidl/vts/functional/wifi_nan_iface_aidl_test.cpp
index 738e72c..bc169a4 100644
--- a/wifi/aidl/vts/functional/wifi_nan_iface_aidl_test.cpp
+++ b/wifi/aidl/vts/functional/wifi_nan_iface_aidl_test.cpp
@@ -22,6 +22,7 @@
 #include <aidl/android/hardware/wifi/BnWifi.h>
 #include <aidl/android/hardware/wifi/BnWifiNanIfaceEventCallback.h>
 #include <aidl/android/hardware/wifi/NanBandIndex.h>
+#include <android-base/logging.h>
 #include <android/binder_manager.h>
 #include <android/binder_status.h>
 #include <binder/IServiceManager.h>
@@ -60,6 +61,10 @@
 
 #define TIMEOUT_PERIOD 10
 
+namespace {
+const auto& kTestVendorDataOptional = generateOuiKeyedDataListOptional(5);
+}
+
 class WifiNanIfaceAidlTest : public testing::TestWithParam<std::string> {
   public:
     void SetUp() override {
@@ -72,6 +77,7 @@
         std::shared_ptr<WifiNanIfaceEventCallback> callback =
                 ndk::SharedRefBase::make<WifiNanIfaceEventCallback>(*this);
         EXPECT_TRUE(wifi_nan_iface_->registerEventCallback(callback).isOk());
+        EXPECT_TRUE(wifi_nan_iface_->getInterfaceVersion(&interface_version_).isOk());
     }
 
     void TearDown() override { stopWifiService(getInstanceName()); }
@@ -401,6 +407,7 @@
 
   protected:
     std::shared_ptr<IWifiNanIface> wifi_nan_iface_;
+    int interface_version_;
     uint64_t callback_event_bitmap_;
     uint16_t id_;
     uint8_t session_id_;
@@ -640,6 +647,10 @@
     nanPublishRequest.autoAcceptDataPathRequests = false;
     nanPublishRequest.publishType = NanPublishType::UNSOLICITED;
     nanPublishRequest.txType = NanTxType::BROADCAST;
+    if (interface_version_ >= 2) {
+        LOG(INFO) << "Including vendor data in Publish request";
+        nanPublishRequest.vendorData = kTestVendorDataOptional;
+    }
 
     status = wifi_nan_iface_->startPublishRequest(inputCmdId + 1, nanPublishRequest);
     if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) {
diff --git a/wifi/aidl/vts/functional/wifi_rtt_controller_aidl_test.cpp b/wifi/aidl/vts/functional/wifi_rtt_controller_aidl_test.cpp
index 4aedc0e..9c6a29e 100644
--- a/wifi/aidl/vts/functional/wifi_rtt_controller_aidl_test.cpp
+++ b/wifi/aidl/vts/functional/wifi_rtt_controller_aidl_test.cpp
@@ -21,6 +21,7 @@
 #include <aidl/Vintf.h>
 #include <aidl/android/hardware/wifi/BnWifi.h>
 #include <aidl/android/hardware/wifi/BnWifiRttControllerEventCallback.h>
+#include <android-base/logging.h>
 #include <android/binder_manager.h>
 #include <android/binder_status.h>
 #include <binder/IServiceManager.h>
@@ -42,6 +43,10 @@
 using aidl::android::hardware::wifi::WifiChannelWidthInMhz;
 using aidl::android::hardware::wifi::WifiStatusCode;
 
+namespace {
+const auto& kTestVendorDataOptional = generateOuiKeyedDataListOptional(5);
+}
+
 class WifiRttControllerAidlTest : public testing::TestWithParam<std::string> {
   public:
     void SetUp() override {
@@ -50,6 +55,7 @@
         stopWifiService(getInstanceName());
         wifi_rtt_controller_ = getWifiRttController();
         ASSERT_NE(nullptr, wifi_rtt_controller_.get());
+        ASSERT_TRUE(wifi_rtt_controller_->getInterfaceVersion(&interface_version_).isOk());
 
         // Check RTT support before we run the test.
         RttCapabilities caps = {};
@@ -82,6 +88,7 @@
     }
 
     std::shared_ptr<IWifiRttController> wifi_rtt_controller_;
+    int interface_version_;
 
   private:
     const char* getInstanceName() { return GetParam().c_str(); }
@@ -226,6 +233,10 @@
     config.numRetriesPerRttFrame = 3;
     config.numRetriesPerFtmr = 3;
     config.burstDuration = 9;
+    if (interface_version_ >= 2) {
+        LOG(INFO) << "Including vendor data in Rtt Config";
+        config.vendorData = kTestVendorDataOptional;
+    }
 
     int cmdId = 55;
     std::vector<RttConfig> configs = {config};
diff --git a/wifi/hostapd/aidl/vts/functional/Android.bp b/wifi/hostapd/aidl/vts/functional/Android.bp
index 9fbbf4b..f614679 100644
--- a/wifi/hostapd/aidl/vts/functional/Android.bp
+++ b/wifi/hostapd/aidl/vts/functional/Android.bp
@@ -21,7 +21,7 @@
         "libvndksupport",
     ],
     static_libs: [
-        "android.hardware.wifi.hostapd-V1-ndk",
+        "android.hardware.wifi.hostapd-V2-ndk",
         "VtsHalWifiV1_0TargetTestUtil",
         "VtsHalWifiV1_5TargetTestUtil",
         "VtsHalWifiV1_6TargetTestUtil",
diff --git a/wifi/hostapd/aidl/vts/functional/VtsHalHostapdTargetTest.cpp b/wifi/hostapd/aidl/vts/functional/VtsHalHostapdTargetTest.cpp
index 137537d..590c58b 100644
--- a/wifi/hostapd/aidl/vts/functional/VtsHalHostapdTargetTest.cpp
+++ b/wifi/hostapd/aidl/vts/functional/VtsHalHostapdTargetTest.cpp
@@ -58,6 +58,7 @@
 const int kIfaceInvalidChannel = 567;
 const std::vector<uint8_t> kTestZeroMacAddr(6, 0x0);
 const Ieee80211ReasonCode kTestDisconnectReasonCode = Ieee80211ReasonCode::WLAN_REASON_UNSPECIFIED;
+const auto& kTestVendorDataOptional = generateOuiKeyedDataListOptional(5);
 
 inline BandMask operator|(BandMask a, BandMask b) {
     return static_cast<BandMask>(static_cast<int32_t>(a) |
@@ -74,6 +75,7 @@
         hostapd = getHostapd(GetParam());
         ASSERT_NE(hostapd, nullptr);
         EXPECT_TRUE(hostapd->setDebugParams(DebugLevel::EXCESSIVE).isOk());
+        EXPECT_TRUE(hostapd->getInterfaceVersion(&interface_version_).isOk());
 
         isAcsSupport = testing::checkSubstringInCommandOutput(
             "/system/bin/cmd wifi get-softap-supported-features",
@@ -98,6 +100,7 @@
     bool isAcsSupport;
     bool isWpa3SaeSupport;
     bool isBridgedSupport;
+    int interface_version_;
 
     IfaceParams getIfaceParamsWithoutAcs(std::string iface_name) {
         IfaceParams iface_params;
@@ -343,6 +346,22 @@
 }
 
 /**
+ * Adds an access point with Open network config & ACS disabled.
+ * IfaceParams will also include vendor data.
+ * Access point creation should pass.
+ */
+TEST_P(HostapdAidl, AddOpenAccessPointWithVendorData) {
+    if (interface_version_ < 2) {
+        GTEST_SKIP() << "Vendor data is available in IfaceParams as of Hostapd V2";
+    }
+    std::string ifname = setupApIfaceAndGetName(false);
+    IfaceParams params = getIfaceParamsWithoutAcs(ifname);
+    params.vendorData = kTestVendorDataOptional;
+    auto status = hostapd->addAccessPoint(params, getOpenNwParams());
+    EXPECT_TRUE(status.isOk());
+}
+
+/**
  * Adds an access point with SAE Transition network config & ACS disabled.
  * Access point creation should pass.
  */
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 82e3128..8f1c4bd 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
@@ -27,6 +27,7 @@
 #include <cutils/properties.h>
 
 #include "supplicant_test_utils.h"
+#include "wifi_aidl_test_utils.h"
 
 using aidl::android::hardware::wifi::supplicant::BnSupplicantP2pIfaceCallback;
 using aidl::android::hardware::wifi::supplicant::DebugLevel;
diff --git a/wifi/supplicant/aidl/vts/functional/supplicant_sta_iface_aidl_test.cpp b/wifi/supplicant/aidl/vts/functional/supplicant_sta_iface_aidl_test.cpp
index 5d00485..58f9be8 100644
--- a/wifi/supplicant/aidl/vts/functional/supplicant_sta_iface_aidl_test.cpp
+++ b/wifi/supplicant/aidl/vts/functional/supplicant_sta_iface_aidl_test.cpp
@@ -43,6 +43,10 @@
 using aidl::android::hardware::wifi::supplicant::ISupplicantStaIface;
 using aidl::android::hardware::wifi::supplicant::ISupplicantStaNetwork;
 using aidl::android::hardware::wifi::supplicant::KeyMgmtMask;
+using aidl::android::hardware::wifi::supplicant::MscsParams;
+using aidl::android::hardware::wifi::supplicant::QosCharacteristics;
+using aidl::android::hardware::wifi::supplicant::QosPolicyScsData;
+using aidl::android::hardware::wifi::supplicant::QosPolicyScsRequestStatus;
 using aidl::android::hardware::wifi::supplicant::WpaDriverCapabilitiesMask;
 using aidl::android::hardware::wifi::supplicant::WpsConfigMethods;
 using android::ProcessState;
@@ -252,6 +256,7 @@
                                          true,  // show timestamps
                                          true)
                         .isOk());
+        ASSERT_TRUE(supplicant_->getInterfaceVersion(&interface_version_).isOk());
         EXPECT_TRUE(supplicant_->getStaInterface(getStaIfaceName(), &sta_iface_)
                         .isOk());
         ASSERT_NE(sta_iface_, nullptr);
@@ -293,6 +298,7 @@
    protected:
     std::shared_ptr<ISupplicant> supplicant_;
     std::shared_ptr<ISupplicantStaIface> sta_iface_;
+    int interface_version_;
 
    private:
     // synchronization objects
@@ -788,6 +794,55 @@
     EXPECT_TRUE(sta_iface_->removeDppUri(peer_id).isOk());
 }
 
+/*
+ * Configure and Disable MSCS
+ */
+TEST_P(SupplicantStaIfaceAidlTest, ConfigureAndDisableMscs) {
+    if (interface_version_ < 3) {
+        GTEST_SKIP() << "MSCS configure/disable is available as of Supplicant V3";
+    }
+    MscsParams params;
+    params.upBitmap = 0;
+    params.upLimit = 7;
+    params.streamTimeoutUs = 1000;  // 1 ms
+    params.frameClassifierMask = 0;
+    EXPECT_TRUE(sta_iface_->configureMscs(params).isOk());
+    EXPECT_TRUE(sta_iface_->disableMscs().isOk());
+}
+
+/*
+ * Add and remove QoS policy with traffic characteristics
+ */
+TEST_P(SupplicantStaIfaceAidlTest, AddAndRemoveQosWithTrafficChars) {
+    if (interface_version_ < 3) {
+        GTEST_SKIP() << "QosCharacteristics is available as of Supplicant V3";
+    }
+
+    QosCharacteristics qosChars;
+    qosChars.minServiceIntervalUs = 2000;
+    qosChars.maxServiceIntervalUs = 5000;
+    qosChars.minDataRateKbps = 500;
+    qosChars.delayBoundUs = 200;
+    qosChars.optionalFieldMask = 0;  // no optional fields
+
+    uint8_t policyId = 5;
+    QosPolicyScsData qosPolicy;
+    qosPolicy.policyId = policyId;
+    qosPolicy.direction = QosPolicyScsData::LinkDirection::UPLINK;
+    qosPolicy.QosCharacteristics = qosChars;
+
+    std::vector<uint8_t> policyIdList{policyId};
+    std::vector<QosPolicyScsData> policyList{qosPolicy};
+    std::vector<QosPolicyScsRequestStatus> responseList;
+
+    // Check that we receive some reply for this request.
+    // Policy may not be accepted (ex. policy with this id already exists).
+    EXPECT_TRUE(sta_iface_->addQosPolicyRequestForScs(policyList, &responseList).isOk());
+    EXPECT_EQ(1, responseList.size());
+    EXPECT_TRUE(sta_iface_->removeQosPolicyForScs(policyIdList, &responseList).isOk());
+    EXPECT_EQ(1, responseList.size());
+}
+
 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(SupplicantStaIfaceAidlTest);
 INSTANTIATE_TEST_SUITE_P(Supplicant, SupplicantStaIfaceAidlTest,
                          testing::ValuesIn(android::getAidlHalInstanceNames(
diff --git a/wifi/supplicant/aidl/vts/functional/supplicant_sta_network_aidl_test.cpp b/wifi/supplicant/aidl/vts/functional/supplicant_sta_network_aidl_test.cpp
index a541f8f..9bdd2f5 100644
--- a/wifi/supplicant/aidl/vts/functional/supplicant_sta_network_aidl_test.cpp
+++ b/wifi/supplicant/aidl/vts/functional/supplicant_sta_network_aidl_test.cpp
@@ -27,6 +27,7 @@
 #include <cutils/properties.h>
 
 #include "supplicant_test_utils.h"
+#include "wifi_aidl_test_utils.h"
 
 using aidl::android::hardware::wifi::supplicant::AuthAlgMask;
 using aidl::android::hardware::wifi::supplicant::BnSupplicantStaNetworkCallback;
diff --git a/wifi/supplicant/aidl/vts/functional/supplicant_test_utils.h b/wifi/supplicant/aidl/vts/functional/supplicant_test_utils.h
index 51793fd..e39e2f4 100644
--- a/wifi/supplicant/aidl/vts/functional/supplicant_test_utils.h
+++ b/wifi/supplicant/aidl/vts/functional/supplicant_test_utils.h
@@ -16,18 +16,14 @@
 
 #pragma once
 
-#include <android/persistable_bundle_aidl.h>
-
 #include "supplicant_aidl_test_utils.h"
 #include "supplicant_legacy_test_utils.h"
 
-using aidl::android::hardware::wifi::common::OuiKeyedData;
 using aidl::android::hardware::wifi::supplicant::IfaceInfo;
 using aidl::android::hardware::wifi::supplicant::ISupplicant;
 using aidl::android::hardware::wifi::supplicant::ISupplicantP2pIface;
 using aidl::android::hardware::wifi::supplicant::ISupplicantStaIface;
 using aidl::android::hardware::wifi::supplicant::KeyMgmtMask;
-using aidl::android::os::PersistableBundle;
 
 std::string getStaIfaceName() {
     std::array<char, PROPERTY_VALUE_MAX> buffer;
@@ -101,36 +97,3 @@
     std::copy(vectorAddr.begin(), vectorAddr.begin() + 6, arrayAddr.begin());
     return arrayAddr;
 }
-
-OuiKeyedData generateOuiKeyedData(int oui) {
-    PersistableBundle bundle;
-    bundle.putString("stringKey", "stringValue");
-    bundle.putInt("intKey", 12345);
-
-    OuiKeyedData data;
-    data.oui = oui;
-    data.vendorData = bundle;
-    return data;
-}
-
-std::vector<OuiKeyedData> generateOuiKeyedDataList(int size) {
-    std::vector<OuiKeyedData> dataList;
-    for (int i = 0; i < size; i++) {
-        dataList.push_back(generateOuiKeyedData(i + 1));
-    }
-    return dataList;
-}
-
-// Wraps generateOuiKeyedData result in std::optional
-std::optional<OuiKeyedData> generateOuiKeyedDataOptional(int oui) {
-    return std::optional<OuiKeyedData>{generateOuiKeyedData(oui)};
-}
-
-// Generate OuiKeyedData list fully wrapped in std::optional
-std::optional<std::vector<std::optional<OuiKeyedData>>> generateOuiKeyedDataListOptional(int size) {
-    std::vector<std::optional<OuiKeyedData>> dataList;
-    for (int i = 0; i < size; i++) {
-        dataList.push_back(generateOuiKeyedDataOptional(i + 1));
-    }
-    return std::optional<std::vector<std::optional<OuiKeyedData>>>{dataList};
-}