12#include "ns3/adhoc-wifi-mac.h"
13#include "ns3/ap-wifi-mac.h"
14#include "ns3/config.h"
15#include "ns3/constant-position-mobility-model.h"
16#include "ns3/constant-rate-wifi-manager.h"
17#include "ns3/error-model.h"
18#include "ns3/fcfs-wifi-queue-scheduler.h"
19#include "ns3/he-frame-exchange-manager.h"
20#include "ns3/he-phy.h"
21#include "ns3/header-serialization-test.h"
22#include "ns3/ht-configuration.h"
23#include "ns3/interference-helper.h"
24#include "ns3/mgt-headers.h"
25#include "ns3/mobility-helper.h"
26#include "ns3/multi-model-spectrum-channel.h"
27#include "ns3/packet-socket-client.h"
28#include "ns3/packet-socket-helper.h"
29#include "ns3/packet-socket-server.h"
30#include "ns3/pointer.h"
31#include "ns3/propagation-loss-model.h"
32#include "ns3/rng-seed-manager.h"
33#include "ns3/socket.h"
34#include "ns3/spectrum-wifi-helper.h"
35#include "ns3/string.h"
37#include "ns3/uinteger.h"
38#include "ns3/waypoint-mobility-model.h"
39#include "ns3/wifi-default-ack-manager.h"
40#include "ns3/wifi-default-assoc-manager.h"
41#include "ns3/wifi-default-protection-manager.h"
42#include "ns3/wifi-mgt-header.h"
43#include "ns3/wifi-net-device.h"
44#include "ns3/wifi-ppdu.h"
45#include "ns3/wifi-psdu.h"
46#include "ns3/wifi-spectrum-signal-parameters.h"
47#include "ns3/yans-error-rate-model.h"
48#include "ns3/yans-wifi-helper.h"
49#include "ns3/yans-wifi-phy.h"
60 int64_t currentStream = stream;
62 if (!mac->GetQosSupported())
64 mac->GetAttribute(
"Txop", ptr);
66 currentStream += txop->AssignStreams(currentStream);
70 mac->GetAttribute(
"VO_Txop", ptr);
72 currentStream += vo_txop->AssignStreams(currentStream);
74 mac->GetAttribute(
"VI_Txop", ptr);
76 currentStream += vi_txop->AssignStreams(currentStream);
78 mac->GetAttribute(
"BE_Txop", ptr);
80 currentStream += be_txop->AssignStreams(currentStream);
82 mac->GetAttribute(
"BK_Txop", ptr);
84 bk_txop->AssignStreams(currentStream);
99 void DoRun()
override;
130 dev->Send(p, dev->GetBroadcast(), 1);
138 node->AddDevice(dev);
143 phy->SetInterferenceHelper(interferenceHelper);
145 phy->SetErrorRateModel(error);
146 phy->SetChannel(channel);
151 dev->SetRemoteStationManager(manager);
161 if (mac->GetTypeOfStation() ==
STA)
167 fem->SetAddress(mac->GetAddress());
169 protectionManager->SetWifiMac(mac);
170 fem->SetProtectionManager(protectionManager);
172 ackManager->SetWifiMac(mac);
173 fem->SetAckManager(ackManager);
175 mobility->SetPosition(pos);
176 node->AggregateObject(mobility);
187 channel->SetPropagationDelayModel(propDelay);
188 channel->SetPropagationLossModel(propLoss);
190 CreateOne(Vector(0.0, 0.0, 0.0), channel);
191 CreateOne(Vector(5.0, 0.0, 0.0), channel);
192 CreateOne(Vector(5.0, 0.0, 0.0), channel);
250 "2047 is new in comparison to 0");
258 "0 is new in comparison to 4095");
264 "2047 is old in comparison to 4095");
268 "4095 is new in comparison to 2048");
272 "0 is new in comparison to 2049");
284 void DoRun()
override;
311 :
TestCase(
"InterferenceHelperSequence")
319 dev->Send(p, dev->GetBroadcast(), 1);
334 node->AddDevice(dev);
339 phy->SetInterferenceHelper(interferenceHelper);
341 phy->SetErrorRateModel(error);
342 phy->SetChannel(channel);
344 phy->SetMobility(mobility);
348 dev->SetRemoteStationManager(manager);
360 fem->SetAddress(mac->GetAddress());
362 protectionManager->SetWifiMac(mac);
363 fem->SetProtectionManager(protectionManager);
365 ackManager->SetWifiMac(mac);
366 fem->SetAckManager(ackManager);
368 mobility->SetPosition(pos);
369 node->AggregateObject(mobility);
384 channel->SetPropagationDelayModel(propDelay);
385 channel->SetPropagationLossModel(propLoss);
395 propLoss->SetDefaultLoss(999);
479 void DoRun()
override;
505 :
TestCase(
"Test case for DCF immediate access with broadcast frames")
527 dev->Send(p, dev->GetBroadcast(), 1);
545 channel->SetPropagationDelayModel(propDelay);
546 channel->SetPropagationLossModel(propLoss);
554 txPhy->SetInterferenceHelper(txInterferenceHelper);
556 txPhy->SetErrorRateModel(txError);
557 txPhy->SetChannel(channel);
558 txPhy->SetDevice(txDev);
559 txPhy->SetMobility(txMobility);
562 txPhy->TraceConnectWithoutContext(
566 txMobility->SetPosition(Vector(0.0, 0.0, 0.0));
567 txNode->AggregateObject(txMobility);
568 txDev->SetPhy(txPhy);
570 txNode->AddDevice(txDev);
577 txDev->SetMac(txMac);
581 auto fem = txMac->GetFrameExchangeManager();
582 fem->SetAddress(txMac->GetAddress());
584 protectionManager->SetWifiMac(txMac);
585 fem->SetProtectionManager(protectionManager);
587 ackManager->SetWifiMac(txMac);
588 fem->SetAckManager(ackManager);
621 uint32_t expectedWait1 = 1408 + (1 * 9) + 16 + (2 * 9);
622 Time expectedSecondTransmissionTime =
623 expectedFirstTransmissionTime +
MicroSeconds(expectedWait1);
625 expectedFirstTransmissionTime,
626 "The first transmission time not correct!");
629 expectedSecondTransmissionTime,
630 "The second transmission time not correct!");
652 void DoRun()
override;
667 :
TestCase(
"Test case for Bug 730"),
694 wifiApNode.Create(1);
698 phy.SetChannel(channel.Create());
702 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager",
713 staDevices = wifi.Install(phy, mac, wifiStaNode);
718 apDevices = wifi.Install(phy, mac, wifiApNode);
723 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
724 positionAlloc->Add(Vector(1.0, 0.0, 0.0));
725 mobility.SetPositionAllocator(positionAlloc);
727 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
728 mobility.Install(wifiApNode);
729 mobility.Install(wifiStaNode);
741 packetSocket.
Install(wifiStaNode);
742 packetSocket.
Install(wifiApNode);
746 client->SetRemote(socket);
748 client->SetStartTime(
Seconds(1));
749 client->SetStopTime(
Seconds(51.0));
752 server->SetLocal(socket);
753 wifiApNode.Get(0)->AddApplication(server);
754 server->SetStartTime(
Seconds(0.0));
755 server->SetStopTime(
Seconds(52.0));
757 Config::Connect(
"/NodeList/*/ApplicationList/0/$ns3::PacketSocketServer/Rx",
762 "/NodeList/0/DeviceList/0/RemoteStationManager/FragmentationThreshold",
774 "packet reception unexpectedly stopped after adapting fragmentation threshold!");
791 void DoRun()
override;
815 :
TestCase(
"Test case for fragmentation with QoS stations"),
828 if (p->GetSize() == 1400)
853 wifiApNode.Create(1);
857 phy.SetChannel(channel.Create());
861 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager",
"DataMode",
StringValue(
"HtMcs7"));
868 staDevices = wifi.Install(phy, mac, wifiStaNode);
873 apDevices = wifi.Install(phy, mac, wifiApNode);
878 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
879 positionAlloc->Add(Vector(1.0, 0.0, 0.0));
880 mobility.SetPositionAllocator(positionAlloc);
882 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
883 mobility.Install(wifiApNode);
884 mobility.Install(wifiStaNode);
891 sta_device->GetMac()->GetAttribute(
"BE_Txop", ptr);
896 socket.SetPhysicalAddress(ap_device->GetAddress());
897 socket.SetProtocol(1);
901 packetSocket.
Install(wifiStaNode);
902 packetSocket.
Install(wifiApNode);
907 client->SetRemote(socket);
909 client->SetStartTime(
Seconds(1));
910 client->SetStopTime(
Seconds(3.0));
913 server->SetLocal(socket);
914 wifiApNode.Get(0)->AddApplication(server);
915 server->SetStartTime(
Seconds(0.0));
916 server->SetStopTime(
Seconds(4.0));
918 Config::Connect(
"/NodeList/*/ApplicationList/0/$ns3::PacketSocketServer/Rx",
921 Config::Set(
"/NodeList/0/DeviceList/0/RemoteStationManager/FragmentationThreshold",
946 void DoRun()
override;
958 :
TestCase(
"Test case for setting WifiPhy channel and frequency")
976 wifiApNode.Create(1);
980 phy.SetChannel(channel.Create());
984 ssid =
Ssid(
"wifi-phy-configuration");
986 macSta.
SetType(
"ns3::StaWifiMac",
1002 "default configuration");
1008 wifi.SetRemoteStationManager(
"ns3::ArfWifiManager");
1009 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1020 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1031 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1041 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1043 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_5GHZ, 0}"));
1044 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1049 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1054 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1056 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1065 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1067 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1077 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1078 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_2_4GHZ, 0}"));
1079 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1084 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1089 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1090 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1099 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1100 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_6GHZ, 0}"));
1101 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1106 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1111 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1113 phy.Set(
"ChannelSettings",
StringValue(
"{0, 10, BAND_5GHZ, 0}"));
1114 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1119 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1124 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1126 phy.Set(
"ChannelSettings",
StringValue(
"{0, 5, BAND_5GHZ, 0}"));
1127 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1132 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1137 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1139 phy.Set(
"ChannelSettings",
StringValue(
"{44, 20, BAND_5GHZ, 0}"));
1140 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1145 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1150 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1151 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1152 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1155 std::ostringstream path;
1156 path <<
"/NodeList/*/DeviceList/" << staDevice.
Get(0)->GetIfIndex()
1157 <<
"/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings";
1162 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1167 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1168 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1169 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1172 std::ostringstream path;
1173 path <<
"/NodeList/*/DeviceList/" << staDevice.
Get(0)->GetIfIndex()
1174 <<
"/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings";
1181 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1186 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1188 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1190 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{3, 20, BAND_2_4GHZ, 0}"));
1192 std::ostringstream path;
1193 path <<
"/NodeList/*/DeviceList/" << staDevice.
Get(0)->GetIfIndex()
1194 <<
"/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings";
1201 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1206 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1209 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1210 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1212 bool exceptionThrown =
false;
1215 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{45, 0, BAND_5GHZ, 0}"));
1217 catch (
const std::runtime_error&)
1219 exceptionThrown =
true;
1227 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1229 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1230 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1234 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{100, 0, BAND_5GHZ, 0}"));
1244 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1246 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1247 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1249 bool exceptionThrown =
false;
1254 catch (
const std::runtime_error&)
1256 exceptionThrown =
true;
1264 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1267 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1268 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1270 bool exceptionThrown =
false;
1273 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{45, 0, BAND_5GHZ, 0}"));
1275 catch (
const std::runtime_error&)
1277 exceptionThrown =
true;
1281 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
1286 exceptionThrown =
false;
1289 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{43, 0, BAND_5GHZ, 0}"));
1291 catch (
const std::runtime_error&)
1293 exceptionThrown =
true;
1297 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
1305 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1306 phy.Set(
"ChannelSettings",
StringValue(
"{40, 0, BAND_5GHZ, 0}"));
1308 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1315 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1317 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{40, 0, BAND_5GHZ, 0}"));
1322 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
1327 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{40, 0, BAND_5GHZ, 0}"));
1332 bool exceptionThrown =
false;
1335 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{45, 0, BAND_5GHZ, 0}"));
1337 catch (
const std::runtime_error&)
1339 exceptionThrown =
true;
1341 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
1347 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
1348 exceptionThrown =
false;
1351 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{43, 0, BAND_5GHZ, 0}"));
1353 catch (
const std::runtime_error&)
1355 exceptionThrown =
true;
1381 void DoRun()
override;
1395 :
TestCase(
"Test case for Bug 2222"),
1396 m_countInternalCollisions(0)
1420 int64_t streamNumber = 100;
1427 phy.SetChannel(channel.Create());
1430 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager",
1437 mac.SetType(
"ns3::AdhocWifiMac",
"QosSupported",
BooleanValue(
true));
1440 wifiDevices = wifi.Install(phy, mac, wifiNodes);
1448 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
1449 positionAlloc->Add(Vector(10.0, 0.0, 0.0));
1450 mobility.SetPositionAllocator(positionAlloc);
1452 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
1453 mobility.Install(wifiNodes);
1464 packetSocket.
Install(wifiNodes);
1467 clientLowPriority->SetAttribute(
"PacketSize",
UintegerValue(1460));
1468 clientLowPriority->SetAttribute(
"MaxPackets",
UintegerValue(1));
1469 clientLowPriority->SetAttribute(
"Priority",
UintegerValue(4));
1470 clientLowPriority->SetRemote(socket);
1472 clientLowPriority->SetStartTime(
Seconds(0.0));
1473 clientLowPriority->SetStopTime(
Seconds(1.0));
1476 clientHighPriority->SetAttribute(
"PacketSize",
UintegerValue(1460));
1477 clientHighPriority->SetAttribute(
"MaxPackets",
UintegerValue(1));
1478 clientHighPriority->SetAttribute(
"Priority",
UintegerValue(6));
1479 clientHighPriority->SetRemote(socket);
1481 clientHighPriority->SetStartTime(
Seconds(0.0));
1482 clientHighPriority->SetStopTime(
Seconds(1.0));
1485 server->SetLocal(socket);
1487 server->SetStartTime(
Seconds(0.0));
1488 server->SetStopTime(
Seconds(1.0));
1490 Config::Connect(
"/NodeList/*/DeviceList/*/RemoteStationManager/MacTxDataFailed",
1499 "unexpected number of internal collisions!");
1520 void DoRun()
override;
1528 std::vector<FreqWidthSubbandModulationTuple>
1553 :
TestCase(
"Test case for Bug 2843"),
1567 std::size_t numBands = c->GetNumBands();
1568 const Hz_u startingFreq = c->Begin()->fl;
1581 std::make_tuple(startingFreq,
m_channelWidth, numBands, modulationClass);
1585 if (*it == tupleForCurrentTx)
1601 for (uint8_t i = 0; i < numPackets; i++)
1604 sourceDevice->Send(pkt, destination, 0);
1611 MHz_u channelWidth = 40;
1617 wifiApNode.Create(1);
1622 lossModel->SetFrequency(5.190e9);
1623 spectrumChannel->AddPropagationLossModel(lossModel);
1627 spectrumChannel->SetPropagationDelayModel(delayModel);
1631 spectrumPhy.
Set(
"ChannelSettings",
StringValue(
"{38, 40, BAND_5GHZ, 0}"));
1637 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager",
1646 mac.SetType(
"ns3::StaWifiMac");
1648 staDevice = wifi.Install(spectrumPhy, mac, wifiStaNode);
1650 mac.SetType(
"ns3::ApWifiMac");
1652 apDevice = wifi.Install(spectrumPhy, mac, wifiApNode);
1656 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
1657 positionAlloc->Add(Vector(1.0, 0.0, 0.0));
1658 mobility.SetPositionAllocator(positionAlloc);
1660 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
1661 mobility.Install(wifiApNode);
1662 mobility.Install(wifiStaNode);
1670 staDevice.
Get(0)->GetAddress());
1676 staDevice.
Get(0)->GetAddress());
1678 Config::Connect(
"/ChannelList/*/$ns3::MultiModelSpectrumChannel/TxSigParams",
1692 "The starting frequency of the first tuple should be shifted 20 MHz to "
1693 "the right wrt second tuple");
1697 "First tuple's channel width should be 20 MHz");
1700 "First tuple should have 193 subbands (64+DC, 20MHz+DC, inband and 64*2 "
1701 "out-of-band, 20MHz on each side)");
1703 WifiModulationClass::WIFI_MOD_CLASS_OFDM,
1704 "First tuple should be OFDM");
1708 "Second tuple's channel width should be 40 MHz");
1711 "Second tuple should have 385 subbands (128+DC, 40MHz+DC, inband and "
1712 "128*2 out-of-band, 40MHz on each side)");
1714 WifiModulationClass::WIFI_MOD_CLASS_VHT,
1715 "Second tuple should be VHT_OFDM");
1735 void DoRun()
override;
1762 :
TestCase(
"Test case for Bug 2831"),
1764 m_assocRespCount(0),
1765 m_countOperationalChannelWidth20(0),
1766 m_countOperationalChannelWidth40(0)
1788 packet->RemoveHeader(hdr);
1800 packet->RemoveHeader(beacon);
1801 const auto& htOperation = beacon.Get<
HtOperation>();
1802 if (htOperation.has_value() && htOperation->GetStaChannelWidth() > 0)
1818 propDelay.
SetTypeId(
"ns3::ConstantSpeedPropagationDelayModel");
1821 channel->SetPropagationDelayModel(propagationDelay);
1822 channel->SetPropagationLossModel(propagationLoss);
1826 apNode->AddDevice(apDev);
1829 apDev->SetHtConfiguration(apHtConfiguration);
1831 manager.
SetTypeId(
"ns3::ConstantRateWifiManager");
1835 apMobility->SetPosition(Vector(0.0, 0.0, 0.0));
1836 apNode->AggregateObject(apMobility);
1851 mac.SetTypeId(
"ns3::ApWifiMac");
1854 for (
const std::string ac : {
"BE",
"BK",
"VI",
"VO"})
1860 auto apMac = mac.Create<
WifiMac>();
1863 apDev->SetMac(apMac);
1868 fem->SetAddress(apMac->GetAddress());
1870 protectionManager->SetWifiMac(apMac);
1871 fem->SetProtectionManager(protectionManager);
1873 ackManager->SetWifiMac(apMac);
1874 fem->SetAckManager(ackManager);
1878 staNode->AddDevice(staDev);
1881 staDev->SetHtConfiguration(staHtConfiguration);
1885 staMobility->SetPosition(Vector(1.0, 0.0, 0.0));
1886 staNode->AggregateObject(staMobility);
1899 mac.SetTypeId(
"ns3::StaWifiMac");
1900 for (
const std::string ac : {
"BE",
"BK",
"VI",
"VO"})
1906 auto staMac = mac.Create<
WifiMac>();
1907 staDev->SetMac(staMac);
1908 staMac->SetDevice(staDev);
1914 fem = staMac->GetFrameExchangeManager();
1915 fem->SetAddress(staMac->GetAddress());
1917 protectionManager->SetWifiMac(staMac);
1918 fem->SetProtectionManager(protectionManager);
1920 ackManager->SetWifiMac(staMac);
1921 fem->SetAckManager(ackManager);
1923 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/PhyRxBegin",
1936 "Incorrect operational channel width before channel change");
1939 "Incorrect operational channel width after channel change");
1963 void DoRun()
override;
1994 :
TestCase(
"Test case for StaWifiMac scanning capability")
2013 mac->SetAttribute(
"BeaconGeneration",
BooleanValue(
true));
2029 int64_t streamNumber = 1;
2039 phy.SetChannel(channel.Create());
2043 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager");
2048 mac.SetType(
"ns3::ApWifiMac",
"BeaconGeneration",
BooleanValue(
true));
2049 apDevice = wifi.Install(phy, mac, apNodes);
2050 mac.SetType(
"ns3::ApWifiMac",
"BeaconGeneration",
BooleanValue(nearestApBeaconGeneration));
2051 apDeviceNearest = wifi.Install(phy, mac, apNodeNearest);
2054 mac.SetType(
"ns3::StaWifiMac",
"ActiveProbing",
BooleanValue(staActiveProbe));
2055 staDevice = wifi.Install(phy, mac, staNode);
2064 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
2065 positionAlloc->Add(Vector(10.0, 0.0, 0.0));
2066 positionAlloc->Add(Vector(5.0, 5.0, 0.0));
2067 positionAlloc->Add(Vector(6.0, 5.0, 0.0));
2068 mobility.SetPositionAllocator(positionAlloc);
2070 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
2071 mobility.Install(apNodes);
2072 mobility.Install(apNodeNearest);
2073 mobility.Install(staNode);
2075 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/$ns3::StaWifiMac/Assoc",
2102 "STA is associated to the wrong AP");
2117 "STA is associated to the wrong AP");
2133 secondNearestApAddr,
2134 "STA is associated to the wrong AP");
2166 void DoRun()
override;
2191 std::string context,
2208 uint16_t channelFreqMhz,
2249 :
TestCase(
"Test case for Bug 2470"),
2250 m_receivedNormalMpduCount(0),
2251 m_receivedAmpduCount(0),
2252 m_failedActionCount(0),
2253 m_addbaEstablishedCount(0),
2254 m_addbaPendingCount(0),
2255 m_addbaRejectedCount(0),
2256 m_addbaNoReplyCount(0),
2257 m_addbaResetCount(0)
2294 std::string context,
2299 auto psdu = psduMap.begin()->second;
2306 auto uid = psdu->GetPayload(0)->GetUid();
2307 rxErrorModel->SetList({uid});
2314 uint16_t channelFreqMhz,
2321 if (aMpdu.
type != MpduType::NORMAL_MPDU)
2328 packet->RemoveHeader(hdr);
2341 packet->RemoveHeader(hdr);
2353 for (
uint32_t i = 0; i < numPackets; i++)
2356 sourceDevice->Send(pkt, destination, 0);
2365 int64_t streamNumber = 200;
2369 wifiApNode.Create(1);
2374 phy.SetChannel(channel.Create());
2378 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager",
2386 phy.Set(
"ChannelSettings",
StringValue(
"{36, 20, BAND_5GHZ, 0}"));
2387 mac.SetType(
"ns3::ApWifiMac",
"EnableBeaconJitter",
BooleanValue(
false));
2388 apDevice = wifi.Install(phy, mac, wifiApNode);
2391 mac.SetType(
"ns3::StaWifiMac");
2392 staDevice = wifi.Install(phy, mac, wifiStaNode);
2400 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
2401 positionAlloc->Add(Vector(1.0, 0.0, 0.0));
2402 mobility.SetPositionAllocator(positionAlloc);
2404 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
2405 mobility.Install(wifiApNode);
2406 mobility.Install(wifiStaNode);
2410 switch (rcvErrorType)
2419 NS_ABORT_MSG(
"Station type " << +rcvErrorType <<
" cannot be used here");
2421 wifiMac->GetWifiPhy(0)->SetPostReceptionErrorModel(rxErrorModel);
2424 "/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/MonitorSnifferRx",
2428 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/$ns3::WifiMac/BE_Txop/"
2429 "BlockAckManager/AgreementState",
2432 "/DeviceList/*/$ns3::WifiNetDevice/Phys/0/PhyTxPsduBegin",
2440 staDevice.
Get(0)->GetAddress());
2446 staDevice.
Get(0)->GetAddress());
2452 staDevice.
Get(0)->GetAddress());
2458 staDevice.
Get(0)->GetAddress());
2477 "Receiving incorrect number of normal MPDU packet on subtest 1");
2480 "Receiving incorrect number of A-MPDU packets on subtest 1");
2484 "Incorrect number of times the ADDBA state machine was in "
2485 "established state on subtest 1");
2489 "Incorrect number of times the ADDBA state machine was in pending state on subtest 1");
2493 "Incorrect number of times the ADDBA state machine was in rejected state on subtest 1");
2497 "Incorrect number of times the ADDBA state machine was in no_reply state on subtest 1");
2501 "Incorrect number of times the ADDBA state machine was in reset state on subtest 1");
2520 "Receiving incorrect number of normal MPDU packet on subtest 2");
2523 "Receiving incorrect number of A-MPDU packet on subtest 2");
2527 "Incorrect number of times the ADDBA state machine was in "
2528 "established state on subtest 2");
2532 "Incorrect number of times the ADDBA state machine was in pending state on subtest 2");
2536 "Incorrect number of times the ADDBA state machine was in rejected state on subtest 2");
2540 "Incorrect number of times the ADDBA state machine was in no_reply state on subtest 2");
2544 "Incorrect number of times the ADDBA state machine was in reset state on subtest 2");
2572 void DoRun()
override;
2579 void RunOne(
bool useAmpdu);
2608 :
TestCase(
"Test case for issue #40"),
2611 m_txMacFinalDataFailedCount(0)
2628 for (uint8_t i = 0; i < numPackets; i++)
2631 sourceDevice->Send(pkt, destination, 0);
2651 int64_t streamNumber = 100;
2655 wifiApNode.Create(1);
2660 phy.SetChannel(channel.Create());
2664 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
2668 mac.SetType(
"ns3::ApWifiMac");
2669 apDevice = wifi.Install(phy, mac, wifiApNode);
2672 mac.SetType(
"ns3::StaWifiMac");
2673 staDevice = wifi.Install(phy, mac, wifiStaNode);
2681 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
2682 positionAlloc->Add(Vector(10.0, 0.0, 0.0));
2683 mobility.SetPositionAllocator(positionAlloc);
2685 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
2686 mobility.Install(wifiApNode);
2688 mobility.SetMobilityModel(
"ns3::WaypointMobilityModel");
2689 mobility.Install(wifiStaNode);
2691 Config::Connect(
"/NodeList/*/DeviceList/*/RemoteStationManager/MacTxFinalDataFailed",
2693 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/$ns3::WifiMac/MacRx",
2698 staWaypointMobility->AddWaypoint(
Waypoint(
Seconds(1.0), Vector(10.0, 0.0, 0.0)));
2699 staWaypointMobility->AddWaypoint(
Waypoint(
Seconds(1.5), Vector(50.0, 0.0, 0.0)));
2707 ap_device->GetMac()->GetAttribute(
"BE_Txop", ptr);
2718 staDevice.
Get(0)->GetAddress());
2727 staDevice.
Get(0)->GetAddress());
2736 staDevice.
Get(0)->GetAddress());
2742 staDevice.
Get(0)->GetAddress());
2748 staDevice.
Get(0)->GetAddress());
2754 staDevice.
Get(0)->GetAddress());
2760 staDevice.
Get(0)->GetAddress());
2766 (useAmpdu ? 14 : 7),
2767 "Incorrect number of transmitted packets");
2769 (useAmpdu ? 12 : 6),
2770 "Incorrect number of successfully received packets");
2804 void DoRun()
override;
2833 :
TestCase(
"Test case for issue #169")
2849 for (uint8_t i = 0; i < numPackets; i++)
2852 packet->AddPacketTag(priorityTag);
2853 sourceDevice->Send(packet, destination, 0);
2863 if (psdus.begin()->second->GetSize() >= 1000)
2866 WifiModulationClass::WIFI_MOD_CLASS_VHT,
2867 "Ideal rate manager selected incorrect modulation class");
2876 int64_t streamNumber = 100;
2880 wifiApNode.Create(1);
2885 phy.SetChannel(channel.Create());
2889 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
2893 mac.SetType(
"ns3::ApWifiMac");
2894 apDevice = wifi.Install(phy, mac, wifiApNode);
2897 mac.SetType(
"ns3::StaWifiMac");
2898 staDevice = wifi.Install(phy, mac, wifiStaNode);
2906 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
2907 positionAlloc->Add(Vector(1.0, 0.0, 0.0));
2908 mobility.SetPositionAllocator(positionAlloc);
2910 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
2911 mobility.Install(wifiApNode);
2912 mobility.Install(wifiStaNode);
2914 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/PhyTxPsduBegin",
2923 staDevice.
Get(0)->GetAddress(),
2932 staDevice.
Get(0)->GetAddress(),
2961 void DoRun()
override;
2999 :
TestCase(
"Test case for use of channel bonding with Ideal rate manager")
3010 Config::Set(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/ChannelSettings",
3011 StringValue(
"{0, " + std::to_string(
static_cast<uint16_t
>(channelWidth)) +
3012 ", BAND_5GHZ, 0}"));
3019 sourceDevice->Send(packet, destination, 0);
3028 if (psduMap.begin()->second->GetSize() >= 1000)
3039 "Last selected WifiMode "
3040 <<
m_txMode <<
" does not match expected WifiMode " << expectedMode);
3048 int64_t streamNumber = 100;
3052 wifiApNode.Create(1);
3057 phy.SetChannel(channel.Create());
3061 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
3065 mac.SetType(
"ns3::ApWifiMac");
3066 apDevice = wifi.Install(phy, mac, wifiApNode);
3069 mac.SetType(
"ns3::StaWifiMac");
3070 staDevice = wifi.Install(phy, mac, wifiStaNode);
3078 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
3079 positionAlloc->Add(Vector(50.0, 0.0, 0.0));
3080 mobility.SetPositionAllocator(positionAlloc);
3082 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
3083 mobility.Install(wifiApNode);
3084 mobility.Install(wifiStaNode);
3086 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/PhyTxPsduBegin",
3098 staDevice.
Get(0)->GetAddress());
3114 staDevice.
Get(0)->GetAddress());
3130 staDevice.
Get(0)->GetAddress());
3157 void DoRun()
override;
3206 :
TestCase(
"Test case for use of imbalanced MIMO settings with Ideal rate manager")
3217 Config::Set(
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/Antennas",
3219 Config::Set(
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/MaxSupportedTxSpatialStreams",
3221 Config::Set(
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/MaxSupportedRxSpatialStreams",
3228 Config::Set(
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/Antennas",
3230 Config::Set(
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/MaxSupportedTxSpatialStreams",
3232 Config::Set(
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/MaxSupportedRxSpatialStreams",
3240 sourceDevice->Send(packet, destination, 0);
3249 if (psdus.begin()->second->GetSize() >= 1000)
3261 <<
" does not match expected Nss " << expectedNss);
3270 <<
" does not match expected WifiMode "
3279 int64_t streamNumber = 100;
3283 wifiApNode.Create(1);
3288 phy.SetChannel(channel.Create());
3292 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
3296 mac.SetType(
"ns3::ApWifiMac");
3297 apDevice = wifi.Install(phy, mac, wifiApNode);
3300 mac.SetType(
"ns3::StaWifiMac");
3301 staDevice = wifi.Install(phy, mac, wifiStaNode);
3309 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
3310 positionAlloc->Add(Vector(40.0, 0.0, 0.0));
3311 mobility.SetPositionAllocator(positionAlloc);
3313 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
3314 mobility.Install(wifiApNode);
3315 mobility.Install(wifiStaNode);
3317 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/PhyTxPsduBegin",
3329 staDevice.
Get(0)->GetAddress());
3334 staDevice.
Get(0)->GetAddress());
3352 staDevice.
Get(0)->GetAddress());
3357 staDevice.
Get(0)->GetAddress());
3376 staDevice.
Get(0)->GetAddress());
3381 staDevice.
Get(0)->GetAddress());
3399 staDevice.
Get(0)->GetAddress());
3404 staDevice.
Get(0)->GetAddress());
3423 staDevice.
Get(0)->GetAddress());
3428 staDevice.
Get(0)->GetAddress());
3448 staDevice.
Get(0)->GetAddress());
3453 staDevice.
Get(0)->GetAddress());
3471 staDevice.
Get(0)->GetAddress());
3476 staDevice.
Get(0)->GetAddress());
3495 staDevice.
Get(0)->GetAddress());
3500 staDevice.
Get(0)->GetAddress());
3520 staDevice.
Get(0)->GetAddress());
3525 staDevice.
Get(0)->GetAddress());
3542 staDevice.
Get(0)->GetAddress());
3581 uint16_t expectedDataRate);
3582 void DoRun()
override;
3586 :
TestCase(
"Check data rates for different RU types.")
3595 uint16_t expectedDataRate)
3609 txVector.SetMode(mode, staId);
3610 txVector.SetNss(nss, staId);
3612 txVector.SetRu(ru, staId);
3613 uint64_t dataRate = round(mode.
GetDataRate(txVector, staId) / 100000.0);
3615 if (
static_cast<uint16_t
>(dataRate) != expectedDataRate)
3617 std::cerr <<
"RU=" << ruType <<
" mode=" << mode <<
" Nss=" << +nss
3618 <<
" guardInterval=" << guardInterval <<
" expected=" << expectedDataRate
3620 <<
" computed=" <<
static_cast<uint16_t
>(dataRate) <<
" x100kbps" << std::endl;
3648 "26-tone RU data rate verification for different MCSs, GIs, and Nss's failed");
3660 "Data rate verification for RUs above 52-tone RU (included) failed");
3665 std::tuple<SupportedRates, std::optional<ExtendedSupportedRatesIE>, std::vector<Ssid>>;
3699 .SetGroupName(
"Wifi")
3723 void DoRun()
override;
3749 "Expected a SupportedRates IE to be included");
3752 "Expected no ExtendedSupportedRatesIE to be included");
3769 "Expected a SupportedRates IE to be included");
3772 "Expected an ExtendedSupportedRatesIE to be included");
3778 Ssid one(
"Ssid One");
3779 frame.Get<
Ssid>().push_back(one);
3783 "Expected a SupportedRates IE to be included");
3786 "Expected an ExtendedSupportedRatesIE to be included");
3795 frame.Get<
Ssid>().emplace_back(
"Ssid Two");
3799 "Expected a SupportedRates IE to be included");
3802 "Expected an ExtendedSupportedRatesIE to be included");
3806 "Incorrect first SSID");
3809 "Incorrect second SSID");
3827 void DoRun()
override;
3841 :
TestCase(
"Test case for Bug 730"),
3861 wifiApNode.Create(1);
3865 phy.SetChannel(channel.Create());
3869 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager",
3876 auto ssid =
Ssid(
"ns-3-ssid");
3880 staDevices = wifi.Install(phy, mac, wifiStaNode);
3885 apDevices = wifi.Install(phy, mac, wifiApNode);
3886 auto apRemoteStationManager = apDevices.Get(0)
3888 ->GetRemoteStationManager()
3895 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
3896 positionAlloc->Add(Vector(1.0, 0.0, 0.0));
3897 mobility.SetPositionAllocator(positionAlloc);
3899 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
3900 mobility.Install(wifiApNode);
3901 mobility.Install(wifiStaNode);
3913 packetSocket.
Install(wifiStaNode);
3914 packetSocket.
Install(wifiApNode);
3919 client->SetRemote(socket);
3921 client->SetStartTime(
Seconds(1));
3922 client->SetStopTime(
Seconds(4.5));
3925 server->SetLocal(socket);
3926 wifiApNode.Get(0)->AddApplication(server);
3927 server->SetStartTime(
Seconds(0));
3928 server->SetStopTime(
Seconds(4.5));
3930 Config::Connect(
"/NodeList/1/ApplicationList/0/$ns3::PacketSocketServer/Rx",
3938 "/NodeList/0/DeviceList/0/RemoteStationManager/$ns3::ConstantRateWifiManager/DataMode",
3943 "/NodeList/0/DeviceList/0/RemoteStationManager/$ns3::ConstantRateWifiManager/DataMode",
3948 "/NodeList/0/DeviceList/0/RemoteStationManager/$ns3::ConstantRateWifiManager/DataMode",
Make sure that when virtual collision occurs the wifi remote station manager is triggered and the ret...
~Bug2222TestCase() override
uint32_t m_countInternalCollisions
count internal collisions
void DoRun() override
Implementation to actually run this TestCase.
void TxDataFailedTrace(std::string context, Mac48Address adr)
Transmit data failed function.
Make sure that the ADDBA handshake process is protected.
void RxErrorCallback(std::string context, Ptr< const Packet > p, double snr)
Callback when packet is dropped.
void RunSubtest(TypeOfStation rcvErrorType)
Run subtest for this test suite.
void DoRun() override
Implementation to actually run this TestCase.
uint16_t m_addbaResetCount
Count number of times ADDBA state machine is in reset state.
uint16_t m_addbaRejectedCount
Count number of times ADDBA state machine is in rejected state.
void AddbaStateChangedCallback(std::string context, Time t, Mac48Address recipient, uint8_t tid, OriginatorBlockAckAgreement::State state)
Callback when ADDBA state changed.
uint16_t m_failedActionCount
Count failed ADDBA request/response.
void TxCallback(Ptr< ListErrorModel > rxErrorModel, std::string context, WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW)
Callback when a frame is transmitted.
uint16_t m_addbaEstablishedCount
Count number of times ADDBA state machine is in established state.
void RxCallback(std::string context, Ptr< const Packet > p, uint16_t channelFreqMhz, WifiTxVector txVector, MpduInfo aMpdu, SignalNoiseDbm signalNoise, uint16_t staId)
Callback when packet is received.
~Bug2470TestCase() override
uint16_t m_receivedNormalMpduCount
Count received normal MPDU packets on STA.
uint16_t m_addbaNoReplyCount
Count number of times ADDBA state machine is in no_reply state.
uint16_t m_addbaPendingCount
Count number of times ADDBA state machine is in pending state.
void SendPacketBurst(uint32_t numPackets, Ptr< NetDevice > sourceDevice, Address &destination) const
Triggers the arrival of a burst of 1000 Byte-long packets in the source device.
uint16_t m_receivedAmpduCount
Count received A-MPDU packets on STA.
Make sure that the channel width and the channel number can be changed at runtime.
uint16_t m_countOperationalChannelWidth20
count number of beacon frames announcing a 20 MHz operating channel width
void ChangeSupportedChannelWidth()
Function called to change the supported channel width at runtime.
uint16_t m_countOperationalChannelWidth40
count number of beacon frames announcing a 40 MHz operating channel width
void RxCallback(std::string context, Ptr< const Packet > p, RxPowerWattPerChannelBand rxPowersW)
Callback triggered when a packet is received by the PHYs.
uint16_t m_assocReqCount
count number of association requests
Ptr< YansWifiPhy > m_apPhy
AP PHY.
void DoRun() override
Implementation to actually run this TestCase.
Ptr< YansWifiPhy > m_staPhy
STA PHY.
uint16_t m_assocRespCount
count number of association responses
~Bug2831TestCase() override
Make sure that the correct channel width and center frequency have been set for OFDM basic rate trans...
void SendPacketBurst(uint8_t numPackets, Ptr< NetDevice > sourceDevice, Address &destination) const
Triggers the arrival of a burst of 1000 Byte-long packets in the source device.
void StoreDistinctTuple(std::string context, Ptr< SpectrumSignalParameters > txParams)
Stores the distinct {starting frequency, channelWidth, Number of subbands in SpectrumModel,...
std::vector< FreqWidthSubbandModulationTuple > m_distinctTuples
vector of distinct {starting frequency, channelWidth, Number of subbands in SpectrumModel,...
void DoRun() override
Implementation to actually run this TestCase.
MHz_u m_channelWidth
channel width
std::tuple< Hz_u, MHz_u, uint32_t, WifiModulationClass > FreqWidthSubbandModulationTuple
A tuple of {starting frequency, channelWidth, Number of subbands in SpectrumModel,...
~Bug2843TestCase() override
Make sure that when changing the fragmentation threshold during the simulation, the TCP transmission ...
~Bug730TestCase() override
void Receive(std::string context, Ptr< const Packet > p, const Address &adr)
Receive function.
void DoRun() override
Implementation to actually run this TestCase.
uint32_t m_received
received
Make sure that all DSSS modulation types work (see issue #1095).
void Receive(std::string context, Ptr< const Packet > p, const Address &)
Trace sink to receive from the PacketSocket; the address parameter is unused.
void DoRun() override
Implementation to actually run this TestCase.
uint32_t m_received
number of received packets
Data rate verification test for MCSs of different RU sizes.
HeRuMcsDataRateTestCase()
void DoRun() override
Implementation to actually run this TestCase.
bool CheckDataRate(HeRu::RuType ruType, std::string mcs, uint8_t nss, Time guardInterval, uint16_t expectedDataRate)
Compare the data rate computed for the provided combination with standard defined one.
Make sure that Ideal rate manager properly selects MCS based on the configured channel width.
WifiMode m_txMode
Store the last selected mode to send data packet.
void ChangeChannelWidth(MHz_u channelWidth)
Change the configured channel width for all nodes.
IdealRateManagerChannelWidthTest()
void DoRun() override
Implementation to actually run this TestCase.
void SendPacket(Ptr< NetDevice > sourceDevice, Address &destination)
Triggers the transmission of a 1000 Byte-long data packet from the source device.
void CheckLastSelectedMode(WifiMode expectedMode)
Check if the selected WifiMode is correct.
void TxCallback(std::string context, WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW)
Callback that indicates a PSDU is being transmitted.
~IdealRateManagerChannelWidthTest() override
Test to validate that Ideal rate manager properly selects TXVECTOR in scenarios where MIMO is used.
~IdealRateManagerMimoTest() override
void CheckLastSelectedNss(uint8_t expectedNss)
Check if the selected Nss is correct.
void DoRun() override
Implementation to actually run this TestCase.
void TxCallback(std::string context, WifiConstPsduMap psdus, WifiTxVector txVector, double txPowerW)
Callback that indicates a PSDU is being transmitted.
void SetApMimoSettings(uint8_t antennas, uint8_t maxStreams)
Change the configured MIMO settings for AP node.
WifiTxVector m_txVector
Store the last TXVECTOR used to transmit Data.
void SetStaMimoSettings(uint8_t antennas, uint8_t maxStreams)
Change the configured MIMO settings for STA node.
void SendPacket(Ptr< NetDevice > sourceDevice, Address &destination)
Triggers the transmission of a 1000 Byte-long data packet from the source device.
void CheckLastSelectedMode(WifiMode expectedMode)
Check if the selected WifiMode is correct.
IdealRateManagerMimoTest()
void SwitchCh(Ptr< WifiNetDevice > dev)
Switch channel function.
InterferenceHelperSequenceTest()
void SendOnePacket(Ptr< WifiNetDevice > dev)
Send one packet function.
void DoRun() override
Implementation to actually run this TestCase.
ObjectFactory m_manager
manager
ObjectFactory m_propDelay
propagation delay
Ptr< Node > CreateOne(Vector pos, Ptr< YansWifiChannel > channel)
Create one function.
Make sure that Ideal rate manager is able to handle non best-effort traffic.
void SendPackets(uint8_t numPackets, Ptr< NetDevice > sourceDevice, Address &destination, uint8_t priority)
Triggers the transmission of a 1000 Byte-long data packet from the source device.
~Issue169TestCase() override
void TxCallback(std::string context, WifiConstPsduMap psdus, WifiTxVector txVector, double txPowerW)
Callback that indicates a PSDU is being transmitted.
void DoRun() override
Implementation to actually run this TestCase.
Make sure that Ideal rate manager recovers when the station is moving away from the access point.
uint16_t m_txCount
Count number of transmitted data packets.
uint16_t m_txMacFinalDataFailedCount
Count number of unsuccessfuly transmitted data packets.
void RunOne(bool useAmpdu)
Run one function.
uint16_t m_rxCount
Count number of successfully received data packets.
void RxSuccessCallback(std::string context, Ptr< const Packet > p)
Callback when packet is successfully received.
void DoRun() override
Implementation to actually run this TestCase.
void TxFinalDataFailedCallback(std::string context, Mac48Address address)
Transmit final data failed function.
void SendPackets(uint8_t numPackets, Ptr< NetDevice > sourceDevice, Address &destination)
Triggers the arrival of 1000 Byte-long packets in the source device.
~Issue40TestCase() override
Make sure that fragmentation works with QoS stations.
void DoRun() override
Implementation to actually run this TestCase.
uint32_t m_received
received packets
QosFragmentationTestCase()
~QosFragmentationTestCase() override
uint32_t m_fragments
transmitted fragments
void Transmit(std::string context, Ptr< const Packet > p, double power)
Callback invoked when PHY transmits a packet.
void Receive(std::string context, Ptr< const Packet > p, const Address &adr)
Receive function.
Qos Utils Is Old Packet Test.
void DoRun() override
Implementation to actually run this TestCase.
QosUtilsIsOldPacketTest()
Set Channel Frequency Test.
Ptr< YansWifiPhy > GetYansWifiPhyPtr(const NetDeviceContainer &nc) const
Get yans wifi phy function.
SetChannelFrequencyTest()
void DoRun() override
Implementation to actually run this TestCase.
Make sure that Wifi STA is correctly associating to the best AP (i.e., nearest from STA).
void DoRun() override
Implementation to actually run this TestCase.
StaWifiMacScanningTestCase()
void TurnBeaconGenerationOn(Ptr< Node > apNode)
Turn beacon generation on the AP node.
Mac48Address m_associatedApBssid
Associated AP's bssid.
~StaWifiMacScanningTestCase() override
void TurnApOff(Ptr< Node > apNode)
Turn the AP node off.
NodeContainer Setup(bool nearestApBeaconGeneration, bool staActiveProbe)
Setup test.
void AssocCallback(std::string context, Mac48Address bssid)
Callback function on STA assoc event.
void CreateOne(Vector pos, Ptr< YansWifiChannel > channel)
Create one function.
void RunOne()
Run one function.
void DoRun() override
Implementation to actually run this TestCase.
void SendOnePacket(Ptr< WifiNetDevice > dev)
Send one packet function.
ObjectFactory m_manager
manager
ObjectFactory m_propDelay
propagation delay
a polymophic address class
use constant rates for data and RTS transmissions
This class can be used to hold variables of floating point type such as 'double' or 'float'.
The Extended Supported Rates Information Element.
static WifiMode GetHeMcs(uint8_t index)
Return the HE MCS corresponding to the provided index.
RuType
The different HE Resource Unit (RU) types.
The HT Operation Information Element.
static Mac48Address Allocate()
Allocate a new Mac48Address.
Helper class used to assign positions and mobility models to nodes.
Keep track of the current position and velocity of an object.
holds a vector of ns3::NetDevice pointers
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
uint32_t AddApplication(Ptr< Application > application)
Associate an Application to this Node.
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node.
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
Instantiate subclasses of ns3::Object.
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
void Set(const std::string &name, const AttributeValue &value, Args &&... args)
Set an attribute to be set during construction.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
State
Represents the state for this agreement.
an address for a packet socket
void SetProtocol(uint16_t protocol)
Set the protocol.
void SetPhysicalAddress(const Address address)
Set the destination address.
void SetSingleDevice(uint32_t device)
Set the address to match only a specified NetDevice.
Give ns3::PacketSocket powers to ns3::Node.
void Install(Ptr< Node > node) const
Aggregate an instance of a ns3::PacketSocketFactory onto the provided node.
AttributeValue implementation for Pointer.
calculate a propagation delay.
Smart pointer class similar to boost::intrusive_ptr.
Handles the packet queue and stores DCF/EDCA access parameters (one Txop per AC).
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 Time Now()
Return the current simulation virtual time.
static void Run()
Run the simulation.
static void Stop()
Tell the Simulator the calling event should be the last one executed.
indicates whether the socket has a priority set.
void SetPriority(uint8_t priority)
Set the tag's priority.
Make it easy to create and manage PHY objects for the spectrum model.
void SetChannel(const Ptr< SpectrumChannel > channel)
The IEEE 802.11 SSID Information Element.
char * PeekString() const
Peek the SSID.
Hold variables of type string.
The Supported Rates Information Element.
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Simulation virtual time values and global simulation resolution.
Handles the packet queue and stores DCF/EDCA access parameters (one Txop per AC).
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Hold an unsigned integer type.
static WifiMode GetVhtMcs3()
Return MCS 3 from VHT MCS values.
static WifiMode GetVhtMcs1()
Return MCS 1 from VHT MCS values.
static WifiMode GetVhtMcs2()
Return MCS 2 from VHT MCS values.
helps to create WifiNetDevice objects
static int64_t AssignStreams(NetDeviceContainer c, int64_t stream)
Assign a fixed random variable stream number to the random variables used by the PHY and MAC aspects ...
create MAC layers for a ns3::WifiNetDevice.
void SetType(std::string type, Args &&... args)
base class for all MAC-level wifi objects.
void SetDevice(const Ptr< WifiNetDevice > device)
Sets the device this PHY is associated with.
represent a single transmission mode
WifiModulationClass GetModulationClass() const
uint64_t GetDataRate(MHz_u channelWidth, Time guardInterval, uint8_t nss) const
Hold together all Wifi-related objects.
void Set(std::string name, const AttributeValue &v)
void SetErrorRateModel(std::string type, Args &&... args)
Helper function used to set the error rate model.
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.
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 SetMobility(const Ptr< MobilityModel > mobility)
assign a mobility model to this device
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...
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 GetNss(uint16_t staId=SU_STA_ID) const
If this TX vector is associated with an SU PPDU, return the number of spatial streams.
MHz_u GetChannelWidth() const
manage and create wifi channel objects for the YANS model.
static YansWifiChannelHelper Default()
Create a channel helper in a default working state.
Make it easy to create and manage PHY objects for the YANS model.
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.
void Connect(std::string path, const CallbackBase &cb)
void Set(std::string path, const AttributeValue &value)
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Ptr< T > CreateObjectWithAttributes(Args... args)
Allocate an Object on the heap and initialize with a set of attributes.
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.
#define NS_TEST_EXPECT_MSG_LT_OR_EQ(actual, limit, msg)
Test that an actual value is less than or equal to a limit and report if not.
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report 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.
TypeOfStation
Enumeration for type of WiFi station.
bool QosUtilsIsOldPacket(uint16_t startingSeq, uint16_t seqNumber)
This function checks if packet with sequence number seqNumber is an "old" packet.
WifiModulationClass
This enumeration defines the modulation classes per (Table 10-6 "Modulation classes"; IEEE 802....
@ WIFI_PHY_BAND_5GHZ
The 5 GHz band.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< void, Ptr< const WifiPsdu > > RxErrorCallback
Callback if PSDU unsuccessfuly received.
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Ptr< T1 > DynamicCast(const Ptr< T2 > &p)
Cast a Ptr.
std::map< WifiSpectrumBandInfo, Watt_u > RxPowerWattPerChannelBand
A map of the received power for each band.
Ptr< T1 > StaticCast(const Ptr< T2 > &p)
Cast a Ptr.
Struct containing all supported rates.
SupportedRates rates
supported rates
std::optional< ExtendedSupportedRatesIE > extendedRates
supported extended rates
void AddSupportedRate(uint64_t bs)
Add the given rate to the supported rates.
MpduType type
type of MPDU
SignalNoiseDbm structure.
static void AssignWifiRandomStreams(Ptr< WifiMac > mac, int64_t stream)
static WifiTestSuite g_wifiTestSuite
the test suite
std::tuple< SupportedRates, std::optional< ExtendedSupportedRatesIE >, std::vector< Ssid > > MgtTestElems
List of Information Elements included in the test management frame.