Re: [Roll] do capabilities need to understood, can they be added?

Michael Richardson <> Tue, 27 August 2019 17:49 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id D291212012E for <>; Tue, 27 Aug 2019 10:49:18 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -4.199
X-Spam-Status: No, score=-4.199 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id sIZepTDOouPq for <>; Tue, 27 Aug 2019 10:49:16 -0700 (PDT)
Received: from ( [IPv6:2607:f0b0:f:3:216:3eff:fe7c:d1f3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 30E141200C7 for <>; Tue, 27 Aug 2019 10:49:16 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 48E263818F for <>; Tue, 27 Aug 2019 13:48:07 -0400 (EDT)
Received: from localhost (localhost [IPv6:::1]) by (Postfix) with ESMTP id 019B689 for <>; Tue, 27 Aug 2019 13:49:15 -0400 (EDT)
From: Michael Richardson <>
To: Routing Over Low power and Lossy networks <>
In-Reply-To: <>
References: <> <> <22118.1566866805@localhost> <>
X-Mailer: MH-E 8.6; nmh 1.7+dev; GNU Emacs 24.5.1
X-Face: $\n1pF)h^`}$H>Hk{L"x@)JS7<%Az}5RyS@k9X%29-lHB$Ti.V>2bi.~ehC0; <'$9xN5Ub# z!G,p`nR&p7Fz@^UXIn156S8.~^@MJ*mMsD7=QFeq%AL4m<nPbLgmtKK-5dC@#:k
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="=-=-="; micalg="pgp-sha256"; protocol="application/pgp-signature"
Date: Tue, 27 Aug 2019 13:49:14 -0400
Message-ID: <22714.1566928154@localhost>
Archived-At: <>
Subject: Re: [Roll] do capabilities need to understood, can they be added?
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Routing Over Low power and Lossy networks <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Tue, 27 Aug 2019 17:49:19 -0000

Rahul Arvind Jadhav <> wrote:
    mcr> Are they individualized, or does every node in the LLN have to
    mcr> support a capability before it can be used?

    > Rahul Arvind Jadhav <> wrote:
    rj> Nice point. I haven't thought about this in detail. In non-storing
    rj> MOP, it may not be required that all the nodes support capabilities
    rj> but in storing MOP, every 6LR needs to add the cap (if present) of
    rj> the downstream child, thus requiring every node to support it. This
    rj> definitely needs handling in the draft.  [Ref:

    > I see:

    > 1) the root announces a capability.  6LRs that understand it may use
    > the new capability unilaterally if they understand it, and see a need
    > for it.  Nodes that do not understand the new capability are not
    > affected.  This could be a control plane thing, or a data plane thing.

    RJ> The problem may be in the other direction, .. In storing MOP, how
    RJ> should a 6LR which does not understand capability treat a DAO
    RJ> containing capability? Also how should a 6LR treat an unknown option
    RJ> in  general?  6550 mentions how to treat unknown RPL code but there
    RJ> is no handling for unknown option in DIO/DAO. Is there? I searched
    RJ> and could not find.  Most of the existing implementations just ignore
    RJ> what they  don't understand.

There is the case where an implementation does not understand the capability
extension, in which case, it likely does not copy it down, and no node below
that node can use that capability, even if would be safe.  The children could
hear other DIOs via other paths, so all is not lost.

I'm trying to address the case where the capability extension is passed on,
but the node may not know the specific capablity that was listed.

    > 2) the root announces support for capability that it wishes to enable,
    > in order for it be used, every node must support it.  If every DAO from
    > every node supports the capability, then the root announces that it is
    > turned on.  This in effect is a two-pass system, requiring either two
    > capability bits.  It might be that it is better to encode these two
    > bits are three values (plus 00-not supported).

    RJ> Another scenario could be that Root announces support for an optional
    RJ> capability. The 6LN just needs to know whether it could make use of
    RJ> this capability of the root to do something. It may not need to reply
    RJ> back to the root saying I see it and I support it.  Also should we be
    RJ> using two capability bits or we could use the info on whether the bit
    RJ> is set in DIO/DAO to infer the direction.

That's case (1).
Case (2) is where the root wants to enable use of some capability, but to do
so, it needs to know if all nodes support it.  This where we need a discover
operation followed by an enable operation.  

    > 3) any 6LR may announce a capability to it's children that it received
    > from it's parent, if it understands that capability.  If it does not,
    > then it MUST clear the capability.

    >    This can be a unilateral capability (like 1), or one that has to be
    > confirmed (like 2).  So this is really 3A and 3B.

    RJ> I get 3A .. but do we really need 3B. I mean if the node also needs
    RJ> to indicate that it also supports the same capability to the root
    RJ> then it can set the same bit in the DAO and send it back ... Thus
    RJ> working in both directions. It may not be required that capabilities
    RJ> be handshaked in both directions mandatorily. For e.g., root may
    RJ> indicate the capability that it has access to 6BBR and that unaware
    RJ> leaves could register through 6LRs. Thus 6LRs could proxy the NS
    RJ> (EARO) and other relevant messages. In this case, is it needed that
    RJ> 6LR reply back to the root saying it supports unaware leaves?  There
    RJ> might be another example which requires 6LRs/6LNs to indicate in the
    RJ> reply that it supports the feature asked by root using the same cap
    RJ> bit in DAO. The DIO/DAO decides the direction but the bit can be the
    RJ> same.

But, (3) is about an intermediate node announcing it can do something for its
children (and grandchildren).  

]               Never tell me the odds!                 | ipv6 mesh networks [
]   Michael Richardson, Sandelman Software Works        |    IoT architect   [
]        |   ruby on rails    [