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
bug-772.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: Pavel Boyko <boyko@iitp.ru>
19
*/
20
21
#include "
bug-772.h
"
22
23
#include "ns3/mesh-helper.h"
24
#include "ns3/simulator.h"
25
#include "ns3/random-variable-stream.h"
26
#include "ns3/rng-seed-manager.h"
27
#include "ns3/string.h"
28
#include "ns3/mobility-helper.h"
29
#include "ns3/double.h"
30
#include "ns3/uinteger.h"
31
#include "ns3/string.h"
32
#include "ns3/boolean.h"
33
#include "ns3/yans-wifi-helper.h"
34
#include "ns3/internet-stack-helper.h"
35
#include "ns3/ipv4-address-helper.h"
36
#include "ns3/abort.h"
37
#include "ns3/udp-echo-helper.h"
38
#include "ns3/mobility-model.h"
39
#include "ns3/pcap-file.h"
40
#include "ns3/aodv-helper.h"
41
#include "ns3/v4ping-helper.h"
42
#include "ns3/nqos-wifi-mac-helper.h"
43
#include "ns3/config.h"
44
#include "ns3/on-off-helper.h"
45
#include "ns3/inet-socket-address.h"
46
#include "ns3/data-rate.h"
47
#include "ns3/packet-sink-helper.h"
48
#include "ns3/pcap-test.h"
49
#include <sstream>
50
51
namespace
ns3 {
52
namespace
aodv {
53
54
//-----------------------------------------------------------------------------
55
// UdpChainTest
56
//-----------------------------------------------------------------------------
57
Bug772ChainTest::Bug772ChainTest
(
const
char
*
const
prefix,
const
char
*
const
proto,
Time
t, uint32_t size) :
58
TestCase
(
"Bug 772 UDP and TCP chain regression test"
),
59
m_nodes (0),
60
m_prefix (prefix),
61
m_proto (proto),
62
m_time (t),
63
m_size (size),
64
m_step (120)
65
{
66
}
67
68
Bug772ChainTest::~Bug772ChainTest
()
69
{
70
delete
m_nodes
;
71
}
72
73
void
74
Bug772ChainTest::DoRun
()
75
{
76
RngSeedManager::SetSeed
(12345);
77
RngSeedManager::SetRun
(7);
78
79
CreateNodes
();
80
CreateDevices
();
81
82
Simulator::Stop
(
m_time
);
83
Simulator::Run
();
84
Simulator::Destroy
();
85
86
CheckResults
();
87
88
delete
m_nodes
,
m_nodes
= 0;
89
}
90
91
void
92
Bug772ChainTest::CreateNodes
()
93
{
94
m_nodes
=
new
NodeContainer
;
95
m_nodes
->
Create
(
m_size
);
96
MobilityHelper
mobility;
97
mobility.
SetPositionAllocator
(
"ns3::GridPositionAllocator"
,
98
"MinX"
,
DoubleValue
(0.0),
99
"MinY"
,
DoubleValue
(0.0),
100
"DeltaX"
,
DoubleValue
(
m_step
),
101
"DeltaY"
,
DoubleValue
(0),
102
"GridWidth"
,
UintegerValue
(
m_size
),
103
"LayoutType"
,
StringValue
(
"RowFirst"
));
104
mobility.
SetMobilityModel
(
"ns3::ConstantPositionMobilityModel"
);
105
mobility.
Install
(*
m_nodes
);
106
}
107
108
void
109
Bug772ChainTest::CreateDevices
()
110
{
111
int64_t streamsUsed = 0;
112
// 1. Setup WiFi
113
NqosWifiMacHelper
wifiMac =
NqosWifiMacHelper::Default
();
114
wifiMac.
SetType
(
"ns3::AdhocWifiMac"
);
115
YansWifiPhyHelper
wifiPhy =
YansWifiPhyHelper::Default
();
116
// This test suite output was originally based on YansErrorRateModel
117
wifiPhy.
SetErrorRateModel
(
"ns3::YansErrorRateModel"
);
118
YansWifiChannelHelper
wifiChannel =
YansWifiChannelHelper::Default
();
119
Ptr<YansWifiChannel>
chan = wifiChannel.
Create
();
120
wifiPhy.
SetChannel
(chan);
121
WifiHelper
wifi =
WifiHelper::Default
();
122
wifi.
SetRemoteStationManager
(
"ns3::ConstantRateWifiManager"
,
"DataMode"
,
StringValue
(
"OfdmRate6Mbps"
),
"RtsCtsThreshold"
,
StringValue
(
"2200"
));
123
NetDeviceContainer
devices = wifi.
Install
(wifiPhy, wifiMac, *
m_nodes
);
124
125
// Assign fixed stream numbers to wifi and channel random variables
126
streamsUsed += wifi.
AssignStreams
(devices, streamsUsed);
127
// Assign 6 streams per device
128
NS_TEST_ASSERT_MSG_EQ
(streamsUsed, (devices.
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, (devices.
GetN
() * 6),
"Stream assignment mismatch"
);
132
133
// 2. Setup TCP/IP & AODV
134
AodvHelper
aodv;
// Use default parameters here
135
InternetStackHelper
internetStack;
136
internetStack.
SetRoutingHelper
(aodv);
137
internetStack.
Install
(*
m_nodes
);
138
streamsUsed += aodv.
AssignStreams
(*
m_nodes
, streamsUsed);
139
// Expect to use m_size more streams for AODV
140
NS_TEST_ASSERT_MSG_EQ
(streamsUsed, ((devices.
GetN
() * 6) +
m_size
),
"Stream assignment mismatch"
);
141
Ipv4AddressHelper
address;
142
address.
SetBase
(
"10.1.1.0"
,
"255.255.255.0"
);
143
Ipv4InterfaceContainer
interfaces = address.Assign (devices);
144
145
// 3. Setup UDP source and sink
146
uint16_t
port
= 9;
// Discard port (RFC 863)
147
OnOffHelper
onoff (
m_proto
,
Address
(
InetSocketAddress
(interfaces.
GetAddress
(
m_size
-1),
port
)));
148
onoff.
SetConstantRate
(
DataRate
(64000));
149
onoff.SetAttribute (
"PacketSize"
,
UintegerValue
(1200));
150
ApplicationContainer
app = onoff.Install (
m_nodes
->
Get
(0));
151
app.
Start
(
Seconds
(1.0));
152
app.
Stop
(
m_time
);
153
PacketSinkHelper
sink (
m_proto
,
Address
(
InetSocketAddress
(
Ipv4Address::GetAny
(), port)));
154
app = sink.
Install
(
m_nodes
->
Get
(
m_size
- 1));
155
app.
Start
(
Seconds
(0.0));
156
157
// 4. write PCAP on the first and last nodes only
158
wifiPhy.
EnablePcap
(
CreateTempDirFilename
(
m_prefix
), devices.
Get
(0));
159
wifiPhy.
EnablePcap
(
CreateTempDirFilename
(
m_prefix
), devices.
Get
(
m_size
-1));
160
}
161
162
void
163
Bug772ChainTest::CheckResults
()
164
{
165
for
(uint32_t i = 0; i <
m_size
; i += (m_size - 1)
/*first and last nodes only*/
)
166
{
167
NS_PCAP_TEST_EXPECT_EQ
(
m_prefix
<<
"-"
<< i <<
"-0.pcap"
);
168
}
169
}
170
171
}
172
}
src
aodv
test
bug-772.cc
Generated on Tue Oct 9 2012 16:45:32 for ns-3 by
1.8.1.2