Пример #1
0
class discovery(Component):
    def __init__(self, ctxt):
        Component.__init__(self, ctxt)

        self._bindings = self.resolve(pybindings_storage)
        self._user_event_log = self.resolve(pyuser_event_log)

        self.dps = {}
        self.lldp_packets = {}
        self.adjacency_list = {}

    def configure(self, configuration):

        arg_len = len(configuration['arguments'])

        self.lldp_send_period = LLDP_SEND_PERIOD
        if arg_len == 1:
            try:
                val = float(configuration['arguments'][0])
                self.lldp_send_period = val
                lg.debug("Setting LLDP send timer to " + str(val))
            except Exception, e:
                lg.error("unable to convert arg to float " +
                         configuration['arguments'][0])

        self.register_event(Link_event.static_get_name())
        Link_event.register_event_converter(self.ctxt)
Пример #2
0
 def post_events(self):
     e = Link_event(netinet.datapathid.from_host(2),
                    netinet.datapathid.from_host(3), 0, 0, Link_event.ADD)
     self.post(e)
     e = Link_event(netinet.datapathid.from_host(1),
                    netinet.datapathid.from_host(2), 0, 1, Link_event.ADD)
     self.post(e)
     self.d = defer.Deferred()
     return self.d
Пример #3
0
    def install(self):
	#--- setup the dbus foo
        dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
        bus = dbus.SystemBus()
        gobject.threads_init()
        run_glib()
        name = dbus.service.BusName(ifname, bus)

        self.sg = dBusEventGen(name,"/controller1")
        self.sg_ro = dBusEventGenRo(name,"/controller_ro")
        self.flow_stats = {}
	#--- register for nox events 
	self.register_for_datapath_join (lambda dpid, stats : 
                                         datapath_join_callback(self,self.sg,dpid, self.ctxt.get_switch_ip(dpid), stats) 
                                         )

        self.register_for_error(lambda dpid, error_type, code, data, xid: error_callback(self.sg, dpid, error_type, code, data, xid))

        self.register_for_datapath_leave(lambda dpid : 
                                          datapath_leave_callback(self.sg,dpid) )

        self.register_for_barrier_reply(lambda dpid, xid: barrier_reply_callback(self.sg,dpid,xid) )

	self.register_for_port_status(lambda dpid, reason, port : 
                                       port_status_callback(self.sg,dpid, reason, port) )
        
	#--- this is a a special event generated by the discovery service, 
	#---   which is why there isnt the handy register_for_* method
	self.register_handler (Link_event.static_get_name(),
                               lambda  info : link_event_callback(self.sg, info ))

        self.register_for_flow_stats_in(self.flow_stats_in_handler)

        self.fire_send_fv_packets()
        self.fire_flow_stats_timer()
Пример #4
0
    def install(self):

        print "in install"

        run(self.rmqi_rpc)

        self.flow_stats = {}

        #--- register for nox events 
        self.register_for_datapath_join (lambda dpid, stats : 
            datapath_join_callback(self, dpid, self.ctxt.get_switch_ip(dpid), stats) 
        )

        self.register_for_error(lambda dpid, error_type, code, data, xid: 
            error_callback(self, dpid, error_type, code, data, xid)
        )

        self.register_for_datapath_leave(lambda dpid : 
            datapath_leave_callback(self, dpid)
        )

        self.register_for_barrier_reply(lambda dpid, xid:
            barrier_reply_callback(self, dpid, xid)
        )

        self.register_for_port_status(lambda dpid, reason, port : 
            port_status_callback(self, dpid, reason, port)
        )
        
        #--- this is a a special event generated by the discovery service, 
        #---   which is why there isnt the handy register_for_* method
        self.register_handler(Link_event.static_get_name(), lambda  info : 
            link_event_callback(self, info )
        )

        self.register_for_flow_stats_in(self.flow_stats_in_handler)

        #TODO come back to this method
        self.fire_send_fv_packets()
        self.fire_flow_stats_timer()
    
        # register rabbitmq rpc callbacks
        print "subscribing callbacks"
        self.rmqi_rpc.subscribe_to_signal(method=self.send_fv_packets)
        self.rmqi_rpc.subscribe_to_signal(method=self.send_traceroute_packet)
        self.rmqi_rpc.subscribe_to_signal(method=self.echo)
        self.rmqi_rpc.subscribe_to_signal(method=self.get_flow_stats)
        self.rmqi_rpc.subscribe_to_signal(method=self.get_node_status)
        self.rmqi_rpc.subscribe_to_signal(method=self.install_default_drop)
        self.rmqi_rpc.subscribe_to_signal(method=self.register_for_fv_in)
        self.rmqi_rpc.subscribe_to_signal(method=self.register_for_traceroute_in)
        self.rmqi_rpc.subscribe_to_signal(method=self.install_default_forward)
        self.rmqi_rpc.subscribe_to_signal(method=self.send_datapath_flow)
        self.rmqi_rpc.subscribe_to_signal(method=self.send_barrier)
        self.rmqi_rpc.subscribe_to_signal(method=self.get_node_connect_status)
