|
@@ -8,8 +8,8 @@
|
|
|
|
|
|
@mainpage Kea Lease Commands Hooks Library
|
|
|
|
|
|
-Welcome to Kea Lease Commands Hooks Library. This documentation is addressed at
|
|
|
-developers who are interested in internal operation of the Lease Commands
|
|
|
+Welcome to Kea Lease Commands Hooks Library. This documentation is addressed to
|
|
|
+developers who are interested in the internal operation of the Lease Commands
|
|
|
library. This file provides information needed to understand and perhaps extend
|
|
|
this library.
|
|
|
|
|
@@ -29,22 +29,21 @@ command is issued (be it directly via control channel or indirectly via REST
|
|
|
interface from control agent), the code receives a JSON command with
|
|
|
parameters. Those are parsed and then actual operation commences. This
|
|
|
operation always interacts with an instantiation of isc::dhcp::LeaseMgr
|
|
|
-instance, which is Kea's way of storing leases. At time of writing this text
|
|
|
+instance, which is Kea's way of storing leases. At the time of writing this text
|
|
|
(Aug. 2017), Kea supports four types of lease managers: memfile, MySQL,
|
|
|
-PostgreSQL or Cassandra. Those commands provide a unified interface for those
|
|
|
-backends.
|
|
|
+PostgreSQL or Cassandra. The lease commands provided by this library
|
|
|
+provide a unified interface for those backends.
|
|
|
|
|
|
-As with other hooks, also this one keeps its code in separate namespace, which
|
|
|
+As with other hooks, this one also keeps its code in a separate namespace which
|
|
|
corresponds to the file name of the library: isc::lease_cmds.
|
|
|
|
|
|
@section lease_cmdsCode Lease Commands Code Overview
|
|
|
|
|
|
-The library operation starts with Kea calling load() function (file
|
|
|
-load_unload.cc). It instantiates isc::lease_cmds::LeaseCmds object. Constructor
|
|
|
-of that object registers all commands. For a list, see @ref
|
|
|
-isc::lease_cmds::LeaseCmds class documentation. This class uses Pimpl design
|
|
|
-pattern, thus the real implementation is hidden in
|
|
|
-isc::lease_cmds::LeaseCmdsImpl.
|
|
|
+The library operation starts with Kea calling the load() function (file
|
|
|
+load_unload.cc). It instantiates an isc::lease_cmds::LeaseCmds object.
|
|
|
+The constructor of that object registers all of the lease commands. For a list,
|
|
|
+see @ref isc::lease_cmds::LeaseCmds class documentation. This class uses Pimpl
|
|
|
+design pattern, thus the real implementation is hidden in isc::lease_cmds::LeaseCmdsImpl.
|
|
|
|
|
|
Almost every command has its own handler, except few that share the same handler
|
|
|
between v4 and v6 due to its similarity. For example
|
|
@@ -69,29 +68,29 @@ For details see documentation and code of the following handlers:
|
|
|
|
|
|
@section lease_cmdsDesigns Lease Commands Design choices
|
|
|
|
|
|
-The lease manipulation commands were implemented to provide convenient interface
|
|
|
+The lease manipulation commands were implemented to provide a convenient interface
|
|
|
for sysadmins. The primary goal was to offer a way to interact with the live
|
|
|
lease database in unified way, regardless of the actual backend being used.
|
|
|
|
|
|
For some backends (MySQL, PostgreSQL and Cassandra) it is possible to interact
|
|
|
-with the backend while Kea is running and possibly change its content. This
|
|
|
-is both powerful and dangerous ability. In particular, only rudimentary
|
|
|
+directly with the backend while Kea is running and possibly change its content. This
|
|
|
+ability is both powerful and dangerous. In particular, only rudimentary
|
|
|
checks are enforced by the DB schemas (e.g. not possible to have two leases
|
|
|
for the same address). However, it does not prevent sysadmins from making
|
|
|
more obscure errors, like inserting leases for subnets that do not exist
|
|
|
-or configing an address that is topologically outside of the subnet it was
|
|
|
-supposed to belong to. This kind of checks is only possible by DHCP-aware
|
|
|
+or configuring an address that is topologically outside of the subnet to which
|
|
|
+it should belong. These kind of checks are only possible by DHCP-aware
|
|
|
code, which this library provides.
|
|
|
|
|
|
Some of the queries may require a seemingly odd set of parameters. For example,
|
|
|
-lease6-get query requires at least duid, subnet-id and iaid to retrieve a lease
|
|
|
-by DUID. The need for a sysadmin to know and specify an iaid is troublesome.
|
|
|
+lease6-get query requires at least DUID, subnet-id and IAID to retrieve a lease
|
|
|
+by DUID. The need for a sysadmin to know and specify an IAID is troublesome.
|
|
|
However, the guiding principle here was to use whatever queries were already
|
|
|
-exposed by lease manager and not introduce new indexes, unless absolutely
|
|
|
+exposed by the lease manager and not introduce new indexes, unless absolutely
|
|
|
necessary. This ensures that there is no performance degradation when the
|
|
|
library is loaded. The only exception for that was lease4-wipe and lease6-wipe
|
|
|
-commands that remove all leases from specifiec subnet. As there were no
|
|
|
-queries that could retrieve or otherwise enumerate leases from specific subnet,
|
|
|
-a new query type (and a new index) had to be developed.
|
|
|
+commands that remove all leases from specific subnet. As there were no
|
|
|
+queries that could retrieve or otherwise enumerate leases for a specific subnet,
|
|
|
+a new query type and a new index had to be added.
|
|
|
|
|
|
*/
|