From 2e59a405596156412ff7240934071be76ec30301 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Sat, 14 May 2016 12:46:45 +0200 Subject: Some work on data, repr() and cleaning --- haircontrol/discovery.py | 55 ++++++++++++++---------------------------------- 1 file changed, 16 insertions(+), 39 deletions(-) (limited to 'haircontrol/discovery.py') diff --git a/haircontrol/discovery.py b/haircontrol/discovery.py index d454283..2b7ad83 100644 --- a/haircontrol/discovery.py +++ b/haircontrol/discovery.py @@ -1,33 +1,20 @@ import re import xml.etree.ElementTree -from haircontrol.data import Equipment +from haircontrol.data import * class Discovery: + IPNEIGH = re.compile("^(?P[a-f0-9:.]+) dev (?P.*) lladdr (?P[a-f0-9:]*)") + # fe80::8300 dev eth1 lladdr 10:fe:ed:f1:e1:f3 router STALE + # 172.16.20.210 dev eth1 lladdr c0:4a:00:fe:1f:87 REACHABLE + def __init__(self, inspector): self.inspector = inspector - self.equipments = {} - self.ip2mac = {} - self.mac2ip = {} - - 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 + self.net = EtherDomain() - def discover_hinting_from_lldp(self, lldpnode): - self.inspector.connect(lldpnode) + def discover_hinting_from_lldp(self, e_lldp): + self.net.add_equipment(e_lldp) + self.inspector.connect(e_lldp) fd = self.inspector.command('lldp') root = xml.etree.ElementTree.parse(fd).getroot() for iface in root.iter('interface'): @@ -36,33 +23,23 @@ class Discovery: e = Equipment() e.name = chassis.find('name').text e.mgmtip = chassis.find('mgmt-ip').text - self.add_equipment(e) + self.net.add_equipment(e) for port in iface.findall('port'): #remote_ifname = port.find('id').text e.add_seen_mac(ifname, 'lldp') #XXX fd.close() self.inspector.disconnect() - def discover_from_root(self, rootnode): - self.inspector.connect(rootnode) + def discover_from_root(self, e_root): + self.net.add_equipment(e_root) + self.inspector.connect(e_root) fd = self.inspector.command('ip-neigh') - IPNEIGH = re.compile("^(?P[a-f0-9:.]+) dev (?P.*) lladdr (?P[a-f0-9:]*)") for line in fd: - matches = IPNEIGH.search(line) + matches = Discovery.IPNEIGH.search(line) if matches: ip, ifname, mac = [ matches.group(k) for k in ['ip','ifname','mac'] ] - self.index_mac_ip(mac, ip) - rootnode.add_seen_mac(ifname, mac) + self.net.index_mac_ip(mac, ip) + e_root.add_seen_mac(ifname, mac) fd.close() self.inspector.disconnect() -# fe80::8300 dev eth1 lladdr 10:fe:ed:f1:e1:f3 router STALE -# 172.16.11.46 dev eth1 lladdr 24:a4:3c:ee:89:ca STALE -# 172.16.20.3 dev eth1 lladdr 00:27:22:0e:74:15 STALE -# 172.16.20.210 dev eth1 lladdr c0:4a:00:fe:1f:87 REACHABLE -# 172.16.21.69 dev eth1 lladdr e8:de:27:b5:f2:b1 DELAY -# 172.16.20.216 dev eth1 lladdr c0:4a:00:fe:09:bd PERMANENT -# 172.16.11.41 dev eth1 lladdr 04:18:d6:0e:37:d4 STALE -# 172.16.11.104 dev eth1 lladdr 00:15:6d:8e:22:46 STALE -# 172.16.10.8 dev eth1 lladdr 00:27:22:0e:67:f9 STALE -# -- cgit v1.1