21 #include "ns3/wifi-net-device.h"
22 #include "ns3/yans-wifi-channel.h"
23 #include "ns3/adhoc-wifi-mac.h"
24 #include "ns3/yans-wifi-phy.h"
25 #include "ns3/parf-wifi-manager.h"
26 #include "ns3/propagation-delay-model.h"
27 #include "ns3/propagation-loss-model.h"
28 #include "ns3/error-rate-model.h"
29 #include "ns3/yans-error-rate-model.h"
30 #include "ns3/constant-position-mobility-model.h"
32 #include "ns3/simulator.h"
34 #include "ns3/object-factory.h"
35 #include "ns3/dca-txop.h"
36 #include "ns3/mac-rx-middle.h"
37 #include "ns3/pointer.h"
38 #include "ns3/rng-seed-manager.h"
39 #include "ns3/edca-txop-n.h"
40 #include "ns3/config.h"
41 #include "ns3/boolean.h"
50 virtual void DoRun (
void);
88 phy->SetChannel (channel);
90 phy->SetMobility (mobility);
96 phy->SetNTxPower (18);
97 phy->SetTxPowerStart (0);
98 phy->SetTxPowerEnd (17);
109 mac->SetAddress (Mac48Address::Allocate ());
112 dev->SetRemoteStationManager (manager);
130 manager->SetAttribute (
"SuccessThreshold",
UintegerValue (10));
146 dev->
Send (p, remoteAddress, 1);
153 WifiTxVector txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
166 for (
int i = 0; i < 10; i++)
168 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
171 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
184 manager->ReportDataFailed (remoteAddress, &packetHeader);
186 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
199 for (
int i = 0; i < 7; i++)
201 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
202 manager->ReportDataFailed (remoteAddress, &packetHeader);
204 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
206 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
219 manager->ReportDataFailed (remoteAddress, &packetHeader);
221 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
234 manager->ReportDataFailed (remoteAddress, &packetHeader);
235 manager->ReportDataFailed (remoteAddress, &packetHeader);
237 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
250 for (
int i = 0; i < 10; i++)
252 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
255 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
268 manager->ReportDataFailed (remoteAddress, &packetHeader);
270 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
283 for (
int i = 0; i < 10; i++)
285 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
288 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
301 for (
int i = 0; i < 10; i++)
303 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
306 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
319 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
321 for (
int i = 0; i < 2; i++)
323 manager->ReportDataFailed (remoteAddress,&packetHeader);
326 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
333 Simulator::Destroy ();
348 manager->SetAttribute (
"SuccessThreshold2",
UintegerValue (10));
366 dev->
Send (p, remoteAddress, 1);
373 WifiTxVector txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
387 for (
int i = 0; i < 3; i++)
389 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
392 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
405 manager->ReportDataFailed (remoteAddress, &packetHeader);
407 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
421 for (
int i = 0; i < 10; i++)
423 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
426 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
440 for (
int i = 0; i < 3; i++)
442 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
445 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
458 for (
int i = 0; i < 16 * 3; i++)
460 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
463 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
476 manager->ReportDataFailed (remoteAddress,&packetHeader);
478 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
491 for (
int i = 0; i < 16; i++)
493 manager->ReportDataFailed (remoteAddress,&packetHeader);
496 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
510 manager->ReportDataFailed (remoteAddress,&packetHeader);
512 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
525 for (
int i = 0; i < 3; i++)
527 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
530 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
545 for (
int i = 0; i < 9 * 3; i++)
547 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
550 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
557 for (
int i = 0; i < 3; i++)
559 manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
562 txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
569 Simulator::Destroy ();
588 :
TestSuite (
"power-rate-adaptation-wifi", UNIT)
PowerRateAdaptationTest()
PowerRateAdaptationTestSuite()
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
bool IsShortGuardInterval(void) const
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
uint8_t GetTxPowerLevel(void) const
Ptr< WifiRemoteStationManager > GetRemoteStationManager(void) const
void AddTestCase(TestCase *testCase, enum TestDuration duration)
Add an individual child TestCase to this test suite.
static PowerRateAdaptationTestSuite g_powerRateAdaptationTestSuite
Ptr< Object > Create(void) const
Create an Object instance of the configured TypeId.
Hold an unsigned integer type.
#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.
uint32_t GetChannelWidth(void) const
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node.
hold a list of per-remote-station state.
OFDM PHY for the 5 GHz band (Clause 17)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber)
uint64_t GetDataRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const
Ptr< Node > ConfigureNode()
Instantiate subclasses of ns3::Object.
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
virtual void DoRun(void)
Implementation to actually run this TestCase.
WifiMode GetMode(void) const
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.