[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dhcwg] Comments for draft-ietf-dhc-dhcpv4-leasequery-00.txt



There are a lot of editorial comments here, and a few comments having to do with protocol issues. I should note that we have had no independent readings of the document other than mine, and it received no support during the working group last call. As of now I believe the document requires revision before we do another working group last call, so there's no need to rush in now and state your support for it.

Thanks to Kim, Bernie, Neil and Mark for their hard work in merging the two previous bulk leasequery documents. I'm sorry my comments here are so voluminous, but I feel like they were worth the effort it took to do them, and I hope the authors take them as constructive and not nitpicky.



This:

The Dynamic Host Configuration Protocol for IPv4 (DHCPv4) has been extended with a Leasequery capability that allows a requestor to request information about DHCPv4 bindings. That mechanism is limited to queries for individual bindings. In some situations individual binding queries may not be efficient, or even possible. This document expands on the DHCPv4 Leasequery protocol to allow for bulk transfer of DHCPv4 address binding data via TCP.

Might be better worded this way:

The Dynamic Host Configuration Protocol for IPv4 (DHCPv4) Leasequery extension allows a requestor to request information about DHCPv4 bindings. This mechanism 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.

Page 3:

configured DHCPv4 servers (see Figure 1). In this process, some relay agents also glean the lease information sent by the server and maintain this locally. This information is used for a variety of purposes, including prevention of spoofing attempts from the DHCPv4 clients and to install routes. When a relay agent reboots, this information is frequently lost.

maybe change to this:

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.

Page 4:

Different query types are needed where a relay agent can query the server without waiting for the traffic from or for the clients, as well as a different transmission technique more conducive to the transmission of large quantities of data.

maybe change to this:

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.

Page 7:

For a DSLAM having multiple DSL ports, multiple IP addresses may be assigned using DHCPv4 to a single port and the number of DHCPv4 clients on a port may be unknown. The DSLAM may also not know the network portions of the IP addresses that are assigned to its DHCPv4 clients.

maybe change to this:

For a DSLAM having multiple DSL ports, multiple IP addresses may be assigned to DHCPv4 clients on a single port and the number of DHCPv4 clients on that port may be unknown. The DSLAM may also not know the network portions of the IP addresses that are assigned to its DHCPv4 clients.

Page 8:

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, packets need to be dropped until it gets the lease information from DHCPv4 server. If an Access Concentrator finishes the Leasequeries before it starts receiving data, then there is no need to drop legitimate packets. In this way, outage time may be reduced.

to:

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 packets for each client until it gets lease information from 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 packets. In this way, outage time may be reduced.

Page 15:

The start-time-of-state option allows the receiver to determine the time at which the IP address transitioned into its current state.

to:

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.

Page 16, section 7.2.5:

You have a lot of admonitions about what the query start time must be and must not be, which I don't think actually communicate what you want the implementation to do. You should just tell the implementation how to compute this value; otherwise I don't see how an interoperable implementation that follows the rules you've given here is possible.

maybe something like this:

7.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 requester MUST compute the query-start-time relative to a lease it has recovered from stable storage, and MUST specify that time in terms of the DHCPv4 server's clock at the time of the query recovered from stable storage.

For example, suppose the requester had previously received information on a lease from the server. At that time, the server had sent a base- time option containing a time of X. Subsequently the server sent a DHCPLEASEACTIVE message with a lease time of Y. If this is the last lease the requester remembers receiving, it would use X+Y for the query start time, indicating that it would like to receive all updates from that time onward.

The same comment applies to query-end-time.

In section 7.2.7, I don't really understand why the relay agent needs to know more than that the lease is still active, or is no longer active. This seems to be an extension on the functionality provided by DHCPLEASEQUERY, relating to failover, but (a) it seems unnecessary, (b) I have no idea what the DSLAM would do with it, and (c) because of that, it seems like it could result in interoperability problems as different implementors make different guesses as to how to handle it. You could save a lot of text by just taking this out. Same with data-source.

I can see where it might be helpful to use this for disambiguating in cases where one server reports a lease as free and another reports it as allocated, but it might be better to simply specify rules for when a server should claim to have knowledge about a lease - if a particular IP address is in its peer's pool, and is not known to have been allocated, perhaps that IP address should simply not be mentioned in a DHCPBULKLEASEQUERY reply. It would be entirely permissible and expected in some cases for that to happen.

Page 21:

Messages from the DHCPv4 server come as multiple responses to a single DHCPBULKLEASEQUERY message. Thus, each DHCPBULKLEASEQUERY request MUST have a xid (transaction-id) unique on the connection on which it is sent, and all of the messages which come as a response to it all contain the same xid as the request. It is the xid which allows the data-streams of two different DHCPBULKLEASEQUERY requests to be demultiplexed by the requestor.

