20#include "ns3/adhoc-wifi-mac.h"
21#include "ns3/constant-position-mobility-model.h"
22#include "ns3/fcfs-wifi-queue-scheduler.h"
23#include "ns3/frame-exchange-manager.h"
24#include "ns3/interference-helper.h"
26#include "ns3/pointer.h"
27#include "ns3/simulator.h"
28#include "ns3/string.h"
30#include "ns3/wifi-default-ack-manager.h"
31#include "ns3/wifi-default-protection-manager.h"
32#include "ns3/wifi-net-device.h"
33#include "ns3/yans-wifi-channel.h"
34#include "ns3/yans-wifi-phy.h"
49 void DoRun()
override;
97 phy->SetInterferenceHelper(interferenceHelper);
99 phy->SetChannel(channel);
101 phy->SetMobility(mobility);
107 phy->SetNTxPower(18);
108 phy->SetTxPowerStart(0);
109 phy->SetTxPowerEnd(17);
115 dev->SetRemoteStationManager(manager);
120 auto mac = CreateObjectWithAttributes<AdhocWifiMac>(
126 mac->SetChannelAccessManagers({CreateObject<ChannelAccessManager>()});
127 mac->SetFrameExchangeManagers({CreateObject<FrameExchangeManager>()});
129 mac->SetMacQueueScheduler(CreateObject<FcfsWifiQueueScheduler>());
133 protectionManager->SetWifiMac(mac);
134 fem->SetProtectionManager(protectionManager);
137 ackManager->SetWifiMac(mac);
138 fem->SetAckManager(ackManager);
154 manager->SetAttribute(
"AttemptThreshold",
UintegerValue(15));
155 manager->SetAttribute(
"SuccessThreshold",
UintegerValue(10));
162 packetHeader.
SetAddr1(remoteAddress);
173 dev->Send(p, remoteAddress, 1);
181 manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
187 "PARF: Initial data rate wrong");
196 for (
int i = 0; i < 10; i++)
198 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
201 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
207 "PARF: Incorrect vale of data rate");
216 manager->ReportDataFailed(mpdu);
218 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
224 "PARF: Incorrect vale of data rate");
233 for (
int i = 0; i < 7; i++)
235 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
236 manager->ReportDataFailed(mpdu);
238 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
240 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
246 "PARF: Incorrect vale of data rate");
255 manager->ReportDataFailed(mpdu);
257 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
263 "PARF: Incorrect vale of data rate");
272 manager->ReportDataFailed(mpdu);
273 manager->ReportDataFailed(mpdu);
275 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
281 "PARF: Incorrect vale of data rate");
290 for (
int i = 0; i < 10; i++)
292 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
295 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
301 "PARF: Incorrect vale of data rate");
310 manager->ReportDataFailed(mpdu);
312 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
318 "PARF: Incorrect vale of data rate");
327 for (
int i = 0; i < 10; i++)
329 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
332 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
338 "PARF: Incorrect vale of data rate");
347 for (
int i = 0; i < 10; i++)
349 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
352 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
358 "PARF: Incorrect vale of data rate");
367 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
369 for (
int i = 0; i < 2; i++)
371 manager->ReportDataFailed(mpdu);
374 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
380 "PARF: Incorrect vale of data rate");
397 manager->SetAttribute(
"SuccessThreshold1",
UintegerValue(3));
398 manager->SetAttribute(
"SuccessThreshold2",
UintegerValue(10));
407 packetHeader.
SetAddr1(remoteAddress);
418 dev->Send(p, remoteAddress, 1);
426 manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
432 "APARF: Initial data rate wrong");
442 for (
int i = 0; i < 3; i++)
444 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
447 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
453 "APARF: Incorrect vale of data rate");
462 manager->ReportDataFailed(mpdu);
464 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
470 "APARF: Incorrect vale of data rate");
479 for (
int i = 0; i < 10; i++)
481 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
484 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
490 "APARF: Incorrect vale of data rate");
500 for (
int i = 0; i < 3; i++)
502 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
505 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
511 "APARF: Incorrect vale of data rate");
520 for (
int i = 0; i < 16 * 3; i++)
522 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
525 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
531 "APARF: Incorrect vale of data rate");
540 manager->ReportDataFailed(mpdu);
542 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
548 "Incorrect vale of data rate");
557 for (
int i = 0; i < 16; i++)
559 manager->ReportDataFailed(mpdu);
562 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
568 "APARF: Incorrect vale of data rate");
578 manager->ReportDataFailed(mpdu);
580 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
586 "Incorrect vale of data rate");
595 for (
int i = 0; i < 3; i++)
597 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
600 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
606 "APARF: Incorrect vale of data rate");
617 for (
int i = 0; i < 9 * 3; i++)
619 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
622 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
628 "APARF: Incorrect vale of data rate");
631 for (
int i = 0; i < 3; i++)
633 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
636 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
642 "APARF: Incorrect vale of data rate");
675 packetHeader.
SetAddr1(remoteAddress);
686 dev->Send(p, remoteAddress, 1);
720 manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
727 "RRPAA: Initial data rate wrong");
740 for (
int i = 0; i < 6; i++)
742 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
745 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
752 "RRPAA: Incorrect vale of data rate");
758 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
760 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
767 "RRPAA: Incorrect vale of data rate");
776 for (
int i = 0; i < 4; i++)
778 manager->ReportDataFailed(mpdu);
781 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
788 "RRPAA: Incorrect vale of data rate");
791 manager->ReportDataFailed(mpdu);
793 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
800 "RRPAA: Incorrect vale of data rate");
809 for (
int i = 0; i < 7; i++)
811 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
814 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
821 "RRPAA: Incorrect vale of data rate");
824 for (
int i = 0; i < 10; i++)
826 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
829 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
836 "RRPAA: Incorrect vale of data rate");
839 for (
int i = 0; i < 13; i++)
841 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
844 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
851 "RRPAA: Incorrect vale of data rate");
854 for (
int i = 0; i < 19; i++)
856 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
859 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
866 "RRPAA: Incorrect vale of data rate");
869 for (
int i = 0; i < 23; i++)
871 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
874 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
881 "RRPAA: Incorrect vale of data rate");
884 for (
int i = 0; i < 33; i++)
886 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
889 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
896 "RRPAA: Incorrect vale of data rate");
899 for (
int i = 0; i < 43; i++)
901 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
904 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
911 "RRPAA: Incorrect vale of data rate");
922 for (
int i = 0; i < 49; i++)
924 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
927 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
934 "RRPAA: Incorrect vale of data rate");
937 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
939 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
946 "RRPAA: Incorrect vale of data rate");
956 for (
int i = 0; i < 16 * 50; i++)
958 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
961 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
968 "RRPAA: Incorrect vale of data rate");
977 for (
int i = 0; i < 6; i++)
979 manager->ReportDataFailed(mpdu);
982 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
989 "RRPAA: Incorrect vale of data rate");
998 for (
int i = 0; i < 16 * 6; i++)
1000 manager->ReportDataFailed(mpdu);
1003 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
1010 "RRPAA: Incorrect vale of data rate");
1019 for (
int i = 0; i < 6; i++)
1021 manager->ReportDataFailed(mpdu);
1024 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
1031 "RRPAA: Incorrect vale of data rate");
1038 for (
int i = 0; i < 11; i++)
1040 manager->ReportDataFailed(mpdu);
1043 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
1050 "RRPAA: Incorrect vale of data rate");
1061 for (
int i = 0; i < 25; i++)
1063 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
1066 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
1073 "RRPAA: Incorrect vale of data rate");
1076 for (
int i = 0; i < 5; i++)
1078 manager->ReportDataFailed(mpdu);
1081 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
1088 "RRPAA: Incorrect vale of data rate");
1091 for (
int i = 0; i < 5; i++)
1093 manager->ReportDataFailed(mpdu);
1096 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
1103 "RRPAA: Incorrect vale of data rate");
1106 for (
int i = 0; i < 25; i++)
1108 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
1111 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
1118 "RRPAA: Incorrect vale of data rate");
1127 for (
int i = 0; i < 16; i++)
1129 for (
int j = 0; j < 25; j++)
1131 manager->ReportDataOk(mpdu, 0, ackMode, 0, txVector);
1134 for (
int j = 0; j < 5; j++)
1136 manager->ReportDataFailed(mpdu);
1140 txVector = manager->GetDataTxVector(packetHeader, dev->GetPhy()->GetChannelWidth());
1147 "RRPAA: Incorrect vale of data rate");
Power Rate Adaptation Test.
void TestParf()
Test parf function.
void TestAparf()
Test aparf function.
Ptr< Node > ConfigureNode()
Configure nde function.
PowerRateAdaptationTest()
void DoRun() override
Implementation to actually run this TestCase.
void TestRrpaa()
Test rrpaa function.
ObjectFactory m_manager
manager
Power Rate Adaptation Test Suite.
PowerRateAdaptationTestSuite()
AttributeValue implementation for Boolean.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
static Mac48Address Allocate()
Allocate a new Mac48Address.
Instantiate subclasses of ns3::Object.
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
AttributeValue implementation for Pointer.
Smart pointer class similar to boost::intrusive_ptr.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
static void Run()
Run the simulation.
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Hold variables of type string.
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Hold an unsigned integer type.
represent a single transmission mode
uint64_t GetDataRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
hold a list of per-remote-station state.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
uint16_t GetGuardInterval() const
WifiMode GetMode(uint16_t staId=SU_STA_ID) const
If this TX vector is associated with an SU PPDU, return the selected payload transmission mode.
uint8_t GetTxPowerLevel() const
uint16_t GetChannelWidth() const
#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 Seconds(double value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static constexpr uint8_t SINGLE_LINK_OP_ID
Link ID for single link operations (helps tracking places where correct link ID is to be used to supp...
static PowerRateAdaptationTestSuite g_powerRateAdaptationTestSuite
the test suite