A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
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
22
#include "ns3/core-module.h"
23
#include "ns3/network-module.h"
24
#include "ns3/applications-module.h"
25
#include "ns3/mobility-module.h"
26
#include "ns3/config-store-module.h"
27
#include "ns3/wifi-module.h"
28
#include "ns3/athstats-helper.h"
29
30
#include <iostream>
31
32
using namespace
ns3;
33
34
static
bool
g_verbose
=
true
;
35
36
void
37
DevTxTrace
(std::string context,
Ptr<const Packet>
p)
38
{
39
if
(
g_verbose
)
40
{
41
std::cout <<
" TX p: "
<< *p << std::endl;
42
}
43
}
44
void
45
DevRxTrace
(std::string context,
Ptr<const Packet>
p)
46
{
47
if
(
g_verbose
)
48
{
49
std::cout <<
" RX p: "
<< *p << std::endl;
50
}
51
}
52
void
53
PhyRxOkTrace
(std::string context,
Ptr<const Packet>
packet,
double
snr,
WifiMode
mode,
enum
WifiPreamble
preamble)
54
{
55
if
(
g_verbose
)
56
{
57
std::cout <<
"PHYRXOK mode="
<< mode <<
" snr="
<< snr <<
" "
<< *packet << std::endl;
58
}
59
}
60
void
61
PhyRxErrorTrace
(std::string context,
Ptr<const Packet>
packet,
double
snr)
62
{
63
if
(
g_verbose
)
64
{
65
std::cout <<
"PHYRXERROR snr="
<< snr <<
" "
<< *packet << std::endl;
66
}
67
}
68
void
69
PhyTxTrace
(std::string context,
Ptr<const Packet>
packet,
WifiMode
mode,
WifiPreamble
preamble, uint8_t txPower)
70
{
71
if
(
g_verbose
)
72
{
73
std::cout <<
"PHYTX mode="
<< mode <<
" "
<< *packet << std::endl;
74
}
75
}
76
void
77
PhyStateTrace
(std::string context,
Time
start
,
Time
duration,
enum
WifiPhy::State
state)
78
{
79
if
(
g_verbose
)
80
{
81
std::cout <<
" state="
<< state <<
" start="
<< start <<
" duration="
<< duration << std::endl;
82
}
83
}
84
85
static
void
86
SetPosition
(
Ptr<Node>
node,
Vector
position)
87
{
88
Ptr<MobilityModel>
mobility = node->
GetObject
<
MobilityModel
> ();
89
mobility->
SetPosition
(position);
90
}
91
92
static
Vector
93
GetPosition
(
Ptr<Node>
node)
94
{
95
Ptr<MobilityModel>
mobility = node->
GetObject
<
MobilityModel
> ();
96
return
mobility->
GetPosition
();
97
}
98
99
static
void
100
AdvancePosition
(
Ptr<Node>
node)
101
{
102
Vector
pos =
GetPosition
(node);
103
pos.
x
+= 5.0;
104
if
(pos.
x
>= 210.0)
105
{
106
return
;
107
}
108
SetPosition
(node, pos);
109
110
if
(
g_verbose
)
111
{
112
//std::cout << "x="<<pos.x << std::endl;
113
}
114
Simulator::Schedule
(Seconds (1.0), &
AdvancePosition
, node);
115
}
116
117
int
main
(
int
argc,
char
*argv[])
118
{
119
CommandLine
cmd;
120
cmd.
AddValue
(
"verbose"
,
"Print trace information if true"
,
g_verbose
);
121
122
cmd.
Parse
(argc, argv);
123
124
Packet::EnablePrinting
();
125
126
// enable rts cts all the time.
127
Config::SetDefault
(
"ns3::WifiRemoteStationManager::RtsCtsThreshold"
,
StringValue
(
"0"
));
128
// disable fragmentation
129
Config::SetDefault
(
"ns3::WifiRemoteStationManager::FragmentationThreshold"
,
StringValue
(
"2200"
));
130
131
WifiHelper
wifi =
WifiHelper::Default
();
132
MobilityHelper
mobility;
133
NodeContainer
stas;
134
NodeContainer
ap;
135
NetDeviceContainer
staDevs;
136
PacketSocketHelper
packetSocket;
137
138
stas.
Create
(2);
139
ap.
Create
(1);
140
141
// give packet socket powers to nodes.
142
packetSocket.
Install
(stas);
143
packetSocket.
Install
(ap);
144
145
NqosWifiMacHelper
wifiMac =
NqosWifiMacHelper::Default
();
146
YansWifiPhyHelper
wifiPhy =
YansWifiPhyHelper::Default
();
147
YansWifiChannelHelper
wifiChannel =
YansWifiChannelHelper::Default
();
148
wifiPhy.
SetChannel
(wifiChannel.
Create
());
149
Ssid
ssid =
Ssid
(
"wifi-default"
);
150
wifi.
SetRemoteStationManager
(
"ns3::ArfWifiManager"
);
151
// setup stas.
152
wifiMac.
SetType
(
"ns3::StaWifiMac"
,
153
"Ssid"
,
SsidValue
(ssid),
154
"ActiveProbing"
,
BooleanValue
(
false
));
155
staDevs = wifi.
Install
(wifiPhy, wifiMac, stas);
156
// setup ap.
157
wifiMac.
SetType
(
"ns3::ApWifiMac"
,
158
"Ssid"
,
SsidValue
(ssid));
159
wifi.
Install
(wifiPhy, wifiMac, ap);
160
161
// mobility.
162
mobility.
Install
(stas);
163
mobility.
Install
(ap);
164
165
Simulator::Schedule
(Seconds (1.0), &
AdvancePosition
, ap.
Get
(0));
166
167
PacketSocketAddress
socket;
168
socket.
SetSingleDevice
(staDevs.
Get
(0)->
GetIfIndex
());
169
socket.SetPhysicalAddress (staDevs.
Get
(1)->
GetAddress
());
170
socket.SetProtocol (1);
171
172
OnOffHelper
onoff (
"ns3::PacketSocketFactory"
,
Address
(socket));
173
onoff.
SetConstantRate
(
DataRate
(
"500kb/s"
));
174
175
ApplicationContainer
apps = onoff.
Install
(stas.
Get
(0));
176
apps.
Start
(Seconds (0.5));
177
apps.
Stop
(Seconds (43.0));
178
179
Simulator::Stop
(Seconds (44.0));
180
181
Config::Connect
(
"/NodeList/*/DeviceList/*/Mac/MacTx"
,
MakeCallback
(&
DevTxTrace
));
182
Config::Connect
(
"/NodeList/*/DeviceList/*/Mac/MacRx"
,
MakeCallback
(&
DevRxTrace
));
183
Config::Connect
(
"/NodeList/*/DeviceList/*/Phy/State/RxOk"
,
MakeCallback
(&
PhyRxOkTrace
));
184
Config::Connect
(
"/NodeList/*/DeviceList/*/Phy/State/RxError"
,
MakeCallback
(&
PhyRxErrorTrace
));
185
Config::Connect
(
"/NodeList/*/DeviceList/*/Phy/State/Tx"
,
MakeCallback
(&
PhyTxTrace
));
186
Config::Connect
(
"/NodeList/*/DeviceList/*/Phy/State/State"
,
MakeCallback
(&
PhyStateTrace
));
187
188
AthstatsHelper
athstats;
189
athstats.
EnableAthstats
(
"athstats-sta"
, stas);
190
athstats.
EnableAthstats
(
"athstats-ap"
, ap);
191
192
Simulator::Run
();
193
194
Simulator::Destroy
();
195
196
return
0;
197
}
examples
wireless
wifi-ap.cc
Generated on Fri Aug 30 2013 01:42:44 for ns-3 by
1.8.1.2