// 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.
- in/out - 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: in
- name: @b json_config, type: isc::data::ConstElementPtr, direction: in
- name: @b server_config, type: isc::d2::D2CfgContextPtr, direction: in
- name: @b error, type: std::string, direction: out
- @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.
- Next step status: 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: in
- name: @b tsig_key, type: isc::d2::D2TsigKeyPtr, direction: in/out
- @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.
- Next step status: If any callout sets the status to a different
value than CONTINUE the current server is skipped.
*/