.\" 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.
.\" ******************************************************************/
.\" Portions of this file are copyrighted by:
.\" Copyright Copyright 2003 Sun Microsystems, Inc. All rights reserved.
.\" Use is subject to license terms specified in the COPYING file
.\" distributed with the Net-SNMP package.
.\" ******************************************************************/
.TH SNMPCMD 1 "01 Sep 2006" VVERSIONINFO "Net-SNMP"
.SH NAME
snmpcmd - options and behaviour common to most of the Net-SNMP command-line tools
.SH SYNOPSIS
.B snmpcmd
[OPTIONS] AGENT [PARAMETERS]
.SH DESCRIPTION
This manual page describes the common options for the SNMP commands:
.BR snmpbulkget ", " snmpbulkwalk ", "  snmpdelta ", " snmpget ", "
.BR snmpgetnext ", " snmpnetstat ", " snmpset ", " snmpstatus ", "
.BR snmptable ", " snmptest ", " snmptrap ", 
.BR " snmpdf", " snmpusm ", " snmpwalk ".  "
The command line applications use the SNMP protocol to communicate
with an SNMP capable network entity, an agent.  Individual
applications typically (but not necessarily) take additional
parameters that are given after the agent specification.  These
parameters are documented in the manual pages for each application.

.SH OPTIONS
.TP
.BI "-3[MmKk]  0xHEXKEY"
Sets the keys to be used for SNMPv3 transactions.  These options allow
you to set the master authentication and encryption keys (-3m and -3M
respectively) or set the localized authentication and encryption keys
(-3k and -3K respectively).  SNMPv3 keys can be either passed in by
hand using these flags, or by the use of keys generated from passwords
using the -A and -X flags discussed below.  For further details on
SNMPv3 and its usage of keying information, see the Net-SNMP tutorial
web site ( http://www.Net-SNMP.org/tutorial-5/commands/ ). 
Overrides the defAuthMasterKey (-3m), defPrivMasterKey (-3M), 
defAuthLocalizedKey (-3k) or defPrivLocalizedKey (-3K) tokens, respectively, 
in the
.I snmp.conf
file, see
.I snmp.conf(5).
.TP
.BI -a " authProtocol"
Set the authentication protocol (MD5 or SHA) used for authenticated SNMPv3
messages. Overrides the \fIdefAuthType\fR token in the
.I snmp.conf
file.
.TP
.BI -A " authPassword"
Set the authentication pass phrase used for authenticated SNMPv3
messages.  Overrides the \fIdefAuthPassphrase\fR token in the
.I snmp.conf
file. It is insecure to specify pass phrases on the command line,
see
.I snmp.conf(5).
.TP
.BI -c " community"
Set the community string for SNMPv1/v2c transactions.
Overrides the \fIdefCommunity\fR token in the
.I snmp.conf
file.
.TP
.B -d
Dump (in hexadecimal) the raw SNMP packets sent and received.
.TP
.B -D\fI[TOKEN[,...]]
Turn on debugging output for the given
.IR "TOKEN" "(s)."
Try
.IR ALL
for extremely verbose output.
.TP
.BI -e " engineID"
Set the authoritative (security) engineID used for SNMPv3 REQUEST
messages, given as a hexadecimal string (optionally prefixed by "0x").
It is typically not necessary to specify this engine ID, as it will
usually be discovered automatically.
.TP
.BI -E " engineID"
Set the context engineID used for SNMPv3 REQUEST messages scopedPdu,
given as a hexadecimal string.
If not specified, this will default to the authoritative engineID.
.TP
.B -h, --help
Display a brief usage message and then exit.
.TP
.B -H
Display a list of configuration file directives understood by the
command and then exit.
.TP
.BI -I " [brRhu]"
Specifies input parsing options. See 
.B INPUT OPTIONS 
below.
.TP
.BI -l " secLevel"
Set the securityLevel used for SNMPv3 messages
(noAuthNoPriv|authNoPriv|authPriv).  Appropriate pass phrase(s) must
provided when using any level higher than noAuthNoPriv.
Overrides the \fIdefSecurityLevel\fR token in the
.I snmp.conf
file.
.TP
.BI -L " [eEfFoOsS]"
Specifies output logging options. See 
.B LOGGING OPTIONS 
below.
.TP
.BI -m " MIBLIST"
Specifies a colon separated list of MIB modules (not files) to load for
this application.  This overrides (or augments) the environment variable
MIBS, the \fIsnmp.conf\fR directive \fImibs\fR, and the list of MIBs
hardcoded into the Net-SNMP library.
.IP
If 
.I MIBLIST
has a leading '-' or '+' character, then the MIB modules listed are
loaded in addition to the default list, coming before or after
this list respectively.
Otherwise, the specified MIBs are loaded \fIinstead\fR of this
default list.
.IP
The special keyword
.I ALL
is used to load all MIB modules in the MIB directory search list.
Every file whose name does not begin with "." will be parsed as
if it were a MIB file.
.TP
.BI -M " DIRLIST"
Specifies a colon separated list of directories to search for MIBs.
This overrides (or augments) the environment variable MIBDIRS,
the \fIsnmp.conf\fR directive \fImibdirs\fR, and the default
directory hardcoded into the Net-SNMP library
(DATADIR/snmp/mibs).
.IP
If 
.I DIRLIST
has a leading '-' or '+' character, then the given directories are
added to the default list, being searched before or after the
directories on this list respectively.
Otherwise, the specified directories are searched \fIinstead\fR
of this default list.

Note that the directories appearing later in the list have
have precedence over earlier ones.
.\"
.\" XXX - Say a bit more about what precedence means
.\"
To avoid searching any MIB directories, set the MIBDIRS
environment variable to the empty string ("").
.\"
.\" XXX - or     -M ""    ??
.\"

Note that MIBs specified using the -m option or the \fImibs\fR
configuration directive will be loaded from one of the directories
listed by the -M option (or equivalents).
The \fImibfile\fR directive takes a full path to the specified MIB
file, so this does not need to be in the MIB directory search list.
.TP
.BI -n " contextName"
Set the contextName used for SNMPv3 messages.  The default
contextName is the empty string "".  Overrides the \fIdefContext\fR token
in the
.I snmp.conf
file. 
.TP
.BI -O " [abeEfnqQsStTuUvxX]"
Specifies output printing options. See 
.B OUTPUT OPTIONS
below.
.TP
.BI -P " [cdeRuwW]"
Specifies MIB parsing options.  See
.B MIB PARSING OPTIONS
below.
.TP
.BI -r " retries"
Specifies the number of retries to be used in the requests. The default
is 5.
.TP
.BI -t " timeout"
Specifies the timeout in seconds between retries. The default is 1.
.TP
.BI -u " secName"
Set the securityName used for authenticated SNMPv3 messages.
Overrides the \fIdefSecurityName\fR token in the
.I snmp.conf
file.
.TP
.B -v \fI1\fR | \fI2c\fR | \fI3
Specifies the protocol version to use: 1 (RFCs 1155-1157), 2c (RFCs 1901-1908),
or 3 (RFCs 2571-2574).  The default is typically version 3.
Overrides the \fIdefVersion\fR token in the
.I snmp.conf
file.
.TP
.B -V, --version
Display version information for the application and then exit.
.TP
.BI -x " privProtocol"
Set the privacy protocol (DES or AES) used for encrypted SNMPv3 messages. 
Overrides the \fIdefPrivType\fR token in the
.I snmp.conf
file. This option is only valid if the Net-SNMP software was build
to use OpenSSL.
.TP
.BI -X " privPassword"
Set the privacy pass phrase used for encrypted SNMPv3 messages.
Overrides the \fIdefPrivPassphrase\fR token in the
.I snmp.conf
file.
It is insecure to specify pass phrases on the command line, see
.I snmp.conf(5).
.TP
.BI -Z " boots,time"
Set the engineBoots and engineTime used for authenticated SNMPv3
messages.  This will initialize the local notion of the agents
boots/time with an authenticated value stored in the LCD.
It is typically not necessary to specify this option, as these values
will usually be discovered automatically.
.TP
.BI -Y "name"="value"
.TP
.BI -- "name"="value"
Allows to specify any token ("name") supported in the
.I snmp.conf
file and sets its value to "value". Overrides the corresponding token in the
.I snmp.conf
file. See
.I snmp.conf(5)
for the full list of tokens.

.SH AGENT SPECIFICATION
.PP
The string
.I AGENT
in the
.B SYNOPSIS
above specifies the remote SNMP entity with which to communicate.
This specification takes the form:
.IP
[<transport-specifier>:]<transport-address>
.PP
At its simplest, the
.I AGENT
specification may consist of a hostname, or an IPv4 address in the
standard "dotted quad" notation.  In this case, communication will be
attempted using UDP/IPv4 to port 161 of the given host.  Otherwise,
the <transport-address> part of the specification is parsed according
to the following table:
.RS 4
.TP 28
.BR "<transport-specifier>"
.BR "<transport-address> format"
.IP "udp" 28
hostname[:port]
.I or
IPv4-address[:port]
.IP "tcp" 28
hostname[:port]
.I or
IPv4-address[:port]
.IP "unix" 28
pathname
.IP "ipx" 28
[network]:node[/port]
.TP 28 
.IR "" "aal5pvc " or " pvc"
[interface.][VPI.]VCI
.IP "udp6 or udpv6 or udpipv6" 28
hostname[:port]
.I or
IPv6-address:port
.I or
 '['IPv6-address']'[:port]
.IP "tcp6 or tcpv6 or tcpipv6"
hostname[:port]
.I or
IPv6-address:port
.I or
 '['IPv6-address']'[:port]
.RE
.PP
Note that <transport-specifier> strings are case-insensitive so that,
for example, "tcp" and "TCP" are equivalent.  Here are some examples,
along with their interpretation:
.TP 24
.IR "hostname:161"
perform query using UDP/IPv4 datagrams to
.I hostname
on port
.IR 161 .
The ":161" is redundant here since that is the default SNMP port in
any case.
.TP 24
.IR "udp:hostname"
identical to the previous specification.  The "udp:" is redundant here
since UDP/IPv4 is the default transport.
.TP 24
.IR "TCP:hostname:1161"
connect to
.I hostname
on port
.I 1161
using TCP/IPv4 and perform query over that connection.
.TP 24
.IR "ipx::00D0B7AAE308"
perform query using IPX datagrams to node number 
.I 00D0B7AAE308
on the default network, and using the default IPX port of 36879 (900F
hexadecimal), as suggested in RFC 1906.
.TP 24
.IR "ipx:0AE43409:00D0B721C6C0/1161"
perform query using IPX datagrams to port
.I 1161
on node number
.I 00D0B721C6C0
on network number
.IR 0AE43409 .
.TP 24
.IR "unix:/tmp/local-agent"
connect to the Unix domain socket 
.IR /tmp/local-agent ,
and perform the query over that connection.
.TP 24
.IR "/tmp/local-agent"
identical to the previous specification, since the Unix domain is the
default transport iff the first character of the <transport-address>
is a '/'.
.TP 24
.IR "AAL5PVC:100"
perform the query using AAL5 PDUs sent on the permanent virtual
circuit with VPI=0 and VCI=100 (decimal) on the first ATM adapter in the
machine.
.TP 24
.IR "PVC:1.10.32"
perform the query using AAL5 PDUs sent on the permanent virtual
circuit with VPI=10 (decimal) and VCI=32 (decimal) on the second ATM
adapter in the machine.  Note that "PVC" is a synonym for "AAL5PVC".
.TP 24
.IR "udp6:hostname:10161"
perform the query using UDP/IPv6 datagrams to port
.I 10161
on
.I hostname
(which will be looked up as an AAAA record).
.TP 24
.IR "UDP6:[fe80::2d0:b7ff:fe21:c6c0]"
perform the query using UDP/IPv6 datagrams to port 161 at address
.IR fe80::2d0:b7ff:fe21:c6c0 .
.TP 24
.IR "tcpipv6:[::1]:1611"
connect to port 1611 on the local host
.IR "" ( ::1 
in IPv6 parlance) using TCP/IPv6 and perform query over that connection.
.PP
Note that not all the transport domains listed above will always be
available; for instance, hosts with no IPv6 support will not be able
to use udp6 transport addresses, and attempts to do so will result in
the error "Unknown host".  Likewise, since AAL5 PVC support is only
currently available on Linux, it will fail with the same error on
other platforms.

.SH "MIB PARSING OPTIONS"
The Net-SNMP MIB parser mostly adheres to the Structure of Management
Information (SMI).  As that specification has changed through time, and
in recognition of the (ahem) diversity in compliance expressed in MIB
files, additional options provide more flexibility in reading MIB files.
.TP
.B "-Pc"
Toggles whether ASN.1 comments should extend to the end of the MIB
source line.
Strictly speaking, a second appearance of "--" should terminate the
comment, but this breaks some MIB files.
The default behaviour (to interpret comments correctly) can also
be set with the (misnamed) configuration token \fIstrictCommentTerm\fR.
.TP
.B "-Pd"
Disables the loading of MIB object DESCRIPTIONs when parsing MIB files.
This reduces the amount of memory used by the running application.
.TP
.B "-Pe"
Toggles whether to show errors encountered when parsing MIB files.
These include
references to IMPORTed modules and MIB objects that cannot be
located in the MIB directory search list.
The default behaviour can also be set with the configuration token \fIshowMibErrors\fR.
.TP
.B "-PR"
If the same MIB object (parent name and sub-identifier) appears multiple
times in the list of MIB definitions loaded, use the last version to be
read in.  By default, the first version will be used, and any duplicates
discarded. 
This behaviour can also be set with the configuration token \fImibReplaceWithLatest\fR.

Such ordering is normally only relevant if there are two MIB files with
conflicting object definitions for the same OID (or different revisions
of the same basic MIB object).
.\" .B WARNING:
.\" Setting this option may result in an incorrect hierarchy.
.\" XXX - Why?
.TP
.B "-Pu"
Toggles whether to allow the underline character in MIB object names
and other symbols.
Strictly speaking, this is not valid SMI syntax, but some vendor MIB
files define such names.
The default behaviour can also be set with the configuration token \fImibAllowUnderline\fR.
.TP
.B "-Pw"
Show various warning messages in parsing MIB files and building
the overall OID tree.
This can also be set with the configuration directive
\fImibWarningLevel 1\fR
.TP
.B "-PW"
Show some additional warning messages, mostly relating to parsing
individual MIB objects.
This can also be set with the configuration directive
\fImibWarningLevel 2\fR

.SH "OUTPUT OPTIONS"
The format of the output from SNMP commands can be controlled using
various parameters of the \fB-O\fR flag.
The effects of these sub-options can be seen by comparison with
the following default output (unless otherwise specified):
.RS
.nf
\fC$ snmpget -c public -v 1 localhost sysUpTime.0
SNMPv2-MIB::sysUpTime.0 = Timeticks: (14096763) 1 day, 15:09:27.63\fR
.fi
.RE

.TP
.B -Oa
Display string values as ASCII strings (unless there is a 
\fCDISPLAY-HINT\fR defined for the corresponding MIB object).
By default, the library attempts to determine whether the value is
a printable or binary string, and displays it accordingly.

This option does not affect objects that \fIdo\fR have a Display Hint.
.TP
.B -Ob
Display table indexes numerically, rather than trying to interpret
the instance subidentifiers as string or OID values:
.RS
.nf
\fC    $ snmpgetnext -c public -v 1 localhost vacmSecurityModel
    SNMP-VIEW-BASED-ACM-MIB::vacmSecurityModel.0."wes" = xxx
    $ snmpgetnext -c public -v 1 \fB-Ob\fP localhost vacmSecurityModel
    SNMP-VIEW-BASED-ACM-MIB::vacmSecurityModel.0.3.119.101.115 = xxx\fR
.fi
.RE
.TP
.B -Oe
Removes the symbolic labels from enumeration values:
.RS
.nf
\fC    $ snmpget -c public -v 1 localhost ipForwarding.0
    IP-MIB::ipForwarding.0 = INTEGER: forwarding(1)
\fC    $ snmpget -c public -v 1 \fB-Oe\fP localhost ipForwarding.0
    IP-MIB::ipForwarding.0 = INTEGER: 1\fR
.fi
.RE
.TP
.B -OE
Modifies index strings to escape the quote characters:
.RS
.nf
\fC    $ snmpgetnext -c public -v 1 localhost vacmSecurityModel
    SNMP-VIEW-BASED-ACM-MIB::vacmSecurityModel.0."wes" = xxx
    $ snmpgetnext -c public -v 1 \fB-OE\fP localhost vacmSecurityModel
    SNMP-VIEW-BASED-ACM-MIB::vacmSecurityModel.0.\\"wes\\" = xxx\fR
.fi
.RE
.IP
This allows the output to be reused in shell commands.
.TP
.B -Of
Include the full list of MIB objects when displaying an OID:
.RS
\fC    .iso.org.dod.internet.mgmt.mib-2.system.sysUpTime.0 =\fR
.RS
\fC        Timeticks: (14096763) 1 day, 15:09:27.63\fR
.RE
.RE
.TP
.B -On
Displays the OID numerically:
.br
\fC    .1.3.6.1.2.1.1.3.0 = Timeticks: (14096763) 1 day, 15:09:27.63\fR
.TP
.B -Oq
Removes the equal sign and type information when displaying varbind values:
.br
\fC    SNMPv2-MIB::sysUpTime.0 1:15:09:27.63\fR
.TP
.B -OQ
Removes the type information when displaying varbind values:
.br
\fC    SNMPv2-MIB::sysUpTime.0 = 1:15:09:27.63\fR
.TP
.B -Os
Display the MIB object name (plus any instance or other subidentifiers):
.br
\fC    sysUpTime.0 = Timeticks: (14096763) 1 day, 15:09:27.63\fR
.TP
.B -OS
Display the name of the MIB, as well as the object name:
.br
\fC    SNMPv2-MIB::sysUpTime.0 = Timeticks: (14096763) 1 day, 15:09:27.63\fR
.IP
This is the default OID output format.
.TP
.B -Ot
Display \fCTimeTicks\fR values as raw numbers:
.br
\fC    SNMPv2-MIB::sysUpTime.0 = 14096763\fR
.TP
.B -OT
If values are printed as Hex strings,
display a printable version as well.
.TP
.B -Ou
Display the OID in the traditional UCD-style (inherited from the original
CMU code).
That means removing a series of "standard" prefixes from the OID,
and displaying the remaining list of MIB object names
(plus any other subidentifiers):
.br
\fC    system.sysUpTime.0 = Timeticks: (14096763) 1 day, 15:09:27.63\fR
.TP
.B -OU
Do not print the UNITS suffix at the end of the value.
.TP
.B -Ov
Display the varbind value only, not the OID:
.RS
.nf
\fC    $ snmpget -c public -v 1 \fB-Ov\fP localhost ipForwarding.0
    INTEGER: forwarding(1)\fR
.fi
.RE
.TP
.B -Ox
Display string values as Hex strings (unless there is a 
\fCDISPLAY-HINT\fR defined for the corresponding MIB object).
By default, the library attempts to determine whether the value is
a printable or binary string, and displays it accordingly.

This option does not affect objects that \fIdo\fR have a Display Hint.
.TP
.B -OX
Display table indexes in a more "program like" output, imitating
a traditional array-style index format:
.RS
.nf
\fC    $ snmpgetnext -c public -v 1 localhost ipv6RouteTable
    IPv6-MIB::ipv6RouteIfIndex.63.254.1.0.255.0.0.0.0.0.0.0.0.0.0.0.64.1 = INTEGER: 2
    $ snmpgetnext -c public -v 1 \fB-OX\fP localhost ipv6RouteTable
    IPv6-MIB::ipv6RouteIfIndex[3ffe:100:ff00:0:0:0:0:0][64][1] = INTEGER: 2
.fi
.RE
.PP
Most of these options can also be configured via configuration tokens.
See the
.I snmp.conf(5)
manual page for details.

.SH "LOGGING OPTIONS"
The mechanism and destination to use for logging of warning and error
messages can be controlled by passing various parameters to the
.B -L
flag.
.TP
.B -Le
Log messages to the standard error stream.
.TP
.B -Lf FILE
Log messages to the specified file.
.TP
.B -Lo
Log messages to the standard output stream.
.TP
.B -Ls FACILITY
Log messages via syslog, using the specified facility
('d' for LOG_DAEMON, 'u' for LOG_USER,
or '0'-'7' for LOG_LOCAL0 through LOG_LOCAL7).
.PP

There are also "upper case" versions of each of these options, which
allow the corresponding logging mechanism to be restricted to certain
priorities of message.  Using standard error logging as an example:
.TP
.B -LE pri
will log messages of priority 'pri' and above to standard error.
.TP
.B -LE p1-p2
will log messages with priority between 'p1' and 'p2' (inclusive) to
standard error.
.PP
For
.B -LF
and
.B -LS
the priority specification comes before the file or facility token.
The priorities recognised are:
.IP
.B 0
or
.B !
for LOG_EMERG,
.br
.B 1
or
.B a
for LOG_ALERT,
.br
.B 2
or
.B c
for LOG_CRIT,
.br
.B 3
or
.B e
for LOG_ERR,
.br
.B 4
or
.B w
for LOG_WARNING,
.br
.B 5
or
.B n
for LOG_NOTICE,
.br
.B 6
or
.B i
for LOG_INFO, and
.br
.B 7
or
.B d
for LOG_DEBUG.
.PP
Normal output is (or will be!) logged at a priority level of
.B LOG_NOTICE

.SH "INPUT OPTIONS"
The interpretation of input object names and the values to be assigned
can be controlled using various parameters of the \fB-I\fR flag.
The default behaviour will be described at the end of this section.
.TP
.B -Ib
specifies that the given name should be regarded as a regular expression,
to match (case-insensitively) against object names in the MIB tree.
The "best" match will be used - calculated as the one that matches the
closest to the beginning of the node name and the highest in the tree.
.\"
.\" XXX - This is not a particularly clear description.
.\"       Need to check the code and/or experiment to
.\"       discover exactly what Wes means by this!
For example, the MIB object \fCvacmSecurityModel\fR could be matched by
the expression \fCvacmsecuritymodel\fR (full name, but different case),
or \fCvacm.*model\fR (regexp pattern).

Note that '.' is a special character in regular expression patterns,
so the expression cannot specify instance subidentifiers or more than
one object name.  A "best match" expression will only be applied
against single MIB object names.
For example, the expression \fIsys*ontact.0\fR would not match the
instance \fCsysContact.0\fR (although \fIsys*ontact\fR would match
\fCsysContact\fR).
Similarly, specifying a MIB module name will not succeed
(so \fISNMPv2-MIB::sys.*ontact\fR would not match either).
.TP
.B -Ih
disables the use of DISPLAY-HINT information when assigning values.
This would then require providing the raw value:
.br
\fC    snmpset ... HOST-RESOURCES-MIB::hrSystemDate.0
.br
                    x "07 D2 0C 0A 02 04 06 08"\fR
.br
instead of a formatted version:
.br
\fC    snmpset ... HOST-RESOURCES-MIB::hrSystemDate.0
.br
                    = 2002-12-10,2:4:6.8\fR
.TP
.B -Ir
disables checking table indexes and the value to be assigned against the
relevant MIB definitions.  This will (hopefully) result in the remote
agent reporting an invalid request, rather than checking (and rejecting)
this before it is sent to the remote agent.
 
Local checks are more efficient (and the diagnostics provided also
tend to be more precise), but disabling this behaviour is particularly
useful when testing the remote agent.
.TP
.B -IR
enables "random access" lookup of MIB names.
Rather than providing a full OID path to the desired MIB object
(or qualifying this object with an explicit MIB module name),
the MIB tree will be searched for the matching object name.
Thus \fC.iso.org.dod.internet.mib-2.system.sysDescr.0\fR
(or \fCSNMPv2-MIB::sysDescr.0\fR) can be specified simply
as \fCsysDescr.0\fR.
.RS
.IP "Warning:"
Since MIB object names are not globally unique, this approach
may return a different MIB object depending on which MIB files
have been loaded.
.RE
.IP
The \fIMIB-MODULE::objectName\fR syntax has
the advantage of uniquely identifying a particular MIB object,
as well as being slightly more efficient (and automatically
loading the necessary MIB file if necessary).
.TP
.B -Is SUFFIX
adds the specified suffix to each textual OID given on the command line.
This can be used to retrieve multiple objects from the same row of
a table, by specifying a common index value.
.TP
.B -IS PREFIX
adds the specified prefix to each textual OID given on the command line.
This can be used to specify an explicit MIB module name for all objects
being retrieved (or for incurably lazy typists).
.TP
.B -Iu
enables the traditional UCD-style approach to interpreting input OIDs.
This assumes that OIDs are rooted at the 'mib-2' point in the tree
(unless they start with an explicit '.' or include a MIB module name).
So the \fCsysDescr\fR instance above would be referenced as
\fCsystem.sysDescr.0\fR. 

.PP
Object names specified with a leading '.' are always interpreted as
"fully qualified" OIDs, listing the sequence of MIB objects from the
root of the MIB tree.  Such objects and those qualified by an explicit
MIB module name are unaffected by the \fB-Ib\fR, \fB-IR\fR and \fB-Iu\fR flags.

Otherwise, if none of the above input options are specified, the
default behaviour for a "relative" OID is to try and interpret it
as an (implicitly) fully qualified OID,
then apply "random access" lookup (\fB-IR\fR),
followed by "best match" pattern matching (\fB-Ib\fR).

.SH "ENVIRONMENT VARIABLES"
.IP PREFIX
The standard prefix for object identifiers (when using UCD-style output).
Defaults to .iso.org.dod.internet.mgmt.mib-2
.IP MIBS
The list of MIBs to load. Defaults to
SNMPv2-TC:SNMPv2-MIB:IF-MIB:IP-MIB:TCP-MIB:UDP-MIB:SNMP-VACM-MIB.
Overridden by the
.B -m
option.
.IP MIBDIRS
The list of directories to search for MIBs. Defaults to DATADIR/snmp/mibs.
Overridden by the
.B -M
option.

.SH FILES
.IP SYSCONFDIR/snmp/snmpd.conf
Agent configuration file. See
.IR snmpd.conf(5) .
.IP SYSCONFDIR/snmp/snmp.conf
.IP ~/.snmp/snmp.conf
Application configuration files. See 
.IR snmp.conf(5) .

.SH "SEE ALSO"
snmpget(1), snmpgetnext(1), snmpset(1),
snmpbulkget(1), snmpbulkwalk(1), snmpwalk(1),
snmptable(1), snmpnetstat(1), snmpdelta(1), snmptrap(1), snmpinform(1),
snmpusm(1), snmpstatus(1), snmptest(1),
snmp.conf(5).

