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)
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
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): 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)
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)
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__))
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)
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)
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)
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
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 )