[Anima-bootstrap] developments on 6tisch join scheduling

Michael Richardson <mcr+ietf@sandelman.ca> Tue, 16 August 2016 22:46 UTC

Return-Path: <mcr+ietf@sandelman.ca>
X-Original-To: anima-bootstrap@ietfa.amsl.com
Delivered-To: anima-bootstrap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 835D712B05E; Tue, 16 Aug 2016 15:46:46 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.148
X-Spam-Level:
X-Spam-Status: No, score=-3.148 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RP_MATCHES_RCVD=-1.247, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id A-0cUgdXLXFu; Tue, 16 Aug 2016 15:46:44 -0700 (PDT)
Received: from tuna.sandelman.ca (tuna.sandelman.ca [209.87.249.19]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id F07A512D08F; Tue, 16 Aug 2016 15:46:43 -0700 (PDT)
Received: from sandelman.ca (obiwan.sandelman.ca [IPv6:2607:f0b0:f:2::247]) by tuna.sandelman.ca (Postfix) with ESMTP id 083CB200A5; Tue, 16 Aug 2016 18:57:45 -0400 (EDT)
Received: from obiwan.sandelman.ca (localhost [IPv6:::1]) by sandelman.ca (Postfix) with ESMTP id EB422639DC; Tue, 16 Aug 2016 18:46:41 -0400 (EDT)
From: Michael Richardson <mcr+ietf@sandelman.ca>
To: tisch-security <6tisch-security@ietf.org>
X-Attribution: mcr
X-Mailer: MH-E 8.6; nmh 1.6+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-sha1"; protocol="application/pgp-signature"
Date: Tue, 16 Aug 2016 18:46:41 -0400
Message-ID: <24944.1471387601@obiwan.sandelman.ca>
Archived-At: <https://mailarchive.ietf.org/arch/msg/anima-bootstrap/cV9jwGhZjLlseLhur8o7Ijgzs3s>
Cc: anima-bootstrap@ietf.org
Subject: [Anima-bootstrap] developments on 6tisch join scheduling
X-BeenThere: anima-bootstrap@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: Mailing list for the bootstrap design team of the ANIMA WG <anima-bootstrap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/anima-bootstrap>, <mailto:anima-bootstrap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/anima-bootstrap/>
List-Post: <mailto:anima-bootstrap@ietf.org>
List-Help: <mailto:anima-bootstrap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/anima-bootstrap>, <mailto:anima-bootstrap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 16 Aug 2016 22:46:46 -0000

During discussions at IETF96, it became clear that the join ordering/time
sequence envisioned for 6tisch would be less possible than I thought.
The bad news is that a new mechanism might be hard to actually design.
The good news is that I think a new mechanism would put 6tisch join
and ANIMA bootstrap almost identical.

To go back, the proposal was:
  1) a new pledge would send a NA with an EARO, which would turn into a
     DAC/DAR process up to the 6LBR.  The 6LBR would let the JCE know
     about the new node through mechanism TBD.
     The new pledge would receive a NA in reply, which, for the pledge
     would acknowledge that they might be knocking on the right door.
     (A network which didn't like that node would reply in some negative
     fashion, which naturally could also be forged)

  2) the JCE would reach out (via the proxy) to the pledge, on a schedule
     determined by the JCE.  The JCE would control the order of joining,
     and since CoAP would be used with using something like:
          draft-wang-6tisch-6top-protocol-00
     all joining nodes would remain quiet except when responding to
     queries from the JCE.

The goal of having the pledge be passive was one of bandwidth conservation,
the JCE would enroll only as many pledges as it felt it had available
bandwidth in the upper parts of the MESH DODAG tree.  A 6tisch network might
allocate a rather small amount of bandwidth for join messages, and utilizing
the bandwidth responsabily is important.  That means never wasting any energy
among the lower parts of the DODAG when the packets would just get dropped
further upwards.

In discussions, it appears that the EARO as described in
draft-thubert-6lo-rfc6775-update-00 might be replaced by the Crypto-ID
of draft-sarikaya-6lo-ap-nd-02, and the process is slightly different.

One additional reason why the passive pledge turns out to be a problem is
that the JCE does not actually know the wake/sleep schedule for the pledge.
In the 6tisch case, it ought to be possible for the pledge to sync up to
the schedule and so the proxy will know when it can transmit to it, but
in order to keep the proxy from having to store a lot of data coming from the
JCE, the JCE also needs to know the schedule out at the edge.  This does not
seem unsolveable, but it was an additional concern raised.

Meanwhile, in ANIMA bootstrap, the initial contact is through a GRASP
discovery (or DNSSD) to find a proxy.  The new pledge uses the proxy to
initiate an EST session using the proxy.  The enrollment process in the ANIMA
case is driven by the pledge, on the assumption that the ANIMA ACP has
sufficient bandwidth for normal congestion control present in TCP and CoAP to
deal with a limits.

What is needed is a way to adjust things so that the pledges will attempt to
join in a way that does not overwhelm the network, and more so, that the proxy
nodes can easily police that they are doing so.

So the idea is to use the ANIMA GRASP discovery mechanism to find a proxy,
but in addition, in the reply, to get some kind of number to seed a backoff
algorithm that causes the pledge to attempt to initiate the join process
at times deterministic to the network.  I'm not talking about an exponential
backoff.

This is where the hard part is, how to come up with a simple to describe, and
simple to code algorithm which would fill up the available bandwidth, and be
easily subdividable.

By subdividable, I mean, if we pass 5% of the join bandwidth to proxy A, at
rank 3, that it would be able to easily pass some percent of that bandwidth
to a new proxy at rank 4 in a way that does not mean reconfiguring the entire
mesh to delegate bandwidth.

Removing the subdivable property, some simple pseudo-random number generator,
with the right seed would be the right idea.   A good PRNG ought to span
the available time space evenly.  I don't have a solution, but I'm trying to
write up the requirements more clearly.

--
Michael Richardson <mcr+IETF@sandelman.ca>, Sandelman Software Works
 -= IPv6 IoT consulting =-