.\" Portions of this file are subject to the following copyright.  See
.\" the Net-SNMP's 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 SNMPTRANSLATE 1 "20 Jul 2010" VVERSIONINFO "Net-SNMP"
.SH NAME
snmptranslate - translate MIB OID names between numeric and textual forms
.SH SYNOPSIS
.B snmptranslate
[OPTIONS] OID [OID]...
.SH DESCRIPTION
.B snmptranslate
is an application that translates one or more SNMP object identifier
values from their symbolic (textual) forms into their numerical forms
(or vice versa).  
.PP
OID is either a numeric or textual object identifier.
.SH OPTIONS
.TP 8
.B -D\fI[TOKEN[,...]]
Turn on debugging output for the given
.IR "TOKEN" "(s)."
Try
.IR ALL
for extremely verbose output.
.TP
.B -h
Display a brief usage message and then exit.
.TP
.BI -m " MIBLIST"
Specifies a colon separated list of MIB modules to load for this
application.  This overrides the environment variable MIBS.
.IP
The special keyword
.I ALL
is used to specify all modules in all directories when searching for MIB
files.  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 the environment variable MIBDIRS.
.TP
.BI -T " TRANSOPTS"
Provides control over the translation of the OID values.  The
following
.I TRANSOPTS
are available:
.RS
.TP 6
.B \-Td
Print full details of the specified OID.
.TP
.B \-Tp
Print a graphical tree, rooted at the specified OID.
.TP
.B \-Ta
Dump the loaded MIB in a trivial form.
.TP
.B \-Tl
Dump a labeled form of all objects.
.TP
.B \-To
Dump a numeric form of all objects.
.TP
.B \-Ts
Dump a symbolic form of all objects.
.TP
.B \-Tt
Dump a tree form of the loaded MIBs (mostly useful for debugging).
.TP
.B \-Tz
Dump a numeric and labeled form of all objects (compatible with MIB2SCHEMA format).
.RE
.TP
.B -V
Display version information for the application and then exit.
.TP
.BI -w " WIDTH"
Specifies the width of
.B -Tp
and
.B -Td
output. The default is very large.
.PP
In addition to the above options, 
.B snmptranslate
takes the OID input 
.RB ( -I ),
MIB parsing
.RB ( -M )
and OID output
.RB ( -O )
options described in the 
.BR "INPUT OPTIONS" ", " "MIB PARSING OPTIONS" " and " "OUTPUT OPTIONS"
sections of the
.I snmpcmd(1) 
manual page.
.SH EXAMPLES
.IP \(bu 4
snmptranslate -On -IR sysDescr
.br
will translate "sysDescr" to a more qualified form:
.IP
system.sysDescr
.IP \(bu 4
snmptranslate -Onf -IR sysDescr
.br
will translate "sysDecr" to:
.IP
.RI .iso.org.dod.internet.mgmt.mib-2.system.sysDescr
.IP \(bu 4 
snmptranslate -Td -OS system.sysDescr
.br
will translate "sysDecr" into:
.IP
.nf
SNMPv2-MIB::sysDescr
sysDescr OBJECT-TYPE
  -- FROM SNMPv2-MIB
  -- TEXTUAL CONVENTION DisplayString
  SYNTAX OCTET STRING (0..255)
  DISPLAY-HINT "255a"
  MAX-ACCESS read-only
  STATUS current
  DESCRIPTION "A textual description of the entity. This
               value should include the full name and
               version identification of the system's
               hardware type, software operating-system,
               and networking software."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) 1 }
.fi
.IP \(bu 4 
snmptranslate -Tp -OS system
.br
will print the following tree:
.IP
.nf
+--system(1)
   |
   +-- -R-- String    sysDescr(1)
   |        Textual Convention: DisplayString
   |        Size: 0..255
   +-- -R-- ObjID     sysObjectID(2)
   +-- -R-- TimeTicks sysUpTime(3)
   +-- -RW- String    sysContact(4)
   |        Textual Convention: DisplayString
   |        Size: 0..255
   +-- -RW- String    sysName(5)
   |        Textual Convention: DisplayString
   |        Size: 0..255
   +-- -RW- String    sysLocation(6)
   |        Textual Convention: DisplayString
   |        Size: 0..255
   +-- -R-- Integer   sysServices(7)
   +-- -R-- TimeTicks sysORLastChange(8)
   |        Textual Convention: TimeStamp
   |
   +--sysORTable(9)
      |
      +--sysOREntry(1)
         |
         +-- ---- Integer   sysORIndex(1)
         +-- -R-- ObjID     sysORID(2)
         +-- -R-- String    sysORDescr(3)
         |        Textual Convention: DisplayString
         |        Size: 0..255
         +-- -R-- TimeTicks sysORUpTime(4)
                  Textual Convention: TimeStamp

.fi
.PP
.IP \(bu 4
snmptranslate -Ta | head
.br
will produce the following dump:
.IP
.nf
dump DEFINITIONS ::= BEGIN
org ::= { iso 3 }
dod ::= { org 6 }
internet ::= { dod 1 }
directory ::= { internet 1 }
mgmt ::= { internet 2 }
experimental ::= { internet 3 }
private ::= { internet 4 }
security ::= { internet 5 }
snmpV2 ::= { internet 6 }
.fi
.PP
.IP \(bu 4
snmptranslate -Tl | head
.br
will produce the following dump:
.IP
.nf
.RI .iso(1).org(3)
.RI .iso(1).org(3).dod(6)
.RI .iso(1).org(3).dod(6).internet(1)
.RI .iso(1).org(3).dod(6).internet(1).directory(1)
.RI .iso(1).org(3).dod(6).internet(1).mgmt(2)
.RI .iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1)
.RI .iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1)
.RI .iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1).sysDescr(1)
.RI .iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1).sysObjectID(2)
.RI .iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1).sysUpTime(3)
.fi
.PP
.IP \(bu 4
snmptranslate -To | head
.br
will produce the following dump
.IP
.nf
.RI .1.3
.RI .1.3.6
.RI .1.3.6.1
.RI .1.3.6.1.1
.RI .1.3.6.1.2
.RI .1.3.6.1.2.1
.RI .1.3.6.1.2.1.1
.RI .1.3.6.1.2.1.1.1
.RI .1.3.6.1.2.1.1.2
.RI .1.3.6.1.2.1.1.3
.fi
.PP
.IP \(bu 4
snmptranslate -Ts | head
.br
will produce the following dump
.IP
.nf
.RI .iso.org
.RI .iso.org.dod
.RI .iso.org.dod.internet
.RI .iso.org.dod.internet.directory
.RI .iso.org.dod.internet.mgmt
.RI .iso.org.dod.internet.mgmt.mib-2
.RI .iso.org.dod.internet.mgmt.mib-2.system
.RI .iso.org.dod.internet.mgmt.mib-2.system.sysDescr
.RI .iso.org.dod.internet.mgmt.mib-2.system.sysObjectID
.RI .iso.org.dod.internet.mgmt.mib-2.system.sysUpTime
.fi
.PP
.IP \(bu 4
snmptranslate -Tt | head
.br
will produce the following dump
.IP
.nf
  org(3) type=0
    dod(6) type=0
      internet(1) type=0
        directory(1) type=0
        mgmt(2) type=0
          mib-2(1) type=0
            system(1) type=0
              sysDescr(1) type=2 tc=4 hint=255a
              sysObjectID(2) type=1
              sysUpTime(3) type=8
.fi
.SH "SEE ALSO"
snmpcmd(1), variables(5), RFC 2578-2580.
