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

Rahul Arvind Jadhav <> Tue, 27 August 2019 13:18 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id A3D8A120073 for <>; Tue, 27 Aug 2019 06:18:36 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -4.2
X-Spam-Status: No, score=-4.2 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id oaczmE21hM4R for <>; Tue, 27 Aug 2019 06:18:34 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 7D27612003F for <>; Tue, 27 Aug 2019 06:18:34 -0700 (PDT)
Received: from (unknown []) by Forcepoint Email with ESMTP id 4016478BFF88F061482F for <>; Tue, 27 Aug 2019 14:18:32 +0100 (IST)
Received: from ( by ( with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 27 Aug 2019 14:18:31 +0100
Received: from ( by ( with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 27 Aug 2019 14:18:31 +0100
Received: from ( by ( with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.1.1713.5 via Frontend Transport; Tue, 27 Aug 2019 14:18:31 +0100
Received: from ([]) by ([::1]) with mapi id 14.03.0439.000; Tue, 27 Aug 2019 18:48:23 +0530
From: Rahul Arvind Jadhav <>
To: Routing Over Low power and Lossy networks <>
Thread-Topic: [Roll] do capabilities need to understood, can they be added?
Thread-Index: AQHVXHD2ayN5rouNOkKTBdc8Jbrn/qcO3hNw
Date: Tue, 27 Aug 2019 13:18:23 +0000
Message-ID: <>
References: <> <> <22118.1566866805@localhost>
In-Reply-To: <22118.1566866805@localhost>
Accept-Language: en-IN, en-US
Content-Language: en-US
x-originating-ip: []
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-CFilter-Loop: Reflected
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 13:18:37 -0000

    mcr> Are they individualized, or does every node in the LLN have to support
    mcr> 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 
should a 6LR which does not understand capability treat a DAO containing 
capability? Also how should a 6LR treat an unknown option in general? 
6550 mentions how to treat unknown RPL code but there is no handling 
for unknown option in DIO/DAO. Is there? I searched and could not find.
Most of the existing implementations just ignore what they don't 

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
   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 capability. The 6LN just needs to know whether it could 
make use of this capability of the root to do something. It may not 
need to reply back to the root saying I see it and I support it.
Also should we be using two capability bits or we could use the info 
on whether the bit is set in DIO/DAO to infer the direction.

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 
to indicate that it also supports the same capability to the root then it 
can set the same bit in the DAO and send it back ... Thus working in 
both directions. It may not be required that capabilities be handshaked 
in both directions mandatorily. For e.g., root may indicate the capability 
that it has access to 6BBR and that unaware leaves could register 
through 6LRs. Thus 6LRs could proxy the NS (EARO) and other relevant 
messages. In this case, is it needed that 6LR reply back to the root 
saying it supports unaware leaves?
There might be another example which requires 6LRs/6LNs to indicate
in the reply that it supports the feature asked by root using the same 
cap bit in DAO. The DIO/DAO decides the direction but the bit can be 
the same.

4) any 6LR may announce a capability to it's children, even if it did not
   receive it from a parent.  The capability is not to be repeated by
   the children (regardless of whether they understand it), unless they also
   wish to enable it.
[RJ] agree

I therefore see several issues to resolve.
For capabilities that a node understands, it can know which type of capability it is.  For a capability that is unknown, if the behaviour is other than "set to zero", then we need to tell the node what kind of capability it is, and how it is encoded.

Counting above, I see (1)-available, (2)-query, (2)-enable, (3)-available, (3)-query, (3)-enable, (4)-available.  Conveniently, 7 things, plus all zeros.  We could encode capabilities in three bits, so the behaviour would be part of the encoded.

Michael Richardson <>, Sandelman Software Works  -= IPv6 IoT consulting =-