diff -ruBNx HTML /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080301/Makefile.tplt /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080304/Makefile.tplt
--- /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080301/Makefile.tplt 2008-03-03 10:45:13.000000000 -0500
+++ /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080304/Makefile.tplt 2008-03-04 22:45:55.000000000 -0500
@@ -3,9 +3,9 @@
# Created: 2002-Jun-27
# Function: Makefile template
#
-# $Id: Makefile.tplt,v 1.172 2008/03/03 15:45:13 jaw Exp $
+# $Id: Makefile.tplt,v 1.173 2008/03/05 03:45:55 jaw Exp $
-VERSION = dev-20080301
+VERSION = dev-20080304
MESSAGE = This is unstable development code
INSTALL = please see the INSTALL document for the next steps
UPGRADE1 = be sure to install the new misc/argus.css and misc/argus.js files
diff -ruBNx HTML /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080301/src/Argus::Agent.pm /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080304/src/Argus::Agent.pm
--- /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080301/src/Argus::Agent.pm 2008-02-03 23:56:19.000000000 -0500
+++ /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080304/src/Argus::Agent.pm 2008-03-04 22:45:55.000000000 -0500
@@ -5,7 +5,7 @@
# Date: 2002-Nov-06 18:03 (EST)
# Function: monitor various system values via a remote agent
#
-# $Id: Argus::Agent.pm,v 1.15 2008/02/04 04:56:19 jaw Exp $
+# $Id: Argus::Agent.pm,v 1.16 2008/03/05 03:45:55 jaw Exp $
package Argus::Agent;
use Argus::Encode;
@@ -73,7 +73,7 @@
#...
$me->SUPER::config($cf);
$me->{uname} = "SYS_$me->{ip}{hostname}_$l";
- $me->{friendlyname} = "$l on me->{ip}{hostname}";
+ $me->{friendlyname} = "$l on $me->{ip}{hostname}";
}
diff -ruBNx HTML /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080301/src/Argus::SNMP.pm /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080304/src/Argus::SNMP.pm
--- /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080301/src/Argus::SNMP.pm 2008-02-03 23:56:19.000000000 -0500
+++ /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080304/src/Argus::SNMP.pm 2008-03-04 22:45:56.000000000 -0500
@@ -5,7 +5,7 @@
# Date: 2002-Apr-03 18:59 (EST)
# Function: testing of SNMP things - support for both v1, v2c and v3
#
-# $Id: Argus::SNMP.pm,v 1.5 2008/02/04 04:56:19 jaw Exp $
+# $Id: Argus::SNMP.pm,v 1.6 2008/03/05 03:45:56 jaw Exp $
# SNMP v1 => RFC 1157
# SNMP v2 => RFC 1905
@@ -109,7 +109,7 @@
snmp::snmpversion => {
# normally this should be specified as Service UDP/SNMPv3
descr => 'snmp version, 1, 2c, or 3',
- attrs => ['config' ],
+ attrs => ['config', 'inherit'],
versn => '3.5',
},
snmp::snmpuser => {
@@ -219,10 +219,10 @@
}
if( $me->{name} =~ /SNMPv?3/ ){
- $me->{snmp}{snmpversion} ||= 3;
+ $me->{snmp}{snmpversion} = 3;
}
if( $me->{name} =~ /SNMPv?2c/ ){
- $me->{snmp}{snmpversion} ||= '2c';
+ $me->{snmp}{snmpversion} = '2c';
}
$me->{snmp}{snmpversion} ||= 1;
diff -ruBNx HTML /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080301/src/Argus::SNMP::Helper.pm /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080304/src/Argus::SNMP::Helper.pm
--- /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080301/src/Argus::SNMP::Helper.pm 2007-12-30 20:24:30.000000000 -0500
+++ /home/hostedsites/www.jeremykister.com/data/argus/argus-dev-20080304/src/Argus::SNMP::Helper.pm 2008-03-04 22:45:56.000000000 -0500
@@ -5,7 +5,7 @@
# Created: 2007-Jun-24 17:04 (EDT)
# Function: look up interface names, to permit easier config
#
-# $Id: Argus::SNMP::Helper.pm,v 1.6 2007/12/31 01:24:30 jaw Exp $
+# $Id: Argus::SNMP::Helper.pm,v 1.7 2008/03/05 03:45:56 jaw Exp $
# let the config file say:
# oid: ifOperStatus[Serial1/0]
@@ -29,7 +29,14 @@
my %SRC =
(
- if => { start => \&multi_start, oid => [$OID_IFDESCR], number => $OID_IFNUMBER },
+ # RFC 1213 required contiguous ifIndexes
+ # RFC 1573 removed the requirement.
+ # under 1213, we can get the table via snmpv1 multi-oid-get [1 - ifNumber]
+ # under 1573, we need to either use snmp2c's bulk-get, or snmpv1's get-next-1-at-a-time
+ # most v1 devices support 2c's get-bulk - try that first
+ # if it fails, it is probably old and 1213 compliant, so fall back to that.
+ if_v1 => { start => \&multi_start, oid => [$OID_IFDESCR], ver => 1, number => $OID_IFNUMBER },
+ if => { start => \&bulk_start, oid => [$OID_IFDESCR], ver => '2c', fallback => 'if_v1' },
ucddsk => { start => \&bulk_start, oid => [$OID_DSKPATH, $OID_DSKDEVS], ver => '2c' },
);
@@ -73,6 +80,7 @@
my $hst = $me->{ip}{hostname};
my $src = $me->{snmph}{idxsrc};
+ $me->{snmph}{phase} ||= 0;
$me->debug("snmp helper start: phase $me->{snmph}{phase}");
if( $me->{snmph}{phase} == 0 ){
@@ -85,7 +93,8 @@
}else{
$SRC{$src}->{start}->( $me );
}
-
+
+ $me->{udp}{rbuffer} = undef;
$me->UDP::start();
}
@@ -146,6 +155,19 @@
# error? back to square one
sub isdown {
my $me = shift;
+
+ # if we got a response, but in error, and we have a fallback, fall back
+ # to work around rfc-1573 discontiguous ifindex issue
+ # XXX - should only fallback if error is due to 2c not supported
+ if( $me->{udp}{rbuffer} ){
+ my $src = $me->{snmph}{idxsrc};
+ $src = $SRC{$src}{fallback};
+ if( $src ){
+ $me->debug("fetch of table failed, retrying using $src");
+ $me->{snmph}{idxsrc} = $src;
+ $me->{snmp}{snmpversion} = $SRC{$src}{ver} || 1;
+ }
+ }
$me->{snmph}{phase} = 0;
$me->SUPER::isdown(@_);
@@ -283,7 +305,8 @@
my $ver = $me->{snmp}{snmpversion};
if( $SRC{$src}{ver} && $ver < $SRC{$src}{ver} ){
- $cf->warning("snmp ver $ver does not support bulk get of $src table. trying to use $SRC{$src}{ver} instead");
+ $cf->warning("snmp ver $ver does not support bulk get of $src table. trying to use $SRC{$src}{ver} instead")
+ unless $SRC{$src}{fallback};
$ver = $SRC{$src}{ver};
}