.\" -*- nroff -*-
.\" Portions of this file are subject to the following copyright. 
.\" See the Net-SNMP COPYING file for more details and other
.\" copyrights that may apply:
.\" /***********************************************************
.\" 	Copyright 1988, 1989 by Carnegie Mellon University
.\" 
.\"                       All Rights Reserved
.\" 
.\" Permission to use, copy, modify, and distribute this software and its 
.\" documentation for any purpose and without fee is hereby granted, 
.\" provided that the above copyright notice appear in all copies and that
.\" both that copyright notice and this permission notice appear in 
.\" supporting documentation, and that the name of CMU not be
.\" used in advertising or publicity pertaining to distribution of the
.\" software without specific, written prior permission.  
.\" 
.\" CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
.\" ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
.\" CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
.\" ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
.\" WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
.\" ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
.\" SOFTWARE.
.\" ******************************************************************/
.TH SNMPBULKWALK 1 "01 May 2002" VVERSIONINFO "Net-SNMP"
.SH NAME
snmpbulkwalk - retrieve a subtree of management values using SNMP GETBULK requests
.SH SYNOPSIS
.B snmpbulkwalk
[APPLICATION OPTIONS] [COMMON OPTIONS] AGENT [OID]
.SH DESCRIPTION
.B snmpbulkwalk
is an SNMP application that uses SNMP GETBULK requests to query a
network entity efficiently for a tree of information.
.PP
An object identifier (OID) may be given on the command line.  This OID
specifies which portion of the object identifier space will be
searched using GETBULK requests.  All variables in the subtree below
the given OID are queried and their values presented to the user.
Each variable name is given in the format specified in
.IR variables(5) .
If no OID argument is present,
.B snmpbulkwalk
will search MIB-2.
.PP
If the network entity has an error processing the request packet, an
error packet will be returned and a message will be shown, helping to
pinpoint why the request was malformed.
.PP
If the tree search causes attempts to search beyond the end of the
MIB, the message "End of MIB" will be displayed.
.SH OPTIONS
.TP 8
.B -Cc
Do not check whether the returned OIDs are increasing.  Some agents
(LaserJets are an example) return OIDs out of order, but can
complete the walk anyway.  Other agents return OIDs that are out of
order and can cause
.B snmpbulkwalk
to loop indefinitely.  By default,
.B snmpbulkwalk
tries to detect this behavior and warns you when it hits an agent
acting illegally.  Use
.B -Cc
to turn off this behaviour.
.TP
.B -Ci
Include the given OID in the search range.  Normally
.B snmpbulkwalk
uses GETBULK requests starting with the OID you specified and returns
all results in the MIB tree after that OID.  Sometimes, you may wish
to include the OID specified on the command line in the printed
results if it is a valid OID in the tree itself.  This option lets you
do this.
.TP
.BI -Cn <NUM>
Set the
.I non-repeaters
field in the GETBULK PDUs.  This specifies the number of supplied
variables that should not be iterated over.  The default is 0.
.TP
.B -Cp
Upon completion of the walk, print the number of variables found.
.TP
.BI -Cr <NUM>
Set the
.I max-repetitions
field in the GETBULK PDUs.  This specifies the maximum number of
iterations over the repeating variables.  The default is 10.
.PP
In addition to these options,
.B snmpbulkwalk
takes the common options described in the 
.I snmpcmd(1)
manual page.
Note that
.B snmpbulkget
REQUIRES an argument specifying the agent to query
and at most one OID argument, as described above.
.SH EXAMPLE
The command:
.PP
snmpbulkwalk -v2c -Os -c public zeus system
.PP
will retrieve all of the variables under system:
.PP
sysDescr.0 = STRING: "SunOS zeus.net.cmu.edu 4.1.3_U1 1 sun4m"
.br
sysObjectID.0 = OID: enterprises.hp.nm.hpsystem.10.1.1
.br
sysUpTime.0 = Timeticks: (155274552) 17 days, 23:19:05
.br
sysContact.0 = STRING: ""
.br
sysName.0 = STRING: "zeus.net.cmu.edu"
.br
sysLocation.0 = STRING: ""
.br
sysServices.0 = INTEGER: 72
.PP
In contrast to
.BR snmpwalk ,
this information will typically be gathered in a single transaction
with the agent, rather than one transaction per variable found.
.B snmpbulkwalk
is thus more efficient in terms of network utilisation, which may be
especially important when retrieving large tables.
.SH NOTE
As the name implies,
.B snmpbulkwalk
utilizes the SNMP GETBULK message, which is not available in SNMP v1.
.SH "SEE ALSO"
snmpcmd(1), variables(5).
