diff options
Diffstat (limited to 'extras/tools/lldp/draw-neighbors.pl')
-rwxr-xr-x | extras/tools/lldp/draw-neighbors.pl | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/extras/tools/lldp/draw-neighbors.pl b/extras/tools/lldp/draw-neighbors.pl new file mode 100755 index 0000000..6535a3c --- /dev/null +++ b/extras/tools/lldp/draw-neighbors.pl @@ -0,0 +1,79 @@ +#!/usr/bin/perl + +use strict; +use JSON; + +my $in; +my ($full) = @ARGV; +while (<STDIN>) { + $in .= $_; +} + +my %assets = %{JSON::XS::decode_json($in)}; +my %peermap = %{$assets{peermap}}; +my %map2 = %{$assets{lldpmap}}; +my %ipmap = %{$assets{ipmap}}; + +print "strict graph network {\n"; +if ($full ne "lldp") { + while (my ($key, $value) = each %peermap) { + print_tree ($key,0,undef); + } +} else { + while (my ($key, $value) = each %map2) { + print_lldp ($key, 0, undef); + } +} +print "}\n"; + +sub print_lldp +{ + my ($id,$indent,$parent,$max) = @_; + my $name = $id; + if (defined($assets{lldppeers}{$id}{name}) and $assets{lldppeers}{$id}{name} ne "") { + $name = $assets{lldppeers}{$id}{name}; + } + print " \"$name\" -- {"; + my @n; + while (my ($key, $value) = each %{$map2{$id}}) { + my $peer = $key; + if (defined($assets{lldppeers}{$key}{name}) and $assets{lldppeers}{$key}{name} ne "") { + $peer = $assets{lldppeers}{$key}{name}; + } + push @n, "\"$peer\""; + } + print join(",",@n) . "};\n"; +} +sub print_tree +{ + my ($ip) = @_; + my $name = $ip; + if ($assets{snmpresults}{$ip}{sysName}) { + $name = $assets{snmpresults}{$ip}{sysName}; + } + print " \"$name\" -- {"; + my @n; + while(my ($peer, $garbage) = each %{$peermap{$ip}}) { + my $name = get_name($peer); + if ($name ne $peer or $full eq "full") { + push @n, "\"$name\""; + } + } + print join(",",@n) . "};\n"; +} + +sub get_name { + my ($ip) = @_; + if (defined($ipmap{$ip})) { + $ip = $ipmap{$ip}; + } + my $name = $ip; + if (defined($assets{snmpresults}{$ip}{sysName})) { + $name = $assets{snmpresults}{$ip}{sysName}; + if ($name eq "") { + $name = $assets{snmpresults}{$ip}{lldpLocChassisId} || $ip; + } + return $name; + } + return $name; +} |