topology-read: (fixes #762) Automatically add names to the nodes read from topology files

This commit is contained in:
Tommaso Pecorella
2022-10-07 23:26:22 +02:00
parent d7249607a2
commit e66a50f843
4 changed files with 35 additions and 1 deletions

View File

@@ -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

View File

@@ -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++;

View File

@@ -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++;

View File

@@ -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++;