summaryrefslogtreecommitdiffstats
path: root/doc/arm/plugins.inc.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/arm/plugins.inc.rst')
-rw-r--r--doc/arm/plugins.inc.rst85
1 files changed, 85 insertions, 0 deletions
diff --git a/doc/arm/plugins.inc.rst b/doc/arm/plugins.inc.rst
new file mode 100644
index 0000000..7e63995
--- /dev/null
+++ b/doc/arm/plugins.inc.rst
@@ -0,0 +1,85 @@
+.. Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+..
+.. SPDX-License-Identifier: MPL-2.0
+..
+.. This Source Code Form is subject to the terms of the Mozilla Public
+.. License, v. 2.0. If a copy of the MPL was not distributed with this
+.. file, you can obtain one at https://mozilla.org/MPL/2.0/.
+..
+.. See the COPYRIGHT file distributed with this work for additional
+.. information regarding copyright ownership.
+
+.. _module-info:
+
+Plugins
+~~~~~~~
+
+Plugins are a mechanism to extend the functionality of :iscman:`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 :iscman:`filter-aaaa.so <filter-aaaa>`, which
+replaces the ``filter-aaaa`` feature that previously existed natively as
+part of :iscman:`named`. The code for this feature has been removed from
+:iscman:`named` and can no longer be configured using standard :iscman:`named.conf`
+syntax, but linking in the :iscman:`filter-aaaa.so <filter-aaaa>` plugin provides identical
+functionality.
+
+Configuring Plugins
+~~~~~~~~~~~~~~~~~~~
+.. namedconf:statement:: plugin
+ :tags: server
+ :short: Configures plugins in :iscman:`named.conf`.
+
+A plugin is configured with the :any:`plugin` statement in :iscman:`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 :any:`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 differs 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
+ :iscman:`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 :iscman:`named` source code, there are "hook
+points" at which a plugin may register itself. When a hook point is
+reached while :iscman:`named` is running, it is checked to see whether any
+plugins have registered themselves there; if so, the associated "hook
+action" - a function within the plugin library - is called. 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``.