📄 readme.mib2c
字号:
This README describes the ./local/mib2c script.Author: Derek Simkowiak dereks@kd-dev.com http://www.kd-dev.com (please mail questions to ucd-snmp-coders@ucd-snmp.ucdavis.edu, not to the author directly. Thanks!)Date: Wed Jan 20 02:51:06 PST 1999-----------------------------------------------------------------------mib2cOVERVIEW mib2c is a Perl script that takes a MIB (such as those files foundin ./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 Ccode and recompiling, the UCD-SNMP agent (snmpd) will support your MIB.mib2c takes the place of "MIB Compilers" that come with commercial SNMPagents.REQUIREMENTS/INSTALLATION mib2c requires the SNMP.pm Perl module. As of this writing thelatest 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 downloadedfrom CPAN (www.cpan.org). Follow the installation instructions for themodule. NOTE: If you are running Redhat Linux 5.2 (and perhaps otherversions), you might get the following errors during the "make test" phaseof 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::Harnessqw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.tt/mib...............okt/session...........FAILED tests 7-8 Failed 2/14 tests, 85.71% okayt/translate.........okFailed Test Status Wstat Total Fail Failed List of failed-------------------------------------------------------------------------------t/session.t 14 2 14.29% 7-8Failed 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 mibtree that the test script is trying to use. Please don't email theUCD-SNMP list with other errors regarding the SNMP.pm module.comp.lang.perl.modules is probably the most appropriate spot todiscuss problems with the SNMP.pm perl module itself. Interelatedproblems between ucd-snmp and SNMP could be discussed on the ucd-snmpmailing lists though.USAGE mib2c takes one argument: an OID. It then traces down that OIDand generates the template C code. Here is the documentation, from thetop of the script:# This program, given an OID reference as an argument, creates some# template mib module files to be used with the ucd-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 thecommand line, the script needs to be able to find your MIB so that it canread it in and generate template code. Joe Marzot (gmarzot@nortelnetworks.com)tells us:--------------------------------------you should read (man mib_api). The defaultm behaviour for mib loadingfrom within the perl interface uses the environment variables describedthere. You can also override these and explicitly define mibdirs andload modules through the perl/SNMP api.the easiest thing to do is toss the mibs in /usr/local/share/snmp/mibsand 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 findmy 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 likethis:setenv MIBS MY-ITEM-MIB # assumes cshmib2c itemNodeWhere, "itemNode" should be a node in the mib tree that you want togenerate 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 onevery large mib file.Examples:% mib2c interfacesoutputing to interfaces.c and interfaces.h ... depth: 3 Number of Lines Created:178 interfaces.c84 interfaces.h262 totalDone.% 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.c617 mib-2.h3400 totalDone.It may have some sorting problems with multiple level mib treebranches being generated into one piece of code (reorder the .h filestructure 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 yourhardware. For instance, if your MIB is for a refridgerator, you will needto write the code that talks to the refridgerator (through the serialport, maybe?) in Fridge Protocol. See the files in ./agent/mibgroup/examples/ and./agent/mibgroup/dummy/ for heavily-commented example code. Don't ask mequestions 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 addthem here...]WARNING As of this writing, the mib2c compiler is a bit outdated and needssome 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 generatecode from newer models than older ones).-------------------------------------- When I asked him to elaborate on the new 3.6 archictecture, all Igot was:--------------------------------------It hopefully will be in the new documentation about mib module apithat 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 prIndexunknown type: OCTETSTR for prNamesunknown type: INTEGER for prMin[...] ...then you are trying to use an old version of the mib2c scriptthat does not support the SNMP.pm module version 1.8. Get the latestversion 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), thenyou forgot to put the word "END" at the very end of your MIB. (Uh...I'mnot speaking from experience here. Really.)ACKNOWLEGMENTS Many thanks to the people on the UCD-SNMP mailing list(ucd-snmp@ucd-snmp.ucdavis.edu). In particular, many thanks toWes 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 emailsthey sent me. Good luck with your project.Derek Simkowiakdereks@kd-dev.comhttp://www.kd-dev.com
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -