A Discrete-Event Network Simulator
API
mixed-wired-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 "ns3/core-module.h"
62 #include "ns3/applications-module.h"
63 #include "ns3/mobility-module.h"
64 #include "ns3/wifi-module.h"
65 #include "ns3/csma-module.h"
66 #include "ns3/olsr-helper.h"
67 #include "ns3/internet-module.h"
68 #include "ns3/netanim-module.h"
69 
70 using namespace ns3;
71 
72 //
73 // Define logging keyword for this file
74 //
75 NS_LOG_COMPONENT_DEFINE ("MixedWireless");
76 
77 //
78 // This function will be used below as a trace sink, if the command-line
79 // argument or default value "useCourseChangeCallback" is set to true
80 //
81 static void
83 {
84  Vector position = model->GetPosition ();
85  std::cout << "CourseChange " << path << " x=" << position.x << ", y=" << position.y << ", z=" << position.z << std::endl;
86 }
87 
88 int
89 main (int argc, char *argv[])
90 {
91  //
92  // First, we declare and initialize a few local variables that control some
93  // simulation parameters.
94  //
95  uint32_t backboneNodes = 10;
96  uint32_t infraNodes = 2;
97  uint32_t lanNodes = 2;
98  uint32_t stopTime = 20;
99  bool useCourseChangeCallback = false;
100 
101  //
102  // Simulation defaults are typically set next, before command line
103  // arguments are parsed.
104  //
105  Config::SetDefault ("ns3::OnOffApplication::PacketSize", StringValue ("1472"));
106  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("100kb/s"));
107 
108  //
109  // For convenience, we add the local variables to the command line argument
110  // system so that they can be overridden with flags such as
111  // "--backboneNodes=20"
112  //
114  cmd.AddValue ("backboneNodes", "number of backbone nodes", backboneNodes);
115  cmd.AddValue ("infraNodes", "number of leaf nodes", infraNodes);
116  cmd.AddValue ("lanNodes", "number of LAN nodes", lanNodes);
117  cmd.AddValue ("stopTime", "simulation stop time (seconds)", stopTime);
118  cmd.AddValue ("useCourseChangeCallback", "whether to enable course change tracing", useCourseChangeCallback);
119 
120  //
121  // The system global variables and the local values added to the argument
122  // system can be overridden by command line arguments by using this call.
123  //
124  cmd.Parse (argc, argv);
125 
126  if (stopTime < 10)
127  {
128  std::cout << "Use a simulation stop time >= 10 seconds" << std::endl;
129  exit (1);
130  }
132  // //
133  // Construct the backbone //
134  // //
136 
137  //
138  // Create a container to manage the nodes of the adhoc (backbone) network.
139  // Later we'll create the rest of the nodes we'll need.
140  //
141  NodeContainer backbone;
142  backbone.Create (backboneNodes);
143  //
144  // Create the backbone wifi net devices and install them into the nodes in
145  // our container
146  //
149  mac.SetType ("ns3::AdhocWifiMac");
150  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
151  "DataMode", StringValue ("OfdmRate54Mbps"));
154  wifiPhy.SetChannel (wifiChannel.Create ());
155  NetDeviceContainer backboneDevices = wifi.Install (wifiPhy, mac, backbone);
156 
157  // We enable OLSR (which will be consulted at a higher priority than
158  // the global routing) on the backbone ad hoc nodes
159  NS_LOG_INFO ("Enabling OLSR routing on all backbone nodes");
161  //
162  // Add the IPv4 protocol stack to the nodes in our container
163  //
164  InternetStackHelper internet;
165  internet.SetRoutingHelper (olsr); // has effect on the next Install ()
166  internet.Install (backbone);
167 
168  //
169  // Assign IPv4 addresses to the device drivers (actually to the associated
170  // IPv4 interfaces) we just created.
171  //
172  Ipv4AddressHelper ipAddrs;
173  ipAddrs.SetBase ("192.168.0.0", "255.255.255.0");
174  ipAddrs.Assign (backboneDevices);
175 
176  //
177  // The ad-hoc network nodes need a mobility model so we aggregate one to
178  // each of the nodes we just finished building.
179  //
181  mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
182  "MinX", DoubleValue (20.0),
183  "MinY", DoubleValue (20.0),
184  "DeltaX", DoubleValue (20.0),
185  "DeltaY", DoubleValue (20.0),
186  "GridWidth", UintegerValue (5),
187  "LayoutType", StringValue ("RowFirst"));
188  mobility.SetMobilityModel ("ns3::RandomDirection2dMobilityModel",
189  "Bounds", RectangleValue (Rectangle (-500, 500, -500, 500)),
190  "Speed", StringValue ("ns3::ConstantRandomVariable[Constant=2]"),
191  "Pause", StringValue ("ns3::ConstantRandomVariable[Constant=0.2]"));
192  mobility.Install (backbone);
193 
195  // //
196  // Construct the LANs //
197  // //
199 
200  // Reset the address base-- all of the CSMA networks will be in
201  // the "172.16 address space
202  ipAddrs.SetBase ("172.16.0.0", "255.255.255.0");
203 
204 
205  for (uint32_t i = 0; i < backboneNodes; ++i)
206  {
207  NS_LOG_INFO ("Configuring local area network for backbone node " << i);
208  //
209  // Create a container to manage the nodes of the LAN. We need
210  // two containers here; one with all of the new nodes, and one
211  // with all of the nodes including new and existing nodes
212  //
213  NodeContainer newLanNodes;
214  newLanNodes.Create (lanNodes - 1);
215  // Now, create the container with all nodes on this link
216  NodeContainer lan (backbone.Get (i), newLanNodes);
217  //
218  // Create the CSMA net devices and install them into the nodes in our
219  // collection.
220  //
222  csma.SetChannelAttribute ("DataRate",
223  DataRateValue (DataRate (5000000)));
224  csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
225  NetDeviceContainer lanDevices = csma.Install (lan);
226  //
227  // Add the IPv4 protocol stack to the new LAN nodes
228  //
229  internet.Install (newLanNodes);
230  //
231  // Assign IPv4 addresses to the device drivers (actually to the
232  // associated IPv4 interfaces) we just created.
233  //
234  ipAddrs.Assign (lanDevices);
235  //
236  // Assign a new network prefix for the next LAN, according to the
237  // network mask initialized above
238  //
239  ipAddrs.NewNetwork ();
240  //
241  // The new LAN nodes need a mobility model so we aggregate one
242  // to each of the nodes we just finished building.
243  //
244  MobilityHelper mobilityLan;
245  Ptr<ListPositionAllocator> subnetAlloc =
246  CreateObject<ListPositionAllocator> ();
247  for (uint32_t j = 0; j < newLanNodes.GetN (); ++j)
248  {
249  subnetAlloc->Add (Vector (0.0, j * 10 + 10, 0.0));
250  }
251  mobilityLan.PushReferenceMobilityModel (backbone.Get (i));
252  mobilityLan.SetPositionAllocator (subnetAlloc);
253  mobilityLan.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
254  mobilityLan.Install (newLanNodes);
255  }
256 
258  // //
259  // Construct the mobile networks //
260  // //
262 
263  // Reset the address base-- all of the 802.11 networks will be in
264  // the "10.0" address space
265  ipAddrs.SetBase ("10.0.0.0", "255.255.255.0");
266 
267  for (uint32_t i = 0; i < backboneNodes; ++i)
268  {
269  NS_LOG_INFO ("Configuring wireless network for backbone node " << i);
270  //
271  // Create a container to manage the nodes of the LAN. We need
272  // two containers here; one with all of the new nodes, and one
273  // with all of the nodes including new and existing nodes
274  //
275  NodeContainer stas;
276  stas.Create (infraNodes - 1);
277  // Now, create the container with all nodes on this link
278  NodeContainer infra (backbone.Get (i), stas);
279  //
280  // Create an infrastructure network
281  //
282  WifiHelper wifiInfra;
283  WifiMacHelper macInfra;
284  wifiPhy.SetChannel (wifiChannel.Create ());
285  // Create unique ssids for these networks
286  std::string ssidString ("wifi-infra");
287  std::stringstream ss;
288  ss << i;
289  ssidString += ss.str ();
290  Ssid ssid = Ssid (ssidString);
291  wifiInfra.SetRemoteStationManager ("ns3::ArfWifiManager");
292  // setup stas
293  macInfra.SetType ("ns3::StaWifiMac",
294  "Ssid", SsidValue (ssid));
295  NetDeviceContainer staDevices = wifiInfra.Install (wifiPhy, macInfra, stas);
296  // setup ap.
297  macInfra.SetType ("ns3::ApWifiMac",
298  "Ssid", SsidValue (ssid),
299  "BeaconInterval", TimeValue (Seconds (2.5)));
300  NetDeviceContainer apDevices = wifiInfra.Install (wifiPhy, macInfra, backbone.Get (i));
301  // Collect all of these new devices
302  NetDeviceContainer infraDevices (apDevices, staDevices);
303 
304  // Add the IPv4 protocol stack to the nodes in our container
305  //
306  internet.Install (stas);
307  //
308  // Assign IPv4 addresses to the device drivers (actually to the associated
309  // IPv4 interfaces) we just created.
310  //
311  ipAddrs.Assign (infraDevices);
312  //
313  // Assign a new network prefix for each mobile network, according to
314  // the network mask initialized above
315  //
316  ipAddrs.NewNetwork ();
317  //
318  // The new wireless nodes need a mobility model so we aggregate one
319  // to each of the nodes we just finished building.
320  //
321  Ptr<ListPositionAllocator> subnetAlloc =
322  CreateObject<ListPositionAllocator> ();
323  for (uint32_t j = 0; j < infra.GetN (); ++j)
324  {
325  subnetAlloc->Add (Vector (0.0, j, 0.0));
326  }
327  mobility.PushReferenceMobilityModel (backbone.Get (i));
328  mobility.SetPositionAllocator (subnetAlloc);
329  mobility.SetMobilityModel ("ns3::RandomDirection2dMobilityModel",
330  "Bounds", RectangleValue (Rectangle (-10, 10, -10, 10)),
331  "Speed", StringValue ("ns3::ConstantRandomVariable[Constant=3]"),
332  "Pause", StringValue ("ns3::ConstantRandomVariable[Constant=0.4]"));
333  mobility.Install (stas);
334  }
335 
337  // //
338  // Application configuration //
339  // //
341 
342  // Create the OnOff application to send UDP datagrams of size
343  // 210 bytes at a rate of 10 Kb/s, between two nodes
344  // We'll send data from the first wired LAN node on the first wired LAN
345  // to the last wireless STA on the last infrastructure net, thereby
346  // causing packets to traverse CSMA to adhoc to infrastructure links
347 
348  NS_LOG_INFO ("Create Applications.");
349  uint16_t port = 9; // Discard port (RFC 863)
350 
351  // Let's make sure that the user does not define too few nodes
352  // to make this example work. We need lanNodes > 1 and infraNodes > 1
353  NS_ASSERT (lanNodes > 1 && infraNodes > 1);
354  // We want the source to be the first node created outside of the backbone
355  // Conveniently, the variable "backboneNodes" holds this node index value
356  Ptr<Node> appSource = NodeList::GetNode (backboneNodes);
357  // We want the sink to be the last node created in the topology.
358  uint32_t lastNodeIndex = backboneNodes + backboneNodes * (lanNodes - 1) + backboneNodes * (infraNodes - 1) - 1;
359  Ptr<Node> appSink = NodeList::GetNode (lastNodeIndex);
360  // Let's fetch the IP address of the last node, which is on Ipv4Interface 1
361  Ipv4Address remoteAddr = appSink->GetObject<Ipv4> ()->GetAddress (1, 0).GetLocal ();
362 
363  OnOffHelper onoff ("ns3::UdpSocketFactory",
364  Address (InetSocketAddress (remoteAddr, port)));
365 
366  ApplicationContainer apps = onoff.Install (appSource);
367  apps.Start (Seconds (3));
368  apps.Stop (Seconds (stopTime - 1));
369 
370  // Create a packet sink to receive these packets
371  PacketSinkHelper sink ("ns3::UdpSocketFactory",
373  apps = sink.Install (appSink);
374  apps.Start (Seconds (3));
375 
377  // //
378  // Tracing configuration //
379  // //
381 
382  NS_LOG_INFO ("Configure Tracing.");
384 
385  //
386  // Let's set up some ns-2-like ascii traces, using another helper class
387  //
388  AsciiTraceHelper ascii;
389  Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream ("mixed-wireless.tr");
390  wifiPhy.EnableAsciiAll (stream);
391  csma.EnableAsciiAll (stream);
392  internet.EnableAsciiIpv4All (stream);
393 
394  // Csma captures in non-promiscuous mode
395  csma.EnablePcapAll ("mixed-wireless", false);
396  // pcap captures on the backbone wifi devices
397  wifiPhy.EnablePcap ("mixed-wireless", backboneDevices, false);
398  // pcap trace on the application data sink
399  wifiPhy.EnablePcap ("mixed-wireless", appSink->GetId (), 0);
400 
401  if (useCourseChangeCallback == true)
402  {
403  Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", MakeCallback (&CourseChangeCallback));
404  }
405 
406  AnimationInterface anim ("mixed-wireless.xml");
407 
409  // //
410  // Run simulation //
411  // //
413 
414  NS_LOG_INFO ("Run Simulation.");
415  Simulator::Stop (Seconds (stopTime));
416  Simulator::Run ();
418 }
Ptr< PacketSink > sink
Definition: wifi-tcp.cc:45
holds a vector of ns3::Application pointers.
Manage ASCII trace files for device models.
Definition: trace-helper.h:161
an Inet address class
static Ipv4Address GetAny(void)
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
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:719
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Definition: object.h:459
Hold variables of type string.
Definition: string.h:41
static Ptr< Node > GetNode(uint32_t n)
Definition: node-list.cc:241
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.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
Definition: assert.h:67
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:201
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1001
aggregate IP/TCP/UDP functionality to existing Nodes.
Helper class that adds OLSR routing to nodes.
Definition: olsr-helper.h:40
Vector GetPosition(void) const
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:277
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)
helps to create WifiNetDevice objects
Definition: wifi-helper.h:213
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Definition: on-off-helper.h:42
tuple cmd
Definition: second.py:35
double stopTime
uint16_t port
Definition: dsdv-manet.cc:44
a polymophic address class
Definition: address.h:90
uint32_t GetN(void) const
Get the number of Ptr stored in this container.
AttributeValue implementation for Rectangle.
Definition: rectangle.h:97
Class for representing data rates.
Definition: data-rate.h:88
void SetChannel(Ptr< YansWifiChannel > channel)
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
tuple mobility
Definition: third.py:101
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 ...
AttributeValue implementation for Time.
Definition: nstime.h:1055
Hold an unsigned integer type.
Definition: uinteger.h:44
holds a vector of ns3::NetDevice pointers
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer::Iterator first, NodeContainer::Iterator last) const
Definition: wifi-helper.cc:748
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Definition: callback.h:1489
tuple staDevices
Definition: third.py:96
tuple mac
Definition: third.py:92
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:205
void Connect(std::string path, const CallbackBase &cb)
Definition: config.cc:843
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)
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:190
Access to the IPv4 forwarding table, interfaces, and configuration.
Definition: ipv4.h:76
Every class exported by the ns3 library is enclosed in the ns3 namespace.
tuple apDevices
Definition: third.py:99
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...
tuple ssid
Definition: third.py:93
manage and create wifi channel objects for the yans model.
create MAC layers for a ns3::WifiNetDevice.
Definition: olsr.py:1
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:35
build a set of CsmaNetDevice objects
Definition: csma-helper.h:46
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())
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:40
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:107
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:498
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:234
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:993
AttributeValue implementation for Ssid.
Definition: ssid.h:117
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:782
void Add(Vector v)
Add a position to the list of positions.
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...
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.
tuple wifi
Definition: third.py:89
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...
This class can be used to hold variables of floating point type such as 'double' or 'float'...
Definition: double.h:41
a 2d rectangle
Definition: rectangle.h:34
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.
tuple csma
Definition: second.py:63
static void CourseChangeCallback(std::string path, Ptr< const MobilityModel > model)