from haircontrol.data import * from haircontrol.inspectors import * class Discovery: def __init__(self): #, inspector): self.linux_inspector = LinuxInspector() self.ubnt_inspector = UbntInspector() self.net = EtherDomain() def discover_hinting_from_lldp(self, e_lldp): self.net.add_equipment(e_lldp) self.linux_inspector.connect(e_lldp) # Learn local interfaces of e_lldp result = self.linux_inspector.command('ip-link') for (_, ifname, mac) in result: e_lldp.ifaces[ifname] = Interface(ifname, mac) # Create equipments and ifaces from LLDP neighbour discovery result = self.linux_inspector.command('lldpctl') for (local_ifname, local_mac, remote_name, remote_ipmgmt, ports) in result: e = Equipment(remote_name, remote_ipmgmt) self.net.add_equipment(e) for remote_ifname in ports: e.add_seen_mac(remote_ifname, local_mac) self.linux_inspector.disconnect() def discover_from_root(self, e_root): self.net.add_equipment(e_root) self.linux_inspector.connect(e_root) result = self.linux_inspector.command('ip-neigh') for (ip, ifname, mac) in result: self.net.index_mac_ip(mac, ip) e_root.add_seen_mac(ifname, mac) self.linux_inspector.disconnect()