SF.net SVN: nagiosplug:[2061] nagiosplug/trunk

[email protected]
Newsgroups gmane.network.nagios.plugins.cvs
Message-ID <[email protected]>
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.