]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[github39] Merge branch 'docbook-upgrade' of https://github.com/andreipavelQ/kea...
authorTomek Mrugalski <tomasz@isc.org>
Tue, 6 Feb 2018 12:39:24 +0000 (12:39 +0000)
committerTomek Mrugalski <tomasz@isc.org>
Tue, 6 Feb 2018 12:39:24 +0000 (12:39 +0000)
 - improvements required (__VERSION__ macro omitted)
 - the patch tried to reverse some texts back to 1.1.0 (we're now at 1.3.0)
 - there were many conflicts...

# Conflicts:
# doc/guide/admin.xml
# doc/guide/ctrl-channel.xml
# doc/guide/ddns.xml
# doc/guide/dhcp4-srv.xml
# doc/guide/dhcp6-srv.xml
# doc/guide/install.xml
# doc/guide/intro.xml
# doc/guide/kea-guide.xml
# src/bin/admin/kea-admin.xml
# src/bin/agent/kea-ctrl-agent.xml
# src/bin/d2/kea-dhcp-ddns.xml
# src/bin/dhcp4/kea-dhcp4.xml
# src/bin/dhcp6/kea-dhcp6.xml
# src/bin/keactrl/keactrl.xml
# src/bin/lfc/kea-lfc.xml
# src/bin/perfdhcp/perfdhcp.xml
# src/bin/shell/kea-shell.xml
# src/bin/sockcreator/kea-sockcreator.xml

31 files changed:
1  2 
doc/guide/admin.xml
doc/guide/agent.xml
doc/guide/classify.xml
doc/guide/config.xml
doc/guide/ctrl-channel.xml
doc/guide/ddns.xml
doc/guide/dhcp4-srv.xml
doc/guide/dhcp6-srv.xml
doc/guide/faq.xml
doc/guide/hooks.xml
doc/guide/install.xml
doc/guide/intro.xml
doc/guide/kea-guide.xml
doc/guide/keactrl.xml
doc/guide/lease-expiration.xml
doc/guide/lfc.xml
doc/guide/libdhcp.xml
doc/guide/logging.xml
doc/guide/quickstart.xml
doc/guide/shell.xml
doc/guide/stats.xml
src/bin/admin/kea-admin.xml
src/bin/agent/kea-ctrl-agent.xml
src/bin/d2/kea-dhcp-ddns.xml
src/bin/dhcp4/kea-dhcp4.xml
src/bin/dhcp6/kea-dhcp6.xml
src/bin/keactrl/keactrl.xml
src/bin/lfc/kea-lfc.xml
src/bin/perfdhcp/perfdhcp.xml
src/bin/shell/kea-shell.xml
src/bin/sockcreator/kea-sockcreator.xml

index 64b596645d24440729a428f5aceb3b1c77787807,1381cdedad4ccd812af2d47124ce9dba5cda2ba3..a32e1c233956a73c095bb6a0b967c3ca15f82bbf
@@@ -1,13 -1,8 +1,16 @@@
- <?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="admin">
++<!--
++ - Copyright (C) 2015-2018 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/.
++-->
++
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="admin">
    <title>Kea Database Administration</title>
  
-   <section id="kea-database-version">
+   <section xml:id="kea-database-version">
      <title>Databases and Database Version Numbers</title>
  
      <para>
      backend may be essential for success or failure of your deployment.</para>
  
      <para>
-       <table frame="all" id="backends">
+       <table frame="all" xml: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"/>
 +        <tgroup cols='5'>
 +          <colspec colname='feature'/>
 +          <colspec colname='memfile'/>
 +          <colspec colname='mysql'/>
 +          <colspec colname='pgsql'/>
 +          <colspec colname='cql' colwidth='1.5*'/>
            <thead>
              <row>
                <entry>Feature</entry>
index 90dffee1c7508405300859d858f9792a319287ce,0a1f8ec77a9d54160193c70756bc31cfc346b03e..d8d5c5f470d74acec67e0f35f37f748c3ae18ac7
@@@ -1,13 -1,8 +1,16 @@@
- <?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  "&#x2017;" >
- ]>
- <chapter id="kea-ctrl-agent">
++<!--
++ - Copyright (C) 2017-2018 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/.
++-->
++
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="kea-ctrl-agent">
    <title>Kea Control Agent</title>
  
-   <section id="agent-overview">
+   <section xml:id="agent-overview">
      <title>Overview</title>
      <para>Kea Control Agent (CA) is a daemon, first included in Kea 1.2, which
      exposes a RESTful control interface for managing Kea servers. The daemon
@@@ -267,14 -262,9 +270,14 @@@ http 
      organization which apply to this setup.</simpara>
    </note>
  
 +    <para>When you use an HTTP client without TLS support as <command>
 +    kea-shell</command> you can use an HTTP/HTTPS translator such as stunnel
 +    in client mode. A sample configuration is provided in the
 +    <filename>doc/examples/https/shell/</filename> directory</para>
 +
    </section>
  
-   <section id="agent-limitations">
+   <section xml:id="agent-limitations">
      <title>Control Agent Limitations</title>
      <para>
        Control Agent is a new component, first released in Kea 1.2. In
index 23009e98f562461651b0b083e335aea58dcab22f,e78fd404d235331ea8647e20986cd9e6192631ce..c9ff02116c219d03414712df07794a32f8e2f2cd
@@@ -1,10 -1,5 +1,13 @@@
- <?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;" >
- ]>
++<!--
++ - Copyright (C) 2015-2018 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/.
++-->
 +
- <chapter id="classify">
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="classify">
    <title>Client Classification</title>
  
    <section>
index 645ee9c9e5f017e704b5f08e38d11bfb76c62ea9,809150c3a39ce9f093f65031aaacf659570ce418..ac8965fa41af474021cfdf56f5979034d4e49424
@@@ -1,9 -1,5 +1,13 @@@
- <?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">
++<!--
++ - Copyright (C) 2014-2018 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/.
++-->
++
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="kea-config">
    <title>Kea Configuration</title>
  
    <para>Kea is using JSON structures to handle configuration. Previously
index 2b37e9660cc3e427ee9431beef62bb97b8a177c0,d590e93a58277d1ae0a5496900e7639dcfd0aedb..02c593fb5d632c9c9fd91c6c76c775ef7c907714
@@@ -1,12 -1,5 +1,13 @@@
- <?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;" >
- <!ENTITY % version SYSTEM "version.ent">
- %version;
- ]>
-   <chapter id="ctrl-channel">
++<!--
++ - Copyright (C) 2015-2018 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/.
++-->
++
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="ctrl-channel">
      <title>Management API</title>
  
      <para>A classic approach to daemon configuration assumes that
@@@ -557,43 -535,7 +557,43 @@@ $ curl -X POST -H "Content-Type: applic
        </para>
      </section> <!-- end of command-shutdown -->
  
-       <section id="command-version-get">
 +    <section id="command-dhcp-disable">
 +      <title>dhcp-disable</title>
 +      <para>
 +        The <emphasis>dhcp-disable</emphasis> command globally disables the DHCP
 +        service. The server continues to operate, but it drops all received DHCP
 +        messages. This command is useful when the server's maintenance requires that
 +        the server temporarily stops allocating new leases and renew existing leases.
 +        It is also useful in failover like configurations during a synchronization of
 +        the lease databases at startup or recovery after a failure. The optional parameter
 +        <emphasis>max-period</emphasis> specifies the time in seconds after which the
 +        DHCP service should be automatically re-enabled if the
 +        <emphasis>dhcp-enable</emphasis> command is not sent before this time elapses.
 +      </para>
 +<screen>
 +{
 +    "command": "dhcp-disable",
 +    "arguments": {
 +        "max-period": 20
 +    }
 +}
 +</screen>
 +    </section> <!-- end of command-dhcp-disable -->
 +
 +    <section id="command-dhcp-enable">
 +      <title>dhcp-enable</title>
 +      <para>
 +        The <emphasis>dhcp-enable</emphasis> command globally enables the DHCP
 +        service.
 +      </para>
 +<screen>
 +{
 +    "command": "dhcp-enable"
 +}
 +</screen>
 +    </section> <!-- end of command-dhcp-disable -->
 +
+       <section xml:id="command-version-get">
          <title>version-get</title>
          <para>
            The <emphasis>version-get</emphasis> command returns on the control
