Exemple #1
0
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