bin/pvl.hosts-graph
changeset 417 75bbfb05fbf3
parent 416 fb0fd4ac0168
child 418 9d243809532d
equal deleted inserted replaced
416:fb0fd4ac0168 417:75bbfb05fbf3
   235                         if remote_host.location :
   235                         if remote_host.location :
   236                             remote_label = remote_host.location
   236                             remote_label = remote_host.location
   237 
   237 
   238                         log.info("%s:%s: guessing lldp host %s -> %s (%s)", host, port, remote_lldp, remote_host, remote_label)
   238                         log.info("%s:%s: guessing lldp host %s -> %s (%s)", host, port, remote_lldp, remote_host, remote_label)
   239 
   239 
   240                     else :
   240                     elif options.graph_lldp_unknown :
   241                         log.warning("%s:%s: unknown lldp remote %s (%s)", host, port, remote_lldp, remote_label)
   241                         log.warning("%s:%s: unknown lldp remote %s (%s)", host, port, remote_lldp, remote_label)
   242                         
   242                         
   243                         if options.graph_lldp_unknown :
   243                         # by chassis id
   244                             # by chassis id
   244                         remote_node = remote_lldp
   245                             remote_node = remote_lldp
   245                         remote_host = None
   246                             remote_host = None
   246 
   247                         else :
   247                     else :
   248                             remote_node = remote_host = None
   248                         log.info("%s:%s: unknown lldp remote %s (%s)", host, port, remote_lldp, remote_label)
       
   249                         
       
   250                         remote_node = remote_host = None
       
   251 
   249                     
   252                     
   250                     if not remote_node :
   253                     if not remote_node :
   251                         continue
   254                         continue
   252 
   255 
   253                     # ensure remote node
   256                     # ensure remote node
   465                         remote_node = remote_host = hosts_by_ethernet[ethernet]
   468                         remote_node = remote_host = hosts_by_ethernet[ethernet]
   466 
   469 
   467                         remote_label = remote_host.location or str(remote_host)
   470                         remote_label = remote_host.location or str(remote_host)
   468 
   471 
   469                         log.debug("%s:%s/%s bridge %s = %s (%s)", host, port, vlan, ethernet, remote_host, remote_label)
   472                         log.debug("%s:%s/%s bridge %s = %s (%s)", host, port, vlan, ethernet, remote_host, remote_label)
       
   473 
       
   474                     elif options.graph_bridge_unknown :
       
   475                         log.warning("%s:%s/%s bridge unknown host %s", host, port, vlan, ethernet)
       
   476 
       
   477                         remote_label = remote_node = ethernet
       
   478 
       
   479                         nodes[remote_node] = remote_label
       
   480                         
       
   481                         remote_host = None
       
   482 
   470                     else :
   483                     else :
   471                         remote_node = remote_host = None
   484                         log.info("%s:%s/%s bridge unknown host %s", host, port, vlan, ethernet)
   472 
   485 
   473                         log.debug("%s:%s/%s bridge %s ?", host, port, vlan, ethernet)
       
   474                     
       
   475                     if not remote_host :
       
   476                         continue
   486                         continue
   477                 
   487                 
   478                     # TODO: also handled multiple IP/ethers for the same host
   488                     # TODO: also handled multiple IP/ethers for the same host
   479                     elif remote_host == host and local_node != host :
   489                     if remote_host == host and local_node != host :
   480                         log.debug("%s:%s: skip remote-mapped self", host, port)
   490                         log.debug("%s:%s: skip remote-mapped self", host, port)
       
   491                         continue
   481 
   492 
   482                     if remote_node not in nodes :
   493                     if remote_node not in nodes :
   483                         log.debug("%s:%s: lazy-add remote %s (%s)", host, port, remote_node, remote_label)
   494                         log.debug("%s:%s: lazy-add remote %s (%s)", host, port, remote_node, remote_label)
   484 
   495 
   485                         nodes[remote_node] = remote_label
   496                         nodes[remote_node] = remote_label
   500                     remote_port = links_out.get((remote_node, local_node))
   511                     remote_port = links_out.get((remote_node, local_node))
   501 
   512 
   502                     if remote_port :
   513                     if remote_port :
   503                         reverse = (remote_node, remote_port, None, local_node)
   514                         reverse = (remote_node, remote_port, None, local_node)
   504 
   515 
   505                         log.info("%s:%s bridge <-> %s:%s", local_node, local_port, remote_port, remote_host)
   516                         log.info("%s:%s bridge <-> %s:%s", local_node, local_port, remote_port, remote_node)
   506 
   517 
   507                         # fill in remote_port for bidirectional link
   518                         # fill in remote_port for bidirectional link
   508                         del links[reverse]
   519                         del links[reverse]
   509                         reverse = local_node, local_port, remote_port, remote_node
   520                         reverse = local_node, local_port, remote_port, remote_node
   510                         links[reverse] = link_vlans
   521                         links[reverse] = link_vlans
   511 
   522 
   512                     else :
   523                     else :
   513                         log.info("%s:%s bridge -> %s", local_node, local_port, remote_host)
   524                         log.info("%s:%s bridge -> %s", local_node, local_port, remote_node)
   514 
   525 
   515                         links[forward] = link_vlans
   526                         links[forward] = link_vlans
   516         
   527         
   517         # verify unmanaged bridges
   528         # verify unmanaged bridges
   518         for (node, port), remotes in bridge_ports.iteritems() :
   529         for (node, port), remotes in bridge_ports.iteritems() :
   678 
   689 
   679 
   690 
   680     parser.add_option('--graph-bridge', action='store_true',
   691     parser.add_option('--graph-bridge', action='store_true',
   681             help="Graph bridge forwarding database links")
   692             help="Graph bridge forwarding database links")
   682 
   693 
       
   694     parser.add_option('--graph-bridge-unknown', action='store_true',
       
   695             help="Graph unknown bridge forwarding databse hosts")
       
   696 
   683 
   697 
   684     parser.add_option('--graph-dot', metavar='FILE',
   698     parser.add_option('--graph-dot', metavar='FILE',
   685             help="Output .dot graph data to file")
   699             help="Output .dot graph data to file")
   686 
   700 
   687     # input
   701     # input