topologygenerator 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|