Browse Source

[1367] BIND10 Guide update (DHCP)

- Supported standards section added
- Numerous smaller updates
Tomek Mrugalski 13 years ago
parent
commit
bc24ccba8c
2 changed files with 308 additions and 165 deletions
  1. 141 99
      doc/guide/bind10-guide.html
  2. 167 66
      doc/guide/bind10-guide.xml

File diff suppressed because it is too large
+ 141 - 99
doc/guide/bind10-guide.html


+ 167 - 66
doc/guide/bind10-guide.xml

@@ -1820,6 +1820,16 @@ then change those defaults with config set Resolver/forward_addresses[0]/address
     and DHCPv6. This chapter is about DHCP for IPv4. For description of
     and DHCPv6. This chapter is about DHCP for IPv4. For description of
     DHCPv6 server, see <xref linkend="dhcp6"/>.</para>
     DHCPv6 server, see <xref linkend="dhcp6"/>.</para>
 
 
+    <para>DHCPv6 server component is currently under intense
+    development. You may want to check out <ulink
+    url="http://bind10.isc.org/wiki/Kea">BIND10 DHCP (Kea) wiki</ulink>
+    and recent posts on <ulink
+    url="https://lists.isc.org/mailman/listinfo/bind10-dev">BIND10
+    developers mailing list</ulink>.</para>
+
+    <para>DHCPv4 and DHCPv6 components in BIND10 architecture are
+    internally code named <quote>Kea</quote>.</para>
+
     <note>
     <note>
       <para>
       <para>
         As of December 2011, both DHCPv4 and DHCPv6 components are
         As of December 2011, both DHCPv4 and DHCPv6 components are
@@ -1835,17 +1845,17 @@ then change those defaults with config set Resolver/forward_addresses[0]/address
 
 
     <section id="dhcp4-usage">
     <section id="dhcp4-usage">
       <title>DHCPv4 Server Usage</title>
       <title>DHCPv4 Server Usage</title>
-      <para>BIND10 provides DHCPv4 server component since
-      December 2011. It is currently described as skeleton server and
-      can be described as an early prototype that is not yet fully
-      functional. It is mature enough to conduct first tests in lab
-      environment, but it has significant limitations. See <xref
-      linkend="dhcp4-limit"/> for details.
+      <para>BIND10 provides DHCPv4 server component since December
+      2011. It is a skeleton server and can be described as an early
+      prototype that is not fully functional yet. It is mature enough
+      to conduct first tests in lab environment, but it has
+      significant limitations. See <xref linkend="dhcp4-limit"/> for
+      details.
       </para>
       </para>
 
 
       <para>
       <para>
         DHCPv4 server is implemented as <command>b10-dhcp4</command>
         DHCPv4 server is implemented as <command>b10-dhcp4</command>
-        daemon. As it is configurable yet, it is fully autonomous,
+        daemon. As it is not configurable yet, it is fully autonomous,
         i.e. it does not interact with <command>b10-cfgmgr</command>.
         i.e. it does not interact with <command>b10-cfgmgr</command>.
         To start DHCPv4 server, simply input:
         To start DHCPv4 server, simply input:
 
 
@@ -1859,7 +1869,7 @@ then change those defaults with config set Resolver/forward_addresses[0]/address
         directory, in /usr/local/bin/b10-dhcp4 or other directory
         directory, in /usr/local/bin/b10-dhcp4 or other directory
         you specified during compilation.
         you specified during compilation.
 
 
-        Afre start, server will detect available network interfaces
+        After start, server will detect available network interfaces
         and will attempt to open UDP sockets on all interfaces that
         and will attempt to open UDP sockets on all interfaces that
         are up, running, are not loopback and have IPv4 address
         are up, running, are not loopback and have IPv4 address
         assigned.
         assigned.
@@ -1869,8 +1879,18 @@ then change those defaults with config set Resolver/forward_addresses[0]/address
         will respond to them with OFFER and ACK, respectively.
         will respond to them with OFFER and ACK, respectively.
 
 
         As DHCPv4 server opens privileged ports, it requires root
         As DHCPv4 server opens privileged ports, it requires root
