21 #include "ns3/core-module.h"
22 #include "ns3/applications-module.h"
23 #include "ns3/wifi-module.h"
24 #include "ns3/mobility-module.h"
25 #include "ns3/internet-module.h"
45 if (version ==
"80211a")
49 else if (version ==
"80211b")
53 else if (version ==
"80211g")
57 else if (version ==
"80211_10MHZ")
61 else if (version ==
"80211_5MHZ")
65 else if (version ==
"holland")
69 else if (version ==
"80211n_2_4GHZ")
73 else if (version ==
"80211n_5GHZ")
77 else if (version ==
"80211ac")
88 int main (
int argc,
char *argv[])
90 uint32_t payloadSize = 1472;
91 double simulationTime = 10;
92 std::string apVersion =
"80211a";
93 std::string staVersion =
"80211n_5GHZ";
94 std::string apRaa =
"Minstrel";
95 std::string staRaa =
"MinstrelHt";
96 bool apHasTraffic =
false;
97 bool staHasTraffic =
true;
100 cmd.
AddValue (
"simulationTime",
"Simulation time in seconds", simulationTime);
101 cmd.
AddValue (
"apVersion",
"The standard version used by the AP: 80211a, 80211b, 80211g, 80211_10MHZ, 80211_5MHZ, holland, 80211n_2_4GHZ, 80211n_5GHZ or 80211ac", apVersion);
102 cmd.
AddValue (
"staVersion",
"The standard version used by the station: 80211a, 80211b, 80211g, 80211_10MHZ, 80211_5MHZ, holland, 80211n_2_4GHZ, 80211n_5GHZ or 80211ac", staVersion);
103 cmd.
AddValue (
"apRaa",
"Rate adaptation algorithm used by the AP", apRaa);
104 cmd.
AddValue (
"staRaa",
"Rate adaptation algorithm used by the station", staRaa);
105 cmd.
AddValue (
"apHasTraffic",
"Enable/disable traffic on the AP", apHasTraffic);
106 cmd.
AddValue (
"staHasTraffic",
"Enable/disable traffic on the station", staHasTraffic);
107 cmd.
Parse (argc,argv);
125 mac.
SetType (
"ns3::StaWifiMac",
130 staDevice = wifi.
Install (phy, mac, wifiStaNode);
139 apDevice = wifi.
Install (phy, mac, wifiApNode);
142 if (staVersion ==
"80211ac")
147 if (apVersion ==
"80211ac")
155 positionAlloc->
Add (Vector (0.0, 0.0, 0.0));
156 positionAlloc->
Add (Vector (5.0, 0.0, 0.0));
160 mobility.
Install (wifiStaNode);
167 address.
SetBase (
"192.168.1.0",
"255.255.255.0");
171 staNodeInterface = address.
Assign (staDevice);
172 apNodeInterface = address.
Assign (apDevice);
188 apClient.SetAttribute (
"Interval",
TimeValue (
Time (
"0.00001")));
189 apClient.SetAttribute (
"PacketSize",
UintegerValue (payloadSize));
199 staClient.SetAttribute (
"Interval",
TimeValue (
Time (
"0.00001")));
200 staClient.SetAttribute (
"PacketSize",
UintegerValue (payloadSize));
216 rxBytes = payloadSize * DynamicCast<UdpServer> (staServerApp.
Get (0))->GetReceived ();
217 throughput = (rxBytes * 8) / (simulationTime * 1000000.0);
218 std::cout <<
"AP Throughput: " << throughput <<
" Mbit/s" << std::endl;
227 rxBytes = payloadSize * DynamicCast<UdpServer> (apServerApp.
Get (0))->GetReceived ();
228 throughput = (rxBytes * 8) / (simulationTime * 1000000.0);
229 std::cout <<
"STA Throughput: " << throughput <<
" Mbit/s" << std::endl;
ERP-OFDM PHY (Clause 19, Section 19.5)
holds a vector of ns3::Application pointers.
Simulation virtual time values and global simulation resolution.
Smart pointer class similar to boost::intrusive_ptr.
OFDM PHY for the 5 GHz band (Clause 17 with 5 MHz channel bandwidth)
AttributeValue implementation for Boolean.
HT PHY for the 5 GHz band (clause 20)
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())
static void PopulateRoutingTables(void)
Build a routing database and initialize the routing tables of the nodes in the simulation.
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 Set(std::string path, const AttributeValue &value)
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.
OFDM PHY for the 5 GHz band (Clause 17 with 10 MHz channel bandwidth)
HT PHY for the 2.4 GHz band (clause 20)
static YansWifiPhyHelper Default(void)
Create a phy helper in a default working state.
helps to create WifiNetDevice objects
void SetChannel(Ptr< YansWifiChannel > channel)
WifiPhyStandard
Identifies the PHY specification that a Wifi device is configured to use.
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
Create a client application which sends UDP packets carrying a 32bit sequence number and a 64 bit tim...
AttributeValue implementation for Time.
Hold an unsigned integer type.
holds a vector of ns3::NetDevice pointers
virtual void SetStandard(enum WifiPhyStandard standard)
Create a server application which waits for input UDP packets and uses the information carried into t...
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer::Iterator first, NodeContainer::Iterator last) const
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)
Execute the events scheduled with ScheduleDestroy().
This is intended to be the configuration used in this paper: Gavin Holland, Nitin Vaidya and Paramvir...
void SetAttribute(std::string name, const AttributeValue &value)
Record an attribute to be set in each Application after it is is created.
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.
Ptr< Application > Get(uint32_t i) const
Get the Ptr
stored in this container at a given index.
DSSS PHY (Clause 15) and HR/DSSS PHY (Clause 18)
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...
manage and create wifi channel objects for the yans model.
create MAC layers for a ns3::WifiNetDevice.
The IEEE 802.11 SSID Information Element.
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(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue(), std::string n10="", const AttributeValue &v10=EmptyAttributeValue())
Helper class used to assign positions and mobility models to nodes.
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...
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.
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.
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.
#define NS_LOG_ERROR(msg)
Use NS_LOG to output a message of level LOG_ERROR.
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...
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
WifiPhyStandard ConvertStringToStandard(std::string version)