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, uint32_t> 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)
196 totalEnergy += actualPower[dest] * GetCalcTxTime (actualMode[dest]).GetSeconds ();
197 totalTime += GetCalcTxTime (actualMode[dest]).GetSeconds ();
204 double txPowerBaseDbm = myPhy->GetTxPowerStart ();
205 double txPowerEndDbm = myPhy->GetTxPowerEnd ();
206 uint32_t nTxPower = myPhy->GetNTxPower ();
210 dbm = txPowerBaseDbm + power * (txPowerEndDbm - txPowerBaseDbm) / (nTxPower - 1);
214 NS_ASSERT_MSG (txPowerBaseDbm == txPowerEndDbm,
"cannot have TxPowerEnd != TxPowerStart with TxPowerLevels == 1");
215 dbm = txPowerBaseDbm;
217 actualPower[dest] = dbm;
223 actualMode[dest] = myPhy->GetMode (rate);
254 m_bytesTotal += packet->
GetSize ();
260 double mbs = ((m_bytesTotal * 8.0) / (1000000 * time));
262 double atm = pow (10, ((totalEnergy / time) / 10));
268 m_output_idle.Add ((
Simulator::Now ()).GetSeconds (), idleTime * 100);
269 m_output_busy.Add ((
Simulator::Now ()).GetSeconds (), busyTime * 100);
270 m_output_tx.Add ((
Simulator::Now ()).GetSeconds (), txTime * 100);
271 m_output_rx.Add ((
Simulator::Now ()).GetSeconds (), rxTime * 100);
289 return m_output_power;
295 return m_output_idle;
301 return m_output_busy;
319 return totalBusyTime + totalRxTime;
334 int main (
int argc,
char *argv[])
338 double maxPower = 17;
340 uint32_t powerLevels = 18;
342 uint32_t rtsThreshold = 2346;
343 std::string manager =
"ns3::ParfWifiManager";
344 std::string outputFileName =
"parf";
353 uint32_t simuTime = 100;
356 cmd.
AddValue (
"manager",
"PRC Manager", manager);
357 cmd.
AddValue (
"rtsThreshold",
"RTS threshold", rtsThreshold);
358 cmd.
AddValue (
"outputFileName",
"Output filename", outputFileName);
359 cmd.
AddValue (
"simuTime",
"Total simulation time (sec)", simuTime);
360 cmd.
AddValue (
"maxPower",
"Maximum available transmission level (dbm).", maxPower);
361 cmd.
AddValue (
"minPower",
"Minimum available transmission level (dbm).", minPower);
362 cmd.
AddValue (
"powerLevels",
"Number of transmission power levels available between "
363 "TxPowerStart and TxPowerEnd included.", powerLevels);
364 cmd.
AddValue (
"AP1_x",
"Position of AP1 in x coordinate", ap1_x);
365 cmd.
AddValue (
"AP1_y",
"Position of AP1 in y coordinate", ap1_y);
366 cmd.
AddValue (
"STA1_x",
"Position of STA1 in x coordinate", sta1_x);
367 cmd.
AddValue (
"STA1_y",
"Position of STA1 in y coordinate", sta1_y);
368 cmd.
AddValue (
"AP2_x",
"Position of AP2 in x coordinate", ap2_x);
369 cmd.
AddValue (
"AP2_y",
"Position of AP2 in y coordinate", ap2_y);
370 cmd.
AddValue (
"STA2_x",
"Position of STA2 in x coordinate", sta2_x);
371 cmd.
AddValue (
"STA2_y",
"Position of STA2 in y coordinate", sta2_y);
372 cmd.
Parse (argc, argv);
401 wifiMac.
SetType (
"ns3::StaWifiMac",
405 wifiStaDevices.
Add (wifi.
Install (wifiPhy, wifiMac, wifiStaNodes.
Get (0)));
408 wifiMac.
SetType (
"ns3::StaWifiMac",
411 wifiStaDevices.
Add (wifi.
Install (wifiPhy, wifiMac, wifiStaNodes.
Get (1)));
420 wifiMac.
SetType (
"ns3::ApWifiMac",
422 wifiApDevices.
Add (wifi.
Install (wifiPhy, wifiMac, wifiApNodes.
Get (0)));
425 wifiMac.
SetType (
"ns3::ApWifiMac",
428 wifiApDevices.
Add (wifi.
Install (wifiPhy, wifiMac, wifiApNodes.
Get (1)));
430 wifiDevices.
Add (wifiStaDevices);
431 wifiDevices.
Add (wifiApDevices);
436 positionAlloc->
Add (Vector (ap1_x, ap1_y, 0.0));
437 positionAlloc->
Add (Vector (sta1_x, sta1_y, 0.0));
438 positionAlloc->
Add (Vector (ap2_x, ap2_y, 0.0));
439 positionAlloc->
Add (Vector (sta2_x, sta2_y, 0.0));
453 address.
SetBase (
"10.1.1.0",
"255.255.255.0");
470 apps_sink.
Add (sink1.Install (wifiStaNodes.
Get (1)));
476 apps_source.
Add (onoff1.Install (wifiApNodes.
Get (1)));
496 Config::Connect (
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/PowerChange",
498 Config::Connect (
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/RateChange",
500 Config::Connect (
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/PowerChange",
502 Config::Connect (
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/RateChange",
505 Config::Connect (
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyTxBegin",
507 Config::Connect (
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyTxBegin",
511 Config::Connect (
"/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/State/State",
513 Config::Connect (
"/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/State/State",
520 Config::Connect (
"/NodeList/[0-1]/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/PowerChange",
522 Config::Connect (
"/NodeList/[0-1]/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager +
"/RateChange",
536 std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->
GetFlowStats ();
537 for (std::map<FlowId, FlowMonitor::FlowStats>::const_iterator i = stats.begin (); i != stats.end (); ++i)
543 NS_LOG_INFO (
" Tx Bytes: " << i->second.txBytes <<
"\n");
544 NS_LOG_INFO (
" Rx Bytes: " << i->second.rxBytes <<
"\n");
545 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");
546 NS_LOG_INFO (
" Mean delay: " << i->second.delaySum.GetSeconds () / i->second.rxPackets <<
"\n");
547 NS_LOG_INFO (
" Mean jitter: " << i->second.jitterSum.GetSeconds () / (i->second.rxPackets - 1) <<
"\n");
553 NS_LOG_INFO (
" Tx Bytes: " << i->second.txBytes <<
"\n");
554 NS_LOG_INFO (
" Rx Bytes: " << i->second.rxBytes <<
"\n");
555 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");
556 NS_LOG_INFO (
" Mean delay: " << i->second.delaySum.GetSeconds () / i->second.rxPackets <<
"\n");
557 NS_LOG_INFO (
" Mean jitter: " << i->second.jitterSum.GetSeconds () / (i->second.rxPackets - 1) <<
"\n");
563 std::ofstream outfileTh0 ((
"throughput-" + outputFileName +
"-0.plt").c_str ());
564 Gnuplot gnuplot =
Gnuplot ((
"throughput-" + outputFileName +
"-0.eps").c_str (),
"Throughput");
566 gnuplot.
SetLegend (
"Time (seconds)",
"Throughput (Mb/s)");
567 gnuplot.
SetTitle (
"Throughput (AP0 to STA) vs time");
571 if (manager.compare (
"ns3::ParfWifiManager") == 0 ||
572 manager.compare (
"ns3::AparfWifiManager") == 0)
574 std::ofstream outfilePower0 ((
"power-" + outputFileName +
"-0.plt").c_str ());
575 gnuplot =
Gnuplot ((
"power-" + outputFileName +
"-0.eps").c_str (),
"Average Transmit Power");
577 gnuplot.
SetLegend (
"Time (seconds)",
"Power (mW)");
578 gnuplot.
SetTitle (
"Average transmit power (AP0 to STA) vs time");
583 std::ofstream outfileTx0 ((
"tx-" + outputFileName +
"-0.plt").c_str ());
584 gnuplot =
Gnuplot ((
"tx-" + outputFileName +
"-0.eps").c_str (),
"Time in TX State");
586 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
587 gnuplot.
SetTitle (
"Percentage time AP0 in TX state vs time");
591 std::ofstream outfileRx0 ((
"rx-" + outputFileName +
"-0.plt").c_str ());
592 gnuplot =
Gnuplot ((
"rx-" + outputFileName +
"-0.eps").c_str (),
"Time in RX State");
594 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
595 gnuplot.
SetTitle (
"Percentage time AP0 in RX state vs time");
599 std::ofstream outfileBusy0 ((
"busy-" + outputFileName +
"-0.plt").c_str ());
600 gnuplot =
Gnuplot ((
"busy-" + outputFileName +
"-0.eps").c_str (),
"Time in Busy State");
602 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
603 gnuplot.
SetTitle (
"Percentage time AP0 in Busy state vs time");
607 std::ofstream outfileIdle0 ((
"idle-" + outputFileName +
"-0.plt").c_str ());
608 gnuplot =
Gnuplot ((
"idle-" + outputFileName +
"-0.eps").c_str (),
"Time in Idle State");
610 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
611 gnuplot.
SetTitle (
"Percentage time AP0 in Idle state vs time");
616 std::ofstream outfileTh1 ((
"throughput-" + outputFileName +
"-1.plt").c_str ());
617 gnuplot =
Gnuplot ((
"throughput-" + outputFileName +
"-1.eps").c_str (),
"Throughput");
619 gnuplot.
SetLegend (
"Time (seconds)",
"Throughput (Mb/s)");
620 gnuplot.
SetTitle (
"Throughput (AP1 to STA) vs time");
624 if (manager.compare (
"ns3::ParfWifiManager") == 0 ||
625 manager.compare (
"ns3::AparfWifiManager") == 0)
627 std::ofstream outfilePower1 ((
"power-" + outputFileName +
"-1.plt").c_str ());
628 gnuplot =
Gnuplot ((
"power-" + outputFileName +
"-1.eps").c_str (),
"Average Transmit Power");
630 gnuplot.
SetLegend (
"Time (seconds)",
"Power (mW)");
631 gnuplot.
SetTitle (
"Average transmit power (AP1 to STA) vs time");
636 std::ofstream outfileTx1 ((
"tx-" + outputFileName +
"-1.plt").c_str ());
637 gnuplot =
Gnuplot ((
"tx-" + outputFileName +
"-1.eps").c_str (),
"Time in TX State");
639 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
640 gnuplot.
SetTitle (
"Percentage time AP1 in TX state vs time");
644 std::ofstream outfileRx1 ((
"rx-" + outputFileName +
"-1.plt").c_str ());
645 gnuplot =
Gnuplot ((
"rx-" + outputFileName +
"-1.eps").c_str (),
"Time in RX State");
647 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
648 gnuplot.
SetTitle (
"Percentage time AP1 in RX state vs time");
652 std::ofstream outfileBusy1 ((
"busy-" + outputFileName +
"-1.plt").c_str ());
653 gnuplot =
Gnuplot ((
"busy-" + outputFileName +
"-1.eps").c_str (),
"Time in Busy State");
655 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
656 gnuplot.
SetTitle (
"Percentage time AP1 in Busy state vs time");
660 std::ofstream outfileIdle1 ((
"idle-" + outputFileName +
"-1.plt").c_str ());
661 gnuplot =
Gnuplot ((
"idle-" + outputFileName +
"-1.eps").c_str (),
"Time in Idle State");
663 gnuplot.
SetLegend (
"Time (seconds)",
"Percent");
664 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.
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
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.
Gnuplot2dDataset GetRxDatafile()
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.
Time CalculateTxDuration(uint32_t size, WifiTxVector txvector, enum WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag)
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)