586b1e8421f5f269b54925297107a890d20d8d7b
2 Distributed Cloud Emulator (dcemulator)
3 (c) 2015 by Manuel Peuster <manuel.peuster@upb.de>
7 from mininet
.net
import Mininet
8 from mininet
.node
import Controller
, OVSKernelSwitch
, Switch
9 from mininet
.cli
import CLI
10 from mininet
.log
import setLogLevel
, info
11 from mininet
.link
import TCLink
, Link
13 from node
import Datacenter
16 class DCNetwork(object):
23 # create a Mininet/Dockernet network
24 setLogLevel('info') # set Mininet loglevel
25 self
.mnet
= Mininet(controller
=Controller
, switch
=OVSKernelSwitch
)
26 self
.mnet
.addController('c0')
28 def addDatacenter(self
, name
):
30 Create and add a logical cloud data center to the network.
33 raise Exception("Data center name already exists: %s" % name
)
35 dc
.net
= self
# set reference to network
37 dc
.create() # finally create the data center in our Mininet instance
38 logging
.info("added data center: %s" % name
)
41 def addSwitch(self
, name
):
43 We can also add additional SDN switches between data centers.
45 s
= self
.mnet
.addSwitch(name
)
46 self
.switches
[name
] = s
47 logging
.info("added switch: %s" % name
)
50 def addLink(self
, node1
, node2
):
51 assert node1
is not None
52 assert node2
is not None
53 # ensure type of node1
54 if isinstance( node1
, basestring
):
56 node1
= self
.dcs
[node1
].switch
57 elif node1
in self
.switches
:
58 node1
= self
.switches
[node1
]
59 if isinstance( node1
, Datacenter
):
61 # ensure type of node2
62 if isinstance( node2
, basestring
):
64 node2
= self
.dcs
[node2
].switch
65 elif node2
in self
.switches
:
66 node2
= self
.switches
[node2
]
67 if isinstance( node2
, Datacenter
):
69 # create link if everything is correct
70 if (node1
is not None and isinstance(node1
, OVSKernelSwitch
)
71 and node2
is not None and isinstance(node2
, OVSKernelSwitch
)):
72 self
.mnet
.addLink(node1
, node2
) # TODO we need TCLinks with user defined performance here
75 "one of the given nodes is not a Mininet switch or None")
79 for dc
in self
.dcs
.itervalues():