summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wifi/1.3/default/wifi_chip.cpp1
-rw-r--r--wifi/1.3/default/wifi_iface_util.cpp22
-rw-r--r--wifi/1.3/default/wifi_iface_util.h8
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