A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
wireless-animation.cc
Go to the documentation of this file.
1/*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License version 2 as
4 * published by the Free Software Foundation;
5 *
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 * GNU General Public License for more details.
10 *
11 * You should have received a copy of the GNU General Public License
12 * along with this program; if not, write to the Free Software
13 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
14 *
15 * Author: Vikas Pushkar (Adapted from third.cc)
16 */
17
18#include "ns3/applications-module.h"
19#include "ns3/basic-energy-source.h"
20#include "ns3/core-module.h"
21#include "ns3/csma-module.h"
22#include "ns3/internet-module.h"
23#include "ns3/mobility-module.h"
24#include "ns3/netanim-module.h"
25#include "ns3/network-module.h"
26#include "ns3/point-to-point-module.h"
27#include "ns3/simple-device-energy-model.h"
28#include "ns3/ssid.h"
29#include "ns3/wifi-radio-energy-model.h"
30#include "ns3/yans-wifi-helper.h"
31
32using namespace ns3;
33
34NS_LOG_COMPONENT_DEFINE("WirelessAnimationExample");
35
36int
37main(int argc, char* argv[])
38{
39 uint32_t nWifi = 20;
40 CommandLine cmd(__FILE__);
41 cmd.AddValue("nWifi", "Number of wifi STA devices", nWifi);
42
43 cmd.Parse(argc, argv);
44 NodeContainer allNodes;
46 wifiStaNodes.Create(nWifi);
47 allNodes.Add(wifiStaNodes);
49 wifiApNode.Create(1);
50 allNodes.Add(wifiApNode);
51
54 phy.SetChannel(channel.Create());
55
57
59 Ssid ssid = Ssid("ns-3-ssid");
60 mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid), "ActiveProbing", BooleanValue(false));
61
63 staDevices = wifi.Install(phy, mac, wifiStaNodes);
64 mac.SetType("ns3::ApWifiMac", "Ssid", SsidValue(ssid));
65
67 apDevices = wifi.Install(phy, mac, wifiApNode);
68
70 p2pNodes.Add(wifiApNode);
71 p2pNodes.Create(1);
72 allNodes.Add(p2pNodes.Get(1));
73
75 pointToPoint.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
76 pointToPoint.SetChannelAttribute("Delay", StringValue("2ms"));
77
79 p2pDevices = pointToPoint.Install(p2pNodes);
80
82 csmaNodes.Add(p2pNodes.Get(1));
83 csmaNodes.Create(1);
84 allNodes.Add(csmaNodes.Get(1));
85
87 csma.SetChannelAttribute("DataRate", StringValue("100Mbps"));
88 csma.SetChannelAttribute("Delay", TimeValue(NanoSeconds(6560)));
89
91 csmaDevices = csma.Install(csmaNodes);
92
93 // Mobility
94
96 mobility.SetPositionAllocator("ns3::GridPositionAllocator",
97 "MinX",
98 DoubleValue(10.0),
99 "MinY",
100 DoubleValue(10.0),
101 "DeltaX",
102 DoubleValue(5.0),
103 "DeltaY",
104 DoubleValue(2.0),
105 "GridWidth",
106 UintegerValue(5),
107 "LayoutType",
108 StringValue("RowFirst"));
109 mobility.SetMobilityModel("ns3::RandomWalk2dMobilityModel",
110 "Bounds",
111 RectangleValue(Rectangle(-50, 50, -25, 50)));
112 mobility.Install(wifiStaNodes);
113 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
114 mobility.Install(wifiApNode);
117
118 Ptr<BasicEnergySource> energySource = CreateObject<BasicEnergySource>();
119 Ptr<WifiRadioEnergyModel> energyModel = CreateObject<WifiRadioEnergyModel>();
120
121 energySource->SetInitialEnergy(300);
122 energyModel->SetEnergySource(energySource);
123 energySource->AppendDeviceEnergyModel(energyModel);
124
125 // aggregate energy source to node
126 wifiApNode.Get(0)->AggregateObject(energySource);
127
128 // Install internet stack
129
131 stack.Install(allNodes);
132
133 // Install Ipv4 addresses
134
136 address.SetBase("10.1.1.0", "255.255.255.0");
138 p2pInterfaces = address.Assign(p2pDevices);
139 address.SetBase("10.1.2.0", "255.255.255.0");
141 csmaInterfaces = address.Assign(csmaDevices);
142 address.SetBase("10.1.3.0", "255.255.255.0");
143 Ipv4InterfaceContainer staInterfaces;
144 staInterfaces = address.Assign(staDevices);
145 Ipv4InterfaceContainer apInterface;
146 apInterface = address.Assign(apDevices);
147
148 // Install applications
149
152 serverApps.Start(Seconds(1.0));
153 serverApps.Stop(Seconds(15.0));
155 echoClient.SetAttribute("MaxPackets", UintegerValue(10));
156 echoClient.SetAttribute("Interval", TimeValue(Seconds(1.)));
157 echoClient.SetAttribute("PacketSize", UintegerValue(1024));
158 ApplicationContainer clientApps = echoClient.Install(wifiStaNodes);
159 clientApps.Start(Seconds(2.0));
160 clientApps.Stop(Seconds(15.0));
161
164
165 AnimationInterface anim("wireless-animation.xml"); // Mandatory
166 for (uint32_t i = 0; i < wifiStaNodes.GetN(); ++i)
167 {
168 anim.UpdateNodeDescription(wifiStaNodes.Get(i), "STA"); // Optional
169 anim.UpdateNodeColor(wifiStaNodes.Get(i), 255, 0, 0); // Optional
170 }
171 for (uint32_t i = 0; i < wifiApNode.GetN(); ++i)
172 {
173 anim.UpdateNodeDescription(wifiApNode.Get(i), "AP"); // Optional
174 anim.UpdateNodeColor(wifiApNode.Get(i), 0, 255, 0); // Optional
175 }
176 for (uint32_t i = 0; i < csmaNodes.GetN(); ++i)
177 {
178 anim.UpdateNodeDescription(csmaNodes.Get(i), "CSMA"); // Optional
179 anim.UpdateNodeColor(csmaNodes.Get(i), 0, 0, 255); // Optional
180 }
181
182 anim.EnablePacketMetadata(); // Optional
183 anim.EnableIpv4RouteTracking("routingtable-wireless.xml",
184 Seconds(0),
185 Seconds(5),
186 Seconds(0.25)); // Optional
187 anim.EnableWifiMacCounters(Seconds(0), Seconds(10)); // Optional
188 anim.EnableWifiPhyCounters(Seconds(0), Seconds(10)); // Optional
191 return 0;
192}
Interface to network animator.
AnimationInterface & EnableIpv4RouteTracking(std::string fileName, Time startTime, Time stopTime, Time pollInterval=Seconds(5))
Enable tracking of the Ipv4 routing table for all Nodes.
void EnableWifiPhyCounters(Time startTime, Time stopTime, Time pollInterval=Seconds(1))
Enable tracking of Wifi Phy Counters such as TxDrop, RxDrop.
void EnablePacketMetadata(bool enable=true)
Enable Packet metadata.
void EnableWifiMacCounters(Time startTime, Time stopTime, Time pollInterval=Seconds(1))
Enable tracking of Wifi Mac Counters such as Tx, TxDrop, Rx, RxDrop.
void UpdateNodeDescription(Ptr< Node > n, std::string descr)
Helper function to update the description for a given node.
void UpdateNodeColor(Ptr< Node > n, uint8_t r, uint8_t g, uint8_t b)
Helper function to update the node color.
static void SetConstantPosition(Ptr< Node > n, double x, double y, double z=0)
Helper function to set Constant Position for a given node.
holds a vector of ns3::Application pointers.
AttributeValue implementation for Boolean.
Definition: boolean.h:37
Parse command-line arguments.
Definition: command-line.h:232
build a set of CsmaNetDevice objects
Definition: csma-helper.h:48
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:42
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
static void PopulateRoutingTables()
Build a routing database and initialize the routing tables of the nodes in the simulation.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Helper class used to assign positions and mobility models to nodes.
holds a vector of ns3::NetDevice pointers
keep track of a set of node pointers.
void Add(const NodeContainer &nc)
Append the contents of another NodeContainer to the end of this container.
Build a set of PointToPointNetDevice objects.
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
a 2d rectangle
Definition: rectangle.h:35
AttributeValue implementation for Rectangle.
Definition: rectangle.h:125
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:142
static void Run()
Run the simulation.
Definition: simulator.cc:178
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:186
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:36
AttributeValue implementation for Ssid.
Definition: ssid.h:96
Hold variables of type string.
Definition: string.h:56
AttributeValue implementation for Time.
Definition: nstime.h:1406
Create an application which sends a UDP packet and waits for an echo of this packet.
Create a server application which waits for input UDP packets and sends them back to the original sen...
Hold an unsigned integer type.
Definition: uinteger.h:45
helps to create WifiNetDevice objects
Definition: wifi-helper.h:324
create MAC layers for a ns3::WifiNetDevice.
manage and create wifi channel objects for the YANS model.
static YansWifiChannelHelper Default()
Create a channel helper in a default working state.
Make it easy to create and manage PHY objects for the YANS model.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
Time NanoSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1355
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1319
AnimationInterface * anim
ns echoServer
Definition: first.py:52
ns serverApps
Definition: first.py:54
ns echoClient
Definition: first.py:59
ns clientApps
Definition: first.py:64
ns address
Definition: first.py:47
ns stack
Definition: first.py:44
ns pointToPoint
Definition: first.py:38
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns cmd
Definition: second.py:40
ns csmaInterfaces
Definition: second.py:78
ns p2pNodes
Definition: second.py:50
ns csmaNodes
Definition: second.py:53
ns csma
Definition: second.py:63
ns p2pDevices
Definition: second.py:61
ns p2pInterfaces
Definition: second.py:75
ns csmaDevices
Definition: second.py:67
ns wifi
Definition: third.py:95
ns ssid
Definition: third.py:93
ns apDevices
Definition: third.py:103
ns staDevices
Definition: third.py:100
c_int nWifi
Definition: third.py:43
ns mac
Definition: third.py:92
ns wifiApNode
Definition: third.py:86
ns channel
Definition: third.py:88
ns mobility
Definition: third.py:105
ns wifiStaNodes
Definition: third.py:84
ns phy
Definition: third.py:89