A Discrete-Event Network Simulator
API
wifi-ap.cc
Go to the documentation of this file.
1/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2005,2006,2007 INRIA
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19 */
20
21#include "ns3/command-line.h"
22#include "ns3/config.h"
23#include "ns3/boolean.h"
24#include "ns3/string.h"
25#include "ns3/yans-wifi-helper.h"
26#include "ns3/ssid.h"
27#include "ns3/mobility-helper.h"
28#include "ns3/on-off-helper.h"
29#include "ns3/yans-wifi-channel.h"
30#include "ns3/mobility-model.h"
31#include "ns3/packet-socket-helper.h"
32#include "ns3/packet-socket-address.h"
33#include "ns3/athstats-helper.h"
34
35using namespace ns3;
36
37static bool g_verbose = true;
38
39void
40DevTxTrace (std::string context, Ptr<const Packet> p)
41{
42 if (g_verbose)
43 {
44 std::cout << " TX p: " << *p << std::endl;
45 }
46}
47void
48DevRxTrace (std::string context, Ptr<const Packet> p)
49{
50 if (g_verbose)
51 {
52 std::cout << " RX p: " << *p << std::endl;
53 }
54}
55void
56PhyRxOkTrace (std::string context, Ptr<const Packet> packet, double snr, WifiMode mode, WifiPreamble preamble)
57{
58 if (g_verbose)
59 {
60 std::cout << "PHYRXOK mode=" << mode << " snr=" << snr << " " << *packet << std::endl;
61 }
62}
63void
64PhyRxErrorTrace (std::string context, Ptr<const Packet> packet, double snr)
65{
66 if (g_verbose)
67 {
68 std::cout << "PHYRXERROR snr=" << snr << " " << *packet << std::endl;
69 }
70}
71void
72PhyTxTrace (std::string context, Ptr<const Packet> packet, WifiMode mode, WifiPreamble preamble, uint8_t txPower)
73{
74 if (g_verbose)
75 {
76 std::cout << "PHYTX mode=" << mode << " " << *packet << std::endl;
77 }
78}
79void
80PhyStateTrace (std::string context, Time start, Time duration, WifiPhyState state)
81{
82 if (g_verbose)
83 {
84 std::cout << " state=" << state << " start=" << start << " duration=" << duration << std::endl;
85 }
86}
87
88static void
90{
92 mobility->SetPosition (position);
93}
94
95static Vector
97{
99 return mobility->GetPosition ();
100}
101
102static void
104{
105 Vector pos = GetPosition (node);
106 pos.x += 5.0;
107 if (pos.x >= 210.0)
108 {
109 return;
110 }
111 SetPosition (node, pos);
112
113 Simulator::Schedule (Seconds (1.0), &AdvancePosition, node);
114}
115
116int main (int argc, char *argv[])
117{
118 CommandLine cmd (__FILE__);
119 cmd.AddValue ("verbose", "Print trace information if true", g_verbose);
120 cmd.Parse (argc, argv);
121
122 Packet::EnablePrinting ();
123
126 NodeContainer stas;
127 NodeContainer ap;
128 NetDeviceContainer staDevs;
129 PacketSocketHelper packetSocket;
130
131 stas.Create (2);
132 ap.Create (1);
133
134 // give packet socket powers to nodes.
135 packetSocket.Install (stas);
136 packetSocket.Install (ap);
137
138 WifiMacHelper wifiMac;
139 YansWifiPhyHelper wifiPhy;
140 YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
141 wifiPhy.SetChannel (wifiChannel.Create ());
142 Ssid ssid = Ssid ("wifi-default");
143 // setup stas.
144 wifiMac.SetType ("ns3::StaWifiMac",
145 "ActiveProbing", BooleanValue (true),
146 "Ssid", SsidValue (ssid));
147 staDevs = wifi.Install (wifiPhy, wifiMac, stas);
148 // setup ap.
149 wifiMac.SetType ("ns3::ApWifiMac",
150 "Ssid", SsidValue (ssid));
151 wifi.Install (wifiPhy, wifiMac, ap);
152
153 // mobility.
154 mobility.Install (stas);
155 mobility.Install (ap);
156
157 Simulator::Schedule (Seconds (1.0), &AdvancePosition, ap.Get (0));
158
159 PacketSocketAddress socket;
160 socket.SetSingleDevice (staDevs.Get (0)->GetIfIndex ());
161 socket.SetPhysicalAddress (staDevs.Get (1)->GetAddress ());
162 socket.SetProtocol (1);
163
164 OnOffHelper onoff ("ns3::PacketSocketFactory", Address (socket));
165 onoff.SetConstantRate (DataRate ("500kb/s"));
166
167 ApplicationContainer apps = onoff.Install (stas.Get (0));
168 apps.Start (Seconds (0.5));
169 apps.Stop (Seconds (43.0));
170
171 Simulator::Stop (Seconds (44.0));
172
173 Config::Connect ("/NodeList/*/DeviceList/*/Mac/MacTx", MakeCallback (&DevTxTrace));
174 Config::Connect ("/NodeList/*/DeviceList/*/Mac/MacRx", MakeCallback (&DevRxTrace));
175 Config::Connect ("/NodeList/*/DeviceList/*/Phy/State/RxOk", MakeCallback (&PhyRxOkTrace));
176 Config::Connect ("/NodeList/*/DeviceList/*/Phy/State/RxError", MakeCallback (&PhyRxErrorTrace));
177 Config::Connect ("/NodeList/*/DeviceList/*/Phy/State/Tx", MakeCallback (&PhyTxTrace));
178 Config::Connect ("/NodeList/*/DeviceList/*/Phy/State/State", MakeCallback (&PhyStateTrace));
179
180 AthstatsHelper athstats;
181 athstats.EnableAthstats ("athstats-sta", stas);
182 athstats.EnableAthstats ("athstats-ap", ap);
183
184 Simulator::Run ();
185
186 Simulator::Destroy ();
187
188 return 0;
189}
a polymophic address class
Definition: address.h:91
holds a vector of ns3::Application pointers.
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter.
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
create AthstatsWifiTraceSink instances and connect them to wifi devices
void EnableAthstats(std::string filename, uint32_t nodeid, uint32_t deviceid)
Enable athstats.
AttributeValue implementation for Boolean.
Definition: boolean.h:37
Parse command-line arguments.
Definition: command-line.h:229
Class for representing data rates.
Definition: data-rate.h:89
Helper class used to assign positions and mobility models to nodes.
Keep track of the current position and velocity of an object.
holds a vector of ns3::NetDevice pointers
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
virtual Address GetAddress(void) const =0
virtual uint32_t GetIfIndex(void) const =0
keep track of a set of node pointers.
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< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Definition: object.h:470
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Definition: on-off-helper.h:43
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.
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:36
AttributeValue implementation for Ssid.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
Vector3D Vector
Vector alias typedef for compatibility with mobility models.
Definition: vector.h:324
helps to create WifiNetDevice objects
Definition: wifi-helper.h:323
create MAC layers for a ns3::WifiNetDevice.
void SetType(std::string type, Args &&... args)
represent a single transmission mode
Definition: wifi-mode.h:48
manage and create wifi channel objects for the YANS model.
Ptr< YansWifiChannel > Create(void) const
Make it easy to create and manage PHY objects for the YANS model.
void SetChannel(Ptr< YansWifiChannel > channel)
void Connect(std::string path, const CallbackBase &cb)
Definition: config.cc:920
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1244
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Definition: callback.h:1648
cmd
Definition: second.py:35
ssid
Definition: third.py:97
wifi
Definition: third.py:99
mobility
Definition: third.py:107
def start()
Definition: core.py:1853
void PhyRxErrorTrace(std::string context, Ptr< const Packet > packet, double snr)
Definition: wifi-ap.cc:64
void PhyStateTrace(std::string context, Time start, Time duration, WifiPhyState state)
Definition: wifi-ap.cc:80
void PhyRxOkTrace(std::string context, Ptr< const Packet > packet, double snr, WifiMode mode, WifiPreamble preamble)
Definition: wifi-ap.cc:56
void PhyTxTrace(std::string context, Ptr< const Packet > packet, WifiMode mode, WifiPreamble preamble, uint8_t txPower)
Definition: wifi-ap.cc:72
static bool g_verbose
Definition: wifi-ap.cc:37
void DevTxTrace(std::string context, Ptr< const Packet > p)
Definition: wifi-ap.cc:40
static void AdvancePosition(Ptr< Node > node)
Definition: wifi-ap.cc:103
static void SetPosition(Ptr< Node > node, Vector position)
Definition: wifi-ap.cc:89
static Vector GetPosition(Ptr< Node > node)
Definition: wifi-ap.cc:96
void DevRxTrace(std::string context, Ptr< const Packet > p)
Definition: wifi-ap.cc:48
WifiPhyState
The state of the PHY layer.