index 64b90f6f31e26a4fd5860049a934d2c7586f32d9,d2d384ff2a201a35eead9aaa57266eea30cc4513..dd99fd02904c27eea42cb5cd663e72359f9f0e70
- <?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="dhcp-ddns-server">
++<!--
++ - Copyright (C) 2014-2018 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/.
++-->
++
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="dhcp-ddns-server">
      <title>The DHCP-DDNS Server</title>
 -    <para>
 -    The DHCP-DDNS Server (kea-dhcp-ddns, known informally as D2) conducts the client side of
 -    the DDNS protocol (defined in <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tools.ietf.org/html/rfc2136">RFC 2136</link>)
 -    on behalf of the DHCPv4 and DHCPv6
 -    servers (kea-dhcp4 and kea-dhcp6 respectively). The DHCP servers construct
 -    DDNS update requests, known as NameChangeRequests (NCRs), based upon DHCP
 -    lease change events and then post these to D2. D2 attempts to match
 -    each such request to the appropriate DNS server(s) and carry out the
 -    necessary conversation with those servers to update the DNS data.
 -    </para>
 -    <para>
 -    In order to match a request to the appropriate DNS servers, D2 must have a
 -    catalog of servers from which to select. In fact, D2 has two such catalogs,
 -    one for forward DNS and one for reverse DNS; these catalogs are referred
 -    to as DDNS Domain Lists.  Each list consists of one or more named DDNS
 -    Domains. Further, each DDNS Domain has a list of one or more DNS
 -    servers that publish the DNS data for that domain.
 -    </para>
 -    <para>
 -    When conducting forward domain matching, D2 will compare the FQDN in
 -    the request against the name of each forward DDNS Domain. The domain
 -    whose name matches the longest portion of the FQDN is considered the
 -    best match.  For example, if the FQDN is "myhost.sample.example.com.",
 -    and there are two forward domains in the catalog: "sample.example.com."
 -    and "example.com.", the former is regarded as the best match.  In some
 -    cases, it may not be possible to find a suitable match. Given the same two
 -    forward domains there would be no match for the FQDN, "bogus.net", so the
 -    request would be rejected.   Finally, if there are no forward DDNS Domains
 -    defined, D2 will simply disregard the forward update portion of requests.
 -    </para>
 -    <para>
 -    When conducting reverse domain matching, D2 constructs a reverse
 -    FQDN from the lease address in the request and compare that against
 -    the name of each reverse DDNS Domain. Again, the domain whose name matches
 -    the longest portion of the FQDN is considered the best match. For instance,
 -    if the lease address is "172.16.1.40" and there are two reverse domains in
 -    the catalog: "1.16.172.in-addr.arpa." and "16.172.in-addr.arpa", the
 -    former is the best match.  As with forward matching, it is possible to not
 -    find a suitable match.  Given the same two domains, there would be no
 -    match for the lease address, "192.168.1.50", and the request would be
 -    rejected. Finally, if there are no reverse DDNS Domains defined, D2 will
 -    simply disregard the reverse update portion of requests.
++
 +    <section id="dhcp-ddns-overview">
 +      <title>Overview</title>
 +      <para>
 +      The DHCP-DDNS Server (kea-dhcp-ddns, known informally as D2) conducts
-       the client side of the DDNS protocol (defined in
-         <ulink url="http://tools.ietf.org/html/rfc2136">RFC 2136</ulink>)
++      the client side of the DDNS protocol (defined in  <link
++      xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tools.ietf.org/html/rfc2136">RFC 2136</link>)
 +      on behalf of the DHCPv4 and DHCPv6 servers (kea-dhcp4 and kea-dhcp6
 +      respectively). The DHCP servers construct DDNS update requests, known
 +      as NameChangeRequests (NCRs), based upon DHCP lease change events and
 +      then post these to D2. D2 attempts to match each such request to the
 +      appropriate DNS server(s) and carry out the necessary conversation with
 +      those servers to update the DNS data.
      </para>
 -    <section xml:id="dhcp-ddns-server-start-stop">
 +    <section id="dhcp-ddns-dns-server-selection">
 +      <title>DNS Server selection</title>
 +      <para>
 +      In order to match a request to the appropriate DNS servers, D2 must have a
 +      catalog of servers from which to select. In fact, D2 has two such catalogs,
 +      one for forward DNS and one for reverse DNS; these catalogs are referred
 +      to as DDNS Domain Lists.  Each list consists of one or more named DDNS
 +      Domains. Further, each DDNS Domain has a list of one or more DNS
 +      servers that publish the DNS data for that domain.
 +      </para>
 +      <para>
 +      When conducting forward domain matching, D2 will compare the FQDN in
 +      the request against the name of each forward DDNS Domain. The domain
 +      whose name matches the longest portion of the FQDN is considered the
 +      best match.  For example, if the FQDN is "myhost.sample.example.com.",
 +      and there are two forward domains in the catalog: "sample.example.com."
 +      and "example.com.", the former is regarded as the best match.  In some
 +      cases, it may not be possible to find a suitable match. Given the same two
 +      forward domains there would be no match for the FQDN, "bogus.net", so the
 +      request would be rejected.   Finally, if there are no forward DDNS Domains
 +      defined, D2 will simply disregard the forward update portion of requests.
 +      </para>
 +      <para>
 +      When conducting reverse domain matching, D2 constructs a reverse
 +      FQDN from the lease address in the request and compare that against
 +      the name of each reverse DDNS Domain. Again, the domain whose name matches
 +      the longest portion of the FQDN is considered the best match. For instance,
 +      if the lease address is "172.16.1.40" and there are two reverse domains in
 +      the catalog: "1.16.172.in-addr.arpa." and "16.172.in-addr.arpa", the
 +      former is the best match.  As with forward matching, it is possible to not
 +      find a suitable match.  Given the same two domains, there would be no
 +      match for the lease address, "192.168.1.50", and the request would be
 +      rejected. Finally, if there are no reverse DDNS Domains defined, D2 will
 +      simply disregard the reverse update portion of requests.
 +      </para>
 +    </section>
-     <section id="dhcp-ddns-conflict-resolution">
++    <section xml:id="dhcp-ddns-conflict-resolution">
 +      <title>Conflict Resolution</title>
 +        <para>
 +        D2 implements the conflict resolution strategy prescribed by
 +        <ulink url="http://tools.ietf.org/html/rfc4703">RFC 4703</ulink>.
 +        Conflict resolution is intended to prevent different clients from
 +        mapping to the same FQDN at the same time.  To make this possible, the
 +        RFC requires that forward DNS entries for a given FQDN must be
 +        accompanied by a DHCID resource record (RR).  This record contains a
 +        client identifier that uniquely identifies the client to whom the name
 +        belongs. Furthermore, any DNS updater who wishes to update or remove
 +        existing forward entries for an FQDN may only do so if their client
 +        matches that of the DHCID RR.
 +        </para>
 +        <para>
 +        In other words, the DHCID RR maps an FQDN to the client to whom it
 +        belongs and thereafter only changes to that mapping should only be
 +        done by or at the behest of that client.
 +        </para>
 +        <para>
 +        Currently, conflict detection is always performed.  Future releases may
 +        offer alternative behavior.
 +        </para>
 +    </section>
 +    <section id="dhcp-ddns-dual-stack">
 +      <title>Dual Stack Environments</title>
 +      <para>
 +        <ulink url="http://tools.ietf.org/html/rfc4703#section-5.2">RFC 4703,
 +        sec. 5.2,</ulink> describes issues that may arise with dual stack
 +        clients. These are clients that wish to have have both IPv4 and IPv6
 +        mappings for the same FQDN.  In order for this work properly, such
 +        clients are required to embed ther IPv6 DUID within their IPv4 client
 +        identifier option as described in
 +        <ulink url="http://tools.ietf.org/html/rfc4361">RFC 4703</ulink>.
 +        In this way, DNS upates for both IPv4 and IPv6 can be managed under
 +        the same DHCID RR. Support for this does not yet exist in Kea but is
 +        called for in the ticket, http://kea.isc.org/ticket/4519, which we
 +        hope to include in a future release.
 +      </para>
 +    </section>
 +    </section>
 +    <section id="dhcp-ddns-server-start-stop">
        <title>Starting and Stopping the DHCP-DDNS Server</title>
  
        <para>
@@@ -977,4 -925,4 +981,4 @@@ corresponding values in the DHCP server
          </listitem>
        </itemizedlist>
      </section>
-   </chapter> <!-- DHCP-DDNS Server -->
 -  </chapter>
++  </chapter>
index 95453e18a80ad862a70c1d6e4147b3e309156b4a,669e52eee1d6dd7a8641d0082cfbc7cd05bd51f7..83de4dadb9edb33f9ed011dfdb1d3169c55cb251
@@@ -1,13 -1,8 +1,15 @@@
- <?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="dhcp4">
++<!--
++ - Copyright (C) 2014-2018 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/.
++-->
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="dhcp4">
      <title>The DHCPv4 Server</title>
  
-     <section id="dhcp4-start-stop">
+     <section xml:id="dhcp4-start-stop">
        <title>Starting and Stopping the DHCPv4 Server</title>
  
        <para>
@@@ -1447,8 -1369,8 +1446,8 @@@ It is merely echoed by the serve
              <row><entry>ipv4-address</entry><entry>IPv4 address in the usual dotted-decimal notation (e.g. 192.0.2.1)</entry></row>
              <row><entry>ipv6-address</entry><entry>IPv6 address in the usual colon notation (e.g. 2001:db8::1)</entry></row>
              <row><entry>ipv6-prefix</entry><entry>IPv6 prefix and prefix length specified using CIDR notation, e.g. 2001:db8:1::/64. This data type is used to represent an 8-bit field conveying a prefix length and the variable length prefix value</entry></row>
-             <row><entry>psid</entry><entry>PSID and PSID length separated by a slash, e.g. 3/4 specifies PSID=3 and PSID length=4. In the wire format it is represented by an 8-bit field carrying PSID length (in this case equal to 4) and the 16-bits long PSID value field (in this case equal to "0011000000000000b" using binary notation). Allowed values for a PSID length are 0 to 16. See <ulink url="http://tools.ietf.org/html/rfc7597">RFC 7597</ulink> for the details about the PSID wire representation</entry></row>
+             <row><entry>psid</entry><entry>PSID and PSID length separated by a slash, e.g. 3/4 specifies PSID=3 and PSID length=4. In the wire format it is represented by an 8-bit field carrying PSID length (in this case equal to 4) and the 16-bits long PSID value field (in this case equal to "0011000000000000b" using binary notation). Allowed values for a PSID length are 0 to 16. See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tools.ietf.org/html/rfc7597">RFC 7597</link> for the details about the PSID wire representation</entry></row>
 -            <row><entry>record</entry><entry>Structured data that may comprise any types (except "record" and "empty")</entry></row>
 +            <row><entry>record</entry><entry>Structured data that may be comprised of any types (except "record" and "empty"). The array flag applies to the last field only.</entry></row>
              <row><entry>string</entry><entry>Any text</entry></row>
              <row><entry>tuple</entry><entry>A length encoded as a 8 (16 for DHCPv6) bit unsigned integer followed by a string of this length</entry></row>
              <row><entry>uint8</entry><entry>8 bit unsigned integer with allowed values 0 to 255</entry></row>
       </note>
      </section>
  
-     <section id="dhcp4-vendor-opts">
 +    <section id="dhcp4-private-opts">
 +      <title>DHCPv4 Private Options</title>
 +      <para>
 +      Options with code between 224 and 254 are reserved for private use.
 +      They can be defined at the global scope or at client class local
 +      scope: this allows to use option definitions depending on context
 +      and to set option data accordingly. For instance to configure
 +      an old PXEClient vendor:
 +<screen>
 +"Dhcp4": {
 +    "client-class": [
 +        {
 +            <userinput>"name": "pxeclient",
 +            "test": "option[vendor-class-identifier].text == 'PXEClient'",
 +            "option-def": [
 +                {
 +                    "name": "configfile",
 +                    "code": 209,
 +                    "type": "string"
 +                }
 +            ],</userinput>
 +            ...
 +        }, ...
 +    ],
 +    ...
 +}
 +</screen>
 +      </para>
 +      <para>
 +      As the Vendor Specific Information option (code 43) has vendor
 +      specific format, i.e. can carry either raw binary value or
 +      sub-options, this mechanism is available for this option too.
 +      </para>
 +      <para>
 +      In the following example taken from a real configuration two vendor
 +      classes use the option 43 for different and incompatible purposes:
 +<screen>
 +"Dhcp4": {
 +    "option-def": [
 +        {
 +            <userinput>"name": "cookie",
 +            "code": 1,
 +            "type": "string",
 +            "space": "APC"
 +        },
 +        {
 +            "name": "mtftp-ip",
 +            "code": 1,
 +            "type": "ipv4-address",
 +            "space": "PXE"
 +        },</userinput>
 +        ...
 +    ],
 +    "client-class": [
 +        {
 +            <userinput>"name": "APC",
 +            "test": "(option[vendor-class-identifier].text == 'APC'",
 +            "option-def": [
 +                {
 +                    "name": "vendor-encapsulated-options",
 +                    "type": "empty",
 +                    "encapsulate": "APC"
 +                }
 +            ],
 +            "option-data": [
 +                {
 +                    "name": "cookie",
 +                    "space": "APC",
 +                    "data": "1APC"
 +                },
 +                {
 +                    "name": "vendor-encapsulated-options"
 +                },</userinput>
 +                ...
 +            ],
 +            ...
 +        },
 +        {
 +            <userinput>"name": "PXE",
 +            "test": "(option[vendor-class-identifier].text == 'PXE'",
 +            "option-def": [
 +                {
 +                    "name": "vendor-encapsulated-options",
 +                    "type": "empty",
 +                    "encapsulate": "PXE"
 +                }
 +            ],
 +            "option-data": [
 +                {
 +                    "name": "mtftp-ip",
 +                    "space": "PXE",
 +                    "data": "0.0.0.0"
 +                },
 +                {
 +                    "name": "vendor-encapsulated-options"
 +                },</userinput>
 +                ...
 +            ],
 +            ...
 +        },
 +        ...
 +    ],
 +    ...
 +}
 +</screen>
 +      </para>
 +      <para>
 +      The definition used to decode a VSI option is:
 +      <orderedlist>
 +      <listitem><para>
 +      The local definition of a client class the incoming packet belongs to
 +      </para></listitem>
 +      <listitem><para>
 +      If none, the global definition
 +      </para></listitem>
 +      <listitem><para>
 +      If none, the last resort definition described in the next section
 +      <xref linkend="dhcp4-vendor-opts"/> (backward compatible with
 +      previous Kea versions).
 +      </para></listitem>
 +      </orderedlist>
 +      </para>
 +      <note>
 +      <para>
 +      This last resort definition for the Vendor Specific Information
 +      option (code 43) is not compatible with a raw binary value.
 +      So when there are some known cases where a raw binary value
 +      will be used, a client class must be defined with a classification
 +      expression matching these cases and an option definition for
 +      the VSI option with a binary type and no encapsulation.
 +      </para>
 +      </note>
 +      <note>
 +      <para>
 +      Option definitions in client classes is allowed only for these
 +      limited option set (codes 43 and from 224 to 254), and only
 +      for DHCPv4.
 +      </para>
 +      </note>
 +    </section>
 +
+     <section xml:id="dhcp4-vendor-opts">
        <title>DHCPv4 Vendor Specific Options</title>
        <para>
        Currently there are two option spaces defined for the DHCPv4 daemon:
      ...
  }</screen>
        </para>
 +
 +      <para>
 +      Another possibility, added in Kea 1.3, is to redefine the option,
 +      see <xref linkend="dhcp4-private-opts"/>.
 +      </para>
      </section>
  
-     <section id="dhcp4-option-spaces">
+     <section xml:id="dhcp4-option-spaces">
  
        <title>Nested DHCPv4 Options (Custom Option Spaces)</title>
        <para>It is sometimes useful to define a completely new option
        <para>
          myhost-172-16-1-10.example.com.
        </para>
 +      </section>
      </section>
  
-     <section id="dhcp4-next-server">
+     <section xml:id="dhcp4-next-server">
        <title>Next Server (siaddr)</title>
        <para>In some cases, clients want to obtain configuration from a TFTP server.
        Although there is a dedicated option for it, some devices may use the siaddr field
      with classification using expressions.</para>
      </section>
  
 -    <section xml:id="reservations4-mysql-pgsql">
 -      <title>Storing Host Reservations in MySQL or PostgreSQL</title>
 +    <section id="reservations4-mysql-pgsql-cql">
 +      <title>Storing Host Reservations in MySQL, PostgreSQL or Cassandra</title>
  
        <para>
 -        It is possible to store host reservations in MySQL or PostgreSQL database. See
 -        <xref linkend="hosts4-storage"/> for information on how to configure Kea to use
 -        reservations stored in MySQL or PostgreSQL. Kea does not provide any dedicated
 -        tools for managing reservations in a database. The Kea wiki <uri xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://kea.isc.org/wiki/HostReservationsHowTo">http://kea.isc.org/wiki/HostReservationsHowTo</uri> provides detailed
 -        information and examples of how reservations can be inserted into the
 -        database.
 +        It is possible to store host reservations in MySQL, PostgreSQL or Cassandra. See
 +        <xref linkend="hosts6-storage" /> for information on how to configure Kea to use
 +        reservations stored in MySQL, PostgreSQL or Cassandra. Kea provides dedicated hook for
 +        managing reservations in a database, section <xref linkend="host-cmds" /> provide
-         detailed information.
++        detailed information. <uri
++        xmlns:xlink="http://www.w3.org/1999/xlink"
++        xlink:href="http://kea.isc.org/wiki/HostReservationsHowTo">http://kea.isc.org/wiki/HostReservationsHowTo</uri>
++        provides some examples how to conduct common host reservation operations.
        </para>
  
 -      <note><simpara>In Kea 1.1.0 maximum length of an option specified per host is
 +      <note><simpara>In Kea maximum length of an option specified per host is
        arbitrarily set to 4096 bytes.</simpara></note>
      </section>
  
-     <section id="reservations4-tuning">
 -    <section xml:id="reservations4-cql">
 -      <title>Storing host reservations in CQL (Cassandra)</title>
 -      <para>Kea currently does not support storing reservations in
 -      Cassandra (CQL).</para>
 -    </section>
 -
 -
+     <section xml:id="reservations4-tuning">
        <title>Fine Tuning DHCPv4 Host Reservation</title>
  
        <para>The host reservation capability introduces additional restrictions for the
@@@ -3512,456 -3255,15 +3512,456 @@@ If not specified, the default value is
  src/lib/dhcpsrv/cfg_host_operations.cc -->
  
  </para>
 +   </section>
  
 +  </section>
 +  <!-- end of host reservations section -->
  
  
 -   </section>
 +  <!-- shared networks -->
 +
 +  <section id="shared-network4">
 +    <title>Shared networks in DHCPv4</title>
 +
 +    <para>DHCP servers use subnet information in two ways. First, it is used
 +    to determine the point of attachment, or simply put, where the client is
 +    connected to the network. Second, the subnet information is used to group
 +    information pertaining to specific location in the network. This approach
 +    works well in general case, but the are scenarios where the boundaries are
 +    blurred. Sometimes it is useful to have more than one logical IP subnet
 +    being deployed on the same physical link. The need to understand
 +    that two or more subnets are used on the same link requires additional logic
 +    in the DHCP server. This capability has been added in Kea 1.3.0. It is
 +    called "shared networks" in Kea and ISC DHCP projects. It is sometimes also
 +    called "shared subnets". In Microsoft's nomenclature it is called "multinet".
 +    </para>
 +
 +    <para>There are many use cases where the feature is useful. This paragraph
 +    explains just a handful of the most common ones. The first and by far the most
 +    common use case is an existing network that has grown and is running out of
 +    available address space. Rather than migrating all devices to a new, larger
 +    subnet, it is easier to simply configure additional subnet on top of the
 +    existing one. Sometimes, due to address space fragmentation (e.g. only many
 +    disjoint /24s are available) this is the only choice. Also, configuring
 +    additional subnet has the advantage of not disrupting the operation of
 +    existing devices.</para>
 +
 +    <para>Another very frequent use case comes from cable networks. There are two types
 +    of devices in cable networks: cable modems and the end user devices behind
 +    them. It is a common practice to use different subnet for cable modems to
 +    prevent users from tinkering with their cable modems. In this case, the
 +    distinction is based on the type of device, rather than address space
 +    exhaustion.</para>
 +
 +    <para>A client connected to a shared network may be assigned an address from
 +    any of the address pools defined within the subnets belonging to the shared
 +    network. Internally, the server selects one of the subnets belonging to a
 +    shared network and tries to allocate an address from this subnet. If the
 +    server is unable to allocate an address from the selected subnet (e.g. due
 +    to address pools exhaustion) it will use another subnet from the same shared
 +    network and try to allocate an address from this subnet etc. Therefore, in the
 +    typical case, the server will allocate all addresses available for a given
 +    subnet before it starts allocating addresses from other subnets belonging to
 +    the same shared network. However, in certain situations the client can be
 +    allocated an address from the other subnets before the address pools in the
 +    first subnet get exhausted, e.g. when the client provides a hint that
 +    belongs to another subnet or the client has reservations in a different than
 +    default subnet.
 +    </para>
 +
 +    <note>
 +    <para>It is strongly discouraged for the Kea deployments to assume that the
 +      server doesn't allocate addresses from other subnets until it uses all
 +      the addresses from the first subnet in the shared network. Apart from the
 +      fact that hints, host reservations and client classification affect subnet
 +      selection, it is also foreseen that we will enhance allocation strategies
 +      for shared networks in the future versions of Kea, so as the selection
 +      of subnets within a shared network is equally probable (unpredictable).</para>
 +    </note>
 +
 +    <para>In order to define a shared network an additional configuration scope
 +    is introduced:
 +<screen>
 +{
 +"Dhcp4": {
 +    <userinput>"shared-networks": [
 +        {
 +            // Name of the shared network. It may be an arbitrary string
 +            // and it must be unique among all shared networks.
 +            "name": "my-secret-lair-level-1",
 +
 +            // Subnet selector can be specifed on the shared network level.
 +            // Subnets from this shared network will be selected for directly
 +            // connected clients sending requests to server's "eth0" interface.
 +            "interface": "eth0",
 +
 +            // This starts a list of subnets in this shared network.
 +            // There are two subnets in this example.
 +            "subnet4": [
 +                {
 +                    "subnet": "10.0.0.0/8",
 +                    "pools": [ { "pool":  "10.0.0.1 - 10.0.0.99" } ],
 +                },
 +                {
 +                    "subnet": "192.0.2.0/24",
 +                    "pools": [ { "pool":  "192.0.2.100 - 192.0.2.199" } ]
 +                }
 +            ],
 +        } ]</userinput>, // end of shared-networks
 +
 +    // It is likely that in your network you'll have a mix of regular,
 +    // "plain" subnets and shared networks. It is perfectly valid to mix
 +    // them in the same config file.
 +    //
 +    // This is regular subnet. It's not part of any shared-network.
 +    "subnet4": [
 +        {
 +            "subnet": "192.0.3.0/24",
 +            "pools": [ { "pool":  "192.0.3.1 - 192.0.3.200" } ],
 +            "interface": "eth1"
 +        }
 +    ]
 +
 +} // end of Dhcp4
 +}
 +</screen>
 +    </para>
 +    <para>As you see in the example, it is possible to mix shared and regular
 +    ("plain") subnets. Each shared network must have a unique name. This is
 +    similar to ID for subnets, but gives you more flexibility. This is used
 +    for logging, but also internally for identifying shared networks.</para>
 +
 +    <para>In principle it makes sense to define only shared networks that
 +    consist of two or more subnets. However, for testing purposes it is allowed
 +    to define a shared network with just one subnet or even an empty one.  This
 +    is not a recommended practice in production networks, as the shared network
 +    logic requires additional processing and thus lowers server's performance.
 +    To avoid unnecessary performance degradation the shared subnets should only
 +    be defined when required by the deployment.
 +    </para>
 +
 +    <para>Shared networks provide an ability to specify many parameters in
 +    the shared network scope that will apply to all subnets within it. If
 +    necessary, you can specify a parameter on the shared network scope and then
 +    override its value in the subnet scope. For example:
 +<screen>
 +"shared-networks": [
 +    {
 +        "name": "lab-network3",
 +
 +        "interface": "eth0",
 +
 +        // This applies to all subnets in this shared network, unless
 +        // values are overridden on subnet scope.
 +        <userinput>"valid-lifetime": 600</userinput>,
 +
 +        // This option is made available to all subnets in this shared
 +        // network.
 +        <userinput>"option-data": [ {
 +            "name": "log-servers",
 +            "data": "1.2.3.4"
 +        } ]</userinput>,
 +
 +        "subnet4": [
 +            {
 +                "subnet": "10.0.0.0/8",
 +                "pools": [ { "pool":  "10.0.0.1 - 10.0.0.99" } ],
 +
 +                // This particular subnet uses different values.
 +                <userinput>"valid-lifetime": 1200,
 +                "option-data": [
 +                {
 +                    "name": "log-servers",
 +                    "data": "10.0.0.254"
 +                },
 +                {
 +                    "name": "routers",
 +                    "data": "10.0.0.254"
 +                } ]</userinput>
 +            },
 +            {
 +                 "subnet": "192.0.2.0/24",
 +                 "pools": [ { "pool":  "192.0.2.100 - 192.0.2.199" } ],
 +
 +                 // This subnet does not specify its own valid-lifetime value,
 +                 // so it is inherited from shared network scope.
 +                 <userinput>"option-data": [
 +                 {
 +                     "name": "routers",
 +                     "data": "192.0.2.1"
 +                 } ]</userinput>
 +            }
 +        ]
 +    } ]</screen>
 +    In this example, there is a log-servers option defined that is available to
 +    clients in both subnets in this shared network. Also, a valid lifetime is
 +    set to 10 minutes (600s). However, the first subnet overrides some of the values
 +    (valid lifetime is 20 minutes, different IP address for log-servers), but
 +    also adds its own option (router address). Assuming a client asking for
 +    router and log servers options is assigned a lease from this subnet, he will
 +    get a lease for 20 minutes and log-servers and routers value of 10.0.0.254.
 +    If the same client is assigned to the second subnet, he will get a 10
 +    minutes long lease, log-servers value of 1.2.3.4 and routers set to 192.0.2.1.
 +    </para>
 +
 +    <section>
 +      <title>Local and relayed traffic in shared networks</title>
 +
 +    <para>It is possible to specify interface name in the shared network scope to
 +    tell the server that this specific shared network is reachable directly (not
 +    via relays) using local network interface. It is sufficient to specify
 +    it once on the shared network level. As all subnets in a shared network are
 +    expected to be used on the same physical link, it is a configuration error
 +    to attempt to define a shared network using subnets that are reachable over
 +    different interfaces. It is allowed to specify interface parameter on each
 +    subnet, although its value must be the same for each subnet. Thus it's
 +    usually more convenient to specify it once on the shared network level.
 +<screen>
 +"shared-networks": [
 +    {
 +        "name": "office-floor-2",
 +
 +        // This tells Kea that the whole shared networks is reachable over
 +        // local interface. This applies to all subnets in this network.
 +        <userinput>"interface": "eth0"</userinput>,
 +
 +        "subnet4": [
 +            {
 +                "subnet": "10.0.0.0/8",
 +                "pools": [ { "pool":  "10.0.0.1 - 10.0.0.99" } ],
 +                <userinput>"interface": "eth0"</userinput>
 +            },
 +            {
 +                 "subnet": "192.0.2.0/24",
 +                 "pools": [ { "pool":  "192.0.2.100 - 192.0.2.199" } ]
 +
 +                 // Specifying a different interface name is configuration
 +                 // error:
 +                 // "interface": "eth1"
 +            }
 +        ]
 +    } ]
 +</screen>
 +</para>
 +
 +<para>Somewhat similar to interface names, also relay IP addresses can be
 +specified for the whole shared network. However, depending on your relay
 +configuration, it may use different IP addresses depending on which subnet
 +is being used. Thus there is no requirement to use the same IP relay address
 +for each subnet. Here's an example:
 +
 +<screen>
 +"shared-networks": [
 +    {"
 +        "name": "kakapo",
 +        <userinput>"relay": {
 +            "ip-address": "192.3.5.6"
 +        }</userinput>,
 +        "subnet4": [
 +            {
 +                "subnet": "192.0.2.0/26",
 +                <userinput>"relay": {
 +                    "ip-address": "192.1.1.1"
 +                }</userinput>,
 +                "pools": [ { "pool": "192.0.2.63 - 192.0.2.63" } ]
 +            },
 +            {
 +                "subnet": "10.0.0.0/24",
 +                <userinput>"relay": {
 +                    "ip-address": "192.2.2.2"
 +                }</userinput>,
 +                "pools": [ { "pool": "10.0.0.16 - 10.0.0.16" } ]
 +            }
 +        ]
 +    }
 +]</screen>
 +In this particular case the relay IP address specified on network level doesn't
 +have much sense, as it is overridden in both subnets, but it was left there
 +as an example of how one could be defined on network level. Note that the
 +relay agent IP address typically belongs to the subnet it relays packets from,
 +but this is not a strict requirement. Therefore Kea accepts any value here
 +as long as it is valid IPv4 address.</para>
 +
 +    </section>
 +    <section>
 +      <title>Client classification in shared networks</title>
 +
 +      <para>Sometimes it is desired to segregate clients into specific subnets
 +      based on some properties. This mechanism is called client classification
 +      and is described in <xref linkend="classify"/>. Client classification
 +      can be applied to subnets belonging to shared networks in the same way
 +      as it is used for subnets specified outside of shared networks.
 +      It is important to understand how the server selects subnets for
 +      the clients when client classification is in use, to assure that the
 +      desired subnet is selected for a given client type.</para>
 +
 +      <para>If a subnet is associated with some classes, only the clients
 +      belonging to any of these classes can use this subnet. If there are no
 +      classes specified for a subnet, any client connected to a given shared
 +      network can use this subnet. A common mistake is to assume that the
 +      subnet including client classes is preferred over subnets without
 +      client classes. Consider the following example:
 +
 +<screen>
 +{
 +    "client-classes": [
 +        {
 +            "name": "b-devices",
 +            "test": "option[93].hex == 0x0002"
 +        }
 +    ],
 +    "shared-networks": [
 +        {
 +            "name": "galah",
 +            "interface": "eth0",
 +            "subnet4": [
 +                {
 +                    "subnet": "192.0.2.0/26",
 +                    "pools": [ { "pool": "192.0.2.1 - 192.0.2.63" } ],
 +                },
 +                {
 +                    "subnet": "10.0.0.0/24",
 +                    "pools": [ { "pool": "10.0.0.2 - 10.0.0.250" } ],
 +                    <userinput>"client-class": "b-devices"</userinput>
 +                }
 +            ]
 +        }
 +    ]
 +}
 +</screen>
 +
 +        If the client belongs to "b-devices" class (because it includes option
 +        93 with a value of 0x0002) it doesn't guarantee that the subnet 10.0.0.0/24
 +        will be used (or preferred) for this client. The server can use any of
 +        the two subnets because the subnet 192.0.2.0/26 is also allowed for
 +        this client. The client classification used in this case should be pereceived
 +        as a way to restrict access to certain subnets, rather than a way to express
 +        subnet preference. For example, if the client doesn't belong to the
 +        "b-devices" class it may only use the subnet 192.0.2.0/26 and will
 +        never use the subnet 10.0.0.0/24.
 +      </para>
 +
 +      <para>A typical use case for client classification is in the cable network,
 +      where cable modems should use one subnet and other devices should use
 +      another subnet within the same shared network. In this case it is required
 +      to apply classification on all subnets. The following example defines two
 +      classes of devices. The subnet selection is  made based on option 93 values.
 +<screen>
 +{
 +    "client-classes": [
 +        {
 +
 +            "name": "a-devices",
 +            "test": "option[93].hex == 0x0001"
 +        },
 +        {
 +            "name": "b-devices",
 +            "test": "option[93].hex == 0x0002"
 +        }
 +    ],
 +    "shared-networks": [
 +        {
 +            "name": "galah",
 +            "interface": "eth0",
 +            "subnet4": [
 +                {
 +                    "subnet": "192.0.2.0/26",
 +                    "pools": [ { "pool": "192.0.2.1 - 192.0.2.63" } ],
 +                    <userinput>"client-class": "a-devices"</userinput>
 +                },
 +                {
 +                    "subnet": "10.0.0.0/24",
 +                    "pools": [ { "pool": "10.0.0.2 - 10.0.0.250" } ],
 +                    <userinput>"client-class": "b-devices"</userinput>
 +                }
 +            ]
 +        }
 +    ]
 +}
 +</screen>
 +In this example each class has its own restriction. Only clients that belong to
 +class "a-devices" will be able to use subnet 192.0.2.0/26 and only clients
 +belonging to b-devices will be able to use subnet 10.0.0.0/24. Care should be
 +taken to not define too restrictive classification rules, as clients that are
 +unable to use any subnets will be refused service. Although, this may be a
 +desired outcome if one desires to service only clients of known properties
 +(e.g. only VoIP phones allowed on a given link).</para>
 +
 +    <para>
 +      Note that it is possible to achieve similar effect as presented in this
 +      section without the use of shared networks. If the subnets are placed in
 +      the global subnets scope, rather than in the shared network, the server
 +      will still use classification rules to pick the right subnet for a given
 +      class of devices. The major benefit of placing subnets within the
 +      shared network is that common parameters for the logically grouped
 +      subnets can be specified once, in the shared network scope, e.g.
 +      "interface" or "relay" parameter. All subnets belonging to this shared
 +      network will inherit those parameters.
 +    </para>
 +
 +    </section>
 +
 +    <section>
 +      <title>Host reservations in shared networks</title>
 +
 +<para>
 +  Subnets being part of a shared network allow host reservations, similar to
 +  regular subnets:
 +  <screen>
 +{
 +    "shared-networks": [
 +    {
 +        "name": "frog",
 +        "interface": "eth0",
 +        "subnet4": [
 +            {
 +                "subnet": "192.0.2.0/26",
 +                "id": 100,
 +                "pools": [ { "pool": "192.0.2.1 - 192.0.2.63" } ],
 +                <userinput>"reservations": [
 +                    {
 +                        "hw-address": "aa:bb:cc:dd:ee:ff",
 +                        "ip-address": "192.0.2.28"
 +                    }
 +                ]</userinput>
 +            },
 +            {
 +                "subnet": "10.0.0.0/24",
 +                "id": 101,
 +                "pools": [ { "pool": "10.0.0.1 - 10.0.0.254" } ],
 +                <userinput>"reservations": [
 +                    {
 +                        "hw-address": "11:22:33:44:55:66",
 +                        "ip-address": "10.0.0.29"
 +                    }
 +                ]</userinput>
 +            }
 +        ]
 +    }
 +    ]
 +}
 +  </screen>
 +</para>
 +<para>It is worth noting that Kea conducts additional checks when processing a
 +packet if shared networks are defined. First, instead of simply checking if
 +there's a reservation for a given client in his initially selected subnet, it
 +goes through all subnets in a shared network looking for a reservation. This is
 +one of the reasons why defining a shared network may impact performance. If
 +there is a reservation for a client in any subnet, that particular subnet will
 +be picked for the client. Although it's technically not an error, it is
 +considered a bad practice to define reservations for the same host in multiple
 +subnets belonging to the same shared network.</para>
 +
 +<para>While not strictly mandatory, it is strongly recommended to use explicit
 +"id" values for subnets if you plan to use database storage for host
 +reservations. If ID is not specified, the values for it be autogenerated,
 +i.e. it will assign increasing integer values starting from 1. Thus, the
 +autogenerated IDs are not stable across configuration changes.</para>
 +    </section>
  
    </section>
 -  <!-- end of host reservations section -->
  
-     <section id="dhcp4-serverid">
+     <section xml:id="dhcp4-serverid">
        <title>Server Identifier in DHCPv4</title>
        <para>
          The DHCPv4 protocol uses a "server identifier" to allow clients
          received. A single server instance will use multiple server identifiers
          if it is receiving queries on multiple interfaces.
        </para>
 +
        <para>
 -        Currently there is no mechanism to override the default server identifiers
 -        by an administrator. In the future, the configuration mechanism will be used
 -        to specify the custom server identifier.
 +        It is possible to override default server identifier values by specifying
 +        "dhcp-server-identifier" option. This option is only supported on the
 +        global, shared network and subnet level. It must not be specified
 +        on client class and host reservation level.
        </para>
 +
 +      <para>
 +        The following example demonstrates how to override server identifier for
 +        a subnet:
 +<screen>
 +"subnet4": [
 +    {
 +        "subnet": "192.0.2.0/24",
 +        "option-data": [
 +            {
 +                "name": "dhcp-server-identifier",
 +                "data": "10.2.5.76"
 +            }
 +        ],
 +        ...
 +    }
 +]</screen>
 +</para>
      </section>
  
-     <section id="dhcp4-subnet-selection">
+     <section xml:id="dhcp4-subnet-selection">
        <title>How the DHCPv4 Server Selects a Subnet for the Client</title>
        <para>
          The DHCPv4 server differentiates between the directly connected clients,
index 492f384229fe5e47d61d9cce8cacebccbfbb1e4e,917513f4a06af41ae2a2ef7f89531ee24f649f6d..f5e1ae340eaf3aab3d7b513da3510ab09fa8b4ee
@@@ -1,13 -1,8 +1,15 @@@
- <?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="dhcp6">
++<!--
++ - Copyright (C) 2014-2018 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/.
++-->
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="dhcp6">
      <title>The DHCPv6 Server</title>
  
-     <section id="dhcp6-start-stop">
+     <section xml:id="dhcp6-start-stop">
        <title>Starting and Stopping the DHCPv6 Server</title>
  
        <para>
@@@ -599,7 -581,8 +600,7 @@@ for MySQL and PostgreSQL databases.</pa
  
  </section>
  
- <section id="dhcp6-interface-selection">
 -
+ <section xml:id="dhcp6-interface-selection">
    <title>Interface Selection</title>
    <para>The DHCPv6 server has to be configured to listen on specific network
    interfaces.  The simplest network interface configuration instructs the server to
@@@ -1228,14 -1208,15 +1227,14 @@@ temporarily override a list of interfac
          no means to validate the format at the moment.
        </para>
  
 -
      <para>
-       <table frame="all" id="dhcp6-std-options-list">
+       <table frame="all" xml:id="dhcp6-std-options-list">
          <title>List of Standard DHCPv6 Options</title>
-         <tgroup cols='4'>
-         <colspec colname='name'/>
-         <colspec colname='code' align='center'/>
-         <colspec colname='type' align='center'/>
-         <colspec colname='array' align='center'/>
+         <tgroup cols="4">
+         <colspec colname="name"/>
+         <colspec colname="code" align="center"/>
+         <colspec colname="type" align="center"/>
+         <colspec colname="array" align="center"/>
          <thead>
            <row><entry>Name</entry><entry>Code</entry><entry>Type</entry><entry>Array?</entry></row>
          </thead>
  <!-- Vendor-specific Information is configurable by the administrator -->
  <row><entry>vendor-opts</entry><entry>17</entry><entry>uint32</entry><entry>false</entry></row>
  <!--
 -<row><entry>interface-id</entry><entry>18</entry><entry>binary</entry><entry>false</entry></row>
 +<row><entry>interface-id</entry><entry>18</entry><entry>hex</entry><entry>false</entry></row>
  <row><entry>reconf-msg</entry><entry>19</entry><entry>uint8</entry><entry>false</entry></row>
  <row><entry>reconf-accept</entry><entry>20</entry><entry>empty</entry><entry>false</entry></row> -->
- -->
+ --&gt;
  <row><entry>sip-server-dns</entry><entry>21</entry><entry>fqdn</entry><entry>true</entry></row>
  <row><entry>sip-server-addr</entry><entry>22</entry><entry>ipv6-address</entry><entry>true</entry></row>
  <row><entry>dns-servers</entry><entry>23</entry><entry>ipv6-address</entry><entry>true</entry></row>
      </para>
      </section>
  
-     <section id="dhcp6-custom-options">
 +    <section id="s46-options">
 +      <title>Common Softwire46 Options</title>
 +      <para>
 +        Softwire46 options are involved in IPv4 over IPv6 provisioning by
 +        means of tunneling or translation as specified in the
 +        <ulink url="http://tools.ietf.org/html/rfc7598">RFC 7598</ulink>.
 +        The following sections provide configuration examples of these
 +        options.
 +      </para>
 +
 +      <section id="s46-containers">
 +      <title>Softwire46 Container Options</title>
 +      <para>
 +        S46 container options group rules and optional port parameters
 +        for a specified domain. There are three container options specified
 +        in the "dhcp6" (top level) option space: MAP-E Container option,
 +        MAP-T Container option and S46 Lightweight 4over6 Container option.
 +        These options only contain encapsulated options specified below.
 +        They do not include any data fields.
 +      </para>
 +
 +      <para>
 +        In order to configure the server to send specific container option
 +        along with all encapsulated options, the container option must be
 +        included in the server configuration as shown below:
 +<screen>
 +"Dhcp6": {
 +    ...
 +    "option-data": [
 +        {
 +            "name": "s46-cont-mape"
 +        } ],
 +    ...
 +}
 +</screen>
 +
 +        This configuration will cause the server to include MAP-E Container
 +        option to the client. Use "s46-cont-mapt" or "s46-cont-lw" for the
 +        MAP-T Container and S46 Lightweight 4over6 Container options
 +        respectively.
 +      </para>
 +
 +      <para>
 +        All remaining softwire options described below are included in one
 +        of the container options. Thus, they have to be included in appropriate
 +        option spaces by selecting a "space" name, which specifies in which
 +        option they are supposed to be included.
 +      </para>
 +    </section>
 +
 +      <section>
 +        <title>S46 Rule Option</title>
 +        <para>
 +          The S46 Rule option is used for conveying the Basic Mapping Rule (BMR)
 +          and Forwarding Mapping Rule (FMR).
 +<screen>
 +{
 +    "space": "s46-cont-mape-options",
 +    "name": "s46-rule",
 +    "data": "128, 0, 24, 192.0.2.0, 2001:db8:1::/64"
 +}
 +</screen>
 +         Other possible "space" value is "s46-cont-mapt-options".
 +        </para>
 +
 +        <para>
 +          The S46 Rule option conveys a number of parameters:
 +
 +      <itemizedlist>
 +        <listitem>
 +          <simpara><command>flags</command>, an unsigned 8 bits integer, with
 +          currently only the most significant bit specified. It denotes whether
 +          the rule can be used for forwarding (128) or not (0).
 +          </simpara>
 +        </listitem>
 +
 +        <listitem>
 +          <simpara><command>ea-len</command>, an 8 bits long Embedded Address length. Allowed values
 +          range from 0 to 48.</simpara>
 +        </listitem>
 +
 +        <listitem>
 +          <simpara><command>IPv4 prefix length</command>, 8 bits long; expresses the prefix length of the
 +          Rule IPv4 prefix specified in the ipv4-prefix field.  Allowed
 +          values range from 0 to 32.</simpara>
 +        </listitem>
 +
 +        <listitem>
 +          <simpara><command>IPv4 prefix</command>, a fixed-length 32-bit field that specifies the IPv4
 +          prefix for the S46 rule.  The bits in the prefix after prefix4-len
 +          number of bits are reserved and MUST be initialized to zero by the
 +          sender and ignored by the receiver.</simpara>
 +        </listitem>
 +
 +        <listitem>
 +          <simpara><command>IPv6 prefix</command> in prefix/length notation that specifies the IPv6 domain
 +          prefix for the S46 rule.  The field is padded on the right with zero
 +          bits up to the nearest octet boundary when prefix6-len is not evenly
 +          divisible by 8.</simpara>
 +        </listitem>
 +
 +      </itemizedlist>
 +        </para>
 +      </section>
 +        <section>
 +            <title>S46 BR Option</title>
 +            <para>
 +              The S46 BR option is used to convey the IPv6 address of the
 +              Border Relay. This option is mandatory in the MAP-E
 +              Container option and not permitted in the MAP-T and
 +              S46 Lightweight 4over6 Container options.
 +<screen>
 +{
 +    "space": "s46-cont-mape-options",
 +    "name": "s46-br",
 +    "data": "2001:db8:cafe::1",
 +}
 +</screen>
 +           Other possible "space" value is "s46-cont-lw-options".
 +          </para>
 +        </section>
 +
 +        <section>
 +            <title>S46 DMR Option</title>
 +            <para>
 +              The S46 DMR option is used to convey values for the Default
 +              Mapping Rule (DMR). This option is mandatory in the MAP-T
 +              container option and not permitted in the MAP-E and S46
 +              Lightweight 4over6 Container options.
 +<screen>
 +{
 +    "space": "s46-cont-mapt-options",
 +    "name": "s46-dmr",
 +    "data": "2001:db8:cafe::/64",
 +}
 +</screen>
 +              This option must not be included in other containers.
 +            </para>
 +        </section>
 +
 +        <section>
 +            <title>S46 IPv4/IPv6 Address Binding option.</title>
 +            <para>
 +              The S46 IPv4/IPv6 Address Binding option may be used to specify
 +              the full or shared IPv4 address of the Customer Edge (CE).
 +              The IPv6 prefix field is used by the CE to identify the
 +              correct prefix to use for the tunnel source.
 +<screen>
 +{
 +    "space": "s46-cont-lw",
 +    "name": "s46-v4v6bind",
 +    "data": "192.0.2.3, 2001:db8:1:cafe::/64"
 +}
 +</screen>
 +            This option must not be included in other containers.
 +          </para>
 +        </section>
 +        <section>
 +            <title>S46 Port Parameters</title>
 +            <para>
 +              The S46 Port Parameters option specifies optional port set
 +              information that MAY be provided to CEs
 +<screen>
 +{
 +    "space": "s46-rule-options",
 +    "name": "s46-portparams",
 +    "data": "2, 3/4",
 +}
 +</screen>
 +              Other possible "space" value is "s46-v4v6bind" to include
 +              this option in the S46 IPv4/IPv6 Address Binding option.
 +            </para>
 +            <para>
 +              Note that the second value in the example above specifies the
 +              PSID and PSID length fields in the format of PSID/PSID length.
 +              This is equivalent to the values of PSID-len=4 and
 +              PSID=12288 conveyed in the S46 Port Parameters option.
 +            </para>
 +        </section>
 +    </section>
 +
+     <section xml:id="dhcp6-custom-options">
        <title>Custom DHCPv6 Options</title>
        <para>It is possible to define options in addition to the standard ones.
        Assume that we want to define a new DHCPv6 option called "foo" which will have
@@@ -2327,7 -2063,8 +2326,7 @@@ should include options from the isc opt
        </itemizedlist>
        </para>
  
-       <section id="dhcpv6-d2-io-config">
 -
+       <section xml:id="dhcpv6-d2-io-config">
        <title>DHCP-DDNS Server Connectivity</title>
        <para>
        In order for NCRs to reach the D2 server, kea-dhcp6 must be able
      with classification using expressions.</para>
      </section>
  
 -    <section xml:id="reservations6-mysql-pgsql">
 -      <title>Storing Host Reservations in MySQL or PostgreSQL</title>
 +    <section id="reservations6-mysql-pgsql-cql">
 +      <title>Storing Host Reservations in MySQL, PostgreSQL or Cassandra</title>
  
        <para>
 -        It is possible to store host reservations in MySQL or PostgreSQL. See <xref linkend="hosts6-storage"/> for information on how to configure Kea to use
 -        reservations stored in MySQL or PostgreSQL. Kea does not provide any dedicated
 -        tools for managing reservations in a database. The Kea wiki <uri xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://kea.isc.org/wiki/HostReservationsHowTo">http://kea.isc.org/wiki/HostReservationsHowTo</uri> provides detailed
 -        information and examples of how reservations can be inserted into the
 -        database.
 +        It is possible to store host reservations in MySQL, PostgreSQL or Cassandra. See
 +        <xref linkend="hosts6-storage" /> for information on how to configure Kea to use
 +        reservations stored in MySQL, PostgreSQL or Cassandra. Kea provides dedicated hook for
 +        managing reservations in a database, section <xref linkend="host-cmds" /> provide
-         detailed information.
++        detailed information. The Kea wiki <uri
++        xmlns:xlink="http://www.w3.org/1999/xlink"
++        xlink:href="http://kea.isc.org/wiki/HostReservationsHowTo">http://kea.isc.org/wiki/HostReservationsHowTo</uri>
++        provides some examples how to conduct some common operations
++        on host reservations.
        </para>
  
 -      <note><simpara>In Kea 1.1.0 maximum length of an option specified per host is
 +      <note><simpara>In Kea maximum length of an option specified per host is
        arbitrarily set to 4096 bytes.</simpara></note>
      </section>
  
-     <section id="reservations6-tuning">
 -    <section xml:id="reservations6-cql">
 -      <title>Storing Host Reservations in CQL (Cassandra)</title>
 -      <para>Kea currently does not support storing reservations in
 -      Cassandra (CQL).</para>
 -    </section>
 -
+     <section xml:id="reservations6-tuning">
        <title>Fine Tuning DHCPv6 Host Reservation</title>
  
        <para>The host reservation capability introduces additional restrictions for the
@@@ -3238,474 -2979,7 +3239,474 @@@ If not specified, the default value is
    </section>
    <!-- end of host reservations section -->
  
-     <section id="dhcp6-serverid">
 +  <!-- shared networks starts here -->
 +  <section id="shared-network6">
 +    <title>Shared networks in DHCPv6</title>
 +
 +    <para>DHCP servers use subnet information in two ways. First, it is used
 +    to determine the point of attachment, or simply put, where the client is
 +    connected to the network. Second, the subnet information is used to group
 +    information pertaining to specific location in the network. This approach
 +    works well in general case, but the are scenarios where the boundaries are
 +    blurred. Sometimes it is useful to have more than one logical IP subnet
 +    being deployed on the same physical link. The need to understand
 +    that two or more subnets are used on the same link requires additional logic
 +    in the DHCP server. This capability has been added in Kea 1.3.0.  It is
 +    called "shared networks" in Kea and ISC DHCP projects. It is sometimes also
 +    called "shared subnets". In Microsoft's nomenclature it is called "multinet".
 +    </para>
 +
 +    <para>There are many use cases where the feature is useful. The most common
 +    example in the IPv4 case is when the server is running out of available
 +    addresses in a subnet. This is less common in IPv6, but the shared networks
 +    are still useful in IPv6. One of the use cases is an exhaustion of IPv6
 +    delegated prefixes within a subnet. Another IPv6 specific example
 +    is an experiment with addressing scheme. With the advent of IPv6 deployment
 +    and vast address space, many organizations split the address space into
 +    subnets, then deploy it and after a while discover that they want to split it
 +    differently. In the transition period they want both old and new addressing
 +    to be available. Thus the need for more than one subnet on the same physical
 +    link.</para>
 +
 +    <para>Finally, the case of cable networks is directly applicable in
 +    IPv6. There are two types of devices in cable networks: cable modems and the
 +    end user devices behind them. It is a common practice to use different
 +    subnet for cable modems to prevent users from tinkering with their cable
 +    modems. In this case, the distinction is based on the type of device, rather
 +    than coming out of running out address space.</para>
 +
 +    <para>A client connected to a shared network may be assigned a lease (address
 +    or prefix) from any of the pools defined within the subnets belonging to the
 +    shared network. Internally, the server selects one of the subnets belonging to the
 +    shared network and tries to allocate a lease from this subnet. If the
 +    server is unable to allocate a lease from the selected subnet (e.g. due
 +    to pools exhaustion) it will use another subnet from the same shared
 +    network and try to allocate a lease from this subnet etc. Therefore, in the
 +    typical case, the server will allocate all leases available in a given
 +    subnet before it starts allocating leases from other subnets belonging to
 +    the same shared network. However, in certain situations the client can be
 +    allocated a lease from the other subnets before the pools in the first
 +    subnet get exhausted, e.g. when the client provides a hint that belongs
 +    to another subnet or the client has reservations in a different than
 +    default subnet.
 +    </para>
 +
 +    <note>
 +    <para>It is strongly discouraged for the Kea deployments to assume that the
 +      server doesn't allocate leases from other subnets until it uses all
 +      the leases from the first subnet in the shared network. Apart from the
 +      fact that hints, host reservations and client classification affect subnet
 +      selection, it is also foreseen that we will enhance allocation strategies
 +      for shared networks in the future versions of Kea, so as the selection
 +      of subnets within a shared network is equally probable (unpredictable).</para>
 +    </note>
 +
 +    <para>In order to define a shared network an additional configuration scope
 +    is introduced:
 +<screen>
 +{
 +"Dhcp6": {
 +    <userinput>"shared-networks": [
 +        {
 +            // Name of the shared network. It may be an arbitrary string
 +            // and it must be unique among all shared networks.
 +            "name": "ipv6-lab-1",
 +
 +            // Subnet selector can be specifed on the shared network level.
 +            // Subnets from this shared network will be selected for clients
 +            // communicating via relay agent having the specified IP address.
 +            "relay": {
 +                "ip-address": "2001:db8:2:34::1"
 +            },
 +
 +            // This starts a list of subnets in this shared network.
 +            // There are two subnets in this example.
 +            "subnet6": [
 +                {
 +                    "subnet": "2001:db8::/48",
 +                    "pools": [ { "pool":  "2001:db8::1 - 2001:db8::ffff" } ]
 +                },
 +                {
 +                    "subnet": "3ffe:ffe::/64",
 +                    "pools": [ { "pool":  "3ffe:ffe::/64" } ]
 +                }
 +            ]
 +        } ]</userinput>, // end of shared-networks
 +
 +    // It is likely that in your network you'll have a mix of regular,
 +    // "plain" subnets and shared networks. It is perfectly valid to mix
 +    // them in the same config file.
 +    //
 +    // This is regular subnet. It's not part of any shared-network.
 +    "subnet6": [
 +        {
 +            "subnet": "2001:db9::/48",
 +            "pools": [ { "pool":  "2001:db9::/64" } ],
 +            "relay": {
 +                "ip-address": "2001:db8:1:2::1"
 +            }
 +        }
 +    ]
 +
 +} // end of Dhcp6
 +}
 +</screen>
 +    </para>
 +    <para>As you see in the example, it is possible to mix shared and regular
 +    ("plain") subnets. Each shared network must have a unique name. This is a
 +    similar concept to ID for subnets, but it offers more flexibility. This is used
 +    for logging, but also internally for identifying shared networks.</para>
 +
 +    <para>In principle it makes sense to define only shared networks that
 +    consist of two or more subnets. However, for testing purposes it is allowed
 +    to define a shared network with just one subnet or even an empty one.  This
 +    is not a recommended practice in production networks, as the shared network
 +    logic requires additional processing and thus lowers server's performance.
 +    To avoid unnecessary performance degradation the shared subnets should only
 +    be defined when required by the deployment.
 +    </para>
 +
 +    <para>Shared networks provide an ability to specify many parameters in
 +    the shared network scope that will apply to all subnets within it. If
 +    necessary, you can specify a parameter in the shared network scope and then
 +    override its value on the subnet scope. For example:
 +<screen>
 +"shared-networks": [
 +    {
 +        "name": "lab-network3",
 +        "relay": {
 +             "ip-address": "2001:db8:2:34::1"
 +        },
 +
 +        // This applies to all subnets in this shared network, unless
 +        // values are overridden on subnet scope.
 +        <userinput>"valid-lifetime": 600</userinput>,
 +
 +        // This option is made available to all subnets in this shared
 +        // network.
 +        <userinput>"option-data": [ {
 +            "name": "dns-servers",
 +            "data": "2001:db8::8888"
 +        } ]</userinput>,
 +
 +        "subnet6": [
 +            {
 +                "subnet": "2001:db8:1::/48",
 +                "pools": [ { "pool":  "2001:db8:1::1 - 2001:db8:1::ffff" } ],
 +
 +                // This particular subnet uses different values.
 +                <userinput>"valid-lifetime": 1200,
 +                "option-data": [
 +                {
 +                    "name": "dns-servers",
 +                    "data": "2001:db8::1:2"
 +                },
 +                {
 +                    "name": "unicast",
 +                    "data": "2001:abcd::1"
 +                } ]</userinput>
 +            },
 +            {
 +                 "subnet": "2001:db8:2::/48",
 +                 "pools": [ { "pool":  "2001:db8:2::1 - 2001:db8:2::ffff" } ],
 +
 +                 // This subnet does not specify its own valid-lifetime value,
 +                 // so it is inherited from shared network scope.
 +                 <userinput>"option-data": [
 +                 {
 +                     "name": "dns-servers",
 +                     "data": "2001:db8:cafe::1"
 +                 } ]</userinput>
 +            }
 +        ],
 +    } ]</screen>
 +
 +    In this example, there is a dns-servers option defined that is available to
 +    clients in both subnets in this shared network. Also, a valid lifetime is
 +    set to 10 minutes (600s). However, the first subnet overrides some of the values
 +    (valid lifetime is 20 minutes, different IP address for dns-servers), but
 +    also adds its own option (unicast address). Assuming a client asking for a
 +    server unicast and dns servers options is assigned a lease from this subnet,
 +    he will get a lease for 20 minutes and dns-servers and be allowed to use
 +    server unicast at address 2001:abcd::1. If the same client is assigned to
 +    the second subnet, he will get a 10 minutes long lease, dns-servers value of
 +    2001:db8:cafe::1 and no server unicast.
 +    </para>
 +
 +    <para>Some parameters must be the same in all subnets in the same shared
 +    network. This restriction applies to <command>interface</command> and
 +    <command>rapid-commit</command> settings. The most convenient way is to
 +    define them on shared network scope, but you may specify them for each
 +    subnet. However, care should be taken for each subnet to have the same
 +    value.</para>
 +
 +    <section>
 +      <title>Local and relayed traffic in shared networks</title>
 +
 +    <para>It is possible to specify interface name in the shared network scope to
 +    tell the server that this specific shared network is reachable directly (not
 +    via relays) using local network interface. It is sufficient to specify
 +    it once in the shared network level. As all subnets in a shared network are
 +    expected to be used on the same physical link, it is a configuration error
 +    to attempt to make a shared network out of subnets that are reachable over
 +    different interfaces. It is allowed to specify interface parameter on each
 +    subnet, although its value must be the same for each subnet. Thus it's
 +    usually more convenient to specify it once on the shared network level.
 +<screen>
 +"shared-networks": [
 +    {
 +        "name": "office-floor-2",
 +
 +        // This tells Kea that the whole shared networks is reachable over
 +        // local interface. This applies to all subnets in this network.
 +        <userinput>"interface": "eth0"</userinput>,
 +
 +        "subnet6": [
 +            {
 +                "subnet": "2001:db8::/64",
 +                "pools": [ { "pool":  "2001:db8::1 - 2001:db8::ffff" } ],
 +                <userinput>"interface": "eth0"</userinput>
 +            },
 +            {
 +                 "subnet": "3ffe:abcd::/64",
 +                 "pools": [ { "pool":  "3ffe:abcd::1 - 3ffe:abcd::ffff" } ]
 +
 +                 // Specifying a different interface name is configuration
 +                 // error:
 +                 // "interface": "eth1"
 +            }
 +        ],
 +    } ]
 +</screen>
 +</para>
 +
 +<para>Somewhat similar to interface names, also relay IP addresses can be
 +specified for the whole shared network. However, depending on your relay
 +configuration, it may use different IP addresses depending on which subnet
 +is being used. Thus there is no requirement to use the same IP relay address
 +for each subnet. Here's an example:
 +
 +<screen>
 +"shared-networks": [
 +    {"
 +        "name": "kakapo",
 +        <userinput>"relay": {
 +            "ip-address": "2001:db8::abcd"
 +        }</userinput>,
 +        "subnet6": [
 +            {
 +                "subnet": "2001:db8::/64",
 +                <userinput>"relay": {
 +                    "ip-address": "2001:db8::1234"
 +                }</userinput>,
 +                "pools": [ { "pool":  "2001:db8::1 - 2001:db8::ffff" } ]
 +            },
 +            {
 +                 "subnet": "3ffe:abcd::/64",
 +                 "pools": [ { "pool":  "3ffe:abcd::1 - 3ffe:abcd::ffff" } ],
 +                 <userinput>"relay": {
 +                    "ip-address": "3ffe:abcd::cafe"
 +                 }</userinput>
 +            }
 +        ]
 +    }
 +]</screen>
 +In this particular case the relay IP address specified on network level doesn't
 +have much sense, as it is overridden in both subnets, but it was left there
 +as an example of how one could be defined on network level. Note that the
 +relay agent IP address typically belongs to the subnet it relays packets from,
 +but this is not a strict requirement. Therefore Kea accepts any value here
 +as long as it is valid IPv6 address.</para>
 +
 +    </section>
 +    <section>
 +      <title>Client classification in shared networks</title>
 +
 +      <para>Sometimes it is desired to segregate clients into specific subnets
 +      based on some properties. This mechanism is called client classification
 +      and is described in <xref linkend="classify"/>. Client classification
 +      can be applied to subnets belonging to shared networks in the same way
 +      as it is used for subnets specified outside of shared networks.
 +      It is important to understand how the server selects subnets for
 +      the clients when client classification is in use, to assure that the
 +      desired subnet is selected for a given client type.</para>
 +
 +      <para>If a subnet is associated with some classes, only the clients
 +      belonging to any of these classes can use this subnet. If there are no
 +      classes specified for a subnet, any client connected to a given shared
 +      network can use this subnet. A common mistake is to assume that the
 +      subnet including client classes is preferred over subnets without
 +      client classes. Consider the following example:
 +
 +<screen>
 +{
 +    "client-classes": [
 +        {
 +            "name": "b-devices",
 +            "test": "option[1234].hex == 0x0002"
 +        }
 +    ],
 +    "shared-networks": [
 +        {
 +            "name": "galah",
 +            "relay": {
 +                "ip-address": "2001:db8:2:34::1"
 +            },
 +            "subnet6": [
 +                {
 +                    "subnet": "2001:db8:1::/64",
 +                    "pools": [ { "pool": "2001:db8:1::20 - 2001:db8:1::ff" } ],
 +                },
 +                {
 +                    "subnet": "2001:db8:3::/64",
 +                    "pools": [ { "pool": "2001:db8:3::20 - 2001:db8:3::ff" } ],
 +                    <userinput>"client-class": "b-devices"</userinput>
 +                }
 +            ]
 +        }
 +    ]
 +}
 +</screen>
 +
 +        If the client belongs to "b-devices" class (because it includes option
 +        1234 with a value of 0x0002) it doesn't guarantee that the subnet 2001:db8:3::/64
 +        will be used (or preferred) for this client. The server can use any of
 +        the two subnets because the subnet 2001:db8:1::/64 is also allowed for
 +        this client. The client classification used in this case should be pereceived
 +        as a way to restrict access to certain subnets, rather than a way to express
 +        subnet preference. For example, if the client doesn't belong to the
 +        "b-devices" class it may only use the subnet 2001:db8:1::/64 and will
 +        never use the subnet 2001:db8:3::/64.
 +      </para>
 +
 +      <para>A typical use case for client classification is in the cable network,
 +      where cable modems should use one subnet and other devices should use
 +      another subnet within the same shared network. In this case it is required
 +      to apply classification on all subnets. The following example defines two
 +      classes of devices. The subnet selection is made based on option 1234 values.
 +<screen>
 +{
 +    "client-classes": [
 +        {
 +
 +            "name": "a-devices",
 +            "test": "option[1234].hex == 0x0001"
 +        },
 +        {
 +            "name": "b-devices",
 +            "test": "option[1234].hex == 0x0002"
 +        }
 +    ],
 +    "shared-networks": [
 +        {
 +            "name": "galah",
 +            "relay": {
 +                "ip-address": "2001:db8:2:34::1"
 +            },
 +            "subnet6": [
 +                {
 +                    "subnet": "2001:db8:1::/64",
 +                    "pools": [ { "pool": "2001:db8:1::20 - 2001:db8:1::ff" } ],
 +                    <userinput>"client-class": "a-devices"</userinput>
 +                },
 +                {
 +                    "subnet": "2001:db8:3::/64",
 +                    "pools": [ { "pool": "2001:db8:3::20 - 2001:db8:3::ff" } ],
 +                    <userinput>"client-class": "b-devices"</userinput>
 +                }
 +            ]
 +        }
 +    ]
 +}
 +</screen>
 +In this example each class has its own restriction. Only clients that belong to
 +class a-devices will be able to use subnet 2001:db8:1::/64 and only clients
 +belonging to b-devices will be able to use subnet 2001:db8:3::/64. Care should
 +be taken to not define too restrictive classification rules, as clients that are
 +unable to use any subnets will be refused service. Although, this may be
 +desired outcome if one desires to service only clients of known properties
 +(e.g. only VoIP phones allowed on a given link).</para>
 +
 +    <para>
 +      Note that it is possible to achieve similar effect as presented in this
 +      section without the use of shared networks. If the subnets are placed in
 +      the global subnets scope, rather than in the shared network, the server
 +      will still use classification rules to pick the right subnet for a given
 +      class of devices. The major benefit of placing subnets within the
 +      shared network is that common parameters for the logically grouped
 +      subnets can be specified once, in the shared network scope, e.g.
 +      "interface" or "relay" parameter. All subnets belonging to this shared
 +      network will inherit those parameters.
 +    </para>
 +
 +    </section>
 +
 +    <section>
 +      <title>Host reservations in shared networks</title>
 +
 +<para>
 +  Subnets being part of a shared network allow host reservations, similar to
 +  regular subnets:
 +  <screen>
 +{
 +    "shared-networks": [
 +    {
 +        "name": "frog",
 +        "relay": {
 +            "ip-address": "2001:db8:2:34::1"
 +        },
 +        "subnet6": [
 +            {
 +                "subnet": "2001:db8:1::/64",
 +                "id": 100,
 +                "pools": [ { "2001:db8:1::1 - 2001:db8:1::64" } ],
 +                <userinput>"reservations": [
 +                {
 +                    "duid": "00:03:00:01:11:22:33:44:55:66",
 +                    "ip-addresses": [ "2001:db8:1::28" ]
 +                }
 +                ]</userinput>
 +            },
 +            {
 +                "subnet": "2001:db8:3::/64",
 +                "id": 101,
 +                "pools": [ { "pool": "2001:db8:3::1 - 2001:db8:3::64" } ],
 +                <userinput>"reservations": [
 +                    {
 +                        "duid": "00:03:00:01:aa:bb:cc:dd:ee:ff",
 +                        "ip-addresses": [ "2001:db8:2::28" ]
 +                    }
 +                ]</userinput>
 +            }
 +        ]
 +    }
 +    ]
 +}
 +  </screen>
 +</para>
 +<para>It is worth noting that Kea conducts additional checks when processing a
 +packet if shared networks are defined. First, instead of simply checking if
 +there's a reservation for a given client in his initially selected subnet, it
 +goes through all subnets in a shared network looking for a reservation. This is
 +one of the reasons why defining a shared network may impact performance. If
 +there is a reservation for a client in any subnet, that particular subnet will
 +be picked for the client. Although it's technically not an error, it is
 +considered a bad practice to define reservations for the same host in multiple
 +subnets belonging to the same shared network.</para>
 +
 +<para>While not strictly mandatory, it is strongly recommended to use explicit
 +"id" values for subnets if you plan to use database storage for host
 +reservations. If ID is not specified, the values for it be autogenerated,
 +i.e. it will assign increasing integer values starting from 1. Thus, the
 +autogenerated IDs are not stable across configuration changes.
 +</para>
 +    </section>
 +
 +  </section>
 +
 +  <!-- end of shared networks -->
 +
+     <section xml:id="dhcp6-serverid">
        <title>Server Identifier in DHCPv6</title>
        <para>The DHCPv6 protocol uses a "server identifier" (also known
        as a DUID) for clients to be able to discriminate between several
            <listitem>
              <simpara><emphasis>Issues and Recommendations with Multiple
              Stateful DHCPv6 Options</emphasis>,
-             <ulink url="http://tools.ietf.org/html/rfc7550">RFC
-             7550</ulink>: All recommendations related to the DHCPv6 server
+             <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tools.ietf.org/html/rfc7550">RFC
+             7550</link>: All recommendations related to the DHCPv6 server
              operation are supported.</simpara>
            </listitem>
 +          <listitem>
 +            <simpara><emphasis>DHCPv6 Options for Configuration of Softwire
 +            Address and Port-Mapped Clients</emphasis>,
 +            <ulink url="http://tools.ietf.org/html/rfc7598">RFC
 +            7598</ulink>: All options specified in this specification are
 +            supported by the DHCPv6 server.</simpara>
 +          </listitem>
        </itemizedlist>
      </section>
  
index 66157bf292d22ae2c24fc1ffa94150b2a2e5633b,f638bfaf718d13b880576919b78c240186b1ec80..c58d35fd07808fb3450e57d324ac050898c34308
@@@ -1,10 -1,5 +1,13 @@@
- <?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="faq">
++<!--
++ - Copyright (C) 2015-2018 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/.
++-->
++
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="faq">
    <title>Frequently Asked Questions</title>
  
    <para>This chapter contains a number of frequently asked questions and
index 69f81021c9342df5588be1519030a2f03da7974a,b8bce1224e5b5f2c032802c07444e8f78861e6a0..50115e310616c766b672b9ce5631651ed1057682
@@@ -1,12 -1,7 +1,14 @@@
- <?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="hooks-libraries">
++<!--
++ - Copyright (C) 2014-2018 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/.
++-->
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="hooks-libraries">
      <title>Hooks Libraries</title>
-     <section id="hooks-libraries-introduction">
+     <section xml:id="hooks-libraries-introduction">
        <title>Introduction</title>
        <para>
        Although Kea offers a lot of flexibility, there may be cases where
@@@ -592,62 -507,9 +591,62 @@@ DUID: 17:34:e2:ff:09:92:54 and hardwar
  link address: 3001::1, hop count: 1, identified by remote-id:
  01:02:03:04:0a:0b:0c:0d:0e:0f and subscriber-id: 1a:2b:3c:4d:5e:6f
  </screen>
 -          </para>
 +        </para>
 +        <para>
 +        In addition to logging lease activity driven by DHCPv6 client traffic, it also
 +        logs entries for the following lease management control channel commands:
 +        lease6-add, lease6-update, and lease6-del.  Each entry is a single string
 +        with no embedded end-of-line markers and they will typically have the following
 +        forms:
 +        </para>
 +        <para>
 +        <command>lease6-add:</command>
 +<screen>
 +    Administrator added a lease of address: *address* to a device with DUID: *DUID*
 +</screen>
 +        Dependent on the arguments of the add command, it may also include the hardware address and duration.
 +        </para>
 +        <para>
 +        Example:
 +<screen>
 +Administrator added a lease of address: 2001:db8::3 to a device with DUID: 1a:1b:1c:1d:1e:1f:20:21:22:23:24 for 1 days 0 hrs 0 mins 0 secs
 +</screen>
 +        </para>
 +        <para>
 +        <command>lease6-update:</command>
 +<screen>
 +Administrator updated information on the lease of address: *address* to a device with DUID: *DUID*
 +</screen>
 +        Dependent on the arguments of the update command, it may also include the hardware address and lease duration.
 +        </para>
 +        <para>
 +        Example:
 +<screen>
 +Administrator updated information on the lease of address: 2001:db8::3 to a device with DUID: 1a:1b:1c:1d:1e:1f:20:21:22:23:24, hardware address: 1a:1b:1c:1d:1e:1f
 +</screen>
 +        </para>
 +        <para>
 +        <command>lease6-del:</command>
 +        Deletes have two forms, one by address and one by identifier and identifier type:
 +<screen>
 +Administrator deleted the lease for address: *address*
 +</screen>
 +        or
 +<screen>
 +Administrator deleted a lease for a device identified by: *identifier-type* of *identifier*
 +</screen>
 +        Currently only a type of DUID is supported.
 +        </para>
 +        <para>
 +Examples:
 +<screen>
 +Administrator deleted the lease for address: 2001:db8::3
 +
 +Administrator deleted a lease for a device identified by: duid of 1a:1b:1c:1d:1e:1f:20:21:22:23:24
 +</screen>
 +        </para>
          </section>
-         <section id="forensic-log-configuration">
+         <section xml:id="forensic-log-configuration">
          <title>Configuring the Forensic Log Hooks</title>
            <para>
            To use this functionality the hook library must be included in the
      ]
  }
  </screen>
 +
 +        <para>
 +          When "replace-client-id" is set to false (which is the default setting),
 +          the flex-id hook library uses evaluated flexible identifier solely for
 +          identifying host reservations, i.e. searching for reservations within a
 +          database. This is a functional equivalent of other identifiers,
 +          similar to hardware address or circuit-id. However,
 +          this mode of operation has an implication that if a client device is
 +          replaced, it may cause a conflict between an existing lease (allocated
 +          for old device) and the new lease being allocated for the new device. The
 +          conflict arises because the same flexible identifier is computed for the
 +          replaced device and the server will try to allocate the same lease. The
 +          mismatch between client identifiers sent by new device and old device causes
 +          the server to refuse this new allocation until the old lease expires.
 +          A manifestation of this problem is dependant on specific expression
 +          used as flexible identifier and is likely to appear if you only use options
 +          and other parameters that are identifying where the device is
 +          connected (e.g. circuit-id), rather than the device identification
 +          itself (e.g. MAC address).
 +        </para>
 +
 +        <para>
 +          The flex-id library offers a way to overcome the problem with lease conflicts
 +          by dynamically replacing client identifier (or DUID in DHCPv6 case) with a
 +          value derived from flexible identifier. The server processes the client's
 +          query as if flexible identifier was sent in the client identifier (or DUID)
 +          option. This guarantees that returning client (for which the same flexible
 +          identifier is evaluated) will be assigned the same lease despite the client
 +          identifier and/or MAC address change.
 +        </para>
 +
 +        <para>
 +          The following is a stub configuration that enables this behavior:
 +<screen>
 +"Dhcp4": { <userinput>
 +    "hooks-libraries": [
 +        {
 +            "library": "/path/libdhcp_flex_id.so",
 +            "parameters": {
 +                "identifier-expression": "<userinput>expression</userinput>",
 +                "replace-client-id": "<userinput>true</userinput>"
 +            }
 +        },
 +        ...
 +    ] </userinput>
 +}
 +</screen>
 +        </para>
 +
 +        <para>
 +          In the DHCPv4 case, the value derived from the flexible identifier is formed
 +          by prepending 1 byte with a value of zero to flexible identifier. In the IPv6
 +          case, it is formed by prepanding two zero bytes before the flexible identifier.
 +        </para>
 +
 +        <para>
 +          Note that for this mechanism to take effect, the DHCPv4 server must be configured
 +          to respect the client identifier option value during lease allocation, i.e.
 +          "match-client-id" must be set to true. See
 +          <xref linkend="dhcp4-match-client-id"/> for details. No additional settings
 +          are required for DHCPv6.
 +        </para>
 +        <para>
 +          If "replace-client-id" option is set to true, the value of "echo-client-id"
 +          parameter (that governs whether to send back a client-id option or
 +          not) is ignored.
 +        </para>
 +
 +        <para>
 +          The <xref linkend="lease-cmds"/> section describes commands used to retrieve,
 +          update and delete leases using various identifiers, e.g. "hw-address",
 +          "client-id". The lease_cmds library doesn't natively support querying for
 +          leases by flexible identifier. However, when "replace-client-id" is set to
 +          true, it makes it possible to query for leases using a value derived from
 +          the flexible identifier. In the DHCPv4 case, the query will look similar to this:
 +<screen>
 +{
 +    "command": "lease4-get",
 +    "arguments": {
 +        "identifier-type": "client-id",
 +        "identifier": "00:<userinput>54:64:45:66</userinput>",
 +        "subnet-id": 44
 +    }
 +}
 +</screen>
 +
 +            where hexadecimal value of "54:64:45:66" is a flexible identifier computed
 +            for the client.
 +        </para>
 +
 +        <para>
 +          In the DHCPv6 case, the corresponding query will look similar to this:
 +<screen>
 +{
 +    "command": "lease6-get",
 +    "arguments": {
 +        "identifier-type": "duid",
 +        "identifier": "00:00:<userinput>54:64:45:66</userinput>",
 +        "subnet-id": 10
 +    }
 +}</screen>
 +
 +        </para>
        </section>
  
