Re: [Idr] I-D Action: draft-ietf-idr-error-handling-03.txt

"Chris Hall" <chris.hall@highwayman.com> Thu, 06 December 2012 13:21 UTC

Return-Path: <chris.hall@highwayman.com>
X-Original-To: idr@ietfa.amsl.com
Delivered-To: idr@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B38D521F853A for <idr@ietfa.amsl.com>; Thu, 6 Dec 2012 05:21:41 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.539
X-Spam-Level:
X-Spam-Status: No, score=-0.539 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, HELO_MISMATCH_UK=1.749, HOST_MISMATCH_NET=0.311]
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 BukLNRtTfPQQ for <idr@ietfa.amsl.com>; Thu, 6 Dec 2012 05:21:41 -0800 (PST)
Received: from smtp.demon.co.uk (mdfmta009.mxout.tbr.inty.net [91.221.168.50]) by ietfa.amsl.com (Postfix) with ESMTP id EB7C921F8543 for <idr@ietf.org>; Thu, 6 Dec 2012 05:21:40 -0800 (PST)
Received: from mdfmta009.tbr.inty.net (unknown [127.0.0.1]) by mdfmta009.tbr.inty.net (Postfix) with ESMTP id 5CA99384084; Thu, 6 Dec 2012 13:21:39 +0000 (GMT)
Received: from mdfmta009.tbr.inty.net (unknown [127.0.0.1]) by mdfmta009.tbr.inty.net (Postfix) with ESMTP id 3852E384080; Thu, 6 Dec 2012 13:21:39 +0000 (GMT)
Received: from hestia.halldom.com (unknown [80.177.246.130]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mdfmta009.tbr.inty.net (Postfix) with ESMTP; Thu, 6 Dec 2012 13:21:39 +0000 (GMT)
Received: from hyperion.halldom.com ([80.177.246.170] helo=HYPERION) by hestia.halldom.com with esmtpsa (TLSv1:AES128-SHA:128) (Exim 4.76) (envelope-from <chris.hall@highwayman.com>) id 1TgbOU-0005ao-DR; Thu, 06 Dec 2012 13:21:38 +0000
From: Chris Hall <chris.hall@highwayman.com>
To: idr@ietf.org
References: <20121121191321.6164.6887.idtracker@ietfa.amsl.com> <50AD2986.90705@cisco.com>
In-Reply-To: <50AD2986.90705@cisco.com>
Date: Thu, 06 Dec 2012 13:21:33 -0000
Organization: Highwayman
Message-ID: <058b01cdd3b4$9f5193b0$ddf4bb10$@highwayman.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
X-Mailer: Microsoft Outlook 14.0
thread-index: AQHwJ9rDNhpCAk7gfRWZlMlTSLUu6QFwpw6Kl7t2PBA=
Content-Language: en-gb
X-MDF-HostID: 4
Subject: Re: [Idr] I-D Action: draft-ietf-idr-error-handling-03.txt
X-BeenThere: idr@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Inter-Domain Routing <idr.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/idr>, <mailto:idr-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/idr>
List-Post: <mailto:idr@ietf.org>
List-Help: <mailto:idr-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/idr>, <mailto:idr-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 06 Dec 2012 13:21:41 -0000

I've been trying to adjust the error handling in Quagga bgpd to follow
this draft, without success.

If an update message arrives and there is a problem with one or more
significant attributes, then if (and only if) *all* the NLRI in the
update can be identified, then treat-as-withdraw is an excellent
alternative to crashing the entire session.

This much is clear, and clearly a step forward.  If only it were
possible to "parse" attributes individually....

....but since it is not: when faced with a broken set of attributes, I
do not see how the receiver can be certain that it has correctly and
completely identified all NLRI.

RFC4271 allows for an update to contain any and all combinations of
vanilla IPv4 Unicast NLRI (reachable and/or unreachable) and MP NLRI
(also reachable and/or unreachable).  Given that one broken attribute
may obscure following ones, the receiver can be certain that it has
correctly and completely identified all NLRI if, and only if, it has
extracted *both* a complete MP_REACH_NLRI *and* a complete
MP_UNREACH_NLRI attribute.  Otherwise, the receiver must, in effect,
prove a negative: that one or both attributes were not sent.

The draft acknowledges the issue, and requires that "the MP_REACH_NLRI
or MP_UNREACH_NLRI attribute (if present) SHALL be encoded as the very
first path attribute" (should that be "and/or" rather than "or" ?).
How is the receiver to know that the sender is following this new rule
?  Can it simply assume that to be the case ?  Apparently the answers
are: it cannot and may not, in that order -- since the draft also says
"... MUST still be prepared to receive these fields in any position".

If the receiver cannot know (or simply assume) that the new rule is
being followed, then given a broken set of attributes:

  * if there are vanilla IPv4 NLRI:

     - can it be assumed that there are no MP NLRI
       if none can be extracted ?

  * if there are no vanilla IPv4 NLRI:

     - can it be assumed that if MP_REACH_NLRI can be
       extracted then there will be no MP_UNREACH_NLRI ?

     - if the only attribute is MP_UNREACH_NLRI then
       everything is fine.

       But if any other attribute is present, if no 
       MP_REACH_NLRI can be extracted, should the
       receiver assume that one is missing (hidden by
       a broken attribute) ?

       The answer to that appears, currently, to be yes.
       But that excludes, forever, the ability to attach
       extra information to a withdraw update.

     - if neither MP_REACH_NLRI nor MP_UNREACH_NLRI
       can be extracted, can it be assumed that this
       is an empty UPDATE ?  Or is this a session-
       crashing-error ?

Of course, if the session is only carrying vanilla IPv4 Unicast, life
is easy.

But otherwise, it seems to me that in order to make use of the
"treat-as-withdraw" mechanism, the receiver of a broken set of
attributes has to make some significant assumptions about the
behaviour of the sender.  I do not know which, if any, of those
assumptions it is safe to make.

I am, of course, assuming that having received a broken UPDATE, it is
*essential* to avoid continuing with the session unless *all* NLRI
referred to in that UPDATE have been "treated-as-withdraw".

Chris