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}; }