-       <section id="host-cmds">
+       <section xml:id="host-cmds">
          <title>host_cmds: Host Commands</title>
          <para>
            This section describes a hook application that offers a number of new
@@@ -2386,318 -1941,10 +2382,318 @@@ If the subnet exists the response will 
          </para>
        </section>
  
 +      <section>
 +        <title>network4-list, network6-list commands</title>
 +        <para>
 +          These commands are used to retrieve full list of currently configured
 +          shared networks. The list contains only very basic information about
 +          each shared network. If more details are needed, please use
 +          <command>network4-get</command> or <command>network6-get</command> to
 +          retrieve all information available. This command does not require any
 +          parameters and its invocation is very simple:
 +<screen>
 +{
 +    "command": "network4-list"
 +}
 +</screen>
 +An example response for <command>network4-list</command> looks as follows:
 +<screen>
 +{
 +    "arguments": {
 +        "shared-networks": [
 +            { "name": "floor1" },
 +            { "name": "office" }
 +        ]
 +    },
 +    "result": 0,
 +    "text": "2 IPv4 network(s) found"
 +}</screen>
 +<command>network6-list</command> follows exactly the same syntax for
 +both the query and the response.
 +        </para>
 +    </section>
 +
 +    <section>
 +        <title>network4-get, network6-get commands</title>
 +        <para>
 +          These commands are used to retrieve detailed information
 +          about shared networks, including subnets currently
 +          being part of a given network. Both commands take one
 +          mandatory parameter <command>name</command>, which specify
 +          the name of shared network. An example command to retrieve
 +          details about IPv4 shared network with a name "floor13"
 +          looks as follows:
 +<screen>
 +{
 +    "command": "network4-get",
 +    "arguments": {
 +        "name": "floor13"
 +    }
 +}</screen>
 +An example response could look as follows:
 +<screen>
 +{
 +    "result": 0,
 +    "text": "Info about IPv4 shared network 'floor13' returned",
 +    "arguments": {
 +        "shared-networks": [
 +        {
 +            "match-client-id": true,
 +            "name": "floor13",
 +            "option-data": [ ],
 +            "rebind-timer": 90,
 +            "relay": {
 +                "ip-address": "0.0.0.0"
 +            },
 +            "renew-timer": 60,
 +            "reservation-mode": "all",
 +            "subnet4": [
 +                {
 +                    "subnet": "192.0.2.0/24",
 +                    "id": 5,
 +                    // many other subnet specific details here
 +                },
 +                {
 +                    "id": 6,
 +                    "subnet": "192.0.3.0/31",
 +                    // many other subnet specific details here
 +                }
 +            ],
 +            "valid-lifetime": 120
 +        }
 +        ]
 +    }
 +}
 +</screen>
 +Note that actual response contains many additional fields that are
 +omitted here for clarity. The response format is exactly the same as
 +used in <command>config-get</command>, just is limited to returning
 +shared networks information.
 +        </para>
      </section>
 -</section> <!-- end of subnet commands -->
 +
 +    <section>
 +        <title>network4-add, network6-add commands</title>
 +        <para>
 +          These commands are used to add a new shared network. New
 +          network has to have unique name. This command requires one parameter
 +          <command>shared-networks</command>, which is a list and
 +          should contain exactly one entry that defines the
 +          network. The only mandatory element for a network is its
 +          name. Although it does not make operational sense, it is
 +          allowed to add an empty shared network that does not have
 +          any subnets in it. That is allowed for testing purposes, but
 +          having empty networks (or with only one subnet) is
 +          discouraged in production environments. For details regarding
 +          syntax, see <xref linkend="shared-network4"/> and <xref
 +          linkend="shared-network6"/>.
 +        </para>
 +        <note><para>As opposed to parameter inheritance during full
 +          new configuration processing, this command does not fully handle
 +          parameter inheritance and any missing parameters will be
 +          filled with default values, rather than inherited from
 +          global scope.</para></note>
 +        <para>
 +          An example that showcases how to add a new IPv4 shared network looks
 +          as follows:
 +<screen>
 +{
 +    "command": "network4-add",
 +    "arguments": {
 +        "shared-networks": [ {
 +            "name": "floor13",
 +            "subnet4": [
 +            {
 +                "id": 100,
 +                "pools": [ { "pool": "192.0.2.2-192.0.2.99" } ],
 +                "subnet": "192.0.2.0/24",
 +                "option-data": [
 +                    {
 +                        "name": "routers",
 +                        "data": "192.0.2.1"
 +                    }
 +                ]
 +            },
 +            {
 +                "id": 101,
 +                "pools": [ { "pool": "192.0.3.2-192.0.3.99" } ],
 +                "subnet": "192.0.3.0/24",
 +                "option-data": [
 +                    {
 +                        "name": "routers",
 +                        "data": "192.0.3.1"
 +                    }
 +                ]
 +            } ]
 +        } ]
 +    }
 +}
 +</screen>
 +Assuming there was no shared network with a name floor13 and no subnets with id
 +100 and 101 previously configured, the command will be successful and will
 +return the following response:
 +<screen>
 +{
 +    "arguments": {
 +        "shared-networks": [ { "name": "floor13" } ]
 +    },
 +    "result": 0,
 +    "text": "A new IPv4 shared network 'floor13' added"
 +}
 +</screen>
 +The <command>network6-add</command> uses the same syntax for both the query and
 +the response. However, there are some parameters that are IPv4-only
 +(e.g. match-client-id) and some are IPv6-only (e.g. interface-id). The same
 +applies to subnets within the network.
 +        </para>
 +    </section>
 +    <section>
 +        <title>network4-del, network6-del commands</title>
 +        <para>
 +          These commands are used to delete existing shared networks. Each
 +          subnet within the network being removed will be demoted to a plain
 +          subnet. If you want to completely remove the subnets, please use
 +          <command>subnet4-del</command> or <command>subnet6-del</command>
 +          commands. Both commands take exactly one parameter 'name' that
 +          specifies the name of the network to be removed. An example invocation
 +          of <command>network4-del</command> command looks as follows:
 +<screen>
 +{
 +    "command": "network4-del",
 +    "arguments": {
 +        "name": "floor13"
 +    }
 +}
 +</screen>
 +Assuming there was such a network configured, the response will look similar to
 +the following:
 +<screen>
 +{
 +    "arguments": {
 +        "shared-networks": [
 +            {
 +                "name": "floor1"
 +            }
 +        ]
 +    },
 +    "result": 0,
 +    "text": "IPv4 shared network 'floor13' deleted"
 +}</screen>
 +The <command>network6-del</command> command uses exactly the same syntax for
 +both the command and the response.
 +        </para>
 +
 +    </section>
 +    <section>
 +        <title>network4-subnet-add, network6-subnet-add commands</title>
 +        <para>
 +          These commands are used to add existing subnets to existing shared
 +          networks. There are several ways to add new shared network. System
 +          administrator can add the whole shared network at once, either by
 +          editing a configuration file or by calling
 +          <command>network4-add</command> or <command>network6-add</command>
 +          commands with desired subnets in it. This approach works better for completely
 +          new shared subnets. However, there may be cases when an existing
 +          subnet is running out of addresses and needs to be extended with
 +          additional address space. In other words another subnet has to be
 +          added on top of it. For this scenario, a system administrator can use
 +          <command>network4-add</command> or <command>network6-add</command> and
 +          then add existing subnet to this newly created shared network  using
 +          <command>network4-subnet-add</command> or
 +          <command>network6-subnet-add</command>.
 +        </para>
 +        <para>
 +          The <command>network4-subnet-add</command> and
 +          <command>network6-subnet-add</command> commands take two parameters:
 +          <command>id</command>, which is an integer and specifies subnet-id of existing subnet to
 +          be added to a shared network; and <command>name</command>, which
 +          specifies name of the shared network the subnet will be added to. The
 +          subnet must not belong to any existing network. In case you want to
 +          reassign a subnet from one shared network to another, please use
 +          <command>network4-subnet-del</command> or
 +          <command>network6-subnet-del</command> commands first.
 +        </para>
 +        <para>
 +          An example invocation of <command>network4-subnet-add</command>
 +          command looks as follows:
 +<screen>
 +{
 +    "command": "network4-subnet-add",
 +    "arguments": {
 +        "name": "floor13",
 +        "id": 5
 +    }
 +}</screen>
 +Assuming there is a network named 'floor13', there is a subnet with subnet-id 5
 +and it is not a part of existing network, the command will return a response
 +similar to the following:
 +<screen>
 +{
 +    "result": 0,
 +    "text": "IPv4 subnet 10.0.0.0/8 (id 5) is now part of shared network 'floor1'"
 +}</screen>
 +        The <command>network6-subnet-add</command> command uses exactly the same syntax for
 +both the command and the response.
 +        </para>
 +
 +        <note><para>As opposed to parameter inheritance during full
 +          new configuration processing or when adding a new shared network with
 +          new subnets, this command does not fully handle
 +          parameter inheritance and any missing parameters will be
 +          filled with default values, rather than inherited from
 +          global scope or from the shared network.</para></note>
 +    </section>
 +    <section>
 +        <title>network4-subnet-del, network6-subnet-del commands</title>
 +        <para>
 +          These commands are used to remove a subnet that is part of existing shared
 +          network and demote it to a plain, stand-alone subnet. If you want to
 +          remove a subnet completely, use <command>subnet4-del</command> or
 +          <command>subnet6-del</command> commands instead.
 +          The <command>network4-subnet-del</command> and
 +          <command>network6-subnet-del</command> commands take two parameters:
 +          <command>id</command>, which is an integer and specifies subnet-id of
 +          existing subnet to be removed from a shared network; and
 +          <command>name</command>, which specifies name of the shared network
 +          the subnet will be removed from.
 +        </para>
 +        <para>An example invocation of the
 +        <command>network4-subnet-del</command> command looks as follows:
 + <screen>
 + {
 +    "command": "network4-subnet-del",
 +    "arguments": {
 +        "name": "floor13",
 +        "id": 5
 +    }
 + }</screen>
 + Assuming there was a subnet with subnet-id equal to 5 that was part of a shared
 + network named 'floor13', the response would look similar to the following:
 +<screen>
 +{
 +    "result": 0,
 +    "text": "IPv4 subnet 10.0.0.0/8 (id 5) is now removed from shared network 'floor13'"
 +}</screen>
 +The <command>network6-subnet-del</command> command uses exactly the same syntax for
 +both the command and the response.
 +        </para>
 +    </section>
 +
 +    </section> <!-- end of subnet commands -->
 +
 +    <section id="high-availability-library">
 +      <title>libdhcp_ha: High Availability</title>
 +      <para>
 +        This section will describe the <command>libdhcp_ha</command> hook library
 +        being developed for the Kea 1.4.0 release.
 +      </para>
 +    </section> <!-- end of high-availability-library -->
 +
 +  </section>
 +
 +
  
