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...")
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...")
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!")
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))