.\" -*- 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.
.\" ******************************************************************/
.\" 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 Jul 2010" 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 COMMAND-LINE CONFIG OPTIONS
In addition to the options described in this manual page, all of the
tokens described in the \fIsnmp.conf\fR and other .conf manual pages
can be used on the command line of Net-SNMP applications as well by
prefixing them with "\-\-".  EG, specifying
\fI\-\-dontLoadHostConfig=true\fR on the command line will turn of
loading of the host specific configuration files.
.PP
The snmp.conf file settings and the double-dash arguments over-ride
the single-dash arguments.  So it's important to note that if
single-dash arguments aren't working because you have settings in the
\fIsnmp.conf\fR file that conflict with them then you'll need to use
the longer-form double-dash arguments to successfully trump the
\fIsnmp.conf\fR file settings.
.SH Generic Options
Thes options control how the Net-SNMP commands behave regardless of
what version of SNMP you are using.  See further below for options
that control specific versions or sub-modules of the SNMP protocol. 
.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
.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 " [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
.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.
.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
.B \-V, \-\-version
Display version information for the application and then exit.
.TP
.BI \-Y "name"="value"
.TP
.BI \-\- "name"="value"
Allows one 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 SNMPv3 Options
The following options are generic to all forms of SNMPv3, regardless
of whether it's the original SNMPv3 with USM or the newer SNMPv3 over
(D)TLS support.

.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 \-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. 

.SH SNMPv3 over TLS Options
These options pass transport-specific parameters to the TLS layer.  If
you're using SNMP over TLS or DTLS you'll need to pass a combination
of these either through these command line options or through
snmp.conf configuration tokens.
.PP
A note about
.I "<certificate-specifier>s":
Net-SNMP looks for X.509 certificates in each of the normal SNMP
configuration directory search paths under a "tls" subdirectory.  IE,
it will look in ~/.snmp/tls and in /usr/local/share/snmp/tls for
certificates.  The certificate components (eg, the public and private
halves) are stored in sub-directories underneath this root set of
directories.  See the net\-snmp\-cert tool for help in importing,
creating and managing Net-SNMP certificates.
.I "<certificate-specifier>s"
can reference either a fingerprint of the certificate to use (the
net\-snmp\-cert tool can help you figure out the certificates) or the
filename's prefix can be used.  For example, if you had a "snmpd.crt"
certificate file then you could simply refer to the certificate via
the "snmpd" specifier.
.TP
.BI "\-T localCert=<certificate-specifier>"
Indicates to the transport which key should be used to initiate (D)TLS
client connections.  This would typically be a certificate found using
the certificate fingerprint, the application name (eg snmpd, snmptrapd, perl, python) or
genericized name "snmpapp" if using one of the generic applications
(snmpget, snmpwalk, etc).  This can also be set using the
localCert specifier in a snmp.conf configuration file.
.TP
.BI "\-T peerCert=<certificate-specifier>"
If you expect a particular certificate to be presented by the other
side then you can use this specifier to indicate the certificate it
should present.  If it fails to present the expected certificate the
client will refuse to open the connection (because doing otherwise
could lead to man-in-the-middle attacks).  This can also be set using
the peerCert specifier in a snmp.conf configuration file.
.TP
.BI "\-T trust_cert=<certificate-specifier>"
If you have a trusted CA certificate you wish to anchor trust with,
you can use this flag to load a given certificate as a trust anchor.
A copy of the certificate must exist within the Net-SNMP certificate
storage system or this must point to a complete path name.  Also see
the "trustCert" snmp.conf configuration token.
.TP
.BI "\-T their_hostname=<name>"
If the server's presented certificate can be validating using a trust
anchor then their hostname will be checked to ensure their presented
hostname matches one that is expected (you don't want to connect to
goodhost.example.com and accept a certificate presented by
badhost.example.com do you?).  This token can specify the exact host
name expected to be presented by the remote side, either in a
subjectAltName field or in the CommonName field of the server's X.509
certificate.
.SH SNMPv3 with USM Options
These options are specific to using SNMPv3 with the original
User-based Security Model (USM).
.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 \-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
.BI \-u " secName"
Set the securityName used for authenticated SNMPv3 messages.
Overrides the \fIdefSecurityName\fR token in the
.I snmp.conf
file.
.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.


.SH SNMPv1 and SNMPv2c Options 
.TP
.BI \-c " community"
Set the community string for SNMPv1/v2c transactions.
Overrides the \fIdefCommunity\fR token in the
.I snmp.conf
file.

.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.
.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 "tls:hostname:10161"
.TP 24
.IR "dtls:hostname:10161"
Connects using SNMP over DTLS or TLS as documented by the ISMS working
group (RFCs not yet published as of this date).  This will require
(and automatically ensures) that the TSM security model is in use.
You'll also need to set up trust paths for the certificates presented
by the server (see above for descriptions of this).
.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).
.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".
.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).

