draft-ietf-roll-trickle-mcast-12.txt | rfc7731.txt | |||
---|---|---|---|---|
ROLL J. Hui | Internet Engineering Task Force (IETF) J. Hui | |||
Internet-Draft Nest Labs | Request for Comments: 7731 Nest Labs | |||
Intended status: Standards Track R. Kelsey | Category: Standards Track R. Kelsey | |||
Expires: December 4, 2015 Silicon Labs | ISSN: 2070-1721 Silicon Labs | |||
June 2, 2015 | February 2016 | |||
Multicast Protocol for Low power and Lossy Networks (MPL) | Multicast Protocol for Low-Power and Lossy Networks (MPL) | |||
draft-ietf-roll-trickle-mcast-12 | ||||
Abstract | Abstract | |||
This document specifies the Multicast Protocol for Low power and | This document specifies the Multicast Protocol for Low-Power and | |||
Lossy Networks (MPL) that provides IPv6 multicast forwarding in | Lossy Networks (MPL), which provides IPv6 multicast forwarding in | |||
constrained networks. MPL avoids the need to construct or maintain | constrained networks. MPL avoids the need to construct or maintain | |||
any multicast forwarding topology, disseminating messages to all MPL | any multicast forwarding topology, disseminating messages to all MPL | |||
Forwarders in a MPL Domain. | Forwarders in an MPL Domain. | |||
MPL has two modes of operation. One mode uses the Trickle algorithm | MPL has two modes of operation. One mode uses the Trickle algorithm | |||
to manage control- and data-plane message transmissions, and is | to manage control-plane and data-plane message transmissions and is | |||
applicable for deployments with few multicast sources. The other | applicable for deployments with few multicast sources. The other | |||
mode uses classic flooding. By providing both modes and | mode uses classic flooding. By providing both modes and | |||
parameterization of the Trickle algorithm, a MPL implementation can | parameterization of the Trickle algorithm, an MPL implementation can | |||
be used in a variety of multicast deployments and can trade between | be used in a variety of multicast deployments and can trade between | |||
dissemination latency and transmission efficiency. | dissemination latency and transmission efficiency. | |||
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 http://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 5741. | ||||
This Internet-Draft will expire on December 4, 2015. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
http://www.rfc-editor.org/info/rfc7731. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2016 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 | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction ....................................................4 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology .....................................................5 | |||
3. Applicability Statement . . . . . . . . . . . . . . . . . . . 5 | 3. Applicability Statement .........................................6 | |||
4. MPL Protocol Overview . . . . . . . . . . . . . . . . . . . . 6 | 4. MPL Protocol Overview ...........................................7 | |||
4.1. MPL Domains . . . . . . . . . . . . . . . . . . . . . . . 6 | 4.1. MPL Domains ................................................7 | |||
4.2. Information Base Overview . . . . . . . . . . . . . . . . 7 | 4.2. Information Base Overview ..................................8 | |||
4.3. Protocol Overview . . . . . . . . . . . . . . . . . . . . 7 | 4.3. Protocol Overview ..........................................8 | |||
4.4. Signaling Overview . . . . . . . . . . . . . . . . . . . 9 | 4.4. Signaling Overview ........................................10 | |||
5. MPL Parameters and Constants . . . . . . . . . . . . . . . . 9 | 5. MPL Parameters and Constants ...................................11 | |||
5.1. MPL Multicast Addresses . . . . . . . . . . . . . . . . . 9 | 5.1. MPL Multicast Addresses ...................................11 | |||
5.2. MPL Message Types . . . . . . . . . . . . . . . . . . . . 10 | 5.2. MPL Message Types .........................................11 | |||
5.3. MPL Seed Identifiers . . . . . . . . . . . . . . . . . . 10 | 5.3. MPL Seed Identifiers ......................................11 | |||
5.4. MPL Parameters . . . . . . . . . . . . . . . . . . . . . 10 | 5.4. MPL Parameters ............................................11 | |||
6. Protocol Message Formats . . . . . . . . . . . . . . . . . . 12 | 6. Protocol Message Formats .......................................14 | |||
6.1. MPL Option . . . . . . . . . . . . . . . . . . . . . . . 12 | 6.1. MPL Option ................................................14 | |||
6.2. MPL Control Message . . . . . . . . . . . . . . . . . . . 14 | 6.2. MPL Control Message .......................................15 | |||
6.3. MPL Seed Info . . . . . . . . . . . . . . . . . . . . . . 15 | 6.3. MPL Seed Info .............................................16 | |||
7. Information Base . . . . . . . . . . . . . . . . . . . . . . 16 | 7. Information Base ...............................................17 | |||
7.1. Local Interface Set . . . . . . . . . . . . . . . . . . . 16 | 7.1. Local Interface Set .......................................17 | |||
7.2. Domain Set . . . . . . . . . . . . . . . . . . . . . . . 16 | 7.2. Domain Set ................................................18 | |||
7.3. Seed Set . . . . . . . . . . . . . . . . . . . . . . . . 16 | 7.3. Seed Set ..................................................18 | |||
7.4. Buffered Message Set . . . . . . . . . . . . . . . . . . 16 | 7.4. Buffered Message Set ......................................18 | |||
8. MPL Seed Sequence Numbers . . . . . . . . . . . . . . . . . . 17 | 8. MPL Seed Sequence Numbers ......................................19 | |||
9. MPL Data Messages . . . . . . . . . . . . . . . . . . . . . . 17 | 9. MPL Data Messages ..............................................19 | |||
9.1. MPL Data Message Generation . . . . . . . . . . . . . . . 17 | 9.1. MPL Data Message Generation ...............................19 | |||
9.2. MPL Data Message Transmission . . . . . . . . . . . . . . 18 | 9.2. MPL Data Message Transmission .............................20 | |||
9.3. MPL Data Message Processing . . . . . . . . . . . . . . . 19 | 9.3. MPL Data Message Processing ...............................21 | |||
10. MPL Control Messages . . . . . . . . . . . . . . . . . . . . 20 | 10. MPL Control Messages ..........................................22 | |||
10.1. MPL Control Message Generation . . . . . . . . . . . . . 20 | 10.1. MPL Control Message Generation ...........................22 | |||
10.2. MPL Control Message Transmission . . . . . . . . . . . . 20 | 10.2. MPL Control Message Transmission .........................22 | |||
10.3. MPL Control Message Processing . . . . . . . . . . . . . 21 | 10.3. MPL Control Message Processing ...........................23 | |||
11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 22 | 11. IANA Considerations ...........................................24 | |||
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | 11.1. MPL Option Type ..........................................24 | |||
12.1. MPL Option Type . . . . . . . . . . . . . . . . . . . . 22 | 11.2. MPL ICMPv6 Type ..........................................25 | |||
12.2. MPL ICMPv6 Type . . . . . . . . . . . . . . . . . . . . 23 | 11.3. Well-Known Multicast Addresses ...........................25 | |||
12.3. Well-known Multicast Addresses . . . . . . . . . . . . . 23 | 12. Security Considerations .......................................25 | |||
13. References ....................................................26 | ||||
13. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | 13.1. Normative References .....................................26 | |||
14. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 13.2. Informative References ...................................28 | |||
14.1. Normative References . . . . . . . . . . . . . . . . . . 24 | Acknowledgements ..................................................29 | |||
14.2. Informative References . . . . . . . . . . . . . . . . . 25 | Authors' Addresses ................................................29 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 26 | ||||
1. Introduction | 1. Introduction | |||
Low power and Lossy Networks (LLNs) typically operate with strict | Low-Power and Lossy Networks (LLNs) typically operate with strict | |||
resource constraints in communication, computation, memory, and | resource constraints in communication, computation, memory, and | |||
energy. Such resource constraints may preclude the use of existing | energy. Such resource constraints may preclude the use of existing | |||
IPv6 multicast routing and forwarding mechanisms. Traditional IP | IPv6 multicast routing and forwarding mechanisms. Traditional IP | |||
multicast delivery typically relies on topology maintenance | multicast delivery typically relies on topology maintenance | |||
mechanisms to discover and maintain routes to all subscribers of a | mechanisms to discover and maintain routes to all subscribers of a | |||
multicast group (e.g. [RFC3973] [RFC4601]). However, maintaining | multicast group (e.g., [RFC3973] [RFC4601]). However, maintaining | |||
such topologies in Low power and Lossy Networks is costly and may not | such topologies in LLNs is costly and may not be feasible given the | |||
be feasible given the available resources. | available resources. | |||
Memory constraints may limit devices to maintaining links/routes to | Memory constraints may limit devices to maintaining links/routes to | |||
one or a few neighbors. For this reason, the Routing Protocol for | one or a few neighbors. For this reason, the Routing Protocol for | |||
LLNs (RPL) specifies both storing and non-storing modes [RFC6550]. | LLNs (RPL) specifies both storing and non-storing modes [RFC6550]. | |||
The latter allows RPL routers to maintain only one or a few default | The latter allows RPL routers to maintain only one or a few default | |||
routes towards a LLN Border Router (LBR) and use source routing to | routes towards an LLN Border Router (LBR) and use source routing to | |||
forward messages away from the LBR. For the same reasons, a LLN | forward messages away from the LBR. For the same reasons, an LLN | |||
device may not be able to maintain a multicast routing topology when | device may not be able to maintain a multicast routing topology when | |||
operating with limited memory. | operating with limited memory. | |||
Furthermore, the dynamic properties of wireless networks can make the | Furthermore, the dynamic properties of wireless networks can make the | |||
cost of maintaining a multicast routing topology prohibitively | cost of maintaining a multicast routing topology prohibitively | |||
expensive. In wireless environments, topology maintenance may | expensive. In wireless environments, topology maintenance may | |||
involve selecting a connected dominating set used to forward | involve selecting a connected dominating set used to forward | |||
multicast messages to all nodes in an administrative domain. | multicast messages to all nodes in an administrative domain. | |||
However, existing mechanisms often require two-hop topology | However, existing mechanisms often require two-hop topology | |||
information and the cost of maintaining such information grows | information, and the cost of maintaining such information grows | |||
polynomially with network density. | polynomially with network density. | |||
This document specifies the Multicast Protocol for Low power and | This document specifies the Multicast Protocol for Low-Power and | |||
Lossy Networks (MPL), which provides IPv6 multicast forwarding in | Lossy Networks (MPL), which provides IPv6 multicast forwarding in | |||
constrained networks. MPL avoids the need to construct or maintain | constrained networks. MPL avoids the need to construct or maintain | |||
any multicast routing topology, disseminating multicast messages to | any multicast routing topology, disseminating multicast messages to | |||
all MPL Forwarders in a MPL Domain. By using the Trickle algorithm | all MPL Forwarders in an MPL Domain. By using the Trickle algorithm | |||
[RFC6206], MPL requires only small, constant state for each MPL | [RFC6206], MPL requires only small, constant state for each MPL | |||
device that initiates disseminations. The Trickle algorithm also | device that initiates disseminations. The Trickle algorithm also | |||
allows MPL to be density-aware, allowing the communication rate to | allows MPL to be density aware, allowing the communication rate to | |||
scale logarithmically with density. | scale logarithmically with density. | |||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
[RFC2119]. | [RFC2119]. | |||
The following terms are used throughout this document: | The following terms are used throughout this document: | |||
MPL Forwarder - A router that implements MPL. A MPL Forwarder | MPL Forwarder - A router that implements MPL. An MPL Forwarder is | |||
is equipped with at least one MPL Interface. | equipped with at least one MPL Interface. | |||
MPL Interface - A MPL Forwarder's attachment to a | MPL Interface - An MPL Forwarder's attachment to a communications | |||
communications medium, over which it transmits | medium, over which it transmits and receives MPL Data Messages and | |||
and receives MPL Data Messages and MPL Control | MPL Control Messages according to this specification. An MPL | |||
Messages according to this specification. A MPL | Interface is assigned one or more unicast addresses and is | |||
Interface is assigned one or more unicast | subscribed to one or more MPL Domain Addresses. | |||
addresses and is subscribed to one or more MPL | ||||
Domain Addresses. | ||||
MPL Domain Address - A multicast address that identifies the set of | MPL Domain Address - A multicast address that identifies the set of | |||
MPL Interfaces within a MPL Domain. MPL Data | MPL Interfaces within an MPL Domain. MPL Data Messages | |||
Messages disseminated in a MPL Domain have the | disseminated in an MPL Domain have the associated MPL Domain | |||
associated MPL Domain Address as their | Address as their destination address. | |||
destination address. | ||||
MPL Domain - A scope zone, as defined in [RFC4007], in which | MPL Domain - A scope zone, as defined in [RFC4007], in which MPL | |||
MPL Interfaces subscribe to the same MPL Domain | Interfaces subscribe to the same MPL Domain Address and | |||
Address and participate in disseminating MPL Data | participate in disseminating MPL Data Messages. | |||
Messages. | ||||
MPL Data Message - A multicast message that is used to communicate | MPL Data Message - A multicast message that is used to communicate a | |||
a multicast payload between MPL Forwarders within | multicast payload between MPL Forwarders within an MPL Domain. An | |||
a MPL domain. A MPL Data Message contains a MPL | MPL Data Message contains an MPL Option in the IPv6 header and has | |||
Option in the IPv6 header and has as its | as its destination address the MPL Domain Address corresponding to | |||
destination address the MPL Domain Address | the MPL Domain. | |||
corresponding to the MPL Domain. | ||||
MPL Control Message - A link-local multicast message that is used to | MPL Control Message - A link-local multicast message that is used to | |||
communicate information about recently received | communicate information about recently received MPL Data Messages | |||
MPL Data Messages to neighboring MPL Forwarders. | to neighboring MPL Forwarders. | |||
MPL Seed - A MPL Forwarder that generates MPL Data | MPL Seed - An MPL Forwarder that generates MPL Data Messages and | |||
Messages and serves as an entry point into a MPL | serves as an entry point into an MPL Domain. | |||
Domain. | ||||
MPL Seed Identifier - An unsigned integer that uniquely identifies a | MPL Seed Identifier - An unsigned integer that uniquely identifies | |||
MPL Seed within a MPL Domain. | an MPL Seed within an MPL Domain. | |||
Node - The term "node" is used within this document to | Node - Used within this document to refer to an MPL Forwarder. | |||
refer to a MPL Forwarder. | ||||
3. Applicability Statement | 3. Applicability Statement | |||
MPL is an IPv6 multicast forwarding protocol designed for the | MPL is an IPv6 multicast forwarding protocol designed for the | |||
communication characteristics and resource constraints of Low-Power | communication characteristics and resource constraints of LLNs. By | |||
and Lossy Networks. By implementing controlled disseminations of | implementing controlled disseminations of multicast messages using | |||
multicast messages using the Trickle algorithm, MPL is designed for | the Trickle algorithm, MPL is designed for networks that communicate | |||
networks that communicate using low-power and lossy links with widely | using low-power and lossy links with widely varying topologies in | |||
varying topologies in both the space and time dimensions. | both the space and time dimensions. | |||
While designed specifically for Low-Power and Lossy Networks, MPL is | While designed specifically for LLNs, MPL is not limited to use over | |||
not limited to use over such networks. MPL may be applicable to any | such networks. MPL may be applicable to any network where no | |||
network where no multicast routing state is desired. MPL may also be | multicast routing state is desired. MPL may also be used in | |||
used in environments where only a subset of links are considered Low- | environments where only a subset of links are considered low-power | |||
Power and Lossy links. | and lossy links. | |||
A host need not be aware that their multicast is supported by MPL as | A host need not be aware that their multicast is supported by MPL as | |||
long as its attachment router forwards multicast messages between the | long as its attachment router forwards multicast messages between the | |||
MPL Domain and the host. However, a host may choose to implement MPL | MPL Domain and the host. However, a host may choose to implement MPL | |||
so that it can take advantage of the broadcast medium inherent in | so that it can take advantage of the broadcast medium inherent in | |||
many Low-Power and Lossy Networks and receive multicast messages | many LLNs and receive multicast messages carried by MPL directly. | |||
carried by MPL directly. | ||||
MPL is parameterized to support different dissemination techniques. | MPL is parameterized to support different dissemination techniques. | |||
In one parameterization, MPL may utilize the classic flooding method | In one parameterization, MPL may utilize the classic flooding method | |||
that involves having each device receiving a message rebroadcast the | that involves having each device receiving a message rebroadcast the | |||
message. In another parameterization, MPL may utilize Trickle's | message. In another parameterization, MPL may utilize Trickle's | |||
[RFC6206] "polite gossip" method that involves transmission | [RFC6206] "polite gossip" method, which involves transmission | |||
suppression and adaptive timing techniques. [Clausen2013] questions | suppression and adaptive timing techniques. [Clausen2013] questions | |||
the efficiency of Trickle's "polite gossip" mechanism in some | the efficiency of Trickle's "polite gossip" mechanism in some | |||
multicast scenarios, so by also including a classic flooding mode of | multicast scenarios, so by also including a classic flooding mode of | |||
operation MPL aims to be able to perform satisfactorily in a variety | operation MPL aims to be able to perform satisfactorily in a variety | |||
of situations. | of situations. | |||
To support efficient message delivery in networks that have many poor | To support efficient message delivery in networks that have many poor | |||
links, MPL supports a reactive forwarding mode that utilizes MPL | links, MPL supports a reactive forwarding mode that utilizes MPL | |||
Control Messages to summarize the current multicast state. The MPL | Control Messages to summarize the current multicast state. The MPL | |||
Control Message size grows linearly with the number of simultaneous | Control Message size grows linearly with the number of simultaneous | |||
MPL Seeds in the MPL Domain - 4 octets per MPL Seed. When reactive | MPL Seeds in the MPL Domain -- 4 octets per MPL Seed. When reactive | |||
forwarding is not enabled, MPL Control Messages are not transmitted | forwarding is not enabled, MPL Control Messages are not transmitted, | |||
and the associated overhead is not incurred. | and the associated overhead is not incurred. | |||
This document does not specify a cryptographic security mechanism for | This document does not specify a cryptographic security mechanism for | |||
MPL to ensure that MPL messages are not spoofed by anyone with access | MPL to ensure that MPL messages are not spoofed by anyone with access | |||
to the LLN. In general, the basic ability to inject messages into a | to the LLN. In general, the basic ability to inject messages into an | |||
Low-power and Lossy Network may be used as a denial-of-service attack | LLN may be used as a denial-of-service attack, regardless of what | |||
regardless of what forwarding protocol is used. For these reasons, | forwarding protocol is used. For these reasons, LLNs typically | |||
Low-power and Lossy Networks typically employ link-layer security | employ link-layer security mechanisms to mitigate an attacker's | |||
mechanisms to mitigate an attacker's ability to inject messages. For | ability to inject messages. For example, the IEEE 802.15.4 | |||
example, the IEEE 802.15.4 [IEEE802154] standard specifies frame | [IEEE802.15.4] standard specifies frame security mechanisms using | |||
security mechanisms using AES-128 to support access control, message | AES-128 to support access control, message integrity, message | |||
integrity, message confidentiality, and replay protection. However, | confidentiality, and replay protection. However, if the attack | |||
if the attack vector includes attackers that have access to the LLN, | vector includes attackers that have access to the LLN, then MPL | |||
then MPL SHOULD NOT be used. | SHOULD NOT be used. | |||
4. MPL Protocol Overview | 4. MPL Protocol Overview | |||
The goal of MPL is to deliver multicast messages to all interfaces | The goal of MPL is to deliver multicast messages to all interfaces | |||
that subscribe to the multicast messages' destination address within | that subscribe to the multicast messages' destination address within | |||
a MPL Domain. | an MPL Domain. | |||
4.1. MPL Domains | 4.1. MPL Domains | |||
A MPL Domain is a scope zone, as defined in [RFC4007], in which MPL | An MPL Domain is a scope zone, as defined in [RFC4007], in which MPL | |||
Interfaces subscribe to the same MPL Domain Address and participate | Interfaces subscribe to the same MPL Domain Address and participate | |||
in disseminating MPL Data Messages. | in disseminating MPL Data Messages. | |||
When participating in only one MPL Domain, the MPL Domain Address is | When participating in only one MPL Domain, the MPL Domain Address is | |||
the ALL_MPL_FORWARDERS multicast address with Realm-Local scope (scop | the ALL_MPL_FORWARDERS multicast address with Realm-Local scope | |||
value 3) [RFC7346]. | ("scop" value 3) [RFC7346]. | |||
When a MPL Forwarder participates in multiple MPL Domains | When an MPL Forwarder participates in multiple MPL Domains | |||
simultaneously, at most one MPL Domain may be assigned a MPL Domain | simultaneously, at most one MPL Domain may be assigned an MPL Domain | |||
Address equal to the ALL_MPL_FORWARDERS multicast address. All other | Address equal to the ALL_MPL_FORWARDERS multicast address. All other | |||
MPL Domains MUST be assigned a unique MPL Domain Address that allows | MPL Domains MUST be assigned a unique MPL Domain Address that allows | |||
the MPL Forwarder to identify each MPL Domain. The MPL Domains | the MPL Forwarder to identify each MPL Domain. The MPL Domains | |||
SHOULD be configured automatically based on some underlying topology. | SHOULD be configured automatically based on some underlying topology. | |||
For example, when using RPL [RFC6550], MPL Domains may be configured | For example, when using RPL [RFC6550], MPL Domains may be configured | |||
based on RPL Instances. | based on RPL Instances. | |||
When MPL is used in deployments that use administratively defined | When MPL is used in deployments that use administratively defined | |||
scopes that cover, for example, multiple subnets based on different | scopes that cover, for example, multiple subnets based on different | |||
underlying network technologies, Admin-Local scope (scop value 4) or | underlying network technologies, Admin-Local scope (scop value 4) or | |||
Site-Local scope (scop value 5) SHOULD be used. | Site-Local scope (scop value 5) SHOULD be used. | |||
A MPL Forwarder MAY participate in additional MPL Domains identified | An MPL Forwarder MAY participate in additional MPL Domains identified | |||
by other multicast addresses. A MPL Interface MUST subscribe to the | by other multicast addresses. An MPL Interface MUST subscribe to the | |||
MPL Domain Addresses for the MPL Domains that it participates in. | MPL Domain Addresses for the MPL Domains that it participates in. | |||
The assignment of other multicast addresses is out of scope. | The assignment of other multicast addresses is out of scope. | |||
For each MPL Domain Address that a MPL Interface subscribes to, the | For each MPL Domain Address that an MPL Interface subscribes to, the | |||
MPL Interface MUST also subscribe to the same MPL Domain Address with | MPL Interface MUST also subscribe to the same MPL Domain Address with | |||
Link-Local scope (scop value 2) when reactive forwarding is in use | Link-Local scope (scop value 2) when reactive forwarding is in use | |||
(i.e. when communicating MPL Control Messages). | (i.e., when communicating MPL Control Messages). | |||
4.2. Information Base Overview | 4.2. Information Base Overview | |||
A node records necessary protocol state in the following information | A node records necessary protocol state in the following | |||
sets: | information sets: | |||
o The Local Interface Set records the set of local MPL Interfaces | o The Local Interface Set records the set of local MPL Interfaces | |||
and the unicast addresses assigned to those MPL Interfaces. | and the unicast addresses assigned to those MPL Interfaces. | |||
o The Domain Set records the set of MPL Domain Addresses and the | o The Domain Set records the set of MPL Domain Addresses and the | |||
local MPL Interfaces that subscribe to those addresses. | local MPL Interfaces that subscribe to those addresses. | |||
o A Seed Set records information about received MPL Data Messages | o A Seed Set records information about received MPL Data Messages | |||
received from a MPL Seed within a MPL Domain. Each MPL Domain has | received from an MPL Seed within an MPL Domain. Each MPL Domain | |||
an associated Seed Set. A Seed Set maintains the minimum sequence | has an associated Seed Set. A Seed Set maintains the minimum | |||
number for MPL Data Messages that the MPL Forwarder is willing to | sequence number for MPL Data Messages that the MPL Forwarder is | |||
receive or has buffered in its Buffered Message Set from a MPL | willing to receive or has buffered in its Buffered Message Set | |||
Seed. MPL uses Seed Sets and Buffered Message Sets to determine | from an MPL Seed. MPL uses Seed Sets and Buffered Message Sets to | |||
when to accept a MPL Data Message, process its payload, and | determine when to accept an MPL Data Message, process its payload, | |||
retransmit it. | and retransmit it. | |||
o A Buffered Message Set records recently received MPL Data Messages | o A Buffered Message Set records recently received MPL Data Messages | |||
from a MPL Seed within a MPL Domain. Each MPL Domain has an | from an MPL Seed within an MPL Domain. Each MPL Domain has an | |||
associated Buffered Message Set. MPL Data Messages resident in a | associated Buffered Message Set. MPL Data Messages resident in a | |||
Buffered Message Set have sequence numbers that are greater than | Buffered Message Set have sequence numbers that are greater than | |||
or equal to the minimum threshold maintained in the corresponding | or equal to the minimum threshold maintained in the corresponding | |||
Seed Set. MPL uses Buffered Message Sets to store MPL Data | Seed Set. MPL uses Buffered Message Sets to store MPL Data | |||
Messages that may be transmitted by the MPL Forwarder for | Messages that may be transmitted by the MPL Forwarder for | |||
forwarding. | forwarding. | |||
4.3. Protocol Overview | 4.3. Protocol Overview | |||
MPL achieves its goal by implementing a controlled flood that | MPL achieves its goal by implementing a controlled flood that | |||
attempts to disseminate the multicast data message to all interfaces | attempts to disseminate the multicast data message to all interfaces | |||
within a MPL Domain. MPL performs the following tasks to disseminate | within an MPL Domain. MPL performs the following tasks to | |||
a multicast message: | disseminate a multicast message: | |||
o When having a multicast message to forward into a MPL Domain, the | o When having a multicast message to forward into an MPL Domain, the | |||
MPL Seed generates a MPL Data Message that includes the MPL Domain | MPL Seed generates an MPL Data Message that includes the MPL | |||
Address as the IPv6 Destination Address, the MPL Seed Identifier, | Domain Address as the IPv6 Destination Address, the MPL Seed | |||
a newly generated sequence number, and the multicast message. If | Identifier, a newly generated sequence number, and the multicast | |||
the multicast destination address is not the MPL Domain Address, | message. If the multicast destination address is not the MPL | |||
IP-in-IP [RFC2473] is used to encapsulate the multicast message in | Domain Address, IP-in-IP tunneling [RFC2473] is used to | |||
a MPL Data Message, preserving the original IPv6 Destination | encapsulate the multicast message in an MPL Data Message, | |||
Address. | preserving the original IPv6 Destination Address. | |||
o Upon receiving a MPL Data Message, the MPL Forwarder extracts the | o Upon receiving an MPL Data Message, the MPL Forwarder extracts the | |||
MPL Seed and sequence number and determines whether or not the MPL | MPL Seed and sequence number and determines whether or not the MPL | |||
Data Message was previously received using the MPL Domain's Seed | Data Message was previously received using the MPL Domain's Seed | |||
Set and Buffered Message Set. | Set and Buffered Message Set. | |||
* If the sequence number is less than the lower-bound sequence | * If the sequence number is less than the lower-bound sequence | |||
number maintained in the Seed Set or a message with the same | number maintained in the Seed Set or a message with the same | |||
sequence number exists within the Buffered Message Set, the MPL | sequence number exists within the Buffered Message Set, the MPL | |||
Forwarder marks the MPL Data Message as old. | Forwarder marks the MPL Data Message as old. | |||
* Otherwise, the MPL Forwarder marks the MPL Data Message as new. | * Otherwise, the MPL Forwarder marks the MPL Data Message as new. | |||
o For each newly received MPL Data Message, a MPL Forwarder updates | o For each newly received MPL Data Message, an MPL Forwarder updates | |||
the Seed Set, adds the MPL Data Message into the Buffered Message | the Seed Set, adds the MPL Data Message into the Buffered Message | |||
Set, processes its payload, and multicasts the MPL Data Message a | Set, processes its payload, and multicasts the MPL Data Message a | |||
number of times on all MPL Interfaces participating in the same | number of times on all MPL Interfaces participating in the same | |||
MPL Domain to forward the message. | MPL Domain to forward the message. | |||
o Each MPL Forwarder may periodically link-local multicast MPL | o Each MPL Forwarder may periodically link-local multicast MPL | |||
Control Messages on MPL Interfaces to communicate information | Control Messages on MPL Interfaces to communicate information | |||
contained in a MPL Domain's Seed Set and Buffered Message Set. | contained in an MPL Domain's Seed Set and Buffered Message Set. | |||
o Upon receiving a MPL Control Message, a MPL Forwarder determines | o Upon receiving an MPL Control Message, an MPL Forwarder determines | |||
whether there are any new MPL Data Messages that have yet to be | whether or not there are any new MPL Data Messages that have yet | |||
received by the MPL Control Message's source and multicasts those | to be received by the MPL Control Message's source and multicasts | |||
MPL Data Messages. | those MPL Data Messages. | |||
MPL's configuration parameters allow two forwarding strategies for | MPL's configuration parameters allow two forwarding strategies for | |||
disseminating MPL Data Messages via MPL Interfaces. | disseminating MPL Data Messages via MPL Interfaces: | |||
Proactive Forwarding - With proactive forwarding, a MPL Forwarder | Proactive Forwarding - With proactive forwarding, an MPL Forwarder | |||
schedules transmissions of MPL Data Messages using the Trickle | schedules transmissions of MPL Data Messages using the Trickle | |||
algorithm, without any prior indication that neighboring nodes | algorithm, without any prior indication that neighboring nodes | |||
have yet to receive the message. After transmitting the MPL Data | have yet to receive the message. After transmitting the MPL Data | |||
Message a limited number of times, the MPL Forwarder may terminate | Message a limited number of times, the MPL Forwarder may terminate | |||
proactive forwarding for the MPL Data Message. | proactive forwarding for the MPL Data Message. | |||
Reactive Forwarding - With reactive forwarding, a MPL Forwarder | Reactive Forwarding - With reactive forwarding, an MPL Forwarder | |||
link-local multicasts MPL Control Messages using the Trickle | link-local multicasts MPL Control Messages using the Trickle | |||
algorithm [RFC6206]. MPL Forwarders use MPL Control Messages to | algorithm [RFC6206]. MPL Forwarders use MPL Control Messages to | |||
discover new MPL Data Messages that have not yet been received. | discover new MPL Data Messages that have not yet been received. | |||
When discovering that a neighboring MPL Forwarder has not yet | When discovering that a neighboring MPL Forwarder has not yet | |||
received a MPL Data Message, the MPL Forwarder schedules those MPL | received an MPL Data Message, the MPL Forwarder schedules those | |||
Data Messages for transmission using the Trickle algorithm. | MPL Data Messages for transmission using the Trickle algorithm. | |||
Note that the use of proactive and reactive forwarding strategies | Note that, when used within the same MPL Domain, proactive and | |||
within the same MPL Domain are not mutually exclusive and may be used | reactive forwarding strategies are not mutually exclusive and may be | |||
simultaneously. For example, upon receiving a new MPL Data Message | used simultaneously. For example, upon receiving a new MPL Data | |||
when both proactive and reactive forwarding techniques are enabled, a | Message when both proactive and reactive forwarding techniques are | |||
MPL Forwarder will proactively retransmit the MPL Data Message a | enabled, an MPL Forwarder will proactively retransmit the MPL Data | |||
limited number of times and schedule further transmissions upon | Message a limited number of times and schedule further transmissions | |||
receiving MPL Control Messages. | upon receiving MPL Control Messages. | |||
4.4. Signaling Overview | 4.4. Signaling Overview | |||
MPL generates and processes the following messages: | MPL generates and processes the following messages: | |||
MPL Data Message - Generated by a MPL Seed to deliver a multicast | MPL Data Message - Generated by an MPL Seed to deliver a multicast | |||
message across a MPL Domain. The MPL Data Message's source is an | message across an MPL Domain. The MPL Data Message's source is an | |||
address in the Local Interface Set of the MPL Seed that generated | address in the Local Interface Set of the MPL Seed that generated | |||
the message and is valid within the MPL Domain. The MPL Data | the message and is valid within the MPL Domain. The MPL Data | |||
Message's destination is the MPL Domain Address corresponding to | Message's destination is the MPL Domain Address corresponding to | |||
the MPL Domain. A MPL Data Message contains: | the MPL Domain. An MPL Data Message contains: | |||
* The Seed Identifier of the MPL Seed that generated the MPL Data | * The Seed Identifier of the MPL Seed that generated the MPL Data | |||
Message. | Message. | |||
* The sequence number of the MPL Seed that generated the MPL Data | * The sequence number of the MPL Seed that generated the MPL Data | |||
Message. | Message. | |||
* The original multicast message. | * The original multicast message. | |||
MPL Control Message - Generated by a MPL Forwarder to communicate | MPL Control Message - Generated by an MPL Forwarder to communicate | |||
information contained in a MPL Domain's Seed Set and Buffered | information contained in an MPL Domain's Seed Set and Buffered | |||
Message Set to neighboring MPL Forwarders. A MPL Control Message | Message Set to neighboring MPL Forwarders. An MPL Control Message | |||
contains a list of tuples for each entry in the Seed Set. Each | contains a list of tuples for each entry in the Seed Set. Each | |||
tuple contains: | tuple contains: | |||
* The minimum sequence number maintained in the Seed Set for the | * The minimum sequence number maintained in the Seed Set for the | |||
MPL Seed. | MPL Seed. | |||
* A bit-vector indicating the sequence numbers of MPL Data | * A bit-vector indicating the sequence numbers of MPL Data | |||
Messages resident in the Buffered Message Set for the MPL Seed, | Messages resident in the Buffered Message Set for the MPL Seed, | |||
where the first bit represents a sequence number equal to the | where the first bit represents a sequence number equal to the | |||
minimum threshold maintained in the Seed Set. | minimum threshold maintained in the Seed Set. | |||
* The length of the bit-vector. | * The length of the bit-vector. | |||
5. MPL Parameters and Constants | 5. MPL Parameters and Constants | |||
This section describes various program and networking parameters and | This section describes various program and networking parameters and | |||
constants used by MPL. | constants used by MPL. | |||
5.1. MPL Multicast Addresses | 5.1. MPL Multicast Addresses | |||
MPL makes use of MPL Domain Addresses to identify MPL Interfaces of a | MPL makes use of MPL Domain Addresses to identify MPL Interfaces of | |||
MPL Domain. By default, MPL Forwarders subscribe to the | an MPL Domain. By default, MPL Forwarders subscribe to the | |||
ALL_MPL_FORWARDERS multicast address with Realm-Local scope (scop | ALL_MPL_FORWARDERS multicast address with Realm-Local scope (scop | |||
value 3) [RFC7346]. | value 3) [RFC7346]. | |||
For each MPL Domain Address that a MPL Interface subscribes to, the | For each MPL Domain Address that an MPL Interface subscribes to, the | |||
MPL Interface MUST also subscribe to the MPL Domain Address with | MPL Interface MUST also subscribe to the MPL Domain Address with | |||
Link-Local scope (scop value 2) when reactive forwarding is in use. | Link-Local scope (scop value 2) when reactive forwarding is in use. | |||
MPL Forwarders use the link-scoped MPL Domain Address to communicate | MPL Forwarders use the link-scoped MPL Domain Address to communicate | |||
MPL Control Messages to neighboring (i.e. on-link) MPL Forwarders. | MPL Control Messages to neighboring (i.e., on-link) MPL Forwarders. | |||
5.2. MPL Message Types | 5.2. MPL Message Types | |||
MPL defines an IPv6 Option for carrying a MPL Seed Identifier and a | MPL defines an IPv6 Option for carrying an MPL Seed Identifier and a | |||
sequence number within a MPL Data Message. The IPv6 Option Type has | sequence number within an MPL Data Message. The IPv6 Option Type has | |||
value 0x6D. | value 0x6D. | |||
MPL defines an ICMPv6 Message (MPL Control Message) for communicating | MPL defines an ICMPv6 Message (MPL Control Message) for communicating | |||
information contained in a MPL Domain's Seed Set and Buffered Message | information contained in an MPL Domain's Seed Set and Buffered | |||
Set to neighboring MPL Forwarders. The MPL Control Message has | Message Set to neighboring MPL Forwarders. The MPL Control Message | |||
ICMPv6 Type MPL_ICMP_TYPE. | has ICMPv6 Type 159. | |||
5.3. MPL Seed Identifiers | 5.3. MPL Seed Identifiers | |||
MPL uses MPL Seed Identifiers to uniquely identify MPL Seeds within a | MPL uses MPL Seed Identifiers to uniquely identify MPL Seeds within | |||
MPL Domain. For each MPL Domain that the MPL Forwarder serves as a | an MPL Domain. For each MPL Domain that the MPL Forwarder serves as | |||
MPL Seed, the MPL Forwarder MUST have an associated MPL Seed | an MPL Seed, the MPL Forwarder MUST have an associated MPL Seed | |||
Identifier. A MPL Forwarder MAY use the same MPL Seed Identifier | Identifier. An MPL Forwarder MAY use the same MPL Seed Identifier | |||
across multiple MPL Domains, but the MPL Seed Identifier MUST be | across multiple MPL Domains, but the MPL Seed Identifier MUST be | |||
unique within each MPL Domain. The mechanism for assigning and | unique within each MPL Domain. The mechanism for assigning and | |||
verifying uniqueness of MPL Seed Identifiers is not specified in this | verifying uniqueness of MPL Seed Identifiers is not specified in this | |||
document. | document. | |||
5.4. MPL Parameters | 5.4. MPL Parameters | |||
PROACTIVE_FORWARDING A boolean value that indicates whether the MPL | PROACTIVE_FORWARDING - A boolean value that indicates whether or not | |||
Forwarder schedules MPL Data Message transmissions after receiving | the MPL Forwarder schedules MPL Data Message transmissions after | |||
them for the first time. PROACTIVE_FORWARDING has a default value | receiving them for the first time. PROACTIVE_FORWARDING has a | |||
of TRUE. All MPL interfaces on the same link SHOULD be configured | default value of TRUE. All MPL Interfaces on the same link SHOULD | |||
with the same value of PROACTIVE_FORWARDING. An implementation | be configured with the same value of PROACTIVE_FORWARDING. An | |||
MAY choose to vary the value of PROACTIVE_FORWARDING across | implementation MAY choose to vary the value of | |||
interfaces on the same link if reactive forwarding is also in use. | PROACTIVE_FORWARDING across interfaces on the same link if | |||
The mechanism for setting PROACTIVE_FORWARDING is not specified | reactive forwarding is also in use. The mechanism for setting | |||
within this document. | PROACTIVE_FORWARDING is not specified within this document. | |||
SEED_SET_ENTRY_LIFETIME The minimum lifetime for an entry in the | SEED_SET_ENTRY_LIFETIME - The minimum lifetime for an entry in the | |||
Seed Set. SEED_SET_ENTRY_LIFETIME has a default value of 30 | Seed Set. SEED_SET_ENTRY_LIFETIME has a default value of | |||
minutes. It is RECOMMENDED that all MPL Forwarders use the same | 30 minutes. It is RECOMMENDED that all MPL Forwarders use the | |||
value for SEED_SET_ENTRY_LIFETIME for a given MPL Domain and use a | same value for SEED_SET_ENTRY_LIFETIME for a given MPL Domain and | |||
default value of 30 minutes. Using a value of | use a default value of 30 minutes. Using a value of | |||
SEED_SET_ENTRY_LIFETIME that is too small can cause the duplicate | SEED_SET_ENTRY_LIFETIME that is too small can cause the duplicate | |||
detection mechanism to fail, resulting in a MPL Forwarder to | detection mechanism to fail, resulting in an MPL Forwarder | |||
receive a given MPL Data Message more than once. The mechanism | receiving a given MPL Data Message more than once. The mechanism | |||
for setting SEED_SET_ENTRY_LIFETIME is not specified within this | for setting SEED_SET_ENTRY_LIFETIME is not specified within this | |||
document. | document. | |||
As specified in [RFC6206], a Trickle timer runs for a defined | As specified in [RFC6206], a Trickle timer runs for a defined | |||
interval and has three configuration parameters: the minimum interval | interval and has three configuration parameters: the minimum interval | |||
size Imin, the maximum interval size Imax, and a redundancy constant | size Imin, the maximum interval size Imax, and a redundancy | |||
k. | constant k. | |||
This specification defines a fourth Trickle configuration parameter, | This specification defines a fourth Trickle configuration parameter, | |||
TimerExpirations, which indicates the number of Trickle timer | TimerExpirations, which indicates the number of Trickle timer | |||
expiration events that occur before terminating the Trickle algorithm | expiration events that occur before terminating the Trickle algorithm | |||
for a given MPL Data Message or MPL Control Message. | for a given MPL Data Message or MPL Control Message. | |||
Each MPL Interface uses the following Trickle parameters for MPL Data | Each MPL Interface uses the following Trickle parameters for MPL Data | |||
Message and MPL Control Message transmissions. | Message and MPL Control Message transmissions: | |||
DATA_MESSAGE_IMIN The minimum Trickle timer interval, as defined in | DATA_MESSAGE_IMIN - The minimum Trickle timer interval, as defined | |||
[RFC6206], for MPL Data Message transmissions. DATA_MESSAGE_IMIN | in [RFC6206], for MPL Data Message transmissions. | |||
has a default value of 10 times the expected link-layer latency. | DATA_MESSAGE_IMIN has a default value of 10 times the expected | |||
link-layer latency. | ||||
DATA MESSAGE_IMAX The maximum Trickle timer interval, as defined in | DATA_MESSAGE_IMAX - The maximum Trickle timer interval, as defined | |||
[RFC6206], for MPL Data Message transmissions. DATA_MESSAGE_IMAX | in [RFC6206], for MPL Data Message transmissions. | |||
has a default value equal to DATA_MESSAGE_IMIN. | DATA_MESSAGE_IMAX has a default value equal to DATA_MESSAGE_IMIN. | |||
DATA_MESSAGE_K The redundancy constant, as defined in [RFC6206], for | DATA_MESSAGE_K - The redundancy constant, as defined in [RFC6206], | |||
MPL Data Message transmissions. DATA_MESSAGE_K has a default | for MPL Data Message transmissions. DATA_MESSAGE_K has a default | |||
value of 1. | value of 1. | |||
DATA_MESSAGE_TIMER_EXPIRATIONS The number of Trickle timer | DATA_MESSAGE_TIMER_EXPIRATIONS - The number of Trickle timer | |||
expirations that occur before terminating the Trickle algorithm's | expirations that occur before terminating the Trickle algorithm's | |||
retransmission of a given MPL Data Message. | retransmission of a given MPL Data Message. | |||
DATA_MESSAGE_TIMER_EXPIRATIONS has a default value of 3. | DATA_MESSAGE_TIMER_EXPIRATIONS has a default value of 3. | |||
CONTROL_MESSAGE_IMIN The minimum Trickle timer interval, as defined | CONTROL_MESSAGE_IMIN - The minimum Trickle timer interval, as | |||
in [RFC6206], for MPL Control Message transmissions. | defined in [RFC6206], for MPL Control Message transmissions. | |||
CONTROL_MESSAGE_IMIN has a default value of 10 times the worst- | CONTROL_MESSAGE_IMIN has a default value of 10 times the | |||
case link-layer latency. | worst-case link-layer latency. | |||
CONTROL_MESSAGE_IMAX The maximum Trickle timer interval, as defined | CONTROL_MESSAGE_IMAX - The maximum Trickle timer interval, as | |||
in [RFC6206], for MPL Control Message transmissions. | defined in [RFC6206], for MPL Control Message transmissions. | |||
CONTROL_MESSAGE_IMAX has a default value of 5 minutes. | CONTROL_MESSAGE_IMAX has a default value of 5 minutes. | |||
CONTROL_MESSAGE_K The redundancy constant, as defined in [RFC6206], | CONTROL_MESSAGE_K - The redundancy constant, as defined in | |||
for MPL Control Message transmissions. CONTROL_MESSAGE_K has a | [RFC6206], for MPL Control Message transmissions. | |||
default value of 1. | CONTROL_MESSAGE_K has a default value of 1. | |||
CONTROL_MESSAGE_TIMER_EXPIRATIONS The number of Trickle timer | CONTROL_MESSAGE_TIMER_EXPIRATIONS - The number of Trickle timer | |||
expirations that occur before terminating the Trickle algorithm | expirations that occur before terminating the Trickle algorithm | |||
for MPL Control Message transmissions. | for MPL Control Message transmissions. | |||
CONTROL_MESSAGE_TIMER_EXPIRATIONS has a default value of 10. | CONTROL_MESSAGE_TIMER_EXPIRATIONS has a default value of 10. | |||
As described in [RFC6206], if different nodes have different | As described in [RFC6206], if different nodes have different | |||
configuration parameters, Trickle may have unintended behaviors. | configuration parameters, Trickle may have unintended behaviors. | |||
Therefore, it is RECOMMENDED that all MPL Interfaces attached to the | Therefore, it is RECOMMENDED that all MPL Interfaces attached to the | |||
same link of a given MPL Domain use the same values for the Trickle | same link of a given MPL Domain use the same values for the Trickle | |||
Parameters above for a given MPL Domain. The mechanism for setting | parameters above for a given MPL Domain. The mechanism for setting | |||
the Trickle Parameters is not specified within this document. | the Trickle parameters is not specified within this document. | |||
The default MPL parameters specify a forwarding strategy that | The default MPL parameters specify a forwarding strategy that | |||
utilizes both proactive and reactive techniques. Using these default | utilizes both proactive and reactive techniques. Using these default | |||
values, a MPL Forwarder proactively transmits any new MPL Data | values, an MPL Forwarder proactively transmits any new MPL Data | |||
Messages it receives then uses MPL Control Messages to trigger | Messages it receives and then uses MPL Control Messages to trigger | |||
additional MPL Data Message retransmissions where message drops are | additional MPL Data Message retransmissions where message drops are | |||
detected. Setting DATA_MESSAGE_IMAX to the same as DATA_MESSAGE_IMIN | detected. Setting DATA_MESSAGE_IMAX to the same value as | |||
in this case is acceptable since subsequent MPL Data Message | DATA_MESSAGE_IMIN in this case is acceptable, since subsequent MPL | |||
retransmissions are triggered by MPL Control Messages, where | Data Message retransmissions are triggered by MPL Control Messages, | |||
CONTROL_MESSAGE_IMAX is greater than CONTROL_MESSAGE_IMIN. | where CONTROL_MESSAGE_IMAX is greater than CONTROL_MESSAGE_IMIN. | |||
6. Protocol Message Formats | 6. Protocol Message Formats | |||
Messages generated and processed by a MPL Forwarder are described in | Messages generated and processed by an MPL Forwarder are described in | |||
this section. | this section. | |||
6.1. MPL Option | 6.1. MPL Option | |||
The MPL Option is carried in MPL Data Messages in an IPv6 Hop-by-Hop | The MPL Option is carried in MPL Data Messages in an IPv6 Hop-by-Hop | |||
Options header, immediately following the IPv6 header. The MPL | Options header, immediately following the IPv6 header. The MPL | |||
Option has the following format: | Option has the following format: | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Option Type | Opt Data Len | | | Option Type | Opt Data Len | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| S |M|V| rsv | sequence | seed-id (optional) | | | S |M|V| rsv | sequence | seed-id (optional) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Option Type 0x6D. | Option Type 0x6D. | |||
Opt Data Len Length of the Option Data field in octets. | Opt Data Len Length of the Option Data field [RFC2460] in octets. | |||
S 2-bit unsigned integer. Identifies the length of | S 2-bit unsigned integer. Identifies the length of the | |||
seed-id. 0 indicates that the seed-id is the | seed-id. '0' indicates that the seed-id is the IPv6 | |||
IPv6 Source Address and not included in the MPL | Source Address and not included in the MPL Option. | |||
Option. 1 indicates that the seed-id is a 16-bit | '1' indicates that the seed-id is a 16-bit unsigned | |||
unsigned integer. 2 indicates that the seed-id | integer. '2' indicates that the seed-id is a 64-bit | |||
is a 64-bit unsigned integer. 3 indicates that | unsigned integer. '3' indicates that the seed-id is a | |||
the seed-id is a 128-bit unsigned integer. | 128-bit unsigned integer. | |||
M 1-bit flag. 1 indicates that the value in | M 1-bit flag. '1' indicates that the value in the | |||
sequence is known to be the largest sequence | sequence field is known to be the largest sequence | |||
number that was received from the MPL Seed. | number that was received from the MPL Seed. | |||
V 1-bit flag. 0 indicates that the MPL Option | V 1-bit flag. '0' indicates that the MPL Option | |||
conforms to this specification. MPL Data | conforms to this specification. MPL Data Messages | |||
Messages with a MPL Option in which this flag is | with an MPL Option in which this flag is set to 1 MUST | |||
1 MUST be dropped. | be dropped. | |||
rsv 4-bit reserved field. MUST be set to 0 on | rsv 4-bit reserved field. MUST be set to 0 on | |||
transmission and ignored on reception. | transmission and ignored on reception. | |||
sequence 8-bit unsigned integer. Identifies relative | sequence 8-bit unsigned integer. Identifies relative ordering | |||
ordering of MPL Data Messages from the MPL Seed | of MPL Data Messages from the MPL Seed identified by | |||
identified by seed-id. | the seed-id. | |||
seed-id Uniquely identifies the MPL Seed that initiated | seed-id Uniquely identifies the MPL Seed that initiated | |||
dissemination of the MPL Data Message. The size | dissemination of the MPL Data Message. The size of | |||
of seed-id is indicated by the S field. | the seed-id is indicated by the S field. | |||
The Option Data (specifically the M flag) of the MPL Option is | The Option Data (specifically, the M flag) of the MPL Option is | |||
updated by MPL Forwarders as the MPL Data Message is forwarded. | updated by MPL Forwarders as the MPL Data Message is forwarded. | |||
Nodes that do not understand the MPL Option MUST discard the MPL Data | Nodes that do not understand the MPL Option MUST discard the MPL Data | |||
Message. Thus, according to [RFC2460] the three high order bits of | Message. Thus, according to [RFC2460], the three high-order bits of | |||
the Option Type are set to '011'. The Option Data length is | the Option Type are set to '011'. The Option Data length is | |||
variable. | variable. | |||
The seed-id uniquely identifies a MPL Seed. When seed-id is 128 bits | The seed-id uniquely identifies an MPL Seed. When the seed-id is | |||
(S=3), the MPL Seed MAY use an IPv6 address assigned to one of its | 128 bits (S=3), the MPL Seed MAY use an IPv6 address assigned to one | |||
interfaces that is unique within the MPL Domain. Managing MPL Seed | of its interfaces that is unique within the MPL Domain. Managing MPL | |||
Identifiers is not within scope of this document. | Seed Identifiers is not within the scope of this document. | |||
The sequence field establishes a total ordering of MPL Data Messages | The sequence field establishes a total ordering of MPL Data Messages | |||
generated by a MPL Seed for a MPL Domain. The MPL Seed MUST | generated by an MPL Seed for an MPL Domain. The MPL Seed MUST | |||
increment the sequence field's value on each new MPL Data Message | increment the sequence field's value on each new MPL Data Message | |||
that it generates for a MPL Domain. Implementations MUST follow the | that it generates for an MPL Domain. Implementations MUST follow the | |||
Serial Number Arithmetic as defined in [RFC1982] when incrementing a | Serial Number Arithmetic as defined in [RFC1982] when incrementing a | |||
sequence value or comparing two sequence values. | sequence value or comparing two sequence values. | |||
Future updates to this specification may define additional fields | Future updates to this specification may define additional fields | |||
following the seed-id field. | following the seed-id field. | |||
6.2. MPL Control Message | 6.2. MPL Control Message | |||
A MPL Forwarder uses ICMPv6 messages to communicate information | An MPL Forwarder uses ICMPv6 Messages to communicate information | |||
contained in a MPL Domain's Seed Set and Buffered Message Set to | contained in an MPL Domain's Seed Set and Buffered Message Set to | |||
neighboring MPL Forwarders. The MPL Control Message has the | neighboring MPL Forwarders. The MPL Control Message has the | |||
following format: | following format: | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type | Code | Checksum | | | Type | Code | Checksum | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
. MPL Seed Info[0..n] . | . MPL Seed Info[0..n] . | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
IP Fields: | IP Fields: | |||
Source Address An IPv6 address in the AddressSet of the | Source Address An IPv6 address in the AddressSet of the | |||
corresponding MPL Interface and MUST be valid | corresponding MPL Interface. MUST be valid | |||
within the MPL Domain. | within the MPL Domain. | |||
Destination Address The link-scoped MPL Domain Address corresponding | Destination Address The link-scoped MPL Domain Address | |||
to the MPL Domain. | corresponding to the MPL Domain. | |||
Hop Limit 255 | Hop Limit 255 | |||
ICMPv6 Fields: | ICMPv6 Fields: | |||
Type MPL_ICMP_TYPE | Type 159 | |||
Code 0 | Code 0 | |||
Checksum The ICMP checksum. See [RFC4443]. | Checksum The ICMP checksum. See [RFC4443]. | |||
MPL Seed Info[0..n] List of zero or more MPL Seed Info entries. | MPL Seed Info[0..n] List of zero or more MPL Seed Info entries. | |||
The MPL Control Message indicates the sequence numbers of MPL Data | The MPL Control Message indicates the sequence numbers of MPL Data | |||
Messages that are within the MPL Domain's Buffered Message Set. The | Messages that are within the MPL Domain's Buffered Message Set. The | |||
MPL Control Message also indicates the sequence numbers of MPL Data | MPL Control Message also indicates the sequence numbers of MPL Data | |||
Messages that a MPL Forwarder is willing to receive. The MPL Control | Messages that an MPL Forwarder is willing to receive. The MPL | |||
Message allows neighboring MPL Forwarders to determine whether there | Control Message allows neighboring MPL Forwarders to determine | |||
are any new MPL Data Messages to exchange. | whether or not there are any new MPL Data Messages to exchange. | |||
6.3. MPL Seed Info | 6.3. MPL Seed Info | |||
A MPL Seed Info encodes the minimum sequence number for an MPL Seed | The MPL Seed Info encodes the minimum sequence number for an MPL Seed | |||
maintained in the MPL Domain's Seed Set. The MPL Seed Info also | maintained in the MPL Domain's Seed Set. The MPL Seed Info also | |||
indicates the sequence numbers of MPL Data Messages generated by the | indicates the sequence numbers of MPL Data Messages generated by the | |||
MPL Seed that are stored within the MPL Domain's Buffered Message | MPL Seed that are stored within the MPL Domain's Buffered Message | |||
Set. The MPL Seed Info has the following format: | Set. The MPL Seed Info has the following format: | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| min-seqno | bm-len | S | seed-id (0/2/8/16 octets) | | | min-seqno | bm-len | S | seed-id (0/2/8/16 octets) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
. buffered-mpl-messages (variable length) . | . buffered-mpl-messages (variable length) . | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
min-seqno 8-bit unsigned integer. The lower-bound sequence | min-seqno 8-bit unsigned integer. The lower-bound | |||
number for the MPL Seed. | sequence number for the MPL Seed. | |||
bm-len 6-bit unsigned integer. The size of buffered- | bm-len 6-bit unsigned integer. The size of | |||
mpl-messages in octets. | buffered-mpl-messages in octets. | |||
S 2-bit unsigned integer. Identifies the length of | S 2-bit unsigned integer. Identifies the | |||
seed-id. 0 indicates that the seed-id value is | length of the seed-id. '0' indicates that | |||
the IPv6 Source Address and not included in the | the seed-id value is the IPv6 Source Address | |||
MPL Seed Info. 1 indicates that the seed-id | and not included in the MPL Seed Info. '1' | |||
value is a 16-bit unsigned integer. 2 indicates | indicates that the seed-id value is a 16-bit | |||
that the seed-id value is a 64-bit unsigned | unsigned integer. '2' indicates that the | |||
integer. 3 indicates that the seed-id is a | seed-id value is a 64-bit unsigned integer. | |||
128-bit unsigned integer. | '3' indicates that the seed-id is a 128-bit | |||
unsigned integer. | ||||
seed-id Variable-length unsigned integer. Indicates the | seed-id Variable-length unsigned integer. Indicates | |||
MPL Seed associated with this MPL Seed Info. | the MPL Seed associated with this MPL | |||
Seed Info. | ||||
buffered-mpl-messages Variable-length bit vector. Identifies the | buffered-mpl-messages Variable-length bit-vector. Identifies the | |||
sequence numbers of MPL Data Messages maintained | sequence numbers of MPL Data Messages | |||
in the corresponding Buffered Message Set for the | maintained in the corresponding Buffered | |||
MPL Seed. The i'th bit represents a sequence | Message Set for the MPL Seed. The i-th bit | |||
number of min-seqno + i. '0' indicates that the | represents a sequence number of min-seqno | |||
corresponding MPL Data Message does not exist in | + i. '0' indicates that the corresponding | |||
the Buffered Message Set. '1' indicates that the | MPL Data Message does not exist in the | |||
corresponding MPL Data Message does exist in the | Buffered Message Set. '1' indicates that the | |||
Buffered Message Set. | corresponding MPL Data Message does exist in | |||
the Buffered Message Set. | ||||
The MPL Seed Info does not have any octet alignment requirement. | The MPL Seed Info does not have any octet alignment requirement. | |||
7. Information Base | 7. Information Base | |||
7.1. Local Interface Set | 7.1. Local Interface Set | |||
The Local Interface Set records the local MPL Interfaces of a MPL | The Local Interface Set records the local MPL Interfaces of an MPL | |||
Forwarder. The Local Interface Set consists of Local Interface | Forwarder. The Local Interface Set consists of Local Interface | |||
Tuples, one per MPL Interface: (AddressSet). | Tuples, one per MPL Interface: (AddressSet). | |||
AddressSet - a set of unicast addresses assigned to the MPL | AddressSet - a set of unicast addresses assigned to the MPL | |||
Interface. | Interface. | |||
7.2. Domain Set | 7.2. Domain Set | |||
The Domain Set records the MPL Interfaces that subscribe to each MPL | The Domain Set records the MPL Interfaces that subscribe to each MPL | |||
Domain Address. The Domain Set consists of MPL Domain Tuples, one | Domain Address. The Domain Set consists of MPL Domain Tuples, one | |||
per MPL Domain: (MPLInterfaceSet). | per MPL Domain: (MPLInterfaceSet). | |||
MPLInterfaceSet - a set of MPL Interfaces that subscribe to the MPL | MPLInterfaceSet - a set of MPL Interfaces that subscribe to the MPL | |||
Domain Address that identifies the MPL Domain. | Domain Address that identifies the MPL Domain. | |||
7.3. Seed Set | 7.3. Seed Set | |||
A Seed Set records a sliding window used to determine the sequence | A Seed Set records a sliding window used to determine the sequence | |||
numbers of MPL Data Messages that a MPL Forwarder is willing to | numbers of MPL Data Messages (generated by the MPL Seed) that an MPL | |||
accept generated by the MPL Seed. A MPL Forwarder maintains a Seed | Forwarder is willing to accept. An MPL Forwarder maintains a Seed | |||
Set for each MPL Domain that it participates in. A Seed Set consists | Set for each MPL Domain that it participates in. A Seed Set consists | |||
of MPL Seed Tuples: (SeedID, MinSequence, Lifetime). | of MPL Seed Tuples: (SeedID, MinSequence, Lifetime). | |||
SeedID - the identifier for the MPL Seed. | SeedID - the identifier for the MPL Seed. | |||
MinSequence - a lower-bound sequence number that represents the | MinSequence - a lower-bound sequence number that represents the | |||
sequence number of the oldest MPL Data Message the MPL Forwarder | sequence number of the oldest MPL Data Message the MPL Forwarder | |||
is willing to receive or transmit. A MPL Forwarder MUST ignore | is willing to receive or transmit. An MPL Forwarder MUST ignore | |||
any MPL Data Message that has sequence value less than than | any MPL Data Message that has a sequence value less than | |||
MinSequence. | MinSequence. | |||
Lifetime - indicates the minimum remaining lifetime of the Seed Set | Lifetime - indicates the minimum remaining lifetime of the Seed Set | |||
entry. A MPL Forwarder MUST NOT free a Seed Set entry before the | entry. An MPL Forwarder MUST NOT free a Seed Set entry before the | |||
remaining lifetime expires. | remaining lifetime expires. | |||
7.4. Buffered Message Set | 7.4. Buffered Message Set | |||
A Buffered Message Set records recently received MPL Data Messages | A Buffered Message Set records recently received MPL Data Messages | |||
from a MPL Seed within a MPL Domain. A MPL Forwarder uses a Buffered | from an MPL Seed within an MPL Domain. An MPL Forwarder uses a | |||
Message Set to buffer MPL Data Messages while the MPL Forwarder is | Buffered Message Set to buffer MPL Data Messages while the MPL | |||
forwarding the MPL Data Messages. A MPL Forwarder maintains a | Forwarder is forwarding the MPL Data Messages. An MPL Forwarder | |||
Buffered Message Set for each MPL Domain that it participates in. A | maintains a Buffered Message Set for each MPL Domain that it | |||
Buffered Message Set consists of Buffered Message Tuples: (SeedID, | participates in. A Buffered Message Set consists of Buffered Message | |||
SequenceNumber, DataMessage). | Tuples: (SeedID, SequenceNumber, DataMessage). | |||
SeedID - the identifier for the MPL Seed that generated the MPL Data | SeedID - the identifier for the MPL Seed that generated the MPL Data | |||
Message. | Message. | |||
SequenceNumber - the sequence number for the MPL Data Message. | SequenceNumber - the sequence number for the MPL Data Message. | |||
DataMessage - the MPL Data Message. | DataMessage - the MPL Data Message. | |||
All MPL Data Messages within a Buffered Message Set MUST have a | All MPL Data Messages within a Buffered Message Set MUST have a | |||
sequence number greater than or equal to MinSequence for the | sequence number greater than or equal to MinSequence for the | |||
corresponding SeedID. When increasing MinSequence for a MPL Seed, | corresponding SeedID. When increasing MinSequence for an MPL Seed, | |||
the MPL Forwarder MUST delete any MPL Data Messages from the | the MPL Forwarder MUST delete any MPL Data Messages from the | |||
corresponding Buffered Message Set that have sequence numbers less | corresponding Buffered Message Set that have sequence numbers less | |||
than MinSequence. | than MinSequence. | |||
8. MPL Seed Sequence Numbers | 8. MPL Seed Sequence Numbers | |||
Each MPL Seed maintains a sequence number for each MPL Domain that it | Each MPL Seed maintains a sequence number for each MPL Domain that it | |||
serves. The sequence numbers are included in MPL Data Messages | serves. The sequence numbers are included in MPL Data Messages | |||
generated by the MPL Seed. The MPL Seed MUST increment the sequence | generated by the MPL Seed. The MPL Seed MUST increment the sequence | |||
number for each MPL Data Message that it generates for a MPL Domain. | number for each MPL Data Message that it generates for an MPL Domain. | |||
Implementations MUST follow the Serial Number Arithmetic as defined | Implementations MUST follow the Serial Number Arithmetic as defined | |||
in [RFC1982] when incrementing a sequence value or comparing two | in [RFC1982] when incrementing a sequence value or comparing two | |||
sequence values. This sequence number is used to establish a total | sequence values. This sequence number is used to establish a total | |||
ordering of MPL Data Messages generated by a MPL Seed for a MPL | ordering of MPL Data Messages generated by an MPL Seed for an MPL | |||
Domain. | Domain. | |||
9. MPL Data Messages | 9. MPL Data Messages | |||
9.1. MPL Data Message Generation | 9.1. MPL Data Message Generation | |||
MPL Data Messages are generated by MPL Seeds when these messages | MPL Data Messages are generated by MPL Seeds when these messages | |||
enter the MPL Domain. All MPL Data messages have the following | enter the MPL Domain. All MPL Data Messages have the following | |||
properties: | properties: | |||
o The IPv6 Source Address MUST be an address in the AddressSet of a | o The IPv6 Source Address MUST be an address in the AddressSet of a | |||
corresponding MPL Interface and MUST be valid within the MPL | corresponding MPL Interface and MUST be valid within the MPL | |||
Domain. | Domain. | |||
o The IPv6 Destination Address MUST be set to the MPL Domain Address | o The IPv6 Destination Address MUST be set to the MPL Domain Address | |||
corresponding to the MPL Domain. | corresponding to the MPL Domain. | |||
o A MPL Data Message MUST contain a MPL Option in its IPv6 Header to | o An MPL Data Message MUST contain an MPL Option in its IPv6 header | |||
identify the MPL Seed that generated the message and the ordering | to identify the MPL Seed that generated the message and the | |||
relative to other MPL Data Messages generated by the MPL Seed. | ordering relative to other MPL Data Messages generated by the | |||
MPL Seed. | ||||
When the destination address is a MPL Domain Address and the source | When the destination address is an MPL Domain Address and the source | |||
address is in the AddressLIst of a MPL Interface that belongs to that | address is in the AddressList of an MPL Interface that belongs to | |||
MPL Domain Address, the application message and the MPL Data Message | that MPL Domain Address, the application message and the MPL Data | |||
MAY be identical. In other words, the MPL Data Message may contain a | Message MAY be identical. In other words, the MPL Data Message may | |||
single IPv6 header that includes the MPL Option. | contain a single IPv6 header that includes the MPL Option. | |||
Otherwise, IPv6-in-IPv6 encapsulation MUST be used to satisfy the MPL | Otherwise, IPv6-in-IPv6 encapsulation MUST be used to satisfy the MPL | |||
Data Message requirements listed above [RFC2473]. The complete IPv6- | Data Message requirements listed above [RFC2473]. The complete | |||
in-IPv6 message forms a MPL Data Message. The outer IPv6 header | IPv6-in-IPv6 message forms an MPL Data Message. The outer IPv6 | |||
conforms to the MPL Data Message requirements listed above. The | header conforms to the MPL Data Message requirements listed above. | |||
encapsulated IPv6 datagram encodes the multicast data message that is | The encapsulated IPv6 datagram encodes the multicast data message | |||
communicated beyond the MPL Domain. | that is communicated beyond the MPL Domain. | |||
9.2. MPL Data Message Transmission | 9.2. MPL Data Message Transmission | |||
A MPL Forwarder manages transmission of MPL Data Messages in its | An MPL Forwarder manages transmission of MPL Data Messages in its | |||
Buffered Message Sets using the Trickle algorithm [RFC6206]. A MPL | Buffered Message Sets using the Trickle algorithm [RFC6206]. An MPL | |||
Forwarder MUST use a separate Trickle timer for each MPL Data Message | Forwarder MUST use a separate Trickle timer for each MPL Data Message | |||
that it is actively forwarding. In accordance with Section 5 of RFC | that it is actively forwarding. In accordance with Section 5 of | |||
6206 [RFC6206], this document defines the following: | RFC 6206 [RFC6206], the following items apply: | |||
o This document defines a "consistent" transmission as receiving a | o This document defines a "consistent" transmission as receiving an | |||
MPL Data Message that has the same MPL Domain Address, seed-id, | MPL Data Message that has the same MPL Domain Address, seed-id, | |||
and sequence value as the MPL Data Message managed by the Trickle | and sequence value as the MPL Data Message managed by the | |||
timer. | Trickle timer. | |||
o This document defines an "inconsistent" transmission as receiving | o This document defines an "inconsistent" transmission as receiving | |||
a MPL Data Message that has the same MPL Domain Address, seed-id | an MPL Data Message that has the same MPL Domain Address, seed-id | |||
value, and the M flag set, but has a sequence value less than MPL | value, and the M flag set, but has a sequence value less than that | |||
Data Message managed by the Trickle timer. | of the MPL Data Message managed by the Trickle timer. | |||
o This document does not define any external "events". | o This document does not define any external "events". | |||
o This document defines MPL Data Messages as Trickle messages. | o This document defines MPL Data Messages as Trickle messages. | |||
o The actions outside the Trickle algorithm that MPL takes involve | o The actions outside the Trickle algorithm that MPL takes involve | |||
managing the MPL Domain's Seed Set and Buffered Message Set. | managing the MPL Domain's Seed Set and Buffered Message Set. | |||
As specified in [RFC6206], a Trickle timer has three variables: the | As specified in [RFC6206], a Trickle timer has three variables: the | |||
current interval size I, a time within the current interval t, and a | current interval size I, a time within the current interval t, and a | |||
counter c. MPL defines a fourth variable, e, which counts the number | counter c. MPL defines a fourth variable, e, which counts the number | |||
of Trickle timer expiration events since the Trickle timer was last | of Trickle timer expiration events since the Trickle timer was last | |||
reset. | reset. | |||
After DATA_MESSAGE_TIMER_EXPIRATIONS Trickle timer events, the MPL | After DATA_MESSAGE_TIMER_EXPIRATIONS Trickle timer events, the MPL | |||
Forwarder MUST disable the Trickle timer. When a buffered MPL Data | Forwarder MUST disable the Trickle timer. When a buffered MPL Data | |||
Message does not have an associated Trickle timer, the MPL Forwarder | Message does not have an associated Trickle timer, the MPL Forwarder | |||
MAY delete the message from the Buffered Message Set by advancing | MAY delete the message from the Buffered Message Set by advancing the | |||
MinSequence of the corresponding MPL Seed in the Seed Set. When the | MinSequence value of the corresponding MPL Seed in the Seed Set. | |||
MPL Forwarder no longer buffers any messages for a MPL Seed, the MPL | When the MPL Forwarder no longer buffers any messages for an MPL | |||
Forwarder MUST NOT increment MinSequence for that MPL Seed. | Seed, the MPL Forwarder MUST NOT increment MinSequence for that | |||
MPL Seed. | ||||
When transmitting a MPL Data Message, the MPL Forwarder MUST either | When transmitting an MPL Data Message, the MPL Forwarder MUST either | |||
set the M flag to zero or set it to a level that indicates whether or | set the M flag to zero or set it to a level that indicates whether or | |||
not the message's sequence number is the largest value that has been | not the message's sequence number is the largest value that has been | |||
received from the MPL Seed. | received from the MPL Seed. | |||
9.3. MPL Data Message Processing | 9.3. MPL Data Message Processing | |||
Upon receiving a MPL Data Message, the MPL Forwarder first processes | Upon receiving an MPL Data Message, the MPL Forwarder first processes | |||
the MPL Option and updates the Trickle timer associated with the MPL | the MPL Option and updates the Trickle timer associated with the MPL | |||
Data Message if one exists. | Data Message if one exists. | |||
Upon receiving a MPL Data Message, a MPL Forwarder MUST perform one | Upon receiving an MPL Data Message, an MPL Forwarder MUST perform one | |||
of the following actions: | of the following actions: | |||
o Accept the message and enter the MPL Data Message in the MPL | o Accept the message and enter the MPL Data Message in the MPL | |||
Domain's Buffered Message Set. | Domain's Buffered Message Set. | |||
o Accept the message and update the corresponding MinSequence in the | o Accept the message and update the corresponding MinSequence in | |||
MPL Domain's Seed Set to 1 greater than the message's sequence | the MPL Domain's Seed Set to 1 greater than the message's | |||
number. | sequence number. | |||
o Discard the message without any change to the MPL Information | o Discard the message without any change to the MPL | |||
Base. | Information Base. | |||
If a Seed Set entry exists for the MPL Seed, the MPL Forwarder MUST | If a Seed Set entry exists for the MPL Seed, the MPL Forwarder MUST | |||
discard the MPL Data Message if its sequence number is less than | discard the MPL Data Message if its sequence number is less than | |||
MinSequence or exists in the Buffered Message Set. | MinSequence or exists in the Buffered Message Set. | |||
If a Seed Set entry does not exist for the MPL Seed, the MPL | If a Seed Set entry does not exist for the MPL Seed, the MPL | |||
Forwarder MUST create a new entry for the MPL Seed before accepting | Forwarder MUST create a new entry for the MPL Seed before accepting | |||
the MPL Data Message. | the MPL Data Message. | |||
If memory is limited, a MPL Forwarder SHOULD reclaim memory resources | If memory is limited, an MPL Forwarder SHOULD reclaim memory | |||
by: | resources by: | |||
o Incrementing MinSequence entries in a Seed Set and deleting MPL | o Incrementing MinSequence entries in a Seed Set and deleting MPL | |||
Data Messages in the corresponding Buffered Message Set that fall | Data Messages in the corresponding Buffered Message Set that fall | |||
below the MinSequence value. | below the MinSequence value. | |||
o Deleting other Seed Set entries that have expired and the | o Deleting other Seed Set entries that have expired and the | |||
corresponding MPL Data Messages in the Buffered Message Set. | corresponding MPL Data Messages in the Buffered Message Set. | |||
If the MPL Forwarder accepts the MPL Data Message, the MPL Forwarder | If the MPL Forwarder accepts the MPL Data Message, the MPL Forwarder | |||
MUST perform the following actions: | MUST perform the following actions: | |||
o Reset the Lifetime of the corresponding Seed Set entry to | o Reset the Lifetime of the corresponding Seed Set entry to | |||
SEED_SET_ENTRY_LIFETIME. | SEED_SET_ENTRY_LIFETIME. | |||
o If PROACTIVE_FORWARDING is true, the MPL Forwarder MUST initialize | o If PROACTIVE_FORWARDING is TRUE, the MPL Forwarder MUST initialize | |||
and start a Trickle timer for the MPL Data Message. | and start a Trickle timer for the MPL Data Message. | |||
o If the MPL Control Message Trickle timer is not running and | o If the MPL Control Message Trickle timer is not running and | |||
CONTROL_MESSAGE_TIMER_EXPIRATIONS is non-zero, the MPL Forwarder | CONTROL_MESSAGE_TIMER_EXPIRATIONS is non-zero, the MPL Forwarder | |||
MUST initialize and start the MPL Control Message Trickle timer. | MUST initialize and start the MPL Control Message Trickle timer. | |||
o If the MPL Control Message Trickle timer is running, the MPL | o If the MPL Control Message Trickle timer is running, the MPL | |||
Forwarder MUST reset the MPL Control Message Trickle timer. | Forwarder MUST reset the MPL Control Message Trickle timer. | |||
10. MPL Control Messages | 10. MPL Control Messages | |||
10.1. MPL Control Message Generation | 10.1. MPL Control Message Generation | |||
A MPL Forwarder generates MPL Control Messages to communicate a MPL | An MPL Forwarder generates MPL Control Messages to communicate an MPL | |||
Domain's Seed Set and Buffered Message Set to neighboring MPL | Domain's Seed Set and Buffered Message Set to neighboring MPL | |||
Forwarders. Each MPL Control Message is generated according to | Forwarders. Each MPL Control Message is generated according to | |||
Section 6.2, with a MPL Seed Info for each entry in the MPL Domain's | Section 6.2, with an MPL Seed Info entry for each entry in the MPL | |||
Seed Set. Each MPL Seed Info entry has the following content: | Domain's Seed Set. Each MPL Seed Info entry has the following | |||
content: | ||||
o S set to the size of the seed-id field in the MPL Seed Info entry. | o S set to the size of the seed-id field in the MPL Seed Info entry. | |||
o min-seqno set to MinSequence of the MPL Seed. | o min-seqno set to the MinSequence value of the MPL Seed. | |||
o bm-len set to the size of buffered-mpl-messages in octets. | o bm-len set to the size of buffered-mpl-messages in octets. | |||
o seed-id set to the MPL seed identifier. | o seed-id set to the MPL Seed Identifier. | |||
o buffered-mpl-messages with each bit representing whether or not a | o buffered-mpl-messages with each bit representing whether or not an | |||
MPL Data Message with the corresponding sequence number exists in | MPL Data Message with the corresponding sequence number exists in | |||
the Buffered Message Set. The i'th bit represents a sequence | the Buffered Message Set. The i-th bit represents a sequence | |||
number of min-seqno + i. '0' indicates that the corresponding MPL | number of min-seqno + i. '0' indicates that the corresponding MPL | |||
Data Message does not exist in the Buffered Message Set. '1' | Data Message does not exist in the Buffered Message Set. '1' | |||
indicates that the corresponding MPL Data Message does exist in | indicates that the corresponding MPL Data Message does exist in | |||
the Buffered Message Set. | the Buffered Message Set. | |||
10.2. MPL Control Message Transmission | 10.2. MPL Control Message Transmission | |||
A MPL Forwarder transmits MPL Control Messages using the Trickle | An MPL Forwarder transmits MPL Control Messages using the Trickle | |||
algorithm. A MPL Forwarder maintains a single Trickle timer for each | algorithm. An MPL Forwarder maintains a single Trickle timer for | |||
MPL Domain. When CONTROL_MESSAGE_TIMER_EXPIRATIONS is 0, the MPL | each MPL Domain. When CONTROL_MESSAGE_TIMER_EXPIRATIONS is 0, the | |||
Forwarder does not execute the Trickle algorithm and does not | MPL Forwarder does not execute the Trickle algorithm and does not | |||
transmit MPL Control Messages. In accordance with Section 5 of RFC | transmit MPL Control Messages. In accordance with Section 5 of | |||
6206 [RFC6206], this document defines the following: | RFC 6206 [RFC6206], the following items apply: | |||
o This document defines a "consistent" transmission as receiving a | o This document defines a "consistent" transmission as receiving an | |||
MPL Control Message that results in a determination that neither | MPL Control Message that results in a determination that neither | |||
the receiving nor transmitting node has any new MPL Data Messages | the receiving nor transmitting node has any new MPL Data Messages | |||
to offer. | to offer. | |||
o This document defines an "inconsistent" transmission as receiving | o This document defines an "inconsistent" transmission as receiving | |||
a MPL Control Message that results in a determination that either | an MPL Control Message that results in a determination that either | |||
the receiving or transmitting node has at least one new MPL Data | the receiving or transmitting node has at least one new MPL Data | |||
Message to offer. | Message to offer. | |||
o The Trickle timer is reset in response to external "events." This | o The Trickle timer is reset in response to external "events". This | |||
document defines an "event" as increasing MinSequence of any entry | document defines an "event" as increasing the MinSequence value of | |||
in the corresponding Seed Set or adding a message to the | any entry in the corresponding Seed Set or adding a message to the | |||
corresponding Buffered Message Set. | corresponding Buffered Message Set. | |||
o This document defines a MPL Control Message as a Trickle message. | o This document defines an MPL Control Message as a Trickle message. | |||
As specified in [RFC6206], a Trickle timer has three variables: the | As specified in [RFC6206], a Trickle timer has three variables: the | |||
current interval size I, a time within the current interval t, and a | current interval size I, a time within the current interval t, and a | |||
counter c. MPL defines a fourth variable, e, which counts the number | counter c. MPL defines a fourth variable, e, which counts the number | |||
of Trickle timer expiration events since the Trickle timer was last | of Trickle timer expiration events since the Trickle timer was last | |||
reset. After CONTROL_MESSAGE_TIMER_EXPIRATIONS Trickle timer events, | reset. After CONTROL_MESSAGE_TIMER_EXPIRATIONS Trickle timer events, | |||
the MPL Forwarder MUST disable the Trickle timer. | the MPL Forwarder MUST disable the Trickle timer. | |||
10.3. MPL Control Message Processing | 10.3. MPL Control Message Processing | |||
A MPL Forwarder processes each MPL Control Message that it receives | An MPL Forwarder processes each MPL Control Message that it receives | |||
to determine if it has any new MPL Data Messages to receive or offer. | to determine if it has any new MPL Data Messages to receive or offer. | |||
A MPL Forwarder determines if a new MPL Data Message has not been | An MPL Forwarder determines if a new MPL Data Message has not been | |||
received from a neighboring node if any of the following conditions | received from a neighboring node if any of the following conditions | |||
hold true: | hold true: | |||
o The MPL Control Message includes a MPL Seed that does not exist in | o The MPL Control Message includes an MPL Seed that does not exist | |||
the MPL Domain's Seed Set. | in the MPL Domain's Seed Set. | |||
o The MPL Control Message indicates that the neighbor has a MPL Data | o The MPL Control Message indicates that the neighbor has an MPL | |||
Message in its Buffered Message Set with sequence number greater | Data Message in its Buffered Message Set with sequence number | |||
than MinSequence (i.e. the i-th bit is set to 1 and min-seqno + i | greater than MinSequence (i.e., the i-th bit is set to 1 and | |||
> MinSequence) and is not included in the MPL Domain's Buffered | min-seqno + i > MinSequence) and is not included in the MPL | |||
Message Set. | Domain's Buffered Message Set. | |||
When a MPL Forwarder determines that it has not yet received a MPL | When an MPL Forwarder determines that it has not yet received an MPL | |||
Data Message buffered by a neighboring device, the MPL Forwarder MUST | Data Message buffered by a neighboring device, the MPL Forwarder MUST | |||
reset its Trickle timer associated with MPL Control Message | reset its Trickle timer associated with MPL Control Message | |||
transmissions. If a MPL Control Message Trickle timer is not | transmissions. If an MPL Control Message Trickle timer is not | |||
running, the MPL Forwarder MUST initialize and start a new Trickle | running, the MPL Forwarder MUST initialize and start a new | |||
timer. | Trickle timer. | |||
A MPL Forwarder determines if a MPL Data Message in the Buffered | An MPL Forwarder determines if an MPL Data Message in the Buffered | |||
Message Set has not yet been received by a neighboring MPL Forwarder | Message Set has not yet been received by a neighboring MPL Forwarder | |||
if any of the following conditions hold true: | if any of the following conditions hold true: | |||
o The MPL Control Message does not include a MPL Seed for the MPL | o The MPL Control Message does not include an MPL Seed for the MPL | |||
Data Message. | Data Message. | |||
o The MPL Data Message's sequence number is greater than or equal to | o The MPL Data Message's sequence number is greater than or equal to | |||
min-seqno and not included in the neighbor's corresponding | min-seqno and not included in the neighbor's corresponding | |||
Buffered Message Set (i.e. the MPL Data Message's sequence number | Buffered Message Set (i.e., the MPL Data Message's sequence number | |||
does not have a corresponding bit in buffered-mpl-messages set to | does not have a corresponding bit in buffered-mpl-messages | |||
1). | set to 1). | |||
When a MPL Forwarder determines that it has at least one MPL Data | When an MPL Forwarder determines that it has at least one MPL Data | |||
Message in its corresponding Buffered Message Set that has not yet | Message in its corresponding Buffered Message Set that has not yet | |||
been received by a neighbor, the MPL Forwarder MUST reset the MPL | been received by a neighbor, the MPL Forwarder MUST reset the MPL | |||
Control Message Trickle timer. Additionally, for each of those | Control Message Trickle timer. Additionally, for each of those | |||
entries in the Buffered Message Set, the MPL Forwarder MUST reset the | entries in the Buffered Message Set, the MPL Forwarder MUST reset the | |||
Trickle timer and reset e to 0. If a Trickle timer is not associated | Trickle timer and reset e to 0. If a Trickle timer is not associated | |||
with the MPL Data Message, the MPL Forwarder MUST initialize and | with the MPL Data Message, the MPL Forwarder MUST initialize and | |||
start a new Trickle timer. | start a new Trickle timer. | |||
11. Acknowledgements | 11. IANA Considerations | |||
The authors would like to acknowledge the helpful comments of Robert | ||||
Cragie, Esko Dijk, Ralph Droms, Paul Duffy, Adrian Farrel, Ulrich | ||||
Herberg, Owen Kirby, Philip Levis, Kerry Lynn, Joseph Reddy, Michael | ||||
Richardson, Ines Robles, Don Sturek, Dario Tedeschi, and Peter van | ||||
der Stok, which greatly improved the document. | ||||
12. IANA Considerations | ||||
This document defines one IPv6 Option, a type that must be allocated | This document defines one IPv6 Option, a type that has been allocated | |||
from the IPv6 "Destination Options and Hop-by-Hop Options" registry | from the IPv6 "Destination Options and Hop-by-Hop Options" registry | |||
of [RFC2780]. | of [RFC2780]. | |||
This document defines one ICMPv6 Message, a type that must be | This document defines one ICMPv6 Message, a type that has been | |||
allocated from the "ICMPv6 "type" Numbers" registry of [RFC4443]. | allocated from the "ICMPv6 'type' Numbers" registry of [RFC4443]. | |||
This document registers a well-known multicast address from the | This document registers a well-known multicast address from the | |||
Variable Scope Multicast Address registry. | "Variable Scope Multicast Addresses" registry of [RFC3307]. | |||
12.1. MPL Option Type | 11.1. MPL Option Type | |||
IANA is requested to allocate an IPv6 Option Type from the IPv6 | IANA has allocated an IPv6 Option Type from the IPv6 "Destination | |||
"Destination Options and Hop-by-Hop Options" registry of [RFC2780], | Options and Hop-by-Hop Options" registry of [RFC2780], as specified | |||
as specified in Table 1 below: | in Table 1 below: | |||
+-----------+-----+-----+-------+-------------+---------------+ | +-----------+-----+-----+-------+-------------+-----------+ | |||
| Hex Value | act | chg | rest | Description | Reference | | | Hex Value | act | chg | rest | Description | Reference | | |||
+-----------+-----+-----+-------+-------------+---------------+ | +-----------+-----+-----+-------+-------------+-----------+ | |||
| 0x6D | 01 | 1 | 01101 | MPL Option | This Document | | | 0x6D | 01 | 1 | 01101 | MPL Option | RFC 7731 | | |||
+-----------+-----+-----+-------+-------------+---------------+ | +-----------+-----+-----+-------+-------------+-----------+ | |||
Table 1: IPv6 Option Type Allocation | Table 1: IPv6 Option Type Allocation | |||
12.2. MPL ICMPv6 Type | Note: IANA has marked the value 0x4D (previously "MPL Option") as | |||
"Deprecated". | ||||
IANA is requested to allocate an ICMPv6 Type from the "ICMPv6 "type" | 11.2. MPL ICMPv6 Type | |||
Numbers" registry of [RFC4443], as specified in Table 2 below: | ||||
+------+---------------------+---------------+ | IANA has allocated an ICMPv6 Type from the "ICMPv6 'type' Numbers" | |||
| Type | Name | Reference | | registry of [RFC4443], as specified in Table 2 below: | |||
+------+---------------------+---------------+ | ||||
| TBD | MPL Control Message | This Document | | ||||
+------+---------------------+---------------+ | ||||
Table 2: IPv6 Option Type Allocation | +------+---------------------+-----------+ | |||
| Type | Name | Reference | | ||||
+------+---------------------+-----------+ | ||||
| 159 | MPL Control Message | RFC 7731 | | ||||
+------+---------------------+-----------+ | ||||
In this document, the mnemonic MPL_ICMP_TYPE was used to refer to the | Table 2: ICMPv6 Type Allocation | |||
ICMPv6 Type above, which is TBD by IANA. | ||||
12.3. Well-known Multicast Addresses | 11.3. Well-Known Multicast Addresses | |||
IANA is requested to allocate an IPv6 multicast address, with Group | IANA has allocated an IPv6 multicast address, with Group ID in the | |||
ID in the range [0x01,0xFF] for 6LoWPAN compression [RFC6282], | range [0x01,0xFF] for IPv6 over Low-Power Wireless Personal Area | |||
"ALL_MPL_FORWARDERS" from the "Variable Scope Multicast Addresses" | Network (6LoWPAN) compression [RFC6282], "ALL_MPL_FORWARDERS" from | |||
sub-registry of the "IPv6 Multicast Address Space" registry [RFC3307] | the "Variable Scope Multicast Addresses" sub-registry of the "IPv6 | |||
as specified in Table 3 below: | Multicast Address Space Registry" [RFC3307], as specified in Table 3 | |||
below: | ||||
+---------------------+--------------------+-----------+------------+ | +---------------------+--------------------+-----------+------------+ | |||
| Address(s) | Description | Reference | Date | | | Address(es) | Description | Reference | Date | | |||
| | | | Registered | | | | | | Registered | | |||
+---------------------+--------------------+-----------+------------+ | +---------------------+--------------------+-----------+------------+ | |||
| FF0X:0:0:0:0:0:0:FC | ALL_MPL_FORWARDERS | This | 2013-04-10 | | | FF0X:0:0:0:0:0:0:FC | ALL_MPL_FORWARDERS | RFC 7731 | 2013-04-10 | | |||
| | | Document | | | ||||
+---------------------+--------------------+-----------+------------+ | +---------------------+--------------------+-----------+------------+ | |||
Table 3: Variable Scope Multicast Address Allocation | Table 3: Variable Scope Multicast Address Allocation | |||
13. Security Considerations | 12. Security Considerations | |||
MPL uses sequence numbers to maintain a total ordering of MPL Data | MPL uses sequence numbers to maintain a total ordering of MPL Data | |||
Messages from a MPL Seed. The use of sequence numbers allows a | Messages from an MPL Seed. The use of sequence numbers allows a | |||
denial-of-service attack where an attacker can spoof a message with a | denial-of-service attack where an attacker can spoof a message with a | |||
sufficiently large sequence number to: (i) flush messages from the | sufficiently large sequence number to (i) flush messages from the | |||
Buffered Message List and (ii) increase the MinSequence value for a | Buffered Message List and (ii) increase the MinSequence value for an | |||
MPL Seed in the corresponding Seed Set. In both cases, the side | MPL Seed in the corresponding Seed Set. In both cases, the side | |||
effect allows an attacker to halt the forwarding process of any MPL | effect allows an attacker to halt the forwarding process of any MPL | |||
Data Messages being disseminated and prevents MPL Forwarders from | Data Messages being disseminated and prevents MPL Forwarders from | |||
accepting new MPL Data Messages that a MPL Seed generates while the | accepting new MPL Data Messages that an MPL Seed generates while the | |||
sequence number is less than MinSequence or until the corresponding | sequence number is less than MinSequence or until the corresponding | |||
Seed Set Entry expires. The net effect applies to both proactive and | Seed Set Entry expires. The net effect applies to both proactive and | |||
reactive forwarding modes. | reactive forwarding modes. | |||
In general, the basic ability to inject messages into a Low-power and | In general, the basic ability to inject messages into an LLN may be | |||
Lossy Network may be used as a denial-of-service attack regardless of | used as a denial-of-service attack, regardless of what forwarding | |||
what forwarding protocol is used. Because MPL is a dissemination | protocol is used. Because MPL is a dissemination protocol, the | |||
protocol, the ability to spoof MPL messages allows an attacker to | ability to spoof MPL messages allows an attacker to affect an entire | |||
affect an entire MPL Domain. For these reasons, Low-power and Lossy | MPL Domain. For these reasons, LLNs typically employ link-layer | |||
Networks typically employ link-layer security mechanisms to mitigate | security mechanisms to mitigate an attacker's ability to inject | |||
an attacker's ability to inject messages. For example, the IEEE | messages. For example, the IEEE 802.15.4 [IEEE802.15.4] standard | |||
802.15.4 [IEEE802154] standard specifies frame security mechanisms | specifies frame security mechanisms using AES-128 to support access | |||
using AES-128 to support access control, message integrity, message | control, message integrity, message confidentiality, and replay | |||
confidentiality, and replay protection. However, if the attack | protection. However, if the attack vector includes attackers that | |||
vector includes attackers that have access to the LLN, then MPL | have access to the LLN, then MPL SHOULD NOT be used. | |||
SHOULD NOT be used. | ||||
To prevent attackers from injecting packets through a MPL Forwarder, | To prevent attackers from injecting packets through an MPL Forwarder, | |||
the MPL Forwarder MUST NOT accept or forward MPL Data Messages from a | the MPL Forwarder MUST NOT accept or forward MPL Data Messages from a | |||
communication interface that does not subscribe to the MPL Domain | communication interface that does not subscribe to the MPL Domain | |||
Address identified in message's destination address. | Address identified in the message's destination address. | |||
MPL uses the Trickle algorithm to manage message transmissions and | MPL uses the Trickle algorithm to manage message transmissions; | |||
the security considerations described in [RFC6206] apply. | therefore, the security considerations described in [RFC6206] apply. | |||
14. References | 13. References | |||
14.1. Normative References | 13.1. Normative References | |||
[RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982, | [RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982, | |||
August 1996. | DOI 10.17487/RFC1982, August 1996, | |||
<http://www.rfc-editor.org/info/rfc1982>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | ||||
<http://www.rfc-editor.org/info/rfc2119>. | ||||
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
(IPv6) Specification", RFC 2460, December 1998. | (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | |||
December 1998, <http://www.rfc-editor.org/info/rfc2460>. | ||||
[RFC2473] Conta, A. and S. Deering, "Generic Packet Tunneling in | [RFC2473] Conta, A. and S. Deering, "Generic Packet Tunneling in | |||
IPv6 Specification", RFC 2473, December 1998. | IPv6 Specification", RFC 2473, DOI 10.17487/RFC2473, | |||
December 1998, <http://www.rfc-editor.org/info/rfc2473>. | ||||
[RFC2780] Bradner, S. and V. Paxson, "IANA Allocation Guidelines For | [RFC2780] Bradner, S. and V. Paxson, "IANA Allocation Guidelines For | |||
Values In the Internet Protocol and Related Headers", BCP | Values In the Internet Protocol and Related Headers", | |||
37, RFC 2780, March 2000. | BCP 37, RFC 2780, DOI 10.17487/RFC2780, March 2000, | |||
<http://www.rfc-editor.org/info/rfc2780>. | ||||
[RFC3307] Haberman, B., "Allocation Guidelines for IPv6 Multicast | [RFC3307] Haberman, B., "Allocation Guidelines for IPv6 Multicast | |||
Addresses", RFC 3307, August 2002. | Addresses", RFC 3307, DOI 10.17487/RFC3307, August 2002, | |||
<http://www.rfc-editor.org/info/rfc3307>. | ||||
[RFC4007] Deering, S., Haberman, B., Jinmei, T., Nordmark, E., and | [RFC4007] Deering, S., Haberman, B., Jinmei, T., Nordmark, E., and | |||
B. Zill, "IPv6 Scoped Address Architecture", RFC 4007, | B. Zill, "IPv6 Scoped Address Architecture", RFC 4007, | |||
March 2005. | DOI 10.17487/RFC4007, March 2005, | |||
<http://www.rfc-editor.org/info/rfc4007>. | ||||
[RFC4443] Conta, A., Deering, S., and M. Gupta, "Internet Control | [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | |||
Message Protocol (ICMPv6) for the Internet Protocol | Control Message Protocol (ICMPv6) for the Internet | |||
Version 6 (IPv6) Specification", RFC 4443, March 2006. | Protocol Version 6 (IPv6) Specification", RFC 4443, | |||
DOI 10.17487/RFC4443, March 2006, | ||||
<http://www.rfc-editor.org/info/rfc4443>. | ||||
[RFC6206] Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko, | [RFC6206] Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko, | |||
"The Trickle Algorithm", RFC 6206, March 2011. | "The Trickle Algorithm", RFC 6206, DOI 10.17487/RFC6206, | |||
March 2011, <http://www.rfc-editor.org/info/rfc6206>. | ||||
[RFC6282] Hui, J. and P. Thubert, "Compression Format for IPv6 | [RFC6282] Hui, J., Ed., and P. Thubert, "Compression Format for IPv6 | |||
Datagrams over IEEE 802.15.4-Based Networks", RFC 6282, | Datagrams over IEEE 802.15.4-Based Networks", RFC 6282, | |||
September 2011. | DOI 10.17487/RFC6282, September 2011, | |||
<http://www.rfc-editor.org/info/rfc6282>. | ||||
[RFC6550] Winter, T., Thubert, P., Brandt, A., Hui, J., Kelsey, R., | [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J., | |||
Levis, P., Pister, K., Struik, R., Vasseur, JP., and R. | Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, | |||
Alexander, "RPL: IPv6 Routing Protocol for Low-Power and | JP., and R. Alexander, "RPL: IPv6 Routing Protocol for | |||
Lossy Networks", RFC 6550, March 2012. | Low-Power and Lossy Networks", RFC 6550, | |||
DOI 10.17487/RFC6550, March 2012, | ||||
<http://www.rfc-editor.org/info/rfc6550>. | ||||
[RFC7346] Droms, R., "IPv6 Multicast Address Scopes", RFC 7346, | [RFC7346] Droms, R., "IPv6 Multicast Address Scopes", RFC 7346, | |||
August 2014. | DOI 10.17487/RFC7346, August 2014, | |||
<http://www.rfc-editor.org/info/rfc7346>. | ||||
14.2. Informative References | 13.2. Informative References | |||
[Clausen2013] | [Clausen2013] | |||
Clausen, T., Colin de Verdiere, A., and J. Yi, | Clausen, T., de Verdiere, A., and J. Yi, "Performance | |||
"Performance Analysis of Trickle as a Flooding Mechanism", | Analysis of Trickle as a Flooding Mechanism", The 15th | |||
The 5th IEEE International Conference on Communication | IEEE International Conference on Communication | |||
Technology (ICCT2013), November 2013. | Technology (ICCT2013), DOI 10.1109/ICCT.2013.6820439, | |||
November 2013. | ||||
[IEEE802154] | [IEEE802.15.4] | |||
"IEEE Std. 802.15.4-2006", October 2006. | IEEE, "IEEE Standard for Local and metropolitan area | |||
networks--Part 15.4: Low-Rate Wireless Personal Area | ||||
Networks (LR-WPANs)", IEEE 802.15.4, | ||||
DOI 10.1109/ieeestd.2011.6012487, | ||||
<http://ieeexplore.ieee.org/servlet/ | ||||
opac?punumber=6012485>. | ||||
[RFC3973] Adams, A., Nicholas, J., and W. Siadak, "Protocol | [RFC3973] Adams, A., Nicholas, J., and W. Siadak, "Protocol | |||
Independent Multicast - Dense Mode (PIM-DM): Protocol | Independent Multicast - Dense Mode (PIM-DM): Protocol | |||
Specification (Revised)", RFC 3973, January 2005. | Specification (Revised)", RFC 3973, DOI 10.17487/RFC3973, | |||
January 2005, <http://www.rfc-editor.org/info/rfc3973>. | ||||
[RFC4601] Fenner, B., Handley, M., Holbrook, H., and I. Kouvelas, | [RFC4601] Fenner, B., Handley, M., Holbrook, H., and I. Kouvelas, | |||
"Protocol Independent Multicast - Sparse Mode (PIM-SM): | "Protocol Independent Multicast - Sparse Mode (PIM-SM): | |||
Protocol Specification (Revised)", RFC 4601, August 2006. | Protocol Specification (Revised)", RFC 4601, | |||
DOI 10.17487/RFC4601, August 2006, | ||||
<http://www.rfc-editor.org/info/rfc4601>. | ||||
Acknowledgements | ||||
The authors would like to acknowledge the helpful comments of Robert | ||||
Cragie, Esko Dijk, Ralph Droms, Paul Duffy, Adrian Farrel, Ulrich | ||||
Herberg, Owen Kirby, Philip Levis, Kerry Lynn, Joseph Reddy, Michael | ||||
Richardson, Ines Robles, Don Sturek, Dario Tedeschi, and Peter | ||||
van der Stok, which greatly improved the document. | ||||
Authors' Addresses | Authors' Addresses | |||
Jonathan W. Hui | Jonathan W. Hui | |||
Nest Labs | Nest Labs | |||
3400 Hillview Ave | 3400 Hillview Ave. | |||
Palo Alto, California 94304 | Palo Alto, California 94304 | |||
USA | United States | |||
Phone: +650 253 2770 | Phone: +650 253 2770 | |||
Email: jonhui@nestlabs.com | Email: jonhui@nestlabs.com | |||
Richard Kelsey | Richard Kelsey | |||
Silicon Labs | Silicon Labs | |||
25 Thomson Place | 25 Thomson Place | |||
Boston, Massachusetts 02210 | Boston, Massachusetts 02210 | |||
USA | United States | |||
Phone: +617 951 1225 | Phone: +617 951 1225 | |||
Email: richard.kelsey@silabs.com | Email: richard.kelsey@silabs.com | |||
End of changes. 201 change blocks. | ||||
509 lines changed or deleted | 526 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |