Example #1
0
	def __init__(self, configfilename):
		self.connection = None
		self.config = None
		self.read_config(configfilename)
		core.openflow.addListeners(self)
		core.addListenerByName("GoingDownEvent", self._handle_GoingDownEvent)
		log.info("Launch complete, waiting for OF connection...")
Example #2
0
def launch(standalone=False, address='127.0.0.1', port=6633, max_retry_delay=16,
           dpid=None, ports='', policy='', extra=None, ctl_port=None,
           __INSTANCE__=None):
    """
    Launches a switch
    """

    if not pxpcap.enabled:
        raise RuntimeError("You need PXPCap to use this component")

    if ctl_port:
        if core.hasComponent('ctld'):
            raise RuntimeError("Only one ctl_port is allowed")

        if ctl_port is True:
            ctl_port = DEFAULT_CTL_PORT

        from pox.datapaths import ctl

        ctl.server(ctl_port)
        core.ctld.addListenerByName("CommandEvent", _do_ctl)

    _ports = ports.strip()

    def up(event):
        ports = [p for p in _ports.split(",") if p]

        switch = do_launch(ProgSwitch, standalone, address, port, max_retry_delay, dpid,
                           ports=ports, policy=policy, extra_args=extra)
        _switches[switch.name] = switch

    core.addListenerByName("UpEvent", up)
def launch (foo = False, bar = False):
  
  component = AlienComponent("demo1")
  core.register("alien", component)

  core.addListenerByName("UpEvent", _go_up)
  
Example #4
0
def launch(sg_file=None,
           config=None,
           gui=False,
           agent=False,
           rosapi=False,
           full=False,
           loglevel="INFO",
           cfor=False,
           visualization=False,
           mininet=None,
           test=False,
           log=None,
           quit=False):
    """
  Launch function called by POX core when core is up.

  :param sg_file: Path of the input Service graph (optional)
  :type sg_file: str
  :param config: additional config file with different name
  :type config: str
  :param gui: Signal for initiate GUI (optional)
  :type gui: bool
  :param agent: Do not start the service layer (optional)
  :type agent: bool
  :param rosapi:
  :param full: Initiate Infrastructure Layer also
  :type full: bool
  :param loglevel: run on specific run level  (default: INFO)
  :type loglevel: str
  :param cfor: start Cf-Or REST API (optional)
  :type cfor: bool
  :param visualization: send NFFGs to remote visualization server (optional)
  :type visualization: bool
  :param mininet: Path of the initial topology graph (optional)
  :type mininet: str
  :param test: Start ESCAPE in test mode (optional)
  :type test: bool
  :param log: add ESCAPE main log file for test mode (default: log/escape.log)
  :type log: str
  :param quit: Quit after the first service request has processed (optional)
  :type quit: bool
  :return: None
  """
    # Store args into this module file
    global init_param
    init_param.update(locals())

    __setup_pythonpath()
    __init_loggers(loglevel=loglevel, log=log, test=test)
    __init_config(config=config, test=test, quit=quit)
    __print_header()

    if visualization:
        core_log.debug("Enable remote visualization...")
        from escape.util.com_logger import RemoteVisualizer
        core.register(RemoteVisualizer._core_name, RemoteVisualizer())

    # Register _start_components() to be called when POX is up
    core.addListenerByName("GoingUpEvent", _start_components)
def launch (**kw):
  __main__.cli = False # Disable CLI
  global _first
  if _first:
    core.addListenerByName("UpEvent", _up)
    _first = False
  for k in kw:
    if k not in _tests:
      _tests.append(k)
Example #6
0
    def _all_dependencies_met(self):
        """
    Called when every component on which depends are initialized on POX core.

    Contain dependency relevant initialization.

    :return: None
    """
        try:
            self.initialize()
            # With fully event-driven communication between the layers the dependency
            # handling takes care by listen_to_dependencies() run into a dead-lock.
            # The root of this problem is the bidirectional or cyclic dependency
            # between the components, so basically the layers will always wait to each
            # other to be registered on core. To avoid this situation the naming
            # convention of event handlers on which the dependency checking based is
            # not followed (a.k.a. leave _handle_<component name>_<event name>) and
            # the event listeners is set up manually. For automatic core registration
            # the components have to contain dependencies explicitly.
            for dep in self.dependencies:
                if not self._standalone:
                    if core.core.hasComponent(dep):
                        dep_layer = core.components[dep]
                        # Register actual event handlers on dependent layer
                        dep_layer.addListeners(self)
                        # Register dependent layer's event handlers on actual layer
                        self.addListeners(dep_layer)
                    else:
                        raise AttributeError(
                            "Component is not registered on core")
                else:
                    # In case of standalone mode set up a StandaloneHelper in this object
                    # with the name of the dependency to handle raised events
                    # automatically
                    setattr(self, dep, SimpleStandaloneHelper(self, dep))
            # Subscribe for GoingDownEvent to finalize API classes
            # shutdown() function will be called if POX's core going down
            core.addListenerByName('GoingDownEvent', self.shutdown)
            # Subscribe for UpEvent to call functions after everithing is up
            core.addListenerByName('UpEvent', self.post_up_hook)
            # Subscribe core event for advanced functions
            # Listeners' name must follow POX naming conventions
            core.addListeners(self)
            # Everything is set up an "running" so register the component on pox.core
            # as a final step. Other dependent component can finish initialization
            # now.
            core.core.register(self._core_name, self)
            # Set "running" config for convenience purposes
            CONFIG.set_layer_loaded(self._core_name)
        except KeyboardInterrupt:
            quit_with_error(
                msg="Initialization of %s was interrrupted by user!" %
                self.__class__.__name__)
        except Exception as e:
            quit_with_error(msg="Abort ESCAPEv2 initialization...",
                            exception=e)
Example #7
0
def launch():
    def set_miss_length(event=None):
        if not core.hasComponent('openflow'):
            return
        core.openflow.miss_send_len = 0x7fff
        core.getLogger().info("Requesting full packet payloads")
        return EventRemove

    if set_miss_length() is None:
        core.addListenerByName("ComponentRegistered", set_miss_length)
Example #8
0
def launch ():
  """
  The default launcher just logs its arguments
  """

  #log.warn("Foo: %s (%s)", foo, type(foo))
  #log.warn("Bar: %s (%s)", bar, type(bar))

  core.addListenerByName("UpEvent", _go_up)
  core.registerNew(sine_event) #DJ++ 20121223
Example #9
0
def launch (foo, bar = False):
  """
  The default launcher just logs its arguments
  """

  print "test"
  log.warn("Foo: %s (%s)", foo, type(foo))
  log.warn("Bar: %s (%s)", bar, type(bar))

  core.addListenerByName("UpEvent", _go_up)
Example #10
0
 def realStart (event=None):
   if not core.hasComponent("messenger"):
     if event is None:
       # Only do this the first time
       log.warning("Deferring firing up LogMessenger because Messenger isn't up yet")
     core.addListenerByName("ComponentRegistered", realStart, once=True)
     return
   global logMessengerListener
   logMessengerListener = LogMessengerListener()
   log.info("Up...")
def launch ():
  def set_miss_length (event = None):
    if not core.hasComponent('openflow'):
      return
    core.openflow.miss_send_len = 0x7fff
    core.getLogger().info("Requesting full packet payloads")
    return EventRemove
    
  if set_miss_length() is None:
    core.addListenerByName("ComponentRegistered", set_miss_length)
Example #12
0
 def realStart (event=None):
   if not core.hasComponent("messenger"):
     if event is None:
       # Only do this the first time
       log.warning("Deferring firing up GuiMessengerServiceListener because Messenger isn't up yet")
       core.addListenerByName("ComponentRegistered", realStart, once=True)
     return
   if not core.hasComponent(GuiMessengerServiceListener.__name__):
     core.registerNew(GuiMessengerServiceListener)
     log.info("Up...")
