Configuration scheme
====================

Configuration is in an INI-like format.  Sections start with lines
`[...]`.  Every setting must be in a section.  `#` and `;`
comment lines are supported.  Settings are `name = value`.  Whitespace
around the name and value is ignored.

The configuration files are resolved to a configuration for each
pairwise **link** between a client and a server.

Sections
--------

The same config key may appear in multiple sections; for example, in a
section specific to a link, as well as one for all links to a server.

Unless otherwise specified, any particular config setting for a
particular link is the value from the first of the following
applicable sections, or failing that the built-in default:

  * `[<servername> <client>]`
  * `[<client>]`
  * `[<servername>]` (often `[SERVER]`)
  * `[COMMON]`

`<client>` is the client's virtual address in IPv4 or IPv6 literal
syntax (without any surrounding `[..]`.

`<servername>` must be in the syntax of a valid lowercase DNS
hostname (and not look like an address), or be literally `SERVER`.

There are also these special sections:

 * `[<servername> LIMIT]`
 * `[LIMIT]`

Files
-----

Both client and server read the files

 * `/etc/hippotat/main.cfg` (if it exists)
 * `/etc/hippotat/config.d/*`
 * `/etc/hippotat/secrets.d/*`

Here `*` means all contained files whose names consists of only
ascii alphanumerics plus `-` and `_`.

The `--config` option can be used to override the directory (usually
`/etc/hippotat`).  Additionally each `--extra-config` option names
an existing file or directory to be processed analogously.

The ini file format sections from these files are all unioned.  Later
files (in the list above, or alphabetically later) can override
settings from earlier ones.

Note that although it is conventional for information for a particular
server or client to be in a file named after that endpoint, there is
no semantic link: all the files are always read and the appropriate
section from each is applied to every link.

(If `main.cfg` does not exist, `master.cfg` will be tried for
backward compatibility reasons.)
