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
point-to-point-star.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* This program is free software; you can redistribute it and/or modify
4
* it under the terms of the GNU General Public License version 2 as
5
* published by the Free Software Foundation;
6
*
7
* This program is distributed in the hope that it will be useful,
8
* but WITHOUT ANY WARRANTY; without even the implied warranty of
9
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
* GNU General Public License for more details.
11
*
12
* You should have received a copy of the GNU General Public License
13
* along with this program; if not, write to the Free Software
14
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
*/
16
17
#include <cmath>
18
#include <iostream>
19
#include <sstream>
20
21
// ns3 includes
22
#include "ns3/log.h"
23
#include "ns3/point-to-point-star.h"
24
#include "ns3/constant-position-mobility-model.h"
25
26
#include "ns3/node-list.h"
27
#include "ns3/point-to-point-net-device.h"
28
#include "ns3/vector.h"
29
#include "ns3/ipv6-address-generator.h"
30
31
NS_LOG_COMPONENT_DEFINE
(
"PointToPointStarHelper"
);
32
33
namespace
ns3 {
34
35
PointToPointStarHelper::PointToPointStarHelper
(uint32_t numSpokes,
36
PointToPointHelper
p2pHelper)
37
{
38
m_hub
.
Create
(1);
39
m_spokes
.
Create
(numSpokes);
40
41
for
(uint32_t i = 0; i <
m_spokes
.
GetN
(); ++i)
42
{
43
NetDeviceContainer
nd = p2pHelper.
Install
(
m_hub
.
Get
(0),
m_spokes
.
Get
(i));
44
m_hubDevices
.
Add
(nd.
Get
(0));
45
m_spokeDevices
.
Add
(nd.
Get
(1));
46
}
47
}
48
49
PointToPointStarHelper::~PointToPointStarHelper
()
50
{
51
}
52
53
Ptr<Node>
54
PointToPointStarHelper::GetHub
()
const
55
{
56
return
m_hub
.
Get
(0);
57
}
58
59
Ptr<Node>
60
PointToPointStarHelper::GetSpokeNode
(uint32_t i)
const
61
{
62
return
m_spokes
.
Get
(i);
63
}
64
65
Ipv4Address
66
PointToPointStarHelper::GetHubIpv4Address
(uint32_t i)
const
67
{
68
return
m_hubInterfaces
.
GetAddress
(i);
69
}
70
71
Ipv4Address
72
PointToPointStarHelper::GetSpokeIpv4Address
(uint32_t i)
const
73
{
74
return
m_spokeInterfaces
.
GetAddress
(i);
75
}
76
77
Ipv6Address
78
PointToPointStarHelper::GetHubIpv6Address
(uint32_t i)
const
79
{
80
return
m_hubInterfaces6
.
GetAddress
(i, 1);
81
}
82
83
Ipv6Address
84
PointToPointStarHelper::GetSpokeIpv6Address
(uint32_t i)
const
85
{
86
return
m_spokeInterfaces6
.
GetAddress
(i, 1);
87
}
88
89
uint32_t
90
PointToPointStarHelper::SpokeCount
()
const
91
{
92
return
m_spokes
.
GetN
();
93
}
94
95
void
96
PointToPointStarHelper::InstallStack
(
InternetStackHelper
stack)
97
{
98
stack.
Install
(
m_hub
);
99
stack.
Install
(
m_spokes
);
100
}
101
102
void
103
PointToPointStarHelper::AssignIpv4Addresses
(
Ipv4AddressHelper
address)
104
{
105
for
(uint32_t i = 0; i <
m_spokes
.
GetN
(); ++i)
106
{
107
m_hubInterfaces
.
Add
(address.
Assign
(
m_hubDevices
.
Get
(i)));
108
m_spokeInterfaces
.
Add
(address.
Assign
(
m_spokeDevices
.
Get
(i)));
109
address.
NewNetwork
();
110
}
111
}
112
113
void
114
PointToPointStarHelper::AssignIpv6Addresses
(
Ipv6Address
addrBase,
Ipv6Prefix
prefix)
115
{
116
Ipv6AddressGenerator::Init
(addrBase, prefix);
117
Ipv6Address
v6network;
118
Ipv6AddressHelper
addressHelper;
119
120
for
(uint32_t i = 0; i <
m_spokes
.
GetN
(); ++i)
121
{
122
v6network =
Ipv6AddressGenerator::GetNetwork
(prefix);
123
addressHelper.
SetBase
(v6network, prefix);
124
125
Ipv6InterfaceContainer
ic = addressHelper.
Assign
(
m_hubDevices
.
Get
(i));
126
m_hubInterfaces6
.
Add
(ic);
127
ic = addressHelper.
Assign
(
m_spokeDevices
.
Get
(i));
128
m_spokeInterfaces6
.
Add
(ic);
129
130
Ipv6AddressGenerator::NextNetwork
(prefix);
131
}
132
}
133
134
void
135
PointToPointStarHelper::BoundingBox
(
double
ulx,
double
uly,
136
double
lrx,
double
lry)
137
{
138
double
xDist;
139
double
yDist;
140
if
(lrx > ulx)
141
{
142
xDist = lrx - ulx;
143
}
144
else
145
{
146
xDist = ulx - lrx;
147
}
148
if
(lry > uly)
149
{
150
yDist = lry - uly;
151
}
152
else
153
{
154
yDist = uly - lry;
155
}
156
157
// Place the hub
158
Ptr<Node>
hub =
m_hub
.
Get
(0);
159
Ptr<ConstantPositionMobilityModel>
hubLoc = hub->
GetObject
<
ConstantPositionMobilityModel
> ();
160
if
(hubLoc == 0)
161
{
162
hubLoc = CreateObject<ConstantPositionMobilityModel> ();
163
hub->
AggregateObject
(hubLoc);
164
}
165
Vector
hubVec (ulx + xDist/2.0, uly + yDist/2.0, 0);
166
hubLoc->SetPosition (hubVec);
167
168
double
spokeDist;
169
if
(xDist > yDist)
170
{
171
spokeDist = yDist/4.0;
172
}
173
else
174
{
175
spokeDist = xDist/4.0;
176
}
177
178
double
theta = 2*M_PI/
m_spokes
.
GetN
();
179
for
(uint32_t i = 0; i <
m_spokes
.
GetN
(); ++i)
180
{
181
Ptr<Node>
spokeNode =
m_spokes
.
Get
(i);
182
Ptr<ConstantPositionMobilityModel>
spokeLoc = spokeNode->
GetObject
<
ConstantPositionMobilityModel
> ();
183
if
(spokeLoc == 0)
184
{
185
spokeLoc = CreateObject<ConstantPositionMobilityModel> ();
186
spokeNode->
AggregateObject
(spokeLoc);
187
}
188
Vector
spokeVec (hubVec.
x
+ std::cos (theta*i) * spokeDist,
189
hubVec.
y
+ std::sin (theta*i) * spokeDist,
190
0);
191
spokeLoc->SetPosition (spokeVec);
192
}
193
}
194
195
}
// namespace ns3
src
point-to-point-layout
model
point-to-point-star.cc
Generated on Tue May 14 2013 11:08:32 for ns-3 by
1.8.1.2