.TH SNMP_CONFIG 5 "08 Mar 2010" VVERSIONINFO "Net-SNMP"
.SH NAME
snmp_config - handling of Net-SNMP configuration files
.SH DESCRIPTION
The Net-SNMP package uses various configuration files to configure its 
applications.  This manual page merely describes the overall nature of 
them, so that the other manual pages don't have to.
.SH "DIRECTORIES SEARCHED"
First off, there are numerous places that configuration files can be
found and read from.  By default, the applications look for
configuration files in the following 4 directories, in order:
SYSCONFDIR/snmp,
DATADIR/snmp, LIBDIR/snmp, and $HOME/.snmp.  In each of these
directories, it looks for files snmp.conf, snmpd.conf and/or
snmptrapd.conf, as well as snmp.local.conf, snmpd.local.conf
and/or snmptrapd.local.conf. *.local.conf are always
read last. In this manner, there are
8 default places a configuration file can exist for any given
configuration file type.
.PP
Additionally, the above default search path can be overridden by
setting the environment variable SNMPCONFPATH to a colon-separated
list of directories to search for.  The path for the persistent
data should be included when running applications that use
persistent storage, such as snmpd.
.PP
Applications will read persistent configuration files 
in the following order of preference:
.RS
.PP
file in 
.B SNMP_PERSISTENT_FILE
environment variable
.br
directories in 
.B SNMPCONFPATH
environment variable
.br
directory defined by 
.B
persistentDir 
snmp.conf variable
.br
directory in 
.B
SNMP_PERSISTENT_DIR 
environment variable
.br
default 
.B
PERSISTENT_DIRECTORY 
directory
.RE
.PP
Finally, applications will write persistent configuration files 
in the following order of preference:
.RS
.PP
file in 
.B SNMP_PERSISTENT_FILE
environment variable
.br
directory defined by 
.B
persistentDir 
snmp.conf variable
.br
directory in 
.B
SNMP_PERSISTENT_DIR 
environment variable
.br
default 
.B
PERSISTENT_DIRECTORY 
directory
.RE
.PP
Note:  When using SNMP_PERSISTENT_FILE, the filename should match the 
application name.  For example, /var/net-snmp/snmpd.conf.
.SH "CONFIGURATION FILE TYPES"
Each application may use multiple configuration files, which will
configure various different aspects of the application.  For instance, 
the SNMP agent
.RB ( snmpd )
knows how to understand configuration
directives in both the snmpd.conf and the snmp.conf files.  In fact,
most applications understand how to read the contents of the snmp.conf 
files.  Note, however, that configuration directives understood in one 
file may not be understood in another file.  For further information,
read the associated manual page with each configuration file type.
Also, most of the applications support a 
.B -H
switch on the command line that will list the configuration files it
will look for and the directives in each one that it understands.
.PP
The snmp.conf configuration file is intended to be a application suite 
wide configuration file that supports directives that are useful for
controlling the fundamental nature of all of the SNMP applications,
such as how they all manipulate and parse the textual SNMP MIB files.
.SH "SWITCHING CONFIGURATION TYPES IN MID-FILE"
It's possible to switch in mid-file the configuration type that the
parser is supposed to be reading.  Since that sentence doesn't make
much sense, lets give you an example: say that you wanted to turn on
packet dumping output for the agent by default, but you didn't want to
do that for the rest of the applications (ie, snmpget, snmpwalk, ...).
Normally to enable packet dumping in the configuration file
you'd need to put a line like:
.PP
.RS
dumpPacket true
.RE
.PP
into the snmp.conf file.  But, this would turn it on for all of the
applications.  So, instead, you can put the same line in the
snmpd.conf file so that it only applies to the snmpd daemon.  However,
you need to tell the parser to expect this line.  You do this by
putting a special type specification token inside a [] set.  In other
words, inside your snmpd.conf file you could put the above snmp.conf
directive by adding a line like so:
.PP
.RS
[snmp] dumpPacket true
.RE
.PP
This tells the parser to parse the above line as if it were inside a
snmp.conf file instead of an snmpd.conf file.  If you want to parse a
bunch of lines rather than just one then you can make the context
switch apply to the remainder of the file or until the next context
switch directive by putting the special token on a line by itself:
.PP
.RS
.nf
# make this file handle snmp.conf tokens:
[snmp]
dumpPacket true
logTimestamp true
# return to our original snmpd.conf tokens:
[snmpd]
rocommunity mypublic
.fi
.RE
.PP
The same approach can be used to set configuration directives for a
particular client application (or group of applications).  For example,
any program that uses the 'snmp_parse_args()' call to handle command-line
arguments (including the standard command-line tools shipped as part of the
Net-SNMP distributions) will automatically read the config file 'snmpapp.conf'.
To set library-level settings for these applications (but not other
more-specific tools), use configuration such as the following:
.PP
.RS
[snmp] defCommunity myCommunity
.RE
.PP
for a single directive, or
.PP
.RS
.nf
# make this file handle snmp.conf tokens:
[snmp]
defCommunity myCommunity
defVersion   2c
# return to our original snmpapp.conf tokens:
[snmpapp]
.fi
.RE
.PP
for multiple settings.
Similarly for any other application token (as passed to init_snmp()).
.SH COMMENTS
.PP
Any lines beginning with the character '#' in the configuration files
are treated as a comment and are not parsed.
.SH "INCLUDING OTHER CONFIGURATION FILES"
It is possible to include other configuration files for processing
during normal configuration file processing.:
.PP
.RS
.nf
# include site specific config
includeFile site.conf
.RE
.PP
This will load the specified configuration file. The
path to file must be either absolute, starting with '/',
or relative. The relative path is then relative to the directory
where the parent file with 'includeFile' directive resides.
.PP
The included file name does not need to have '.conf' suffix.
.PP
.RS
.nf
# include a all *.conf files in a directory
includeDir /etc/snmp/config.d
.RE
.PP
This will search specified directory for all files with '.conf'
suffix and process them as if they were included using includeFile
directive. The configuration files are not processed in any particular
order.
.PP
The specified directory must be absolute directory path.
.SH "API INTERFACE"
.PP
Information about writing C code that makes use of this system in
either the agent's MIB modules or in applications can be found in the
.I netsnmp_config_api(3)
manual page.
.SH "SEE ALSO"
snmpconf(1),
netsnmp_config_api(3),
snmp.conf(5),
snmpd.conf(5)
.\" Local Variables:
.\"  mode: nroff
.\" End:
