class EtherDomain: def __init__(self): self.equipments = {} self.ip2mac = {} self.mac2ip = {} def __repr__(self): return '([\n%s\n],\n%s\n)'%(',\n'.join(' %s'%repr(e) for e in get_equipment_list_sorted()), repr(self.ip2mac)) def get_equipment_list_sorted(self): e_list = list(self.equipments.values()) e_list.sort(key=lambda x: x.name) return e_list def add_equipment(self,e): old = self.equipments.get(e.mgmtip) if old: print("Warn : %s replaced by %s"%(old,e)) self.equipments[e.mgmtip] = e def index_mac_ip(self,mac, ip): oldmac = self.ip2mac.get(ip) if oldmac: print("Warn : %s replaced by %s for %s"%(oldmac, mac, ip)) oldip = self.mac2ip.get(mac) if oldip: print("Warn : %s replaced by %s for %s"%(oldip, ip, mac)) self.ip2mac[ip] = mac self.mac2ip[mac] = ip class Equipment: def __init__(self, name=None, mgmtip=None): self.name = name self.mgmtip = mgmtip self.ifaces = {} def __repr__(self): return repr( (self.name, self.mgmtip, list(self.ifaces.values())) ) def add_seen_mac(self, ifname, mac): iface = self.ifaces.get(ifname) if not iface: print("Warn : add_seen_mac(%s, %s) auto-create iface on %s"%(ifname, mac, self.name)) iface = Interface(ifname) self.ifaces[ifname] = iface iface.mac_seen.append(mac) class Interface: def __init__(self, name=None, mac=None): self.name = name self.mac = mac self.mac_seen = [] def __repr__(self): return repr( ( self.mac, self.name, self.mac_seen ) ) #return repr( ( self.mac, self.name, '[ %i mac_seen ]'%len(self.mac_seen) ) )