.\" -*- 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 SNMPWALK 1 "23 Aug 2004" VVERSIONINFO "Net-SNMP"
.SH NAME
snmpwalk - retrieve a subtree of management values using SNMP GETNEXT requests
.SH SYNOPSIS
.B snmpwalk
[APPLICATION OPTIONS] [COMMON OPTIONS] AGENT [OID]
.SH DESCRIPTION
.B snmpwalk
is an SNMP application that uses SNMP GETNEXT requests to query a
network entity 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 GETNEXT 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) .
.PP
If no OID argument is present,
.B snmpwalk
will search the subtree rooted at SNMPv2-SMI::mib-2
(including any MIB object values from other MIB modules,
that are defined as lying within this subtree).
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 snmpwalk
to loop indefinitely.  By default,
.B snmpwalk
tries to detect this behavior and warns you when it hits an agent
acting illegally.  Use
.B -Cc
to turn off this check.
.TP
.B -Ci
Include the given OID in the search range.  Normally
.B snmpwalk
uses GETNEXT requests starting with the OID you specified and returns
all results in the MIB subtree rooted at 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 explicitly.
.TP
.B -CI
In fact, the given OID will be retrieved automatically if the main
subtree walk returns no useable values.  This allows a walk of a
single instance to behave as generally expected, and return the
specified instance value.
This option turns off this final GET request, so a walk of a
single instance will return nothing.
.TP
.B -Cp
Upon completion of the walk, print the number of variables found.
.TP
.B -Ct
Upon completion of the walk, print the total wall-clock time it took
to collect the data (in seconds).  Note that the timer is started just
before the beginning of the data request series and stopped just after
it finishes.  Most importantly, this means that it does not include
snmp library initialization, shutdown, argument processing, and any
other overhead.
.PP
In addition to these options,
.B snmpwalk
takes the common options described in the 
.I snmpcmd(1)
manual page.
.br
Note that
.B snmpbulkget
REQUIRES  an argument specifying the agent to query
and at most one OID argument, as described there.
.SH EXAMPLE
The command:
.PP
snmpwalk -Os -c public -v 1 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
.SH "SEE ALSO"
snmpcmd(1), snmpbulkwalk(1), variables(5).
