40 #include "ns3/core-module.h"
41 #include "ns3/network-module.h"
42 #include "ns3/internet-module.h"
43 #include "ns3/flow-monitor-helper.h"
44 #include "ns3/point-to-point-module.h"
45 #include "ns3/applications-module.h"
80 uint32_t qSize = StaticCast<RedQueue> (queue)->GetQueueSize ();
88 std::ofstream fPlotQueue (
filePlotQueue.str ().c_str (), std::ios::out|std::ios::app);
92 std::ofstream fPlotQueueAvg (
filePlotQueueAvg.str ().c_str (), std::ios::out|std::ios::app);
94 fPlotQueueAvg.close ();
100 if ( (test == 1) || (test == 3) )
103 uint16_t
port = 50000;
144 clientApps2.
Start (Seconds (3.0));
151 uint16_t port1 = 50001;
158 uint16_t port2 = 50002;
165 uint16_t port3 = 50003;
172 uint16_t port4 = 50004;
214 clientApps2.
Start (Seconds (2.0));
231 clientApps3.
Start (Seconds (3.5));
248 clientApps4.
Start (Seconds (1.0));
262 std::string redLinkDataRate =
"1.5Mbps";
263 std::string redLinkDelay =
"20ms";
266 bool writeForPlot =
false;
267 bool writePcap =
false;
268 bool flowMonitor =
false;
270 bool printRedStats =
true;
284 cmd.
AddValue (
"testNumber",
"Run test 1, 3, 4 or 5", redTest);
285 cmd.
AddValue (
"pathOut",
"Path to save results from --writeForPlot/--writePcap/--writeFlowMonitor", pathOut);
286 cmd.
AddValue (
"writeForPlot",
"<0/1> to write results for plot (gnuplot)", writeForPlot);
287 cmd.
AddValue (
"writePcap",
"<0/1> to write results in pcapfile", writePcap);
288 cmd.
AddValue (
"writeFlowMonitor",
"<0/1> to enable Flow Monitor and write their results", flowMonitor);
290 cmd.
Parse (argc, argv);
291 if ( (redTest != 1) && (redTest != 3) && (redTest != 4) && (redTest != 5) )
293 NS_ABORT_MSG (
"Invalid test number. Supported tests are 1, 3, 4 or 5");
317 uint32_t meanPktSize = 500;
335 else if (redTest == 5)
344 NS_LOG_INFO (
"Install internet stack on all nodes.");
351 p2p.
SetQueue (
"ns3::DropTailQueue");
356 p2p.
SetQueue (
"ns3::DropTailQueue");
368 p2p.
SetQueue (
"ns3::DropTailQueue");
373 p2p.
SetQueue (
"ns3::DropTailQueue");
381 ipv4.
SetBase (
"10.1.1.0",
"255.255.255.0");
384 ipv4.
SetBase (
"10.1.2.0",
"255.255.255.0");
387 ipv4.
SetBase (
"10.1.3.0",
"255.255.255.0");
390 ipv4.
SetBase (
"10.1.4.0",
"255.255.255.0");
393 ipv4.
SetBase (
"10.1.5.0",
"255.255.255.0");
406 StaticCast<RedQueue> (queue)->SetTh (5, 15);
407 StaticCast<RedQueue> (queue)->SetQueueLimit (25);
415 std::stringstream stmp;
416 stmp << pathOut <<
"/red";
444 std::stringstream stmp;
445 stmp << pathOut <<
"/red.flowmon";
454 std::cout <<
"*** RED stats from Node 2 queue ***" << std::endl;
455 std::cout <<
"\t " << st.unforcedDrop <<
" drops due prob mark" << std::endl;
456 std::cout <<
"\t " << st.forcedDrop <<
" drops due hard mark" << std::endl;
457 std::cout <<
"\t " << st.qLimDrop <<
" drops due queue full" << std::endl;
459 nd = StaticCast<PointToPointNetDevice> (devn2n3.
Get (1));
460 st = StaticCast<RedQueue> (nd->
GetQueue ())->GetStats ();
461 std::cout <<
"*** RED stats from Node 3 queue ***" << std::endl;
462 std::cout <<
"\t " << st.unforcedDrop <<
" drops due prob mark" << std::endl;
463 std::cout <<
"\t " << st.forcedDrop <<
" drops due hard mark" << std::endl;
464 std::cout <<
"\t " << st.qLimDrop <<
" drops due queue full" << std::endl;
holds a vector of ns3::Application pointers.
void BuildAppsTest(uint32_t test)
static Ipv4Address GetAny(void)
smart pointer class similar to boost::intrusive_ptr
Ptr< Queue > GetQueue(void) const
Get a copy of the attached Queue.
NS_LOG_COMPONENT_DEFINE("GrantedTimeWindowMpiInterface")
holds a vector of std::pair of Ptr and interface index.
Ipv4InterfaceContainer i2i3
static void PopulateRoutingTables(void)
Build a routing database and initialize the routing tables of the nodes in the simulation.
hold variables of type string
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
NetDeviceContainer Install(NodeContainer c)
void Add(ApplicationContainer other)
Append the contents of another ApplicationContainer to the end of this container. ...
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.
static void Run(void)
Run the simulation until one of:
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes...
Build a set of PointToPointNetDevice objects.
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Ipv4InterfaceContainer i3i5
a polymophic address class
static void Add(std::string name, Ptr< Object > object)
Add the association between the string "name" and the Ptr
Class for representing data rates.
double GetSeconds(void) const
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 ...
Hold an unsigned integer type.
holds a vector of ns3::NetDevice pointers
Ipv4InterfaceContainer i3i4
Ipv4InterfaceContainer i0i2
void CheckQueueSize(Ptr< Queue > queue)
static void Bind(std::string name, const AttributeValue &value)
Ptr< FlowMonitor > InstallAll()
Enable flow monitoring on all nodes.
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.
static void Destroy(void)
Every event scheduled by the Simulator::insertAtDestroy method is invoked.
void SetDefault(std::string name, const AttributeValue &value)
keep track of a set of node pointers.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
Helper to enable IPv4 flow monitoring on a set of Nodes.
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
Schedule an event to expire Now.
static Time Now(void)
Return the "current simulation time".
std::stringstream filePlotQueue
std::stringstream filePlotQueueAvg
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
Use number of packets for maximum queue size.
#define NS_ABORT_MSG(msg)
Abnormal program termination.
hold objects of type ns3::Address
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...
hold objects of type ns3::DataRate
void AddValue(const std::string &name, const std::string &help, T &value)
Add a program argument, assigning to POD.
static void Stop(void)
If an event invokes this method, it will be the last event scheduled by the Simulator::run method bef...
void SerializeToXmlFile(std::string fileName, bool enableHistograms, bool enableProbes)
Same as SerializeToXmlStream, but writes to a file instead.
Ipv4InterfaceContainer i1i2
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
int main(int argc, char *argv[])
ApplicationContainer Install(NodeContainer c) const
Install an ns3::PacketSinkApplication on each node of the input container configured with all the att...
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.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Hold a floating point type.
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.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
void LogComponentEnable(char const *name, enum LogLevel level)
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const