summaryrefslogtreecommitdiffstats
path: root/src/bin/d2/d2_hooks.dox
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/d2/d2_hooks.dox')
-rw-r--r--src/bin/d2/d2_hooks.dox81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/bin/d2/d2_hooks.dox b/src/bin/d2/d2_hooks.dox
new file mode 100644
index 0000000..0c33820
--- /dev/null
+++ b/src/bin/d2/d2_hooks.dox
@@ -0,0 +1,81 @@
+// Copyright (C) 2021 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/.
+
+/**
+ @page d2Hooks The Hooks API for the Kea DHCP DDNS (D2)
+
+ @section d2HooksIntroduction Introduction
+ Kea features an API (the "Hooks" API) that allows user-written code to
+ be integrated into Kea and called at specific points in its processing.
+ An overview of the API and a tutorial for writing such code can be found in
+ the @ref hooksdgDevelopersGuide. It also includes information how hooks
+ framework can be used to implement additional control commands for
+ Kea DHCP DDNS. Information for Kea maintainers can be found in the
+ @ref hooksComponentDeveloperGuide.
+
+ This manual is more specialized and is aimed at developers of hook
+ code for Kea DHCP DDNS. It describes each hook point, what the callouts
+ attached to the hook are able to do, and the arguments passed to the
+ callouts. Each entry in this manual has the following information:
+
+ - Name of the hook point.
+ - Arguments for the callout. As well as the argument name and data type, the
+ information includes the direction, which can be one of:
+ - @b in - the server passes values to the callout but ignored any data
+ returned.
+ - @b out - the callout is expected to set this value.
+ - <b>in/out</b> - the server passes a value to the callout and uses whatever
+ value the callout sends back. Note that the callout may choose not to
+ do any modification, in which case the server will use whatever value
+ it sent to the callout.
+ - Description of the hook. This explains where in the processing the hook
+ is located, the possible actions a callout attached to this hook could take,
+ and a description of the data passed to the callouts.
+ - Next step status: the action taken by the server when a callout chooses to set
+ status to specified value. Actions not listed explicitly are not supported.
+ If a callout sets status to unsupported value, this specific value will be
+ ignored and treated as if the status was CONTINUE.
+
+@section d2HooksHookPoints Hooks in Kea DHCP DDNS
+
+The following list is roughly ordered by appearance of specific hook points during
+packet processing, but the exact order depends on the actual processing. Hook points
+that are not specific to packet processing (e.g. lease expiration) will be added
+to the end of this list.
+
+ @subsection d2HooksD2SrvConfigured d2_srv_configured
+ - @b Arguments:
+ - name: @b io_context, type: isc::asiolink::IOServicePtr, direction: <b>in</b>
+ - name: @b json_config, type: isc::data::ConstElementPtr, direction: <b>in</b>
+ - name: @b server_config, type: isc::d2::D2CfgContextPtr, direction: <b>in</b>
+ - name: @b error, type: std::string, direction: <b>out</b>
+
+ - @b Description: this callout is executed when the server has completed
+ its (re)configuration. The server provides received and parsed configuration
+ structures to the hook library. It also provides a pointer to the IOService
+ object which is used by the server to run asynchronous operations. The hooks
+ libraries can use this IOService object to schedule asynchronous tasks which
+ are triggered by the Kea DHCP DDNS's main loop. The hook library should hold
+ the provided pointer until the library is unloaded. The D2CfgContext
+ object provides access to the D2 running configuration.
+
+ - <b>Next step status</b>: If any callout sets the status to DROP, the server
+ considers the configuration is incorrect and rejects it using the error
+ string as an error message.
+
+ @subsection d2HooksSelectKey select_key
+ - @b Arguments:
+ - name: @b current_server, type: isc::d2::DnsServerInfoPtr, direction: <b>in</b>
+ - name: @b tsig_key, type: isc::d2::D2TsigKeyPtr, direction: <b>in/out</b>
+
+ - @b Description: this callout is executed when the D2 is selecting for
+ a TSIG key to protect the next DNS update to the already chosen DNS
+ server. Pointers to the current DNS server and TSIG key are provided.
+ If a hook library wants to use another TSIG key the pointer must be updated.
+
+ - <b>Next step status</b>: If any callout sets the status to a different
+ value than CONTINUE the current server is skipped.
+*/