parse show lldp neighbors
[dell-switch] / neighbors.pl
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4 use autodie;
5
6 # ./sw-names | xargs -i ./dell-switch.pl {} 'show lldp neighbors'
7
8 foreach my $file ( glob('log/*lldp*') ) {
9         my ( undef, $name, undef ) = split(/_/, $file);
10         #print "# $name $file\n";
11
12         my $line_regex;
13         my @ports;
14
15         open(my $f, '<', $file);
16         while(<$f>) {
17                 chomp;
18                 #print "## $_<--\n";
19                 next if ( /^$/ || /^\s+Port/ );
20                 if ( /^--+/ ) {
21                         $line_regex = $_;
22                         $line_regex =~ s/\s+$//;
23                         $line_regex =~ s/-/./g;
24                         $line_regex =~ s/^/(/g;
25                         $line_regex =~ s/ /) (/g;
26                         $line_regex =~ s/$/)/g;
27                         #print "## line_regex = $line_regex\n";
28                         next;
29                 }
30                 if ( defined($line_regex) &&  /$line_regex/ ) {
31                         my @v = ( $1, $2, $3, $4, $5 );
32                         @v = map { s/^\s+//; s/\s+$//; $_ } @v;
33                         if ( length($v[1]) == 6 ) {
34                                 $v[1] = unpack('H*', $v[1]);
35                                 $v[1] =~ s/(..)/$1:/g;
36                                 $v[1] =~ s/:$//;
37                         }
38                         #my ( $port, $device_id, $port_id, $system_name, $cap ) = @v;
39                         if ( $v[0] =~ m/^$/ ) {
40                                 my @old = @{ pop @ports };
41                                 foreach my $i ( 0 .. $#old ) {
42                                         $old[$i] .= $v[$i];
43                                 }
44                                 push @ports, [ @old ];
45                         } else {
46                                 push @ports, [ @v ];
47                         }
48                 } else {
49                         warn "# $_<--\n";
50                 }
51         }
52
53         foreach my $p ( @ports ) {
54                 print "$name ", join(' ', @$p ), "\n";
55         }
56 }