#! /usr/bin/perl # Check Linux media settings using ethtool # anders@aftenposten.no, 2007-09-19 use Getopt::Std; getopts('i:s:d:a:'); $ENV{'PATH'} = "usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"; sub usage { print "Usage: check_ethtool -i -s 10|100|1000 -d half|full -a on|off\n"; exit(0); } usage unless ($opt_i && $opt_s && $opt_d && $opt_a); %modes = (); foreach $line (`sudo ethtool $opt_i 2>&1`) { chomp($line); if ($line =~ /^(\s+|)([\w -]+):\s+(\w+)/) { $key = $2; $val = $3; $key =~ s@\s@_@g; $key =~ tr@A-Z@a-z@; $val =~ tr@A-Z@a-z@; if ($key eq "speed") { $val =~ s@\D+@@g; } if ($key eq "auto-negotiation") { $key = "autoneg"; } $modes{"$key"} = $val; } } if ($opt_s ne $modes{"speed"} || $opt_d ne $modes{"duplex"} || $opt_a ne $modes{"autoneg"}) { print "Media settings error on $opt_i. Expected $opt_s $opt_d autoneg=$opt_a, got " . $modes{"speed"} . " " . $modes{"duplex"} . " " . $modes{"autoneg"} . "\n"; exit(2); } else { print "Media settings OK on $opt_i: " . $modes{"speed"} . " " . $modes{"duplex"} . " autoneg=" . $modes{"autoneg"} . "\n"; exit(0); }