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-simple-adhoc.cc
Go to the documentation of this file.
1
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2009 The Boeing Company
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
*/
19
20
//
21
// This script configures two nodes on an 802.11b physical layer, with
22
// 802.11b NICs in adhoc mode, and by default, sends one packet of 1000
23
// (application) bytes to the other node. The physical layer is configured
24
// to receive at a fixed RSS (regardless of the distance and transmit
25
// power); therefore, changing position of the nodes has no effect.
26
//
27
// There are a number of command-line options available to control
28
// the default behavior. The list of available command-line options
29
// can be listed with the following command:
30
// ./waf --run "wifi-simple-adhoc --help"
31
//
32
// For instance, for this configuration, the physical layer will
33
// stop successfully receiving packets when rss drops below -97 dBm.
34
// To see this effect, try running:
35
//
36
// ./waf --run "wifi-simple-adhoc --rss=-97 --numPackets=20"
37
// ./waf --run "wifi-simple-adhoc --rss=-98 --numPackets=20"
38
// ./waf --run "wifi-simple-adhoc --rss=-99 --numPackets=20"
39
//
40
// Note that all ns-3 attributes (not just the ones exposed in the below
41
// script) can be changed at command line; see the documentation.
42
//
43
// This script can also be helpful to put the Wifi layer into verbose
44
// logging mode; this command will turn on all wifi logging:
45
//
46
// ./waf --run "wifi-simple-adhoc --verbose=1"
47
//
48
// When you are done, you will notice two pcap trace files in your directory.
49
// If you have tcpdump installed, you can try this:
50
//
51
// tcpdump -r wifi-simple-adhoc-0-0.pcap -nn -tt
52
//
53
54
#include "ns3/core-module.h"
55
#include "ns3/network-module.h"
56
#include "ns3/mobility-module.h"
57
#include "ns3/config-store-module.h"
58
#include "ns3/wifi-module.h"
59
#include "ns3/internet-module.h"
60
61
#include <iostream>
62
#include <fstream>
63
#include <vector>
64
#include <string>
65
66
NS_LOG_COMPONENT_DEFINE
(
"WifiSimpleAdhoc"
);
67
68
using namespace
ns3;
69
70
void
ReceivePacket
(
Ptr<Socket>
socket)
71
{
72
NS_LOG_UNCOND
(
"Received one packet!"
);
73
}
74
75
static
void
GenerateTraffic
(
Ptr<Socket>
socket, uint32_t pktSize,
76
uint32_t pktCount,
Time
pktInterval )
77
{
78
if
(pktCount > 0)
79
{
80
socket->
Send
(Create<Packet> (pktSize));
81
Simulator::Schedule
(pktInterval, &
GenerateTraffic
,
82
socket, pktSize,pktCount-1, pktInterval);
83
}
84
else
85
{
86
socket->
Close
();
87
}
88
}
89
90
91
int
main
(
int
argc,
char
*argv[])
92
{
93
std::string phyMode (
"DsssRate1Mbps"
);
94
double
rss = -80;
// -dBm
95
uint32_t packetSize = 1000;
// bytes
96
uint32_t numPackets = 1;
97
double
interval = 1.0;
// seconds
98
bool
verbose
=
false
;
99
100
CommandLine
cmd;
101
102
cmd.
AddValue
(
"phyMode"
,
"Wifi Phy mode"
, phyMode);
103
cmd.
AddValue
(
"rss"
,
"received signal strength"
, rss);
104
cmd.
AddValue
(
"packetSize"
,
"size of application packet sent"
, packetSize);
105
cmd.
AddValue
(
"numPackets"
,
"number of packets generated"
, numPackets);
106
cmd.
AddValue
(
"interval"
,
"interval (seconds) between packets"
, interval);
107
cmd.
AddValue
(
"verbose"
,
"turn on all WifiNetDevice log components"
, verbose);
108
109
cmd.
Parse
(argc, argv);
110
// Convert to time object
111
Time
interPacketInterval = Seconds (interval);
112
113
// disable fragmentation for frames below 2200 bytes
114
Config::SetDefault
(
"ns3::WifiRemoteStationManager::FragmentationThreshold"
,
StringValue
(
"2200"
));
115
// turn off RTS/CTS for frames below 2200 bytes
116
Config::SetDefault
(
"ns3::WifiRemoteStationManager::RtsCtsThreshold"
,
StringValue
(
"2200"
));
117
// Fix non-unicast data rate to be the same as that of unicast
118
Config::SetDefault
(
"ns3::WifiRemoteStationManager::NonUnicastMode"
,
119
StringValue
(phyMode));
120
121
NodeContainer
c;
122
c.
Create
(2);
123
124
// The below set of helpers will help us to put together the wifi NICs we want
125
WifiHelper
wifi;
126
if
(verbose)
127
{
128
wifi.
EnableLogComponents
();
// Turn on all Wifi logging
129
}
130
wifi.
SetStandard
(
WIFI_PHY_STANDARD_80211b
);
131
132
YansWifiPhyHelper
wifiPhy =
YansWifiPhyHelper::Default
();
133
// This is one parameter that matters when using FixedRssLossModel
134
// set it to zero; otherwise, gain will be added
135
wifiPhy.
Set
(
"RxGain"
,
DoubleValue
(0) );
136
// ns-3 supports RadioTap and Prism tracing extensions for 802.11b
137
wifiPhy.
SetPcapDataLinkType
(
YansWifiPhyHelper::DLT_IEEE802_11_RADIO
);
138
139
YansWifiChannelHelper
wifiChannel;
140
wifiChannel.
SetPropagationDelay
(
"ns3::ConstantSpeedPropagationDelayModel"
);
141
// The below FixedRssLossModel will cause the rss to be fixed regardless
142
// of the distance between the two stations, and the transmit power
143
wifiChannel.
AddPropagationLoss
(
"ns3::FixedRssLossModel"
,
"Rss"
,
DoubleValue
(rss));
144
wifiPhy.
SetChannel
(wifiChannel.
Create
());
145
146
// Add a non-QoS upper mac, and disable rate control
147
NqosWifiMacHelper
wifiMac =
NqosWifiMacHelper::Default
();
148
wifi.
SetRemoteStationManager
(
"ns3::ConstantRateWifiManager"
,
149
"DataMode"
,
StringValue
(phyMode),
150
"ControlMode"
,
StringValue
(phyMode));
151
// Set it to adhoc mode
152
wifiMac.
SetType
(
"ns3::AdhocWifiMac"
);
153
NetDeviceContainer
devices
= wifi.
Install
(wifiPhy, wifiMac, c);
154
155
// Note that with FixedRssLossModel, the positions below are not
156
// used for received signal strength.
157
MobilityHelper
mobility;
158
Ptr<ListPositionAllocator>
positionAlloc = CreateObject<ListPositionAllocator> ();
159
positionAlloc->
Add
(
Vector
(0.0, 0.0, 0.0));
160
positionAlloc->
Add
(
Vector
(5.0, 0.0, 0.0));
161
mobility.
SetPositionAllocator
(positionAlloc);
162
mobility.
SetMobilityModel
(
"ns3::ConstantPositionMobilityModel"
);
163
mobility.
Install
(c);
164
165
InternetStackHelper
internet;
166
internet.
Install
(c);
167
168
Ipv4AddressHelper
ipv4;
169
NS_LOG_INFO
(
"Assign IP Addresses."
);
170
ipv4.
SetBase
(
"10.1.1.0"
,
"255.255.255.0"
);
171
Ipv4InterfaceContainer
i = ipv4.
Assign
(devices);
172
173
TypeId
tid =
TypeId::LookupByName
(
"ns3::UdpSocketFactory"
);
174
Ptr<Socket>
recvSink =
Socket::CreateSocket
(c.
Get
(0), tid);
175
InetSocketAddress
local =
InetSocketAddress
(
Ipv4Address::GetAny
(), 80);
176
recvSink->
Bind
(local);
177
recvSink->
SetRecvCallback
(
MakeCallback
(&
ReceivePacket
));
178
179
Ptr<Socket>
source =
Socket::CreateSocket
(c.
Get
(1), tid);
180
InetSocketAddress
remote =
InetSocketAddress
(
Ipv4Address
(
"255.255.255.255"
), 80);
181
source->
SetAllowBroadcast
(
true
);
182
source->
Connect
(remote);
183
184
// Tracing
185
wifiPhy.
EnablePcap
(
"wifi-simple-adhoc"
, devices);
186
187
// Output what we are doing
188
NS_LOG_UNCOND
(
"Testing "
<< numPackets <<
" packets sent with receiver rss "
<< rss );
189
190
Simulator::ScheduleWithContext
(source->
GetNode
()->
GetId
(),
191
Seconds (1.0), &
GenerateTraffic
,
192
source, packetSize, numPackets, interPacketInterval);
193
194
Simulator::Run
();
195
Simulator::Destroy
();
196
197
return
0;
198
}
199
examples
wireless
wifi-simple-adhoc.cc
Generated on Fri Aug 30 2013 01:42:44 for ns-3 by
1.8.1.2