A Discrete-Event Network Simulator
API
pie-example.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2016 NITK Surathkal
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Authors: Shravya Ks <shravya.ks0@gmail.com>
19  * Smriti Murali <m.smriti.95@gmail.com>
20  * Mohit P. Tahiliani <tahiliani@nitk.edu.in>
21  *
22  */
23 
35 #include "ns3/core-module.h"
36 #include "ns3/network-module.h"
37 #include "ns3/internet-module.h"
38 #include "ns3/flow-monitor-helper.h"
39 #include "ns3/point-to-point-module.h"
40 #include "ns3/applications-module.h"
41 #include "ns3/traffic-control-module.h"
42 
43 using namespace ns3;
44 
45 NS_LOG_COMPONENT_DEFINE ("PieExample");
46 
47 uint32_t checkTimes;
49 
50 // The times
57 
63 
69 
70 std::stringstream filePlotQueueDisc;
71 std::stringstream filePlotQueueDiscAvg;
72 
73 void
75 {
76  uint32_t qSize = queue->GetCurrentSize ().GetValue ();
77 
78  avgQueueDiscSize += qSize;
79  checkTimes++;
80 
81  // check queue disc size every 1/100 of a second
83 
84  std::ofstream fPlotQueueDisc (filePlotQueueDisc.str ().c_str (), std::ios::out | std::ios::app);
85  fPlotQueueDisc << Simulator::Now ().GetSeconds () << " " << qSize << std::endl;
86  fPlotQueueDisc.close ();
87 
88  std::ofstream fPlotQueueDiscAvg (filePlotQueueDiscAvg.str ().c_str (), std::ios::out | std::ios::app);
89  fPlotQueueDiscAvg << Simulator::Now ().GetSeconds () << " " << avgQueueDiscSize / checkTimes << std::endl;
90  fPlotQueueDiscAvg.close ();
91 }
92 
93 void
95 {
96  // SINK is in the right side
97  uint16_t port = 50000;
98  Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
99  PacketSinkHelper sinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress);
100  ApplicationContainer sinkApp = sinkHelper.Install (n3n4.Get (1));
101  sinkApp.Start (Seconds (sink_start_time));
102  sinkApp.Stop (Seconds (sink_stop_time));
103 
104  // Connection one
105  // Clients are in left side
106  /*
107  * Create the OnOff applications to send TCP to the server
108  * onoffhelper is a client that send data to TCP destination
109  */
110  OnOffHelper clientHelper1 ("ns3::TcpSocketFactory", Address ());
111  clientHelper1.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
112  clientHelper1.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
113  clientHelper1.SetAttribute ("PacketSize", UintegerValue (1000));
114  clientHelper1.SetAttribute ("DataRate", DataRateValue (DataRate ("10Mb/s")));
115 
116  // Connection two
117  OnOffHelper clientHelper2 ("ns3::TcpSocketFactory", Address ());
118  clientHelper2.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
119  clientHelper2.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
120  clientHelper2.SetAttribute ("PacketSize", UintegerValue (1000));
121  clientHelper2.SetAttribute ("DataRate", DataRateValue (DataRate ("10Mb/s")));
122 
123  ApplicationContainer clientApps1;
124  AddressValue remoteAddress (InetSocketAddress (i3i4.GetAddress (1), port));
125  clientHelper1.SetAttribute ("Remote", remoteAddress);
126  clientApps1.Add (clientHelper1.Install (n0n2.Get (0)));
127  clientApps1.Start (Seconds (client_start_time));
128  clientApps1.Stop (Seconds (client_stop_time));
129 
130  ApplicationContainer clientApps2;
131  clientHelper2.SetAttribute ("Remote", remoteAddress);
132  clientApps2.Add (clientHelper2.Install (n1n2.Get (0)));
133  clientApps2.Start (Seconds (client_start_time));
134  clientApps2.Stop (Seconds (client_stop_time));
135 }
136 
137 int
138 main (int argc, char *argv[])
139 {
140  LogComponentEnable ("PieQueueDisc", LOG_LEVEL_INFO);
141 
142  std::string pieLinkDataRate = "1.5Mbps";
143  std::string pieLinkDelay = "20ms";
144 
145  std::string pathOut;
146  bool writeForPlot = false;
147  bool writePcap = false;
148  bool flowMonitor = false;
149 
150  bool printPieStats = true;
151 
152  global_start_time = 0.0;
155  global_stop_time = 7.0;
158 
159  // Configuration and command line parameter parsing
160  // Will only save in the directory if enable opts below
161  pathOut = "."; // Current directory
162  CommandLine cmd (__FILE__);
163  cmd.AddValue ("pathOut", "Path to save results from --writeForPlot/--writePcap/--writeFlowMonitor", pathOut);
164  cmd.AddValue ("writeForPlot", "<0/1> to write results for plot (gnuplot)", writeForPlot);
165  cmd.AddValue ("writePcap", "<0/1> to write results in pcapfile", writePcap);
166  cmd.AddValue ("writeFlowMonitor", "<0/1> to enable Flow Monitor and write their results", flowMonitor);
167 
168  cmd.Parse (argc, argv);
169 
170  NS_LOG_INFO ("Create nodes");
171  NodeContainer c;
172  c.Create (6);
173  Names::Add ( "N0", c.Get (0));
174  Names::Add ( "N1", c.Get (1));
175  Names::Add ( "N2", c.Get (2));
176  Names::Add ( "N3", c.Get (3));
177  Names::Add ( "N4", c.Get (4));
178  Names::Add ( "N5", c.Get (5));
179  n0n2 = NodeContainer (c.Get (0), c.Get (2));
180  n1n2 = NodeContainer (c.Get (1), c.Get (2));
181  n2n3 = NodeContainer (c.Get (2), c.Get (3));
182  n3n4 = NodeContainer (c.Get (3), c.Get (4));
183  n3n5 = NodeContainer (c.Get (3), c.Get (5));
184 
185  Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpNewReno"));
186  // 42 = headers size
187  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1000 - 42));
188  Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
189  GlobalValue::Bind ("ChecksumEnabled", BooleanValue (false));
190 
191  uint32_t meanPktSize = 1000;
192 
193  // PIE params
194  NS_LOG_INFO ("Set PIE params");
195  Config::SetDefault ("ns3::PieQueueDisc::MaxSize", StringValue ("100p"));
196  Config::SetDefault ("ns3::PieQueueDisc::MeanPktSize", UintegerValue (meanPktSize));
197  Config::SetDefault ("ns3::PieQueueDisc::DequeueThreshold", UintegerValue (10000));
198  Config::SetDefault ("ns3::PieQueueDisc::QueueDelayReference", TimeValue (Seconds (0.02)));
199  Config::SetDefault ("ns3::PieQueueDisc::MaxBurstAllowance", TimeValue (Seconds (0.1)));
200 
201  NS_LOG_INFO ("Install internet stack on all nodes.");
202  InternetStackHelper internet;
203  internet.Install (c);
204 
205  TrafficControlHelper tchPfifo;
206  uint16_t handle = tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
207  tchPfifo.AddInternalQueues (handle, 3, "ns3::DropTailQueue", "MaxSize", StringValue ("1000p"));
208 
209  TrafficControlHelper tchPie;
210  tchPie.SetRootQueueDisc ("ns3::PieQueueDisc");
211 
212  NS_LOG_INFO ("Create channels");
213  PointToPointHelper p2p;
214 
215  NetDeviceContainer devn0n2;
216  NetDeviceContainer devn1n2;
217  NetDeviceContainer devn2n3;
218  NetDeviceContainer devn3n4;
219  NetDeviceContainer devn3n5;
220 
221  QueueDiscContainer queueDiscs;
222 
223  p2p.SetQueue ("ns3::DropTailQueue");
224  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
225  p2p.SetChannelAttribute ("Delay", StringValue ("2ms"));
226  devn0n2 = p2p.Install (n0n2);
227  tchPfifo.Install (devn0n2);
228 
229  p2p.SetQueue ("ns3::DropTailQueue");
230  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
231  p2p.SetChannelAttribute ("Delay", StringValue ("3ms"));
232  devn1n2 = p2p.Install (n1n2);
233  tchPfifo.Install (devn1n2);
234 
235  p2p.SetQueue ("ns3::DropTailQueue");
236  p2p.SetDeviceAttribute ("DataRate", StringValue (pieLinkDataRate));
237  p2p.SetChannelAttribute ("Delay", StringValue (pieLinkDelay));
238  devn2n3 = p2p.Install (n2n3);
239  // only backbone link has PIE queue disc
240  queueDiscs = tchPie.Install (devn2n3);
241 
242  p2p.SetQueue ("ns3::DropTailQueue");
243  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
244  p2p.SetChannelAttribute ("Delay", StringValue ("4ms"));
245  devn3n4 = p2p.Install (n3n4);
246  tchPfifo.Install (devn3n4);
247 
248  p2p.SetQueue ("ns3::DropTailQueue");
249  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
250  p2p.SetChannelAttribute ("Delay", StringValue ("5ms"));
251  devn3n5 = p2p.Install (n3n5);
252  tchPfifo.Install (devn3n5);
253 
254  NS_LOG_INFO ("Assign IP Addresses");
255  Ipv4AddressHelper ipv4;
256 
257  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
258  i0i2 = ipv4.Assign (devn0n2);
259 
260  ipv4.SetBase ("10.1.2.0", "255.255.255.0");
261  i1i2 = ipv4.Assign (devn1n2);
262 
263  ipv4.SetBase ("10.1.3.0", "255.255.255.0");
264  i2i3 = ipv4.Assign (devn2n3);
265 
266  ipv4.SetBase ("10.1.4.0", "255.255.255.0");
267  i3i4 = ipv4.Assign (devn3n4);
268 
269  ipv4.SetBase ("10.1.5.0", "255.255.255.0");
270  i3i5 = ipv4.Assign (devn3n5);
271 
272  // Set up the routing
274 
275  BuildAppsTest ();
276 
277  if (writePcap)
278  {
279  PointToPointHelper ptp;
280  std::stringstream stmp;
281  stmp << pathOut << "/pie";
282  ptp.EnablePcapAll (stmp.str ().c_str ());
283  }
284 
285  Ptr<FlowMonitor> flowmon;
286  if (flowMonitor)
287  {
288  FlowMonitorHelper flowmonHelper;
289  flowmon = flowmonHelper.InstallAll ();
290  }
291 
292  if (writeForPlot)
293  {
294  filePlotQueueDisc << pathOut << "/" << "pie-queue-disc.plotme";
295  filePlotQueueDiscAvg << pathOut << "/" << "pie-queue-disc_avg.plotme";
296 
297  remove (filePlotQueueDisc.str ().c_str ());
298  remove (filePlotQueueDiscAvg.str ().c_str ());
299  Ptr<QueueDisc> queue = queueDiscs.Get (0);
301  }
302 
304  Simulator::Run ();
305 
306  QueueDisc::Stats st = queueDiscs.Get (0)->GetStats ();
307 
309  {
310  std::cout << "There should be no drops due to queue full." << std::endl;
311  exit (1);
312  }
313 
314  if (flowMonitor)
315  {
316  std::stringstream stmp;
317  stmp << pathOut << "/pie.flowmon";
318 
319  flowmon->SerializeToXmlFile (stmp.str ().c_str (), false, false);
320  }
321 
322  if (printPieStats)
323  {
324  std::cout << "*** PIE stats from Node 2 queue ***" << std::endl;
325  std::cout << "\t " << st.GetNDroppedPackets (PieQueueDisc::UNFORCED_DROP)
326  << " drops due to prob mark" << std::endl;
327  std::cout << "\t " << st.GetNDroppedPackets (PieQueueDisc::FORCED_DROP)
328  << " drops due to queue limits" << std::endl;
329  }
330 
332 
333  return 0;
334 }
ns3::NetDeviceContainer
holds a vector of ns3::NetDevice pointers
Definition: net-device-container.h:42
n3n4
NodeContainer n3n4
Definition: pie-example.cc:61
NS_LOG_COMPONENT_DEFINE
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
ns3::InetSocketAddress
an Inet address class
Definition: inet-socket-address.h:41
ns3::DataRateValue
AttributeValue implementation for DataRate.
Definition: data-rate.h:298
ns3::CommandLine
Parse command-line arguments.
Definition: command-line.h:228
n2n3
NodeContainer n2n3
Definition: pie-example.cc:60
ns3::BooleanValue
AttributeValue implementation for Boolean.
Definition: boolean.h:37
ns3::QueueDisc::Stats
Structure that keeps the queue disc statistics.
Definition: queue-disc.h:186
ns3::LOG_LEVEL_INFO
@ LOG_LEVEL_INFO
LOG_INFO and above.
Definition: log.h:107
ns3::TrafficControlHelper::SetRootQueueDisc
uint16_t SetRootQueueDisc(const std::string &type, Args &&... args)
Helper function used to set a root queue disc of the given type and with the given attributes.
Definition: traffic-control-helper.h:362
ns3::Simulator::Now
static Time Now(void)
Return the current simulation virtual time.
Definition: simulator.cc:195
i2i3
Ipv4InterfaceContainer i2i3
Definition: pie-example.cc:66
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::ApplicationContainer::Stop
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
Definition: application-container.cc:107
ns3::PointToPointHelper::SetQueue
void SetQueue(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())
Each point to point net device must have a queue to pass packets through.
Definition: point-to-point-helper.cc:53
ns3::Ipv4AddressHelper
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
Definition: ipv4-address-helper.h:48
ns3::PointToPointHelper::SetDeviceAttribute
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
Definition: point-to-point-helper.cc:69
ns3::PointToPointHelper::SetChannelAttribute
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
Definition: point-to-point-helper.cc:75
ns3::PcapHelperForDevice::EnablePcapAll
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 ...
Definition: trace-helper.cc:439
ns3::AddressValue
AttributeValue implementation for Address.
Definition: address.h:278
i1i2
Ipv4InterfaceContainer i1i2
Definition: pie-example.cc:65
n1n2
NodeContainer n1n2
Definition: pie-example.cc:59
ns3::LogComponentEnable
void LogComponentEnable(char const *name, enum LogLevel level)
Enable the logging output associated with that log component.
Definition: log.cc:361
ns3::PointToPointHelper::Install
NetDeviceContainer Install(NodeContainer c)
Definition: point-to-point-helper.cc:222
BuildAppsTest
void BuildAppsTest()
Definition: pie-example.cc:94
ns3::Simulator::Schedule
static EventId Schedule(Time const &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:556
ns3::NodeContainer::Create
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Definition: node-container.cc:98
client_stop_time
double client_stop_time
Definition: pie-example.cc:56
client_start_time
double client_start_time
Definition: pie-example.cc:55
ns3::ApplicationContainer::Add
void Add(ApplicationContainer other)
Append the contents of another ApplicationContainer to the end of this container.
Definition: application-container.cc:67
ns3::Ipv4AddressHelper::SetBase
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Definition: ipv4-address-helper.cc:64
ns3::Ptr< QueueDisc >
ns3::DataRate
Class for representing data rates.
Definition: data-rate.h:89
ns3::FlowMonitorHelper
Helper to enable IP flow monitoring on a set of Nodes.
Definition: flow-monitor-helper.h:40
ns3::Ipv4GlobalRoutingHelper::PopulateRoutingTables
static void PopulateRoutingTables(void)
Build a routing database and initialize the routing tables of the nodes in the simulation.
Definition: ipv4-global-routing-helper.cc:61
ns3::Simulator::Stop
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:180
global_stop_time
double global_stop_time
Definition: pie-example.cc:52
ns3::TrafficControlHelper::Install
QueueDiscContainer Install(NetDeviceContainer c)
Definition: traffic-control-helper.cc:248
ns3::FlowMonitorHelper::InstallAll
Ptr< FlowMonitor > InstallAll()
Enable flow monitoring on all nodes.
Definition: flow-monitor-helper.cc:135
ns3::Address
a polymophic address class
Definition: address.h:91
avgQueueDiscSize
double avgQueueDiscSize
Definition: pie-example.cc:48
sink_start_time
double sink_start_time
Definition: pie-example.cc:53
ns3::InternetStackHelper::Install
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
Definition: internet-stack-helper.cc:366
ns3::OnOffHelper
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Definition: on-off-helper.h:43
NS_LOG_INFO
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:281
ns3::QueueDisc::Stats::GetNDroppedPackets
uint32_t GetNDroppedPackets(std::string reason) const
Get the number of packets dropped for the given reason.
Definition: queue-disc.cc:110
ns3::QueueDiscContainer
Holds a vector of ns3::QueueDisc pointers.
Definition: queue-disc-container.h:45
checkTimes
uint32_t checkTimes
Definition: pie-example.cc:45
ns3::Ipv4InterfaceContainer
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Definition: ipv4-interface-container.h:55
n3n5
NodeContainer n3n5
Definition: pie-example.cc:62
i3i5
Ipv4InterfaceContainer i3i5
Definition: pie-example.cc:68
ns3::NodeContainer::Get
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
Definition: node-container.cc:93
filePlotQueueDiscAvg
std::stringstream filePlotQueueDiscAvg
Definition: pie-example.cc:71
ns3::QueueDisc::GetCurrentSize
QueueSize GetCurrentSize(void)
Get the current size of the queue disc in bytes, if operating in bytes mode, or packets,...
Definition: queue-disc.cc:523
second.cmd
cmd
Definition: second.py:35
ns3::OnOffHelper::SetAttribute
void SetAttribute(std::string name, const AttributeValue &value)
Helper function used to set the underlying application attributes.
Definition: on-off-helper.cc:40
n0n2
NodeContainer n0n2
Definition: pie-example.cc:58
global_start_time
double global_start_time
Definition: pie-example.cc:51
CheckQueueDiscSize
void CheckQueueDiscSize(Ptr< QueueDisc > queue)
Definition: pie-example.cc:74
ns3::Simulator::Run
static void Run(void)
Run the simulation.
Definition: simulator.cc:172
ns3::StringValue
Hold variables of type string.
Definition: string.h:41
ns3::GlobalValue::Bind
static void Bind(std::string name, const AttributeValue &value)
Iterate over the set of GlobalValues until a matching name is found and then set its value with Globa...
Definition: global-value.cc:155
ns3::PacketSinkHelper
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
Definition: packet-sink-helper.h:36
ns3::TrafficControlHelper::AddInternalQueues
void AddInternalQueues(uint16_t handle, uint16_t count, std::string type, Args &&... args)
Helper function used to add the given number of internal queues (of the given type and with the given...
Definition: traffic-control-helper.h:369
ns3::OnOffHelper::Install
ApplicationContainer Install(NodeContainer c) const
Install an ns3::OnOffApplication on each node of the input container configured with all the attribut...
Definition: on-off-helper.cc:59
ns3::PieQueueDisc::UNFORCED_DROP
static constexpr const char * UNFORCED_DROP
Early probability drops: proactive.
Definition: pie-queue-disc.h:98
ns3::PieQueueDisc::FORCED_DROP
static constexpr const char * FORCED_DROP
Drops due to queue limit: reactive.
Definition: pie-queue-disc.h:99
ns3::Ipv4Address::GetAny
static Ipv4Address GetAny(void)
Definition: ipv4-address.cc:395
ns3::ApplicationContainer::Start
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter.
Definition: application-container.cc:87
ns3::Seconds
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1289
ns3::TrafficControlHelper
Build a set of QueueDisc objects.
Definition: traffic-control-helper.h:120
ns3::Ipv4AddressHelper::Assign
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
Definition: ipv4-address-helper.cc:135
ns3::Simulator::Destroy
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:136
ns3::ApplicationContainer
holds a vector of ns3::Application pointers.
Definition: application-container.h:43
ns3::TimeValue
AttributeValue implementation for Time.
Definition: nstime.h:1353
ns3::PointToPointHelper
Build a set of PointToPointNetDevice objects.
Definition: point-to-point-helper.h:45
ns3::NodeContainer
keep track of a set of node pointers.
Definition: node-container.h:39
ns3::Ipv4InterfaceContainer::GetAddress
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
Definition: ipv4-interface-container.cc:59
ns3::UintegerValue
Hold an unsigned integer type.
Definition: uinteger.h:44
ns3::Config::SetDefault
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:849
ns3::QueueDisc::GetStats
const Stats & GetStats(void)
Retrieve all the collected statistics.
Definition: queue-disc.cc:421
ns3::QueueSize::GetValue
uint32_t GetValue() const
Get the underlying value.
Definition: queue-size.cc:175
sink_stop_time
double sink_stop_time
Definition: pie-example.cc:54
ns3::InternetStackHelper
aggregate IP/TCP/UDP functionality to existing Nodes.
Definition: internet-stack-helper.h:88
i0i2
Ipv4InterfaceContainer i0i2
Definition: pie-example.cc:64
ns3::Names::Add
static void Add(std::string name, Ptr< Object > object)
Add the association between the string "name" and the Ptr<Object> obj.
Definition: names.cc:768
filePlotQueueDisc
std::stringstream filePlotQueueDisc
Definition: pie-example.cc:70
ns3::Simulator::ScheduleNow
static EventId ScheduleNow(FUNC f, Ts &&... args)
Schedule an event to expire Now.
Definition: simulator.h:587
ns3::QueueDiscContainer::Get
Ptr< QueueDisc > Get(std::size_t i) const
Get the Ptr<QueueDisc> stored in this container at a given index.
Definition: queue-disc-container.cc:53
ns3::Time::GetSeconds
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
Definition: nstime.h:380
ns3::PacketSinkHelper::Install
ApplicationContainer Install(NodeContainer c) const
Install an ns3::PacketSinkApplication on each node of the input container configured with all the att...
Definition: packet-sink-helper.cc:55
ns3::FlowMonitor::SerializeToXmlFile
void SerializeToXmlFile(std::string fileName, bool enableHistograms, bool enableProbes)
Same as SerializeToXmlStream, but writes to a file instead.
Definition: flow-monitor.cc:516
port
uint16_t port
Definition: dsdv-manet.cc:45
i3i4
Ipv4InterfaceContainer i3i4
Definition: pie-example.cc:67