filter to add hostname after mac
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 13 Aug 2022 19:38:57 +0000 (21:38 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 13 Aug 2022 19:41:49 +0000 (21:41 +0200)
filter_mac_add_hostname [new file with mode: 0755]

diff --git a/filter_mac_add_hostname b/filter_mac_add_hostname
new file mode 100755 (executable)
index 0000000..deac0ee
--- /dev/null
@@ -0,0 +1,59 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use autodie;
+
+use Data::Dump qw(dump);
+
+$|=1; # flush stdout
+
+my $debug = $ENV{DEBUG} || 0;
+
+my @name_mac_files = ( qw( /dev/shm/sw-name-mac /dev/shm/wap-name-mac ), $ENV{NAME_MAC}, glob '/dev/shm/name-mac*' );
+my $mac2name;
+
+foreach my $name_mac ( @name_mac_files ) {
+       next unless -e $name_mac;
+       open(my $f, '<'. $name_mac);
+       my $count = 0;
+       while(<$f>) {
+               chomp;
+               #my ( $ip, $name, $mac ) = split(/ /,$_);
+               my ( $name, $mac ) = split(/ /,$_);
+               $mac = lc($mac);
+               $mac2name->{$mac} = $name;
+               $count++;
+       }
+       warn "## $name_mac $count";
+}
+
+sub mac2name {
+       my ( $mac, $name ) = @_;
+
+       $mac = lc($mac);
+       if ( exists $mac2name->{$mac} ) {
+               my $mac_name = $mac2name->{$mac};
+               warn "ERROR: name different $name != $mac_name" if $name && $name ne $mac_name;
+               #return ( $mac, $mac_name );
+               return $mac . ' ' . $mac_name;
+       }
+       #return ( $mac, $name );
+       return $mac;
+}
+
+warn "# mac2name = ",dump($mac2name) if $debug;
+
+sub fix_mac {
+       my $mac = shift;
+       $mac = lc($mac);
+       $mac =~ s/^([0-9a-f]):/0$1:/;
+       while ( $mac =~ s/:([0-9a-f]):/:0$1:/g ) {};
+       $mac =~ s/:([0-9a-f])$/:0$1/;
+#      warn "# $mac\n";
+       return $mac;
+}
+
+while(<>) {
+       s/((:?[0-9A-Fa-f]{2}[:-]){5}(:?[0-9A-Fa-f]{2}))/mac2name($1)/ge;
+       print;
+}