A Discrete-Event Network Simulator
API
codel-vs-pfifo-asymmetric.cc
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2014 ResiliNets, ITTC, University of Kansas
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 * Author: Truc Anh N Nguyen <trucanh524@gmail.com>
19 * Modified by: Pasquale Imputato <p.imputato@gmail.com>
20 *
21 */
22
23/*
24 * This is an example that compares CoDel and PfifoFast queues using a
25 * typical cable modem topology and delay
26 * (total RTT 37 ms as measured by Measuring Broadband America)
27 *
28 * 10gigE 22 Mb/s gigE
29 * 15 ms 1 ms 0.1 ms
30 * -------- ------- (1) -------- -------
31 * | |------>| |------>| |------->| |
32 * |server| |CMTS | |Router| |Host |
33 * | |<------| |<------| |<-------| |
34 * -------- -------- (2)-------- -------
35 * 10gigE 5 Mb/s gigE
36 * 15 ms 6 ms 0.1 ms
37 *
38 * (1) PfifoFast queue , 256K bytes
39 * (2) PfifoFast, CoDel
40 *
41 * The server initiates a bulk send TCP transfer to the host.
42 * The host initiates a bulk send TCP transfer to the server.
43 * Also, isochronous traffic (VoIP-like) between server and host
44 * The default TCP version in ns-3, TcpNewReno, is used as the transport-layer
45 * protocol.
46 * Packets transmitted during a simulation run are captured into a .pcap file,
47 * and congestion window values are also traced.
48 */
49
50#include <iostream>
51#include <fstream>
52#include <string>
53
54#include "ns3/core-module.h"
55#include "ns3/network-module.h"
56#include "ns3/internet-module.h"
57#include "ns3/point-to-point-module.h"
58#include "ns3/applications-module.h"
59#include "ns3/config-store-module.h"
60#include "ns3/error-model.h"
61#include "ns3/tcp-header.h"
62#include "ns3/udp-header.h"
63#include "ns3/enum.h"
64#include "ns3/event-id.h"
65#include "ns3/ipv4-global-routing-helper.h"
66#include "ns3/traffic-control-module.h"
67
68using namespace ns3;
69
70NS_LOG_COMPONENT_DEFINE ("CoDelPfifoFastAsymmetricTest");
71
72static void
74{
75 *stream->GetStream () << oldval << " " << newval << std::endl;
76}
77
78static void
79TraceCwnd (std::string cwndTrFileName)
80{
81 AsciiTraceHelper ascii;
82 if (cwndTrFileName.compare ("") == 0)
83 {
84 NS_LOG_DEBUG ("No trace file for cwnd provided");
85 return;
86 }
87 else
88 {
89 Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream (cwndTrFileName.c_str ());
90 Config::ConnectWithoutContext ("/NodeList/0/$ns3::TcpL4Protocol/SocketList/0/CongestionWindow",MakeBoundCallback (&CwndTracer, stream));
91 }
92}
93
94static void
96{
97 *stream->GetStream () << newval << std::endl;
98}
99
100static void
101TraceSojourn (std::string sojournTrFileName)
102{
103 AsciiTraceHelper ascii;
104 if (sojournTrFileName.compare ("") == 0)
105 {
106 NS_LOG_DEBUG ("No trace file for sojourn provided");
107 return;
108 }
109 else
110 {
111 Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream (sojournTrFileName.c_str ());
112 Config::ConnectWithoutContext ("/NodeList/2/$ns3::TrafficControlLayer/RootQueueDiscList/0/$ns3::CoDelQueueDisc/SojournTime", MakeBoundCallback (&SojournTracer, stream));
113 }
114}
115
116static void
118{
119 *stream->GetStream () << oldval << " " << newval << std::endl;
120}
121
122static void
123TraceQueueLength (std::string queueLengthTrFileName)
124{
125 AsciiTraceHelper ascii;
126 if (queueLengthTrFileName.compare ("") == 0)
127 {
128 NS_LOG_DEBUG ("No trace file for queue length provided");
129 return;
130 }
131 else
132 {
133 Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream (queueLengthTrFileName.c_str ());
134 Config::ConnectWithoutContext ("/NodeList/2/$ns3::TrafficControlLayer/RootQueueDiscList/0/BytesInQueue", MakeBoundCallback (&QueueLengthTracer, stream));
135 }
136}
137
138static void
140{
141 *stream->GetStream () << Simulator::Now ().GetSeconds () << " " << item << std::endl;
142}
143
144static void
145TraceEveryDrop (std::string everyDropTrFileName)
146{
147 AsciiTraceHelper ascii;
148 if (everyDropTrFileName.compare ("") == 0)
149 {
150 NS_LOG_DEBUG ("No trace file for every drop event provided");
151 return;
152 }
153 else
154 {
155 Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream (everyDropTrFileName.c_str ());
156 Config::ConnectWithoutContext ("/NodeList/2/$ns3::TrafficControlLayer/RootQueueDiscList/0/Drop", MakeBoundCallback (&EveryDropTracer, stream));
157 }
158}
159
160static void
161DroppingStateTracer (Ptr<OutputStreamWrapper>stream, bool oldVal, bool newVal)
162{
163 if (oldVal == false && newVal == true)
164 {
165 NS_LOG_INFO ("Entering the dropping state");
166 *stream->GetStream () << Simulator::Now ().GetSeconds () << " ";
167 }
168 else if (oldVal == true && newVal == false)
169 {
170 NS_LOG_INFO ("Leaving the dropping state");
171 *stream->GetStream () << Simulator::Now ().GetSeconds () << std::endl;
172 }
173}
174
175static void
176TraceDroppingState (std::string dropStateTrFileName)
177{
178 AsciiTraceHelper ascii;
179 if (dropStateTrFileName.compare ("") == 0)
180 {
181 NS_LOG_DEBUG ("No trace file for dropping state provided");
182 return;
183 }
184 else
185 {
186 Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream (dropStateTrFileName.c_str ());
187 Config::ConnectWithoutContext ("/NodeList/2/$ns3::TrafficControlLayer/RootQueueDiscList/0/$ns3::CoDelQueueDisc/DropState", MakeBoundCallback (&DroppingStateTracer, stream));
188 }
189}
190
191void
193{
194 BulkSendHelper sourceHelper ("ns3::TcpSocketFactory", Address ());
195 sourceHelper.SetAttribute ("Remote", remoteAddress);
196 sourceHelper.SetAttribute ("SendSize", UintegerValue (pktSize));
197 sourceHelper.SetAttribute ("MaxBytes", UintegerValue (0));
198 ApplicationContainer sourceApp = sourceHelper.Install (sender);
199 sourceApp.Start (Seconds (0));
200 sourceApp.Stop (Seconds (stopTime - 3));
201}
202
203void
204CreateOnOffFlow (AddressValue remoteAddress, Ptr<Node> sender, float stopTime)
205{
206 OnOffHelper sourceHelper ("ns3::UdpSocketFactory", Address ());
207 sourceHelper.SetAttribute ("PacketSize", UintegerValue (280));
208 sourceHelper.SetAttribute ("Remote", remoteAddress);
209 ApplicationContainer sourceApp = sourceHelper.Install (sender);
210 sourceApp.Start (Seconds (0));
211 sourceApp.Stop (Seconds (stopTime - 3));
212}
213
214int main (int argc, char *argv[])
215{
216 std::string serverCmtsDelay = "15ms";
217 std::string cmtsRouterDelay = "6ms";
218 std::string routerHostDelay = "0.1ms";
219 std::string serverLanDataRate = "10Gbps";
220 std::string cmtsLanDataRate = "10Gbps";
221 std::string cmtsWanDataRate = "22Mbps";
222 std::string routerWanDataRate = "5Mbps";
223 std::string routerLanDataRate = "10Gbps";
224 std::string hostLanDataRate = "10Gbps";
225
226 std::string routerWanQueueDiscType = "CoDel"; // outbound cable router queue
227 uint32_t pktSize = 1458; // in bytes. 1458 to prevent fragments
228 uint32_t queueSize = 1000; // in packets
229 uint32_t numOfUpLoadBulkFlows = 1; // # of upload bulk transfer flows
230 uint32_t numOfDownLoadBulkFlows = 1; // # of download bulk transfer flows
231 uint32_t numOfUpLoadOnOffFlows = 1; // # of upload onoff flows
232 uint32_t numOfDownLoadOnOffFlows = 1; // # of download onoff flows
233 bool isPcapEnabled = true;
234
235 float startTime = 0.1f;
236 float simDuration = 60; //in seconds
237
238 std::string fileNamePrefix = "codel-vs-pfifo-fast-asymmetric";
239 bool logging = true;
240
241 CommandLine cmd (__FILE__);
242 cmd.AddValue ("serverCmtsDelay", "Link delay between server and CMTS", serverCmtsDelay);
243 cmd.AddValue ("cmtsRouterDelay", "Link delay between CMTS and rounter", cmtsRouterDelay);
244 cmd.AddValue ("routerHostDelay", "Link delay between router and host", routerHostDelay);
245 cmd.AddValue ("serverLanDataRate", "Server LAN net device data rate", serverLanDataRate);
246 cmd.AddValue ("cmtsLanDataRate", "CMTS LAN net device data rate", cmtsLanDataRate);
247 cmd.AddValue ("cmtsWanDataRate", "CMTS WAN net device data rate", cmtsWanDataRate);
248 cmd.AddValue ("routerWanDataRate", "Router WAN net device data rate", routerWanDataRate);
249 cmd.AddValue ("routerLanDataRate", "Router LAN net device data rate", routerLanDataRate);
250 cmd.AddValue ("hostLanDataRate", "Host LAN net device data rate", hostLanDataRate);
251 cmd.AddValue ("routerWanQueueDiscType", "Router WAN queue disc type: "
252 "PfifoFast, CoDel", routerWanQueueDiscType);
253 cmd.AddValue ("queueSize", "Queue size in packets", queueSize);
254 cmd.AddValue ("pktSize", "Packet size in bytes", pktSize);
255 cmd.AddValue ("numOfUpLoadBulkFlows", "Number of upload bulk transfer flows", numOfUpLoadBulkFlows);
256 cmd.AddValue ("numOfDownLoadBulkFlows", "Number of download bulk transfer flows", numOfDownLoadBulkFlows);
257 cmd.AddValue ("numOfUpLoadOnOffFlows", "Number of upload OnOff flows", numOfUpLoadOnOffFlows);
258 cmd.AddValue ("numOfDownLoadOnOffFlows", "Number of download OnOff flows", numOfDownLoadOnOffFlows);
259 cmd.AddValue ("startTime", "Simulation start time", startTime);
260 cmd.AddValue ("simDuration", "Simulation duration in seconds", simDuration);
261 cmd.AddValue ("isPcapEnabled", "Flag to enable/disable pcap", isPcapEnabled);
262 cmd.AddValue ("logging", "Flag to enable/disable logging", logging);
263 cmd.Parse (argc, argv);
264
265 float stopTime = startTime + simDuration;
266
267 std::string pcapFileName = fileNamePrefix + "-" + routerWanQueueDiscType;
268 std::string cwndTrFileName = fileNamePrefix + "-" + routerWanQueueDiscType + "-cwnd" + ".tr";
269 std::string attributeFileName = fileNamePrefix + "-" + routerWanQueueDiscType + ".attr";
270 std::string sojournTrFileName = fileNamePrefix + "-" + routerWanQueueDiscType + "-sojourn" + ".tr";
271 std::string queueLengthTrFileName = fileNamePrefix + "-" + routerWanQueueDiscType + "-length" + ".tr";
272 std::string everyDropTrFileName = fileNamePrefix + "-" + routerWanQueueDiscType + "-drop" + ".tr";
273 std::string dropStateTrFileName = fileNamePrefix + "-" + routerWanQueueDiscType + "-drop-state" + ".tr";
274 if (logging)
275 {
276 //LogComponentEnable ("CoDelPfifoFastAsymmetricTest", LOG_LEVEL_ALL);
277 //LogComponentEnable ("BulkSendApplication", LOG_LEVEL_INFO);
278 //LogComponentEnable ("PfifoFastQueue", LOG_LEVEL_ALL);
279 LogComponentEnable ("CoDelQueueDisc", LOG_LEVEL_FUNCTION);
280 }
281
282 // Queue defaults
283 Config::SetDefault ("ns3::PfifoFastQueueDisc::MaxSize",
285 Config::SetDefault ("ns3::CoDelQueueDisc::MaxSize",
287
288 // Create the nodes
289 NS_LOG_INFO ("Create nodes");
291 nodes.Create (4);
292 // Descriptive names
293 Names::Add ("server", nodes.Get (0));
294 Names::Add ("cmts", nodes.Get (1));
295 Names::Add ("router", nodes.Get (2));
296 Names::Add ("host", nodes.Get (3));
297 NodeContainer serverCmts;
298 serverCmts = NodeContainer (nodes.Get (0), nodes.Get (1));
299 NodeContainer cmtsRouter;
300 cmtsRouter = NodeContainer (nodes.Get (1), nodes.Get (2));
301 NodeContainer routerHost;
302 routerHost = NodeContainer (nodes.Get (2), nodes.Get (3));
303
304 // Enable checksum
305 if (isPcapEnabled)
306 {
307 GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
308 }
309
310 Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (pktSize));
311
312 NS_LOG_INFO ("Create channels and install net devices on nodes");
314
315 p2p.SetChannelAttribute ("Delay", StringValue (serverCmtsDelay));
316 NetDeviceContainer serverCmtsDev = p2p.Install (serverCmts);
317 Names::Add ("server/lan", serverCmtsDev.Get (0));
318 Names::Add ("cmts/lan", serverCmtsDev.Get (1));
319 Ptr<PointToPointNetDevice> serverLanDev = DynamicCast<PointToPointNetDevice> (serverCmtsDev.Get (0));
320 serverLanDev->SetAttribute ("DataRate", StringValue (serverLanDataRate));
321 Ptr<PointToPointNetDevice> cmtsLanDev = DynamicCast<PointToPointNetDevice> (serverCmtsDev.Get (1));
322 cmtsLanDev->SetAttribute ("DataRate", StringValue (cmtsLanDataRate));
323
324 p2p.SetChannelAttribute ("Delay", StringValue (cmtsRouterDelay));
325 NetDeviceContainer cmtsRouterDev = p2p.Install (cmtsRouter);
326 Names::Add ("cmts/wan", cmtsRouterDev.Get (0));
327 Names::Add ("router/wan", cmtsRouterDev.Get (1));
328 Ptr<PointToPointNetDevice> cmtsWanDev = DynamicCast<PointToPointNetDevice> (cmtsRouterDev.Get (0));
329 cmtsWanDev->SetAttribute ("DataRate", StringValue (cmtsWanDataRate));
330 Ptr<PointToPointNetDevice> routerWanDev = DynamicCast<PointToPointNetDevice> (cmtsRouterDev.Get (1));
331 routerWanDev->SetAttribute ("DataRate", StringValue (routerWanDataRate));
332
333 p2p.SetChannelAttribute ("Delay", StringValue (routerHostDelay));
334 NetDeviceContainer routerHostDev = p2p.Install (routerHost);
335 Names::Add ("router/lan", routerHostDev.Get (0));
336 Names::Add ("host/lan", routerHostDev.Get (1));
337 Ptr<PointToPointNetDevice> routerLanDev = DynamicCast<PointToPointNetDevice> (routerHostDev.Get (0));
338 routerLanDev->SetAttribute ("DataRate", StringValue (routerLanDataRate));
339 Ptr<PointToPointNetDevice> hostLanDev = DynamicCast<PointToPointNetDevice> (routerHostDev.Get (1));
340 hostLanDev->SetAttribute ("DataRate", StringValue (hostLanDataRate));
341
342 NS_LOG_INFO ("Install Internet stack on all nodes");
344 stack.InstallAll ();
345
346 TrafficControlHelper tchPfifo;
347 tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
348
349 TrafficControlHelper tchCoDel;
350 tchCoDel.SetRootQueueDisc ("ns3::CoDelQueueDisc");
351
352 tchPfifo.Install (serverCmtsDev);
353 tchPfifo.Install (cmtsWanDev);
354 if (routerWanQueueDiscType.compare ("PfifoFast") == 0)
355 {
356 tchPfifo.Install (routerWanDev);
357 }
358 else if (routerWanQueueDiscType.compare ("CoDel") == 0)
359 {
360 tchCoDel.Install (routerWanDev);
361 }
362 else
363 {
364 NS_LOG_DEBUG ("Invalid router WAN queue disc type");
365 exit (1);
366 }
367 tchPfifo.Install (routerHostDev);
368
369 NS_LOG_INFO ("Assign IP Addresses");
371 ipv4.SetBase ("10.1.1.0", "255.255.255.0");
372 Ipv4InterfaceContainer serverCmtsInterface = ipv4.Assign (serverCmtsDev);
373 ipv4.SetBase ("10.1.2.0", "255.255.255.0");
374 Ipv4InterfaceContainer cmtsRouterInterface = ipv4.Assign (cmtsRouterDev);
375 ipv4.SetBase ("10.1.3.0", "255.255.255.0");
376 Ipv4InterfaceContainer routerHostInterface = ipv4.Assign (routerHostDev);
377
378 NS_LOG_INFO ("Initialize Global Routing");
379 Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
380
381 NS_LOG_INFO ("Configure downstream");
382 uint16_t port1 = 50000;
383 Address sinkLocalAddress1 (InetSocketAddress (Ipv4Address::GetAny (), port1));
384 PacketSinkHelper sinkHelper1 ("ns3::TcpSocketFactory", sinkLocalAddress1);
385 ApplicationContainer sinkApp1 = sinkHelper1.Install (routerHost.Get (1));
386 sinkApp1.Start (Seconds (0));
387 sinkApp1.Stop (Seconds (stopTime));
388 AddressValue remoteAddress1 (InetSocketAddress (routerHostInterface.GetAddress (1), port1));
389 while (numOfDownLoadBulkFlows)
390 {
391 CreateBulkFlow (remoteAddress1, serverCmts.Get (0), pktSize, stopTime);
392 numOfDownLoadBulkFlows--;
393 }
394
395 while (numOfDownLoadOnOffFlows)
396 {
397 CreateOnOffFlow (remoteAddress1, serverCmts.Get (0), stopTime);
398 numOfDownLoadOnOffFlows--;
399 }
400
401 NS_LOG_INFO ("Configure upstream");
402 uint16_t port2 = 50001;
403 Address sinkLocalAddress2 (InetSocketAddress (Ipv4Address::GetAny (), port2));
404 PacketSinkHelper sinkHelper2 ("ns3::TcpSocketFactory", sinkLocalAddress2);
405 ApplicationContainer sinkApp2 = sinkHelper2.Install (serverCmts.Get (0));
406 sinkApp2.Start (Seconds (0));
407 sinkApp2.Stop (Seconds (stopTime));
408 AddressValue remoteAddress2 (InetSocketAddress (serverCmtsInterface.GetAddress (0), port2));
409 while (numOfUpLoadBulkFlows)
410 {
411 CreateBulkFlow (remoteAddress2, routerHost.Get (1), pktSize, stopTime);
412 numOfUpLoadBulkFlows--;
413 }
414
415 while (numOfUpLoadOnOffFlows)
416 {
417 CreateOnOffFlow (remoteAddress2, routerHost.Get (1), stopTime);
418 numOfUpLoadOnOffFlows--;
419 }
420
421 Simulator::Schedule (Seconds (0.00001), &TraceCwnd, cwndTrFileName);
422 TraceEveryDrop (everyDropTrFileName);
423 if (routerWanQueueDiscType.compare ("CoDel") == 0)
424 {
425 TraceSojourn (sojournTrFileName);
426 TraceQueueLength (queueLengthTrFileName);
427 TraceDroppingState (dropStateTrFileName);
428 }
429 if (isPcapEnabled)
430 {
431 p2p.EnablePcapAll (pcapFileName);
432 }
433
434 // Output config store to txt format
435 Config::SetDefault ("ns3::ConfigStore::Filename", StringValue (attributeFileName));
436 Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("RawText"));
437 Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Save"));
438 ConfigStore outputConfig;
439 outputConfig.ConfigureDefaults ();
440 outputConfig.ConfigureAttributes ();
441
442 Simulator::Stop (Seconds (stopTime));
443 Simulator::Run ();
444
445 Simulator::Destroy ();
446 return 0;
447}
a polymophic address class
Definition: address.h:91
AttributeValue implementation for Address.
holds a vector of ns3::Application pointers.
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter.
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
Manage ASCII trace files for device models.
Definition: trace-helper.h:163
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.
AttributeValue implementation for Boolean.
Definition: boolean.h:37
A helper to make it easier to instantiate an ns3::BulkSendApplication on a set of nodes.
void SetAttribute(std::string name, const AttributeValue &value)
Helper function used to set the underlying application attributes, not the socket attributes.
ApplicationContainer Install(NodeContainer c) const
Install an ns3::BulkSendApplication on each node of the input container configured with all the attri...
Parse command-line arguments.
Definition: command-line.h:229
Introspection did not find any typical Config paths.
Definition: config-store.h:60
void ConfigureDefaults(void)
Configure the default values.
void ConfigureAttributes(void)
Configure the attribute values.
an Inet address class
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
holds a vector of ns3::NetDevice pointers
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
keep track of a set of node pointers.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Definition: on-off-helper.h:43
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.
std::ostream * GetStream(void)
Return a pointer to an ostream previously set in the wrapper.
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
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 ...
Build a set of PointToPointNetDevice objects.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
NetDeviceContainer Install(NodeContainer c)
Class for representing queue sizes.
Definition: queue-size.h:95
AttributeValue implementation for QueueSize.
Hold variables of type string.
Definition: string.h:41
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
Definition: nstime.h:379
Build a set of QueueDisc objects.
QueueDiscContainer Install(NetDeviceContainer c)
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.
Hold an unsigned integer type.
Definition: uinteger.h:44
static void CwndTracer(Ptr< OutputStreamWrapper >stream, uint32_t oldval, uint32_t newval)
static void TraceCwnd(std::string cwndTrFileName)
static void TraceDroppingState(std::string dropStateTrFileName)
static void QueueLengthTracer(Ptr< OutputStreamWrapper >stream, uint32_t oldval, uint32_t newval)
static void EveryDropTracer(Ptr< OutputStreamWrapper >stream, Ptr< const QueueDiscItem > item)
static void DroppingStateTracer(Ptr< OutputStreamWrapper >stream, bool oldVal, bool newVal)
void CreateBulkFlow(AddressValue remoteAddress, Ptr< Node > sender, uint32_t pktSize, float stopTime)
static void SojournTracer(Ptr< OutputStreamWrapper >stream, Time newval)
void CreateOnOffFlow(AddressValue remoteAddress, Ptr< Node > sender, float stopTime)
static void TraceSojourn(std::string sojournTrFileName)
static void TraceEveryDrop(std::string everyDropTrFileName)
static void TraceQueueLength(std::string queueLengthTrFileName)
Time stopTime
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:849
void ConnectWithoutContext(std::string path, const CallbackBase &cb)
Definition: config.cc:901
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:273
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:281
Callback< R > MakeBoundCallback(R(*fnPtr)(TX), ARG a1)
Make Callbacks with one bound argument.
Definition: callback.h:1709
@ PACKETS
Use number of packets for queue size.
Definition: queue-size.h:44
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
Definition: simulator.cc:287
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1244
stack
Definition: first.py:41
nodes
Definition: first.py:32
Every class exported by the ns3 library is enclosed in the ns3 namespace.
@ LOG_LEVEL_FUNCTION
LOG_FUNCTION and above.
Definition: log.h:110
void LogComponentEnable(char const *name, enum LogLevel level)
Enable the logging output associated with that log component.
Definition: log.cc:361
cmd
Definition: second.py:35
uint32_t pktSize
packet size used for the simulation (in bytes)
Definition: wifi-bianchi.cc:89