Re: [dhcwg] I-D Action: draft-ietf-dhc-dhcpv6-stateful-issues-06.txt

"Bernie Volz (volz)" <volz@cisco.com> Mon, 07 July 2014 19:18 UTC

Return-Path: <volz@cisco.com>
X-Original-To: dhcwg@ietfa.amsl.com
Delivered-To: dhcwg@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 4D74A1B285D for <dhcwg@ietfa.amsl.com>; Mon, 7 Jul 2014 12:18:34 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -14.852
X-Spam-Level:
X-Spam-Status: No, score=-14.852 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, MIME_8BIT_HEADER=0.3, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-0.651, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id rpIE4Ue4uML8 for <dhcwg@ietfa.amsl.com>; Mon, 7 Jul 2014 12:18:32 -0700 (PDT)
Received: from rcdn-iport-8.cisco.com (rcdn-iport-8.cisco.com [173.37.86.79]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 95DEE1A0357 for <dhcwg@ietf.org>; Mon, 7 Jul 2014 12:18:32 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=7378; q=dns/txt; s=iport; t=1404760712; x=1405970312; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=mp4FcyFRiTUEQnVdRqjEgIVezUvLzT8ro7m2Kc29oEA=; b=mNohjPgpJVR8Z6deSLIWjbZsxmq2suvHVbeqMn2YKSau/yJF7OCe2MLj d7FjtMYtvO9fR9QMeK4BEg+TNZ0vZasn5JuaWUJICaHJrNd22/tmqVUtl G2QhTRNfFGYYf79FY7bKdcBcOMMd2nuyMB4N4bzd1WvcSJTmGve/Qbjiv A=;
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: AgcFAE/xulOtJV2d/2dsb2JhbABZgw6BLIJvw00BGYECFnWEAwEBAQMBIxFFBQcEAgEIEQQBAQMCBh0DAgICHxEUAQgIAgQOBQgTiBMDCQiwCZNFDYV9F4Esi06BWh0WGwcGgnE2gRYBBJYWgmCPeIYUg0OCMA
X-IronPort-AV: E=Sophos;i="5.01,620,1400025600"; d="scan'208";a="338291303"
Received: from rcdn-core-6.cisco.com ([173.37.93.157]) by rcdn-iport-8.cisco.com with ESMTP; 07 Jul 2014 19:18:31 +0000
Received: from xhc-rcd-x08.cisco.com (xhc-rcd-x08.cisco.com [173.37.183.82]) by rcdn-core-6.cisco.com (8.14.5/8.14.5) with ESMTP id s67JIVHW030584 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL); Mon, 7 Jul 2014 19:18:31 GMT
Received: from xmb-rcd-x04.cisco.com ([169.254.8.176]) by xhc-rcd-x08.cisco.com ([173.37.183.82]) with mapi id 14.03.0123.003; Mon, 7 Jul 2014 14:18:31 -0500
From: "Bernie Volz (volz)" <volz@cisco.com>
To: 神明達哉 <jinmei@wide.ad.jp>
Thread-Topic: [dhcwg] I-D Action: draft-ietf-dhc-dhcpv6-stateful-issues-06.txt
Thread-Index: AQHPlIEus6CA5H78HkuHLmw+Sv8Eh5uJ3xfAgAUDK4D//8m40IAGogoA//+yrVA=
Date: Mon, 07 Jul 2014 19:18:31 +0000
Message-ID: <489D13FBFA9B3E41812EA89F188F018E1B5EA937@xmb-rcd-x04.cisco.com>
References: <20140630163351.4191.69719.idtracker@ietfa.amsl.com> <489D13FBFA9B3E41812EA89F188F018E1B5E03D1@xmb-rcd-x04.cisco.com> <CAJE_bqej-pOHbdfDRwTTUJiLUZXjn-Q3GJ3ZdxG6HvEi35ojDA@mail.gmail.com> <489D13FBFA9B3E41812EA89F188F018E1B5E859E@xmb-rcd-x04.cisco.com> <CAJE_bqeWLVsU6Wc+YDM_9XV-QmK_a3NnOnJEUTEf7ntUOETFOA@mail.gmail.com>
In-Reply-To: <CAJE_bqeWLVsU6Wc+YDM_9XV-QmK_a3NnOnJEUTEf7ntUOETFOA@mail.gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [10.86.243.80]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Archived-At: http://mailarchive.ietf.org/arch/msg/dhcwg/xkzvjaWpjpiMWEkMGEaymuqTPJ8
Cc: "dhcwg@ietf.org" <dhcwg@ietf.org>
Subject: Re: [dhcwg] I-D Action: draft-ietf-dhc-dhcpv6-stateful-issues-06.txt
X-BeenThere: dhcwg@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: <dhcwg.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dhcwg>, <mailto:dhcwg-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/dhcwg/>
List-Post: <mailto:dhcwg@ietf.org>
List-Help: <mailto:dhcwg-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dhcwg>, <mailto:dhcwg-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 07 Jul 2014 19:18:34 -0000

