| This README describes the ./local/mib2c script. |
| |
| Author: Derek Simkowiak |
| dereks@kd-dev.com |
| http://www.kd-dev.com |
| (please mail questions to net-snmp-coders@lists.sourceforge.net, |
| not to the author directly. Thanks!) |
| |
| Date: Wed Jan 20 02:51:06 PST 1999 |
| ----------------------------------------------------------------------- |
| mib2c |
| |
| OVERVIEW |
| |
| mib2c is a Perl script that takes a MIB (such as those files found |
| in ./mibs/ ) and converts it into C code. That C code can then be used as a |
| "template" to implement your MIB. Then, when you are done editing the C |
| code and recompiling, the UCD-SNMP agent (snmpd) will support your MIB. |
| mib2c takes the place of "MIB Compilers" that come with commercial SNMP |
| agents. |
| |
| |
| REQUIREMENTS/INSTALLATION |
| |
| mib2c requires the SNMP.pm Perl module. As of this writing the |
| latest version of the SNMP.pm module is 1.8. |
| |
| The SNMP.pm module can be downloaded from CPAN at |
| |
| http://www.cpan.org/modules/by-module/SNMP/ |
| |
| ...the file that you want is probably SNMP-1.8b5.tar.gz . |
| If you didn't know that already, most every Perl module can be downloaded |
| from CPAN (www.cpan.org). Follow the installation instructions for the |
| module. |
| |
| NOTE: If you are running Redhat Linux 5.2 (and perhaps other |
| versions), you might get the following errors during the "make test" phase |
| of the installation of the SNMP.pm module: |
| |
| [root@olly SNMP-1.8b5]# make test # This is the command... |
| PERL_DL_NONLAZY=1 /usr/bin/perl -I./blib/arch -I./blib/lib |
| -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 -e 'use Test::Harness |
| qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t |
| t/mib...............ok |
| t/session...........FAILED tests 7-8 |
| Failed 2/14 tests, 85.71% okay |
| t/translate.........ok |
| Failed Test Status Wstat Total Fail Failed List of failed |
| ------------------------------------------------------------------------------- |
| t/session.t 14 2 14.29% 7-8 |
| Failed 1/3 test scripts, 66.67% okay. 2/24 subtests failed, 91.67% okay. |
| make: *** [test_dynamic] Error 9 |
| |
| |
| If the "make" went okay, then you can ignore these test failures. |
| These indicate you don't have write access to the portions of the mib |
| tree that the test script is trying to use. Please don't email the |
| UCD-SNMP list with other errors regarding the SNMP.pm module. |
| comp.lang.perl.modules is probably the most appropriate spot to |
| discuss problems with the SNMP.pm perl module itself. Interelated |
| problems between net-snmp and SNMP could be discussed on the net-snmp |
| mailing lists though. |
| |
| |
| USAGE |
| |
| mib2c takes one argument: an OID. It then traces down that OID |
| and generates the template C code. Here is the documentation, from the |
| top of the script: |
| |
| # This program, given an OID reference as an argument, creates some |
| # template mib module files to be used with the net-snmp agent. It is |
| # far from perfect and will not generate working modules, but it |
| # significantly shortens development time by outlining the basic |
| # structure. |
| # |
| # Its up to you to verify what it does and change the default values |
| # it returns. |
| # |
| # You *must* correct the beginning of the var_XXX() function to |
| # correctly determine mib ownership of the incoming request. |
| |
| |
| FINDING YOUR MIB |
| |
| Before you can specify the OID for your enterprise/MIB on the |
| command line, the script needs to be able to find your MIB so that it can |
| read it in and generate template code. Joe Marzot (gmarzot@nortelnetworks.com) |
| tells us: |
| -------------------------------------- |
| you should read (man mib_api). The default behaviour for mib loading |
| from within the perl interface uses the environment variables described |
| there. You can also override these and explicitly define mibdirs and |
| load modules through the perl/SNMP api. |
| |
| the easiest thing to do is toss the mibs in /usr/local/share/snmp/mibs |
| and set the env. var., MIBS, to 'ALL'. |
| -------------------------------------- |
| |
| I recommend following the last two lines of advice. I simply did |
| |
| # cp /home/dereks/MY-MIB-FILE.txt /usr/local/share/snmp/mibs/ |
| # export MIBS=ALL |
| |
| ...on my Redhat system (with a BASH shell) and it was able to find |
| my MIB just fine. |
| |
| |
| EXAMPLES |
| |
| Here are some examples from Wes Hardaker (wjhardaker@ucdavis.edu). |
| He's using a C shell. Wes writes: |
| -------------------------------------- |
| Ok, in order to run the thing, you actually need to do something like |
| this: |
| |
| setenv MIBS MY-ITEM-MIB # assumes csh |
| mib2c itemNode |
| |
| Where, "itemNode" should be a node in the mib tree that you want to |
| generate C code for. Note, pick small pieces not large ones. Yes, it |
| will generate code for the entire mibII tree if you ask it to, in one |
| very large mib file. |
| |
| Examples: |
| |
| % mib2c interfaces |
| outputing to interfaces.c and interfaces.h ... |
| depth: 3 |
| Number of Lines Created: |
| 178 interfaces.c |
| 84 interfaces.h |
| 262 total |
| Done. |
| |
| % mib2c mib-2 # Don't ever do this. |
| outputing to mib-2.c and mib-2.h ... |
| depth: 5 |
| Number of Lines Created: |
| 2783 mib-2.c |
| 617 mib-2.h |
| 3400 total |
| Done. |
| |
| It may have some sorting problems with multiple level mib tree |
| branches being generated into one piece of code (reorder the .h file |
| structure to be in OID lexical order if needed). |
| -------------------------------------- |
| |
| WHAT TO DO WITH THE CODE THAT GETS GENERATED |
| |
| You will need to edit your generated code to work with your |
| hardware. For instance, if your MIB is for a refrigerator, you will need |
| to write the code that talks to the refridgerator (through the serial |
| port, maybe?) in Fridge Protocol. |
| |
| See the files in ./agent/mibgroup/examples/ and |
| ./agent/mibgroup/dummy/ for heavily-commented example code. Don't ask me |
| questions about this stuff--I'm just now figuring it out myself... |
| |
| [NOTE: If anyone out there has tips about necessary options to |
| ./configure, or re-compiling snmpd with custom MIB support, please add |
| them here...] |
| |
| WARNING |
| |
| As of this writing, the mib2c compiler is a bit outdated and needs |
| some work. Wes writes: |
| -------------------------------------- |
| It already needs changing, because the architecture has changed in the |
| 3.6 line (though its backwards compatible, I'd prefer to generate |
| code from newer models than older ones). |
| -------------------------------------- |
| When I asked him to elaborate on the new 3.6 archictecture, all I |
| got was: |
| -------------------------------------- |
| It hopefully will be in the new documentation about mib module api |
| that Dave Shield is putting together (which is also currently wrong, |
| for that matter)... |
| -------------------------------------- |
| ...so I don't know what the hell he's talking about. |
| |
| |
| SOME ERRORS AND THEIR MEANING |
| |
| If you get a large number of errors that look like: |
| |
| [...] |
| unknown type: INTEGER for prIndex |
| unknown type: OCTETSTR for prNames |
| unknown type: INTEGER for prMin |
| [...] |
| |
| ...then you are trying to use an old version of the mib2c script |
| that does not support the SNMP.pm module version 1.8. Get the latest |
| version of the script. |
| |
| If you get the error |
| |
| Couldn't find mib reference: myEnterpriseOID |
| |
| ...when you know that it should be finding your MIB file(s), then |
| you forgot to put the word "END" at the very end of your MIB. (Uh...I'm |
| not speaking from experience here. Really.) |
| |
| ACKNOWLEGMENTS |
| |
| Many thanks to the people on the UCD-SNMP mailing list |
| (net-snmp-users@lists.sourceforge.net). In particular, many thanks to |
| |
| Wes Hardaker <wjhardaker@ucdavis.edu> |
| Ken McNamara <conmara@tcon.net> |
| Joe Marzot <gmarzot@nortelnetworks.com> |
| |
| ...since about half this document is just cut'n'pasted from emails |
| they sent me. |
| |
| Good luck with your project. |
| |
| Derek Simkowiak |
| dereks@kd-dev.com |
| http://www.kd-dev.com |
| |