diff options
Diffstat (limited to 'local/README.mib2c')
-rw-r--r-- | local/README.mib2c | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/local/README.mib2c b/local/README.mib2c new file mode 100644 index 0000000..6b28770 --- /dev/null +++ b/local/README.mib2c @@ -0,0 +1,224 @@ +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 + |