[6tisch] Yatch's review on draft-ietf-6tisch-msf-08 - Re: MSF review

Yasuyuki Tanaka <yasuyuki.tanaka@inria.fr> Tue, 26 November 2019 14:20 UTC

Return-Path: <yasuyuki.tanaka@inria.fr>
X-Original-To: 6tisch@ietfa.amsl.com
Delivered-To: 6tisch@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6A756120106 for <6tisch@ietfa.amsl.com>; Tue, 26 Nov 2019 06:20:56 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.899
X-Spam-Level:
X-Spam-Status: No, score=-6.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=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 8wpIqoS9HBMn for <6tisch@ietfa.amsl.com>; Tue, 26 Nov 2019 06:20:54 -0800 (PST)
Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id B626E120025 for <6tisch@ietf.org>; Tue, 26 Nov 2019 06:20:53 -0800 (PST)
X-IronPort-AV: E=Sophos;i="5.69,246,1571695200"; d="scan'208";a="413582357"
Received: from wifi-pro-82-051.paris.inria.fr (HELO [128.93.82.51]) ([128.93.82.51]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES128-SHA; 26 Nov 2019 15:20:51 +0100
From: Yasuyuki Tanaka <yasuyuki.tanaka@inria.fr>
To: 6tisch@ietf.org
Cc: yasuyuki.tanaka@inria.fr
References: <MN2PR11MB35655660E9DF5365BA4A1AD9D84A0@MN2PR11MB3565.namprd11.prod.outlook.com>
Message-ID: <36e424c6-f40e-89b1-4cf1-1a25db501d72@inria.fr>
Date: Tue, 26 Nov 2019 15:20:51 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2
MIME-Version: 1.0
In-Reply-To: <MN2PR11MB35655660E9DF5365BA4A1AD9D84A0@MN2PR11MB3565.namprd11.prod.outlook.com>
Content-Type: text/plain; charset="windows-1252"; format="flowed"
Content-Language: en-US
Content-Transfer-Encoding: 7bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/6tisch/Ltunr21OJA4UQGNCdfy7pCaUVEc>
Subject: [6tisch] Yatch's review on draft-ietf-6tisch-msf-08 - Re: MSF review
X-BeenThere: 6tisch@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Discuss link layer model for Deterministic IPv6 over the TSCH mode of IEEE 802.15.4e, and impacts on RPL and 6LoWPAN such as resource allocation" <6tisch.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/6tisch>, <mailto:6tisch-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/6tisch/>
List-Post: <mailto:6tisch@ietf.org>
List-Help: <mailto:6tisch-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/6tisch>, <mailto:6tisch-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 26 Nov 2019 14:20:56 -0000

Hi all,

I reviewed draft-ietf-6tisch-msf-08. Here are my comments;

* [clarification] Section 1

draft> the 6 steps described in Section 4.  The end state of the join
draft> process is that the node is synchronized to the network, has
draft> mutually authenticated to the network, has identified a
draft> preferred routing parent, and has scheduled one default
draft> negotiated cell (defined in Section 5.1) to/from its preferred
draft> routing parent. After the join

Here, saying "one negotiated TX cell" would be clearer instead of "one
default negotiated cell".

* [clarification] Section 2

draft> ..., while Slotframe 0 is used for the bootstrap traffic as
draft> defined in the Minimal 6TiSCH Configuration.

I think this part is misleading. Slotframe 0 has the minimal shared
cell, which is basically used for all broadcast frames including EBs
and DIOs. These frames are needed not only for the bootstrap phase.

Given that, the following part seems a little bit strange as well.

draft> MSF uses the minimal cell to exchange the following packets:
draft>
draft> 1.  Enhanced Beacons (EBs), defined by [IEEE802154-2015].
draft>     These are broadcast frames.
draft> 2.  Broadcast DODAG Information Objects (DIOs), defined by
draft>     [RFC6550].  Unicast DIOs SHOULD NOT be sent on minimal cell.

Why don't we say just, "the minimal cell is used for broadcast frames
such as Enhanced Beacons (EBs) and broadcasted DODAG Information
Objects (DIOs)"? I would add, "Cells scheduled by MSF are meant to be
used only for unicast frames."

* [clarification] Section 3

draft> The default slotframe length (SLOTFRAME_LENGTH) is RECOMMENDED
draft> for Slotframe 0, 1 and 2, although any value can be advertised
draft> in the EBs.

Does this mean, these three slotframes can have different lengths? Or,
the slotframes have the same length, which may be different from
SLOTFRAME_LENGTH?

I don't know why we want to accept the former case, which makes MSF
more complex.

A related description is found in the latter part of the section:

draft> stated in [IEEE802154-2015].  However, when the Slotframe 0, 1
draft> and 2 use the same length value, it is possible for negotiated
draft> cell to avoid the collision with AutoRxCell.

* [technical] Section 4.8

The whole part of this section doesn't seem to be part of the
bootstrapping process. This describes how to handle unused cells,
which is part of the "housekeeping".

More importantly, the idea mentioned here doesn't look good, which is
not a "SHOULD" thing from my view point.

What if your child switches its preferred parent from you to another
node, and a CLEAR request sent by the child doesn't reach you because
of bad luck? The child loses all the cells scheduled with you, but
it's still in your communication range. The child will respond to your
keep-alive message, which prevents you from removing cells which will
no longer used. Another example is a case where your child reboots and
selects another node as its preferred parent.

A relevant discussion on ML:
https://mailarchive.ietf.org/arch/msg/6tisch/D2rvB3w5uKfhFQYzztqCu-h1fW4

So, I would suggest:

- removing Section 4.8 entirely
- adding a subsection to Section 5, mentioning a need for a mechanism
   removing up unused negotiated cells, without proposing a concrete
   idea

draft> When a neighbor is declared unreachable, the node MUST remove
draft> all negotiated cells with that neighbor from its own schedule.
draft> In addition, it MAY issue a 6P CLEAR to that neighbor (which
draft> can fail at the link-layer).  The node MAY be removed from the
draft> neighbor table.

In addition, the behavior described above, CLEAR from a parent to its
old child, contradicts what Section 8 says:

draft> MSF uses 2-step 6P Transactions exclusively.  6P transactions
draft> are only initiated by a node towards its preferred parent.

If we want to keep the idea in the text, then I would propose sending
a COUNT request instead of a (some form of?) keep-alive frame. This
would cause RC_ERR_SEQNUM in the examples given above, and a CLEAR
transaction will follows. And, I wouldn't use SHOULD or MUST there,
leaving it to implementers.

[clarification] Section 5.1

It is unclear whether we should have separate pairs of
NumCellsElapsed/NumCellsUsed for negotiated TX cells and negotiated RX
cells or not.

If we have NumCellsUsed dedicated for RX, the following text is not
correct:

draft> NumCellsUsed: Counts the number of negotiated cells that have
draft>     been used.This counter is initialized at 0.  NumCellsUsed
draft>     is incremented by exactly 1 when, during a negotiated cell
draft>     to the preferred parent, either of the following happens:

We need to increment NumCellsUsed when receiving a frame on the
*autonomous* RX cell while there is no negotiated RX cells scheduled
with the preferred parent. In this case, NumCellsUsed counts how many
times the *autonomous* RX cell is used. This is not aligned with what
is described in Section 5.1.

The same thing is seen in the definition of NumCellsElapse.

An expected process I believe is:

   if we have negotiated RX cells scheduled with the preferred parent:
     - NumCellsElapse: the number of times negotiated RX cells are
       visited
     - NumCellsUsed: the number of times negotiated RX cells are used
   else
     - NumCellsElapse: the number of times the autonomous RX cell is
       visited
     - NumCellsUsed: the number of times the autonomous RX cell is used

This is not well described in the current version.

Another comment to this section is that, the counters shouldn't be
updated by invalid frames, because we cannot guarantee the source
address of an invalid frame is intact. Or, an attacker can trigger
unnecessary 6P transactions by sending garbage frames over the
autonomous RX cell of a victim node, although the expression of
"invalid frame" is ambiguous.

draft> * The node receives a frame from its preferred parent.  The
draft>   counter increments regardless of whether the frame is a valid
draft>   IEEE802.15.4 frame or not.

[question] Section 5.1

draft> Meanwhile, the latency won't increase much by using a larger
draft> value of MAX_NUMCELLS for periodic traffic type.

Why...? With a larger MAX_NUMCELLS, MSF cannot react traffic increase
quickly, which could results in many frames wauting in the TX
queue. An example is a case when a big sub-tree consisting of many
nodes moves to you. Incoming traffic increases a lot, but you don't
have enough cells to handle. Negotiated TX cells are added one by one
with an interval determined by MAX_NUMCELLS. Then, latency from the
point of the topological change will get high.

By the way, the default or recommended value of MAX_NUMCELLS is 8?
MAX_NUMCELLS is not listed in Figure 3.

[question] Section 5.2

After a parent switch, which type of the negotiated cell should be
scheduled first, TX or RX? Any recommendation?

draft> 1.  the node counts the number of negotiated cells it has per
draft>     slotframe to the old preferred parent

draft> 2.  the node triggers one or more 6P ADD commands to schedule
draft>     the same number of negotiated cells with same cell options
draft>     to the new preferred parent

[clarification] Section 5.3

It would be better to mention explicitly RELOCATION for negotiated RX
cells are not supported. If MSF supports it, we need text describing
how.

[possible error?] Section 5.3

draft> preferred parent.  When NumTx reaches 256, both NumTx and
draft> NumTxAck

The recommended size of NumTx is 1 byte, the maximum number of which
is 255. See Section 15.

* [question] Section 6

draft> 6.  6P SIGNAL command
draft>
draft>    The 6P SIGNAL command is not used by MSF.

Why do we need this section? How about other commands, COUNT and LIST,
which are not mentioned in the draft at all?

If MSF doesn't support LIST, we don't need Section 8 and the rule for
RC_EOL. Section 8 is provided for LIST, according to Xavi:

 > >> What is Section 10, "Rule for Ordering Cells", for...? Why do we
 > >> need this section?
 > >>
 > >
 > > I'll let other co-authors answer
 > >
 >

 > XV> I think this was though to handle pagination when the LIST
 > command is received. This is, define what are the cells to return
 > when a list command is requesting cells from a particular offset.

See https://mailarchive.ietf.org/arch/msg/6tisch/3SrQj7LXzfFZUSEYasWcwGSrFRM

[technical] Section 12

draft> clear: Abort the 6P Transaction.  Issue a 6P CLEAR command to
draft>     that neighbor (this command may fail at the link layer).
draft>     Remove all cells scheduled with that neighbor from the
draft>     local schedule.  Keep that node in the neighbor and routing
draft>     tables.

Manipulating the routing table is not a job of MSF nor 6top. I'm not
sure what exactly the neighbor table is here, but I'd suggest removing
the last sentence.

* [nits/trivial suggestions]
- Abstract: s/MSF builds/MSF is built/ ?
- Section 1: "the root" --> "the DODAG root" or "the RPL DODAG root"
- Section 3: "time offset" --> "slot offset"
- Section 3: "the frame to be transmitted" --> a unicast frame ..."
- Section 5.1: dwonstream --> downstream
- Section 5.3: remove "(and need to be retransmitted)", it's redundant.
- WAITDURATION_MIN --> WAIT_DURATION_MIN (for readability)
- MAX_NUMCELLS --> MAX_NUM_CELLS (for readability)

Best,
Yatch