Commit f9cad784 authored by Andrei Pavel's avatar Andrei Pavel

Upgraded Docbook from v4.2 to v5.0

Used script http://docbook.org/xml/5.0/tools/db4-upgrade.xsl as
specified in the installation documentation at
http://tdg.docbook.org/tdg/5.0/appa.html.
parent 039622a4
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
<!ENTITY mdash "&#x2014;" >
]>
<!-- Converted by db4-upgrade version 1.0 -->
<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="admin"><info><title>Kea Database Administration</title></info>
<chapter id="admin">
<title>Kea Database Administration</title>
<section id="kea-database-version">
<title>Databases and Database Version Numbers</title>
<section xml:id="kea-database-version"><info><title>Databases and Database Version Numbers</title></info>
<para>
Kea supports storing leases and host reservations (i.e. static
......@@ -52,8 +47,8 @@
</para>
</section>
<section id="kea-admin">
<title>The kea-admin Tool</title>
<section xml:id="kea-admin"><info><title>The kea-admin Tool</title></info>
<para>
To manage the databases, Kea provides the
......@@ -71,7 +66,7 @@
<itemizedlist>
<listitem>
<simpara>
<command>lease-init</command> &mdash;
<command>lease-init</command>
Initializes a new lease database. This is useful during a new
Kea installation. The database is initialized to the
latest version supported by the version of the software being
......@@ -81,7 +76,7 @@
<listitem>
<simpara>
<command>lease-version</command> &mdash;
<command>lease-version</command>
Reports the lease database version number. This is
not necessarily equal to the Kea version number as
each backend has its own versioning scheme.
......@@ -90,7 +85,7 @@
<listitem>
<simpara>
<command>lease-upgrade</command> &mdash;
<command>lease-upgrade</command>
Conducts a lease database upgrade. This is useful when
upgrading Kea.
</simpara>
......@@ -98,7 +93,7 @@
<listitem>
<simpara>
<command>lease-dump</command> &mdash;
<command>lease-dump</command>
Dumps the contents of the lease database (for MySQL, PostgreSQL or
CQL backends) to a CSV (comma separated values) text file. The first
line of the file contains the column names. This is meant to be
......@@ -114,28 +109,28 @@
<itemizedlist>
<listitem>
<simpara>
<command>memfile</command> &mdash; Lease information is
<command>memfile</command> Lease information is
stored on disk in a text file.
</simpara>
</listitem>
<listitem>
<simpara>
<command>mysql</command> &mdash;
<command>mysql</command>
Lease information is stored in a MySQL relational database.
</simpara>
</listitem>
<listitem>
<simpara>
<command>pgsql</command> &mdash;
<command>pgsql</command>
Lease information is stored in a PostgreSQL relational database.
</simpara>
</listitem>
<listitem>
<simpara>
<command>cql</command> &mdash;
<command>cql</command>
Lease information is stored in a CQL database.
</simpara>
</listitem>
......@@ -149,8 +144,8 @@
</para>
</section>
<section id="supported-databases">
<title>Supported Databases</title>
<section xml:id="supported-databases"><info><title>Supported Databases</title></info>
<para>The following table presents the capabilities of available
backends. Please refer to the specific sections dedicated to each backend to
......@@ -158,14 +153,14 @@
backend may be essential for success or failure of your deployment.</para>
<para>
<table frame="all" id="backends">
<title>List of available backends</title>
<tgroup cols='2'>
<colspec colname='feature'/>
<colspec colname='memfile'/>
<colspec colname='mysql'/>
<colspec colname='pgsql'/>
<colspec colname='cql'/>
<table frame="all" xml:id="backends"><info><title>List of available backends</title></info>
<tgroup cols="2">
<colspec colname="feature"/>
<colspec colname="memfile"/>
<colspec colname="mysql"/>
<colspec colname="pgsql"/>
<colspec colname="cql"/>
<thead>
<row>
<entry>Feature</entry>
......@@ -222,8 +217,8 @@
</table>
</para>
<section>
<title>memfile</title>
<section><info><title>memfile</title></info>
<para>
The memfile backend is able to store lease information, but is not able to
......@@ -240,8 +235,8 @@
present. Necessary disk write permission is required.
</para>
<section id="memfile-upgrade">
<title>Upgrading Memfile Lease Files from an Earlier Version of Kea</title>
<section xml:id="memfile-upgrade"><info><title>Upgrading Memfile Lease Files from an Earlier Version of Kea</title></info>
<para>
There are no special steps required to upgrade memfile lease files
from an earlier version of Kea to a new version of Kea.
......@@ -264,8 +259,8 @@
<!-- @todo: document lease file upgrades once they are implemented in kea-admin -->
</section>
<section>
<title>MySQL</title>
<section><info><title>MySQL</title></info>
<para>
MySQL is able to store leases, host reservations and options defined on
......@@ -273,8 +268,8 @@
if you chose to store the data in other backends.
</para>
<section id="mysql-database-create">
<title>First Time Creation of the MySQL Database</title>
<section xml:id="mysql-database-create"><info><title>First Time Creation of the MySQL Database</title></info>
<para>
If you are setting the MySQL database for the first time,
......@@ -287,14 +282,14 @@
<para>
To create the database:
<orderedlist>
<orderedlist inheritnum="ignore" continuation="restarts">
<listitem>
<para>
Log into MySQL as "root":
<screen>
$ <userinput>mysql -u root -p</userinput>
Enter password:
mysql>
mysql&gt;
</screen>
</para>
</listitem>
......@@ -303,7 +298,7 @@ mysql>
<para>
Create the MySQL database:
<screen>
mysql> <userinput>CREATE DATABASE <replaceable>database-name</replaceable>;</userinput>
mysql&gt; <userinput>CREATE DATABASE <replaceable>database-name</replaceable>;</userinput>
</screen>
(<replaceable>database-name</replaceable> is the name
you have chosen for the database.)
......@@ -316,8 +311,8 @@ mysql> <userinput>CREATE DATABASE <replaceable>database-name</replaceable>;</use
(and give it a password), then grant it access to the
database tables:
<screen>
mysql> <userinput>CREATE USER '<replaceable>user-name</replaceable>'@'localhost' IDENTIFIED BY '<replaceable>password</replaceable>';</userinput>
mysql> <userinput>GRANT ALL ON <replaceable>database-name</replaceable>.* TO '<replaceable>user-name</replaceable>'@'localhost';</userinput>
mysql&gt; <userinput>CREATE USER '<replaceable>user-name</replaceable>'@'localhost' IDENTIFIED BY '<replaceable>password</replaceable>';</userinput>
mysql&gt; <userinput>GRANT ALL ON <replaceable>database-name</replaceable>.* TO '<replaceable>user-name</replaceable>'@'localhost';</userinput>
</screen>
(<replaceable>user-name</replaceable> and
<replaceable>password</replaceable> are the user ID
......@@ -334,8 +329,8 @@ mysql> <userinput>GRANT ALL ON <replaceable>database-name</replaceable>.* TO '<r
the tables using the <command>kea-admin</command> tool,
as explained below.) To do this:
<screen>
mysql> <userinput>CONNECT <replaceable>database-name</replaceable>;</userinput>
mysql> <userinput>SOURCE <replaceable>path-to-kea</replaceable>/share/kea/scripts/mysql/dhcpdb_create.mysql</userinput>
mysql&gt; <userinput>CONNECT <replaceable>database-name</replaceable>;</userinput>
mysql&gt; <userinput>SOURCE <replaceable>path-to-kea</replaceable>/share/kea/scripts/mysql/dhcpdb_create.mysql</userinput>
</screen>
(<replaceable>path-to-kea</replaceable> is the
location where you installed Kea.)
......@@ -346,7 +341,7 @@ mysql> <userinput>SOURCE <replaceable>path-to-kea</replaceable>/share/kea/script
<para>
Exit MySQL:
<screen>
mysql> <userinput>quit</userinput>
mysql&gt; <userinput>quit</userinput>
Bye
$
</screen>
......@@ -371,8 +366,8 @@ $ <userinput>kea-admin lease-init mysql -u <replaceable>database-user</replaceab
</para>
</section>
<section id="mysql-upgrade">
<title>Upgrading a MySQL Database from an Earlier Version of Kea</title>
<section xml:id="mysql-upgrade"><info><title>Upgrading a MySQL Database from an Earlier Version of Kea</title></info>
<para>
Sometimes a new Kea version may use newer database schema, so
......@@ -405,8 +400,8 @@ $ <userinput>kea-admin lease-upgrade mysql -u <replaceable>database-user</replac
</section>
</section> <!-- end of MySQL sections -->
<section>
<title>PostgreSQL</title>
<section><info><title>PostgreSQL</title></info>
<para>
A PostgreSQL database must be set up if you want Kea to store
......@@ -414,15 +409,15 @@ $ <userinput>kea-admin lease-upgrade mysql -u <replaceable>database-user</replac
safely ignored if you are using other database backends.
</para>
<section id="pgsql-database-create">
<title>First Time Creation of the PostgreSQL Database</title>
<section xml:id="pgsql-database-create"><info><title>First Time Creation of the PostgreSQL Database</title></info>
<para>
The first task is to create both the lease database and the
user under which the servers will access it. A number of steps
are required:
<orderedlist>
<orderedlist inheritnum="ignore" continuation="restarts">
<listitem>
<para>
Log into PostgreSQL as "root":
......@@ -546,8 +541,8 @@ host <replaceable>database-name</replaceable> <replaceable>user-name</repl
</para>
</section>
<section>
<title>Initialize the PostgreSQL Database Using kea-admin</title>
<section><info><title>Initialize the PostgreSQL Database Using kea-admin</title></info>
<para>
If you elected not to create the tables manually, you can do
so now by running the <command>kea-admin</command> tool:
......@@ -563,8 +558,8 @@ $ <userinput>kea-admin lease-init pgsql -u <replaceable>database-user</replaceab
by <command>kea-admin</command>.)
</para>
</section>
<section id="pgsql-upgrade">
<title>Upgrading a PostgreSQL Database from an Earlier Version of Kea</title>
<section xml:id="pgsql-upgrade"><info><title>Upgrading a PostgreSQL Database from an Earlier Version of Kea</title></info>
<para>
The PostgreSQL database schema can be upgraded using the same tool and
commands as described in <xref linkend="mysql-upgrade"/>, with the
......@@ -584,8 +579,8 @@ $ <userinput>kea-admin lease-upgrade pgsql -u <replaceable>database-user</replac
</section>
</section> <!-- end of PostgreSQL sections -->
<section>
<title>CQL (Cassandra)</title>
<section><info><title>CQL (Cassandra)</title></info>
<para>
Cassandra, or Cassandra Query Language (CQL), is the newest backend
......@@ -602,8 +597,8 @@ $ <userinput>kea-admin lease-upgrade pgsql -u <replaceable>database-user</replac
store the data in other backends.
</para>
<section id="cql-database-create">
<title>First Time Creation of the Cassandra Database</title>
<section xml:id="cql-database-create"><info><title>First Time Creation of the Cassandra Database</title></info>
<para>
If you are setting up the CQL database for the first time, you need to
......@@ -613,7 +608,7 @@ $ <userinput>kea-admin lease-upgrade pgsql -u <replaceable>database-user</replac
<para>
To create the database:
<orderedlist>
<orderedlist inheritnum="ignore" continuation="restarts">
<listitem>
<para>
Export CQLSH_HOST environemnt variable:
......@@ -627,7 +622,7 @@ $ <userinput>export CQLSH_HOST=localhost</userinput>
Log into CQL:
<screen>
$ <userinput>cqlsh</userinput>
cql>
cql&gt;
</screen>
</para>
</listitem>
......@@ -636,7 +631,7 @@ cql>
<para>
Create the CQL keyspace:
<screen>
cql> <userinput>CREATE KEYSPACE keyspace-name WITH replication = {'class' : 'SimpleStrategy','replication_factor' : 1};</userinput>
cql&gt; <userinput>CREATE KEYSPACE keyspace-name WITH replication = {'class' : 'SimpleStrategy','replication_factor' : 1};</userinput>
</screen>
(<replaceable>keyspace-name</replaceable> is the name you have
chosen for the keyspace)
......@@ -674,8 +669,8 @@ $ <userinput>kea-admin lease-init cql -n <replaceable>database-name</replaceable
</para>
</section>
<section id="cql-upgrade">
<title>Upgrading a CQL Database from an Earlier Version of Kea</title>
<section xml:id="cql-upgrade"><info><title>Upgrading a CQL Database from an Earlier Version of Kea</title></info>
<para>
Sometimes a new Kea version may use newer database schema, so
......@@ -708,8 +703,8 @@ $ <userinput>kea-admin lease-upgrade cql -n <replaceable>database-name</replacea
</section>
</section> <!-- end of CQL sections -->
<section>
<title>Using Read-Only Databases with Host Reservations</title>
<section><info><title>Using Read-Only Databases with Host Reservations</title></info>
<para>If a read-only database is used for storing host reservations,
Kea must be explicitly configured to operate on the database in
read-only mode.
......@@ -720,8 +715,8 @@ $ <userinput>kea-admin lease-upgrade cql -n <replaceable>database-name</replacea
</para>
</section>
<section>
<title>Limitations Related to the use of SQL Databases</title>
<section><info><title>Limitations Related to the use of SQL Databases</title></info>
<para>
The lease expiration time is stored in the SQL database for each lease
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
<!ENTITY mdash "&#x2014;" >
]>
<!-- Converted by db4-upgrade version 1.0 -->
<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="classify"><info><title>Client Classification</title></info>
<chapter id="classify">
<title>Client Classification</title>
<section>
<title>Client Classification Overview</title>
<section><info><title>Client Classification Overview</title></info>
<para>
In certain cases it is useful to differentiate between different
types of clients and treat them accordingly. Common reasons include:
......@@ -41,7 +36,7 @@
<para>
The process of doing classification is conducted in three steps:
<orderedlist>
<orderedlist inheritnum="ignore" continuation="restarts">
<listitem><para>
Assess an incoming packet and assign it to zero or more classes.
</para></listitem>
......@@ -95,37 +90,37 @@
</note>
</section>
<section id="classification-using-host-reservations">
<title>Using Static Host Reservations In Classification</title>
<section xml:id="classification-using-host-reservations"><info><title>Using Static Host Reservations In Classification</title></info>
<para>Classes can be statically assigned to the clients using techniques described
in <xref linkend="reservation4-client-classes"/> and
<xref linkend="reservation6-client-classes"/>.
</para>
</section>
<section id="classification-using-vendor">
<title>Using Vendor Class Information In Classification</title>
<section xml:id="classification-using-vendor"><info><title>Using Vendor Class Information In Classification</title></info>
<para>
The server checks whether an incoming DHCPv4 packet includes
the vendor class identifier option (60) or an incoming DHCPv6 packet
includes the vendor class option (16). If it does, the content of that
option is prepended with &quot;VENDOR_CLASS_&quot; and the result is interpreted
option is prepended with "VENDOR_CLASS_" and the result is interpreted
as a class. For example, modern cable modems will send this option with
value &quot;docsis3.0&quot; and so the packet will belong to
class &quot;VENDOR_CLASS_docsis3.0&quot;.
value "docsis3.0" and so the packet will belong to
class "VENDOR_CLASS_docsis3.0".
</para>
</section>
<section id="classification-using-expressions">
<title>Using Expressions In Classification</title>
<section xml:id="classification-using-expressions"><info><title>Using Expressions In Classification</title></info>
<para>
The expression portion of classification contains operators and values.
All values are currently strings and operators take a string or strings and
return another string. When all the operations have completed
the result should be a value of &quot;true&quot; or &quot;false&quot;.
the result should be a value of "true" or "false".
The packet belongs to
the class (and the class name is added to the list of classes) if the result
is &quot;true&quot;. Expressions are written in standard format and can be nested.
is "true". Expressions are written in standard format and can be nested.
</para>
<para>
......@@ -152,12 +147,12 @@
</para>
<para>
<table frame="all" id="classification-values-list">
<title>List of Classification Values</title>
<tgroup cols='3'>
<colspec colname='name' />
<colspec colname='example' />
<colspec colname='description' />
<table frame="all" xml:id="classification-values-list"><info><title>List of Classification Values</title></info>
<tgroup cols="3">
<colspec colname="name"/>
<colspec colname="example"/>
<colspec colname="description"/>
<thead>
<row>
<entry>Name</entry>
......@@ -192,7 +187,7 @@
<entry>'123'</entry>
<entry>A 32 bit unsigned integer value</entry>
</row>
<row></row>
<row/>
<row>
<entry>Binary content of the option</entry>
<entry>option[123].hex</entry>
......@@ -430,9 +425,9 @@
<itemizedlist>
<listitem><para>
Hexadecimal strings are converted into a string as expected. The starting &quot;0X&quot; or
&quot;0x&quot; is removed and if the string is an odd number of characters a
&quot;0&quot; is prepended to it.
Hexadecimal strings are converted into a string as expected. The starting "0X" or
"0x" is removed and if the string is an odd number of characters a
"0" is prepended to it.
</para></listitem>
<listitem><para>
......@@ -510,14 +505,14 @@
<listitem><para>
Vendor option means Vendor-Identifying Vendor-specific Information
option in DHCPv4 (code 125, see
<ulink url="http://tools.ietf.org/html/rfc3925#section-4">Section 4 of RFC 3925</ulink>) and
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tools.ietf.org/html/rfc3925#section-4">Section 4 of RFC 3925</link>) and
Vendor-specific Information Option in DHCPv6 (code 17, defined in
<ulink url="https://tools.ietf.org/html/rfc3315#section-22.17">Section 22.17 of
RFC 3315</ulink>). Vendor class option means Vendor-Identifying Vendor
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://tools.ietf.org/html/rfc3315#section-22.17">Section 22.17 of
RFC 3315</link>). Vendor class option means Vendor-Identifying Vendor
Class Option in DHCPv4 (code 124, see
<ulink url="http://tools.ietf.org/html/rfc3925#section-3">Section 3 of RFC 3925</ulink>) in DHCPv4 and
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tools.ietf.org/html/rfc3925#section-3">Section 3 of RFC 3925</link>) in DHCPv4 and
Class Option in DHCPv6 (code 16, see
<ulink url="https://tools.ietf.org/html/rfc3315#section-22.16">Section 22.16 of RFC 3315</ulink>).
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://tools.ietf.org/html/rfc3315#section-22.16">Section 22.16 of RFC 3315</link>).
Vendor options may
have sub-options that are referenced by their codes. Vendor class
options do not have sub-options, but rather data chunks, which are
......@@ -535,8 +530,8 @@
accessed using option[60] expression.</para></listitem>
<listitem><para>
<ulink url="http://tools.ietf.org/html/rfc3925">RFC3925</ulink> and
<ulink url="http://tools.ietf.org/html/rfc3315">RFC3315</ulink>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tools.ietf.org/html/rfc3925">RFC3925</link> and
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tools.ietf.org/html/rfc3315">RFC3315</link>
allow for multiple instances of vendor options
to appear in a single message. The client classification code currently
examines the first instance if more than one appear. For vendor.enterprise
......@@ -548,12 +543,12 @@
</itemizedlist>
<para>
<table frame="all" id="classification-expressions-list">
<title>List of Classification Expressions</title>
<tgroup cols='3'>
<colspec colname='name' />
<colspec colname='example' />
<colspec colname='description' />
<table frame="all" xml:id="classification-expressions-list"><info><title>List of Classification Expressions</title></info>
<tgroup cols="3">
<colspec colname="name"/>
<colspec colname="example"/>
<colspec colname="description"/>
<thead>
<row>
<entry>Name</entry>
......@@ -574,8 +569,8 @@ concatenation of the strings</entry></row>
</table>
</para>
<section>
<title>Logical operators</title>
<section><info><title>Logical operators</title></info>
The Not, And and Or logical operators are the common operators. Not
has the highest precedence and Or the lowest. And and Or are (left)
associative, parentheses around a logical expression can be used
......@@ -583,8 +578,8 @@ concatenation of the strings</entry></row>
(without parentheses "A and B or C" means "(A and B) or C").
</section>
<section>
<title>Substring</title>
<section><info><title>Substring</title></info>
The substring operator "substring(value, start, length)" accepts both positive and
negative values for the starting position and the length. For "start", a value of
0 is the first byte in the string while -1 is the last byte. If the starting
......@@ -606,8 +601,8 @@ concatenation of the strings</entry></row>
substring('foobar', 10, 2) == ''
</screen>
</section>
<section>
<title>Concat</title>
<section><info><title>Concat</title></info>
The concat function "concat(string1, string2)" returns the
concatenation of its two arguments. For instance:
<screen>
......@@ -621,12 +616,11 @@ concatenation of the strings</entry></row>
The expression for each class is executed on each packet received.
If the expressions are overly complex, the time taken to execute
them may impact the performance of the server. If you need
complex or time consuming expressions you should write a <link
linkend='hooks-libraries'>hook</link> to perform the necessary work.
complex or time consuming expressions you should write a <link linkend="hooks-libraries">hook</link> to perform the necessary work.
</para> </note>
<section id="classification-configuring">
<title>Configuring Classes</title>
<section xml:id="classification-configuring"><info><title>Configuring Classes</title></info>
<para>
A class contains three items: a name, a test expression and option data.
The name must exist and must be unique amongst all classes. The test
......@@ -645,9 +639,9 @@ concatenation of the strings</entry></row>
</para>
<para>
In the following example the class named &quot;Client_foo&quot; is defined.
In the following example the class named "Client_foo" is defined.
It is comprised of all clients whose client ids (option 61) start with the
string &quot;foo&quot;. Members of this class will be given 192.0.2.1 and
string "foo". Members of this class will be given 192.0.2.1 and
192.0.2.2 as their domain name servers.
<screen>
......@@ -674,7 +668,7 @@ concatenation of the strings</entry></row>
<para>
This example shows a client class being defined for use by the DHCPv6 server.
In it the class named &quot;Client_enterprise&quot; is defined. It is comprised
In it the class named "Client_enterprise" is defined. It is comprised
of all clients who's client identifiers start with the given hex string (which
would indicate a DUID based on an enterprise id of 0xAABBCCDD). Members of this
class will be given an 2001:db8:0::1 and 2001:db8:2::1 as their domain name servers.
......@@ -701,8 +695,8 @@ concatenation of the strings</entry></row>
</para>
</section>
<section id="classification-subnets">
<title>Configuring Subnets With Class Information</title>
<section xml:id="classification-subnets"><info><title>Configuring Subnets With Class Information</title></info>
<para>
In certain cases it beneficial to restrict access to certain subnets
only to clients that belong to a given class, using the "client-class"
......@@ -781,8 +775,8 @@ concatenation of the strings</entry></row>
</para>
</section>
<section>
<title>Using Classes</title>
<section><info><title>Using Classes</title></info>
<para>
Currently classes can be used for two functions. They can supply options
to the members of the class and they can be used to choose a subnet from which an
......@@ -791,14 +785,14 @@ concatenation of the strings</entry></row>
<para>
When supplying options, options defined as part of the class definition
are considered &quot;class globals&quot;. They will override any global options that
are considered "class globals". They will override any global options that
may be defined and in turn will be overridden by any options defined for an
individual subnet.
</para>
</section>
<section>
<title>Classes and Hooks</title>
<section><info><title>Classes and Hooks</title></info>
<para>
You may use a hook to classify your packets. This may be useful if the
expression would either be complex or time consuming and be easier or
......@@ -811,8 +805,8 @@ concatenation of the strings</entry></row>
</para>
</section>
<section>
<title>Debugging Expressions</title>
<section><info><title>Debugging Expressions</title></info>
<para>
While you are constructing your classification expressions you may
find it useful to enable logging see <xref linkend="logging"/> for
......@@ -828,7 +822,7 @@ concatenation of the strings</entry></row>
<para>
In order to understand the logging statements one must understand a
bit about how expressions are evaluated, for a more complete description
refer to the design document at <ulink url="http://kea.isc.org/wiki/KeaDesigns"/>.
refer to the design document at <uri xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://kea.isc.org/wiki/KeaDesigns">http://kea.isc.org/wiki/KeaDesigns</uri>.
In brief there are two structures used during the evaluation of an expression:
a list of tokens which represent the expressions and a value stack which
represents the values being manipulated.
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
<!ENTITY mdash "&#x2014;" >
]>
<chapter id="kea-config">
<title>Kea Configuration</title>
<!-- Converted by db4-upgrade version 1.0 -->
<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="kea-config"><info><title>Kea Configuration</title></info>
<para>Kea is using JSON structures to handle configuration. Previously
we there was a concept of other configuration backends, but that never was