diff options
-rw-r--r-- | wifi/1.3/default/wifi_chip.cpp | 1 | ||||
-rw-r--r-- | wifi/1.3/default/wifi_iface_util.cpp | 22 | ||||
-rw-r--r-- | wifi/1.3/default/wifi_iface_util.h | 8 |
3 files changed, 25 insertions, 6 deletions
diff --git a/wifi/1.3/default/wifi_chip.cpp b/wifi/1.3/default/wifi_chip.cpp index da83800ea1..09c105f741 100644 --- a/wifi/1.3/default/wifi_chip.cpp +++ b/wifi/1.3/default/wifi_chip.cpp @@ -801,6 +801,7 @@ std::pair<WifiStatus, sp<IWifiApIface>> WifiChip::createApIfaceInternal() { } iface_created = true; } + iface_util_.lock()->setRandomMacAddressIndex(ap_ifaces_.size()); sp<WifiApIface> iface = new WifiApIface(ifname, legacy_hal_, iface_util_, feature_flags_); ap_ifaces_.push_back(iface); diff --git a/wifi/1.3/default/wifi_iface_util.cpp b/wifi/1.3/default/wifi_iface_util.cpp index 5d61271410..df5ab2a6fa 100644 --- a/wifi/1.3/default/wifi_iface_util.cpp +++ b/wifi/1.3/default/wifi_iface_util.cpp @@ -39,7 +39,10 @@ namespace V1_3 { namespace implementation { namespace iface_util { -WifiIfaceUtil::WifiIfaceUtil() : random_mac_address_(nullptr) {} +WifiIfaceUtil::WifiIfaceUtil() : random_mac_address_index_(0) { + for (int i=0; i < MAX_RANDOM_MAC_ADDR_INDEX; i++) + random_mac_address_[i] = nullptr; +} std::array<uint8_t, 6> WifiIfaceUtil::getFactoryMacAddress( const std::string& iface_name) { @@ -64,13 +67,22 @@ bool WifiIfaceUtil::setMacAddress(const std::string& iface_name, return true; } +void WifiIfaceUtil::setRandomMacAddressIndex(int idx) { + if (idx >= MAX_RANDOM_MAC_ADDR_INDEX) { + LOG(ERROR) << "Requested random mac address index crossed max limit!!"; + return; + } + + random_mac_address_index_ = idx; +} + std::array<uint8_t, 6> WifiIfaceUtil::getOrCreateRandomMacAddress() { - if (random_mac_address_) { - return *random_mac_address_.get(); + if (random_mac_address_[random_mac_address_index_]) { + return *random_mac_address_[random_mac_address_index_].get(); } - random_mac_address_ = + random_mac_address_[random_mac_address_index_] = std::make_unique<std::array<uint8_t, 6>>(createRandomMacAddress()); - return *random_mac_address_.get(); + return *random_mac_address_[random_mac_address_index_].get(); } std::array<uint8_t, 6> WifiIfaceUtil::createRandomMacAddress() { diff --git a/wifi/1.3/default/wifi_iface_util.h b/wifi/1.3/default/wifi_iface_util.h index b2382344ed..35677989eb 100644 --- a/wifi/1.3/default/wifi_iface_util.h +++ b/wifi/1.3/default/wifi_iface_util.h @@ -17,6 +17,8 @@ #ifndef WIFI_IFACE_UTIL_H_ #define WIFI_IFACE_UTIL_H_ +#define MAX_RANDOM_MAC_ADDR_INDEX 5 + #include <wifi_system/interface_tool.h> #include <android/hardware/wifi/1.0/IWifi.h> @@ -45,11 +47,15 @@ class WifiIfaceUtil { // daemon. (So, changes on every reboot) virtual std::array<uint8_t, 6> getOrCreateRandomMacAddress(); + virtual void setRandomMacAddressIndex(int idx); + private: std::array<uint8_t, 6> createRandomMacAddress(); wifi_system::InterfaceTool iface_tool_; - std::unique_ptr<std::array<uint8_t, 6>> random_mac_address_; + std::unique_ptr<std::array<uint8_t, 6>> random_mac_address_[MAX_RANDOM_MAC_ADDR_INDEX]; + + int random_mac_address_index_; }; } // namespace iface_util |