20#include "ns3/applications-module.h"
21#include "ns3/core-module.h"
22#include "ns3/internet-module.h"
23#include "ns3/network-module.h"
24#include "ns3/point-to-point-layout-module.h"
25#include "ns3/point-to-point-module.h"
26#include "ns3/traffic-control-module.h"
35main(
int argc,
char* argv[])
40 uint32_t queueDiscLimitPackets = 1000;
44 std::string appDataRate =
"10Mbps";
45 std::string queueDiscType =
"PfifoFast";
47 std::string bottleNeckLinkBw =
"1Mbps";
48 std::string bottleNeckLinkDelay =
"50ms";
51 cmd.AddValue(
"nLeaf",
"Number of left and right side leaf nodes", nLeaf);
52 cmd.AddValue(
"maxPackets",
"Max Packets allowed in the device queue", maxPackets);
53 cmd.AddValue(
"queueDiscLimitPackets",
54 "Max Packets allowed in the queue disc",
55 queueDiscLimitPackets);
56 cmd.AddValue(
"queueDiscType",
"Set QueueDisc type to PfifoFast or RED", queueDiscType);
57 cmd.AddValue(
"appPktSize",
"Set OnOff App Packet Size",
pktSize);
58 cmd.AddValue(
"appDataRate",
"Set OnOff App DataRate", appDataRate);
59 cmd.AddValue(
"modeBytes",
"Set QueueDisc mode to Packets <0> or bytes <1>", modeBytes);
61 cmd.AddValue(
"redMinTh",
"RED queue minimum threshold", minTh);
62 cmd.AddValue(
"redMaxTh",
"RED queue maximum threshold", maxTh);
63 cmd.Parse(argc, argv);
65 if ((queueDiscType !=
"RED") && (queueDiscType !=
"PfifoFast"))
68 "Invalid queue disc type: Use --queueDiscType=RED or --queueDiscType=PfifoFast");
80 "ns3::RedQueueDisc::MaxSize",
83 "ns3::PfifoFastQueueDisc::MaxSize",
89 "ns3::RedQueueDisc::MaxSize",
113 for (
uint32_t i = 0; i < d.LeftCount(); ++i)
115 stack.Install(d.GetLeft(i));
117 for (
uint32_t i = 0; i < d.RightCount(); ++i)
119 stack.Install(d.GetRight(i));
122 if (queueDiscType ==
"PfifoFast")
124 stack.Install(d.GetLeft());
125 stack.Install(d.GetRight());
127 else if (queueDiscType ==
"RED")
129 stack.Install(d.GetLeft());
130 stack.Install(d.GetRight());
133 tchBottleneck.
Install(d.GetLeft()->GetDevice(0));
134 tchBottleneck.
Install(d.GetRight()->GetDevice(0));
144 clientHelper.SetAttribute(
"OnTime",
StringValue(
"ns3::UniformRandomVariable[Min=0.|Max=1.]"));
145 clientHelper.SetAttribute(
"OffTime",
StringValue(
"ns3::UniformRandomVariable[Min=0.|Max=1.]"));
147 PacketSinkHelper packetSinkHelper(
"ns3::TcpSocketFactory", sinkLocalAddress);
149 for (
uint32_t i = 0; i < d.LeftCount(); ++i)
151 sinkApps.
Add(packetSinkHelper.Install(d.GetLeft(i)));
157 for (
uint32_t i = 0; i < d.RightCount(); ++i)
161 clientHelper.SetAttribute(
"Remote", remoteAddress);
162 clientApps.Add(clientHelper.Install(d.GetRight(i)));
167 Ipv4GlobalRoutingHelper::PopulateRoutingTables();
169 std::cout <<
"Running the simulation" << std::endl;
172 uint64_t totalRxBytesCounter = 0;
179 NS_LOG_UNCOND(
"----------------------------\nQueueDisc Type:"
181 <<
"\nGoodput Bytes/sec:" << totalRxBytesCounter /
Simulator::Now().GetSeconds());
184 std::cout <<
"Destroying the simulation" << std::endl;
185 Simulator::Destroy();
a polymophic address class
AttributeValue implementation for Address.
holds a vector of ns3::Application pointers.
void Start(Time start) const
Start all of the Applications in this container at the start time given as a parameter.
Ptr< Application > Get(uint32_t i) const
Get the Ptr<Application> stored in this container at a given index.
void Stop(Time stop) const
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
uint32_t GetN() const
Get the number of Ptr<Application> stored in this container.
void Add(ApplicationContainer other)
Append the contents of another ApplicationContainer to the end of this container.
Parse command-line arguments.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
uint64_t GetTotalRx() const
A helper to make it easier to create a dumbbell topology with p2p links.
Build a set of PointToPointNetDevice objects.
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
Class for representing queue sizes.
AttributeValue implementation for QueueSize.
Hold variables of type string.
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.
void SetDefault(std::string name, const AttributeValue &value)
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
#define NS_LOG_UNCOND(msg)
Output the requested message unconditionally.
@ BYTES
Use number of bytes for queue size.
@ PACKETS
Use number of packets for queue size.
Time Now()
create an ns3::Time instance which contains the current simulation time.
Time Seconds(double value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint32_t pktSize
packet size used for the simulation (in bytes)