Test the transmission of DL frames to EMLSR clients. More...
Public Member Functions | |
EmlsrDlTxopTest (std::size_t nEmlsrStations, std::size_t nNonEmlsrStations, const std::set< uint8_t > &linksToEnableEmlsrOn, const std::vector< Time > &paddingDelay, const std::vector< Time > &transitionDelay, Time transitionTimeout) | |
Constructor. | |
~EmlsrDlTxopTest () override=default | |
Public Member Functions inherited from EmlsrOperationsTestBase | |
EmlsrOperationsTestBase (const std::string &name) | |
Constructor. | |
~EmlsrOperationsTestBase () override=default | |
Public Member Functions inherited from ns3::TestCase | |
TestCase (const TestCase &)=delete | |
virtual | ~TestCase () |
Destructor. | |
std::string | GetName () const |
TestCase & | operator= (const TestCase &)=delete |
Protected Member Functions | |
void | CheckBlockAck (const WifiConstPsduMap &psduMap, const WifiTxVector &txVector, uint8_t linkId) |
Check that appropriate actions are taken by the AP MLD receiving a PPDU containing BlockAck frames from EMLSR clients on the given link. | |
void | CheckEmlNotificationFrame (Ptr< const WifiMpdu > mpdu, const WifiTxVector &txVector, uint8_t linkId) |
Check that appropriate actions are taken by the AP MLD transmitting an EML Operating Mode Notification response frame to an EMLSR client on the given link. | |
void | CheckInitialControlFrame (Ptr< const WifiMpdu > mpdu, const WifiTxVector &txVector, uint8_t linkId) |
Check that appropriate actions are taken by the AP MLD transmitting an initial Control frame to an EMLSR client on the given link. | |
void | CheckPmModeAfterAssociation (const Mac48Address &address) |
Check that the AP MLD considers the correct Power Management mode for the links setup with the given non-AP MLD. | |
void | CheckQosFrames (const WifiConstPsduMap &psduMap, const WifiTxVector &txVector, uint8_t linkId) |
Check that appropriate actions are taken by the AP MLD transmitting a PPDU containing QoS data frames to EMLSR clients on the given link. | |
void | CheckResults () |
Check that the simulation produced the expected results. | |
void | DoRun () override |
Implementation to actually run this TestCase. | |
void | DoSetup () override |
Implementation to do any local setup required for this TestCase. | |
void | Transmit (uint8_t linkId, std::string context, WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW) override |
Callback invoked when a FEM passes PSDUs to the PHY. | |
Protected Member Functions inherited from EmlsrOperationsTestBase | |
void | DoSetup () override |
Implementation to do any local setup required for this TestCase. | |
Ptr< PacketSocketClient > | GetApplication (TrafficDirection dir, std::size_t staId, std::size_t count, std::size_t pktSize) const |
virtual void | Transmit (uint8_t linkId, std::string context, WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW) |
Callback invoked when a FEM passes PSDUs to the PHY. | |
Protected Member Functions inherited from ns3::TestCase | |
TestCase (std::string name) | |
Constructor. | |
void | AddTestCase (TestCase *testCase, TestDuration duration=QUICK) |
Add an individual child TestCase to this test suite. | |
TestCase * | GetParent () const |
Get the parent of this TestCase. | |
bool | IsStatusFailure () const |
Check if any tests failed. | |
bool | IsStatusSuccess () const |
Check if all tests passed. | |
void | SetDataDir (std::string directory) |
Set the data directory where reference trace files can be found. | |
void | ReportTestFailure (std::string cond, std::string actual, std::string limit, std::string message, std::string file, int32_t line) |
Log the failure of this TestCase. | |
bool | MustAssertOnFailure () const |
Check if this run should assert on failure. | |
bool | MustContinueOnFailure () const |
Check if this run should continue on failure. | |
std::string | CreateDataDirFilename (std::string filename) |
Construct the full path to a file in the data directory. | |
std::string | CreateTempDirFilename (std::string filename) |
Construct the full path to a file in a temporary directory. | |
Private Member Functions | |
void | EnableEmlsrMode () |
Enable EMLSR mode on the next EMLSR client. | |
void | StartTraffic () override |
Start the generation of traffic (needs to be overridden) | |
Private Attributes | |
std::vector< std::optional< uint8_t > > | m_assocLinkId |
ID of the link used to establish association (vector index is the node ID) | |
std::size_t | m_countBlockAck |
counter for BlockAck frames (transition delay test) | |
std::size_t | m_countQoSframes |
counter for QoS frames (transition delay test) | |
Time | m_emlsrEnabledTime |
when EMLSR mode has been enabled on all EMLSR clients | |
std::set< uint8_t > | m_emlsrLinks |
IDs of the links on which EMLSR mode has to be enabled. | |
Ptr< ListErrorModel > | m_errorModel |
error rate model to corrupt BlockAck at AP MLD | |
const Time | m_fe2to3delay |
time interval between 2nd and 3rd frame exchange sequences after the enablement of EMLSR mode | |
Additional Inherited Members | |
Public Types inherited from EmlsrOperationsTestBase | |
enum | TrafficDirection : uint8_t { DOWNLINK = 0 , UPLINK } |
Enumeration for traffic directions. More... | |
Public Types inherited from ns3::TestCase | |
enum | TestDuration { QUICK = 1 , EXTENSIVE = 2 , TAKES_FOREVER = 3 } |
How long the test takes to execute. More... | |
Protected Attributes inherited from EmlsrOperationsTestBase | |
Ptr< ApWifiMac > | m_apMac |
AP wifi MAC. | |
std::vector< PacketSocketAddress > | m_dlSockets |
packet socket address for DL traffic | |
Time | m_duration {0} |
simulation duration | |
bool | m_establishBaDl {false} |
whether BA needs to be established (for TID 0) with the AP as originator | |
bool | m_establishBaUl {false} |
whether BA needs to be established (for TID 0) with the AP as recipient | |
uint16_t | m_lastAid {0} |
AID of last associated station. | |
std::set< uint8_t > | m_linksToEnableEmlsrOn |
IDs of the links on which EMLSR mode has to be enabled. | |
std::size_t | m_nEmlsrStations {1} |
number of stations to create that activate EMLSR | |
std::size_t | m_nNonEmlsrStations {0} |
number of stations to create that do not activate EMLSR | |
std::vector< Time > | m_paddingDelay |
Padding Delay advertised by the non-AP MLD. | |
std::vector< Ptr< StaWifiMac > > | m_staMacs |
MACs of the non-AP MLDs. | |
std::vector< Time > | m_transitionDelay |
Transition Delay advertised by the non-AP MLD. | |
Time | m_transitionTimeout {MicroSeconds(128)} |
Transition Timeout advertised by the AP MLD. | |
std::vector< FrameInfo > | m_txPsdus |
transmitted PSDUs | |
std::vector< PacketSocketAddress > | m_ulSockets |
packet socket address for UL traffic | |
Test the transmission of DL frames to EMLSR clients.
This test considers an AP MLD and a configurable number of non-AP MLDs that support EMLSR and a configurable number of non-AP MLDs that do not support EMLSR. All MLDs have three setup links, while the set of EMLSR links for the EMLSR clients is configurable. Block ack agreements (for TID 0, with the AP MLD as originator) are established with all the non-AP MLDs before that EMLSR clients send the EML Operating Mode Notification frame to enable the EMLSR mode on their EMLSR links.
Before enabling EMLSR mode, it is checked that:
After enabling EMLSR mode, it is checked that:
After disabling EMLSR mode, it is checked that:
Definition at line 947 of file wifi-emlsr-test.cc.
EmlsrDlTxopTest::EmlsrDlTxopTest | ( | std::size_t | nEmlsrStations, |
std::size_t | nNonEmlsrStations, | ||
const std::set< uint8_t > & | linksToEnableEmlsrOn, | ||
const std::vector< Time > & | paddingDelay, | ||
const std::vector< Time > & | transitionDelay, | ||
Time | transitionTimeout | ||
) |
Constructor.
nEmlsrStations | number of non-AP MLDs that support EMLSR |
nNonEmlsrStations | number of non-AP MLDs that do not support EMLSR |
linksToEnableEmlsrOn | IDs of links on which EMLSR mode should be enabled |
paddingDelay | vector (whose size equals nEmlsrStations) of the padding delay values advertised by non-AP MLDs |
transitionDelay | vector (whose size equals nEmlsrStations) of the transition delay values advertised by non-AP MLDs |
transitionTimeout | the Transition Timeout advertised by the AP MLD |
Definition at line 1060 of file wifi-emlsr-test.cc.
References EmlsrOperationsTestBase::m_duration, EmlsrOperationsTestBase::m_establishBaDl, EmlsrOperationsTestBase::m_linksToEnableEmlsrOn, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, EmlsrOperationsTestBase::m_paddingDelay, EmlsrOperationsTestBase::m_transitionDelay, EmlsrOperationsTestBase::m_transitionTimeout, NS_ABORT_MSG_IF, and ns3::Seconds().
|
overridedefault |
|
protected |
Check that appropriate actions are taken by the AP MLD receiving a PPDU containing BlockAck frames from EMLSR clients on the given link.
psduMap | the PSDU carrying BlockAck frames |
txVector | the TXVECTOR used to send the PPDU |
linkId | the ID of the given link |
Definition at line 2330 of file wifi-emlsr-test.cc.
References ns3::AC_BE, ns3::WifiPhy::CalculateTxDuration(), ns3::WifiMac::GetMacQueueScheduler(), ns3::WifiRemoteStationManager::GetMldAddress(), ns3::WifiMac::GetNLinks(), ns3::EventId::GetUid(), ns3::WifiMac::GetWifiPhy(), ns3::WifiMac::GetWifiRemoteStationManager(), ns3::Time::IsZero(), EmlsrOperationsTestBase::m_apMac, m_countBlockAck, m_emlsrEnabledTime, m_emlsrLinks, m_errorModel, m_fe2to3delay, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_staMacs, EmlsrOperationsTestBase::m_transitionDelay, ns3::MicroSeconds(), ns3::NanoSeconds(), ns3::Simulator::Now(), NS_TEST_ASSERT_MSG_EQ, NS_TEST_EXPECT_MSG_EQ, ns3::Simulator::Schedule(), ns3::ListErrorModel::SetList(), timeout, ns3::WIFI_QOSDATA_QUEUE, and ns3::WIFI_UNICAST.
Referenced by Transmit().
|
protected |
Check that appropriate actions are taken by the AP MLD transmitting an EML Operating Mode Notification response frame to an EMLSR client on the given link.
mpdu | the MPDU carrying the EML Operating Mode Notification frame |
txVector | the TXVECTOR used to send the PPDU |
linkId | the ID of the given link |
Definition at line 1978 of file wifi-emlsr-test.cc.
References ns3::WifiPhy::CalculateTxDuration(), ns3::GetAckSize(), ns3::WifiMac::GetWifiPhy(), EmlsrOperationsTestBase::m_apMac, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_staMacs, NS_TEST_ASSERT_MSG_EQ, ns3::WifiActionHeader::Remove(), and ns3::Simulator::Schedule().
Referenced by Transmit().
|
protected |
Check that appropriate actions are taken by the AP MLD transmitting an initial Control frame to an EMLSR client on the given link.
mpdu | the MPDU carrying the MU-RTS TF |
txVector | the TXVECTOR used to send the PPDU |
linkId | the ID of the given link |
Definition at line 2077 of file wifi-emlsr-test.cc.
References ns3::AC_BE, ns3::WifiPhy::CalculateTxDuration(), ns3::WifiMode::GetDataRate(), ns3::WifiRemoteStationManager::GetEmlsrEnabled(), ns3::WifiMac::GetMacQueueScheduler(), ns3::ApWifiMac::GetMldOrLinkAddressByAid(), ns3::WifiTxVector::GetMode(), ns3::WifiMac::GetNLinks(), ns3::WifiPhy::GetPhyBand(), ns3::WifiTxVector::GetPreambleType(), ns3::WifiMac::GetWifiPhy(), ns3::WifiMac::GetWifiRemoteStationManager(), ns3::CtrlTriggerHeader::IsMuRts(), ns3::Time::IsStrictlyPositive(), EmlsrOperationsTestBase::m_apMac, m_emlsrEnabledTime, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_paddingDelay, EmlsrOperationsTestBase::m_staMacs, Max, NS_TEST_ASSERT_MSG_EQ, NS_TEST_EXPECT_MSG_EQ, NS_TEST_EXPECT_MSG_LT, ns3::CtrlTriggerHeader::SetPaddingSize(), ns3::Time::US, ns3::WIFI_PREAMBLE_HT_MF, ns3::WIFI_QOSDATA_QUEUE, and ns3::WIFI_UNICAST.
Referenced by Transmit().
|
protected |
Check that the AP MLD considers the correct Power Management mode for the links setup with the given non-AP MLD.
This method is intended to be called shortly after ML setup.
address | a link address of the given non-AP MLD |
Definition at line 1934 of file wifi-emlsr-test.cc.
References ns3::AC_BE, ns3::WifiMac::GetMacQueueScheduler(), ns3::WifiMac::GetNLinks(), ns3::WifiMac::GetWifiRemoteStationManager(), ns3::WifiRemoteStationManager::IsInPsMode(), EmlsrOperationsTestBase::m_apMac, m_assocLinkId, m_emlsrLinks, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, EmlsrOperationsTestBase::m_staMacs, NS_TEST_ASSERT_MSG_EQ, NS_TEST_EXPECT_MSG_EQ, ns3::WIFI_QOSDATA_QUEUE, and ns3::WIFI_UNICAST.
Referenced by Transmit().
|
protected |
Check that appropriate actions are taken by the AP MLD transmitting a PPDU containing QoS data frames to EMLSR clients on the given link.
psduMap | the PSDU(s) carrying QoS data frames |
txVector | the TXVECTOR used to send the PPDU |
linkId | the ID of the given link |
Definition at line 2194 of file wifi-emlsr-test.cc.
References ns3::AC_BE, ns3::Node::AddApplication(), ns3::WifiPhy::CalculateTxDuration(), EmlsrOperationsTestBase::DOWNLINK, EmlsrOperationsTestBase::GetApplication(), ns3::WifiMac::GetDevice(), ns3::WifiMac::GetMacQueueScheduler(), ns3::WifiMac::GetNLinks(), ns3::WifiNetDevice::GetNode(), ns3::WifiPhy::GetPhyBand(), ns3::WifiMac::GetWifiPhy(), ns3::Time::IsZero(), EmlsrOperationsTestBase::m_apMac, m_countQoSframes, m_emlsrEnabledTime, m_emlsrLinks, m_fe2to3delay, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_staMacs, EmlsrOperationsTestBase::m_transitionDelay, ns3::NanoSeconds(), ns3::Simulator::Now(), NS_TEST_EXPECT_MSG_EQ, ns3::Simulator::Schedule(), ns3::WIFI_QOSDATA_QUEUE, and ns3::WIFI_UNICAST.
Referenced by Transmit().
|
protected |
Check that the simulation produced the expected results.
Before enabling EMLSR mode, no MU-RTS TF should be sent. Four packets are generated after association to trigger the establishment of a Block Ack agreement. The TXOP Limit and the MCS are set such that two packets can be transmitted in a TXOP, hence we expect that the AP MLD sends two A-MPDUs to each non-AP MLD.
EMLSR client with EMLSR mode to be enabled on all links: after ML setup, all other links stay in power save mode, hence BA establishment occurs on the same link.
[link 0] ─────────────────────────────────────────────────────────────────────────── | power save mode
┌─────┐ ┌─────┐ ┌───┬───┐ ┌───┬───┐ ┌───┐ │Assoc│ │ADDBA│ ┌───┐ │QoS│QoS│ │QoS│QoS│ [link 1] │ACK│ │Resp │ │ Req │ │ACK│ │ 0 │ 1 │ │ 2 │ 3 │ ───┬─────┬┴───┴──┴─────┴┬───┬─┴─────┴┬───┬─┬─────┬┴───┴─┴───┴───┴┬──┬─┴───┴───┴┬──┬─── │Assoc│ │ACK│ │ACK│ │ADDBA│ │BA│ │BA│ │ Req │ └───┘ └───┘ │Resp │ └──┘ └──┘ └─────┘ └─────┘
[link 2] ─────────────────────────────────────────────────────────────────────────── | power save mode
EMLSR client with EMLSR mode to be enabled on not all the links: after ML setup, the other EMLSR links stay in power save mode, the non-EMLSR link (link 1) transitions to active mode.
┌─────┐ ┌───┬───┐ ┌───┐ │ADDBA│ ┌───┐ │QoS│QoS│
[link 0 - non EMLSR] │ACK│ │ Req │ │ACK│ │ 2 │ 3 │ ──────────────────────────────┬────┬┴───┴──┴─────┴┬───┬─┬─────┬┴───┴─┴───┴───┴┬──┬─ │Data│ │ACK│ │ADDBA│ │BA│ │Null│ └───┘ │Resp │ └──┘ └────┘ └─────┘ ┌─────┐ ┌───┬───┐ ┌───┐ │Assoc│ │QoS│QoS│ [link 1] │ACK│ │Resp │ │ 0 │ 1 │ ───┬─────┬┴───┴──┴─────┴┬───┬──────────────────────────────────┴───┴───┴┬──┬─────── │Assoc│ │ACK│ │BA│ │ Req │ └───┘ └──┘ └─────┘
[link 2] ─────────────────────────────────────────────────────────────────────────── | power save mode
Non-EMLSR client (not shown): after ML setup, all other links transition to active mode by sending a Data Null frame; QoS data frame exchanges occur on two links simultaneously.
If this is an EMLSR client and there is no setup link other than the one used to establish association that is not an EMLSR link, then the two A-MPDUs are sent one after another on the link used to establish association.
Otherwise, the two A-MPDUs can be sent concurrently on two distinct links (may be the link used to establish association and a non-EMLSR link).
After enabling EMLSR mode, MU-RTS TF should only be sent on EMLSR links. After the exchange of EML Operating Mode Notification frames, a number of packets are generated at the AP MLD to prepare two A-MPDUs for each non-AP MLD.
EMLSR client with EMLSR mode to be enabled on all links (A is the EMLSR client, B is the non-EMLSR client): ┌─────┬─────┐ │QoS 4│QoS 5│ │ to A│ to A│ ┌───┐ ├─────┼─────┤ │MU │ │QoS 4│QoS 5│ [link 0] │RTS│ │ to B│ to B│ ──────────────────────────┴───┴┬───┬┴─────┴─────┴┬──┬──────────── │CTS│ │BA│ ├───┤ ├──┤ │CTS│ │BA│ └───┘ └──┘ ┌───┐ ┌─────┬─────┐ ┌───┐ │EML│ │QoS 6│QoS 7│ [link 1] │ACK│ │OM │ │ to B│ to B│ ────┬───┬┴───┴──┴───┴┬───┬─┴─────┴─────┴┬──┬──────────────────────────────────── │EML│ │ACK│ │BA│ │OM │ └───┘ └──┘ └───┘ ┌───┐ ┌─────┬─────┐ │MU │ │QoS 6│QoS 7│ [link 2] │RTS│ │ to A│ to A│ ─────────────────────────────────────────────────────────┴───┴┬───┬┴─────┴─────┴┬──┬─ │CTS│ │BA│ └───┘ └──┘
EMLSR client with EMLSR mode to be enabled on not all the links (A is the EMLSR client, B is the non-EMLSR client): ┌─────┬─────┐ │QoS 4│QoS 5│ │ to A│ to A│ ├─────┼─────┤ │QoS 4│QoS 5│ [link 0 - non EMLSR] │ to B│ to B│ ───────────────────────────┴─────┴─────┴┬──┬─────────────────────────── │BA│ ├──┤ │BA│ └──┘ ┌─────┬─────┐ │QoS 6│QoS 7│ │ to A│ to A│ ┌───┐ ┌───┐ ├─────┼─────┤ ┌───┐ │EML│ │MU │ │QoS 6│QoS 7│ [link 1] │ACK│ │OM │ │RTS│ │ to B│ to B│ ────┬───┬┴───┴──┴───┴┬───┬─┴───┴┬───┬┴─────┴─────┴┬──┬──────────── │EML│ │ACK│ │CTS│ │BA│ │OM │ └───┘ ├───┤ ├──┤ └───┘ │CTS│ │BA│ └───┘ └──┘
[link 2] ────────────────────────────────────────────────────────────────────────────────
Store a QoS data frame or an MU-RTS TF followed by a QoS data frame
Let's focus on the first two frame exchanges for each EMLSR clients. If all setup links are EMLSR links, both frame exchanges are protected by MU-RTS TF and occur one after another. Otherwise, one frame exchange occurs on the non-EMLSR link and is not protected by MU-RTS TF; the other frame exchange occurs on an EMLSR link and is protected by MU-RTS TF.
A and B are two EMLSR clients. No ICF before the second QoS data frame because B has not switched to listening mode. ICF is sent before the third QoS data frame because A has switched to listening mode.
┌─────┐ A switches to listening │QoS x│ after transition delay │ to A│ | ┌───┐ ├─────┤ ┌─────┐ │MU │ │QoS x│ │QoS y│
[link 0] │RTS│ │ to B│ │ to B│ ────────────┴───┴┬───┬┴─────┴┬──┬┴─────┴┬──┬──────────── │CTS│ │BA│ │BA│ ├───┤ ├──┤ └──┘ │CTS│ │BA│ └───┘ └──┘ A switches to listening after timeout + transition delay │ ┌───┐ ┌─────┐ │ ┌───┐ │MU │ │QoS x│ │ │MU │ ┌───┐ [link 1] │RTS│ │ to A│ │ │RTS│ │BAR│ ───────────────────────────────────┴───┴┬───┬┴─────┴┬──┬───────┴───┴┬───┬┴───┴┬──┬─ │CTS│ │BA│ │CTS│ │BA│ └───┘ └──x └───┘ └──┘
After disabling EMLSR mode, no MU-RTS TF should be sent. After the exchange of EML Operating Mode Notification frames, a number of packets are generated at the AP MLD to prepare two A-MPDUs for each EMLSR client.
EMLSR client with EMLSR mode to be enabled on all links (A is the EMLSR client, B is the non-EMLSR client):
[link 0] | power save mode ──────────────────────────────────────────────────────── ┌─────┬─────┐ ┌──────┬──────┐ │QoS 8│QoS 9│ │QoS 10│QoS 11│ │ to A│ to A│ │ to A │ to A │ ┌───┐ ┌───┐ ├─────┼─────┤ ├──────┼──────┤ ┌───┐ │MU │ │EML│ │QoS 8│QoS 9│ │QoS 10│QoS 11│ [link 1] │ACK│ │RTS│ │OM │ │ to B│ to B│ │ to B │ to B │ ────┬───┬┴───┴──┴───┴┬───┬┴───┴┬───┬──┴─────┴─────┴┬──┬────┴──────┴──────┴┬──┬───── │EML│ │CTS│ │ACK│ │BA│ │BA│ │OM │ └───┘ └───┘ ├──┤ ├──┤ └───┘ │BA│ │BA│ └──┘ └──┘
[link 2] | power save mode ────────────────────────────────────────────────────────────────────────────
EMLSR client with EMLSR mode to be enabled on not all the links (A is the EMLSR client, B is the non-EMLSR client): ┌─────┬─────┐ │QoS 8│QoS 9│ │ to A│ to A│ ├─────┼─────┤ │QoS 8│QoS 9│ [link 0 - non EMLSR] │ to B│ to B│ ─────────────────────────────────────────┴─────┴─────┴┬──┬───────────── │BA│ ├──┤ │BA│ └──┘ ┌──────┬──────┐ │QoS 10│QoS 11│ │ to A │ to A │ ┌───┐ ┌───┐ ├──────┼──────┤ ┌───┐ │MU │ │EML│ │QoS 10│QoS 11│ [link 1] │ACK│ │RTS│ │OM │ │ to B │ to B │ ────┬───┬┴───┴──┴───┴┬───┬┴───┴┬───┬──┴──────┴──────┴┬──┬───── │EML│ │CTS│ │ACK│ │BA│ │OM │ └───┘ └───┘ ├──┤ └───┘ │BA│ └──┘
[link 2] | power save mode ────────────────────────────────────────────────────────────────────────────
Definition at line 1251 of file wifi-emlsr-test.cc.
References ns3::WifiPhy::CalculateTxDuration(), ns3::CtrlTriggerHeader::IsMuRts(), ns3::IsTrigger(), m_assocLinkId, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, EmlsrOperationsTestBase::m_staMacs, EmlsrOperationsTestBase::m_txPsdus, NS_TEST_ASSERT_MSG_EQ, NS_TEST_EXPECT_MSG_EQ, NS_TEST_EXPECT_MSG_GT, and NS_TEST_EXPECT_MSG_LT.
Referenced by DoRun().
|
overrideprotectedvirtual |
Implementation to actually run this TestCase.
Subclasses should override this method to conduct their tests.
Implements ns3::TestCase.
Definition at line 2495 of file wifi-emlsr-test.cc.
References CheckResults(), ns3::Simulator::Destroy(), EmlsrOperationsTestBase::m_duration, ns3::Simulator::Run(), and ns3::Simulator::Stop().
|
overrideprotectedvirtual |
Implementation to do any local setup required for this TestCase.
Subclasses should override this method to perform any costly per-test setup before DoRun is invoked.
Reimplemented from EmlsrOperationsTestBase.
Definition at line 1154 of file wifi-emlsr-test.cc.
References ns3::AC_BE, ns3::Object::AggregateObject(), ns3::WifiAcknowledgment::DL_MU_AGGREGATE_TF, EmlsrOperationsTestBase::DoSetup(), ns3::WifiMac::GetFrameExchangeManager(), ns3::WifiMac::GetNLinks(), ns3::WifiMac::GetQosTxop(), ns3::WifiMac::GetWifiPhy(), EmlsrOperationsTestBase::m_apMac, m_errorModel, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, ns3::MicroSeconds(), ns3::WifiPhy::SetPostReceptionErrorModel(), and ns3::Txop::SetTxopLimits().
|
private |
Enable EMLSR mode on the next EMLSR client.
Definition at line 1231 of file wifi-emlsr-test.cc.
References EnableEmlsrMode(), m_emlsrEnabledTime, m_emlsrLinks, EmlsrOperationsTestBase::m_lastAid, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_staMacs, ns3::MilliSeconds(), ns3::Simulator::Now(), ns3::Simulator::Schedule(), and StartTraffic().
Referenced by EnableEmlsrMode(), and StartTraffic().
|
overrideprivatevirtual |
Start the generation of traffic (needs to be overridden)
Reimplemented from EmlsrOperationsTestBase.
Definition at line 1182 of file wifi-emlsr-test.cc.
References ns3::Node::AddApplication(), EmlsrOperationsTestBase::DOWNLINK, EnableEmlsrMode(), EmlsrOperationsTestBase::GetApplication(), ns3::WifiMac::GetDevice(), ns3::WifiMac::GetNLinks(), ns3::WifiNetDevice::GetNode(), ns3::Time::IsZero(), EmlsrOperationsTestBase::m_apMac, m_emlsrEnabledTime, m_emlsrLinks, m_fe2to3delay, EmlsrOperationsTestBase::m_lastAid, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, EmlsrOperationsTestBase::m_staMacs, ns3::MilliSeconds(), and ns3::Simulator::Schedule().
Referenced by EnableEmlsrMode().
|
overrideprotectedvirtual |
Callback invoked when a FEM passes PSDUs to the PHY.
linkId | the ID of the link transmitting the PSDUs |
context | the context |
psduMap | the PSDU map |
txVector | the TX vector |
txPowerW | the tx power in Watts |
Reimplemented from EmlsrOperationsTestBase.
Definition at line 1089 of file wifi-emlsr-test.cc.
References ns3::WifiActionHeader::BLOCK_ACK, ns3::WifiActionHeader::BLOCK_ACK_ADDBA_REQUEST, CheckBlockAck(), CheckEmlNotificationFrame(), CheckInitialControlFrame(), CheckPmModeAfterAssociation(), CheckQosFrames(), ContextToNodeId(), m_assocLinkId, m_emlsrLinks, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_staMacs, NS_ASSERT_MSG, ns3::WifiActionHeader::Peek(), ns3::WifiActionHeader::PROTECTED_EHT, ns3::WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION, EmlsrOperationsTestBase::Transmit(), ns3::WIFI_MAC_CTL_BACKRESP, ns3::WIFI_MAC_CTL_TRIGGER, ns3::WIFI_MAC_MGT_ACTION, ns3::WIFI_MAC_MGT_ASSOCIATION_REQUEST, and ns3::WIFI_MAC_QOSDATA.
|
private |
ID of the link used to establish association (vector index is the node ID)
Definition at line 1050 of file wifi-emlsr-test.cc.
Referenced by CheckPmModeAfterAssociation(), CheckResults(), and Transmit().
|
private |
counter for BlockAck frames (transition delay test)
Definition at line 1056 of file wifi-emlsr-test.cc.
Referenced by CheckBlockAck().
|
private |
counter for QoS frames (transition delay test)
Definition at line 1055 of file wifi-emlsr-test.cc.
Referenced by CheckQosFrames().
|
private |
when EMLSR mode has been enabled on all EMLSR clients
Definition at line 1052 of file wifi-emlsr-test.cc.
Referenced by CheckBlockAck(), CheckInitialControlFrame(), CheckQosFrames(), EnableEmlsrMode(), and StartTraffic().
|
private |
IDs of the links on which EMLSR mode has to be enabled.
Definition at line 1048 of file wifi-emlsr-test.cc.
Referenced by CheckBlockAck(), CheckPmModeAfterAssociation(), CheckQosFrames(), EnableEmlsrMode(), StartTraffic(), and Transmit().
|
private |
error rate model to corrupt BlockAck at AP MLD
Definition at line 1057 of file wifi-emlsr-test.cc.
Referenced by CheckBlockAck(), and DoSetup().
|
private |
time interval between 2nd and 3rd frame exchange sequences after the enablement of EMLSR mode
Definition at line 1053 of file wifi-emlsr-test.cc.
Referenced by CheckBlockAck(), CheckQosFrames(), and StartTraffic().