-     <section id="user-context">
+     <section xml:id="user-context">
        <title>User contexts</title>
        <para>Hook libraries can have their own configuration parameters. That is
        convenient if the parameter applies to the whole library. However,
  
  
  
-    </chapter> <!-- hooks-libraries -->
 -   </chapter>
++   </chapter>
index a3f8c33e9785c7258290ffbcf55bdb555a9028bd,aac13ba598961fe0a54581e9f59a5519a50b56f3..27236656cb73ecbac1c5e8a7407efede8d126dc9
@@@ -1,13 -1,8 +1,16 @@@
- <?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;" >
- ]>
++<!--
++ - Copyright (C) 2014-2018 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/.
++-->
 +
-   <chapter id="installation">
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="installation">
      <title>Installation</title>
  
-     <section id="packages">
+     <section xml:id="packages">
        <title>Packages</title>
  
        <para>
            on the system:</para>
            <itemizedlist>
              <listitem>
 -                <para>Boost build-time headers
 +                <para>Boost C++ Libraries
-           (<ulink url="http://www.boost.org/"/>).
+           (<uri xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/">http://www.boost.org/</uri>).
 -          At least Boost version 1.41 is required.
 -          When header-only Boost error code is not available or wanted, the
 -          Boost system library is required too.
 +          The oldest Boost version used for testing is 1.57 (it may work with
 +          older versions). Boost system library is required.  Building boost
 +          header only is no longer recommended.
          </para>
          </listitem>
  
@@@ -194,9 -189,15 +196,14 @@@ Debian and Ubuntu
  
          </itemizedlist>
  
 -          <uri xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://kea.isc.org/wiki/SystemSpecificNotes">http://kea.isc.org/wiki/SystemSpecificNotes</uri>
+         <para>
+           Visit the user-contributed wiki at
 -
++          <uri xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://kea.isc.org/wiki/Install">http://kea.isc.org/wiki/Install</uri>
+           for system-specific installation tips.
+         </para>
      </section>
  
-     <section id="install">
+     <section xml:id="install">
        <title>Installation from Source</title>
        <para>
          Kea is open source software written in C++.  It is freely available in
            are a developer planning to contribute to Kea, please fork our Github
            repository and use the "pull request" mechanism to request integration of
            your code. Please consult
-           <ulink url="https://help.github.com/articles/fork-a-repo/"/> for help on
+           <uri xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://help.github.com/articles/fork-a-repo/">https://help.github.com/articles/fork-a-repo/</uri> for help on
            how to fork a Github repository.
-           The <ulink url="http://git.kea.isc.org/~tester/kea/doxygen/">Kea 
-           Developer's Guide</ulink> contains more information about the process, as
 -          The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://git.kea.isc.org/~tester/kea/doxygen/">Kea 
++          The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://git.kea.isc.org/~tester/kea/doxygen/">Kea
+           Developer's Guide</link> contains more information about the process, as
            well as describing the requirements for contributed code to be accepted by ISC.
          </para>
  
            <para>The install step may require superuser privileges.</para>
          </note>
          <para>
--        If required, run <command>ldconfig</command> as root with
--        <filename>/usr/local/lib</filename> (or with <replaceable>prefix</replaceable>/lib if
--        configured with --prefix) in
--        <filename>/etc/ld.so.conf</filename> (or the relevant linker
--        cache configuration file for your OS):
--        <screen>$ <userinput>ldconfig</userinput></screen>
++          If required, run <command>ldconfig</command> as root with
++          <filename>/usr/local/lib</filename> (or with <replaceable>prefix</replaceable>/lib if
++          configured with --prefix) in
++          <filename>/etc/ld.so.conf</filename> (or the relevant linker
++          cache configuration file for your OS):
++          <screen>$ <userinput>ldconfig</userinput></screen>
          </para>
          <note>
            <para>
--          If you do not run <command>ldconfig</command> where it is
--          required, you may see errors like the following:
++            If you do not run <command>ldconfig</command> where it is
++            required, you may see errors like the following:
              <screen>
--            program: error while loading shared libraries: libkea-something.so.1:
--            cannot open shared object file: No such file or directory
--          </screen>
--        </para>
++              program: error while loading shared libraries: libkea-something.so.1:
++              cannot open shared object file: No such file or directory
++            </screen>
++          </para>
          </note>
        </section>
  
          <varlistentry>
            <term>JSON</term>
            <listitem>
-           <simpara>JSON is the default configuration backend
 -          <simpara>JSON is the new default configuration backend
--          that allows Kea to read JSON configuration files from
--          disk. It does not require any framework and thus is
-           considered more lightweight. It allows dynamic on-line
 -          considered more lightweight. It will allow dynamic
 -          on-line reconfiguration, but lacks remote capabilities
 -          (i.e. no RESTful API).</simpara>
++            <simpara>JSON is the default configuration backend
++            that allows Kea to read JSON configuration files from
++            disk. It does not require any framework and thus is
++            considered more lightweight. It allows dynamic on-line
 +            reconfiguration using Kea API.</simpara>
            </listitem>
          </varlistentry>
        </variablelist>
            "configure" step (see <xref linkend="configure"/>), the --with-dhcp-mysql switch
            should be specified:
            <screen><userinput>./configure [other-options] --with-dhcp-mysql</userinput></screen>
--            If MySQL was not installed in the default location, the location of the MySQL
++              If MySQL was not installed in the default location, the location of the MySQL
            configuration program "mysql_config" should be included with the switch, i.e.
            <screen><userinput>./configure [other-options] --with-dhcp-mysql=<replaceable>path-to-mysql_config</replaceable></userinput></screen>
          </para>
            "configure" step (see <xref linkend="configure"/>), the --with-dhcp-pgsql switch
            should be specified:
            <screen><userinput>./configure [other-options] --with-dhcp-pgsql</userinput></screen>
--            If PostgreSQL was not installed in the default location, the location of the PostgreSQL
++              If PostgreSQL was not installed in the default location, the location of the PostgreSQL
            configuration program "pg_config" should be included with the switch, i.e.
            <screen><userinput>./configure [other-options] --with-dhcp-pgsql=<replaceable>path-to-pg_config</replaceable></userinput></screen>
          </para>
index b2e433b155e9280037b2d004bdcd4218d124b240,10461c0b744561e59194857124b33b2d9cdefe77..b857c7284514d2cebe98db0b914f215d2949a9aa
@@@ -1,12 -1,5 +1,18 @@@
- <?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;" >
- <!ENTITY % version SYSTEM "version.ent">
- %version;
 -<!-- Converted by db4-upgrade version 1.1 -->
++<!--
++ - Copyright (C) 2014-2018 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/.
++-->
++
++<!-- need this include to make the &keaversion; macro work -->
++<!DOCTYPE book [
++<!ENTITY % keaversion SYSTEM "version.ent">
++%keaversion;
 +]>
 +
  <chapter id="intro">
<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="intro">
      <title>Introduction</title>
      <para>
        Kea is the next generation of DHCP software developed by ISC.
@@@ -22,7 -15,7 +28,7 @@@
      </para>
  
      <para>
-       This guide covers Kea version &__VERSION__;.
 -      This guide covers Kea version .
++      This guide covers Kea version &keaversion;.
      </para>
  
      <section>
              </simpara>
            </listitem>
  
-               <command>kea-ctrl-agent</command> &mdash;
 +          <listitem>
 +            <simpara>
++              <command>kea-ctrl-agent</command> â€”
 +              Kea Control Agent (CA) is a daemon exposes a RESTful control
 +              interface for managing Kea servers.
 +            </simpara>
 +          </listitem>
 +
            <listitem>
              <simpara>
-               <command>perfdhcp</command> &mdash;
+               <command>perfdhcp</command> â€”
                A DHCP benchmarking tool which simulates multiple clients to
                test both DHCPv4 and DHCPv6 server performance.
              </simpara>
index 9baa8d13a6b07bb75a17c6f28906e19a8edc2bb4,a336cc35376570013bf4600dcb81f534c33c5c9b..a8c02aaaf2988a8de49bda23390da7197d46a512
@@@ -1,23 -1,8 +1,23 @@@
- <?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;" >
- <!ENTITY % version SYSTEM "version.ent">
- %version;
- ]>
++<?xml version="1.0"?>
 +<!--
