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 
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 AddPropagationLoss(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())
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.
Ptr< YansWifiChannel > Create(void) const
void SetRemoteStationManager(std::string type, 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:701
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
virtual void AddPropagationLossModel(Ptr< PropagationLossModel > loss)
Add the single-frequency propagation loss model to be used.
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.
helps to create WifiNetDevice objects
Definition: wifi-helper.h:212
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
virtual void SetStandard(WifiPhyStandard standard)
Definition: wifi-helper.cc:724
void SetChannel(Ptr< YansWifiChannel > channel)
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
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:1069
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...
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer::Iterator first, NodeContainer::Iterator last) const
Definition: wifi-helper.cc:730
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.
Ptr< Application > Get(uint32_t i) const
Get the Ptr<Application> stored in this container at a given index.
address
Definition: first.py:37
void SetMobilityModel(std::string type, 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(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue())
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
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
virtual void SetType(std::string type, 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(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue(), std::string n10="", const AttributeValue &v10=EmptyAttributeValue())
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...
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
ApplicationContainer Install(NodeContainer c)
Create one UDP server application on each of the Nodes in the NodeContainer.
AttributeValue implementation for DataRate.
Definition: data-rate.h:242
void AddValue(const std::string &name, const std::string &help, T &value)
Add a program argument, assigning to POD.
Definition: command-line.h:578
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
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
virtual 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:1007
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.
ApplicationContainer Install(NodeContainer c) const
Install an ns3::PacketSinkApplication on each node of the input container configured with all the att...
void Parse(int argc, char *argv[])
Parse the program arguments.
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.
void SetPropagationDelay(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())
void EnablePcap(std::string prefix, Ptr< NetDevice > nd, bool promiscuous=false, bool explicitFilename=false)
Enable pcap output the indicated net device.
void SetPositionAllocator(Ptr< PositionAllocator > allocator)
Set the position allocator which will be used to allocate the initial position of every node initiali...
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
ApplicationContainer Install(NodeContainer c) const
Install an ns3::OnOffApplication on each node of the input container configured with all the attribut...
void SetAttribute(std::string name, const AttributeValue &value)
Helper function used to set the underlying application attributes.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
Make it easy to create and manage PHY objects for the spectrum model.