wifi: Do not reset NAV while using another EMLSR link

CTS may have been missed due to the main PHY switching
to another link to take over a TXOP while receiving the CTS.
This commit is contained in:
Stefano Avallone
2023-09-08 22:11:01 +02:00
committed by Stefano Avallone
parent 0b76f70896
commit 56511e5108
3 changed files with 34 additions and 0 deletions

View File

@@ -1028,6 +1028,14 @@ void
ChannelAccessManager::NotifyNavResetNow(Time duration)
{
NS_LOG_FUNCTION(this << duration);
if (!m_phy)
{
NS_LOG_DEBUG("Do not reset NAV, CTS may have been missed due to the main PHY switching "
"to another link to take over a TXOP while receiving the CTS");
return;
}
NS_LOG_DEBUG("nav reset for=" << duration);
UpdateBackoff();
m_lastNavEnd = Simulator::Now() + duration;

View File

@@ -294,6 +294,30 @@ EhtFrameExchangeManager::ForwardPsduMapDown(WifiConstPsduMap psduMap, WifiTxVect
}
}
void
EhtFrameExchangeManager::NavResetTimeout()
{
NS_LOG_FUNCTION(this);
if (UsingOtherEmlsrLink())
{
// the CTS may have been missed because another EMLSR link is being used; do not reset NAV
return;
}
HeFrameExchangeManager::NavResetTimeout();
}
void
EhtFrameExchangeManager::IntraBssNavResetTimeout()
{
NS_LOG_FUNCTION(this);
if (UsingOtherEmlsrLink())
{
// the CTS may have been missed because another EMLSR link is being used; do not reset NAV
return;
}
HeFrameExchangeManager::IntraBssNavResetTimeout();
}
void
EhtFrameExchangeManager::EmlsrSwitchToListening(const Mac48Address& address, const Time& delay)
{

View File

@@ -113,6 +113,8 @@ class EhtFrameExchangeManager : public HeFrameExchangeManager
RxSignalInfo rxSignalInfo,
const WifiTxVector& txVector,
bool inAmpdu) override;
void NavResetTimeout() override;
void IntraBssNavResetTimeout() override;
/**
* This method is intended to be called when an AP MLD detects that an EMLSR client previously