-  - Copyright (C) 2010-2017 Internet Systems Consortium, Inc. ("ISC")
++ - Copyright (C) 2014-2018 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/.
 +-->
 +
- <book>
++<!-- need this include to make the &keaversion; macro work -->
++<!DOCTYPE book [
++<!ENTITY % keaversion SYSTEM "version.ent">
++%keaversion;
++]>
++
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <book xmlns="http://docbook.org/ns/docbook" version="5.0">
    <?xml-stylesheet href="kea-guide.css" type="text/css"?>
  
-   <bookinfo>
+   <info>
  
      <title>
      <inlinemediaobject>
      Kea Administrator Reference Manual
      </title>
  
--    <releaseinfo>This is the reference guide for Kea version
-         &__VERSION__;.</releaseinfo>
 -        .</releaseinfo>
++    <releaseinfo>This is the reference guide for Kea version &keaversion;.</releaseinfo>
  
      <copyright>
 -      <year>2010-2017</year><holder>Internet Systems Consortium, Inc.</holder>
 +      <year>2010-2017</year>
 +      <holder>Internet Systems Consortium, Inc. ("ISC")</holder>
      </copyright>
  
      <abstract>
        </para>
  
        <para>
-         This is the reference guide for Kea version &__VERSION__;.
 -        This is the reference guide for Kea version .
