6#include "ns3/ampdu-tag.h"
7#include "ns3/ap-wifi-mac.h"
8#include "ns3/boolean.h"
10#include "ns3/constant-position-mobility-model.h"
11#include "ns3/double.h"
12#include "ns3/eht-configuration.h"
13#include "ns3/he-phy.h"
14#include "ns3/he-ppdu.h"
15#include "ns3/interference-helper.h"
17#include "ns3/mobility-helper.h"
18#include "ns3/mpdu-aggregator.h"
19#include "ns3/multi-model-spectrum-channel.h"
20#include "ns3/nist-error-rate-model.h"
21#include "ns3/ofdm-ppdu.h"
22#include "ns3/packet-socket-address.h"
23#include "ns3/packet-socket-client.h"
24#include "ns3/packet-socket-helper.h"
25#include "ns3/packet-socket-server.h"
26#include "ns3/pointer.h"
27#include "ns3/rng-seed-manager.h"
28#include "ns3/simple-frame-capture-model.h"
29#include "ns3/single-model-spectrum-channel.h"
30#include "ns3/spectrum-wifi-helper.h"
31#include "ns3/spectrum-wifi-phy.h"
33#include "ns3/threshold-preamble-detection-model.h"
34#include "ns3/wifi-bandwidth-filter.h"
35#include "ns3/wifi-mac-header.h"
36#include "ns3/wifi-mpdu.h"
37#include "ns3/wifi-net-device.h"
38#include "ns3/wifi-phy-rx-trace-helper.h"
39#include "ns3/wifi-psdu.h"
40#include "ns3/wifi-spectrum-phy-interface.h"
41#include "ns3/wifi-spectrum-signal-parameters.h"
42#include "ns3/wifi-spectrum-value-helper.h"
43#include "ns3/wifi-utils.h"
44#include "ns3/yans-wifi-channel.h"
45#include "ns3/yans-wifi-phy.h"
46#include <ns3/propagation-loss-model.h>
82 void DoRun()
override;
117 uint64_t expectedPpduFailure,
118 uint64_t expectedMpduSuccess,
119 uint64_t expectedMpduFailure,
120 uint64_t expectedOverlaps,
121 uint64_t expectedNonOverlaps);
180 m_txA->SetDevice(devA);
181 m_txA->SetTxPowerStart(txPower);
182 m_txA->SetTxPowerEnd(txPower);
187 m_txB->SetDevice(devB);
188 m_txB->SetTxPowerStart(txPower);
189 m_txB->SetTxPowerEnd(txPower);
194 m_rx->SetDevice(devRx);
197 m_txA->SetInterferenceHelper(interferenceTxA);
199 m_txA->SetErrorRateModel(errorTxA);
202 m_txB->SetInterferenceHelper(interferenceTxB);
204 m_txB->SetErrorRateModel(errorTxB);
207 m_rx->SetInterferenceHelper(interferenceRx);
209 m_rx->SetErrorRateModel(errorRx);
211 m_txA->AddChannel(spectrumChannel);
212 m_txB->AddChannel(spectrumChannel);
213 m_rx->AddChannel(spectrumChannel);
224 nodeA->AddDevice(devA);
226 nodeB->AddDevice(devB);
238 preambleDetectionModel->SetAttribute(
"Threshold",
DoubleValue(4));
239 preambleDetectionModel->SetAttribute(
"MinimumRssi",
DoubleValue(-82));
240 m_rx->SetPreambleDetectionModel(preambleDetectionModel);
257 double txPower = rxPowerDbm;
258 tx_phy->SetTxPowerStart(txPower);
259 tx_phy->SetTxPowerEnd(txPower);
271 std::vector<Ptr<WifiMpdu>> mpduList;
289 tx_phy->Send(psdu, txVector);
297 double txPower = rxPowerDbm;
298 tx_phy->SetTxPowerStart(txPower);
299 tx_phy->SetTxPowerEnd(txPower);
311 std::vector<Ptr<WifiMpdu>> mpduList;
321 tx_phy->Send(psdu, txVector);
326 uint64_t expectedPpduFailure,
327 uint64_t expectedMpduSuccess,
328 uint64_t expectedMpduFailure,
329 uint64_t expectedOverlaps,
330 uint64_t expectedNonOverlaps)
336 "Didn't receive right number of successful PPDUs");
339 "Didn't receive right number of unsuccessful PPDUs");
342 "Didn't receive right number of successful MPDUs");
345 "Didn't receive right number of unsuccessful MPDUs");
348 "Didn't receive right number of overlapping PPDUs");
351 "Didn't receive right number of nonoverlapping PPDUs");
365 "Didn't receive right number of successful PPDUs");
368 "Didn't receive right number of unsuccessful PPDUs");
371 "Didn't receive right number of successful MPDUs");
374 "Didn't receive right number of unsuccessful MPDUs");
377 "Didn't receive right number of overlapping PPDUs");
380 "Didn't receive right number of nonoverlapping PPDUs");
389 "Didn't produce the right number of Records");
397 int64_t streamNumber = 1;
398 double rxPowerDbm = -80;
399 streamNumber +=
m_txA->AssignStreams(streamNumber);
400 streamNumber +=
m_txB->AssignStreams(streamNumber);
401 streamNumber +=
m_rx->AssignStreams(streamNumber);
867 void DoRun()
override;
931 uint64_t expectedPpduFailure,
932 uint64_t expectedMpduSuccess,
933 uint64_t expectedMpduFailure,
934 uint64_t expectedOverlaps,
935 uint64_t expectedNonOverlaps);
971 :
TestCase(
"Test for correct MLO operation")
984 devA->SetEhtConfiguration(ehtConfiguration);
988 m_tx0A->SetTxPowerStart(txPower);
989 m_tx0A->SetTxPowerEnd(txPower);
993 m_tx0B->SetTxPowerStart(txPower);
994 m_tx0B->SetTxPowerEnd(txPower);
999 devB->SetEhtConfiguration(ehtConfiguration);
1003 m_tx1A->SetTxPowerStart(txPower);
1004 m_tx1A->SetTxPowerEnd(txPower);
1008 m_tx1B->SetTxPowerStart(txPower);
1009 m_tx1B->SetTxPowerEnd(txPower);
1014 devRx->SetEhtConfiguration(ehtConfiguration);
1016 m_rxA->SetDevice(devRx);
1018 m_rxB->SetDevice(devRx);
1021 m_tx0A->SetInterferenceHelper(interferenceTx0A);
1023 m_tx0A->SetErrorRateModel(errorTx0A);
1026 m_tx0B->SetInterferenceHelper(interferenceTx0B);
1028 m_tx0B->SetErrorRateModel(errorTx0B);
1031 m_tx1A->SetInterferenceHelper(interferenceTx1A);
1033 m_tx1A->SetErrorRateModel(errorTx1A);
1036 m_tx1B->SetInterferenceHelper(interferenceTx1B);
1038 m_tx1B->SetErrorRateModel(errorTx1B);
1041 m_rxA->SetInterferenceHelper(interferenceRxA);
1043 m_rxA->SetErrorRateModel(errorRxA);
1046 m_rxB->SetInterferenceHelper(interferenceRxB);
1048 m_rxB->SetErrorRateModel(errorRxB);
1080 std::vector<Ptr<WifiPhy>> phys0;
1081 phys0.emplace_back(
m_tx0A);
1082 phys0.emplace_back(
m_tx0B);
1084 std::vector<Ptr<WifiPhy>> phys1;
1085 phys1.emplace_back(
m_tx1A);
1086 phys1.emplace_back(
m_tx1B);
1088 std::vector<Ptr<WifiPhy>> physRx;
1089 physRx.emplace_back(
m_rxA);
1090 physRx.emplace_back(
m_rxB);
1092 devA->SetPhys(phys0);
1093 nodeA->AddDevice(devA);
1095 devB->SetPhys(phys1);
1096 nodeB->AddDevice(devB);
1098 devRx->SetPhys(physRx);
1099 nodeRx->AddDevice(devRx);
1108 preambleDetectionModel->SetAttribute(
"Threshold",
DoubleValue(4));
1109 preambleDetectionModel->SetAttribute(
"MinimumRssi",
DoubleValue(-82));
1110 m_rxA->SetPreambleDetectionModel(preambleDetectionModel);
1111 m_rxB->SetPreambleDetectionModel(preambleDetectionModel);
1131 double txPower = rxPowerDbm;
1132 tx_phy->SetTxPowerStart(txPower);
1133 tx_phy->SetTxPowerEnd(txPower);
1145 std::vector<Ptr<WifiMpdu>> mpduList;
1163 tx_phy->Send(psdu, txVector);
1171 double txPower = rxPowerDbm;
1172 tx_phy->SetTxPowerStart(txPower);
1173 tx_phy->SetTxPowerEnd(txPower);
1186 std::vector<Ptr<WifiMpdu>> mpduList;
1196 tx_phy->Send(psdu, txVector);
1215 "Didn't receive right number of successful PPDUs");
1218 "Didn't receive right number of unsuccessful PPDUs");
1221 "Didn't receive right number of successful MPDUs");
1224 "Didn't receive right number of unsuccessful MPDUs");
1227 "Didn't receive right number of overlapping PPDUs");
1230 "Didn't receive right number of nonoverlapping PPDUs");
1249 "Didn't receive right number of successful PPDUs");
1252 "Didn't receive right number of unsuccessful PPDUs");
1255 "Didn't receive right number of successful MPDUs");
1258 "Didn't receive right number of unsuccessful MPDUs");
1261 "Didn't receive right number of overlapping PPDUs");
1264 "Didn't receive right number of nonoverlapping PPDUs");
1277 "Didn't receive right number of successful PPDUs");
1280 "Didn't receive right number of unsuccessful PPDUs");
1283 "Didn't receive right number of successful MPDUs");
1286 "Didn't receive right number of unsuccessful MPDUs");
1289 "Didn't receive right number of overlapping PPDUs");
1292 "Didn't receive right number of nonoverlapping PPDUs");
1297 uint64_t expectedPpduFailure,
1298 uint64_t expectedMpduSuccess,
1299 uint64_t expectedMpduFailure,
1300 uint64_t expectedOverlaps,
1301 uint64_t expectedNonOverlaps)
1306 expectedPpduSuccess,
1307 "Didn't receive right number of successful PPDUs");
1309 expectedPpduFailure,
1310 "Didn't receive right number of unsuccessful PPDUs");
1312 expectedMpduSuccess,
1313 "Didn't receive right number of successful MPDUs");
1315 expectedMpduFailure,
1316 "Didn't receive right number of unsuccessful MPDUs");
1319 "Didn't receive right number of overlapping PPDUs");
1321 expectedNonOverlaps,
1322 "Didn't receive right number of nonoverlapping PPDUs");
1332 expectedRecordCount,
1333 "Didn't produce the right number of Records");
1341 int64_t streamNumber = 1;
1342 double rxPowerDbm = -80;
1343 streamNumber +=
m_tx0A->AssignStreams(streamNumber);
1344 streamNumber +=
m_tx0B->AssignStreams(streamNumber);
1345 streamNumber +=
m_tx1A->AssignStreams(streamNumber);
1346 streamNumber +=
m_tx1B->AssignStreams(streamNumber);
1347 streamNumber +=
m_rxA->AssignStreams(streamNumber);
1348 streamNumber +=
m_rxB->AssignStreams(streamNumber);
1700 void DoRun()
override;
1734 uint64_t expectedPpduFailure,
1735 uint64_t expectedMpduSuccess,
1736 uint64_t expectedMpduFailure,
1737 uint64_t expectedOverlaps,
1738 uint64_t expectedNonOverlaps);
1787 :
TestCase(
"Test for correct operation when using Yans")
1794 double txPower = 20;
1799 yansChannel->SetPropagationDelayModel(propDelay);
1800 yansChannel->SetPropagationLossModel(
propLoss);
1848 devA->SetPhy(
m_txA);
1849 nodeA->AddDevice(devA);
1850 devB->SetPhy(
m_txB);
1851 nodeB->AddDevice(devB);
1852 devRx->SetPhy(
m_rx);
1856 mobilityA->SetPosition(Vector(0.0, 0.0, 0.0));
1857 nodeA->AggregateObject(mobilityA);
1860 mobilityB->SetPosition(Vector(0.0, 0.0, 0.0));
1861 nodeB->AggregateObject(mobilityB);
1864 mobilityRx->SetPosition(Vector(0.0, 0.0, 0.0));
1875 preambleDetectionModel->SetAttribute(
"Threshold",
DoubleValue(4));
1876 preambleDetectionModel->SetAttribute(
"MinimumRssi",
DoubleValue(-82));
1906 std::vector<Ptr<WifiMpdu>> mpduList;
1926 tx_phy->GetOperatingChannel(),
1927 tx_phy->CalculateTxDuration(psdu->GetSize(), txVector, tx_phy->GetPhyBand()),
1932 tx_phy->StartTx(ppdu);
1952 std::vector<Ptr<WifiMpdu>> mpduList;
1965 tx_phy->GetOperatingChannel(),
1966 tx_phy->CalculateTxDuration(psdu->GetSize(), txVector, tx_phy->GetPhyBand()),
1971 tx_phy->StartTx(ppdu);
1976 uint64_t expectedPpduFailure,
1977 uint64_t expectedMpduSuccess,
1978 uint64_t expectedMpduFailure,
1979 uint64_t expectedOverlaps,
1980 uint64_t expectedNonOverlaps)
1985 expectedPpduSuccess,
1986 "Didn't receive right number of successful PPDUs");
1988 expectedPpduFailure,
1989 "Didn't receive right number of unsuccessful PPDUs");
1991 expectedMpduSuccess,
1992 "Didn't receive right number of successful MPDUs");
1994 expectedMpduFailure,
1995 "Didn't receive right number of unsuccessful MPDUs");
1998 "Didn't receive right number of overlapping PPDUs");
2000 expectedNonOverlaps,
2001 "Didn't receive right number of nonoverlapping PPDUs");
2016 "Didn't receive right number of successful PPDUs");
2019 "Didn't receive right number of unsuccessful PPDUs");
2022 "Didn't receive right number of successful MPDUs");
2025 "Didn't receive right number of unsuccessful MPDUs");
2028 "Didn't receive right number of overlapping PPDUs");
2031 "Didn't receive right number of nonoverlapping PPDUs");
2039 expectedRecordCount,
2040 "Didn't produce the right number of Records");
2048 int64_t streamNumber = 1;
2049 double rxPowerDbm = -80;
Implements a test case to evaluate the reception process of WiFi Physical Layer (PHY) frames (PPDU) w...
void SendPpduWithTwoMpdus(double rxPowerDbm, Mac48Address add1, Mac48Address add2, Ptr< ns3::SpectrumWifiPhy > tx_phy)
Sends a PPDU containing two MPDUs addressed to specific receivers.
TestWifiPhyRxTraceHelper(std::string test_name)
Constructs a TestWifiPhyRxTraceHelper instance with a given test name.
void DoRun() override
Implementation to actually run this TestCase.
Mac48Address wrongReceiver
The MAC address representing an incorrect receiver, used for testing.
WifiPhyRxTraceHelper m_rxTraceHelper
The helper being tested for tracking PHY reception events.
void CheckRecords(uint64_t expectedRecordCount)
Checks the statistics of PPDU and MPDU reception success and failure.
Mac48Address correctReceiver
The MAC address representing the correct receiver, used for testing.
Ptr< SpectrumWifiPhy > m_txB
The transmit function for node B.
std::map< ns3::Mac48Address, uint32_t > MacToNodeId
Maps MAC addresses to node IDs.
void DoSetup() override
Implementation to do any local setup required for this TestCase.
Ptr< Node > nodeRx
The receiving node.
void CheckAllStats(uint64_t expectedPpduSuccess, uint64_t expectedPpduFailure, uint64_t expectedMpduSuccess, uint64_t expectedMpduFailure, uint64_t expectedOverlaps, uint64_t expectedNonOverlaps)
Checks the statistics of PPDU and MPDU reception success and failure.
~TestWifiPhyRxTraceHelper() override=default
Destructor.
void DoTeardown() override
Implementation to do any local setup required for this TestCase.
void SendPpduWithOneMpdu(double rxPowerDbm, Mac48Address add1, Ptr< ns3::SpectrumWifiPhy > tx_phy)
Sends a PPDU containing one MPDU addressed to a specific receiver.
Ptr< SpectrumWifiPhy > m_txA
The transmit function for node A.
void CheckStats(WifiPhyTraceStatistics expectedStats, uint32_t nodeId, uint32_t deviceId, uint32_t linkId)
Checks the statistics of PPDU and MPDU reception success and failure.
Ptr< SpectrumWifiPhy > m_rx
The receive function for testing.
Implements a test case to evaluate the reception process of WiFi Physical Layer (PHY) frames (PPDU) c...
Ptr< SpectrumWifiPhy > m_tx1A
The transmit function for node 1, link A.
void CheckRecords(uint64_t expectedRecordCount)
Checks the statistics of PPDU and MPDU reception success and failure.
void CheckAllStats(uint64_t expectedPpduSuccess, uint64_t expectedPpduFailure, uint64_t expectedMpduSuccess, uint64_t expectedMpduFailure, uint64_t expectedOverlaps, uint64_t expectedNonOverlaps)
Checks the statistics of PPDU and MPDU reception success and failure in MLO scenarios.
WifiPhyRxTraceHelper m_rxTraceHelper
The helper being tested for tracking PHY reception events in MLO scenarios.
void DoTeardown() override
Implementation to do any local setup required for this TestCase.
void SendPpduWithTwoMpdus(double rxPowerDbm, Mac48Address add1, Mac48Address add2, Ptr< ns3::SpectrumWifiPhy > tx_phy)
Sends a PPDU containing two MPDUs addressed to specific receivers, simulating an MLO scenario.
TestWifiPhyRxTraceHelperMloStr()
Constructs a TestWifiPhyRxTraceHelperMloStr instance for MLO reception testing.
Ptr< SpectrumWifiPhy > m_rxA
The receive function for node 2, link A.
void DoRun() override
Implementation to actually run this TestCase.
void CheckStats(WifiPhyTraceStatistics expectedStats, uint32_t nodeId)
Checks the statistics of PPDU and MPDU reception success and failure.
Ptr< SpectrumWifiPhy > m_rxB
The receive function for node 2, link B.
Mac48Address correctReceiver
The MAC address representing the correct receiver, used for testing in MLO.
Ptr< SpectrumWifiPhy > m_tx1B
The transmit function for node 1, link B.
NodeContainer wifiNodes
All wifi nodes.
std::map< ns3::Mac48Address, uint32_t > MacToNodeId
Maps MAC addresses to node IDs for MLO test configuration.
Mac48Address wrongReceiver
The MAC address representing an incorrect receiver, used for testing in MLO.
void DoSetup() override
Implementation to do any local setup required for this TestCase.
Ptr< SpectrumWifiPhy > m_tx0A
The transmit function for node 0, link A.
void SendPpduWithOneMpdu(double rxPowerDbm, Mac48Address add1, Ptr< ns3::SpectrumWifiPhy > tx_phy)
Sends a PPDU containing one MPDU addressed to a specific receiver, within an MLO setup.
Ptr< SpectrumWifiPhy > m_tx0B
The transmit function for node 0, link B.
Implements a test case to evaluate the reception process of WiFi Physical Layer (PHY) frames (PPDU) w...
Ptr< YansWifiPhy > m_rx
The receive function for testing.
WifiPhyRxTraceHelper m_rxTraceHelper
The helper being tested for tracking PHY reception events.
void CheckStats(WifiPhyTraceStatistics expectedStats, uint32_t nodeId, uint32_t deviceId, uint32_t linkId)
Checks the statistics of PPDU and MPDU reception success and failure.
void DoRun() override
Implementation to actually run this TestCase.
void SendPpduWithTwoMpdus(double rxPowerDbm, Mac48Address add1, Mac48Address add2, Ptr< ns3::YansWifiPhy > tx_phy)
Sends a PPDU containing two MPDUs addressed to specific receivers.
Ptr< YansWifiPhy > m_txA
The transmit function for node A.
uint64_t m_uid
The unique identifier used for the PPDU in the test.
TestWifiPhyRxTraceHelperYans()
Constructs a TestWifiPhyRxTraceHelperYans instance for testing the trace helper with Yans.
void SendPpduWithOneMpdu(double rxPowerDbm, Mac48Address add1, Ptr< ns3::YansWifiPhy > tx_phy)
Sends a PPDU containing one MPDU addressed to a specific receiver.
void CheckRecords(uint64_t expectedRecordCount)
Checks the statistics of PPDU and MPDU reception success and failure.
Mac48Address wrongReceiver
The MAC address representing an incorrect receiver, used for testing.
std::map< ns3::Mac48Address, uint32_t > MacToNodeId
Maps MAC addresses to node IDs.
Mac48Address correctReceiver
The MAC address representing the correct receiver, used for testing.
Ptr< Node > nodeRx
The receiving node.
Ptr< YansWifiPhy > m_txB
The transmit function for node B.
void DoSetup() override
Implementation to do any local setup required for this TestCase.
void CheckAllStats(uint64_t expectedPpduSuccess, uint64_t expectedPpduFailure, uint64_t expectedMpduSuccess, uint64_t expectedMpduFailure, uint64_t expectedOverlaps, uint64_t expectedNonOverlaps)
Checks the statistics of PPDU and MPDU reception success and failure.
void DoTeardown() override
Implementation to do any local setup required for this TestCase.
Ptr< FixedRssLossModel > propLoss
The propagation loss model used to configure RSSI.
wifi PHY reception Test Suite
WifiPhyRxTraceHelperTestSuite()
This class can be used to hold variables of floating point type such as 'double' or 'float'.
static WifiMode GetHeMcs0()
Return MCS 0 from HE MCS values.
keep track of a set of node pointers.
void Add(const NodeContainer &nc)
Append the contents of another NodeContainer to the end of this container.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node.
void AggregateObject(Ptr< Object > other)
Aggregate two Objects together.
void Dispose()
Dispose of this Object.
Smart pointer class similar to boost::intrusive_ptr.
static void SetRun(uint64_t run)
Set the run number of simulation.
static void SetSeed(uint32_t seed)
Set the seed.
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
static void Run()
Run the simulation.
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
void SetTxPowerEnd(dBm_u end)
Sets the maximum available transmission power level.
void SetErrorRateModel(const Ptr< ErrorRateModel > model)
Sets the error rate model.
std::tuple< uint8_t, MHz_u, WifiPhyBand, uint8_t > ChannelTuple
Tuple identifying a segment of an operating channel.
void SetTxPowerStart(dBm_u start)
Sets the minimum available transmission power level.
virtual void ConfigureStandard(WifiStandard standard)
Configure the PHY-level parameters for different Wi-Fi standard.
virtual void SetDevice(const Ptr< WifiNetDevice > device)
Sets the device this PHY is associated with.
void SetOperatingChannel(const WifiPhyOperatingChannel &channel)
If the standard for this object has not been set yet, store the channel settings corresponding to the...
void SetPreambleDetectionModel(const Ptr< PreambleDetectionModel > preambleDetectionModel)
Sets the preamble detection model.
virtual int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
Assists in tracing and analyzing Wi-Fi Physical Layer (PHY) receptions.
const std::vector< WifiPpduRxRecord > & GetPpduRecords() const
Accesses a vector of saved and completed PPDU reception records.
void Reset()
Resets the current statistics, clearing all counts and PPDU records.
void Stop(Time stopTime)
Stops the collection of statistics at a specified time.
WifiPhyTraceStatistics GetStatistics() const
Retrieves current statistics of successful and failed data PPDUs and MPDUs receptions,...
void Enable(NodeContainer nodes)
Enables trace collection for all nodes and WifiNetDevices in the specified NodeContainer.
void Start(Time startTime)
Starts the collection of statistics from a specified start time.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
void SetChannel(const Ptr< YansWifiChannel > channel)
Set the YansWifiChannel this YansWifiPhy is to be connected to.
void SetInterferenceHelper(const Ptr< InterferenceHelper > helper) override
Sets the interference helper.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
Time NanoSeconds(uint64_t value)
Construct a Time in the indicated unit.
Time Seconds(double value)
Construct a Time in the indicated unit.
@ WIFI_PHY_BAND_2_4GHZ
The 2.4 GHz band.
@ WIFI_PHY_BAND_5GHZ
The 5 GHz band.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
constexpr FrequencyRange WIFI_SPECTRUM_5_GHZ
Identifier for the frequency range covering the wifi spectrum in the 5 GHz band.
constexpr FrequencyRange WIFI_SPECTRUM_2_4_GHZ
Identifier for the frequency range covering the wifi spectrum in the 2.4 GHz band.
Keeps track of PHY layer trace statistics.
uint64_t m_failedMpdus
Number of failed unicast data MPDU receptions.
uint64_t m_failedPpdus
Number of failed PPDU receptions (with unicast data).
uint64_t m_receivedPpdus
Number of successfully received PPDUs (with unicast data).
uint64_t m_receivedMpdus
Number of successfully received unicast data MPDUs.
uint64_t m_overlappingPpdus
Number of PPDUs that overlapped in time with at least one other PPDU.
uint64_t m_nonOverlappingPpdus
Number of PPDUs that did not overlap in time with any other PPDU.
static WifiPhyRxTraceHelperTestSuite wifiPhyRxTestSuite
the test suite