summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaisuke Niwa2017-04-06 05:02:15 -0500
committerNingyuan Wang2017-04-27 12:34:55 -0500
commit33bbb8147436c2abf8f3e7b535b13b6c63bd3c64 (patch)
treeef92a5a6570618fffd7eed237632f0ced58a047b /scanning
parent6b9d3875d970c62f841fc25a97340b56be2a210b (diff)
downloadsystem-connectivity-wificond-33bbb8147436c2abf8f3e7b535b13b6c63bd3c64.tar.gz
system-connectivity-wificond-33bbb8147436c2abf8f3e7b535b13b6c63bd3c64.tar.xz
system-connectivity-wificond-33bbb8147436c2abf8f3e7b535b13b6c63bd3c64.zip
Support abortScan
Support to abortScan instead of "ABORT_SCAN" command of wpa_supplicant. When STA scan triggered by wificond is ongoing, abortScan sends NL80211_CMD_ABORT_SCAN to kernel to stop it. Bug: 37227357 BUg: 37743832 Test: Manual test Change-Id: I542088e7711bd7e32a22685397af8e7f3a8ccdf7
Diffstat (limited to 'scanning')
-rw-r--r--scanning/scan_utils.cpp19
-rw-r--r--scanning/scan_utils.h4
-rw-r--r--scanning/scanner_impl.cpp14
-rw-r--r--scanning/scanner_impl.h1
4 files changed, 38 insertions, 0 deletions
diff --git a/scanning/scan_utils.cpp b/scanning/scan_utils.cpp
index 40a4355..2a521f0 100644
--- a/scanning/scan_utils.cpp
+++ b/scanning/scan_utils.cpp
@@ -303,6 +303,25 @@ bool ScanUtils::StopScheduledScan(uint32_t interface_index) {
303 return true; 303 return true;
304} 304}
305 305
306bool ScanUtils::AbortScan(uint32_t interface_index) {
307 NL80211Packet abort_scan(
308 netlink_manager_->GetFamilyId(),
309 NL80211_CMD_ABORT_SCAN,
310 netlink_manager_->GetSequenceNumber(),
311 getpid());
312
313 // Force an ACK response upon success.
314 abort_scan.AddFlag(NLM_F_ACK);
315 abort_scan.AddAttribute(
316 NL80211Attr<uint32_t>(NL80211_ATTR_IFINDEX, interface_index));
317
318 if (!netlink_manager_->SendMessageAndGetAck(abort_scan)) {
319 LOG(ERROR) << "NL80211_CMD_ABORT_SCAN failed";
320 return false;
321 }
322 return true;
323}
324
306bool ScanUtils::StartScheduledScan( 325bool ScanUtils::StartScheduledScan(
307 uint32_t interface_index, 326 uint32_t interface_index,
308 uint32_t interval_ms, 327 uint32_t interval_ms,
diff --git a/scanning/scan_utils.h b/scanning/scan_utils.h
index 72398b6..84baeec 100644
--- a/scanning/scan_utils.h
+++ b/scanning/scan_utils.h
@@ -106,6 +106,10 @@ class ScanUtils {
106 // Returns false on error or when there is no scheduled scan running. 106 // Returns false on error or when there is no scheduled scan running.
107 virtual bool StopScheduledScan(uint32_t interface_index); 107 virtual bool StopScheduledScan(uint32_t interface_index);
108 108
109 // Abort ongoing single scan on interface with index |interface_index|.
110 // Returns true on success.
111 virtual bool AbortScan(uint32_t interface_index);
112
109 // Sign up to be notified when new scan results are available. 113 // Sign up to be notified when new scan results are available.
110 // |handler| will be called when the kernel signals to wificond that a scan 114 // |handler| will be called when the kernel signals to wificond that a scan
111 // has been completed on the given |interface_index|. See the declaration of 115 // has been completed on the given |interface_index|. See the declaration of
diff --git a/scanning/scanner_impl.cpp b/scanning/scanner_impl.cpp
index fe8a554..9edd876 100644
--- a/scanning/scanner_impl.cpp
+++ b/scanning/scanner_impl.cpp
@@ -282,6 +282,20 @@ Status ScannerImpl::stopPnoScan(bool* out_success) {
282 return Status::ok(); 282 return Status::ok();
283} 283}
284 284
285Status ScannerImpl::abortScan(bool* out_success) {
286 *out_success = false;
287 if (!CheckIsValid()) {
288 return Status::ok();
289 }
290
291 if (!scan_started_) {
292 LOG(WARNING) << "Scan is not started. Ignore abort request";
293 } else if (scan_utils_->AbortScan(interface_index_)) {
294 *out_success = true;
295 }
296 return Status::ok();
297}
298
285Status ScannerImpl::subscribeScanEvents(const sp<IScanEvent>& handler) { 299Status ScannerImpl::subscribeScanEvents(const sp<IScanEvent>& handler) {
286 if (!CheckIsValid()) { 300 if (!CheckIsValid()) {
287 return Status::ok(); 301 return Status::ok();
diff --git a/scanning/scanner_impl.h b/scanning/scanner_impl.h
index d7f8728..2ca5251 100644
--- a/scanning/scanner_impl.h
+++ b/scanning/scanner_impl.h
@@ -62,6 +62,7 @@ class ScannerImpl : public android::net::wifi::BnWifiScannerImpl {
62 const ::com::android::server::wifi::wificond::PnoSettings& pno_settings, 62 const ::com::android::server::wifi::wificond::PnoSettings& pno_settings,
63 bool* out_success) override; 63 bool* out_success) override;
64 ::android::binder::Status stopPnoScan(bool* out_success) override; 64 ::android::binder::Status stopPnoScan(bool* out_success) override;
65 ::android::binder::Status abortScan(bool* out_success) override;
65 66
66 ::android::binder::Status subscribeScanEvents( 67 ::android::binder::Status subscribeScanEvents(
67 const ::android::sp<::android::net::wifi::IScanEvent>& handler) override; 68 const ::android::sp<::android::net::wifi::IScanEvent>& handler) override;