61 #include "ns3/core-module.h"
62 #include "ns3/network-module.h"
63 #include "ns3/internet-module.h"
64 #include "ns3/mobility-module.h"
65 #include "ns3/wifi-module.h"
66 #include "ns3/applications-module.h"
67 #include "ns3/stats-module.h"
68 #include "ns3/flow-monitor-module.h"
83 void CheckStatistics (
double time);
98 double GetBusyTime ();
101 typedef std::vector<std::pair<Time,WifiMode> >
TxTime;
105 std::map<Mac48Address, double> actualPower;
106 std::map<Mac48Address, WifiMode> actualMode;
107 uint32_t m_bytesTotal;
135 for (uint32_t j = 0; j < stas.
GetN (); j++)
140 actualPower[addr] = 17;
141 actualMode[addr] = phy->GetMode (0);
143 actualMode[
Mac48Address (
"ff:ff:ff:ff:ff:ff")] = phy->GetMode (0);
155 m_output.SetTitle (
"Throughput Mbits/s");
156 m_output_idle.SetTitle (
"Idle Time");
157 m_output_busy.SetTitle (
"Busy Time");
158 m_output_rx.SetTitle (
"RX Time");
159 m_output_tx.SetTitle (
"TX Time");
166 for (uint32_t i = 0; i < nModes; i++)
178 for (TxTime::const_iterator i = timeTable.begin (); i != timeTable.end (); i++)
180 if (mode == i->second)
198 totalEnergy += pow (10.0, actualPower[dest] / 10.0) * GetCalcTxTime (actualMode[dest]).GetSeconds ();
199 totalTime += GetCalcTxTime (actualMode[dest]).GetSeconds ();
206 double txPowerBaseDbm = myPhy->GetTxPowerStart ();
207 double txPowerEndDbm = myPhy->GetTxPowerEnd ();
208 uint32_t nTxPower = myPhy->GetNTxPower ();
212 dbm = txPowerBaseDbm + power * (txPowerEndDbm - txPowerBaseDbm) / (nTxPower - 1);
216 NS_ASSERT_MSG (txPowerBaseDbm == txPowerEndDbm,
"cannot have TxPowerEnd != TxPowerStart with TxPowerLevels == 1");
217 dbm = txPowerBaseDbm;
219 actualPower[dest] = dbm;
225 actualMode[dest] = myPhy->GetMode (rate);
256 m_bytesTotal += packet->
GetSize ();
262 double mbs = ((m_bytesTotal * 8.0) / (1000000 * time));
264 double atp = totalEnergy / time;
270 m_output_idle.Add ((
Simulator::Now ()).GetSeconds (), idleTime * 100);
271 m_output_busy.Add ((
Simulator::Now ()).GetSeconds (), busyTime * 100);
272 m_output_tx.Add ((
Simulator::Now ()).GetSeconds (), txTime * 100);
273 m_output_rx.Add ((
Simulator::Now ()).GetSeconds (), rxTime * 100);
291 return m_output_power;
297 return m_output_idle;
303 return m_output_busy;
321 return totalBusyTime + totalRxTime;
336 int main (
int argc,
char *argv[])
340 double maxPower = 17;
342 uint32_t powerLevels = 18;
344 uint32_t rtsThreshold = 2346;
345 std::string manager =
"ns3::ParfWifiManager";
346 std::string outputFileName =
"parf";
355 uint32_t simuTime = 100;
358 cmd.
AddValue (
"manager",
"PRC Manager", manager);
359 cmd.
AddValue (
"rtsThreshold",
"RTS threshold", rtsThreshold);
360 cmd.
AddValue (
"outputFileName",
"Output filename", outputFileName);
361 cmd.
AddValue (
"simuTime",
"Total simulation time (sec)", simuTime);
362 cmd.
AddValue (
"maxPower",
"Maximum available transmission level (dbm).", maxPower);
363 cmd.
AddValue (
"minPower",
"Minimum available transmission level (dbm).", minPower);
364 cmd.
AddValue (
"powerLevels",
"Number of transmission power levels available between "
365 "TxPowerStart and TxPowerEnd included.", powerLevels);
366 cmd.
AddValue (
"AP1_x",
"Position of AP1 in x coordinate", ap1_x);
367 cmd.
AddValue (
"AP1_y",
"Position of AP1 in y coordinate", ap1_y);
368 cmd.
AddValue (
"STA1_x",
"Position of STA1 in x coordinate", sta1_x);
369 cmd.
AddValue (
"STA1_y",
"Position of STA1 in y coordinate", sta1_y);
370 cmd.
AddValue (
"AP2_x",
"Position of AP2 in x coordinate", ap2_x);
371 cmd.
AddValue (
"AP2_y",
"Position of AP2 in y coordinate", ap2_y);
372 cmd.
AddValue (
"STA2_x",
"Position of STA2 in x coordinate", sta2_x);
373 cmd.
AddValue (
"STA2_y",
"Position of STA2 in y coordinate", sta2_y);
374 cmd.
Parse (argc, argv);
403 wifiMac.
SetType (
"ns3::StaWifiMac",
407 wifiStaDevices.
Add (wifi.
Install (wifiPhy, wifiMac, wifiStaNodes.
Get (0)));
410 wifiMac.
SetType (
"ns3::StaWifiMac",
413 wifiStaDevices.
Add (wifi.
Install (wifiPhy, wifiMac, wifiStaNodes.
Get (1)));
422 wifiMac.
SetType (
"ns3::ApWifiMac",
424 wifiApDevices.
Add (wifi.
Install (wifiPhy, wifiMac, wifiApNodes.
Get (0)));
427 wifiMac.
SetType (
"ns3::ApWifiMac",
430 wifiApDevices.
Add (wifi.
Install (wifiPhy, wifiMac, wifiApNodes.
Get (1)));
432 wifiDevices.
Add (wifiStaDevices);
433 wifiDevices.
Add (wifiApDevices);
438 positionAlloc->
Add (Vector (ap1_x, ap1_y, 0.0));
439 positionAlloc->
Add (Vector (sta1_x, sta1_y, 0.0));
440 positionAlloc->
Add (Vector (ap2_x, ap2_y, 0.0));
441 positionAlloc->
Add (Vector (sta2_x, sta2_y, 0.0));
455 address.
SetBase (
"10.1.1.0",
"255.255.255.0");
472 apps_sink.
Add (sink1.Install (wifiStaNodes.
Get (1)));
478 apps_source.
Add (onoff1.Install (wifiApNodes.
Get (1)));
498 Config::Connect (
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/PowerChange",
500 Config::Connect (
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/RateChange",
502 Config::Connect (
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/PowerChange",
504 Config::Connect (
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/RateChange",
507 Config::Connect (
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyTxBegin",
509 Config::Connect (
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyTxBegin",
513 Config::Connect (
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/State/State",
515 Config::Connect (
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/State/State",
522 Config::Connect (
"/NodeList/[0-1]/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/PowerChange",
524 Config::Connect (
"/NodeList/[0-1]/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/RateChange",
538 std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->
GetFlowStats ();
539 for (std::map<FlowId, FlowMonitor::FlowStats>::const_iterator i = stats.begin (); i != stats.end (); ++i)
545 NS_LOG_INFO (
" Tx Bytes: " << i->second.txBytes <<
"\n");
546 NS_LOG_INFO (
" Rx Bytes: " << i->second.rxBytes <<
"\n");
547 NS_LOG_UNCOND (
" Throughput to 10.1.1.1: " << i->second.rxBytes * 8.0 / (i->second.timeLastRxPacket.GetSeconds () - i->second.timeFirstTxPacket.GetSeconds ()) / 1024 / 1024 <<
" Mbps\n");
548 NS_LOG_INFO (
" Mean delay: " << i->second.delaySum.GetSeconds () / i->second.rxPackets <<
"\n");
549 NS_LOG_INFO (
" Mean jitter: " << i->second.jitterSum.GetSeconds () / (i->second.rxPackets - 1) <<
"\n");
555 NS_LOG_INFO (
" Tx Bytes: " << i->second.txBytes <<
"\n");
556 NS_LOG_INFO (
" Rx Bytes: " << i->second.rxBytes <<
"\n");
557 NS_LOG_UNCOND (
" Throughput to 10.1.1.2: " << i->second.rxBytes * 8.0 / (i->second.timeLastRxPacket.GetSeconds () - i->second.timeFirstTxPacket.GetSeconds ()) / 1024 / 1024 <<
" Mbps\n");
558 NS_LOG_INFO (
" Mean delay: " << i->second.delaySum.GetSeconds () / i->second.rxPackets <<
"\n");
559 NS_LOG_INFO (
" Mean jitter: " << i->second.jitterSum.GetSeconds () / (i->second.rxPackets - 1) <<
"\n");
565 std::ofstream outfileTh0 ((
"throughput-" + outputFileName +
"-0.plt").c_str ());
566 Gnuplot gnuplot =
Gnuplot ((
"throughput-" + outputFileName +
"-0.eps").c_str (),
"Throughput");
568 gnuplot.
SetLegend (
"Time (seconds)",
"Throughput (Mb/s)");
569 gnuplot.
SetTitle (
"Throughput (AP0 to STA) vs time");
573 if (manager.compare (
"ns3::ParfWifiManager") == 0 ||
574 manager.compare (
"ns3::AparfWifiManager") == 0)
576 std::ofstream outfilePower0 ((
"power-" + outputFileName +
"-0.plt").c_str ());
577 gnuplot =
Gnuplot ((
"power-" + outputFileName +
"-0.eps").c_str (),
"Average Transmit Power");
579 gnuplot.
SetLegend (
"Time (seconds)",
"Power (mW)");
580 gnuplot.
SetTitle (
"Average transmit power (AP0 to STA) vs time");
585 std::ofstream outfileTx0 ((
"tx-" + outputFileName +
"-0.plt").c_str ());
586 gnuplot =
Gnuplot ((
"tx-" + outputFileName +
"-0.eps").c_str (),
"Time in TX State");
588 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
589 gnuplot.
SetTitle (
"Percentage time AP0 in TX state vs time");
593 std::ofstream outfileRx0 ((
"rx-" + outputFileName +
"-0.plt").c_str ());
594 gnuplot =
Gnuplot ((
"rx-" + outputFileName +
"-0.eps").c_str (),
"Time in RX State");
596 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
597 gnuplot.
SetTitle (
"Percentage time AP0 in RX state vs time");
601 std::ofstream outfileBusy0 ((
"busy-" + outputFileName +
"-0.plt").c_str ());
602 gnuplot =
Gnuplot ((
"busy-" + outputFileName +
"-0.eps").c_str (),
"Time in Busy State");
604 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
605 gnuplot.
SetTitle (
"Percentage time AP0 in Busy state vs time");
609 std::ofstream outfileIdle0 ((
"idle-" + outputFileName +
"-0.plt").c_str ());
610 gnuplot =
Gnuplot ((
"idle-" + outputFileName +
"-0.eps").c_str (),
"Time in Idle State");
612 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
613 gnuplot.
SetTitle (
"Percentage time AP0 in Idle state vs time");
618 std::ofstream outfileTh1 ((
"throughput-" + outputFileName +
"-1.plt").c_str ());
619 gnuplot =
Gnuplot ((
"throughput-" + outputFileName +
"-1.eps").c_str (),
"Throughput");
621 gnuplot.
SetLegend (
"Time (seconds)",
"Throughput (Mb/s)");
622 gnuplot.
SetTitle (
"Throughput (AP1 to STA) vs time");
626 if (manager.compare (
"ns3::ParfWifiManager") == 0 ||
627 manager.compare (
"ns3::AparfWifiManager") == 0)
629 std::ofstream outfilePower1 ((
"power-" + outputFileName +
"-1.plt").c_str ());
630 gnuplot =
Gnuplot ((
"power-" + outputFileName +
"-1.eps").c_str (),
"Average Transmit Power");
632 gnuplot.
SetLegend (
"Time (seconds)",
"Power (mW)");
633 gnuplot.
SetTitle (
"Average transmit power (AP1 to STA) vs time");
638 std::ofstream outfileTx1 ((
"tx-" + outputFileName +
"-1.plt").c_str ());
639 gnuplot =
Gnuplot ((
"tx-" + outputFileName +
"-1.eps").c_str (),
"Time in TX State");
641 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
642 gnuplot.
SetTitle (
"Percentage time AP1 in TX state vs time");
646 std::ofstream outfileRx1 ((
"rx-" + outputFileName +
"-1.plt").c_str ());
647 gnuplot =
Gnuplot ((
"rx-" + outputFileName +
"-1.eps").c_str (),
"Time in RX State");
649 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
650 gnuplot.
SetTitle (
"Percentage time AP1 in RX state vs time");
654 std::ofstream outfileBusy1 ((
"busy-" + outputFileName +
"-1.plt").c_str ());
655 gnuplot =
Gnuplot ((
"busy-" + outputFileName +
"-1.eps").c_str (),
"Time in Busy State");
657 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
658 gnuplot.
SetTitle (
"Percentage time AP1 in Busy state vs time");
662 std::ofstream outfileIdle1 ((
"idle-" + outputFileName +
"-1.plt").c_str ());
663 gnuplot =
Gnuplot ((
"idle-" + outputFileName +
"-1.eps").c_str (),
"Time in Idle State");
665 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
666 gnuplot.
SetTitle (
"Percentage time AP1 in Idle state vs time");
Gnuplot2dDataset m_output_idle
holds a vector of ns3::Application pointers.
virtual uint32_t GetFrequency(void) const =0
void SetupPhy(Ptr< WifiPhy > phy)
Simulation virtual time values and global simulation resolution.
const FlowStatsContainer & GetFlowStats() const
Retrieve all collected the flow statistics.
Gnuplot2dDataset m_output_busy
Gnuplot2dDataset m_output_tx
AttributeValue implementation for Boolean.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
Class to represent a 2D points plot.
holds a vector of std::pair of Ptr and interface index.
Ptr< YansWifiChannel > Create(void) const
void SetRemoteStationManager(std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), 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(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
Make it easy to create and manage PHY objects for the yans model.
static YansWifiChannelHelper Default(void)
Create a channel helper in a default working state.
void Add(ApplicationContainer other)
Append the contents of another ApplicationContainer to the end of this container. ...
virtual uint32_t GetNModes(void) const =0
The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used (e.g., by a WifiRemoteStationManager...
The PHY layer has sense the medium busy through the CCA mechanism.
Ipv4Address destinationAddress
Destination address.
virtual void SetType(std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), 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(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
static void Run(void)
Run the simulation.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
aggregate IP/TCP/UDP functionality to existing Nodes.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
void AddDataset(const GnuplotDataset &dataset)
void RateCallback(std::string path, uint32_t rate, Mac48Address dest)
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes...
void Set(std::string name, const AttributeValue &v)
static YansWifiPhyHelper Default(void)
Create a phy helper in a default working state.
Time CalculateTxDuration(uint32_t size, WifiTxVector txVector, enum WifiPreamble preamble, double frequency, enum mpduType mpdutype, uint8_t incFlag)
helps to create WifiNetDevice objects
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Gnuplot2dDataset GetPowerDatafile()
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer c) const
a polymophic address class
Gnuplot2dDataset GetDatafile()
void RxCallback(std::string path, Ptr< const Packet > packet, const Address &from)
uint32_t GetN(void) const
Get the number of Ptr stored in this container.
Class for representing data rates.
void SetChannel(Ptr< YansWifiChannel > channel)
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
Ptr< WifiPhy > GetPhy(void) const
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
The MPDU is not part of an A-MPDU.
Gnuplot2dDataset GetRxDatafile()
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay.
a simple class to generate gnuplot-ready plotting commands from a set of datasets.
AttributeValue implementation for Time.
void SetTitle(const std::string &title)
FiveTuple FindFlow(FlowId flowId) const
Searches for the FiveTuple corresponding to the given flowId.
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
Hold an unsigned integer type.
holds a vector of ns3::NetDevice pointers
virtual void SetStandard(enum WifiPhyStandard standard)
static const uint32_t packetSize
The PHY layer is receiving a packet.
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
void GenerateOutput(std::ostream &os)
Writes gnuplot commands and data values to a single output stream.
void StateCallback(std::string path, Time init, Time duration, enum WifiPhy::State state)
Time GetCalcTxTime(WifiMode mode)
static NqosWifiMacHelper Default(void)
Create a mac helper in a default working state.
The PHY layer is sending a packet.
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...
create non QoS-enabled MAC layers for a ns3::WifiNetDevice.
void PowerCallback(std::string path, uint8_t power, Mac48Address dest)
Parse command-line arguments.
void RateCallback(std::string path, uint32_t rate, Mac48Address dest)
void Connect(std::string path, const CallbackBase &cb)
void SetLegend(const std::string &xLegend, const std::string &yLegend)
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
uint32_t PeekHeader(Header &header) const
Deserialize but does not remove the header from the internal buffer.
Ptr< FlowClassifier > GetClassifier()
Retrieve the FlowClassifier object for IPv4 created by the Install* methods.
OFDM PHY for the 5 GHz band (Clause 17)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
void SetMobilityModel(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(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue())
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
#define NS_LOG_UNCOND(msg)
Output the requested message unconditionaly.
Helper to enable IP flow monitoring on a set of Nodes.
virtual WifiMode GetMode(uint32_t mode) const =0
The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used (e.g., by a WifiRemoteStationManager...
manage and create wifi channel objects for the yans model.
Structure to classify a packet.
static Time Now(void)
Return the current simulation virtual time.
Gnuplot2dDataset GetIdleDatafile()
The IEEE 802.11 SSID Information Element.
void PowerCallback(std::string path, uint8_t power, Mac48Address dest)
void SetMode(WifiMode mode)
Sets the selected payload transmission mode.
void PhyCallback(std::string path, Ptr< const Packet > packet)
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Gnuplot2dDataset m_output_rx
Helper class used to assign positions and mobility models to nodes.
Ipv4 addresses are stored in host order in this class.
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...
Gnuplot2dDataset GetBusyDatafile()
void AddValue(const std::string &name, const std::string &help, T &value)
Add a program argument, assigning to POD.
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
std::vector< std::pair< Time, WifiMode > > TxTime
Time Seconds(double value)
Construct a Time in the indicated unit.
AttributeValue implementation for Ssid.
void Add(Vector v)
Add a position to the list of positions.
NodeStatistics(NetDeviceContainer aps, NetDeviceContainer stas)
Ptr< WifiMac > GetMac(void) const
void CheckStatistics(double time)
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.
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void SetPositionAllocator(Ptr< PositionAllocator > allocator)
Set the position allocator which will be used to allocate the initial position of every node initiali...
State
The state of the PHY layer.
void SetTerminal(const std::string &terminal)
This class can be used to hold variables of floating point type such as 'double' or 'float'...
Gnuplot2dDataset GetTxDatafile()
Ipv4Address sourceAddress
Source address.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
static WifiHelper Default(void)