Merge "Clean up nlinterceptor dependencies" into main
diff --git a/OWNERS b/OWNERS
index 351212a..bed29cb 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,2 +1,3 @@
 etancohen@google.com
 arabawy@google.com
+kumachang@google.com
diff --git a/aidl/android/net/wifi/nl80211/IScanEvent.aidl b/aidl/android/net/wifi/nl80211/IScanEvent.aidl
index 3ee8195..0434f24 100644
--- a/aidl/android/net/wifi/nl80211/IScanEvent.aidl
+++ b/aidl/android/net/wifi/nl80211/IScanEvent.aidl
@@ -22,5 +22,8 @@
  */
 interface IScanEvent {
   oneway void OnScanResultReady();
+  // This callback is deprecated in Android 14.
+  // Newer wificond implementation should call OnScanRequestFailed().
   oneway void OnScanFailed();
+  oneway void OnScanRequestFailed(int errorCode);
 }
diff --git a/aidl/android/net/wifi/nl80211/IWifiScannerImpl.aidl b/aidl/android/net/wifi/nl80211/IWifiScannerImpl.aidl
index 02c714c..e619739 100644
--- a/aidl/android/net/wifi/nl80211/IWifiScannerImpl.aidl
+++ b/aidl/android/net/wifi/nl80211/IWifiScannerImpl.aidl
@@ -30,6 +30,20 @@
   const int SCAN_TYPE_LOW_SPAN = 0;
   const int SCAN_TYPE_LOW_POWER = 1;
   const int SCAN_TYPE_HIGH_ACCURACY = 2;
+
+  // Scan request status
+  // Request succeeded
+  const int SCAN_STATUS_SUCCESS = 0;
+  // All other standard error codes are mapped to this
+  const int SCAN_STATUS_FAILED_GENERIC = 1;
+  //Device or resource busy - Due to connection in progress, processing another scan request etc.
+  const int SCAN_STATUS_FAILED_BUSY = 2;
+  // Aborted - Due to another high priority operation like roaming, offload scan etc
+  const int SCAN_STATUS_FAILED_ABORT = 3;
+  // No such device - Due to wrong interface or interface doesn't exist
+  const int SCAN_STATUS_FAILED_NODEV = 4;
+  // Invalid argument - Due to wrong/unsupported argument passed in scan params
+  const int SCAN_STATUS_FAILED_INVALID_ARGS = 5;
   // Scan type used internally if the device does not support
   // the type specified in |SingleScanSettings.scan_type|.
   // Scan requests from framework with this type will be rejected.
@@ -46,8 +60,13 @@
   int getMaxSsidsPerScan();
 
   // Request a single scan using a SingleScanSettings parcelable object.
+  // This interface is deprecated from Android 14, newer wificond implementation should call
+  // scanRequest() which can return the scan request status.
   boolean scan(in SingleScanSettings scanSettings);
 
+  // Request a single scan using a SingleScanSettings parcelable object.
+  int scanRequest(in SingleScanSettings scanSettings);
+
   // Subscribe single scanning events.
   // Scanner assumes there is only one subscriber.
   // This call will replace any existing |handler|.
@@ -75,5 +94,5 @@
   // Abort ongoing scan.
   void abortScan();
 
-  // TODO(nywang) add more interfaces.
+  // add more interfaces.
 }
