A Discrete-Event Network Simulator
API
wifi-spectrum-per-example.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2009 MIRKO BANCHI
4  * Copyright (c) 2015 University of Washington
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation;
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Authors: Mirko Banchi <mk.banchi@gmail.com>
20  * Sebastien Deronne <sebastien.deronne@gmail.com>
21  * Tom Henderson <tomhend@u.washington.edu>
22  *
23  * Adapted from wifi-ht-network.cc example
24  */
25 
26 #include <iomanip>
27 #include "ns3/command-line.h"
28 #include "ns3/config.h"
29 #include "ns3/uinteger.h"
30 #include "ns3/boolean.h"
31 #include "ns3/double.h"
32 #include "ns3/string.h"
33 #include "ns3/log.h"
34 #include "ns3/yans-wifi-helper.h"
35 #include "ns3/spectrum-wifi-helper.h"
36 #include "ns3/ssid.h"
37 #include "ns3/mobility-helper.h"
38 #include "ns3/internet-stack-helper.h"
39 #include "ns3/ipv4-address-helper.h"
40 #include "ns3/udp-client-server-helper.h"
41 #include "ns3/packet-sink-helper.h"
42 #include "ns3/on-off-helper.h"
43 #include "ns3/ipv4-global-routing-helper.h"
44 #include "ns3/packet-sink.h"
45 #include "ns3/yans-wifi-channel.h"
46 #include "ns3/multi-model-spectrum-channel.h"
47 #include "ns3/propagation-loss-model.h"
48 
49 // This is a simple example of an IEEE 802.11n Wi-Fi network.
50 //
51 // The main use case is to enable and test SpectrumWifiPhy vs YansWifiPhy
52 // for packet error ratio
53 //
54 // Network topology:
55 //
56 // Wi-Fi 192.168.1.0
57 //
58 // STA AP
59 // * <-- distance --> *
60 // | |
61 // n1 n2
62 //
63 // Users may vary the following command-line arguments in addition to the
64 // attributes, global values, and default values typically available:
65 //
66 // --simulationTime: Simulation time in seconds [10]
67 // --udp: UDP if set to 1, TCP otherwise [true]
68 // --distance: meters separation between nodes [50]
69 // --index: restrict index to single value between 0 and 31 [256]
70 // --wifiType: select ns3::SpectrumWifiPhy or ns3::YansWifiPhy [ns3::SpectrumWifiPhy]
71 // --errorModelType: select ns3::NistErrorRateModel or ns3::YansErrorRateModel [ns3::NistErrorRateModel]
72 // --enablePcap: enable pcap output [false]
73 //
74 // By default, the program will step through 32 index values, corresponding
75 // to the following MCS, channel width, and guard interval combinations:
76 // index 0-7: MCS 0-7, long guard interval, 20 MHz channel
77 // index 8-15: MCS 0-7, short guard interval, 20 MHz channel
78 // index 16-23: MCS 0-7, long guard interval, 40 MHz channel
79 // index 24-31: MCS 0-7, short guard interval, 40 MHz channel
80 // and send UDP for 10 seconds using each MCS, using the SpectrumWifiPhy and the
81 // NistErrorRateModel, at a distance of 50 meters. The program outputs
82 // results such as:
83 //
84 // wifiType: ns3::SpectrumWifiPhy distance: 50m; time: 10; TxPower: 1 dBm (1.3 mW)
85 // index MCS Rate (Mb/s) Tput (Mb/s) Received Signal (dBm) Noise (dBm) SNR (dB)
86 // 0 0 6.50 5.77 7414 -79.71 -93.97 14.25
87 // 1 1 13.00 11.58 14892 -79.71 -93.97 14.25
88 // 2 2 19.50 17.39 22358 -79.71 -93.97 14.25
89 // 3 3 26.00 22.96 29521 -79.71 -93.97 14.25
90 // ...
91 //
92 
93 using namespace ns3;
94 
95 // Global variables for use in callbacks.
98 uint32_t g_samples;
99 
101  uint16_t channelFreqMhz,
102  WifiTxVector txVector,
103  MpduInfo aMpdu,
104  SignalNoiseDbm signalNoise,
105  uint16_t staId)
106 
107 {
108  g_samples++;
109  g_signalDbmAvg += ((signalNoise.signal - g_signalDbmAvg) / g_samples);
110  g_noiseDbmAvg += ((signalNoise.noise - g_noiseDbmAvg) / g_samples);
111 }
112 
113 NS_LOG_COMPONENT_DEFINE ("WifiSpectrumPerExample");
114 
115 int main (int argc, char *argv[])
116 {
117  bool udp = true;
118  double distance = 50;
119  double simulationTime = 10; //seconds
120  uint16_t index = 256;
121  std::string wifiType = "ns3::SpectrumWifiPhy";
122  std::string errorModelType = "ns3::NistErrorRateModel";
123  bool enablePcap = false;
124  const uint32_t tcpPacketSize = 1448;
125 
126  CommandLine cmd (__FILE__);
127  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
128  cmd.AddValue ("udp", "UDP if set to 1, TCP otherwise", udp);
129  cmd.AddValue ("distance", "meters separation between nodes", distance);
130  cmd.AddValue ("index", "restrict index to single value between 0 and 31", index);
131  cmd.AddValue ("wifiType", "select ns3::SpectrumWifiPhy or ns3::YansWifiPhy", wifiType);
132  cmd.AddValue ("errorModelType", "select ns3::NistErrorRateModel or ns3::YansErrorRateModel", errorModelType);
133  cmd.AddValue ("enablePcap", "enable pcap output", enablePcap);
134  cmd.Parse (argc,argv);
135 
136  uint16_t startIndex = 0;
137  uint16_t stopIndex = 31;
138  if (index < 32)
139  {
140  startIndex = index;
141  stopIndex = index;
142  }
143 
144  std::cout << "wifiType: " << wifiType << " distance: " << distance << "m; time: " << simulationTime << "; TxPower: 1 dBm (1.3 mW)" << std::endl;
145  std::cout << std::setw (5) << "index" <<
146  std::setw (6) << "MCS" <<
147  std::setw (13) << "Rate (Mb/s)" <<
148  std::setw (12) << "Tput (Mb/s)" <<
149  std::setw (10) << "Received " <<
150  std::setw (12) << "Signal (dBm)" <<
151  std::setw (12) << "Noise (dBm)" <<
152  std::setw (9) << "SNR (dB)" <<
153  std::endl;
154  for (uint16_t i = startIndex; i <= stopIndex; i++)
155  {
156  uint32_t payloadSize;
157  if (udp)
158  {
159  payloadSize = 972; // 1000 bytes IPv4
160  }
161  else
162  {
163  payloadSize = 1448; // 1500 bytes IPv6
164  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize));
165  }
166 
167  NodeContainer wifiStaNode;
168  wifiStaNode.Create (1);
170  wifiApNode.Create (1);
171 
173  SpectrumWifiPhyHelper spectrumPhy;
174  if (wifiType == "ns3::YansWifiPhy")
175  {
177  channel.AddPropagationLoss ("ns3::FriisPropagationLossModel",
178  "Frequency", DoubleValue (5.180e9));
179  channel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
180  phy.SetChannel (channel.Create ());
181  phy.Set ("TxPowerStart", DoubleValue (1)); // dBm (1.26 mW)
182  phy.Set ("TxPowerEnd", DoubleValue (1));
183  }
184  else if (wifiType == "ns3::SpectrumWifiPhy")
185  {
186  Ptr<MultiModelSpectrumChannel> spectrumChannel
187  = CreateObject<MultiModelSpectrumChannel> ();
189  = CreateObject<FriisPropagationLossModel> ();
190  lossModel->SetFrequency (5.180e9);
191  spectrumChannel->AddPropagationLossModel (lossModel);
192 
194  = CreateObject<ConstantSpeedPropagationDelayModel> ();
195  spectrumChannel->SetPropagationDelayModel (delayModel);
196 
197  spectrumPhy.SetChannel (spectrumChannel);
198  spectrumPhy.SetErrorRateModel (errorModelType);
199  spectrumPhy.Set ("TxPowerStart", DoubleValue (1)); // dBm (1.26 mW)
200  spectrumPhy.Set ("TxPowerEnd", DoubleValue (1));
201  }
202  else
203  {
204  NS_FATAL_ERROR ("Unsupported WiFi type " << wifiType);
205  }
206 
207 
209  wifi.SetStandard (WIFI_STANDARD_80211n_5GHZ);
211 
212  Ssid ssid = Ssid ("ns380211n");
213 
214  double datarate = 0;
216  if (i == 0)
217  {
218  DataRate = StringValue ("HtMcs0");
219  datarate = 6.5;
220  }
221  else if (i == 1)
222  {
223  DataRate = StringValue ("HtMcs1");
224  datarate = 13;
225  }
226  else if (i == 2)
227  {
228  DataRate = StringValue ("HtMcs2");
229  datarate = 19.5;
230  }
231  else if (i == 3)
232  {
233  DataRate = StringValue ("HtMcs3");
234  datarate = 26;
235  }
236  else if (i == 4)
237  {
238  DataRate = StringValue ("HtMcs4");
239  datarate = 39;
240  }
241  else if (i == 5)
242  {
243  DataRate = StringValue ("HtMcs5");
244  datarate = 52;
245  }
246  else if (i == 6)
247  {
248  DataRate = StringValue ("HtMcs6");
249  datarate = 58.5;
250  }
251  else if (i == 7)
252  {
253  DataRate = StringValue ("HtMcs7");
254  datarate = 65;
255  }
256  else if (i == 8)
257  {
258  DataRate = StringValue ("HtMcs0");
259  datarate = 7.2;
260  }
261  else if (i == 9)
262  {
263  DataRate = StringValue ("HtMcs1");
264  datarate = 14.4;
265  }
266  else if (i == 10)
267  {
268  DataRate = StringValue ("HtMcs2");
269  datarate = 21.7;
270  }
271  else if (i == 11)
272  {
273  DataRate = StringValue ("HtMcs3");
274  datarate = 28.9;
275  }
276  else if (i == 12)
277  {
278  DataRate = StringValue ("HtMcs4");
279  datarate = 43.3;
280  }
281  else if (i == 13)
282  {
283  DataRate = StringValue ("HtMcs5");
284  datarate = 57.8;
285  }
286  else if (i == 14)
287  {
288  DataRate = StringValue ("HtMcs6");
289  datarate = 65;
290  }
291  else if (i == 15)
292  {
293  DataRate = StringValue ("HtMcs7");
294  datarate = 72.2;
295  }
296  else if (i == 16)
297  {
298  DataRate = StringValue ("HtMcs0");
299  datarate = 13.5;
300  }
301  else if (i == 17)
302  {
303  DataRate = StringValue ("HtMcs1");
304  datarate = 27;
305  }
306  else if (i == 18)
307  {
308  DataRate = StringValue ("HtMcs2");
309  datarate = 40.5;
310  }
311  else if (i == 19)
312  {
313  DataRate = StringValue ("HtMcs3");
314  datarate = 54;
315  }
316  else if (i == 20)
317  {
318  DataRate = StringValue ("HtMcs4");
319  datarate = 81;
320  }
321  else if (i == 21)
322  {
323  DataRate = StringValue ("HtMcs5");
324  datarate = 108;
325  }
326  else if (i == 22)
327  {
328  DataRate = StringValue ("HtMcs6");
329  datarate = 121.5;
330  }
331  else if (i == 23)
332  {
333  DataRate = StringValue ("HtMcs7");
334  datarate = 135;
335  }
336  else if (i == 24)
337  {
338  DataRate = StringValue ("HtMcs0");
339  datarate = 15;
340  }
341  else if (i == 25)
342  {
343  DataRate = StringValue ("HtMcs1");
344  datarate = 30;
345  }
346  else if (i == 26)
347  {
348  DataRate = StringValue ("HtMcs2");
349  datarate = 45;
350  }
351  else if (i == 27)
352  {
353  DataRate = StringValue ("HtMcs3");
354  datarate = 60;
355  }
356  else if (i == 28)
357  {
358  DataRate = StringValue ("HtMcs4");
359  datarate = 90;
360  }
361  else if (i == 29)
362  {
363  DataRate = StringValue ("HtMcs5");
364  datarate = 120;
365  }
366  else if (i == 30)
367  {
368  DataRate = StringValue ("HtMcs6");
369  datarate = 135;
370  }
371  else
372  {
373  DataRate = StringValue ("HtMcs7");
374  datarate = 150;
375  }
376 
377  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
378  "ControlMode", DataRate);
379 
380  NetDeviceContainer staDevice;
381  NetDeviceContainer apDevice;
382 
383  if (wifiType == "ns3::YansWifiPhy")
384  {
385  mac.SetType ("ns3::StaWifiMac",
386  "Ssid", SsidValue (ssid));
387  phy.Set ("ChannelWidth", UintegerValue (i <= 15 ? 20 : 40));
388  staDevice = wifi.Install (phy, mac, wifiStaNode);
389  mac.SetType ("ns3::ApWifiMac",
390  "Ssid", SsidValue (ssid));
391  phy.Set ("ChannelWidth", UintegerValue (i <= 15 ? 20 : 40));
392  apDevice = wifi.Install (phy, mac, wifiApNode);
393 
394  }
395  else if (wifiType == "ns3::SpectrumWifiPhy")
396  {
397  mac.SetType ("ns3::StaWifiMac",
398  "Ssid", SsidValue (ssid));
399  phy.Set ("ChannelWidth", UintegerValue (i <= 15 ? 20 : 40));
400  staDevice = wifi.Install (spectrumPhy, mac, wifiStaNode);
401  mac.SetType ("ns3::ApWifiMac",
402  "Ssid", SsidValue (ssid));
403  phy.Set ("ChannelWidth", UintegerValue (i <= 15 ? 20 : 40));
404  apDevice = wifi.Install (spectrumPhy, mac, wifiApNode);
405  }
406 
407  if (i <= 7)
408  {
409  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/HtConfiguration/ShortGuardIntervalSupported", BooleanValue (false));
410  }
411  else if (i > 7 && i <= 15)
412  {
413  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/HtConfiguration/ShortGuardIntervalSupported", BooleanValue (true));
414  }
415  else if (i > 15 && i <= 23)
416  {
417  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/HtConfiguration/ShortGuardIntervalSupported", BooleanValue (false));
418  }
419  else
420  {
421  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/HtConfiguration/ShortGuardIntervalSupported", BooleanValue (true));
422  }
423 
424  // mobility.
426  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
427 
428  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
429  positionAlloc->Add (Vector (distance, 0.0, 0.0));
430  mobility.SetPositionAllocator (positionAlloc);
431 
432  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
433 
434  mobility.Install (wifiApNode);
435  mobility.Install (wifiStaNode);
436 
437  /* Internet stack*/
439  stack.Install (wifiApNode);
440  stack.Install (wifiStaNode);
441 
443  address.SetBase ("192.168.1.0", "255.255.255.0");
444  Ipv4InterfaceContainer staNodeInterface;
445  Ipv4InterfaceContainer apNodeInterface;
446 
447  staNodeInterface = address.Assign (staDevice);
448  apNodeInterface = address.Assign (apDevice);
449 
450  /* Setting applications */
451  ApplicationContainer serverApp;
452  if (udp)
453  {
454  //UDP flow
455  uint16_t port = 9;
456  UdpServerHelper server (port);
457  serverApp = server.Install (wifiStaNode.Get (0));
458  serverApp.Start (Seconds (0.0));
459  serverApp.Stop (Seconds (simulationTime + 1));
460 
461  UdpClientHelper client (staNodeInterface.GetAddress (0), port);
462  client.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
463  client.SetAttribute ("Interval", TimeValue (Time ("0.0001"))); //packets/s
464  client.SetAttribute ("PacketSize", UintegerValue (payloadSize));
465  ApplicationContainer clientApp = client.Install (wifiApNode.Get (0));
466  clientApp.Start (Seconds (1.0));
467  clientApp.Stop (Seconds (simulationTime + 1));
468  }
469  else
470  {
471  //TCP flow
472  uint16_t port = 50000;
473  Address localAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
474  PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", localAddress);
475  serverApp = packetSinkHelper.Install (wifiStaNode.Get (0));
476  serverApp.Start (Seconds (0.0));
477  serverApp.Stop (Seconds (simulationTime + 1));
478 
479  OnOffHelper onoff ("ns3::TcpSocketFactory", Ipv4Address::GetAny ());
480  onoff.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
481  onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
482  onoff.SetAttribute ("PacketSize", UintegerValue (payloadSize));
483  onoff.SetAttribute ("DataRate", DataRateValue (1000000000)); //bit/s
484  AddressValue remoteAddress (InetSocketAddress (staNodeInterface.GetAddress (0), port));
485  onoff.SetAttribute ("Remote", remoteAddress);
486  ApplicationContainer clientApp = onoff.Install (wifiApNode.Get (0));
487  clientApp.Start (Seconds (1.0));
488  clientApp.Stop (Seconds (simulationTime + 1));
489  }
490 
491  Config::ConnectWithoutContext ("/NodeList/0/DeviceList/*/Phy/MonitorSnifferRx", MakeCallback (&MonitorSniffRx));
492 
493  if (enablePcap)
494  {
495  phy.SetPcapDataLinkType (WifiPhyHelper::DLT_IEEE802_11_RADIO);
496  std::stringstream ss;
497  ss << "wifi-spectrum-per-example-" << i;
498  phy.EnablePcap (ss.str (), apDevice);
499  }
500  g_signalDbmAvg = 0;
501  g_noiseDbmAvg = 0;
502  g_samples = 0;
503 
504  Simulator::Stop (Seconds (simulationTime + 1));
505  Simulator::Run ();
506 
507  double throughput = 0;
508  uint64_t totalPacketsThrough = 0;
509  if (udp)
510  {
511  //UDP
512  totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
513  throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0); //Mbit/s
514  }
515  else
516  {
517  //TCP
518  uint64_t totalBytesRx = DynamicCast<PacketSink> (serverApp.Get (0))->GetTotalRx ();
519  totalPacketsThrough = totalBytesRx / tcpPacketSize;
520  throughput = totalBytesRx * 8 / (simulationTime * 1000000.0); //Mbit/s
521  }
522  std::cout << std::setw (5) << i <<
523  std::setw (6) << (i % 8) <<
524  std::setprecision (2) << std::fixed <<
525  std::setw (10) << datarate <<
526  std::setw (12) << throughput <<
527  std::setw (8) << totalPacketsThrough;
528  if (totalPacketsThrough > 0)
529  {
530  std::cout << std::setw (12) << g_signalDbmAvg <<
531  std::setw (12) << g_noiseDbmAvg <<
532  std::setw (12) << (g_signalDbmAvg - g_noiseDbmAvg) <<
533  std::endl;
534  }
535  else
536  {
537  std::cout << std::setw (12) << "N/A" <<
538  std::setw (12) << "N/A" <<
539  std::setw (12) << "N/A" <<
540  std::endl;
541  }
543  }
544  return 0;
545 }
a polymophic address class
Definition: address.h:91
AttributeValue implementation for Address.
Definition: address.h:278
holds a vector of ns3::Application pointers.
Ptr< Application > Get(uint32_t i) const
Get the Ptr<Application> stored in this container at a given index.
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter.
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
AttributeValue implementation for Boolean.
Definition: boolean.h:37
Parse command-line arguments.
Definition: command-line.h:228
Class for representing data rates.
Definition: data-rate.h:89
AttributeValue implementation for DataRate.
Definition: data-rate.h:298
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:41
an Inet address class
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
static Ipv4Address GetAny(void)
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
Helper class used to assign positions and mobility models to nodes.
holds a vector of ns3::NetDevice pointers
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.
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Definition: on-off-helper.h:43
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:180
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:136
static void Run(void)
Run the simulation.
Definition: simulator.cc:172
Make it easy to create and manage PHY objects for the spectrum model.
void SetChannel(Ptr< SpectrumChannel > channel)
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:36
AttributeValue implementation for Ssid.
Definition: ssid.h:105
Hold variables of type string.
Definition: string.h:41
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
AttributeValue implementation for Time.
Definition: nstime.h:1353
Create a client application which sends UDP packets carrying a 32bit sequence number and a 64 bit tim...
Create a server application which waits for input UDP packets and uses the information carried into t...
Hold an unsigned integer type.
Definition: uinteger.h:44
helps to create WifiNetDevice objects
Definition: wifi-helper.h:327
create MAC layers for a ns3::WifiNetDevice.
void SetErrorRateModel(std::string name, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
Definition: wifi-helper.cc:146
void Set(std::string name, const AttributeValue &v)
Definition: wifi-helper.cc:140
@ DLT_IEEE802_11_RADIO
Include Radiotap link layer information.
Definition: wifi-helper.h:180
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
manage and create wifi channel objects for the YANS model.
Make it easy to create and manage PHY objects for the YANS model.
uint16_t port
Definition: dsdv-manet.cc:45
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:849
void ConnectWithoutContext(std::string path, const CallbackBase &cb)
Definition: config.cc:901
void Set(std::string path, const AttributeValue &value)
Definition: config.cc:839
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:165
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
void(* DataRate)(DataRate oldValue, DataRate newValue)
TracedValue callback signature for DataRate.
Definition: data-rate.h:329
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1289
@ WIFI_STANDARD_80211n_5GHZ
address
Definition: first.py:44
stack
Definition: first.py:41
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Definition: callback.h:1642
cmd
Definition: second.py:35
ssid
Definition: third.py:100
channel
Definition: third.py:92
mac
Definition: third.py:99
wifi
Definition: third.py:96
wifiApNode
Definition: third.py:90
mobility
Definition: third.py:108
phy
Definition: third.py:93
MpduInfo structure.
Definition: phy-entity.h:60
SignalNoiseDbm structure.
Definition: phy-entity.h:53
double noise
noise power in dBm
Definition: phy-entity.h:55
double signal
signal strength in dBm
Definition: phy-entity.h:54
bool enablePcap
double g_signalDbmAvg
double g_noiseDbmAvg
uint32_t g_samples
void MonitorSniffRx(Ptr< const Packet > packet, uint16_t channelFreqMhz, WifiTxVector txVector, MpduInfo aMpdu, SignalNoiseDbm signalNoise, uint16_t staId)