summaryrefslogtreecommitdiff
path: root/local/README.mib2c
blob: 6b287707b3542d32320c407f09ae40f10cf5849b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
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