++        This is the reference guide for Kea version &keaversion;.
          The most up-to-date version of this document (in PDF, HTML,
          and plain text formats), along with other documents for
-         Kea, can be found at <ulink url="http://kea.isc.org/docs"/>.
+         Kea, can be found at <uri xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://kea.isc.org/docs">http://kea.isc.org/docs</uri>.
          </para> </abstract>
  
-   </bookinfo>
+   </info>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="intro.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="intro.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="quickstart.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="quickstart.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="install.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="install.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="admin.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="admin.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="config.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="config.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="keactrl.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="keactrl.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="agent.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="agent.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dhcp4-srv.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dhcp4-srv.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dhcp6-srv.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dhcp6-srv.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="lease-expiration.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="lease-expiration.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ddns.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ddns.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="lfc.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="lfc.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="classify.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="classify.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="hooks.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="hooks.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="stats.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="stats.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ctrl-channel.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ctrl-channel.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libdhcp.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libdhcp.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="logging.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="logging.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="shell.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="shell.xml"/>
  
-   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="faq.xml" />
+   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="faq.xml"/>
  
-     <chapter id="acknowledgments">
 -    <chapter xml:id="acknowledgments">
++  <chapter xml:id="acknowledgments">
        <title>Acknowledgments</title>
  
 -      <para>Kea is primarily designed, developed, and maintained by
 -      Internet Systems Consortium, Inc. It is an open source project
 -      and contributions are welcomed.</para>
 -
 -      <para>Support for the development of the DHCPv4, DHCPv6 and
 -      DHCP-DDNS  components was provided by
 -      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.comcast.com/">Comcast</link>.</para>
 +      <para>Kea is an open source project designed, developed, and maintained by Internet Systems
 +      Consortium, Inc, a 501(c)3 non-profit organization. ISC is primarily funded by revenues from
 +      support subscriptions for our open source and we encourage all professional users to consider
 +      this option. To learn more, see â€‹<ulink
 +      url="https://www.isc.org/support/">https://www.isc.org/support/</ulink>.</para>
  
 -      <para>Kea was initially implemented as a collection of applications
 -      within the BIND 10 framework. Hence, Kea development would not be
 -      possible without the generous support of past BIND 10 project sponsors.</para>
 +      <para>If you would like to contribute to ISC to assist us in continuing to make quality open
 +      source software, please visit our donations page at â€‹<ulink
 +      url="http://www.isc.org/donate/">http://www.isc.org/donate/</ulink>.</para>
