Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ee519be authored by Ahmed ElArabawy's avatar Ahmed ElArabawy
Browse files

Wifi: Optionally avoid interface down/up when doing setMacAddress

Some vendors implementation will reset wifi chip when doing interface
down.
Accordingly, We need to avoid the interface down/up when doing
setMacAddress to avoid loss of sync between framework and firmware.

This commit uses a BOARD_WIFI_AVOID_IFACE_RESET_MAC_CHANGE macro to
check if it is needed to avoid interface down/up at setMacAddress.

Bug: 153771961
Test: VTS Test
Test: atest VtsHalWifiV1_2TargetTest
Change-Id: I971764f1c272ebfd245959974fa0d1b10ba7c39b
parent 7a21c532
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -36,6 +36,9 @@ endif
ifdef WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION
LOCAL_CPPFLAGS += -DWIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION
endif
ifdef WIFI_AVOID_IFACE_RESET_MAC_CHANGE
LOCAL_CPPFLAGS += -DWIFI_AVOID_IFACE_RESET_MAC_CHANGE
endif
# Allow implicit fallthroughs in wifi_legacy_hal.cpp until they are fixed.
LOCAL_CFLAGS += -Wno-error=implicit-fallthrough
LOCAL_SRC_FILES := \
+4 −0
Original line number Diff line number Diff line
@@ -52,18 +52,22 @@ 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)) {
        LOG(ERROR) << "SetUpState(false) failed.";
        return false;
    }
#endif
    if (!iface_tool_.lock()->SetMacAddress(iface_name.c_str(), mac)) {
        LOG(ERROR) << "SetMacAddress failed.";
        return false;
    }
#ifndef WIFI_AVOID_IFACE_RESET_MAC_CHANGE
    if (!iface_tool_.lock()->SetUpState(iface_name.c_str(), true)) {
        LOG(ERROR) << "SetUpState(true) failed.";
        return false;
    }
#endif
    IfaceEventHandlers event_handlers = {};
    const auto it = event_handlers_map_.find(iface_name);
    if (it != event_handlers_map_.end()) {