diff --git a/scanning/pno_settings.cpp b/scanning/pno_settings.cpp
index 6307ea7..222c4ea 100644
--- a/scanning/pno_settings.cpp
+++ b/scanning/pno_settings.cpp
@@ -27,14 +27,13 @@
 namespace wifi {
 namespace nl80211 {
 
-const uint32_t PnoSettings::kFastScanIterations = 3;
-const uint32_t PnoSettings::kSlowScanIntervalMultiplier = 3;
-
 status_t PnoSettings::writeToParcel(::android::Parcel* parcel) const {
   RETURN_IF_FAILED(parcel->writeInt64(interval_ms_));
   RETURN_IF_FAILED(parcel->writeInt32(min_2g_rssi_));
   RETURN_IF_FAILED(parcel->writeInt32(min_5g_rssi_));
   RETURN_IF_FAILED(parcel->writeInt32(min_6g_rssi_));
+  RETURN_IF_FAILED(parcel->writeUint32(scan_iterations_));
+  RETURN_IF_FAILED(parcel->writeUint32(scan_interval_multiplier_));
   RETURN_IF_FAILED(parcel->writeInt32(pno_networks_.size()));
   for (const auto& network : pno_networks_) {
     // For Java readTypedList():
@@ -50,6 +49,8 @@
   RETURN_IF_FAILED(parcel->readInt32(&min_2g_rssi_));
   RETURN_IF_FAILED(parcel->readInt32(&min_5g_rssi_));
   RETURN_IF_FAILED(parcel->readInt32(&min_6g_rssi_));
+  RETURN_IF_FAILED(parcel->readUint32(&scan_iterations_));
+  RETURN_IF_FAILED(parcel->readUint32(&scan_interval_multiplier_));
   int32_t num_pno_networks = 0;
   RETURN_IF_FAILED(parcel->readInt32(&num_pno_networks));
   for (int i = 0; i < num_pno_networks; i++) {
diff --git a/scanning/pno_settings.h b/scanning/pno_settings.h
index f0e0826..7ee7402 100644
--- a/scanning/pno_settings.h
+++ b/scanning/pno_settings.h
@@ -31,14 +31,14 @@
 
 class PnoSettings : public ::android::Parcelable {
  public:
-  static const uint32_t kFastScanIterations;
-  static const uint32_t kSlowScanIntervalMultiplier;
 
   PnoSettings()
       : interval_ms_(0),
         min_2g_rssi_(0),
         min_5g_rssi_(0),
-        min_6g_rssi_(0) {}
+        min_6g_rssi_(0),
+        scan_iterations_(0),
+        scan_interval_multiplier_(0) {}
   bool operator==(const PnoSettings& rhs) const {
     return (pno_networks_ == rhs.pno_networks_ &&
             min_2g_rssi_ == rhs.min_2g_rssi_ &&
@@ -52,6 +52,8 @@
   int32_t min_2g_rssi_;
   int32_t min_5g_rssi_;
   int32_t min_6g_rssi_;
+  uint32_t scan_iterations_;
+  uint32_t scan_interval_multiplier_;
   std::vector<PnoNetwork> pno_networks_;
 };
 
diff --git a/scanning/scan_utils.cpp b/scanning/scan_utils.cpp
index 6c2cb22..8c79b20 100644
--- a/scanning/scan_utils.cpp
+++ b/scanning/scan_utils.cpp
@@ -281,6 +281,7 @@
                      bool enable_6ghz_rnr,
                      const vector<vector<uint8_t>>& ssids,
                      const vector<uint32_t>& freqs,
+                     const vector<uint8_t>& vendor_ies,
                      int* error_code) {
   NL80211Packet trigger_scan(
       netlink_manager_->GetFamilyId(),
@@ -341,6 +342,12 @@
                               scan_flags));
     LOG(DEBUG) << "Triggering scan with scan_flag=" << scan_flags;
   }
+
+  if (!vendor_ies.empty()) {
+    NL80211Attr<vector<uint8_t>> vendor_ie_attr(NL80211_ATTR_IE, vendor_ies);
+    trigger_scan.AddAttribute(vendor_ie_attr);
+  }
+
   // We are receiving an ERROR/ACK message instead of the actual
   // scan results here, so it is OK to expect a timely response because
   // kernel is supposed to send the ERROR/ACK back before the scan starts.
diff --git a/scanning/scan_utils.h b/scanning/scan_utils.h
index 3ac7f4a..2d4cfe3 100644
--- a/scanning/scan_utils.h
+++ b/scanning/scan_utils.h
@@ -94,6 +94,7 @@
   // If |ssids| contains an empty string, it will a scan for all ssids.
   // - |freqs| is a vector of frequencies we request to scan.
   // If |freqs| is an empty vector, it will scan all supported frequencies.
+  // - |vendor_ies| is a vector of vendor ies we add it in probe req.
   // - |error_code| contains the errno kernel replied when this returns false.
   // Returns true on success.
   virtual bool Scan(uint32_t interface_index,
@@ -102,6 +103,7 @@
                     bool enable_6ghz_rnr,
                     const std::vector<std::vector<uint8_t>>& ssids,
                     const std::vector<uint32_t>& freqs,
+                    const std::vector<uint8_t>& vendor_ies,
                     int* error_code);
 
   // Send scan request to kernel for interface with index |interface_index|.
diff --git a/scanning/scanner_impl.cpp b/scanning/scanner_impl.cpp
index c7857df..e89fff4 100644
--- a/scanning/scanner_impl.cpp
+++ b/scanning/scanner_impl.cpp
@@ -57,6 +57,20 @@
   return {};
 }
 
+int convertStdErrNumToScanStatus(int errNum) {
+    switch(errNum) {
+    case EINVAL:
+      return IWifiScannerImpl::SCAN_STATUS_FAILED_INVALID_ARGS;
+    case EBUSY:
+      return IWifiScannerImpl::SCAN_STATUS_FAILED_BUSY;
+    case ENODEV:
+      return IWifiScannerImpl::SCAN_STATUS_FAILED_NODEV;
+    default:
+      return IWifiScannerImpl::SCAN_STATUS_FAILED_GENERIC;
+  }
+  return {};
+}
+
 constexpr const int kPercentNetworksWithFreq = 30;
 constexpr const int32_t kPnoScanDefaultFreqs2G[] = {2412, 2417, 2422, 2427, 2432, 2437, 2447, 2452,
     2457, 2462};
@@ -143,10 +157,10 @@
   return Status::ok();
 }
 
-Status ScannerImpl::scan(const SingleScanSettings& scan_settings,
-                         bool* out_success) {
+Status ScannerImpl::scanRequest(const SingleScanSettings& scan_settings,
+                         int* status) {
   if (!CheckIsValid()) {
-    *out_success = false;
+    *status = IWifiScannerImpl::SCAN_STATUS_FAILED_GENERIC;
     return Status::ok();
   }
 
@@ -190,19 +204,33 @@
 
   int error_code = 0;
   if (!scan_utils_->Scan(interface_index_, request_random_mac, scan_type,
-                         scan_settings.enable_6ghz_rnr_, ssids, freqs, &error_code)) {
+                         scan_settings.enable_6ghz_rnr_, ssids, freqs,
+                         scan_settings.vendor_ies_, &error_code)) {
     if (error_code == ENODEV) {
         nodev_counter_ ++;
         LOG(WARNING) << "Scan failed with error=nodev. counter=" << nodev_counter_;
     }
     CHECK(error_code != ENODEV || nodev_counter_ <= 3)
         << "Driver is in a bad state, restarting wificond";
-    *out_success = false;
+    *status = convertStdErrNumToScanStatus(error_code);
     return Status::ok();
   }
   nodev_counter_ = 0;
   scan_started_ = true;
-  *out_success = true;
+  *status = IWifiScannerImpl::SCAN_STATUS_SUCCESS;
+  return Status::ok();
+
+}
+Status ScannerImpl::scan(const SingleScanSettings& scan_settings,
+                         bool* out_success) {
+
+  int status = 0;
+  scanRequest(scan_settings, &status);
+  if (status == IWifiScannerImpl::SCAN_STATUS_SUCCESS) {
+    *out_success = true;
+  } else {
+    *out_success = false;
+  }
   return Status::ok();
 }
 
@@ -437,7 +465,7 @@
     // TODO: Pass other parameters back once we find framework needs them.
     if (aborted) {
       LOG(WARNING) << "Scan aborted";
-      scan_event_handler_->OnScanFailed();
+      scan_event_handler_->OnScanRequestFailed(IWifiScannerImpl::SCAN_STATUS_FAILED_ABORT);
     } else {
       scan_event_handler_->OnScanResultReady();
     }
@@ -471,18 +499,18 @@
   bool support_num_scan_plans = scan_capabilities_.max_num_scan_plans >= 2;
   bool support_scan_plan_interval =
       scan_capabilities_.max_scan_plan_interval * 1000 >=
-          pno_settings.interval_ms_ * PnoSettings::kSlowScanIntervalMultiplier;
+          pno_settings.interval_ms_ * pno_settings.scan_interval_multiplier_;
   bool support_scan_plan_iterations =
       scan_capabilities_.max_scan_plan_iterations >=
-                  PnoSettings::kFastScanIterations;
+                  pno_settings.scan_iterations_;
 
   uint32_t fast_scan_interval =
       static_cast<uint32_t>(pno_settings.interval_ms_);
   if (support_num_scan_plans && support_scan_plan_interval &&
       support_scan_plan_iterations) {
     return SchedScanIntervalSetting{
-        {{fast_scan_interval, PnoSettings::kFastScanIterations}},
-        fast_scan_interval * PnoSettings::kSlowScanIntervalMultiplier};
+        {{fast_scan_interval, pno_settings.scan_iterations_}},
+        fast_scan_interval * pno_settings.scan_interval_multiplier_};
   } else {
     // Device doesn't support the provided scan plans.
     // Specify single interval instead.
diff --git a/scanning/scanner_impl.h b/scanning/scanner_impl.h
index 449f454..2e34c01 100644
--- a/scanning/scanner_impl.h
+++ b/scanning/scanner_impl.h
@@ -55,6 +55,10 @@
       const android::net::wifi::nl80211::SingleScanSettings&
           scan_settings,
       bool* out_success) override;
+  ::android::binder::Status scanRequest(
+      const android::net::wifi::nl80211::SingleScanSettings&
+          scan_settings,
+      int* status) override;
   ::android::binder::Status startPnoScan(
       const android::net::wifi::nl80211::PnoSettings& pno_settings,
       bool* out_success) override;
diff --git a/scanning/single_scan_settings.cpp b/scanning/single_scan_settings.cpp
index 47809fb..28dad53 100644
--- a/scanning/single_scan_settings.cpp
+++ b/scanning/single_scan_settings.cpp
@@ -55,6 +55,7 @@
     RETURN_IF_FAILED(parcel->writeInt32(1));
     RETURN_IF_FAILED(network.writeToParcel(parcel));
   }
+  RETURN_IF_FAILED(parcel->writeByteVector(vendor_ies_));
   return ::android::OK;
 }
 
