NETSNMP_CONFIG_API(3) | Net-SNMP | NETSNMP_CONFIG_API(3) |
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
#include <net-snmp/config_api.h>
struct config_line *
register_config_handler(const char *filePrefix,
const char *token,
void (*parser)(const char *, char *),
void (*releaser)(void),
const char *usageLine);
struct config_line *
register_const_config_handler(const char *filePrefix,
const char *token,
void (*parser)(const char *, const char *),
void (*releaser)(void),
const char *usageLine);
struct config_line *
register_prenetsnmp_mib_handler(const char *filePrefix,
const char *token,
void (*parser)(const char *, char *),
void (*releaser)(void),
const char *usageLine);
void unregister_config_handler(const char
*filePrefix,
const char *token);
void register_mib_handlers(void);
void unregister_all_config_handlers(void);
struct config_line *
register_app_config_handler(const char *token,
void (*parser)(const char *, char *),
void (*releaser)(void),
const char *usageLine);
struct config_line *
register_app_prenetsnmp_mib_handler(const char *token,
void (*parser)(const char *, char *),
void (*releaser)(void),
const char *usageLine);
void unregister_app_config_handler(const char
*token);
void read_premib_configs(void);
void read_configs(void);
void read_config_print_usage(char *lead);
void config_pwarn(const char *string);
void config_perror(const char *string);
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:
The idea is that the calling application is able to register handlers for certain tokens specified in certain named configuration files. The 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.
Handler functions should have the following signature:
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).
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 (
releaser ) passed to 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.
Note that this function is not called when the handler is unregistered
individually (but is called as part of
unregister_all_config_handlers() ).
read_premib_configs() is run before the MIB files are read in, and processes those configuration tokens registered using register_prenetsnmp_mib_handler() (or register_app_prenetsnmp_mib_handler() ). All other entries are ignored.
read_configs() is run after the MIB files have been read in, and processes those configuration tokens registered using register_config_handler() (or 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.
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 snmp.conf,
snmp.local.conf, app.conf,
app.local.conf,
(where app 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.
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.
The default list of directories to search is /etc/snmp,
followed by /usr/share/snmp, followed by
/usr/lib/x86_64-linux-gnu/snmp, followed by $HOME/.snmp. This
list can be changed by setting the environmental variable
SNMPCONFPATH to be a (colon separated) list of directories to search.
The normal mode of operation would be to register the application-specific configuration handlers, and then invoke init_snmp(). This would call the routines listed above to register the internal library configuration handlers, process any configuration tokens registered with register_prenetsnmp_mib_handler(), read in the textual MIB files using init_mib(), and finally parse the configuration file tokens registered with register_config_handler().
If the init_snmp() function is used, none of these functions need to be explicitly called by the application.
The usageLine parameter passed to register_config_handler() and similar calls, is used to display help information when the read_config_print_usage() function is called. This function is used by all of the applications when the -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 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 lead prefix will be prepended to each line that the function prints to stderr, where it displays its output.
The init_snmp() function should be called before the read_config_print_usage() function is called, so that the library can register its configuration file directives as well for the read_config_print_usage() function to display.
The two functions config_pwarn() and 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 read_configs() to eventually return with an error code indicating to it's calling function that it should abort the operation of the application.
13 Aug 2010 | V5.9.3 |