--- a/bin/pvl.hosts-graph Mon Mar 31 19:15:44 2014 +0300
+++ b/bin/pvl.hosts-graph Mon Mar 31 19:50:44 2014 +0300
@@ -307,6 +307,12 @@
local_node = host
host_links = host.extensions.get('link')
+ # XXX: copy-pasta
+ if host in snmp and 'vlan' in snmp[host] :
+ vlans = dict(host_vlans(host, snmp[host]['vlan']))
+ else :
+ vlans = None
+
if host_links :
if local_node not in nodes :
# XXX: copypasta
@@ -339,6 +345,19 @@
# XXX: copypasta
nodes[remote_node] = remote_label
+ # local vlans
+ if vlans and port in vlans :
+ local_untag, local_tagged = vlans[port]
+
+ log.info("%s:%s link vlans (%s) <%s>", host, port, local_untag, ':'.join(str(tag) for tag in local_tagged))
+
+ link_vlans = (local_untag, local_tagged, None)
+ else :
+ # unknown
+ link_vlans = None
+
+ log.warning("%s:%s unknown vlans", host, port)
+
# directional links
local_port = links_out.get((local_node, remote_node))
@@ -380,7 +399,8 @@
# we had the reverse mapping already, make it bidirectional
local_port = port
log.info("%s:%s link <- %s:%s", local_node, local_port, remote_port, remote_node)
-
+
+ # TODO: update vlan info
links[(remote_node, remote_port, local_port, local_node)] = links.pop((remote_node, remote_port, None, local_node))
else :
@@ -389,7 +409,7 @@
# mapping was completely missing
log.info("%s:%s link -> %s", local_node, local_port, remote_node)
- links[(local_node, local_port, None, remote_node)] = None
+ links[(local_node, local_port, None, remote_node)] = link_vlans
# verify non-p2p links
@@ -405,7 +425,7 @@
for host, host_attrs in snmp.iteritems() :
if 'bridge' in host_attrs or any('bridge' in vlan_attrs for vlan_attrs in host_attrs.get('vlan', { }).itervalues()) :
bridge_hosts.add(host)
-
+
# third graph: bridge
for host, host_attrs in snmp.iteritems() :
local_out = nodes_out.get(host)
@@ -496,7 +516,10 @@
nodes[remote_node] = remote_label
# unknown vlans
- link_vlans = None
+ if vlan :
+ link_vlans = (vlan, (), None)
+ else :
+ link_vlans = None
# directional link
links_out[(local_node, remote_node)] = local_port