Пример #5
0
    def install(self):

        print "in install"

        run(self.rmqi_rpc)

        self.flow_stats = {}

        #--- register for nox events
        self.register_for_datapath_join(
            lambda dpid, stats: datapath_join_callback(
                self, dpid, self.ctxt.get_switch_ip(dpid), stats))

        self.register_for_error(
            lambda dpid, error_type, code, data, xid: error_callback(
                self, dpid, error_type, code, data, xid))

        self.register_for_datapath_leave(
            lambda dpid: datapath_leave_callback(self, dpid))

        self.register_for_barrier_reply(
            lambda dpid, xid: barrier_reply_callback(self, dpid, xid))

        self.register_for_port_status(
            lambda dpid, reason, port: port_status_callback(
                self, dpid, reason, port))

        #--- this is a a special event generated by the discovery service,
        #---   which is why there isnt the handy register_for_* method
        self.register_handler(Link_event.static_get_name(),
                              lambda info: link_event_callback(self, info))

        self.register_for_flow_stats_in(self.flow_stats_in_handler)

        #TODO come back to this method
        self.fire_send_fv_packets()
        self.fire_flow_stats_timer()

        # register rabbitmq rpc callbacks
        print "subscribing callbacks"
        self.rmqi_rpc.subscribe_to_signal(method=self.send_fv_packets)
        self.rmqi_rpc.subscribe_to_signal(method=self.send_traceroute_packet)
        self.rmqi_rpc.subscribe_to_signal(method=self.echo)
        self.rmqi_rpc.subscribe_to_signal(method=self.get_flow_stats)
        self.rmqi_rpc.subscribe_to_signal(method=self.get_node_status)
        self.rmqi_rpc.subscribe_to_signal(method=self.install_default_drop)
        self.rmqi_rpc.subscribe_to_signal(method=self.register_for_fv_in)
        self.rmqi_rpc.subscribe_to_signal(
            method=self.register_for_traceroute_in)
        self.rmqi_rpc.subscribe_to_signal(method=self.install_default_forward)
        self.rmqi_rpc.subscribe_to_signal(method=self.send_datapath_flow)
        self.rmqi_rpc.subscribe_to_signal(method=self.send_barrier)
        self.rmqi_rpc.subscribe_to_signal(method=self.get_node_connect_status)
Пример #6
0
    def install(self):
        """ Install """
        self.register_for_datapath_join(self.datapath_join_handler)
        self.register_for_datapath_leave(self.datapath_leave_handler)
        self.register_for_packet_in(self.packet_in_handler)
        self.register_for_flow_mod(self.flow_mod_handler)
        self.register_for_flow_removed(self.flow_removed_handler)
        self.register_handler(Link_event.static_get_name(),
                              self.link_event_handler)
        self.register_handler(Host_auth_event.static_get_name(),
                              self.host_auth_handler)
        self.register_handler(Host_bind_event.static_get_name(),
                              self.host_bind_handler)
        self.register_handler(nxw_utils.Pckt_flowEntryEvent.NAME,
                              self.flow_entry_handler)
        self.register_handler(nxw_utils.Pckt_delFlowEntryEvent.NAME,
                              self.delete_flow_entry_handler)

        self.spanning_ = self.resolve(Spanning_Tree)
        LOG.debug("%s started..." % str(self.__class__.__name__))