@@ -107,6 +108,7 @@
     RETURN_IF_FAILED(network.readFromParcel(parcel));
     hidden_networks_.push_back(network);
   }
+  RETURN_IF_FAILED(parcel->readByteVector(&vendor_ies_));
   return ::android::OK;
 }
 
diff --git a/scanning/single_scan_settings.h b/scanning/single_scan_settings.h
index a7d99dd..27bf774 100644
--- a/scanning/single_scan_settings.h
+++ b/scanning/single_scan_settings.h
@@ -36,7 +36,8 @@
   bool operator==(const SingleScanSettings& rhs) const {
     return (scan_type_ == rhs.scan_type_ &&
             channel_settings_ == rhs.channel_settings_ &&
-            hidden_networks_ == rhs.hidden_networks_);
+            hidden_networks_ == rhs.hidden_networks_ &&
+            vendor_ies_ == rhs.vendor_ies_);
   }
   ::android::status_t writeToParcel(::android::Parcel* parcel) const override;
   ::android::status_t readFromParcel(const ::android::Parcel* parcel) override;
@@ -45,6 +46,7 @@
   bool enable_6ghz_rnr_;
   std::vector<ChannelSettings> channel_settings_;
   std::vector<HiddenNetwork> hidden_networks_;
+  std::vector<uint8_t> vendor_ies_;
 
  private:
   bool isValidScanType() const;
