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);
203 m_mac.SetTypeId(
"ns3::AdhocWifiMac");
204 m_propDelay.SetTypeId(
"ns3::ConstantSpeedPropagationDelayModel");
206 m_manager.SetTypeId(
"ns3::ArfWifiManager");
208 m_manager.SetTypeId(
"ns3::AarfWifiManager");
210 m_manager.SetTypeId(
"ns3::ConstantRateWifiManager");
212 m_manager.SetTypeId(
"ns3::OnoeWifiManager");
214 m_manager.SetTypeId(
"ns3::AmrrWifiManager");
216 m_manager.SetTypeId(
"ns3::IdealWifiManager");
219 m_mac.SetTypeId(
"ns3::AdhocWifiMac");
221 m_mac.SetTypeId(
"ns3::ApWifiMac");
223 m_mac.SetTypeId(
"ns3::StaWifiMac");
226 m_propDelay.SetTypeId(
"ns3::RandomPropagationDelayModel");
227 m_mac.SetTypeId(
"ns3::AdhocWifiMac");
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);
377 m_mac.SetTypeId(
"ns3::AdhocWifiMac");
378 m_propDelay.SetTypeId(
"ns3::ConstantSpeedPropagationDelayModel");
379 m_manager.SetTypeId(
"ns3::ConstantRateWifiManager");
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);
533 m_mac.SetTypeId(
"ns3::AdhocWifiMac");
534 m_propDelay.SetTypeId(
"ns3::ConstantSpeedPropagationDelayModel");
535 m_manager.SetTypeId(
"ns3::ConstantRateWifiManager");
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));
752 server->SetLocal(socket);
753 wifiApNode.Get(0)->AddApplication(server);
754 server->SetStartTime(
Seconds(0));
755 server->SetStopTime(
Seconds(52));
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);
901 packetSocket.
Install(wifiStaNode);
902 packetSocket.
Install(wifiApNode);
907 client->SetRemote(socket);
909 client->SetStartTime(
Seconds(1));
910 client->SetStopTime(
Seconds(3));
913 server->SetLocal(socket);
914 wifiApNode.Get(0)->AddApplication(server);
915 server->SetStartTime(
Seconds(0));
916 server->SetStopTime(
Seconds(4));
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 "802.11ax-2.4GHz configuration");
1086 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1091 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1092 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1101 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1102 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_6GHZ, 0}"));
1103 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1108 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1113 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1115 phy.Set(
"ChannelSettings",
StringValue(
"{0, 10, BAND_5GHZ, 0}"));
1116 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1121 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1126 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1128 phy.Set(
"ChannelSettings",
StringValue(
"{0, 5, BAND_5GHZ, 0}"));
1129 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1134 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1139 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1141 phy.Set(
"ChannelSettings",
StringValue(
"{44, 20, BAND_5GHZ, 0}"));
1142 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1147 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1152 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1153 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1154 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1157 std::ostringstream path;
1158 path <<
"/NodeList/*/DeviceList/" << staDevice.
Get(0)->GetIfIndex()
1159 <<
"/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings";
1164 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1169 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1170 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1171 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1174 std::ostringstream path;
1175 path <<
"/NodeList/*/DeviceList/" << staDevice.
Get(0)->GetIfIndex()
1176 <<
"/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings";
1183 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1188 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1190 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1192 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{3, 20, BAND_2_4GHZ, 0}"));
1194 std::ostringstream path;
1195 path <<
"/NodeList/*/DeviceList/" << staDevice.
Get(0)->GetIfIndex()
1196 <<
"/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings";
1203 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_UNSPECIFIED, 0}"));
1208 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1211 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1212 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1214 bool exceptionThrown =
false;
1217 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{45, 0, BAND_5GHZ, 0}"));
1219 catch (
const std::runtime_error&)
1221 exceptionThrown =
true;
1229 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1231 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1232 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1236 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{100, 0, BAND_5GHZ, 0}"));
1246 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1248 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1249 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1251 bool exceptionThrown =
false;
1256 catch (
const std::runtime_error&)
1258 exceptionThrown =
true;
1266 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1269 phy.Set(
"ChannelSettings",
StringValue(
"{44, 0, BAND_5GHZ, 0}"));
1270 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1272 bool exceptionThrown =
false;
1275 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{45, 0, BAND_5GHZ, 0}"));
1277 catch (
const std::runtime_error&)
1279 exceptionThrown =
true;
1283 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
1288 exceptionThrown =
false;
1291 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{43, 0, BAND_5GHZ, 0}"));
1293 catch (
const std::runtime_error&)
1295 exceptionThrown =
true;
1299 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
1307 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
1308 phy.Set(
"ChannelSettings",
StringValue(
"{40, 0, BAND_5GHZ, 0}"));
1310 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1317 staDevice = wifi.Install(phy, macSta, wifiStaNode.
Get(0));
1319 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{40, 0, BAND_5GHZ, 0}"));
1324 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
1329 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{40, 0, BAND_5GHZ, 0}"));
1334 bool exceptionThrown =
false;
1337 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{45, 0, BAND_5GHZ, 0}"));
1339 catch (
const std::runtime_error&)
1341 exceptionThrown =
true;
1343 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
1349 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
1350 exceptionThrown =
false;
1353 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{43, 0, BAND_5GHZ, 0}"));
1355 catch (
const std::runtime_error&)
1357 exceptionThrown =
true;
1383 void DoRun()
override;
1397 :
TestCase(
"Test case for Bug 2222"),
1422 int64_t streamNumber = 100;
1429 phy.SetChannel(channel.Create());
1432 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager",
1439 mac.SetType(
"ns3::AdhocWifiMac",
"QosSupported",
BooleanValue(
true));
1442 wifiDevices = wifi.Install(phy, mac, wifiNodes);
1450 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
1451 positionAlloc->Add(Vector(10.0, 0.0, 0.0));
1452 mobility.SetPositionAllocator(positionAlloc);
1454 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
1455 mobility.Install(wifiNodes);
1466 packetSocket.
Install(wifiNodes);
1469 clientLowPriority->SetAttribute(
"PacketSize",
UintegerValue(1460));
1470 clientLowPriority->SetAttribute(
"MaxPackets",
UintegerValue(1));
1471 clientLowPriority->SetAttribute(
"Priority",
UintegerValue(4));
1472 clientLowPriority->SetRemote(socket);
1474 clientLowPriority->SetStartTime(
Seconds(0));
1475 clientLowPriority->SetStopTime(
Seconds(1));
1478 clientHighPriority->SetAttribute(
"PacketSize",
UintegerValue(1460));
1479 clientHighPriority->SetAttribute(
"MaxPackets",
UintegerValue(1));
1480 clientHighPriority->SetAttribute(
"Priority",
UintegerValue(6));
1481 clientHighPriority->SetRemote(socket);
1483 clientHighPriority->SetStartTime(
Seconds(0));
1484 clientHighPriority->SetStopTime(
Seconds(1));
1487 server->SetLocal(socket);
1489 server->SetStartTime(
Seconds(0));
1490 server->SetStopTime(
Seconds(1));
1492 Config::Connect(
"/NodeList/*/DeviceList/*/RemoteStationManager/MacTxDataFailed",
1501 "unexpected number of internal collisions!");
1522 void DoRun()
override;
1530 std::vector<FreqWidthSubbandModulationTuple>
1555 :
TestCase(
"Test case for Bug 2843"),
1569 std::size_t numBands = c->GetNumBands();
1570 const Hz_u startingFreq{c->Begin()->fl};
1583 std::make_tuple(startingFreq,
m_channelWidth, numBands, modulationClass);
1587 if (*it == tupleForCurrentTx)
1603 for (uint8_t i = 0; i < numPackets; i++)
1606 sourceDevice->Send(pkt, destination, 0);
1613 MHz_u channelWidth{40};
1619 wifiApNode.Create(1);
1624 lossModel->SetFrequency(5.190e9);
1625 spectrumChannel->AddPropagationLossModel(lossModel);
1629 spectrumChannel->SetPropagationDelayModel(delayModel);
1633 spectrumPhy.
Set(
"ChannelSettings",
StringValue(
"{38, 40, BAND_5GHZ, 0}"));
1639 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager",
1648 mac.SetType(
"ns3::StaWifiMac");
1650 staDevice = wifi.Install(spectrumPhy, mac, wifiStaNode);
1652 mac.SetType(
"ns3::ApWifiMac");
1654 apDevice = wifi.Install(spectrumPhy, mac, wifiApNode);
1658 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
1659 positionAlloc->Add(Vector(1.0, 0.0, 0.0));
1660 mobility.SetPositionAllocator(positionAlloc);
1662 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
1663 mobility.Install(wifiApNode);
1664 mobility.Install(wifiStaNode);
1672 staDevice.
Get(0)->GetAddress());
1678 staDevice.
Get(0)->GetAddress());
1680 Config::Connect(
"/ChannelList/*/$ns3::MultiModelSpectrumChannel/TxSigParams",
1694 "The starting frequency of the first tuple should be shifted 20 MHz to "
1695 "the right wrt second tuple");
1699 "First tuple's channel width should be 20 MHz");
1702 "First tuple should have 193 subbands (64+DC, 20MHz+DC, inband and 64*2 "
1703 "out-of-band, 20MHz on each side)");
1706 "First tuple should be OFDM");
1710 "Second tuple's channel width should be 40 MHz");
1713 "Second tuple should have 385 subbands (128+DC, 40MHz+DC, inband and "
1714 "128*2 out-of-band, 40MHz on each side)");
1717 "Second tuple should be VHT_OFDM");
1721 "The starting frequency of the third tuple should be the same as the "
1725 "Third tuple's channel width should be 40 MHz");
1728 "Third tuple should have 385 subbands (128+DC, 40MHz+DC, inband and "
1729 "128*2 out-of-band, 40MHz on each side)");
1732 "Third tuple should be OFDM");
1752 void DoRun()
override;
1779 :
TestCase(
"Test case for Bug 2831"),
1805 packet->RemoveHeader(hdr);
1817 packet->RemoveHeader(beacon);
1818 const auto& htOperation = beacon.Get<
HtOperation>();
1819 if (htOperation.has_value() && htOperation->GetStaChannelWidth() > 0)
1835 propDelay.
SetTypeId(
"ns3::ConstantSpeedPropagationDelayModel");
1838 channel->SetPropagationDelayModel(propagationDelay);
1839 channel->SetPropagationLossModel(propagationLoss);
1843 apNode->AddDevice(apDev);
1846 apDev->SetHtConfiguration(apHtConfiguration);
1848 manager.
SetTypeId(
"ns3::ConstantRateWifiManager");
1852 apMobility->SetPosition(Vector(0.0, 0.0, 0.0));
1853 apNode->AggregateObject(apMobility);
1859 m_apPhy->SetInterferenceHelper(apInterferenceHelper);
1860 m_apPhy->SetErrorRateModel(error);
1862 m_apPhy->SetMobility(apMobility);
1868 mac.SetTypeId(
"ns3::ApWifiMac");
1871 for (
const std::string ac : {
"BE",
"BK",
"VI",
"VO"})
1877 auto apMac = mac.Create<
WifiMac>();
1880 apDev->SetMac(apMac);
1885 fem->SetAddress(apMac->GetAddress());
1887 protectionManager->SetWifiMac(apMac);
1888 fem->SetProtectionManager(protectionManager);
1890 ackManager->SetWifiMac(apMac);
1891 fem->SetAckManager(ackManager);
1895 staNode->AddDevice(staDev);
1898 staDev->SetHtConfiguration(staHtConfiguration);
1902 staMobility->SetPosition(Vector(1.0, 0.0, 0.0));
1903 staNode->AggregateObject(staMobility);
1908 m_staPhy->SetInterferenceHelper(staInterferenceHelper);
1909 m_staPhy->SetErrorRateModel(error);
1911 m_staPhy->SetMobility(staMobility);
1916 mac.SetTypeId(
"ns3::StaWifiMac");
1917 for (
const std::string ac : {
"BE",
"BK",
"VI",
"VO"})
1923 auto staMac = mac.Create<
WifiMac>();
1924 staDev->SetMac(staMac);
1925 staMac->SetDevice(staDev);
1931 fem = staMac->GetFrameExchangeManager();
1932 fem->SetAddress(staMac->GetAddress());
1934 protectionManager->SetWifiMac(staMac);
1935 fem->SetProtectionManager(protectionManager);
1937 ackManager->SetWifiMac(staMac);
1938 fem->SetAckManager(ackManager);
1940 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/PhyRxBegin",
1953 "Incorrect operational channel width before channel change");
1956 "Incorrect operational channel width after channel change");
1980 void DoRun()
override;
2011 :
TestCase(
"Test case for StaWifiMac scanning capability")
2030 mac->SetAttribute(
"BeaconGeneration",
BooleanValue(
true));
2046 int64_t streamNumber = 1;
2056 phy.SetChannel(channel.Create());
2060 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager");
2065 mac.SetType(
"ns3::ApWifiMac",
"BeaconGeneration",
BooleanValue(
true));
2066 apDevice = wifi.Install(phy, mac, apNodes);
2067 mac.SetType(
"ns3::ApWifiMac",
"BeaconGeneration",
BooleanValue(nearestApBeaconGeneration));
2068 apDeviceNearest = wifi.Install(phy, mac, apNodeNearest);
2071 mac.SetType(
"ns3::StaWifiMac",
"ActiveProbing",
BooleanValue(staActiveProbe));
2072 staDevice = wifi.Install(phy, mac, staNode);
2081 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
2082 positionAlloc->Add(Vector(10.0, 0.0, 0.0));
2083 positionAlloc->Add(Vector(5.0, 5.0, 0.0));
2084 positionAlloc->Add(Vector(6.0, 5.0, 0.0));
2085 mobility.SetPositionAllocator(positionAlloc);
2087 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
2088 mobility.Install(apNodes);
2089 mobility.Install(apNodeNearest);
2090 mobility.Install(staNode);
2092 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/$ns3::StaWifiMac/Assoc",
2119 "STA is associated to the wrong AP");
2134 "STA is associated to the wrong AP");
2150 secondNearestApAddr,
2151 "STA is associated to the wrong AP");
2183 void DoRun()
override;
2208 std::string context,
2225 uint16_t channelFreqMhz,
2267 :
TestCase(
"Test case for Bug 2470"),
2313 std::string context,
2318 auto psdu = psduMap.begin()->second;
2325 auto uid = psdu->GetPayload(0)->GetUid();
2326 rxErrorModel->SetList({uid});
2333 uint16_t channelFreqMhz,
2347 packet->RemoveHeader(hdr);
2360 packet->RemoveHeader(hdr);
2372 for (
uint32_t i = 0; i < numPackets; i++)
2375 sourceDevice->Send(pkt, destination, 0);
2384 int64_t streamNumber = 200;
2388 wifiApNode.Create(1);
2393 phy.SetChannel(channel.Create());
2397 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager",
2405 phy.Set(
"ChannelSettings",
StringValue(
"{36, 20, BAND_5GHZ, 0}"));
2406 mac.SetType(
"ns3::ApWifiMac",
"EnableBeaconJitter",
BooleanValue(
false));
2407 apDevice = wifi.Install(phy, mac, wifiApNode);
2410 mac.SetType(
"ns3::StaWifiMac");
2411 staDevice = wifi.Install(phy, mac, wifiStaNode);
2419 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
2420 positionAlloc->Add(Vector(1.0, 0.0, 0.0));
2421 mobility.SetPositionAllocator(positionAlloc);
2423 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
2424 mobility.Install(wifiApNode);
2425 mobility.Install(wifiStaNode);
2429 switch (rcvErrorType)
2438 NS_ABORT_MSG(
"Station type " << +rcvErrorType <<
" cannot be used here");
2440 wifiMac->GetWifiPhy(0)->SetPostReceptionErrorModel(rxErrorModel);
2443 "/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/MonitorSnifferRx",
2447 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/$ns3::WifiMac/BE_Txop/"
2448 "BlockAckManager/AgreementState",
2451 "/DeviceList/*/$ns3::WifiNetDevice/Phys/0/PhyTxPsduBegin",
2459 staDevice.
Get(0)->GetAddress());
2465 staDevice.
Get(0)->GetAddress());
2471 staDevice.
Get(0)->GetAddress());
2477 staDevice.
Get(0)->GetAddress());
2496 "Receiving incorrect number of normal MPDU packet on subtest 1");
2499 "Receiving incorrect number of A-MPDU packets on subtest 1");
2503 "Incorrect number of times the ADDBA state machine was in "
2504 "established state on subtest 1");
2508 "Incorrect number of times the ADDBA state machine was in pending state on subtest 1");
2512 "Incorrect number of times the ADDBA state machine was in rejected state on subtest 1");
2516 "Incorrect number of times the ADDBA state machine was in no_reply state on subtest 1");
2520 "Incorrect number of times the ADDBA state machine was in reset state on subtest 1");
2539 "Receiving incorrect number of normal MPDU packet on subtest 2");
2542 "Receiving incorrect number of A-MPDU packet on subtest 2");
2546 "Incorrect number of times the ADDBA state machine was in "
2547 "established state on subtest 2");
2551 "Incorrect number of times the ADDBA state machine was in pending state on subtest 2");
2555 "Incorrect number of times the ADDBA state machine was in rejected state on subtest 2");
2559 "Incorrect number of times the ADDBA state machine was in no_reply state on subtest 2");
2563 "Incorrect number of times the ADDBA state machine was in reset state on subtest 2");
2591 void DoRun()
override;
2598 void RunOne(
bool useAmpdu);
2627 :
TestCase(
"Test case for issue #40"),
2647 for (uint8_t i = 0; i < numPackets; i++)
2650 sourceDevice->Send(pkt, destination, 0);
2670 int64_t streamNumber = 100;
2674 wifiApNode.Create(1);
2679 phy.SetChannel(channel.Create());
2684 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
2688 mac.SetType(
"ns3::ApWifiMac");
2689 apDevice = wifi.Install(phy, mac, wifiApNode);
2692 mac.SetType(
"ns3::StaWifiMac");
2693 staDevice = wifi.Install(phy, mac, wifiStaNode);
2701 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
2702 positionAlloc->Add(Vector(10.0, 0.0, 0.0));
2703 mobility.SetPositionAllocator(positionAlloc);
2705 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
2706 mobility.Install(wifiApNode);
2708 mobility.SetMobilityModel(
"ns3::WaypointMobilityModel");
2709 mobility.Install(wifiStaNode);
2711 Config::Connect(
"/NodeList/*/DeviceList/*/RemoteStationManager/MacTxFinalDataFailed",
2713 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/$ns3::WifiMac/MacRx",
2718 staWaypointMobility->AddWaypoint(
Waypoint(
Seconds(1), Vector(10.0, 0.0, 0.0)));
2719 staWaypointMobility->AddWaypoint(
Waypoint(
Seconds(1.5), Vector(50.0, 0.0, 0.0)));
2727 ap_device->GetMac()->GetAttribute(
"BE_Txop", ptr);
2738 staDevice.
Get(0)->GetAddress());
2747 staDevice.
Get(0)->GetAddress());
2756 staDevice.
Get(0)->GetAddress());
2762 staDevice.
Get(0)->GetAddress());
2768 staDevice.
Get(0)->GetAddress());
2774 staDevice.
Get(0)->GetAddress());
2780 staDevice.
Get(0)->GetAddress());
2786 (useAmpdu ? 14 : 7),
2787 "Incorrect number of transmitted packets");
2789 (useAmpdu ? 12 : 6),
2790 "Incorrect number of successfully received packets");
2793 "Incorrect number of dropped TX packets");
2826 void DoRun()
override;
2855 :
TestCase(
"Test case for issue #169")
2871 for (uint8_t i = 0; i < numPackets; i++)
2874 packet->AddPacketTag(priorityTag);
2875 sourceDevice->Send(packet, destination, 0);
2885 if (psdus.begin()->second->GetSize() >= 1000)
2889 "Ideal rate manager selected incorrect modulation class");
2898 int64_t streamNumber = 100;
2902 wifiApNode.Create(1);
2907 phy.SetChannel(channel.Create());
2911 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
2915 mac.SetType(
"ns3::ApWifiMac");
2916 apDevice = wifi.Install(phy, mac, wifiApNode);
2919 mac.SetType(
"ns3::StaWifiMac");
2920 staDevice = wifi.Install(phy, mac, wifiStaNode);
2928 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
2929 positionAlloc->Add(Vector(1.0, 0.0, 0.0));
2930 mobility.SetPositionAllocator(positionAlloc);
2932 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
2933 mobility.Install(wifiApNode);
2934 mobility.Install(wifiStaNode);
2936 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/PhyTxPsduBegin",
2945 staDevice.
Get(0)->GetAddress(),
2954 staDevice.
Get(0)->GetAddress(),
2983 void DoRun()
override;
3021 :
TestCase(
"Test case for use of channel bonding with Ideal rate manager")
3032 Config::Set(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/ChannelSettings",
3033 StringValue(
"{0, " + std::to_string(
static_cast<uint16_t
>(channelWidth)) +
3034 ", BAND_5GHZ, 0}"));
3041 sourceDevice->Send(packet, destination, 0);
3050 if (psduMap.begin()->second->GetSize() >= 1000)
3061 "Last selected WifiMode "
3062 <<
m_txMode <<
" does not match expected WifiMode " << expectedMode);
3070 int64_t streamNumber = 100;
3074 wifiApNode.Create(1);
3079 phy.SetChannel(channel.Create());
3083 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
3087 mac.SetType(
"ns3::ApWifiMac");
3088 apDevice = wifi.Install(phy, mac, wifiApNode);
3091 mac.SetType(
"ns3::StaWifiMac");
3092 staDevice = wifi.Install(phy, mac, wifiStaNode);
3100 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
3101 positionAlloc->Add(Vector(50.0, 0.0, 0.0));
3102 mobility.SetPositionAllocator(positionAlloc);
3104 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
3105 mobility.Install(wifiApNode);
3106 mobility.Install(wifiStaNode);
3108 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/PhyTxPsduBegin",
3120 staDevice.
Get(0)->GetAddress());
3136 staDevice.
Get(0)->GetAddress());
3152 staDevice.
Get(0)->GetAddress());
3179 void DoRun()
override;
3228 :
TestCase(
"Test case for use of imbalanced MIMO settings with Ideal rate manager")
3239 Config::Set(
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/Antennas",
3241 Config::Set(
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/MaxSupportedTxSpatialStreams",
3243 Config::Set(
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/MaxSupportedRxSpatialStreams",
3250 Config::Set(
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/Antennas",
3252 Config::Set(
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/MaxSupportedTxSpatialStreams",
3254 Config::Set(
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/MaxSupportedRxSpatialStreams",
3262 sourceDevice->Send(packet, destination, 0);
3271 if (psdus.begin()->second->GetSize() >= 1000)
3283 <<
" does not match expected Nss " << expectedNss);
3291 "Last selected WifiMode " <<
m_txVector.GetMode()
3292 <<
" does not match expected WifiMode "
3301 int64_t streamNumber = 100;
3305 wifiApNode.Create(1);
3310 phy.SetChannel(channel.Create());
3314 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
3318 mac.SetType(
"ns3::ApWifiMac");
3319 apDevice = wifi.Install(phy, mac, wifiApNode);
3322 mac.SetType(
"ns3::StaWifiMac");
3323 staDevice = wifi.Install(phy, mac, wifiStaNode);
3331 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
3332 positionAlloc->Add(Vector(40.0, 0.0, 0.0));
3333 mobility.SetPositionAllocator(positionAlloc);
3335 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
3336 mobility.Install(wifiApNode);
3337 mobility.Install(wifiStaNode);
3339 Config::Connect(
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/PhyTxPsduBegin",
3351 staDevice.
Get(0)->GetAddress());
3356 staDevice.
Get(0)->GetAddress());
3374 staDevice.
Get(0)->GetAddress());
3379 staDevice.
Get(0)->GetAddress());
3398 staDevice.
Get(0)->GetAddress());
3403 staDevice.
Get(0)->GetAddress());
3421 staDevice.
Get(0)->GetAddress());
3426 staDevice.
Get(0)->GetAddress());
3445 staDevice.
Get(0)->GetAddress());
3450 staDevice.
Get(0)->GetAddress());
3470 staDevice.
Get(0)->GetAddress());
3475 staDevice.
Get(0)->GetAddress());
3493 staDevice.
Get(0)->GetAddress());
3498 staDevice.
Get(0)->GetAddress());
3517 staDevice.
Get(0)->GetAddress());
3522 staDevice.
Get(0)->GetAddress());
3542 staDevice.
Get(0)->GetAddress());
3547 staDevice.
Get(0)->GetAddress());
3564 staDevice.
Get(0)->GetAddress());
3603 uint16_t expectedDataRate);
3604 void DoRun()
override;
3608 :
TestCase(
"Check data rates for different RU types.")
3617 uint16_t expectedDataRate)
3631 txVector.SetMode(mode, staId);
3632 txVector.SetNss(nss, staId);
3634 txVector.SetRu(ru, staId);
3635 uint64_t dataRate = round(mode.GetDataRate(txVector, staId) / 100000.0);
3637 if (
static_cast<uint16_t
>(dataRate) != expectedDataRate)
3639 std::cerr <<
"RU=" << ruType <<
" mode=" << mode <<
" Nss=" << +nss
3640 <<
" guardInterval=" << guardInterval <<
" expected=" << expectedDataRate
3642 <<
" computed=" <<
static_cast<uint16_t
>(dataRate) <<
" x100kbps" << std::endl;
3670 "26-tone RU data rate verification for different MCSs, GIs, and Nss's failed");
3682 "Data rate verification for RUs above 52-tone RU (included) failed");
3687 std::tuple<SupportedRates, std::optional<ExtendedSupportedRatesIE>, std::vector<Ssid>>;
3721 .SetGroupName(
"Wifi")
3745 void DoRun()
override;
3771 "Expected a SupportedRates IE to be included");
3774 "Expected no ExtendedSupportedRatesIE to be included");
3791 "Expected a SupportedRates IE to be included");
3794 "Expected an ExtendedSupportedRatesIE to be included");
3800 Ssid one(
"Ssid One");
3801 frame.Get<
Ssid>().push_back(one);
3805 "Expected a SupportedRates IE to be included");
3808 "Expected an ExtendedSupportedRatesIE to be included");
3817 frame.Get<
Ssid>().emplace_back(
"Ssid Two");
3821 "Expected a SupportedRates IE to be included");
3824 "Expected an ExtendedSupportedRatesIE to be included");
3828 "Incorrect first SSID");
3831 "Incorrect second SSID");
3849 void DoRun()
override;
3863 :
TestCase(
"Test case for Bug 730"),
3883 wifiApNode.Create(1);
3887 phy.SetChannel(channel.Create());
3891 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager",
3898 auto ssid =
Ssid(
"ns-3-ssid");
3902 staDevices = wifi.Install(phy, mac, wifiStaNode);
3907 apDevices = wifi.Install(phy, mac, wifiApNode);
3908 auto apRemoteStationManager = apDevices.Get(0)
3910 ->GetRemoteStationManager()
3917 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
3918 positionAlloc->Add(Vector(1.0, 0.0, 0.0));
3919 mobility.SetPositionAllocator(positionAlloc);
3921 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
3922 mobility.Install(wifiApNode);
3923 mobility.Install(wifiStaNode);
3935 packetSocket.
Install(wifiStaNode);
3936 packetSocket.
Install(wifiApNode);
3941 client->SetRemote(socket);
3943 client->SetStartTime(
Seconds(1));
3944 client->SetStopTime(
Seconds(4.5));
3947 server->SetLocal(socket);
3948 wifiApNode.Get(0)->AddApplication(server);
3949 server->SetStartTime(
Seconds(0));
3950 server->SetStopTime(
Seconds(4.5));
3952 Config::Connect(
"/NodeList/1/ApplicationList/0/$ns3::PacketSocketServer/Rx",
3960 "/NodeList/0/DeviceList/0/RemoteStationManager/$ns3::ConstantRateWifiManager/DataMode",
3965 "/NodeList/0/DeviceList/0/RemoteStationManager/$ns3::ConstantRateWifiManager/DataMode",
3970 "/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.
Time m_2ndPktSetStart
time the second set of packets is generated
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()
bool CheckDataRate(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.
void DoRun() override
Implementation to actually run this TestCase.
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 unsuccessfully 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
AttributeValue implementation for Boolean.
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.
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.
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 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.
AttributeValue implementation for 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.
TestCase(const TestCase &)=delete
Caller graph was not generated because of its size.
TestSuite(std::string name, Type type=Type::UNIT)
Construct a new 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
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.
WifiChannelConfig::SegmentWithoutUnits ChannelTuple
kept for backward compatibility, can be deprecated when using strong types
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.
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.
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...
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.
@ WIFI_MOD_CLASS_OFDM
OFDM (Clause 17).
@ WIFI_MOD_CLASS_VHT
VHT (Clause 22).
@ NORMAL_MPDU
The MPDU is not part of an A-MPDU.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< void, Ptr< const WifiPsdu > > RxErrorCallback
Callback if PSDU unsuccessfully received.
static constexpr uint8_t WIFI_MIN_TX_PWR_LEVEL
minimum TX power level value
RuType
The different Resource Unit (RU) types.
double MHz_u
MHz weak type.
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.
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
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.