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
bug780-test.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/* This program is free software; you can redistribute it and/or modify
3
* it under the terms of the GNU General Public License version 2 as
4
* published by the Free Software Foundation;
5
*
6
* This program is distributed in the hope that it will be useful,
7
* but WITHOUT ANY WARRANTY; without even the implied warranty of
8
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9
* GNU General Public License for more details.
10
*
11
* You should have received a copy of the GNU General Public License
12
* along with this program; if not, write to the Free Software
13
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
14
* USA
15
*
16
*/
17
18
#include <fstream>
19
#include <iostream>
20
21
#include "ns3/test.h"
22
#include "ns3/olsr-helper.h"
23
#include "ns3/ipv4-list-routing-helper.h"
24
#include "ns3/wifi-helper.h"
25
#include "ns3/yans-wifi-helper.h"
26
#include "ns3/nqos-wifi-mac-helper.h"
27
#include "ns3/constant-velocity-mobility-model.h"
28
#include "ns3/mobility-helper.h"
29
#include "ns3/olsr-routing-protocol.h"
30
#include "ns3/internet-stack-helper.h"
31
#include "ns3/log.h"
32
#include "ns3/config.h"
33
#include "ns3/double.h"
34
#include "ns3/string.h"
35
#include "ns3/boolean.h"
36
#include "ns3/ipv4-address-helper.h"
37
#include "ns3/ipv4-interface-container.h"
38
#include "ns3/internet-stack-helper.h"
39
#include "ns3/v4ping-helper.h"
40
#include "ns3/pcap-file.h"
41
#include "ns3/pcap-test.h"
42
#include "ns3/rng-seed-manager.h"
43
44
#include "
bug780-test.h
"
45
46
namespace
ns3
47
{
48
namespace
olsr
49
{
50
51
const
char
*
const
Bug780Test::PREFIX
=
"bug780"
;
52
53
static
void
54
SetVelocity
(
Ptr<Node>
node,
Vector
vel)
55
{
56
Ptr<ConstantVelocityMobilityModel>
mobility =
57
node->
GetObject
<
ConstantVelocityMobilityModel
> ();
58
mobility->SetVelocity (vel);
59
}
60
61
62
Bug780Test::Bug780Test
() :
63
TestCase
(
"Test OLSR bug 780"
),
64
m_time (
Seconds
(200.0))
65
{
66
}
67
68
Bug780Test::~Bug780Test
()
69
{
70
}
71
72
void
73
Bug780Test::DoRun
()
74
{
75
RngSeedManager::SetSeed
(12345);
76
RngSeedManager::SetRun
(12345);
77
CreateNodes
();
78
79
Simulator::Stop
(
m_time
);
80
Simulator::Run
();
81
Simulator::Destroy
();
82
83
CheckResults
();
84
}
85
86
void
87
Bug780Test::CreateNodes
(
void
)
88
{
89
int
nWifis = 3;
90
double
SimTime = 200.0;
91
std::string phyMode (
"DsssRate1Mbps"
);
92
int64_t streamsUsed = 0;
93
94
//sending one packets per sec
95
// Fix non-unicast data rate to be the same as that of unicast
96
Config::SetDefault
(
"ns3::WifiRemoteStationManager::RtsCtsThreshold"
,
97
StringValue
(
"400"
));
98
99
NodeContainer
adhocNodes;
100
adhocNodes.
Create
(nWifis);
101
102
WifiHelper
wifi;
103
YansWifiPhyHelper
wifiPhy =
YansWifiPhyHelper::Default
();
104
YansWifiChannelHelper
wifiChannel;
105
wifiChannel.
SetPropagationDelay
(
"ns3::ConstantSpeedPropagationDelayModel"
);
106
wifiChannel.
AddPropagationLoss
(
"ns3::FriisPropagationLossModel"
);
107
Ptr<YansWifiChannel>
chan = wifiChannel.
Create
();
108
wifiPhy.
SetChannel
(chan);
109
110
// Add a non-QoS upper mac, and disable rate control
111
NqosWifiMacHelper
wifiMac =
NqosWifiMacHelper::Default
();
112
wifi.
SetStandard
(
WIFI_PHY_STANDARD_80211b
);
113
wifi.
SetRemoteStationManager
(
"ns3::ConstantRateWifiManager"
,
114
"DataMode"
,
StringValue
(phyMode),
115
"ControlMode"
,
StringValue
(phyMode));
116
117
//set the tx range to 300
118
wifiPhy.
Set
(
"TxPowerStart"
,
DoubleValue
(-0.1615));
119
wifiPhy.
Set
(
"TxPowerEnd"
,
DoubleValue
(-0.1615));
120
121
// Set it to adhoc mode
122
wifiMac.
SetType
(
"ns3::AdhocWifiMac"
);
123
NetDeviceContainer
adhocDevices = wifi.
Install
(wifiPhy, wifiMac, adhocNodes);
124
125
// Assign fixed stream numbers to wifi and channel random variables
126
streamsUsed += wifi.
AssignStreams
(adhocDevices, streamsUsed);
127
// Assign 6 streams per Wifi device
128
NS_TEST_ASSERT_MSG_EQ
(streamsUsed, (adhocDevices.
GetN
() * 6),
"Stream assignment mismatch"
);
129
streamsUsed += wifiChannel.
AssignStreams
(chan, streamsUsed);
130
// Assign 0 streams per channel for this configuration
131
NS_TEST_ASSERT_MSG_EQ
(streamsUsed, (adhocDevices.
GetN
() * 6),
"Stream assignment mismatch"
);
132
133
OlsrHelper
olsr;
134
135
InternetStackHelper
internet;
136
internet.
SetRoutingHelper
(olsr);
137
internet.
Install
(adhocNodes);
138
streamsUsed += olsr.
AssignStreams
(adhocNodes, 0);
139
NS_TEST_ASSERT_MSG_EQ
(streamsUsed, ((adhocDevices.
GetN
() * 6) + nWifis),
"Should have assigned 3 streams"
);
140
141
Ipv4AddressHelper
addressAdhoc;
142
addressAdhoc.
SetBase
(
"10.1.1.0"
,
"255.255.255.0"
);
143
Ipv4InterfaceContainer
adhocInterfaces;
144
adhocInterfaces = addressAdhoc.Assign (adhocDevices);
145
146
MobilityHelper
mobilityAdhoc;
147
148
Ptr<ListPositionAllocator>
positionAlloc_Adhoc =
149
CreateObject<ListPositionAllocator>();
150
double
distance = 0.0;
151
for
(uint32_t i = 0; i <= adhocNodes.
GetN
(); i++)
152
{
153
positionAlloc_Adhoc->Add (
Vector
(distance,0.0,0.0));
154
distance += 250.0;
155
}
156
157
mobilityAdhoc.
SetMobilityModel
(
"ns3::ConstantVelocityMobilityModel"
);
158
mobilityAdhoc.
SetPositionAllocator
(positionAlloc_Adhoc);
159
mobilityAdhoc.
Install
(adhocNodes);
160
161
//At 50 sec node 3 moves towards node 2
162
Simulator::Schedule
(
Seconds
(50.0), &
SetVelocity
, adhocNodes.
Get
(2),
Vector
(-5.0,0.0,0.0));
163
//AT 100 sec set node 3 with zero velocity
164
Simulator::Schedule
(
Seconds
(100.0), &
SetVelocity
, adhocNodes.
Get
(2),
Vector
(0.0,0.0,0.0));
165
//Move node2 away from node 3
166
Simulator::Schedule
(
Seconds
(100.0), &
SetVelocity
, adhocNodes.
Get
(1),
Vector
(5.0,0.0,0.0));
167
//AT 150 sec set node 2 with zero velocity
168
Simulator::Schedule
(
Seconds
(150.0), &
SetVelocity
, adhocNodes.
Get
(1),
Vector
(0.0,0.0,0.0));
169
170
171
// Ping 10.1.1.1 -> 10.1.1.2
172
V4PingHelper
ping (adhocInterfaces.
GetAddress
(1));
173
ping.
SetAttribute
(
"Verbose"
,
BooleanValue
(
true
));
174
175
ApplicationContainer
p = ping.Install (adhocNodes.
Get
(0));
176
p.
Start
(
Seconds
(50));
177
p.
Stop
(
Seconds
(SimTime) -
Seconds
(0.001));
178
179
// pcap
180
wifiPhy.
EnablePcapAll
(
CreateTempDirFilename
(
PREFIX
));
181
}
182
183
void
184
Bug780Test::CheckResults
()
185
{
186
for
(uint32_t i = 0; i < 2; ++i)
187
{
188
NS_PCAP_TEST_EXPECT_EQ
(
PREFIX
<<
"-"
<< i <<
"-0.pcap"
);
189
}
190
}
191
192
}
// namespace olsr
193
}
// namespace ns3
194
src
olsr
test
bug780-test.cc
Generated on Tue Oct 9 2012 16:45:45 for ns-3 by
1.8.1.2