| rfc9033.original | rfc9033.txt | |||
|---|---|---|---|---|
| 6TiSCH T. Chang, Ed. | Internet Engineering Task Force (IETF) T. Chang, Ed. | |||
| Internet-Draft M. Vucinic | Request for Comments: 9033 M. Vučinić | |||
| Intended status: Standards Track Inria | Category: Standards Track Inria | |||
| Expires: March 16, 2021 X. Vilajosana | ISSN: 2070-1721 X. Vilajosana | |||
| Universitat Oberta de Catalunya | Universitat Oberta de Catalunya | |||
| S. Duquennoy | S. Duquennoy | |||
| RISE SICS | RISE SICS | |||
| D. Dujovne | D. Dujovne | |||
| Universidad Diego Portales | Universidad Diego Portales | |||
| September 12, 2020 | May 2021 | |||
| 6TiSCH Minimal Scheduling Function (MSF) | 6TiSCH Minimal Scheduling Function (MSF) | |||
| draft-ietf-6tisch-msf-18 | ||||
| Abstract | Abstract | |||
| This specification defines the 6TiSCH Minimal Scheduling Function | This specification defines the "IPv6 over the TSCH mode of IEEE | |||
| (MSF). This Scheduling Function describes both the behavior of a | 802.15.4" (6TiSCH) Minimal Scheduling Function (MSF). This | |||
| node when joining the network, and how the communication schedule is | Scheduling Function describes both the behavior of a node when | |||
| managed in a distributed fashion. MSF is built upon the 6TiSCH | joining the network and how the communication schedule is managed in | |||
| Operation Sublayer Protocol (6P) and the Minimal Security Framework | a distributed fashion. MSF is built upon the 6TiSCH Operation | |||
| for 6TiSCH. | Sublayer Protocol (6P) and the minimal security framework for 6TiSCH. | |||
| Requirements Language | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in BCP | ||||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
| capitals, as shown here. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on March 16, 2021. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9033. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Simplified BSD License text | to this document. Code Components extracted from this document must | |||
| as described in Section 4.e of the Trust Legal Provisions and are | include Simplified BSD License text as described in Section 4.e of | |||
| provided without warranty as described in the Simplified BSD License. | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 2. Interface to the Minimal 6TiSCH Configuration . . . . . . . . 4 | 1.1. Requirements Language | |||
| 3. Autonomous Cells . . . . . . . . . . . . . . . . . . . . . . 5 | 1.2. Related Documents | |||
| 4. Node Behavior at Boot . . . . . . . . . . . . . . . . . . . . 6 | 2. Interface to the Minimal 6TiSCH Configuration | |||
| 4.1. Start State . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Autonomous Cells | |||
| 4.2. Step 1 - Choosing Frequency . . . . . . . . . . . . . . . 7 | 4. Node Behavior at Boot | |||
| 4.3. Step 2 - Receiving EBs . . . . . . . . . . . . . . . . . 7 | 4.1. Start State | |||
| 4.4. Step 3 - Setting up Autonomous Cells for the Join | 4.2. Step 1 - Choosing Frequency | |||
| Process . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.3. Step 2 - Receiving EBs | |||
| 4.5. Step 4 - Acquiring a RPL Rank . . . . . . . . . . . . . . 8 | 4.4. Step 3 - Setting up Autonomous Cells for the Join Process | |||
| 4.6. Step 5 - Setting up first Tx negotiated Cells . . . . . . 8 | 4.5. Step 4 - Acquiring a RPL Rank | |||
| 4.7. Step 6 - Send EBs and DIOs . . . . . . . . . . . . . . . 8 | 4.6. Step 5 - Setting up First Tx Negotiated Cells | |||
| 4.8. End State . . . . . . . . . . . . . . . . . . . . . . . . 8 | 4.7. Step 6 - Sending EBs and DIOs | |||
| 5. Rules for Adding/Deleting Cells . . . . . . . . . . . . . . . 9 | 4.8. End State | |||
| 5.1. Adapting to Traffic . . . . . . . . . . . . . . . . . . . 9 | 5. Rules for Adding and Deleting Cells | |||
| 5.2. Switching Parent . . . . . . . . . . . . . . . . . . . . 11 | 5.1. Adapting to Traffic | |||
| 5.3. Handling Schedule Collisions . . . . . . . . . . . . . . 11 | 5.2. Switching Parent | |||
| 6. 6P SIGNAL command . . . . . . . . . . . . . . . . . . . . . . 13 | 5.3. Handling Schedule Collisions | |||
| 7. Scheduling Function Identifier . . . . . . . . . . . . . . . 13 | 6. 6P SIGNAL Command | |||
| 8. Rules for CellList . . . . . . . . . . . . . . . . . . . . . 13 | 7. Scheduling Function Identifier | |||
| 9. 6P Timeout Value . . . . . . . . . . . . . . . . . . . . . . 14 | 8. Rules for CellList | |||
| 10. Rule for Ordering Cells . . . . . . . . . . . . . . . . . . . 14 | 9. 6P Timeout Value | |||
| 11. Meaning of the Metadata Field . . . . . . . . . . . . . . . . 14 | 10. Rule for Ordering Cells | |||
| 12. 6P Error Handling . . . . . . . . . . . . . . . . . . . . . . 14 | 11. Meaning of the Metadata Field | |||
| 13. Schedule Inconsistency Handling . . . . . . . . . . . . . . . 15 | 12. 6P Error Handling | |||
| 14. MSF Constants . . . . . . . . . . . . . . . . . . . . . . . . 15 | 13. Schedule Inconsistency Handling | |||
| 15. MSF Statistics . . . . . . . . . . . . . . . . . . . . . . . 16 | 14. MSF Constants | |||
| 16. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | 15. MSF Statistics | |||
| 17. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | 16. Security Considerations | |||
| 17.1. MSF Scheduling Function Identifiers . . . . . . . . . . 18 | 17. IANA Considerations | |||
| 18. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 18 | 17.1. MSF Scheduling Function Identifiers | |||
| 19. References . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 18. References | |||
| 19.1. Normative References . . . . . . . . . . . . . . . . . . 18 | 18.1. Normative References | |||
| 19.2. Informative References . . . . . . . . . . . . . . . . . 20 | 18.2. Informative References | |||
| Appendix A. Example of Implementation of SAX hash function . . . 20 | Appendix A. Example Implementation of the SAX Hash Function | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 21 | Contributors | |||
| Authors' Addresses | ||||
| 1. Introduction | 1. Introduction | |||
| The 6TiSCH Minimal Scheduling Function (MSF), defined in this | The 6TiSCH Minimal Scheduling Function (MSF), defined in this | |||
| specification, is a 6TiSCH Scheduling Function (SF). The role of an | specification, is a 6TiSCH Scheduling Function (SF). The role of an | |||
| SF is entirely defined in [RFC8480]. This specification complements | SF is entirely defined in [RFC8480]. This specification complements | |||
| [RFC8480] by providing the rules of when to add/delete cells in the | [RFC8480] by providing the rules of when to add and delete cells in | |||
| communication schedule. This specification satisfies all the | the communication schedule. This specification satisfies all the | |||
| requirements for an SF listed in Section 4.2 of [RFC8480]. | requirements for an SF listed in Section 4.2 of [RFC8480]. | |||
| MSF builds on top of the following specifications: the Minimal IPv6 | MSF builds on top of the following specifications: "Minimal IPv6 over | |||
| over the TSCH Mode of IEEE 802.15.4e (6TiSCH) Configuration | the TSCH Mode of IEEE 802.15.4e (6TiSCH) Configuration" [RFC8180], | |||
| [RFC8180], the 6TiSCH Operation Sublayer Protocol (6P) [RFC8480], and | "6TiSCH Operation Sublayer (6top) Protocol (6P)" [RFC8480], and | |||
| the Minimal Security Framework for 6TiSCH | "Constrained Join Protocol (CoJP) for 6TiSCH" [RFC9031]. | |||
| [I-D.ietf-6tisch-minimal-security]. | ||||
| MSF defines both the behavior of a node when joining the network, and | MSF defines both the behavior of a node when joining the network, and | |||
| how the communication schedule is managed in a distributed fashion. | how the communication schedule is managed in a distributed fashion. | |||
| When a node running MSF boots up, it joins the network by following | When a node running MSF boots up, it joins the network by following | |||
| the 6 steps described in Section 4. The end state of the join | the six steps described in Section 4. The end state of the join | |||
| process is that the node is synchronized to the network, has mutually | process is that the node is synchronized to the network, has mutually | |||
| authenticated with the network, has identified a routing parent, and | authenticated with the network, has identified a routing parent, and | |||
| has scheduled one negotiated Tx cell (defined in Section 5.1) to/from | has scheduled one negotiated Tx cell (defined in Section 5.1) to/from | |||
| its routing parent. After the join process, the node can | its routing parent. After the join process, the node can | |||
| continuously add/delete/relocate cells, as described in Section 5. | continuously add, delete, and relocate cells as described in | |||
| It does so for 3 reasons: to match the link-layer resources to the | Section 5. It does so for three reasons: to match the link-layer | |||
| traffic, to handle changing parent and to handle a schedule | resources to the traffic, to handle changing parent, and to handle a | |||
| collision. | schedule collision. | |||
| MSF works closely with the IPv6 Routing Protocol for Low-Power and | MSF works closely with the IPv6 Routing Protocol for Low-Power and | |||
| Lossy Networks (RPL), specifically the routing parent defined in | Lossy Networks (RPL), specifically the routing parent defined in | |||
| [RFC6550]. This specification only describes how MSF works with the | [RFC6550]. This specification only describes how MSF works with the | |||
| routing parent; this parent is referred to as the "selected parent". | routing parent; this parent is referred to as the "selected parent". | |||
| The activity of MSF towards the single routing parent is called a | The activity of MSF towards the single routing parent is called a | |||
| "MSF session". Though the performance of MSF is evaluated only when | "MSF session". Though the performance of MSF is evaluated only when | |||
| the "selected parent" represents the node's preferred parent, there | the "selected parent" represents the node's preferred parent, there | |||
| should be no restrictions to use multiple MSF sessions, one per | should be no restrictions to use multiple MSF sessions, one per | |||
| parent. The distribution of traffic over multiple parents is a | parent. The distribution of traffic over multiple parents is a | |||
| routing decision that is out of scope for MSF. | routing decision that is out of scope for MSF. | |||
| MSF is designed to operate in a wide range of application domains. | MSF is designed to operate in a wide range of application domains. | |||
| It is optimized for applications with regular upstream traffic, from | It is optimized for applications with regular upstream traffic, from | |||
| the nodes to the Destination-Oriented Directed Acyclic Graph (DODAG | the nodes to the Destination-Oriented Directed Acyclic Graph (DODAG) | |||
| [RFC6550]) root. | root [RFC6550]. | |||
| This specification follows the recommended structure of an SF | This specification follows the recommended structure of an SF | |||
| specification, given in Appendix A of [RFC8480], with the following | specification, given in Appendix A of [RFC8480], with the following | |||
| adaptations: | adaptations: | |||
| * We have reordered some sections, in particular to have the section | * We have reordered some sections, in particular to have the section | |||
| on the node behavior at boot (Section 4) appear early in this | on the node behavior at boot (Section 4) appear early in this | |||
| specification. | specification. | |||
| * We added sections on the interface to the minimal 6TiSCH | * We added sections on the interface to the minimal 6TiSCH | |||
| configuration (Section 2), the use of the SIGNAL command | configuration (Section 2), the use of the SIGNAL command | |||
| (Section 6), the MSF constants (Section 14) and the MSF statistics | (Section 6), the MSF constants (Section 14), and the MSF | |||
| (Section 15). | statistics (Section 15). | |||
| 1.1. Requirements Language | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in | ||||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
| capitals, as shown here. | ||||
| 1.2. Related Documents | ||||
| This specification uses messages and variables defined in IEEE Std | ||||
| 802.15.4-2015 [IEEE802154]. It is expected that those resources will | ||||
| remain in the future versions of IEEE Std 802.15.4; in which case, | ||||
| this specification also applies to those future versions. In the | ||||
| remainder of the document, we use [IEEE802154] to refer to IEEE Std | ||||
| 802.15.4-2015 as well as future versions of IEEE Std 802.15.4 that | ||||
| remain compatible. | ||||
| 2. Interface to the Minimal 6TiSCH Configuration | 2. Interface to the Minimal 6TiSCH Configuration | |||
| In a TSCH network, time is sliced up into time slots. The time slots | In a Time-Slotted Channel Hopping (TSCH) network, time is sliced up | |||
| are grouped as one or multiple slotframes which repeat over time. | into time slots. The time slots are grouped as one or multiple | |||
| The TSCH schedule instructs a node what to do at each time slot, such | slotframes that repeat over time. The TSCH schedule instructs a node | |||
| as transmit, receive or sleep [RFC7554]. In case of a slot to | what to do at each time slot, such as transmit, receive, or sleep | |||
| transmit or receive, a channel is assigned to the time slot. The | [RFC7554]. For time slots for transmitting or receiving, a channel | |||
| tuple (slot, channel) is indicated as a cell of TSCH schedule. MSF | is assigned to the time slot. The tuple (slot, channel) is indicated | |||
| is one of the policies defining how to manage the TSCH schedule. | as a cell of the TSCH schedule. MSF is one of the policies defining | |||
| how to manage the TSCH schedule. | ||||
| A node implementing MSF SHOULD implement the Minimal 6TiSCH | A node implementing MSF SHOULD implement the minimal 6TiSCH | |||
| Configuration [RFC8180], which defines the "minimal cell", a single | configuration [RFC8180], which defines the "minimal cell", a single | |||
| shared cell providing minimal connectivity between the nodes in the | shared cell providing minimal connectivity between the nodes in the | |||
| network. The MSF implementation provided in this specification is | network. The MSF implementation provided in this specification is | |||
| based on the implementation of the Minimal 6TiSCH Configuration. | based on the implementation of the minimal 6TiSCH configuration. | |||
| However, an implementor MAY implement MSF based on other | However, an implementor MAY implement MSF based on other | |||
| specifications as long as the specification defines a way to | specifications as long as the specification defines a way to | |||
| advertise the EB/DIO among the network. | advertise the Enhanced Beacons (EBs) and DODAG Information Objects | |||
| (DIOs) among the network. | ||||
| MSF uses the minimal cell for broadcast frames such as Enhanced | MSF uses the minimal cell for broadcast frames such as Enhanced | |||
| Beacons (EBs) [IEEE802154] and broadcast DODAG Information Objects | Beacons (EBs) [IEEE802154] and broadcast DODAG Information Objects | |||
| (DIOs) [RFC6550]. Cells scheduled by MSF are meant to be used only | (DIOs) [RFC6550]. Cells scheduled by MSF are meant to be used only | |||
| for unicast frames. | for unicast frames. | |||
| To ensure there is enough bandwidth available on the minimal cell, a | To ensure there is enough bandwidth available on the minimal cell, a | |||
| node implementing MSF SHOULD enforce some rules for limiting the | node implementing MSF SHOULD enforce some rules for limiting the | |||
| traffic of broadcast frames. For example, the overall broadcast | traffic of broadcast frames. For example, the overall broadcast | |||
| traffic among the node and its neighbors SHOULD NOT exceed 1/3 of the | traffic among the node and its neighbors SHOULD NOT exceed one-third | |||
| bandwidth of minimal cell. One of the algorithms that fulfills this | of the bandwidth of minimal cell. One of the algorithms that | |||
| requirement is the Trickle timer defined in [RFC6206] which is | fulfills this requirement is the Trickle timer defined in [RFC6206], | |||
| applied on DIO messages [RFC6550]. However, any such algorithm of | which is applied to DIO messages [RFC6550]. However, any such | |||
| limiting the broadcast traffic to meet those rules is implementation- | algorithm of limiting the broadcast traffic to meet those rules is | |||
| specific and is out of the scope of MSF. | implementation-specific and is out of the scope of MSF. | |||
| 3 slotframes are used in MSF. MSF schedules autonomous cells at | Three slotframes are used in MSF. MSF schedules autonomous cells at | |||
| Slotframe 1 (Section 3) and 6P negotiated cells at Slotframe 2 | Slotframe 1 (Section 3) and 6P negotiated cells at Slotframe 2 | |||
| (Section 5) ,while Slotframe 0 is used for the bootstrap traffic as | (Section 5), while Slotframe 0 is used for the bootstrap traffic as | |||
| defined in the Minimal 6TiSCH Configuration. The same slotframe | defined in the minimal 6TiSCH configuration. The same slotframe | |||
| length for Slotframe 0, 1 and 2 is RECOMMENDED. Thus it is possible | length for Slotframe 0, 1, and 2 is RECOMMENDED. Thus it is possible | |||
| to avoid the scheduling collision between the autonomous cells and 6P | to avoid the scheduling collision between the autonomous cells and 6P | |||
| negotiated cells (Section 3). The default slotframe length | negotiated cells (Section 3). The default slotframe length | |||
| (SLOTFRAME_LENGTH) is RECOMMENDED for Slotframe 0, 1 and 2, although | (SLOTFRAME_LENGTH) is RECOMMENDED for Slotframe 0, 1, and 2, although | |||
| any value can be advertised in the EBs. | any value can be advertised in the EBs. | |||
| 3. Autonomous Cells | 3. Autonomous Cells | |||
| MSF nodes initialize Slotframe 1 with a set of default cells for | MSF nodes initialize Slotframe 1 with a set of default cells for | |||
| unicast communication with their neighbors. These cells are called | unicast communication with their neighbors. These cells are called | |||
| 'autonomous cells', because they are maintained autonomously by each | "autonomous cells", because they are maintained autonomously by each | |||
| node without negotiation through 6P. Cells scheduled by 6P | node without negotiation through 6P. Cells scheduled by 6P | |||
| transaction are called 'negotiated cells' which are reserved on | Transaction are called "negotiated cells", which are reserved on | |||
| Slotframe 2. How to schedule negotiated cells is detailed in | Slotframe 2. How to schedule negotiated cells is detailed in | |||
| Section 5. There are two types of autonomous cells: | Section 5. There are two types of autonomous cells: | |||
| * Autonomous Rx Cell (AutoRxCell), one cell at a | Autonomous Rx Cell (AutoRxCell): One cell at a | |||
| [slotOffset,channelOffset] computed as a hash of the EUI64 of the | [slotOffset,channelOffset] computed as a hash of the 64-bit | |||
| node itself (detailed next). Its cell options bits are assigned | Extended Unique Identifier (EUI-64) of the node itself (detailed | |||
| as TX=0, RX=1, SHARED=0. | next). Its cell options bits are assigned as TX=0, RX=1, | |||
| * Autonomous Tx Cell (AutoTxCell), one cell at a | SHARED=0. | |||
| [slotOffset,channelOffset] computed as a hash of the layer 2 EUI64 | ||||
| destination address in the unicast frame to be transmitted | Autonomous Tx Cell (AutoTxCell): One cell at a | |||
| [slotOffset,channelOffset] computed as a hash of the Layer 2 | ||||
| EUI-64 destination address in the unicast frame to be transmitted | ||||
| (detailed in Section 4.4). Its cell options bits are assigned as | (detailed in Section 4.4). Its cell options bits are assigned as | |||
| TX=1, RX=0, SHARED=1. | TX=1, RX=0, SHARED=1. | |||
| To compute a [slotOffset,channelOffset] from an EUI64 address, nodes | To compute a [slotOffset,channelOffset] from an EUI-64 address, nodes | |||
| MUST use the hash function SAX as defined in Section 2 of | MUST use the hash function SAX as defined in Section 2 of | |||
| [SAX-DASFAA] with consistent input parameters, for example, those | [SAX-DASFAA] with consistent input parameters, for example, those | |||
| defined in Appendix A. The coordinates are computed to distribute | defined in Appendix A. The coordinates are computed to distribute | |||
| the cells across all channel offsets, and all but the first slot | the cells across all channel offsets, and all but the first slot | |||
| offset of Slotframe 1. The first time offset is skipped to avoid | offset of Slotframe 1. The first time offset is skipped to avoid | |||
| colliding with the minimal cell in Slotframe 0. The slot coordinates | colliding with the minimal cell in Slotframe 0. The slot coordinates | |||
| derived from a given EUI64 address are computed as follows: | derived from a given EUI-64 address are computed as follows: | |||
| * slotOffset(MAC) = 1 + hash(EUI64, length(Slotframe_1) - 1) | slotOffset(MAC) = 1 + hash(EUI64, length(Slotframe_1) - 1) | |||
| * channelOffset(MAC) = hash(EUI64, NUM_CH_OFFSET) | ||||
| channelOffset(MAC) = hash(EUI64, NUM_CH_OFFSET) | ||||
| The second input parameter defines the maximum return value of the | The second input parameter defines the maximum return value of the | |||
| hash function. Other optional parameters defined in SAX determine | hash function. Other optional parameters defined in SAX determine | |||
| the performance of SAX hash function. Those parameters could be | the performance of SAX hash function. Those parameters could be | |||
| broadcasted in EB frame or pre-configured. For interoperability | broadcast in an EB frame or preconfigured. For interoperability | |||
| purposes, the values of those parameters can be referred from | purposes, Appendix A provides the reference values of those | |||
| Appendix A. | parameters. | |||
| AutoTxCell is not permanently installed in the schedule but added/ | AutoTxCell is not permanently installed in the schedule but is added | |||
| deleted on demand when there is a frame to be sent. Throughout the | or deleted on demand when there is a frame to be sent. Throughout | |||
| network lifetime, nodes maintain the autonomous cells as follows: | the network lifetime, nodes maintain the autonomous cells as follows: | |||
| * Add an AutoTxCell to the layer 2 destination address which is | * Add an AutoTxCell to the Layer 2 destination address, which is | |||
| indicated in a frame when there is no 6P negotiated Tx cell in | indicated in a frame when there is no 6P negotiated Tx cell in the | |||
| schedule for that frame to transmit. | schedule for that frame to transmit. | |||
| * Remove an AutoTxCell when: | * Remove an AutoTxCell when: | |||
| - there is no frame to transmit on that cell, or | - there is no frame to transmit on that cell, or | |||
| - there is at least one 6P negotiated Tx cell in the schedule for | - there is at least one 6P negotiated Tx cell in the schedule for | |||
| the frames to transmit. | the frames to transmit. | |||
| The AutoRxCell MUST always remain scheduled after synchronization. | The AutoRxCell MUST always remain scheduled after synchronization. | |||
| 6P CLEAR MUST NOT erase any autonomous cells. | 6P CLEAR MUST NOT erase any autonomous cells. | |||
| Because of hash collisions, there will be cases that the AutoTxCell | Because of hash collisions, there will be cases that the AutoTxCell | |||
| and AutoRxCell are scheduled at the same slot offset and/or channel | and AutoRxCell are scheduled at the same slot offset and/or channel | |||
| offset. In such cases, AutoTxCell always take precedence over | offset. In such cases, AutoTxCell always take precedence over | |||
| AutoRxCell. Notice AutoTxCell is a shared type cell which applies | AutoRxCell. Notice AutoTxCell is a shared type cell that applies a | |||
| backs-off mechanism. When the AutoTxCell and AutoRxCell collide, | back-off mechanism. When the AutoTxCell and AutoRxCell collide, | |||
| AutoTxCell takes precedence if there is a packet to transmit. When | AutoTxCell takes precedence if there is a packet to transmit. When | |||
| in a back-off period, AutoRxCell is used. In case of conflicting | in a back-off period, AutoRxCell is used. In the case of conflict | |||
| with a negotiated cell, autonomous cells take precedence over | with a negotiated cell, autonomous cells take precedence over | |||
| negotiated cells, which is stated in [IEEE802154]. However, when the | negotiated cells, which is stated in [IEEE802154]. However, when the | |||
| Slotframe 0, 1 and 2 use the same length value, it is possible for a | Slotframe 0, 1, and 2 use the same length value, it is possible for a | |||
| negotiated cell to avoid the collision with AutoRxCell. Hence, the | negotiated cell to avoid the collision with AutoRxCell. Hence, the | |||
| same slotframe length for Slotframe 0, 1 and 2 is RECOMMENDED. | same slotframe length for Slotframe 0, 1, and 2 is RECOMMENDED. | |||
| 4. Node Behavior at Boot | 4. Node Behavior at Boot | |||
| This section details the behavior the node SHOULD follow from the | This section details the behavior the node SHOULD follow from the | |||
| moment it is switched on, until it has successfully joined the | moment it is switched on until it has successfully joined the | |||
| network. Alternative behaviors may be involved, for example, when | network. Alternative behaviors may be involved, for example, when | |||
| alternative security solutions are used for the network. Section 4.1 | alternative security solutions are used for the network. Section 4.1 | |||
| details the start state; Section 4.8 details the end state. The | details the start state; Section 4.8 details the end state. The | |||
| other sections detail the 6 steps of the joining process. We use the | other sections detail the six steps of the joining process. We use | |||
| term "pledge" and "joined node", as defined in | the term "pledge" and "joined node", as defined in [RFC9031]. | |||
| [I-D.ietf-6tisch-minimal-security]. | ||||
| 4.1. Start State | 4.1. Start State | |||
| A node implementing MSF SHOULD implement the Constrained Join | A node implementing MSF SHOULD implement the Constrained Join | |||
| Protocol (CoJP) for 6TiSCH [I-D.ietf-6tisch-minimal-security]. As a | Protocol (CoJP) for 6TiSCH [RFC9031]. As a corollary, this means | |||
| corollary, this means that a pledge, before being switched on, may be | that a pledge, before being switched on, may be preconfigured with | |||
| pre-configured with the Pre-Shared Key (PSK) for joining, as well as | the Pre-Shared Key (PSK) for joining, as well as any other | |||
| any other configuration detailed in | configuration detailed in [RFC9031]. This is not necessary if the | |||
| ([I-D.ietf-6tisch-minimal-security]). This is not necessary if the | node implements a security solution that is not based on PSKs, such | |||
| node implements a security solution not based on PSKs, such as | as [ZEROTOUCH-JOIN]. | |||
| ([I-D.ietf-6tisch-dtsecurity-zerotouch-join]). | ||||
| 4.2. Step 1 - Choosing Frequency | 4.2. Step 1 - Choosing Frequency | |||
| When switched on, the pledge randomly chooses a frequency from the | When switched on, the pledge randomly chooses a frequency from the | |||
| channels that the network cycles amongst, and starts listening for | channels through which the network cycles and starts listening for | |||
| EBs on that frequency. | EBs on that frequency. | |||
| 4.3. Step 2 - Receiving EBs | 4.3. Step 2 - Receiving EBs | |||
| Upon receiving the first EB, the pledge continues listening for | Upon receiving the first EB, the pledge continues listening for | |||
| additional EBs to learn: | additional EBs to learn: | |||
| 1. the number of neighbors N in its vicinity | 1. the number of neighbors N in its vicinity, and | |||
| 2. which neighbor to choose as a Join Proxy (JP) for the joining | 2. which neighbor to choose as a Join Proxy (JP) for the joining | |||
| process | process. | |||
| After having received the first EB, a node MAY keep listening for at | After having received the first EB, a node MAY keep listening for at | |||
| most MAX_EB_DELAY seconds or until it has received EBs from | most MAX_EB_DELAY seconds or until it has received EBs from | |||
| NUM_NEIGHBOURS_TO_WAIT distinct neighbors. This behavior is defined | NUM_NEIGHBOURS_TO_WAIT distinct neighbors. This behavior is defined | |||
| in [RFC8180]. | in [RFC8180]. | |||
| During this step, the pledge only gets synchronized when it received | During this step, the pledge only gets synchronized when it has | |||
| enough EB from the network it wishes to join. How to decide whether | received enough EB from the network it wishes to join. How to decide | |||
| an EB originates from a node from the network it wishes to join is | whether an EB originates from a node from the network it wishes to | |||
| implementation-specific, but MAY involve filtering EBs by the PAN ID | join is implementation-specific, but MAY involve filtering EBs by the | |||
| field it contains, the presence and contents of the IE defined in | PANID field it contains, the presence and contents of the Information | |||
| [I-D.ietf-6tisch-enrollment-enhanced-beacon], or the key used to | Element (IE) defined in [RFC9032], or the key used to authenticate | |||
| authenticate it. | it. | |||
| The decision of which neighbor to use as a JP is implementation- | The decision of which neighbor to use as a JP is implementation- | |||
| specific, and discussed in [I-D.ietf-6tisch-minimal-security]. | specific and is discussed in [RFC9031]. | |||
| 4.4. Step 3 - Setting up Autonomous Cells for the Join Process | 4.4. Step 3 - Setting up Autonomous Cells for the Join Process | |||
| After having selected a JP, a node generates a Join Request and | After having selected a JP, a node generates a Join Request and | |||
| installs an AutoTxCell to the JP. The Join Request is then sent by | installs an AutoTxCell to the JP. The Join Request is then sent by | |||
| the pledge to its selected JP over the AutoTxCell. The AutoTxCell is | the pledge to its selected JP over the AutoTxCell. The AutoTxCell is | |||
| removed by the pledge when the Join Request is sent out. The JP | removed by the pledge when the Join Request is sent out. The JP | |||
| receives the Join Request through its AutoRxCell. Then it forwards | receives the Join Request through its AutoRxCell. Then it forwards | |||
| the Join Request to the join registrar/coordinator (JRC), possibly | the Join Request to the Join Registrar/Coordinator (JRC), possibly | |||
| over multiple hops, over the 6P negotiated Tx cells. Similarly, the | over multiple hops, over the 6P negotiated Tx cells. Similarly, the | |||
| JRC sends the Join Response to the JP, possibly over multiple hops, | JRC sends the Join Response to the JP, possibly over multiple hops, | |||
| over AutoTxCells or the 6P negotiated Tx cells. When the JP received | over AutoTxCells or the 6P negotiated Tx cells. When the JP receives | |||
| the Join Response from the JRC, it installs an AutoTxCell to the | the Join Response from the JRC, it installs an AutoTxCell to the | |||
| pledge and sends that Join Response to the pledge over AutoTxCell. | pledge and sends that Join Response to the pledge over AutoTxCell. | |||
| The AutoTxCell is removed by the JP when the Join Response is sent | The AutoTxCell is removed by the JP when the Join Response is sent | |||
| out. The pledge receives the Join Response from its AutoRxCell, | out. The pledge receives the Join Response from its AutoRxCell, | |||
| thereby learns the keying material used in the network, as well as | thereby learns the keying material used in the network, as well as | |||
| other configuration settings, and becomes a "joined node". | other configuration settings, and becomes a "joined node". | |||
| When 6LoWPAN Neighbor Discovery ([RFC8505]) (ND) is implemented, the | When 6LoWPAN Neighbor Discovery (ND) [RFC8505] is implemented, the | |||
| unicast packets used by ND are sent on the AutoTxCell. The specific | unicast packets used by ND are sent on the AutoTxCell. The specific | |||
| process how the ND works during the Join process is detailed in | process how the ND works during the join process is detailed in | |||
| [I-D.ietf-6tisch-architecture]. | [RFC9030]. | |||
| 4.5. Step 4 - Acquiring a RPL Rank | 4.5. Step 4 - Acquiring a RPL Rank | |||
| Per [RFC6550], the joined node receives DIOs, computes its own Rank, | Per [RFC6550], the joined node receives DIOs, computes its own Rank, | |||
| and selects a routing parent. | and selects a routing parent. | |||
| 4.6. Step 5 - Setting up first Tx negotiated Cells | 4.6. Step 5 - Setting up First Tx Negotiated Cells | |||
| Once it has selected a routing parent, the joined node MUST generate | Once it has selected a routing parent, the joined node MUST generate | |||
| a 6P ADD Request and install an AutoTxCell to that parent. The 6P | a 6P ADD Request and install an AutoTxCell to that parent. The 6P | |||
| ADD Request is sent out through the AutoTxCell, containing the | ADD Request is sent out through the AutoTxCell, containing the | |||
| following fields: | following fields: | |||
| * CellOptions: set to TX=1,RX=0,SHARED=0 | CellOptions: Set to TX=1, RX=0, SHARED=0. | |||
| * NumCells: set to 1 | ||||
| * CellList: at least 5 cells, chosen according to Section 8 | NumCells: Set to 1. | |||
| CellList: At least 5 cells, chosen according to Section 8. | ||||
| The joined node removes the AutoTxCell to the selected parent when | The joined node removes the AutoTxCell to the selected parent when | |||
| the 6P Request is sent out. That parent receives the 6P ADD Request | the 6P Request is sent out. That parent receives the 6P ADD Request | |||
| from its AutoRxCell. Then it generates a 6P ADD Response and | from its AutoRxCell. Then it generates a 6P ADD Response and | |||
| installs an AutoTxCell to the joined node. When the parent sends out | installs an AutoTxCell to the joined node. When the parent sends out | |||
| the 6P ADD Response, it MUST remove that AutoTxCell. The joined node | the 6P ADD Response, it MUST remove that AutoTxCell. The joined node | |||
| receives the 6P ADD Response from its AutoRxCell and completes the 6P | receives the 6P ADD Response from its AutoRxCell and completes the 6P | |||
| transaction. In case the 6P ADD transaction failed, the node MUST | Transaction. In the case that the 6P ADD transaction failed, the | |||
| issue another 6P ADD Request and repeat until the Tx cell is | node MUST issue another 6P ADD Request and repeat until the Tx cell | |||
| installed to the parent. | is installed to the parent. | |||
| 4.7. Step 6 - Send EBs and DIOs | 4.7. Step 6 - Sending EBs and DIOs | |||
| The node starts sending EBs and DIOs on the minimal cell, while | The node starts sending EBs and DIOs on the minimal cell, while | |||
| following the transmit rules for broadcast frames from Section 2. | following the transmit rules for broadcast frames from Section 2. | |||
| 4.8. End State | 4.8. End State | |||
| For a new node, the end state of the joining process is: | At the end state of the joining process, a new node: | |||
| * it is synchronized to the network | * is synchronized to the network, | |||
| * it is using the link-layer keying material it learned through the | ||||
| secure joining process | ||||
| * it has selected one neighbor as its routing parent | ||||
| * it has one AutoRxCell | ||||
| * it has one negotiated Tx cell to the selected parent | ||||
| * it starts to send DIOs, potentially serving as a router for other | ||||
| nodes' traffic | ||||
| * it starts to send EBs, potentially serving as a JP for new pledges | ||||
| 5. Rules for Adding/Deleting Cells | * is using the link-layer keying material it learned through the | |||
| secure joining process, | ||||
| * has selected one neighbor as its routing parent, | ||||
| * has one AutoRxCell, | ||||
| * has one negotiated Tx cell to the selected parent, | ||||
| * starts to send DIOs, potentially serving as a router for other | ||||
| nodes' traffic, and | ||||
| * starts to send EBs, potentially serving as a JP for new pledges. | ||||
| 5. Rules for Adding and Deleting Cells | ||||
| Once a node has joined the 6TiSCH network, it adds/deletes/relocates | Once a node has joined the 6TiSCH network, it adds/deletes/relocates | |||
| cells with the selected parent for three reasons: | cells with the selected parent for three reasons: | |||
| * to match the link-layer resources to the traffic between the node | * to match the link-layer resources to the traffic between the node | |||
| and the selected parent (Section 5.1) | and the selected parent (Section 5.1), | |||
| * to handle switching parent or(Section 5.2) | ||||
| * to handle a schedule collision (Section 5.3) | ||||
| Those cells are called 'negotiated cells' as they are scheduled | * to handle switching the parent (Section 5.2), or | |||
| through 6P, negotiated with the node's parent. Without specific | ||||
| declaration, all cells mentioned in this section are negotiated cells | * to handle a schedule collision (Section 5.3). | |||
| and they are installed at Slotframe 2. | ||||
| These cells are called "negotiated cells" as they are scheduled | ||||
| through 6P and negotiated with the node's parent. Without specific | ||||
| declaration, all cells mentioned in this section are negotiated | ||||
| cells, and they are installed at Slotframe 2. | ||||
| 5.1. Adapting to Traffic | 5.1. Adapting to Traffic | |||
| A node implementing MSF MUST implement the behavior described in this | A node implementing MSF MUST implement the behavior described in this | |||
| section. | section. | |||
| The goal of MSF is to manage the communication schedule in the 6TiSCH | The goal of MSF is to manage the communication schedule in the 6TiSCH | |||
| schedule in a distributed manner. For a node, this translates into | schedule in a distributed manner. For a node, this translates into | |||
| monitoring the current usage of the cells it has to one of its | monitoring the current usage of the cells it has to one of its | |||
| neighbors, in most cases to the selected parent. | neighbors, in most cases to the selected parent. | |||
| skipping to change at page 9, line 40 ¶ | skipping to change at line 446 ¶ | |||
| The goal of MSF is to manage the communication schedule in the 6TiSCH | The goal of MSF is to manage the communication schedule in the 6TiSCH | |||
| schedule in a distributed manner. For a node, this translates into | schedule in a distributed manner. For a node, this translates into | |||
| monitoring the current usage of the cells it has to one of its | monitoring the current usage of the cells it has to one of its | |||
| neighbors, in most cases to the selected parent. | neighbors, in most cases to the selected parent. | |||
| * If the node determines that the number of link-layer frames it is | * If the node determines that the number of link-layer frames it is | |||
| attempting to exchange with the selected parent per unit of time | attempting to exchange with the selected parent per unit of time | |||
| is larger than the capacity offered by the TSCH negotiated cells | is larger than the capacity offered by the TSCH negotiated cells | |||
| it has scheduled with it, the node issues a 6P ADD command to that | it has scheduled with it, the node issues a 6P ADD command to that | |||
| parent to add cells to the TSCH schedule. | parent to add cells to the TSCH schedule. | |||
| * If the traffic is lower than the capacity, the node issues a 6P | * If the traffic is lower than the capacity, the node issues a 6P | |||
| DELETE command to that parent to delete cells from the TSCH | DELETE command to that parent to delete cells from the TSCH | |||
| schedule. | schedule. | |||
| The node MUST maintain two separate pairs of the following counters | The node MUST maintain two separate pairs of the following counters | |||
| for the selected parent, one for the negotiated Tx cells to that | for the selected parent: one for the negotiated Tx cells to that | |||
| parent and one for the negotiated Rx cells to that parent. | parent and one for the negotiated Rx cells to that parent. | |||
| NumCellsElapsed : Counts the number of negotiated cells that have | NumCellsElapsed: Counts the number of negotiated cells that have | |||
| elapsed since the counter was initialized. This counter is | elapsed since the counter was initialized. This counter is | |||
| initialized at 0. When the current cell is declared as a | initialized at 0. When the current cell is declared as a | |||
| negotiated cell to the selected parent, NumCellsElapsed is | negotiated cell to the selected parent, NumCellsElapsed is | |||
| incremented by exactly 1, regardless of whether the cell is used | incremented by exactly 1, regardless of whether the cell is used | |||
| to transmit/receive a frame. | to transmit or receive a frame. | |||
| NumCellsUsed: Counts the number of negotiated cells that have been | NumCellsUsed: Counts the number of negotiated cells that have been | |||
| used. This counter is initialized at 0. NumCellsUsed is | used. This counter is initialized at 0. NumCellsUsed is | |||
| incremented by exactly 1 when, during a negotiated cell to the | incremented by exactly 1 when, during a negotiated cell to the | |||
| selected parent, either of the following happens: | selected parent, either of the following happens: | |||
| * The node sends a frame to the parent. The counter increments | ||||
| regardless of whether a link-layer acknowledgment was received | ||||
| or not. | ||||
| * The node receives a valid frame from the parent. The counter | ||||
| increments only when the frame is a valid IEEE802.15.4 frame. | ||||
| The cell option of cells listed in CellList in 6P Request frame | * The node sends a frame to the parent. The counter increments | |||
| regardless of whether a link-layer acknowledgment was received | ||||
| or not. | ||||
| * The node receives a valid frame from the parent. The counter | ||||
| increments only when a valid frame per [IEEE802154] is received | ||||
| by the node from its parent. | ||||
| The cell option of cells listed in CellList in a 6P Request frame | ||||
| SHOULD be either (Tx=1, Rx=0) only or (Tx=0, Rx=1) only. Both | SHOULD be either (Tx=1, Rx=0) only or (Tx=0, Rx=1) only. Both | |||
| NumCellsElapsed and NumCellsUsed counters can be used for both type | NumCellsElapsed and NumCellsUsed counters can be used for both types | |||
| of negotiated cells. | of negotiated cells. | |||
| As there is no negotiated Rx Cell installed at initial time, the | As there is no negotiated Rx cell installed at initial time, the | |||
| AutoRxCell is taken into account as well for downstream traffic | AutoRxCell is taken into account as well for downstream traffic | |||
| adaptation. In this case: | adaptation. In this case: | |||
| * NumCellsElapsed is incremented by exactly 1 when the current cell | * NumCellsElapsed is incremented by exactly 1 when the current cell | |||
| is AutoRxCell. | is AutoRxCell. | |||
| * NumCellsUsed is incremented by exactly 1 when the node receives a | * NumCellsUsed is incremented by exactly 1 when the node receives a | |||
| frame from the selected parent on AutoRxCell. | frame from the selected parent on AutoRxCell. | |||
| Implementors MAY choose to create the same counters for each | Implementors MAY choose to create the same counters for each neighbor | |||
| neighbor, and add them as additional statistics in the neighbor | and add them as additional statistics in the neighbor table. | |||
| table. | ||||
| The counters are used as follows: | The counters are used as follows: | |||
| 1. Both NumCellsElapsed and NumCellsUsed are initialized to 0 when | 1. Both NumCellsElapsed and NumCellsUsed are initialized to 0 when | |||
| the node boots. | the node boots. | |||
| 2. When the value of NumCellsElapsed reaches MAX_NUM_CELLS: | 2. When the value of NumCellsElapsed reaches MAX_NUM_CELLS: | |||
| * If NumCellsUsed > LIM_NUMCELLSUSED_HIGH, trigger 6P to add a | ||||
| single cell to the selected parent | * If NumCellsUsed is greater than LIM_NUMCELLSUSED_HIGH, trigger | |||
| * If NumCellsUsed < LIM_NUMCELLSUSED_LOW, trigger 6P to remove a | 6P to add a single cell to the selected parent. | |||
| single cell to the selected parent | ||||
| * Reset both NumCellsElapsed and NumCellsUsed to 0 and go to | * If NumCellsUsed is less than LIM_NUMCELLSUSED_LOW, trigger 6P | |||
| step 2. | to remove a single cell to the selected parent. | |||
| * Reset both NumCellsElapsed and NumCellsUsed to 0 and restart | ||||
| #2. | ||||
| The value of MAX_NUM_CELLS is chosen according to the traffic type of | The value of MAX_NUM_CELLS is chosen according to the traffic type of | |||
| the network. Generally speaking, the larger the value MAX_NUM_CELLS | the network. Generally speaking, the larger the value MAX_NUM_CELLS | |||
| is, the more accurate the cell usage is calculated. The 6P traffic | is, the more accurately the cell usage is calculated. By using a | |||
| overhead using a larger value of MAX_NUM_CELLS could be reduced as | larger value of MAX_NUM_CELLS, the 6P traffic overhead could be | |||
| well. Meanwhile, the latency won't increase much by using a larger | reduced as well. Meanwhile, the latency won't increase much by using | |||
| value of MAX_NUM_CELLS for periodic traffic type. For bursty | a larger value of MAX_NUM_CELLS for periodic traffic type. For | |||
| traffic, larger value of MAX_NUM_CELLS indeed introduces higher | bursty traffic, a larger value of MAX_NUM_CELLS indeed introduces | |||
| latency. The latency caused by slight changes of traffic load can be | higher latency. The latency caused by slight changes of traffic load | |||
| absolved by the additional scheduled cells. In this sense, MSF is a | can be alleviated by the additional scheduled cells. In this sense, | |||
| scheduling function trading latency with energy by scheduling more | MSF is a Scheduling Function that trades latency with energy by | |||
| cells than needed. Setting MAX_NUM_CELLS to a value at least 4x of | scheduling more cells than needed. Setting MAX_NUM_CELLS to a value | |||
| the recent maximum number of cells used in a slot frame is | at least four times the recent maximum number of cells used in a | |||
| RECOMMENDED. For example, a 2 packets/slotframe traffic load results | slotframe is RECOMMENDED. For example, a two packets/slotframe | |||
| an average 4 cells scheduled (2 cells are used), using at least the | traffic load results in an average of four cells scheduled (two cells | |||
| value of double number of scheduled cells (which is 8) as | are used), using at least the value of double the number of scheduled | |||
| MAX_NUM_CELLS gives a good resolution on cell usage calculation. | cells (which is eight) as MAX_NUM_CELLS gives a good resolution on | |||
| the cell usage calculation. | ||||
| In case that a node booted or disappeared from the network, the cell | In the case that a node has booted or has disappeared from the | |||
| reserved at the selected parent may be kept in the schedule forever. | network, the cell reserved at the selected parent may be kept in the | |||
| A clean-up mechanism MUST be provided to resolve this issue. The | schedule forever. A cleanup mechanism MUST be provided to resolve | |||
| clean-up mechanism is implementation-specific. The goal is to | this issue. The cleanup mechanism is implementation-specific. The | |||
| confirm those negotiated cells are not used anymore by the associated | goal is to confirm that those negotiated cells are not used anymore | |||
| neighbors and remove them from the schedule. | by the associated neighbors and remove them from the schedule. | |||
| 5.2. Switching Parent | 5.2. Switching Parent | |||
| A node implementing MSF SHOULD implement the behavior described in | A node implementing MSF SHOULD implement the behavior described in | |||
| this section. | this section. | |||
| Part of its normal operation, the RPL routing protocol can have a | As part of its normal operation, RPL can have a node switch parent. | |||
| node switch parent. The procedure for switching from the old parent | The procedure for switching from the old parent to the new parent is | |||
| to the new parent is: | the following: | |||
| 1. the node counts the number of negotiated cells it has per | 1. The node counts the number of negotiated cells it has per | |||
| slotframe to the old parent | slotframe to the old parent. | |||
| 2. the node triggers one or more 6P ADD commands to schedule the | ||||
| 2. The node triggers one or more 6P ADD commands to schedule the | ||||
| same number of negotiated cells with same cell options to the new | same number of negotiated cells with same cell options to the new | |||
| parent | parent. | |||
| 3. when that successfully completes, the node issues a 6P CLEAR | ||||
| command to its old parent | ||||
| For what type of negotiated cell should be installed first, it | 3. When that successfully completes, the node issues a 6P CLEAR | |||
| depends on which traffic has the higher priority, upstream or | command to its old parent. | |||
| downstream, which is application-specific and out-of-scope of MSF. | ||||
| The type of negotiated cell that should be installed first depends on | ||||
| which traffic has the higher priority, upstream or downstream, which | ||||
| is application-specific and out of scope of MSF. | ||||
| 5.3. Handling Schedule Collisions | 5.3. Handling Schedule Collisions | |||
| A node implementing MSF SHOULD implement the behavior described in | A node implementing MSF SHOULD implement the behavior described in | |||
| this section. Other schedule collisions handling algorithm can be an | this section. Other algorithms for handling schedule collisions can | |||
| alternative of the algorithm proposed in this section. | be an alternative to the algorithm proposed in this section. | |||
| Since scheduling is entirely distributed, there is a non-zero | Since scheduling is entirely distributed, there is a nonzero | |||
| probability that two pairs of nearby neighbor nodes schedule a | probability that two pairs of nearby neighbor nodes schedule a | |||
| negotiated cell at the same [slotOffset,channelOffset] location in | negotiated cell at the same [slotOffset,channelOffset] location in | |||
| the TSCH schedule. In that case, data exchanged by the two pairs may | the TSCH schedule. In that case, data exchanged by the two pairs may | |||
| collide on that cell. We call this case a "schedule collision". | collide on that cell. We call this case a "schedule collision". | |||
| The node MUST maintain the following counters for each negotiated Tx | The node MUST maintain the following counters for each negotiated Tx | |||
| cell to the selected parent: | cell to the selected parent: | |||
| NumTx: Counts the number of transmission attempts on that cell. | NumTx: Counts the number of transmission attempts on that cell. | |||
| Each time the node attempts to transmit a frame on that cell, | Each time the node attempts to transmit a frame on that cell, | |||
| NumTx is incremented by exactly 1. | NumTx is incremented by exactly 1. | |||
| NumTxAck: Counts the number of successful transmission attempts on | NumTxAck: Counts the number of successful transmission attempts on | |||
| that cell. Each time the node receives an acknowledgment for a | that cell. Each time the node receives an acknowledgment for a | |||
| transmission attempt, NumTxAck is incremented by exactly 1. | transmission attempt, NumTxAck is incremented by exactly 1. | |||
| Since both NumTx and NumTxAck are initialized to 0, we necessarily | Since both NumTx and NumTxAck are initialized to 0, we necessarily | |||
| have NumTxAck <= NumTx. We call Packet Delivery Ratio (PDR) the | have NumTxAck less than or equal to NumTx. We call Packet Delivery | |||
| ratio NumTxAck/NumTx; and represent it as a percentage. A cell with | Ratio (PDR) the ratio NumTxAck/NumTx and represent it as a | |||
| PDR=50% means that half of the frames transmitted are not | percentage. A cell with a PDR equal to 50% means that half of the | |||
| acknowledged. | frames transmitted are not acknowledged. | |||
| Each time the node switches parent (or during the join process when | Each time the node switches parent (or during the join process when | |||
| the node selects a parent for the first time), both NumTx and | the node selects a parent for the first time), both NumTx and | |||
| NumTxAck MUST be reset to 0. They increment over time, as the | NumTxAck MUST be reset to 0. They increment over time, as the | |||
| schedule is executed and the node sends frames to that parent. When | schedule is executed, and the node sends frames to that parent. When | |||
| NumTx reaches MAX_NUMTX, both NumTx and NumTxAck MUST be divided by | NumTx reaches MAX_NUMTX, both NumTx and NumTxAck MUST be divided by | |||
| 2. MAX_NUMTX needs to be a power of two to avoid division error. | 2. MAX_NUMTX needs to be a power of two to avoid division error. | |||
| For example, when MAX_NUMTX is set to 256, from NumTx=255 and | For example, when MAX_NUMTX is set to 256, and NumTx=255 and | |||
| NumTxAck=127, the counters become NumTx=128 and NumTxAck=64 if one | NumTxAck=127, the counters become NumTx=128 and NumTxAck=64 if one | |||
| frame is sent to the parent with an Acknowledgment received. This | frame is sent to the parent with an acknowledgment received. This | |||
| operation does not change the value of the PDR, but allows the | operation does not change the value of the PDR but allows the | |||
| counters to keep incrementing. The value of MAX_NUMTX is | counters to keep incrementing. The value of MAX_NUMTX is | |||
| implementation-specific. | implementation-specific. | |||
| The key for detecting a schedule collision is that, if a node has | The key for detecting a schedule collision is that, if a node has | |||
| several cells to the selected parent, all cells should exhibit the | several cells to the selected parent, all cells should exhibit the | |||
| same PDR. A cell which exhibits a PDR significantly lower than the | same PDR. A cell that exhibits a PDR significantly lower than the | |||
| others indicates than there are collisions on that cell. | others indicates that there are collisions on that cell. | |||
| Every HOUSEKEEPINGCOLLISION_PERIOD, the node executes the following | Every HOUSEKEEPINGCOLLISION_PERIOD, the node executes the following | |||
| steps: | steps: | |||
| 1. It computes, for each negotiated Tx cell with the parent (not for | 1. It computes, for each negotiated Tx cell with the parent (not for | |||
| the autonomous cell), that cell's PDR. | the autonomous cell), that cell's PDR. | |||
| 2. Any cell that hasn't yet had NumTx divided by 2 since it was last | 2. Any cell that hasn't yet had NumTx divided by 2 since it was last | |||
| reset is skipped in steps 3 and 4. This avoids triggering cell | reset is skipped in steps 3 and 4. This avoids triggering cell | |||
| relocation when the values of NumTx and NumTxAck are not | relocation when the values of NumTx and NumTxAck are not | |||
| skipping to change at page 13, line 9 ¶ | skipping to change at line 614 ¶ | |||
| Every HOUSEKEEPINGCOLLISION_PERIOD, the node executes the following | Every HOUSEKEEPINGCOLLISION_PERIOD, the node executes the following | |||
| steps: | steps: | |||
| 1. It computes, for each negotiated Tx cell with the parent (not for | 1. It computes, for each negotiated Tx cell with the parent (not for | |||
| the autonomous cell), that cell's PDR. | the autonomous cell), that cell's PDR. | |||
| 2. Any cell that hasn't yet had NumTx divided by 2 since it was last | 2. Any cell that hasn't yet had NumTx divided by 2 since it was last | |||
| reset is skipped in steps 3 and 4. This avoids triggering cell | reset is skipped in steps 3 and 4. This avoids triggering cell | |||
| relocation when the values of NumTx and NumTxAck are not | relocation when the values of NumTx and NumTxAck are not | |||
| statistically significant yet. | statistically significant yet. | |||
| 3. It identifies the cell with the highest PDR. | 3. It identifies the cell with the highest PDR. | |||
| 4. For any other cell, it compares its PDR against that of the cell | 4. For any other cell, it compares its PDR against that of the cell | |||
| with the highest PDR. If the subtraction difference between the | with the highest PDR. If the subtraction difference between the | |||
| PDR of the cell and the highest PDR is larger than | PDR of the cell and the highest PDR is larger than | |||
| RELOCATE_PDRTHRES, it triggers the relocation of that cell using | RELOCATE_PDRTHRES, it triggers the relocation of that cell using | |||
| a 6P RELOCATE command. | a 6P RELOCATE command. | |||
| The RELOCATION for negotiated Rx cells is not supported by MSF. | The RELOCATION for negotiated Rx cells is not supported by MSF. | |||
| 6. 6P SIGNAL command | 6. 6P SIGNAL Command | |||
| The 6P SIGNAL command is not used by MSF. | The 6P SIGNAL command is not used by MSF. | |||
| 7. Scheduling Function Identifier | 7. Scheduling Function Identifier | |||
| The Scheduling Function Identifier (SFID) of MSF is | The Scheduling Function Identifier (SFID) of MSF is 0. How the value | |||
| IANA_6TISCH_SFID_MSF. How the value of IANA_6TISCH_SFID_MSF is | of 0 was chosen is described in Section 17. | |||
| chosen is described in Section 17. | ||||
| 8. Rules for CellList | 8. Rules for CellList | |||
| MSF uses 2-step 6P Transactions exclusively. 6P transactions are | MSF uses two-step 6P Transactions exclusively. 6P Transactions are | |||
| only initiated by a node towards its parent. As a result, the cells | only initiated by a node towards its parent. As a result, the cells | |||
| to put in the CellList of a 6P ADD command, and in the candidate | to put in the CellList of a 6P ADD command, and in the candidate | |||
| CellList of a RELOCATE command, are chosen by the node initiating the | CellList of a RELOCATE command, are chosen by the node initiating the | |||
| 6P transaction. In both cases, the same rules apply: | 6P Transaction. In both cases, the same rules apply: | |||
| * The CellList is RECOMMENDED to have five or more cells. | ||||
| * The CellList is RECOMMENDED to have 5 or more cells. | ||||
| * Each cell in the CellList MUST have a different slotOffset value. | * Each cell in the CellList MUST have a different slotOffset value. | |||
| * For each cell in the CellList, the node MUST NOT have any | * For each cell in the CellList, the node MUST NOT have any | |||
| scheduled cell on the same slotOffset. | scheduled cell on the same slotOffset. | |||
| * The slotOffset value of any cell in the CellList MUST NOT be the | * The slotOffset value of any cell in the CellList MUST NOT be the | |||
| same as the slotOffset of the minimal cell (slotOffset=0). | same as the slotOffset of the minimal cell (slotOffset=0). | |||
| * The slotOffset of a cell in the CellList SHOULD be randomly and | * The slotOffset of a cell in the CellList SHOULD be randomly and | |||
| uniformly chosen among all the slotOffset values that satisfy the | uniformly chosen among all the slotOffset values that satisfy the | |||
| restrictions above. | restrictions above. | |||
| * The channelOffset of a cell in the CellList SHOULD be randomly and | * The channelOffset of a cell in the CellList SHOULD be randomly and | |||
| uniformly chosen in [0..numFrequencies], where numFrequencies | uniformly chosen from [0..numFrequencies], where numFrequencies | |||
| represents the number of frequencies a node can communicate on. | represents the number of frequencies a node can communicate on. | |||
| As a consequence of random cell selection, there is a non-zero chance | As a consequence of random cell selection, there is a nonzero chance | |||
| that nodes in the vicinity installed cells with same slotOffset and | that nodes in the vicinity have installed cells with same slotOffset | |||
| channelOffset. An implementer MAY implement a strategy to monitor | and channelOffset. An implementer MAY implement a strategy to | |||
| the candidate cells before adding them in CellList to avoid | monitor the candidate cells before adding them in CellList to avoid | |||
| collision. For example, a node MAY maintain a candidate cell pool | collision. For example, a node MAY maintain a candidate cell pool | |||
| for the CellList. The candidate cells in the pool are pre-configured | for the CellList. The candidate cells in the pool are preconfigured | |||
| as Rx cells to promiscuously listen to detect transmissions on those | as Rx cells to promiscuously listen to detect transmissions on those | |||
| cells. If IEEE802.15.4 transmissions are observed on one cell over | cells. If transmissions that rely on [IEEE802154] are observed on | |||
| multiple iterations of the schedule, that cell is probably used by a | one cell over multiple iterations of the schedule, that cell is | |||
| TSCH neighbor. It is moved out from the pool and a new cell is | probably used by a TSCH neighbor. It is moved out from the pool, and | |||
| selected as a candidate cell. The cells in CellList are picked from | a new cell is selected as a candidate cell. The cells in CellList | |||
| the candidate pool directly when required. | are picked from the candidate pool directly when required. | |||
| 9. 6P Timeout Value | 9. 6P Timeout Value | |||
| The timeout value is calculated for the worst case that a 6P response | The timeout value is calculated for the worst case that a 6P response | |||
| is received, which means the 6P response is sent out successfully at | is received, which means the 6P response is sent out successfully at | |||
| the very latest retransmission. And for each retransmission, it | the very latest retransmission. And for each retransmission, it | |||
| backs-off with largest value. Hence the 6P timeout value is | backs off with largest value. Hence the 6P timeout value is | |||
| calculated as ((2^MAXBE)-1)*MAXRETRIES*SLOTFRAME_LENGTH, where: | calculated as ((2^MAXBE) - 1) * MAXRETRIES * SLOTFRAME_LENGTH, where: | |||
| * MAXBE, defined in IEEE802.15.4, is the maximum backoff exponent | * MAXBE, defined in [IEEE802154], is the maximum backoff exponent | |||
| used | used. | |||
| * MAXRETRIES, defined in IEEE802.15.4, is the maximum retransmission | ||||
| times | * MAXRETRIES, defined in [IEEE802154], is the maximum retransmission | |||
| * SLOTFRAME_LENGTH represents the length of slotframe | times. | |||
| * SLOTFRAME_LENGTH represents the length of slotframe. | ||||
| 10. Rule for Ordering Cells | 10. Rule for Ordering Cells | |||
| Cells are ordered slotOffset first, channelOffset second. | Cells are ordered by slotOffset first, channelOffset second. | |||
| The following sequence is correctly ordered (each element represents | The following sequence is correctly ordered (each element represents | |||
| the [slottOffset,channelOffset] of a cell in the schedule): | the [slotOffset,channelOffset] of a cell in the schedule): | |||
| [1,3],[1,4],[2,0],[5,3],[6,0],[6,3],[7,9] | [1,3],[1,4],[2,0],[5,3],[6,0],[6,3],[7,9] | |||
| 11. Meaning of the Metadata Field | 11. Meaning of the Metadata Field | |||
| The Metadata field is not used by MSF. | The Metadata field is not used by MSF. | |||
| 12. 6P Error Handling | 12. 6P Error Handling | |||
| Section 6.2.4 of [RFC8480] lists the 6P Return Codes. Figure 1 lists | Section 6.2.4 of [RFC8480] lists the 6P return codes. Table 1 lists | |||
| the same error codes, and the behavior a node implementing MSF SHOULD | the same error codes and the behavior a node implementing MSF SHOULD | |||
| follow. | follow. | |||
| +-----------------+----------------------+ | +=================+======================+ | |||
| | Code | RECOMMENDED behavior | | | Code | RECOMMENDED Behavior | | |||
| +-----------------+----------------------+ | +=================+======================+ | |||
| | RC_SUCCESS | nothing | | | RC_SUCCESS | nothing | | |||
| | RC_EOL | nothing | | +-----------------+----------------------+ | |||
| | RC_ERR | quarantine | | | RC_EOL | nothing | | |||
| | RC_RESET | quarantine | | +-----------------+----------------------+ | |||
| | RC_ERR_VERSION | quarantine | | | RC_ERR | quarantine | | |||
| | RC_ERR_SFID | quarantine | | +-----------------+----------------------+ | |||
| | RC_ERR_SEQNUM | clear | | | RC_RESET | quarantine | | |||
| | RC_ERR_CELLLIST | clear | | +-----------------+----------------------+ | |||
| | RC_ERR_BUSY | waitretry | | | RC_ERR_VERSION | quarantine | | |||
| | RC_ERR_LOCKED | waitretry | | +-----------------+----------------------+ | |||
| +-----------------+----------------------+ | | RC_ERR_SFID | quarantine | | |||
| +-----------------+----------------------+ | ||||
| | RC_ERR_SEQNUM | clear | | ||||
| +-----------------+----------------------+ | ||||
| | RC_ERR_CELLLIST | clear | | ||||
| +-----------------+----------------------+ | ||||
| | RC_ERR_BUSY | waitretry | | ||||
| +-----------------+----------------------+ | ||||
| | RC_ERR_LOCKED | waitretry | | ||||
| +-----------------+----------------------+ | ||||
| Figure 1: Recommended behavior for each 6P Error Code. | Table 1: Recommended Behavior for Each | |||
| 6P Error Code | ||||
| The meaning of each behavior from Figure 1 is: | The meaning of each behavior from Table 1 is: | |||
| nothing: Indicates that this return code is not an error. No error | ||||
| handling behavior is triggered. | ||||
| nothing: Indicates that this Return Code is not an error. No error | ||||
| handling behavior is triggered. | ||||
| clear: Abort the 6P Transaction. Issue a 6P CLEAR command to that | clear: Abort the 6P Transaction. Issue a 6P CLEAR command to that | |||
| neighbor (this command may fail at the link layer). Remove all | neighbor (this command may fail at the link layer). Remove all | |||
| cells scheduled with that neighbor from the local schedule. | cells scheduled with that neighbor from the local schedule. | |||
| quarantine: Same behavior as for "clear". In addition, remove the | quarantine: Same behavior as for "clear". In addition, remove the | |||
| node from the neighbor and routing tables. Place the node's | node from the neighbor and routing tables. Place the node's | |||
| identifier in a quarantine list for QUARANTINE_DURATION. When in | identifier in a quarantine list for QUARANTINE_DURATION. When in | |||
| quarantine, drop all frames received from that node. | quarantine, drop all frames received from that node. | |||
| waitretry: Abort the 6P Transaction. Wait for a duration randomly | waitretry: Abort the 6P Transaction. Wait for a duration randomly | |||
| and uniformly chosen in [WAIT_DURATION_MIN,WAIT_DURATION_MAX]. | and uniformly chosen from [WAIT_DURATION_MIN,WAIT_DURATION_MAX]. | |||
| Retry the same transaction. | Retry the same transaction. | |||
| 13. Schedule Inconsistency Handling | 13. Schedule Inconsistency Handling | |||
| The behavior when schedule inconsistency is detected is explained in | The behavior when schedule inconsistency is detected is explained in | |||
| Figure 1, for 6P Return Code RC_ERR_SEQNUM. | Table 1, for 6P return code RC_ERR_SEQNUM. | |||
| 14. MSF Constants | 14. MSF Constants | |||
| Figure 2 lists MSF Constants and their RECOMMENDED values. | Table 2 lists MSF constants and their RECOMMENDED values. | |||
| +------------------------------+-------------------+ | +==============================+===================+ | |||
| | Name | RECOMMENDED value | | | Name | RECOMMENDED value | | |||
| +==============================+===================+ | ||||
| | SLOTFRAME_LENGTH | 101 slots | | ||||
| +------------------------------+-------------------+ | +------------------------------+-------------------+ | |||
| | SLOTFRAME_LENGTH | 101 slots | | | NUM_CH_OFFSET | 16 | | |||
| | NUM_CH_OFFSET | 16 | | +------------------------------+-------------------+ | |||
| | MAX_NUM_CELLS | 100 | | | MAX_NUM_CELLS | 100 | | |||
| | LIM_NUMCELLSUSED_HIGH | 75 | | +------------------------------+-------------------+ | |||
| | LIM_NUMCELLSUSED_LOW | 25 | | | LIM_NUMCELLSUSED_HIGH | 75 | | |||
| | MAX_NUMTX | 256 | | +------------------------------+-------------------+ | |||
| | HOUSEKEEPINGCOLLISION_PERIOD | 1 min | | | LIM_NUMCELLSUSED_LOW | 25 | | |||
| | RELOCATE_PDRTHRES | 50 % | | +------------------------------+-------------------+ | |||
| | QUARANTINE_DURATION | 5 min | | | MAX_NUMTX | 256 | | |||
| | WAIT_DURATION_MIN | 30 s | | +------------------------------+-------------------+ | |||
| | WAIT_DURATION_MAX | 60 s | | | HOUSEKEEPINGCOLLISION_PERIOD | 1 min | | |||
| +------------------------------+-------------------+ | ||||
| | RELOCATE_PDRTHRES | 50 % | | ||||
| +------------------------------+-------------------+ | ||||
| | QUARANTINE_DURATION | 5 min | | ||||
| +------------------------------+-------------------+ | ||||
| | WAIT_DURATION_MIN | 30 s | | ||||
| +------------------------------+-------------------+ | ||||
| | WAIT_DURATION_MAX | 60 s | | ||||
| +------------------------------+-------------------+ | +------------------------------+-------------------+ | |||
| Figure 2: MSF Constants and their RECOMMENDED values. | Table 2: MSF Constants and Their RECOMMENDED Values | |||
| 15. MSF Statistics | 15. MSF Statistics | |||
| Figure 3 lists MSF Statistics and their RECOMMENDED width. | Table 3 lists MSF statistics and their RECOMMENDED widths. | |||
| +-----------------+-------------------+ | +=================+===================+ | |||
| | Name | RECOMMENDED width | | | Name | RECOMMENDED width | | |||
| +-----------------+-------------------+ | +=================+===================+ | |||
| | NumCellsElapsed | 1 byte | | | NumCellsElapsed | 1 byte | | |||
| | NumCellsUsed | 1 byte | | +-----------------+-------------------+ | |||
| | NumTx | 1 byte | | | NumCellsUsed | 1 byte | | |||
| | NumTxAck | 1 byte | | +-----------------+-------------------+ | |||
| +-----------------+-------------------+ | | NumTx | 1 byte | | |||
| +-----------------+-------------------+ | ||||
| | NumTxAck | 1 byte | | ||||
| +-----------------+-------------------+ | ||||
| Figure 3: MSF Statistics and their RECOMMENDED width. | Table 3: MSF Statistics and Their | |||
| RECOMMENDED Widths | ||||
| 16. Security Considerations | 16. Security Considerations | |||
| MSF defines a series of "rules" for the node to follow. It triggers | MSF defines a series of "rules" for the node to follow. It triggers | |||
| several actions, that are carried out by the protocols defined in the | several actions that are carried out by the protocols defined in the | |||
| following specifications: the Minimal IPv6 over the TSCH Mode of IEEE | following specifications: "Minimal IPv6 over the TSCH Mode of IEEE | |||
| 802.15.4e (6TiSCH) Configuration [RFC8180], the 6TiSCH Operation | 802.15.4e (6TiSCH) Configuration" [RFC8180], "6TiSCH Operation | |||
| Sublayer Protocol (6P) [RFC8480], and the Constrained Join Protocol | Sublayer (6top) Protocol (6P)" [RFC8480], and "Constrained Join | |||
| (CoJP) for 6TiSCH [I-D.ietf-6tisch-minimal-security]. | Protocol (CoJP) for 6TiSCH" [RFC9031]. Confidentiality and | |||
| Confidentiality and authentication of MSF control and data traffic | authentication of MSF control and data traffic are provided by these | |||
| are provided by these specifications whose security considerations | specifications whose security considerations continue to apply to | |||
| continue to apply to MSF. In particular, MSF does not define a new | MSF. In particular, MSF does not define a new protocol or packet | |||
| protocol or packet format. | format. | |||
| MSF uses autonomous cells for initial bootstrap and the transport of | MSF uses autonomous cells for initial bootstrap and the transport of | |||
| join traffic. Autonomous cells are computed as a hash of nodes' | join traffic. Autonomous cells are computed as a hash of nodes' | |||
| EUI64 addresses. This makes the coordinates of autonomous cell an | EUI-64 addresses. This makes the coordinates of autonomous cell an | |||
| easy target for an attacker, as EUI64 addresses are visible on the | easy target for an attacker, as EUI-64 addresses are visible on the | |||
| wire and are not encrypted by the link-layer security mechanism. | wire and are not encrypted by the link-layer security mechanism. | |||
| With the coordinates of autonomous cells available, the attacker can | With the coordinates of autonomous cells available, the attacker can | |||
| launch a selective jamming attack against any nodes' AutoRxCell. If | launch a selective jamming attack against any node's AutoRxCell. If | |||
| the attacker targets a node acting as a JP, it can prevent pledges | the attacker targets a node acting as a JP, it can prevent pledges | |||
| from using that JP to join the network. The pledge detects such a | from using that JP to join the network. The pledge detects such a | |||
| situation through the absence of a link-layer acknowledgment for its | situation through the absence of a link-layer acknowledgment for its | |||
| Join Request. As it is expected that each pledge will have more than | Join Request. As it is expected that each pledge will have more than | |||
| one JP available to join the network, one available countermeasure | one JP available to join the network, one available countermeasure | |||
| for the pledge is to pseudo-randomly select a new JP when the link to | for the pledge is to pseudorandomly select a new JP when the link to | |||
| the previous JP appears bad. Such strategy alleviates the issue of | the previous JP appears bad. Such a strategy alleviates the issue of | |||
| the attacker randomly jamming to disturb the network but does not | the attacker randomly jamming to disturb the network but does not | |||
| help in case the attacker is targeting a particular pledge. In that | help in the case the attacker is targeting a particular pledge. In | |||
| case, the attacker can jam the AutoRxCell of the pledge, in order to | that case, the attacker can jam the AutoRxCell of the pledge in order | |||
| prevent it from receiving the join response. This situation should | to prevent it from receiving the join response. This situation | |||
| be detected through the absence of a particular node from the network | should be detected through the absence of a particular node from the | |||
| and handled by the network administrator through out-of-band means. | network and handled by the network administrator through out-of-band | |||
| means. | ||||
| MSF adapts to traffic containing packets from the IP layer. It is | MSF adapts to traffic containing packets from the IP layer. It is | |||
| possible that the IP packet has a non-zero DSCP (Diffserv Code Point | possible that the IP packet has a nonzero DSCP (Differentiated | |||
| [RFC2474]) value in its IPv6 header. The decision how to handle that | Services Code Point) [RFC2474] value in its IPv6 header. The | |||
| packet belongs to the upper layer and is out of scope of MSF. As | decision how to handle that packet belongs to the upper layer and is | |||
| long as the decision is made to hand over to MAC layer to transmit, | out of scope of MSF. As long as the decision is made to hand over to | |||
| MSF will take that packet into account when adapting to traffic. | MAC layer to transmit, MSF will take that packet into account when | |||
| adapting to traffic. | ||||
| Note that non-zero DSCP value may imply that the traffic is | Note that nonzero DSCP values may imply that the traffic originated | |||
| originated at unauthenticated pledges, referring to | at unauthenticated pledges (see [RFC9031]). The implementation at | |||
| [I-D.ietf-6tisch-minimal-security]. The implementation at IPv6 layer | the IPv6 layer SHOULD rate limit this join traffic before it is | |||
| SHOULD rate-limit this join traffic before it is passed to 6top | passed to the 6top sublayer where MSF can observe it. If there is no | |||
| sublayer where MSF can observe it. In case there is no rate limit | rate limit for join traffic, intermediate nodes in the 6TiSCH network | |||
| for join traffic, intermediate nodes in the 6TiSCH network may be | may be prone to a resource exhaustion attack, with the attacker | |||
| prone to a resource exhaustion attack, with the attacker injecting | injecting unauthenticated traffic from the network edge. The | |||
| unauthenticated traffic from the network edge. The assumption is | assumption is that the rate-limiting function is aware of the | |||
| that the rate limiting function is aware of the available bandwidth | available bandwidth in the 6top Layer 3 bundle(s) towards a next hop, | |||
| in the 6top L3 bundle(s) towards a next hop, not directly from MSF, | not directly from MSF, but from an interaction with the 6top sublayer | |||
| but from an interaction with the 6top sublayer that manages | that ultimately manages the bundles under MSF's guidance. How this | |||
| ultimately the bundles under MSF's guidance. How this rate-limit is | rate limit is implemented is out of scope of MSF. | |||
| implemented is out of scope of MSF. | ||||
| 17. IANA Considerations | 17. IANA Considerations | |||
| 17.1. MSF Scheduling Function Identifiers | 17.1. MSF Scheduling Function Identifiers | |||
| This document adds the following number to the "6P Scheduling | This document adds the following number to the "6P Scheduling | |||
| Function Identifiers" sub-registry, part of the "IPv6 over the TSCH | Function Identifiers" subregistry, part of the "IPv6 Over the TSCH | |||
| mode of IEEE 802.15.4e (6TiSCH) parameters" registry, as defined by | Mode of IEEE 802.15.4 (6TiSCH)" registry, as defined by [RFC8480]: | |||
| [RFC8480]: | ||||
| +----------------------+-----------------------------+-------------+ | ||||
| | SFID | Name | Reference | | ||||
| +----------------------+-----------------------------+-------------+ | ||||
| | IANA_6TISCH_SFID_MSF | Minimal Scheduling Function | RFC_THIS | | ||||
| | | (MSF) | | | ||||
| +----------------------+-----------------------------+-------------+ | ||||
| Figure 4: New SFID in 6P Scheduling Function Identifiers subregistry. | +======+===================================+===========+ | |||
| | SFID | Name | Reference | | ||||
| +======+===================================+===========+ | ||||
| | 0 | Minimal Scheduling Function (MSF) | RFC 9033 | | ||||
| +------+-----------------------------------+-----------+ | ||||
| IANA_6TISCH_SFID_MSF is chosen from range 0-127, which is used for | Table 4: New SFID in the "6P Scheduling Function | |||
| IETF Review or IESG Approval. | Identifiers" Subregistry | |||
| 18. Contributors | The SFID was chosen from the range 0-127, which has the registration | |||
| procedure of IETF Review or IESG Approval [RFC8126]. | ||||
| * Beshr Al Nahas (Chalmers University, beshr@chalmers.se) | 18. References | |||
| * Olaf Landsiedel (Chalmers University, olafl@chalmers.se) | ||||
| * Yasuyuki Tanaka (Inria-Paris, yasuyuki.tanaka@inria.fr) | ||||
| 19. References | 18.1. Normative References | |||
| 19.1. Normative References | [IEEE802154] | |||
| IEEE, "IEEE Standard for Low-Rate Wireless Networks", IEEE | ||||
| Standard 802.15.4-2015, DOI 10.1109/IEEESTD.2016.7460875, | ||||
| April 2016, | ||||
| <https://ieeexplore.ieee.org/document/7460875>. | ||||
| [RFC8180] Vilajosana, X., Ed., Pister, K., and T. Watteyne, "Minimal | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| IPv6 over the TSCH Mode of IEEE 802.15.4e (6TiSCH) | Requirement Levels", BCP 14, RFC 2119, | |||
| Configuration", BCP 210, RFC 8180, DOI 10.17487/RFC8180, | DOI 10.17487/RFC2119, March 1997, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8180>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC8480] Wang, Q., Ed., Vilajosana, X., and T. Watteyne, "6TiSCH | [RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, | |||
| Operation Sublayer (6top) Protocol (6P)", RFC 8480, | "Definition of the Differentiated Services Field (DS | |||
| DOI 10.17487/RFC8480, November 2018, | Field) in the IPv4 and IPv6 Headers", RFC 2474, | |||
| <https://www.rfc-editor.org/info/rfc8480>. | DOI 10.17487/RFC2474, December 1998, | |||
| <https://www.rfc-editor.org/info/rfc2474>. | ||||
| [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | |||
| Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | |||
| JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | |||
| Low-Power and Lossy Networks", RFC 6550, | Low-Power and Lossy Networks", RFC 6550, | |||
| DOI 10.17487/RFC6550, March 2012, | DOI 10.17487/RFC6550, March 2012, | |||
| <https://www.rfc-editor.org/info/rfc6550>. | <https://www.rfc-editor.org/info/rfc6550>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Requirement Levels", BCP 14, RFC 2119, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| DOI 10.17487/RFC2119, March 1997, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, | [RFC8180] Vilajosana, X., Ed., Pister, K., and T. Watteyne, "Minimal | |||
| "Definition of the Differentiated Services Field (DS | IPv6 over the TSCH Mode of IEEE 802.15.4e (6TiSCH) | |||
| Field) in the IPv4 and IPv6 Headers", RFC 2474, | Configuration", BCP 210, RFC 8180, DOI 10.17487/RFC8180, | |||
| DOI 10.17487/RFC2474, December 1998, | May 2017, <https://www.rfc-editor.org/info/rfc8180>. | |||
| <https://www.rfc-editor.org/info/rfc2474>. | ||||
| [I-D.ietf-6tisch-minimal-security] | [RFC8480] Wang, Q., Ed., Vilajosana, X., and T. Watteyne, "6TiSCH | |||
| Vucinic, M., Simon, J., Pister, K., and M. Richardson, | Operation Sublayer (6top) Protocol (6P)", RFC 8480, | |||
| "Constrained Join Protocol (CoJP) for 6TiSCH", Work in | DOI 10.17487/RFC8480, November 2018, | |||
| Progress, Internet-Draft, draft-ietf-6tisch-minimal- | <https://www.rfc-editor.org/info/rfc8480>. | |||
| security-15, December 10, 2019, | ||||
| <https://tools.ietf.org/html/draft-ietf-6tisch-minimal- | ||||
| security-15>. | ||||
| [I-D.ietf-6tisch-enrollment-enhanced-beacon] | [RFC9030] Thubert, P., Ed., "An Architecture for IPv6 over the Time- | |||
| Dujovne, D. and M. Richardson, "IEEE 802.15.4 Information | Slotted Channel Hopping Mode of IEEE 802.15.4 (6TiSCH)", | |||
| Element encapsulation of 6TiSCH Join and Enrollment | RFC 9030, DOI 10.17487/RFC9030, May 2021, | |||
| Information", Work in Progress, Internet-Draft, draft- | <https://www.rfc-editor.org/info/rfc9030>. | |||
| ietf-6tisch-enrollment-enhanced-beacon-14, February 21, | ||||
| 2020, <https://tools.ietf.org/html/draft-ietf-6tisch- | ||||
| enrollment-enhanced-beacon-14>. | ||||
| [I-D.ietf-6tisch-architecture] | [RFC9031] Vučinić, M., Ed., Simon, J., Pister, K., and M. | |||
| Thubert, P., "An Architecture for IPv6 over the TSCH mode | Richardson, "Constrained Join Protocol (CoJP) for 6TiSCH", | |||
| of IEEE 802.15.4", Work in Progress, Internet-Draft, | RFC 9031, DOI 10.17487/RFC9031, May 2021, | |||
| draft-ietf-6tisch-architecture-28, October 29, 2019, | <https://www.rfc-editor.org/info/rfc9031>. | |||
| <https://tools.ietf.org/html/draft-ietf-6tisch- | ||||
| architecture-28>. | ||||
| [IEEE802154] | [RFC9032] Dujovne, D., Ed. and M. Richardson, "Encapsulation of | |||
| IEEE standard for Information Technology, "IEEE Std | 6TiSCH Join and Enrollment Information Elements", | |||
| 802.15.4 Standard for Low-Rate Wireless Personal Area | RFC 9032, DOI 10.17487/RFC9032, May 2021, | |||
| Networks (WPANs)", DOI 10.1109/IEEE P802.15.4-REVd/D01, | <https://www.rfc-editor.org/info/rfc9032>. | |||
| <http://ieeexplore.ieee.org/document/7460875/>. | ||||
| [SAX-DASFAA] | [SAX-DASFAA] | |||
| Ramakrishna, M.V. and J. Zobel, "Performance in Practice | Ramakrishna, M.V. and J. Zobel, "Performance in Practice | |||
| of String Hashing Functions", DASFAA , | of String Hashing Functions", DASFAA, | |||
| DOI 10.1142/9789812819536_0023, 1997, | DOI 10.1142/9789812819536_0023, 1997, | |||
| <https://doi.org/10.1142/9789812819536_0023>. | <https://doi.org/10.1142/9789812819536_0023>. | |||
| 19.2. Informative References | 18.2. Informative References | |||
| [RFC6206] Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko, | ||||
| "The Trickle Algorithm", RFC 6206, DOI 10.17487/RFC6206, | ||||
| March 2011, <https://www.rfc-editor.org/info/rfc6206>. | ||||
| [RFC7554] Watteyne, T., Ed., Palattella, M., and L. Grieco, "Using | [RFC7554] Watteyne, T., Ed., Palattella, M., and L. Grieco, "Using | |||
| IEEE 802.15.4e Time-Slotted Channel Hopping (TSCH) in the | IEEE 802.15.4e Time-Slotted Channel Hopping (TSCH) in the | |||
| Internet of Things (IoT): Problem Statement", RFC 7554, | Internet of Things (IoT): Problem Statement", RFC 7554, | |||
| DOI 10.17487/RFC7554, May 2015, | DOI 10.17487/RFC7554, May 2015, | |||
| <https://www.rfc-editor.org/info/rfc7554>. | <https://www.rfc-editor.org/info/rfc7554>. | |||
| [I-D.ietf-6tisch-dtsecurity-zerotouch-join] | ||||
| Richardson, M., "6tisch Zero-Touch Secure Join protocol", | ||||
| Work in Progress, Internet-Draft, draft-ietf-6tisch- | ||||
| dtsecurity-zerotouch-join-04, July 8, 2019, | ||||
| <https://tools.ietf.org/html/draft-ietf-6tisch-dtsecurity- | ||||
| zerotouch-join-04>. | ||||
| [RFC6206] Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko, | ||||
| "The Trickle Algorithm", RFC 6206, DOI 10.17487/RFC6206, | ||||
| March 2011, <https://www.rfc-editor.org/info/rfc6206>. | ||||
| [RFC8505] Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C. | [RFC8505] Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C. | |||
| Perkins, "Registration Extensions for IPv6 over Low-Power | Perkins, "Registration Extensions for IPv6 over Low-Power | |||
| Wireless Personal Area Network (6LoWPAN) Neighbor | Wireless Personal Area Network (6LoWPAN) Neighbor | |||
| Discovery", RFC 8505, DOI 10.17487/RFC8505, November 2018, | Discovery", RFC 8505, DOI 10.17487/RFC8505, November 2018, | |||
| <https://www.rfc-editor.org/info/rfc8505>. | <https://www.rfc-editor.org/info/rfc8505>. | |||
| Appendix A. Example of Implementation of SAX hash function | [ZEROTOUCH-JOIN] | |||
| Richardson, M., "6tisch Zero-Touch Secure Join protocol", | ||||
| Work in Progress, Internet-Draft, draft-ietf-6tisch- | ||||
| dtsecurity-zerotouch-join-04, 8 July 2019, | ||||
| <https://tools.ietf.org/html/draft-ietf-6tisch-dtsecurity- | ||||
| zerotouch-join-04>. | ||||
| Considering the interoperability, this section provides an example of | Appendix A. Example Implementation of the SAX Hash Function | |||
| implemention SAX hash function [SAX-DASFAA]. The input parameters of | ||||
| the function are: | ||||
| * T, which is the hashing table length | To support interoperability, this section provides an example | |||
| * c, which is the characters of string s, to be hashed | implementation of the SAX hash function [SAX-DASFAA]. The input | |||
| parameters of the function are: | ||||
| * T, which is the hashing table length. | ||||
| * c, which is the characters of string s, to be hashed. | ||||
| In MSF, the T is replaced by the length of slotframe 1. String s is | In MSF, the T is replaced by the length of slotframe 1. String s is | |||
| replaced by the mote EUI64 address. The characters of the string c0, | replaced by the node EUI-64 address. The characters of the string, | |||
| c1, ..., c7 are the 8 bytes of EUI64 address. | c0 through c7, are the eight bytes of the EUI-64 address. | |||
| The SAX hash function requires shift operation which is defined as | The SAX hash function requires shift operation, which is defined as | |||
| follow: | follow: | |||
| * L_shift(v,b), which refers to left shift variable v by b bits | * L_shift(v,b), which refers to the left shift of variable v by b | |||
| * R_shift(v,b), which refers to right shift variable v by b bits | bits | |||
| * R_shift(v,b), which refers to the right shift of variable v by b | ||||
| bits | ||||
| The steps to calculate the hash value of SAX hash function are: | The steps to calculate the hash value of SAX hash function are: | |||
| 1. initialize variable h to h0 and variable i to 0, where h is the | 1. Initialize variable h, which is the intermediate hash value, to | |||
| intermediate hash value and i is the index of the bytes of EUI64 | h0 and variable i, which is the index of the bytes of the EUI-64 | |||
| address | address, to 0. | |||
| 2. sum the value of L_shift(h,l_bit), R_shift(h,r_bit) and ci | ||||
| 3. calculate the result of exclusive or between the sum value in | ||||
| Step 2 and h | ||||
| 4. modulo the result of Step 3 by T | ||||
| 5. assign the result of Step 4 to h | ||||
| 6. increase i by 1 | ||||
| 7. repeat Step2 to Step 6 until i reaches to 8 | ||||
| The value of variable h is the hash value of SAX hash function. | 2. Sum the value of L_shift(h,l_bit), R_shift(h,r_bit), and ci. | |||
| The values of h0, l_bit and r_bit in Step 1 and 2 are configured as: | 3. Calculate the result of the exclusive OR between the sum value in | |||
| Step 2 and h. | ||||
| * h0 = 0 | 4. Modulo the result of Step 3 by T. | |||
| * l_bit = 0 | ||||
| * r_bit = 1 | 5. Assign the result of Step 4 to h. | |||
| 6. Increase i by 1. | ||||
| 7. Repeat Step 2 to Step 6 until i reaches to 8. | ||||
| The value of variable h is the hash value of the SAX hash function. | ||||
| The values of h0, l_bit, and r_bit in Step 1 and Step 2 are | ||||
| configured as: | ||||
| h0 = 0 | ||||
| l_bit = 0 | ||||
| r_bit = 1 | ||||
| The appropriate values of l_bit and r_bit could vary depending on the | The appropriate values of l_bit and r_bit could vary depending on the | |||
| the set of motes' EUI64 address. How to find those values is out of | set of nodes' EUI-64 address. How to find those values is out of the | |||
| the scope of this specification. | scope of this specification. | |||
| Contributors | ||||
| Beshr Al Nahas | ||||
| Chalmers University | ||||
| Email: beshr@chalmers.se | ||||
| Olaf Landsiedel | ||||
| Chalmers University | ||||
| Email: olafl@chalmers.se | ||||
| Yasuyuki Tanaka | ||||
| Toshiba | ||||
| Email: yatch1.tanaka@toshiba.co.jp | ||||
| Authors' Addresses | Authors' Addresses | |||
| Tengfei Chang (editor) | Tengfei Chang (editor) | |||
| Inria | Inria | |||
| 2 rue Simone Iff | 2 rue Simone Iff | |||
| 75012 Paris | 75012 Paris | |||
| France | France | |||
| Email: tengfei.chang@inria.fr | Email: tengfei.chang@gmail.com | |||
| Malisa Vucinic | Mališa Vučinić | |||
| Inria | Inria | |||
| 2 rue Simone Iff | 2 rue Simone Iff | |||
| 75012 Paris | 75012 Paris | |||
| France | France | |||
| Email: malisa.vucinic@inria.fr | Email: malisa.vucinic@inria.fr | |||
| Xavier Vilajosana | Xavier Vilajosana | |||
| Universitat Oberta de Catalunya | Universitat Oberta de Catalunya | |||
| 156 Rambla Poblenou | 156 Rambla Poblenou | |||
| 08018 Barcelona Catalonia | 08018 Barcelona Catalonia | |||
| Spain | Spain | |||
| Email: xvilajosana@uoc.edu | Email: xvilajosana@uoc.edu | |||
| Simon Duquennoy | Simon Duquennoy | |||
| RISE SICS | RISE SICS | |||
| skipping to change at page 22, line 15 ¶ | skipping to change at line 1081 ¶ | |||
| Universitat Oberta de Catalunya | Universitat Oberta de Catalunya | |||
| 156 Rambla Poblenou | 156 Rambla Poblenou | |||
| 08018 Barcelona Catalonia | 08018 Barcelona Catalonia | |||
| Spain | Spain | |||
| Email: xvilajosana@uoc.edu | Email: xvilajosana@uoc.edu | |||
| Simon Duquennoy | Simon Duquennoy | |||
| RISE SICS | RISE SICS | |||
| Isafjordsgatan 22 | Isafjordsgatan 22 | |||
| 164 29 Kista | SE-164 29 Kista | |||
| Sweden | Sweden | |||
| Email: simon.duquennoy@gmail.com | Email: simon.duquennoy@gmail.com | |||
| Diego Dujovne | Diego Dujovne | |||
| Universidad Diego Portales | Universidad Diego Portales | |||
| Escuela de Informatica y Telecomunicaciones | Escuela de Informática y Telecomunicaciones | |||
| Av. Ejercito 441 | Av. Ejército 441 | |||
| Santiago | Santiago | |||
| Region Metropolitana | Región Metropolitana | |||
| Chile | Chile | |||
| Phone: +56 (2) 676-8121 | Phone: +56 (2) 676-8121 | |||
| Email: diego.dujovne@mail.udp.cl | Email: diego.dujovne@mail.udp.cl | |||
| End of changes. 167 change blocks. | ||||
| 493 lines changed or deleted | 589 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||