Plugins
Plugins are a mechanism to extend the functionality of
named using dynamically loadable libraries.
By using plugins, core server functionality can be kept simple
for the majority of users; more complex code implementing optional
features need only be installed by users that need those features.
The plugin interface is a work in progress, and is expected to evolve
as more plugins are added. Currently, only "query plugins" are supported;
these modify the name server query logic. Other plugin types may be added
in the future.
The only plugin currently included in BIND is
filter-aaaa.so, which replaces the
filter-aaaa feature that previously existed natively
as part of named.
The code for this feature has been removed from named,
and can no longer be configured using standard
named.conf syntax, but linking in the
filter-aaaa.so plugin provides identical
functionality.
Configuring Plugins
A plugin is configured with the plugin
statement in named.conf:
plugin query "library.so" {
parameters
};
In this example, file library.so is the plugin
library. query indicates that this is a query
plugin.
Multiple plugin statements can be specified, to load
different plugins or multiple instances of the same plugin.
parameters are passed as an opaque
string to the plugin's initialization routine. Configuration
syntax will differ depending on the module.
Developing Plugins
Each plugin implements four functions:
plugin_register to allocate memory,
configure a plugin instance, and attach to hook points within
named,
plugin_destroy to tear down the plugin
instance and free memory,
plugin_version to check that the plugin
is compatible with the current version of the plugin API,
plugin_check to test syntactic
correctness of the plugin parameters.
At various locations within the named source code,
there are "hook points" at which a plugin may register itself.
When a hook point is reached while named is
running, it is checked to see whether any plugins have registered
themselves there; if so, the associated "hook action" is called -
this is a function within the plugin library. Hook actions may
examine the runtime state and make changes - for example, modifying
the answers to be sent back to a client or forcing a query to be
aborted. More details can be found in the file
lib/ns/include/ns/hooks.h.