A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
mixed-wireless.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License version 2 as
5  * published by the Free Software Foundation;
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15  *
16  */
17 
18 //
19 // This ns-3 example demonstrates the use of helper functions to ease
20 // the construction of simulation scenarios.
21 //
22 // The simulation topology consists of a mixed wired and wireless
23 // scenario in which a hierarchical mobility model is used.
24 //
25 // The simulation layout consists of N backbone routers interconnected
26 // by an ad hoc wifi network.
27 // Each backbone router also has a local 802.11 network and is connected
28 // to a local LAN. An additional set of (K-1) nodes are connected to
29 // this backbone. Finally, a local LAN is connected to each router
30 // on the backbone, with L-1 additional hosts.
31 //
32 // The nodes are populated with TCP/IP stacks, and OLSR unicast routing
33 // on the backbone. An example UDP transfer is shown. The simulator
34 // be configured to output tcpdumps or traces from different nodes.
35 //
36 //
37 // +--------------------------------------------------------+
38 // | |
39 // | 802.11 ad hoc, ns-2 mobility |
40 // | |
41 // +--------------------------------------------------------+
42 // | o o o (N backbone routers) |
43 // +--------+ +--------+
44 // wired LAN | mobile | wired LAN | mobile |
45 // -----------| router | -----------| router |
46 // --------- ---------
47 // | |
48 // +----------------+ +----------------+
49 // | 802.11 | | 802.11 |
50 // | infra net | | infra net |
51 // | K-1 hosts | | K-1 hosts |
52 // +----------------+ +----------------+
53 //
54 // We'll send data from the first wired LAN node on the first wired LAN
55 // to the last wireless STA on the last infrastructure net, thereby
56 // causing packets to traverse CSMA to adhoc to infrastructure links
57 //
58 // Note that certain mobility patterns may cause packet forwarding
59 // to fail (if nodes become disconnected)
60 
61 #include <fstream>
62 #include <string>
63 #include "ns3/core-module.h"
64 #include "ns3/network-module.h"
65 #include "ns3/applications-module.h"
66 #include "ns3/mobility-module.h"
67 #include "ns3/config-store-module.h"
68 #include "ns3/wifi-module.h"
69 #include "ns3/csma-module.h"
70 #include "ns3/olsr-helper.h"
71 #include "ns3/internet-module.h"
72 #include "ns3/netanim-module.h"
73 
74 using namespace ns3;
75 
76 //
77 // Define logging keyword for this file
78 //
79 NS_LOG_COMPONENT_DEFINE ("MixedWireless");
80 
81 //
82 // This function will be used below as a trace sink, if the command-line
83 // argument or default value "useCourseChangeCallback" is set to true
84 //
85 static void
87 {
88  Vector position = model->GetPosition ();
89  std::cout << "CourseChange " << path << " x=" << position.x << ", y=" << position.y << ", z=" << position.z << std::endl;
90 }
91 
92 int
93 main (int argc, char *argv[])
94 {
95  //
96  // First, we declare and initialize a few local variables that control some
97  // simulation parameters.
98  //
99  uint32_t backboneNodes = 10;
100  uint32_t infraNodes = 2;
101  uint32_t lanNodes = 2;
102  uint32_t stopTime = 20;
103  bool useCourseChangeCallback = false;
104 
105  //
106  // Simulation defaults are typically set next, before command line
107  // arguments are parsed.
108  //
109  Config::SetDefault ("ns3::OnOffApplication::PacketSize", StringValue ("1472"));
110  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("100kb/s"));
111 
112  //
113  // For convenience, we add the local variables to the command line argument
114  // system so that they can be overridden with flags such as
115  // "--backboneNodes=20"
116  //
117  CommandLine cmd;
118  cmd.AddValue ("backboneNodes", "number of backbone nodes", backboneNodes);
119  cmd.AddValue ("infraNodes", "number of leaf nodes", infraNodes);
120  cmd.AddValue ("lanNodes", "number of LAN nodes", lanNodes);
121  cmd.AddValue ("stopTime", "simulation stop time (seconds)", stopTime);
122  cmd.AddValue ("useCourseChangeCallback", "whether to enable course change tracing", useCourseChangeCallback);
123 
124  //
125  // The system global variables and the local values added to the argument
126  // system can be overridden by command line arguments by using this call.
127  //
128  cmd.Parse (argc, argv);
129 
130  if (stopTime < 10)
131  {
132  std::cout << "Use a simulation stop time >= 10 seconds" << std::endl;
133  exit (1);
134  }
136  // //
137  // Construct the backbone //
138  // //
140 
141  //
142  // Create a container to manage the nodes of the adhoc (backbone) network.
143  // Later we'll create the rest of the nodes we'll need.
144  //
145  NodeContainer backbone;
146  backbone.Create (backboneNodes);
147  //
148  // Create the backbone wifi net devices and install them into the nodes in
149  // our container
150  //
151  WifiHelper wifi;
153  mac.SetType ("ns3::AdhocWifiMac");
154  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
155  "DataMode", StringValue ("OfdmRate54Mbps"));
158  wifiPhy.SetChannel (wifiChannel.Create ());
159  NetDeviceContainer backboneDevices = wifi.Install (wifiPhy, mac, backbone);
160 
161  // We enable OLSR (which will be consulted at a higher priority than
162  // the global routing) on the backbone ad hoc nodes
163  NS_LOG_INFO ("Enabling OLSR routing on all backbone nodes");
164  OlsrHelper olsr;
165  //
166  // Add the IPv4 protocol stack to the nodes in our container
167  //
168  InternetStackHelper internet;
169  internet.SetRoutingHelper (olsr); // has effect on the next Install ()
170  internet.Install (backbone);
171 
172  //
173  // Assign IPv4 addresses to the device drivers (actually to the associated
174  // IPv4 interfaces) we just created.
175  //
176  Ipv4AddressHelper ipAddrs;
177  ipAddrs.SetBase ("192.168.0.0", "255.255.255.0");
178  ipAddrs.Assign (backboneDevices);
179 
180  //
181  // The ad-hoc network nodes need a mobility model so we aggregate one to
182  // each of the nodes we just finished building.
183  //
184  MobilityHelper mobility;
185  mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
186  "MinX", DoubleValue (20.0),
187  "MinY", DoubleValue (20.0),
188  "DeltaX", DoubleValue (20.0),
189  "DeltaY", DoubleValue (20.0),
190  "GridWidth", UintegerValue (5),
191  "LayoutType", StringValue ("RowFirst"));
192  mobility.SetMobilityModel ("ns3::RandomDirection2dMobilityModel",
193  "Bounds", RectangleValue (Rectangle (-500, 500, -500, 500)),
194  "Speed", StringValue ("ns3::ConstantRandomVariable[Constant=2]"),
195  "Pause", StringValue ("ns3::ConstantRandomVariable[Constant=0.2]"));
196  mobility.Install (backbone);
197 
199  // //
200  // Construct the LANs //
201  // //
203 
204  // Reset the address base-- all of the CSMA networks will be in
205  // the "172.16 address space
206  ipAddrs.SetBase ("172.16.0.0", "255.255.255.0");
207 
208 
209  for (uint32_t i = 0; i < backboneNodes; ++i)
210  {
211  NS_LOG_INFO ("Configuring local area network for backbone node " << i);
212  //
213  // Create a container to manage the nodes of the LAN. We need
214  // two containers here; one with all of the new nodes, and one
215  // with all of the nodes including new and existing nodes
216  //
217  NodeContainer newLanNodes;
218  newLanNodes.Create (lanNodes - 1);
219  // Now, create the container with all nodes on this link
220  NodeContainer lan (backbone.Get (i), newLanNodes);
221  //
222  // Create the CSMA net devices and install them into the nodes in our
223  // collection.
224  //
225  CsmaHelper csma;
226  csma.SetChannelAttribute ("DataRate",
227  DataRateValue (DataRate (5000000)));
228  csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
229  NetDeviceContainer lanDevices = csma.Install (lan);
230  //
231  // Add the IPv4 protocol stack to the new LAN nodes
232  //
233  internet.Install (newLanNodes);
234  //
235  // Assign IPv4 addresses to the device drivers (actually to the
236  // associated IPv4 interfaces) we just created.
237  //
238  ipAddrs.Assign (lanDevices);
239  //
240  // Assign a new network prefix for the next LAN, according to the
241  // network mask initialized above
242  //
243  ipAddrs.NewNetwork ();
244  //
245  // The new LAN nodes need a mobility model so we aggregate one
246  // to each of the nodes we just finished building.
247  //
248  MobilityHelper mobilityLan;
249  Ptr<ListPositionAllocator> subnetAlloc =
250  CreateObject<ListPositionAllocator> ();
251  for (uint32_t j = 0; j < newLanNodes.GetN (); ++j)
252  {
253  subnetAlloc->Add (Vector (0.0, j*10 + 10, 0.0));
254  }
255  mobilityLan.PushReferenceMobilityModel (backbone.Get (i));
256  mobilityLan.SetPositionAllocator (subnetAlloc);
257  mobilityLan.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
258  mobilityLan.Install (newLanNodes);
259  }
260 
262  // //
263  // Construct the mobile networks //
264  // //
266 
267  // Reset the address base-- all of the 802.11 networks will be in
268  // the "10.0" address space
269  ipAddrs.SetBase ("10.0.0.0", "255.255.255.0");
270 
271  for (uint32_t i = 0; i < backboneNodes; ++i)
272  {
273  NS_LOG_INFO ("Configuring wireless network for backbone node " << i);
274  //
275  // Create a container to manage the nodes of the LAN. We need
276  // two containers here; one with all of the new nodes, and one
277  // with all of the nodes including new and existing nodes
278  //
279  NodeContainer stas;
280  stas.Create (infraNodes - 1);
281  // Now, create the container with all nodes on this link
282  NodeContainer infra (backbone.Get (i), stas);
283  //
284  // Create an infrastructure network
285  //
286  WifiHelper wifiInfra = WifiHelper::Default ();
288  wifiPhy.SetChannel (wifiChannel.Create ());
289  // Create unique ssids for these networks
290  std::string ssidString ("wifi-infra");
291  std::stringstream ss;
292  ss << i;
293  ssidString += ss.str ();
294  Ssid ssid = Ssid (ssidString);
295  wifiInfra.SetRemoteStationManager ("ns3::ArfWifiManager");
296  // setup stas
297  macInfra.SetType ("ns3::StaWifiMac",
298  "Ssid", SsidValue (ssid),
299  "ActiveProbing", BooleanValue (false));
300  NetDeviceContainer staDevices = wifiInfra.Install (wifiPhy, macInfra, stas);
301  // setup ap.
302  macInfra.SetType ("ns3::ApWifiMac",
303  "Ssid", SsidValue (ssid),
304  "BeaconGeneration", BooleanValue (true),
305  "BeaconInterval", TimeValue(Seconds(2.5)));
306  NetDeviceContainer apDevices = wifiInfra.Install (wifiPhy, macInfra, backbone.Get (i));
307  // Collect all of these new devices
308  NetDeviceContainer infraDevices (apDevices, staDevices);
309 
310  // Add the IPv4 protocol stack to the nodes in our container
311  //
312  internet.Install (stas);
313  //
314  // Assign IPv4 addresses to the device drivers (actually to the associated
315  // IPv4 interfaces) we just created.
316  //
317  ipAddrs.Assign (infraDevices);
318  //
319  // Assign a new network prefix for each mobile network, according to
320  // the network mask initialized above
321  //
322  ipAddrs.NewNetwork ();
323  //
324  // The new wireless nodes need a mobility model so we aggregate one
325  // to each of the nodes we just finished building.
326  //
327  Ptr<ListPositionAllocator> subnetAlloc =
328  CreateObject<ListPositionAllocator> ();
329  for (uint32_t j = 0; j < infra.GetN (); ++j)
330  {
331  subnetAlloc->Add (Vector (0.0, j, 0.0));
332  }
333  mobility.PushReferenceMobilityModel (backbone.Get (i));
334  mobility.SetPositionAllocator (subnetAlloc);
335  mobility.SetMobilityModel ("ns3::RandomDirection2dMobilityModel",
336  "Bounds", RectangleValue (Rectangle (-10, 10, -10, 10)),
337  "Speed", StringValue ("ns3::ConstantRandomVariable[Constant=3]"),
338  "Pause", StringValue ("ns3::ConstantRandomVariable[Constant=0.4]"));
339  mobility.Install (stas);
340  }
341 
343  // //
344  // Application configuration //
345  // //
347 
348  // Create the OnOff application to send UDP datagrams of size
349  // 210 bytes at a rate of 10 Kb/s, between two nodes
350  // We'll send data from the first wired LAN node on the first wired LAN
351  // to the last wireless STA on the last infrastructure net, thereby
352  // causing packets to traverse CSMA to adhoc to infrastructure links
353 
354  NS_LOG_INFO ("Create Applications.");
355  uint16_t port = 9; // Discard port (RFC 863)
356 
357  // Let's make sure that the user does not define too few nodes
358  // to make this example work. We need lanNodes > 1 and infraNodes > 1
359  NS_ASSERT (lanNodes > 1 && infraNodes > 1);
360  // We want the source to be the first node created outside of the backbone
361  // Conveniently, the variable "backboneNodes" holds this node index value
362  Ptr<Node> appSource = NodeList::GetNode (backboneNodes);
363  // We want the sink to be the last node created in the topology.
364  uint32_t lastNodeIndex = backboneNodes + backboneNodes*(lanNodes - 1) + backboneNodes*(infraNodes - 1) - 1;
365  Ptr<Node> appSink = NodeList::GetNode (lastNodeIndex);
366  // Let's fetch the IP address of the last node, which is on Ipv4Interface 1
367  Ipv4Address remoteAddr = appSink->GetObject<Ipv4> ()->GetAddress (1, 0).GetLocal ();
368 
369  OnOffHelper onoff ("ns3::UdpSocketFactory",
370  Address (InetSocketAddress (remoteAddr, port)));
371 
372  ApplicationContainer apps = onoff.Install (appSource);
373  apps.Start (Seconds (3));
374  apps.Stop (Seconds (stopTime - 1));
375 
376  // Create a packet sink to receive these packets
377  PacketSinkHelper sink ("ns3::UdpSocketFactory",
379  apps = sink.Install (appSink);
380  apps.Start (Seconds (3));
381 
383  // //
384  // Tracing configuration //
385  // //
387 
388  NS_LOG_INFO ("Configure Tracing.");
389  CsmaHelper csma;
390 
391  //
392  // Let's set up some ns-2-like ascii traces, using another helper class
393  //
394  AsciiTraceHelper ascii;
395  Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream ("mixed-wireless.tr");
396  wifiPhy.EnableAsciiAll (stream);
397  csma.EnableAsciiAll (stream);
398  internet.EnableAsciiIpv4All (stream);
399 
400  // Csma captures in non-promiscuous mode
401  csma.EnablePcapAll ("mixed-wireless", false);
402  // pcap captures on the backbone wifi devices
403  wifiPhy.EnablePcap ("mixed-wireless", backboneDevices, false);
404  // pcap trace on the application data sink
405  wifiPhy.EnablePcap ("mixed-wireless", appSink->GetId (), 0);
406 
407  if (useCourseChangeCallback == true)
408  {
409  Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", MakeCallback (&CourseChangeCallback));
410  }
411 
412  AnimationInterface anim ("mixed-wireless.xml");
413 
415  // //
416  // Run simulation //
417  // //
419 
420  NS_LOG_INFO ("Run Simulation.");
421  Simulator::Stop (Seconds (stopTime));
422  Simulator::Run ();
424 }
holds a vector of ns3::Application pointers.
double x
x coordinate of vector
Definition: vector.h:49
Manage ASCII trace files for device models.
Definition: trace-helper.h:141
an Inet address class
static Ipv4Address GetAny(void)
smart pointer class similar to boost::intrusive_ptr
Definition: ptr.h:60
void SetChannelAttribute(std::string n1, const AttributeValue &v1)
Definition: csma-helper.cc:69
Hold a bool native type.
Definition: boolean.h:38
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:73
hold variables of type string
Definition: string.h:18
static Ptr< Node > GetNode(uint32_t n)
Definition: node-list.cc:240
Make it easy to create and manage PHY objects for the yans model.
static YansWifiChannelHelper Default(void)
Create a channel helper in a default working state.
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())
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
Definition: assert.h:61
static void Run(void)
Run the simulation until one of:
Definition: simulator.cc:157
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:170
aggregate IP/TCP/UDP functionality to existing Nodes.
Helper class that adds OLSR routing to nodes.
Definition: olsr-helper.h:38
Vector GetPosition(void) const
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:223
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes...
Ptr< OutputStreamWrapper > CreateFileStream(std::string filename, std::ios::openmode filemode=std::ios::out)
Create and initialize an output stream object we'll use to write the traced bits. ...
static YansWifiPhyHelper Default(void)
Create a phy helper in a default working state.
void PushReferenceMobilityModel(Ptr< Object > reference)
static void CourseChangeCallback(std::string path, Ptr< const MobilityModel > model)
void Connect(std::string path, const CallbackBase &cb)
Definition: config.cc:728
helps to create WifiNetDevice objects
Definition: wifi-helper.h:88
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Definition: on-off-helper.h:42
a 3d vector
Definition: vector.h:31
double stopTime
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer c) const
Definition: wifi-helper.cc:102
uint16_t port
Definition: dsdv-manet.cc:44
a polymophic address class
Definition: address.h:86
uint32_t GetN(void) const
Get the number of Ptr stored in this container.
hold objects of type ns3::Rectangle
int main(int argc, char *argv[])
Class for representing data rates.
Definition: data-rate.h:71
void SetChannel(Ptr< YansWifiChannel > channel)
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
void EnablePcapAll(std::string prefix, bool promiscuous=false)
Enable pcap output on each device (which is of the appropriate type) in the set of all nodes created ...
hold objects of type ns3::Time
Definition: nstime.h:1008
Hold an unsigned integer type.
Definition: uinteger.h:46
holds a vector of ns3::NetDevice pointers
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Definition: callback.h:1242
static NqosWifiMacHelper Default(void)
Create a mac helper in a default working state.
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter...
create non QoS-enabled MAC layers for a ns3::WifiNetDevice.
Parse command-line arguments.
Definition: command-line.h:177
void EnableAsciiIpv4All(std::string prefix)
Enable ascii trace output on all Ipv4 and interface pairs existing in the set of all nodes created in...
static void Destroy(void)
Every event scheduled by the Simulator::insertAtDestroy method is invoked.
Definition: simulator.cc:121
Access to the Ipv4 forwarding table, interfaces, and configuration.
Definition: ipv4.h:76
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:667
keep track of a set of node pointers.
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...
double y
y coordinate of vector
Definition: vector.h:53
manage and create wifi channel objects for the yans model.
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:35
build a set of CsmaNetDevice objects
Definition: csma-helper.h:46
Helper class used to assign positions and mobility models to nodes.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:38
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...
uint32_t GetId(void) const
Definition: node.cc:106
hold objects of type ns3::DataRate
void AddValue(const std::string &name, const std::string &help, T &value)
Add a program argument, assigning to POD.
Definition: command-line.h:435
static void Stop(void)
If an event invokes this method, it will be the last event scheduled by the Simulator::run method bef...
Definition: simulator.cc:165
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
hold objects of type ns3::Ssid
Interface to network animator.
Ipv4Address NewNetwork(void)
Increment the network number and reset the IP address counter to the base value provided in the SetBa...
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.
void EnableAsciiAll(std::string prefix)
Enable ascii trace output on each device (which is of the appropriate type) in the set of all nodes c...
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
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...
Hold a floating point type.
Definition: double.h:41
Ptr< T > GetObject(void) const
Definition: object.h:362
ApplicationContainer Install(NodeContainer c) const
Install an ns3::OnOffApplication on each node of the input container configured with all the attribut...
a 2d rectangle
Definition: rectangle.h:33
void SetRoutingHelper(const Ipv4RoutingHelper &routing)
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
double z
z coordinate of vector
Definition: vector.h:57
static WifiHelper Default(void)
Definition: wifi-helper.cc:65