diff --git a/tests/mock_scan_utils.h b/tests/mock_scan_utils.h
index 3f43bb2..1c6ccc3 100644
--- a/tests/mock_scan_utils.h
+++ b/tests/mock_scan_utils.h
@@ -41,13 +41,14 @@
       uint32_t interface_index,
       std::vector<android::net::wifi::nl80211::NativeScanResult>* out_scan_results));
 
-  MOCK_METHOD7(Scan, bool(
+  MOCK_METHOD8(Scan, bool(
       uint32_t interface_index,
       bool request_random_mac,
       int scan_type,
       bool enable_6ghz_rnr,
       const std::vector<std::vector<uint8_t>>& ssids,
       const std::vector<uint32_t>& freqs,
+      const std::vector<uint8_t>& vendor_ies,
       int* error_code));
 
   MOCK_METHOD10(StartScheduledScan, bool(
diff --git a/tests/scan_utils_unittest.cpp b/tests/scan_utils_unittest.cpp
index d2f3631..e2eb414 100644
--- a/tests/scan_utils_unittest.cpp
+++ b/tests/scan_utils_unittest.cpp
@@ -155,7 +155,7 @@
                   AppendMessageAndReturn, response, true, _1, _2)));
   int errno_ignored;
   EXPECT_TRUE(scan_utils_.Scan(kFakeInterfaceIndex, kFakeUseRandomMAC,
-                               kFakeScanType, false, {}, {}, &errno_ignored));
+                               kFakeScanType, false, {}, {}, {}, &errno_ignored));
   // TODO(b/34231420): Add validation of requested scan ssids, threshold,
   // and frequencies.
 }
