.\" -*- 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).
