NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.0: NDN, CCN, CCNx, content centric networks
API Documentation
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
rocketfuel-weights-reader.cpp
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
20
// Based on the code by Hajime Tazaki <tazaki@sfc.wide.ad.jp>
21
22
#include "
rocketfuel-weights-reader.hpp
"
23
24
#include "ns3/nstime.h"
25
#include "ns3/log.h"
26
#include "ns3/assert.h"
27
#include "ns3/names.h"
28
#include "ns3/net-device-container.h"
29
#include "ns3/point-to-point-helper.h"
30
#include "ns3/point-to-point-net-device.h"
31
#include "ns3/internet-stack-helper.h"
32
#include "ns3/ipv4-address-helper.h"
33
#include "ns3/ipv4-global-routing-helper.h"
34
#include "ns3/drop-tail-queue.h"
35
#include "ns3/ipv4-interface.h"
36
#include "ns3/ipv4.h"
37
#include "ns3/string.h"
38
#include "ns3/pointer.h"
39
#include "ns3/uinteger.h"
40
#include "ns3/ipv4-address.h"
41
42
#include "ns3/mobility-model.h"
43
44
#include <regex.h>
45
46
#include <boost/foreach.hpp>
47
#include <boost/lexical_cast.hpp>
48
49
#include <iomanip>
50
#include <set>
51
52
using namespace
std
;
53
54
NS_LOG_COMPONENT_DEFINE(
"RocketfuelWeightsReader"
);
55
56
namespace
ns3
{
57
58
RocketfuelWeightsReader::RocketfuelWeightsReader
(
const
std::string& path
/*=""*/
,
59
double
scale
/*=1.0*/
)
60
:
AnnotatedTopologyReader
(path, scale)
61
, m_defaultBandwidth(
"100Mbps"
)
62
{
63
NS_LOG_FUNCTION(
this
);
64
65
// TypeId tid;
66
// bool ok = TypeId::LookupByNameFailSafe ("ns3::SpringMobilityModel", &tid);
67
// if (ok)
68
// SetMobilityModel ("ns3::SpringMobilityModel");
69
// else
70
// Use default mobility model (supplied by AnnotatedTopologyReader)
71
}
72
73
RocketfuelWeightsReader::~RocketfuelWeightsReader
()
74
{
75
NS_LOG_FUNCTION(
this
);
76
}
77
78
void
79
RocketfuelWeightsReader::SetFileType
(uint8_t inputType)
80
{
81
m_inputType = inputType;
82
}
83
84
NodeContainer
85
RocketfuelWeightsReader::Read
()
86
{
87
if
(m_inputType ==
POSITIONS
)
88
return
AnnotatedTopologyReader::Read
();
89
90
ifstream topgen;
91
topgen.open(GetFileName().c_str());
92
93
if
(!topgen.is_open()) {
94
NS_LOG_ERROR(
"Cannot open file "
<< GetFileName() <<
" for reading"
);
95
return
m_nodes
;
96
}
97
98
map<string, set<string>> processedLinks;
// to eliminate duplications
99
bool
repeatedRun = LinksSize() > 0;
100
std::list<Link>::iterator
linkIterator = m_linksList.begin();
101
102
while
(!topgen.eof()) {
103
string
line;
104
getline(topgen, line);
105
if
(line ==
""
)
106
continue
;
107
if
(line[0] ==
'#'
)
108
continue
;
// comments
109
110
// NS_LOG_DEBUG ("Input: [" << line << "]");
111
112
istringstream lineBuffer(line);
113
string
from, to, attribute;
114
115
lineBuffer >> from >> to >> attribute;
116
117
if
(processedLinks[to].size() != 0
118
&& processedLinks[to].find(from) != processedLinks[to].end()) {
119
continue
;
// duplicated link
120
}
121
processedLinks[from].insert(to);
122
123
Ptr<Node> fromNode = Names::Find<Node>(
m_path
, from);
124
if
(fromNode == 0) {
125
fromNode =
CreateNode
(from, 0);
126
}
127
128
Ptr<Node> toNode = Names::Find<Node>(
m_path
, to);
129
if
(toNode == 0) {
130
toNode =
CreateNode
(to, 0);
131
}
132
133
Link* link;
134
if
(!repeatedRun)
135
link =
new
Link(fromNode, from, toNode, to);
136
else
{
137
NS_ASSERT(linkIterator != m_linksList.end());
138
link = &(*linkIterator);
139
140
linkIterator++;
141
}
142
143
switch
(m_inputType) {
144
case
LINKS
: {
145
// links only
146
// do nothing
147
break
;
148
}
149
case
WEIGHTS
: {
150
if
(attribute ==
""
)
151
attribute =
"1"
;
152
uint16_t metric = boost::lexical_cast<uint16_t>(attribute);
153
link->SetAttribute(
"OSPF"
, boost::lexical_cast<string>(metric));
154
break
;
155
}
156
case
LATENCIES
:
157
if
(attribute ==
""
)
158
attribute =
"1"
;
159
160
link->SetAttribute(
"DataRate"
, m_defaultBandwidth);
161
link->SetAttribute(
"Delay"
, attribute +
"ms"
);
162
if
(!m_queue.empty()) {
163
link->SetAttribute(
"MaxPackets"
, m_queue);
164
}
165
break
;
166
default
:
167
;
//
168
}
169
170
NS_LOG_DEBUG(
"Link "
<< from <<
" <==> "
<< to <<
" / "
<< attribute);
171
if
(!repeatedRun) {
172
AddLink(*link);
173
delete
link;
174
}
175
}
176
177
topgen.close();
178
179
if
(!repeatedRun) {
180
NS_LOG_INFO(
"Rocketfuel topology created with "
<<
m_nodes
.GetN() <<
" nodes and "
181
<< LinksSize() <<
" links"
);
182
}
183
return
m_nodes
;
184
}
185
186
void
187
RocketfuelWeightsReader::Commit
()
188
{
189
ApplySettings
();
190
191
// SpringMobilityHelper::InstallSprings (LinksBegin (), LinksEnd ());
192
}
193
194
}
/* namespace ns3 */
ns3::RocketfuelWeightsReader::LATENCIES
Definition:
rocketfuel-weights-reader.hpp:63
ns3::RocketfuelWeightsReader::WEIGHTS
Definition:
rocketfuel-weights-reader.hpp:63
RocketfuelWeightsReader
RocketfuelWeightsReader
Definition:
rocketfuel-weights-reader.cpp:54
ns3::AnnotatedTopologyReader::m_nodes
NodeContainer m_nodes
Definition:
annotated-topology-reader.hpp:136
ns3::RocketfuelWeightsReader::Read
virtual NodeContainer Read(void)
Main topology reading function.
Definition:
rocketfuel-weights-reader.cpp:85
std
STL namespace.
ns3::AnnotatedTopologyReader
This class reads annotated topology and apply settings to the corresponding nodes and links...
Definition:
annotated-topology-reader.hpp:36
rocketfuel-weights-reader.hpp
nfd::cs::iterator
Table::const_iterator iterator
Definition:
cs-internal.hpp:41
ns3::AnnotatedTopologyReader::ApplySettings
void ApplySettings()
This method applies setting to corresponding nodes and links NetDeviceContainer must be allocated Nod...
Definition:
annotated-topology-reader.cpp:328
ns3
Copyright (c) 2011-2015 Regents of the University of California.
Definition:
content-store-impl.cpp:38
ns3::AnnotatedTopologyReader::Read
virtual NodeContainer Read()
Main annotated topology reading function.
Definition:
annotated-topology-reader.cpp:155
ns3::RocketfuelWeightsReader::Commit
void Commit()
Definition:
rocketfuel-weights-reader.cpp:187
ns3::RocketfuelWeightsReader::SetFileType
void SetFileType(uint8_t inputType)
Definition:
rocketfuel-weights-reader.cpp:79
ns3::RocketfuelWeightsReader::~RocketfuelWeightsReader
virtual ~RocketfuelWeightsReader()
Definition:
rocketfuel-weights-reader.cpp:73
ns3::RocketfuelWeightsReader::POSITIONS
Definition:
rocketfuel-weights-reader.hpp:63
ns3::RocketfuelWeightsReader::LINKS
Definition:
rocketfuel-weights-reader.hpp:63
ns3::AnnotatedTopologyReader::m_path
std::string m_path
Definition:
annotated-topology-reader.hpp:135
ns3::AnnotatedTopologyReader::CreateNode
Ptr< Node > CreateNode(const std::string name, uint32_t systemId)
Definition:
annotated-topology-reader.cpp:110
ndnSIM
utils
topology
rocketfuel-weights-reader.cpp
Generated on Tue Feb 23 2016 22:18:45 for ndnSIM by
1.8.11