wifi: Allow using BSRP TFs as ICFs for EMLSR clients

This commit is contained in:
Stefano Avallone
2024-07-17 15:41:41 +02:00
parent 988b4ab26c
commit 991737ba86
4 changed files with 17 additions and 3 deletions

View File

@@ -36,6 +36,7 @@ The required Doxygen version for documentation generation is version 1.11.
- (applications) - The `ThreeGppHttpServer::LocalAddress` and `ThreeGppHttpServer::LocalPort` attributes have been renamed to `ThreeGppHttpServer::Remote` and `ThreeGppHttpServer::Port`, respectively.
- (applications) - It is now possible to specify the address on which to bind the listening socket for UdpServer via the `Local` attribute.
- (applications) - It is now possible to specify a port only for PacketSink to listen to any address (both IPv4 and IPv6).
- (wifi) - Added a `WifiDefaultProtectionManager::SkipMuRtsBeforeBsrp` attribute to avoid using MU-RTS to protect the transmission of a BSRP Trigger Frame. If this attribute is set to true (which is the default value), BSRP Trigger Frames can be used as Initial Control Frames for EMLSR clients
### Bugs fixed

View File

@@ -48,6 +48,12 @@ WifiDefaultProtectionManager::GetTypeId()
"Initial Control Frame to an EMLSR client).",
BooleanValue(false),
MakeBooleanAccessor(&WifiDefaultProtectionManager::m_singleRtsPerTxop),
MakeBooleanChecker())
.AddAttribute("SkipMuRtsBeforeBsrp",
"If enabled, MU-RTS is not used to protect the transmission of a BSRP "
"Trigger Frame.",
BooleanValue(true),
MakeBooleanAccessor(&WifiDefaultProtectionManager::m_skipMuRtsBeforeBsrp),
MakeBooleanChecker());
return tid;
}
@@ -376,6 +382,10 @@ WifiDefaultProtectionManager::TryUlMuTransmission(Ptr<const WifiMpdu> mpdu,
(m_sendMuRts && !allProtected && (!m_singleRtsPerTxop || protectedStas.empty())) ||
isUnprotectedEmlsrDst;
// if we are sending a BSRP TF and SkipMuRtsBeforeBsrpTf is true, do not use MU-RTS (even in
// case of unprotected EMLSR, because the BSRP TF is an ICF)
needMuRts = needMuRts && (!m_skipMuRtsBeforeBsrp || !trigger.IsBsrp());
if (!needMuRts)
{
// No protection needed

View File

@@ -87,8 +87,9 @@ class WifiDefaultProtectionManager : public WifiProtectionManager
virtual std::unique_ptr<WifiProtection> TryUlMuTransmission(Ptr<const WifiMpdu> mpdu,
const WifiTxParameters& txParams);
bool m_sendMuRts; //!< true for sending an MU-RTS to protect DL MU PPDUs
bool m_singleRtsPerTxop; //!< true for using protection only once in a TXOP
bool m_sendMuRts; //!< true for sending an MU-RTS to protect DL MU PPDUs
bool m_singleRtsPerTxop; //!< true for using protection only once in a TXOP
bool m_skipMuRtsBeforeBsrp; //!< whether to skip MU-RTS before BSRP TF
};
} // namespace ns3

View File

@@ -2158,7 +2158,9 @@ OfdmaAckSequenceTest::DoRun()
TimeValue(m_defaultTbPpduDuration));
mac.SetProtectionManager("ns3::WifiDefaultProtectionManager",
"EnableMuRts",
BooleanValue(true));
BooleanValue(true),
"SkipMuRtsBeforeBsrp",
BooleanValue(false));
mac.SetAckManager("ns3::WifiDefaultAckManager",
"DlMuAckSequenceType",
EnumValue(m_dlMuAckType));