bin/pvl.hosts-graph
changeset 418 9d243809532d
parent 417 75bbfb05fbf3
child 419 8783e036174b
--- 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