25#include "ns3/boolean.h"
26#include "ns3/command-line.h"
27#include "ns3/config-store.h"
28#include "ns3/config.h"
31#include "ns3/string.h"
32#include "ns3/uinteger.h"
33#include "ns3/wifi-net-device.h"
34#include "ns3/yans-wifi-helper.h"
35#include "ns3/yans-wifi-phy.h"
71main(
int argc,
char* argv[])
74 bool printAttributes =
false;
75 bool exceptionThrown =
false;
78 cmd.AddValue(
"testCase",
"Test case", testCase);
79 cmd.AddValue(
"printAttributes",
"If true, print out attributes", printAttributes);
80 cmd.Parse(argc, argv);
91 wifi.SetRemoteStationManager(
"ns3::IdealWifiManager");
95 ssid =
Ssid(
"wifi-phy-configuration");
97 macSta.
SetType(
"ns3::StaWifiMac",
103 macAp.
SetType(
"ns3::ApWifiMac",
114 StringValue(
"output-attributes-" + std::to_string(testCase) +
".txt"));
122 phySta = CreateObject<YansWifiPhy>();
124 NS_ASSERT(!phySta->GetOperatingChannel().IsSet());
133 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
137 NS_ASSERT(phySta->GetChannelNumber() == 36);
138 NS_ASSERT(phySta->GetChannelWidth() == 20);
139 NS_ASSERT(phySta->GetFrequency() == 5180);
144 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
148 NS_ASSERT(phySta->GetChannelNumber() == 1);
149 NS_ASSERT(phySta->GetChannelWidth() == 22);
150 NS_ASSERT(phySta->GetFrequency() == 2412);
155 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
159 NS_ASSERT(phySta->GetChannelNumber() == 1);
160 NS_ASSERT(phySta->GetChannelWidth() == 20);
161 NS_ASSERT(phySta->GetFrequency() == 2412);
167 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
171 NS_ASSERT(phySta->GetChannelNumber() == 36);
172 NS_ASSERT(phySta->GetChannelWidth() == 20);
173 NS_ASSERT(phySta->GetFrequency() == 5180);
178 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
182 NS_ASSERT(phySta->GetChannelNumber() == 1);
183 NS_ASSERT(phySta->GetChannelWidth() == 20);
184 NS_ASSERT(phySta->GetFrequency() == 2412);
189 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
193 NS_ASSERT(phySta->GetChannelNumber() == 42);
194 NS_ASSERT(phySta->GetChannelWidth() == 80);
195 NS_ASSERT(phySta->GetFrequency() == 5210);
201 phy.Set(
"ChannelSettings",
StringValue(
"{0, 0, BAND_2_4GHZ, 0}"));
202 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
206 NS_ASSERT(phySta->GetChannelNumber() == 1);
207 NS_ASSERT(phySta->GetChannelWidth() == 20);
208 NS_ASSERT(phySta->GetFrequency() == 2412);
213 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
217 NS_ASSERT(phySta->GetChannelNumber() == 42);
218 NS_ASSERT(phySta->GetChannelWidth() == 80);
219 NS_ASSERT(phySta->GetFrequency() == 5210);
225 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
229 NS_ASSERT(phySta->GetChannelNumber() == 7);
230 NS_ASSERT(phySta->GetChannelWidth() == 80);
231 NS_ASSERT(phySta->GetFrequency() == 5985);
237 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
241 NS_ASSERT(phySta->GetChannelNumber() == 172);
242 NS_ASSERT(phySta->GetChannelWidth() == 10);
243 NS_ASSERT(phySta->GetFrequency() == 5860);
249 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
253 NS_ASSERT(phySta->GetChannelNumber() == 171);
254 NS_ASSERT(phySta->GetChannelWidth() == 5);
255 NS_ASSERT(phySta->GetFrequency() == 5860);
260 phy.Set(
"ChannelSettings",
StringValue(
"{44, 20, BAND_5GHZ, 0}"));
261 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
265 NS_ASSERT(phySta->GetChannelNumber() == 44);
266 NS_ASSERT(phySta->GetChannelWidth() == 20);
267 NS_ASSERT(phySta->GetFrequency() == 5220);
273 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
278 "/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings",
281 "/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings",
284 NS_ASSERT(phySta->GetChannelNumber() == 40);
285 NS_ASSERT(phySta->GetChannelWidth() == 20);
286 NS_ASSERT(phySta->GetFrequency() == 5200);
292 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
297 "/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings",
300 "/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings",
302 NS_ASSERT(phySta->GetChannelNumber() == 46);
303 NS_ASSERT(phySta->GetChannelWidth() == 40);
304 NS_ASSERT(phySta->GetFrequency() == 5230);
310 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
315 "/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings",
318 "/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelSettings",
320 NS_ASSERT(phySta->GetChannelNumber() == 46);
321 NS_ASSERT(phySta->GetChannelWidth() == 40);
322 NS_ASSERT(phySta->GetFrequency() == 5230);
329 exceptionThrown =
false;
332 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
334 catch (
const std::runtime_error&)
336 exceptionThrown =
true;
339 exceptionThrown =
false;
344 catch (
const std::runtime_error&)
346 exceptionThrown =
true;
356 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
360 NS_ASSERT(phySta->GetChannelNumber() == 100);
361 NS_ASSERT(phySta->GetChannelWidth() == 20);
362 NS_ASSERT(phySta->GetFrequency() == 5500);
368 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
371 exceptionThrown =
false;
376 catch (
const std::runtime_error&)
378 exceptionThrown =
true;
387 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
390 exceptionThrown =
false;
393 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{45, 0, BAND_5GHZ, 0}"));
395 catch (
const std::runtime_error&)
397 exceptionThrown =
true;
401 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
403 NS_ASSERT(phySta->GetChannelNumber() == 36);
404 NS_ASSERT(phySta->GetChannelWidth() == 20);
405 NS_ASSERT(phySta->GetFrequency() == 5180);
406 exceptionThrown =
false;
409 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{43, 0, BAND_5GHZ, 0}"));
411 catch (
const std::runtime_error&)
413 exceptionThrown =
true;
417 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
418 NS_ASSERT(phySta->GetChannelNumber() == 36);
419 NS_ASSERT(phySta->GetChannelWidth() == 20);
420 NS_ASSERT(phySta->GetFrequency() == 5180);
427 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
430 NS_ASSERT(phySta->GetChannelNumber() == 40);
431 NS_ASSERT(phySta->GetChannelWidth() == 20);
432 NS_ASSERT(phySta->GetFrequency() == 5200);
435 staDevice =
wifi.Install(phy, macSta, wifiStaNode.
Get(0));
438 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{40, 0, BAND_5GHZ, 0}"));
439 NS_ASSERT(phySta->GetChannelNumber() == 40);
440 NS_ASSERT(phySta->GetChannelWidth() == 20);
441 NS_ASSERT(phySta->GetFrequency() == 5200);
442 exceptionThrown =
false;
445 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{45, 0, BAND_5GHZ, 0}"));
447 catch (
const std::runtime_error&)
449 exceptionThrown =
true;
451 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
453 NS_ASSERT(phySta->GetChannelNumber() == 36);
454 NS_ASSERT(phySta->GetChannelWidth() == 20);
455 NS_ASSERT(phySta->GetFrequency() == 5180);
457 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{36, 0, BAND_5GHZ, 0}"));
458 exceptionThrown =
false;
461 phySta->SetAttribute(
"ChannelSettings",
StringValue(
"{43, 0, BAND_5GHZ, 0}"));
463 catch (
const std::runtime_error&)
465 exceptionThrown =
true;
468 NS_ASSERT(phySta->GetChannelNumber() == 36);
469 NS_ASSERT(phySta->GetChannelWidth() == 20);
470 NS_ASSERT(phySta->GetFrequency() == 5180);
475 std::cerr <<
"Invalid testcase number " << testCase << std::endl;
AttributeValue implementation for Boolean.
Parse command-line arguments.
Introspection did not find any typical Config paths.
void ConfigureAttributes()
Configure the attribute values.
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.
Smart pointer class similar to boost::intrusive_ptr.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
The IEEE 802.11 SSID Information Element.
AttributeValue implementation for Ssid.
Hold variables of type string.
AttributeValue implementation for Time.
helps to create WifiNetDevice objects
create MAC layers for a ns3::WifiNetDevice.
void SetType(std::string type, Args &&... args)
Hold together all Wifi-related objects.
std::tuple< uint8_t, uint16_t, int, uint8_t > ChannelTuple
Tuple identifying an operating channel.
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.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
void SetDefault(std::string name, const AttributeValue &value)
void Set(std::string path, const AttributeValue &value)
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
@ WIFI_PHY_BAND_5GHZ
The 5 GHz band.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void PrintAttributesIfEnabled(bool enabled)
Print the attributes to a file.
Ptr< YansWifiPhy > GetYansWifiPhyPtr(const NetDeviceContainer &nc)
Get the Yans Wifi Phy Ptr object for the 1st node in the NodeContainer.