|
|
| 34 |
|
34 |
|
| 35 |
NS_OBJECT_ENSURE_REGISTERED (RocketfuelTopologyReader); |
35 |
NS_OBJECT_ENSURE_REGISTERED (RocketfuelTopologyReader); |
| 36 |
|
36 |
|
| 37 |
TypeId RocketfuelTopologyReader::GetTypeId (void) |
|
|
| 38 |
{ |
| 39 |
static TypeId tid = TypeId ("ns3::RocketfuelTopologyReader") |
| 40 |
.SetParent<Object> () |
| 41 |
; |
| 42 |
return tid; |
| 43 |
} |
| 44 |
|
| 45 |
RocketfuelTopologyReader::RocketfuelTopologyReader () |
| 46 |
{ |
| 47 |
NS_LOG_FUNCTION (this); |
| 48 |
} |
| 49 |
|
| 50 |
RocketfuelTopologyReader::~RocketfuelTopologyReader () |
| 51 |
{ |
| 52 |
NS_LOG_FUNCTION (this); |
| 53 |
} |
| 54 |
|
| 55 |
/* uid @loc [+] [bb] (num_neigh) [&ext] -> <nuid-1> <nuid-2> ... {-euid} ... =name[!] rn */ |
| 56 |
|
37 |
|
| 57 |
#define REGMATCH_MAX 16 |
38 |
#define REGMATCH_MAX 16 |
| 58 |
|
39 |
|
|
|
| 73 |
#define ROCKETFUEL_WEIGHTS_LINE \ |
54 |
#define ROCKETFUEL_WEIGHTS_LINE \ |
| 74 |
START "([^ \t]+)" SPACE "([^ \t]+)" SPACE "([0-9.]+)" MAYSPACE END |
55 |
START "([^ \t]+)" SPACE "([^ \t]+)" SPACE "([0-9.]+)" MAYSPACE END |
| 75 |
|
56 |
|
| 76 |
int linksNumber = 0; |
57 |
|
| 77 |
int nodesNumber = 0; |
58 |
TypeId RocketfuelTopologyReader::GetTypeId (void) |
| 78 |
std::map<std::string, Ptr<Node> > nodeMap; |
59 |
{ |
|
|
60 |
static TypeId tid = TypeId ("ns3::RocketfuelTopologyReader") |
| 61 |
.SetParent<Object> () |
| 62 |
; |
| 63 |
return tid; |
| 64 |
} |
| 65 |
|
| 66 |
RocketfuelTopologyReader::RocketfuelTopologyReader () |
| 67 |
{ |
| 68 |
NS_LOG_FUNCTION (this); |
| 69 |
m_linksNumber = 0; |
| 70 |
m_nodesNumber = 0; |
| 71 |
} |
| 72 |
|
| 73 |
RocketfuelTopologyReader::~RocketfuelTopologyReader () |
| 74 |
{ |
| 75 |
NS_LOG_FUNCTION (this); |
| 76 |
m_nodeMap.clear(); |
| 77 |
} |
| 78 |
|
| 79 |
/* uid @loc [+] [bb] (num_neigh) [&ext] -> <nuid-1> <nuid-2> ... {-euid} ... =name[!] rn */ |
| 79 |
|
80 |
|
| 80 |
void |
81 |
void |
| 81 |
PrintNodeInfo (std::string & uid, std::string & loc, bool dns, bool bb, |
82 |
PrintNodeInfo (std::string & uid, std::string & loc, bool dns, bool bb, |
|
|
| 168 |
// Create node and link |
169 |
// Create node and link |
| 169 |
if (!uid.empty ()) |
170 |
if (!uid.empty ()) |
| 170 |
{ |
171 |
{ |
| 171 |
if (nodeMap[uid] == 0) |
172 |
if (m_nodeMap[uid] == 0) |
| 172 |
{ |
173 |
{ |
| 173 |
Ptr<Node> tmpNode = CreateObject<Node> (); |
174 |
Ptr<Node> tmpNode = CreateObject<Node> (); |
| 174 |
nodeMap[uid] = tmpNode; |
175 |
m_nodeMap[uid] = tmpNode; |
| 175 |
nodes.Add (tmpNode); |
176 |
nodes.Add (tmpNode); |
| 176 |
nodesNumber++; |
177 |
m_nodesNumber++; |
| 177 |
} |
178 |
} |
| 178 |
|
179 |
|
| 179 |
for (uint32_t i = 0; i < neigh_list.size (); ++i) |
180 |
for (uint32_t i = 0; i < neigh_list.size (); ++i) |
|
|
| 185 |
return nodes; |
186 |
return nodes; |
| 186 |
} |
187 |
} |
| 187 |
|
188 |
|
| 188 |
if (nodeMap[nuid] == 0) |
189 |
if (m_nodeMap[nuid] == 0) |
| 189 |
{ |
190 |
{ |
| 190 |
Ptr<Node> tmpNode = CreateObject<Node> (); |
191 |
Ptr<Node> tmpNode = CreateObject<Node> (); |
| 191 |
nodeMap[nuid] = tmpNode; |
192 |
m_nodeMap[nuid] = tmpNode; |
| 192 |
nodes.Add (tmpNode); |
193 |
nodes.Add (tmpNode); |
| 193 |
nodesNumber++; |
194 |
m_nodesNumber++; |
| 194 |
} |
195 |
} |
| 195 |
NS_LOG_INFO (linksNumber << ":" << nodesNumber << " From: " << uid << " to: " << nuid); |
196 |
NS_LOG_INFO (m_linksNumber << ":" << m_nodesNumber << " From: " << uid << " to: " << nuid); |
| 196 |
Link link (nodeMap[uid], uid, nodeMap[nuid], nuid); |
197 |
Link link (m_nodeMap[uid], uid, m_nodeMap[nuid], nuid); |
| 197 |
AddLink (link); |
198 |
AddLink (link); |
| 198 |
linksNumber++; |
199 |
m_linksNumber++; |
| 199 |
} |
200 |
} |
| 200 |
} |
201 |
} |
| 201 |
return nodes; |
202 |
return nodes; |
|
|
| 223 |
// Create node and link |
224 |
// Create node and link |
| 224 |
if (!sname.empty () && !tname.empty ()) |
225 |
if (!sname.empty () && !tname.empty ()) |
| 225 |
{ |
226 |
{ |
| 226 |
if (nodeMap[sname] == 0) |
227 |
if (m_nodeMap[sname] == 0) |
| 227 |
{ |
228 |
{ |
| 228 |
Ptr<Node> tmpNode = CreateObject<Node> (); |
229 |
Ptr<Node> tmpNode = CreateObject<Node> (); |
| 229 |
nodeMap[sname] = tmpNode; |
230 |
m_nodeMap[sname] = tmpNode; |
| 230 |
nodes.Add (tmpNode); |
231 |
nodes.Add (tmpNode); |
| 231 |
nodesNumber++; |
232 |
m_nodesNumber++; |
| 232 |
} |
233 |
} |
| 233 |
|
234 |
|
| 234 |
if (nodeMap[tname] == 0) |
235 |
if (m_nodeMap[tname] == 0) |
| 235 |
{ |
236 |
{ |
| 236 |
Ptr<Node> tmpNode = CreateObject<Node> (); |
237 |
Ptr<Node> tmpNode = CreateObject<Node> (); |
| 237 |
nodeMap[tname] = tmpNode; |
238 |
m_nodeMap[tname] = tmpNode; |
| 238 |
nodes.Add (tmpNode); |
239 |
nodes.Add (tmpNode); |
| 239 |
nodesNumber++; |
240 |
m_nodesNumber++; |
| 240 |
} |
241 |
} |
| 241 |
NS_LOG_INFO (linksNumber << ":" << nodesNumber << " From: " << sname << " to: " << tname); |
242 |
NS_LOG_INFO (m_linksNumber << ":" << m_nodesNumber << " From: " << sname << " to: " << tname); |
| 242 |
TopologyReader::ConstLinksIterator iter; |
243 |
TopologyReader::ConstLinksIterator iter; |
| 243 |
bool found = false; |
244 |
bool found = false; |
| 244 |
for (iter = LinksBegin (); iter != LinksEnd (); iter++) |
245 |
for (iter = LinksBegin (); iter != LinksEnd (); iter++) |
| 245 |
{ |
246 |
{ |
| 246 |
if ((iter->GetFromNode () == nodeMap[tname]) |
247 |
if ((iter->GetFromNode () == m_nodeMap[tname]) |
| 247 |
&& (iter->GetToNode () == nodeMap[sname])) |
248 |
&& (iter->GetToNode () == m_nodeMap[sname])) |
| 248 |
{ |
249 |
{ |
| 249 |
found = true; |
250 |
found = true; |
| 250 |
break; |
251 |
break; |
|
|
| 253 |
|
254 |
|
| 254 |
if (!found) |
255 |
if (!found) |
| 255 |
{ |
256 |
{ |
| 256 |
Link link (nodeMap[sname], sname, nodeMap[tname], tname); |
257 |
Link link (m_nodeMap[sname], sname, m_nodeMap[tname], tname); |
| 257 |
AddLink (link); |
258 |
AddLink (link); |
| 258 |
linksNumber++; |
259 |
m_linksNumber++; |
| 259 |
} |
260 |
} |
| 260 |
} |
261 |
} |
| 261 |
return nodes; |
262 |
return nodes; |
|
|
| 423 |
|
424 |
|
| 424 |
topgen.close (); |
425 |
topgen.close (); |
| 425 |
|
426 |
|
| 426 |
NS_LOG_INFO ("Rocketfuel topology created with " << nodesNumber << " nodes and " << linksNumber << " links"); |
427 |
NS_LOG_INFO ("Rocketfuel topology created with " << m_nodesNumber << " nodes and " << m_linksNumber << " links"); |
| 427 |
return nodes; |
428 |
return nodes; |
| 428 |
} |
429 |
} |
| 429 |
|
430 |
|