aboutsummaryrefslogtreecommitdiffstats
path: root/extras/tools
diff options
context:
space:
mode:
authorKristian Lyngstol <kly@kly.no>2016-06-02 22:59:51 +0200
committerKristian Lyngstol <kly@kly.no>2016-06-02 22:59:51 +0200
commit24a5282cb63c8aab2531ae3e54c07e2c5bbebea7 (patch)
tree0be017186c5945eb5fdeda4099c73cc4fdcf6146 /extras/tools
parentbe79767a00a2bfc0e77922669bcbddeaf003a84d (diff)
Gradually enrich the lldpdiscover data
Still needs lots of work, but mainly with regards to gluing it all together. Possibly populate a nice little "local macs" hash to map mac addresses to systems/ports easily.
Diffstat (limited to 'extras/tools')
-rwxr-xr-xextras/tools/lldp/lldpdiscover.pl39
1 files changed, 24 insertions, 15 deletions
diff --git a/extras/tools/lldp/lldpdiscover.pl b/extras/tools/lldp/lldpdiscover.pl
index 14c4fc5..d6f2992 100755
--- a/extras/tools/lldp/lldpdiscover.pl
+++ b/extras/tools/lldp/lldpdiscover.pl
@@ -134,20 +134,19 @@ sub discover_lldp_neighbors {
$sysname = $chassis_id;
}
- # Do not try to poll servers.
- if (!filter(\%{$value})) {
- mylog("Filtered out $sysname ($local_sysname -> $sysname)");
- next;
- }
- $sysname =~ s/\..*$//;
if (defined($value->{lldpRemManAddr})) {
- mylog("Found $sysname ($local_sysname -> $sysname )");
- mylog("$chassis_id");
+ $sysname =~ s/\..*$//;
} else {
next;
}
+ # Do not try to poll servers.
+ if (!filter(\%{$value})) {
+ mylog("\tFiltered out $sysname ($local_sysname -> $sysname)");
+ next;
+ }
+ mylog("\tFound $sysname ($chassis_id) ($local_sysname -> $sysname )");
if (defined($assets{$chassis_id}{'sysName'})) {
- mylog("Duplicate $sysname: \"$sysname\" vs \"$assets{$chassis_id}{'sysName'}\"");
+ mylog("\t\tDuplicate $sysname: \"$sysname\" vs \"$assets{$chassis_id}{'sysName'}\" - $value->{'lldpRemManAddr'} vs $assets{$chassis_id}{'ip'}");
if ($assets{$chassis_id}{'sysName'} eq "") {
$assets{$chassis_id}{'sysName'} = $sysname;
}
@@ -200,7 +199,9 @@ sub get_snmp_data {
#print Dumper(\%ret);
};
if ($@) {
- mylog("Error during SNMP to $ip : $@");
+ my $tmp = "$@";
+ chomp($tmp);
+ mylog("\t" . $tmp);
return undef;
}
return \%ret;
@@ -228,14 +229,22 @@ sub parse_snmp
$lol{$value->{lldpRemIndex}}{'lldpRemSysCapEnabled'} = \%caps;
}
while (my ($key, $value) = each %{$snmp->{lldpRemManAddrTable}}) {
- foreach my $key2 (keys %$value) {
- $lol{$value->{lldpRemIndex}}{$key2} = $value->{$key2};
+ my $old = 0;
+ if (defined($lol{$value->{lldpRemIndex}}{lldpRemManAddr})) {
+ mylog("\t\tFound existing address: $lol{$value->{lldpRemIndex}}{lldpRemManAddr}");
+ $old = $lol{$value->{lldpRemIndex}}{lldpRemManAddrSubtype};
}
my $addr = $value->{'lldpRemManAddr'};
my $addrtype = $value->{'lldpRemManAddrSubtype'};
+ foreach my $key2 (keys %$value) {
+ if ($key2 eq 'lldpRemManAddr') {
+ next;
+ }
+ $lol{$value->{lldpRemIndex}}{$key2} = $value->{$key2};
+ }
if ($addrtype == 1) {
$lol{$value->{lldpRemIndex}}{lldpRemManAddr} = nms::convert_ipv4($addr);
- } elsif ($addrtype == 2) {
+ } elsif ($addrtype == 2 && $old == 0) {
$lol{$value->{lldpRemIndex}}{lldpRemManAddr} = nms::convert_ipv6($addr);
}
}
@@ -255,7 +264,6 @@ sub parse_snmp
}
}
return \%lol;
- print Dumper (\%lol);
}
# Add a chassis_id to the list to be checked, but only if it isn't there.
@@ -278,7 +286,8 @@ sub add_switch {
my $addr;
my $snmp = undef;
$addr = $assets{$chassis_id}{'ip'};
- mylog("Probing $addr");
+ my $name = $assets{$chassis_id}{'sysName'} || "$addr";
+ mylog("\tProbing $addr ($name)");
$snmp = get_snmp_data($addr, $assets{$chassis_id}{'community'});
return if (!defined($snmp));