This is indeed an interesting case to consider.

First, my own feeling is that at least for a Renew, if the server has no record of the client at all [on that particular link], I think it should definitely return NoBinding. The intent with the being able to add a 'new' binding to an existing set in the Renew was not to allow a client to essentially 'start at Renew'. I didn't check the latest Stateful Issues text but if we don't have that there, we do need to clean this up to add it. This would I think solve this issue for Renew. Note also that for any addresses/prefixes that the client claims it is using (i.e., by providing them in the Renew) but the server does not have, the server must either (1) assign the address/prefix if there is no conflict or (2) return 0 lifetimes if there is a conflict.

Rebind in this particular case is more difficult, since the server doesn't know whether the bindings are 'existing' or 'additional' (except perhaps whether any addresses/prefixes are present in the Rebind). But in this case we're not really in trouble at all since the server SHOULD be assigning the client any existing addresses or prefixes in the Rebind request - unless it is unable to do so because it has conflicting information. The NoAddrAvail/NoPrefixAvail is only in the case where the binding has no leases and the server is unable to allocate ones.

The important point here is that Rebind is always assumed to assign the addresses/prefixes the client claims it is currently using (of course if the server has conflicting information, it can return the addresses/prefixes with 0 lifetimes).

The points that are important here:
- For a Solicit and Request, the server assumes that the client is NOT presently using any of the addresses/prefixes specified. Therefore, it is much freer to ignore these (i.e., treat them as very "mild" hints).
- For a Renew and Rebind, the server MUST assume that the client is presently using any of the addresses/prefixes specified (excepting a hint with 0::0). The server MUST either allocate the address/prefix (if not already existing) or must return 0 lifetimes to indicate to the client to stop using the addresses/prefixes.

Note also that it is important for a client to send its current addresses/prefixes when sending a Renew/Rebind.


So, I don't think there are any issue with this case if on theRenew/Rebind the server sends the NoAddrsAvail/NoPrefixAvail for a 'new' binding that has no 'in-use' address/prefix present by the client.


Note: This situation is a bit tricky anyway since there is no way for the server to know what addresses/prefixes are in use. And the server may well assign a client that sends a Solicit (/Request) an address or prefix that is already in use by another client, before that other client sends a Renew/Rebind. (This is one of the reasons that Failover has worked out well in DHCPv4 - since it provides another place for the data to be stored to avoid loss of state). I guess one "solution" might be to not allow new addresses/prefixes to be assigned for whatever lifetime would assure at lease a Renew (i.e., >50% of the lease time). But that is not nice to new clients either :).

- Bernie

-----Original Message-----
From: jinmei.tatuya@gmail.com [mailto:jinmei.tatuya@gmail.com] On Behalf Of ????
Sent: Monday, July 07, 2014 2:31 PM
To: Bernie Volz (volz)
Cc: dhcwg@ietf.org
Subject: Re: [dhcwg] I-D Action: draft-ietf-dhc-dhcpv6-stateful-issues-06.txt

At Thu, 3 Jul 2014 18:26:10 +0000,
"Bernie Volz (volz)" <volz@cisco.com> wrote:

> Yes, that is the one issue with changing the status codes - it breaks backwards compatibility. However, we already have changes that technically break this (such as the Advertise status codes). The risk for these changes should be fairly small as (1) clients are hopefully robust enough that they will handle unknown/unexpected status codes and either 'ignore' the binding (since it contains no addresses/prefixes) or restart at Solicit and (2) these are edge cases that may not have been well tested in all cases and are likely to occur rarely (i.e., mostly impact Rebinds when 'new' bindings appear which are probably not that common).

I've thought this original behavior of RFC3315 intended recovery from a server crash.  If a server crashes due to unexpected power cycle, a serious implementation bug, etc, and forgets all bindings it assigned before the crash, then the server will eventually receive a Renew (or
Rebind) from clients that it previously served but "the server cannot find a client entry" (quoting 18.2.3 of RFC3315).  With the original behavior, the server returns NoBindng, and the client will react to it by sending a Request.  The server would probably be able to create the same binding(s) for the Request as it previously did, in which case the server crash is almost an opaque event for the client('s user).

If the server returns NoAddrsAvail, and the client behaves similar to WIDE DHCPv6, however, the client will just ignore the Renew (and subsequently Rebind), and end up with using the "dangling" binding for much longer, increasing the risk of letting that binding be assigned to some other client.

A server crash would be a rare event, but shouldn't be that rare that we cannot ignore IMO.  So I'd be more careful if we change how to handle such cases.

--
JINMEI, Tatuya