wifi: AP MLD assumes that all EMLSR clients switch back to listening operation when releasing the channel

This commit is contained in:
Stefano Avallone
2023-03-18 21:14:31 +01:00
committed by Stefano Avallone
parent 043a657263
commit 82f369381c
2 changed files with 20 additions and 0 deletions

View File

@@ -412,4 +412,23 @@ EhtFrameExchangeManager::GetEmlsrSwitchToListening(Ptr<const WifiPsdu> psdu,
return true;
}
void
EhtFrameExchangeManager::NotifyChannelReleased(Ptr<Txop> txop)
{
NS_LOG_FUNCTION(this << txop);
// the channel has been released; all EMLSR clients will switch back to listening
// operation after a timeout interval of aSIFSTime + aSlotTime + aRxPHYStartDelay
auto delay = m_phy->GetSifs() + m_phy->GetSlot() + MicroSeconds(20);
for (const auto& address : m_protectedStas)
{
if (GetWifiRemoteStationManager()->GetEmlsrEnabled(address))
{
EmlsrSwitchToListening(address, delay);
}
}
HeFrameExchangeManager::NotifyChannelReleased(txop);
}
} // namespace ns3

View File

@@ -81,6 +81,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 NotifyChannelReleased(Ptr<Txop> txop) override;
/**
* This method is intended to be called when an AP MLD detects that an EMLSR client previously