-        access. Make sure you run this daemon as root.
-      </para>
+        access. Make sure you run this daemon as root.</para>
+
+        <note>
+          <para>
+            Integration with <command>bind10</command> is
+            planned. Ultimately, <command>b10-dhcp4</command> will not
+            be started directly, but rather via
+            <command>bind10</command>. Please be aware of this planned
+            change.
+          </para>
+        </note>
+
     </section>
     </section>
 
 
     <section id="dhcp4-config">
     <section id="dhcp4-config">
@@ -1883,8 +1903,9 @@ then change those defaults with config set Resolver/forward_addresses[0]/address
       </para>
       </para>
       <para>
       <para>
         At this stage of development, the only way to alter server
         At this stage of development, the only way to alter server
-        configuration is to tweak its source code. To do so, please edit
-        src/bin/dhcp4/dhcp4_srv.cc file and modify following parameters:
+        configuration is to tweak its source code. To do so, please
+        edit src/bin/dhcp4/dhcp4_srv.cc file and modify following
+        parameters and recompile:
         <screen>
         <screen>
 const std::string HARDCODED_LEASE = "192.0.2.222"; // assigned lease
 const std::string HARDCODED_LEASE = "192.0.2.222"; // assigned lease
 const std::string HARDCODED_NETMASK = "255.255.255.0";
 const std::string HARDCODED_NETMASK = "255.255.255.0";
@@ -1898,21 +1919,38 @@ const std::string HARDCODED_SERVER_ID = "192.0.2.1";</screen>
       </para>
       </para>
     </section>
     </section>
 
 
+    <section id="dhcp4-std">
+      <title>Supported standards</title>
+      <para>The following standards and draft standards are currently
+      supported:</para>
+      <itemizedlist>
+          <listitem>
+            <simpara>RFC2131: Supported messages are DISCOVER, OFFER,
+            REQUEST, and ACK.</simpara>
+          </listitem>
+          <listitem>
+            <simpara>RFC2132: Supported options are: PAD (0),
+            END(255), Message Type(53), DHCP Server Identifier (54),
+            Domain Name (15), DNS Servers (6), IP Address Lease Time
+            (51), Subnet mask (1), and Routers (3).</simpara>
+          </listitem>
+      </itemizedlist>
+    </section>
+
     <section id="dhcp4-limit">
     <section id="dhcp4-limit">
-      <title>DHCPv4 Server Limitations</title>
-      <para>
-        This are the current limitations of DHCPv4 server
-        software. Most of them are reflection of the early stage of
-        development.
-      </para>
+      <title>DHCPv4 Server Limitations</title> 
+      <para> These are the current limitations of DHCPv4 server
+      software. Most of them are reflections of the early stage of
+      development and should be treated as <quote>not implemented
+      yet</quote>, rather than actual limitations.</para>
       <itemizedlist>
       <itemizedlist>
           <listitem>
           <listitem>
-            <simpara>During initial IPv4 node configuration, where
-            server has to send packet to a node that does not have
-            IPv4 address assigned yet, server requires certain tricks
-            (or hacks) to transmit such packets. This is not
-            implemented yet, therefore DHCPv4 server supports relayed
-            traffic only.</simpara>
+            <simpara>During initial IPv4 node configuration, server is
+            expected to send packets to a node that does not have IPv4
+            address assigned yet. Server requires certain tricks (or
+            hacks) to transmit such packets. This is not implemented
+            yet, therefore DHCPv4 server supports relayed traffic only
+            (that is normal point to point communication).</simpara>
           </listitem>
           </listitem>
           <listitem>
           <listitem>
             <simpara><command>b10-dhcp4</command> provides a single,
             <simpara><command>b10-dhcp4</command> provides a single,
@@ -1936,13 +1974,13 @@ const std::string HARDCODED_SERVER_ID = "192.0.2.1";</screen>
             this code on a machine that has many interfaces and
             this code on a machine that has many interfaces and
             <command>b10-dhcp4</command> happens to listen on wrong
             <command>b10-dhcp4</command> happens to listen on wrong
             interface, the easiest way to work around this problem is
             interface, the easiest way to work around this problem is
-            to down other interfaces. This limitation will be fixed
-            shortly.</simpara>
+            to turn down other interfaces. This limitation will be
+            fixed shortly.</simpara>
           </listitem>
           </listitem>
           <listitem>
           <listitem>
-            <simpara>PRL (Parameter Request List) is currently ignored
-            and server assigns DNS SERVER and DOMAIN NAME
-            options.</simpara>
+            <simpara>PRL (Parameter Request List, a list of options
+            requested by a client) is currently ignored and server
+            assigns DNS SERVER and DOMAIN NAME options.</simpara>
           </listitem>
           </listitem>
           <listitem>
           <listitem>
             <simpara><command>b10-dhcp4</command> does not support
             <simpara><command>b10-dhcp4</command> does not support
@@ -1955,17 +1993,27 @@ const std::string HARDCODED_SERVER_ID = "192.0.2.1";</screen>
             <simpara>Interface detection is currently working on Linux
             <simpara>Interface detection is currently working on Linux
             only. See <xref linkend="iface-detect"/> for details.</simpara>
             only. See <xref linkend="iface-detect"/> for details.</simpara>
           </listitem>
           </listitem>
-        <listitem>
-          <simpara>Address renewal (RENEW), rebinding (REBIND),
-          confirmation (CONFIRM), duplication report (DECLINE) and
-          release (RELEASE) are not supported yet.</simpara>
-        </listitem>
-        <listitem>
-          <simpara>DNS Update is not supported yet.</simpara>
-        </listitem>
+          <listitem>
+            <simpara><command>b10-dhcp4</command> does not verify that
+            assigned address is unused. According to RFC2131, the
+            allocating server should verify that address is no used by
+            sending ICMP echo request.</simpara>
+          </listitem>
+          <listitem>
+            <simpara>Address renewal (RENEW), rebinding (REBIND),
+            confirmation (CONFIRM), duplication report (DECLINE) and
+            release (RELEASE) are not supported yet.</simpara>
+          </listitem>
+          <listitem>
+            <simpara>DNS Update is not supported yet.</simpara>
+          </listitem>
+          <listitem>
+            <simpara>-v (verbose) command line option is currently
+            permanently enabled.</simpara>
+          </listitem>
       </itemizedlist>
       </itemizedlist>
-
     </section>
     </section>
+
   </chapter>
   </chapter>
 
 
   <chapter id="dhcp6">
   <chapter id="dhcp6">
@@ -1976,6 +2024,16 @@ const std::string HARDCODED_SERVER_ID = "192.0.2.1";</screen>
     implementation, see <xref linkend="dhcp4"/>.
     implementation, see <xref linkend="dhcp4"/>.
     </para>
     </para>
 
 
+    <para>DHCPv6 server component is currently under intense
+    development. You may want to check out <ulink
+    url="http://bind10.isc.org/wiki/Kea">BIND10 DHCP (Kea) wiki</ulink>
+    and recent posts on <ulink
+    url="https://lists.isc.org/mailman/listinfo/bind10-dev">BIND10
+    developers mailing list</ulink>.</para>
+
+    <para>DHCPv4 and DHCPv6 components in BIND10 architecture are
+    internally code named <quote>Kea</quote>.</para>
+
     <note>
     <note>
       <para>
       <para>
         As of December 2011, both DHCPv4 and DHCPv6 components are
         As of December 2011, both DHCPv4 and DHCPv6 components are
@@ -1993,16 +2051,16 @@ const std::string HARDCODED_SERVER_ID = "192.0.2.1";</screen>
       <title>DHCPv6 Server Usage</title>
       <title>DHCPv6 Server Usage</title>
       <para>
       <para>
         BIND10 provides DHCPv6 server component since September
         BIND10 provides DHCPv6 server component since September
-        2011. It is currently described as skeleton server and can be
-        described as an early prototype that is not yet fully
-        functional. It is mature enough to conduct first tests in lab
-        environment, but it has significant limitations. See <xref
-        linkend="dhcp6-limit"/> for details.
+        2011. It is a skeleton server and can be described as an early
+        prototype that is not fully functional yet. It is mature
+        enough to conduct first tests in lab environment, but it has
+        significant limitations. See <xref linkend="dhcp6-limit"/> for
+        details.
       </para>
       </para>
 
 
       <para>
       <para>
         DHCPv6 server is implemented as <command>b10-dhcp6</command>
         DHCPv6 server is implemented as <command>b10-dhcp6</command>
-        daemon. As it is configurable yet, it is fully autonomous,
+        daemon. As it is not configurable yet, it is fully autonomous,
         i.e. it does not interact with <command>b10-cfgmgr</command>.
         i.e. it does not interact with <command>b10-cfgmgr</command>.
         To start DHCPv6 server, simply input:
         To start DHCPv6 server, simply input:
 
 
@@ -2016,10 +2074,10 @@ const std::string HARDCODED_SERVER_ID = "192.0.2.1";</screen>
         directory, in /usr/local/bin/b10-dhcp6 or other directory
         directory, in /usr/local/bin/b10-dhcp6 or other directory
         you specified during compilation.
         you specified during compilation.
 
 
-        Afre start, server will detect available network interfaces
+        After start, server will detect available network interfaces
         and will attempt to open UDP sockets on all interfaces that
         and will attempt to open UDP sockets on all interfaces that
-        are up, running, are not loopback and have IPv4 address
-        assigned.
+        are up, running, are not loopback, are multicast-capable and
+        have IPv6 address assigned.
 
 
         Server will then listen to incoming traffic. Currently
         Server will then listen to incoming traffic. Currently
         supported client messages are SOLICIT and REQUEST. Server
         supported client messages are SOLICIT and REQUEST. Server
@@ -2028,6 +2086,17 @@ const std::string HARDCODED_SERVER_ID = "192.0.2.1";</screen>
         As DHCPv6 server opens privileged ports, it requires root
         As DHCPv6 server opens privileged ports, it requires root
         access. Make sure you run this daemon as root.
         access. Make sure you run this daemon as root.
       </para>
       </para>
+
+        <note>
+          <para>
+            Integration with <command>bind10</command> is
+            planned. Ultimately, <command>b10-dhcp6</command> will not
+            be started directly, but rather via
+            <command>bind10</command>. Please be aware of this planned
+            change.
+          </para>
+        </note>
+
     </section>
     </section>
 
 
     <section id="dhcp6-config">
     <section id="dhcp6-config">
@@ -2040,8 +2109,9 @@ const std::string HARDCODED_SERVER_ID = "192.0.2.1";</screen>
       </para>
       </para>
       <para>
       <para>
         At this stage of development, the only way to alter server
         At this stage of development, the only way to alter server
-        configuration is to tweak its source code. To do so, please edit
-        src/bin/dhcp6/dhcp6_srv.cc file and modify following parameters:
+        configuration is to tweak its source code. To do so, please
+        edit src/bin/dhcp6/dhcp6_srv.cc file and modify following
+        parameters and recompile:
         <screen>
         <screen>
 const std::string HARDCODED_LEASE = "2001:db8:1::1234:abcd";
 const std::string HARDCODED_LEASE = "2001:db8:1::1234:abcd";
 const uint32_t HARDCODED_T1 = 1500; // in seconds
 const uint32_t HARDCODED_T1 = 1500; // in seconds
@@ -2055,8 +2125,28 @@ const std::string HARDCODED_DNS_SERVER = "2001:db8:1::1";</screen>
 
 
     </section>
     </section>
 
 
+    <section id="dhcp6-std">
+      <title>Supported DHCPv6 Standards</title>
+      <para>The following standards and draft standards are currently
+      supported:</para>
+      <itemizedlist>
+          <listitem>
+            <simpara>RFC3315: Supported messages are SOLICIT,
+            ADVERTISE, REQUEST, and REPLY. Supported options are
+            SERVER_ID, CLIENT_ID, IA_NA, and IAADDRESS.</simpara>
+          </listitem>
+          <listitem>
+            <simpara>RFC3646: Supported option is DNS_SERVERS.</simpara>
+          </listitem>
+      </itemizedlist>
+    </section>
+
     <section id="dhcp6-limit">
     <section id="dhcp6-limit">
       <title>DHCPv6 Server Limitations</title>
       <title>DHCPv6 Server Limitations</title>
+      <para> These are the current limitations of DHCPv6 server
+      software. Most of them are reflections of the early stage of
+      development and should be treated as <quote>not implemented
+      yet</quote>, rather than actual limitations.</para>
       <para>
       <para>
       <itemizedlist>
       <itemizedlist>
         <listitem>
         <listitem>