Example #13
0
 def realStart(event=None):
     if not core.hasComponent("messenger"):
         if event is None:
             # Only do this the first time
             log.warning(
                 "Deferring firing up LogMessenger because Messenger isn't up yet"
             )
         core.addListenerByName("ComponentRegistered", realStart, once=True)
         return
     global logMessengerListener
     logMessengerListener = LogMessengerListener()
     log.info("Up...")
Example #14
0
def do_launch(cls, standalone, address='127.0.0.1', port=6633, max_retry_delay=16,
              dpid=None, extra_args=None, **kw):
    """
    Used for implementing custom switch launching functions

    cls is the class of the switch you want to add.

    Returns switch instance.
    """

    if extra_args is not None:
        import ast

        extra_args = ast.literal_eval('{%s}' % (extra_args,))
        kw.update(extra_args)

    from pox.core import core

    if not core.hasComponent('datapaths'):
        core.register("datapaths", {})
    _switches = core.datapaths

    if dpid is None:
        for dpid in range(1, 256):
            if dpid not in _switches: break
        if dpid in _switches:
            raise RuntimeError("Out of DPIDs")
    else:
        dpid = str_to_dpid(dpid)

    switch = cls(dpid=dpid, name="sw" + str(dpid), **kw)
    _switches[dpid] = switch

    port = int(port)
    max_retry_delay = int(max_retry_delay)

    def up(event):
        import pox.lib.ioworker

        global loop
        loop = pox.lib.ioworker.RecocoIOLoop()
        # loop.more_debugging = True
        loop.start()
        OpenFlowWorker.begin(loop=loop, addr=address, port=port,
                             max_retry_delay=max_retry_delay, switch=switch)

    from pox.core import core

    if not standalone:
        core.addListenerByName("UpEvent", up)

    return switch
Example #15
0
def launch ():
  def _handle_ConnectionUp (event):
    #log.debug("Connection %s" % (event.connection,))
    gw = EE122Gateway(event.connection, event.ofp.ports)
    core.register("gateway", gw)
    #gw.addListeners(Controller())
  core.openflow.addListenerByName("ConnectionUp", _handle_ConnectionUp)

  def _handle_reg (event):
    if event.name == "gateway":
      try:
        from firewall import Firewall
        event.component.addListeners(Firewall())
      except:
        fw_log.exception("Couldn't load firewall.py")
  core.addListenerByName("ComponentRegistered", _handle_reg)
Example #16
0
def launch (address='', port=8000, static=False):
  httpd = SplitThreadedServer((address, int(port)), SplitterRequestHandler)
  core.register("WebServer", httpd)
  httpd.set_handler("/", CoreHandler, httpd, True)
  #httpd.set_handler("/foo", StaticContentHandler, {'root':'.'}, True)
  #httpd.set_handler("/f", StaticContentHandler, {'root':'pox'}, True)
  #httpd.set_handler("/cgis", SplitCGIRequestHandler, "pox/web/www_root")
  if static is True:
    httpd.add_static_dir('static', 'www_root', relative=True)
  elif static is False:
    pass
  else:
    static = static.split(",")
    for entry in static:
      if entry.lower() == "":
        httpd.add_static_dir('static', 'www_root', relative=True)
        continue
      if ':' not in entry:
        directory = entry
        prefix = os.path.split(directory)
        if prefix[1] == '':
          prefix = os.path.split(prefix[0])
        prefix = prefix[1]
        assert prefix != ''
      else:
        prefix,directory = entry.split(":")
      directory = os.path.expanduser(directory)
      httpd.add_static_dir(prefix, directory, relative=False)

  def run ():
    try:
      log.debug("Listening on %s:%i" % httpd.socket.getsockname())
      httpd.serve_forever()
    except:
      pass
    log.info("Server quit")

  def go_up (event):
    thread = threading.Thread(target=run)
    thread.daemon = True
    thread.start()

  def go_down (event):
    httpd.shutdown()

  core.addListenerByName("GoingUpEvent", go_up)
  core.addListenerByName("GoingDownEvent", go_down)