Пример #7
0
    def install(self):
        #--- setup the dbus foo
        dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
        bus = dbus.SystemBus()
        gobject.threads_init()
        run_glib()
        name = dbus.service.BusName(ifname, bus)

        self.sg = dBusEventGen(name, "/controller1")
        self.sg_ro = dBusEventGenRo(name, "/controller_ro")
        self.flow_stats = {}
        #--- register for nox events
        self.register_for_datapath_join(
            lambda dpid, stats: datapath_join_callback(
                self, self.sg, dpid, self.ctxt.get_switch_ip(dpid), stats))

        self.register_for_error(
            lambda dpid, error_type, code, data, xid: error_callback(
                self.sg, dpid, error_type, code, data, xid))

        self.register_for_datapath_leave(
            lambda dpid: datapath_leave_callback(self.sg, dpid))

        self.register_for_barrier_reply(
            lambda dpid, xid: barrier_reply_callback(self.sg, dpid, xid))

        self.register_for_port_status(
            lambda dpid, reason, port: port_status_callback(
                self.sg, dpid, reason, port))

        #--- this is a a special event generated by the discovery service,
        #---   which is why there isnt the handy register_for_* method
        self.register_handler(Link_event.static_get_name(),
                              lambda info: link_event_callback(self.sg, info))

        self.register_for_flow_stats_in(self.flow_stats_in_handler)

        self.fire_send_fv_packets()
        self.fire_flow_stats_timer()
    def install(self):
        """ Install """
        self.register_for_datapath_join(self.datapath_join_handler)
        self.register_for_datapath_leave(self.datapath_leave_handler)
        self.register_for_packet_in(self.packet_in_handler)
        self.register_for_flow_mod(self.flow_mod_handler)
        self.register_for_flow_removed(self.flow_removed_handler)
        self.register_handler(Link_event.static_get_name(),
                              self.link_event_handler)
        self.register_handler(Host_auth_event.static_get_name(),
                              self.host_auth_handler)
        self.register_handler(Host_bind_event.static_get_name(),
                              self.host_bind_handler)

        self.register_for_table_stats_in(self.table_stats_handler)
        self.register_for_port_stats_in(self.port_stats_handler)
        self.register_for_aggregate_stats_in(self.aggr_stats_handler)

        self.mysql_enable()
        self.pce_topology_enable()
        self.pce_routing_enable()
        self.bindings = self.resolve(pybindings_storage)
        LOG.debug("%s started..." % str(self.__class__.__name__))
 def install(self):
     self.routing = self.resolve(pyrouting.PyRouting)
     self.n_received = 0;
     self.register_handler(Link_event.static_get_name(),
                           self.handle_link_event)
 def configure(self, configuration):
     #self.register_event(Link_event.static_get_name())
     Link_event.register_event_converter(self.ctxt)
Пример #11
0
 def post_link_event(self, linktuple, action):
     e = Link_event(create_datapathid_from_host(linktuple[0]),
                    create_datapathid_from_host(linktuple[2]), linktuple[1],
                    linktuple[3], action)
     self.post(e)
Пример #12
0
 def install(self):
     self.routing = self.resolve(pyrouting.PyRouting)
     self.n_received = 0
     self.register_handler(Link_event.static_get_name(),
                           self.handle_link_event)
Пример #13
0
 def configure(self, configuration):
     #self.register_event(Link_event.static_get_name())
     Link_event.register_event_converter(self.ctxt)
Пример #14
0
        elif arg_len == 2:
            try:
                val = float(configuration['arguments'][0])
                self.lldp_send_period = val;
                lg.debug("Setting LLDP send timer to " + str(val))

                val = int(configuration['arguments'][1])
                self.vlan_id = val;
                lg.debug("Setting LLDP VLAN to " + str(val))

            except Exception, e:
                lg.error("unable to convert arg to integer " + configuration['arguments'][0])
    

        self.register_event(Link_event.static_get_name())
        Link_event.register_event_converter(self.ctxt)

    def install(self):
        self.register_for_datapath_join ( lambda dp,stats : discovery.dp_join(self, dp, stats) )
        self.register_for_datapath_leave( lambda dp       : discovery.dp_leave(self, dp) )
        self.register_for_port_status( lambda dp, reason, port : discovery.port_status_change(self, dp, reason, port) )
        # register handler for all LLDP packets 
        if(self.vlan_id != None):
            match = {
                DL_DST : array_to_octstr(array.array('B',NDP_MULTICAST)),DL_TYPE: ethernet.LLDP_TYPE, DL_VLAN: self.vlan_id}
        else:
            match = {
                DL_DST: array_to_octstr(array.array('B',NDP_MULTICAST)),DL_TYPE: ethernet.LLDP_TYPE }
                
        self.register_for_packet_match(lambda
Пример #15
0
 def install(self):
     #self.register_handler (Link_event.static_get_name(), self.topologyCreator)
     self.register_handler (Link_event.static_get_name(), self.overmind.add_link)
     self.register_for_packet_in(self.packet_in_callback)
     self.register_for_datapath_join ( self.overmind.add_switch )
     self.register_for_datapath_leave ( self.overmind.rem_switch )