eace03a9c40d32470a1c9590cfde3630d8279354
2 Distributed Cloud Emulator (dcemulator)
3 (c) 2015 by Manuel Peuster <manuel.peuster@upb.de>
7 from mininet
.net
import Dockernet
8 from mininet
.node
import Controller
, OVSKernelSwitch
, Switch
, Docker
, Host
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
, EmulatorCompute
16 class DCNetwork(Dockernet
):
18 Wraps the original Mininet/Dockernet class and provides
19 methods to add data centers, switches, etc.
21 This class is used by topology definition scripts.
24 def __init__(self
, **kwargs
):
26 # create a Mininet/Dockernet network
27 # call original Docker.__init__ and setup default controller
29 self
, controller
=Controller
, switch
=OVSKernelSwitch
, **kwargs
)
30 self
.addController('c0')
32 def addDatacenter(self
, name
):
34 Create and add a logical cloud data center to the network.
37 raise Exception("Data center name already exists: %s" % name
)
39 dc
.net
= self
# set reference to network
41 dc
.create() # finally create the data center in our Mininet instance
42 logging
.info("added data center: %s" % name
)
45 def addLink(self
, node1
, node2
, **params
):
47 Able to handle Datacenter objects as link
50 assert node1
is not None
51 assert node2
is not None
52 logging
.debug("addLink: n1=%s n2=%s" % (str(node1
), str(node2
)))
53 # ensure type of node1
54 if isinstance( node1
, basestring
):
56 node1
= self
.dcs
[node1
].switch
57 if isinstance( node1
, Datacenter
):
59 # ensure type of node2
60 if isinstance( node2
, basestring
):
62 node2
= self
.dcs
[node2
].switch
63 if isinstance( node2
, Datacenter
):
65 # try to give containers a default IP
66 if isinstance( node1
, Docker
):
67 if not "params1" in params
:
68 params
["params1"] = {}
69 if not "ip" in params
["params1"]:
70 params
["params1"]["ip"] = self
.getNextIp()
71 if isinstance( node2
, Docker
):
72 if not "params2" in params
:
73 params
["params2"] = {}
74 if not "ip" in params
["params2"]:
75 params
["params2"]["ip"] = self
.getNextIp()
77 return Dockernet
.addLink(self
, node1
, node2
, **params
) # TODO we need TCLinks with user defined performance here
79 def addDocker( self
, name
, **params
):
81 Wrapper for addDocker method to use custom container class.
83 return Dockernet
.addDocker(self
, name
, cls
=EmulatorCompute
, **params
)
85 def getAllContainers(self
):
87 Returns a list with all containers within all data centers.
90 for dc
in self
.dcs
.itervalues():
91 all_containers
+= dc
.listCompute()
96 for dc
in self
.dcs
.itervalues():