.\" Portions of this file are subject to the following copyright.  See
.\" the Net-SNMP's COPYING file for more details and other copyrights
.\" that may apply:
.\" /***********************************************************
.\" Portions of this file are copyrighted by:
.\" Copyright Copyright 2003 Sun Microsystems, Inc. All rights reserved.
.\" Use is subject to license terms specified in the COPYING file
.\" distributed with the Net-SNMP package.
.\" ******************************************************************/
.TH MIB2C 1 "05 Apr 2010" VVERSIONINFO "Net-SNMP"
.SH NAME
mib2c -- generate template code for extending the agent
.SH SYNOPSIS
.B mib2c
[-h] -c CONFIGFILE [-I PATH] [-f OUTNAME] [-i][-s][-q][-S VAR=VAL] MIBNODE
.SH DESCRIPTION
The mib2c tool is designed to take a portion of the MIB tree (as defined
by a MIB file) and generate the template C code necessary to implement
the relevant management objects within it.
.PP
In order to implement a new MIB module, three files are necessary:
.PP
.br
- MIB definition file
.br
- C header file
.br
- C implementation file.
.PP
The mib2c tool uses the MIB definition file to produce the two C
code files. Thus, mib2c generates a template that you can edit
to add logic necessary to obtain information from the
operating system or application to complete the module.
.PP
MIBNODE is the top level mib node you want to generate code for.
You must give mib2c a mib node (e.g. ifTable) on the command line,
not a mib file.  This is the single most common mistake.
.PP
The mib2c tool accepts both SMIv1 and SMIv2 MIBs.
.PP
mib2c needs to be able to find and load a MIB file in order to generate
C code for the MIB. To enable mib2c to find the MIB file, set the
MIBS environment variable to include the MIB file you are using.
An example of setting this environment variable is:
.PP
   MIBS=+NET-SNMP-TUTORIAL-MIB
.PP
   or
.PP
   MIBS=ALL
.PP
The first example ensures that mib2c finds the NET-SNMP-TUTORIAL-MIB
mib, in addition to the default MIB modules. The default list of MIB
modules is set when the suite is first configured and built and
basically corresponds to the list of modules that the agent supports.
The second example ensures that mib2c finds all MIBs in the search
location for MIB files. The default search location for MIB files is
DATADIR/snmp/mibs. This search location can be modified
by the MIBDIRS environment variable.
.PP
Both the MIB files to be loaded and the MIB file search location can
also be configured in the snmp.conf file. Please see snmp.conf(5) for
more information.
.PP
The generated *.c and *.h files will be created in the current working
directory.
.SH "OPTIONS"
.TP
.BI -h
Display a help message.
.TP
.BI -c " CONFIGFILE"
Use CONFIGFILE when generating code.  These files will be searched for
first in the current directory and then in the DATADIR directory
(which is where the default mib2c configuration files can be found).
Running mib2c without the -c CONFIGFILE option will display
a description of the valid values for CONFIGFILE, that is,
the available config files, including new ones that you might
author.
.IP 
For example,
.IP 
% mib2c ifTable
.IP 
will display a description of the currently available values
for CONFIGFILE.
.IP 
The following values are supported for CONFIGFILE:
.IP 
mib2c.mfd.conf
.br
mib2c.scalar.conf
.br
mib2c.int_watch.conf
.br
mib2c.iterate.conf
.br
mib2c.create-dataset.conf
.br
mib2c.array-user.conf
.br
mib2c.column_defines.conf
.br
mib2c.column_enums.conf
.IP 
GENERATING CODE FOR SCALAR OBJECTS:
.IP 
If you're writing code for some scalars, run:

	mib2c -c mib2c.scalar.conf MIBNODE
.IP 
If you want to magically "tie" integer variables to integer
scalars, use:

	mib2c -c mib2c.int_watch.conf MIBNODE
.IP 
GENERATING CODE FOR TABLES:

The recommended configuration file for tables is the MIBs for
Dummies, or MFD, configuration file. It hides as much of the SNMP
details as possible, generating small, easy to understand functions.
It is also the most flexible and well documented configuration file.
See the agent/mibgroup/if-mib/ifTable/ifTable*.c files for an example:

        mib2c -c mib2c.mfd.conf MIBNODE

If your table data is kept somewhere else (e.g. it's in the
kernel and not in the memory of the agent itself) and you need to
"iterate" over it to find the right data for the SNMP row being
accessed.  See the agent/mibgroup/mibII/vacm_context.c file for an
example:

	mib2c -c mib2c.iterate.conf MIBNODE

If your table data is kept in the agent (i.e. it's not located in
an external source) and is purely data driven (i.e. you do not need
to perform any work when a set occurs).  See the
agent/mibgroup/examples/data_set.c file for an example of such a
table:

	mib2c -c mib2c.create-dataset.conf MIBNODE

If your table data is kept in the agent (i.e. it's not located in
an external source), and you can keep your data sorted by the table
index but you do need to perform work when a set occurs:

	mib2c -c mib2c.array-user.conf MIBNODE

GENERATING HEADER FILE DEFINITIONS

To generate just a header with a define for each column number in
your table:

	mib2c -c mib2c.column_defines.conf MIBNODE

To generate just a header with a define for each enum for any
column containing enums:

	mib2c -c mib2c.column_enums.conf MIBNODE

	GENERATING CODE FOR THE 4.X LINE OF CODE (THE OLDER API)

	mib2c -c mib2c.old-api.conf MIBNODE
.TP
.BI -I PATH
Search for configuration files in PATH.  Multiple paths can be
specified using multiple -I switches or by using one with a comma
separated list of paths in it.
.TP
.BI -f " OUTNAME"
Places the output code into OUTNAME.c and OUTNAME.h. Normally, mib2c
will place the output code into files which correspond to the table
names it is generating code for, which is probably what you want anyway.
.TP
.BI -i
Do not run indent on the resulting code.
.TP
.BI -s
Do not look for MIBNODE.sed and run sed on the resulting code. This
is useful to shorten long mib variable names in the code.
.TP
.BI -q
Run in "quiet" mode, which minimizes the status messages
mib2c generates.
.TP
.BI -S VAR=VAL
Preset a variable VAR, in the mib2c.*.conf file, to the value
VAL. None of the existing mib2c configuration files
(mib2c.*.conf) currently makes use of this feature, however,
so this option should be considered available only for future use.
.SH EXAMPLES
.PP
The following generates C template code for the header and implementation
files to implement UCD-DEMO-MIB::ucdDemoPublic.
.IP
% mib2c -c mib2c.scalar.conf ucdDemoPublic
.br
writing to ucdDemoPublic.h
.br
writing to ucdDemoPublic.c
.br
running indent on ucdDemoPublic.h
.br
running indent on ucdDemoPublic.c
.PP
The resulting ucdDemoPublic.c and ucdDemoPublic.h files are
generated the current working directory.
.PP
The following generates C template code for the header and implementation
files  for the module to implement TCP-MIB::tcpConnTable.
.IP
% mib2c -c mib2c.iterate.conf tcpConnTable
.br
writing to tcpConnTable.h
.br
writing to tcpConnTable.c
.br
running indent on tcpConnTable.h
.br
running indent on tcpConnTable.c
.PP
The resulting tcpConnTable.c and tcpConnTable.h files are generated
in the current working directory.
.PP
.SH SEE ALSO
.PP
snmpcmd(1), snmp.conf(5)