-       
  
 -      <para><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://jprs.co.jp/">JPRS</link> and
 -      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://cira.ca/">CIRA</link> were Patron Level
 -      BIND 10 sponsors.</para>
 +      <para>We thank all the organizations and individuals who have helped to make Kea
-       possible. Comcast and the Comcast Innovation Fund provided major support for the development
++      possible. <link xmlns:xlink="http://www.w3.org/1999/xlink"
++      xlink:href="http://www.comcast.com/">Comcast</link>
++       and the Comcast Innovation Fund provided major support for the development
 +      of Kea's DHCPv4, DHCPv6 and DDNS modules. Mozilla funded initial work on the REST API via a
 +      MOSS award.</para>
  
 -      <para><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.afnic.fr/">AFNIC</link>,
 +      <para>Kea was initially implemented as a collection of applications
 +      within the BIND 10 framework. We thank the founding sponsors of the BIND10 project:
-       <ulink url="https://www.afilias.info/">Afilias</ulink>,
-       <ulink url="https://www.iis.se/">IIS.SE</ulink>,
-       <ulink url="http://www.nominet.org.uk/">Nominet</ulink>, and
-       <ulink url="https://www.sidn.nl/">SIDN</ulink>; BIND10 patrons 
-       <ulink url="http://jprs.co.jp/">JPRS</ulink> and
-       <ulink url="http://cira.ca/">CIRA</ulink>; and additional sponsors
-       <ulink url="https://www.afnic.fr/">AFNIC</ulink>,
-       <ulink url="https://www.cnnic.net.cn/">CNNIC</ulink>,
-       <ulink url="https://www.nic.cz/">CZ.NIC</ulink>,
-       <ulink url="http://www.denic.de/">DENIC eG</ulink>,
-       <ulink url="https://www.google.com/">Google</ulink>,
-       <ulink url="https://www.ripe.net/">RIPE NCC</ulink>,
-       <ulink url="https://registro.br/">Registro.br</ulink>,
-       <ulink url="https://nzrs.net.nz/">.nz Registry Services</ulink>, and
-       <ulink url="https://www.tcinet.ru/">Technical Center of Internet</ulink>.</para>
++      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.afilias.info/">Afilias</link>,
++      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.iis.se/">IIS.SE</link>,
++      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.nominet.org.uk/">Nominet</link>, 
++      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.sidn.nl/">SIDN</link>,
++      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://jprs.co.jp/">JPRS</link>,
++      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://cira.ca/">CIRA</link>; and additional sponsors
++      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.afnic.fr/">AFNIC</link>,
+       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.cnnic.net.cn/">CNNIC</link>,
+       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.nic.cz/">CZ.NIC</link>,
+       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.denic.de/">DENIC eG</link>,
+       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.google.com/">Google</link>,
+       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.ripe.net/">RIPE NCC</link>,
+       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://registro.br/">Registro.br</link>,
+       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://nzrs.net.nz/">.nz Registry Services</link>, and
+       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.tcinet.ru/">Technical Center of Internet</link>
 -      were past BIND 10 sponsors.</para>
 -
 -      <para><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.afilias.info/">Afilias</link>,
 -      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.iis.se/">IIS.SE</link>,
 -      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.nominet.org.uk/">Nominet</link>, and
 -      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.sidn.nl/">SIDN</link> were founding
 -      sponsors of the BIND 10 project.</para>
++      .</para>
  
      </chapter>
  
index 7e0aa4aa8d8fcbbf5af7dc2b0581d0f7a23ca07b,76af644cd9654f887131e07c6186bc84c98b6fa5..503372685abe613428c80c68515088918ede58f2
@@@ -1,13 -1,8 +1,16 @@@
- <?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;" >
- ]>
++<!--
++ - Copyright (C) 2014-2018 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/.
++-->
 +
-   <chapter id="keactrl">
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="keactrl">
      <title>Managing Kea with keactrl</title>
  
-     <section id="keactrl-overview">
+     <section xml:id="keactrl-overview">
        <title>Overview</title>
        <para>keactrl is a shell script which controls the startup, shutdown
        and reconfiguration of the Kea servers (<command>kea-dhcp4</command>,
index abca79b0f3521be63c670126b83da467420d86d9,171c2d740f3964882aea9f4232f091bb9e969eec..4b7c5c82485de55c586abf84123e4d88518d6191
@@@ -1,9 -1,5 +1,13 @@@
- <?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="lease-expiration">
++<!--
++ - Copyright (C) 2015-2018 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/.
++-->
++
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="lease-expiration">
    <title>Lease Expiration in DHCPv4 and DHCPv6</title>
  
    <para>The primary role of the DHCP server is to assign addresses and/or
index f6580e83fa6146ab86cd026ffcd6119f38b4e997,14dd477bf11d3703b3565e8f884eb357cea9d611..e689bde5aa65b4cbffadf7d24cf20e559dead40b
@@@ -1,13 -1,8 +1,16 @@@
- <?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;" >
- ]>
++<!--
++ - Copyright (C) 2015-2018 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/.
++-->
 +
-   <chapter id="kea-lfc">
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="kea-lfc">
      <title>The LFC process</title>
  
-     <section id="kea-lfc-overview">
+     <section xml:id="kea-lfc-overview">
        <title>Overview</title>
        <para><command>kea-lfc</command> is a service process that removes
        redundant information from the files used to provide persistent storage
index 851c87469fcad67ebf0b35e9a0adffa880014a33,14441dae0b2042f4d0232ede46c33b44735e7ae6..9e192eeb294abc98b70d56f90ba0a757b1267c9d
@@@ -1,10 -1,5 +1,13 @@@
- <?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;" >
- ]>
++<!--
++ - Copyright (C) 2014-2018 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/.
++-->
 +
-   <chapter id="libdhcp">
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="libdhcp">
      <title>The libdhcp++ Library</title>
      <para>
        libdhcp++ is a library written in C++ that handles
index 1806982a179d091e1945d963a7a9a8b35604c0d5,aed25ec42f2c5a9e42184c333c80ff3d83c926ee..412b0f0c72b51f5ac27fbd5847b15f8f2e4138ce
@@@ -1,22 -1,5 +1,13 @@@
- <?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;" >
- ]>
-   <!-- Note: Please use the following terminology:
-        - daemon - one process (e.g. kea-dhcp4)
-        - component - one piece of code within a daemon (e.g. libdhcp or hooks)
-        - server - currently equal to daemon, but the difference will be more
-                   prominent once we add client or relay support
-        - logger - one instance of isc::log::Logger
-        - structure - an element in config file (e.g. "Dhcp4")
-        Do not use:
-        - module => daemon
-     -->
- <chapter id="logging">
++<!--
++ - Copyright (C) 2014-2018 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/.
++-->
++
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="logging">
    <title>Logging</title>
  
    <section>
index c632dd0dd2136931cfff69c804b5856f2178e825,9001bce995d1a44bdf6f9bf6c3954a9d4aa102b8..07e09b2cfaf15b6e71f57fb27a08b9acdfb51b40
@@@ -1,12 -1,5 +1,22 @@@
- <?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;" >
- <!ENTITY % version SYSTEM "version.ent">
- %version;
++<!--
++ - Copyright (C) 2014-2018 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/.
++-->
++
++<!-- need this include to make the &keaversion; macro work -->
++<!DOCTYPE book [
++<!ENTITY % keaversion SYSTEM "version.ent">
++%keaversion;
 +]>
 +
  <chapter id="quickstart">
<!-- Converted by db4-upgrade version 1.1 -->
 -<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="quickstart">
++<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
++         xml:id="quickstart">
++
++
      <title>Quick Start</title>
  
      <para>
          <listitem>
            <para>
              Extract the tarball. For example:
-             <screen>$ <userinput>tar xvzf kea-&__VERSION__;.tar.gz</userinput></screen>
 -            <screen>$ <userinput>tar xvzf kea-.tar.gz</userinput></screen>
++            <screen>$ <userinput>tar xvzf kea-&keaversion;.tar.gz</userinput></screen>
            </para>
          </listitem>
  
          <listitem>
            <para>Go into the source directory and run the configure script:
-             <screen>$ <userinput>cd kea-&__VERSION__;</userinput>
 -            <screen>$ <userinput>cd kea-</userinput>
