def handle_topology_answer(self, *args, **kwargs): """ Handle topology packet :param args: contains the topology packet :return: """ packet = kwargs.get('packet') switch = kwargs.get('switch') pkt = packet pkt = packet.payload Event.trigger("clear_port_down", port=int(pkt.port)) if pkt.device_type != 1: name = "s" + str(pkt.identifier) TopologyManager.add_device(name=name, device=Host(name=name, ip=pkt.ip, mac=pkt.mac)) else: # its a host name = "h" + str(pkt.identifier) TopologyManager.add_device(name=name, device=Host(name=name, ip=pkt.ip, mac=pkt.mac)) if TopologyManager.get_device(name=switch).add_device_to_port(device=name, port=int(pkt.port)): Event.trigger("topology_change", src_device=switch, dst_device=name, port=int(pkt.port)) #Log.info("Pkt in:", pkt.port) topology_packet = proto.connection_pb2.TopologyPacket(ip=pkt.ip, mac=pkt.mac, port=pkt.port, name=name, switch=Configuration.get('name')) Event.trigger("topology_to_controller", pkt=topology_packet)
def handle_topology_answer(self, pkt=None): """ Handle topology packet :param pkt: contains the topology packet :return: """ # if the controller is not yet connected to all local controllers # don't handle topology packets if not Configuration.get('system_done'): return ip = pkt.ip.encode('utf-8') mac = pkt.mac.encode('utf-8') name = pkt.name.encode('utf-8') port = pkt.port switch = pkt.switch.encode('utf-8') if name.startswith('h'): # it's a host TopologyManager.add_device(name=name, device=Host(name=name, ip=ip, mac=mac)) TopologyManager.get_device(name=name).add_device_to_port( device=switch, port=1) Log.event("topology packet with identifier", name, "from switch", switch, "on port", port, "with ip", ip) if TopologyManager.get_device(name=switch).add_device_to_port( device=name, port=int(port)): Event.trigger("topology_change", src_device=switch, dst_device=name, port=int(port))