114 lines
4.4 KiB
Plaintext
114 lines
4.4 KiB
Plaintext
|
This directory holds the implementation of individual MIB groups.
|
||
|
Currently, this contains the eight MIB-2 groups, plus a basic template
|
||
|
for new MIB groups (examples/example.c and examples/example.h)
|
||
|
|
||
|
Additionally, you may wish to check out the 'mib2c' perl script in the
|
||
|
SRCDIR/local directory that can convert a written mib into C template
|
||
|
files for use with this package as mib modules.
|
||
|
|
||
|
Each group consists of two files:
|
||
|
|
||
|
examples/example.h: interface information
|
||
|
|
||
|
- declaration of the initialisation function 'init_example'
|
||
|
(optional)
|
||
|
- declaration of the function(s) for retrieving variable
|
||
|
information 'var_example'
|
||
|
- declaration of the function(s) for setting variable
|
||
|
information (if appropriate)
|
||
|
|
||
|
- declaration of the function(s) for parsing the snmpd.conf file
|
||
|
(optional)
|
||
|
- a call to config_parse_dot_conf() to explain to the .conf
|
||
|
parser which tokens we want to parse.
|
||
|
(optional)
|
||
|
|
||
|
- definitions of the MIB group 'magic numbers'
|
||
|
declarations of the 'public' functions
|
||
|
|
||
|
- a list of the variables in the group, including
|
||
|
type information, mapping between magic numbers
|
||
|
and OID sub-identifiers within the group,
|
||
|
accessibility information, and the relevant
|
||
|
function for retrieving this variable's value.
|
||
|
They *must* be listed in the mib-descending order.
|
||
|
- a call to 'config_load_mib', identifying the location of
|
||
|
this MIB group within the general MIB structure.
|
||
|
- a call to 'config_require' to identify any other files
|
||
|
that are required by the implementation of this group.
|
||
|
(optional)
|
||
|
|
||
|
(these last three are only visible within the 'glue' file 'snmp_vars.c'
|
||
|
(if at all), but are declared here for ease of maintainance)
|
||
|
|
||
|
|
||
|
|
||
|
examples/example.c: implementation code
|
||
|
(can be non-existant if only the .h file is needed)
|
||
|
|
||
|
- a list of kernel information needed to report
|
||
|
on this group
|
||
|
- an initialisation function (optional)
|
||
|
- a routine to parse an snmpd.conf line.
|
||
|
- a routine to free resources from above and return to
|
||
|
default settings.
|
||
|
- 'header' function(s) to map the OID requested
|
||
|
to the next appropriate OID
|
||
|
(and similar system-independent setup)
|
||
|
- function(s) (possibly system-specific) to
|
||
|
determine and return the value of the
|
||
|
variable requested.
|
||
|
- (optionally) functions used to set values
|
||
|
- other functions used internally
|
||
|
|
||
|
|
||
|
To implement a new MIB group, copy the two files 'example.c'
|
||
|
and 'example.h' to appropriate new files ({MODULENAME}.c and {MODULENAME}.h),
|
||
|
and edit them as follows:
|
||
|
|
||
|
example.h:
|
||
|
globally change "example" to the new module name
|
||
|
and update the initial comment.
|
||
|
replace the EXAMPLE* defines with the list of
|
||
|
variables within this new group
|
||
|
fill in the 'MODULENAME_variables' structure with these
|
||
|
new variables, updating the type, accessibility
|
||
|
and sub-identifier information as appropriate.
|
||
|
replace 'variableN' with the maximum size of the
|
||
|
returned OID (omitting the group prefix).
|
||
|
For non-table values, this will probably be one
|
||
|
greater than the length of the sub-identifier.
|
||
|
update or remove the 'config_parse_dot_conf' call if
|
||
|
you need to handle lines in the snmpd.conf files.
|
||
|
update the 'config_load_mib' call with the appropriate
|
||
|
location within the global MIB structure, and
|
||
|
its length (note that 'MIB' has length 6)
|
||
|
provide a suitable 'config_require' call if this
|
||
|
code uses routines from any other files within
|
||
|
the 'mibgroup' directory (such as 'util_funcs.c')
|
||
|
|
||
|
|
||
|
|
||
|
example.c:
|
||
|
globally change "example" to the new module name
|
||
|
and update the initial comment.
|
||
|
replace the 'MODULENAME_nl' name list with any necessary
|
||
|
kernel variables, and update the associated #define's
|
||
|
replace the name length definition within the 'header'
|
||
|
function with the length of the requesting OID
|
||
|
(i.e. the sum of the lengths given in the subtree
|
||
|
definition, and the variable structure above).
|
||
|
replace the basic 'switch' structure within the
|
||
|
'var_MODULENAME' function with the necessary code
|
||
|
to calculate the required information.
|
||
|
(plus any other internal functions as needed).
|
||
|
|
||
|
It will then be necessary to (re-)run the configure script with the
|
||
|
option
|
||
|
--with-mib-modules="MODULENAME"
|
||
|
|
||
|
(where MODULENAME matches the name of the .c/.h file pair exactly).
|
||
|
Note that if anything in the config_* macros changes, or the init function
|
||
|
is added or removed, then the configure script will need to be re-run.
|
||
|
|