topology-read: (fixes #762) Automatically add names to the nodes read from topology files
This commit is contained in:
@@ -20,6 +20,22 @@ Currently there are three models:
|
||||
|
||||
An helper ``ns3::TopologyReaderHelper`` is provided to assist on trivial tasks.
|
||||
|
||||
In some cases it might not be simple to identify which |ns3| node corresponds to a given node in the
|
||||
topology file. To simplify this task, each node created by ``ns3::TopologyReaderHelper`` has a name.
|
||||
The name format is "<TopologyReader>/NodeName/<label>" where "<TopologyReader>" is either
|
||||
"InetTopology", "OrbisTopology", or "RocketFuelTopology", and "<label>" is the identifier of the
|
||||
node in the topology file (can be either a number or a string, depending on the file type).
|
||||
Assuming that there are 10 nodes, labeled with number starting from 0, the code could be::
|
||||
|
||||
for (uint32_t nodeNumber = 0; nodeNumber < 10; nodeNumber++)
|
||||
{
|
||||
Ptr<Node> node = Names::Find<Node>("InetTopology/NodeName/" + std::to_string(nodeNumber));
|
||||
if (node)
|
||||
{
|
||||
// Do something
|
||||
}
|
||||
}
|
||||
|
||||
A good source for topology data is also Archipelago_.
|
||||
|
||||
The current Archipelago Measurements_, monthly updated, are stored in the CAIDA website using
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "inet-topology-reader.h"
|
||||
|
||||
#include "ns3/log.h"
|
||||
#include "ns3/names.h"
|
||||
#include "ns3/node-container.h"
|
||||
|
||||
#include <cstdlib>
|
||||
@@ -35,7 +36,6 @@
|
||||
|
||||
namespace ns3
|
||||
{
|
||||
|
||||
NS_LOG_COMPONENT_DEFINE("InetTopologyReader");
|
||||
|
||||
NS_OBJECT_ENSURE_REGISTERED(InetTopologyReader);
|
||||
@@ -117,6 +117,8 @@ InetTopologyReader::Read()
|
||||
{
|
||||
NS_LOG_INFO("Node " << nodesNumber << " name: " << from);
|
||||
Ptr<Node> tmpNode = CreateObject<Node>();
|
||||
std::string nodeName = "InetTopology/NodeName/" + from;
|
||||
Names::Add(from, tmpNode);
|
||||
nodeMap[from] = tmpNode;
|
||||
nodes.Add(tmpNode);
|
||||
nodesNumber++;
|
||||
@@ -126,6 +128,8 @@ InetTopologyReader::Read()
|
||||
{
|
||||
NS_LOG_INFO("Node " << nodesNumber << " name: " << to);
|
||||
Ptr<Node> tmpNode = CreateObject<Node>();
|
||||
std::string nodename = "InetTopology/NodeName/" + to;
|
||||
Names::Add(nodename, tmpNode);
|
||||
nodeMap[to] = tmpNode;
|
||||
nodes.Add(tmpNode);
|
||||
nodesNumber++;
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "orbis-topology-reader.h"
|
||||
|
||||
#include "ns3/log.h"
|
||||
#include "ns3/names.h"
|
||||
#include "ns3/node-container.h"
|
||||
|
||||
#include <cstdlib>
|
||||
@@ -99,6 +100,8 @@ OrbisTopologyReader::Read()
|
||||
if (!nodeMap[from])
|
||||
{
|
||||
Ptr<Node> tmpNode = CreateObject<Node>();
|
||||
std::string nodename = "OrbisTopology/NodeName/" + from;
|
||||
Names::Add(nodename, tmpNode);
|
||||
nodeMap[from] = tmpNode;
|
||||
nodes.Add(tmpNode);
|
||||
nodesNumber++;
|
||||
@@ -107,6 +110,8 @@ OrbisTopologyReader::Read()
|
||||
if (!nodeMap[to])
|
||||
{
|
||||
Ptr<Node> tmpNode = CreateObject<Node>();
|
||||
std::string nodename = "OrbisTopology/NodeName/" + to;
|
||||
Names::Add(nodename, tmpNode);
|
||||
nodeMap[to] = tmpNode;
|
||||
nodes.Add(tmpNode);
|
||||
nodesNumber++;
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "rocketfuel-topology-reader.h"
|
||||
|
||||
#include "ns3/log.h"
|
||||
#include "ns3/names.h"
|
||||
#include "ns3/node-container.h"
|
||||
|
||||
#include <cstdlib>
|
||||
@@ -212,6 +213,8 @@ RocketfuelTopologyReader::GenerateFromMapsFile(const std::vector<std::string>& a
|
||||
if (!m_nodeMap[uid])
|
||||
{
|
||||
Ptr<Node> tmpNode = CreateObject<Node>();
|
||||
std::string nodename = "RocketFuelTopology/NodeName/" + uid;
|
||||
Names::Add(nodename, tmpNode);
|
||||
m_nodeMap[uid] = tmpNode;
|
||||
nodes.Add(tmpNode);
|
||||
m_nodesNumber++;
|
||||
@@ -227,6 +230,8 @@ RocketfuelTopologyReader::GenerateFromMapsFile(const std::vector<std::string>& a
|
||||
if (!m_nodeMap[nuid])
|
||||
{
|
||||
Ptr<Node> tmpNode = CreateObject<Node>();
|
||||
std::string nodename = "RocketFuelTopology/NodeName/" + nuid;
|
||||
Names::Add(nodename, tmpNode);
|
||||
m_nodeMap[nuid] = tmpNode;
|
||||
nodes.Add(tmpNode);
|
||||
m_nodesNumber++;
|
||||
@@ -270,6 +275,8 @@ RocketfuelTopologyReader::GenerateFromWeightsFile(const std::vector<std::string>
|
||||
if (!m_nodeMap[sname])
|
||||
{
|
||||
Ptr<Node> tmpNode = CreateObject<Node>();
|
||||
std::string nodename = "RocketFuelTopology/NodeName/" + sname;
|
||||
Names::Add(nodename, tmpNode);
|
||||
m_nodeMap[sname] = tmpNode;
|
||||
nodes.Add(tmpNode);
|
||||
m_nodesNumber++;
|
||||
@@ -278,6 +285,8 @@ RocketfuelTopologyReader::GenerateFromWeightsFile(const std::vector<std::string>
|
||||
if (!m_nodeMap[tname])
|
||||
{
|
||||
Ptr<Node> tmpNode = CreateObject<Node>();
|
||||
std::string nodename = "RocketFuelTopology/NodeName/" + tname;
|
||||
Names::Add(nodename, tmpNode);
|
||||
m_nodeMap[tname] = tmpNode;
|
||||
nodes.Add(tmpNode);
|
||||
m_nodesNumber++;
|
||||
|
||||
Reference in New Issue
Block a user