#! /usr/bin/perl # Solaris NIC media settings check # anders@aftenposten.no, 2007-09-20 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_netlink -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 = (); $nic = $opt_i; $nicfam = $nic; $nicfam =~ s@\d+@@; $nicinst = $nic; $nicinst =~ s@\D+@@; $nicdev = "/dev/$nic"; $nicdevbase = "/dev/$nicfam"; sub runndd { my $args = shift; # $@: params if ($< == 0) { return(`ndd $args 2>/dev/null`); } else { return(`sudo ndd $args 2>/dev/null`); } } if ( -e $nicdev ) { $speed = runndd("-get $nicdev link_speed"); $duplex = runndd("-get $nicdev link_duplex"); $autoneg = runndd("-get $nicdev link_autoneg"); } else { runndd("-set $nicdevbase instance $nicinst"); $speed = runndd("-get $nicdevbase link_speed"); $duplex = runndd("-get $nicdevbase link_duplex"); $autoneg = runndd("-get $nicdevbase link_autoneg"); } chomp($speed); chomp($duplex); chomp($autoneg); if ($duplex eq "1") { $duplex = "half"; } elsif ($duplex eq "2") { $duplex = "full"; } if ($autoneg eq "0") { $autoneg = "off"; } elsif ($autoneg eq "1") { $autoneg = "on"; } if ($opt_s ne $speed || $opt_d ne $duplex || $opt_a ne $autoneg) { print "Media settings error on $opt_i. Expected $opt_s $opt_d autoneg=$autoneg, got $speed $duplex autoneg=$autoneg\n"; exit(2); } else { print "Media settings OK on $opt_i: $speed $duplex autoneg=$autoneg\n"; exit(0); }