diff options
Diffstat (limited to 'haircontrol/data.py')
-rw-r--r-- | haircontrol/data.py | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/haircontrol/data.py b/haircontrol/data.py index 1eb4d3b..da85100 100644 --- a/haircontrol/data.py +++ b/haircontrol/data.py @@ -3,10 +3,26 @@ class EtherDomain: self.equipments = {} self.ip2mac = {} self.mac2ip = {} + self.gw = None + self.root_iface = None def __repr__(self): return '([\n%s\n],\n%s\n)'%(',\n'.join(' %s'%repr(e) for e in self.get_equipment_list_sorted()), repr(self.ip2mac)) + def print_tree(self): + self._print_tree(self.gw, self.root_iface, 0) + + def _print_tree(self,eq_root, iface, indent): + print(" "*indent + eq_root.name + '(' + iface.name + ')') + ei_pairs = [] + for iface in eq_root.ifaces.values(): + for ip in iface.direct_neighbours: + ei_pairs.append( (self.equipments[ip], iface) ) + ei_pairs.sort(key=lambda x: x[0].name) + + for (e,i) in ei_pairs: + self._print_tree(e, i, indent+1) + def get_equipment_list_sorted(self): e_list = list(self.equipments.values()) e_list.sort(key=lambda x: x.name) @@ -29,11 +45,13 @@ class EtherDomain: self.mac2ip[mac] = ip class Equipment: - def __init__(self, name=None, mgmtip=None): + def __init__(self, name=None, mgmtip=None, first_ifname=None): self.name = name self.mgmtip = mgmtip self.ifaces = {} self.inspected = False + if first_ifname: + self.ifaces[first_ifname] = Interface(first_ifname, None) def __repr__(self): return repr( (self.name, self.mgmtip, list(self.ifaces.values())) ) |