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
hwmp-reactive-regression.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2009 IITP RAS
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
* Authors: Kirill Andreev <andreev@iitp.ru>
19
*/
20
21
#include "ns3/mesh-helper.h"
22
#include "ns3/simulator.h"
23
#include "ns3/random-variable-stream.h"
24
#include "ns3/rng-seed-manager.h"
25
#include "ns3/mobility-helper.h"
26
#include "ns3/double.h"
27
#include "ns3/uinteger.h"
28
#include "ns3/string.h"
29
#include "ns3/yans-wifi-helper.h"
30
#include "ns3/internet-stack-helper.h"
31
#include "ns3/ipv4-address-helper.h"
32
#include "ns3/abort.h"
33
#include "ns3/udp-echo-helper.h"
34
#include "ns3/mobility-model.h"
35
#include "ns3/pcap-test.h"
36
#include <sstream>
37
38
#include "
hwmp-reactive-regression.h
"
39
41
const
char
*
const
PREFIX
=
"hwmp-reactive-regression-test"
;
42
43
HwmpReactiveRegressionTest::HwmpReactiveRegressionTest
() :
TestCase
(
"HWMP on-demand regression test"
),
44
m_nodes (0),
45
m_time (
Seconds
(10))
46
{
47
}
48
HwmpReactiveRegressionTest::~HwmpReactiveRegressionTest
()
49
{
50
delete
m_nodes
;
51
}
52
void
53
HwmpReactiveRegressionTest::DoRun
()
54
{
55
RngSeedManager::SetSeed (12345);
56
RngSeedManager::SetRun (7);
57
CreateNodes
();
58
CreateDevices
();
59
InstallApplications
();
60
61
Simulator::Stop (
m_time
);
62
Simulator::Run
();
63
Simulator::Destroy ();
64
65
CheckResults
();
66
delete
m_nodes
,
m_nodes
= 0;
67
}
68
void
69
HwmpReactiveRegressionTest::CreateNodes
()
70
{
71
m_nodes
=
new
NodeContainer
;
72
m_nodes
->
Create
(6);
73
MobilityHelper
mobility;
74
Ptr<ListPositionAllocator>
positionAlloc = CreateObject<ListPositionAllocator>();
75
positionAlloc->
Add
(
Vector
( 0, 0, 0));
76
positionAlloc->
Add
(
Vector
( 0, 150, 0));
77
positionAlloc->
Add
(
Vector
( 0, 300, 0));
78
positionAlloc->
Add
(
Vector
( 0, 450, 0));
79
positionAlloc->
Add
(
Vector
( 0, 600, 0));
80
positionAlloc->
Add
(
Vector
( 0, 750, 0));
81
mobility.
SetPositionAllocator
(positionAlloc);
82
mobility.
SetMobilityModel
(
"ns3::ConstantPositionMobilityModel"
);
83
mobility.
Install
(*
m_nodes
);
84
Simulator::Schedule (
Seconds
(5.0), &
HwmpReactiveRegressionTest::ResetPosition
,
this
);
85
}
86
void
87
HwmpReactiveRegressionTest::InstallApplications
()
88
{
89
UdpEchoServerHelper
echoServer (9);
90
ApplicationContainer
serverApps = echoServer.
Install
(
m_nodes
->
Get
(0));
91
serverApps.
Start
(
Seconds
(0.0));
92
serverApps.
Stop
(
m_time
);
93
UdpEchoClientHelper
echoClient (
m_interfaces
.
GetAddress
(0), 9);
94
echoClient.
SetAttribute
(
"MaxPackets"
,
UintegerValue
(300));
95
echoClient.SetAttribute (
"Interval"
,
TimeValue
(
Seconds
(0.5)));
96
echoClient.SetAttribute (
"PacketSize"
,
UintegerValue
(20));
97
ApplicationContainer
clientApps = echoClient.Install (
m_nodes
->
Get
(5));
98
clientApps.
Start
(
Seconds
(2.0));
99
clientApps.
Stop
(
m_time
);
100
}
101
void
102
HwmpReactiveRegressionTest::CreateDevices
()
103
{
104
int64_t streamsUsed = 0;
105
// 1. setup WiFi
106
YansWifiPhyHelper
wifiPhy = YansWifiPhyHelper::Default ();
107
// This test suite output was originally based on YansErrorRateModel
108
wifiPhy.
SetErrorRateModel
(
"ns3::YansErrorRateModel"
);
109
YansWifiChannelHelper
wifiChannel = YansWifiChannelHelper::Default ();
110
Ptr<YansWifiChannel>
chan = wifiChannel.
Create
();
111
wifiPhy.
SetChannel
(chan);
112
113
// 2. setup mesh
114
MeshHelper
mesh = MeshHelper::Default ();
115
mesh.
SetStackInstaller
(
"ns3::Dot11sStack"
);
116
mesh.
SetMacType
(
"RandomStart"
,
TimeValue
(
Seconds
(0.1)));
117
mesh.
SetNumberOfInterfaces
(1);
118
NetDeviceContainer
meshDevices = mesh.
Install
(wifiPhy, *
m_nodes
);
119
// Six devices, 4 streams per device
120
streamsUsed += mesh.
AssignStreams
(meshDevices, streamsUsed);
121
NS_TEST_EXPECT_MSG_EQ
(streamsUsed, (meshDevices.
GetN
() * 4),
"Stream assignment mismatch"
);
122
streamsUsed += wifiChannel.
AssignStreams
(chan, streamsUsed);
123
NS_TEST_EXPECT_MSG_EQ
(streamsUsed, (meshDevices.
GetN
() * 4),
"Stream assignment mismatch"
);
124
125
// 3. setup TCP/IP
126
InternetStackHelper
internetStack;
127
internetStack.
Install
(*
m_nodes
);
128
Ipv4AddressHelper
address;
129
address.
SetBase
(
"10.1.1.0"
,
"255.255.255.0"
);
130
m_interfaces
= address.
Assign
(meshDevices);
131
// 4. write PCAP if needed
132
wifiPhy.
EnablePcapAll
(
CreateTempDirFilename
(
PREFIX
));
133
}
134
135
void
136
HwmpReactiveRegressionTest::CheckResults
()
137
{
138
for
(
int
i = 0; i < 6; ++i)
139
{
140
NS_PCAP_TEST_EXPECT_EQ
(
PREFIX
<<
"-"
<< i <<
"-1.pcap"
);
141
}
142
}
143
144
void
145
HwmpReactiveRegressionTest::ResetPosition
()
146
{
147
Ptr<Object>
object
=
m_nodes
->
Get
(3);
148
Ptr<MobilityModel>
model =
object
->
GetObject
<
MobilityModel
> ();
149
if
(model == 0)
150
{
151
return
;
152
}
153
model->
SetPosition
(
Vector
(9000, 0, 0));
154
155
}
src
mesh
test
dot11s
hwmp-reactive-regression.cc
Generated on Fri Dec 21 2012 19:00:42 for ns-3 by
1.8.1.2