| .TH MIB_API 3 "22 Apr 2009" VVERSIONINFO "Net-SNMP" |
| .SH NAME |
| init_mib, add_mibdir, init_mib_internals, |
| add_module_replacement, |
| read_module, read_mib, read_all_mibs, |
| read_objid, read_module_node, get_module_node, |
| snmp_set_mib_warnings, snmp_set_save_descriptions, |
| shutdown_mib, |
| print_mib, |
| print_variable, fprint_variable, snprint_variable, sprint_realloc_variable, |
| print_value, fprint_value, snprint_value, sprint_realloc_value, |
| print_objid, fprint_objid, snprint_objid, sprint_realloc_objid, |
| print_description, fprint_description - mib_api functions |
| .SH SYNOPSIS |
| .B #include <net-snmp/mib_api.h> |
| .PP |
| .B "void init_mib(void); |
| .br |
| .BI "int add_mibdir(const char *" "dirname" ); |
| .br |
| .BI "int add_module_replacement(const char *" "old_module" ", const char *" "new_module" ", const char *" "tag" ", int " "len" ); |
| .br |
| .B "void init_mib_internals(void); |
| .br |
| .BI "struct tree *read_module(const char *" "name" ); |
| .br |
| .BI "struct tree *read_mib(const char *" "filename" ); |
| .br |
| .B "struct tree *read_all_mibs(void); |
| .PP |
| .B "void shutdown_mib(void); |
| .PP |
| .BI "void print_mib(FILE *" "fp" ); |
| .PP |
| .BI "int read_objid(const char *" "input" ", oid *" "output" ", size_t *" "out_len" ); |
| .br |
| .BI "int get_module_node(const char *" "name" ", const char *" "module" ", oid *" "objid" ", size_t *" "objidlen" ); |
| .PP |
| .BI "void print_variable(const oid *" "objid" ", size_t " "objidlen" ", const netsnmp_variable_list *" "variable" ); |
| .br |
| .BI "void fprint_variable(FILE *" fp ", const oid *" objid ", size_t " objidlen ", const netsnmp_variable_list *" variable ); |
| .br |
| .BI "int snprint_variable(char *" "buf" ", size_t " "len" ", const oid *" "objid" ", size_t " "objidlen" ", const netsnmp_variable_list *" "variable" ); |
| .br |
| .BI "int sprint_realloc_variable(u_char **" buf ", size_t *" buf_len ", size_t *" out_len ", int " allow_realloc ", const oid *" objid ", size_t " objidlen ", const netsnmp_variable_list *" variable ); |
| .PP |
| .BI "void print_value(oid *objid, size_t objidlen, const netsnmp_variable_list *variable) |
| .br |
| .BI "void fprint_value(FILE *" fp ", const oid *" objid ", size_t " objidlen ", const netsnmp_variable_list *" variable ); |
| .br |
| .BI "int snprint_value(char *" buf ", size_t " "len" ", const oid *" objid ", size_t " objidlen ", const netsnmp_variable_list *" variable ); |
| .br |
| .BI "int sprint_realloc_value(u_char **" buf ", size_t *" buf_len ", size_t *" out_len ", int " allow_realloc ", const oid *" objid ", size_t " objidlen ", const netsnmp_variable_list *" variable ); |
| .PP |
| .BI "void print_objid(const oid *" objid ", size_t " objidlen ); |
| .br |
| .BI "void fprint_objid(FILE *" fp ", const oid *" objid ", size_t " objidlen ); |
| .br |
| .BI "int snprint_objid(char *" buf ", size_t " "len" ", const oid *" objid ", size_t " objidlen ); |
| .br |
| .BI "int sprint_realloc_objid(u_char **" buf ", size_t *" buf_len ", size_t *" out_len ", int "allow_realloc ", const oid *" objid ", size_t " objidlen ); |
| .PP |
| .BI "void print_description(oid *" objid ", size_t " objidlen ", int " width ); |
| .br |
| .BI "void fprint_description(FILE *" fp ", const oid *" objid ", size_t " objidlen ", int " width ); |
| .PP |
| .BI "void snmp_set_mib_warnings(int " level ); |
| .br |
| .BI "void snmp_set_save_descriptions(int " save ");" |
| .PP |
| .SH DESCRIPTION |
| The functions dealing with MIB modules fall into four groups. Those |
| dealing with initialisation and shutdown, those that read in and |
| parse MIB files, those that search the MIB tree, and various output |
| routines. |
| .SS Initialisation and Shutdown |
| .B init_mib |
| is a convenience function that handles all calls to |
| .BR add_mibdir ", " read_module " and " read_mib |
| for standard applications. It should be called before any other |
| routine that manipulates or accesses the MIB tree. This routine sets |
| up various internal structures, as well as reading in the default MIB |
| modules, as detailed below. |
| .PP |
| .B add_mibdir |
| is used to define the range of directory locations which are searched |
| for files containing MIB modules (one module per file). By default, |
| this will be set to the directory |
| .I DATADIR/mibs |
| but this can be overridden by setting the environment variable |
| .I MIBDIRS |
| to a (colon-separated) list of directories to search. |
| Note that this does not actually load the MIB modules located |
| in that directory, but is an initialisation step to make them available. |
| This function returns a count of files found in the directory, or a -1 |
| if there is an error. |
| .PP |
| .B init_mib_internals |
| sets up the internal structures, preparatory to reading in MIB |
| modules. It should be called after all calls to |
| .BR add_mibdir , |
| and before and calls to |
| .BR read_module . |
| This is called automatically if |
| .B init_mib |
| is used. |
| .PP |
| .B shutdown_mib |
| will clear the information that was gathered by |
| .BR read_module ", " add_mibdir " and " add_module_replacement . |
| It is strongly recommended that one does not invoke |
| .BR shutdown_mib |
| while there are SNMP sessions being actively managed. |
| .SS Reading and Parsing MIBs |
| .B add_module_replacement |
| can be used to allow new MIB modules to obsolete older ones, without |
| needing to amend the imports clauses of other modules. It takes the |
| names of the old and new modules, together with an indication of which |
| portions of the old module are affected. |
| .RS |
| .TS |
| tab(+); |
| lb lb lb |
| l l l. |
| tag + len + load the new module when: |
| NULL + 0 + always (the old module is a strict subset of |
| + + the new) |
| name + 0 + for the given tag only |
| name + non-0 + for any identifier with this prefix |
| .TE |
| .RE |
| It can also be used to handle errors in the module identifiers used |
| in MIB import clauses (such as referring to |
| .I RFC1213 |
| instead of |
| .IR RFC1213-MIB ). |
| .PP |
| .B read_module |
| locates and parses the module specified, together with any modules |
| that it imports from, and adds the contents of these modules to the |
| active MIB tree. Note that |
| .B add_mibdir |
| must first be called to add the directory containing the file with the |
| module definition, if this is not in the standard path. |
| .br |
| By default, the following MIB modules will be loaded: IP-MIB, IF-MIB, |
| TCP-MIB, UDP-MIB, SNMPv2-MIB, RFC1213-MIB, UCD-SNMP-MIB. |
| This can be overridden by setting the environment variable |
| .I MIBS |
| to a (colon-separated) list of modules to load. |
| If this variable starts with a plus character, then the specified modules |
| are added to the default list. Otherwise only those modules listed are |
| loaded (together with any others they import from). |
| If |
| .I MIBS |
| is set to |
| .IR ALL , |
| .B read_all_mibs |
| is called to load all the MIB files found in all the specified |
| .IR MIBDIRS . |
| .PP |
| .B read_mib |
| parses the file specified, together with any modules that it imports |
| from, and adds the contents to the active MIB tree. Such a file can |
| contain more then one module, though care must be taken that any |
| imports occur earlier in the file, if they are not to be read from the |
| installed modules. Note that the file specified does not need to be |
| in any of the directories initialised by |
| .B add_mibdir |
| (or the default setup), though any imported modules do. |
| .br |
| The environment variable |
| .I MIBFILES |
| can be set to a (colon-separated) list of files containing MIBs to load. |
| .PP |
| .B read_objid |
| takes a string containing a textual version of an object identifier |
| (in either numeric or descriptor form), and transforms this into the |
| corresponding list of sub-identifiers. This is returned in the |
| .I output |
| parameter, with the number of sub-identifiers returned via |
| .IR out_len . |
| When called, |
| .I out_len |
| must hold the maximum length of the |
| .I output |
| array. |
| If multiple object identifiers are being processed, then this |
| length should be reset before each call. |
| This function returns a value of 1 if it succeeds in parsing the string |
| and 0 otherwise. |
| .SS Searching the MIB Tree |
| .B get_module_node |
| takes a descriptor and the name of a module, and returns the corresponding |
| oid list, in the same way as |
| .B read_objid |
| above. |
| .br |
| If the module name is specified as "ANY", then this routine will |
| assume that the descriptor given is unique within the tree, and will |
| return the matching entry. If this assumption is invalid, then the |
| behaviour as to which variable is returned is implementation |
| dependent. |
| .SS Output |
| .B print_mib |
| will print out a representation of the currently active MIB tree to |
| the specified FILE pointer. |
| .PP |
| .B print_variable |
| will take an object identifier (as returned by |
| .B read_objid |
| or |
| .BR get_module_node ) |
| and an instance of such a variable, and prints to the standard output |
| the textual form of the object identifier together with the value |
| of the variable. |
| .B fprint_variable |
| does the same, but prints to the FILE pointer specified by the initial |
| parameter. |
| .br |
| .B snprint_variable |
| prints the same information into the buffer pointed to by |
| .I buf |
| which is of length |
| .IR len |
| and returns either the number of characters printed, or -1 if the |
| buffer was not large enough. In the latter case, |
| .I buf |
| will typically contained a truncated version of the information (but |
| this behaviour is not guaranteed). This function replaces the |
| obsolete function |
| .BR sprint_variable . |
| .br |
| .B sprint_realloc_variable |
| is the low-level function used to implement all these functions. It |
| prints to a specified offset in a string buffer. The |
| .I buf |
| parameter points to a pointer to that buffer; |
| .I buf_len |
| points to a variable holding the current size of that buffer, and |
| .I out_len |
| points to a variable holding the offset to which to print. |
| .I out_len |
| will be updated to hold the offset of the character following the last |
| one added to the buffer. If |
| .I allow_realloc |
| is 1, the buffer will be dynamically expanded, as necessary, to hold |
| the output; the variables pointed to by |
| .I buf |
| and |
| .I buf_len |
| will be updated. If |
| .I allow_realloc |
| is 0, the buffer will not be dynamically expanded. |
| .B sprint_realloc_variable |
| returns 0 if |
| .I allow_realloc |
| is 1 and an attempt to allocate memory to expand the buffer fails, or |
| if |
| .I allow_realloc |
| is 0 and the output wouldn't fit in the buffer. Otherwise it returns |
| 1. When using this function you should be careful to call |
| .BR free (3) |
| on |
| .I *buf |
| when you have finished with it. |
| .PP |
| .BR print_value , |
| .BR fprint_value , |
| .BR snprint_value |
| and |
| .B sprint_realloc_value |
| do the same as the equivalent |
| .B print_variable |
| routines, but only displaying the value of the variable, without the |
| corresponding object identifier. |
| .PP |
| .BR print_objid , |
| .BR fprint_objid , |
| .BR snprint_objid , |
| and |
| .B sprint_realloc_objid |
| take an object identifier (without an accompanying variable instance) |
| and print out the textual representation. |
| .PP |
| .BI print_description , |
| .BI fprint_description , |
| .BI snprint_description , |
| and |
| .B sprint_realloc_description |
| take an object identifier (as for |
| .B print_objid |
| above) and print out a version of the MIB definition for that object, |
| together with the full OID. The |
| .I width |
| argument controls how the OID is layed out. |
| .PP |
| By default the parser does not save descriptions since they may be |
| huge. In order to be able to print them, you must call |
| .BR snmp_set_save_descriptions(1) . |
| .PP |
| In general the parser is silent about what strangenesses it sees in |
| the MIB files. To get warnings reported, call |
| .B snmp_set_mib_warnings |
| with a |
| .I level |
| of 1 (or 2 for even more warnings). |
| .SH "ENVIRONMENT VARIABLES" |
| .TP 10 |
| MIBDIRS |
| A colon separated list of directories to search for MIB modules. |
| Default: DATADIR/snmp/mibs |
| .TP 10 |
| MIBFILES |
| A colon separated list of files to load. |
| Default: (none) |
| .TP 10 |
| MIBS |
| A colon separated list of MIB modules to load. |
| Default: IP-MIB:IF-MIB:TCP-MIB:UDP-MIB:SNMPv2-MIB: RFC1213-MIB:UCD-SNMP-MIB. |
| .SH "SEE ALSO" |
| .BR snmp_api "(3)" |