summaryrefslogtreecommitdiff
path: root/haircontrol/discovery.py
diff options
context:
space:
mode:
Diffstat (limited to 'haircontrol/discovery.py')
-rw-r--r--haircontrol/discovery.py30
1 files changed, 27 insertions, 3 deletions
diff --git a/haircontrol/discovery.py b/haircontrol/discovery.py
index 243e3b6..5f63349 100644
--- a/haircontrol/discovery.py
+++ b/haircontrol/discovery.py
@@ -5,6 +5,7 @@ from haircontrol.inspectors import *
class Discovery:
def __init__(self): #, inspector):
+ # XXX Use only one Inspector
self.linux_inspector = LinuxInspector()
self.ubnt_inspector = UbntInspector()
self.net = EtherDomain()
@@ -15,16 +16,19 @@ class Discovery:
# 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)
+ for (ifname, mac) in result:
+ if ifname not in [ 'lo' ]: # XXX configurable filter
+ e_lldp.add_iface(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)
+ # lldp returns logical port, not physicial port for remote bridges
for remote_ifname in ports:
- e.add_seen_mac(remote_ifname, local_mac)
+ if remote_ifname not in [ 'br0' ]: # XXX configurable filter
+ e.add_seen_mac(remote_ifname, local_mac)
self.linux_inspector.disconnect()
@@ -32,6 +36,7 @@ class Discovery:
self.net.add_equipment(e_root)
self.linux_inspector.connect(e_root)
+ # Learn root neighbours
result = self.linux_inspector.command('ip-neigh')
for (ip, ifname, mac) in result:
self.net.index_mac_ip(mac, ip)
@@ -39,3 +44,22 @@ class Discovery:
self.linux_inspector.disconnect()
+ # Inspect antennas bridge tables
+ for ip in self.net.equipments:
+ if ip.startswith('172.16.1'): # XXX Use neighbours, filter with OUI
+ e = self.net.equipments[ip]
+ self.ubnt_inspector.connect(e)
+
+ # Learn local interfaces
+ result = self.ubnt_inspector.command('status.cgi')
+ for (ifname, mac) in result:
+ if ifname not in [ 'lo', 'wifi0', 'br0' ]: # XXX configurable filter
+ e.add_iface(ifname, mac)
+
+ # Learn bridge tables
+ result = self.ubnt_inspector.command('brmacs.cgi')
+ for (ifname, mac) in result:
+ e.add_seen_mac(ifname, mac)
+
+ self.ubnt_inspector.disconnect()
+