Revision: 2061
http://nagiosplug.svn.sourceforge.net/nagiosplug/?rev=2061&view=rev
Author: psychotrahe
Date: 2008-10-22 21:35:15 +0000 (Wed, 22 Oct 2008)
Log Message:
-----------
check_ifoperstatus -n flag now works as expected (sf.net #1569488)
check_ifoperstatus now supports ifType based lookup for ifIndex
Modified Paths:
--------------
nagiosplug/trunk/BUGS
nagiosplug/trunk/NEWS
nagiosplug/trunk/plugins-scripts/check_ifoperstatus.pl
Modified: nagiosplug/trunk/BUGS
===================================================================
--- nagiosplug/trunk/BUGS 2008-10-21 09:11:48 UTC (rev 2060)
+++ nagiosplug/trunk/BUGS 2008-10-22 21:35:15 UTC (rev 2061)
@@ -15,11 +15,9 @@
1904965 - check_apt: SECURITY_RE is not correct
1894850 - check_ping: incorrectly parses ping6 output
1868822 - check_http link fails with openssl installed
-1867716 - check_snmp invalid performance data
1864404 - check_smtp/check_http miscalculate timezones in cert expiry
1681516 - output too verbose for various checks
1670261 - check_snmp might require snmpget with LD_LIBRARY_PATH
-1569488 - check_ifoperstatus.pl: -n option does't work (help required!)
1523748 - check_disk should error if warn range is subset of critical
1478287 - check_dns fails with CNAMEs
1469468 - signal handler in popen.c is broken
Modified: nagiosplug/trunk/NEWS
===================================================================
--- nagiosplug/trunk/NEWS 2008-10-21 09:11:48 UTC (rev 2060)
+++ nagiosplug/trunk/NEWS 2008-10-22 21:35:15 UTC (rev 2061)
@@ -3,6 +3,8 @@
1.4.14 ...
check_users thresholds were not working excatly as documented (>= rather than >)
Updated tinderbox_build script to point to new tinderbox server
+ check_ifoperstatus -n flag now works as expected (sf.net #1569488)
+ check_ifoperstatus now supports ifType based lookup for ifIndex
1.4.13 25th Sept 2008
Fix Debian bug #460097: check_http --max-age broken (Hilko Bengen)
Modified: nagiosplug/trunk/plugins-scripts/check_ifoperstatus.pl
===================================================================
--- nagiosplug/trunk/plugins-scripts/check_ifoperstatus.pl 2008-10-21 09:11:48 UTC (rev 2060)
+++ nagiosplug/trunk/plugins-scripts/check_ifoperstatus.pl 2008-10-22 21:35:15 UTC (rev 2061)
@@ -67,6 +67,7 @@
my @snmpoids;
my $sysUptime = '1.3.6.1.2.1.1.3.0';
my $snmpIfDescr = '1.3.6.1.2.1.2.2.1.2';
+my $snmpIfType = '1.3.6.1.2.1.2.2.1.3';
my $snmpIfAdminStatus = '1.3.6.1.2.1.2.2.1.7';
my $snmpIfOperStatus = '1.3.6.1.2.1.2.2.1.8';
my $snmpIfName = '1.3.6.1.2.1.31.1.1.1.1';
@@ -83,6 +84,7 @@
my $opt_h ;
my $opt_V ;
my $ifdescr;
+my $iftype;
my $key;
my $lastc;
my $dormantWarn;
@@ -105,15 +107,18 @@
## map ifdescr to ifindex - should look at being able to cache this value
-if (defined $ifdescr) {
+if (defined $ifdescr || defined $iftype) {
# escape "/" in ifdescr - very common in the Cisco world
- $ifdescr =~ s/\//\\\//g;
-
- $status=fetch_ifdescr(); # if using on device with large number of interfaces
- # recommend use of SNMP v2 (get-bulk)
+ if (defined $iftype) {
+ $status=fetch_ifindex($snmpIfType, $iftype);
+ } else {
+ $ifdescr =~ s/\//\\\//g;
+ $status=fetch_ifindex($snmpIfDescr, $ifdescr); # if using on device with large number of interfaces
+ # recommend use of SNMP v2 (get-bulk)
+ }
if ($status==0) {
$state = "UNKNOWN";
- printf "$state: could not retrive ifdescr snmpkey - $status-$snmpkey\n";
+ printf "$state: could not retrive ifdescr/iftype snmpkey - $status-$snmpkey\n";
$session->close;
exit $ERRORS{$state};
}
@@ -152,10 +157,10 @@
## Check to see if ifName match is requested and it matches - exit if no match
## not the interface we want to monitor
- if ( defined $name && not ($response->{$snmpIfName} eq $name) ) {
+ if ( defined $ifName && not ($response->{$snmpIfName} eq $ifName) ) {
$state = 'UNKNOWN';
- $answer = "Interface name ($name) doesn't match snmp value ($response->{$snmpIfName}) (index $snmpkey)";
- print ("$state: $answer");
+ $answer = "Interface name ($ifName) doesn't match snmp value ($response->{$snmpIfName}) (index $snmpkey)";
+ print ("$state: $answer\n");
exit $ERRORS{$state};
}
@@ -219,14 +224,17 @@
-print ("$state: $answer");
+print ("$state: $answer\n");
exit $ERRORS{$state};
### subroutines
-sub fetch_ifdescr {
- if (!defined ($response = $session->get_table($snmpIfDescr))) {
+sub fetch_ifindex {
+ my $oid = shift;
+ my $lookup = shift;
+
+ if (!defined ($response = $session->get_table($oid))) {
$answer=$session->error;
$session->close;
$state = 'CRITICAL';
@@ -236,10 +244,10 @@
}
foreach $key ( keys %{$response}) {
- if ($response->{$key} =~ /^$ifdescr$/) {
+ if ($response->{$key} =~ /^$lookup$/) {
$key =~ /.*\.(\d+)$/;
$snmpkey = $1;
- #print "$ifdescr = $key / $snmpkey \n"; #debug
+ #print "$lookup = $key / $snmpkey \n"; #debug
}
}
unless (defined $snmpkey) {
@@ -288,6 +296,7 @@
printf " privacy password and authEngineID\n";
printf " -k (--key) SNMP IfIndex value\n";
printf " -d (--descr) SNMP ifDescr value\n";
+ printf " -T (--type) SNMP ifType integer value (see http://www.iana.org/assignments/ianaiftype-mib)\n";
printf " -p (--port) SNMP port (default 161)\n";
printf " -I (--ifmib) Agent supports IFMIB ifXTable. Do not use if\n";
printf " you don't know what this is. \n";
@@ -299,8 +308,8 @@
printf " -t (--timeout) seconds before the plugin times out (default=$TIMEOUT)\n";
printf " -V (--version) Plugin version\n";
printf " -h (--help) usage help \n\n";
- printf " -k or -d must be specified\n\n";
- printf "Note: either -k or -d must be specified and -d is much more network \n";
+ printf " -k or -d or -T must be specified\n\n";
+ printf "Note: either -k or -d or -T must be specified and -d and -T are much more network \n";
printf "intensive. Use it sparingly or not at all. -n is used to match against\n";
printf "a much more descriptive ifName value in the IfXTable to verify that the\n";
printf "snmpkey has not changed to some other network interface after a reboot.\n\n";
@@ -331,6 +340,7 @@
"D=s" => \$adminWarn, "admin-down=s" => \$adminWarn,
"M=i" => \$maxmsgsize, "maxmsgsize=i" => \$maxmsgsize,
"t=i" => \$timeout, "timeout=i" => \$timeout,
+ "T=i" => \$iftype, "type=i" => \$iftype,
);
@@ -356,7 +366,7 @@
}
- unless ($snmpkey > 0 || defined $ifdescr){
+ unless ($snmpkey > 0 || defined $ifdescr || defined $iftype){
printf "Either a valid snmpkey key (-k) or a ifDescr (-d) must be provided)\n";
usage();
exit $ERRORS{"UNKNOWN"};
@@ -451,7 +461,7 @@
if (!defined($session)) {
$state='UNKNOWN';
$answer=$error;
- print ("$state: $answer");
+ print ("$state: $answer\n");
exit $ERRORS{$state};
}
@@ -490,7 +500,7 @@
if (!defined($session)) {
$state='UNKNOWN';
$answer=$error;
- print ("$state: $answer");
+ print ("$state: $answer\n");
exit $ERRORS{$state};
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.