| .TH READ_CONFIG 3 "23 Feb 2003" "" "Net-SNMP" |
| .SH NAME |
| register_config_handler, register_premib_handler |
| unregister_config_handler, register_mib_handlers, read_configs, |
| read_premib_configs, config_perror, config_pwarn - read_config functions |
| .SH SYNOPSIS |
| .B #include <net-snmp/config_api.h> |
| .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_premib_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 |
| .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_premib_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 ");" |
| .PP |
| .BI "void read_config_print_usage(char *" lead ");" |
| .PP |
| .B "void read_configs(void);" |
| .PP |
| .B "void read_premib_configs(void);" |
| .PP |
| .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 types of |
| .I files. |
| The |
| .B read_configs() |
| function can then be called to look for all the files that it has |
| registrations for, find the first word on each line, and pass the |
| remainder to the appropriately registered handler. |
| .SH TOKEN HANDLERS |
| .PP |
| Handler functions should have the following signature: |
| .PP |
| .RS |
| .BI "void handler(const char *" token ", char *" line ");" |
| .RE |
| .PP |
| The function will be called with two arguments, the first being the |
| token that triggered the call to this function (which would be one of |
| the tokens that the function had been registered for), and the second |
| being the remainder of the configuration file line beyond the white |
| space following the token. |
| .SH RESOURCE FREEING HANDLERS |
| .PP |
| If the parameter |
| .I releaser |
| passed to |
| .B register_config_handler |
| is non-NULL, then the function specified is called if and when the |
| configuration files are re-read. 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 will |
| then be called again. No arguments are passed to the resource freeing |
| handler. |
| .SH REGISTERING A HANDLER |
| .TP |
| .B register_config_handler() |
| The |
| .B handler() |
| function above could be registered for the configuration file |
| .I snmp.conf, |
| with the token |
| .I genericToken |
| and the help string (discussed later) |
| .I """ARG1 [ARG2]""" |
| using the following call to the |
| .B register_config_handler() |
| function: |
| .PP |
| .RS |
| .RS |
| register_config_handler("snmp", "genericToken", handler, NULL, "ARG1 [ARG2]"); |
| .RE |
| .RE |
| .IP |
| This would register the |
| .B 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 "genericToken" (see |
| .B read_configs() |
| below). |
| .TP |
| .B register_premib_handler() |
| The |
| .B register_premib_handler() |
| function works identically to the |
| .B register_config_handler() |
| function but is intended for config file tokens that need to be read |
| in before the textual MIBs are read in, probably because they will be |
| used to configure the MIB parser. It is rarely the case that anything |
| but the SNMP library itself should need to use this function. |
| .TP |
| .B unregister_config_handler() |
| Removes the registered configuration handler for the |
| .I filePrefix |
| and |
| .IR token . |
| |
| .TP |
| .B register_app_config_handler() |
| .TP |
| .B register_app_premib_handler() |
| .TP |
| .B unregister_app_config_handler() |
| These functions are analagous to |
| .BR register_config_handler() ", " register_premib_handler() " and " |
| .B unregister_config_handler() |
| but don't 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 HELP STRINGS |
| .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. |
| .SH READING CONFIGURATION FILES |
| .TP |
| .B init_snmp() |
| Once the relevant configuration token parsers have been registered, |
| .B init_snmp() |
| should be called. It will parse the configuration file tokens |
| registered with |
| .B register_premib_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 the following functions need to be called by |
| the application: |
| .TP |
| .B register_mib_handlers() |
| The SNMP library's routine to register its configuration file |
| handlers. |
| .TP |
| .B read_premib_configs() |
| The routine that parses the configuration files for tokens registered |
| to be dealt with before the textual MIBs are read in. See |
| .B read_configs() |
| below. |
| .TP |
| .B read_configs() |
| Reads all the configuration files it can find in the |
| .I SNMPCONFPATH |
| environment variable (or its default value) for tokens and |
| appropriately calls the handlers registered to it, or prints a |
| "Unknown token" warning message. It looks for any file that it has |
| previously received a registration request for. |
| .SH CONFIGURATION FILES READ |
| .PP |
| The configuration files read are found by using the colon separated |
| .I SNMPCONFPATH |
| environment variable (or its default value, which will be |
| SYSCONFDIR/snmp, followed by |
| DATADIR/snmp, followed by LIBDIR/snmp, followed by $HOME/.snmp) and |
| reading in the files found that match both the prefix registered and |
| the two suffixes |
| .I .conf |
| and |
| .I .local.conf. |
| 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. They do not need to be present, and will |
| only be read if found. |
| .SH 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" |
| .BR mib_api "(3), " snmp_api (3) |
| .\" Local Variables: |
| .\" mode: nroff |
| .\" End: |