Merge "WIFI: Set MAC address for bridged interface" into sc-dev
This commit is contained in:
commit
53bd75df19
3 changed files with 24 additions and 11 deletions
|
@ -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);
|
||||
|
@ -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_;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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…
Reference in a new issue