A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
EmlNotificationExchangeTest Class Reference

Test the exchange of EML Operating Mode Notification frames. More...

+ Inheritance diagram for EmlNotificationExchangeTest:
+ Collaboration diagram for EmlNotificationExchangeTest:

Public Member Functions

 EmlNotificationExchangeTest (const std::set< uint8_t > &linksToEnableEmlsrOn, Time transitionTimeout)
 Constructor.
 
 ~EmlNotificationExchangeTest () 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
 
TestCaseoperator= (const TestCase &)=delete
 

Protected Member Functions

void CheckEmlCapabilitiesInAssocReq (Ptr< const WifiMpdu > mpdu, const WifiTxVector &txVector, uint8_t linkId)
 Check the content of the EML Capabilities subfield of the Multi-Link Element included in the Association Request frame sent by the non-AP MLD.
 
void CheckEmlCapabilitiesInAssocResp (Ptr< const WifiMpdu > mpdu, const WifiTxVector &txVector, uint8_t linkId)
 Check the content of the EML Capabilities subfield of the Multi-Link Element included in the Association Response frame sent by the AP MLD to the EMLSR client.
 
void CheckEmlNotification (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, uint8_t linkId)
 Check the content of a received EML Operating Mode Notification frame.
 
void CheckEmlsrLinks ()
 Check that the EMLSR mode has been enabled on the expected EMLSR links.
 
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.
 
void TxDropped (WifiMacDropReason reason, Ptr< const WifiMpdu > mpdu)
 Callback invoked when the non-AP MLD drops the given MPDU for the given reason.
 
void TxOk (Ptr< const WifiMpdu > mpdu)
 Callback invoked when the non-AP MLD receives the acknowledgment for a transmitted MPDU.
 
- Protected Member Functions inherited from EmlsrOperationsTestBase
void DoSetup () override
 Implementation to do any local setup required for this TestCase.
 
