diff -r 75bbfb05fbf3 -r 9d243809532d bin/pvl.hosts-graph --- 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