7 # ./sw-names | xargs -i ./dell-switch.pl {} 'show lldp neighbors'
9 use Data::Dump qw(dump);
14 open(my $f, '<'. '/dev/shm/sw-ip-name-mac');
17 my ( $ip, $name, $mac ) = split(/ /,$_);
18 $mac2ip->{$mac} = $ip;
19 $mac2name->{$mac} = $name;
22 warn "# mac2name = ",dump($mac2name);
24 foreach my $file ( glob('log/*lldp*') ) {
25 my ( undef, $name, undef ) = split(/_/, $file);
26 #print "# $name $file\n";
31 open(my $f, '<', $file);
35 next if ( /^$/ || /^\s+Port/ );
38 $line_regex =~ s/\s+$//;
39 $line_regex =~ s/-/./g;
40 $line_regex =~ s/^/(/g;
41 $line_regex =~ s/ /) (/g;
42 $line_regex =~ s/$/)/g;
43 #print "## line_regex = $line_regex\n";
46 if ( defined($line_regex) && /$line_regex/ ) {
47 # Port Device ID Port ID System Name Capabilities
48 my @v = ( $1, $2, $3, $4, $5 );
49 @v = map { s/^\s+//; s/\s+$//; $_ } @v;
51 if ( length($v[1]) == 6 ) { # decode text mac
52 $v[1] = unpack('H*', $v[1]);
53 $v[1] =~ s/(..)/$1:/g;
57 if ( exists $mac2name->{$v[1]} ) {
58 my $mac_name = $mac2name->{$v[1]};
62 warn "ERROR: name different $v[3] != $mac_name" if $v[3] ne $mac_name;
66 #my ( $port, $device_id, $port_id, $system_name, $cap ) = @v;
67 if ( $v[0] =~ m/^$/ ) {
68 my @old = @{ pop @ports };
69 foreach my $i ( 0 .. $#old ) {
72 push @ports, [ @old ];
81 foreach my $p ( @ports ) {
82 print "$name ", join(' | ', @$p ), "\n";