Merge "wifi: Fix single AP iface isn't deleted" into tm-dev am: 3adf36824f
am: 3d39f8aa85
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/interfaces/+/17652548 Change-Id: Ic01b23ac7fa073336e12806267fd569833549a02 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
cbdf2660dd
2 changed files with 20 additions and 14 deletions
|
@ -1003,14 +1003,14 @@ std::pair<WifiStatus, sp<V1_5::IWifiApIface>> WifiChip::createBridgedApIfaceInte
|
|||
br_ifaces_ap_instances_[br_ifname] = ap_instances;
|
||||
if (!iface_util_->createBridge(br_ifname)) {
|
||||
LOG(ERROR) << "Failed createBridge - br_name=" << br_ifname.c_str();
|
||||
invalidateAndClearBridgedAp(br_ifname);
|
||||
deleteApIface(br_ifname);
|
||||
return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}};
|
||||
}
|
||||
for (auto const& instance : ap_instances) {
|
||||
// Bind ap instance interface to AP bridge
|
||||
if (!iface_util_->addIfaceToBridge(br_ifname, instance)) {
|
||||
LOG(ERROR) << "Failed add if to Bridge - if_name=" << instance.c_str();
|
||||
invalidateAndClearBridgedAp(br_ifname);
|
||||
deleteApIface(br_ifname);
|
||||
return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}};
|
||||
}
|
||||
}
|
||||
|
@ -1044,8 +1044,7 @@ WifiStatus WifiChip::removeApIfaceInternal(const std::string& ifname) {
|
|||
// nan/rtt objects over AP iface. But, there is no harm to do it
|
||||
// here and not make that assumption all over the place.
|
||||
invalidateAndRemoveDependencies(ifname);
|
||||
// Clear the bridge interface and the iface instance.
|
||||
invalidateAndClearBridgedAp(ifname);
|
||||
deleteApIface(ifname);
|
||||
invalidateAndClear(ap_ifaces_, iface);
|
||||
for (const auto& callback : event_cb_handler_.getCallbacks()) {
|
||||
if (!callback->onIfaceRemoved(IfaceType::AP, ifname).isOk()) {
|
||||
|
@ -2005,21 +2004,28 @@ void WifiChip::invalidateAndClearBridgedApAll() {
|
|||
br_ifaces_ap_instances_.clear();
|
||||
}
|
||||
|
||||
void WifiChip::invalidateAndClearBridgedAp(const std::string& br_name) {
|
||||
if (br_name.empty()) return;
|
||||
// delete managed interfaces
|
||||
void WifiChip::deleteApIface(const std::string& if_name) {
|
||||
if (if_name.empty()) return;
|
||||
// delete bridged interfaces if have
|
||||
for (auto const& it : br_ifaces_ap_instances_) {
|
||||
if (it.first == br_name) {
|
||||
if (it.first == if_name) {
|
||||
for (auto const& iface : it.second) {
|
||||
iface_util_->removeIfaceFromBridge(br_name, iface);
|
||||
iface_util_->removeIfaceFromBridge(if_name, iface);
|
||||
legacy_hal_.lock()->deleteVirtualInterface(iface);
|
||||
}
|
||||
iface_util_->deleteBridge(br_name);
|
||||
br_ifaces_ap_instances_.erase(br_name);
|
||||
break;
|
||||
iface_util_->deleteBridge(if_name);
|
||||
br_ifaces_ap_instances_.erase(if_name);
|
||||
// ifname is bridged AP, return here.
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
||||
// No bridged AP case, delete AP iface
|
||||
legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->deleteVirtualInterface(if_name);
|
||||
if (legacy_status != legacy_hal::WIFI_SUCCESS) {
|
||||
LOG(ERROR) << "Failed to remove interface: " << if_name << " "
|
||||
<< legacyErrorToString(legacy_status);
|
||||
}
|
||||
}
|
||||
|
||||
bool WifiChip::findUsingNameFromBridgedApInstances(const std::string& name) {
|
||||
|
|
|
@ -272,7 +272,7 @@ class WifiChip : public V1_6::IWifiChip {
|
|||
bool writeRingbufferFilesInternal();
|
||||
std::string getWlanIfaceNameWithType(IfaceType type, unsigned idx);
|
||||
void invalidateAndClearBridgedApAll();
|
||||
void invalidateAndClearBridgedAp(const std::string& br_name);
|
||||
void deleteApIface(const std::string& if_name);
|
||||
bool findUsingNameFromBridgedApInstances(const std::string& name);
|
||||
WifiStatus triggerSubsystemRestartInternal();
|
||||
std::pair<WifiStatus, sp<V1_6::IWifiRttController>> createRttControllerInternal_1_6(
|
||||
|
|
Loading…
Reference in a new issue