draft-ietf-roll-trickle-mcast-02.txt | draft-ietf-roll-trickle-mcast-03.txt | |||
---|---|---|---|---|
ROLL J. Hui | ROLL J. Hui | |||
Internet-Draft Cisco | Internet-Draft Cisco | |||
Intended status: Standards Track R. Kelsey | Intended status: Standards Track R. Kelsey | |||
Expires: April 22, 2013 Silicon Labs | Expires: July 28, 2013 Silicon Labs | |||
October 19, 2012 | January 24, 2013 | |||
Multicast Protocol for Low power and Lossy Networks (MPL) | Multicast Protocol for Low power and Lossy Networks (MPL) | |||
draft-ietf-roll-trickle-mcast-02 | draft-ietf-roll-trickle-mcast-03 | |||
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) that 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 an MPL domain. MPL uses the Trickle algorithm to drive | forwarders in an MPL domain. MPL uses the Trickle algorithm to | |||
packet transmissions for both control and data-plane packets. | manage message transmissions for both control and data-plane | |||
Specific Trickle parameter configurations allow MPL to trade between | messages. Different Trickle parameter configurations allow MPL to | |||
dissemination latency and transmission efficiency. | trade between dissemination latency and transmission efficiency. | |||
Status of this Memo | Status of this Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on April 22, 2013. | This Internet-Draft will expire on July 28, 2013. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2012 IETF Trust and the persons identified as the | Copyright (c) 2013 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 . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Applicability Statement . . . . . . . . . . . . . . . . . . . 5 | |||
4. Message Formats . . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 6 | |||
4.1. MPL Option . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.1. Information Base Overview . . . . . . . . . . . . . . . . 6 | |||
4.2. ICMPv6 MPL Message . . . . . . . . . . . . . . . . . . . . 8 | 4.2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
4.2.1. MPL Window . . . . . . . . . . . . . . . . . . . . . . 9 | 4.3. Signaling Overview . . . . . . . . . . . . . . . . . . . . 7 | |||
5. MPL Forwarder Behavior . . . . . . . . . . . . . . . . . . . . 11 | 5. MPL Constants . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
5.1. Multicast Packet Dissemination . . . . . . . . . . . . . . 11 | 5.1. Multicast Addresses . . . . . . . . . . . . . . . . . . . 9 | |||
5.1.1. Trickle Parameters and Variables . . . . . . . . . . . 12 | 5.2. Message Types . . . . . . . . . . . . . . . . . . . . . . 9 | |||
5.1.2. Proactive Propagation . . . . . . . . . . . . . . . . 12 | 5.3. MPL Forwarder Parameters . . . . . . . . . . . . . . . . . 9 | |||
5.1.3. Reactive Propagation . . . . . . . . . . . . . . . . . 13 | 5.4. Trickle Parameters . . . . . . . . . . . . . . . . . . . . 9 | |||
5.2. Sliding Windows . . . . . . . . . . . . . . . . . . . . . 13 | 6. Protocol Message Formats . . . . . . . . . . . . . . . . . . . 11 | |||
5.3. Transmission of MPL Multicast Packets . . . . . . . . . . 15 | 6.1. MPL Option . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
5.4. Reception of MPL Multicast Packets . . . . . . . . . . . . 16 | 6.2. MPL Control Message . . . . . . . . . . . . . . . . . . . 12 | |||
5.5. Transmission of ICMPv6 MPL Messages . . . . . . . . . . . 16 | 6.3. MPL Seed Info . . . . . . . . . . . . . . . . . . . . . . 13 | |||
5.6. Reception of ICMPv6 MPL Messages . . . . . . . . . . . . . 17 | 7. Information Base . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
6. MPL Parameters . . . . . . . . . . . . . . . . . . . . . . . . 19 | 7.1. Local Interface Set . . . . . . . . . . . . . . . . . . . 15 | |||
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 20 | 7.2. Domain Set . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | 7.3. Seed Set . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | 7.4. Buffered Message Set . . . . . . . . . . . . . . . . . . . 15 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 8. MPL Domains . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . . 23 | 9. MPL Seed Sequence Numbers . . . . . . . . . . . . . . . . . . 18 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . . 23 | 10. MPL Data Messages . . . . . . . . . . . . . . . . . . . . . . 19 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 24 | 10.1. MPL Data Message Generation . . . . . . . . . . . . . . . 19 | |||
10.2. MPL Data Message Transmission . . . . . . . . . . . . . . 19 | ||||
10.3. MPL Data Message Processing . . . . . . . . . . . . . . . 20 | ||||
11. MPL Control Messages . . . . . . . . . . . . . . . . . . . . . 22 | ||||
11.1. MPL Control Message Generation . . . . . . . . . . . . . . 22 | ||||
11.2. MPL Control Message Transmission . . . . . . . . . . . . . 22 | ||||
11.3. MPL Control Message Processing . . . . . . . . . . . . . . 23 | ||||
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 25 | ||||
13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 | ||||
13.1. MPL Option Type . . . . . . . . . . . . . . . . . . . . . 26 | ||||
13.2. MPL ICMPv6 Type . . . . . . . . . . . . . . . . . . . . . 26 | ||||
13.3. Well-known Multicast Addresses . . . . . . . . . . . . . . 26 | ||||
14. Security Considerations . . . . . . . . . . . . . . . . . . . 27 | ||||
15. Normative References . . . . . . . . . . . . . . . . . . . . . 28 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
1. Introduction | 1. Introduction | |||
Low power and Lossy Networks typically operate with strict resource | Low power and Lossy Networks typically operate with strict resource | |||
constraints in communication, computation, memory, and energy. Such | constraints in communication, computation, memory, and energy. Such | |||
resource constraints may preclude the use of existing IPv6 multicast | resource constraints may preclude the use of existing IPv6 multicast | |||
topology and forwarding mechanisms. Traditional IP multicast | routing and forwarding mechanisms. Traditional IP multicast delivery | |||
forwarding typically relies on topology maintenance mechanisms to | typically relies on topology maintenance mechanisms to discover and | |||
forward multicast messages to all subscribers of a multicast group. | maintain routes to all subscribers of a multicast group. However, | |||
However, maintaining such topologies in LLNs is costly and may not be | maintaining such topologies in LLNs is costly and may not be feasible | |||
feasible given the available resources. | given the 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 a LLN Border Router (LBR) and use source routing to | |||
forward packets away from the LBR. For the same reasons, a LLN | forward messages away from the LBR. For the same reasons, a LLN | |||
device may not be able to maintain a multicast forwarding topology | device may not be able to maintain a multicast routing topology when | |||
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 forwarding 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 forwarding topology, disseminating multicast messages | any multicast routing topology, disseminating multicast messages to | |||
to all MPL forwarders in an MPL domain. By using the Trickle | all MPL forwarders in an MPL domain. By using the Trickle algorithm | |||
algorithm [RFC6206], MPL requires only small, constant state for each | [RFC6206], MPL requires only small, constant state for each MPL | |||
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", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
document are to be interpreted as described in RFC 2119 [RFC2119]. | "OPTIONAL" in this document are to be interpreted as described in | |||
[RFC2119]. | ||||
The following terms are used throughout this document: | The following terms are used throughout this document: | |||
MPL forwarder An IPv6 router that subscribes to the MPL | MPL Forwarder - A router that implements this protocol. A MPL | |||
multicast group and participates in disseminating | Forwarder is equipped with at least one MPL | |||
MPL multicast packets. | Interface. | |||
MPL multicast scope The multicast scope that MPL uses when forwarding | MPL Interface - An MPL Forwarder's attachment to a | |||
MPL multicast packets. In other words, the | communications medium, over which it transmits | |||
multicast scope of the IPv6 Destination Address | and receives MPL Data Messages and MPL Control | |||
of an MPL multicast packet. | Messages according to this specification. An MPL | |||
Interface is assigned one or more unicast | ||||
addresses and is subscribed to one or more MPL | ||||
Domain Addresses. | ||||
MPL domain A connected set of MPL forwarders that define the | MPL Domain Address - A multicast address that identifies the set of | |||
extent of the MPL dissemination process. As a | MPL Interfaces within an MPL Domain. MPL Data | |||
form of flood, all MPL forwarders in an MPL | Messages disseminated in an MPL Domain have the | |||
domain will receive MPL multicast packets. The | associated MPL Domain Address as their | |||
MPL domain MUST be composed of at least one MPL | destination address. | |||
multicast scope and MAY be composed of multiple | ||||
MPL multicast scopes. | ||||
MPL seed A MPL forwarder that begins the dissemination | MPL Domain - A scope zone, as defined in [RFC4007], in which | |||
process for an MPL multicast packet. The MPL | MPL Interfaces subscribe to the same MPL Domain | |||
seed may be different than the source of the | Address and participate in disseminating MPL Data | |||
original multicast packet. | Messages. | |||
MPL seed identifier An identifier that uniquely identifies an MPL | MPL Data Message - A multicast message that is used to communicate | |||
forwarder within its MPL domain. | a multicast payload between MPL Forwarders and | |||
contains an MPL Option in the IPv6 header. A MPL | ||||
Data Message has its destination address set to | ||||
the MPL Domain Address. | ||||
original multicast packet An IPv6 multicast packet that is | MPL Control Message - A link-local multicast message that is used to | |||
disseminated using MPL. | communicate information about recently received | |||
MPL Data Messages to neighboring MPL Forwarders. | ||||
MPL multicast packet An IPv6 multicast packet that contains an MPL | MPL Seed - An MPL Forwarder that generates MPL Data | |||
Hop-by-Hop Option. When either source or | Messages and serves as an entry point into an MPL | |||
destinations are beyond the MPL multicast scope, | Domain. | |||
the MPL multicast packet is an IPv6-in-IPv6 | ||||
packet that contains an MPL Hop-by-Hop Option in | ||||
the outer IPv6 header and encapsulates an | ||||
original multicast packet. When both source and | ||||
destinations are within the MPL multicast scope, | ||||
the MPL Hop-by-Hop Option may be included | ||||
directly within the original multicast packet. | ||||
3. Overview | 3. Applicability Statement | |||
MPL delivers IPv6 multicast packets by disseminating them to all MPL | This protocol is an IPv6 multicast forwarding protocol for Low-Power | |||
forwarders within an MPL domain. MPL dissemination is a form of | and Lossy Networks. By implementing a controlled dissemination using | |||
flood. An MPL forwarder may broadcast/multicast an MPL multicast | the Trickle algorithm, this protocol is designed for networks that | |||
packet out of the same physical interface on which it was received. | communicate using low-power and lossy links with widely varying | |||
Using link-layer broadcast/multicast allows MPL to forward multicast | topologies in both the space and time dimensions. | |||
packets without explicitly identifying next-hop destinations. An MPL | ||||
forwarder may also broadcast/multicast MPL multicast packets out | ||||
other interfaces to disseminate the message across different links. | ||||
MPL does not build or maintain a multicast forwarding topology to | ||||
forward multicast packets. | ||||
Any MPL forwarder may initiate the dissemination process by serving | 4. Protocol Overview | |||
as an MPL seed for an original multicast packet. The MPL seed may or | ||||
may not be the same device as the source of the original multicast | ||||
packet. When the original multicast packet's source is outside the | ||||
LLN, the MPL seed may be the ingress router. Even if an original | ||||
multicast packet source is within the LLN, the source may first | ||||
forward the multicast packet to the MPL seed using IPv6-in-IPv6 | ||||
tunneling. Because MPL state requirements grows with the number of | ||||
active MPL seeds, limiting the number of MPL seeds reduces the amount | ||||
of state that MPL forwarders must maintain. | ||||
Because MPL typically broadcasts/multicasts MPL packets out of the | The goal of MPL is to deliver multicast messages to all interfaces | |||
same interface on which they were received, MPL forwarders are likely | that subscribe to the multicast messages' destination address within | |||
to receive an MPL multicast packet more than once. The MPL seed tags | an MPL Domain. | |||
each original multicast packet with an MPL seed identifier and a | ||||
sequence number. The sequence number provides a total ordering of | ||||
MPL multicast packets disseminated by the MPL seed. | ||||
MPL defines a new IPv6 Hop-by-Hop Option, the MPL Option, to include | 4.1. Information Base Overview | |||
MPL-specific information along with the original multicast packet. | ||||
Each IPv6 multicast packet that MPL disseminates includes the MPL | ||||
Option. Because the original multicast packet's source and the MPL | ||||
seed may not be the same device, the MPL Option may be added to the | ||||
original multicast packet en-route. To allow Path MTU discovery to | ||||
work properly, MPL encapsulates the original multicast packet in | ||||
another IPv6 header that includes the MPL Option. | ||||
Upon receiving a new MPL multicast packet for forwarding, the MPL | A node records necessary protocol state in the following information | |||
forwarder may proactively transmit the MPL multicast packet packet a | sets: | |||
limited number of times and then falls back into an optional reactive | ||||
mode. In maintenance mode, an MPL forwarder buffers recently | ||||
received MPL multicast packets and advertises a summary of recently | ||||
received MPL multicast packets from time to time, allowing | ||||
neighboring MPL forwarders to determine if they have any new | ||||
multicast packets to offer or receive. | ||||
MPL forwarders schedule their packet (control and data) transmissions | o The Local Interface Set records the set of local MPL Interfaces | |||
using the Trickle algorithm [RFC6206]. Trickle's adaptive | and the unicast addresses assigned to those MPL Interfaces. | |||
transmission interval allows MPL to quickly disseminate messages when | ||||
there are new MPL multicast packets, but reduces transmission | ||||
overhead as the dissemination process completes. Trickle's | ||||
suppression mechanism and transmission time selection allow MPL's | ||||
communication rate to scale logarithmically with density. | ||||
4. Message Formats | o The Domain Set records the set of MPL Domain Addresses and the | |||
local MPL Interfaces that subscribe to those addresses. | ||||
4.1. MPL Option | o The Seed Set records information about received MPL Data Messages | |||
received from an MPL Seed. The Seed Set maintains the minimum | ||||
sequence number that the MPL Forwarder is willing to receive or | ||||
has buffered in its Buffered Message Set. MPL uses the Seed Set | ||||
and Buffered Message Set to determine when to accept an MPL Data | ||||
Message, process its payload, and retransmit it. | ||||
The MPL Option is carried in an IPv6 Hop-by-Hop Options header, | o The Buffered Message Set records recently received MPL Data | |||
immediately following the IPv6 header. The MPL Option has the | Messages from an MPL Seed. MPL Data Messages resident in the | |||
following format: | Buffered Message Set have sequence numbers that are greater than | |||
or equal to the minimum threshold maintained in the Seed Set. MPL | ||||
uses the Buffered Message Set to store MPL Data Messages that may | ||||
be transmitted by the MPL Forwarder for forwarding. | ||||
4.2. Overview | ||||
MPL achieves its goal by implementing a controlled flood that | ||||
attempts to disseminate the multicast data message to all interfaces | ||||
within an MPL Domain. MPL performs the following tasks to | ||||
disseminate a multicast message: | ||||
o When having a multicast message to forward into an MPL Domain, the | ||||
MPL Seed generates an MPL Data Message that includes the MPL Seed | ||||
Identifier, a newly generated sequence number, and the multicast | ||||
message. If the multicast destination address is not the MPL | ||||
Domain Address, IP-in-IP [RFC2473] is used to encapsulate the | ||||
multicast message in the MPL Data Message. | ||||
o Upon receiving an MPL Data Message, the MPL Forwarder extracts the | ||||
MPL Seed and sequence number and determines whether or not the MPL | ||||
Data Message was previously received using the Seed Set and | ||||
Buffered Message Set. | ||||
* If the sequence number is less than the lower-bound sequence | ||||
number maintained in the Seed Set or a message with the same | ||||
sequence number exists within the Buffered Message Set, the MPL | ||||
Forwarder marks the MPL Data Message as old. | ||||
* Otherwise, the MPL Forwarder marks the MPL Data Message as new. | ||||
o For each newly received MPL Data Message, an MPL Forwarder updates | ||||
the Seed Set, adds the MPL Data Message into the Buffered Message | ||||
Set, processes its payload, and multicasts the MPL Data Message a | ||||
number of times on all MPL Interfaces participating in the same | ||||
MPL Domain to forward the message. | ||||
o Each MPL Forwarder may periodically link-local multicast MPL | ||||
Control Messages on MPL Interfaces to communicate information | ||||
contained in the MPL Forwarder's Seed Set and Buffered Message | ||||
Sets. | ||||
o Upon receiving an MPL Control Message, an MPL Forwarder determines | ||||
whether there are any new MPL Data Messages that have yet to be | ||||
received by the MPL Control Message's source and multicasts those | ||||
MPL Data Messages. | ||||
MPL's configuration parameters allow two forwarding strategies for | ||||
disseminating MPL Data Messages. | ||||
Proactive Forwarding - With proactive forwarding, an MPL Forwarder | ||||
schedules transmissions of MPL Data Messages using the Trickle | ||||
algorithm, without any prior indication that neighboring nodes | ||||
have yet to receive the message. After transmitting the MPL Data | ||||
Message a limited number of times, the MPL forwarder may terminate | ||||
proactive forwarding for the MPL Data Message message. | ||||
Reactive Forwarding - With reactive forwarding, an MPL Forwarder | ||||
link-local multicasts MPL Control Messages using the Trickle | ||||
algorithm [RFC6206]. MPL Forwarders use MPL Control Messages to | ||||
discover new MPL Data Messages that have not yet been received. | ||||
When discovering that a neighboring MPL Forwarder has not yet | ||||
received a new MPL Data Message, the MPL Forwarder schedules those | ||||
MPL Data Messages for transmission using the Trickle algorithm. | ||||
4.3. Signaling Overview | ||||
This protocol generates and processes the following messages: | ||||
MPL Data Message - Generated by an MPL Seed to deliver a multicast | ||||
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 | ||||
the message and is valid within the MPL Domain. The MPL Data | ||||
Message's destination is the MPL Domain Address corresponding to | ||||
the MPL Domain. An MPL Data Message contains: | ||||
* The Seed Identifier of the MPL Seed that generated the MPL Data | ||||
Message. | ||||
* The sequence number of the MPL Seed that generated the MPL Data | ||||
Message. | ||||
* The original multicast message. | ||||
MPL Control Message - Generated by an MPL Forwarder to communicate | ||||
information contained in the Seed Set and Buffered Message Set to | ||||
neighboring MPL Forwarders. An MPL Control Message contains a | ||||
list of tuples for each entry in the Seed Set. Each tuple | ||||
contains: | ||||
* The minimum sequence number maintained in the Seed Set for the | ||||
MPL Seed. | ||||
* A bit-vector indicating the sequence numbers of MPL Data | ||||
Messages resident in the Buffered Message Set for the MPL Seed, | ||||
where the first bit represents a sequence number equal to the | ||||
minimum threshold maintained in the Seed Set. | ||||
* The length of the bit-vector. | ||||
5. MPL Constants | ||||
This section describes various program and networking constants used | ||||
by MPL. | ||||
5.1. Multicast Addresses | ||||
MPL makes use of MPL Domain Addresses to identify MPL Interfaces of | ||||
an MPL Domain. By default, MPL Forwarders subscribe to the | ||||
ALL_MPL_FORWARDERS multicast address with a scope value of 3 (subnet- | ||||
local). | ||||
For each MPL Domain Address that an MPL Interface subscribes to, the | ||||
MPL Interface MUST also subscribe to the MPL Domain Address with a | ||||
scope value of 2 (link-local) when reactive forwarding is in use. | ||||
MPL Forwarders use the link-scoped MPL Domain Address to communicate | ||||
MPL Control Messages to neighboring (i.e. on-link) MPL Forwarders. | ||||
5.2. Message Types | ||||
MPL defines an IPv6 Option for carrying an MPL Seed Identifier and a | ||||
sequence number within an MPL Data Message. The IPv6 Option Type has | ||||
value MPL_OPT_TYPE. | ||||
MPL defines an ICMPv6 Message (MPL Control Message) for communicating | ||||
information contained in its Seed Set and Buffered Message Set to | ||||
neighboring MPL Forwarders. The MPL Control Message has ICMPv6 Type | ||||
MPL_ICMP_TYPE. | ||||
5.3. MPL Forwarder Parameters | ||||
PROACTIVE_FORWARDING A boolean value that indicates whether the MPL | ||||
Forwarder should schedule MPL Data Message transmissions after | ||||
receiving them for the first time. | ||||
SEED_SET_LIFETIME The minimum lifetime for an entry in the Seed Set. | ||||
5.4. Trickle Parameters | ||||
As specified in [RFC6206], a Trickle timer runs for a defined | ||||
interval and has three configuration parameters: the minimum interval | ||||
size Imin, the maximum interval size Imax, and a redundancy constant | ||||
k. | ||||
This specification defines a fourth Trickle configuration parameter, | ||||
TimerExpirations, which indicates the number of Trickle timer | ||||
expiration events that occur before terminating the Trickle | ||||
algorithm. | ||||
Each MPL forwarder maintains a separate Trickle parameter set for MPL | ||||
Data Message and MPL Control Message transmissions. The Trickle | ||||
parameters are listed below: | ||||
DATA_MESSAGE_IMIN The minimum Trickle timer interval, as defined in | ||||
[RFC6206], for MPL Data Message transmissions. | ||||
DATA MESSAGE_IMAX The maximum Trickle timer interval, as defined in | ||||
[RFC6206], for MPL Data Message transmissions. | ||||
DATA_MESSAGE_K The redundancy constant, as defined in [RFC6206], for | ||||
MPL Data Message transmissions. | ||||
DATA_MESSAGE_TIMER_EXPIRATIONS The number of Trickle timer | ||||
expirations that occur before terminating the Trickle algorithm | ||||
for MPL Data Message transmissions. | ||||
CONTROL_MESSAGE_IMIN The minimum Trickle timer interval, as defined | ||||
in [RFC6206], for MPL Control Message transmissions. | ||||
CONTROL_MESSAGE_IMAX The maximum Trickle timer interval, as defined | ||||
in [RFC6206], for MPL Control Message transmissions. | ||||
CONTROL_MESSAGE_K The redundancy constant, as defined in [RFC6206], | ||||
for MPL Control Message transmissions. | ||||
CONTROL_MESSAGE_TIMER_EXPIRATIONS The number of Trickle timer | ||||
expirations that occur before terminating the Trickle algorithm | ||||
for MPL Control Message transmissions. | ||||
It is RECOMMENDED that all MPL Forwarder within an MPL Domain use the | ||||
same values for the Trickle Parameters above, as specified in | ||||
[RFC6206]. | ||||
6. Protocol Message Formats | ||||
The protocol messages generated and processed by an MPL Forwarder are | ||||
described in this section. | ||||
6.1. MPL Option | ||||
The MPL Option is carried in MPL Data Messages in an IPv6 Hop-by-Hop | ||||
Options header, immediately following the IPv6 header. The MPL | ||||
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| rsv | sequence | seed-id (optional) | | | S |M|V| rsv | sequence | seed-id (optional) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Option Type XX (to be confirmed by IANA). | Option Type MPL_OPT_TYPE | |||
Opt Data Len Length of the Option Data field in octets. MUST | Opt Data Len Length of the Option Data field in octets. | |||
be set to either 2 or 4. | ||||
S 2-bit unsigned integer. Identifies the length of | S 2-bit unsigned integer. Identifies the length of | |||
seed-id. 0 indicates that the seed-id is 0 and | seed-id. 0 indicates that the seed-id is the IPv6 | |||
not included in the MPL Option. 1 indicates that | Source Address and not included in the MPL | |||
the seed-id is a 16-bit unsigned integer. 2 | Option. 1 indicates that the seed-id is a 16-bit | |||
indicates that the seed-id is a 64-bit unsigned | unsigned integer. 2 indicates that the seed-id is | |||
integer. 3 indicates that the seed-id is a 128- | a 64-bit unsigned integer. 3 indicates that the | |||
bit unsigned integer. | seed-id is a 128-bit unsigned integer. | |||
M 1-bit flag. 0 indicates that the value in | M 1-bit flag. 1 indicates that the value in | |||
sequence is not the greatest sequence number that | sequence is known to be the largest sequence | |||
was received from the MPL seed. | number that was received from the MPL Seed. | |||
rsv 5-bit reserved field. MUST be set to zero and | V 1-bit flag. 0 indicates that the MPL Option | |||
incoming MPL multicast packets in which they are | conforms to this specification. MPL Options | |||
not zero MUST be dropped. | received in which this flag is 1 MUST be dropped. | |||
rsv 4-bit reserved field. MUST be set to 0 on | ||||
transmission and ignored on reception. | ||||
sequence 8-bit unsigned integer. Identifies relative | sequence 8-bit unsigned integer. Identifies relative | |||
ordering of MPL multicast packets from the source | ordering of MPL Data Messages from the MPL Seed | |||
identified by seed-id. | identified by seed-id. | |||
seed-id Uniquely identifies the MPL seed that initiated | seed-id Uniquely identifies the MPL Seed that initiated | |||
dissemination of the MPL multicast packet. The | dissemination of the MPL Data Message. The size | |||
size of seed-id is indicated by the S field. | of seed-id is indicated by the S field. | |||
The Option Data of the Trickle Multicast option MUST NOT change as | The Option Data (in particular the M flag) of the MPL Option is | |||
the MPL multicast packet is forwarded. Nodes that do not understand | updated by MPL Forwarders as the MPL Data Message is forwarded. | |||
the Trickle Multicast option MUST discard the packet. Thus, | Nodes that do not understand the MPL Option MUST discard the MPL Data | |||
according to [RFC2460] the three high order bits of the Option Type | Message. Thus, according to [RFC2460] the three high order bits of | |||
must be set to '010'. The Option Data length is variable. | the Option Type are set to '011'. The Option Data length is | |||
variable. | ||||
The seed-id uniquely identifies an MPL seed within the MPL domain. | The seed-id uniquely identifies an MPL Seed. When seed-id is 128 | |||
When seed-id is 128 bits (S=3), the MPL seed MAY use an IPv6 address | bits (S=3), the MPL seed MAY use an IPv6 address assigned to one of | |||
assigned to one of its interfaces that is unique within the MPL | its interfaces that is unique within the MPL domain. Managing MPL | |||
domain. Managing MPL seed identifiers is not within scope of this | Seed Identifiers is not within scope of this document. | |||
document. | ||||
The sequence field establishes a total ordering of MPL multicast | The sequence field establishes a total ordering of MPL Data Messages | |||
packets from the same MPL seed. The MPL seed MUST increment the | generated by an MPL Seed for an MPL Domain. The MPL Seed MUST | |||
sequence field's value on each new MPL multicast packet that it | increment the sequence field's value on each new MPL Data Message | |||
disseminates. Implementations MUST follow the Serial Number | that it generates for an MPL Domain. Implementations MUST follow the | |||
Arithmetic as defined in [RFC1982] when incrementing a sequence value | Serial Number Arithmetic as defined in [RFC1982] when incrementing a | |||
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. | |||
4.2. ICMPv6 MPL Message | 6.2. MPL Control Message | |||
The MPL forwarder uses ICMPv6 MPL messages to advertise information | An MPL Forwarder uses ICMPv6 messages to communicate information | |||
about recently received MPL multicast packets. The ICMPv6 MPL | contained in its Seed Set and Buffered Message Set to neighboring MPL | |||
message has the following format: | Forwarders. The MPL Control Message 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type | Code | Checksum | | | Type | Code | Checksum | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
. MPL Window[1..n] . | . MPL Seed Info[1..n] . | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
IP Fields: | IP Fields: | |||
Source Address A link-local address assigned to the sending | Source Address A link-local address assigned to the sending | |||
interface. | interface. | |||
Destination Address The link-local all-nodes MPL forwarders multicast | Destination Address The link-scoped MPL Domain Address corresponding | |||
address (FF02::TBD). | to the MPL Domain. | |||
Hop Limit 255 | Hop Limit 255 | |||
ICMPv6 Fields: | ICMPv6 Fields: | |||
Type XX (to be confirmed by IANA). | Type MPL_ICMP_TYPE | |||
Code 0 | Code 0 | |||
Checksum The ICMP checksum. See [RFC4443]. | Checksum The ICMP checksum. See [RFC4443]. | |||
MPL Window[1..n] List of one or more MPL Windows (defined in | MPL Seed Info[1..n] List of one or more MPL Seed Info entries. | |||
Section 4.2.1). | ||||
An MPL forwarder transmits an ICMPv6 MPL message to advertise | The MPL Control Message indicates the sequence numbers of MPL Data | |||
information about buffered MPL multicast packets. More explicitly, | Messages that are within the Buffered Message Set. The MPL Control | |||
the ICMPv6 MPL message encodes the sliding window state (described in | Message also indicates the sequence numbers of MPL Data Messages that | |||
Section 5.2) that the MPL forwarder maintains for each MPL seed. The | an MPL Forwarder is willing to receive. The MPL Control Message | |||
advertisement serves to indicate to neighboring MPL forwarders | allows neighboring MPL Forwarders to determine whether there are any | |||
regarding newer messages that it may send or the neighboring MPL | new MPL Data Messages to exchange. | |||
forwarders have yet to receive. | ||||
4.2.1. MPL Window | 6.3. MPL Seed Info | |||
An MPL Window encodes the sliding window state (described in | An MPL Seed Info encodes the minimum sequence number for the MPL Seed | |||
Section 5.2 that the MPL forwarder maintains for an MPL seed. Each | maintained in the Seed Set. The MPL Seed Info also indicates the | |||
MPL Window has the following format: | sequence numbers of MPL Data Messages generated by the MPL Seed | |||
within the Buffered Message 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| w-min | w-len | S | seed-id (0, 2 or 16 octets) | | | min-seqno | bm-len | S | seed-id (0/2/8/16 octets) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
. buffered-mpl-packets (0 to 8 octets) . | . buffered-mpl-messages (variable length) . | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
w-min 8-bit unsigned integer. Indicates the first | min-seqno 8-bit unsigned integer. The lower-bound sequence | |||
sequence number associated with the first bit in | number for the MPL Seed. | |||
buffered-mpl-packets. | ||||
w-len 6-bit unsigned integer. Indicates the size of | bm-len 6-bit unsigned integer. The size of buffered- | |||
the sliding window and the number of valid bits | mpl-messages in octets. | |||
in buffered-mpl-packets. The sliding window's | ||||
upper bound is the sum of w-min and w-len. | ||||
S 2-bit unsigned integer. Identifies the length of | S 2-bit unsigned integer. Identifies the length of | |||
seed-id. 0 indicates that the seed-id value is 0 | seed-id. 0 indicates that the seed-id value is | |||
and not included in the MPL Option. 1 indicates | the IPv6 Source Address and not included in the | |||
that the seed-id value is a 16-bit unsigned | MPL Seed Info. 1 indicates that the seed-id value | |||
integer. 2 indicates that the seed-id value is a | is a 16-bit unsigned integer. 2 indicates that | |||
128-bit unsigned integer. 3 is reserved. | the seed-id value is a 64-bit unsigned integer. 3 | |||
indicates that the seed-id is a 128-bit unsigned | ||||
integer. | ||||
seed-id Indicates the MPL seed associated with this | seed-id Variable-length unsigned integer. Indicates the | |||
sliding window. | MPL Seed associated with this MPL Seed Info. | |||
buffered-mpl-packets Variable-length bit vector. Identifies the | buffered-mpl-messages Variable-length bit vector. Identifies the | |||
sequence numbers of MPL multicast packets that | sequence numbers of MPL Data Messages maintained | |||
the MPL forwarder has buffered. The sequence | in the Buffered Message Set for the MPL Seed. | |||
number is determined by w-min + i, where i is the | The sequence number is determined by min-seqno + | |||
offset within buffered-mpl-packets. | i, where i is the bit offset within buffered-mpl- | |||
messages. | ||||
The MPL Window does not have any octet alignment requirement. | The MPL Seed Info does not have any octet alignment requirement. | |||
5. MPL Forwarder Behavior | 7. Information Base | |||
An MPL forwarder implementation needs to manage sliding windows for | 7.1. Local Interface Set | |||
each active MPL seed. The sliding window allows the MPL forwarder to | ||||
determine what multicast packets to accept and what multicast packets | ||||
are buffered. An MPL forwarder must also manage MPL packet | ||||
transmissions. | ||||
5.1. Multicast Packet Dissemination | The Local Interface Set records the local MPL Interfaces of an MPL | |||
Forwarder. The Local Interface Set consists of Local Interface | ||||
Tuples, one per MPL Interface: (AddressSet). | ||||
MPL uses the Trickle algorithm to control packet transmissions when | AddressSet - a set of unicast addresses assigned to the MPL | |||
disseminating MPL multicast packets [RFC6206]. MPL provides two | Interface. | |||
propagation mechanisms for disseminating MPL multicast packets. | ||||
1. With proactive propagation, an MPL forwarder transmits buffered | 7.2. Domain Set | |||
MPL multicast packets using the Trickle algorithm. This method | ||||
is called proactive propagation since an MPL forwarder actively | ||||
transmits MPL multicast packets without discovering that a | ||||
neighboring MPL forwarder has yet to receive the message. | ||||
2. With reactive propagation, an MPL forwarder transmits ICMPv6 MPL | The Domain Set records the MPL Interfaces that subscribe to each MPL | |||
messages using the Trickle algorithm. An MPL forwarder only | Domain Address. The Domain Set consists of MPL Domain Tuples, one | |||
transmits buffered MPL multicast packets upon discovering that | per MPL Domain: (MPLInterfaceSet). | |||
neighboring devices have not yet to receive the corresponding MPL | ||||
multicast packets. | ||||
When receiving a new multicast packet, an MPL forwarder first | MPLInterfaceSet - a set of MPL Interfaces that subscribe to the MPL | |||
utilizes proactive propagation to forward the MPL multicast packet. | Domain Address that identifies the MPL Domain. | |||
Proactive propagation reduces dissemination latency since it does not | ||||
require discovering that neighboring devices have not yet received | ||||
the MPL multicast packet. MPL forwarders utilize proactive | ||||
propagation for newly received MPL multicast packets since they can | ||||
assume that some neighboring MPL forwarders have yet to receive the | ||||
MPL multicast packet. After a limited number of MPL multicast packet | ||||
transmissions, the MPL forwarder may terminate proactive propagation | ||||
for the MPL multicast packet. | ||||
An MPL forwarder may optionally use reactive propagation to continue | 7.3. Seed Set | |||
the dissemination process with lower communication overhead. With | ||||
reactive propagation, neighboring MPL forwarders use ICMPv6 MPL | ||||
messages to discover new MPL multicast messages that have not yet | ||||
been received. When discovering that a neighboring MPL forwarder has | ||||
not yet received a new MPL multicast packet, the MPL forwarder | ||||
enables proactive propagation again. | ||||
5.1.1. Trickle Parameters and Variables | The Seed Set records a sliding window used to determine the sequence | |||
numbers of MPL Data Messages that an MPL Forwarder is willing to | ||||
accept generated by the MPL Seed. It consists of MPL Seed Tuples: | ||||
(SeedID, MinSequence, Lifetime). | ||||
As specified in RFC 6206 [RFC6206], a Trickle timer runs for a | SeedID - the identifier for the MPL Seed. | |||
defined interval and has three configuration parameters: the minimum | ||||
interval size Imin, the maximum interval size Imax, and a redundancy | ||||
constant k. | ||||
MPL defines a fourth configuration parameter, TimerExpirations, which | MinSequence - a lower-bound sequence number that represents the | |||
indicates the number of Trickle timer expiration events that occur | sequence number of the oldest MPL Data Message the MPL Forwarder | |||
before terminating the Trickle algorithm. | is willing to receive or transmit. An MPL Forwarder MUST ignore | |||
any MPL Data Message that has sequence value less than than | ||||
MinSequence. | ||||
Each MPL forwarder maintains a separate Trickle parameter set for the | Lifetime - indicates the minimum lifetime of the Seed Set entry. An | |||
proactive and reactive propagation methods. TimerExpirations MUST be | MPL Forwarder MUST NOT free a Seed Set entry before its expires. | |||
greater than 0 for proactive propagation. TimerExpirations MAY be | ||||
set to 0 for reactive propagation, which effectively disables | ||||
reactive propagation. | ||||
As specified in RFC 6206 [RFC6206], a Trickle timer has three | 7.4. Buffered Message Set | |||
variables: the 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 of Trickle | The Buffered Message Set records recently received MPL Data Messages | |||
timer expiration events since the Trickle timer was last reset. | from an MPL Seed. An MPL Forwarder uses the Buffered Message Set to | |||
buffer MPL Data Messages while the MPL Forwarder is forwarding the | ||||
MPL Data Messages. The Buffered Message Set consists of Buffered | ||||
Message Tuples: (SeedID, SequenceNumber, DataMessage). | ||||
5.1.2. Proactive Propagation | SeedID - the identifier for the MPL Seed that generated the MPL Data | |||
Message. | ||||
With proactive propagation, the MPL forwarder transmits buffered MPL | SequenceNumber - the sequence number for the MPL Data Message. | |||
multicast packets using the Trickle algorithm. Each buffered MPL | ||||
multicast packet that is proactively being disseminated with | ||||
proactive propagation has an associated Trickle timer. Adhering to | ||||
Section 5 of RFC 6206 [RFC6206], this document defines the following: | ||||
o This document defines a "consistent" transmission for proactive | DataMessage - the MPL Data Message. | |||
propagation as receiving an MPL multicast packet that has the same | ||||
MPL seed identifier and sequence number as a buffered MPL packet. | ||||
o This document defines an "inconsistent" transmission for proactive | All MPL Data Messages within the Buffered Message Set MUST have a | |||
propagation as receiving an MPL multicast packet that has the same | sequence number greater than or equal to MinSequence for the | |||
MPL seed identifier, the M flag set, and has a sequence number | corresponding SeedID. When increasing MinSequence for an MPL Seed, | |||
less than the buffered MPL multicast packet's sequence number. | the MPL Forwarder MUST delete any MPL Data Messages from the Buffered | |||
Message Set that have sequence numbers less than MinSequence. | ||||
o This document does not define any external "events". | 8. MPL Domains | |||
o This document defines both MPL multicast packets and ICMPv6 MPL | An MPL Domain is a scope zone, as defined in [RFC4007], in which MPL | |||
multicast packets as Trickle messages. These messages are defined | Interfaces subscribe to the same MPL Domain Address and participate | |||
in the sections below. | in disseminating MPL Data Messages. | |||
o The actions outside the Trickle algorithm that the protocol takes | By default, an MPL Forwarder MUST participate in an MPL Domain | |||
involve managing sliding window state, and is specified in | identified by the ALL_MPL_FORWARDERS multicast address with a scope | |||
Section 5.2. | value of 3 (subnet-local). | |||
5.1.3. Reactive Propagation | An MPL Forwarder MAY participate in additional MPL Domains identified | |||
by other multicast addresses. An MPL Interface MUST subscribe to the | ||||
MPL Domain Addresses for the MPL Domains that it participates in. | ||||
The allocation of other multicast addresses is out of scope. | ||||
With reactive propagation, the MPL forwarder transmits ICMPv6 MPL | For each MPL Domain Address that an MPL Interface subscribes to, the | |||
messages using the Trickle algorithm. A MPL forwarder maintains a | MPL Interface MUST also subscribe to the same MPL Domain Address with | |||
single Trickle timer for reactive propagation with each MPL domain. | a scope value of 2 (link-local) when reactive forwarding is in use | |||
When REACTIVE_TIMER_EXPIRATIONS is 0, the MPL forwarder does not | (i.e. when communicating MPL Control Messages). | |||
execute the Trickle algorithm for reactive propagation and reactive | ||||
propagation is disabled. Adhering to Section 5 of RFC 6206 | ||||
[RFC6206], this document defines the following: | ||||
o This document defines a "consistent" transmission for reactive | 9. MPL Seed Sequence Numbers | |||
propagation as receiving an ICMPv6 MPL message that indicates | ||||
neither the receiving nor transmitting node has new MPL multicast | ||||
packets to offer. | ||||
o This document defines an "inconsistent" transmission for reactive | Each MPL Seed maintains a sequence number for each MPL Domain that it | |||
propagation as receiving an ICMPv6 MPL message that indicates | serves. The sequence numbers are included in MPL Data Messages | |||
either the receiving or transmitting node has at least one new MPL | generated by the MPL Seed. The MPL Seed MUST increment the sequence | |||
multicast packet to offer. | number for each MPL Data Message that it generates for an MPL Domain. | |||
Implementations MUST follow the Serial Number Arithmetic as defined | ||||
in [RFC1982] when incrementing a sequence value or comparing two | ||||
sequence values. This sequence number is used to establish a total | ||||
ordering of MPL Data Messages generated by an MPL Seed for an MPL | ||||
Domain. | ||||
o This document defines an "event" for reactive propagation as | 10. MPL Data Messages | |||
updating any sliding window (i.e. changing the value of WindowMin, | ||||
WindowMax, or the set of buffered MPL multicast packets) in | ||||
response to receiving an MPL multicast packet. | ||||
o This document defines both MPL multicast packets and ICMPv6 MPL | 10.1. MPL Data Message Generation | |||
multicast packets as Trickle messages. These messages are defined | ||||
in the sections below. | ||||
o The actions outside the Trickle algorithm that the protocol takes | MPL Data Messages are generated by MPL Seeds when they enter the MPL | |||
involve managing sliding window state, and is specified in | Domain. All MPL Data messages have the following properties: | |||
Section 5.2. | ||||
5.2. Sliding Windows | o The IPv6 Source Address MUST be an address in the AddressSet of a | |||
corresponding MPL Interface and MUST be valid within the MPL | ||||
Domain. | ||||
Every MPL forwarder MUST maintain a sliding window of sequence | o The IPv6 Destination Address MUST be set to the MPL Domain Address | |||
numbers for each MPL seed of recently received MPL packets. The | corresponding to the MPL Domain. | |||
sliding window performs two functions: | ||||
1. Indicate what MPL multicast packets the MPL forwarder should | o A MPL Data Message MUST contain an MPL Option in its IPv6 Header | |||
accept. | to identify the MPL Seed that generated the message and the | |||
ordering relative to other MPL Data Messages generated by the MPL | ||||
Seed. | ||||
2. Indicate what MPL multicast packets are buffered and may be | When the source address is in the AddressList of an MPL Interface | |||
transmitted to neighboring MPL forwarders. | corresponding to the MPL Domain Address and the destination address | |||
is the MPL Domain Address, the application message and the MPL Data | ||||
Message MAY be identical. In other words, the MPL Data Message may | ||||
contain a single IPv6 header that includes the MPL Option. | ||||
Each sliding window logically consists of: | Otherwise, IPv6-in-IPv6 encapsulation MUST be used to satisfy the MPL | |||
Data Message requirements listed above [RFC2473]. The complete IPv6- | ||||
in-IPv6 message forms an MPL Data Message. The outer IPv6 header | ||||
conforms to the MPL Data Message requirements listed above. The | ||||
encapsulated IPv6 datagram encodes the multicast data message that is | ||||
communicated beyond the MPL Domain. | ||||
1. A lower-bound sequence number, WindowMin, that represents the | 10.2. MPL Data Message Transmission | |||
sequence number of the oldest MPL multicast packet the MPL | ||||
forwarder is willing to receive or has buffered. An MPL | ||||
forwarder MUST ignore any MPL multicast packet that has sequence | ||||
value less than than WindowMin. | ||||
2. An upper-bound sequence value, WindowMax, that represents the | An MPL Forwarder manages transmission of MPL Data Messages in the | |||
sequence number of the next MPL multicast packet that the MPL | Buffered Message set using the Trickle algorithm [RFC6206]. An MPL | |||
forwarder expects to receive. An MPL forwarder MUST accept any | Forwarder MUST use a separate Trickle timer for each MPL Data Message | |||
MPL multicast packet that has sequence number greater than or | that it is actively forwarding. In accordance with Section 5 of RFC | |||
equal to WindowMax. | 6206 [RFC6206], this document defines the following: | |||
3. A list of MPL multicast packets, BufferedPackets, buffered by the | o This document defines a "consistent" transmission as receiving an | |||
MPL forwarder. Each entry in BufferedPackets MUST have a | MPL Data Message that has the same seed-id and sequence value as | |||
sequence number in the range [WindowMin, WindowMax). | the MPL Data Message managed by the Trickle timer. | |||
4. A timer, HoldTimer, that indicates the minimum lifetime of the | o This document defines an "inconsistent" transmission as receiving | |||
sliding window. The MPL forwarder MUST NOT free a sliding window | an MPL Data Message that has the same seed-id value and the M flag | |||
before HoldTimer expires. | set, but has a sequence value less than MPL Data Message managed | |||
by the Trickle timer. | ||||
When receiving an MPL multicast packet, if no existing sliding window | o This document does not define any external "events". | |||
exists for the MPL seed, the MPL forwarder MUST create a new sliding | ||||
window before accepting the MPL multicast packet. The MPL forwarder | ||||
may reclaim memory resources by freeing a sliding window for another | ||||
MPL seed if its HoldTimer has expired. If, for any reason, the MPL | ||||
forwarder cannot create a new sliding window, it MUST discard the | ||||
packet. | ||||
If a sliding window exists for the MPL seed, the MPL forwarder MUST | o This document defines MPL Data Messages as Trickle messages. | |||
ignore the MPL multicast packet if the packet's sequence number is | ||||
less than WindowMin or appears in BufferedPackets. Otherwise, the | ||||
MPL forwarder MUST accept the packet and determine whether or not to | ||||
forward the packet and/or pass the packet to the next higher layer. | ||||
When accepting an MPL multicast packet, the MPL forwarder MUST update | o The actions outside the Trickle algorithm that the protocol takes | |||
the sliding window based on the packet's sequence number. If the | involve managing Seed Set and Buffered Message Set | |||
sequence number is not less than WindowMax, the MPL forwarder MUST | ||||
set WindowMax to 1 greater than the packet's sequence number. If | ||||
WindowMax - WindowMin > MPL_MAX_WINDOW_SIZE, the MPL forwarder MUST | ||||
increment WindowMin such that WindowMax - WindowMin <= | ||||
MPL_MAX_WINDOW_SIZE. At the same time, the MPL forwarder MUST free | ||||
any entries in BufferedPackets that have a sequence number less than | ||||
WindowMin. | ||||
If the MPL forwarder has available memory resources, it MUST buffer | As specified in [RFC6206], a Trickle timer has three variables: the | |||
the MPL multicast packet for proactive propagation. If not enough | current interval size I, a time within the current interval t, and a | |||
memory resources are available to buffer the packet, the MPL | counter c. MPL defines a fourth variable, e, which counts the number | |||
forwarder MUST increment WindowMin and free entries in | of Trickle timer expiration events since the Trickle timer was last | |||
BufferedPackets that have a sequence number less than WindowMin until | reset. | |||
enough memory resources are available. Incrementing WindowMin will | ||||
ensure that the MPL forwarder does not accept previously received | ||||
packets. | ||||
An MPL forwarder MAY reclaim memory resources from sliding windows | After DATA_MESSAGE_TIMER_EXPIRATIONS Trickle timer events, the MPL | |||
for other MPL seeds. If a sliding window for another MPL seed is | Forwarder MUST disable the Trickle timer. When a buffered MPL Data | |||
actively disseminating messages and has more than one entry in its | Message does not have an associated Trickle timer, the MPL Forwarder | |||
BufferedPackets, the MPL forwarder may free entries for that MPL seed | MAY delete the message from the Buffered Message Set by advancing | |||
by incrementing WindowMin as described above. | MinSequence of the corresponding MPL Seed in the Seed Set. When the | |||
MPL Forwarder no longer buffers any messages for an MPL Seed, the MPL | ||||
Forwarder MUST NOT increment MinSequence for that MPL Seed. | ||||
If the MPL forwarder cannot free enough memory resources to buffer | When transmitting an MPL Data Message, the MPL Forwarder MUST either | |||
the MPL multicast packet, the MPL forwarder MUST set WindowMin to 1 | set the M flag to zero or set it to a level that indicates whether or | |||
greater than the packet's sequence number. | not the message's sequence number is the largest value that has been | |||
received from the MPL Seed. | ||||
When memory resources are available, an MPL forwarder SHOULD buffer a | 10.3. MPL Data Message Processing | |||
MPL multicast packet until the proactive propagation completes (i.e. | ||||
the Trickle algorithm stops execution) and MAY buffer for longer. | ||||
After proactive propagation completes, the MPL forwarder may advance | ||||
WindowMin to the packet's sequence number to reclaim memory | ||||
resources. When the MPL forwarder no longer buffers any packets, it | ||||
MAY set WindowMin equal to WindowMax. When setting WindowMin equal | ||||
to WindowMax, the MPL forwarder MUST initialize HoldTimer to | ||||
WINDOW_HOLD_TIME and start HoldTimer. After HoldTimer expires, the | ||||
MPL forwarder MAY free the sliding window to reclaim memory | ||||
resources. | ||||
5.3. Transmission of MPL Multicast Packets | Upon receiving an MPL Data Message, the MPL Forwarder first processes | |||
the MPL Option and updates the Trickle timer associated with the MPL | ||||
Data Message if one exists. | ||||
The MPL forwarder manages buffered MPL multicast packet transmissions | Upon receiving an MPL Data Message, an MPL Forwarder MUST perform one | |||
using the Trickle algorithm. When adding a packet to | of the following actions: | |||
BufferedPackets, the MPL forwarder MUST create a Trickle timer for | ||||
the packet and start execution of the Trickle algorithm. | ||||
After PROACTIVE_TIMER_EXPIRATIONS Trickle timer events, the MPL | o Accept the message and enter the MPL Data Message in the Buffered | |||
forwarder MUST stop executing the Trickle algorithm. When a buffered | Message Set. | |||
MPL multicast packet does not have an active Trickle timer, the MPL | ||||
forwarder MAY free the buffered packet by advancing WindowMin to 1 | ||||
greater than the packet's sequence number. | ||||
Each interface that supports MPL is configured with exactly one MPL | o Accept the message and update the corresponding MinSequence in the | |||
multicast scope. The MPL multicast scope MUST be site-local or | Seed Set to 1 greater than the message's sequence number. | |||
smaller and defaults to link-local. A scope larger than link-local | ||||
MAY be used only when that scope corresponds exactly to the MPL | ||||
domain. | ||||
An MPL domain may therefore be composed of one or more MPL multicast | o Discard the message without any change to the MPL Information | |||
scopes. For example, the MPL domain may be composed of a single MPL | Base. | |||
multicast scope when using a site-local scope. Alternatively, the | ||||
MPL domain may be composed of multiple MPL multicast scopes when | ||||
using a link-local scope. | ||||
IPv6-in-IPv6 encapsulation MUST be used when using MPL to forward an | If a Seed Set entry exists for the MPL Seed, the MPL Forwarder MUST | |||
original multicast packet whose source or destination address is | discard the MPL Data Message if its sequence number is less than | |||
outside the MPL multicast scope. IPv6-in-IPv6 encapsulation is | MinSequence or exists in the Buffered Message Set. | |||
necessary to support Path MTU discovery when the MPL forwarder is not | ||||
the source of the original multicast packet. IPv6-in-IPv6 | ||||
encapsulation also allows an MPL forwarder to remove the MPL Option | ||||
when forwarding the original multicast packet over a link that does | ||||
not support MPL. The destination address scope for the outer IPv6 | ||||
header MUST be the MPL multicast scope. | ||||
When an MPL domain is composed of multiple MPL multicast scopes (e.g. | If a Seed Set entry does not exist for the MPL Seed, the MPL | |||
when the MPL multicast scope is link-local), an MPL forwarder MUST | Forwarder MUST create a new entry for the MPL Seed before accepting | |||
decapsulate and encapsulate the original multicast packet when | the MPL Data Message. | |||
crossing between different MPL multicast scopes. In doing so, the | ||||
MPL forwarder MUST duplicate the MPL Option, unmodified, in the new | ||||
outer IPv6 header. | ||||
The IPv6 destination address of the MPL multicast packet is the all- | If memory is limited, an MPL Forwarder SHOULD reclaim memory | |||
MPL-forwarders multicast address (TBD). The scope of the IPv6 | resources by: | |||
destination address is set to the MPL multicast scope. | ||||
5.4. Reception of MPL Multicast Packets | o Incrementing MinSequence entries in the Seed Set and deleting MPL | |||
Data Messages in the Buffered Message Set that fall below the | ||||
corresponding MinSequence value. | ||||
Upon receiving an MPL multicast packet, the MPL forwarder first | o Deleting other Seed Set entries that have expired and the | |||
determines whether or not to accept and buffer the MPL multicast | corresponding MPL Data Messages in the Buffered Message Set. | |||
packet based on its MPL seed and sequence value, as specified in | ||||
Section 5.2. | ||||
If the MPL forwarder accepts the MPL multicast packet, the MPL | If the MPL Forwarder accepts the MPL Data Message, the MPL Forwarder | |||
forwarder determines whether or not to deliver the original multicast | MUST perform the following actions: | |||
packet to the next higher layer. For example, if the MPL multicast | ||||
packet uses IPv6-in-IPv6 encapsulation, the MPL forwarder removes the | ||||
outer IPv6 header, which also removes MPL Option. | ||||
5.5. Transmission of ICMPv6 MPL Messages | o If PROACTIVE_PROPAGATION is true, the MPL Forwarder MUST | |||
initialize and start a Trickle timer for the MPL Data Message. | ||||
The MPL forwarder generates and transmits a new ICMPv6 MPL message | o If the MPL Control Message Trickle timer is not running and | |||
whenever Trickle requests a transmission. The MPL forwarder includes | CONTROL_MESSAGE_TIMER_EXPIRATIONS is non-zero, the MPL Forwarder | |||
an encoding of each sliding window in the ICMPv6 MPL message. | MUST initialize and start the MPL Control Message Trickle timer. | |||
Each sliding window is encoded using an MPL Window entry, defined in | o If the MPL Control Message Trickle timer is running, the MPL | |||
Section 5.2. The MPL forwarder sets the MPL Window fields as | Forwarder MUST reset the MPL Control Message Trickle timer. | |||
follows: | ||||
S If the MPL seed identifier is 0, set S to 0. If the MPL seed | 11. MPL Control Messages | |||
identifier is within the range [1, 65535], set S to 2. Otherwise, | ||||
set S to 3. | ||||
w-min Set to the lower bound of the sliding window (i.e. | 11.1. MPL Control Message Generation | |||
WindowMin). | ||||
w-len Set to the length of the window (i.e. WindowMax - WindowMin). | An MPL Forwarder generates MPL Control Messages to communicate its | |||
Seed Set and Buffered Message Set to neighboring MPL Forwarders. | ||||
Each MPL Control Message is generated according to Section 6.2, with | ||||
an MPL Seed Info for each entry in Seed Set. Each MPL Seed Info entry | ||||
has the following content: | ||||
seed-id If S is non-zero, set to the MPL seed identifier. | o S set to the size of the seed-id field in the MPL Seed Info entry. | |||
buffered-mpl-packets Set each bit that represents a sequence number | o min-seqno set to MinSequence of the MPL Seed. | |||
of a packet in BufferedPackets to 1. Set all other bits to 0. | ||||
The i'th bit in buffered-mpl-packets represents a sequence number | ||||
of w-min + i. | ||||
5.6. Reception of ICMPv6 MPL Messages | o bm-len set to the size of buffered-mpl-messages in octets. | |||
An MPL forwarder processes each ICMPv6 MPL message that it receives | o seed-id set to the MPL seed identifier. | |||
to determine if it has any new MPL multicast packets to receive or | ||||
offer. | ||||
An MPL forwarder determines if a new MPL multicast packet has not | o buffered-mpl-messages with each bit representing whether or not an | |||
been received from a neighboring node if any of the following | MPL Data Message with the corresponding sequence number exists in | |||
conditions hold true: | the Buffered Message Set. The i'th bit represents a sequence | |||
number of min-seqno + i. '0' indicates that the corresponding MPL | ||||
Data Message does not exist in the Buffered Message Set. '1' | ||||
indicates that the corresponding MPL Data Message does exist in | ||||
the Buffered Message Set. | ||||
1. The ICMPv6 MPL message includes an MPL Window for an MPL seed | 11.2. MPL Control Message Transmission | |||
that does not have a corresponding sliding window entry on the | ||||
MPL forwarder. | ||||
2. The neighbor has a packet in its BufferedPackets that has | An MPL Forwarder transmits MPL Control Messages using the Trickle | |||
sequence value greater than or equal to WindowMax (i.e. w-min + | algorithm. A MPL forwarder maintains a single Trickle timer for each | |||
w-len >= WindowMax). | MPL Domain. When CONTROL_MESSAGE_TIMER_EXPIRATIONS is 0, the MPL | |||
Forwarder does not execute the Trickle algorithm and does not | ||||
transmit MPL Control Messages. In accordance with Section 5 of RFC | ||||
6206 [RFC6206], this document defines the following: | ||||
3. The neighbor has a packet in its BufferedPackets that has | o This document defines a "consistent" transmission as receiving an | |||
sequence number within range of the sliding window but is not | MPL Control Message that indicates neither the receiving nor | |||
included in BufferedPackets (i.e. the i'th bit in buffered-mpl- | transmitting node has new MPL Data Message. | |||
packets is set to 1, where the sequence number is w-min + i). | ||||
When an MPL forwarder determines that it has not yet received a new | o This document defines an "inconsistent" transmission as receiving | |||
MPL multicast packet buffered by a neighboring device, the MPL | an MPL Control Message that indicates either the receiving or | |||
forwarder resets the Trickle timer associated with reactive | transmitting node has at least one new MPL Data Message to offer. | |||
propagation. | ||||
An MPL forwarder determines if an entry in BufferedPackets has not | o This document defines an "event" as increasing MinSequence of any | |||
been received by a neighboring MPL forwarder if any of the following | entry in the Seed Set or adding a message to the Buffered Message | |||
conditions hold true: | Set. | |||
1. The ICMPv6 MPL message does not include an MPL Window for the | o This document defines an MPL Control Message as a Trickle message. | |||
packet's MPL seed. | ||||
2. The packet's sequence number is greater than or equal to the | As specified in [RFC6206], a Trickle timer has three variables: the | |||
neighbor's WindowMax value (i.e. the packet's sequence number is | current interval size I, a time within the current interval t, and a | |||
greater than or equal to w-min + w-len). | counter c. MPL defines a fourth variable, e, which counts the number | |||
of Trickle timer expiration events since the Trickle timer was last | ||||
reset. After CONTROL_MESSAGE_TIMER_EXPIRATIONS Trickle timer events, | ||||
the MPL Forwarder MUST disable the Trickle timer. | ||||
3. The packet's sequence number is within the range of the | 11.3. MPL Control Message Processing | |||
neighbor's sliding window [WindowMin, WindowMax), but not | ||||
included in the neighbor's BufferedPacket (i.e. the packet's | ||||
sequence number is greater than or equal to w-min, strictly less | ||||
than w-min + w-len, and the corresponding bit in buffered-mpl- | ||||
packets is set to 0. | ||||
When an MPL forwarder determines that it has at least one buffered | An MPL Forwarder processes each MPL Control Message that it receives | |||
MPL multicast packet that has not yet been received by a neighbor, | to determine if it has any new MPL Data Messages to receive or offer. | |||
the MPL forwarder resets the Trickle timer associated with reactive | ||||
propagation. Additionally, for each buffered MPL multicast packet | ||||
that should be transferred, the MPL forwarder MUST reset the Trickle | ||||
timer and reset e to 0 for proactive propagation. If the Trickle | ||||
timer for proactive propagation has already stopped execution, the | ||||
MPL forwarder MUST initialize a new Trickle timer and start execution | ||||
of the Trickle algorithm. | ||||
6. MPL Parameters | An MPL Forwarder determines if a new MPL Data Message has not been | |||
received from a neighboring node if any of the following conditions | ||||
hold true: | ||||
An MPL forwarder maintains two sets of Trickle parameters for the | o The MPL Control Message includes an MPL Seed that does not exist | |||
proactive and reactive methods. The Trickle parameters are listed | in the Seed Set. | |||
below: | ||||
PROACTIVE_IMIN The minimum Trickle timer interval, as defined in | o The MPL Control Message indicates that the neighbor has an MPL | |||
[RFC6206] for proactive propagation. | Data Message in its Buffered Message Set with sequence number | |||
greater than MinSequence (i.e. the i-th bit is set to 1 and min- | ||||
seqno + i > MinSequence) and is not included in the MPL | ||||
Forwarder's Buffered Message Set. | ||||
PROACTIVE_IMAX The maximum Trickle timer interval, as defined in | When an MPL Forwarder determines that it has not yet received an MPL | |||
[RFC6206] for proactive propagation. | Data Message buffered by a neighboring device, the MPL Forwarder MUST | |||
reset its Trickle timer associated with MPL Control Message | ||||
transmissions. If an MPL Control Message Trickle timer is not | ||||
running, the MPL Forwarder MUST initialize and start a new Trickle | ||||
timer. | ||||
PROACTIVE_K The redundancy constant, as defined in [RFC6206] for | An MPL Forwarder determines if an MPL Data Message in the Buffered | |||
proactive propagation. | Message Set has not yet been received by a neighboring MPL Forwarder | |||
if any of the following conditions hold true: | ||||
PROACTIVE_TIMER_EXPIRATIONS The number of Trickle timer expirations | o The MPL Control Message does not include an MPL Seed for the MPL | |||
that occur before terminating the Trickle algorithm. MUST be set | Data Message. | |||
to a value greater than 0. | ||||
REACTIVE_IMIN The minimum Trickle timer interval, as defined in | o The MPL Data Message's sequence number is greater than or equal to | |||
[RFC6206] for reactive propagation. | min-seqno and not included in the neighbor's Buffered Message Set | |||
(i.e. the MPL Data Message's sequence number does not have a | ||||
corresponding bit in buffered-mpl-messages set to 1). | ||||
REACTIVE_IMAX The maximum Trickle timer interval, as defined in | When an MPL Forwarder determines that it has at least one MPL Data | |||
[RFC6206] for reactive propagation. | Message in its Buffered Message Set that has not yet been received by | |||
a neighbor, the MPL Forwarder MUST reset the MPL Control Message | ||||
Trickle timer. Additionally, for each of those 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 with the MPL | ||||
Data Message, the MPL Forwarder MUST initialize and start a new | ||||
Trickle timer. | ||||
REACTIVE_K The redundancy constant, as defined in [RFC6206] for | 12. Acknowledgements | |||
reactive propagation. | ||||
REACTIVE_TIMER_EXPIRATIONS The number of Trickle timer expirations | The authors would like to acknowledge the helpful comments of Robert | |||
that occur before terminating the Trickle algorithm. MAY be set | Cragie, Esko Dijk, Ralph Droms, Paul Duffy, Ulrich Herberg, Owen | |||
to 0, which disables reactive propagation. | Kirby, Joseph Reddy, Don Sturek, Dario Tedeschi, and Peter van der | |||
Stok, which greatly improved the document. | ||||
WINDOW_HOLD_TIME The minimum lifetime for sliding window state. | 13. IANA Considerations | |||
7. Acknowledgements | This document defines one IPv6 Option, a type that must be allocated | |||
from the IPv6 "Destination Options and Hop-by-Hop Options" registry | ||||
of [RFC2780]. | ||||
The authors would like to acknowledge the helpful comments of Robert | This document defines one ICMPv6 Message, a type that must be | |||
Cragie, Esko Dijk, Ralph Droms, Paul Duffy, Owen Kirby, Joseph Reddy, | allocated from the "ICMPv6 "type" Numbers" registry of [RFC4443]. | |||
Dario Tedeschi, and Peter van der Stok, which greatly improved the | ||||
document. | ||||
8. IANA Considerations | This document registers two well-known multicast addresses from the | |||
IPv6 multicast address space. | ||||
The Trickle Multicast option requires an IPv6 Option Number. | 13.1. MPL Option Type | |||
HEX act chg rest | IANA is requested to allocate an IPv6 Option Type from the IPv6 | |||
--- --- --- ----- | "Destination Options and Hop-by-Hop Options" registry of [RFC2780], | |||
C 01 0 TBD | as specified in Table 1 below: | |||
The first two bits indicate that the IPv6 node MUST discard the | +--------------+-----+-----+--------------+-------------+-----------+ | |||
packet if it doesn't recognize the option type, and the third bit | | Mnemonic | act | chg | rest | Description | Reference | | |||
indicates that the Option Data MUST NOT change en-route. | +--------------+-----+-----+--------------+-------------+-----------+ | |||
| MPL_OPT_TYPE | 01 | 1 | TBD | MPL Option | This | | ||||
| | | | (suggested | | Document | | ||||
| | | | value 01101) | | | | ||||
+--------------+-----+-----+--------------+-------------+-----------+ | ||||
9. Security Considerations | Table 1: IPv6 Option Type Allocation | |||
TODO. | 13.2. MPL ICMPv6 Type | |||
10. References | IANA is requested to allocate an ICMPv6 Type from the "ICMPv6 "type" | |||
Numbers" registry of [RFC4443], as specified in Table 2 below: | ||||
10.1. Normative References | +---------------+------+---------------------+---------------+ | |||
| Mnemonic | Type | Name | Reference | | ||||
+---------------+------+---------------------+---------------+ | ||||
| MPL_ICMP_TYPE | TBD | MPL Control Message | This Document | | ||||
+---------------+------+---------------------+---------------+ | ||||
Table 2: IPv6 Option Type Allocation | ||||
13.3. Well-known Multicast Addresses | ||||
IANA is requested to allocate an IPv6 multicast address | ||||
"ALL_MPL_FORWARDERS" from the "Variable Scope Multicast Addresses" | ||||
sub-registry of the "INTERNET PROTOCOL VERSION 6 MULTICAST ADDRESSES" | ||||
registry. | ||||
14. Security Considerations | ||||
MPL uses sequence numbers to maintain a total ordering of MPL Data | ||||
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 | ||||
sufficiently large sequence number to: (i) flush messages from the | ||||
Buffered Message List and (ii) increase the MinSequence value for an | ||||
MPL Seed in the Seed Set. The former side effect allows an attacker | ||||
to halt the forwarding process of any MPL Data Messages being | ||||
disseminated. The latter side effect allows an attacker to prevent | ||||
MPL Forwarders from accepting new MPL Data Messages that an MPL Seed | ||||
generates while the sequence number is less than MinSequence. | ||||
More generally, the basic ability to inject messages into a Low-power | ||||
and Lossy Network can be used as a denial-of-service attack | ||||
regardless of what forwarding protocol is used. For these reasons, | ||||
Low-power and Lossy Networks typically employ link-layer security | ||||
mechanisms to disable an attacker's ability to inject messages. | ||||
To prevent attackers from injecting packets through an MPL Forwarder, | ||||
the MPL Forwarder MUST NOT accept or forward MPL Data Messages from a | ||||
communication interface that does not subscribe to the MPL Domain | ||||
Address identified in message's destination address. | ||||
MPL uses the Trickle algorithm to manage message transmissions and | ||||
the security considerations described in [RFC6206] apply. | ||||
15. 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. | August 1996. | |||
[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, March 1997. | |||
[RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328, April 1998. | ||||
[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, December 1998. | |||
[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, December 1998. | |||
[RFC2780] Bradner, S. and V. Paxson, "IANA Allocation Guidelines For | ||||
Values In the Internet Protocol and Related Headers", | ||||
BCP 37, RFC 2780, March 2000. | ||||
[RFC4007] Deering, S., Haberman, B., Jinmei, T., Nordmark, E., and | ||||
B. Zill, "IPv6 Scoped Address Architecture", RFC 4007, | ||||
March 2005. | ||||
[RFC4443] Conta, A., Deering, S., and M. Gupta, "Internet Control | [RFC4443] Conta, A., Deering, S., and M. Gupta, "Internet Control | |||
Message Protocol (ICMPv6) for the Internet Protocol | Message Protocol (ICMPv6) for the Internet Protocol | |||
Version 6 (IPv6) Specification", RFC 4443, March 2006. | Version 6 (IPv6) Specification", RFC 4443, March 2006. | |||
[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, March 2011. | |||
[RFC6550] Winter, T., Thubert, P., Brandt, A., Hui, J., Kelsey, R., | [RFC6550] Winter, T., Thubert, P., Brandt, A., Hui, J., Kelsey, R., | |||
Levis, P., Pister, K., Struik, R., Vasseur, JP., and R. | Levis, P., Pister, K., Struik, R., Vasseur, JP., and R. | |||
Alexander, "RPL: IPv6 Routing Protocol for Low-Power and | Alexander, "RPL: IPv6 Routing Protocol for Low-Power and | |||
Lossy Networks", RFC 6550, March 2012. | Lossy Networks", RFC 6550, March 2012. | |||
10.2. Informative References | ||||
[I-D.ietf-roll-terminology] | ||||
Vasseur, J., "Terminology in Low power And Lossy | ||||
Networks", draft-ietf-roll-terminology-06 (work in | ||||
progress), September 2011. | ||||
Authors' Addresses | Authors' Addresses | |||
Jonathan W. Hui | Jonathan W. Hui | |||
Cisco | Cisco | |||
170 West Tasman Drive | 170 West Tasman Drive | |||
San Jose, California 95134 | San Jose, California 95134 | |||
USA | USA | |||
Phone: +408 424 1547 | Phone: +408 424 1547 | |||
Email: jonhui@cisco.com | Email: jonhui@cisco.com | |||
End of changes. 155 change blocks. | ||||
546 lines changed or deleted | 704 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |