FAQ
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:160k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1.       Frequently Asked Questions (FAQ) for the UCD/Net-SNMP package
  2.       =============================================================
  3.        FAQ Author: Dave Shield
  4.         net-snmp Version: 5.2.2 CVS branch
  5.     net-snmp/ucd-snmp Project Leader: Wes Hardaker
  6.      Email: net-snmp-coders@lists.sourceforge.net
  7. TABLE OF CONTENTS
  8. =================
  9.  TABLE OF CONTENTS
  10.  GENERAL
  11.    What is it?
  12.    Where can I get it?
  13.    What documentation is available?
  14.    Are there binaries available?
  15.    What's the difference between UCD-SNMP and Net-SNMP?
  16.    What operating systems does it run on?
  17.    What happens if mine isn't listed?
  18.    Does it run on Windows?
  19.    How do I find out about new releases?
  20.    How can I find out what other people are doing?
  21.    How do I submit a patch or bug report?
  22.    Can I reuse the code in my commercial application?
  23.    What's the difference between SNMPv1, SNMPv2 and SNMPv3?
  24.    What's the difference between SNMPv2 and SNMPv2c?
  25.    Which versions of SNMP are supported in this package?
  26.    Can I use SNMPv1 requests with an SNMPv2 MIB (or vice versa)?
  27.    Where can I find more information about network management?
  28.    Is Net-SNMP thread safe?
  29.  APPLICATIONS
  30.    How do I add a MIB?
  31.    How do I add a MIB to the tools?
  32.    Why can't I see anything from the agent?
  33.    Why can't I see values in the <INSERT ENTERPRISE HERE> tree?
  34.    Requests always seem to timeout, and don't give me anything back.  Why?
  35.    I can see the system group, but nothing else.  Why?
  36.    The agent worked for a while, then stopped responding.  Why?
  37.    Requesting an object fails with "Unknown Object Identifier"  Why?
  38.    Why do I get "noSuchName" when asking for "sysUpTime" (or similar)?
  39.    Why do I sometimes get "End of MIB" when walking a tree, and sometimes not?
  40.    I cannot set any variables in the MIB.
  41.    Variables seem to disappear when I try to set them.  Why?
  42.    I still can't change sysLocation, though the access settings allow
  43.        it.  Why not?
  44.    I get an error when trying to set a negative value - why?
  45.    I get an error when trying to get a string-indexed table value - why?
  46.    How do I send traps and notifications?
  47.    How do I handle traps and notifications?
  48.    My traphandler script doesn't work when run like this - why not?
  49.    The ucdShutdown trap OID received by my manager is wrong. Why?
  50.    Why does snmptrapd complain about AgentX?
  51.    How do I use SNMPv3?
  52.    How big can an SNMP request (or reply) be?
  53.    How can I monitor my systems (disk, memory, etc)?
  54.    Applications complain about entries in your example 'snmp.conf' file.  Why?
  55.    OK, what should I put in snmp.conf?
  56.  PERL
  57.    Where can I get the perl SNMP package?
  58.    How do I install the Perl SNMP modules?
  59.    But compiling this fails! Why?
  60.    Compiling the perl module works OK, but 'make test' fails. Why?
  61.    The perl 'make test' fails on the OID tests. Is it safe to continue?
  62.    I'm trying to use mib2c (or tkmib) and it can't locate SNMP.pm?
  63.    I'm trying to use mib2c (or tkmib) and it can't load SNMP.so?
  64.    I'm trying to use tkmib and it can't locate Tk.pm?
  65.    I'm trying to install your RPM, but it complains about missing perl modules. Why?
  66.    I've got a problem with the Net-SNMP module.  Can you help?
  67.  MIBS
  68.    Where can I find a MIB compiler?
  69.    I can't load any of the mib files, and they seem to be missing
  70.        the first two characters of the filename.  What's happening?
  71.    Why aren't my mib files being read in?
  72.    I'm getting answers, but they're all numbers. Why?
  73.    What does "Cannot find module (XXX-MIB)" mean?
  74.    What about "unlinked OID"?
  75.    The parser doesn't handle comments properly. Why not?
  76.    How do I replace MIB values with new ones?
  77.    How can I get more information about these MIB file problems?
  78.    What's this about "too many imported symbols"?
  79.    Do I actually need the MIB files?
  80.  AGENT
  81.    What MIBs are supported?
  82.    What protocols are supported?
  83.    How do I configure the agent?
  84.    How do I add a MIB to the agent?
  85.    How do I remove a MIB from the agent?
  86.    I've installed a new MIB file.  Why can't I query it?
  87.    What's the difference between 'exec', 'sh' and 'pass'?
  88.    What's the difference between AgentX, SMUX and proxied SNMP?
  89.    What about 'dlmod' - what's that about?
  90.    Which should I use?
  91.    Can I use AgentX when running under Windows?
  92.    Can I use AgentX (or an embedded SNMP agent) in a threaded application?
  93.    How can I run AgentX with a different socket address?
  94.    How can I turn off SMUX support?
  95.    How can I combine two copies of the 'mib2' tree from separate subagents?
  96.    What traps are sent by the agent?
  97.    Where are these traps sent to?
  98.    How can I send a particular trap to selected destinations?
  99.    When I run the agent it runs and then quits without staying around. Why?
  100.    After a while the agent stops responding, and starts eating CPU time.  Why?
  101.    How can I stop other people getting at my agent?
  102.    How can I listen on just one particular interface?
  103.    How do I configure access control?
  104.    I don't understand the new access control stuff - what does it mean?
  105.    How do I configure SNMPv3 users?
  106.    The 'createUser' line disappears when I start the agent.  Why?
  107.    What's the difference between /var/ucd-snmp and /usr/local/share/snmp?
  108.    My new agent is ignoring the old snmpd.conf file. Why?
  109.    Why am I getting "Connection refused"?
  110.    I'm getting errors about "bad security model" - why?
  111.    I'm getting errors about "bad prefix match parameter" - why?
  112.    Why can't I see values in the UCDavis 'extensible' or 'disk' trees?
  113.    Why can't I see values in the UCDavis 'memory' or 'vmstat' tree?
  114.    What do the CPU statistics mean - is this the load average?
  115.    How do I get percentage CPU utilization using ssCpuRawIdle?
  116.    What about multi-processor systems?
  117.    The speed/type of my network interfaces is wrong - how can I fix it?
  118.    The interface statistics for my subinterfaces are all zero - why?
  119.    Does the agent support the RMON-MIB?
  120.    What does "klread:  bad address" mean?
  121.    What does "nlist err:  wombat not found" (or similar) mean?
  122.    How about "Can't open /dev/kmem"?
  123.    The agent is complaining about 'snmpd.conf'.  Where is this?
  124.    The system uptime (sysUpTime) returned is wrong!
  125.    Can the agent run multi-threaded?
  126.  COMPILING
  127.    How do I compile with 'cc' instead of 'gcc'?
  128.    But gcc doesn't compile it successfully on my new Solaris system. Why not?
  129.    On RedHat 8.0 or up I get "/usr/bin/ld: cannot find -lelf". Why?
  130.    What about '-lbz2' or '-lselinux' errors?
  131.    What about a failed dependency on 'libcrypto'?  Where can I get that?
  132.    I'm getting an error "autoheader: not found" - what's wrong?
  133.    How can I reduce the memory footprint?
  134.    How can I reduce the installation footprint or speed up compilation?
  135.    How can I compile the project to use static linking?
  136.    Why is the project workspace empty under Visual C++?
  137.    Why does 'make test' skip five tests?
  138.    Why does 'make test' complain about a pid file?
  139.  CODING
  140.    How do I write C code to integrate with the agent?
  141.    How does the agent fetch the value of a MIB variable from the system?
  142.    Mib2c complains about a missing "mib reference" - what does this mean?
  143.    Mib2c complains about not having a "valid OID" - what does this mean?
  144.    Why doesn't Mib2c like the MIB file I'm giving it?
  145.    Mib2c ignores my MIB and generates a pair of 'mib-2' code files.  Why?
  146.    Mib2c complains about "configuration files". What's this for?
  147.    Which mib2c configuration file should I use?
  148.    How can I have Mib2c generate code for both scalars and tables?
  149.    Are there any examples, or documentation?
  150.    Where should I put the files produced by 'mib2c'?
  151.    I've created a new module with 'mib2c' but it doesn't work.  Why not?
  152.    I've added my code to this template and it still doesn't work.  Why not?
  153.    Mib2c only handles a single table in my MIB. How can I fix this?
  154.    Why does the iterator call my get_{first,next} routines so often?
  155.    How can I support a large table, with more than 256 column objects?
  156.    How can I get the agent to generate a trap (or inform)?
  157.    How can I get the agent to send an SNMPv1 (or SNMPv2c) trap?
  158.    How can I get the agent to include varbinds with an SNMPv1 trap?
  159.    How can I get the agent to send an SNMPv1 enterprise-specific trap?
  160.    How can I get the agent to send an SNMPv3 trap (or inform)?
  161.    Why does calling 'send_v2trap' generate an SNMPv1 trap (or vice versa)?
  162.    What if I'm using an AgentX sub-agent instead?
  163.    How can I register a MIB module in a different (SNMPv3) context?
  164.  MISC
  165.    Why are packets requesting the same information larger with UC-Davis SNMP?
  166.    What ASN.1 parser is used?
  167.    What is the Official Slogan of the net-snmp-coders list?
  168. GENERAL
  169. =======
  170. What is it?
  171. ----------
  172.   - Various tools relating to the Simple Network Management Protocol
  173.     including:
  174. * An extensible agent
  175. * An SNMP library
  176. * tools to request or set information from SNMP agents
  177. * tools to generate and handle SNMP traps
  178. * a version of the unix 'netstat' command using SNMP
  179. * a graphical Perl/Tk/SNMP based mib browser
  180.     This package is originally based on the Carnegie Mellon University
  181.     SNMP implementation (version 2.1.2.1), but has developed significantly
  182.     since then.
  183. Where can I get it?
  184. ------------------
  185.   Download:
  186.     - http://www.net-snmp.org/download/
  187.     - ftp://ftp.net-snmp.org/pub/sourceforge/net-snmp/
  188.   Web page:
  189.     - http://www.net-snmp.org/
  190.   Sourceforge Project page:
  191.     - http://www.net-snmp.org/project/
  192.   Mirrors (note that sourceforge download servers are mirrored themselves):
  193.     - US:          ftp://ftp.freesnmp.com/mirrors/net-snmp/
  194.     - Bulgaria:    http://rtfm.uni-svishtov.bg/net-snmp/    (appears to be out of date)
  195.     - Germany:     ftp://ftp.mpg.goe.ni.schule.de/pub/internet/net-snmp/  (unknown host)
  196.     - Greece:      ftp://ftp.ntua.gr/pub/net/snmp/net-snmp/
  197. What documentation is available?
  198. -------------------------------
  199. This FAQ (!)
  200. README and individual READMEs for various platforms
  201. README.thread (discusses threading issues)
  202. INSTALL
  203. PORTING
  204. EXAMPLE.conf
  205. man pages for the individual tools, files and the API
  206. A guide for extending the agent
  207. Tutorials for both ucd-snmp v4 and net-snmp v5
  208.            at  http://www.net-snmp.org/tutorial/
  209.            and http://www.net-snmp.org/tutorial-5/ respectively
  210.       Most of this documentation (plus archives of the mailing lists)
  211.  is also available on our web page:
  212.          http://www.net-snmp.org/
  213. Are there binaries available?
  214. ----------------------------
  215.   - There are binaries for some systems available in the binaries
  216.     directory on the ftp site.
  217. What's the difference between UCD-SNMP and Net-SNMP?
  218. ---------------------------------------------------
  219.   Not a great deal, really.
  220.   Although the project originally started at UC Davis (hence the name),
  221.   and it has always been based there, most of the contributors have had
  222.   little or no connection with this institution.
  223.     The move to SourceForge was intended to provide a more flexible
  224.   environment for the project, and to distribute the administrative
  225.   workload more evenly.  The change of name simply reflects this move,
  226.   which was the last remaining link with UC Davis.
  227.     The 4.2.x line is the last release line that uses the ucd-snmp name,
  228.   and all releases under this banner will be bug-fixes only.  Release
  229.   5.0 is the first version using the net-snmp name, and all new features
  230.   and significant development will be released under this name.
  231.     (Though the dividing line between a bug-fix and a new feature is
  232.   something of a vague one, so some changes in the 4.2.x line may be
  233.   relatively non-trivial!)
  234.  
  235.     Starting with the 5.0 release, we are also trying to review and
  236.   rework the underlying code base to improve the readability and
  237.   maintainability of the package.  The 5.0 changes have mostly
  238.   concentrated on the agent architecture, though there have been some
  239.   significant changes to the library as well.  Future releases may
  240.   include further restructuring of the library.
  241.     This process will probably result in some changes to the API,
  242.   though we will attempt to retain some form of backwards
  243.   compatibility as far as possible, and clearly mark anything that has
  244.   changed.  The most significant change with the 5.0 release is a
  245.   restructuring of the header file organisation - not least a change
  246.   from <ucd-snmp/xxx.h> to <net-snmp/yyy.h>.
  247. What operating systems does it run on?
  248. -------------------------------------
  249.   Both the applications and the agent have been reported as running
  250.   (at least in part) on the following operating systems:
  251. * HP-UX (10.20 to 9.01 and 11.11 to 11.0 -- see README.hpux11)
  252. * Ultrix (4.5 to 4.2)
  253. * Solaris/SPARC (11 to 2.3), Solaris/Intel (10, 9) -- see 
  254.   README.solaris
  255. * SunOS (4.1.4 to 4.1.2)
  256. * OSF (4.0, 3.2 and Tru64 Unix 5.1B -- see README.tru64)
  257. * NetBSD (2.0 to 1.0)
  258. * FreeBSD (5.3 to 2.2)
  259. * BSDi (4.0.1 to 2.1)
  260. * Linux (kernels 2.6 to 1.3)
  261. * AIX (5.2, 5.1, 4.1.5, 3.2.5) -- see README.aix
  262. * OpenBSD (3.7, 2.8, 2.6)
  263. * IRIX (6.5 to 5.1)
  264. * OS X (10.4 to 10.1) -- see README.osX
  265. * Dynix/PTX 4.4
  266. * QNX 6.2.1A
  267.   We have also been informed about a port to the Stratus VOS.
  268.   See http://ftp.stratus.com/vos/network/network.html for details.
  269.   See the next question but one for the status of Windows support.
  270.   Certain systems fail to compile particular portions of the agent.
  271.   These can usually be persuaded to compile (at the loss of some
  272.   functionality) by omitting the modules affected.
  273.   See the next question for more details.
  274.   Also note that the presence of a particular configuration in this
  275.   list does not imply a perfect or complete implementation.  This is
  276.   simply what various people have reported as seeming to work. (Or more
  277.   frequently, the configurations people have reported problems with
  278.   that we think we've fixed!)
  279. What happens if mine isn't listed?
  280. ---------------------------------
  281.     It's probably worth trying to compile it anyway.  If your system
  282.   is reasonably similar to another supported configuration, it may
  283.   well compile with little or no difficulty.  The most likely source
  284.   of problems will be MIB modules within the agent, as this tends to
  285.   be where the most system-specific code is found.
  286.     If only a few modules fail to compile, try removing them from
  287.   the agent by running "configure --with-out-mib-module=xxx,yyy",
  288.   and re-compiling.  If a large number of modules fail, then it
  289.   might be easier to start from a relatively bare system, using
  290.   "configure --enable-mini-agent --with-defaults".  Then if this
  291.   minimal agent compiles and runs successfully, try adding the
  292.   missing mibgroups using the configure option '--with-mib-module'.
  293.   
  294.     If configure fails with "invalid configuration" messages, or
  295.   you get completely stuck, contact the coders list for advice.
  296.   Similarly, if you manage to get this working on a new system,
  297.   please let us know both details of the hardware you're using,
  298.   and what versions of the operating system you've tried it on.
  299.   The entry 'host' in the file 'config.status' will show this
  300.   information.  Oh, and congratulations!
  301. Does it run on Windows?
  302. ----------------------
  303.     The suite should compile and run on Win32 platforms, including
  304.   the library, command-line tools and the basic agent framework.
  305.   Note that the agent now includes support for the MIB-II module,
  306.   but this requires Microsoft's Core Platform SDK.  Instructions
  307.   for how to install this are given in README.win32.
  308.     Some other MIB modules, including the UCD pass-through extensions,
  309.   do not currently work under Windows.  Volunteers to assist in
  310.   these missing modules are likely to welcomed with open arms :-)
  311.     Further details of Windows support (currently Visual C++, MinGW
  312.   and Cygnus cygwin32) is available in the file README.win32
  313. How do I find out about new releases?
  314. ------------------------------------
  315.   There is a mailing list for these announcements
  316.    net-snmp-announce@lists.sourceforge.net
  317.   To be added to (or removed from) this list, visit
  318.   http://www.net-snmp.org/lists/net-snmp-announce/.  Or you can send a
  319.   message to the address
  320.   'net-snmp-announce-request@lists.sourceforge.net' with a subject
  321.   line of 'subscribe' (or 'unsubscribe' as appropriate).
  322.   Major code revisions may be announced more widely (e.g. on the
  323.   SNMP mailing lists, or comp.protocols.snmp) but this list is the most
  324.   reliable way to keep in touch with the status of this package.
  325.   Patches to fix known problems are also made available via the web site:
  326.         http://www.net-snmp.org/patches/
  327. How can I find out what other people are doing?
  328. ----------------------------------------------
  329.   There is a general purpose discussion list
  330.    net-snmp-users@lists.sourceforge.net
  331.   To be added to (or removed from) this list, visit
  332.   http://www.net-snmp.org/lists/net-snmp-users.  Or you can send a
  333.   message to the address 'net-snmp-users-request@lists.sourceforge.net'
  334.   with a subject line of 'subscribe' (or 'unsubscribe' as appropriate).
  335.   To find out what the developers are doing, and to help them out, please
  336.   read the PORTING file enclosed with the package.
  337.   There is also an net-snmp IRC channel set up on the freenode.net IRC
  338.   chat servers (you can use irc.freenode.net to connect and/or see
  339.   http://www.freenode.net/ for getting started with irc).  Multiple
  340.   core developers hang out there on a regular basis.
  341. How do I submit a patch or bug report?
  342. -------------------------------------
  343.   All bug reports should be submitted to the bug database through the
  344.   interface found at http://www.net-snmp.org/bugs/.  Be
  345.   sure to include the version of the package that you've been working
  346.   with, the output of the command 'uname -a', the precise command that
  347.   triggers the problem and a copy of the output it produces.
  348.     All patches should be submitted to the patch manager at
  349.   http://www.net-snmp.org/patches/.  If possible, submit a
  350.   bug report describing the patch as well (referencing it by its patch
  351.   number) since the patch manager doesn't contain a decent description
  352.   field.
  353.     Questions about using the package should be directed at the
  354.   net-snmp-users@lists.sourceforge.net mailing list.  Note that this
  355.   mailing list is relatively busy, and the people answering these
  356.   questions are doing so out of the goodness of their hearts, and in
  357.   addition to their main employment.  Please note the following:
  358.      - use plain text mail, rather than HTML
  359.      - don't resend questions more than once
  360.           (even if no-one answered immediately)
  361.      - include full details of exact commands and error messages
  362.           ("I've tried everything, and it doesn't work" isn't much use!)
  363.      - do *NOT* send messages to -users and -coders mailing lists
  364.           (most developers read both anyway)
  365.      - don't mail the developers privately - keep everything on the list
  366.   Remember that this is basically an unsupported package.  Fundamentally
  367.   it's Open Source, so you have the source code.  If you need something
  368.   fixing badly enough, it's up to you to do the work.
  369.     We can't promise to be able to solve all problems, but we'll
  370.   certainly try and help.  But remember that this is basically an
  371.   unsupported package.  It's Open Source, so if you need something
  372.   fixing badly enough,  fundamentally it's up to you to do the work.
  373. Can I reuse the code in my commercial application?
  374. -------------------------------------------------
  375.   The details of the COPYRIGHTs on the package can be found in the COPYING
  376.   file.  You should have your lawyer read this file if you wish to use the
  377.   code in your commercial application.  We will not summarize here what is
  378.   in the file, as we're not lawyers and are unqualified to do so.
  379. What's the difference between SNMPv1, SNMPv2 and SNMPv3?
  380. -------------------------------------------------------
  381. What's the difference between SNMPv2 and SNMPv2c?
  382. ------------------------------------------------
  383.   A full description is probably beyond the scope of this FAQ.
  384.   Very briefly, the original protocol and framework was described
  385.   in RFCs 1155-1157, and is now known as SNMPv1.
  386.     Practical experience showed up various problems and deficiencies
  387.   with this, and a number of revised frameworks were developed to try
  388.   and address these problems.  Unfortunately, it proved difficult to
  389.   achieve any sort of agreement - particularly over the administrative
  390.   framework to use.
  391.     There was less disagreement over the proposed changes to the
  392.   protocol operations.  These included:
  393.         * increasing the range of errors that could be reported
  394.         * introducing "exception values"
  395.             (so a single missing value didn't affect
  396.              the other varbinds in the same request)
  397.         * a new GETBULK operation
  398.             (a supercharged GETNEXT)
  399.         * new notification PDUs
  400.             (closer in structure to the other request PDUs)
  401.   Strictly speaking, it's this revised protocol (originally defined
  402.   in RFC 1905, and most recently in RFC 3416) that is "SNMPv2".
  403.   The only framework based on this protocol that saw a significant
  404.   level of use was "Community-based SNMPv2" or "SNMPv2c" (defined in
  405.   RFCs 1901-1908). This retained the same administrative framework
  406.   as SNMPv1 (with all of the accompanying deficiencies), but using
  407.   the new protocol operations.
  408.   More recently, a new administrative framework has been developed,
  409.   building on the various competing SNMPv2 proposals, and using the
  410.   same SNMPv2 protocol operations.  This is SNMPv3, which is defined
  411.   in RFCs 3411-3418.    It addresses some of the deficiencies of the
  412.   community-based versions, including significant improvements to
  413.   the security of SNMP requests (like it finally has some!).
  414.      SNMPv3 is now a full IETF standard protocol.
  415.   Strictly speaking, SNMPv3 just defines a fairly abstract framework,
  416.   based around the idea of "Security Models" and "Access Control Models".
  417.   It's this combination of SNMPv3 plus accompanying models that actually
  418.   provides a working SNMP system.
  419.      However, the only models in common use are the "User-based Security
  420.   Model" (RFC 3414) and the "View-based Access Control Model" (RFC 3415).
  421.   So "SNMPv3" is frequently used to mean the combination of the basic
  422.   SNMPv3 framework with these two particular models.
  423.      This is also sometimes described as "SNMPv3/USM".
  424.   So in brief:
  425.         - SNMPv2c updated the protocol operations
  426.                   but left the administrative framework unchanged.
  427.         - SNMPv3  updated the administrative framework
  428.                   but left the protocol operations unchanged.
  429. Which versions of SNMP are supported in this package?
  430. ----------------------------------------------------
  431.   This package currently supports the original SNMPv1, Community-based
  432.   SNMPv2 (i.e. RFCs 1901-1908), and SNMPv3 (i.e. RFCs 3411-3418).
  433.     The agent will respond to requests using any of these protocols,
  434.   and all the tools take a command-line option to determine which
  435.   version to use.
  436.   Support for SNMPv2 classic (a.k.a. "SNMPv2 historic" - RFCs 1441-1452)
  437.   was dropped with the 4.0 release of the UCD-snmp package.
  438. Can I use SNMPv1 requests with an SNMPv2 MIB (or vice versa)?
  439. ------------------------------------------------------------
  440.     Yes.
  441.     The version of the syntax used to define a MIB file
  442.   is better referred to as SMIv1 or SMIv2, and is purely
  443.   concerned with defining the characteristics of the
  444.   various management objects.  This is (almost) completely
  445.   unrelated to the versions of the protocol operations.
  446.   So it is quite reasonable to use SNMPv1 requests on
  447.   objects defined using SMIv2, or SNMPv2 (or SNMPv3)
  448.   requests on objects defined using SMIv1.
  449.     The one exception is objects of syntax Counter64,
  450.   which are only accessible using SNMPv2 or higher.
  451.   SNMPv1 requests will either treat such objects as an
  452.   error, or skip over them completely.
  453.   
  454. Where can I find more information about network management?
  455. ----------------------------------------------------------
  456.   There are a number of sites with network management information on
  457.   the World Wide Web. Three of the most useful are
  458.       http://www.snmpweb.org/
  459.       http://www.snmplink.org/
  460.       http://www.mibdepot.com/
  461.   There are two Usenet newsgroups which are relevant.
  462. 'comp.dcom.net-management'
  463. which discusses general issues relating to network management
  464. 'comp.protocols.snmp'
  465. which is specifically concerned with use of SNMP in particular
  466.   (though there is a large overlap between these two groups).
  467.   The SNMP group also has an FAQ (split into two parts) which discusses more
  468.   general issues related to SNMP, including books, software, other sites,
  469.   how to get an enterprise number, etc, etc.
  470.   This is available from
  471.       ftp://rtfm.mit.edu/pub/usenet/comp.protocols.snmp/
  472.   or via any of the Web sites above.
  473. Is Net-SNMP thread safe?
  474. -----------------------
  475.   Strictly speaking, no.  However, it should be possible to use the
  476.   library in a thread-safe manner.  This is covered in detail in the file
  477.   README.thread (shipped with the standard distribution), but can be
  478.   summarised as follows:
  479.     - Call 'snmp_sess_init()' prior to activating any threads.
  480. This reads in and parses MIB information (which isn't thread-safe)
  481. as well as preparing a session structure for subsequent use.
  482.     - Open an SNMP session using 'snmp_sess_open()' which returns an
  483. opaque session handle, which is essentially independent of any
  484. other sessions (regardless of thread).
  485.     - Resource locking is not handled within the library, and is the
  486. responsibility of the main application.
  487.   The applications and the agent have not been designed for threaded use.
  488.   It should be safe to use the agent library to embed a subagent within
  489.   a threaded application as long as *all* SNMP-related activity (including
  490.   generating traps, and parsing MIBs) is handled within a single thread.
  491. APPLICATIONS
  492. ============
  493. How do I add a MIB?
  494. ------------------
  495.   This is actually two separate questions, depending on whether you
  496.   are referring to the tools, or the agent (or both).
  497.     See the next question or the next section respectively.
  498. How do I add a MIB to the tools?
  499. -------------------------------
  500.   Firstly,
  501. cp MY-MIB.txt /usr/local/share/snmp/mibs
  502.           or
  503.         mkdir $HOME/.snmp
  504.         mkdir $HOME/.snmp/mibs
  505. cp MY-MIB.txt $HOME/.snmp/mibs
  506.   And then,
  507. export MIBS=+MY-MIB
  508.           or alternatively:
  509.         echo "mibs +MY-MIB" >> $HOME/.snmp/snmp.conf
  510.   Note that you need *both* steps.
  511.   The first command copies the file defining the new MIB to a
  512.   expected location for MIB files.  This defaults to
  513.   /usr/local/share/snmp/mibs (or PREFIX/share/snmp/mibs if the the
  514.   suite was installed into a different base location).  Some
  515.   ready-packaged distributions (such as Linux RPM packages) may look
  516.   for MIB files in a different location, such as /etc/snmp/mibs - put
  517.   the new file in this directory instead.  This makes it available for
  518.   everyone on the system.
  519.   The tools will also look for mibs in your personal $HOME/.snmp/mibs
  520.   directory, but this will only work for you.
  521.   The second command tells the tools to load in this new MIB file as well
  522.   as the default set.   Note that the tools do *not* load every MIB found
  523.   in the directory - this is to avoid slowing them down excessively when
  524.   there is a large collection of MIB files.  If you do want the tools to
  525.   load all the MIB files, set the environmental variable MIBS to the special
  526.   value "ALL".
  527.      Note that the value for this variable is the name of the MIB module,
  528.   *not* the name of the MIB file.   These are typically the same (apart
  529.   from the .txt suffix), but if in doubt, check the contents of the file.
  530.   The value to use is the token immediately before the word DEFINITIONS
  531.   at the start of the file.  Of course, if you load 'ALL' mibs, then this
  532.   distinction is irrelevant.
  533.     Most of the tools (apart from 'snmptable') will work quite happily
  534.   without any MIB files at all, as long as you are prepared to work with
  535.   numeric OIDs throughout.  The MIB files are only used for translating
  536.   between numeric and textual forms for queries and responses.
  537.     The same holds true for the agent - see the AGENT section for details.
  538. Why can't I see anything from the agent?
  539. ---------------------------------------
  540.   There are two main general causes of problems retrieving information
  541.   from the agent.   Firstly, the variable (or variables) specified may
  542.   not be recognised by the tools as valid names.  In this case, the
  543.   tools will typically reject the request without ever contacting the
  544.   remote agent.
  545.   Alternatively, the tool may be happy with the request, but the agent
  546.   does not return the corresponding value(s).  It may return an explicit
  547.   error message instead, or the request may time out without any response
  548.   being sent back at all.  The next few entries look at these in more detail.
  549.   A simple way to tell which is the case would be to run the command
  550.   with the command-line option '-d'.  If this displays a dump of the
  551.   packet, then the request is failing at the agent end.  If not, then
  552.   it's the client-side which is dropping the request.
  553. Why can't I see values in the <INSERT ENTERPRISE HERE> tree?
  554. -----------------------------------------------------------
  555.   Having said that there are two main reasons for not getting a response,
  556.   the most likely cause of this problem is actually something else again.
  557.   The 'snmpwalk' command takes a point in the overall MIB tree, and tries
  558.   to display all the values that lie within this subtree.  However, it
  559.   actually does this by issuing a series of "getnext" requests, until
  560.   the variable returned lies outside the subtree of interest.  If the
  561.   very first request returns such an undesired value, then the command
  562.   will terminate, without having displayed anything at all.
  563.     If an expicit starting point is given to 'snmpwalk', then it is reasonably
  564.   clear what is happening, and that there is simply nothing in the subtree
  565.   specified.  However, if 'snmpwalk' is called without giving an explicit
  566.   starting point, then it will display the contents of the 'mib-2' subtree.
  567.   It will not attempt to traverse any 'private.enterprise' subtree, such as
  568.   the UCD-specific objects (including any local extensions).
  569.     To walk the whole tree, specify a starting point of '.iso'
  570.   To walk a specific enterprise subtree, specify the root of this as
  571.   the starting point - e.g:
  572. snmpwalk -v1 -c public localhost ucdavis
  573.  
  574.   Or, of course, you can walk a selected portion of an enterprise subtree
  575.   by specifying the appropriate starting point - e.g:
  576. snmpwalk -v1 -c public localhost ucdavis.version
  577.   
  578.   If you still can't see any information, keep reading.  The next few
  579.   questions will probably help you.
  580. Requests always seem to timeout, and don't give me anything back.  Why?
  581. ----------------------------------------------------------------------
  582.   There are a number of possible causes of this.
  583.   The most likely are the agent access control settings (who is allowed
  584.   access by the agent itself), or firewall/packet filtering settings
  585.   (who is allowed access by the underlying operating system).
  586.   A fuller list of possible causes (with indications of how to check
  587.   for each) is as follows:
  588.   
  589. - is the machine you are querying up and running?
  590. (Does it respond to 'ping' or similar requests?)
  591. - is there an SNMP agent running on it?
  592. (Run 'ps -ef | grep snmp' or 'netstat -an | grep 161')
  593. - are the requests arriving, or being blocked (e.g. by a firewall)?
  594. (Restart the agent using 'snmpd -f -Le -d'
  595.  and see if it shows the incoming packet dumps)
  596. - is the agent simply taking a long time to respond?
  597. (The 'snmpd -f -Le -d' command should show a series of
  598.    incoming PDUs, followed eventually by the outgoing PDUs.
  599.  Try the request again with a long timeout value,
  600.  e.g. 'snmpcmd -t 120 ....')
  601. - do the agent's control settings allow this request?
  602. (The 'snmpd -f -Le -d' command will show a series of
  603.    incoming PDUs with *no* corresponding outgoing PDUs)
  604.   If the agent is not configured to allow access for a particular community,
  605.   then no error response will be returned.  The Net-SNMP tools will retry
  606.   the request a number of times, before reporting a timeout error.
  607.     If the agent is configured to allow partial access for a given
  608.   community, then requests that fall outside this authorised access
  609.   *will* result in an error response.
  610.     (SNMP agents can be very fussy over who they talk to!)
  611.     See the entries on access control in the AGENT section for how to
  612.   configure the Net-SNMP agent to allow suitable access.  For other
  613.   vendors' agents, you will need to consult the relevant documentation.
  614. I can see the system group, but nothing else.  Why?
  615. --------------------------------------------------
  616.   This is almost definitely due to the access configuration of the agent.
  617.   Many pre-configured systems (such as most Linux distributions) will only
  618.   allow access to the system group by default, and need to be configured
  619.   to enable more general access.
  620.     The easiest way to test this is to try a GETNEXT request that ought
  621.   to return the entry of interest.
  622.   e.g.
  623. snmpgetnext -v1 -c public localhost ucdavis.version.versionTag
  624.   instead of
  625. snmpget     -v1 -c public localhost ucdavis.version.versionTag.0
  626.   If the agent responds with "end of MIB" or a different object, then
  627.   either the agent doesn't implement that particular object at all, or
  628.   the access control won't allow you access to it.
  629.   See the entries on access control in the AGENT section for how to
  630.   configure the Net-SNMP agent, or consult the agent's own documentation.
  631. The agent worked for a while, then stopped responding.  Why?
  632. -----------------------------------------------------------
  633.   Assuming that the agent hasn't crashed completely, the most likely
  634.   explanation is that it's simply overloaded, and is taking longer to
  635.   respond than the querying tool is waiting.  Since the agent handles
  636.   each request in turn, without regard to earlier activity, and most
  637.   tools will retry a request when it times out, the list of outstanding
  638.   requests can grow longer and longer.
  639.     To determine whether this is the cause, try leaving the agent
  640.   undisturbed for a while, and then probe it using a single 'snmpget'
  641.   or 'snmpgetnext' request, specifying a longer timeout (e.g. '-t 120').
  642.   This should give the agent time to handle the request first time round,
  643.   and avoids overloading it with duplicate requests.
  644.   This is not a full solution, of course, but at least it should
  645.   allow you to isolate the offending portion of the tree. The
  646.   developers may then be able to offer a more long-term solution.
  647. Requesting an object fails with "Unknown Object Identifier"  Why?
  648. ----------------------------------------------------------------
  649.   If a general snmpwalk shows the entry, but asking for it more
  650.   specifically gives a "sub-identifier not found:" or "Unknown Object
  651.   Identifier" error, then that's a problem with the tool, rather than
  652.   the agent.
  653.     Firstly, make sure that you're asking for the object by the right name.
  654.   Object descriptors are case-sensitive, so asking for 'sysuptime' will
  655.   not be recognised, but 'sysUpTime' will.
  656.     Secondly, the object may be defined in a MIB that hasn't been loaded.
  657.   Try loading in all the MIB files:
  658. snmpget -m ALL -v1 -c public localhost sysUpTime.0
  659.   (though if snmpwalk displays the object by name, this is unlikely to
  660.   be the cause).
  661.     Thirdly, earlier versions of the UCD software expected "full" paths
  662.   for object names, either based at the root of the whole MIB tree
  663.   (".iso.org.dod.internet.mgmt.mib-2.system.sysUpTime") or the 'mib-2'
  664.   subtree ("system.sysUpTime").  Try:
  665.   
  666. snmpget -v1 -c public myhost system.sysUpTime.0
  667.   These earlier versions of the tools may take a command-line option '-R'
  668.   or '-IR' (depending on vintage) to invoke this "random-access" mode.
  669.   Note that snmptranslate still requires "random-access" to be specified
  670.   explicitly - all other command tools now use this mode by defaults.
  671.   All versions of the UCD and Net-SNMP tools accept the syntax
  672. snmpget -v1 -c public myhost RFC1213-MIB:sysUpTime.0
  673.   to denote a particular object in a specific MIB module.  Note that this
  674.   uses the name of the *module*, not the name of the file.  See the second
  675.   question in this section for the distinction.
  676. Why do I get "noSuchName" when asking for "sysUpTime" (or similar)?
  677. ------------------------------------------------------------------
  678.   There are a number of possible causes of this (scattered throughout
  679.   this FAQ, so keep reading!).   But one of the most likely snares for
  680.   the unwary is forgetting the instance subidentifier for 'non-table'
  681.   objects.  If you walk the 'system' tree, you'll notice that all the
  682.   results (apart from the sysORTable), have a '.0' at the end of the OID.
  683.   This is the "instance sub-identifier" - which *must* be included for
  684.   a GET request.
  685.      Compare the following:
  686. $ snmpget -v1 -c public localhost sysUpTime
  687. Error in packet
  688. Reason: (noSuchName) There is no such variable name in this MIB.
  689. This name doesn't exist: system.sysUpTime
  690. $ snmpget -v1 -c public localhost sysUpTime.0
  691. system.sysUpTime.0 = Timeticks: (69189271) 8 days, 0:11:32.71
  692.   This is a little less obscure when using SNMPv2c or v3 requests:
  693. $ snmpget -v 2c -c public localhost sysUpTime
  694. system.sysUpTime = No Such Instance currently exists
  695. Why do I sometimes get "End of MIB" when walking a tree, and sometimes not?
  696. --------------------------------------------------------------------------
  697.   This depends on which MIB modules are supported by the agent you are
  698.   querying and what you're asking for.
  699.   Recall that a tree is walked by repeatedly asking for "the next entry" until
  700.   all the values under that tree have been retrieved.  However, the agent has
  701.   no idea that this is what's happening - all it sees is a request for "the
  702.   next entry after X".
  703.   If the object X happens to be the last entry in a sub-tree, the agent will
  704.   provide the next object supported (as requested) even though this will be
  705.   in a different subtree.  It's up to the querying tool to recognise that
  706.   this last result lies outside the area of interest, and simply discard it.
  707.   If the object X happens to be the last entry supported by the agent, it
  708.   doesn't have another object to provide, so returns an "end of MIB"
  709.   indication.  The Net-SNMP tools report this with the message above.
  710.   But in either case, the actual information provided will be the same.
  711. I cannot set any variables in the MIB.
  712. -------------------------------------
  713.   There are three possible reasons for this:
  714.   The majority of MIB objects are defined as "read-only" and inherently
  715.   cannot be changed via SET requests.
  716.   Of those that can in principle be changed, not all have been implemented
  717.   as such in this agent.
  718.   Even if SET support has been implemented, the agent may not be configured
  719.   to allow write access to this object.
  720.   The example configuration file shipped with the basic distribution only
  721.   allows write access for the local host itself (and a suitable community
  722.   name must be configured first).
  723.     Ready-installed distributions (such as those shipped with Linux) tend
  724.   to be configured with read-only access to part of the mib tree (typically
  725.   just the system group) and no write access at all.
  726.   To change this, you will need to set up the agent's access control
  727.   configuration.  See the AGENT section for more details.
  728.     Note that neither the community string "public" nor "private" can be
  729.   used to set variables in a typical default configuration.
  730. Variables seem to disappear when I try to set them.  Why?
  731. --------------------------------------------------------
  732.   This is actually the same as the previous question - it just isn't
  733.   particularly obvious, particularly when using SNMPv1.  A typical
  734.   example of this effect would be
  735. $ snmpget -v1 -c public localhost system.sysLocation.0
  736. system.sysLocation.0 = somewhere nearby
  737. $ snmpset -v1 -c public localhost system.sysLocation.0 s "right here"
  738. Error in packet.
  739. Reason: (noSuchName) There is no such variable name in this MIB.
  740. This name doesn't exist: system.sysLocation.0
  741.   Trying the same request using SNMPv2 or above is somewhat more informative:
  742. $ snmpset -v 2c -c public localhost system.sysLocation.0 s "right here"
  743.         Error in packet.
  744.         Reason: notWritable
  745.   The SNMPv1 error 'noSuchName' actually means:
  746. "You can't do that to this variable"
  747.   This might be because the variable doesn't exist, it does exist but
  748.   you don't have access to it (but someone else may do), or it exists
  749.   but you can't perform that particular operation (i.e. changing it).
  750.     Similarly, the SNMPv2 error 'notWritable' means "not writable in
  751.   this particular case" rather than "not writable under any circumstances".
  752.   If you are sure that the object is writable (and has been implemented
  753.   as such), then you probably need to look at the agent access control.
  754.   See the AGENT section for more details.
  755. I still can't change sysLocation, though the access settings allow it.  Why not?
  756. -------------------------------------------------------------------------------
  757.     One other possibility for the 'sysLocation' and 'sysContact' objects,
  758.   is that you've got a configuration option in the 'snmpd.conf' file which
  759.   already sets the corresponding value there.
  760.     Earlier versions of the agent would allow you to write to these objects,
  761.   but the new value would be forgotten the next time the agent was re-started.
  762.   More recent versions of the agent reject such write requests if there's a
  763.   value set via the config file.   If there isn't such a config setting, then
  764.   the write request will succeed (assuming the access settings allow it), and
  765.   the new value will be retained the next time the agent restarts.
  766. I get an error when trying to set a negative value - why?
  767. --------------------------------------------------------
  768.     This is a different problem.  What's happening here is that the
  769.   routine that parses the arguments to the 'snmpset' command is seeing
  770.   the '-' of the new value, and treating it as a command-line option.
  771.   This normally generates an error (since digits probably aren't valid
  772.   command line option).
  773.     The easiest way to solve this is include the "end-of-option"
  774.   indicator '--' in the command line, somewhere before the new value
  775.   (but after all of the options, obviously).  For example:
  776. snmpset -v 2c -c public localhost -- versionRestartAgent.0 i -1
  777.   (This will also fail, since -1 isn't an acceptable value for this
  778.   object, but it will be rejected by the agent, rather than confusing
  779.   the snmpset command!)
  780. I get an error when trying to get a string-indexed table value - why?
  781. --------------------------------------------------------------------
  782.     This is probably due to the shell swallowing the quotes, before
  783.   they ever get to the SNMP command's OID parser.  Try escaping them:
  784. snmpget .....   vacmSecurityModel.0."wes"
  785.   or snmpget .....  'vacmSecurityModel.0."wes"'
  786.   
  787. How do I send traps and notifications?
  788. ---------------------------------------
  789.     Traps and notifications can be sent using the command 'snmptrap'.
  790.   The following examples generate the generic trap 'coldStart' and a
  791.   (dummy) enterprise specific trap '99' respectively:
  792. snmptrap -v 1 -c public localhost "" "" 0 0  ""
  793. snmptrap -v 1 -c public localhost "" "" 6 99 ""
  794.   
  795.   The empty parameters "" will use suitable defaults for the relevant 
  796.   values (enterprise OID, address of sender and current sysuptime).
  797.     An SNMPv2 or SNMPv3 notification (either trap or inform) takes
  798.   the OID of the trap to send:
  799. snmptrap -v 2c -c public localhost "" UCD-SNMP-MIB::ucdStart
  800. snmptrap -v 2c -c public localhost "" .1.3.6.1.4.1.2021.251.1
  801.   (These two are equivalent ways of specifying the same trap).
  802.   Any of these commands can be followed by one or more varbinds,
  803.   using the same (OID/type/value) syntax as for 'snmpset':
  804. snmptrap -v 2c -c public localhost "" ucdStart sysContact.0 s "Dave"
  805.   Generating traps from within the agent is covered in the AGENT and
  806.   CODING sections.
  807.   You should also read the snmptrap tutorial at
  808. http://www.net-snmp.org/tutorial-5/commands/snmptrap.html
  809.   which will help you understand everything you need to know about traps.
  810. How do I handle traps and notifications?
  811. ---------------------------------------
  812.     Handling received traps is done using the tool 'snmptrapd'.
  813.   This can log these traps via the syslog mechanism:
  814. snmptrapd -s -l7 (log to 'LOCAL7')
  815.   printed to standard output
  816. snmptrapd -f -P
  817.   or pass them to an external command.  This last approach uses
  818.   a 'traphandle' directive in the configuration file 'snmptrapd.conf'.
  819.   A typical file might look something like:
  820. traphandle .1.3.6.1.6.3.1.5.1       page_me up
  821. traphandle .1.3.6.1.4.1.2021.251.1  page_me up
  822. traphandle .1.3.6.1.4.1.2021.251.2  page_me down
  823. traphandle default                  log_it
  824.   where 'page_me' and 'log_it' are the command to be run.  (You probably
  825.   need to specify full pathnames, to ensure that the commands will be
  826.   found.  They're just short here for readability).
  827.   Note that the first entry uses the OID corresponding to the SNMPv1
  828.   'coldStart' trap.  See the co-existence RFC (RFC 2576) for details
  829.   of mapping SNMPv1 traps to SNMPv2 OIDs.
  830.   There's a tutorial with more details on the web site at
  831. http://www.net-snmp.org/tutorial-5/commands/snmptrap.html
  832.   
  833. My traphandler script doesn't work when run like this - why not?
  834. ---------------------------------------------------------------
  835.     If a traphandler script works fine when run manually from the
  836.   command line, but generates an error when triggered by an incoming
  837.   notification, then this is probably down to one of two likely causes.
  838.     Firstly, the interactive shell environment may not be precisely
  839.   the same as that for programs executed by the snmptrapd daemon.
  840.   In particular, it's quite possible that the PATH environmental
  841.   variable may not include all the additional directories that are
  842.   commonly set up for a personal login configuration.  To avoid this
  843.   problem (particularly for traphandler shell scripts), it's worth
  844.   giving the full path to all programs used within the script.
  845.     Secondly, the snmptrapd daemon may not always recognise the
  846.   appropriate interpreter to use for a particular trap handler.
  847.   If this is the case, then you can specify this interpreter
  848.   explicitly as part of the trap handle directive:
  849. traphandle default /usr/bin/perl /usr/local/bin/log_it
  850.   Note that in this case, it's almost certain that you'll also
  851.   need to give the full path to the traphandle script (as shown)
  852. The ucdShutdown trap OID received by my manager is wrong. Why?
  853. -------------------------------------------------------------
  854.     This is due to the way that traps are converted between
  855.   SNMPv1 and SNMPv2 formats.  The algorithm used for converting
  856.   from an SNMPv1 enterprise-specific trap number, to an SNMPv2
  857.   trap OID results in a penultimate '0' subidentifier, before
  858.   the trap number itself.  The definition of the trap objects
  859.   in the UCD-SNMP-MIB file does not include this subidentifier.
  860.     In due course, the intention is to define a new set of MIB
  861.   objects, under the 'net-snmp' enterprise tree.  This will
  862.   include new trap OIDs, which will be designed such that
  863.   this problem does not arise in the future.
  864. Why does snmptrapd complain about AgentX?
  865. ----------------------------------------
  866.     Starting from the v5 release, the trap handling daemon has
  867.   implemented the notification logging aspects of the NOTIFICATION-MIB
  868.   (RFC 3014).  This is handled by the trap handler daemon registering
  869.   as an AgentX subagent, to supply this statistical information.
  870.     If there is no AgentX master agent available, this registration
  871.   fails, generating the warning about "failed to connect to the agentx
  872.   master".  This warning only appears between version 5.0 and 5.0.4
  873.   (in 5.0.4 and after the warning was silenced).  This failure does
  874.   not affect the main operation of the trap handler.  It simply means
  875.   that the nsmLog information won't be available for query via SNMP.
  876.     Basically, this is a warning that can safely be ignored.
  877. How do I use SNMPv3?
  878. -------------------
  879.     The simplest form of SNMPv3 request (unauthenticated, unencrypted)
  880.   would be something like:
  881. snmpget -v 3 -l noAuthNoPriv localhost sysUpTime.0
  882.     An authenticated request would specify a username and pass phrase:
  883. snmpget -v 3 -l authNoPriv -u dave -A "Open the Door"
  884. localhost sysUpTime.0
  885.     A fully secure request would also specify the privacy pass phrase:
  886. snmpget -v 3 -l authPriv -u dave -A "Open the Door"
  887. -X "Bet you can't see me"  localhost sysUpTime.0
  888.   In practise, most of these would probably be set via configuration
  889.   directives in a personal $HOME/.snmp/snmp.conf file (note, *not* the
  890.   agent's snmpd.conf file).  The equivalent settings for the third
  891.   example would be:
  892. defSecurityName dave
  893. defSecurityLevel authPriv
  894. defAuthPassphrase "Open the Door"
  895. defPrivPassphrase "Bet you can't see me"
  896.   If the AuthPassphrase and the PrivPassphrase are the same, then you
  897.   can use the setting
  898. defPassphrase "Open the Door and see me"
  899.   instead.
  900.   See the AGENT section for how to configure the agent to respond to
  901.   SNMPv3 requests.
  902.  
  903. How big can an SNMP request (or reply) be?
  904. -----------------------------------------
  905.     The protocol definition specifies a "minimum maximum" packet size
  906.   (484 bytes for UDP), which all systems must support, but does not
  907.   attempt to define an upper bound for this maximum size.  This is left
  908.   to each individual implementation.
  909.     The UCD software uses a fixed size buffer of 1472 bytes to hold the
  910.   encoded packet, so all requests and responses must fit within this.
  911.   Unfortunately, it's not possible to predict how many varbinds this
  912.   corresponds to, since it depends on the type and actual values being
  913.   sent, as well as the corresponding OIDs.
  914.     As a rule of thumb, sending 400 integer-valued varbinds seems to
  915.   work OK, while 300 string-valued varbinds triggers an overrun.
  916.     The Net-SNMP releases handle packet buffers rather differently,
  917.   and are not subject to the same fixed restrictions.
  918. How can I monitor my systems (disk, memory, etc)?
  919. ------------------------------------------------
  920.     In general, the Net-SNMP suite consists of relatively low-level
  921.   tools, and there is nothing included that is designed for high-level,
  922.   long-term monitoring of trends in network traffic, disk or memory
  923.   usage, etc.
  924.     There are a number of packages available that are designed for this
  925.   purpose.  Two of the most widely used are MRTG (http://www.mrtg.org/)
  926.   and Cricket (http://cricket.sourceforge.net/).  There are details of
  927.   how to set up Cricket to monitor some of the UCD extensions at
  928.   http://www.afn.org/~jam/software/cricket/
  929.      We have also set up a page that describes in detail how MRTG
  930.   can be set up to monitor disk, memory and cpu activity at
  931.   http://www.net-snmp.org/tutorial-5/mrtg/index.html
  932.     There is also a web-based network configuration system "Net-Policy",
  933.   based upon SNMP.  This is not strictly connected to the Net-SNMP project,
  934.   but a number of the core developers are also involved with that system.
  935.   See http://net-policy.sourceforge.net for more details.
  936. Applications complain about entries in your example 'snmp.conf' file.  Why?
  937. --------------------------------------------------------------------------
  938.     The example configuration file 'EXAMPLE.conf' is designed as a config
  939.   for the agent, and should be installed as 'snmpd.conf' (note the 'd').
  940.   The file 'snmp.conf' is intended for general configuration options,
  941.   applicable to all applications (via the SNMP library).
  942.     Rename (or merge) the 'snmp.conf' file to 'snmpd.conf', and this should
  943.   fix the problem.
  944.     Note that there is no example snmp.conf shipped with the standard
  945.   distribution.
  946. OK, what should I put in snmp.conf?
  947. ----------------------------------
  948.     This is used to set common configuration values for most of the
  949.   applications, to avoid having to specify them every time.  Examples
  950.   include the SNMPv3 settings mentioned above, defaults for which MIBs
  951.   to load and where from, and the default SNMP version, port and
  952.   (if appropriate) the community string to use.
  953.     Some of these (such as the MIB file location), might belong in a
  954.   shared snmp.conf file (typically /usr/local/share/snmp/snmp.conf or
  955.   /etc/snmp/snmp.conf) to apply to all users of the system.  Others
  956.   (particularly the SNMPv3 security settings), are more likely to refer
  957.   to a particular user, and should go in a personal snmp.conf file
  958.   (typically $HOME/.snmp/snmp.conf).
  959.     Note that the Net-SNMP package does not come with an example snmp.conf
  960.   file.  See 'snmpget -H' and/or the snmp.conf(5) man page for more details.
  961.     You can also use the "snmpconf" command to help you generate your
  962.   snmp.conf configuration file (just run it and answer its questions).
  963. PERL
  964. ====
  965. Where can I get the perl SNMP package?
  966. -------------------------------------
  967.   Joe Marzot's excellent perl SNMP module, which requires the ucd-snmp
  968.   library, is now included in the ucd-snmp source release.  It's
  969.   located in the perl/SNMP subdirectory of the ucd-snmp source tree.
  970.   It can also be found at any Comprehensive Perl Archive Network
  971.   (CPAN) site mirror in modules/by-module/SNMP.  To find the CPAN site
  972.   nearest you, please see http://www.cpan.org/SITES.html.
  973.   With the v5 release of the Net-SNMP suite, this is now accompanied by
  974.   a number of perl modules grouped together under the NetSNMP namespace.
  975.   Consult the README file in the SNMP perl module distribution to find 
  976.   out what version of the ucd-snmp library it needs to be linked against.
  977. How do I install the Perl SNMP modules?
  978. --------------------------------------
  979.   Assuming you have a reasonably new (and properly configured) perl system,
  980.   this should be simply:
  981.         cd perl (for 5.0.x)
  982.   or    cd perl/SNMP (for 4.2.x)
  983. perl Makefile.PL
  984.     (press RETURN when prompted for host and community)
  985. make
  986. make test
  987. make install  (probably as root)
  988.   Note that with the 5.0 release line, there are additional SNMP-related
  989.   perl modules that should probably be installed as well.  These can also
  990.   be found under the 'perl' subdirectory.  At the very least, install the
  991.   'default_store' module.
  992.     This is not necessary with the 4.2.x releases.
  993. But compiling this fails! Why?
  994. -----------------------------
  995.   The perl module tends to delve quite deeply into the internals of the
  996.   main Net-SNMP library, and so is quite sensitive to changes within the
  997.   library.  It's important to use the correct version of the module, that
  998.   corresponds to the version of the library you have installed.  If you're
  999.   working with the main Net-SNMP distribution, the appropriate version of
  1000.   the perl module is shipped as part of this, but you *must* have
  1001.   run "make install" on the main Net-SNMP distribution *first*.
  1002.   If you're working with a ready-installed version of the library, make
  1003.   sure you obtain a compatible version of the perl module.
  1004.     Note that the perl modules will be compiled using the compiler
  1005.   (and compiler settings) used for compiling the original perl binary,
  1006.   *not* those used for compiling the Net-SNMP (or UCD) library.
  1007.   If these are different (e.g. 'gcc' used for one and 'cc' for the other)
  1008.   then this may well cause problems.  It's much safer to use a consistent
  1009.   environment for both.  This issue is discussed in greater detail in
  1010.   the README.solaris file.
  1011.     Also note that the v5 Net-SNMP suite *must* be configured to provide
  1012.   shared libraries in order for the perl modules to work correctly.  This
  1013.   is not necessary with the v4 UCD-SNMP libraries.
  1014. Compiling the perl module works OK, but 'make test' fails. Why?
  1015. --------------------------------------------------------------
  1016.   That's difficult to answer in general.
  1017.   Some of the perl tests are rather picky, so this may simply be
  1018.   some minor inconsistency between your precise setup, and the
  1019.   expectations of the test environment.
  1020.     Check that you are working with the perl distribution that matches
  1021.   the SNMP libraries (use the 'perl/SNMP' in preference to CPAN), and
  1022.   that you have installed the main libraries successfully (uninstall
  1023.   any old versions if you're having trouble).
  1024.     If all this looks OK, and if most of the tests pass, then it's
  1025.   probably safe to run 'make install' anyway.   Probably.
  1026. The perl 'make test' fails on the OID tests. Is it safe to continue?
  1027. -------------------------------------------------------------------
  1028.   No.  Almost certainly not.  If the "perl/OID" tests fail the first
  1029.   four tests, and then crashes out complaining about a "netsnmp_oidPtr",
  1030.   then this is a sign of a more fundamental problem.
  1031.   The 4.2.x line perl support was a single module, so was independent
  1032.   of the way that the C library was configured.  In contrast to this, 
  1033.   the 5.0.x perl support consist of a number of inter-cooperating modules,
  1034.   which rely on sharing a consistent C library environment.  In practise,
  1035.   this means that the perl modules *MUST* be configured and compiled using
  1036.   a shared version of the C library.   Unfortunately, the default for
  1037.   most early versions of the Net-SNMP suite was to compile using static
  1038.   libraries unless explicitly configured to use shared libraries.  The
  1039.   default should be to use shared libraries from 5.0.7 onwards.
  1040.   The error "oid1 is not of type netsnmp_oidPtr" is a fairly sure indication
  1041.   that the C library was compiled statically.   You'll need to re-configure
  1042.   the main Net-SNMP package using the "--enable-shared" configure flag.
  1043.   Then re-install the C library before re-configuring and re-compiling
  1044.   the perl module support.
  1045.   Note that this problem does not arise when using the 4.2.x version
  1046.   of perl support.
  1047. I'm trying to use mib2c (or tkmib) and it can't locate SNMP.pm?
  1048. ------------------------------------------------------------
  1049.   That's probably because the SNMP perl module hasn't been installed.
  1050.   It's not part of the standard perl distribution, nor is it installed
  1051.   by default in RedHat Linux (for example).
  1052.     You'll need to install it.  See the previous two questions.
  1053. I'm trying to use mib2c (or tkmib) and it can't load SNMP.so?
  1054. ------------------------------------------------------------
  1055.     This is probably the same problem.  Either the SNMP module
  1056.   hasn't been installed, or it's the wrong version.  See the
  1057.   previous two questions.
  1058. I'm trying to use tkmib and it can't locate Tk.pm?
  1059. -------------------------------------------------
  1060.   Tk.pm is another Perl package that needs to be installed before tkmib
  1061.   will run.  It's also available on Perl CPAN.  We suggest using version
  1062.   "Tk800.011" or later.  It can be installed by issuing the command:
  1063. perl -MCPAN -e shell ; "install Tk"
  1064. I'm trying to install your RPM, but it complains about missing perl modules. Why?
  1065. --------------------------------------------------------------------------------
  1066.   This has been particularly noted on RedHat 9, complaining about the
  1067.   module "perl(Term::ReadKey)" - even if this is actually present (e.g.
  1068.   having been installed directly from CPAN).  In fact, this is not
  1069.   specific to perl modules - the same issue can potentially arise with
  1070.   other RPM dependencies.
  1071.   The problem is that the RPM mechanism keeps a local database of what
  1072.   software packages have been installed, and checks this for any other
  1073.   features that this RPM requires.  If software is installed "manually"
  1074.   rather than via rpm packages, then it will not appear in this database.
  1075.   Attempting to install another RPM that rely on this functionality will
  1076.   then complain about the "missing" package, because the RPM system doesn't
  1077.   know that's it's actually available.
  1078.   The ideal solution is to *always* install software using a consistent
  1079.   mechanism (which may involve building RPMs locally, or looking for a
  1080.   suitable pre-built version).
  1081.   Failing this, it's possible to tell the "rpm" command to ignore such
  1082.   dependencies, and install the package anyway.  Try:
  1083.               rpm -i --nodeps {package}
  1084.   In this situation, it's then up to you to make sure that any other
  1085.   necessary packages *are* actually present on the system.
  1086. I've got a problem with the Net-SNMP module.  Can you help?
  1087. ----------------------------------------------------------
  1088.   Sorry, despite the similar-sounding name, the Net-SNMP (or Net::SNMP)
  1089.   module is nothing to do with this package, or the NetSNMP modules.
  1090.   Net::SNMP is a "pure-perl" implementation of SNMP support, developed
  1091.   by David Town.  The developers of the (C-based) Net-SNMP suite do
  1092.   not have any significant experience in using this particular module,
  1093.   and you'll probably be better off asking for help via CPAN or some
  1094.   other perl-related forum.
  1095. MIBS
  1096. ====
  1097. Where can I find a MIB compiler?
  1098. -------------------------------
  1099.   That depends what you mean by a "MIB compiler".  There are at least two
  1100.   types of tool that are commonly referred to by this name.
  1101.   The first is a tool to check MIB files for validity.  This functionality
  1102.   is mostly integrated within the MIB parser (part of the Net-SNMP library)
  1103.   and hence included in all the applications.  The tool 'snmptranslate' is
  1104.   probably the most appropriate for this purpose.
  1105.     Note that the parser is fairly forgiving (see 'What ASN.1 parser is used'
  1106.   below), so this should not be regarded as a stamp of approval.
  1107.     The second type of tool is one to turn a MIB specification into C code,
  1108.   specifically one designed to aid agent implementation.  The command 'mib2c'
  1109.   is an example of such a tool for the Net-SNMP agent.  
  1110.   See the CODING section for more information.
  1111. I can't load any of the mib files, and they seem to be missing
  1112. the first two characters of the filename.  What's happening?
  1113. -----------------------------------------------------------
  1114.   This is a problem experienced with Sun systems when the tools have
  1115.   been compiled with a mixture of BSD and Solaris environments.
  1116.   You'll need to re-configure and compile the tools, making sure that
  1117.   '/usr/ucb' is not in your PATH (or at least comes at the end).
  1118. Why aren't my mib files being read in?
  1119. -------------------------------------
  1120.     The Net-SNMP library only loads a subset of MIB files by default.
  1121.   This list is set at when the suite is first configured and compiled,
  1122.   and basically corresponds to the list of modules that the agent supports.
  1123.   (This is a simplification, but is a reasonable first approximation).
  1124.     You can override this by using the command-line option '-m', the
  1125.   environmental variable 'MIBS' or the snmp.conf directive 'mibs'.
  1126.   Each of these take a (colon-separated) list of MIB module names
  1127.   to load.   Starting the list with a '+' character will add them to
  1128.   the default list - otherwise it replaces the defaults.
  1129.     Using the special value 'ALL' will load all the MIB files that
  1130.   the library can find.
  1131.     Alternatively, the tools may be looking in the wrong place.
  1132.   The default location for the mib files is /usr/local/share/snmp/mibs.
  1133.   Again, this is set when the suite is first configured and compiled.
  1134.   This can be changed using the environmental variable 'MIBDIRS'
  1135.   or the snmp.conf directive 'mibdirs'.
  1136.     Note that this may very well affect you if you've installed a
  1137.   new version of the suite manually, replacing one provided by the
  1138.   supplier (which typically would use a more 'central' location).
  1139.     Finally, are you sure that you've installed the MIB files?
  1140.   If you've compiled the suite from scratch, you need to run
  1141.   "make install" at least once, before the tools will be able to
  1142.   find the MIB files.  This is unlikely to be a problem if you've
  1143.   been working with the tools for a while, but can bite those coming
  1144.   fresh to the SNMP world.
  1145. I'm getting answers, but they're all numbers. Why?
  1146. -------------------------------------------------
  1147.   This is actually the same as the previous question.  Because the tools
  1148.   don't read in every MIB module they can find, it is quite possible
  1149.   for results from an agent to refer to modules that have not been loaded
  1150.   (particularly with GETNEXT requests, or when walking a tree).
  1151.      The tools will report the answer quite correctly, but won't translate
  1152.   identifiers and enumerations into readable strings.  To fix this, use
  1153.   the environmental variables MIBS or MIBFILES (or the '-m' and '-M' flags)
  1154.   to read in the relevant module files.
  1155. What does "Cannot find module (XXX-MIB)" mean?
  1156. ---------------------------------------------
  1157.     This is similar to the previous questions.   In this case, it's
  1158.   stating that it can't find the specified module - either because
  1159.   it's not installed properly, or the name used is subtly wrong.
  1160.     If it's just one or two modules that are not being found, check
  1161.   that the files are in the expected location, are readable, and the
  1162.   name being used is correct.  Note that the name reported is the
  1163.   name of the MIB module, which is not necessarily the same as the
  1164.   name of the file. See the question 'How do I add a MIB to the tools?'
  1165.   for more details on this.
  1166.     If the tool is generating a whole slew of errors, then it's
  1167.   likely that either the MIB files haven't been installed at all,
  1168.   or the library is looking in the wrong place.   See the previous
  1169.   two questions.
  1170. What about "unlinked OID"?
  1171. -------------------------
  1172.     This means that the library has been able to find the MIB module,
  1173.   and parse the individual objects defined in it, but is having problems
  1174.   linking them together into a consistent tree.  In particular, it
  1175.   can't find an object corresponding to the name within the braces
  1176.   (i.e. the 'xxx' in '{xxx 99}').
  1177.     This is probably due either to a typo in this name (remember that
  1178.   names are case sensitive, so a reference to 'xxx' will *not* match
  1179.   a definition of 'Xxx'), or else the name is defined in another MIB
  1180.   file, and this dependency is missing from the IMPORT clause of this
  1181.   MIB file.
  1182. The parser doesn't handle comments properly. Why not?
  1183. ------------------------------------------------------------
  1184.   The most likely reason is that the line in question contains two
  1185.   (or more) sequences of pairs of dashes.  This is often used to try
  1186.   and "comment out" an unwanted line that already contains a comment:
  1187. --   broken ::= { myMIB 1 }   -- This isn't working yet
  1188.   The assumption here is that a comment continues to the end of the line.
  1189.   Unfortunately, this assumption is not correct.
  1190.     A comment will continue either to the end of the line, or the next
  1191.   occurance of a pair of dashes.  Thus in this case, the definition of
  1192.   "broken" is commented out (as intended) but the following text is
  1193.   treated as part of the MIB, and will generate an error.
  1194.     A similar effect can be obtained when a line of dashes has been used
  1195.   to try and mark separate parts of a MIB file.
  1196.     Most of the applications have a command-line option (-Pc) which will
  1197.   work around this problem by treating the whole line as a comment.  But
  1198.   this is not strictly legal, and the offending MIB file should really be
  1199.   corrected.
  1200. How do I replace MIB values with new ones?
  1201. -----------------------------------------
  1202.   The Net-SNMP parser generally takes the first definition it sees for each
  1203.   object in the MIB hierarchy.   Even if you specify your file to be read
  1204.   first, if the IMPORTS clauses reference a MIB with competing objects,
  1205.   those objects will be parsed first.
  1206.   When specifying the Replace MIB command-line option (-PR), the parser
  1207.   will use definitions sourced from the most recent MIB file.
  1208.   The parser will replace MIB objects when the sub-identifier and name match.
  1209.   Caution: Using Replace MIB, there is NO guarantee that the resulting
  1210.   MIB tree will be correct.  Other MIB objects matching the name but
  1211.   not the sub-identifier will persist.  Sub-hierarchies may be reparented.
  1212.   In particular, random access searching [see man 1 snmpcmd]
  1213.   may give unexpected result.
  1214.   The Replace MIB option is experimental, buyer beware, carpe diem, etc.
  1215.   Here are a few considerations to help you obtain good results.
  1216.   These hold true even if you never use the Replace MIB feature.
  1217.   Your suggestions for improvement are welcomed.
  1218.     1. The parser searches the specified directories and attempt
  1219.        to parse every file whose path does not begin with "." (period).
  1220.        Remove (or rename) older MIB files from these directories.
  1221.        Rename "README" to ".README" , etc.
  1222.     2. Hint: the parser's module list is in LIFO order. You may see better
  1223.        results if the directory with the most correct MIB files is
  1224.        specified last in the MIBDIRS environment.
  1225.     3. Constrain the parser to not read in default MIB files by setting
  1226.        the MIBS environmental variable to the appropriate separator character
  1227.        (semi-colon on win32, colon everywhere else).
  1228.        Setting this to "" may also have the same effect.
  1229.     4. The MIBFILES environment can specify the path of the new MIB file.
  1230.   Within a program, the call:
  1231.  /*  4.2.x  */
  1232.  ds_set_boolean(DS_LIBRARY_ID, DS_LIB_MIB_REPLACE, 1 | 0);
  1233.   or, if using the 5.0.x series code:
  1234. /*  5.0.x  */
  1235. netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID,
  1236.        NETSNMP_DS_LIB_MIB_REPLACE, 1 | 0);
  1237.   will enable or disable the Replace MIB feature respectively.
  1238.   If you're having problems loading a particular MIB file, this
  1239.   call can be used to disable this feature, before using read_mib() to
  1240.   load the required file, and then re-enabling the Replace MIB feature.
  1241.   (or vice versa, as appropriate).
  1242. How can I get more information about these MIB file problems?
  1243. ------------------------------------------------------------
  1244.   The command 'snmptranslate' is used to translate between numeric
  1245.   and symbolic forms of OIDs.  It uses the same routines as the
  1246.   'active' commands, but does not rely on communicating successfully
  1247.   with a network management agent.  As such, it is a useful tool
  1248.   for identifying problems with reading in MIB files.
  1249.     In particular, the following options may be useful in
  1250.   identifying problems:
  1251. -Pw  warns about conflicting symbols
  1252. -PW  prints more verbose warnings about other problems as well
  1253. (in both cases, ignore the 'xmalloc' reports)
  1254. -T   provides sub-options for various views of these entries
  1255.   There are other '-P' options to control various aspects of MIB parsing.
  1256.   See the 'snmptranslate(1)' and 'snmpcmd(1)' man pages for more details,
  1257.   or the tutorial at
  1258. http://www.net-snmp.org/tutorial-5/commands/snmptranslate.html
  1259. What's this about "too many imported symbols"?
  1260. ---------------------------------------------
  1261.   Any MIB file starts with an (optional) list of identifiers that
  1262.   it "imports" from other files.  The parser implements this using
  1263.   a fixed size buffer to hold the import information.
  1264.     There are two circumstances in which this can result in the
  1265.   error message shown above.
  1266.     Firstly, if the MIB file refers to an unusually large number
  1267.   of external identifiers.  Handling this case requires a (trivial)
  1268.   patch to the parsing code.  Contact the coders list for advice.
  1269.      (This is extremely rare - the only example that
  1270.       we've come across is the Cabletron Trap MIB).
  1271.     Much more common is a syntax error in the IMPORTS clause of the
  1272.   MIB file in question.  In particular, check that this ends in a
  1273.   semicolon, before going on to the main definition section.
  1274. Do I actually need the MIB files?
  1275. --------------------------------
  1276.   Probably not.
  1277.   The MIB files play two main roles - they are used to translate
  1278.   between numeric OIDs and the corresponding textual names, and
  1279.   they define the structure and syntax of the relevant MIB objects.
  1280.     This second role is perhaps best thought of in terms of a design
  1281.   document.  It's vital while developing an application (typically
  1282.   the MIB module or handler within the agent), since it defines
  1283.   what the application (MIB) must actually do.  But once the code
  1284.   has been written, the design document becomes redundent.
  1285.   The agent then has the same information hardcoded into it
  1286.   (literally!), and no longer needs the MIB file.
  1287.     The translation task is not strictly necessary - SNMP will
  1288.   operate fine without any MIB files at all, as long as you're
  1289.   happy to work with numeric OIDs throughout, and know which MIB
  1290.   objects you're interested in.  But it's much easier to work with
  1291.   the (hopefully) meaningful names, enumeration tags and the like,
  1292.   and to view the description of a particular object.
  1293.   This requires having the relevant MIB files installed and loaded.
  1294. AGENT
  1295. =====
  1296. What MIBs are supported?
  1297. -----------------------
  1298.   The following MIBs are supported (at least in part and on some systems):
  1299. - MIB-2  General network statistics (RFC 1213)
  1300. - Host Resources (RFC 1514 and 2790)
  1301. - SNMPv3 MIBS (RFCs 2571-5, 3411-3418)
  1302. (including USM, VACM, Target
  1303.  and Notification MIBs)
  1304. - DisMan EVENT-MIB
  1305. - MTA-MIB (sendmail)
  1306. - private agent extensions
  1307. (monitor specified processes and disks,
  1308.  memory, CPU, load average, plus extend
  1309.  the agent using shell commands)
  1310.   The Host Resources MIB, the Event MIB and the MTA MIB are not
  1311.   included by default, and need to be explicitly requested when
  1312.   the suite is first configured and built.
  1313.   There are a few other MIB implementations distributed as part of the
  1314.   source tarball, but these are basically unsupported and most of the
  1315.   core developers have little or no experience with using them.
  1316. What protocols are supported?
  1317. ----------------------------
  1318.   The agent supports all three current versions of SNMP (v1, v2c and v3),
  1319.   over both UDP and TCP transports, as well as a SMUX (RFC 1227) master
  1320.   agent, AgentX (RFC 2257 ) in both master and subagent roles, and SNMP
  1321.   proxying.
  1322. How do I configure the agent?
  1323. ----------------------------
  1324.   That depends on what you want it to do.  See the snmpd.conf(5) manual
  1325.   page for the possibilities.
  1326.   You can also run the "snmpconf" perl script to help you create this
  1327.   file.  Start off with 'snmpconf -g basic_setup' to get you going.
  1328. How do I add a MIB to the agent?
  1329. -------------------------------
  1330. How do I add functionality?
  1331. --------------------------
  1332.   While simply adding a file to the MIB directory (and possibly tweaking
  1333.   the list of MIBs to load) is sufficient for the tools, unfortunately
  1334.   extending the functionality of the agent to include this is not so simple.
  1335.   In fact, the agent makes little or no use of these files, and will work
  1336.   quite happily without them.  All the information about the syntax and
  1337.   scope of the variables supported is hardwired into the implementation
  1338.   of the agent.
  1339.   There are a number of alternative ways to add functionality for a new
  1340.   MIB to the agent.
  1341.   Firstly, it is possible that the agent distribution already includes
  1342.   the desired functionality, but this has simply not been configured in
  1343.   to the running version.  This is done using the configure option
  1344. --with-mib-modules="list"
  1345.   (where "list" is a space-separated list of modules to include) then
  1346.   recompiling the agent.
  1347.   Note that some functionality concerned with monitoring and managing
  1348.   unix hosts is included in the UCD extension modules, which are located
  1349.   within the 'private' branch of the MIB tree.  This is covered in a later
  1350.   question in this FAQ.
  1351.   Secondly, it is possible for the agent to run commands or shell scripts
  1352.   in response to queries.  These can obtain and report the necessary
  1353.   information, or perform actions as required.
  1354.   Detailed information and examples are provided in the snmpd(8) and
  1355.   snmpd.conf(5) manual pages, and the EXAMPLE.conf file.
  1356.   This is known as "pass-through" support.
  1357.   Thirdly, it may be possible to link another agent (which already
  1358.   supports the desired MIB), as a "subagent" of the Net-SNMP master
  1359.   (or vice versa).  The possibilities here are SMUX, AgentX or proxied
  1360.   SNMP (see the next question but one).
  1361.   Finally, the agent itself can be extended to support additional MIB
  1362.   groups, by writing the necessary C code, and including this within
  1363.   the main agent - either statically compiled in, or dynamically loaded.
  1364.   This is covered further in the next section.
  1365.     Note that there is no visible difference between 'pass-through'
  1366.   MIB support, subagents, and modules implemented within the main agent
  1367.   itself. Tools querying the agent will see a single MIB structure.
  1368.  
  1369. How do I remove a MIB from the agent?
  1370. ------------------------------------
  1371.   Deleting the text file for a MIB does not affect the agent, other than
  1372.   to prevent it from recognising textual names instead of raw OIDs in the
  1373.   config files. There are three options to prevent the agent returning
  1374.   information from a particular MIB:
  1375.                                                                                 
  1376.     1) re-run configure to exclude the given MIB module, rebuild,
  1377.        and reinstall:
  1378. ./configure --with-out-mib-module=host   ....
  1379. make
  1380. make install
  1381.     2) use access control to exclude the mib from the view used to
  1382.        query the agent:
  1383.                                                                                 
  1384.                                                                                 
  1385. com2sec public  default public
  1386. group   public  v1      public
  1387. group   public  v2c     public
  1388. view    ourmib  included  system
  1389. view    ourmib  included  printmib
  1390. view    ourmib  excluded  host
  1391. view    ourmib  included  privatemib
  1392. access  public  "" any noauth exact ourmib none none
  1393.                                                                                 
  1394.     3) disable the MIB at runtime
  1395.        First you need to figure out which MIB modules are being
  1396.        loaded by getting the agent to report them as they are
  1397.        initialised:
  1398.   snmpd -Dmib_init -H
  1399.        Then turn off the ones you don't want:
  1400.   snmpd -I -hr_system,hr_storage,hr_device,hr_other,....
  1401. I've installed a new MIB file.  Why can't I query it?
  1402. ----------------------------------------------------
  1403.     Unfortunately, simply installing the MIB file isn't enough for
  1404.   the agent to automatically provide the corresponding information.
  1405.   This typically requires writing some code.
  1406.     See the section CODING, and the on-line documentation.
  1407.     It may sometimes be possible to achieve the same effect using
  1408.   the various extension directives, but this typically still involves
  1409.   providing a suitable script or command.   The agent isn't magic
  1410.   and doesn't know how to locate the MIB information.  Somebody
  1411.   has to tell it.
  1412. What's the difference between 'exec', 'sh' and 'pass'?
  1413. -----------------------------------------------------
  1414.     'exec' will fork off the specified command and return the exit status
  1415.   and/or the output.  Arguments are passed directly to the command.
  1416.     'sh' is similar, but invokes a shell to run the command line given.
  1417.   This means that quoted arguments will be recognised as such, and also
  1418.   allows redirection, and other similar shell interpretation.
  1419.   Neither of these mechanisms require the command to have any
  1420.   knowledge of the fact that they are being used in this manner.
  1421.   But the output is returned in a fixed format, and it is up to
  1422.   the receiving application to interpret this appropriately.
  1423.   Note that with the 4.2.x and 5.0.x lines, return values are cached
  1424.   within the agent for 30 seconds, rather than invoking the command
  1425.   for every request.  This does not hold for the 5.1.x agent.
  1426.     'pass' is a more general mechanism for extending the agent, and the
  1427.   command given will be invoked for any request within the specific MIB
  1428.   subtree.  Details of precisely how this command will be called in
  1429.   various circumstances is given in the 'snmpd.conf(5)' man page.
  1430.     'pass-persist' is similar, but the command will continue running
  1431.   even once the initial request has been answered.
  1432.   See 'snmpd.conf(5)' for more details.
  1433.