.\" 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 "20 Mar 2009" 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.  It is typically not necessary to specify this, as it will
usually be discovered automatically.
.TP
.BI -E " engineID"
Set the context engineID used for SNMPv3 REQUEST messages scopedPdu.
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.
Floating point numbers can be used to specify fractions of seconds.
.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 "alias:myname"
perform a connection to the
.I myname
alias which needs to be defined in the snmp.conf file using a line
like "
.I "alias myname udp:127.0.0.1:9161"
".  Any type of transport definition can be used as the alias expansion
parameter.  Aliases are particularly useful for using repeated complex
transport strings.
.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.
.TP 24
.IR "dtlsudp:hostname:9161"
Connects using SNMP over DTLS/UDP as documented by the ISMS working group
(RFCs not yet published as of this date).  This will require that the
TSM security model is in use (--defSecurityModel=tsm) and that the
.IR defX509ServerCerts,
.IR defX509ClientPriv,
and
.IR defX509ClientPub
configuration tokens have been set.
.TP 24
.IR "ssh:hostname:22"
Connects using SNMP over SSH as documented by the ISMS working group
(RFCs not yet published as of this date).  This will require that the
TSM security model is in use (--defSecurityModel=tsm).
.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 configuration token \fIcommentToEOL\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).

