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,99 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
from mininet.topo import Topo
|
4
|
+
from mininet.cli import CLI
|
5
|
+
from mininet.net import Mininet
|
6
|
+
from mininet.node import RemoteController, OVSKernelSwitch
|
7
|
+
from mininet.log import setLogLevel
|
8
|
+
|
9
|
+
|
10
|
+
class TdaqTopo( Topo ):
|
11
|
+
"""Create a leaf spine topology"""
|
12
|
+
|
13
|
+
def build( self, roSeg=2, roSegHosts=2, sdxHostCount=2 ):
|
14
|
+
SWDPID = 1000000000000000
|
15
|
+
HSWDPID = 2000000000000000
|
16
|
+
SEGMOD = 100
|
17
|
+
LOCMOD = 10000
|
18
|
+
ROSEGMENT = 1
|
19
|
+
USA15DEV = 2
|
20
|
+
SDXDEV = 3
|
21
|
+
roSegment = []
|
22
|
+
roSegmentHosts = []
|
23
|
+
usa15Spines = []
|
24
|
+
sdxSpines = []
|
25
|
+
sdxHostSwitch = []
|
26
|
+
|
27
|
+
# Create the spine switches
|
28
|
+
usa15Spines.append(self.addSwitch('usa15s1', dpid='%d' % (SWDPID + LOCMOD*USA15DEV + 1)))
|
29
|
+
usa15Spines.append(self.addSwitch('usa15s2', dpid='%d' % (SWDPID + LOCMOD*USA15DEV + 2)))
|
30
|
+
sdxSpines.append(self.addSwitch('sdxs1', dpid='%d' % (SWDPID + LOCMOD*SDXDEV + 1)))
|
31
|
+
sdxSpines.append(self.addSwitch('sdxs2', dpid='%d' % (SWDPID + LOCMOD*SDXDEV + 2)))
|
32
|
+
|
33
|
+
self.addLink(usa15Spines[0], sdxSpines[0])
|
34
|
+
self.addLink(usa15Spines[0], sdxSpines[1])
|
35
|
+
self.addLink(usa15Spines[1], sdxSpines[0])
|
36
|
+
self.addLink(usa15Spines[1], sdxSpines[1])
|
37
|
+
|
38
|
+
# Create roSegments
|
39
|
+
for i in range(1, roSeg+1):
|
40
|
+
roSwitch = []
|
41
|
+
roHostSwitch = []
|
42
|
+
print SWDPID
|
43
|
+
roSwitch.append(self.addSwitch('seg%dsw%d' % (i, 1), dpid='%d' % (SWDPID + LOCMOD*ROSEGMENT + i*SEGMOD + 1)))
|
44
|
+
roSwitch.append(self.addSwitch('seg%dsw%d' % (i, 2), dpid='%d' % (SWDPID + LOCMOD*ROSEGMENT + i*SEGMOD + 2)))
|
45
|
+
self.addLink(roSwitch[0], roSwitch[1])
|
46
|
+
self.addLink(roSwitch[0], usa15Spines[0])
|
47
|
+
self.addLink(roSwitch[1], usa15Spines[1])
|
48
|
+
for j in range(1, roSegHosts+1):
|
49
|
+
roHostSwitch.append(self.addSwitch('swhseg%dh%d' % (i, j), dpid='%d' % (HSWDPID + LOCMOD*ROSEGMENT + SEGMOD*i + j)))
|
50
|
+
host = self.addHost('seg%dh%d' % (i, j), ip='10.%d.%d.%d' % (ROSEGMENT, i, j))
|
51
|
+
self.addLink(roHostSwitch[j-1], host)
|
52
|
+
self.addLink(roHostSwitch[j-1], roSwitch[0])
|
53
|
+
self.addLink(roHostSwitch[j-1], roSwitch[1])
|
54
|
+
|
55
|
+
# Create the SDX hosts
|
56
|
+
for i in range(1, sdxHostCount +1):
|
57
|
+
sdxHostSwitch.append(self.addSwitch('swhsdx%d' % i, dpid='%d' % (HSWDPID + LOCMOD*SDXDEV + i)))
|
58
|
+
host = self.addHost('sdxh%d' % (i), ip='10.%d.0.%d' % (SDXDEV, i))
|
59
|
+
self.addLink(sdxHostSwitch[i-1], host)
|
60
|
+
self.addLink(sdxHostSwitch[i-1], sdxSpines[0])
|
61
|
+
self.addLink(sdxHostSwitch[i-1], sdxSpines[1])
|
62
|
+
|
63
|
+
|
64
|
+
# Create two links between the spine switches
|
65
|
+
#self.addLink(spines[0], spines[1])
|
66
|
+
#TODO add second link between spines when multi-link topos are supported
|
67
|
+
#self.addLink(spines[0], spines[1])
|
68
|
+
|
69
|
+
# Now create the leaf switches, their hosts and connect them together
|
70
|
+
#i = 1
|
71
|
+
#c = 0
|
72
|
+
# while i <= k:
|
73
|
+
# leaves.append(self.addSwitch('s1%d' % i))
|
74
|
+
# for spine in spines:
|
75
|
+
# self.addLink(leaves[i-1], spine)
|
76
|
+
|
77
|
+
# j = 1
|
78
|
+
# while j <= h:
|
79
|
+
# hosts.append(self.addHost('h%d%d' % (i, j), ip='192.168.%d.%d' %(i, j)))
|
80
|
+
# self.addLink(hosts[c], leaves[i-1])
|
81
|
+
# j+=1
|
82
|
+
# c+=1
|
83
|
+
|
84
|
+
# i+=1
|
85
|
+
|
86
|
+
topos = { 'tdaq': TdaqTopo }
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
def run():
|
91
|
+
topo = TdaqTopo()
|
92
|
+
net = Mininet( topo=topo, controller=RemoteController, autoSetMacs=True )
|
93
|
+
net.start()
|
94
|
+
CLI( net )
|
95
|
+
net.stop()
|
96
|
+
|
97
|
+
if __name__ == '__main__':
|
98
|
+
setLogLevel( 'info' )
|
99
|
+
run()
|
@@ -0,0 +1,121 @@
|
|
1
|
+
#PhaseITopologyPriorityQueues
|
2
|
+
|
3
|
+
=begin
|
4
|
+
http://asciiflow.com
|
5
|
+
|
6
|
+
+-------------+ +----------------+
|
7
|
+
| | | |
|
8
|
+
| Host0 | | Host1 |
|
9
|
+
+-------------+ +---+----------------+
|
10
|
+
| |
|
11
|
+
| |
|
12
|
+
| |
|
13
|
+
++-------+-+
|
14
|
+
| |
|
15
|
+
| +-----------------------------+
|
16
|
+
+----------+Switch0 +-------------+ |
|
17
|
+
| +-------+--+ | |
|
18
|
+
| | | |
|
19
|
+
+----+---+ +----+---+ +---+-----+ +----+-----+
|
20
|
+
| | | | | | | |
|
21
|
+
|Switch1 | +------+Switch2 | |Switch3 | |Switch4 |
|
22
|
+
+------------+---+ | +------+-+--+ +---+-----++ +----------++
|
23
|
+
| | | | | | | | |
|
24
|
+
| | | +---+----+ | | +------+-+ ++------+ +-+--------+
|
25
|
+
+---+----+ +----+---+ | |Host4 | | | | | | | | |
|
26
|
+
| | | | | | +----+-+--+ | | Host9 | |Host10 | | Host11 |
|
27
|
+
|Host2 | | Host3 | | +-----Host5 | | +--------+ +-------+ +----------+
|
28
|
+
+--------+ +--------+ | | +----+-+-+
|
29
|
+
| +------Host6 |
|
30
|
+
| | +---+-----+
|
31
|
+
| +----+Host7 |
|
32
|
+
| | +----+---+
|
33
|
+
+----------------+------Host8 |
|
34
|
+
| | |
|
35
|
+
+---------------------+--------+
|
36
|
+
|
37
|
+
|
38
|
+
=end
|
39
|
+
|
40
|
+
module NetworkTopology
|
41
|
+
def get_topology
|
42
|
+
return @topology.topology_elements if @topology.topology_elements.size != 0
|
43
|
+
|
44
|
+
routers = []
|
45
|
+
hosts = []
|
46
|
+
|
47
|
+
# Routers
|
48
|
+
for i in 0..4
|
49
|
+
router = @topology.add_router "MyRouter#{i}"
|
50
|
+
routers.push router
|
51
|
+
end
|
52
|
+
|
53
|
+
# Hosts
|
54
|
+
for i in 0..11
|
55
|
+
host = @topology.add_host "Host#{i}"
|
56
|
+
hosts.push host
|
57
|
+
end
|
58
|
+
|
59
|
+
#Links (starting from the flows that goes from top to bottom)
|
60
|
+
@topology.add_link "Link1", hosts[0], 0, routers[0], 0
|
61
|
+
@topology.add_link "Link2", hosts[1], 0, routers[0], 1
|
62
|
+
|
63
|
+
@topology.add_link "Link3", routers[0], 0, routers[1], 0
|
64
|
+
@topology.add_link "Link4", routers[0], 1, routers[2], 0
|
65
|
+
@topology.add_link "Link5", routers[0], 2, routers[3], 0
|
66
|
+
@topology.add_link "Link6", routers[0], 3, routers[4], 0
|
67
|
+
|
68
|
+
@topology.add_link "Link7", routers[1], 0, hosts[2], 0
|
69
|
+
@topology.add_link "Link8", routers[1], 1, hosts[3], 0
|
70
|
+
|
71
|
+
@topology.add_link "Link9", routers[2], 0, hosts[4], 0
|
72
|
+
@topology.add_link "Link10", routers[2], 1, hosts[5], 0
|
73
|
+
@topology.add_link "Link11", routers[2], 2, hosts[6], 0
|
74
|
+
@topology.add_link "Link12", routers[2], 3, hosts[7], 0
|
75
|
+
@topology.add_link "Link13", routers[2], 4, hosts[8], 0
|
76
|
+
|
77
|
+
@topology.add_link "Link14", routers[3], 0, hosts[9], 0
|
78
|
+
@topology.add_link "Link15", routers[3], 1, hosts[10], 0
|
79
|
+
|
80
|
+
@topology.add_link "Link16", routers[4], 0, hosts[11], 0
|
81
|
+
|
82
|
+
#Links (flows that goes from bottom to top)
|
83
|
+
@topology.add_link "Link17", hosts[2], 0, routers[1], 1
|
84
|
+
@topology.add_link "Link18", hosts[3], 0, routers[1], 2
|
85
|
+
|
86
|
+
@topology.add_link "Link19", hosts[4], 0, routers[2], 1
|
87
|
+
@topology.add_link "Link20", hosts[5], 0, routers[2], 2
|
88
|
+
@topology.add_link "Link21", hosts[6], 0, routers[2], 3
|
89
|
+
@topology.add_link "Link22", hosts[7], 0, routers[2], 4
|
90
|
+
@topology.add_link "Link23", hosts[8], 0, routers[2], 5
|
91
|
+
|
92
|
+
@topology.add_link "Link24", hosts[9], 0, routers[3], 1
|
93
|
+
@topology.add_link "Link25", hosts[10], 0, routers[3], 2
|
94
|
+
|
95
|
+
@topology.add_link "Link26", hosts[11], 0, routers[4], 1
|
96
|
+
|
97
|
+
@topology.add_link "Link27", routers[1], 2, routers[0], 2
|
98
|
+
@topology.add_link "Link28", routers[2], 5, routers[0], 3
|
99
|
+
@topology.add_link "Link29", routers[3], 2, routers[0], 4
|
100
|
+
@topology.add_link "Link30", routers[4], 1, routers[0], 5
|
101
|
+
|
102
|
+
@topology.add_link "Link31", routers[0], 4, hosts[0], 0
|
103
|
+
@topology.add_link "Link32", routers[0], 5, hosts[1], 0
|
104
|
+
|
105
|
+
|
106
|
+
@topology.topology_elements
|
107
|
+
end
|
108
|
+
|
109
|
+
def get_path_between(source, destination)
|
110
|
+
raise Exception, "Source must be either from class Router or class Host to ask for a path" unless [Host, Router].include? source.class
|
111
|
+
raise Exception, "Destination must be either from class Router or class Host to ask for a path" unless [Host, Router].include? destination.class
|
112
|
+
|
113
|
+
#TODO: Implement this function seriously :P
|
114
|
+
path = Path.new(source,destination)
|
115
|
+
links = @topology.topology_elements.select { |elem| elem.is_a? Link }
|
116
|
+
links.each do |link|
|
117
|
+
path.add_link link
|
118
|
+
end
|
119
|
+
path
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module NetworkTopology
|
2
|
+
def get_topology
|
3
|
+
return @topology.topology_elements if @topology.topology_elements.size != 0
|
4
|
+
hosts = []
|
5
|
+
routers = []
|
6
|
+
links = []
|
7
|
+
|
8
|
+
|
9
|
+
routers.push @topology.add_router "of:2000000000010101", [1]
|
10
|
+
routers.push @topology.add_router "of:2000000000010201", [1]
|
11
|
+
routers.push @topology.add_router "of:2000000000010102", [1]
|
12
|
+
routers.push @topology.add_router "of:2000000000010202", [1]
|
13
|
+
routers.push @topology.add_router "of:1000000000020001", [1]
|
14
|
+
routers.push @topology.add_router "of:2000000000030001", [1]
|
15
|
+
routers.push @topology.add_router "of:2000000000030002", [1]
|
16
|
+
routers.push @topology.add_router "of:1000000000020002", [1]
|
17
|
+
routers.push @topology.add_router "of:1000000000030002", [1]
|
18
|
+
routers.push @topology.add_router "of:1000000000030001", [1]
|
19
|
+
routers.push @topology.add_router "of:1000000000010201", [1]
|
20
|
+
routers.push @topology.add_router "of:1000000000010102", [1]
|
21
|
+
routers.push @topology.add_router "of:1000000000010202", [1]
|
22
|
+
routers.push @topology.add_router "of:1000000000010101", [1]
|
23
|
+
|
24
|
+
@topology.add_link "Link1", routers[7], 4, routers[12], 2, 500000000
|
25
|
+
@topology.add_link "Link2", routers[12], 2, routers[7], 4, 500000000
|
26
|
+
@topology.add_link "Link3", routers[3], 3, routers[12], 4, 500000000
|
27
|
+
@topology.add_link "Link4", routers[1], 2, routers[10], 3, 500000000
|
28
|
+
@topology.add_link "Link5", routers[11], 1, routers[13], 1, 500000000
|
29
|
+
@topology.add_link "Link6", routers[3], 2, routers[10], 4, 500000000
|
30
|
+
@topology.add_link "Link7", routers[9], 4, routers[6], 2, 500000000
|
31
|
+
@topology.add_link "Link8", routers[10], 1, routers[12], 1, 500000000
|
32
|
+
@topology.add_link "Link9", routers[13], 4, routers[2], 2, 500000000
|
33
|
+
@topology.add_link "Link10", routers[0], 2, routers[13], 3, 500000000
|
34
|
+
@topology.add_link "Link11", routers[2], 3, routers[11], 4, 500000000
|
35
|
+
@topology.add_link "Link12", routers[2], 2, routers[13], 4, 500000000
|
36
|
+
@topology.add_link "Link13", routers[13], 2, routers[4], 3, 500000000
|
37
|
+
@topology.add_link "Link14", routers[4], 2, routers[8], 1, 500000000
|
38
|
+
@topology.add_link "Link15", routers[4], 3, routers[13], 2, 500000000
|
39
|
+
@topology.add_link "Link16", routers[5], 2, routers[9], 3, 500000000
|
40
|
+
@topology.add_link "Link17", routers[6], 3, routers[8], 4, 500000000
|
41
|
+
@topology.add_link "Link18", routers[10], 3, routers[1], 2, 500000000
|
42
|
+
@topology.add_link "Link19", routers[12], 4, routers[3], 3, 500000000
|
43
|
+
@topology.add_link "Link20", routers[6], 2, routers[9], 4, 500000000
|
44
|
+
@topology.add_link "Link21", routers[12], 3, routers[1], 3, 500000000
|
45
|
+
@topology.add_link "Link22", routers[4], 4, routers[10], 2, 500000000
|
46
|
+
@topology.add_link "Link23", routers[10], 2, routers[4], 4, 500000000
|
47
|
+
@topology.add_link "Link24", routers[5], 3, routers[8], 3, 500000000
|
48
|
+
@topology.add_link "Link25", routers[10], 4, routers[3], 2, 500000000
|
49
|
+
@topology.add_link "Link26", routers[13], 1, routers[11], 1, 500000000
|
50
|
+
@topology.add_link "Link27", routers[4], 1, routers[9], 1, 500000000
|
51
|
+
@topology.add_link "Link28", routers[7], 2, routers[8], 2, 500000000
|
52
|
+
@topology.add_link "Link29", routers[7], 1, routers[9], 2, 500000000
|
53
|
+
@topology.add_link "Link30", routers[0], 3, routers[11], 3, 500000000
|
54
|
+
@topology.add_link "Link31", routers[11], 4, routers[2], 3, 500000000
|
55
|
+
@topology.add_link "Link32", routers[13], 3, routers[0], 2, 500000000
|
56
|
+
@topology.add_link "Link33", routers[11], 3, routers[0], 3, 500000000
|
57
|
+
@topology.add_link "Link34", routers[12], 1, routers[10], 1, 500000000
|
58
|
+
@topology.add_link "Link35", routers[8], 1, routers[4], 2, 500000000
|
59
|
+
@topology.add_link "Link36", routers[8], 2, routers[7], 2, 500000000
|
60
|
+
@topology.add_link "Link37", routers[8], 4, routers[6], 3, 500000000
|
61
|
+
@topology.add_link "Link38", routers[9], 1, routers[4], 1, 500000000
|
62
|
+
@topology.add_link "Link39", routers[9], 3, routers[5], 2, 500000000
|
63
|
+
@topology.add_link "Link40", routers[8], 3, routers[5], 3, 500000000
|
64
|
+
@topology.add_link "Link41", routers[9], 2, routers[7], 1, 500000000
|
65
|
+
@topology.add_link "Link42", routers[11], 2, routers[7], 3, 500000000
|
66
|
+
@topology.add_link "Link43", routers[1], 3, routers[12], 3, 500000000
|
67
|
+
@topology.add_link "Link44", routers[7], 3, routers[11], 2, 500000000
|
68
|
+
|
69
|
+
@topology.topology_elements
|
70
|
+
end
|
71
|
+
|
72
|
+
def get_path_between(source, destination)
|
73
|
+
#Think how to implement it!
|
74
|
+
Path.new(source,destination)
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
#PhaseITopologyPriorityQueues
|
2
|
+
|
3
|
+
=begin
|
4
|
+
http://asciiflow.com
|
5
|
+
|
6
|
+
+---------+ +-----------+ +-----------+
|
7
|
+
| | | | | |
|
8
|
+
| (Host0)| |(Host1) | | (Host2) |
|
9
|
+
| FelixServer1 |DCS | | Ctrl |
|
10
|
+
| | | | | |
|
11
|
+
+----+----+ +------+----+ +----+------+
|
12
|
+
| | |
|
13
|
+
| | |
|
14
|
+
| | |
|
15
|
+
| | |
|
16
|
+
| +-----+-------+ |
|
17
|
+
| | | |
|
18
|
+
+-----------------+ | |
|
19
|
+
| Router0 +-------------+
|
20
|
+
| |
|
21
|
+
+-----+-------+
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
+-----+-------+
|
26
|
+
| |
|
27
|
+
| |
|
28
|
+
+--------------------+ Router1 +-----------------+
|
29
|
+
| | | |
|
30
|
+
| +------+------+ |
|
31
|
+
| | |
|
32
|
+
| | |
|
33
|
+
+-----+------+ +--------+-----+ +-------+--------+
|
34
|
+
| | | | | |
|
35
|
+
| | | (Host4) | | (Host5) |
|
36
|
+
| (Host3) | | Dst2 | | Dst3 |
|
37
|
+
| Dst1 | | | | |
|
38
|
+
| | | | | |
|
39
|
+
+------------+ +--------------+ +----------------+
|
40
|
+
|
41
|
+
|
42
|
+
=end
|
43
|
+
|
44
|
+
module NetworkTopology
|
45
|
+
def get_topology
|
46
|
+
return @topology.topology_elements if @topology.topology_elements.size != 0
|
47
|
+
|
48
|
+
routers = []
|
49
|
+
hosts = []
|
50
|
+
|
51
|
+
for i in 0..1
|
52
|
+
routers.push @topology.add_router "MyRouter#{i}", [6,3,1,1,1,1,1,1]
|
53
|
+
end
|
54
|
+
|
55
|
+
for i in 0..5
|
56
|
+
host = @topology.add_host "Host#{i}"
|
57
|
+
hosts.push host
|
58
|
+
end
|
59
|
+
|
60
|
+
# In these examples, we dont need the links that goes from dst to FelixServer, DCS or control
|
61
|
+
# since the dst host's are never source.
|
62
|
+
|
63
|
+
#Links (starting from the flows that goes from top to bottom)
|
64
|
+
link1 = @topology.add_link "Link1", hosts[0], 0, routers[0], 0, 3*1000*1000 # 500 Mb/s
|
65
|
+
link2 = @topology.add_link "Link2", hosts[1], 0, routers[0], 1, 3*1000*1000 # 500 Mb/s
|
66
|
+
link3 = @topology.add_link "Link3", hosts[2], 0, routers[0], 2, 3*1000*1000 # 500 Mb/s
|
67
|
+
|
68
|
+
link4 = @topology.add_link "Link4", routers[0], 0, routers[1], 0, 2*1000*1000 # 500 Mb/s
|
69
|
+
|
70
|
+
link5 = @topology.add_link "Link5", routers[1], 0, hosts[3], 0, 3*1000*1000 # 500 Mb/s
|
71
|
+
link6 = @topology.add_link "Link6", routers[1], 1, hosts[4], 0, 3*1000*1000 # 500 Mb/s
|
72
|
+
link7 = @topology.add_link "Link7", routers[1], 2, hosts[5], 0, 3*1000*1000 # 500 Mb/s
|
73
|
+
|
74
|
+
flow_1_path = Path.new hosts[0], hosts[3]
|
75
|
+
flow_1_path.add_link link1
|
76
|
+
flow_1_path.add_link link4
|
77
|
+
flow_1_path.add_link link5
|
78
|
+
@topology.add_flow "Flow1",
|
79
|
+
0,
|
80
|
+
flow_1_path,
|
81
|
+
(ConstantDistribution.new 0.001), #distribution rate in seconds
|
82
|
+
(ConstantDistribution.new 1*1000) #distribution size in bits
|
83
|
+
|
84
|
+
flow_2_path = Path.new hosts[1], hosts[4]
|
85
|
+
flow_2_path.add_link link2
|
86
|
+
flow_2_path.add_link link4
|
87
|
+
flow_2_path.add_link link6
|
88
|
+
@topology.add_flow "Flow2",
|
89
|
+
1,
|
90
|
+
flow_2_path,
|
91
|
+
(ConstantDistribution.new 0.001), #distribution rate in seconds
|
92
|
+
(ConstantDistribution.new 1*1000) #distribution size in bits
|
93
|
+
|
94
|
+
flow_3_path = Path.new hosts[2], hosts[5]
|
95
|
+
flow_3_path.add_link link3
|
96
|
+
flow_3_path.add_link link4
|
97
|
+
flow_3_path.add_link link7
|
98
|
+
@topology.add_flow "Flow3",
|
99
|
+
2,
|
100
|
+
flow_3_path,
|
101
|
+
(ConstantDistribution.new 0.001), #distribution rate in seconds
|
102
|
+
(ConstantDistribution.new 1*1000) #distribution size in bits
|
103
|
+
|
104
|
+
@topology.topology_elements
|
105
|
+
end
|
106
|
+
|
107
|
+
def get_path_between(source, destination)
|
108
|
+
raise Exception, "Source must be either from class Router or class Host to ask for a path" unless [Host, Router].include? source.class
|
109
|
+
raise Exception, "Destination must be either from class Router or class Host to ask for a path" unless [Host, Router].include? destination.class
|
110
|
+
|
111
|
+
first_link = @topology.topology_elements.select { |elem| (elem.is_a? Link) && (elem.src_element == source) }.first
|
112
|
+
second_link = @topology.topology_elements.select { |elem| (elem.is_a? Link) && (elem.dst_element == destination) }.first
|
113
|
+
|
114
|
+
path = Path.new(source,destination)
|
115
|
+
path.add_link first_link
|
116
|
+
path.add_link second_link
|
117
|
+
path
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
#PhaseITopologyPriorityQueues
|
2
|
+
|
3
|
+
=begin
|
4
|
+
http://asciiflow.com
|
5
|
+
|
6
|
+
+---------+ +----------+
|
7
|
+
| | | |
|
8
|
+
| | | |
|
9
|
+
| Host 0 | | |
|
10
|
+
| | |Host 1 |
|
11
|
+
+--------++ +----+-----+
|
12
|
+
| |
|
13
|
+
| +-----------+ |
|
14
|
+
| | | |
|
15
|
+
+---+ +--------+
|
16
|
+
|Router 0 |
|
17
|
+
| |
|
18
|
+
+------+----+
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
+-------+-----+
|
24
|
+
| |
|
25
|
+
| |
|
26
|
+
| Host 2 |
|
27
|
+
| |
|
28
|
+
+-------------+
|
29
|
+
|
30
|
+
|
31
|
+
=end
|
32
|
+
|
33
|
+
module NetworkTopology
|
34
|
+
def get_topology
|
35
|
+
return @topology.topology_elements if @topology.topology_elements.size != 0
|
36
|
+
|
37
|
+
routers = []
|
38
|
+
hosts = []
|
39
|
+
|
40
|
+
router = @topology.add_router "MyRouter1"
|
41
|
+
routers.push router
|
42
|
+
|
43
|
+
for i in 0..2
|
44
|
+
host = @topology.add_host "Host#{i}"
|
45
|
+
hosts.push host
|
46
|
+
end
|
47
|
+
|
48
|
+
#Links (starting from the flows that goes from top to bottom)
|
49
|
+
link1 = @topology.add_link "Link1", hosts[0], 0, routers[0], 0
|
50
|
+
link2 = @topology.add_link "Link2", hosts[1], 0, routers[0], 1
|
51
|
+
|
52
|
+
link3 = @topology.add_link "Link3", routers[0], 0, hosts[2], 0
|
53
|
+
|
54
|
+
#Links (flows that goes from bottom to top)
|
55
|
+
link4 = @topology.add_link "Link4", hosts[2], 0, routers[0], 2
|
56
|
+
|
57
|
+
link5 = @topology.add_link "Link5", routers[0], 1, hosts[0], 0
|
58
|
+
link6 = @topology.add_link "Link6", routers[0], 2, hosts[1], 0
|
59
|
+
|
60
|
+
flow_1_path = Path.new hosts[0], hosts[2]
|
61
|
+
flow_1_path.add_link link1
|
62
|
+
flow_1_path.add_link link3
|
63
|
+
@topology.add_flow "Flow1",
|
64
|
+
10,
|
65
|
+
flow_1_path,
|
66
|
+
(ExponentialDistribution.new 1.0/6875),
|
67
|
+
(ConstantDistribution.new 1000*8)
|
68
|
+
|
69
|
+
flow_2_path = Path.new hosts[1], hosts[2]
|
70
|
+
flow_2_path.add_link link2
|
71
|
+
flow_2_path.add_link link3
|
72
|
+
@topology.add_flow "Flow2",
|
73
|
+
15,
|
74
|
+
flow_2_path,
|
75
|
+
(ExponentialDistribution.new 1.0/6875),
|
76
|
+
(ConstantDistribution.new 1000*8)
|
77
|
+
|
78
|
+
flow_3_path = Path.new hosts[2], hosts[1]
|
79
|
+
flow_3_path.add_link link4
|
80
|
+
flow_3_path.add_link link5
|
81
|
+
@topology.add_flow "Flow3",
|
82
|
+
20,
|
83
|
+
flow_3_path,
|
84
|
+
(ExponentialDistribution.new 1.0/6875),
|
85
|
+
(ConstantDistribution.new 1000*8)
|
86
|
+
|
87
|
+
@topology.topology_elements
|
88
|
+
end
|
89
|
+
|
90
|
+
def get_path_between(source, destination)
|
91
|
+
raise Exception, "Source must be either from class Router or class Host to ask for a path" unless [Host, Router].include? source.class
|
92
|
+
raise Exception, "Destination must be either from class Router or class Host to ask for a path" unless [Host, Router].include? destination.class
|
93
|
+
|
94
|
+
first_link = @topology.topology_elements.select { |elem| (elem.is_a? Link) && (elem.src_element == source) }.first
|
95
|
+
second_link = @topology.topology_elements.select { |elem| (elem.is_a? Link) && (elem.dst_element == destination) }.first
|
96
|
+
|
97
|
+
path = Path.new(source,destination)
|
98
|
+
path.add_link first_link
|
99
|
+
path.add_link second_link
|
100
|
+
path
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
#include "FlowDefinitions.h"
|
2
|
+
|
3
|
+
std::multimap<std::string, std::shared_ptr<Flow>> FlowDefinitions::Flows;
|
4
|
+
|
5
|
+
void FlowDefinitions::defineFlows(){
|
6
|
+
|
7
|
+
|
8
|
+
///// definition of flow Flow0_1
|
9
|
+
auto flowFlow0_1PeriodDistribution = readDistributionParameter("flowFlow0_1.periodDistribution");
|
10
|
+
auto flowFlow0_1PacketSizeDistribution = readDistributionParameter("flowFlow0_1.packetSizeDistribution");
|
11
|
+
auto flowFlow0_1 = std::make_shared<Flow>("Flow0_1", 0 /*startTime*/, 0 /*typeOfService*/, flowFlow0_1PeriodDistribution, flowFlow0_1PacketSizeDistribution);
|
12
|
+
// routes for flow Flow0_1
|
13
|
+
auto flowFlow0_1_route0 = std::make_shared<Route>( std::deque<Route::Node>{
|
14
|
+
{0, "lar_felix_0.Routing"},
|
15
|
+
{2, "lar_switch_01.Routing"},
|
16
|
+
{0, "lar_swrod_0.Routing"}
|
17
|
+
});
|
18
|
+
auto flowFlow0_1_route1 = std::make_shared<Route>( std::deque<Route::Node>{
|
19
|
+
{1, "lar_felix_0.Routing"},
|
20
|
+
{2, "lar_switch_02.Routing"},
|
21
|
+
{1, "lar_swrod_0.Routing"}
|
22
|
+
});
|
23
|
+
// register flow Flow0_1 with its routes
|
24
|
+
FlowDefinitions::registerFlowSourceNode(flowFlow0_1, "lar_felix_0.GeneratorApplication");
|
25
|
+
FlowDefinitions::registerFlowRoute(flowFlow0_1, flowFlow0_1_route0);
|
26
|
+
FlowDefinitions::registerFlowRoute(flowFlow0_1, flowFlow0_1_route1);
|
27
|
+
|
28
|
+
|
29
|
+
///// definition of flow Flow_Monitoring0_1
|
30
|
+
auto flowFlow_Monitoring0_1PeriodDistribution = readDistributionParameter("flowFlow_Monitoring0_1.periodDistribution");
|
31
|
+
auto flowFlow_Monitoring0_1PacketSizeDistribution = readDistributionParameter("flowFlow_Monitoring0_1.packetSizeDistribution");
|
32
|
+
auto flowFlow_Monitoring0_1 = std::make_shared<Flow>("Flow_Monitoring0_1", 0 /*startTime*/, 0 /*typeOfService*/, flowFlow_Monitoring0_1PeriodDistribution, flowFlow_Monitoring0_1PacketSizeDistribution);
|
33
|
+
// routes for flow Flow_Monitoring0_1
|
34
|
+
auto flowFlow_Monitoring0_1_route0 = std::make_shared<Route>( std::deque<Route::Node>{
|
35
|
+
{0, "lar_felix_0.Routing"},
|
36
|
+
{2, "lar_switch_01.Routing"},
|
37
|
+
{0, "lar_swrod_0.Routing"}
|
38
|
+
});
|
39
|
+
// register flow Flow_Monitoring0_1 with its routes
|
40
|
+
FlowDefinitions::registerFlowSourceNode(flowFlow_Monitoring0_1, "lar_felix_0.GeneratorApplication");
|
41
|
+
FlowDefinitions::registerFlowRoute(flowFlow_Monitoring0_1, flowFlow_Monitoring0_1_route0);
|
42
|
+
|
43
|
+
|
44
|
+
///// definition of flow Flow_Control0_1
|
45
|
+
auto flowFlow_Control0_1PeriodDistribution = readDistributionParameter("flowFlow_Control0_1.periodDistribution");
|
46
|
+
auto flowFlow_Control0_1PacketSizeDistribution = readDistributionParameter("flowFlow_Control0_1.packetSizeDistribution");
|
47
|
+
auto flowFlow_Control0_1 = std::make_shared<Flow>("Flow_Control0_1", 0 /*startTime*/, 0 /*typeOfService*/, flowFlow_Control0_1PeriodDistribution, flowFlow_Control0_1PacketSizeDistribution);
|
48
|
+
// routes for flow Flow_Control0_1
|
49
|
+
auto flowFlow_Control0_1_route0 = std::make_shared<Route>( std::deque<Route::Node>{
|
50
|
+
{1, "lar_felix_0.Routing"},
|
51
|
+
{2, "lar_switch_02.Routing"},
|
52
|
+
{1, "lar_swrod_0.Routing"}
|
53
|
+
});
|
54
|
+
// register flow Flow_Control0_1 with its routes
|
55
|
+
FlowDefinitions::registerFlowSourceNode(flowFlow_Control0_1, "lar_felix_0.GeneratorApplication");
|
56
|
+
FlowDefinitions::registerFlowRoute(flowFlow_Control0_1, flowFlow_Control0_1_route0);
|
57
|
+
|
58
|
+
|
59
|
+
///// definition of flow Flow1_1
|
60
|
+
auto flowFlow1_1PeriodDistribution = readDistributionParameter("flowFlow1_1.periodDistribution");
|
61
|
+
auto flowFlow1_1PacketSizeDistribution = readDistributionParameter("flowFlow1_1.packetSizeDistribution");
|
62
|
+
auto flowFlow1_1 = std::make_shared<Flow>("Flow1_1", 0 /*startTime*/, 0 /*typeOfService*/, flowFlow1_1PeriodDistribution, flowFlow1_1PacketSizeDistribution);
|
63
|
+
// routes for flow Flow1_1
|
64
|
+
auto flowFlow1_1_route0 = std::make_shared<Route>( std::deque<Route::Node>{
|
65
|
+
{0, "lar_felix_1.Routing"},
|
66
|
+
{3, "lar_switch_01.Routing"},
|
67
|
+
{0, "lar_swrod_1.Routing"}
|
68
|
+
});
|
69
|
+
auto flowFlow1_1_route1 = std::make_shared<Route>( std::deque<Route::Node>{
|
70
|
+
{1, "lar_felix_1.Routing"},
|
71
|
+
{3, "lar_switch_02.Routing"},
|
72
|
+
{1, "lar_swrod_1.Routing"}
|
73
|
+
});
|
74
|
+
// register flow Flow1_1 with its routes
|
75
|
+
FlowDefinitions::registerFlowSourceNode(flowFlow1_1, "lar_felix_1.GeneratorApplication");
|
76
|
+
FlowDefinitions::registerFlowRoute(flowFlow1_1, flowFlow1_1_route0);
|
77
|
+
FlowDefinitions::registerFlowRoute(flowFlow1_1, flowFlow1_1_route1);
|
78
|
+
|
79
|
+
|
80
|
+
///// definition of flow Flow_Monitoring1_1
|
81
|
+
auto flowFlow_Monitoring1_1PeriodDistribution = readDistributionParameter("flowFlow_Monitoring1_1.periodDistribution");
|
82
|
+
auto flowFlow_Monitoring1_1PacketSizeDistribution = readDistributionParameter("flowFlow_Monitoring1_1.packetSizeDistribution");
|
83
|
+
auto flowFlow_Monitoring1_1 = std::make_shared<Flow>("Flow_Monitoring1_1", 0 /*startTime*/, 0 /*typeOfService*/, flowFlow_Monitoring1_1PeriodDistribution, flowFlow_Monitoring1_1PacketSizeDistribution);
|
84
|
+
// routes for flow Flow_Monitoring1_1
|
85
|
+
auto flowFlow_Monitoring1_1_route0 = std::make_shared<Route>( std::deque<Route::Node>{
|
86
|
+
{0, "lar_felix_1.Routing"},
|
87
|
+
{3, "lar_switch_01.Routing"},
|
88
|
+
{0, "lar_swrod_1.Routing"}
|
89
|
+
});
|
90
|
+
// register flow Flow_Monitoring1_1 with its routes
|
91
|
+
FlowDefinitions::registerFlowSourceNode(flowFlow_Monitoring1_1, "lar_felix_1.GeneratorApplication");
|
92
|
+
FlowDefinitions::registerFlowRoute(flowFlow_Monitoring1_1, flowFlow_Monitoring1_1_route0);
|
93
|
+
|
94
|
+
|
95
|
+
///// definition of flow Flow_Control1_1
|
96
|
+
auto flowFlow_Control1_1PeriodDistribution = readDistributionParameter("flowFlow_Control1_1.periodDistribution");
|
97
|
+
auto flowFlow_Control1_1PacketSizeDistribution = readDistributionParameter("flowFlow_Control1_1.packetSizeDistribution");
|
98
|
+
auto flowFlow_Control1_1 = std::make_shared<Flow>("Flow_Control1_1", 0 /*startTime*/, 0 /*typeOfService*/, flowFlow_Control1_1PeriodDistribution, flowFlow_Control1_1PacketSizeDistribution);
|
99
|
+
// routes for flow Flow_Control1_1
|
100
|
+
auto flowFlow_Control1_1_route0 = std::make_shared<Route>( std::deque<Route::Node>{
|
101
|
+
{1, "lar_felix_1.Routing"},
|
102
|
+
{3, "lar_switch_02.Routing"},
|
103
|
+
{1, "lar_swrod_1.Routing"}
|
104
|
+
});
|
105
|
+
// register flow Flow_Control1_1 with its routes
|
106
|
+
FlowDefinitions::registerFlowSourceNode(flowFlow_Control1_1, "lar_felix_1.GeneratorApplication");
|
107
|
+
FlowDefinitions::registerFlowRoute(flowFlow_Control1_1, flowFlow_Control1_1_route0);
|
108
|
+
|
109
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
cp topology.pdm /home/alaurito/Desktop/repos/powerdevs/examples/Andy
|
4
|
+
cp FlowDefinitions.cpp /home/alaurito/Desktop/repos/powerdevs/atomics/PhaseI
|
5
|
+
cp flows_definition.scilabParams /home/alaurito/Desktop/repos/powerdevs/examples/Matias/PhaseI/Scilab
|
6
|
+
cp links_definition.scilabParams /home/alaurito/Desktop/repos/powerdevs/examples/Matias/PhaseI/Scilab
|
7
|
+
cp routers_definition.scilabParams /home/alaurito/Desktop/repos/powerdevs/examples/Matias/PhaseI/Scilab
|
8
|
+
cp hosts_definition.scilabParams /home/alaurito/Desktop/repos/powerdevs/examples/Matias/PhaseI/Scilab
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
flowFlow0_1.periodDistribution = DISTRIBUTION_EXPONENTIAL;
|
3
|
+
flowFlow0_1.periodDistribution_mu = 0.1; // mean for the exponential distribution.
|
4
|
+
flowFlow0_1.packetSizeDistribution = DISTRIBUTION_CONSTANT;
|
5
|
+
flowFlow0_1.packetSizeDistribution_value = 1000.0; // value for the constant distribution
|
6
|
+
|
7
|
+
flowFlow_Monitoring0_1.periodDistribution = DISTRIBUTION_EXPONENTIAL;
|
8
|
+
flowFlow_Monitoring0_1.periodDistribution_mu = 0.05; // mean for the exponential distribution.
|
9
|
+
flowFlow_Monitoring0_1.packetSizeDistribution = DISTRIBUTION_CONSTANT;
|
10
|
+
flowFlow_Monitoring0_1.packetSizeDistribution_value = 500; // value for the constant distribution
|
11
|
+
|
12
|
+
flowFlow_Control0_1.periodDistribution = DISTRIBUTION_EXPONENTIAL;
|
13
|
+
flowFlow_Control0_1.periodDistribution_mu = 0.06666666666666667; // mean for the exponential distribution.
|
14
|
+
flowFlow_Control0_1.packetSizeDistribution = DISTRIBUTION_CONSTANT;
|
15
|
+
flowFlow_Control0_1.packetSizeDistribution_value = 100; // value for the constant distribution
|
16
|
+
|
17
|
+
flowFlow1_1.periodDistribution = DISTRIBUTION_EXPONENTIAL;
|
18
|
+
flowFlow1_1.periodDistribution_mu = 0.1; // mean for the exponential distribution.
|
19
|
+
flowFlow1_1.packetSizeDistribution = DISTRIBUTION_CONSTANT;
|
20
|
+
flowFlow1_1.packetSizeDistribution_value = 1000.0; // value for the constant distribution
|
21
|
+
|
22
|
+
flowFlow_Monitoring1_1.periodDistribution = DISTRIBUTION_EXPONENTIAL;
|
23
|
+
flowFlow_Monitoring1_1.periodDistribution_mu = 0.05; // mean for the exponential distribution.
|
24
|
+
flowFlow_Monitoring1_1.packetSizeDistribution = DISTRIBUTION_CONSTANT;
|
25
|
+
flowFlow_Monitoring1_1.packetSizeDistribution_value = 500; // value for the constant distribution
|
26
|
+
|
27
|
+
flowFlow_Control1_1.periodDistribution = DISTRIBUTION_EXPONENTIAL;
|
28
|
+
flowFlow_Control1_1.periodDistribution_mu = 0.06666666666666667; // mean for the exponential distribution.
|
29
|
+
flowFlow_Control1_1.packetSizeDistribution = DISTRIBUTION_CONSTANT;
|
30
|
+
flowFlow_Control1_1.packetSizeDistribution_value = 100; // value for the constant distribution
|