diff options
Diffstat (limited to 'wifi/1.5/default/wifi_iface_util.cpp')
-rw-r--r-- | wifi/1.5/default/wifi_iface_util.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/wifi/1.5/default/wifi_iface_util.cpp b/wifi/1.5/default/wifi_iface_util.cpp index 7bf830b875..0977026698 100644 --- a/wifi/1.5/default/wifi_iface_util.cpp +++ b/wifi/1.5/default/wifi_iface_util.cpp @@ -56,14 +56,21 @@ std::array<uint8_t, 6> WifiIfaceUtil::getFactoryMacAddress( bool WifiIfaceUtil::setMacAddress(const std::string& iface_name, const std::array<uint8_t, 6>& mac) { #ifndef WIFI_AVOID_IFACE_RESET_MAC_CHANGE - if (!iface_tool_.lock()->SetUpState(iface_name.c_str(), false)) { + legacy_hal::wifi_error legacy_status; + uint64_t legacy_feature_set; + std::tie(legacy_status, legacy_feature_set) = + legacy_hal_.lock()->getSupportedFeatureSet(iface_name); + + if (!(legacy_feature_set & WIFI_FEATURE_DYNAMIC_SET_MAC) && + !iface_tool_.lock()->SetUpState(iface_name.c_str(), false)) { LOG(ERROR) << "SetUpState(false) failed."; return false; } #endif bool success = iface_tool_.lock()->SetMacAddress(iface_name.c_str(), mac); #ifndef WIFI_AVOID_IFACE_RESET_MAC_CHANGE - if (!iface_tool_.lock()->SetUpState(iface_name.c_str(), true)) { + if (!(legacy_feature_set & WIFI_FEATURE_DYNAMIC_SET_MAC) && + !iface_tool_.lock()->SetUpState(iface_name.c_str(), true)) { LOG(ERROR) << "SetUpState(true) failed. Wait for driver ready."; // Wait for driver ready and try to set iface UP again if (legacy_hal_.lock()->waitForDriverReady() != |