Ptr< PacketSocketClientGetApplication (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.
 
TestCaseGetParent () 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 Attributes

std::optional< uint8_t > m_assocLinkId
 ID of the link used to establish association.
 
std::size_t m_checkEmlsrLinksCount
 counter for the number of times CheckEmlsrLinks is called (should be two: when the transition timeout expires and when the EML Notification response from the AP MLD is received
 
std::size_t m_emlNotificationDroppedCount
 counter for the number of times the EML Notification frame sent by the non-AP MLD has been dropped due to max retry limit
 
Ptr< ListErrorModelm_errorModel
 error rate model to corrupt packets at AP MLD
 
std::list< uint64_t > m_uidList
 list of UIDs of packets to corrupt
 

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< ApWifiMacm_apMac
 AP wifi MAC.
 
std::vector< PacketSocketAddressm_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< Timem_paddingDelay
 Padding Delay advertised by the non-AP MLD.
 
std::vector< Ptr< StaWifiMac > > m_staMacs
 MACs of the non-AP MLDs.
 
std::vector< Timem_transitionDelay
 Transition Delay advertised by the non-AP MLD.
 
Time m_transitionTimeout {MicroSeconds(128)}
 Transition Timeout advertised by the AP MLD.
 
std::vector< FrameInfom_txPsdus
 transmitted PSDUs
 
std::vector< PacketSocketAddressm_ulSockets
 packet socket address for UL traffic
 

Detailed Description

Test the exchange of EML Operating Mode Notification frames.

This test considers an AP MLD and a non-AP MLD with EMLSR activated. Upon association, the non-AP MLD sends an EML Operating Mode Notification frame, which is however corrupted by using a post reception error model (installed on the AP MLD). We keep corrupting the EML Notification frames transmitted by the non-AP MLD until the frame is dropped due to exceeded max retry limit. It is checked that:

  • the Association Request contains a Multi-Link Element including an EML Capabilities field that contains the expected values for Padding Delay and Transition Delay
  • the Association Response contains a Multi-Link Element including an EML Capabilities field that contains the expected value for Transition Timeout
  • all EML Notification frames contain the expected values for EMLSR Mode, EMLMR Mode and Link Bitmap fields and are transmitted on the link used for association
  • the correct EMLSR link set is stored by the EMLSR Manager, both when the transition timeout expires and when an EML Notification response is received from the AP MLD (thus, the correct EMLSR link set is stored after whichever of the two events occur first)

Definition at line 534 of file wifi-emlsr-test.cc.

Constructor & Destructor Documentation

◆ EmlNotificationExchangeTest()

EmlNotificationExchangeTest::EmlNotificationExchangeTest ( const std::set< uint8_t > &  linksToEnableEmlsrOn,
Time  transitionTimeout 
)

Constructor.

Parameters
linksToEnableEmlsrOnIDs of links on which EMLSR mode should be enabled
transitionTimeoutthe Transition Timeout advertised by the AP MLD

Definition at line 620 of file wifi-emlsr-test.cc.

References EmlsrOperationsTestBase::m_duration, EmlsrOperationsTestBase::m_linksToEnableEmlsrOn, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, EmlsrOperationsTestBase::m_transitionTimeout, and ns3::Seconds().

+ Here is the call graph for this function:

◆ ~EmlNotificationExchangeTest()

EmlNotificationExchangeTest::~EmlNotificationExchangeTest ( )
overridedefault

Member Function Documentation

◆ CheckEmlCapabilitiesInAssocReq()

void EmlNotificationExchangeTest::CheckEmlCapabilitiesInAssocReq ( Ptr< const WifiMpdu mpdu,
const WifiTxVector txVector,
uint8_t  linkId 
)
protected

Check the content of the EML Capabilities subfield of the Multi-Link Element included in the Association Request frame sent by the non-AP MLD.

Parameters
mpduthe MPDU containing the Association Request frame
txVectorthe TXVECTOR used to transmit the frame
linkIdthe ID of the link on which the frame was transmitted

Definition at line 698 of file wifi-emlsr-test.cc.

References EmlsrOperationsTestBase::m_paddingDelay, EmlsrOperationsTestBase::m_transitionDelay, and NS_TEST_ASSERT_MSG_EQ.

Referenced by Transmit().

+ Here is the caller graph for this function:

◆ CheckEmlCapabilitiesInAssocResp()

void EmlNotificationExchangeTest::CheckEmlCapabilitiesInAssocResp ( Ptr< const WifiMpdu mpdu,
const WifiTxVector txVector,
uint8_t  linkId 
)
protected

Check the content of the EML Capabilities subfield of the Multi-Link Element included in the Association Response frame sent by the AP MLD to the EMLSR client.

Parameters
mpduthe MPDU containing the Association Response frame
txVectorthe TXVECTOR used to transmit the frame
linkIdthe ID of the link on which the frame was transmitted

Definition at line 723 of file wifi-emlsr-test.cc.

References EmlsrOperationsTestBase::m_staMacs, EmlsrOperationsTestBase::m_transitionTimeout, and NS_TEST_ASSERT_MSG_EQ.

Referenced by Transmit().

+ Here is the caller graph for this function:

◆ CheckEmlNotification()

void EmlNotificationExchangeTest::CheckEmlNotification ( Ptr< const WifiPsdu psdu,
const WifiTxVector txVector,
uint8_t  linkId 
)
protected

◆ CheckEmlsrLinks()

void EmlNotificationExchangeTest::CheckEmlsrLinks ( )
protected

Check that the EMLSR mode has been enabled on the expected EMLSR links.

Definition at line 862 of file wifi-emlsr-test.cc.

References m_checkEmlsrLinksCount, EmlsrOperationsTestBase::m_linksToEnableEmlsrOn, EmlsrOperationsTestBase::m_staMacs, and NS_TEST_EXPECT_MSG_EQ.

Referenced by CheckEmlNotification(), and TxOk().

+ Here is the caller graph for this function:

◆ DoRun()

void EmlNotificationExchangeTest::DoRun ( )
overrideprotectedvirtual

Implementation to actually run this TestCase.

Subclasses should override this method to conduct their tests.

Implements ns3::TestCase.

Definition at line 880 of file wifi-emlsr-test.cc.

References ns3::Simulator::Destroy(), m_checkEmlsrLinksCount, EmlsrOperationsTestBase::m_duration, m_emlNotificationDroppedCount, NS_TEST_EXPECT_MSG_EQ, ns3::Simulator::Run(), and ns3::Simulator::Stop().

+ Here is the call graph for this function:

◆ DoSetup()

void EmlNotificationExchangeTest::DoSetup ( )
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 635 of file wifi-emlsr-test.cc.

References EmlsrOperationsTestBase::DoSetup(), ns3::WifiMac::GetNLinks(), ns3::WifiMac::GetWifiPhy(), EmlsrOperationsTestBase::m_apMac, m_errorModel, EmlsrOperationsTestBase::m_staMacs, ns3::MakeCallback(), ns3::WifiPhy::SetPostReceptionErrorModel(), TxDropped(), and TxOk().

+ Here is the call graph for this function:

◆ Transmit()

void EmlNotificationExchangeTest::Transmit ( uint8_t  linkId,
std::string  context,
WifiConstPsduMap  psduMap,
WifiTxVector  txVector,
double  txPowerW 
)
overrideprotectedvirtual

◆ TxDropped()

void EmlNotificationExchangeTest::TxDropped ( WifiMacDropReason  reason,
Ptr< const WifiMpdu mpdu 
)
protected

Callback invoked when the non-AP MLD drops the given MPDU for the given reason.

Parameters
reasonthe reason why the MPDU was dropped
mpduthe dropped MPDU

Definition at line 843 of file wifi-emlsr-test.cc.

References m_emlNotificationDroppedCount, ns3::WifiActionHeader::Peek(), ns3::WifiActionHeader::PROTECTED_EHT, and ns3::WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION.

Referenced by DoSetup().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ TxOk()

void EmlNotificationExchangeTest::TxOk ( Ptr< const WifiMpdu mpdu)
protected

Callback invoked when the non-AP MLD receives the acknowledgment for a transmitted MPDU.

Parameters
mpduthe acknowledged MPDU

Definition at line 822 of file wifi-emlsr-test.cc.

References CheckEmlsrLinks(), EmlsrOperationsTestBase::m_transitionTimeout, ns3::NanoSeconds(), ns3::WifiActionHeader::Peek(), ns3::WifiActionHeader::PROTECTED_EHT, ns3::WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION, and ns3::Simulator::Schedule().

Referenced by DoSetup().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ m_assocLinkId

std::optional<uint8_t> EmlNotificationExchangeTest::m_assocLinkId
private

ID of the link used to establish association.

Definition at line 608 of file wifi-emlsr-test.cc.

Referenced by CheckEmlNotification(), and Transmit().

◆ m_checkEmlsrLinksCount

std::size_t EmlNotificationExchangeTest::m_checkEmlsrLinksCount
private

counter for the number of times CheckEmlsrLinks is called (should be two: when the transition timeout expires and when the EML Notification response from the AP MLD is received

Definition at line 609 of file wifi-emlsr-test.cc.

Referenced by CheckEmlsrLinks(), and DoRun().

◆ m_emlNotificationDroppedCount

std::size_t EmlNotificationExchangeTest::m_emlNotificationDroppedCount
private

counter for the number of times the EML Notification frame sent by the non-AP MLD has been dropped due to max retry limit

Definition at line 613 of file wifi-emlsr-test.cc.

Referenced by DoRun(), Transmit(), and TxDropped().

◆ m_errorModel

Ptr<ListErrorModel> EmlNotificationExchangeTest::m_errorModel
private

error rate model to corrupt packets at AP MLD

Definition at line 616 of file wifi-emlsr-test.cc.

Referenced by DoSetup(), and Transmit().

◆ m_uidList

std::list<uint64_t> EmlNotificationExchangeTest::m_uidList
private

list of UIDs of packets to corrupt

Definition at line 617 of file wifi-emlsr-test.cc.

Referenced by Transmit().


The documentation for this class was generated from the following file: