]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[288,!158] Changed references for remaining RFCs obsoleted by RFC 8415.
authorMarcin Siodelski <marcin@isc.org>
Thu, 6 Dec 2018 12:38:17 +0000 (13:38 +0100)
committerMarcin Siodelski <marcin@isc.org>
Thu, 6 Dec 2018 13:20:09 +0000 (08:20 -0500)
doc/guide/dhcp6-srv.xml
src/bin/dhcp6/dhcp6_srv.cc
src/bin/dhcp6/dhcp6_srv.h
src/bin/dhcp6/tests/dhcp6_client.cc
src/bin/dhcp6/tests/dhcp6_client.h
src/bin/dhcp6/tests/rebind_unittest.cc
src/lib/dhcp/dhcp6.h

index 5c419a2c5d996b1aa98d1d4cdc0d7e8b370e19f8..230fbfe3e5486c5be46fef6f009ee18a8cb0eb2e 100644 (file)
@@ -946,9 +946,9 @@ temporarily override a list of interface names and listen on all interfaces.
       <title>Subnet and Prefix Delegation Pools</title>
       <para>
         Subnets may also be configured to delegate prefixes, as defined in
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tools.ietf.org/html/rfc3633">RFC 3633</link>.  A
-        subnet may have one or more prefix delegation pools.  Each pool has a
-        prefixed address, which is specified as a prefix
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://tools.ietf.org/html/rfc8415">RFC 8415</link>,
+        section 6.3.  A subnet may have one or more prefix delegation pools.
+        Each pool has a prefixed address, which is specified as a prefix
         (<command>prefix</command>) and a prefix length
         (<command>prefix-len</command>), as well as a delegated prefix length
         (<command>delegated-len</command>). The delegated length must not be
