README.mib2c
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:7k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. This README describes the ./local/mib2c script.
  2. Author:  Derek Simkowiak
  3.          dereks@kd-dev.com
  4.          http://www.kd-dev.com
  5.          (please mail questions to net-snmp-coders@lists.sourceforge.net,
  6.          not to the author directly.  Thanks!)
  7. Date:    Wed Jan 20 02:51:06 PST 1999
  8. -----------------------------------------------------------------------
  9. mib2c
  10. OVERVIEW
  11. mib2c is a Perl script that takes a MIB (such as those files found
  12. in ./mibs/ ) and converts it into C code.  That C code can then be used as a
  13. "template" to implement your MIB.  Then, when you are done editing the C
  14. code and recompiling, the UCD-SNMP agent (snmpd) will support your MIB.
  15. mib2c takes the place of "MIB Compilers" that come with commercial SNMP
  16. agents.
  17. REQUIREMENTS/INSTALLATION
  18. mib2c requires the SNMP.pm Perl module.  As of this writing the
  19. latest version of the SNMP.pm module is 1.8.
  20. The SNMP.pm module can be downloaded from CPAN at 
  21. http://www.cpan.org/modules/by-module/SNMP/
  22. ...the file that you want is probably SNMP-1.8b5.tar.gz .
  23. If you didn't know that already, most every Perl module can be downloaded
  24. from CPAN (www.cpan.org).  Follow the installation instructions for the
  25. module.
  26. NOTE: If you are running Redhat Linux 5.2 (and perhaps other
  27. versions), you might get the following errors during the "make test" phase
  28. of the installation of the SNMP.pm module:
  29. [root@olly SNMP-1.8b5]# make test             # This is the command...
  30. PERL_DL_NONLAZY=1 /usr/bin/perl -I./blib/arch -I./blib/lib
  31. -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 -e 'use Test::Harness
  32. qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t
  33. t/mib...............ok
  34. t/session...........FAILED tests 7-8
  35.         Failed 2/14 tests, 85.71% okay
  36. t/translate.........ok
  37. Failed Test  Status Wstat Total Fail  Failed  List of failed
  38. -------------------------------------------------------------------------------
  39. t/session.t                  14    2  14.29%  7-8
  40. Failed 1/3 test scripts, 66.67% okay. 2/24 subtests failed, 91.67% okay.
  41. make: *** [test_dynamic] Error 9
  42. If the "make" went okay, then you can ignore these test failures.
  43. These indicate you don't have write access to the portions of the mib
  44. tree that the test script is trying to use.  Please don't email the
  45. UCD-SNMP list with other errors regarding the SNMP.pm module.
  46. comp.lang.perl.modules is probably the most appropriate spot to
  47. discuss problems with the SNMP.pm perl module itself. Interelated
  48. problems between net-snmp and SNMP could be discussed on the net-snmp
  49. mailing lists though.
  50. USAGE
  51. mib2c takes one argument: an OID.  It then traces down that OID
  52. and generates the template C code.  Here is the documentation, from the
  53. top of the script:
  54. # This program, given an OID reference as an argument, creates some
  55. # template mib module files to be used with the net-snmp agent.  It is
  56. # far from perfect and will not generate working modules, but it
  57. # significantly shortens development time by outlining the basic
  58. # structure.
  59. #
  60. # Its up to you to verify what it does and change the default values
  61. # it returns.
  62. #
  63. # You *must* correct the beginning of the var_XXX() function to
  64. # correctly determine mib ownership of the incoming request.
  65. FINDING YOUR MIB
  66. Before you can specify the OID for your enterprise/MIB on the
  67. command line, the script needs to be able to find your MIB so that it can
  68. read it in and generate template code.  Joe Marzot (gmarzot@nortelnetworks.com)
  69. tells us:
  70. --------------------------------------
  71. you should read (man mib_api). The default behaviour for mib loading
  72. from within the perl interface uses the environment variables described
  73. there. You can also override these and explicitly define mibdirs and
  74. load modules through the perl/SNMP api.
  75. the easiest thing to do is toss the mibs in /usr/local/share/snmp/mibs
  76. and set the env. var., MIBS, to 'ALL'.
  77. --------------------------------------
  78. I recommend following the last two lines of advice.  I simply did
  79. # cp /home/dereks/MY-MIB-FILE.txt /usr/local/share/snmp/mibs/
  80. # export MIBS=ALL
  81. ...on my Redhat system (with a BASH shell) and it was able to find
  82. my MIB just fine.
  83. EXAMPLES
  84. Here are some examples from Wes Hardaker (wjhardaker@ucdavis.edu).
  85. He's using a C shell.  Wes writes:
  86. --------------------------------------
  87. Ok, in order to run the thing, you actually need to do something like
  88. this:
  89. setenv MIBS MY-ITEM-MIB          # assumes csh
  90. mib2c itemNode
  91. Where, "itemNode" should be a node in the mib tree that you want to
  92. generate C code for.  Note, pick small pieces not large ones.  Yes, it 
  93. will generate code for the entire mibII tree if you ask it to, in one
  94. very large mib file.
  95. Examples:
  96. % mib2c interfaces
  97. outputing to interfaces.c and interfaces.h ...
  98.   depth: 3
  99.   Number of Lines Created:
  100. 178 interfaces.c
  101. 84 interfaces.h
  102. 262 total
  103. Done.
  104. % mib2c mib-2                             # Don't ever do this.
  105. outputing to mib-2.c and mib-2.h ...
  106.   depth: 5
  107.   Number of Lines Created:
  108. 2783 mib-2.c
  109. 617 mib-2.h
  110. 3400 total
  111. Done.
  112. It may have some sorting problems with multiple level mib tree
  113. branches being generated into one piece of code (reorder the .h file
  114. structure to be in OID lexical order if needed).
  115. --------------------------------------
  116. WHAT TO DO WITH THE CODE THAT GETS GENERATED
  117. You will need to edit your generated code to work with your
  118. hardware.  For instance, if your MIB is for a refrigerator, you will need
  119. to write the code that talks to the refridgerator (through the serial
  120. port, maybe?) in Fridge Protocol.
  121. See the files in ./agent/mibgroup/examples/ and
  122. ./agent/mibgroup/dummy/ for heavily-commented example code.  Don't ask me
  123. questions about this stuff--I'm just now figuring it out myself...
  124. [NOTE: If anyone out there has tips about necessary options to
  125. ./configure, or re-compiling snmpd with custom MIB support, please add
  126. them here...]
  127. WARNING
  128. As of this writing, the mib2c compiler is a bit outdated and needs
  129. some work.  Wes writes:
  130. --------------------------------------
  131. It already needs changing, because the architecture has changed in the 
  132. 3.6 line (though its backwards compatible, I'd prefer to generate
  133. code from newer models than older ones).
  134. --------------------------------------
  135. When I asked him to elaborate on the new 3.6 archictecture, all I
  136. got was:
  137. --------------------------------------
  138. It hopefully will be in the new documentation about mib module api
  139. that Dave Shield is putting together (which is also currently wrong,
  140. for that matter)...
  141. --------------------------------------
  142. ...so I don't know what the hell he's talking about.
  143. SOME ERRORS AND THEIR MEANING
  144. If you get a large number of errors that look like:
  145. [...]
  146. unknown type:  INTEGER for prIndex
  147. unknown type:  OCTETSTR for prNames
  148. unknown type:  INTEGER for prMin
  149. [...]
  150. ...then you are trying to use an old version of the mib2c script
  151. that does not support the SNMP.pm module version 1.8.  Get the latest
  152. version of the script.
  153. If you get the error 
  154. Couldn't find mib reference: myEnterpriseOID
  155. ...when you know that it should be finding your MIB file(s), then
  156. you forgot to put the word "END" at the very end of your MIB.  (Uh...I'm
  157. not speaking from experience here.  Really.)
  158. ACKNOWLEGMENTS
  159. Many thanks to the people on the UCD-SNMP mailing list
  160. (net-snmp-users@lists.sourceforge.net).  In particular, many thanks to
  161. Wes Hardaker <wjhardaker@ucdavis.edu>
  162. Ken McNamara <conmara@tcon.net>
  163. Joe Marzot <gmarzot@nortelnetworks.com>
  164. ...since about half this document is just cut'n'pasted from emails
  165. they sent me.
  166. Good luck with your project.
  167. Derek Simkowiak
  168. dereks@kd-dev.com
  169. http://www.kd-dev.com