From 8574e7fd8bea515f23c0f3127016e4b8b687925d Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Mon, 1 Apr 2019 13:30:40 -0700 Subject: wifi(implementation): Set prop with the first active iface This is updated whenever a new STA or AP iface is created & removed. Also, when the chip is configured. This property can be read by the rest of the system (including vendor specific HAL instances) to retrieve the active iface name. Bug: 129506593 Test: ./data/android.hardware.wifi@1.0-service-tests Test: Manually verified the property name after wifi on/off & softap on/off. Change-Id: Ic1c21fd3a1c6894c797070bf889f705e4cba6dd1 --- wifi/1.3/default/wifi_chip.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'wifi') diff --git a/wifi/1.3/default/wifi_chip.cpp b/wifi/1.3/default/wifi_chip.cpp index 957b22b4a..25eb28983 100644 --- a/wifi/1.3/default/wifi_chip.cpp +++ b/wifi/1.3/default/wifi_chip.cpp @@ -41,7 +41,9 @@ constexpr size_t kMaxBufferSizeBytes = 1024 * 1024 * 3; constexpr uint32_t kMaxRingBufferFileAgeSeconds = 60 * 60 * 10; constexpr uint32_t kMaxRingBufferFileNum = 20; constexpr char kTombstoneFolderPath[] = "/data/vendor/tombstones/wifi/"; -constexpr unsigned kMaxWlanIfaces = 100; +constexpr char kActiveWlanIfaceNameProperty[] = "wifi.active.interface"; +constexpr char kNoActiveWlanIfaceNamePropertyValue[] = ""; +constexpr unsigned kMaxWlanIfaces = 5; template void invalidateAndClear(std::vector>& ifaces, sp iface) { @@ -105,6 +107,13 @@ std::string getP2pIfaceName() { return buffer.data(); } +void setActiveWlanIfaceNameProperty(const std::string& ifname) { + auto res = property_set(kActiveWlanIfaceNameProperty, ifname.data()); + if (res != 0) { + PLOG(ERROR) << "Failed to set active wlan iface name property"; + } +} + // delete files that meet either conditions: // 1. older than a predefined time in the wifi tombstone dir. // 2. Files in excess to a predefined amount, starting from the oldest ones @@ -316,13 +325,16 @@ WifiChip::WifiChip( is_valid_(true), current_mode_id_(feature_flags::chip_mode_ids::kInvalid), modes_(feature_flags.lock()->getChipModes()), - debug_ring_buffer_cb_registered_(false) {} + debug_ring_buffer_cb_registered_(false) { + setActiveWlanIfaceNameProperty(kNoActiveWlanIfaceNamePropertyValue); +} void WifiChip::invalidate() { if (!writeRingbufferFilesInternal()) { LOG(ERROR) << "Error writing files to flash"; } invalidateAndRemoveAllIfaces(); + setActiveWlanIfaceNameProperty(kNoActiveWlanIfaceNamePropertyValue); legacy_hal_.reset(); event_cb_handler_.invalidate(); is_valid_ = false; @@ -693,6 +705,7 @@ WifiStatus WifiChip::configureChipInternal( } current_mode_id_ = mode_id; LOG(INFO) << "Configured chip in mode " << mode_id; + setActiveWlanIfaceNameProperty(getFirstActiveWlanIfaceName()); return status; } @@ -780,6 +793,7 @@ std::pair> WifiChip::createApIfaceInternal() { LOG(ERROR) << "Failed to invoke onIfaceAdded callback"; } } + setActiveWlanIfaceNameProperty(getFirstActiveWlanIfaceName()); return {createWifiStatus(WifiStatusCode::SUCCESS), iface}; } @@ -811,6 +825,7 @@ WifiStatus WifiChip::removeApIfaceInternal(const std::string& ifname) { LOG(ERROR) << "Failed to invoke onIfaceRemoved callback"; } } + setActiveWlanIfaceNameProperty(getFirstActiveWlanIfaceName()); return createWifiStatus(WifiStatusCode::SUCCESS); } @@ -919,6 +934,7 @@ std::pair> WifiChip::createStaIfaceInternal() { LOG(ERROR) << "Failed to invoke onIfaceAdded callback"; } } + setActiveWlanIfaceNameProperty(getFirstActiveWlanIfaceName()); return {createWifiStatus(WifiStatusCode::SUCCESS), iface}; } @@ -950,6 +966,7 @@ WifiStatus WifiChip::removeStaIfaceInternal(const std::string& ifname) { LOG(ERROR) << "Failed to invoke onIfaceRemoved callback"; } } + setActiveWlanIfaceNameProperty(getFirstActiveWlanIfaceName()); return createWifiStatus(WifiStatusCode::SUCCESS); } -- cgit v1.2.3