[mpls] RFC5036 and "exceeds" / "reaches" limits on send and receive

Sandra Murphy <sandy@tislabs.com> Wed, 15 November 2017 03:39 UTC

Return-Path: <sandy@tislabs.com>
X-Original-To: mpls@ietfa.amsl.com
Delivered-To: mpls@ietfa.amsl.com
Received: from localhost (localhost []) by ietfa.amsl.com (Postfix) with ESMTP id 0FC2D1286CA for <mpls@ietfa.amsl.com>; Tue, 14 Nov 2017 19:39:41 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([]) by localhost (ietfa.amsl.com []) (amavisd-new, port 10024) with ESMTP id 6r5sIe0izvYL for <mpls@ietfa.amsl.com>; Tue, 14 Nov 2017 19:39:40 -0800 (PST)
Received: from walnut.tislabs.com (walnut.tislabs.com []) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id EFD3A126B72 for <mpls@ietf.org>; Tue, 14 Nov 2017 19:39:39 -0800 (PST)
Received: from nova.tislabs.com (unknown []) by walnut.tislabs.com (Postfix) with ESMTP id 5AFB728B0041 for <mpls@ietf.org>; Tue, 14 Nov 2017 22:39:39 -0500 (EST)
Received: from [] (localhost.localdomain []) by nova.tislabs.com (Postfix) with ESMTP id 462431F8036; Tue, 14 Nov 2017 22:39:39 -0500 (EST)
From: Sandra Murphy <sandy@tislabs.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Date: Tue, 14 Nov 2017 22:39:38 -0500
Message-Id: <4E4D0B0B-4E7F-45F7-BD6E-F00245B16226@tislabs.com>
Cc: Sandra Murphy <sandy@tislabs.com>
To: mpls@ietf.org
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
X-Mailer: Apple Mail (2.3124)
Archived-At: <https://mailarchive.ietf.org/arch/msg/mpls/6JK_JKbu_qI8g_VddZCa23r8YOY>
Subject: [mpls] RFC5036 and "exceeds" / "reaches" limits on send and receive
X-BeenThere: mpls@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Multi-Protocol Label Switching WG <mpls.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/mpls>, <mailto:mpls-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/mpls/>
List-Post: <mailto:mpls@ietf.org>
List-Help: <mailto:mpls-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/mpls>, <mailto:mpls-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 15 Nov 2017 03:39:41 -0000

I am reading RFC5036, the LDP spec.

I’m finding the language about the loop detection to be a bit ambiguous.

The text varies as to whether a loop is detected when something “exceeds” the limit or when something “reaches” the limit.

Some examples below.

I read the algorithms in the Appendix as requiring a check for “exceeds” on receipt, but no check for either “exceeds” or “reaches” on send. I don’t see a requirement when sending any message to check the hop count or the path vector length to see if it has reached/exceeded the limit.  [The Appendix A procedure descriptions are said to take precedence over any description in the text.]

Does that mean that an LSR might send a message that was doomed to be rejected upon receipt?  Is that the intent?

For the hop count in particular - the hop count field, if I read the spec correctly, is one octet, so a maximum value of 255.  I have not found a requirement that the “configured maximum value” for the hop count MUST be strictly less than the Hop Count TLV’s largest possible hop count value.

So if an LSR is propagating a Label Request message that had a hop count of 255, it should increment the hop count when sending to its neighbor.  What happens then - what value is sent?  I don’t see this covered in the Appendix’s algorithms, and the text is ambiguous.

If an LSR is checking to see if a received message’s Hop Count TLV has a HC Value that exceeds the “configured maximum value”, and the configured maximum value is configured to be 255, would the test ever succeed?

I figure I’ve missed something fundamental, as implementors would have to have figured this out.  And the usual configured maximum values are not going to push either limit.  But still, it would be good to understand.



Some examples of “exceeds” and “reaches”

Section 2.8.2, p 26

      If R receives a Label Mapping message from its next hop with a Hop
      Count TLV that exceeds the configured maximum value, or with a
      Path Vector TLV containing its own LSR Id or that exceeds the
      maximum allowable length, then R detects that the corresponding
      LSP contains a loop.

Section, p 40

   If an LSR receives a message containing a Hop Count TLV, it MUST
   check the hop count value to determine whether the hop count has
   exceeded its configured maximum allowable value.  If so, it MUST
   behave as if the containing message has traversed a loop by sending a
   Notification message signaling Loop Detected in reply to the sender
   of the message.

Section 2.8, p 23

                                               an LSR that detects a
         Path Vector has reached the maximum length behaves as if the
         containing message has traversed a loop.

         An LSR that detects a Hop Count has reached a configured
         maximum value behaves as if the containing message has
         traversed a loop.

<In this case, there’s no indication if the LSR is checking the maximum on receipt of
a message or on sending after having incremented the value.>

Section, p 42

   Note that a Label Request message with a Path Vector TLV is forwarded

      1. A loop is found,

      2. The LSP egress is reached, or

      3. The maximum Path Vector limit or maximum Hop Count limit is
         reached.  This is treated as if a loop had been detected.