.TH NETSNMP_CONFIG_API 3 "13 Aug 2010" VVERSIONINFO "Net-SNMP"
.SH NAME
register_config_handler,
register_const_config_handler,
register_prenetsnmp_mib_handler,
unregister_config_handler,
register_mib_handlers,
unregister_all_config_handlers,
register_app_config_handler,
register_app_prenetsnmp_mib_handler,
unregister_app_config_handler,
read_configs,
read_premib_configs,
read_config_print_usage,
config_perror,
config_pwarn - netsnmp_config_api functions
.SH SYNOPSIS
.B #include <net-snmp/config_api.h>
.br
.SS Config Handlers
.PP
.B struct config_line *
.br
.BI "  register_config_handler(const char *" filePrefix ",
.br
.BI "                     const char *" token ,
.br
.BI "                     void (*" parser ")(const char *, char *),"
.br
.BI "                     void (*" releaser ")(void),"
.br
.BI "                     const char *"usageLine ");"
.PP
.B struct config_line *
.br
.BI "  register_const_config_handler(const char *" filePrefix ", 
.br
.BI "                     const char *" token ,
.br
.BI "                     void (*" parser ")(const char *, const char *),"
.br
.BI "                     void (*" releaser ")(void),"
.br
.BI "                     const char *" usageLine ");"
.PP
.PP
.B struct config_line *
.br
.BI "  register_prenetsnmp_mib_handler(const char *" filePrefix ", 
.br
.BI "                     const char *" token ,
.br
.BI "                     void (*" parser ")(const char *, char *),"
.br
.BI "                     void (*" releaser ")(void),"
.br
.BI "                     const char *" usageLine ");"
.PP
.BI "void unregister_config_handler(const char *" filePrefix ","
.br
.BI "                     const char *" token ");"
.PP
.\" Defined in mib.c, rather than read_config.c
.B  "void register_mib_handlers(void);"
.br
.B  "void unregister_all_config_handlers(void);"
.br
.SS Application Handlers
.PP
.B struct config_line *
.br
.BI "  register_app_config_handler(const char *" token ,
.br
.BI "                     void (*" parser ")(const char *, char *),"
.br
.BI "                     void (*" releaser ")(void),"
.br
.BI "                     const char *"usageLine ");"
.PP
.B struct config_line *
.br
.BI "  register_app_prenetsnmp_mib_handler(const char *" token ,
.br
.BI "                     void (*" parser ")(const char *, char *),"
.br
.BI "                     void (*" releaser ")(void),"
.br
.BI "                     const char *" usageLine ");"
.PP
.BI "void unregister_app_config_handler(const char *" token ");"
.br
.SS Reading Configuration Files
.PP
.B "void read_premib_configs(void);"
.br
.B "void read_configs(void);"
.br
.SS Help Strings and Errors
.PP
.BI "void read_config_print_usage(char *" lead ");"
.br
.BI "void config_pwarn(const char *" string ");"
.br
.BI "void config_perror(const char *" string ");"

.SH DESCRIPTION
The functions are a fairly extensible system of parsing various
configuration files at the run time of an application.  The
configuration file flow is broken into the following phases:
.RS 4
.TP 4
1.
Registration of handlers.
.TP
2.
Reading of the configuration files for pre-MIB parsing requirements.
.TP
3.
Reading and parsing of the textual MIB files.
.TP
4.
Reading of the configuration files for configuration directives.
.TP
5.
Optionally re-reading the configuration files at a future date.
.RE
.PP
The idea is that the calling application is able to register
.I handlers
for certain
.I tokens
specified in certain named
.I "configuration files."
The 
.B read_configs()
function can then be called to look for all relevant configuration files,
match the first word on each line against the list of registered tokens
and pass the remainder of the line to the appropriate registered handler.
.SH REGISTERING A HANDLER
.TP
.B register_config_handler()
Registers a configuration handler routine, which should be called
to process configuration directives starting with the specified token.
For example:
.PP
.RS
.RS
register_config_handler("snmp", "exampleToken", example_handler, NULL, "ARG1 [ARG2]");
.RE
.RE
.IP
would register the
.B example_handler()
function so that it will get called every time the first word of a
line in the 
.I snmp.conf
configuration file(s) matches "exampleToken".
.br
Calling the appropriate handlers to process the configuration file directives
is the responsibility of 
.B read_configs() 
(see below).
.TP
.B register_const_config_handler()
Similar to the
.B register_config_handler()
function, but the parser routine is explicitly constrained
to not modify the string being parsed.
.TP
.B register_prenetsnmp_mib_handler()
Similar to the
.B register_config_handler()
function, but the registered handler routine will be called
\fIbefore\fP the textual MIBs are read in.
This is typically used for tokens that will affect the configuration of
the MIB parser, and will normally only be used within the SNMP library itself.
.TP
.B register_mib_handlers()
Initialisation routine to register the internal SNMP library configuration handlers.
.TP
.B unregister_config_handler()
Removes the registered configuration handler for the specified
.I filePrefix
and
.IR token .
.TP
.B unregister_all_config_handlers()
Removes all registered configuration handlers.

