diff --git a/src/wifi/model/eht/emlsr-manager.cc b/src/wifi/model/eht/emlsr-manager.cc index 8d4462b6b..d633e6b77 100644 --- a/src/wifi/model/eht/emlsr-manager.cc +++ b/src/wifi/model/eht/emlsr-manager.cc @@ -220,9 +220,7 @@ EmlsrManager::SendEmlOperatingModeNotification() if (auto setupLinkIt = setupLinkIds.find(*emlsrLinkIt); setupLinkIt != setupLinkIds.cend()) { setupLinkIds.erase(setupLinkIt); - auto apLinkId = m_staMac->GetApLinkId(*emlsrLinkIt); - NS_ASSERT(apLinkId); - frame.SetLinkIdInBitmap(*apLinkId); + frame.SetLinkIdInBitmap(*emlsrLinkIt); emlsrLinkIt++; } else diff --git a/src/wifi/model/sta-wifi-mac.cc b/src/wifi/model/sta-wifi-mac.cc index 99bb5f131..6c3535821 100644 --- a/src/wifi/model/sta-wifi-mac.cc +++ b/src/wifi/model/sta-wifi-mac.cc @@ -425,7 +425,7 @@ StaWifiMac::GetMultiLinkElement(bool isReassoc, uint8_t linkId) const { const auto& staLink = GetStaLink(link); - if (index != linkId && staLink.apLinkId.has_value()) + if (index != linkId && staLink.bssid.has_value()) { multiLinkElement.AddPerStaProfileSubelement(); auto& perStaProfile = multiLinkElement.GetPerStaProfile( @@ -434,7 +434,7 @@ StaWifiMac::GetMultiLinkElement(bool isReassoc, uint8_t linkId) const // for the corresponding non-AP STA that requests a link for multi-link (re)setup // with the AP MLD is set to the link ID of the AP affiliated with the AP MLD that // is operating on that link. The link ID is obtained during multi-link discovery - perStaProfile.SetLinkId(staLink.apLinkId.value()); + perStaProfile.SetLinkId(index); // For each Per-STA Profile subelement included in the Link Info field, the // Complete Profile subfield of the STA Control field shall be set to 1 perStaProfile.SetCompleteProfile(); @@ -618,7 +618,6 @@ StaWifiMac::ScanningTimeout(const std::optional& bestAp) { auto& staLink = GetStaLink(link); staLink.sendAssocReq = false; - staLink.apLinkId = std::nullopt; staLink.bssid = std::nullopt; } // send Association Request on the link where the Beacon/Probe Response was received @@ -635,7 +634,6 @@ StaWifiMac::ScanningTimeout(const std::optional& bestAp) NS_ASSERT_MSG(mle, "We get here only for ML setup"); NS_LOG_DEBUG("Setting up link (local ID=" << +localLinkId << ", AP ID=" << +apLinkId << ")"); - GetLink(localLinkId).apLinkId = apLinkId; GetLink(localLinkId).bssid = bssid; if (!mleCommonInfo) { @@ -666,7 +664,7 @@ StaWifiMac::ScanningTimeout(const std::optional& bestAp) // restart beacon watchdog for all links to setup for (const auto& [id, link] : GetLinks()) { - if (GetStaLink(link).apLinkId.has_value() || GetNLinks() == 1) + if (GetStaLink(link).bssid.has_value() || GetNLinks() == 1) { RestartBeaconWatchdog(delay, id); } @@ -718,20 +716,19 @@ StaWifiMac::Disassociated(uint8_t linkId) NS_LOG_FUNCTION(this << +linkId); auto& link = GetLink(linkId); - if (link.apLinkId.has_value()) + if (link.bssid.has_value()) { // this is a link setup in an ML setup m_setupCanceled(linkId, GetBssid(linkId)); } // disable the given link - link.apLinkId = std::nullopt; link.bssid = std::nullopt; link.phy->SetOffMode(); for (const auto& [id, lnk] : GetLinks()) { - if (GetStaLink(lnk).apLinkId.has_value()) + if (GetStaLink(lnk).bssid.has_value()) { // found an enabled link return; @@ -805,12 +802,6 @@ StaWifiMac::GetSetupLinkIds() const return linkIds; } -std::optional -StaWifiMac::GetApLinkId(uint8_t linkId) const -{ - return GetLink(linkId).apLinkId; -} - Mac48Address StaWifiMac::DoGetLocalAddress(const Mac48Address& remoteAddr) const { @@ -1177,10 +1168,10 @@ StaWifiMac::ReceiveAssocResp(Ptr mpdu, uint8_t linkId) // if a Multi-Link Element is present, check its content if (const auto& mle = assocResp.Get()) { - NS_ABORT_MSG_IF(!GetLink(linkId).apLinkId.has_value(), + NS_ABORT_MSG_IF(!GetLink(linkId).bssid.has_value(), "The link on which the Association Response was received " "is not a link we requested to setup"); - NS_ABORT_MSG_IF(*GetLink(linkId).apLinkId != mle->GetLinkIdInfo(), + NS_ABORT_MSG_IF(linkId != mle->GetLinkIdInfo(), "The link ID of the AP that transmitted the Association " "Response does not match the stored link ID"); NS_ABORT_MSG_IF(GetWifiRemoteStationManager(linkId)->GetMldAddress(hdr.GetAddr2()) != @@ -1193,15 +1184,7 @@ StaWifiMac::ReceiveAssocResp(Ptr mpdu, uint8_t linkId) { auto& perStaProfile = mle->GetPerStaProfile(elem); uint8_t apLinkId = perStaProfile.GetLinkId(); - auto it = GetLinks().cbegin(); - while (it != GetLinks().cend()) - { - if (GetStaLink(it->second).apLinkId == apLinkId) - { - break; - } - it++; - } + auto it = GetLinks().find(apLinkId); uint8_t staLinkid = 0; std::optional bssid; NS_ABORT_MSG_IF(it == GetLinks().cend() || @@ -1241,7 +1224,6 @@ StaWifiMac::ReceiveAssocResp(Ptr mpdu, uint8_t linkId) // remaining links in setupLinks are not setup and hence must be disabled for (const auto& id : setupLinks) { - GetLink(id).apLinkId = std::nullopt; GetLink(id).bssid = std::nullopt; // if at least one link was setup, disable the links that were not setup (if any) if (m_state == ASSOCIATED) diff --git a/src/wifi/model/sta-wifi-mac.h b/src/wifi/model/sta-wifi-mac.h index 1a1171cff..64c483572 100644 --- a/src/wifi/model/sta-wifi-mac.h +++ b/src/wifi/model/sta-wifi-mac.h @@ -256,12 +256,6 @@ class StaWifiMac : public WifiMac */ std::set GetSetupLinkIds() const; - /** - * \param linkId the IO of the given link - * \return the ID (as set by the AP) of the given link, if the given link has been setup - */ - std::optional GetApLinkId(uint8_t linkId) const; - /** * Return the association ID. * @@ -324,8 +318,6 @@ class StaWifiMac : public WifiMac bool sendAssocReq; //!< whether this link is used to send the //!< Association Request frame - std::optional apLinkId; //!< ID (as set by the AP) of the link we have - //!< setup or are setting up std::optional bssid; //!< BSSID of the AP to associate with over this link EventId beaconWatchdog; //!< beacon watchdog Time beaconWatchdogEnd{0}; //!< beacon watchdog end