Re: [dhcwg] WGLC on draft-ietf-dhc-pd-exclude-01

Stephen Jacob <Stephen.Jacob@nominum.com> Wed, 11 May 2011 18:42 UTC

Return-Path: <Stephen.Jacob@nominum.com>
X-Original-To: dhcwg@ietfa.amsl.com
Delivered-To: dhcwg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C89F4E0693 for <dhcwg@ietfa.amsl.com>; Wed, 11 May 2011 11:42:03 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.599
X-Spam-Level:
X-Spam-Status: No, score=-6.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([64.170.98.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0MUnfuwNFFy7 for <dhcwg@ietfa.amsl.com>; Wed, 11 May 2011 11:42:02 -0700 (PDT)
Received: from exprod7og118.obsmtp.com (exprod7og118.obsmtp.com [64.18.2.8]) by ietfa.amsl.com (Postfix) with ESMTP id 81793E066E for <dhcwg@ietf.org>; Wed, 11 May 2011 11:42:02 -0700 (PDT)
Received: from shell-too.nominum.com ([64.89.228.229]) (using TLSv1) by exprod7ob118.postini.com ([64.18.6.12]) with SMTP ID DSNKTcrYeZskB+C+tz9zWwIGW+hNCuNkYN45@postini.com; Wed, 11 May 2011 11:42:02 PDT
Received: by shell-too.nominum.com (Postfix, from userid 11053) id 38D4F1B84A2; Wed, 11 May 2011 11:41:58 -0700 (PDT)
Date: Wed, 11 May 2011 11:41:58 -0700
From: Stephen Jacob <Stephen.Jacob@nominum.com>
To: Tomasz Mrugalski <tomasz.mrugalski@gmail.com>
Message-ID: <20110511184158.GB4138@shell-too.nominum.com>
Mail-Followup-To: Tomasz Mrugalski <tomasz.mrugalski@gmail.com>, dhcwg@ietf.org
References: <94200415-3C9D-4C61-88AB-42A6D0E11649@nominum.com> <4DC864D1.8010101@gmail.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <4DC864D1.8010101@gmail.com>
User-Agent: Mutt/1.4.2.2i
X-URI: http://www.nominum.com/
Organization: Nominum, Inc.
Cc: dhcwg@ietf.org
Subject: Re: [dhcwg] WGLC on draft-ietf-dhc-pd-exclude-01
X-BeenThere: dhcwg@ietf.org
X-Mailman-Version: 2.1.12
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: Wed, 11 May 2011 18:42:03 -0000

On Tue, May 10, 2011 at 12:04:01AM +0200, Tomasz Mrugalski wrote:
> 3. Section 4.2
> "The OPTION_PD_EXCLUDE option MUST be located before the possible Status
> Code option in the IAprefix-options field." Why forcing to use specific
> order? DHCPv6 does not impose any restrictions regarding sequence, in
> which options appear in a message or within other options. There's good
> reason for that - implementations may keep the options in structures
> other than simple lists or vector, like hash tables. Enforcing any
> specific order would be troublesome in that case. I propose to remove
> this sentence.

I very much agree with Tomek. I would prefer that no draft impose option
ordering constraints.

It sounds like Ole agrees, which is great. :)

> 5. PD_EXCLUDE option is going to be delivered in IAPREFIX that is
> located in IA_PD (not in the message options field), but draft says that
> requesting router should request PD_EXCLUDE in ORO placed in message
> options field. Wouldn't it be more appropriate to put second instance of
> ORO (with PD_EXCLUDE code) in IA_PD sent by requesting router? You may
> consider reading draft-mrugalski-dhc-dhcpv6-suboptions and follow its
> suggestions, if you that they are reasonable.

That would seem to make more sense.

It sounds like Ole agrees with this too, so I trust it'll be worked
out. :)

I have only one additional comment on this draft. It is not critical,
and I know I'm commenting on this awfully late in the game...

It is not wrong as-is, but I think it is a bit strange/confusing that
OPTION_PD_EXCLUDE (in 4.2. Prefix Exclude Option) is defined in such
a way that the "IPv6 subnet ID" is a suffix appended to the
'OPTION_IAPREFIX prefix-length', except maybe not ust a suffix because
it has to be octet-aligned so it might include some of the bits of
'OPTION_IAPREFIX prefix-length'.

I misunderstood the definition in section 4.2 until I read the
example at the end.

It also seems like a strange way to define option data. Does anything
else use this way of declaring a sub-prefix?

It would seem to me to have two pros:

	1) It saves some number of bytes of option space.
	2) It ensures that the OPTION_PD_EXCLUDE prefix is contained
	   in the OPTION_IAPREFIX prefix[*].

	   [*] except if octet-alignment requires replication of
	       the final few bits of the OPTION_IAPREFIX prefix,
	       in which case those could be incorrectly included
	       as different bit values, presumably, so it doesn't
	       really even guarantee #2, does it?

It would seem to have 2 cons:

	1) It is hard to understand.
	2) I think implementors may implement it incorrectly, causing
	   interoperability issues.

Given that pro #2 is a weak assurance and pro #1 only means saving a
few bytes (how much does that really matter? I would say not at all),
I think the cons significantly outweigh the pros.

I would suggest that OPTION_PD_EXCLUDE ought to include the full
prefix to exclude.

A downside is that clients (Requesting Routers) will need to validate
the value they receive to ensure that OPTION_PD_EXCLUDE is a subset
of OPTION_IAPREFIX (but they already ought to do some validation due
to the issue I raised in the subscript of pro #2, and that validation
is harder to get right than a simple "is this prefix contained in
this other prefix" comparison; something that one can probably do
with existing library code).

If a client fails to validate, that's its problem, and it will
probably be ok anyway if we make it a MUST for the server that
OPTION_PD_EXCLUDE be a subset of OPTION_IAPREFIX.

For the server implementor, the up-side is not having to write custom
code to handle this special kind of field type, and it means we don't
create an option whose value is defined based on the value of another
option (a situation which I also dislike).

Regards,
Stephen
-- 
 Stephen Jacob | Stephen.Jacob@nominum.com | +1 650 381 6051
 Nominum, Inc. |  http://www.nominum.com/  | +1 650 381 6000