@@ -2083,8 +2173,13 @@ const std::string HARDCODED_DNS_SERVER = "2001:db8:1::1";</screen>
           so if you are running this code on a machine that has many
           so if you are running this code on a machine that has many
           interfaces and <command>b10-dhcp6</command> happens to
           interfaces and <command>b10-dhcp6</command> happens to
           listen on wrong interface, the easiest way to work around
           listen on wrong interface, the easiest way to work around
-          this problem is to down other interfaces. This limitation
-          will be fixed shortly.</simpara>
+          this problem is to turn down other interfaces. This
+          limitation will be fixed shortly.</simpara>
+        </listitem>
+        <listitem>
+          <simpara>ORO (Option Request Option, a list of options
+          requested by a client) is currently ignored and server
+          assigns DNS SERVER option.</simpara>
         </listitem>
         </listitem>
         <listitem>
         <listitem>
           <simpara>Temporary addresses are not supported yet.</simpara>
           <simpara>Temporary addresses are not supported yet.</simpara>
@@ -2104,6 +2199,10 @@ const std::string HARDCODED_DNS_SERVER = "2001:db8:1::1";</screen>
           <simpara>Interface detection is currently working on Linux
           <simpara>Interface detection is currently working on Linux
           only. See <xref linkend="iface-detect"/> for details.</simpara>
           only. See <xref linkend="iface-detect"/> for details.</simpara>
         </listitem>
         </listitem>
+        <listitem>
+          <simpara>-v (verbose) command line option is currently permanently
+          enabled.</simpara>
+        </listitem>
       </itemizedlist>
       </itemizedlist>
       </para>
       </para>
     </section>
     </section>
@@ -2112,17 +2211,19 @@ const std::string HARDCODED_DNS_SERVER = "2001:db8:1::1";</screen>
 
 
   <chapter id="libdhcp">
   <chapter id="libdhcp">
     <title>libdhcp++ library</title>
     <title>libdhcp++ library</title>
-    <para>libdhcp++ is a common library written in C++ that is
-    handles many DHCP-related tasks, like DHCPv4 and DHCPv6 packets
-    parsing, manipulation and assembly, option parsing, manipulation
-    and assembly, network interface detection and socket operations.
+    <para>libdhcp++ is a common library written in C++ that handles
+    many DHCP-related tasks, like DHCPv4 and DHCPv6 packets parsing,
+    manipulation and assembly, option parsing, manipulation and
+    assembly, network interface detection and socket operations, like
+    socket creations, data transmission and reception and socket
+    closing.
     </para>
     </para>
 
 
     <para>
     <para>
     While this library is currently used by
     While this library is currently used by
-    <command>b10-dhcp6</command> and <command>b10-dhcp4</command>
-    only, it is designed to be portable, universal library useful
-    for any kind of DHCP-related software.
+    <command>b10-dhcp4</command> and <command>b10-dhcp6</command>
+    only, it is designed to be portable, universal library useful for
+    any kind of DHCP-related software.
     </para>
     </para>
 
 
     <section id="iface-detect">
     <section id="iface-detect">
@@ -2132,14 +2233,14 @@ const std::string HARDCODED_DNS_SERVER = "2001:db8:1::1";</screen>
       currently only supported on Linux systems.</para>
       currently only supported on Linux systems.</para>
 
 
       <para>For non-linux systems, there is currently stub
       <para>For non-linux systems, there is currently stub
-      implementation provided. As DHCP servers need to know
-      available addresses, there was a simple mechanism implemented
-      to provide that information. User is expected to create
-      interfaces.txt file. Format of this file is simple. It
-      contains list of interfaces along with available address on
-      each interface. This mechanism is temporary and is going to be
-      removed as soon as interface detection becomes available on
-      non-linux systems. Example of interfaces.txt file looks as follows:
+      implementation provided. As DHCP servers need to know available
+      addresses, there is a simple mechanism implemented to provide
+      that information. User is expected to create interfaces.txt
+      file. Format of this file is simple. It contains list of
+      interfaces along with available address on each interface. This
+      mechanism is temporary and is going to be removed as soon as
+      interface detection becomes available on non-linux
+      systems. Example of interfaces.txt file looks as follows:
       <screen>
       <screen>
 # For DHCPv6, please specify link-local address (starts with fe80::)
 # For DHCPv6, please specify link-local address (starts with fe80::)
 # If in doubt, check output of 'ifconfig -a' command.
 # If in doubt, check output of 'ifconfig -a' command.