@@ -175,7 +175,7 @@
   int errno_ignored;
   EXPECT_TRUE(scan_utils_.Scan(kFakeInterfaceIndex, true,
                                IWifiScannerImpl::SCAN_TYPE_DEFAULT,
-                               false, {}, {}, &errno_ignored));
+                               false, {}, {}, {}, &errno_ignored));
 }
 
 TEST_F(ScanUtilsTest, CanSendScanRequestForLowSpanScan) {
@@ -195,7 +195,7 @@
   int errno_ignored;
   EXPECT_TRUE(scan_utils_.Scan(kFakeInterfaceIndex, false,
                                IWifiScannerImpl::SCAN_TYPE_LOW_SPAN,
-                               true, {}, {}, &errno_ignored));
+                               true, {}, {}, {}, &errno_ignored));
 }
 
 TEST_F(ScanUtilsTest, CanSendScanRequestForLowPowerScan) {
@@ -213,7 +213,7 @@
   int errno_ignored;
   EXPECT_TRUE(scan_utils_.Scan(kFakeInterfaceIndex, false,
                                IWifiScannerImpl::SCAN_TYPE_LOW_POWER,
-                               false, {}, {}, &errno_ignored));
+                               false, {}, {}, {}, &errno_ignored));
 }
 
 TEST_F(ScanUtilsTest, CanSendScanRequestForHighAccuracyScan) {
@@ -231,7 +231,7 @@
   int errno_ignored;
   EXPECT_TRUE(scan_utils_.Scan(kFakeInterfaceIndex, false,
                                IWifiScannerImpl::SCAN_TYPE_HIGH_ACCURACY,
-                               false, {}, {}, &errno_ignored));
+                               false, {}, {}, {}, &errno_ignored));
 }
 
 TEST_F(ScanUtilsTest, CanSendScanRequestForHighAccuracyScanWithRandomAddr) {
@@ -251,7 +251,7 @@
   int errno_ignored;
   EXPECT_TRUE(scan_utils_.Scan(kFakeInterfaceIndex, true,
                                IWifiScannerImpl::SCAN_TYPE_HIGH_ACCURACY,
-                               false, {}, {}, &errno_ignored));
+                               false, {}, {}, {}, &errno_ignored));
 }
 
 TEST_F(ScanUtilsTest, CanHandleScanRequestFailure) {
@@ -264,7 +264,7 @@
                   AppendMessageAndReturn, response, true, _1, _2)));
   int error_code;
   EXPECT_FALSE(scan_utils_.Scan(kFakeInterfaceIndex, kFakeUseRandomMAC,
-                               kFakeScanType, false, {}, {}, &error_code));
+                               kFakeScanType, false, {}, {}, {}, &error_code));
   EXPECT_EQ(kFakeErrorCode, error_code);
 }
 
