--- /dev/null
+<!--
+ - Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ -
+ - 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 http://mozilla.org/MPL/2.0/.
+ -
+ - See the COPYRIGHT file distributed with this work for additional
+ - information regarding copyright ownership.
+-->
+
+<!-- Converted by db4-upgrade version 1.0 -->
+<section xmlns:db="http://docbook.org/ns/docbook" version="5.0" xml:id="module-info"><info><title>Plugins</title></info>
+
+ <para>
+ Plugins are a mechanism to extend the functionality of
+ <command>named</command> 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.
+ </para>
+ <para>
+ 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.
+ </para>
+ <para>
+ The only plugin currently included in BIND is
+ <filename>filter-aaaa.so</filename>, which replaces the
+ <command>filter-aaaa</command> feature that previously existed natively
+ as part of <command>named</command>.
+ The code for this feature has been removed from <command>named</command>,
+ and can no longer be configured using standard
+ <filename>named.conf</filename> syntax, but linking in the
+ <filename>filter-aaaa.so</filename> plugin provides identical
+ functionality.
+ </para>
+
+ <section><info><title>Configuring Plugins</title></info>
+ <para>
+ A plugin is configured with the <command>plugin</command>
+ statement in <filename>named.conf</filename>:
+ </para>
+ <screen>
+ plugin query "library.so" {
+ <replaceable>parameters</replaceable>
+ };
+ </screen>
+ <para>
+ In this example, file <filename>library.so</filename> is the plugin
+ library. <literal>query</literal> indicates that this is a query
+ plugin.
+ <para>
+ </para>
+ Multiple <command>plugin</command> statements can be specified, to load
+ different plugins or multiple instances of the same plugin.
+ </para>
+ <para>
+ <replaceable>parameters</replaceable> are passed as an opaque
+ string to the plugin's initialization routine. Configuration
+ syntax will differ depending on the module.
+ </para>
+ </section>
+
+ <section><info><title>Developing Plugins</title></info>
+ <para>
+ Each plugin implements four functions:
+ <itemizedlist>
+ <listitem><command>plugin_register</command> to allocate memory,
+ configure a plugin instance, and attach to hook points within
+ <command>named</command>,</listitem>
+ <listitem><command>plugin_destroy</command> to tear down the plugin
+ instance and free memory,</listitem>
+ <listitem><command>plugin_version</command> to check that the plugin
+ is compatible with the current version of the plugin API,</listitem>
+ <listitem><command>plugin_check</command> to test syntactic
+ correctness of the plugin parameters.</listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ At various locations within the <command>named</command> source code,
+ there are "hook points" at which a plugin may register itself.
+ When a hook point is reached while <command>named</command> 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
+ <filename>lib/ns/include/ns/hooks.h</filename>.
+ </para>
+ </section>
+
+</section>