Example #1
0
    def _handle_ComponentRegistered(self, event):
        """
    Wait for controller (internal POX module)

    :param event: registered component event
    :type event: :class:`ComponentRegistered`
    :return: None
    """
        # Check if our POX controller is up
        # ESCAPEConfig follows Singleton design pattern
        internal_adapters = CONFIG.get_component_params(
            component="INTERNAL")['adapters']
        # print internal_adapters
        internal_controller = CONFIG.get_component(component="CONTROLLER",
                                                   parent=internal_adapters)
        # print internal_controller
        if event.name == internal_controller.name and isinstance(
                event.component, OpenFlow_01_Task):
            if self.topology is not None:
                log.info(
                    "Internal domain controller is up! Initiate network emulation "
                    "now...")
                self.topology.start_network()
            else:
                log.error(
                    "Mininet topology is missing! Skip network starting...")
Example #2
0
    def start_network(self):
        """
    Start network.

    :return: None
    """
        log.debug("Starting Mininet network...")
        if self.__mininet is not None:
            if not self.started:
                try:
                    self.__mininet.start()
                except SystemExit:
                    quit_with_error(
                        msg="Mininet emulation requires root privileges!",
                        logger=LAYER_NAME)
                except KeyboardInterrupt:
                    quit_with_error(
                        msg=
                        "Initiation of Mininet network was interrupted by user!",
                        logger=log)
                self.started = True
                log.debug("Mininet network has been started!")
                self.runXTerms()
            else:
                log.warning(
                    "Mininet network has already started! Skipping start task..."
                )
        else:
            log.error("Missing topology! Skipping emulation...")
Example #3
0
  def __init_from_file (self, path, format=DEFAULT_NFFG_FORMAT):
    """
    Build a pre-defined topology from an NFFG stored in a file.
    The file path is searched in CONFIG with tha name ``TOPO``.

    :param path: file path
    :type path: str
    :param format: NF-FG storing format (default: internal NFFG representation)
    :type format: str
    :return: None
    """
    if path is None:
      log.error("Missing file path of Topology description")
      return
    try:
      with open(path, 'r') as f:
        log.info("Load topology from file: %s" % path)
        if format == self.DEFAULT_NFFG_FORMAT:
          log.info("Using file format: %s" % format)
          self.__init_from_NFFG(nffg=NFFG.parse(f.read()))
        else:
          raise TopologyBuilderException("Unsupported file format: %s!" %
                                         format)
    except IOError:
      log.warning("Additional topology file not found: %s" % path)
      raise TopologyBuilderException("Missing topology file!")
    except ValueError as e:
      log.error("An error occurred when load topology from file: %s" %
                e.message)
      raise TopologyBuilderException("File parsing error!")
Example #4
0
    def bind_inter_domain_SAPs(self, nffg):
        """
    Search for inter-domain SAPs in given :class:`NFFG`, create them as a
    switch port and bind them to a physical interface given in sap.domain
    attribute.

    :param nffg: topology description
    :type nffg: :class:`NFFG`
    :return: None
    """
        log.debug("Search for inter-domain SAPs...")
        # Create the inter-domain SAP ports
        for sap in {s for s in nffg.saps if s.binding is not None}:
            # NFFG is the raw NFFG without link duplication --> iterate over every
            # edges in or out there should be only one link in this case
            # e = (u, v, data)
            sap_switch_links = [
                e for e in nffg.network.edges_iter(data=True) if sap.id in e
            ]
            try:
                if sap_switch_links[0][0] == sap.id:
                    border_node = sap_switch_links[0][1]
                else:
                    border_node = sap_switch_links[0][0]
            except IndexError:
                log.error("Link for inter-domain SAP: %s is not found. "
                          "Skip SAP creation..." % sap)
                continue
            log.debug(
                "Detected inter-domain SAP: %s connected to border Node: %s" %
                (sap, border_node))
            # if sap.delay or sap.bandwidth:
            #   log.debug("Detected resource values for inter-domain connection: "
            #             "delay: %s, bandwidth: %s" % (sap.delay, sap.bandwidth))
            sw_name = nffg.network.node[border_node].id
            for sw in self.mn.switches:
                # print sw.name
                if sw.name == sw_name:
                    if sap.binding not in get_ifaces():
                        log.warning(
                            "Physical interface: %s is not found! Skip binding..."
                            % sap.binding)
                        continue
                    log.debug(
                        "Add physical port as inter-domain SAP: %s -> %s" %
                        (sap.binding, sap.id))
                    # Add interface to border switch in Mininet
                    # os.system('ovs-vsctl add-port %s %s' % (sw_name, sap.domain))
                    sw.addIntf(intf=Intf(name=sap.binding, node=sw))