index 0e9465d657153bf3bebaaacbb8661c741267423c..440b26d6201eba79dba40dae21cdae3d9e4b3339 100644 (file)
@@ -2086,7 +2086,7 @@ Dhcpv6Srv::extendIA_NA(const Pkt6Ptr& query, const Pkt6Ptr& answer,
     if (leases.empty()) {
 
         // The server wasn't able allocate new lease and renew an existing
-        // lease. In that case, the server sends NoAddrsAvail per RFC7550.
+        // lease. In that case, the server sends NoAddrsAvail per RFC 8415.
         ia_rsp->addOption(createStatusCode(*query, *ia_rsp,
                                            STATUS_NoAddrsAvail,
                                            "Sorry, no addresses could be"
@@ -2269,7 +2269,7 @@ Dhcpv6Srv::extendIA_PD(const Pkt6Ptr& query,
     if (leases.empty()) {
 
         // The server wasn't able allocate new lease and renew an existing
-        // lease. In that case, the server sends NoPrefixAvail per RFC7550.
+        // lease. In that case, the server sends NoPrefixAvail per RFC 8415.
         ia_rsp->addOption(createStatusCode(*query, *ia_rsp,
                                            STATUS_NoPrefixAvail,
                                            "Sorry, no prefixes could be"
index 8c6f2ee1ac35bf14d24546b1cc5006bd9fc7cb10..e8b891423435b1ac33a16b7cc62e48cc8fabc44d 100644 (file)
@@ -413,11 +413,46 @@ protected:
     /// This function is called by the logic which processes Renew and Rebind
     /// messages to extend the lifetime of the existing prefix.
     ///
-    /// The behavior of this function is different in that when there is no
-    /// binding found in the lease database for the particular client the
-    /// NoBinding status code is returned when processing Renew, the exception
-    /// is thrown when there is no binding and the Rebind message is processed
-    /// (see RFC3633, section 12.2. for details).
+    /// The behavior of this function is different than @c extendIA_NA in that
+    /// when there is no subnet found for the rebinding case, the Rebind message
+    /// is discarded by the server. That behavior is based on the following
+    /// statement from the RFC 8415, section 18.3.5:
+    ///
+    /// "If the server chooses to not include any IAs containing IA Address or
+    /// IA Prefix options with lifetimes of 0 and the server does not include
+    /// any other IAs with leases and/or status codes, the server does not send
+    /// a Reply message.  In this situation, the server discards the Rebind
+    /// message".
+    ///
+    /// @todo We should consider unification of the server behavior for address
+    /// assignment and prefix delegation with respect to Rebind message
+    /// processing. The RFC 8415, section 18.3.5 doesn't really differentiate
+    /// between IA_NA and IA_PD in how they should be processed by the server.
+    /// The intention of the spec is as follows:
+    ///
+    /// - If the server finds a lease but addresses and/or prefixes are not
+    ///   appropriate anymore, it sends them with zero lifetimes.
+    /// - If the server doesn't find a lease the server checks if the addresses
+    ///   and/or prefixes the client sends are appropriate and sends them back
+    ///   with zero lifetimes if they aren't.
+    /// - The server may choose to not respond at all, if it cannot determine
+    ///   whether the addresses and/or prefixes are appropriate and it doesn't
+    ///   allocate any other addresses and/or prefixes.
+    /// - If the server cannot find the leases included in the Rebind, the
+    ///   server may either allocate the leases or simply return NoBinding.
+    ///
+    /// The @c extendIA_PD function drops the Rebind message if it cannot find
+    /// the client entry (as a result of not finding a subnet for the client),
+    /// the @c extendIA_NA function sends NoBinding status code in that case.
+    /// Perhaps we should introduce an "Authoritative" configuration flag which,
+    /// if enabled, would cause the server to always respond, either indicating
+    /// that the address/prefix is inappropriate (with zero lifetimes) or that
+    /// there is no binding (NoBinding status code) for both addresses and
+    /// prefixes. When the "Authoritative" flag is disabled the server would
+    /// drop the Rebind for which there is neither subnet selected nor client
+    /// entry found (as it could be handled by another DHCP server). If nothing
+    /// else we could consider unifying the behavior of @c extendIA_NA and
+    /// @c extendIA_PD with respect to Rebind processing.
     ///
     /// @param query client's message
     /// @param ctx client context (contains subnet, duid and other parameters)
index 32ed802f79e973bcb7dc8cd21f4345765e8f6077..4c429e1f7d7c5df437f95b1ca581f84e095f5c26 100644 (file)
@@ -525,7 +525,7 @@ Dhcp6Client::doRenew() {
     copyIAsFromLeases(query);
 
     // During the Renew the client may request additional bindings per
-    // RFC7550.
+    // RFC 8415.
     appendRequestedIAs(query);
 
     // Add Client FQDN if configured.
@@ -549,7 +549,7 @@ Dhcp6Client::doRebind() {
     copyIAsFromLeases(query);
 
     // During the Rebind the client may request additional bindings per
-    // RFC7550.
+    // RFC 8415.
     appendRequestedIAs(query);
 
     // Add Client FQDN if configured.
index 4a2b86df8b8d6f2a1e97c57516ed8c8e54c8a569..13efc6a2d80734f381882696ed5bf5f1789b000d 100644 (file)
@@ -586,7 +586,7 @@ public:
     ///
     /// This method is typically called to specify IA_NA options to be
     /// sent to the server during 4-way handshakes and during lease
-    /// renewal to request allocation of new leases (as per RFC7550).
+    /// renewal to request allocation of new leases (as per RFC 8415).
     ///
     /// @param iaid IAID.
     /// @param address IPv6 address to be included in the IA_NA. It defaults
@@ -607,7 +607,7 @@ public:
     ///
     /// This method is typically called to specify IA_PD options to be
     /// sent to the server during 4-way handshakes and during lease
-    /// renewal to request allocation of new leases (as per RFC7550).
+    /// renewal to request allocation of new leases (as per RFC 8415).
     ///
     /// @param iaid IAID.
     /// @param prefix_len Prefix length.
index 915794382e43c24256c48a3f30d87d58cd41bb47..91d243c5c8c52e37ae6ce5b12aed98caa6ca1ba0 100644 (file)
@@ -790,9 +790,11 @@ TEST_F(RebindTest, directClientPDChangingPrefix) {
     client.config_.leases_[0].addr_ = IOAddress("2001:db8:1:10::");
     // Try to Rebind. The client will use correct IAID but will specify a
     // wrong prefix. The server will discover that the client has a binding
-    // but the prefix will not match. According to the RFC3633, section 12.2.
-    // the server has to return the lease with lifetimes set to 0, when there
-    // is a binding for the client but the prefix doesn't match.
+    // but the prefix will not match. According to the RFC 8415, section 18.3.5
+    // the server may return delegated prefix with lifetime of 0 when it
+    // finds that the lease entry for the particular IAID but the prefix
+    // is not appropriate. This constitues explicit notification to the
+    // client to not use this prefix.
     ASSERT_NO_THROW(client.doRebind());
     // Make sure that the server has discarded client's message. In such case,
     // the message sent back to the client should be NULL.
index b2b84b872a3ea10f36f7abf61a5b1e3fc9d74916..a6fa4dceda1c9d76b855fcee8186d32907bf4f86 100644 (file)
@@ -42,14 +42,14 @@ enum DHCPv6OptionType {
    D6O_SIP_SERVERS_ADDR                    = 22, /* RFC3319 */
    D6O_NAME_SERVERS                        = 23, /* RFC3646 */
    D6O_DOMAIN_SEARCH                       = 24, /* RFC3646 */
-   D6O_IA_PD                               = 25, /* RFC3633 */
-   D6O_IAPREFIX                            = 26, /* RFC3633 */
+   D6O_IA_PD                               = 25, /* RFC8415 */
+   D6O_IAPREFIX                            = 26, /* RFC8415 */
    D6O_NIS_SERVERS                         = 27, /* RFC3898 */
    D6O_NISP_SERVERS                        = 28, /* RFC3898 */
    D6O_NIS_DOMAIN_NAME                     = 29, /* RFC3898 */
    D6O_NISP_DOMAIN_NAME                    = 30, /* RFC3898 */
    D6O_SNTP_SERVERS                        = 31, /* RFC4075 */
-   D6O_INFORMATION_REFRESH_TIME            = 32, /* RFC4242 */
+   D6O_INFORMATION_REFRESH_TIME            = 32, /* RFC8415 */
    D6O_BCMCS_SERVER_D                      = 33, /* RFC4280 */
    D6O_BCMCS_SERVER_A                      = 34, /* RFC4280 */
    // 35 is unassigned
@@ -99,8 +99,8 @@ enum DHCPv6OptionType {
    D6O_CLIENT_LINKLAYER_ADDR               = 79, /* RFC6939 */
    D6O_LINK_ADDRESS                        = 80, /* RFC6977 */
 // D6O_RADIUS                              = 81, /* RFC7037 */
-   D6O_SOL_MAX_RT                          = 82, /* RFC7083 */
-   D6O_INF_MAX_RT                          = 83, /* RFC7083 */
+   D6O_SOL_MAX_RT                          = 82, /* RFC8415 */
+   D6O_INF_MAX_RT                          = 83, /* RFC8415 */
 // D6O_ADDRSEL                             = 84, /* RFC7078 */
 // D6O_ADDRSEL_TABLE                       = 85, /* RFC7078 */
 // D6O_V6_PCP_SERVER                       = 86, /* RFC7291 */
@@ -353,7 +353,7 @@ static const uint16_t DHCP6_SERVER_PORT = 547;
  */
 #define DUID_TIME_EPOCH 946684800
 
-/* Information-Request Time option (RFC 4242) */
+/* Information-Request Time option (RFC 8415) */
 
 #define IRT_DEFAULT     86400
 #define IRT_MINIMUM     600