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 ht-wifi-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 
106 {
107  g_samples++;
108  g_signalDbmAvg += ((signalNoise.signal - g_signalDbmAvg) / g_samples);
109  g_noiseDbmAvg += ((signalNoise.noise - g_noiseDbmAvg) / g_samples);
110 }
111 
112 NS_LOG_COMPONENT_DEFINE ("WifiSpectrumPerExample");
113 
114 int main (int argc, char *argv[])
115 {
116  bool udp = true;
117  double distance = 50;
118  double simulationTime = 10; //seconds
119  uint16_t index = 256;
120  std::string wifiType = "ns3::SpectrumWifiPhy";
121  std::string errorModelType = "ns3::NistErrorRateModel";
122  bool enablePcap = false;
123  const uint32_t tcpPacketSize = 1448;
124 
126  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
127  cmd.AddValue ("udp", "UDP if set to 1, TCP otherwise", udp);
128  cmd.AddValue ("distance", "meters separation between nodes", distance);
129  cmd.AddValue ("index", "restrict index to single value between 0 and 31", index);
130  cmd.AddValue ("wifiType", "select ns3::SpectrumWifiPhy or ns3::YansWifiPhy", wifiType);
131  cmd.AddValue ("errorModelType", "select ns3::NistErrorRateModel or ns3::YansErrorRateModel", errorModelType);
132  cmd.AddValue ("enablePcap", "enable pcap output", enablePcap);
133  cmd.Parse (argc,argv);
134 
135  uint16_t startIndex = 0;
136  uint16_t stopIndex = 31;
137  if (index < 32)
138  {
139  startIndex = index;
140  stopIndex = index;
141  }
142 
143  std::cout << "wifiType: " << wifiType << " distance: " << distance << "m; time: " << simulationTime << "; TxPower: 1 dBm (1.3 mW)" << std::endl;
144  std::cout << std::setw (5) << "index" <<
145  std::setw (6) << "MCS" <<
146  std::setw (13) << "Rate (Mb/s)" <<
147  std::setw (12) << "Tput (Mb/s)" <<
148  std::setw (10) << "Received " <<
149  std::setw (12) << "Signal (dBm)" <<
150  std::setw (12) << "Noise (dBm)" <<
151  std::setw (9) << "SNR (dB)" <<
152  std::endl;
153  for (uint16_t i = startIndex; i <= stopIndex; i++)
154  {
155  uint32_t payloadSize;
156  if (udp)
157  {
158  payloadSize = 972; // 1000 bytes IPv4
159  }
160  else
161  {
162  payloadSize = 1448; // 1500 bytes IPv6
163  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize));
164  }
165 
166  NodeContainer wifiStaNode;
167  wifiStaNode.Create (1);
169  wifiApNode.Create (1);
170 
173  if (wifiType == "ns3::YansWifiPhy")
174  {
176  channel.AddPropagationLoss ("ns3::FriisPropagationLossModel",
177  "Frequency", DoubleValue (5.180e9));
178  channel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
179  phy.SetChannel (channel.Create ());
180  phy.Set ("TxPowerStart", DoubleValue (1)); // dBm (1.26 mW)
181  phy.Set ("TxPowerEnd", DoubleValue (1));
182  phy.Set ("Frequency", UintegerValue (5180));
183 
184  if (i <= 7)
185  {
186  phy.Set ("ShortGuardEnabled", BooleanValue (false));
187  phy.Set ("ChannelWidth", UintegerValue (20));
188  }
189  else if (i > 7 && i <= 15)
190  {
191  phy.Set ("ShortGuardEnabled", BooleanValue (true));
192  phy.Set ("ChannelWidth", UintegerValue (20));
193  }
194  else if (i > 15 && i <= 23)
195  {
196  phy.Set ("ShortGuardEnabled", BooleanValue (false));
197  phy.Set ("ChannelWidth", UintegerValue (40));
198  }
199  else
200  {
201  phy.Set ("ShortGuardEnabled", BooleanValue (true));
202  phy.Set ("ChannelWidth", UintegerValue (40));
203  }
204  }
205  else if (wifiType == "ns3::SpectrumWifiPhy")
206  {
207  //Bug 2460: CcaMode1Threshold default should be set to -62 dBm when using Spectrum
208  Config::SetDefault ("ns3::WifiPhy::CcaMode1Threshold", DoubleValue (-62.0));
209 
210  Ptr<MultiModelSpectrumChannel> spectrumChannel
211  = CreateObject<MultiModelSpectrumChannel> ();
213  = CreateObject<FriisPropagationLossModel> ();
214  lossModel->SetFrequency (5.180e9);
215  spectrumChannel->AddPropagationLossModel (lossModel);
216 
218  = CreateObject<ConstantSpeedPropagationDelayModel> ();
219  spectrumChannel->SetPropagationDelayModel (delayModel);
220 
221  spectrumPhy.SetChannel (spectrumChannel);
222  spectrumPhy.SetErrorRateModel (errorModelType);
223  spectrumPhy.Set ("Frequency", UintegerValue (5180));
224  spectrumPhy.Set ("TxPowerStart", DoubleValue (1)); // dBm (1.26 mW)
225  spectrumPhy.Set ("TxPowerEnd", DoubleValue (1));
226 
227  if (i <= 7)
228  {
229  spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (false));
230  spectrumPhy.Set ("ChannelWidth", UintegerValue (20));
231  }
232  else if (i > 7 && i <= 15)
233  {
234  spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (true));
235  spectrumPhy.Set ("ChannelWidth", UintegerValue (20));
236  }
237  else if (i > 15 && i <= 23)
238  {
239  spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (false));
240  spectrumPhy.Set ("ChannelWidth", UintegerValue (40));
241  }
242  else
243  {
244  spectrumPhy.Set ("ShortGuardEnabled", BooleanValue (true));
245  spectrumPhy.Set ("ChannelWidth", UintegerValue (40));
246  }
247  }
248  else
249  {
250  NS_FATAL_ERROR ("Unsupported WiFi type " << wifiType);
251  }
252 
253 
255  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
257 
258  Ssid ssid = Ssid ("ns380211n");
259 
260  double datarate = 0;
262  if (i == 0)
263  {
264  DataRate = StringValue ("HtMcs0");
265  datarate = 6.5;
266  }
267  else if (i == 1)
268  {
269  DataRate = StringValue ("HtMcs1");
270  datarate = 13;
271  }
272  else if (i == 2)
273  {
274  DataRate = StringValue ("HtMcs2");
275  datarate = 19.5;
276  }
277  else if (i == 3)
278  {
279  DataRate = StringValue ("HtMcs3");
280  datarate = 26;
281  }
282  else if (i == 4)
283  {
284  DataRate = StringValue ("HtMcs4");
285  datarate = 39;
286  }
287  else if (i == 5)
288  {
289  DataRate = StringValue ("HtMcs5");
290  datarate = 52;
291  }
292  else if (i == 6)
293  {
294  DataRate = StringValue ("HtMcs6");
295  datarate = 58.5;
296  }
297  else if (i == 7)
298  {
299  DataRate = StringValue ("HtMcs7");
300  datarate = 65;
301  }
302  else if (i == 8)
303  {
304  DataRate = StringValue ("HtMcs0");
305  datarate = 7.2;
306  }
307  else if (i == 9)
308  {
309  DataRate = StringValue ("HtMcs1");
310  datarate = 14.4;
311  }
312  else if (i == 10)
313  {
314  DataRate = StringValue ("HtMcs2");
315  datarate = 21.7;
316  }
317  else if (i == 11)
318  {
319  DataRate = StringValue ("HtMcs3");
320  datarate = 28.9;
321  }
322  else if (i == 12)
323  {
324  DataRate = StringValue ("HtMcs4");
325  datarate = 43.3;
326  }
327  else if (i == 13)
328  {
329  DataRate = StringValue ("HtMcs5");
330  datarate = 57.8;
331  }
332  else if (i == 14)
333  {
334  DataRate = StringValue ("HtMcs6");
335  datarate = 65;
336  }
337  else if (i == 15)
338  {
339  DataRate = StringValue ("HtMcs7");
340  datarate = 72.2;
341  }
342  else if (i == 16)
343  {
344  DataRate = StringValue ("HtMcs0");
345  datarate = 13.5;
346  }
347  else if (i == 17)
348  {
349  DataRate = StringValue ("HtMcs1");
350  datarate = 27;
351  }
352  else if (i == 18)
353  {
354  DataRate = StringValue ("HtMcs2");
355  datarate = 40.5;
356  }
357  else if (i == 19)
358  {
359  DataRate = StringValue ("HtMcs3");
360  datarate = 54;
361  }
362  else if (i == 20)
363  {
364  DataRate = StringValue ("HtMcs4");
365  datarate = 81;
366  }
367  else if (i == 21)
368  {
369  DataRate = StringValue ("HtMcs5");
370  datarate = 108;
371  }
372  else if (i == 22)
373  {
374  DataRate = StringValue ("HtMcs6");
375  datarate = 121.5;
376  }
377  else if (i == 23)
378  {
379  DataRate = StringValue ("HtMcs7");
380  datarate = 135;
381  }
382  else if (i == 24)
383  {
384  DataRate = StringValue ("HtMcs0");
385  datarate = 15;
386  }
387  else if (i == 25)
388  {
389  DataRate = StringValue ("HtMcs1");
390  datarate = 30;
391  }
392  else if (i == 26)
393  {
394  DataRate = StringValue ("HtMcs2");
395  datarate = 45;
396  }
397  else if (i == 27)
398  {
399  DataRate = StringValue ("HtMcs3");
400  datarate = 60;
401  }
402  else if (i == 28)
403  {
404  DataRate = StringValue ("HtMcs4");
405  datarate = 90;
406  }
407  else if (i == 29)
408  {
409  DataRate = StringValue ("HtMcs5");
410  datarate = 120;
411  }
412  else if (i == 30)
413  {
414  DataRate = StringValue ("HtMcs6");
415  datarate = 135;
416  }
417  else
418  {
419  DataRate = StringValue ("HtMcs7");
420  datarate = 150;
421  }
422 
423  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
424  "ControlMode", DataRate);
425 
426  NetDeviceContainer staDevice;
427  NetDeviceContainer apDevice;
428 
429  if (wifiType == "ns3::YansWifiPhy")
430  {
431  mac.SetType ("ns3::StaWifiMac",
432  "Ssid", SsidValue (ssid));
433  staDevice = wifi.Install (phy, mac, wifiStaNode);
434  mac.SetType ("ns3::ApWifiMac",
435  "Ssid", SsidValue (ssid));
436  apDevice = wifi.Install (phy, mac, wifiApNode);
437 
438  }
439  else if (wifiType == "ns3::SpectrumWifiPhy")
440  {
441  mac.SetType ("ns3::StaWifiMac",
442  "Ssid", SsidValue (ssid));
443  staDevice = wifi.Install (spectrumPhy, mac, wifiStaNode);
444  mac.SetType ("ns3::ApWifiMac",
445  "Ssid", SsidValue (ssid));
446  apDevice = wifi.Install (spectrumPhy, mac, wifiApNode);
447  }
448 
449  // mobility.
451  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
452 
453  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
454  positionAlloc->Add (Vector (distance, 0.0, 0.0));
455  mobility.SetPositionAllocator (positionAlloc);
456 
457  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
458 
459  mobility.Install (wifiApNode);
460  mobility.Install (wifiStaNode);
461 
462  /* Internet stack*/
464  stack.Install (wifiApNode);
465  stack.Install (wifiStaNode);
466 
468  address.SetBase ("192.168.1.0", "255.255.255.0");
469  Ipv4InterfaceContainer staNodeInterface;
470  Ipv4InterfaceContainer apNodeInterface;
471 
472  staNodeInterface = address.Assign (staDevice);
473  apNodeInterface = address.Assign (apDevice);
474 
475  /* Setting applications */
476  ApplicationContainer serverApp;
477  if (udp)
478  {
479  //UDP flow
480  uint16_t port = 9;
481  UdpServerHelper server (port);
482  serverApp = server.Install (wifiStaNode.Get (0));
483  serverApp.Start (Seconds (0.0));
484  serverApp.Stop (Seconds (simulationTime + 1));
485 
486  UdpClientHelper client (staNodeInterface.GetAddress (0), port);
487  client.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
488  client.SetAttribute ("Interval", TimeValue (Time ("0.00001"))); //packets/s
489  client.SetAttribute ("PacketSize", UintegerValue (payloadSize));
490  ApplicationContainer clientApp = client.Install (wifiApNode.Get (0));
491  clientApp.Start (Seconds (1.0));
492  clientApp.Stop (Seconds (simulationTime + 1));
493  }
494  else
495  {
496  //TCP flow
497  uint16_t port = 50000;
498  Address localAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
499  PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", localAddress);
500  serverApp = packetSinkHelper.Install (wifiStaNode.Get (0));
501  serverApp.Start (Seconds (0.0));
502  serverApp.Stop (Seconds (simulationTime + 1));
503 
504  OnOffHelper onoff ("ns3::TcpSocketFactory", Ipv4Address::GetAny ());
505  onoff.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
506  onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
507  onoff.SetAttribute ("PacketSize", UintegerValue (payloadSize));
508  onoff.SetAttribute ("DataRate", DataRateValue (1000000000)); //bit/s
509  AddressValue remoteAddress (InetSocketAddress (staNodeInterface.GetAddress (0), port));
510  onoff.SetAttribute ("Remote", remoteAddress);
511  ApplicationContainer clientApp = onoff.Install (wifiApNode.Get (0));
512  clientApp.Start (Seconds (1.0));
513  clientApp.Stop (Seconds (simulationTime + 1));
514  }
515 
516  Config::ConnectWithoutContext ("/NodeList/0/DeviceList/*/Phy/MonitorSnifferRx", MakeCallback (&MonitorSniffRx));
517 
518  if (enablePcap)
519  {
520  std::stringstream ss;
521  ss << "wifi-spectrum-per-example-" << i;
522  phy.EnablePcap (ss.str (), apDevice);
523  }
524  g_signalDbmAvg = 0;
525  g_noiseDbmAvg = 0;
526  g_samples = 0;
527 
528  Simulator::Stop (Seconds (simulationTime + 1));
529  Simulator::Run ();
530 
531  double throughput = 0;
532  uint64_t totalPacketsThrough = 0;
533  if (udp)
534  {
535  //UDP
536  totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
537  throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0); //Mbit/s
538  }
539  else
540  {
541  //TCP
542  uint64_t totalBytesRx = DynamicCast<PacketSink> (serverApp.Get (0))->GetTotalRx ();
543  totalPacketsThrough = totalBytesRx / tcpPacketSize;
544  throughput = totalBytesRx * 8 / (simulationTime * 1000000.0); //Mbit/s
545  }
546  std::cout << std::setw (5) << i <<
547  std::setw (6) << (i % 8) <<
548  std::setprecision (2) << std::fixed <<
549  std::setw (10) << datarate <<
550  std::setw (12) << throughput <<
551  std::setw (8) << totalPacketsThrough;
552  if (totalPacketsThrough > 0)
553  {
554  std::cout << std::setw (12) << g_signalDbmAvg <<
555  std::setw (12) << g_noiseDbmAvg <<
556  std::setw (12) << (g_signalDbmAvg - g_noiseDbmAvg) <<
557  std::endl;
558  }
559  else
560  {
561  std::cout << std::setw (12) << "N/A" <<
562  std::setw (12) << "N/A" <<
563  std::setw (12) << "N/A" <<
564  std::endl;
565  }
567  }
568  return 0;
569 }
MpduInfo structure.
Definition: wifi-phy.h:53
void Set(std::string name, const AttributeValue &v)
Definition: wifi-helper.cc:134
holds a vector of ns3::Application pointers.
double signal
in dBm
Definition: wifi-phy.h:48
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
an Inet address class
static Ipv4Address GetAny(void)
AttributeValue implementation for Boolean.
Definition: boolean.h:36
HT PHY for the 5 GHz band (clause 20)
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Hold variables of type string.
Definition: string.h:41
Make it easy to create and manage PHY objects for the yans model.
bool enablePcap
double g_noiseDbmAvg
static void Run(void)
Run the simulation.
Definition: simulator.cc:226
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
aggregate IP/TCP/UDP functionality to existing Nodes.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:162
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes...
cmd
Definition: second.py:35
static YansWifiPhyHelper Default(void)
Create a phy helper in a default working state.
void AddPropagationLossModel(Ptr< PropagationLossModel > loss)
Add the single-frequency propagation loss model to be used.
helps to create WifiNetDevice objects
Definition: wifi-helper.h:230
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Definition: on-off-helper.h:42
stack
Definition: first.py:34
uint16_t port
Definition: dsdv-manet.cc:45
a polymophic address class
Definition: address.h:90
channel
Definition: third.py:85
mobility
Definition: third.py:101
phy
Definition: third.py:86
Class for representing data rates.
Definition: data-rate.h:88
uint32_t g_samples
Create a client application which sends UDP packets carrying a 32bit sequence number and a 64 bit tim...
static SpectrumWifiPhyHelper Default(void)
Create a phy helper in a default working state.
AttributeValue implementation for Time.
Definition: nstime.h:1076
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
void SetChannel(Ptr< SpectrumChannel > channel)
Hold an unsigned integer type.
Definition: uinteger.h:44
ssid
Definition: third.py:93
holds a vector of ns3::NetDevice pointers
mac
Definition: third.py:92
double g_signalDbmAvg
Create a server application which waits for input UDP packets and uses the information carried into t...
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Definition: callback.h:1489
void ConnectWithoutContext(std::string path, const CallbackBase &cb)
Definition: config.cc:832
wifiApNode
Definition: third.py:83
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter...
Parse command-line arguments.
Definition: command-line.h:213
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:190
void MonitorSniffRx(Ptr< const Packet > packet, uint16_t channelFreqMhz, WifiTxVector txVector, MpduInfo aMpdu, SignalNoiseDbm signalNoise)
void SetAttribute(std::string name, const AttributeValue &value)
Record an attribute to be set in each Application after it is is created.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
address
Definition: first.py:37
manage and create wifi channel objects for the yans model.
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:140
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:35
wifi
Definition: third.py:89
Helper class used to assign positions and mobility models to nodes.
AttributeValue implementation for Address.
Definition: address.h:278
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 DataRate.
Definition: data-rate.h:242
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:234
SignalNoiseDbm structure.
Definition: wifi-phy.h:46
void SetPropagationDelayModel(Ptr< PropagationDelayModel > delay)
Set the propagation delay model to be used.
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1014
AttributeValue implementation for Ssid.
Definition: ssid.h:110
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:782
void Add(Vector v)
Add a position to the list of positions.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
double noise
in dBm
Definition: wifi-phy.h:49
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
This class can be used to hold variables of floating point type such as &#39;double&#39; or &#39;float&#39;...
Definition: double.h:41
Ptr< Application > Get(uint32_t i) const
Get the Ptr<Application> stored in this container at a given index.
Make it easy to create and manage PHY objects for the spectrum model.