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 |