diff --git a/tests/scanner_unittest.cpp b/tests/scanner_unittest.cpp
index 869a21b..9ceff9f 100644
--- a/tests/scanner_unittest.cpp
+++ b/tests/scanner_unittest.cpp
@@ -51,6 +51,8 @@
 
 constexpr uint32_t kFakeInterfaceIndex = 12;
 constexpr uint32_t kFakeScanIntervalMs = 10000;
+constexpr uint32_t kFastScanIterations = 3;
+constexpr uint32_t kSlowScanIntervalMultiplier = 3;
 vector<uint32_t> kDefaultFrequencies = {2412, 2417, 2422, 2427, 2432, 2437, 2447, 2452, 2457,
                                         2462, 5180, 5200, 5220, 5240, 5745, 5765, 5785, 5805};
 
@@ -67,6 +69,7 @@
     bool enable_6ghz_rnr,
     const std::vector<std::vector<uint8_t>>& ssids_ignored,
     const std::vector<uint32_t>& freqs_ignored,
+    const std::vector<uint8_t>& vendor_ies,
     int* error_code) {
   *error_code = mock_error_code;
   // Returing false because this helper function is used for failure case.
@@ -121,7 +124,7 @@
 
 TEST_F(ScannerTest, TestSingleScan) {
   EXPECT_CALL(scan_utils_,
-              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_DEFAULT, false, _, _, _)).
+              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_DEFAULT, false, _, _, _, _)).
       WillOnce(Return(true));
   bool success = false;
   scanner_impl_.reset(new ScannerImpl(kFakeInterfaceIndex,
@@ -134,7 +137,7 @@
 
 TEST_F(ScannerTest, TestSingleScanForLowSpanScan) {
   EXPECT_CALL(scan_utils_,
-              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_LOW_SPAN, true, _, _, _)).
+              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_LOW_SPAN, true, _, _, _, _)).
       WillOnce(Return(true));
   wiphy_features_.supports_low_span_oneshot_scan = true;
   ScannerImpl scanner_impl(kFakeInterfaceIndex, scan_capabilities_,
@@ -150,7 +153,7 @@
 
 TEST_F(ScannerTest, TestSingleScanForLowPowerScan) {
   EXPECT_CALL(scan_utils_,
-              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_LOW_POWER, _, _, _, _)).
+              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_LOW_POWER, _, _, _, _, _)).
       WillOnce(Return(true));
   wiphy_features_.supports_low_power_oneshot_scan = true;
   ScannerImpl scanner_impl(kFakeInterfaceIndex, scan_capabilities_,
@@ -165,7 +168,7 @@
 
 TEST_F(ScannerTest, TestSingleScanForHighAccuracyScan) {
   EXPECT_CALL(scan_utils_,
-              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_HIGH_ACCURACY, _, _, _, _)).
+              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_HIGH_ACCURACY, _, _, _, _, _)).
       WillOnce(Return(true));
   wiphy_features_.supports_high_accuracy_oneshot_scan = true;
   ScannerImpl scanner_impl(kFakeInterfaceIndex, scan_capabilities_,
@@ -180,7 +183,7 @@
 
 TEST_F(ScannerTest, TestSingleScanForLowSpanScanWithNoWiphySupport) {
   EXPECT_CALL(scan_utils_,
-              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_DEFAULT, _, _, _, _)).
+              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_DEFAULT, _, _, _, _, _)).
       WillOnce(Return(true));
   ScannerImpl scanner_impl(kFakeInterfaceIndex, scan_capabilities_,
                            wiphy_features_, &client_interface_impl_,
@@ -194,7 +197,7 @@
 
 TEST_F(ScannerTest, TestSingleScanForLowPowerScanWithNoWiphySupport) {
   EXPECT_CALL(scan_utils_,
-              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_DEFAULT, _, _, _, _)).
+              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_DEFAULT, _, _, _, _, _)).
       WillOnce(Return(true));
   ScannerImpl scanner_impl(kFakeInterfaceIndex, scan_capabilities_,
                            wiphy_features_, &client_interface_impl_,
@@ -208,7 +211,7 @@
 
 TEST_F(ScannerTest, TestSingleScanForHighAccuracyScanWithNoWiphySupport) {
   EXPECT_CALL(scan_utils_,
-              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_DEFAULT, _, _, _, _)).
+              Scan(_, _, IWifiScannerImpl::SCAN_TYPE_DEFAULT, _, _, _, _, _)).
       WillOnce(Return(true));
   ScannerImpl scanner_impl(kFakeInterfaceIndex, scan_capabilities_,
                            wiphy_features_, &client_interface_impl_,
@@ -227,10 +230,10 @@
                                       &scan_utils_));
   EXPECT_CALL(
       scan_utils_,
-      Scan(_, _, _, _, _, _, _)).
+      Scan(_, _, _, _, _, _, _, _)).
           WillOnce(Invoke(bind(
               ReturnErrorCodeForScanRequest, EBUSY,
-              _1, _2, _3, _4, _5, _6, _7)));
+              _1, _2, _3, _4, _5, _6, _7, _8)));
 
   bool success = false;
   EXPECT_TRUE(scanner_impl_->scan(SingleScanSettings(), &success).isOk());
