22 #include "ns3/wifi-net-device.h" 23 #include "ns3/yans-wifi-channel.h" 24 #include "ns3/yans-wifi-phy.h" 25 #include "ns3/adhoc-wifi-mac.h" 26 #include "ns3/constant-position-mobility-model.h" 27 #include "ns3/simulator.h" 29 #include "ns3/frame-exchange-manager.h" 30 #include "ns3/wifi-default-protection-manager.h" 31 #include "ns3/wifi-default-ack-manager.h" 46 void DoRun (
void)
override;
103 phy->SetDevice (dev);
110 phy->SetNTxPower (18);
111 phy->SetTxPowerStart (0);
112 phy->SetTxPowerEnd (17);
123 mac->SetAddress (Mac48Address::Allocate ());
126 dev->SetRemoteStationManager (manager);
127 node->AddDevice (dev);
144 manager->SetAttribute (
"SuccessThreshold",
UintegerValue (10));
151 packetHeader.
SetAddr1 (remoteAddress);
162 dev->
Send (p, remoteAddress, 1);
169 WifiTxVector txVector = manager->GetDataTxVector (packetHeader);
182 for (
int i = 0; i < 10; i++)
184 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
187 txVector = manager->GetDataTxVector (packetHeader);
200 manager->ReportDataFailed (mpdu);
202 txVector = manager->GetDataTxVector (packetHeader);
215 for (
int i = 0; i < 7; i++)
217 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
218 manager->ReportDataFailed (mpdu);
220 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
222 txVector = manager->GetDataTxVector (packetHeader);
235 manager->ReportDataFailed (mpdu);
237 txVector = manager->GetDataTxVector (packetHeader);
250 manager->ReportDataFailed (mpdu);
251 manager->ReportDataFailed (mpdu);
253 txVector = manager->GetDataTxVector (packetHeader);
266 for (
int i = 0; i < 10; i++)
268 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
271 txVector = manager->GetDataTxVector (packetHeader);
284 manager->ReportDataFailed (mpdu);
286 txVector = manager->GetDataTxVector (packetHeader);
299 for (
int i = 0; i < 10; i++)
301 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
304 txVector = manager->GetDataTxVector (packetHeader);
317 for (
int i = 0; i < 10; i++)
319 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
322 txVector = manager->GetDataTxVector (packetHeader);
335 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
337 for (
int i = 0; i < 2; i++)
339 manager->ReportDataFailed (mpdu);
342 txVector = manager->GetDataTxVector (packetHeader);
349 Simulator::Destroy ();
364 manager->SetAttribute (
"SuccessThreshold2",
UintegerValue (10));
373 packetHeader.
SetAddr1 (remoteAddress);
384 dev->
Send (p, remoteAddress, 1);
391 WifiTxVector txVector = manager->GetDataTxVector (packetHeader);
405 for (
int i = 0; i < 3; i++)
407 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
410 txVector = manager->GetDataTxVector (packetHeader);
423 manager->ReportDataFailed (mpdu);
425 txVector = manager->GetDataTxVector (packetHeader);
439 for (
int i = 0; i < 10; i++)
441 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
444 txVector = manager->GetDataTxVector (packetHeader);
458 for (
int i = 0; i < 3; i++)
460 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
463 txVector = manager->GetDataTxVector (packetHeader);
476 for (
int i = 0; i < 16 * 3; i++)
478 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
481 txVector = manager->GetDataTxVector (packetHeader);
494 manager->ReportDataFailed (mpdu);
496 txVector = manager->GetDataTxVector (packetHeader);
509 for (
int i = 0; i < 16; i++)
511 manager->ReportDataFailed (mpdu);
514 txVector = manager->GetDataTxVector (packetHeader);
528 manager->ReportDataFailed (mpdu);
530 txVector = manager->GetDataTxVector (packetHeader);
543 for (
int i = 0; i < 3; i++)
545 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
548 txVector = manager->GetDataTxVector (packetHeader);
563 for (
int i = 0; i < 9 * 3; i++)
565 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
568 txVector = manager->GetDataTxVector (packetHeader);
575 for (
int i = 0; i < 3; i++)
577 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
580 txVector = manager->GetDataTxVector (packetHeader);
587 Simulator::Destroy ();
602 manager->SetAttribute (
"Alpha",
DoubleValue (1.25));
604 manager->SetAttribute (
"Tau",
DoubleValue (0.015));
617 packetHeader.
SetAddr1 (remoteAddress);
628 dev->
Send (p, remoteAddress, 1);
661 WifiTxVector txVector = manager->GetDataTxVector (packetHeader);
678 for (
int i = 0; i < 6; i++)
680 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
683 txVector = manager->GetDataTxVector (packetHeader);
693 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
695 txVector = manager->GetDataTxVector (packetHeader);
708 for (
int i = 0; i < 4; i++)
710 manager->ReportDataFailed (mpdu);
713 txVector = manager->GetDataTxVector (packetHeader);
720 manager->ReportDataFailed (mpdu);
722 txVector = manager->GetDataTxVector (packetHeader);
735 for (
int i = 0; i < 7; i++)
737 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
740 txVector = manager->GetDataTxVector (packetHeader);
747 for (
int i = 0; i < 10; i++)
749 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
752 txVector = manager->GetDataTxVector (packetHeader);
759 for (
int i = 0; i < 13; i++)
761 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
764 txVector = manager->GetDataTxVector (packetHeader);
771 for (
int i = 0; i < 19; i++)
773 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
776 txVector = manager->GetDataTxVector (packetHeader);
783 for (
int i = 0; i < 23; i++)
785 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
788 txVector = manager->GetDataTxVector (packetHeader);
795 for (
int i = 0; i < 33; i++)
797 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
800 txVector = manager->GetDataTxVector (packetHeader);
807 for (
int i = 0; i < 43; i++)
809 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
812 txVector = manager->GetDataTxVector (packetHeader);
827 for (
int i = 0; i < 49; i++)
829 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
832 txVector = manager->GetDataTxVector (packetHeader);
839 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
841 txVector = manager->GetDataTxVector (packetHeader);
855 for (
int i = 0; i < 16 * 50; i++)
857 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
860 txVector = manager->GetDataTxVector (packetHeader);
873 for (
int i = 0; i < 6; i++)
875 manager->ReportDataFailed (mpdu);
878 txVector = manager->GetDataTxVector (packetHeader);
891 for (
int i = 0; i < 16 * 6; i++)
893 manager->ReportDataFailed (mpdu);
896 txVector = manager->GetDataTxVector (packetHeader);
909 for (
int i = 0; i < 6; i++)
911 manager->ReportDataFailed (mpdu);
914 txVector = manager->GetDataTxVector (packetHeader);
925 for (
int i = 0; i < 11; i++)
927 manager->ReportDataFailed (mpdu);
930 txVector = manager->GetDataTxVector (packetHeader);
945 for (
int i = 0; i < 25; i++)
947 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
950 txVector = manager->GetDataTxVector (packetHeader);
957 for (
int i = 0; i < 5; i++)
959 manager->ReportDataFailed (mpdu);
962 txVector = manager->GetDataTxVector (packetHeader);
969 for (
int i = 0; i < 5; i++)
971 manager->ReportDataFailed (mpdu);
974 txVector = manager->GetDataTxVector (packetHeader);
981 for (
int i = 0; i < 25; i++)
983 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
986 txVector = manager->GetDataTxVector (packetHeader);
999 for (
int i = 0; i < 16; i++)
1001 for (
int j = 0; j < 25; j++)
1003 manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
1006 for (
int j = 0; j < 5; j++)
1008 manager->ReportDataFailed (mpdu);
1012 txVector = manager->GetDataTxVector (packetHeader);
1019 Simulator::Stop (
Seconds (10.0));
1022 Simulator::Destroy ();
1048 :
TestSuite (
"wifi-power-rate-adaptation", UNIT)
PowerRateAdaptationTest()
PowerRateAdaptationTestSuite()
AttributeValue implementation for Boolean.
virtual void SetProtectionManager(Ptr< WifiProtectionManager > protectionManager)
Set the Protection Manager to use.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
void TestAparf()
Test aparf function.
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
Power Rate Adaptation Test.
uint16_t GetGuardInterval(void) const
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Power Rate Adaptation Test Suite.
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...
void SetWifiMac(Ptr< RegularWifiMac > mac)
Set the MAC which is using this Acknowledgment Manager.
void DoRun(void) override
Implementation to actually run this TestCase.
virtual void SetAckManager(Ptr< WifiAckManager > ackManager)
Set the Acknowledgment Manager to use.
Ptr< WifiRemoteStationManager > GetRemoteStationManager(void) const
Ptr< Object > Create(void) const
Create an Object instance of the configured TypeId.
static PowerRateAdaptationTestSuite g_powerRateAdaptationTestSuite
the test suite
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
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.
void SetWifiMac(Ptr< RegularWifiMac > mac)
Set the MAC which is using this Protection Manager.
ObjectFactory m_manager
manager
hold a list of per-remote-station state.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< Node > ConfigureNode()
Configure nde function.
bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber) override
void TestParf()
Test parf function.
Instantiate subclasses of ns3::Object.
Time Seconds(double value)
Construct a Time in the indicated unit.
uint8_t GetTxPowerLevel(void) const
uint16_t GetChannelWidth(void) const
This class can be used to hold variables of floating point type such as 'double' or 'float'...
void TestRrpaa()
Test rrpaa function.
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
uint64_t GetDataRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const