Loading wifi/1.5/default/wifi_ap_iface.cpp +20 −7 Original line number Diff line number Diff line Loading @@ -136,24 +136,25 @@ WifiApIface::getValidFrequenciesForBandInternal(V1_0::WifiBand band) { WifiStatus WifiApIface::setMacAddressInternal( const std::array<uint8_t, 6>& mac) { bool status; // Support random MAC up to 2 interfaces if (instances_.size() == 2) { int rbyte = 1; for (auto const& intf : instances_) { std::array<uint8_t, 6> rmac = mac; // reverse the bits to avoid clision // reverse the bits to avoid collision rmac[rbyte] = 0xff - rmac[rbyte]; status = iface_util_.lock()->setMacAddress(intf, rmac); if (!status) { if (!iface_util_.lock()->setMacAddress(intf, rmac)) { LOG(INFO) << "Failed to set random mac address on " << intf; return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); } rbyte++; } } else { status = iface_util_.lock()->setMacAddress(ifname_, mac); } if (!status) { // It also needs to set mac address for bridged interface, otherwise the mac // address of bridged interface will be changed after one of instance // down. if (!iface_util_.lock()->setMacAddress(ifname_, mac)) { LOG(ERROR) << "Fail to config MAC for interface " << ifname_; return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); } return createWifiStatus(WifiStatusCode::SUCCESS); Loading Loading @@ -181,6 +182,18 @@ WifiStatus WifiApIface::resetToFactoryMacAddressInternal() { return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); } } // It needs to set mac address for bridged interface, otherwise the mac // address of the bridged interface will be changed after one of the // instance down. Thus we are generating a random MAC address for the // bridged interface even if we got the request to reset the Factory // MAC. Since the bridged interface is an internal interface for the // operation of bpf and others networking operation. if (!iface_util_.lock()->setMacAddress( ifname_, iface_util_.lock()->createRandomMacAddress())) { LOG(ERROR) << "Fail to config MAC for bridged interface " << ifname_; return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); } } else { getMacResult = getFactoryMacAddressInternal(ifname_); LOG(DEBUG) << "Reset MAC to factory MAC on " << ifname_; Loading wifi/1.5/default/wifi_iface_util.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -86,9 +86,9 @@ bool WifiIfaceUtil::setMacAddress(const std::string& iface_name, event_handlers.on_state_toggle_off_on(iface_name); } if (!success) { LOG(ERROR) << "SetMacAddress failed."; LOG(ERROR) << "SetMacAddress failed on " << iface_name; } else { LOG(DEBUG) << "SetMacAddress succeeded."; LOG(DEBUG) << "SetMacAddress succeeded on " << iface_name; } return success; } Loading wifi/1.5/default/wifi_iface_util.h +2 −2 Original line number Diff line number Diff line Loading @@ -71,10 +71,10 @@ class WifiIfaceUtil { virtual bool removeIfaceFromBridge(const std::string& br_name, const std::string& if_name); // Get a random MAC address. virtual std::array<uint8_t, 6> createRandomMacAddress(); private: std::array<uint8_t, 6> createRandomMacAddress(); std::weak_ptr<wifi_system::InterfaceTool> iface_tool_; std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; std::unique_ptr<std::array<uint8_t, 6>> random_mac_address_; Loading Loading
wifi/1.5/default/wifi_ap_iface.cpp +20 −7 Original line number Diff line number Diff line Loading @@ -136,24 +136,25 @@ WifiApIface::getValidFrequenciesForBandInternal(V1_0::WifiBand band) { WifiStatus WifiApIface::setMacAddressInternal( const std::array<uint8_t, 6>& mac) { bool status; // Support random MAC up to 2 interfaces if (instances_.size() == 2) { int rbyte = 1; for (auto const& intf : instances_) { std::array<uint8_t, 6> rmac = mac; // reverse the bits to avoid clision // reverse the bits to avoid collision rmac[rbyte] = 0xff - rmac[rbyte]; status = iface_util_.lock()->setMacAddress(intf, rmac); if (!status) { if (!iface_util_.lock()->setMacAddress(intf, rmac)) { LOG(INFO) << "Failed to set random mac address on " << intf; return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); } rbyte++; } } else { status = iface_util_.lock()->setMacAddress(ifname_, mac); } if (!status) { // It also needs to set mac address for bridged interface, otherwise the mac // address of bridged interface will be changed after one of instance // down. if (!iface_util_.lock()->setMacAddress(ifname_, mac)) { LOG(ERROR) << "Fail to config MAC for interface " << ifname_; return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); } return createWifiStatus(WifiStatusCode::SUCCESS); Loading Loading @@ -181,6 +182,18 @@ WifiStatus WifiApIface::resetToFactoryMacAddressInternal() { return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); } } // It needs to set mac address for bridged interface, otherwise the mac // address of the bridged interface will be changed after one of the // instance down. Thus we are generating a random MAC address for the // bridged interface even if we got the request to reset the Factory // MAC. Since the bridged interface is an internal interface for the // operation of bpf and others networking operation. if (!iface_util_.lock()->setMacAddress( ifname_, iface_util_.lock()->createRandomMacAddress())) { LOG(ERROR) << "Fail to config MAC for bridged interface " << ifname_; return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); } } else { getMacResult = getFactoryMacAddressInternal(ifname_); LOG(DEBUG) << "Reset MAC to factory MAC on " << ifname_; Loading
wifi/1.5/default/wifi_iface_util.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -86,9 +86,9 @@ bool WifiIfaceUtil::setMacAddress(const std::string& iface_name, event_handlers.on_state_toggle_off_on(iface_name); } if (!success) { LOG(ERROR) << "SetMacAddress failed."; LOG(ERROR) << "SetMacAddress failed on " << iface_name; } else { LOG(DEBUG) << "SetMacAddress succeeded."; LOG(DEBUG) << "SetMacAddress succeeded on " << iface_name; } return success; } Loading
wifi/1.5/default/wifi_iface_util.h +2 −2 Original line number Diff line number Diff line Loading @@ -71,10 +71,10 @@ class WifiIfaceUtil { virtual bool removeIfaceFromBridge(const std::string& br_name, const std::string& if_name); // Get a random MAC address. virtual std::array<uint8_t, 6> createRandomMacAddress(); private: std::array<uint8_t, 6> createRandomMacAddress(); std::weak_ptr<wifi_system::InterfaceTool> iface_tool_; std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; std::unique_ptr<std::array<uint8_t, 6>> random_mac_address_; Loading