From a3c2d9dec385a231ec7f88bff00860b365a814b1 Mon Sep 17 00:00:00 2001 From: Ningyuan Wang Date: Tue, 20 Sep 2016 10:41:30 -0700 Subject: [PATCH] Add bool field |associated| to ScanResult class Once we have the knowledge if this BSS is associated or not, we can update our local cache of connection frequency. wificond can provide this cached frequency upon polling instead of sending a costly NL80211_CMD_GET_SURVEY message. Bug: 31595463 Test: compile, manual test Change-Id: Ic0188a82da4643e9a9c3c6751b5863b1797a732e --- scanning/scan_result.cpp | 7 +++++-- scanning/scan_result.h | 4 +++- scanning/scan_utils.cpp | 10 +++++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/scanning/scan_result.cpp b/scanning/scan_result.cpp index d9dc351..940308b 100644 --- a/scanning/scan_result.cpp +++ b/scanning/scan_result.cpp @@ -33,14 +33,16 @@ ScanResult::ScanResult(std::vector& ssid_, uint32_t frequency_, int32_t signal_mbm_, uint64_t tsf_, - uint16_t capability_) + uint16_t capability_, + bool associated_) : ssid(ssid_), bssid(bssid_), info_element(info_element_), frequency(frequency_), signal_mbm(signal_mbm_), tsf(tsf_), - capability(capability_) { + capability(capability_), + associated(associated_) { } void ScanResult::DebugLog() { @@ -64,6 +66,7 @@ void ScanResult::DebugLog() { LOG(INFO) << "SIGNAL: " << signal_mbm/100 << "dBm"; LOG(INFO) << "TSF: " << tsf; LOG(INFO) << "CAPABILITY: " << capability; + LOG(INFO) << "ASSOCIATED: " << associated; } diff --git a/scanning/scan_result.h b/scanning/scan_result.h index bd8d396..082e397 100644 --- a/scanning/scan_result.h +++ b/scanning/scan_result.h @@ -32,7 +32,8 @@ class ScanResult { uint32_t frequency, int32_t signal_mbm, uint64_t tsf, - uint16_t capability); + uint16_t capability, + bool associated); void DebugLog(); // SSID of the BSS. @@ -67,6 +68,7 @@ class ScanResult { // Bit 14 - Delayed Block Ack // Bit 15 - Immediate Block Ack uint16_t capability; + uint32_t associated; }; } // namespace wificond diff --git a/scanning/scan_utils.cpp b/scanning/scan_utils.cpp index c6da9d0..4bbd23f 100644 --- a/scanning/scan_utils.cpp +++ b/scanning/scan_utils.cpp @@ -154,8 +154,16 @@ bool ScanUtils::ParseScanResult(unique_ptr packet, ScanResu LOG(ERROR) << "Failed to get capability field from scan result packet"; return false; } + bool associated = false; + uint32_t bss_status; + if (bss.GetAttributeValue(NL80211_BSS_STATUS, &bss_status) && + (bss_status == NL80211_BSS_STATUS_AUTHENTICATED || + bss_status == NL80211_BSS_STATUS_ASSOCIATED)) { + associated = true; + } - *scan_result = ScanResult(ssid, bssid, ie, freq, signal, tsf, capability); + *scan_result = + ScanResult(ssid, bssid, ie, freq, signal, tsf, capability, associated); } return true; } -- 2.11.0