++            <screen>$ <userinput>cd kea-&keaversion;</userinput>
  $ <userinput>./configure [your extra parameters]</userinput></screen>
            </para>
          </listitem>
index 1c470cada8c6d5203593c30331b0aaafb92d11df,971489d00ecd360b3257e65839a234e19790dd61..9396130a0f45fa15578d3478a6c83694c91bfbd2
@@@ -1,13 -1,8 +1,15 @@@
- <?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  "&#x2017;" >
- ]>
- <chapter id="kea-shell">
++<!--
++ - Copyright (C) 2017-2018 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/.
++-->
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="kea-shell">
    <title>The Kea Shell</title>
  
-   <section id="shell-overview">
+   <section xml:id="shell-overview">
      <title>Overview</title>
      <para>Kea 1.2.0 introduced the Control Agent (CA, see <xref linkend="kea-ctrl-agent"/>) that
      provides a RESTful control interface over HTTP. That API is typically expected to be used by
index 17164c4df60e0a3d7137bbb15ed74e4e2d5a7917,83fbc900ecf8a9bbf55747155ed751c0cc710189..445cddf068c0661ae764a4860087613011f9bee7
@@@ -1,10 -1,5 +1,12 @@@
- <?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="stats">
++<!--
++ - Copyright (C) 2015-2018 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/.
++-->
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="stats">
    <title>Statistics</title>
  
    <section>
index edd15c865b310dc8cdadf4a5a842f4c06773c65f,83e9177ddd990afbba5b818d553c86fc21f33eb5..379014c9203a6270b64e4dbca4cd9566f1a74e3d
@@@ -1,21 -1,10 +1,18 @@@
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-                [<!ENTITY mdash "&#8212;">]>
 +<!--
-  - Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
++ - Copyright (C) 2014-2018 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/.
 +-->
 +
- <refentry>
-   <refentryinfo>
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <refentry xmlns="http://docbook.org/ns/docbook" version="5.0">
+   <info>
      <productname>ISC Kea</productname>
-     <date>Oct. 27, 2017</date>
-     <edition>1.3.0</edition>
-     <author>
-       <contrib>The Kea software has been written by a number of
+     <date>Sep. 28, 2016</date>
+     <edition>1.1.0</edition>
+     <author><personname/><contrib>The Kea software has been written by a number of
          engineers working for ISC: Tomek Mrugalski, Stephen Morris, Marcin
          Siodelski, Thomas Markwalder, Francis Dupont, Jeremy C. Reed,
          Wlodek Wencel and Shawn Routhier.  That list is roughly in the
index 267f2c345abebc0b2d91373f1d822406c8f58024,38926a99a0db652834d427496a4a54e4a486cc14..cae562925df549bd69476afb6f99ef083a6e7425
@@@ -1,22 -1,11 +1,20 @@@
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-                [<!ENTITY mdash "&#8212;">]>
 +<!--
-  - Copyright (C) 2016-2017 Internet Systems Consortium, Inc. ("ISC")
++ - Copyright (C) 2016-2018 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/.
 +-->
 +
- <refentry>
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <refentry xmlns="http://docbook.org/ns/docbook" version="5.0">
  
-   <refentryinfo>
+   <info>
      <productname>ISC Kea</productname>
 -    <date>Sep. 28, 2016</date>
 -    <edition>1.1.0</edition>
 -    <author><personname/><contrib>The Kea software has been written by a number of
 +    <date>Oct. 27, 2017</date>
 +    <edition>1.3.0</edition>
 +    <author>
 +      <contrib>The Kea software has been written by a number of
          engineers working for ISC: Tomek Mrugalski, Stephen Morris, Marcin
          Siodelski, Thomas Markwalder, Francis Dupont, Jeremy C. Reed,
          Wlodek Wencel and Shawn Routhier.  That list is roughly in the
      </para>
    </refsect1>
  
- </refentry><!--
-  - Local variables:
-  - mode: sgml
-  - End:
- -->
 -</refentry>
++</refentry>
index 04e88487b03d256a65708f86e63963197a85d537,2cc67f12484492f1bda50c3ff89b802921c5ae52..62fc10996014db773e6767583c879e45a9969556
@@@ -1,22 -1,11 +1,19 @@@
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-                [<!ENTITY mdash "&#8212;">]>
 +<!--
-  - Copyright (C) 2013-2017 Internet Systems Consortium, Inc. ("ISC")
++ - Copyright (C) 2013-2018 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/.
 +-->
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <refentry xmlns="http://docbook.org/ns/docbook" version="5.0">
  
- <refentry>
-   <refentryinfo>
+   <info>
      <productname>ISC Kea</productname>
 -    <date>Sep. 28, 2016</date>
 -    <edition>1.1.0</edition>
 -    <author><personname/><contrib>The Kea software has been written by a number of
 +    <date>Oct. 27, 2017</date>
 +    <edition>1.3.0</edition>
 +    <author>
 +      <contrib>The Kea software has been written by a number of
          engineers working for ISC: Tomek Mrugalski, Stephen Morris, Marcin
          Siodelski, Thomas Markwalder, Francis Dupont, Jeremy C. Reed,
          Wlodek Wencel and Shawn Routhier.  That list is roughly in the
      </para>
    </refsect1>
  
- </refentry><!--
-  - Local variables:
-  - mode: sgml
-  - End:
- -->
 -</refentry>
++</refentry>
index e2a3531e12b20923a65f88e92cd79c3ba0e541b8,4860ec60042053d5c6f0fbe417126b33db33e40e..73ef11ea77d48ace158f5e8b820c45f0bbbf2f2e
@@@ -1,22 -1,11 +1,19 @@@
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-                [<!ENTITY mdash "&#8212;">]>
 +<!--
-  - Copyright (C) 2011-2017 Internet Systems Consortium, Inc. ("ISC")
++ - Copyright (C) 2011-2018 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/.
 +-->
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <refentry xmlns="http://docbook.org/ns/docbook" version="5.0">
  
- <refentry>
-   <refentryinfo>
+   <info>
      <productname>ISC Kea</productname>
 -    <date>Sep. 28, 2016</date>
 -    <edition>1.1.0</edition>
 -    <author><personname/><contrib>The Kea software has been written by a number of
 +    <date>Oct. 27, 2017</date>
 +    <edition>1.3.0</edition>
 +    <author>
 +      <contrib>The Kea software has been written by a number of
          engineers working for ISC: Tomek Mrugalski, Stephen Morris, Marcin
          Siodelski, Thomas Markwalder, Francis Dupont, Jeremy C. Reed,
          Wlodek Wencel and Shawn Routhier.  That list is roughly in the
      </para>
    </refsect1>
  
- </refentry><!--
-  - Local variables:
-  - mode: sgml
-  - End:
- -->
 -</refentry>
++</refentry>
index 27b81377d0867ab98a2d9c658fb96fc7eb1a70c4,cf175a10f3bf4b9d4a4368f9544da4f4070ac8fb..4291cbbbc1e86e269113c4994404bc66473009ad
@@@ -1,22 -1,11 +1,18 @@@
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-                [<!ENTITY mdash "&#8212;">]>
 -<!-- Converted by db4-upgrade version 1.1 -->
 +<!--
-  - Copyright (C) 2011-2017 Internet Systems Consortium, Inc. ("ISC")
++ - Copyright (C) 2011-2018 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/.
 +-->
+ <refentry xmlns="http://docbook.org/ns/docbook" version="5.0">
  
- <refentry>
-   <refentryinfo>
+   <info>
      <productname>ISC Kea</productname>
 -    <date>Sep. 28, 2016</date>
 -    <edition>1.1.0</edition>
 -    <author><personname/><contrib>The Kea software has been written by a number of
 +    <date>Oct. 27, 2017</date>
 +    <edition>1.3.0</edition>
 +    <author>
 +      <contrib>The Kea software has been written by a number of
          engineers working for ISC: Tomek Mrugalski, Stephen Morris, Marcin
          Siodelski, Thomas Markwalder, Francis Dupont, Jeremy C. Reed,
          Wlodek Wencel and Shawn Routhier.  That list is roughly in the
      </para>
    </refsect1>
  
- </refentry><!--
-  - Local variables:
-  - mode: sgml
-  - End:
- -->
 -</refentry>
++</refentry>
index 5937dfb79eb82af9fe0c55bfc871592b79b9f9e4,227d5adaa6097726a88399a05652c2f6596b7f16..6b19be5b872710d0f7a381f29632ce7f53bc6b82
@@@ -1,21 -1,10 +1,19 @@@
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-                [<!ENTITY mdash "&#8212;">]>
 -<!-- Converted by db4-upgrade version 1.1 -->
 +<!--
-  - Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
++ - Copyright (C) 2014-2018 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/.
 +-->
 +
- <refentry>
-   <refentryinfo>
+ <refentry xmlns="http://docbook.org/ns/docbook" version="5.0">
+   <info>
      <productname>ISC Kea</productname>
 -    <date>Sep. 28, 2016</date>
 -    <edition>1.1.0</edition>
 -    <author><personname/><contrib>The Kea software has been written by a number of
 +    <date>Oct. 27, 2017</date>
 +    <edition>1.3.0</edition>
 +    <author>
++      <personname/>
 +      <contrib>The Kea software has been written by a number of
          engineers working for ISC: Tomek Mrugalski, Stephen Morris, Marcin
          Siodelski, Thomas Markwalder, Francis Dupont, Jeremy C. Reed,
          Wlodek Wencel and Shawn Routhier.  That list is roughly in the
index 02e2843c70538020d55b166f65fad4c4ef61e7fb,fa1d916831fd6793e23451e5524e0eb38c5aa3d1..3aa3cff9de100b6ed772055ad700bdb4569e88ac
@@@ -1,22 -1,11 +1,19 @@@
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-                [<!ENTITY mdash "&#8212;">]>
 +<!--
-  - Copyright (C) 2015-2017 Internet Systems Consortium, Inc. ("ISC")
++ - Copyright (C) 2015-2018 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/.
 +-->
 +
- <refentry>
+ <!-- Converted by db4-upgrade version 1.1 -->
+ <refentry xmlns="http://docbook.org/ns/docbook" version="5.0">
  
-   <refentryinfo>
+   <info>
      <productname>ISC Kea</productname>
 -    <date>Sep. 28, 2016</date>
 -    <edition>1.1.0</edition>
 +    <date>Oct. 27, 2017</date>
 +    <edition>1.3.0</edition>
-     <author>
-       <contrib>The Kea software has been written by a number of
+     <author><personname/><contrib>The Kea software has been written by a number of
          engineers working for ISC: Tomek Mrugalski, Stephen Morris, Marcin
          Siodelski, Thomas Markwalder, Francis Dupont, Jeremy C. Reed,
          Wlodek Wencel and Shawn Routhier.  That list is roughly in the
      </para>
    </refsect1>
  
- </refentry><!--
-  - Local variables:
-  - mode: sgml
-  - End:
- -->
 -</refentry>
++</refentry>
index 568a4cdb09fbd7bd12425f957a7215027ae25057,6f0a0d792c9ec9df62efb1779e954f24bc7e2078..585be899449b4ce964f2b450e2c47b6eb3599256
@@@ -1,22 -1,11 +1,20 @@@
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-                [<!ENTITY mdash "&#8212;">]>
 -<!-- Converted by db4-upgrade version 1.1 -->
 +<!--
-  - Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
++ - Copyright (C) 2014-2018 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/.
 +-->
 +
- <refentry>
+ <refentry xmlns="http://docbook.org/ns/docbook" version="5.0">
  
-     <refentryinfo>
+     <info>
        <productname>ISC Kea</productname>
 -      <date>Sep. 28, 2016</date>
 -      <edition>1.1.0</edition>
 -      <author><personname/><contrib>The Kea software has been written by a number of
 +      <date>Oct. 27, 2017</date>
 +      <edition>1.3.0</edition>
 +      <author>
++        <personname/>
 +        <contrib>The Kea software has been written by a number of
          engineers working for ISC: Tomek Mrugalski, Stephen Morris, Marcin
          Siodelski, Thomas Markwalder, Francis Dupont, Jeremy C. Reed,
          Wlodek Wencel and Shawn Routhier.  That list is roughly in the
index 101e6d3a50c4f6e0fe8ecc30357fff160419e611,598012f9c48bbe2ed8b541b3e032f7217434df25..24e8d0f0f142614341ac906f92fa9360dc0960b1
@@@ -1,22 -1,11 +1,19 @@@
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-                [<!ENTITY mdash "&#8212;">]>
 -<!-- Converted by db4-upgrade version 1.1 -->
 +<!--
-  - Copyright (C) 2017 Internet Systems Consortium, Inc. ("ISC")
++ - Copyright (C) 2017-2018 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/.
 +-->
 +
- <refentry>
+ <refentry xmlns="http://docbook.org/ns/docbook" version="5.0">
  
-   <refentryinfo>
+   <info>
      <productname>ISC Kea</productname>
 -    <date>0008-03-2017</date>
 -    <edition>1.2.0</edition>
 -    <author><personname/><contrib>The Kea software has been written by a number of
 +    <date>Oct. 28, 2017</date>
 +    <edition>1.3.0</edition>
 +    <author>
 +      <contrib>The Kea software has been written by a number of
          engineers working for ISC: Tomek Mrugalski, Stephen Morris, Marcin
          Siodelski, Thomas Markwalder, Francis Dupont, Jeremy C. Reed,
          Wlodek Wencel and Shawn Routhier.  That list is roughly in the
    </docinfo>
  
    <refsynopsisdiv>
-     <cmdsynopsis>
+     <cmdsynopsis sepchar=" ">
        <command>kea-shell</command>
-       <arg><option>-h</option></arg>
-       <arg><option>-v</option></arg>
-       <arg><option>--host</option></arg>
-       <arg><option>--port</option></arg>
-       <arg><option>--path</option></arg>
-       <arg><option>--timeout</option></arg>
-       <arg><option>--service</option></arg>
-       <arg><option>command</option></arg>
+       <arg choice="opt" rep="norepeat"><option>-h</option></arg>
+       <arg choice="opt" rep="norepeat"><option>-v</option></arg>
+       <arg choice="opt" rep="norepeat"><option>--host</option></arg>
+       <arg choice="opt" rep="norepeat"><option>--port</option></arg>
++      <arg choice="opt" rep="norepeat"><option>--path</option></arg>
+       <arg choice="opt" rep="norepeat"><option>--timeout</option></arg>
+       <arg choice="opt" rep="norepeat"><option>--service</option></arg>
+       <arg choice="opt" rep="norepeat"><option>command</option></arg>
      </cmdsynopsis>
    </refsynopsisdiv>
  
      </para>
    </refsect1>
  
- </refentry><!--
-  - Local variables:
-  - mode: sgml
-  - End:
- -->
 -</refentry>
++</refentry>
index 53dc13f39d38708ebb65bee8eef01699ad3e8c7d,0b1c9a81f875f7157dd087912e929e7f9303b26b..591cd46761705a599d8d3bfec8f5dd718f0aa579
@@@ -1,32 -1,10 +1,33 @@@
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-                [<!ENTITY mdash "&#8212;">]>
 -<!-- Converted by db4-upgrade version 1.1 -->
 +<!--
-  - Copyright (C) 2012-2017 Internet Systems Consortium, Inc. ("ISC")
++ - Copyright (C) 2012-2018 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/.
 +-->
 +
- <refentry>
+ <refentry xmlns="http://docbook.org/ns/docbook" version="5.0">
  
 +  <refentryinfo>
 +    <productname>ISC Kea</productname>
 +    <date>Oct. 27, 2017</date>
 +    <edition>1.3.0</edition>
 +    <author>
 +      <contrib>The Kea software has been written by a number of
 +        engineers working for ISC: Tomek Mrugalski, Stephen Morris, Marcin
 +        Siodelski, Thomas Markwalder, Francis Dupont, Jeremy C. Reed,
 +        Wlodek Wencel and Shawn Routhier.  That list is roughly in the
 +        chronological order in which the authors made their first
 +        contribution. For a complete list of authors and
 +        contributors, see AUTHORS file.</contrib>
 +      <orgname>Internet Systems Consortium, Inc.</orgname>
 +    </author>
 +  </refentryinfo>
 +
+   <info>
+     <date>2014-07-01</date>
+   </info>
    <refmeta>
      <refentrytitle>kea-sockcreator</refentrytitle>
      <manvolnum>8</manvolnum>
@@@ -88,8 -66,4 +89,4 @@@
      </para>
    </refsect1>
  
- </refentry><!--
-  - Local variables:
-  - mode: sgml
-  - End:
- -->
 -</refentry>
++</refentry>