- my $value = $snmp->get($oid.'.0');
- if ($snmp->{'ErrorStr'}) {
- push @out, { 'error' => $snmp->{'ErrorStr'} };
+ my @values;
+ if ($vers eq '1') {
+ my $varbind = new SNMP::Varbind [$oid];
+ my $max = 1000; #sanity check
+ while ($max > 0 and defined($snmp->getnext($varbind))) {
+ last if $snmp->{'ErrorStr'};
+ last unless $SNMP::MIB{$varbind->[0]}; # does this happen?
+ my $nextoid = $SNMP::MIB{$varbind->[0]}->{'objectID'};
+ last unless $nextoid =~ /^$oid/;
+ $max--;
+ push @values, [ @$varbind ];
+ }
+ } else {
+ # not clear on what max-repeaters (25) does, plucked value from example code
+ # but based on testing, it isn't capping number of returned values
+ my ($values) = $snmp->bulkwalk(0,25,$oid);
+ @values = @$values if $values;
+ }
+ if ($snmp->{'ErrorStr'} || !@values) {
+ push @out, { 'error' => $snmp->{'ErrorStr'} || 'No values retrieved' };