wifi: check if there exists any non mld hostapd_iface
MLO Sap will use same interface name but different link id.
Ignore mld_ap for MLO case if there exists any non mld hostapd_iface
Bug: 340821197
Test: Start MLO SAP from UI.
Change-Id: Ibb12899915c6ee507666b1edf4a103225cbe1d3a
diff --git a/hostapd/aidl/hostapd.cpp b/hostapd/aidl/hostapd.cpp
index eac2191..412919c 100644
--- a/hostapd/aidl/hostapd.cpp
+++ b/hostapd/aidl/hostapd.cpp
@@ -1314,13 +1314,26 @@
iface_params.name.c_str());
return createStatus(HostapdStatusCode::FAILURE_IFACE_EXISTS);
}
- }
- if (hostapd_get_iface(interfaces_,
- iface_params.usesMlo ? br_name.c_str() : iface_params.name.c_str())) {
- wpa_printf(
- MSG_ERROR, "Instance interface %s already present",
- iface_params.usesMlo ? br_name.c_str() : iface_params.name.c_str());
- return createStatus(HostapdStatusCode::FAILURE_IFACE_EXISTS);
+#ifdef CONFIG_IEEE80211BE
+ // The MLO AP uses the same interface name for all links. Thus, make sure the
+ // interface name wasn't used for non-mld AP only when adding a new interface.
+ // Also it is valid to have a hostapd_data with the same interface name when adding
+ // the second link instance.
+ struct hostapd_data* hapd = hostapd_get_iface(interfaces_, br_name.c_str());
+ if (hapd && !hapd->conf->mld_ap) {
+ wpa_printf(
+ MSG_ERROR, "Instance interface %s already present",
+ br_name.c_str());
+ return createStatus(HostapdStatusCode::FAILURE_IFACE_EXISTS);
+ }
+#endif
+ } else {
+ if (hostapd_get_iface(interfaces_, iface_params.name.c_str())) {
+ wpa_printf(
+ MSG_ERROR, "Instance interface %s already present",
+ iface_params.name.c_str());
+ return createStatus(HostapdStatusCode::FAILURE_IFACE_EXISTS);
+ }
}
const auto conf_params = CreateHostapdConfig(iface_params, channelParams, nw_params,
br_name, owe_transition_ifname);