to:

Messages from the DHCPv4 server come as multiple responses to a single DHCPBULKLEASEQUERY message. Thus, each DHCPBULKLEASEQUERY request MUST have a xid (transaction-id) unique on the connection on which it is sent. All of the messages which come as a response to that message will contain the same xid as the request. It is the xid which allows the data-streams of two different DHCPBULKLEASEQUERY requests to be demultiplexed by the requestor.

Page 21:

A requestor MAY send a DHCPBULKLEASEQUERY request to a DHCPv4 server and immediately close the transmission side of its TCP connection, and then read the resulting response messages from the DHCPv4 server. This is not required, and the usual approach is to leave both sides of the TCP connection up until at least the conclusion of the Bulk Leasequery.

You don't need to say this; I would take it out.

Page 23:

Both of the query-start-time and query-end-time options (if they appear) MUST be in the time context of the DHCPv4 server to which the Bulk Leasequery is directed. In the absence of information to the contrary, the requestor SHOULD assume that the time context on the DHCPv4 server is identical to the time context on the requestor.

In the event that previous operations have determined that the time context on the DHCPv4 server to which the Bulk Leasequery is addressed differs from the time context of the requestor, the time context of the DHCPv4 server MUST be used. 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.

You really haven't told us what to do here. I don't see how interoperability can be achieved. See my comments on these options earlier. I would just delete this text, since you already have text explaining this earlier in the document.

Page 23:

If the TCP connection becomes blocked or stops being writeable while the requestor is sending its query, the requestor SHOULD be prepared to terminate the connection after BULK_LQ_DATA_TIMEOUT. We make this recommendation to allow requestors to control the period of time they are willing to wait before abandoning a connection, independent of notifications from the TCP implementations they may be using.

How does an implementation "prepare to terminate" the connection? I think what you mean is something like this:

The TCP connection may become blocked or stop being writeable while the requestor is sending its query. Should this happen, the implementation's behavior is controlled by two variables: BULK_LQ_DATA_TIMEOUT, and whatever configuration the operator may have provided. When this situation is detected, the requester SHOULD set a timer using the lesser of BULK_LQ_DATA_TIMEOUT or the operator- configured timeout. If that timer expires, the requester SHOULD terminate the connection.

This same comment applies to section 8.3, and the prescribed antidote is the same.

Also on Page 23:

If a response message does not contain a DHCPv4 server-identifier option (option 54), then the server-identifier option from the previous message should be used. Thus, the DHCPv4 server MUST send the server-identifier option in the first response message, and MAY send it in subsequent response message for the same request.

Why aren't you saying this?

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 requester MUST cache the server-identifier option from the first response and apply it to any subsequent responses.

(In a large response dataset, the space consumed by repetition of the same server-identifier option could be substantial. Either that, or make sending the option mandatory in every message. If you have to have this code in the requester, might as well take advantage of it.)

Section 8.4 is unimplementable as written. I'm sure it describes an implementation that someone has done, but it provides no concrete guidance or math for the implementor. As such, it should either be deleted, or made explicit.

Regarding section 8.6, as I've said previously in this commentary, I think it would be better to specify the client behavior in such a way that the conflicts proposed in this section simply do not happen. This section is not specific enough to foster interoperability.

Page 28:

A server MAY process more than one query at a time. A server that does not support more than one query at a time on a single connection MUST return a DHCPLEASEQUERYDONE message containing a dhcp-message option with a status-code of NotAllowed to the unsupported queries. Alternatively, a server that does not support more than one query at a time on a single connection MAY chose to simply read one query and only read any subsequent queries after processing of the current query is complete.

There are two problems with this paragraph. First, you have given implementors an option where no option is necessary. Just specify one or the other. Second, if you specify that the server needn't read each message from the connection until it's ready to process it, then you need to change the last paragraph in section 8.2, since a conforming implementation could easily set up a situation where the connection appears to be blocked, which would trigger the requester to drop the connection, even though nothing was wrong.

Section 8.8:

Either the requestor or DHCPv4 server MAY close the TCP connection at any time. The requestor MAY choose to retain the connection if it intends to issue additional queries or if other queries are currently using the connection. Note that this requestor behavior does not guarantee that the connection will be available for additional queries: the server might decide to close the connection based on its own configuration.

This seems broken. It's easy to imagine situations where one side or the other closes the connection in compliance with this statement and triggers a timeout on the other end which causes legitimate data to be discarded. I think you need to specify a non-error connection termination protocol to make this work (and you should - otherwise nobody's allowed to close the connection, which would be worse).

