topologygenerator 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +10 -0
- data/LICENSE.txt +21 -0
- data/README.md +35 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/behaviors/serialize_behavior.rb +14 -0
- data/lib/builders_examples/pdm_builders/PhaseI/Flow_concrete_builder.rb +82 -0
- data/lib/builders_examples/pdm_builders/PhaseI/Host_concrete_builder.rb +24 -0
- data/lib/builders_examples/pdm_builders/PhaseI/Link_concrete_builder.rb +150 -0
- data/lib/builders_examples/pdm_builders/PhaseI/Router_concrete_builder.rb +24 -0
- data/lib/builders_examples/pdm_builders/PhaseI/output_concrete_builder.rb +86 -0
- data/lib/builders_examples/pdm_builders/PhaseI/pdm_constants.rb +111 -0
- data/lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Flow_concrete_builder.rb +82 -0
- data/lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Host_concrete_builder.rb +335 -0
- data/lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Link_concrete_builder.rb +25 -0
- data/lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Router_concrete_builder.rb +449 -0
- data/lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/output_concrete_builder.rb +229 -0
- data/lib/builders_examples/ruby_builders/Flow_concrete_builder.rb +5 -0
- data/lib/builders_examples/ruby_builders/Host_concrete_builder.rb +5 -0
- data/lib/builders_examples/ruby_builders/Link_concrete_builder.rb +5 -0
- data/lib/builders_examples/ruby_builders/Router_concrete_builder.rb +5 -0
- data/lib/builders_examples/ruby_builders/output_concrete_builder.rb +78 -0
- data/lib/command_line/command_line_arguments.rb +59 -0
- data/lib/createTopology.rb +10 -0
- data/lib/flows_distributions/constant_distribution.rb +7 -0
- data/lib/flows_distributions/exponential_distribution.rb +7 -0
- data/lib/flows_distributions/normal_distribution.rb +8 -0
- data/lib/flows_distributions/pareto_distribution.rb +9 -0
- data/lib/flows_distributions/split_distribution.rb +8 -0
- data/lib/network_entities/abstracts/flow.rb +27 -0
- data/lib/network_entities/abstracts/network_element.rb +19 -0
- data/lib/network_entities/abstracts/path.rb +16 -0
- data/lib/network_entities/physical/host.rb +10 -0
- data/lib/network_entities/physical/link.rb +36 -0
- data/lib/network_entities/physical/router.rb +12 -0
- data/lib/network_entities/topology.rb +69 -0
- data/lib/network_topologies_examples/PhaseI_onlyLAr_1FelixTo1SWROD.rb +93 -0
- data/lib/network_topologies_examples/octopus_topology.rb +66 -0
- data/lib/network_topologies_examples/phase1_topology_mininet/tdaq +4 -0
- data/lib/network_topologies_examples/phase1_topology_mininet/tdaq.py +99 -0
- data/lib/network_topologies_examples/sofisticated_octopus_topology.rb +121 -0
- data/lib/network_topologies_examples/tdaq_network_topology.rb +76 -0
- data/lib/network_topologies_examples/tdaq_topology_example.rb +119 -0
- data/lib/network_topologies_examples/tree_topology.rb +102 -0
- data/lib/output/FlowDefinitions.cpp +109 -0
- data/lib/output/copy_files.sh +8 -0
- data/lib/output/flows_definition.scilabParams +30 -0
- data/lib/output/hosts_definition.scilabParams +5 -0
- data/lib/output/links_definition.scilabParams +48 -0
- data/lib/output/routers_definition.scilabParams +24 -0
- data/lib/output/ruby_network_topology.rb +76 -0
- data/lib/output/topology.pdm +5321 -0
- data/lib/output_builder.rb +39 -0
- data/lib/providers/apis/onos_topology_provider.rb +146 -0
- data/lib/providers/customs/custom_topology_provider.rb +14 -0
- data/lib/providers/interface_topology_provider.rb +11 -0
- data/lib/topologygenerator/version.rb +3 -0
- data/lib/topologygenerator.rb +34 -0
- data/lib/utils/custom_files_utils.rb +16 -0
- data/topologygenerator.gemspec +45 -0
- metadata +188 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'utils/custom_files_utils.rb'
|
2
|
+
|
3
|
+
class OutputBuilder
|
4
|
+
|
5
|
+
attr_reader :topology_provider, :directory_concrete_builders, :output_directory
|
6
|
+
|
7
|
+
include CustomFileUtils
|
8
|
+
|
9
|
+
def initialize(topology_provider, directory_concrete_builders, output_directory)
|
10
|
+
validate_params topology_provider, directory_concrete_builders, output_directory
|
11
|
+
|
12
|
+
@topology_provider = topology_provider
|
13
|
+
@directory_concrete_builders = directory_concrete_builders
|
14
|
+
@output_directory = output_directory
|
15
|
+
end
|
16
|
+
|
17
|
+
def build_output
|
18
|
+
Dir["#{@directory_concrete_builders}/*.rb"].each { |file| require "./#{file}" }
|
19
|
+
self.class.send(:include,OutputConcreteBuilder)
|
20
|
+
validate_output_concrete_builder
|
21
|
+
|
22
|
+
initialize_concrete_builder @topology_provider, @directory_concrete_builders, @output_directory
|
23
|
+
|
24
|
+
build_output_content
|
25
|
+
end
|
26
|
+
|
27
|
+
def validate_output_concrete_builder
|
28
|
+
[:initialize_concrete_builder, :build_output_content].each do |method|
|
29
|
+
raise ArgumentError, "It was expected to load an OutputConcreteBuilder module from #{@directory_concrete_builders}/builders/output_files_format that implements the method #{method}, but the one provided does not has this method implemented" unless self.respond_to? method
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def validate_params(topology_provider, directory_concrete_builders, output_directory)
|
34
|
+
raise ArgumentError, 'The topology provider given cannot be nil' unless topology_provider
|
35
|
+
raise ArgumentError, 'The template directory given cannot be nil' unless directory_concrete_builders
|
36
|
+
raise ArgumentError, "It was expected to find builders files in directory #{directory_concrete_builders}, but nothing was found." if Dir["#{directory_concrete_builders}/*.rb"].size == 0
|
37
|
+
raise ArgumentError, 'The output directory given cannot be nil' unless output_directory
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
require 'typhoeus'
|
3
|
+
require_relative "../interface_topology_provider.rb"
|
4
|
+
require_relative "../../network_entities/topology.rb"
|
5
|
+
require_relative '../../network_entities/abstracts/path.rb'
|
6
|
+
|
7
|
+
class OnosTopologyProvider < ITopologyProvider
|
8
|
+
|
9
|
+
attr_accessor :uri_resource
|
10
|
+
|
11
|
+
def initialize(new_uri_resource)
|
12
|
+
raise ArgumentError, 'No uri recieved as parameter' unless new_uri_resource
|
13
|
+
@uri_resource = new_uri_resource
|
14
|
+
@topology = Topology.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_topology
|
18
|
+
|
19
|
+
return @topology.topology_elements if @topology.topology_elements.size != 0
|
20
|
+
|
21
|
+
add_routers
|
22
|
+
add_hosts
|
23
|
+
add_links
|
24
|
+
|
25
|
+
@topology.topology_elements
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_from_api(resource)
|
29
|
+
Typhoeus.get "#{@uri_resource}#{resource}", userpwd:"onos:rocks"
|
30
|
+
end
|
31
|
+
|
32
|
+
=begin
|
33
|
+
This is the info that represents a router
|
34
|
+
{
|
35
|
+
"id"=>"of:0000000000000003",
|
36
|
+
"type"=>"SWITCH",
|
37
|
+
"available"=>true,
|
38
|
+
"role"=>"MASTER",
|
39
|
+
"mfr"=>"Nicira, Inc.",
|
40
|
+
"hw"=>"Open vSwitch",
|
41
|
+
"sw"=>"2.5.0",
|
42
|
+
"serial"=>"None",
|
43
|
+
"chassisId"=>"3",
|
44
|
+
"annotations"=>{
|
45
|
+
"managementAddress"=>"127.0.0.1",
|
46
|
+
"protocol"=>"OF_13",
|
47
|
+
"channelId"=>"127.0.0.1:59170"
|
48
|
+
}
|
49
|
+
}
|
50
|
+
=end
|
51
|
+
def add_routers
|
52
|
+
#Devices represents either hosts or routers. This function will make difference between them
|
53
|
+
devices_response = get_from_api 'devices'
|
54
|
+
graph_elements_info = (JSON.parse devices_response.body)['devices']
|
55
|
+
graph_elements_info.each do |element_info|
|
56
|
+
# To identify if a device is either a router or a host, we can ask for it flows. If the device has no flows,
|
57
|
+
# then it's a host
|
58
|
+
flows_response = get_from_api "flows/#{element_info['id']}"
|
59
|
+
@topology.add_router element_info['id'] if flows_response.code == 200
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_hosts
|
64
|
+
hosts_response = get_from_api 'hosts'
|
65
|
+
hosts_info = (JSON.parse hosts_response.body)['hosts']
|
66
|
+
hosts_info.each_with_index do |host_info, index|
|
67
|
+
|
68
|
+
host = @topology.add_host host_info['id'] #host_info['mac']
|
69
|
+
|
70
|
+
|
71
|
+
@topology.add_link "Link#{index}host_to_router",
|
72
|
+
host,
|
73
|
+
0,
|
74
|
+
host_info['location']['elementId'],
|
75
|
+
host_info['location']['port'].to_i
|
76
|
+
|
77
|
+
@topology.add_link "Link#{index}router_to_host",
|
78
|
+
host_info['location']['elementId'],
|
79
|
+
host_info['location']['port'].to_i,
|
80
|
+
host,
|
81
|
+
0
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
=begin
|
86
|
+
links_between_routers_info is an array of elements of this kind
|
87
|
+
{
|
88
|
+
"src"=>{
|
89
|
+
"port"=>"2",
|
90
|
+
"device"=>"of:0000000000000001"
|
91
|
+
},
|
92
|
+
"dst"=>{
|
93
|
+
"port"=>"3",
|
94
|
+
"device"=>"of:0000000000000005"
|
95
|
+
},
|
96
|
+
"type"=>"DIRECT",
|
97
|
+
"state"=>"ACTIVE"
|
98
|
+
}
|
99
|
+
=end
|
100
|
+
def add_links
|
101
|
+
links_between_routers_response = get_from_api 'links'
|
102
|
+
links_between_routers_info = (JSON.parse links_between_routers_response.body)['links']
|
103
|
+
|
104
|
+
index_offset = @topology.links.size + 1
|
105
|
+
links_between_routers_info.each_with_index do |link_between_routers_info, index|
|
106
|
+
@topology.add_link "Link#{index+index_offset}",
|
107
|
+
link_between_routers_info['src']['device'],
|
108
|
+
link_between_routers_info['src']['port'].to_i,
|
109
|
+
link_between_routers_info['dst']['device'],
|
110
|
+
link_between_routers_info['dst']['port'].to_i
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def get_path_between(source, destination)
|
115
|
+
raise Exception, "Source must be either from class Router or class Host to ask for a path" unless [Host, Router].include? source.class
|
116
|
+
raise Exception, "Destination must be either from class Router or class Host to ask for a path" unless [Host, Router].include? destination.class
|
117
|
+
|
118
|
+
paths_response = get_from_api "paths/#{CGI.escape(source.id)}/#{CGI.escape(destination.id)}"
|
119
|
+
links_info = (JSON.parse paths_response.body)['paths'].first['links']
|
120
|
+
|
121
|
+
path = Path.new(source,destination)
|
122
|
+
|
123
|
+
#If either the source or the destination are hosts, the path will return host instead of device
|
124
|
+
first_link = links_info.shift
|
125
|
+
last_link = links_info.pop
|
126
|
+
|
127
|
+
path.add_link (find_link first_link, 'host', 'device')
|
128
|
+
|
129
|
+
links_info.each do |link|
|
130
|
+
path.add_link (find_link link, 'device', 'device')
|
131
|
+
end
|
132
|
+
path.add_link (find_link last_link, 'device', 'host')
|
133
|
+
|
134
|
+
path
|
135
|
+
end
|
136
|
+
|
137
|
+
def find_link(link_representation_in_path, src_key, dst_key)
|
138
|
+
links_found = @topology.topology_elements.select { |elem|
|
139
|
+
(elem.is_a? Link) &&
|
140
|
+
(elem.src_element.id == link_representation_in_path['src'][src_key]) &&
|
141
|
+
(elem.dst_element.id == link_representation_in_path['dst'][dst_key]) }
|
142
|
+
|
143
|
+
raise "It was suppossed to find one link with the representation #{link_representation_in_path}, but #{links_found.size} were found" unless links_found.size == 1
|
144
|
+
links_found.first
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
class CustomTopologyProvider < ITopologyProvider
|
4
|
+
attr_reader :uri_resource
|
5
|
+
|
6
|
+
def initialize(new_uri_resource)
|
7
|
+
raise ArgumentError, 'No uri recieved as parameter' unless new_uri_resource
|
8
|
+
@topology = Topology.new
|
9
|
+
|
10
|
+
@uri_resource = new_uri_resource
|
11
|
+
require (Pathname.new @uri_resource).realpath.to_s
|
12
|
+
self.class.send(:include, NetworkTopology)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
"Interface for topology providers"
|
2
|
+
class ITopologyProvider
|
3
|
+
"returns a list with the topology elements (nodes, routers, links)"
|
4
|
+
def get_topology
|
5
|
+
raise NotImplementedError, "ITopologyProvider: Implement this method in a child class"
|
6
|
+
end
|
7
|
+
|
8
|
+
def get_path_between(source, destination)
|
9
|
+
raise NotImplementedError, "ITopologyProvider: Implement this method in a child class"
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require_relative "topologygenerator/version"
|
2
|
+
require_relative 'providers/apis/onos_topology_provider.rb'
|
3
|
+
require_relative 'providers/customs/custom_topology_provider.rb'
|
4
|
+
require_relative 'output_builder.rb'
|
5
|
+
|
6
|
+
"Main class that reads a topology from a source provider and writes it using a builder"
|
7
|
+
class Topologygenerator
|
8
|
+
|
9
|
+
def initialize(arguments)
|
10
|
+
validate arguments
|
11
|
+
@arguments = arguments
|
12
|
+
|
13
|
+
case @arguments.source
|
14
|
+
when 'ONOS'
|
15
|
+
@topology_provider = OnosTopologyProvider.new @arguments.uri_resource
|
16
|
+
when 'CUSTOM'
|
17
|
+
@topology_provider = CustomTopologyProvider.new @arguments.uri_resource
|
18
|
+
else
|
19
|
+
raise ArgumentError, "The source: #{@arguments.source} is not one of the expected"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def generate
|
24
|
+
output_builder = OutputBuilder.new @topology_provider, @arguments.directory_concrete_builders, @arguments.output_directory
|
25
|
+
output_builder.build_output
|
26
|
+
end
|
27
|
+
|
28
|
+
def validate(arguments)
|
29
|
+
raise ArgumentError, 'No arguments received' unless arguments
|
30
|
+
[:source,:directory_concrete_builders,:output_directory, :uri_resource].each do |argument_name|
|
31
|
+
raise ArgumentError, "It is mandatory that arguments has a #{argument_name}" unless arguments.respond_to? argument_name
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module CustomFileUtils
|
2
|
+
def create_empty_file(full_file_path)
|
3
|
+
dir = File.dirname(full_file_path)
|
4
|
+
|
5
|
+
FileUtils.mkdir_p(dir) unless File.directory?(dir)
|
6
|
+
|
7
|
+
File.new(full_file_path, 'w').close()
|
8
|
+
end
|
9
|
+
|
10
|
+
def write_file(path_to_file, file_content)
|
11
|
+
create_empty_file path_to_file
|
12
|
+
open(path_to_file, 'w') do |f|
|
13
|
+
f.puts file_content
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'byebug'
|
2
|
+
|
3
|
+
# coding: utf-8
|
4
|
+
lib = File.expand_path('../lib', __FILE__)
|
5
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
|
+
require 'topologygenerator/version'
|
7
|
+
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = "topologygenerator"
|
10
|
+
spec.version = Topologygenerator::VERSION
|
11
|
+
spec.authors = ["Andrés Laurito"]
|
12
|
+
spec.email = ["andy.laurito@gmail.com"]
|
13
|
+
|
14
|
+
spec.summary = %q{Build a topology from a source provider and writes it using a builder.}
|
15
|
+
spec.description = %q{The topologygenerator gem is a tool for building from a network topology a custom output.
|
16
|
+
This network topology can be obtained from a custom file written in ruby by the user, or
|
17
|
+
by a SDN controller specifying the API uri (actually ONOS is support, and we are working
|
18
|
+
for OpenDayLight support).
|
19
|
+
In case of the custom output, you have to write for each class defined in the network topology,
|
20
|
+
a module that describes how to build this class. The topologygenerator gem will then use this
|
21
|
+
module's defined to generate the output desired.
|
22
|
+
You can see examples of use in my public github webpage.
|
23
|
+
}
|
24
|
+
spec.homepage = "https://github.com/andyLaurito92"
|
25
|
+
spec.license = "MIT"
|
26
|
+
|
27
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
28
|
+
# delete this section to allow pushing this gem to any host.
|
29
|
+
#if spec.respond_to?(:metadata)
|
30
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
31
|
+
#else
|
32
|
+
# raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
33
|
+
#end
|
34
|
+
|
35
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
36
|
+
spec.bindir = "exe"
|
37
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
38
|
+
spec.require_paths = ["lib"]
|
39
|
+
|
40
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
41
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
42
|
+
spec.add_development_dependency "rspec", "~> 3.4"
|
43
|
+
spec.add_development_dependency "typhoeus"
|
44
|
+
spec.add_development_dependency 'commander'
|
45
|
+
end
|
metadata
ADDED
@@ -0,0 +1,188 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: topologygenerator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrés Laurito
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-11-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.4'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.4'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: typhoeus
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: commander
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: "The topologygenerator gem is a tool for building from a network topology
|
84
|
+
a custom output. \n This network topology can be obtained
|
85
|
+
from a custom file written in ruby by the user, or \n by
|
86
|
+
a SDN controller specifying the API uri (actually ONOS is support, and we are working
|
87
|
+
\n for OpenDayLight support).\n In
|
88
|
+
case of the custom output, you have to write for each class defined in the network
|
89
|
+
topology, \n a module that describes how to build this
|
90
|
+
class. The topologygenerator gem will then use this \n module's
|
91
|
+
defined to generate the output desired.\n You can see examples
|
92
|
+
of use in my public github webpage.\n "
|
93
|
+
email:
|
94
|
+
- andy.laurito@gmail.com
|
95
|
+
executables: []
|
96
|
+
extensions: []
|
97
|
+
extra_rdoc_files: []
|
98
|
+
files:
|
99
|
+
- ".gitignore"
|
100
|
+
- ".rspec"
|
101
|
+
- ".travis.yml"
|
102
|
+
- CODE_OF_CONDUCT.md
|
103
|
+
- Gemfile
|
104
|
+
- LICENSE.txt
|
105
|
+
- README.md
|
106
|
+
- Rakefile
|
107
|
+
- bin/console
|
108
|
+
- bin/setup
|
109
|
+
- lib/behaviors/serialize_behavior.rb
|
110
|
+
- lib/builders_examples/pdm_builders/PhaseI/Flow_concrete_builder.rb
|
111
|
+
- lib/builders_examples/pdm_builders/PhaseI/Host_concrete_builder.rb
|
112
|
+
- lib/builders_examples/pdm_builders/PhaseI/Link_concrete_builder.rb
|
113
|
+
- lib/builders_examples/pdm_builders/PhaseI/Router_concrete_builder.rb
|
114
|
+
- lib/builders_examples/pdm_builders/PhaseI/output_concrete_builder.rb
|
115
|
+
- lib/builders_examples/pdm_builders/PhaseI/pdm_constants.rb
|
116
|
+
- lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Flow_concrete_builder.rb
|
117
|
+
- lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Host_concrete_builder.rb
|
118
|
+
- lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Link_concrete_builder.rb
|
119
|
+
- lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Router_concrete_builder.rb
|
120
|
+
- lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/output_concrete_builder.rb
|
121
|
+
- lib/builders_examples/ruby_builders/Flow_concrete_builder.rb
|
122
|
+
- lib/builders_examples/ruby_builders/Host_concrete_builder.rb
|
123
|
+
- lib/builders_examples/ruby_builders/Link_concrete_builder.rb
|
124
|
+
- lib/builders_examples/ruby_builders/Router_concrete_builder.rb
|
125
|
+
- lib/builders_examples/ruby_builders/output_concrete_builder.rb
|
126
|
+
- lib/command_line/command_line_arguments.rb
|
127
|
+
- lib/createTopology.rb
|
128
|
+
- lib/flows_distributions/constant_distribution.rb
|
129
|
+
- lib/flows_distributions/exponential_distribution.rb
|
130
|
+
- lib/flows_distributions/normal_distribution.rb
|
131
|
+
- lib/flows_distributions/pareto_distribution.rb
|
132
|
+
- lib/flows_distributions/split_distribution.rb
|
133
|
+
- lib/network_entities/abstracts/flow.rb
|
134
|
+
- lib/network_entities/abstracts/network_element.rb
|
135
|
+
- lib/network_entities/abstracts/path.rb
|
136
|
+
- lib/network_entities/physical/host.rb
|
137
|
+
- lib/network_entities/physical/link.rb
|
138
|
+
- lib/network_entities/physical/router.rb
|
139
|
+
- lib/network_entities/topology.rb
|
140
|
+
- lib/network_topologies_examples/PhaseI_onlyLAr_1FelixTo1SWROD.rb
|
141
|
+
- lib/network_topologies_examples/octopus_topology.rb
|
142
|
+
- lib/network_topologies_examples/phase1_topology_mininet/tdaq
|
143
|
+
- lib/network_topologies_examples/phase1_topology_mininet/tdaq.py
|
144
|
+
- lib/network_topologies_examples/sofisticated_octopus_topology.rb
|
145
|
+
- lib/network_topologies_examples/tdaq_network_topology.rb
|
146
|
+
- lib/network_topologies_examples/tdaq_topology_example.rb
|
147
|
+
- lib/network_topologies_examples/tree_topology.rb
|
148
|
+
- lib/output/FlowDefinitions.cpp
|
149
|
+
- lib/output/copy_files.sh
|
150
|
+
- lib/output/flows_definition.scilabParams
|
151
|
+
- lib/output/hosts_definition.scilabParams
|
152
|
+
- lib/output/links_definition.scilabParams
|
153
|
+
- lib/output/routers_definition.scilabParams
|
154
|
+
- lib/output/ruby_network_topology.rb
|
155
|
+
- lib/output/topology.pdm
|
156
|
+
- lib/output_builder.rb
|
157
|
+
- lib/providers/apis/onos_topology_provider.rb
|
158
|
+
- lib/providers/customs/custom_topology_provider.rb
|
159
|
+
- lib/providers/interface_topology_provider.rb
|
160
|
+
- lib/topologygenerator.rb
|
161
|
+
- lib/topologygenerator/version.rb
|
162
|
+
- lib/utils/custom_files_utils.rb
|
163
|
+
- topologygenerator.gemspec
|
164
|
+
homepage: https://github.com/andyLaurito92
|
165
|
+
licenses:
|
166
|
+
- MIT
|
167
|
+
metadata: {}
|
168
|
+
post_install_message:
|
169
|
+
rdoc_options: []
|
170
|
+
require_paths:
|
171
|
+
- lib
|
172
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ">="
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
requirements: []
|
183
|
+
rubyforge_project:
|
184
|
+
rubygems_version: 2.5.1
|
185
|
+
signing_key:
|
186
|
+
specification_version: 4
|
187
|
+
summary: Build a topology from a source provider and writes it using a builder.
|
188
|
+
test_files: []
|