Simplified and unified implementation of RocketfuelWeightReader
diff --git a/bindings/modulegen__gcc_ILP32.py b/bindings/modulegen__gcc_ILP32.py
index 1d3fd2f..7d26839 100644
--- a/bindings/modulegen__gcc_ILP32.py
+++ b/bindings/modulegen__gcc_ILP32.py
@@ -190,6 +190,8 @@
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TopologyReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TopologyReader>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## nstime.h (module 'core'): ns3::Time [class]
@@ -199,7 +201,7 @@
## nstime.h (module 'core'): ns3::Time [class]
root_module['ns3::Time'].implicitly_converts_to(root_module['ns3::int64x64_t'])
## topology-reader.h (module 'topology-read'): ns3::TopologyReader [class]
- module.add_class('TopologyReader', import_from_module='ns.topology_read', parent=root_module['ns3::Object'])
+ module.add_class('TopologyReader', import_from_module='ns.topology_read', parent=root_module['ns3::SimpleRefCount< ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >'])
## topology-reader.h (module 'topology-read'): ns3::TopologyReader::Link [class]
module.add_class('Link', import_from_module='ns.topology_read', outer_class=root_module['ns3::TopologyReader'])
## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
@@ -297,7 +299,9 @@
## random-variable.h (module 'core'): ns3::RandomVariableValue [class]
module.add_class('RandomVariableValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::RocketfuelWeightsReader [class]
- module.add_class('RocketfuelWeightsReader', parent=root_module['ns3::TopologyReader'])
+ module.add_class('RocketfuelWeightsReader', parent=root_module['ns3::AnnotatedTopologyReader'])
+ ## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::RocketfuelWeightsReader [enumeration]
+ module.add_enum('', ['WEIGHTS', 'LATENCIES'], outer_class=root_module['ns3::RocketfuelWeightsReader'])
## nstime.h (module 'core'): ns3::TimeChecker [class]
module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -414,6 +418,7 @@
register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+ register_Ns3SimpleRefCount__Ns3TopologyReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3TopologyReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >'])
register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
register_Ns3Time_methods(root_module, root_module['ns3::Time'])
register_Ns3TopologyReader_methods(root_module, root_module['ns3::TopologyReader'])
@@ -2920,6 +2925,18 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3TopologyReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3TopologyReader__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >::SimpleRefCount(ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter< ns3::TopologyReader > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
cls.add_constructor([])
@@ -3100,11 +3117,6 @@
'std::string',
[],
is_const=True)
- ## topology-reader.h (module 'topology-read'): static ns3::TypeId ns3::TopologyReader::GetTypeId() [member function]
- cls.add_method('GetTypeId',
- 'ns3::TypeId',
- [],
- is_static=True)
## topology-reader.h (module 'topology-read'): std::_List_const_iterator<ns3::TopologyReader::Link> ns3::TopologyReader::LinksBegin() const [member function]
cls.add_method('LinksBegin',
'std::_List_const_iterator< ns3::TopologyReader::Link >',
@@ -3260,11 +3272,6 @@
return
def register_Ns3AnnotatedTopologyReader_methods(root_module, cls):
- ## annotated-topology-reader.h (module 'NDNabstraction'): static ns3::TypeId ns3::AnnotatedTopologyReader::GetTypeId() [member function]
- cls.add_method('GetTypeId',
- 'ns3::TypeId',
- [],
- is_static=True)
## annotated-topology-reader.h (module 'NDNabstraction'): ns3::AnnotatedTopologyReader::AnnotatedTopologyReader(std::string const & path="") [constructor]
cls.add_constructor([param('std::string const &', 'path', default_value='""')])
## annotated-topology-reader.h (module 'NDNabstraction'): ns3::NodeContainer ns3::AnnotatedTopologyReader::Read() [member function]
@@ -3276,6 +3283,20 @@
cls.add_method('AssignIpv4Addresses',
'void',
[param('ns3::Ipv4Address', 'base')])
+ ## annotated-topology-reader.h (module 'NDNabstraction'): void ns3::AnnotatedTopologyReader::SetBoundingBox(double ulx, double uly, double lrx, double lry) [member function]
+ cls.add_method('SetBoundingBox',
+ 'void',
+ [param('double', 'ulx'), param('double', 'uly'), param('double', 'lrx'), param('double', 'lry')])
+ ## annotated-topology-reader.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::AnnotatedTopologyReader::CreateNode(std::string const name) [member function]
+ cls.add_method('CreateNode',
+ 'ns3::Ptr< ns3::Node >',
+ [param('std::string const', 'name')],
+ visibility='protected')
+ ## annotated-topology-reader.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::AnnotatedTopologyReader::CreateNode(std::string const name, double posX, double posY) [member function]
+ cls.add_method('CreateNode',
+ 'ns3::Ptr< ns3::Node >',
+ [param('std::string const', 'name'), param('double', 'posX'), param('double', 'posY')],
+ visibility='protected')
return
def register_Ns3Application_methods(root_module, cls):
@@ -4864,26 +4885,17 @@
return
def register_Ns3RocketfuelWeightsReader_methods(root_module, cls):
- ## rocketfuel-weights-reader.h (module 'NDNabstraction'): static ns3::TypeId ns3::RocketfuelWeightsReader::GetTypeId() [member function]
- cls.add_method('GetTypeId',
- 'ns3::TypeId',
- [],
- is_static=True)
## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::RocketfuelWeightsReader::RocketfuelWeightsReader() [constructor]
cls.add_constructor([])
- ## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::NodeContainer ns3::RocketfuelWeightsReader::Read(std::string latenciesFile) [member function]
- cls.add_method('Read',
- 'ns3::NodeContainer',
- [param('std::string', 'latenciesFile')])
+ ## rocketfuel-weights-reader.h (module 'NDNabstraction'): void ns3::RocketfuelWeightsReader::SetFileType(uint8_t inputType) [member function]
+ cls.add_method('SetFileType',
+ 'void',
+ [param('uint8_t', 'inputType')])
## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::NodeContainer ns3::RocketfuelWeightsReader::Read() [member function]
cls.add_method('Read',
'ns3::NodeContainer',
[],
is_virtual=True)
- ## rocketfuel-weights-reader.h (module 'NDNabstraction'): void ns3::RocketfuelWeightsReader::ApplySettings(ns3::NetDeviceContainer * ndc, ns3::NodeContainer * nc) [member function]
- cls.add_method('ApplySettings',
- 'void',
- [param('ns3::NetDeviceContainer *', 'ndc'), param('ns3::NodeContainer *', 'nc')])
return
def register_Ns3TimeChecker_methods(root_module, cls):
diff --git a/bindings/modulegen__gcc_LP64.py b/bindings/modulegen__gcc_LP64.py
index 1d3fd2f..7d26839 100644
--- a/bindings/modulegen__gcc_LP64.py
+++ b/bindings/modulegen__gcc_LP64.py
@@ -190,6 +190,8 @@
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TopologyReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TopologyReader>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## nstime.h (module 'core'): ns3::Time [class]
@@ -199,7 +201,7 @@
## nstime.h (module 'core'): ns3::Time [class]
root_module['ns3::Time'].implicitly_converts_to(root_module['ns3::int64x64_t'])
## topology-reader.h (module 'topology-read'): ns3::TopologyReader [class]
- module.add_class('TopologyReader', import_from_module='ns.topology_read', parent=root_module['ns3::Object'])
+ module.add_class('TopologyReader', import_from_module='ns.topology_read', parent=root_module['ns3::SimpleRefCount< ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >'])
## topology-reader.h (module 'topology-read'): ns3::TopologyReader::Link [class]
module.add_class('Link', import_from_module='ns.topology_read', outer_class=root_module['ns3::TopologyReader'])
## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
@@ -297,7 +299,9 @@
## random-variable.h (module 'core'): ns3::RandomVariableValue [class]
module.add_class('RandomVariableValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::RocketfuelWeightsReader [class]
- module.add_class('RocketfuelWeightsReader', parent=root_module['ns3::TopologyReader'])
+ module.add_class('RocketfuelWeightsReader', parent=root_module['ns3::AnnotatedTopologyReader'])
+ ## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::RocketfuelWeightsReader [enumeration]
+ module.add_enum('', ['WEIGHTS', 'LATENCIES'], outer_class=root_module['ns3::RocketfuelWeightsReader'])
## nstime.h (module 'core'): ns3::TimeChecker [class]
module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -414,6 +418,7 @@
register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+ register_Ns3SimpleRefCount__Ns3TopologyReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3TopologyReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >'])
register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
register_Ns3Time_methods(root_module, root_module['ns3::Time'])
register_Ns3TopologyReader_methods(root_module, root_module['ns3::TopologyReader'])
@@ -2920,6 +2925,18 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3TopologyReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3TopologyReader__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >::SimpleRefCount(ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter< ns3::TopologyReader > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
cls.add_constructor([])
@@ -3100,11 +3117,6 @@
'std::string',
[],
is_const=True)
- ## topology-reader.h (module 'topology-read'): static ns3::TypeId ns3::TopologyReader::GetTypeId() [member function]
- cls.add_method('GetTypeId',
- 'ns3::TypeId',
- [],
- is_static=True)
## topology-reader.h (module 'topology-read'): std::_List_const_iterator<ns3::TopologyReader::Link> ns3::TopologyReader::LinksBegin() const [member function]
cls.add_method('LinksBegin',
'std::_List_const_iterator< ns3::TopologyReader::Link >',
@@ -3260,11 +3272,6 @@
return
def register_Ns3AnnotatedTopologyReader_methods(root_module, cls):
- ## annotated-topology-reader.h (module 'NDNabstraction'): static ns3::TypeId ns3::AnnotatedTopologyReader::GetTypeId() [member function]
- cls.add_method('GetTypeId',
- 'ns3::TypeId',
- [],
- is_static=True)
## annotated-topology-reader.h (module 'NDNabstraction'): ns3::AnnotatedTopologyReader::AnnotatedTopologyReader(std::string const & path="") [constructor]
cls.add_constructor([param('std::string const &', 'path', default_value='""')])
## annotated-topology-reader.h (module 'NDNabstraction'): ns3::NodeContainer ns3::AnnotatedTopologyReader::Read() [member function]
@@ -3276,6 +3283,20 @@
cls.add_method('AssignIpv4Addresses',
'void',
[param('ns3::Ipv4Address', 'base')])
+ ## annotated-topology-reader.h (module 'NDNabstraction'): void ns3::AnnotatedTopologyReader::SetBoundingBox(double ulx, double uly, double lrx, double lry) [member function]
+ cls.add_method('SetBoundingBox',
+ 'void',
+ [param('double', 'ulx'), param('double', 'uly'), param('double', 'lrx'), param('double', 'lry')])
+ ## annotated-topology-reader.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::AnnotatedTopologyReader::CreateNode(std::string const name) [member function]
+ cls.add_method('CreateNode',
+ 'ns3::Ptr< ns3::Node >',
+ [param('std::string const', 'name')],
+ visibility='protected')
+ ## annotated-topology-reader.h (module 'NDNabstraction'): ns3::Ptr<ns3::Node> ns3::AnnotatedTopologyReader::CreateNode(std::string const name, double posX, double posY) [member function]
+ cls.add_method('CreateNode',
+ 'ns3::Ptr< ns3::Node >',
+ [param('std::string const', 'name'), param('double', 'posX'), param('double', 'posY')],
+ visibility='protected')
return
def register_Ns3Application_methods(root_module, cls):
@@ -4864,26 +4885,17 @@
return
def register_Ns3RocketfuelWeightsReader_methods(root_module, cls):
- ## rocketfuel-weights-reader.h (module 'NDNabstraction'): static ns3::TypeId ns3::RocketfuelWeightsReader::GetTypeId() [member function]
- cls.add_method('GetTypeId',
- 'ns3::TypeId',
- [],
- is_static=True)
## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::RocketfuelWeightsReader::RocketfuelWeightsReader() [constructor]
cls.add_constructor([])
- ## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::NodeContainer ns3::RocketfuelWeightsReader::Read(std::string latenciesFile) [member function]
- cls.add_method('Read',
- 'ns3::NodeContainer',
- [param('std::string', 'latenciesFile')])
+ ## rocketfuel-weights-reader.h (module 'NDNabstraction'): void ns3::RocketfuelWeightsReader::SetFileType(uint8_t inputType) [member function]
+ cls.add_method('SetFileType',
+ 'void',
+ [param('uint8_t', 'inputType')])
## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::NodeContainer ns3::RocketfuelWeightsReader::Read() [member function]
cls.add_method('Read',
'ns3::NodeContainer',
[],
is_virtual=True)
- ## rocketfuel-weights-reader.h (module 'NDNabstraction'): void ns3::RocketfuelWeightsReader::ApplySettings(ns3::NetDeviceContainer * ndc, ns3::NodeContainer * nc) [member function]
- cls.add_method('ApplySettings',
- 'void',
- [param('ns3::NetDeviceContainer *', 'ndc'), param('ns3::NodeContainer *', 'nc')])
return
def register_Ns3TimeChecker_methods(root_module, cls):
diff --git a/examples/sprint-topology.cc b/examples/sprint-topology.cc
index ba3d484..5efffeb 100644
--- a/examples/sprint-topology.cc
+++ b/examples/sprint-topology.cc
@@ -30,7 +30,6 @@
#include <sstream>
#include "ns3/rocketfuel-topology-reader.h"
-
using namespace ns3;
NS_LOG_COMPONENT_DEFINE ("CcnxSprintTopology");
@@ -40,43 +39,31 @@
{
Packet::EnableChecking();
Packet::EnablePrinting();
- std::string input ("./src/NDNabstraction/examples/sprint.weights");
+ std::string weights ("./src/NDNabstraction/examples/sprint.weights");
+ std::string latencies ("./src/NDNabstraction/examples/sprint.latencies");
// ------------------------------------------------------------
// -- Read topology data.
// --------------------------------------------
- Ptr<RocketfuelWeightsReader> reader = CreateObject<RocketfuelWeightsReader> ();
- reader->SetFileName (input);
+ RocketfuelWeightsReader reader;
+
+ reader.SetFileName (weights);
+ reader.SetFileType (RocketfuelWeightsReader::WEIGHTS);
+ NodeContainer nodes = reader.Read ();
+
+ reader.SetFileName (latencies);
+ reader.SetFileType (RocketfuelWeightsReader::LATENCIES);
+ reader.Read ();
- NodeContainer nodes;
- if (reader != 0)
- {
- nodes = reader->Read ("./src/NDNabstraction/examples/sprint.latencies");
- }
-
- if (reader->LinksSize () == 0)
+ if (reader.LinksSize () == 0)
{
NS_LOG_ERROR ("Problems reading the topology file. Failing.");
return -1;
}
NS_LOG_INFO("Nodes = " << nodes.GetN());
- NS_LOG_INFO("Links = " << reader->LinksSize ());
-
- int totlinks = reader->LinksSize ();
- ///*** applying settings
- NS_LOG_INFO ("creating node containers");
- NodeContainer* nc = new NodeContainer[totlinks];
- TopologyReader::ConstLinksIterator iter;
- int i = 0;
- for ( iter = reader->LinksBegin (); iter != reader->LinksEnd (); iter++, i++ )
- {
- nc[i] = NodeContainer (iter->GetFromNode (), iter->GetToNode ());
- }
-
- NetDeviceContainer* ndc = new NetDeviceContainer[totlinks];
- reader->ApplySettings(ndc,nc);
+ NS_LOG_INFO("Links = " << reader.LinksSize ());
NS_LOG_INFO ("Run Simulation.");
Simulator::Run ();
diff --git a/model/annotated-topology-reader.cc b/model/annotated-topology-reader.cc
index 76880a5..eb56339 100644
--- a/model/annotated-topology-reader.cc
+++ b/model/annotated-topology-reader.cc
@@ -39,7 +39,6 @@
#include "ns3/ipv4-address.h"
#include "ns3/constant-position-mobility-model.h"
-#include "ns3/random-variable.h"
#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>
@@ -53,42 +52,48 @@
NS_LOG_COMPONENT_DEFINE ("AnnotatedTopologyReader");
-NS_OBJECT_ENSURE_REGISTERED (AnnotatedTopologyReader);
-
-TypeId AnnotatedTopologyReader::GetTypeId (void)
-{
- static TypeId tid = TypeId ("ns3::AnnotatedTopologyReader")
- .SetParent<Object> ()
- ;
- return tid;
-}
-
AnnotatedTopologyReader::AnnotatedTopologyReader (const std::string &path)
: m_path (path)
- // , m_ulx (0)
- // , m_uly (0)
- // , m_lrx (100.0)
- // , m_lry (100.0)
+ , m_randX (0, 100.0)
+ , m_randY (0, 100.0)
{
NS_LOG_FUNCTION (this);
}
-// void
-// AnnotatedTopologyReader::SetBoundingBox (double ulx, double uly, double lrx, double lry)
-// {
-// NS_LOG_FUNCTION (this << ulx << uly << lrx << lry);
+void
+AnnotatedTopologyReader::SetBoundingBox (double ulx, double uly, double lrx, double lry)
+{
+ NS_LOG_FUNCTION (this << ulx << uly << lrx << lry);
-// m_ulx = ulx;
-// m_uly = uly;
-// m_lrx = lrx;
-// m_lry = lry;
-// }
+ m_randX = UniformVariable (ulx, lrx);
+ m_randY = UniformVariable (uly, lry);
+}
AnnotatedTopologyReader::~AnnotatedTopologyReader ()
{
NS_LOG_FUNCTION (this);
}
+Ptr<Node>
+AnnotatedTopologyReader::CreateNode (const std::string name)
+{
+ return CreateNode (name, m_randX.GetValue (), m_randX.GetValue ());
+}
+
+Ptr<Node>
+AnnotatedTopologyReader::CreateNode (const std::string name, double posX, double posY)
+{
+ Ptr<Node> node = CreateObject<Node> ();
+ Ptr<ConstantPositionMobilityModel> loc = CreateObject<ConstantPositionMobilityModel> ();
+ node->AggregateObject (loc);
+
+ loc->SetPosition (Vector (posX, posY, 0));
+
+ Names::Add (m_path, name, node);
+
+ return node;
+}
+
NodeContainer
AnnotatedTopologyReader::Read (void)
{
@@ -102,9 +107,6 @@
return nodes;
}
- uint32_t linksNumber = 0;
- uint32_t nodesNumber = 0;
-
while (!topgen.eof ())
{
string line;
@@ -125,15 +127,8 @@
double latitude, longitude;
lineBuffer >> name >> city >> latitude >> longitude;
- Ptr<Node> node = CreateObject<Node> ();
- Ptr<ConstantPositionMobilityModel> loc = CreateObject<ConstantPositionMobilityModel> ();
- node->AggregateObject (loc);
-
- loc->SetPosition (Vector (2*longitude, -2*latitude, 0));
-
- Names::Add (m_path, name, node);
+ Ptr<Node> node = CreateNode (name, 2*longitude, -2*latitude);
nodes.Add (node);
- nodesNumber++;
}
map<string, set<string> > processedLinks; // to eliminate duplications
@@ -175,11 +170,9 @@
AddLink (link);
NS_LOG_DEBUG ("New link " << from << " <==> " << to << " / " << capacity << "Kbps with " << metric << " metric");
-
- linksNumber++;
}
- NS_LOG_INFO ("Annotated topology created with " << nodesNumber << " nodes and " << linksNumber << " links");
+ NS_LOG_INFO ("Annotated topology created with " << nodes.GetN () << " nodes and " << LinksSize () << " links");
topgen.close ();
ApplySettings ();
diff --git a/model/annotated-topology-reader.h b/model/annotated-topology-reader.h
index d97209b..06bbe2a 100644
--- a/model/annotated-topology-reader.h
+++ b/model/annotated-topology-reader.h
@@ -22,23 +22,18 @@
#define __ANNOTATED_TOPOLOGY_READER_H__
#include "ns3/topology-reader.h"
+#include "ns3/random-variable.h"
namespace ns3
{
/**
-* \brief This class reads annotated topology and apply settings to the corresponding nodes and links
-* Input File Format
-* 1st line is NumberOfNodes TAB NumberofLinks
-* Nth line is NodeID1 TAB NodeID2 TAB DataRateKBPS TAB OSPF TAB DelayMiliseconds TAB QueueSizeInPacketsNode1 TAB QueueSizeInPacketsNode2 TAB X-coordinate-node1 TAB Y-coordinate-node1 TAB X-coordinate-node2 TAB Y-coordinate-node2
-*
-*/
+ * \brief This class reads annotated topology and apply settings to the corresponding nodes and links
+ *
+ */
class AnnotatedTopologyReader : public TopologyReader
{
public:
- typedef std::list< Link >::iterator LinksIterator;
- static TypeId GetTypeId (void);
-
/**
* \brief Constructor
*
@@ -47,24 +42,18 @@
* \see ns3::Names class
*/
AnnotatedTopologyReader (const std::string &path="");
- virtual ~AnnotatedTopologyReader ();
+ virtual ~AnnotatedTopologyReader ();
- /**
- * \brief Main annotated topology reading function.
- *
- * This method opens an input stream and reads topology file with annotations.
- *
- * \return the container of the nodes created (or empty container if there was an error)
- */
+ /**
+ * \brief Main annotated topology reading function.
+ *
+ * This method opens an input stream and reads topology file with annotations.
+ *
+ * \return the container of the nodes created (or empty container if there was an error)
+ */
virtual
NodeContainer Read (void);
- // /**
- // * \brief Set bounding box for the nodes
- // */
- // void
- // SetBoundingBox (double ulx, double uly, double lrx, double lry);
-
/**
* \brief Assign IPv4 addresses to all links
*
@@ -76,28 +65,38 @@
*/
void
AssignIpv4Addresses (Ipv4Address base);
+
+ void
+ SetBoundingBox (double ulx, double uly, double lrx, double lry);
+
+protected:
+ Ptr<Node>
+ CreateNode (const std::string name);
+
+ Ptr<Node>
+ CreateNode (const std::string name, double posX, double posY);
private:
/**
- * \brief This method applies setting to corresponding nodes and links
- * NetDeviceContainer must be allocated
- * NodeContainer from Read method
- */
+ * \brief This method applies setting to corresponding nodes and links
+ * NetDeviceContainer must be allocated
+ * NodeContainer from Read method
+ */
void ApplySettings ();
void ApplyOspfMetric ();
+protected:
+ std::string m_path;
+
private:
AnnotatedTopologyReader (const AnnotatedTopologyReader&);
AnnotatedTopologyReader& operator= (const AnnotatedTopologyReader&);
- std::string m_path;
- // double m_ulx;
- // double m_uly;
- // double m_lrx;
- // double m_lry;
+ UniformVariable m_randX;
+ UniformVariable m_randY;
};
-}
+}
#endif
diff --git a/model/rocketfuel-weights-reader.cc b/model/rocketfuel-weights-reader.cc
index 246d1b0..ac7f6b1 100644
--- a/model/rocketfuel-weights-reader.cc
+++ b/model/rocketfuel-weights-reader.cc
@@ -50,518 +50,114 @@
#include <iomanip>
#include <set>
+using namespace std;
+
+NS_LOG_COMPONENT_DEFINE ("RocketfuelWeightsReader");
namespace ns3 {
- NS_LOG_COMPONENT_DEFINE ("RocketfuelWeightsReader");
-
- NS_OBJECT_ENSURE_REGISTERED (RocketfuelWeightsReader);
-
- TypeId RocketfuelWeightsReader::GetTypeId (void)
- {
- static TypeId tid = TypeId ("ns3::RocketfuelWeightsReader")
- .SetParent<Object> ()
- ;
- return tid;
- }
-
- RocketfuelWeightsReader::RocketfuelWeightsReader ()
- {
- NS_LOG_FUNCTION (this);
- }
-
- RocketfuelWeightsReader::~RocketfuelWeightsReader ()
- {
- NS_LOG_FUNCTION (this);
- }
-
- /* uid @loc [+] [bb] (num_neigh) [&ext] -> <nuid-1> <nuid-2> ... {-euid} ... =name[!] rn */
-
-#define REGMATCH_MAX 16
-
-#define START "^"
-#define END "$"
-#define SPACE "[ \t]+"
-#define MAYSPACE "[ \t]*"
-
-#define ROCKETFUEL_MAPS_LINE \
-START "(-*[0-9]+)" SPACE "(@[?A-Za-z0-9,+]+)" SPACE \
-"(\\+)*" MAYSPACE "(bb)*" MAYSPACE \
-"\\(([0-9]+)\\)" SPACE "(&[0-9]+)*" MAYSPACE \
-"->" MAYSPACE "(<[0-9 \t<>]+>)*" MAYSPACE \
-"(\\{-[0-9\\{\\} \t-]+\\})*" SPACE \
-"=([A-Za-z0-9.!-]+)" SPACE "r([0-9])" \
-MAYSPACE END
-
-#define ROCKETFUEL_WEIGHTS_LINE \
-START "([^ \t]+)" SPACE "([^ \t]+)" SPACE "([0-9.]+)" MAYSPACE END
-
- int linksNumber = 0;
- int nodesNumber = 0;
- std::map<std::string, Ptr<Node> > nodeMap;
-
- NodeContainer
- RocketfuelWeightsReader::GenerateFromWeightsFile (int argc, char *argv[], char *argl[])
- {
- /* uid @loc [+] [bb] (num_neigh) [&ext] -> <nuid-1> <nuid-2> ... {-euid} ... =name[!] rn */
- std::string sname;
- std::string tname;
- char *endptr;
- NodeContainer nodes;
-
- sname = argv[0];
- tname = argv[1];
- double v = strtod (argv[2], &endptr); // weight
- double l = strtod (argl[2], &endptr); //latency
- // cast v to void , to suppress 'v' set but not used compiler warning
- //(void) v;
-
-
-
- if (*endptr != '\0')
- {
- NS_LOG_WARN ("invalid weight: " << argv[2]);
- return nodes;
- }
-
- // Create node and link
- if (!sname.empty () && !tname.empty ())
- {
- if (nodeMap[sname] == 0)
- {
- Ptr<Node> tmpNode = CreateObject<Node> ();
- nodeMap[sname] = tmpNode;
- nodes.Add (tmpNode);
- nodesNumber++;
- }
-
- if (nodeMap[tname] == 0)
- {
- Ptr<Node> tmpNode = CreateObject<Node> ();
- nodeMap[tname] = tmpNode;
- nodes.Add (tmpNode);
- nodesNumber++;
- }
- NS_LOG_INFO (linksNumber << ":" << nodesNumber << " From: " << sname << " to: " << tname);
- TopologyReader::ConstLinksIterator iter;
- bool found = false;
- for (iter = LinksBegin (); iter != LinksEnd (); iter++)
- {
- if ((iter->GetFromNode () == nodeMap[tname])
- && (iter->GetToNode () == nodeMap[sname]))
- {
- found = true;
- break;
- }
- }
-
- if (!found)
- {
- Link link (nodeMap[sname], sname, nodeMap[tname], tname);
-
- std::ostringstream s;
- s << std::setprecision(2) << v;
- std::string ss = s.str();
- link.SetAttribute ("OSPF", ss);
-
- std::ostringstream s2;
- s2 << std::setprecision(2) << l;
- std::string ss2 = s2.str();
- link.SetAttribute("Latency", ss2);
- NS_LOG_INFO("Written Latency = " << ss2);
-
-
- AddLink (link);
- linksNumber++;
- }
- }
- return nodes;
- }
-
- enum RocketfuelWeightsReader::RF_FileType
- RocketfuelWeightsReader::GetFileType (const char *line)
- {
- int ret;
- regmatch_t regmatch[REGMATCH_MAX];
- regex_t regex;
- char errbuf[512];
-
- // Check whether MAPS file or not
- ret = regcomp (®ex, ROCKETFUEL_MAPS_LINE, REG_EXTENDED | REG_NEWLINE);
- if (ret != 0)
- {
- regerror (ret, ®ex, errbuf, sizeof (errbuf));
- return RF_UNKNOWN;
- }
- ret = regexec (®ex, line, REGMATCH_MAX, regmatch, 0);
- if (ret != REG_NOMATCH)
- {
- regfree (®ex);
- return RF_MAPS;
- }
- regfree (®ex);
-
- // Check whether Weights file or not
- ret = regcomp (®ex, ROCKETFUEL_WEIGHTS_LINE, REG_EXTENDED | REG_NEWLINE);
- if (ret != 0)
- {
- regerror (ret, ®ex, errbuf, sizeof (errbuf));
- return RF_UNKNOWN;
- }
- ret = regexec (®ex, line, REGMATCH_MAX, regmatch, 0);
- if (ret != REG_NOMATCH)
- {
- regfree (®ex);
- return RF_WEIGHTS;
- }
- regfree (®ex);
-
- return RF_UNKNOWN;
- }
-
- NodeContainer
- RocketfuelWeightsReader::Read (void)
- {
- NodeContainer nodes;
- NS_LOG_INFO("Not implemented");
- return nodes;
- }
-
- NodeContainer
- RocketfuelWeightsReader::Read (std::string latenciesFile)
- {
- std::ifstream topgen;
- topgen.open (GetFileName ().c_str ());
- NodeContainer nodes;
-
- std::ifstream latencies;
- latencies.open(latenciesFile.c_str());
-
- std::istringstream lineBuffer;
- std::istringstream lineBuffer2;
- std::string line;
- std::string line2;
-
- int lineNumber = 0;
- enum RF_FileType ftype = RF_UNKNOWN;
- char errbuf[512];
-
- if (!topgen.is_open ())
- {
- NS_LOG_WARN ("Couldn't open the file " << GetFileName ());
- return nodes;
- }
-
- if (!latencies.is_open ())
- {
- NS_LOG_WARN ("Couldn't open Latencies file " << latenciesFile);
- return nodes;
- }
-
- while (!topgen.eof ())
- {
- int ret;
- int argc;
- char *argv[REGMATCH_MAX];
- char *argl[REGMATCH_MAX];
- char *buf;
- char *buf2;
-
- lineNumber++;
- line.clear ();
- line2.clear ();
- lineBuffer.clear ();
- lineBuffer2.clear ();
-
- getline (topgen, line);
- getline (latencies, line2);
- buf = (char *)line.c_str ();
- buf2 = (char *)line2.c_str ();
-
- if (lineNumber == 1)
- {
- ftype = GetFileType (buf);
- if (ftype == RF_UNKNOWN)
- {
- NS_LOG_INFO ("Unknown File Format (" << GetFileName () << ")");
- break;
- }
- }
-
- regmatch_t regmatch[REGMATCH_MAX];
- regex_t regex;
-
- if (ftype == RF_MAPS)
- {
- ret = regcomp (®ex, ROCKETFUEL_MAPS_LINE, REG_EXTENDED | REG_NEWLINE);
- if (ret != 0)
- {
- regerror (ret, ®ex, errbuf, sizeof (errbuf));
- regfree (®ex);
- break;
- }
-
- ret = regexec (®ex, buf, REGMATCH_MAX, regmatch, 0);
- if (ret == REG_NOMATCH)
- {
- NS_LOG_WARN ("match failed (maps file): %s" << buf);
- regfree (®ex);
- break;
- }
- }
- else if (ftype == RF_WEIGHTS)
- {
- ret = regcomp (®ex, ROCKETFUEL_WEIGHTS_LINE, REG_EXTENDED | REG_NEWLINE);
- if (ret != 0)
- {
- regerror (ret, ®ex, errbuf, sizeof (errbuf));
- regfree (®ex);
- break;
- }
-
- ret = regexec (®ex, buf, REGMATCH_MAX, regmatch, 0);
- regexec (®ex, buf2, REGMATCH_MAX, regmatch, 0);
- if (ret == REG_NOMATCH)
- {
- NS_LOG_WARN ("match failed (weights file): %s" << buf);
- regfree (®ex);
- break;
- }
- }
-
- line = buf;
- line2 = buf2;
- argc = 0;
-
- /* regmatch[0] is the entire strings that matched */
- for (int i = 1; i < REGMATCH_MAX; i++)
- {
- if (regmatch[i].rm_so == -1)
- {
- argv[i - 1] = NULL;
- argl[i - 1] = NULL;
- }
- else
- {
- line[regmatch[i].rm_eo] = '\0';
- line2[regmatch[i].rm_eo] = '\0';
- argv[i - 1] = &line[regmatch[i].rm_so];
- argl[i - 1] = &line2[regmatch[i].rm_so];
- argc = i;
- }
- }
-
- if (ftype == RF_MAPS)
- {
- NS_LOG_INFO("MAPS FILE is not supported");
- //nodes.Add (GenerateFromMapsFile (argc, argv));
- }
- else if (ftype == RF_WEIGHTS)
- {
- nodes.Add (GenerateFromWeightsFile (argc, argv, argl));
- }
- else
- {
- NS_LOG_WARN ("Unsupported file format (only Maps/Weights are supported)");
- }
-
- regfree (®ex);
- }
-
-
- topgen.close ();
- latencies.close ();
- NS_LOG_INFO ("Rocketfuel topology created with " << nodesNumber << " nodes and " << linksNumber << " links");
- return nodes;
- }
-
-
-void
-RocketfuelWeightsReader::ApplySettings(NetDeviceContainer* ndc, NodeContainer* nc)
+RocketfuelWeightsReader::RocketfuelWeightsReader ()
{
- InternetStackHelper stack;
- Ipv4AddressHelper address;
- address.SetBase ("10.1.0.0", "255.255.0.0");
-
- Ipv4GlobalRoutingHelper ipv4RoutingHelper ("ns3::Ipv4GlobalRoutingOrderedNexthops");
- stack.SetRoutingHelper (ipv4RoutingHelper);
-
- //This loop passes all links and checks if ipv4 is installed on the node
- // if not, it installs.
- // We can't use stack.Install(nc) because in nc there are duplicates and assertion fails
- TopologyReader::ConstLinksIterator iter;
- int j = 0;
- for ( iter = this->LinksBegin (); iter != this->LinksEnd (); iter++, j++ )
- {
- NodeContainer twoNodes = nc[j];
-
- Ptr<Node> nd = twoNodes.Get(0);
- if(nd==NULL)
- NS_LOG_INFO("nd = null");
-
- Ptr<Node> nd2 = twoNodes.Get(1);
- if(nd2==NULL)
- NS_LOG_INFO("nd2 = null");
-
- Ptr<Ipv4> ipv4 = nd->GetObject<Ipv4>();
- if(ipv4 == 0)
- {
- NS_LOG_INFO("ipv4 = null");
- stack.Install(nd);
- }
-
- Ptr<Ipv4> ipv42 = nd2->GetObject<Ipv4>();
- if(ipv42 == 0)
- {
- NS_LOG_INFO("ipv42 = null");
- stack.Install(nd2);
- }
-
- //NS_LOG_INFO("#netdevices = " << nd->GetNDevices());
- //NS_LOG_INFO("#netdevices = " << nd2->GetNDevices());
- }
-
- NS_LOG_INFO("ITER2");
-
- PointToPointHelper p2p;
- TopologyReader::ConstLinksIterator iter2;
- int i = 0;
- for ( iter2 = this->LinksBegin (); iter2 != this->LinksEnd (); iter2++, i++ )
- {
- p2p.SetDeviceAttribute("DataRate", StringValue("9920000Kbps"));
- //p2p.SetChannelAttribute("Delay", StringValue("10ms"));
- NS_LOG_INFO("Latency = " + iter2->GetAttribute("Latency")+"ms");
- p2p.SetChannelAttribute("Delay", StringValue(iter2->GetAttribute("Latency")+"ms"));
-
+ NS_LOG_FUNCTION (this);
+}
+
+RocketfuelWeightsReader::~RocketfuelWeightsReader ()
+{
+ NS_LOG_FUNCTION (this);
+}
- p2p.SetQueue("ns3::DropTailQueue","MaxPackets",StringValue("100"));
- ndc[i] = p2p.Install(nc[i]);
-
-
- NodeContainer twoNodes = nc[i];
-
- Ptr<Node> nd = twoNodes.Get(0);
- if(nd==NULL)
- NS_LOG_INFO("nd = null");
-
-
-
- Ptr<Node> nd2 = twoNodes.Get(1);
- if(nd2==NULL)
- NS_LOG_INFO("nd2 = null");
-
- //NS_LOG_INFO("1");
- NS_LOG_INFO("#netdevices = " << nd->GetNDevices());
- NS_LOG_INFO("#netdevices = " << nd2->GetNDevices());
-
- Ptr<NetDevice> device = nd->GetDevice(nd->GetNDevices()-1)->GetObject<PointToPointNetDevice> ();
-
- if(device==NULL)
- NS_LOG_INFO("device = 0");
-
- std::string ospf = iter2->GetAttribute("OSPF");
- double metric_d = atof(ospf.c_str());
- uint16_t metric = static_cast<int>(metric_d * 10);
- NS_LOG_INFO("OSPF metric = " << metric);
-
- {
- NetDeviceContainer* temp = new NetDeviceContainer[1];
- temp->Add(device);
- address.Assign (*temp);
- }
-
- Ptr<Ipv4> ipv4 = nd->GetObject<Ipv4>();
- if(ipv4 == 0)
- {
- NS_LOG_INFO("ipv4 = null");
- //stack.Install(nd);
- /*NetDeviceContainer* temp = new NetDeviceContainer[1];
- temp->Add(device);
- address.Assign (*temp);
- ipv4 = nd->GetObject<Ipv4>();*/
- }
-
- NS_LOG_INFO("Before GetID");
- int32_t interfaceId = ipv4->GetInterfaceForDevice(device);
- NS_LOG_INFO("InterfaceID = " << interfaceId);
- ipv4->SetMetric(interfaceId,metric);
-
-
-
-
-
- /*Ptr<Ipv4> ipv4 = nd->GetObject<Ipv4>();
-
- if(ipv4 == 0)
- NS_LOG_INFO("ipv4 = null");
- int32_t interfaceId = ipv4->GetInterfaceForDevice(device);
- ipv4->SetMetric(interfaceId,metric);*/
-
- //Ptr<Ipv4Interface> interface = nd->GetDevice(nd->GetNDevices()-1)->GetObject<Ipv4Interface> ();
- //ipv4->SetMetric(metric);
-
- //NS_LOG_INFO("2");
-
- Ptr<NetDevice> device2 = nd2->GetDevice(nd2->GetNDevices()-1)->GetObject<PointToPointNetDevice> ();
-
- if(device2==NULL)
- NS_LOG_INFO("device2 = 0");
-
- {
- NetDeviceContainer* temp = new NetDeviceContainer[1];
- temp->Add(device2);
- address.Assign (*temp);
- }
-
- Ptr<Ipv4> ipv42 = nd2->GetObject<Ipv4>();
- if(ipv42 == 0)
- {
- NS_LOG_INFO("ipv42 = null");
- /*stack.Install(nd2);
- NetDeviceContainer* temp = new NetDeviceContainer[1];
- temp->Add(device2);
- address.Assign (*temp);
- ipv42 = nd2->GetObject<Ipv4>();*/
- }
-
- NS_LOG_INFO("Before GetID");
- interfaceId = ipv42->GetInterfaceForDevice(device2);
- NS_LOG_INFO("InterfaceID = " << interfaceId);
- ipv42->SetMetric(interfaceId,metric);
-
-
-
- /*PointerValue tmp1;
- device->GetAttribute ("TxQueue", tmp1);
- //NS_LOG_INFO("2.5");
- Ptr<Object> txQueue1 = tmp1.GetObject ();
-
- PointerValue tmp2;
- device2->GetAttribute ("TxQueue", tmp2);
- Ptr<Object> txQueue2 = tmp2.GetObject ();
- //NS_LOG_INFO("3");
- Ptr<DropTailQueue> dtq1 = txQueue1->GetObject <DropTailQueue> ();
- NS_ASSERT (dtq1 != 0);
-
- Ptr<DropTailQueue> dtq2 = txQueue2->GetObject <DropTailQueue> ();
- NS_ASSERT (dtq2 != 0);
-
- std::string queuesize1 = iter2->GetAttribute("QueueSizeNode1");
- std::string queuesize2 = iter2->GetAttribute("QueueSizeNode2");
- //NS_LOG_INFO("4");
- txQueue1->SetAttribute("MaxPackets", UintegerValue (atoi(queuesize1.c_str())));
- txQueue2->SetAttribute("MaxPackets", UintegerValue (atoi(queuesize2.c_str())));
-
- UintegerValue limit;
- txQueue1->GetAttribute ("MaxPackets", limit);
- NS_LOG_INFO ("NetDevice #"<< device->GetIfIndex() << "has queue limit " << limit.Get () << " packets");
-
- txQueue2->GetAttribute ("MaxPackets", limit);
- NS_LOG_INFO ("NetDevice #"<< device2->GetIfIndex() << "has queue limit " << limit.Get () << " packets");*/
- }
+void
+RocketfuelWeightsReader::SetFileType (uint8_t inputType)
+{
+ m_inputType = inputType;
+}
+
+NodeContainer
+RocketfuelWeightsReader::Read ()
+{
+ ifstream topgen;
+ topgen.open (GetFileName ().c_str ());
+ NodeContainer nodes;
+
+ if ( !topgen.is_open () )
+ {
+ NS_LOG_ERROR ("Cannot open file " << GetFileName () << " for reading");
+ return nodes;
}
+ map<string, set<string> > processedLinks; // to eliminate duplications
+ bool repeatedRun = LinksSize () > 0;
+ std::list<Link>::iterator linkIterator = m_linksList.begin ();
+
+ while (!topgen.eof ())
+ {
+ string line;
+ getline (topgen,line);
+ if (line == "") continue;
+ if (line[0] == '#') continue; // comments
+
+ // NS_LOG_DEBUG ("Input: [" << line << "]");
+
+ istringstream lineBuffer (line);
+ string from, to, attribute;
+
+ lineBuffer >> from >> to >> attribute;
+
+ if (processedLinks[to].size () != 0 &&
+ processedLinks[to].find (from) != processedLinks[to].end ())
+ {
+ continue; // duplicated link
+ }
+ processedLinks[from].insert (to);
+
+ Ptr<Node> fromNode = Names::Find<Node> (m_path, from);
+ if (fromNode == 0)
+ {
+ fromNode = CreateNode (from);
+ nodes.Add (fromNode);
+ }
+
+ Ptr<Node> toNode = Names::Find<Node> (m_path, to);
+ if (toNode == 0)
+ {
+ toNode = CreateNode (to);
+ nodes.Add (toNode);
+ }
+
+ Link *link;
+ if (!repeatedRun)
+ link = new Link (fromNode, from, toNode, to);
+ else
+ {
+ NS_ASSERT (linkIterator != m_linksList.end ());
+ link = &(*linkIterator);
+
+ linkIterator++;
+ }
+
+ switch (m_inputType)
+ {
+ case WEIGHTS:
+ link->SetAttribute ("OSPF", attribute);
+ break;
+ case LATENCIES:
+ link->SetAttribute ("Delay", attribute);
+ break;
+ default:
+ ; //
+ }
+
+ NS_LOG_DEBUG ("Link " << from << " <==> " << to << " / " << attribute);
+ if (!repeatedRun)
+ {
+ AddLink (*link);
+ delete link;
+ }
+ }
+
+ topgen.close ();
+ NS_LOG_INFO ("Rocketfuel topology created with " << nodes.GetN () << " nodes and " << LinksSize () << " links");
+ return nodes;
+}
} /* namespace ns3 */
-
-
diff --git a/model/rocketfuel-weights-reader.h b/model/rocketfuel-weights-reader.h
index 21c2144..2b73c11 100644
--- a/model/rocketfuel-weights-reader.h
+++ b/model/rocketfuel-weights-reader.h
@@ -19,72 +19,60 @@
* Ilya Moiseenko <iliamo@cs.ucla.edu>
*/
-#ifndef ROCKETFUEL_TOPOLOGY_READER_H
-#define ROCKETFUEL_TOPOLOGY_READER_H
+#ifndef ROCKETFUEL_TOPOLOGY_WEIGHTS_READER_H
+#define ROCKETFUEL_TOPOLOGY_WEIGHTS_READER_H
-#include "ns3/topology-reader.h"
+#include "annotated-topology-reader.h"
#include "ns3/net-device-container.h"
namespace ns3 {
-
- // ------------------------------------------------------------
- // --------------------------------------------
- /**
- * \brief Topology file reader (Rocketfuel-format type).
- *
- * http://www.cs.washington.edu/research/networking/rocketfuel/
- *
- * May 2nd, 2010: Currently only support "weights" file and "cch" file.
- * http://www.cs.washington.edu/research/networking/rocketfuel/maps/weights-dist.tar.gz
- * http://www.cs.washington.edu/research/networking/rocketfuel/maps/rocketfuel_maps_cch.tar.gz
- */
- class RocketfuelWeightsReader : public TopologyReader
+// ------------------------------------------------------------
+// --------------------------------------------
+/**
+ * \brief Topology file reader (extension of Rocketfuel-format type).
+ *
+ * http://www.cs.washington.edu/research/networking/rocketfuel/
+ *
+ * Only weights and latencies file is supported
+ */
+class RocketfuelWeightsReader : public AnnotatedTopologyReader
+{
+public:
+ RocketfuelWeightsReader ();
+ virtual ~RocketfuelWeightsReader ();
+
+ void
+ SetFileType (uint8_t inputType);
+
+ /**
+ * \brief Main topology reading function.
+ *
+ * This method opens an input stream and reads the Rocketfuel-format file.
+ * Every row represents a topology link (the ids of a couple of nodes),
+ * so the input file is read line by line to figure out how many links
+ * and nodes are in the topology.
+ *
+ * \return the container of the nodes created (or empty container if there was an error)
+ */
+ virtual NodeContainer Read (void);
+
+ enum
{
- public:
- static TypeId GetTypeId (void);
-
- RocketfuelWeightsReader ();
- virtual ~RocketfuelWeightsReader ();
-
- /**
- * \brief Main topology reading function.
- *
- * This method opens an input stream and reads the Rocketfuel-format file.
- * Every row represents a topology link (the ids of a couple of nodes),
- * so the input file is read line by line to figure out how many links
- * and nodes are in the topology.
- *
- * \return the container of the nodes created (or empty container if there was an error)
- */
- NodeContainer Read (std::string latenciesFile);
-
- virtual NodeContainer Read (void);
-
- void ApplySettings(NetDeviceContainer* ndc, NodeContainer* nc);
-
- private:
- RocketfuelWeightsReader (const RocketfuelWeightsReader&);
- RocketfuelWeightsReader& operator= (const RocketfuelWeightsReader&);
- // Parser for the weights.* file available at:
- // http://www.cs.washington.edu/research/networking/rocketfuel/maps/weights-dist.tar.gz
- NodeContainer GenerateFromWeightsFile (int argc, char *argv[], char *argl[]);
-
- enum RF_FileType
- {
- RF_MAPS,
- RF_WEIGHTS,
- RF_UNKNOWN
- };
- enum RF_FileType GetFileType (const char *);
-
- // end class RocketfuelWeightsReader
+ WEIGHTS,
+ LATENCIES
};
-
- // end namespace ns3
-};
+
+private:
+ RocketfuelWeightsReader (const RocketfuelWeightsReader&);
+ RocketfuelWeightsReader& operator= (const RocketfuelWeightsReader&);
+
+private:
+ uint8_t m_inputType;
+
+}; // end class RocketfuelWeightsReader
+
+}; // end namespace ns3
-#endif /* ROCKETFUEL_TOPOLOGY_READER_H */
-
-
+#endif /* ROCKETFUEL_TOPOLOGY_WEIGHTS_READER_H */