In section 9.1, you seem to be specifying an authorization model based on the IP source-address of the requestor. You do not mention this in the security considerations section. This is likely to trigger pushback from the IESG.

You use the same "should be prepared" language in these sections that you used in section 8.2 and 8.3. You need to specify exactly what the server does, not just say "should be prepared." The language I suggested for section 8.2, with appropriate modifications, would be acceptable here as well, at least to me.

Page 30, 31:

A Bulk Leasequery response MUST contain no more than one message for each IP address configured in the DHCPv4 server. In addition, a Bulk Leasequery may well take significant time between the beginning and end of the processing of all of the messages required to satisfy the Bulk Leasequery query. During this time, the state of some of the IP addresses sent early in the response may change prior to the completion of the entire response to the Bulk Leasequery. This is normal and expected -- there is no requirement for the entire response to a Bulk Leasequery to represent an instantaneous snapshot of the state of the IP address bindings of a DHCPv4 server. Quite the contrary -- as the cursor moves through the IP addresses in whatever order is convenient to the DHCPv4 server, the state of IP addresses already examined can change and a DHCPv4 server MUST NOT try to examine IP addresses already scanned in an attempt to "keep up" with the ongoing state changes of all of the IP addresses. To do so would make it difficult to meet the requirement to send only one message per IP address in response to a Bulk Leasequery and would also make it difficult to know when to finish the Bulk Leasequery.

to:

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. (I hope!)

Page 33:

A DHCPv4 server MAY always compare the address binding information for an IP address against a time window if it follows the following guidelines. If there is no query-start-time, then the DHCPv4 server MUST assume the query-start-time is equivalent to a time prior to any time that resides in any IP address binding. If there is no query- end- time, the DHCPv4 server MUST assume that the query-end-time is equivalent to a time that is later than any time that resides in any IP address binding.

You can't use "MAY" like this. This text is an implementation suggestion; I would suggest that you state this simply in terms of requirements, without talking about how those requirements might be implemented.

Also page 33:

Even if the query-start-time or query-end-time option value is being used to limit the amount of data flow from the DHCPv4 server to the requestor, there is no requirement placed on the DHCPv4 server to return address binding data in any order and certainly not in any order based on time.

When the DHCPv4 server has no additional information to send to the requestor, it will send a DHCPLEASEQUERYDONE message.

to:

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.

Page 34:

[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 MAY include the server-identifier in later messages as well, but there is no requirement for it to do so.

I strongly suggest that you change the MAY here to a SHOULD NOT. Also, note that you are repeating something you specified earlier, so it would be good to delete one or the other paragraph.

Also on page 34:

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.

Once again I suggest you get rid of the dhcp-state message and simply say what should happen here for IP addresses that are managed by failover and those that are managed by a single server.

Specifically, any IP address that is in the FREE state on the primary is DHCPLEASEUNASSIGNED. Any IP address that is in the BACKUP state on the primary is not reported on at all. Any IP address that is in the FREE state on the secondary is not reported on at all. Any IP address that is in the BACKUP state on the secondary is DHCPLEASEUNASSIGNED. Likewise for all the other permutations; I think that in any of the states where the failover peer would renew the lease, it's active, and in states where it wouldn't renew the lease, it's either unassigned, or shouldn't be mentioned.

Also, in point 4, you mention a grace period on the expired state, but as far as I know no such thing exists.

Page 35:

As discussed in Section 8.3, requestors may want to leverage an existing connection if they need to make multiple queries. Servers MAY support reading and processing multiple queries from a single connection. A server MUST NOT read more query messages from a connection than it is prepared to process simultaneously.

to:

As discussed in Section 8.3, requestors may want to use a connection that has already been established when they need to make additional queries. Servers MAY support reading and processing multiple queries from a single connection. A server MUST NOT read more query messages from a connection than it is prepared to process simultaneously.

And:

DHCPv4 server implementations may offer administrative control to enable or disable this feature. DHCPv4 server implementations that are able to process queries in parallel should offer be configurable to limit the number of simultaneous queries permitted from any one requester.

[And in total?]

Page 36:

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 dhcp-message option in a DHCPLEASEQUERYDONE message, including a message string indicating details of the reason for the abort. If the server detects that the requesting end of the connection has been closed, the server MUST close its end of the connection after it has finished processing any outstanding requests.

This is in conflict with section 8.8, which says the server can drop the connection at any time. Also, why should the server finish processing outstanding requests if the remote end of the connection has closed? Shouldn't it just drop the connection immediately?

Section 10:

As I mentioned earlier, the only authorization model for this protocol is based on the requestor's IP address, and there is no authentication. At a minimum this should be mentioned in the security considerations section.

I think the appendix belongs in a requirements document, or on the mailing list, not in the draft.