32#include "ns3/applications-module.h"
33#include "ns3/core-module.h"
34#include "ns3/mobility-module.h"
35#include "ns3/network-module.h"
36#include "ns3/stats-module.h"
37#include "ns3/uan-module.h"
146 double avgThroughput = 0.0;
152 m_data.Add(cw, avgThroughput);
159 NS_LOG_DEBUG(
"Average for cw=" << cw <<
" over " <<
m_avgs <<
" runs: " << avgThroughput);
166 auto it =
nodes.Begin();
168 for (; it !=
nodes.End(); it++)
180 while ((packet = socket->Recv()))
200#ifdef UAN_PROP_BH_INSTALLED
229 minr = std::min(minr, newr);
234 mobility.SetPositionAllocator(pos);
235 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
236 mobility.Install(
sink);
240 mobility.Install(nc);
248 app.SetAttribute(
"OnTime",
StringValue(
"ns3::ConstantRandomVariable[Constant=1]"));
249 app.SetAttribute(
"OffTime",
StringValue(
"ns3::ConstantRandomVariable[Constant=0]"));
274 sinkNode->AggregateObject(psf);
277 sinkSocket->Bind(socket);
283 if (!ascii.is_open())
291 sinkSocket =
nullptr;
301 sink.Get(i) =
nullptr;
304 for (
uint32_t i = 0; i < devices.GetN(); i++)
306 devices.Get(i) =
nullptr;
310 sinkdev.
Get(i) =
nullptr;
321main(
int argc,
char** argv)
326 std::string gnudatfile(
"cwexpgnuout.dat");
327 std::string perModel =
"ns3::UanPhyPerGenDefault";
328 std::string sinrModel =
"ns3::UanPhyCalcSinrDefault";
331 cmd.AddValue(
"NumNodes",
"Number of transmitting nodes", exp.m_numNodes);
332 cmd.AddValue(
"Depth",
"Depth of transmitting and sink nodes", exp.m_depth);
333 cmd.AddValue(
"RegionSize",
"Size of boundary in meters", exp.m_boundary);
334 cmd.AddValue(
"PacketSize",
"Generated packet size in bytes", exp.m_packetSize);
335 cmd.AddValue(
"DataRate",
"DataRate in bps", exp.m_dataRate);
336 cmd.AddValue(
"CwMin",
"Min CW to simulate", exp.m_cwMin);
337 cmd.AddValue(
"CwMax",
"Max CW to simulate", exp.m_cwMax);
338 cmd.AddValue(
"SlotTime",
"Slot time duration", exp.m_slotTime);
339 cmd.AddValue(
"Averages",
"Number of topologies to test for each cw point", exp.m_avgs);
340 cmd.AddValue(
"GnuFile",
"Name for GNU Plot output", exp.m_gnudatfile);
341 cmd.AddValue(
"PerModel",
"PER model name", perModel);
342 cmd.AddValue(
"SinrModel",
"SINR model name", sinrModel);
343 cmd.AddValue(
"Quiet",
"Run in quiet mode (disable logging)", quiet);
344 cmd.Parse(argc, argv);
353 Ptr<UanPhyPer> per = obf.
Create<UanPhyPer>();
355 Ptr<UanPhyCalcSinr> sinr = obf.
Create<UanPhyCalcSinr>();
366 UanModesList myModes;
369 uan.SetPhy(
"ns3::UanPhyGen",
375 UanModesListValue(myModes));
383 std::ofstream of(exp.m_gnudatfile);
386 NS_FATAL_ERROR(
"Can not open GNU Plot outfile: " << exp.m_gnudatfile);
cairo_uint64_t x
_cairo_uint_96by64_32x64_divrem:
uint32_t m_avgs
Number of topologies to test for each cw point.
uint32_t m_cwMax
Max CW to simulate.
uint32_t m_cwStep
CW step size, default 10.
Experiment()
Default constructor.
void UpdatePositions(NodeContainer &nodes) const
Assign new random positions to a set of nodes.
void ReceivePacket(Ptr< Socket > socket)
Receive all available packets from a socket.
uint32_t m_bytesTotal
Total bytes received.
std::string m_gnudatfile
Name for GNU Plot output, default uan-cw-example.gpl.
uint32_t m_packetSize
Generated packet size in bytes.
uint32_t m_dataRate
DataRate in bps.
void IncrementCw(uint32_t cw)
Compute average throughput for a set of runs, then increment CW.
void ResetData()
Save the throughput from a single run.
std::string m_bhCfgFile
(Unused)
Time m_simTime
Simulation run time, default 1000 s.
double m_depth
Depth of transmitting and sink nodes.
std::vector< double > m_throughputs
Throughput for each run.
Gnuplot2dDataset m_data
Container for the simulation data.
uint32_t m_numNodes
Number of transmitting nodes.
std::string m_asciitracefile
Name for ascii trace file, default uan-cw-example.asc.
double m_boundary
Size of boundary in meters.
Gnuplot2dDataset Run(UanHelper &uan)
Run an experiment across a range of congestion window values.
Time m_slotTime
Slot time duration.
uint32_t m_cwMin
Min CW to simulate.
a polymophic address class
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.
void Stop(Time stop) const
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
Parse command-line arguments.
AttributeValue implementation for DataRate.
Class to represent a 2D points plot.
void AddDataset(const GnuplotDataset &dataset)
void GenerateOutput(std::ostream &os)
Writes gnuplot commands and data values to a single output stream.
Helper class used to assign positions and mobility models to nodes.
Keep track of the current position and velocity of an object.
Vector GetPosition() const
holds a vector of ns3::NetDevice pointers
uint32_t GetN() const
Get the number of Ptr<NetDevice> stored in this container.
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.
uint32_t GetN() const
Get the number of Ptr<Node> stored in this container.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
an address for a packet socket
void SetProtocol(uint16_t protocol)
Set the protocol.
void SetPhysicalAddress(const Address address)
Set the destination address.
void SetSingleDevice(uint32_t device)
Set the address to match only a specified NetDevice.
Give ns3::PacketSocket powers to ns3::Node.
void Install(Ptr< Node > node) const
Aggregate an instance of a ns3::PacketSocketFactory onto the provided node.
AttributeValue implementation for Pointer.
Smart pointer class similar to boost::intrusive_ptr.
static void SetRun(uint64_t run)
Set the run number of simulation.
static uint64_t GetRun()
Get the current run number.
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
static void Run()
Run the simulation.
Object to create transport layer instances that provide a socket API to applications.
static Ptr< Socket > CreateSocket(Ptr< Node > node, TypeId tid)
This method wraps the creation of sockets that is performed on a given node by a SocketFactory specif...
Hold variables of type string.
Simulation virtual time values and global simulation resolution.
AttributeValue implementation for Time.
a unique identifier for an interface.
static TypeId LookupByName(std::string name)
Get a TypeId by name.
UAN configuration helper.
void SetMac(std::string type, Ts &&... args)
Set MAC attributes.
NetDeviceContainer Install(NodeContainer c) const
This method creates a simple ns3::UanChannel (with a default ns3::UanNoiseModelDefault and ns3::UanPr...
static void EnableAsciiAll(std::ostream &os)
Enable ascii output on each device which is of the ns3::UanNetDevice type and dump that to the specif...
void AppendMode(UanTxMode mode)
Add mode to this list.
static UanTxMode CreateMode(UanTxMode::ModulationType type, uint32_t dataRateBps, uint32_t phyRateSps, uint32_t cfHz, uint32_t bwHz, uint32_t constSize, std::string name)
@ FSK
Frequency shift keying.
Hold an unsigned integer type.
void ReceivePacket(Ptr< Socket > socket)
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
void Set(std::string path, const AttributeValue &value)
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Ptr< T > CreateObjectWithAttributes(Args... args)
Allocate an Object on the heap and initialize with a set of attributes.
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.
void LogComponentEnable(const std::string &name, LogLevel level)
Enable the logging output associated with that log component.
@ LOG_LEVEL_ALL
Print everything.
Ptr< PacketSink > sink
Pointer to the packet sink application.