2300 lines
86 KiB
Plaintext
2300 lines
86 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Internet Engineering Task Force (IETF) K. Kinnear
|
||
Request for Comments: 6926 M. Stapp
|
||
Category: Standards Track Cisco Systems, Inc.
|
||
ISSN: 2070-1721 R. Desetti
|
||
B. Joshi
|
||
Infosys Ltd.
|
||
N. Russell
|
||
Sea Street Technologies Inc.
|
||
P. Kurapati
|
||
Juniper Networks
|
||
B. Volz
|
||
Cisco Systems, Inc.
|
||
April 2013
|
||
|
||
|
||
DHCPv4 Bulk Leasequery
|
||
|
||
Abstract
|
||
|
||
The Dynamic Host Configuration Protocol for IPv4 (DHCPv4) Leasequery
|
||
protocol allows a requestor to request information about DHCPv4
|
||
bindings. This protocol is limited to queries for individual
|
||
bindings. In some situations, individual binding queries may not be
|
||
efficient or even possible. This document extends the DHCPv4
|
||
Leasequery protocol to allow for bulk transfer of DHCPv4 address
|
||
binding data via TCP.
|
||
|
||
Status of This Memo
|
||
|
||
This is an Internet Standards Track document.
|
||
|
||
This document is a product of the Internet Engineering Task Force
|
||
(IETF). It represents the consensus of the IETF community. It has
|
||
received public review and has been approved for publication by the
|
||
Internet Engineering Steering Group (IESG). Further information on
|
||
Internet Standards is available in Section 2 of RFC 5741.
|
||
|
||
Information about the current status of this document, any errata,
|
||
and how to provide feedback on it may be obtained at
|
||
http://www.rfc-editor.org/info/rfc6926.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 1]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (c) 2013 IETF Trust and the persons identified as the
|
||
document authors. All rights reserved.
|
||
|
||
This document is subject to BCP 78 and the IETF Trust's Legal
|
||
Provisions Relating to IETF Documents
|
||
(http://trustee.ietf.org/license-info) in effect on the date of
|
||
publication of this document. Please review these documents
|
||
carefully, as they describe your rights and restrictions with respect
|
||
to this document. Code Components extracted from this document must
|
||
include Simplified BSD License text as described in Section 4.e of
|
||
the Trust Legal Provisions and are provided without warranty as
|
||
described in the Simplified BSD License.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 2]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction ....................................................4
|
||
2. Terminology .....................................................5
|
||
3. Design Goals ....................................................8
|
||
3.1. Information Acquisition before Data Starts .................8
|
||
3.2. Lessen Need for Caching and Negative Caching ...............8
|
||
3.3. Antispoofing in 'Fast Path' ................................8
|
||
3.4. Minimize Data Transmission .................................9
|
||
4. Protocol Overview ...............................................9
|
||
5. Interaction between UDP Leasequery and Bulk Leasequery .........11
|
||
6. Message and Option Definitions .................................12
|
||
6.1. Message Framing for TCP ...................................12
|
||
6.2. New or Changed Options ....................................13
|
||
6.3. Connection and Transmission Parameters ....................20
|
||
7. Requestor Behavior .............................................21
|
||
7.1. Connecting and General Processing .........................21
|
||
7.2. Forming a Bulk Leasequery .................................21
|
||
7.3. Processing Bulk Replies ...................................23
|
||
7.4. Processing Time Values in Leasequery Messages .............25
|
||
7.5. Querying Multiple Servers .................................26
|
||
7.6. Making Sense out of Multiple Responses concerning
|
||
a Single IPv4 Address .....................................26
|
||
7.7. Multiple Queries to a Single Server over One Connection ...27
|
||
7.8. Closing Connections .......................................28
|
||
8. Server Behavior ................................................29
|
||
8.1. Accepting Connections .....................................29
|
||
8.2. Replying to a Bulk Leasequery .............................29
|
||
8.3. Building a Single Reply for Bulk Leasequery ...............33
|
||
8.4. Multiple or Parallel Queries ..............................34
|
||
8.5. Closing Connections .......................................35
|
||
9. Security Considerations ........................................35
|
||
10. IANA Considerations ...........................................37
|
||
11. Acknowledgements ..............................................38
|
||
12. References ....................................................38
|
||
12.1. Normative References .....................................38
|
||
12.2. Informative References ...................................39
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 3]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
1. Introduction
|
||
|
||
DHCPv4 [RFC2131] [RFC2132] specifies a protocol for the assignment of
|
||
IPv4 address and configuration information to IPv4 nodes. DHCPv4
|
||
servers maintain authoritative binding information.
|
||
|
||
+--------+
|
||
| DHCPv4 | +--------------+
|
||
| Server |-...-| DHCP |
|
||
| | | Relay Agent |
|
||
+--------+ +--------------+
|
||
| |
|
||
+------+ +------+
|
||
|Modem1| |Modem2|
|
||
+------+ +------+
|
||
| | |
|
||
+-----+ +-----+ +-----+
|
||
|Node1| |Node2| |Node3|
|
||
+-----+ +-----+ +-----+
|
||
|
||
Figure 1: Example DHCPv4 Configuration
|
||
|
||
DHCPv4 relay agents receive DHCPv4 messages and frequently append a
|
||
Relay Agent Information option [RFC3046] before relaying them to the
|
||
configured DHCPv4 servers (see Figure 1). In this process, some
|
||
relay agents also glean lease information sent by the server and
|
||
cache it locally. This information is used for a variety of
|
||
purposes. Two examples are prevention of spoofing attempts from the
|
||
DHCPv4 clients and installation of routes. When a relay agent
|
||
reboots, this information is frequently lost.
|
||
|
||
The DHCPv4 Leasequery capability [RFC4388] extends the basic DHCPv4
|
||
capability to allow an external entity, such as a relay agent, to
|
||
query a DHCPv4 server to rapidly recover lease state information
|
||
about a particular IP address or client.
|
||
|
||
The existing query types in Leasequery are typically data driven; the
|
||
relay agent initiates the Leasequery when it receives data traffic
|
||
from or to the client. This approach may not scale well when there
|
||
are thousands of clients connected to the relay agent or when the
|
||
relay agent has a need to rebuild its internal data store prior to
|
||
processing traffic in one direction or another.
|
||
|
||
Some applications require the ability to query the server without
|
||
waiting for traffic from or to clients. This query capability, in
|
||
turn, requires an underlying transport more suitable to the bulk
|
||
transmission of data.
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 4]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
This document extends the DHCPv4 Leasequery protocol [RFC4388] to add
|
||
support for queries that address these additional requirements.
|
||
There may be many thousands of DHCPv4 bindings returned as the result
|
||
of a single request, so TCP [RFC4614] is specified for efficiency of
|
||
data transfer. We define several additional query types, each of
|
||
which can return multiple responses, in order to meet a variety of
|
||
requirements.
|
||
|
||
2. Terminology
|
||
|
||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
|
||
"OPTIONAL" in this document are to be interpreted as described in RFC
|
||
2119 [RFC2119].
|
||
|
||
This document uses the following terms:
|
||
|
||
o "absolute time"
|
||
|
||
Absolute time is a 32-bit quantity containing the number of
|
||
seconds since January 1, 1970.
|
||
|
||
o "access concentrator"
|
||
|
||
An access concentrator is a router or switch at the broadband
|
||
access provider's edge of a public broadband access network. This
|
||
document assumes that the access concentrator includes the DHCPv4
|
||
relay agent functionality, for example, a CMTS (Cable Modem
|
||
Termination System) in a cable environment or a DSLAM (Digital
|
||
Subscriber Line Access Multiplexer) in a DSL environment.
|
||
|
||
o "active binding"
|
||
|
||
An IP address with an active binding refers to an IP address that
|
||
is currently associated with a DHCPv4 client where that DHCPv4
|
||
client has the right to use the IP address.
|
||
|
||
o "Bulk Leasequery"
|
||
|
||
Bulk Leasequery involves requesting and receiving the existing
|
||
DHCPv4 address binding information in an efficient manner.
|
||
|
||
o "clock skew"
|
||
|
||
The clock skew for a Bulk Leasequery connection is the difference
|
||
between the absolute time on a DHCPv4 server and the absolute time
|
||
on the system where a requestor of a Bulk Leasequery is executing.
|
||
It is not absolutely constant but is likely to vary only slowly.
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 5]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
It is possible that, when both systems run NTP, the clock skew is
|
||
negligible; this is not only acceptable but desired.
|
||
|
||
While it is easy to think that this can be calculated precisely
|
||
after one message is received by a requestor from a DHCPv4 server,
|
||
a more accurate value is derived from continuously examining the
|
||
instantaneous value developed from each message received from a
|
||
DHCPv4 server and using it to make small adjustments to the
|
||
existing value held in the requestor.
|
||
|
||
o "Default VPN"
|
||
|
||
A default VPN indicates that the address being described belongs
|
||
to the set of addresses not part of any VPN (in other words, the
|
||
normal address space operated on by DHCP). This includes Special
|
||
Use IPv4 Addresses as defined in [RFC5735].
|
||
|
||
o "DHCPv4 client"
|
||
|
||
A DHCPv4 client is an Internet node using DHCPv4 to obtain
|
||
configuration parameters such as a network address.
|
||
|
||
o "DHCPv4 relay agent"
|
||
|
||
A DHCPv4 relay agent is an agent that is neither a DHCPv4 client
|
||
nor a DHCP server that transfers BOOTP and DHCPv4 messages between
|
||
clients and servers residing on different subnets, per [RFC951]
|
||
and [RFC1542].
|
||
|
||
o "DHCPv4 server"
|
||
|
||
A DHCPv4 server is an Internet node that returns configuration
|
||
parameters to DHCPv4 clients.
|
||
|
||
o "DSLAM"
|
||
|
||
DSLAM stands for Digital Subscriber Line Access Multiplexer.
|
||
|
||
o "downstream"
|
||
|
||
Downstream refers to a direction away from the central part of a
|
||
network and toward the edge. In a DHCPv4 context, this typically
|
||
refers to a network direction that is away from the DHCPv4 server
|
||
and toward the DHCPv4 client.
|
||
|
||
o "Global VPN"
|
||
|
||
Global VPN is another name for the default VPN.
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 6]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
o "IP address"
|
||
|
||
In this document, the term "IP address" refers to an IPv4 IP
|
||
address.
|
||
|
||
o "IP address binding"
|
||
|
||
An IP address binding is the information that a DHCPv4 server
|
||
keeps regarding the relationship between a DHCPv4 client and an IP
|
||
address. This includes the identity of the DHCPv4 client and the
|
||
expiration time, if any, of any lease that client has on a
|
||
particular IP address. In some contexts, this may include
|
||
information on IP addresses that are currently associated with
|
||
DHCPv4 clients, and in others, it may also include IP addresses
|
||
with no current association to a DHCPv4 client.
|
||
|
||
o "MAC address"
|
||
|
||
In the context of a DHCPv4 message, a Media Access Control (MAC)
|
||
address consists of the fields: hardware type "htype", hardware
|
||
length "hlen", and client hardware address "chaddr".
|
||
|
||
o "upstream"
|
||
|
||
Upstream refers to a direction toward the central part of a
|
||
network and away from the edge. In a DHCPv4 context, this
|
||
typically refers to a network direction that is away from the
|
||
DHCPv4 client and toward the DHCPv4 server.
|
||
|
||
o "stable storage"
|
||
|
||
Stable storage is used to hold information concerning IP address
|
||
bindings (among other things) so that this information is not lost
|
||
in the event of a failure that requires restart of the network
|
||
element. DHCPv4 servers are typically expected to have high-speed
|
||
access to stable storage, while relay agents and access
|
||
concentrators usually do not have access to stable storage,
|
||
although they may have periodic access to such storage.
|
||
|
||
o "xid"
|
||
|
||
Transaction-id. The term "xid" refers to the DHCPv4 field
|
||
containing the transaction-id of the message.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 7]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
3. Design Goals
|
||
|
||
The goal of this document is to provide a lightweight protocol for an
|
||
access concentrator or other network element (such as a DHCP relay
|
||
agent) to retrieve IP address binding information available in the
|
||
DHCPv4 server. The protocol should also allow an access concentrator
|
||
or DHCP relay agent to retrieve consolidated IP address binding
|
||
information for either the entire access concentrator or a single
|
||
connection/circuit. Throughout the discussion below, everything that
|
||
applies to an access concentrator also applies to a DHCP relay agent.
|
||
|
||
3.1. Information Acquisition before Data Starts
|
||
|
||
The existing data-driven approach required by [RFC4388] means that
|
||
the Leasequeries can only be performed after an access concentrator
|
||
receives data. To implement antispoofing, the concentrator must drop
|
||
messages for each client until it gets lease information from the
|
||
DHCPv4 server for that client. If an access concentrator finishes
|
||
the Leasequeries before it starts receiving data, then there is no
|
||
need to drop legitimate messages. In this way, outage time may be
|
||
reduced.
|
||
|
||
3.2. Lessen Need for Caching and Negative Caching
|
||
|
||
The result of a single Leasequery should be cached, whether that
|
||
results in a positive or negative cache, in order to remember that
|
||
the Leasequery was performed. This caching is required to limit the
|
||
traffic imposed upon a DHCPv4 server by Leasequeries for information
|
||
already received.
|
||
|
||
These caches not only consume precious resources, they also need to
|
||
be managed. Hence, they should be avoided as much as possible. One
|
||
of the goals of the DHCPv4 Bulk Leasequery is to reduce the need for
|
||
this sort of caching.
|
||
|
||
3.3. Antispoofing in 'Fast Path'
|
||
|
||
If antispoofing is not done in the fast path, it will become a
|
||
bottleneck and may lead to denial of service of the access
|
||
concentrator. The Leasequeries should make it possible to do
|
||
antispoofing in the fast path.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 8]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
3.4. Minimize Data Transmission
|
||
|
||
It may be that a network element is able to periodically save its
|
||
entire list of assigned IP addresses to some form of stable storage.
|
||
In this case, it will wish to recover all of the updates to this
|
||
information without duplicating the information it has recovered from
|
||
its own stable storage.
|
||
|
||
Bulk Leasequery allows the specification of a query-start-time as
|
||
well as a query-end-time. Use of query times allows a network
|
||
element that periodically commits information to stable storage to
|
||
recover just what it lost since the last commit.
|
||
|
||
4. Protocol Overview
|
||
|
||
The DHCPv4 Bulk Leasequery protocol is modeled on the existing
|
||
individual DHCPv4 Leasequery protocol in [RFC4388] as well as related
|
||
work on DHCPv6 Bulk Leasequery [RFC5460]. A Bulk Leasequery
|
||
requestor opens a TCP connection to a DHCPv4 server using the DHCPv4
|
||
port 67. Note that this implies that the Leasequery requestor has
|
||
server IP address(es) available via configuration or some other means
|
||
and that it has unicast IP reachability to the DHCPv4 server. No
|
||
relaying of Bulk Leasequery messages is specified.
|
||
|
||
After establishing a connection, the requestor sends a
|
||
DHCPBULKLEASEQUERY message over the connection.
|
||
|
||
The server uses the message type and additional data in the DHCPv4
|
||
DHCPBULKLEASEQUERY message to identify any relevant bindings.
|
||
|
||
In order to support some query types, servers may have to maintain
|
||
additional data structures or otherwise be able to locate bindings
|
||
that have been requested by the Leasequery requestor.
|
||
|
||
Relevant bindings are returned in DHCPv4 messages with either the
|
||
DHCPLEASEACTIVE message type for an IP address with a currently
|
||
active lease or, in some situations, a DHCPLEASEUNASSIGNED message
|
||
type for an IP address that is controlled by the DHCPv4 server but is
|
||
not actively leased by a DHCPv4 client at the present time.
|
||
|
||
The Bulk Leasequery protocol is designed to provide an external
|
||
entity with information concerning existing DHCPv4 IPv4 address
|
||
bindings managed by the DHCPv4 server. When complete, the DHCPv4
|
||
server will send a DHCPLEASEQUERYDONE message. If a connection is
|
||
lost while processing a Bulk Leasequery, the Bulk Leasequery must be
|
||
retried as there is no provision for determining the extent of data
|
||
already received by the requestor for a Bulk Leasequery.
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 9]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
Bulk Leasequery supports queries by MAC address and by Client
|
||
Identifier in a way similar to [RFC4388]. The Bulk Leasequery
|
||
protocol also adds several new queries.
|
||
|
||
o Query by Relay Identifier
|
||
|
||
This query asks a server for the bindings associated with a
|
||
specific relay agent; the relay agent is identified by a Relay
|
||
Agent Identifier carried in a Relay-ID sub-option [RFC6925].
|
||
Relay agents can include this sub-option while relaying messages
|
||
to DHCPv4 servers. Servers can retain the Relay-ID and associate
|
||
it with bindings made on behalf of the relay agent's clients. The
|
||
bindings returned are only those for DHCPv4 clients with a
|
||
currently active binding.
|
||
|
||
o Query by Remote ID
|
||
|
||
This query asks a server for the bindings associated with a relay
|
||
agent Remote ID sub-option [RFC3046] value. The bindings returned
|
||
are only those for DHCPv4 clients with a currently active binding.
|
||
|
||
o Query for All Configured IP Addresses
|
||
|
||
This query asks a server for information concerning all IP
|
||
addresses configured in that DHCPv4 server by specifying no other
|
||
type of query. In this case, the bindings returned are for all
|
||
configured IP addresses, whether or not they contain a currently
|
||
active binding to a DHCPv4 client, since one point of this type of
|
||
query is to update an existing database with changes after a
|
||
particular point in time.
|
||
|
||
Any of the above queries can be qualified by the specification of a
|
||
query-start-time or a query-end-time (or both). When these timers
|
||
are used as qualifiers, they indicate that a binding should be
|
||
included if it changed on or after the query-start-time and on or
|
||
before the query-end-time.
|
||
|
||
In addition, any of the above queries can be qualified by the
|
||
specification of a VPN-ID option [RFC6607] to select the VPN on which
|
||
the query should be processed. The VPN-ID option is also extended to
|
||
allow queries across all available VPNs. In the absence of any VPN-
|
||
ID option, only the default (global) VPN is used to satisfy the
|
||
query.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 10]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
5. Interaction between UDP Leasequery and Bulk Leasequery
|
||
|
||
Bulk Leasequery can be seen as an extension of the existing UDP
|
||
Leasequery protocol [RFC4388]. This section clarifies the
|
||
relationship between the two protocols.
|
||
|
||
The Bulk Leasequery TCP connection is only designed to handle the
|
||
DHCPBULKLEASEQUERY request. It is not intended as an alternative
|
||
DHCPv4 communication option for clients seeking other DHCPv4
|
||
services. DHCPv4 address allocation could not be performed over a
|
||
TCP connection in any case, as a TCP connection requires an IP
|
||
address and no IPv4 address exists prior to a successful DHCPv4
|
||
address allocation exchange. In addition, the existing DHCPv4 UDP
|
||
transmission regime is implemented in untold millions of devices
|
||
deployed worldwide, and complicating DHCPv4 services with alternative
|
||
transmission approaches (even if it were possible) would be worse
|
||
than any perceived benefit to doing so.
|
||
|
||
Two of the query types introduced in the UDP Leasequery protocol can
|
||
be used in the Bulk Leasequery protocol -- Query by MAC address and
|
||
Query by Client-identifier.
|
||
|
||
The contents of the reply messages are similar between the existing
|
||
UDP Leasequery protocol and the Bulk Leasequery protocol, though more
|
||
information is returned in the Bulk Leasequery messages.
|
||
|
||
One change in behavior for these existing queries is required when
|
||
Bulk Leasequery is used. Sections 6.1, 6.4.1, and 6.4.2 of [RFC4388]
|
||
specify the use of an associated-ip option in DHCPLEASEACTIVE
|
||
messages in cases where multiple bindings were found. When Bulk
|
||
Leasequery is used, this mechanism is not necessary; a server
|
||
returning multiple bindings simply does so directly as specified in
|
||
this document. The associated-ip option MUST NOT appear in Bulk
|
||
Leasequery replies.
|
||
|
||
Implementors should note that the TCP message framing defined in
|
||
Section 6.1 is not compatible with the UDP message format. If a TCP-
|
||
framed request is sent as a UDP message, it may not be valid, because
|
||
protocol fields will be offset by the message-size prefix.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 11]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
6. Message and Option Definitions
|
||
|
||
6.1. Message Framing for TCP
|
||
|
||
The use of TCP for the Bulk Leasequery protocol permits multiple
|
||
messages to be sent from one end of the connection to the other
|
||
without requiring a request/response paradigm as does UDP DHCPv4
|
||
[RFC2131]. The receiver needs to be able to determine the size of
|
||
each message it receives. Two octets containing the message size in
|
||
network byte order are prepended to each DHCPv4 message sent on a
|
||
Bulk Leasequery TCP connection. The two message-size octets 'frame'
|
||
each DHCPv4 message.
|
||
|
||
The maximum message size is 65535 octets.
|
||
|
||
0 1 2 3
|
||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| message-size | op (1) | htype (1) |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| hlen (1) | hops (1) | .... |
|
||
+---------------+---------------+ +
|
||
| |
|
||
. remainder of DHCPv4 message,
|
||
. from Figure 1 of [RFC2131] .
|
||
. .
|
||
. (variable) .
|
||
| |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
message-size the number of octets in the message that
|
||
follows, as a 16-bit unsigned integer in
|
||
network byte order.
|
||
|
||
All other fields are as specified in DHCPv4 [RFC2131].
|
||
|
||
Figure 2: Format of a DHCPv4 Message in TCP
|
||
|
||
The intent in using this format is that code that currently knows how
|
||
to deal with sending or receiving a message in [RFC2131] format will
|
||
easily be able to deal with the message contained in the TCP framing.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 12]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
6.2. New or Changed Options
|
||
|
||
The existing messages DHCPLEASEUNASSIGNED and DHCPLEASEACTIVE are
|
||
used as the value of the dhcp-message-type option to indicate an IP
|
||
address that is currently not leased or currently leased to a DHCPv4
|
||
client, respectively [RFC4388].
|
||
|
||
Additional options have also been defined to enable the Bulk
|
||
Leasequery protocol to communicate useful information to the
|
||
requestor.
|
||
|
||
6.2.1. dhcp-message-type
|
||
|
||
The dhcp-message-type option (option 53) from Section 9.6 of
|
||
[RFC2132] requires new values. The values of these message types are
|
||
shown below in an extension of the table from Section 9.6 of
|
||
[RFC2132]:
|
||
|
||
Value Message Type
|
||
----- ------------
|
||
14 DHCPBULKLEASEQUERY
|
||
15 DHCPLEASEQUERYDONE
|
||
|
||
6.2.2. status-code
|
||
|
||
The status-code option allows a machine-readable value to be returned
|
||
regarding the status of a DHCPBULKLEASEQUERY request.
|
||
|
||
This option has two possible scopes when used with Bulk Leasequery,
|
||
depending on the context in which it appears. It refers to the
|
||
information in a single Leasequery reply if the value of the dhcp-
|
||
message-type is DHCPLEASEACTIVE or DHCPLEASEUNASSIGNED. It refers to
|
||
the message stream related to an entire request if the value of the
|
||
dhcp-message-type is DHCPLEASEQUERYDONE.
|
||
|
||
The code for this option is 151. The length of this option is a
|
||
minimum of 1 octet.
|
||
|
||
Status Status
|
||
Code Len Code Message
|
||
+------+------+------+------+------+-- --+-----+
|
||
| 151 | n+1 |status| s1 | s2 | ... | sn |
|
||
+------+------+------+------+------+-- --+-----+
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 13]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
The status-code is indicated in one octet as defined in the table
|
||
below. The Status Message is an optional UTF-8-encoded text string
|
||
suitable for display to an end user. This text string MUST NOT
|
||
contain a termination character (e.g., a null). The Len field
|
||
describes the length of the Status Message without any terminator
|
||
character. Null characters MUST NOT appear in the Status Message
|
||
string, and it is a protocol violation for them to appear in any
|
||
position in the Status Message, including at the end.
|
||
|
||
Name Status Code Description
|
||
---- ----------- -----------
|
||
Success 000 Success. Also signaled by absence of
|
||
a status-code option.
|
||
|
||
UnspecFail 001 Failure, reason unspecified.
|
||
|
||
QueryTerminated 002 Indicates that the server is unable to
|
||
perform a query or has prematurely terminated
|
||
the query for some reason (which should be
|
||
communicated in the text message).
|
||
|
||
MalformedQuery 003 The query was not understood.
|
||
|
||
NotAllowed 004 The query or request was understood but was
|
||
not allowed in this context.
|
||
|
||
A status-code option MAY appear in the options field of a DHCPv4
|
||
message. If the status-code option does not appear, it is assumed
|
||
that the operation was successful. The status-code option SHOULD NOT
|
||
appear in a message that is successful unless there is some text
|
||
string that needs to be communicated to the requestor.
|
||
|
||
6.2.3. base-time
|
||
|
||
The base-time option is the current time the message was created to
|
||
be sent by the DHCPv4 server to the requestor of the Bulk Leasequery.
|
||
This MUST be an absolute time. All of the other time-based options
|
||
in the reply message are relative to this time, including the dhcp-
|
||
lease-time [RFC2132] and client-last-transaction-time [RFC4388].
|
||
This time is in the context of the DHCPv4 server that placed this
|
||
option in a message.
|
||
|
||
This is an unsigned integer in network byte order.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 14]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
The code for this option is 152. The length of this option is 4
|
||
octets.
|
||
|
||
DHCPv4 Server
|
||
Code Len base-time
|
||
+-----+-----+-----+-----+-----+-----+
|
||
| 152 | 4 | t1 | t2 | t3 | t4 |
|
||
+-----+-----+-----+-----+-----+-----+
|
||
|
||
6.2.4. start-time-of-state
|
||
|
||
The start-time-of-state option allows the receiver to determine the
|
||
time at which the IP address made the transition into its current
|
||
state.
|
||
|
||
This MUST NOT be an absolute time, which is equivalent to saying that
|
||
this MUST NOT be an absolute number of seconds since January 1, 1970.
|
||
Instead, this MUST be the unsigned integer number of seconds from the
|
||
time the IP address transitioned its current state to the time
|
||
specified in the base-time option in the same message.
|
||
|
||
This is an unsigned integer in network byte order.
|
||
|
||
The code for this option is 153. The length of this option is 4
|
||
octets.
|
||
|
||
Seconds in the past
|
||
Code Len from base-time
|
||
+-----+-----+-----+-----+-----+-----+
|
||
| 153 | 4 | t1 | t2 | t3 | t4 |
|
||
+-----+-----+-----+-----+-----+-----+
|
||
|
||
6.2.5. query-start-time
|
||
|
||
The query-start-time option specifies a start query time to the
|
||
DHCPv4 server. If specified, only bindings that have changed on or
|
||
after the query-start-time should be included in the response to the
|
||
query.
|
||
|
||
The requestor MUST determine the query-start-time using lease
|
||
information it has received from the DHCPv4 server. This MUST be an
|
||
absolute time in the DHCPv4 server's context (see Section 7.4).
|
||
|
||
Typically (though this is not a requirement), the query-start-time
|
||
option will contain the value most recently received in a base-time
|
||
option by the requestor, as this will indicate the last successful
|
||
communication with the DHCP server.
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 15]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
This MUST be an absolute time.
|
||
|
||
This is an unsigned integer in network byte order.
|
||
|
||
The code for this option is 154. The length of this option is 4
|
||
octets.
|
||
|
||
DHCPv4 Server
|
||
Code Len query-start-time
|
||
+-----+-----+-----+-----+-----+-----+
|
||
| 154 | 4 | t1 | t2 | t3 | t4 |
|
||
+-----+-----+-----+-----+-----+-----+
|
||
|
||
6.2.6. query-end-time
|
||
|
||
The query-end-time option specifies an end query time to the DHCPv4
|
||
server. If specified, only bindings that have changed on or before
|
||
the query-end-time should be included in the response to the query.
|
||
|
||
The requestor MUST determine the query-end-time based on lease
|
||
information it has received from the DHCPv4 server. This MUST be an
|
||
absolute time in the context of the DHCPv4 server.
|
||
|
||
In the absence of information to the contrary, the requestor SHOULD
|
||
assume that the time context of the DHCPv4 server is identical to the
|
||
time context of the requestor (see Section 7.4).
|
||
|
||
This is an unsigned integer in network byte order.
|
||
|
||
The code for this option is 155. The length of this option is 4
|
||
octets.
|
||
|
||
DHCPv4 Server
|
||
Code Len query-end-time
|
||
+-----+-----+-----+-----+-----+-----+
|
||
| 155 | 4 | t1 | t2 | t3 | t4 |
|
||
+-----+-----+-----+-----+-----+-----+
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 16]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
6.2.7. dhcp-state
|
||
|
||
The dhcp-state option allows greater detail to be returned than
|
||
allowed by the DHCPLEASEACTIVE and DHCPLEASEUNASSIGNED message types.
|
||
|
||
The code for this option is 156. The length of this option is 1
|
||
octet.
|
||
|
||
0 1 2
|
||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| 156 | Length | State |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
156 The option code.
|
||
|
||
Length The option length, 1 octet.
|
||
|
||
State The state of the IP address.
|
||
|
||
Value State
|
||
----- -----
|
||
1 AVAILABLE Address is available to local DHCPv4 server
|
||
2 ACTIVE Address is assigned to a DHCPv4 client
|
||
3 EXPIRED Lease has expired
|
||
4 RELEASED Lease has been released by DHCPv4 client
|
||
5 ABANDONED Server or client flagged address as unusable
|
||
6 RESET Lease was freed by some external agent
|
||
7 REMOTE Address is available to a remote DHCPv4 server
|
||
8 TRANSITIONING Address is moving between states
|
||
|
||
Note that some of these states may be transient and may not appear in
|
||
normal use. A DHCPv4 server MUST implement at least the AVAILABLE
|
||
and ACTIVE states and SHOULD implement at least the ABANDONED and
|
||
RESET states.
|
||
|
||
Note the states AVAILABLE and REMOTE are relative to the current
|
||
server. An address that is available to the current server should
|
||
show AVAILABLE on that server, and if another server is involved with
|
||
that address as well, it should show as REMOTE on that other server.
|
||
|
||
The dhcp-state option SHOULD contain ACTIVE when it appears in a
|
||
DHCPLEASEACTIVE message. A DHCPv4 server MAY choose to not send a
|
||
dhcp-state option in a DHCPLEASEACTIVE message, and a requestor
|
||
SHOULD assume that the dhcp-state is ACTIVE if no dhcp-state option
|
||
appears in a DHCPLEASEACTIVE message.
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 17]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
The reference to local and remote relate to possible use in an
|
||
environment that includes multiple servers cooperating to provide an
|
||
increased availability solution. In this case, an IP address with
|
||
the state of AVAILABLE is available to the local server, while one
|
||
with the state of REMOTE is available to a remote server. Usually,
|
||
an IP address that is AVAILABLE on one server would be REMOTE on any
|
||
remote server. The TRANSITIONING state is also likely to be useful
|
||
in multiple server deployments, where sometimes one server must
|
||
interlock a state change with one or more other servers. Should a
|
||
Bulk Leasequery need to send information concerning the state of the
|
||
IP address during this period, it SHOULD use the TRANSITIONING state,
|
||
since the IP address is likely to be neither ACTIVE or AVAILABLE.
|
||
|
||
There is no requirement for the state of an IP address to transition
|
||
in a well-defined way from state to state. To put this another way,
|
||
you cannot draw a simple state transition graph for the states of an
|
||
IP address, and the requestor of a Leasequery MUST NOT depend on one
|
||
certain state always following a particular previous state. While a
|
||
state transition diagram can be drawn, it would be fully connected
|
||
and therefore conveys no useful information. Every state can (at
|
||
times) follow every other state.
|
||
|
||
6.2.8. data-source
|
||
|
||
The data-source option contains information about the source of the
|
||
data in a DHCPLEASEACTIVE or a DHCPLEASEUNASSIGNED message. It
|
||
SHOULD be used when there are two or more servers that might have
|
||
information about a particular IP address binding. Frequently, two
|
||
servers work together to provide an increased availability solution
|
||
for the DHCPv4 service, and in these cases, both servers will respond
|
||
to Bulk Leasequery requests for the same IP address. When one server
|
||
is working with another server and both may respond with information
|
||
about the same IP address, each server SHOULD return the data-source
|
||
option with the other information provided about the IP address.
|
||
|
||
The data contained in this option will allow an external process to
|
||
better discriminate between the information provided by each of the
|
||
servers servicing this IPv4 address.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 18]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
The code for this option is 157. The length of this option is 1
|
||
octet.
|
||
|
||
0 1 2
|
||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| 157 | Length | Flags |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
157 The option code.
|
||
|
||
Length The option length, 1 octet.
|
||
|
||
Flags The source information for this message.
|
||
|
||
0 1 2 3 4 5 6 7
|
||
+-+-+-+-+-+-+-+-+
|
||
| UNA |R|
|
||
+-+-+-+-+-+-+-+-+
|
||
|
||
R: REMOTE flag
|
||
|
||
remote = 1
|
||
local = 0
|
||
|
||
UNA: UNASSIGNED
|
||
|
||
The REMOTE flag is used to indicate where the most recent change of
|
||
state (or other interesting change) concerning this IPv4 address took
|
||
place. If the value is local, then the change took place on the
|
||
server from which this message was transmitted. If the value is
|
||
remote, then the change took place on some other server and was made
|
||
known to the server from which this message was transmitted.
|
||
|
||
If this option was requested and it doesn't appear, the requestor
|
||
MUST consider that the data-source was local.
|
||
|
||
Unassigned bits MUST be ignored.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 19]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
6.2.9. Virtual Subnet Selection Type and Information
|
||
|
||
All of the (sub-)options defined in [RFC6607] carry identical
|
||
payloads, consisting of a type and additional VSS (Virtual Subnet
|
||
Selection) information. The existing table is extended (see below)
|
||
with a new type 254 to allow specification of a type code that
|
||
indicates that all VPNs are to be used to process the Bulk
|
||
Leasequery.
|
||
|
||
Type VSS Information Format
|
||
----------------------------------------------------------
|
||
0 Network Virtual Terminal (NVT) ASCII VPN identifier
|
||
1 RFC 2685 VPN-ID
|
||
CHANGED -> 2-253 Unassigned
|
||
NEW -> 254 All VPNs (wildcard)
|
||
255 Global, default VPN
|
||
|
||
6.3. Connection and Transmission Parameters
|
||
|
||
DHCPv4 servers that support Bulk Leasequery SHOULD listen for
|
||
incoming TCP connections on the DHCPv4 server port 67.
|
||
Implementations MAY offer to make the incoming port configurable, but
|
||
port 67 MUST be the default. Requestors SHOULD make TCP connections
|
||
to port 67 and MAY offer to make the destination server port
|
||
configurable.
|
||
|
||
This section presents a table of values used to control Bulk
|
||
Leasequery behavior, including recommended defaults. Implementations
|
||
MAY make these values configurable. However, configuring too-small
|
||
timeout values may lead to harmful behavior both to this application
|
||
as well as to other traffic in the network. As a result, timeout
|
||
values smaller than the default values are NOT RECOMMENDED.
|
||
|
||
Parameter Default Description
|
||
--------------------------------------------------------------------
|
||
BULK_LQ_DATA_TIMEOUT 300 secs Bulk Leasequery data timeout
|
||
for both client and server
|
||
(see Sections 7 and 8)
|
||
BULK_LQ_MAX_CONNS 10 Max Bulk Leasequery TCP connections
|
||
at the server side (see Section 8.1)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 20]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
7. Requestor Behavior
|
||
|
||
7.1. Connecting and General Processing
|
||
|
||
A requestor attempts to establish a TCP connection to a DHCPv4 server
|
||
in order to initiate a Leasequery exchange. If the attempt fails,
|
||
the requestor MAY retry.
|
||
|
||
If Bulk Leasequery is terminated prematurely by a DHCPLEASEQUERYDONE
|
||
with a status-code option with a status code of QueryTerminated or by
|
||
the failure of the connection over which it was being submitted, the
|
||
requestor MAY retry the request after the creation of a new
|
||
connection.
|
||
|
||
Messages from the DHCPv4 server come as multiple responses to a
|
||
single DHCPBULKLEASEQUERY message. Thus, each DHCPBULKLEASEQUERY
|
||
request MUST have an xid (transaction-id) unique on the connection on
|
||
which it is sent. All of the messages that come as a response to
|
||
that message will contain the same xid as the request. The xid
|
||
allows the data-streams of two different DHCPBULKLEASEQUERY requests
|
||
to be demultiplexed by the requestor.
|
||
|
||
7.2. Forming a Bulk Leasequery
|
||
|
||
Bulk Leasequery is designed to create a connection that will transfer
|
||
the state of some subset (or possibly all) of the IP address bindings
|
||
from the DHCPv4 server to the requestor. The DHCPv4 server will send
|
||
all of the requested IPv4 address bindings across this connection
|
||
with minimal delay after it receives the request. In this context,
|
||
"all IP address binding information" means information about all IPv4
|
||
addresses configured within the DHCPv4 server that meet the specified
|
||
query criteria. For some query criteria, this may include IP address
|
||
binding information for IP addresses that may not now have or ever
|
||
have had an association with a specific DHCPv4 client.
|
||
|
||
To form the Bulk query, a DHCPv4 request is constructed with a dhcp-
|
||
message-type of DHCPBULKLEASEQUERY. The query SHOULD have a dhcp-
|
||
parameter-request-list to inform the DHCPv4 server which DHCPv4
|
||
options are of interest to the requestor sending the
|
||
DHCPBULKLEASEQUERY message. The dhcp-parameter-request-list in a
|
||
DHCPBULKLEASEQUERY message SHOULD contain the codes for base-time,
|
||
dhcp-lease-time, start-time-of-state, and client-last-transaction-
|
||
time.
|
||
|
||
A DHCPBULKLEASEQUERY request is constructed of one primary query and
|
||
optionally one or more qualifiers for it.
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 21]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
The possible primary queries are listed below. Each
|
||
DHCPBULKLEASEQUERY request MUST contain only one of these primary
|
||
queries.
|
||
|
||
o Query by MAC address
|
||
|
||
In a Query by MAC address, the chaddr, htype, and hlen of the
|
||
DHCPv4 packet are filled in with the values requested.
|
||
|
||
o Query by Client-identifier
|
||
|
||
In a Query by Client-identifier, a Client-identifier option
|
||
containing the requested value is included in the
|
||
DHCPBULKLEASEQUERY request.
|
||
|
||
o Query by Remote ID
|
||
|
||
In a Query by Remote ID, a Remote ID sub-option containing the
|
||
requested value is included in the relay-agent-information option
|
||
of the DHCPBULKLEASEQUERY request.
|
||
|
||
o Query by Relay-ID
|
||
|
||
In a Query by Relay-ID, a Relay-ID sub-option [RFC6925] containing
|
||
the requested value is included in the relay-agent-information
|
||
option of the DHCPBULKLEASEQUERY request.
|
||
|
||
o Query for All Configured IP Addresses
|
||
|
||
A Query for All Configured IP addresses is signaled by the absence
|
||
of any other primary query.
|
||
|
||
There are three qualifiers that can be applied to any of the above
|
||
primary queries. These qualifiers can appear individually or
|
||
together in any combination, but only one of each can appear.
|
||
|
||
o Query Start Time
|
||
|
||
Inclusion of a query-start-time option specifies that only IP
|
||
address bindings that have changed on or after the time specified
|
||
in the query-start-time option should be returned.
|
||
|
||
o Query End Time
|
||
|
||
Inclusion of a query-end-time option specifies that only IP
|
||
address bindings that have changed on or before the time specified
|
||
in the query-end-time option should be returned.
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 22]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
o VPN-ID
|
||
|
||
If no VPN-ID option appears in the DHCPBULKLEASEQUERY, the default
|
||
(global) VPN is searched to satisfy the query specified by the
|
||
DHCPBULKLEASEQUERY. Using the VPN-ID option [RFC6607] allows the
|
||
requestor to specify a single VPN other than the default VPN. In
|
||
addition, the VPN-ID option has been extended as part of this
|
||
document to allow specification that all configured VPNs be
|
||
searched in order to satisfy the query specified in the
|
||
DHCPBULKLEASEQUERY.
|
||
|
||
In all cases, any message returned from a DHCPBULKLEASEQUERY
|
||
request containing information about an IP address for other than
|
||
the default (global) VPN MUST contain a VPN-ID option in the
|
||
message.
|
||
|
||
Use of the query-start-time or the query-end-time options or both can
|
||
serve to reduce the amount of data transferred over the TCP
|
||
connection by a considerable amount. Note that the times specified
|
||
in the query-start-time or query-end-time options are absolute times,
|
||
not durations offset from "now".
|
||
|
||
The TCP connection may become blocked or stop being writable while
|
||
the requestor is sending its query. Should this happen, the
|
||
implementation's behavior is controlled by the current value of
|
||
BULK_LQ_DATA_TIMEOUT. The default value is given elsewhere in this
|
||
document, and this value may be overridden by local configuration of
|
||
the operator.
|
||
|
||
If this situation is detected, the requestor SHOULD start a timer
|
||
using the current value of BULK_LQ_DATA_TIMEOUT. If that timer
|
||
expires, the requestor SHOULD terminate the connection. This timer
|
||
is completely independent of any TCP timeout established by the TCP
|
||
protocol connection.
|
||
|
||
7.3. Processing Bulk Replies
|
||
|
||
The requestor attempts to read a DHCPv4 Leasequery reply message from
|
||
the TCP connection.
|
||
|
||
The TCP connection may stop delivering reply data (i.e., the
|
||
connection stops being readable). Should this happen, the
|
||
implementation's behavior is controlled by the current value of
|
||
BULK_LQ_DATA_TIMEOUT. The default value is given elsewhere in this
|
||
document, and this value may be overridden by local configuration of
|
||
the operator.
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 23]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
If this situation is detected, the requestor SHOULD start a timer
|
||
using the current value of BULK_LQ_DATA_TIMEOUT. If that timer
|
||
expires, the requestor SHOULD terminate the connection.
|
||
|
||
A single Bulk Leasequery can, and usually will, result in a large
|
||
number of replies. The requestor MUST be prepared to receive more
|
||
than one reply with an xid matching a single DHCPBULKLEASEQUERY
|
||
message from a single DHCPv4 server. If the xid in the received
|
||
message does not match an outstanding DHCPBULKLEASEQUERY message, the
|
||
requestor MUST close the TCP connection.
|
||
|
||
If the requestor receives more data than it can process, it can
|
||
simply abort the connection and try again with a more specific
|
||
request. It can also simply read the TCP connection more slowly and
|
||
match the rate at which it can digest the information returned in the
|
||
Bulk Leasequery packets with the rate at which it reads those packets
|
||
from the TCP connection.
|
||
|
||
The DHCPv4 server MUST send a server-identifier option (option 54) in
|
||
the first response to any DHCPBULKLEASEQUERY message. The DHCPv4
|
||
server SHOULD NOT send server-identifier options in subsequent
|
||
responses to that DHCPBULKLEASEQUERY message. The requestor MUST
|
||
cache the server-identifier option from the first response and apply
|
||
it to any subsequent responses.
|
||
|
||
The response messages generated by a DHCPBULKLEASEQUERY request are:
|
||
|
||
o DHCPLEASEACTIVE
|
||
|
||
A Bulk Leasequery will generate DHCPLEASEACTIVE messages
|
||
containing binding data for bound IP addresses that match the
|
||
specified query criteria. The IP address that is bound to a
|
||
DHCPv4 client will appear in the ciaddr field of the
|
||
DHCPLEASEACTIVE message. The message may contain a non-zero
|
||
chaddr, htype, hlen, and possibly additional options.
|
||
|
||
o DHCPLEASEUNASSIGNED
|
||
|
||
Some queries will also generate DHCPLEASEUNASSIGNED messages for
|
||
IP addresses that match the query criteria. These messages
|
||
indicate that the IP address is managed by the DHCPv4 server but
|
||
is not currently bound to any DHCPv4 client. The IP address to
|
||
which this message refers will appear in the ciaddr field of the
|
||
DHCPLEASEUNASSIGNED message. A DHCPLEASEUNASSGINED message MAY
|
||
also contain information about the last DHCPv4 client that was
|
||
bound to this IP address. The message may contain a non-zero
|
||
chaddr, htype, hlen, and possibly additional options in this case.
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 24]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
o DHCPLEASEQUERYDONE
|
||
|
||
A response of DHCPLEASEQUERYDONE indicates that the server has
|
||
completed its response to the query and that no more messages will
|
||
be sent in response to the DHCPBULKLEASEQUERY. More details will
|
||
sometimes be available in the received status-code option in the
|
||
DHCPLEASEQUERYDONE message. If there is no status-code option in
|
||
the DHCPLEASEQUERYDONE message, then the query completed
|
||
successfully.
|
||
|
||
Note that a query that returned no data, that is, a
|
||
DHCPBULKLEASEQUERY request followed by a DHCPLEASEQUERYDONE
|
||
response, is considered a successful query in that no errors
|
||
occurred during the processing. It is not considered an error to
|
||
have no information to return to a DHCPBULKLEASEQUERY request.
|
||
|
||
The DHCPLEASEUNKNOWN message MUST NOT appear in a response to a Bulk
|
||
Leasequery.
|
||
|
||
The requestor MUST NOT assume that there is any inherent order in the
|
||
IP address binding information that is sent in response to a
|
||
DHCPBULKLEASEQUERY. While the base-time will tend to increase
|
||
monotonically (as it is the current time on the DHCPv4 server), the
|
||
actual time that any IP address binding information changed is
|
||
unrelated to the base-time.
|
||
|
||
The DHCPLEASEQUERYDONE message always ends a successful
|
||
DHCPBULKLEASEQUERY request and any unsuccessful DHCPBULKLEASEQUERY
|
||
requests not terminated by a dropped connection. After receiving a
|
||
DHCPLEASEQUERYDONE from a server, the requestor MAY close the TCP
|
||
connection to that server if no other DHCPBULKLEASEQUERY is
|
||
outstanding on that TCP connection.
|
||
|
||
The DHCPv4 Leasequery protocol [RFC4388] uses the associated-ip
|
||
option as an indicator that multiple bindings were present in
|
||
response to a single DHCPv4 client-based query. For Bulk Leasequery,
|
||
a separate message is returned for each binding, so the associated-ip
|
||
option is not used.
|
||
|
||
7.4. Processing Time Values in Leasequery Messages
|
||
|
||
Bulk Leasequery requests may be made to a DHCPv4 server whose
|
||
absolute time may not be synchronized with the local time of the
|
||
requestor. Thus, there are at least two time contexts in even the
|
||
simplest Bulk Leasequery response, and in the situation where
|
||
multiple DHCPv4 servers are queried, the situation becomes even more
|
||
complex.
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 25]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
If the requestor of a Bulk Leasequery is saving the data returned in
|
||
some form, it has a requirement to store a variety of time values;
|
||
some of these will be time in the context of the requestor, and some
|
||
will be time in the context of the DHCPv4 server.
|
||
|
||
When receiving a DHCPLEASEACTIVE or DHCPLEASEUNASSIGNED message from
|
||
the DHCPv4 server, the message will contain a base-time option. The
|
||
time contained in this base-time option is in the context of the
|
||
DHCPv4 server. As such, it is an ideal time to save and use as input
|
||
to a DHCPBULKLEASEQUERY in the query-start-time or query-end-time
|
||
options, should the requestor ever need to issue a DHCPBULKLEASEQUERY
|
||
message using those options as part of a later query, since those
|
||
options require a time in the context of the DHCPv4 server.
|
||
|
||
In addition to saving the base-time for possible future use in a
|
||
query-start-time or query-end-time option, the base-time is used as
|
||
part of the conversion of the other times in the Leasequery message
|
||
to values that are meaningful in the context of the requestor. These
|
||
other time values are specified as a offset (duration) from the base-
|
||
time value and not as an absolute time.
|
||
|
||
In systems whose clocks are synchronized, perhaps using NTP, the
|
||
clock skew will usually be zero.
|
||
|
||
7.5. Querying Multiple Servers
|
||
|
||
A Bulk Leasequery requestor MAY be configured to attempt to connect
|
||
to and query from multiple DHCPv4 servers in parallel. The DHCPv4
|
||
Leasequery specification [RFC4388] includes a discussion about
|
||
reconciling binding data received from multiple DHCPv4 servers.
|
||
|
||
In addition, the algorithm in Section 7.6 should be used.
|
||
|
||
7.6. Making Sense out of Multiple Responses concerning a Single IPv4
|
||
Address
|
||
|
||
Any requestor of an Bulk Leasequery MUST be prepared for multiple
|
||
responses to arrive for a particular IPv4 address from multiple
|
||
different DHCPv4 servers. The following algorithm SHOULD be used to
|
||
decide if the information just received is more up to date (i.e.,
|
||
better) than the best existing information. In the discussion below,
|
||
the information that is received from a DHCPv4 server about a
|
||
particular IPv4 address is termed a "record". The times used in the
|
||
algorithm below SHOULD have been converted into the requestor's
|
||
context, and the time comparisons SHOULD be performed in a manner
|
||
consistent with the information in Section 7.4.
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 26]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
o If both the existing and the new record contain client-last-
|
||
transaction-time information, the record with the later client-
|
||
last-transaction-time is considered better.
|
||
|
||
o If one of the records contains client-last-transaction-time
|
||
information and the other one doesn't, then compare the client-
|
||
last-transaction-time in the record that contains it against the
|
||
other record's start-time-of-state. The record with the later
|
||
time is considered better.
|
||
|
||
o If neither record contains client-last-transaction-time
|
||
information, compare their start-time-of-state information. The
|
||
record with the later start-time-of-state is considered better.
|
||
|
||
o If none of the comparisons above yield a clear answer as to which
|
||
record is later, then compare the value of the REMOTE flag from
|
||
the data-source option for each record. If the values of the
|
||
REMOTE flag are different between the two records, the record with
|
||
the REMOTE flag value of local is considered better.
|
||
|
||
The above algorithm does not necessarily determine which record is
|
||
better. In the event that the algorithm is inconclusive with regard
|
||
to a record that was just received by the requestor, the requestor
|
||
SHOULD use additional information in the two records to make a
|
||
determination as to which record is better.
|
||
|
||
7.7. Multiple Queries to a Single Server over One Connection
|
||
|
||
Bulk Leasequery requestors may need to make multiple queries in order
|
||
to recover binding information. A requestor MAY use a single
|
||
connection to issue multiple queries to a server willing to support
|
||
them. Each query MUST have a unique xid.
|
||
|
||
A server SHOULD allow configuration of the number of queries that can
|
||
be processed simultaneously over a single connection. A server
|
||
SHOULD read the number of queries it is configured to process
|
||
simultaneously and only read any subsequent queries as current
|
||
queries are processed.
|
||
|
||
A server that is processing multiple queries simultaneously MUST NOT
|
||
block sending replies on new queries until all replies for the
|
||
existing query are complete. Requestors need to be aware that
|
||
replies for multiple queries may be interleaved within the stream of
|
||
reply messages. Requestors that are not able to process interleaved
|
||
replies (based on xid) MUST NOT send more than one query over a
|
||
single connection prior to the completion of the previous query.
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 27]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
Requestors should be aware that servers are not required to process
|
||
more than one query over a connection at a time (the limiting case
|
||
for the configuration described above) and that servers are likely to
|
||
limit the rate at which they process queries from any one requestor.
|
||
|
||
7.7.1. Example
|
||
|
||
This example illustrates what a series of queries and responses might
|
||
look like. This is only an example -- there is no requirement that
|
||
this sequence must be followed or that requestors or servers must
|
||
support parallel queries.
|
||
|
||
In the example session, the client sends four queries after
|
||
establishing a connection. Query 1 returns no results; query 2
|
||
returns 3 messages, and the stream of replies concludes before the
|
||
client issues any new query. Query 3 and query 4 overlap, and the
|
||
server interleaves its replies to those two queries.
|
||
|
||
Requestor Server
|
||
--------- ------
|
||
DHCPBULKLEASEQUERY xid 1 ----->
|
||
<----- DHCPLEASEQUERYDONE xid 1
|
||
DHCPBULKLEASEQUERY xid 2 ----->
|
||
<----- DHCPLEASEACTIVE xid 2
|
||
<----- DHCPLEASEACTIVE xid 2
|
||
<----- DHCPLEASEACTIVE xid 2
|
||
<----- DHCPLEASEQUERYDONE xid 2
|
||
DHCPBULKLEASEQUERY xid 3 ----->
|
||
DHCPBULKLEASEQUERY xid 4 ----->
|
||
<----- DHCPLEASEACTIVE xid 4
|
||
<----- DHCPLEASEACTIVE xid 4
|
||
<----- DHCPLEASEACTIVE xid 3
|
||
<----- DHCPLEASEACTIVE xid 4
|
||
<----- DHCPLEASEUNASSIGNED xid 3
|
||
<----- DHCPLEASEACTIVE xid 4
|
||
<----- DHCPLEASEACTIVE xid 3
|
||
<----- DHCPLEASEQUERYDONE xid 3
|
||
<----- DHCPLEASEACTIVE xid 4
|
||
<----- DHCPLEASEQUERYDONE xid 4
|
||
|
||
7.8. Closing Connections
|
||
|
||
If a requestor has no additional queries to send, or doesn't know if
|
||
it has additional queries to send or not, then it SHOULD close the
|
||
connection after receiving the DHCPLEASEQUERYDONE message for the
|
||
last outstanding query that it sent.
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 28]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
The requestor SHOULD close connections in a graceful manner and not
|
||
an abort. The requestor SHOULD NOT assume that the manner in which
|
||
the DHCP server closed a connection carries any special meaning.
|
||
|
||
Typically, the requestor is the entity that will close the
|
||
connection, as servers will often wait with an open connection in
|
||
case the requestor has additional queries.
|
||
|
||
If a server closes a connection with an exception condition, the
|
||
requestor SHOULD consider as valid any completely received
|
||
intermediate results, and the requestor MAY retry the Bulk Leasequery
|
||
operation.
|
||
|
||
8. Server Behavior
|
||
|
||
8.1. Accepting Connections
|
||
|
||
Servers that implement DHCPv4 Bulk Leasequery listen for incoming TCP
|
||
connections. Port numbers are discussed in Section 6.3. Servers
|
||
MUST be able to limit the number of concurrently accepted and active
|
||
connections. The value BULK_LQ_MAX_CONNS SHOULD be the default;
|
||
implementations MAY permit the value to be configurable. Connections
|
||
SHOULD be accepted and, if the number of connections is over
|
||
BULK_LQ_MAX_CONNS, they SHOULD be closed immediately.
|
||
|
||
Servers MAY restrict Bulk Leasequery connections and
|
||
DHCPBULKLEASEQUERY messages to certain requestors. Connections not
|
||
from permitted requestors SHOULD be closed immediately to avoid
|
||
server connection resource exhaustion. Servers MAY restrict some
|
||
requestors to certain query types. Servers MAY reply to queries that
|
||
are not permitted with the DHCPLEASEQUERYDONE message with a status-
|
||
code option status of NotAllowed or MAY simply close the connection.
|
||
|
||
If the TCP connection becomes blocked while the server is accepting a
|
||
connection or reading a query, it SHOULD be prepared to terminate the
|
||
connection after a BULK_LQ_DATA_TIMEOUT. We make this recommendation
|
||
to allow servers to control the period of time they are willing to
|
||
wait before abandoning an inactive connection, independent of the TCP
|
||
implementations they may be using.
|
||
|
||
8.2. Replying to a Bulk Leasequery
|
||
|
||
If the connection becomes blocked while the server is attempting to
|
||
send reply messages, the server SHOULD be prepared to terminate the
|
||
TCP connection after a BULK_LQ_DATA_TIMEOUT.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 29]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
Every Bulk Leasequery request MUST be terminated by sending a final
|
||
DHCPLEASEQUERYDONE message if such a message can be sent. The
|
||
DHCPLEASEQUERYDONE message MUST have a status-code option status if
|
||
the termination was other than successful, and SHOULD NOT contain a
|
||
status-code option status if the termination was successful.
|
||
|
||
If the DHCPv4 server encounters an error during processing of the
|
||
DHCPBULKLEASEQUERY message, either during initial processing or later
|
||
during the message processing, it SHOULD send a DHCPLEASEQUERYDONE
|
||
containing a status-code option. It MAY close the connection after
|
||
this error is signaled, but that is not required.
|
||
|
||
If the server does not find any bindings satisfying a query, it MUST
|
||
send a DHCPLEASEQUERYDONE. It SHOULD NOT include a status-code
|
||
option with a Success status unless there is a useful string to
|
||
include in the status-code option. Otherwise, the server sends each
|
||
binding's data in a DHCPLEASEACTIVE or DHCPLEASEUNASSIGNED message.
|
||
|
||
The response to a DHCPBULKLEASEQUERY may involve examination of
|
||
multiple DHCPv4 IP address bindings maintained by the DHCPv4 server.
|
||
The Bulk Leasequery protocol does not require any ordering of the IP
|
||
addresses returned in DHCPLEASEACTIVE or DHCPLEASEUNASSIGNED
|
||
messages.
|
||
|
||
When responding to a DHCPBULKLEASEQUERY message, the DHCPv4 server
|
||
MUST NOT send more than one message for each applicable IP address,
|
||
even if the state of some of those IP addresses changes during the
|
||
processing of the message. Updates to such IP address state are
|
||
already handled by normal protocol processing, so no special effort
|
||
is needed here.
|
||
|
||
If the ciaddr, yiaddr, or siaddr is non-zero in a DHCPBULKLEASEQUERY
|
||
request, the request must be terminated immediately by a
|
||
DHCPLEASEQUERYDONE message with a status-code option status of
|
||
MalformedQuery.
|
||
|
||
Any DHCPBULKLEASEQUERY that has more than one of the following
|
||
primary query types specified MUST be terminated immediately by a
|
||
DHCPLEASEQUERYDONE message with a status-code option status code of
|
||
NotAllowed.
|
||
|
||
The allowable queries in a DHCPBULKLEASEQUERY message are processed
|
||
as follows. Note that the descriptions of the primary queries below
|
||
must be constrained by the actions of any of the three qualifiers
|
||
described subsequently as well.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 30]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
The following table discusses how to process the various queries.
|
||
For information on how to identify the query, see the information in
|
||
Section 7.2.
|
||
|
||
o Query by MAC address
|
||
|
||
Every IP address that has a current binding to a DHCPv4 client
|
||
matching the chaddr, htype, and hlen in the DHCPBULKLEASEQUERY
|
||
request MUST be returned in a DHCPLEASEACTIVE message.
|
||
|
||
o Query by Client-identifier
|
||
|
||
Every IP address that has a current binding to a DHCPv4 client
|
||
matching the Client-identifier option in the DHCPBULKLEASEQUERY
|
||
request MUST be returned in a DHCPLEASEACTIVE message.
|
||
|
||
o Query by Remote ID
|
||
|
||
Every IP address that has a current binding to a DHCPv4 client
|
||
matching the Remote ID sub-option of the relay-agent-information
|
||
option in the DHCPBULKLEASEQUERY request MUST be returned in a
|
||
DHCPLEASEACTIVE message.
|
||
|
||
o Query by Relay-ID
|
||
|
||
Every IP address that has a current binding to a DHCPv4 client
|
||
matching the Relay-ID sub-option of the relay-agent-information
|
||
option in the DHCPBULKLEASEQUERY request MUST be returned in a
|
||
DHCPLEASEACTIVE message.
|
||
|
||
o Query for All Configured IP Addresses
|
||
|
||
A Query for All Configured IP addresses is signaled by the absence
|
||
of any other primary query. That is, if there is no value in the
|
||
chaddr, hlen, htype, no Client-identifier option, and no Remote ID
|
||
sub-option or Relay-ID sub-option of the relay-agent-information
|
||
option, then the request is a query for information concerning all
|
||
configured IP addresses. In this case, every configured IP
|
||
address that has a current binding to a DHCPv4 client MUST be
|
||
returned in a DHCPLEASEACTIVE message. In addition, every
|
||
configured IP address that does not have a current binding to a
|
||
DHCPv4 client MUST be returned in a DHCPLEASEUNASSIGNED message.
|
||
|
||
In this form of query, each configured IP address MUST be returned
|
||
at most one time. In the absence of qualifiers restricting the
|
||
number of IP addresses returned, every configured IP address MUST
|
||
be returned exactly once.
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 31]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
There are three qualifiers that can be applied to any of the above
|
||
primary queries. These qualifiers can appear individually or
|
||
together in any combination, but only one of each can appear.
|
||
|
||
o Query Start Time
|
||
|
||
If a query-start-time option appears in the DHCPBULKLEASEQUERY
|
||
request, only IP address bindings that have changed on or after
|
||
the time specified in the query-start-time option should be
|
||
returned.
|
||
|
||
o Query End Time
|
||
|
||
If a query-end-time option appears in the DHCPBULKLEASEQUERY
|
||
request, only IP address bindings that have changed on or before
|
||
the time specified in the query-end-time option should be
|
||
returned.
|
||
|
||
o VPN-ID
|
||
|
||
If no VPN-ID option appears in the DHCPBULKLEASEQUERY, the default
|
||
(global) VPN is used to satisfy the query. A VPN-ID option
|
||
[RFC6607] value other than the wildcard value (254) allows the
|
||
requestor to specify a single VPN other than the default VPN. In
|
||
addition, the VPN-ID option has been extended as part of this
|
||
document to allow specification of a type 254, which indicates
|
||
that all configured VPNs be searched in order to satisfy the
|
||
primary query.
|
||
|
||
In all cases, if the information returned in a DHCPLEASEACTIVE or
|
||
DHCPLEASEUNASSIGNED message is for a VPN other than the default
|
||
(global) VPN, a VPN-ID option MUST appear in the packet.
|
||
|
||
The query-start-time and query-end-time qualifiers are used to
|
||
constrain the amount of data returned by a Bulk Leasequery request by
|
||
returning only IP addresses whose address bindings have changed in
|
||
some way during the time window specified by the query-start-time and
|
||
query-end-time.
|
||
|
||
A DHCPv4 server SHOULD consider an address binding to have changed
|
||
during a specified time window if either the client-last-
|
||
transaction-time or the start-time-of-state of the address binding
|
||
changed during that time window.
|
||
|
||
The DHCPv4 server MAY return address binding data in any order, as
|
||
long as binding information for any given IP address is not repeated.
|
||
When all binding data for a given DHCPBULKLEASEQUERY has been sent,
|
||
the DHCPv4 server MUST send a DHCPBULKLEASEQUERYDONE message.
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 32]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
8.3. Building a Single Reply for Bulk Leasequery
|
||
|
||
The DHCPv4 Leasequery specification [RFC4388] describes the initial
|
||
construction of DHCPLEASEQUERY reply messages using the
|
||
DHCPLEASEACTIVE and DHCPLEASEUNASSIGNED message types in Section
|
||
6.4.2. All of the reply messages in Bulk Leasequery are similar to
|
||
the reply messages for an IP address query. Message transmission and
|
||
framing for TCP are described in this document in Section 6.1.
|
||
|
||
[RFC2131] and [RFC4388] specify that every response message MUST
|
||
contain the server-identifier option. However, that option will be
|
||
the same for every response from a particular DHCPBULKLEASEQUERY
|
||
request. Thus, the DHCPv4 server MUST include the server-identifier
|
||
option in the first message sent in response to a DHCPBULKLEASEQUERY.
|
||
It SHOULD NOT include the server-identifier option in later messages.
|
||
|
||
The message type of DHCPLEASEACTIVE or DHCPLEASEUNASSIGNED is based
|
||
on the value of the dhcp-state option. If the dhcp-state option
|
||
value is ACTIVE, then the message type is DHCPLEASEACTIVE; otherwise,
|
||
the message type is DHCPLEASEUNASSIGNED.
|
||
|
||
In addition to the basic message construction described in [RFC4388],
|
||
the following guidelines exist:
|
||
|
||
1. If the dhcp-state option code appears in the dhcp-parameter-
|
||
request-list, the DHCPv4 server SHOULD include a dhcp-state
|
||
option whose value corresponds most closely to the state held by
|
||
the DHCPv4 server for the IP address associated with this reply.
|
||
If the state is ACTIVE and the message being returned is
|
||
DHCPLEASEACTIVE, then the DHCPv4 server MAY choose to not send
|
||
the dhcp-state option. The requestor SHOULD assume that any
|
||
DHCPLEASEACTIVE message arriving without a requested dhcp-state
|
||
option has a dhcp-state of ACTIVE.
|
||
|
||
2. If the base-time option code appears in the dhcp-parameter-
|
||
request-list, the DHCPv4 server MUST include a base-time option,
|
||
which is the current time in the DHCPv4 server's context and the
|
||
time from which the start-time-of-state, dhcp-lease-time, client-
|
||
last-transaction-time, and other duration-style times are based
|
||
upon.
|
||
|
||
3. If the start-time-of-state option code appears in the dhcp-
|
||
parameter-request-list, the DHCPv4 server MUST include a start-
|
||
time-of-state option whose value represents the time at which the
|
||
dhcp-state option's state became valid.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 33]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
4. If the dhcp-lease-time option code appears in the dhcp-
|
||
parameter-request-list, the DHCPv4 server MUST include a dhcp-
|
||
lease-time option for any state that has a timeout value
|
||
associated with it.
|
||
|
||
5. If the data-source option code appears in the dhcp-parameter-
|
||
request-list, the DHCPv4 server MUST include the data-source
|
||
option in any situation where any of the bits would be non-zero.
|
||
Thus, in the absence of the data-source option, the assumption is
|
||
that all of the flags are zero.
|
||
|
||
6. If the client-last-transaction-time option code appears in the
|
||
dhcp-parameter-request-list, the DHCPv4 server MUST include the
|
||
client-last-transaction-time option in any situation where the
|
||
information is available.
|
||
|
||
7. If there is a dhcp-parameter-request-list in the initial
|
||
DHCPBULKLEASEQUERY request, then it should be used for all of the
|
||
replies generated by that request. Some options can be sent from
|
||
a DHCPv4 client to the server or from the DHCPv4 server to a
|
||
DHCPv4 client. Option 125 is such an option. If the option code
|
||
for one of these options appears in the dhcp-parameter-request-
|
||
list, it SHOULD result in returning the value of the option sent
|
||
by the DHCPv4 client to the server if one exists.
|
||
|
||
Note that there may be other requirements for a reply to a
|
||
DHCPBULKLEASEQUERY request, as discussed in Section 8.2.
|
||
|
||
8.4. Multiple or Parallel Queries
|
||
|
||
As discussed in Section 7.3, requestors may want to use a connection
|
||
that has already been established when they need to make additional
|
||
queries. Servers SHOULD support reading and processing multiple
|
||
queries from a single connection and SHOULD allow configuration of
|
||
the number of simultaneous queries it may process. A server MUST NOT
|
||
read more query messages from a connection than it is prepared to
|
||
process simultaneously.
|
||
|
||
This SHOULD be a feature that is administratively controlled.
|
||
Servers SHOULD offer configuration that limits the number of
|
||
simultaneous queries permitted from any one requestor, in order to
|
||
control resource use if there are multiple requestors seeking
|
||
service.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 34]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
8.5. Closing Connections
|
||
|
||
The DHCPv4 server SHOULD close connections in a graceful manner and
|
||
not abort the connection. The DHCPv4 server SHOULD NOT assume that
|
||
the manner in which the requestor closed a connection carries any
|
||
special meaning.
|
||
|
||
Typically, the DHCPv4 server will only close the connection after
|
||
some form of an exception or a timeout on the connection.
|
||
|
||
Using a timer to detect when a connection is idle and then closing
|
||
that connection is designed to protect the DHCPv4 server from
|
||
consuming unnecessary resources.
|
||
|
||
The DHCPv4 server should start a timer for BULK_LQ_DATA_TIMEOUT
|
||
seconds for a particular connection after it sends a
|
||
DHCPLEASEQUERYDONE message over that connection if there is no
|
||
current query outstanding for that connection. It should restart
|
||
this timer if a query arrives over that connection. If the timer
|
||
expires, the DHCPv4 server should close the connection.
|
||
|
||
The server MUST close its end of the TCP connection if it encounters
|
||
an error sending data on the connection. The server MUST close its
|
||
end of the TCP connection if it finds that it has to abort an in-
|
||
process request. A server aborting an in-process request SHOULD
|
||
attempt to signal that to its requestors by using the QueryTerminated
|
||
status code in the status-code option in a DHCPLEASEQUERYDONE
|
||
message, including a message string indicating details of the reason
|
||
for the abort. If the connection is closed for any reason, all of
|
||
the data flows associated with any currently outstanding
|
||
DHCPBULKLEASEQUERY messages will be terminated.
|
||
|
||
If the server detects that the requesting end of the connection has
|
||
been closed, the server MUST close its end of the connection.
|
||
|
||
9. Security Considerations
|
||
|
||
The Security Considerations section of [RFC2131] details the general
|
||
threats to DHCPv4. The DHCPv4 Leasequery specification [RFC4388]
|
||
describes recommendations for the Leasequery protocol, especially
|
||
with regard to authentication of LEASEQUERY messages, mitigation of
|
||
packet-flooding DoS attacks, and restriction to trusted requestors.
|
||
|
||
The use of TCP introduces some additional concerns. Attacks that
|
||
attempt to exhaust the DHCPv4 server's available TCP connection
|
||
resources, such as SYN flooding attacks, can compromise the ability
|
||
of legitimate requestors to receive service. Malicious requestors
|
||
who succeed in establishing connections but who then send invalid
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 35]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
queries, partial queries, or no queries at all can also exhaust a
|
||
server's pool of available connections. We recommend that servers
|
||
offer configuration to limit the sources of incoming connections,
|
||
that they limit the number of accepted connections and the number of
|
||
in-process queries from any one connection, and that they limit the
|
||
period of time during which an idle connection will be left open.
|
||
|
||
There are two specific issues regarding Bulk Leasequery security that
|
||
deserve explicit mention. The first is preventing information that
|
||
Bulk Leasequery can provide from reaching clients who are not
|
||
authorized to receive such information. The second is ensuring that
|
||
authorized clients of the Bulk Leasequery capability receive accurate
|
||
information from the server (and that this information is not
|
||
disrupted in transit).
|
||
|
||
To prevent information leakage to unauthorized clients, servers
|
||
SHOULD restrict Bulk Leasequery connections and DHCPBULKLEASEQUERY
|
||
messages to certain requestors, either through explicit configuration
|
||
of the server itself or by employing external network elements to
|
||
provide such restrictions. In particular, the typical DHCPv4 client
|
||
SHOULD NOT be allowed to receive a response to a Bulk Leasequery
|
||
request, and some technique MUST exist to allow prevention of such
|
||
access in any environment where Bulk Leasequery is deployed.
|
||
|
||
Connections not from permitted requestors SHOULD be closed
|
||
immediately to avoid server connection resource exhaustion or
|
||
alternatively, simply not be allowed to reach the server at all.
|
||
Servers SHOULD have the capability to restrict certain requestors to
|
||
certain query types. Servers MAY reply to queries that are not
|
||
permitted with the DHCPLEASEQUERYDONE message with a status-code
|
||
option status of NotAllowed or MAY simply close the connection.
|
||
|
||
To prevent disruption and malicious corruption of Bulk Leasequery
|
||
data flows between the server and authorized clients, these data
|
||
flows SHOULD transit only secured networks. These data flows are
|
||
typically infrastructure oriented, and there is usually no reason to
|
||
have them flowing over networks where such attacks are likely. In
|
||
the rare cases where these data flows might need to be sent through
|
||
unsecured networks, they MUST be sent over connections secured
|
||
through means external to the DHCPv4/DHCPv6 server and its client(s)
|
||
(e.g., through VPNs).
|
||
|
||
Authentication for DHCP messages [RFC3118] MUST NOT be used to
|
||
attempt to secure transmission of the messages described in this
|
||
document. In particular, the message framing would not be protected
|
||
by using the mechanisms described in [RFC3118] (which was designed
|
||
only with UDP transport in mind).
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 36]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
10. IANA Considerations
|
||
|
||
IANA has assigned the following new DHCPv4 option codes from the
|
||
registry "BOOTP Vendor Extensions and DHCP Options" maintained at
|
||
http://www.iana.org/assignments/bootp-dhcp-parameters.
|
||
|
||
1. An option code of 151 for status-code.
|
||
|
||
2. An option code of 152 for base-time.
|
||
|
||
3. An option code of 153 for start-time-of-state.
|
||
|
||
4. An option code of 154 for query-start-time.
|
||
|
||
5. An option code of 155 for query-end-time.
|
||
|
||
6. An option code of 156 for dhcp-state.
|
||
|
||
7. An option code of 157 for data-source.
|
||
|
||
IANA has assigned the following new DHCP message types from the
|
||
registry "DHCP Message Type 53 Values" maintained at
|
||
http://www.iana.org/assignments/bootp-dhcp-parameters.
|
||
|
||
1. A dhcp-message-type of 14 for DHCPBULKLEASEQUERY.
|
||
|
||
2. A dhcp-message-type of 15 for DHCPLEASEQUERYDONE.
|
||
|
||
IANA has created a new registry on the same assignments page, titled
|
||
"DHCP State 156 Values" (where 156 corresponds to the assigned value
|
||
of the dhcp-state option above). This registry has the following
|
||
initial values:
|
||
|
||
State
|
||
-----
|
||
1 AVAILABLE
|
||
2 ACTIVE
|
||
3 EXPIRED
|
||
4 RELEASED
|
||
5 ABANDONED
|
||
6 RESET
|
||
7 REMOTE
|
||
8 TRANSITIONING
|
||
|
||
New values for this namespace may only be defined by IETF Review, as
|
||
described in [RFC5226].
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 37]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
IANA has created a new registry on the same assignments page, titled
|
||
"DHCP Status Code 151 Values" (where 151 corresponds to the assigned
|
||
value of the status-code option above). This registry has the
|
||
following initial values:
|
||
|
||
Name status-code
|
||
---- -----------
|
||
Success 000
|
||
UnspecFail 001
|
||
QueryTerminated 002
|
||
MalformedQuery 003
|
||
NotAllowed 004
|
||
|
||
New values for this namespace may only be defined by IETF Review, as
|
||
described in [RFC5226].
|
||
|
||
IANA has revised the registry "VSS Type Options" created by [RFC6607]
|
||
in the overall area "Dynamic Host Configuration Protocol (DHCP) and
|
||
Bootstrap Protocol (BOOTP) Parameters". It has been revised to
|
||
appear as follows. Note that the number range for "Unassigned" has
|
||
changed, and a new line for "All VPNs (wildcard)" was added.
|
||
|
||
Type VSS Information Format
|
||
------------------------------------------------------------
|
||
0 Network Virtual Terminal (NVT) ASCII VPN identifier
|
||
1 RFC 2685 VPN-ID
|
||
2-253 Unassigned
|
||
254 All VPNs (wildcard)
|
||
255 Global, default VPN
|
||
|
||
11. Acknowledgements
|
||
|
||
Significant text as well as important ideas were borrowed in whole or
|
||
in part from "DHCPv6 Bulk Leasequery" [RFC5460], written by Mark
|
||
Stapp. Further suggestions and improvements were made by
|
||
participants in the DHC Working Group, including Alfred Hoenes.
|
||
|
||
12. References
|
||
|
||
12.1. Normative References
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||
|
||
[RFC2131] Droms, R., "Dynamic Host Configuration Protocol", RFC
|
||
2131, March 1997.
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 38]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
[RFC2132] Alexander, S. and R. Droms, "DHCP Options and BOOTP Vendor
|
||
Extensions", RFC 2132, March 1997.
|
||
|
||
[RFC3046] Patrick, M., "DHCP Relay Agent Information Option", RFC
|
||
3046, January 2001.
|
||
|
||
[RFC3118] Droms, R., Ed., and W. Arbaugh, Ed., "Authentication for
|
||
DHCP Messages", RFC 3118, June 2001.
|
||
|
||
[RFC4388] Woundy, R. and K. Kinnear, "Dynamic Host Configuration
|
||
Protocol (DHCP) Leasequery", RFC 4388, February 2006.
|
||
|
||
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
|
||
IANA Considerations Section in RFCs", BCP 26, RFC 5226,
|
||
May 2008.
|
||
|
||
[RFC5735] Cotton, M. and L. Vegoda, "Special Use IPv4 Addresses",
|
||
BCP 153, RFC 5735, January 2010.
|
||
|
||
[RFC6607] Kinnear, K., Johnson, R., and M. Stapp, "Virtual Subnet
|
||
Selection Options for DHCPv4 and DHCPv6", RFC 6607, April
|
||
2012.
|
||
|
||
[RFC6925] Joshi, B., Desetti, R., and M. Stapp, "The DHCPv4 Relay
|
||
Agent Identifier Sub-Option", RFC 6925, April 2013.
|
||
|
||
12.2. Informative References
|
||
|
||
[RFC951] Croft, W. and J. Gilmore, "Bootstrap Protocol", RFC 951,
|
||
September 1985.
|
||
|
||
[RFC1542] Wimer, W., "Clarifications and Extensions for the
|
||
Bootstrap Protocol", RFC 1542, October 1993.
|
||
|
||
[RFC4614] Duke, M., Braden, R., Eddy, W., and E. Blanton, "A Roadmap
|
||
for Transmission Control Protocol (TCP) Specification
|
||
Documents", RFC 4614, September 2006.
|
||
|
||
[RFC5460] Stapp, M., "DHCPv6 Bulk Leasequery", RFC 5460, February
|
||
2009.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 39]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
Authors' Addresses
|
||
|
||
Kim Kinnear
|
||
Cisco Systems, Inc.
|
||
1414 Massachusetts Ave.
|
||
Boxborough, Massachusetts 01719
|
||
USA
|
||
|
||
Phone: (978) 936-0000
|
||
EMail: kkinnear@cisco.com
|
||
|
||
|
||
Mark Stapp
|
||
Cisco Systems, Inc.
|
||
1414 Massachusetts Ave.
|
||
Boxborough, Massachusetts 01719
|
||
USA
|
||
|
||
Phone: (978) 936-0000
|
||
EMail: mjs@cisco.com
|
||
|
||
|
||
D.T.V Ramakrishna Rao
|
||
Infosys Ltd.
|
||
44 Electronics City, Hosur Road
|
||
Bangalore 560 100
|
||
India
|
||
|
||
EMail: ramakrishnadtv@infosys.com
|
||
URI: http://www.infosys.com/
|
||
|
||
|
||
Bharat Joshi
|
||
Infosys Ltd.
|
||
44 Electronics City, Hosur Road
|
||
Bangalore 560 100
|
||
India
|
||
|
||
EMail: bharat_joshi@infosys.com
|
||
URI: http://www.infosys.com/
|
||
|
||
|
||
Neil Russell
|
||
Sea Street Technologies Inc.
|
||
|
||
EMail: neil.e.russell@gmail.com
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 40]
|
||
|
||
RFC 6926 DHCPv4 Bulk Leasequery April 2013
|
||
|
||
|
||
Pavan Kurapati
|
||
Juniper Networks
|
||
1194 N. Mathilda Ave.
|
||
Sunnyvale, CA 94089
|
||
USA
|
||
|
||
EMail: kurapati@juniper.net
|
||
URI: http://www.juniper.net/
|
||
|
||
|
||
Bernie Volz
|
||
Cisco Systems, Inc.
|
||
1414 Massachusetts Ave.
|
||
Boxborough, Massachusetts 01719
|
||
USA
|
||
|
||
Phone: (978) 936-0000
|
||
EMail: volz@cisco.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Kinnear, et al. Standards Track [Page 41]
|
||
|