.SS Token Handlers
.PP
Handler functions should have the following signature:
.PP
.RS
.BI "void handler(const char *" token ", char *" line ");"
.br
or
.br
.BI "void handler(const char *" token ", const char *" line ");"
br
(if registered using \fIregister_const_config_handler\fP)
.RE
.PP
The function will be called with two arguments, the first being the
token that triggered the call to this function (i.e. the token used
when registering the handler), and the second
being the remainder of the configuration file line (i.e. everything
following the white space following the matched token).

.SS Freeing Handlers
.PP
If the token handler function dynamically allocates resources when
processing a configuration entry, then these may need to be released
before re-reading the configuration files.
If the fourth parameter (
.I releaser
) passed to
.B register_config_handler
is non-NULL, then this specifies a function to be called before
re-reading the configuration files.  This function should free any
resources allocated by the token handler function and reset its notion
of the configuration to its default.  The token handler function can
then safely be called again.
No arguments are passed to the resource freeing handler.
.br
Note that this function is not called when the handler is
unregistered individually (but \fIis\fP called as part of
.B unregister_all_config_handlers()
).

.SS Application Handlers
.TP
.B register_app_config_handler()
.TP
.B register_app_prenetsnmp_mib_handler()
.TP
.B unregister_app_config_handler()
These functions are analagous to 
.BR register_config_handler() ", " register_prenetsnmp_mib_handler() " and "
.B unregister_config_handler()
but do not require the file type argument (which is filled in by the
application).  It is intended that MIB modules written for the agent
use these functions to allow the agent to have more control over which
configuration files are read (typically the
.I snmpd.conf
files).
.SH READING CONFIGURATION FILES
.TP
.B read_premib_configs()
.TP
.B read_configs()
These routines process the configuration files found in the
configuration search path (see below).  For each entry, the
handler registered for that configuration token is called.
.PP
.B read_premib_configs()
is run before the MIB files are read in, and processes those
configuration tokens registered using
.B register_prenetsnmp_mib_handler()
(or
.B register_app_prenetsnmp_mib_handler()
).
All other entries are ignored.
.PP
.B read_configs()
is run after the MIB files have been read in, and processes those
configuration tokens registered using
.B register_config_handler()
(or
.B register_app_config_handler()
).
If it encounters a configuration token for which no handler has
been registered (either pre- or post-mib), then it will display
a warning message, and continue processing with the next line
of the configuration file.
.SS Configuration Search Path
.PP
The configuration files to be read are found by searching a list
of configuration directories for appropriately named files.
In each such directory, the library will look for files named
\fC snmp.conf\fP,
\fC snmp.local.conf\fP,
\fI app\fP\fC.conf\fP,
\fI app\fP\fC.local.conf\fP,
.br
(where \fIapp\fP is the appication-specific filePrefix used to
register configuration handlers).
It is not necessary for any or all of these files to be present
in each directory.  Missing files will be silently skipped.
.br
The idea behind the two different suffixes is that the first file can
be shared (via rdist or an NFS mount) across a large number of
machines and the second file can be used to configure local settings
for one particular machine.
.PP
The default list of directories to search is \fC SYSCONFDIR/snmp\fP,
followed by \fC DATADIR/snmp\fP,
followed by \fC LIBDIR/snmp\fP,
followed by \fC $HOME/.snmp\fP.
This list can be changed by setting the environmental variable
.I SNMPCONFPATH
to be a (colon separated) list of directories to search.
.br
.SS init_snmp()
.PP
The normal mode of operation would be to register the application-specific
configuration handlers, and then invoke
.BR init_snmp() "."
This would call the routines listed above to register the internal library
configuration handlers, process any configuration tokens registered with
.B register_prenetsnmp_mib_handler(),
read in the textual MIB files using
.B init_mib(),
and finally parse the configuration file tokens registered with 
.BR register_config_handler() .
.PP
If the 
.B init_snmp()
function is used, none of these functions need to be explicitly
called by the application.
.SH HELP STRINGS AND ERRORS
.PP
The
.I usageLine
parameter passed to
.B register_config_handler()
and similar calls, is used to display help information when the
.B read_config_print_usage()
function is called.  This function is used by all of the applications
when the 
.B -H
flag is passed on the command line.  It prints a summary of all of the
configuration file lines, and the associated files, that the
configuration system understands.  The
.I usageLine
parameter should be a list of arguments expected after the token, and
not a lengthy description (which should go into a manual page
instead).  The
.I lead
prefix will be prepended to each line that the function prints to
stderr, where it displays its output.
.PP
The
.B init_snmp()
function should be called before the
.B read_config_print_usage()
function is called, so that the library can register its configuration 
file directives as well for the 
.B read_config_print_usage()
function to display.
.SS Error Handling Functions
.PP
The two functions
.B config_pwarn()
and
.B config_perror()
both take an error string as an argument and print it to stderr along
with the file and line number that caused the error.  A call to the
second function will also force 
.B read_configs() 
to eventually return with an error code indicating to it's calling
function that it should abort the operation of the application.
.SH "ENVIRONMENT VARIABLES"
.TP 10
SNMPCONFPATH
A colon separated list of directories to search for configuration
files in.
Default: SYSCONFDIR/snmp:DATADIR/snmp:LIBDIR/snmp:$HOME/.snmp
.SH "SEE ALSO"
netsnmp_mib_api(3), snmp_api(3)
.\" Local Variables:
.\"  mode: nroff
.\" End:
