wifi: AP MLD unblocks transmissions on other links if no response to MU-RTS
Transmissions are blocked by the AP MLD when sending the MU-RTS
This commit is contained in:
committed by
Stefano Avallone
parent
2dacfedaa5
commit
99cb2319cc
@@ -469,6 +469,45 @@ EhtFrameExchangeManager::SendMuRts(const WifiTxParameters& txParams)
|
||||
HeFrameExchangeManager::SendMuRts(txParams);
|
||||
}
|
||||
|
||||
void
|
||||
EhtFrameExchangeManager::CtsAfterMuRtsTimeout(Ptr<WifiMpdu> muRts, const WifiTxVector& txVector)
|
||||
{
|
||||
NS_LOG_FUNCTION(this << *muRts << txVector);
|
||||
|
||||
// we blocked transmissions on the other EMLSR links for the EMLSR clients we sent the ICF to.
|
||||
// Given that no client responded, we can unblock transmissions for a client if there is no
|
||||
// ongoing UL TXOP held by that client
|
||||
for (const auto& address : m_sentRtsTo)
|
||||
{
|
||||
if (!GetWifiRemoteStationManager()->GetEmlsrEnabled(address))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
auto mldAddress = GetWifiRemoteStationManager()->GetMldAddress(address);
|
||||
NS_ASSERT(mldAddress);
|
||||
|
||||
if (m_ongoingTxopEnd.IsRunning() && m_txopHolder &&
|
||||
m_mac->GetMldAddress(*m_txopHolder) == mldAddress)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (uint8_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
|
||||
{
|
||||
if (linkId != m_linkId &&
|
||||
m_mac->GetWifiRemoteStationManager(linkId)->GetEmlsrEnabled(*mldAddress))
|
||||
{
|
||||
m_mac->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
|
||||
*mldAddress,
|
||||
{linkId});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HeFrameExchangeManager::CtsAfterMuRtsTimeout(muRts, txVector);
|
||||
}
|
||||
|
||||
bool
|
||||
EhtFrameExchangeManager::GetEmlsrSwitchToListening(Ptr<const WifiPsdu> psdu,
|
||||
uint16_t aid,
|
||||
|
||||
@@ -93,6 +93,7 @@ class EhtFrameExchangeManager : public HeFrameExchangeManager
|
||||
void ForwardPsduDown(Ptr<const WifiPsdu> psdu, WifiTxVector& txVector) override;
|
||||
void ForwardPsduMapDown(WifiConstPsduMap psduMap, WifiTxVector& txVector) override;
|
||||
void SendMuRts(const WifiTxParameters& txParams) override;
|
||||
void CtsAfterMuRtsTimeout(Ptr<WifiMpdu> muRts, const WifiTxVector& txVector) override;
|
||||
void TransmissionSucceeded() override;
|
||||
void TransmissionFailed() override;
|
||||
void NotifyChannelReleased(Ptr<Txop> txop) override;
|
||||
|
||||
Reference in New Issue
Block a user