net = Containernet(controller=RemoteController, ) info('*** Adding controller\n') net.addController('c0', controller=RemoteController, ip=REMOTE_CONTROLLER_IP, port=6653) info('*** Adding switches\n') s1 = net.addSwitch('s1', protocols='OpenFlow13') s2 = net.addSwitch('s2', protocols='OpenFlow13') s3 = net.addSwitch('s3', protocols='OpenFlow13') info('*** Adding Nat Host\n') net.addNAT().configDefault() info('*** Adding docker containers\n') d1 = net.addDocker('d1', dimage="ftpwebvideo:latest") d2 = net.addDocker('d2', dimage="ftpwebvideo:latest") d3 = net.addDocker('d3', dimage="ftpwebvideo:latest") d4 = net.addDocker('d4', dimage="ftpwebvideo:latest") info('*** Adding docker containers\n') d1.start() d2.start() d3.start() d4.start() info('*** Creating links\n') net.addLink(d1, s2, cls=TCLink, delay='0ms', bw=20)
def createTopology(self, topoOptions): self.options = topoOptions networks = [] mininet_logger = MyMininetLogger() lg.handlers.pop( ) # remove default <StreamHandlerNoNewline <stderr> (Level 25)> lg.addHandler(mininet_logger) lg.setLevel(logging.INFO) if self.options["controllerType"] == "local" or self.options["controllerType"] == "remote" \ or self.options["controllerType"] == "none": pass elif self.options["controllerType"] == "floodlight": os.system('sudo docker run -d -p ' + str(self.options["controllerPort"]) + ':6653 -p ' + str(self.options["controllerWebGui"]) + ':8080 --name=' + self.options["controllerName"] + ' glefevre/floodlight >/dev/null') else: raise ValueError("Unknown controller option", self.options["controllerType"]) if self.options["method"] == "load": networks.extend(self.__createTopologyFromFile()) elif self.options["method"] == "predefined": predefinedTopo = predefinedTopos.topos[self.options["path"]] if not issubclass(predefinedTopo, predefinedTopos.IPredefinedTopology): raise ValueError( "Predefined topology \"" + self.options["path"] + "\" does NOT inherit a proper interface (\"IPredefinedTopology\"." ) else: net = predefinedTopo.getNetwork() if type(net) is list: networks.extend(net) else: networks.append(net) elif self.options["method"] == "custom": net = Containernet(controller=Controller, ipBase=self.options["ipBase"]) delay = str(self.options["linkDelay"]) + "ms" volumePath = self.options["volumeMachine"] + ":" + self.options[ "volumeHost"] gatewayIp = self.options["ipBase"].split('/')[0] gatewayIp = gatewayIp.split('.') gatewayIp = '.'.join( [gatewayIp[0], gatewayIp[1], gatewayIp[2], '1']) gateway = net.addNAT('gw0', ip=gatewayIp, connect=False, inNamespace=(not self.options["NAT"])) general_parameters = (net, gateway, gatewayIp, delay, volumePath) if self.options["topoStyle"] == "linear": self.__createCustomLinear(*general_parameters, *self.options["topoSpecific"]) elif self.options["topoStyle"] == "tree": self.__createCustomTree(*general_parameters, *self.options["topoSpecific"]) elif self.options["topoStyle"] == "torus": self.__createCustomTorus(*general_parameters, *self.options["topoSpecific"]) else: raise ValueError("Unknown custom topology style (\"" + self.options["topoStyle"] + "\").") networks.append(net) else: raise ValueError("Unknown creation method \"" + self.options["method"] + "\".") local_controller = None for net in networks: if not net.controllers: if self.options["controllerType"] == "none": pass elif self.options["controllerType"] == "local": if local_controller is None: local_controller = net.addController(name='con0') else: net.addController(local_controller) else: net.addController(name='con0', controller=RemoteController, ip=self.options["controllerIp"], port=self.options["controllerPort"]) net.start() return networks, mininet_logger