X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Fdcemulator%2Fnet.py;h=3556535784a2d4c792096573571343bccf39c606;hb=b63a5b4d2e960b176c6547f826419adc44a7f9cf;hp=9ca75f764399f276e4270045cb6a0651dfe8b896;hpb=7cd3c2529e5b926d0ca11bbaaa106cb8875059a4;p=osm%2Fvim-emu.git diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py index 9ca75f7..3556535 100755 --- a/src/emuvim/dcemulator/net.py +++ b/src/emuvim/dcemulator/net.py @@ -12,7 +12,7 @@ import re import urllib2 from functools import partial -from mininet.net import Dockernet +from mininet.net import Containernet from mininet.node import Controller, DefaultController, OVSSwitch, OVSKernelSwitch, Docker, RemoteController from mininet.cli import CLI from mininet.link import TCLink @@ -21,9 +21,9 @@ from emuvim.dcemulator.monitoring import DCNetworkMonitor from emuvim.dcemulator.node import Datacenter, EmulatorCompute from emuvim.dcemulator.resourcemodel import ResourceModelRegistrar -class DCNetwork(Dockernet): +class DCNetwork(Containernet): """ - Wraps the original Mininet/Dockernet class and provides + Wraps the original Mininet/Containernet class and provides methods to add data centers, switches, etc. This class is used by topology definition scripts. @@ -35,7 +35,7 @@ class DCNetwork(Dockernet): dc_emulation_max_mem=512, # emulation max mem in MB **kwargs): """ - Create an extended version of a Dockernet network + Create an extended version of a Containernet network :param dc_emulation_max_cpu: max. CPU time used by containers in data centers :param kwargs: path through for Mininet parameters :return: @@ -43,9 +43,10 @@ class DCNetwork(Dockernet): self.dcs = {} # call original Docker.__init__ and setup default controller - Dockernet.__init__( + Containernet.__init__( self, switch=OVSKernelSwitch, controller=controller, **kwargs) + # Ryu management self.ryu_process = None if controller == RemoteController: @@ -122,11 +123,11 @@ class DCNetwork(Dockernet): params["params2"]["ip"] = self.getNextIp() # ensure that we allow TCLinks between data centers # TODO this is not optimal, we use cls=Link for containers and TCLink for data centers - # see Dockernet issue: https://github.com/mpeuster/dockernet/issues/3 + # see Containernet issue: https://github.com/mpeuster/containernet/issues/3 if "cls" not in params: params["cls"] = TCLink - link = Dockernet.addLink(self, node1, node2, **params) + link = Containernet.addLink(self, node1, node2, **params) # try to give container interfaces a default id node1_port_id = node1.ports[link.intf1] @@ -144,7 +145,7 @@ class DCNetwork(Dockernet): # add edge and assigned port number to graph in both directions between node1 and node2 # port_id: id given in descriptor (if available, otherwise same as port) - # port: portnumber assigned by Dockernet + # port: portnumber assigned by Containernet attr_dict = {} # possible weight metrics allowed by TClink class: @@ -181,14 +182,14 @@ class DCNetwork(Dockernet): Wrapper for addDocker method to use custom container class. """ self.DCNetwork_graph.add_node(label) - return Dockernet.addDocker(self, label, cls=EmulatorCompute, **params) + return Containernet.addDocker(self, label, cls=EmulatorCompute, **params) def removeDocker( self, label, **params ): """ Wrapper for removeDocker method to update graph. """ self.DCNetwork_graph.remove_node(label) - return Dockernet.removeDocker(self, label, **params) + return Containernet.removeDocker(self, label, **params) def addSwitch( self, name, add_to_graph=True, **params ): """ @@ -196,7 +197,7 @@ class DCNetwork(Dockernet): """ if add_to_graph: self.DCNetwork_graph.add_node(name) - return Dockernet.addSwitch(self, name, protocols='OpenFlow10,OpenFlow12,OpenFlow13', **params) + return Containernet.addSwitch(self, name, protocols='OpenFlow10,OpenFlow12,OpenFlow13', **params) def getAllContainers(self): """ @@ -211,7 +212,7 @@ class DCNetwork(Dockernet): # start for dc in self.dcs.itervalues(): dc.start() - Dockernet.start(self) + Containernet.start(self) def stop(self): @@ -220,7 +221,7 @@ class DCNetwork(Dockernet): self.monitor_agent.stop() # stop emulator net - Dockernet.stop(self) + Containernet.stop(self) # stop Ryu controller self.stopRyu() @@ -365,7 +366,6 @@ class DCNetwork(Dockernet): flow = {} flow['dpid'] = int(node.dpid, 16) - logging.info('node name:{0}'.format(node.name)) if cookie: flow['cookie'] = int(cookie) @@ -400,14 +400,14 @@ class DCNetwork(Dockernet): action['type'] = 'OUTPUT' action['port'] = switch_outport_nr flow['actions'].append(action) - #flow['match'] = self._parse_match(match) + elif cmd == 'del-flows': - #del(flow['actions']) prefix = 'stats/flowentry/delete' + + # if cookie is given, only delete flows by cookie + # do not specify other match -> also other cookies can be matched if cookie: - flow['cookie_mask'] = cookie - #if cookie is None: - # flow['match'] = self._parse_match(match) + flow['cookie_mask'] = int('0xffffffffffffffff', 16) # need full mask to match complete cookie action = {} action['type'] = 'OUTPUT' @@ -479,6 +479,7 @@ class DCNetwork(Dockernet): self.ryu_process.kill() def ryu_REST(self, prefix, dpid=None, data=None): + if data: logging.info('log POST: {0}'.format(str(data))) try: if dpid: url = self.ryu_REST_api + '/' + str(prefix) + '/' + str(dpid)