@@ -244,10 +247,10 @@
                                       &scan_utils_));
   ON_CALL(
       scan_utils_,
-      Scan(_, _, _, _, _, _, _)).
+      Scan(_, _, _, _, _, _, _, _)).
           WillByDefault(Invoke(bind(
               ReturnErrorCodeForScanRequest, ENODEV,
-              _1, _2, _3, _4, _5, _6, _7)));
+              _1, _2, _3, _4, _5, _6, _7, _8)));
 
   bool single_scan_failure;
   EXPECT_TRUE(scanner_impl_->scan(SingleScanSettings(), &single_scan_failure).isOk());
@@ -266,7 +269,7 @@
                                       scan_capabilities_, wiphy_features_,
                                       &client_interface_impl_,
                                       &scan_utils_));
-  EXPECT_CALL(scan_utils_, Scan(_, _, _, _, _, _, _)).WillOnce(Return(true));
+  EXPECT_CALL(scan_utils_, Scan(_, _, _, _, _, _, _, _)).WillOnce(Return(true));
   EXPECT_TRUE(
       scanner_impl_->scan(SingleScanSettings(), &single_scan_success).isOk());
   EXPECT_TRUE(single_scan_success);
@@ -345,8 +348,8 @@
       0 /* max_match_sets */,
       // Parameters above are not related to this test.
       2 /* 1 plan for finite repeated scan and 1 plan for ininfite scan loop */,