def launch (fakeways="", arp_for_unknowns=None):
  def set_miss_length (event = None):
    if not core.hasComponent('openflow'):
      return
    core.openflow.miss_send_len = 0x7fff
    core.getLogger().info("Requesting full packet payloads")
    return EventRemove
    
  if set_miss_length() is None:
    core.addListenerByName("ComponentRegistered", set_miss_length)

  fakeways = fakeways.replace(","," ").split()
  fakeways = [IPAddr(x) for x in fakeways]
  if arp_for_unknowns is None:
    arp_for_unknowns = len(fakeways) > 0
  else:
    arp_for_unknowns = str_to_bool(arp_for_unknowns)
  core.registerNew(l3_switch, fakeways, arp_for_unknowns)
Example #18
0
def launch(fakeways="", arp_for_unknowns=None):
    def set_miss_length(event=None):
        if not core.hasComponent('openflow'):
            return
        core.openflow.miss_send_len = 0x7fff
        core.getLogger().info("Requesting full packet payloads")
        return EventRemove

    if set_miss_length() is None:
        core.addListenerByName("ComponentRegistered", set_miss_length)

    fakeways = fakeways.replace(",", " ").split()
    fakeways = [IPAddr(x) for x in fakeways]
    if arp_for_unknowns is None:
        arp_for_unknowns = len(fakeways) > 0
    else:
        arp_for_unknowns = str_to_bool(arp_for_unknowns)
    core.registerNew(l3_switch, fakeways, arp_for_unknowns)
def launch (address = '127.0.0.1', port = 6633, max_retry_delay = 16,
    dpid = None, ports = '', extra = None, __INSTANCE__ = None):
  """
  Launches a switch
  """

  if not pxpcap.enabled:
    raise RuntimeError("You need PXPCap to use this component")

  _ports = ports
  def up (event):
    devs = pxpcap.PCap.get_devices()
    ports = _ports.split(",")
    phys = []
    portnum = 1
    if len(ports) == 1 and ports[0] == '': ports = []
    for p in list(ports):
      if p not in devs:
        log.error("Device %s not available -- ignoring", p)
        continue
      dev = devs[p]
      if dev.get('addrs',{}).get('ethernet',{}).get('addr') is None:
        log.error("Device %s has no ethernet address -- ignoring", p)
        continue
      if dev.get('addrs',{}).get('AF_INET') != None:
        log.error("Device %s has an IP address -- ignoring", p)
        continue
      phy = of.ofp_phy_port()
      phy.port_no = portnum
      portnum += 1
      phy.hw_addr = dev['addrs']['ethernet']['addr']
      phy.name = p
      # Fill in features sort of arbitrarily
      phy.curr = of.OFPPF_10MB_HD
      phy.advertised = of.OFPPF_10MB_HD
      phy.supported = of.OFPPF_10MB_HD
      phy.peer = of.OFPPF_10MB_HD
      phys.append(phy)

    do_launch(PCapSwitch, address, port, max_retry_delay, dpid, ports=phys,
              extra_args=extra)

  core.addListenerByName("UpEvent", up)
Example #20
0
def launch(mode=1, wordslist="badwords.txt", gateway_mac="00-00-00-00-00-00"):
    """
    The default launcher that intercepts PacketIn events
    Modes:
        1 - hold on controller util classification ends
        2 - inspect on controller but allow forwarding to edge switch
    """
    global _mode

    _mode = mode
    # _gateway_mac = EthAddr(gateway_mac)

    log.info("Mode is {}".format(_mode))

    try:
        _load_wordslist(wordslist)
    except Exception as e:
        log.error(e.message)
        log.error('All packets will be marked as "valid"')

        while True:
            opt = raw_input("Do you want to continue (y/n)? ")
            if opt == "y":
                break
            elif opt == "n":
                log.error("Operation terminated")
                sys.exit(-1)

    if _set_miss_length() is None:
        core.addListenerByName("ComponentRegistered", _set_miss_length)

    core.openflow.addListenerByName("ConnectionUp", _register_last_switch)

    if _mode == 1:
        core.openflow.addListenerByName("PacketIn", _packet_handler_mode1)
    elif _mode == 2:
        core.openflow.addListenerByName("PacketIn", _packet_handler_mode2)
    else:
        log.error("Invalid mode")
        sys.exit(-2)