-      kFakeScanIntervalMs * PnoSettings::kSlowScanIntervalMultiplier / 1000,
-      PnoSettings::kFastScanIterations);
+      kFakeScanIntervalMs * kSlowScanIntervalMultiplier / 1000,
+      kFastScanIterations);
   ScannerImpl scanner(
       kFakeInterfaceIndex,
       scan_capabilities_scan_plan_supported, wiphy_features_,
@@ -355,6 +358,8 @@
 
   PnoSettings pno_settings;
   pno_settings.interval_ms_ = kFakeScanIntervalMs;
+  pno_settings.scan_iterations_ = kFastScanIterations;
+  pno_settings.scan_interval_multiplier_ = kSlowScanIntervalMultiplier;
 
   SchedScanIntervalSetting interval_setting;
   EXPECT_CALL(
@@ -368,7 +373,7 @@
   EXPECT_TRUE(scanner.startPnoScan(pno_settings, &success_ignored).isOk());
   /* 1 plan for finite repeated scan */
   EXPECT_EQ(1U, interval_setting.plans.size());
-  EXPECT_EQ(kFakeScanIntervalMs * PnoSettings::kSlowScanIntervalMultiplier,
+  EXPECT_EQ(kFakeScanIntervalMs * kSlowScanIntervalMultiplier,
             interval_setting.final_interval_ms);
 }
 
@@ -388,6 +393,8 @@
       &scan_utils_);
   PnoSettings pno_settings;
   pno_settings.interval_ms_ = kFakeScanIntervalMs;
+  pno_settings.scan_iterations_ = kFastScanIterations;
+  pno_settings.scan_interval_multiplier_ = kSlowScanIntervalMultiplier;
 
   SchedScanIntervalSetting interval_setting;
   EXPECT_CALL(
@@ -426,8 +433,8 @@
       1 /* max_num_sched_scan_ssids */,
       1 /* max_match_sets */,
       0,
-      kFakeScanIntervalMs * PnoSettings::kSlowScanIntervalMultiplier / 1000,
-      PnoSettings::kFastScanIterations);
+      kFakeScanIntervalMs * kSlowScanIntervalMultiplier / 1000,
+      kFastScanIterations);
   ScannerImpl scanner_impl(kFakeInterfaceIndex, scan_capabilities_test_frequencies,
                            wiphy_features_, &client_interface_impl_,
                            &scan_utils_);
@@ -457,8 +464,8 @@
       1 /* max_num_sched_scan_ssids */,
       2 /* max_match_sets */,
       0,
-      kFakeScanIntervalMs * PnoSettings::kSlowScanIntervalMultiplier / 1000,
-      PnoSettings::kFastScanIterations);
+      kFakeScanIntervalMs * kSlowScanIntervalMultiplier / 1000,
+      kFastScanIterations);
   ScannerImpl scanner_impl(kFakeInterfaceIndex, scan_capabilities_test_frequencies,
                            wiphy_features_, &client_interface_impl_,
                            &scan_utils_);
@@ -496,8 +503,8 @@
       1 /* max_num_sched_scan_ssids */,
       2 /* max_match_sets */,
       0,
-      kFakeScanIntervalMs * PnoSettings::kSlowScanIntervalMultiplier / 1000,
-      PnoSettings::kFastScanIterations);
+      kFakeScanIntervalMs * kSlowScanIntervalMultiplier / 1000,
+      kFastScanIterations);
   ScannerImpl scanner_impl(kFakeInterfaceIndex, scan_capabilities_test_frequencies,
                            wiphy_features_, &client_interface_impl_,
                            &scan_utils_);
@@ -539,8 +546,8 @@
       1 /* max_num_sched_scan_ssids */,
       2 /* max_match_sets */,
       0,
-      kFakeScanIntervalMs * PnoSettings::kSlowScanIntervalMultiplier / 1000,
-      PnoSettings::kFastScanIterations);
+      kFakeScanIntervalMs * kSlowScanIntervalMultiplier / 1000,
+      kFastScanIterations);
   ScannerImpl scanner_impl(kFakeInterfaceIndex, scan_capabilities_test_frequencies,
                            wiphy_features_, &client_interface_impl_,
                            &scan_utils_);
diff --git a/wifi_keystore_hal_connector.cpp b/wifi_keystore_hal_connector.cpp
index 271e444..4884f77 100644
--- a/wifi_keystore_hal_connector.cpp
+++ b/wifi_keystore_hal_connector.cpp
@@ -43,7 +43,9 @@
   configureRpcThreadpool(1, false /* callerWillJoin */);
   android::sp<IKeystore> wifiKeystoreHalService = new Keystore();
   android::status_t err = wifiKeystoreHalService->registerAsService();
-  CHECK(err == android::OK) << "Cannot register wifi keystore HAL service: " << err;
+  if (err != android::OK) {
+      LOG(INFO) << "Did not register wifi keystore HIDL HAL service: " << err;
+  }
 }
 }  // namespace wificond
 }  // namespace android