draft-ietf-roll-trickle-mcast-04.txt | draft-ietf-roll-trickle-mcast-05.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: August 29, 2013 Silicon Labs | Expires: March 02, 2014 Silicon Labs | |||
February 25, 2013 | August 29, 2013 | |||
Multicast Protocol for Low power and Lossy Networks (MPL) | Multicast Protocol for Low power and Lossy Networks (MPL) | |||
draft-ietf-roll-trickle-mcast-04 | draft-ietf-roll-trickle-mcast-05 | |||
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 | Forwarders in an MPL Domain. MPL uses the Trickle algorithm to | |||
manage message transmissions for both control and data-plane | manage message transmissions for both control and data-plane | |||
messages. Different Trickle parameter configurations allow MPL to | messages. Different Trickle parameter configurations allow MPL to | |||
trade between 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 August 29, 2013. | This Internet-Draft will expire on March 02, 2014. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2013 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 . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. Applicability Statement . . . . . . . . . . . . . . . . . . . 6 | 3. Applicability Statement . . . . . . . . . . . . . . . . . . . 5 | |||
4. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4.1. Information Base Overview . . . . . . . . . . . . . . . . 7 | 4.1. MPL Domains . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4.2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.2. Information Base Overview . . . . . . . . . . . . . . . . 6 | |||
4.3. Signaling Overview . . . . . . . . . . . . . . . . . . . . 9 | 4.3. Overview . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
5. MPL Parameters and Constants . . . . . . . . . . . . . . . . . 10 | 4.4. Signaling Overview . . . . . . . . . . . . . . . . . . . 8 | |||
5.1. MPL Multicast Addresses . . . . . . . . . . . . . . . . . 10 | 5. MPL Parameters and Constants . . . . . . . . . . . . . . . . 9 | |||
5.2. MPL Message Types . . . . . . . . . . . . . . . . . . . . 10 | 5.1. MPL Multicast Addresses . . . . . . . . . . . . . . . . . 9 | |||
5.3. MPL Seed Identifiers . . . . . . . . . . . . . . . . . . . 10 | 5.2. MPL Message Types . . . . . . . . . . . . . . . . . . . . 9 | |||
5.4. MPL Forwarder Parameters . . . . . . . . . . . . . . . . . 10 | 5.3. MPL Seed Identifiers . . . . . . . . . . . . . . . . . . 9 | |||
5.5. MPL Trickle Parameters . . . . . . . . . . . . . . . . . . 11 | 5.4. MPL Forwarder Parameters . . . . . . . . . . . . . . . . 9 | |||
6. Protocol Message Formats . . . . . . . . . . . . . . . . . . . 13 | 5.5. MPL Trickle Parameters . . . . . . . . . . . . . . . . . 10 | |||
6.1. MPL Option . . . . . . . . . . . . . . . . . . . . . . . . 13 | 6. Protocol Message Formats . . . . . . . . . . . . . . . . . . 11 | |||
6.2. MPL Control Message . . . . . . . . . . . . . . . . . . . 14 | 6.1. MPL Option . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
6.3. MPL Seed Info . . . . . . . . . . . . . . . . . . . . . . 15 | 6.2. MPL Control Message . . . . . . . . . . . . . . . . . . . 13 | |||
7. Information Base . . . . . . . . . . . . . . . . . . . . . . . 17 | 6.3. MPL Seed Info . . . . . . . . . . . . . . . . . . . . . . 14 | |||
7.1. Local Interface Set . . . . . . . . . . . . . . . . . . . 17 | 7. Information Base . . . . . . . . . . . . . . . . . . . . . . 15 | |||
7.2. Domain Set . . . . . . . . . . . . . . . . . . . . . . . . 17 | 7.1. Local Interface Set . . . . . . . . . . . . . . . . . . . 15 | |||
7.3. Seed Set . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 7.2. Domain Set . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
7.4. Buffered Message Set . . . . . . . . . . . . . . . . . . . 17 | 7.3. Seed Set . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
8. MPL Domains . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 7.4. Buffered Message Set . . . . . . . . . . . . . . . . . . 16 | |||
9. MPL Seed Sequence Numbers . . . . . . . . . . . . . . . . . . 20 | 8. MPL Seed Sequence Numbers . . . . . . . . . . . . . . . . . . 16 | |||
10. MPL Data Messages . . . . . . . . . . . . . . . . . . . . . . 21 | 9. MPL Data Messages . . . . . . . . . . . . . . . . . . . . . . 17 | |||
10.1. MPL Data Message Generation . . . . . . . . . . . . . . . 21 | 9.1. MPL Data Message Generation . . . . . . . . . . . . . . . 17 | |||
10.2. MPL Data Message Transmission . . . . . . . . . . . . . . 21 | 9.2. MPL Data Message Transmission . . . . . . . . . . . . . . 17 | |||
10.3. MPL Data Message Processing . . . . . . . . . . . . . . . 22 | 9.3. MPL Data Message Processing . . . . . . . . . . . . . . . 18 | |||
11. MPL Control Messages . . . . . . . . . . . . . . . . . . . . . 24 | 10. MPL Control Messages . . . . . . . . . . . . . . . . . . . . 19 | |||
11.1. MPL Control Message Generation . . . . . . . . . . . . . . 24 | 10.1. MPL Control Message Generation . . . . . . . . . . . . . 19 | |||
11.2. MPL Control Message Transmission . . . . . . . . . . . . . 24 | 10.2. MPL Control Message Transmission . . . . . . . . . . . . 20 | |||
11.3. MPL Control Message Processing . . . . . . . . . . . . . . 25 | 10.3. MPL Control Message Processing . . . . . . . . . . . . . 20 | |||
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 27 | 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 21 | |||
13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 | 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | |||
13.1. MPL Option Type . . . . . . . . . . . . . . . . . . . . . 28 | 12.1. MPL Option Type . . . . . . . . . . . . . . . . . . . . 22 | |||
13.2. MPL ICMPv6 Type . . . . . . . . . . . . . . . . . . . . . 28 | 12.2. MPL ICMPv6 Type . . . . . . . . . . . . . . . . . . . . 22 | |||
13.3. Well-known Multicast Addresses . . . . . . . . . . . . . . 28 | 12.3. Well-known Multicast Addresses . . . . . . . . . . . . . 23 | |||
14. Security Considerations . . . . . . . . . . . . . . . . . . . 29 | 13. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | |||
15. Normative References . . . . . . . . . . . . . . . . . . . . . 30 | 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 31 | 14.1. Normative References . . . . . . . . . . . . . . . . . . 23 | |||
14.2. Informative References . . . . . . . . . . . . . . . . . 24 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 25 | ||||
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 | |||
routing and forwarding mechanisms. Traditional IP multicast delivery | routing and forwarding mechanisms. Traditional IP multicast delivery | |||
typically relies on topology maintenance mechanisms to discover and | typically relies on topology maintenance mechanisms to discover and | |||
maintain routes to all subscribers of a multicast group. However, | maintain routes to all subscribers of a multicast group (e.g. | |||
maintaining such topologies in LLNs is costly and may not be feasible | [RFC3973] [RFC4601]). However, maintaining such topologies in LLNs | |||
given the available resources. | is costly and may not be feasible 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 messages 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 routing topology when | device may not be able to maintain a multicast routing topology when | |||
operating with limited memory. | operating with limited memory. | |||
skipping to change at page 6, line 7 | skipping to change at page 5, line 7 | |||
MPL Seed - An MPL Forwarder that generates MPL Data | MPL Seed - An MPL Forwarder that generates MPL Data | |||
Messages and serves as an entry point into an MPL | Messages and serves as an entry point into an MPL | |||
Domain. | Domain. | |||
MPL Seed Identifier - An unsigned integer that uniquely identifies an | MPL Seed Identifier - An unsigned integer that uniquely identifies an | |||
MPL Seed within an MPL Domain. | MPL Seed within an MPL Domain. | |||
3. Applicability Statement | 3. Applicability Statement | |||
This protocol is an IPv6 multicast forwarding protocol for Low-Power | This protocol is an IPv6 multicast forwarding protocol designed for | |||
and Lossy Networks. By implementing a controlled dissemination using | the communication characteristics and resource constraints of Low- | |||
the Trickle algorithm, this protocol is designed for networks that | Power and Lossy Networks. By implementing controlled disseminations | |||
communicate using low-power and lossy links with widely varying | of multicast messages using the Trickle algorithm, this protocol is | |||
topologies in both the space and time dimensions. | designed for networks that communicate using low-power and lossy | |||
links with widely varying topologies in both the space and time | ||||
dimensions. | ||||
While designed specifically for Low-Power and Lossy Networks, this | ||||
protocol is not limited to use over such networks. This protocol may | ||||
be applicable to any network where no multicast routing state is | ||||
desired. This protocol may also be used in environments where only a | ||||
subset of links are considered Low-Power and Lossy links. | ||||
Operationally, the scope of this protocol is administratively | ||||
determined. In other words, the scope of dissemination is determined | ||||
by routers configured to disallow transmission or reception of MPL | ||||
messages on a subset of interfaces. | ||||
A host need not be aware that their multicast is supported by MPL as | ||||
long as its attachment router forwards multicast messages between the | ||||
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 | ||||
many Low-Power and Lossy Networks and receive multicast messages | ||||
carried by MPL directly. | ||||
4. Protocol Overview | 4. 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 | |||
an MPL Domain. | an MPL Domain. | |||
4.1. Information Base Overview | 4.1. MPL Domains | |||
An MPL Domain is a scope zone, as defined in [RFC4007], in which MPL | ||||
Interfaces subscribe to the same MPL Domain Address and participate | ||||
in disseminating MPL Data Messages. | ||||
By default, an MPL Forwarder SHOULD participate in an MPL Domain | ||||
identified by the ALL_MPL_FORWARDERS multicast address with a scope | ||||
value of 3 (Realm-Local) [I-D.droms-6man-multicast-scopes]. When | ||||
used with MPL, Realm-Local scope is administratively defined and used | ||||
to define the boundaries of multicast message dissemination by MPL. | ||||
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 assignment of other multicast addresses is out of scope. | ||||
For each MPL Domain Address that an MPL Interface subscribes to, the | ||||
MPL Interface MUST also subscribe to the same MPL Domain Address with | ||||
a scope value of 2 (link-local) when reactive forwarding is in use | ||||
(i.e. when communicating MPL Control Messages). | ||||
4.2. Information Base Overview | ||||
A node records necessary protocol state in the following information | A node records necessary protocol state in the following information | |||
sets: | 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 an MPL Seed within an MPL Domain. Each MPL Domain | received from an MPL Seed within an MPL Domain. Each MPL Domain | |||
has an associated Seed Set. A Seed Set maintains the minimum | has an associated Seed Set. A Seed Set maintains the minimum | |||
sequence number for MPL Data Messages that the MPL Forwarder is | sequence number for MPL Data Messages that the MPL Forwarder is | |||
willing to receive or has buffered in its Buffered Message Set | willing to receive or has buffered in its Buffered Message Set | |||
from an MPL Seed. MPL uses Seed Sets and Buffered Message Sets to | from an MPL Seed. MPL uses Seed Sets and Buffered Message Sets to | |||
determine when to accept an MPL Data Message, process its payload, | determine when to accept an MPL Data Message, process its payload, | |||
and 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 an MPL Seed within an 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.2. Overview | 4.3. 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 an MPL Domain. MPL performs the following tasks to | within an MPL Domain. MPL performs the following tasks to | |||
disseminate a multicast message: | disseminate a multicast message: | |||
o When having a multicast message to forward into an MPL Domain, the | o When having a multicast message to forward into an MPL Domain, the | |||
MPL Seed generates an MPL Data Message that includes the MPL | MPL Seed generates an MPL Data Message that includes the MPL | |||
Domain Address as the IPv6 Destination Address, the MPL Seed | Domain Address as the IPv6 Destination Address, the MPL Seed | |||
Identifier, a newly generated sequence number, and the multicast | Identifier, a newly generated sequence number, and the multicast | |||
skipping to change at page 9, line 5 | skipping to change at page 8, line 13 | |||
proactive forwarding for the MPL Data Message message. | proactive forwarding for the MPL Data Message message. | |||
Reactive Forwarding - With reactive forwarding, an 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 an MPL Data Message, the MPL Forwarder schedules those | received an MPL Data Message, the MPL Forwarder schedules those | |||
MPL Data Messages for transmission using the Trickle algorithm. | MPL Data Messages for transmission using the Trickle algorithm. | |||
4.3. Signaling Overview | Note that the use of proactive and reactive forwarding strategies | |||
within the same MPL Domain are not mutually exclusive and may be used | ||||
simultaneously. For example, upon receiving a new MPL Data messages | ||||
when both proactive and reactive forwarding techniques are enabled, | ||||
an MPL Forwarder will proactively retransmit the MPL Data Message a | ||||
limited number of times and schedule further transmissions upon | ||||
receiving MPL Control Messages. | ||||
4.4. Signaling Overview | ||||
This protocol generates and processes the following messages: | This protocol generates and processes the following messages: | |||
MPL Data Message - Generated by an MPL Seed to deliver a multicast | 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 | 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. An MPL Data Message contains: | the MPL Domain. An MPL Data Message contains: | |||
skipping to change at page 9, line 27 | skipping to change at page 8, line 43 | |||
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 an MPL Forwarder to communicate | MPL Control Message - Generated by an MPL Forwarder to communicate | |||
information contained in an MPL Domain's Seed Set and Buffered | information contained in an MPL Domain's Seed Set and Buffered | |||
Message Set to neighboring MPL Forwarders. An 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. | |||
skipping to change at page 10, line 14 | skipping to change at page 9, line 16 | |||
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 | MPL makes use of MPL Domain Addresses to identify MPL Interfaces of | |||
an 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 a scope value of 3 (subnet- | ALL_MPL_FORWARDERS multicast address with a scope value of 3 | |||
local). | [I-D.droms-6man-multicast-scopes]. | |||
For each MPL Domain Address that an 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 a | MPL Interface MUST also subscribe to the MPL Domain Address with a | |||
scope value of 2 (link-local) when reactive forwarding is in use. | scope value of 2 (link-local) 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 an MPL Seed Identifier and a | MPL defines an IPv6 Option for carrying an MPL Seed Identifier and a | |||
skipping to change at page 11, line 6 | skipping to change at page 10, line 6 | |||
document. | document. | |||
5.4. MPL Forwarder Parameters | 5.4. MPL Forwarder Parameters | |||
PROACTIVE_FORWARDING A boolean value that indicates whether the MPL | PROACTIVE_FORWARDING A boolean value that indicates whether the MPL | |||
Forwarder should schedule MPL Data Message transmissions after | Forwarder should schedule MPL Data Message transmissions after | |||
receiving them for the first time. PROACTIVE_FORWARDING has a | receiving them for the first time. PROACTIVE_FORWARDING has a | |||
default value of TRUE. | default value of TRUE. | |||
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 30 | |||
minutes. | minutes. | |||
It is RECOMMENDED that all MPL Forwarders use the same values for the | It is RECOMMENDED that all MPL Forwarders use the same values for the | |||
MPL Forwarder Parameters above for a given MPL Domain. The mechanism | MPL Forwarder Parameters above for a given MPL Domain. The mechanism | |||
for setting the MPL Forwarder Parameters is not specified within this | for setting the MPL Forwarder Parameters is not specified within this | |||
document. | document. | |||
5.5. MPL Trickle Parameters | 5.5. MPL Trickle Parameters | |||
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 constant | |||
k. | 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 | expiration events that occur before terminating the Trickle algorithm | |||
algorithm. | for a given MPL Data Message or MPL Control Message. | |||
Each MPL Forwarder uses the following Trickle parameters for MPL Data | Each MPL Forwarder 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 in | |||
[RFC6206], for MPL Data Message transmissions. DATA_MESSAGE_IMIN | [RFC6206], for MPL Data Message transmissions. DATA_MESSAGE_IMIN | |||
has a default value of 10 times the worst-case link-layer latency. | 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 in | |||
[RFC6206], for MPL Data Message transmissions. DATA_MESSAGE_IMAX | [RFC6206], for MPL Data Message transmissions. DATA_MESSAGE_IMAX | |||
has a default value equal to DATA_MESSAGE_IMIN. | 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], for | |||
MPL Data Message transmissions. DATA_MESSAGE_K has a default | MPL Data Message transmissions. DATA_MESSAGE_K has a default | |||
value of 5. | 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 | expirations that occur before terminating the Trickle algorithm's | |||
for MPL Data Message transmissions. | 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 defined | |||
in [RFC6206], for MPL Control Message transmissions. | 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 worst- | |||
case link-layer latency. | case link-layer latency. | |||
CONTROL_MESSAGE_IMAX The maximum Trickle timer interval, as defined | CONTROL_MESSAGE_IMAX The maximum Trickle timer interval, as defined | |||
in [RFC6206], for MPL Control Message transmissions. | 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. | |||
skipping to change at page 13, line 5 | skipping to change at page 11, line 23 | |||
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. | |||
Following [RFC6206], it is RECOMMENDED that all MPL Forwarders use | Following [RFC6206], it is RECOMMENDED that all MPL Forwarders use | |||
the same values for the Trickle Parameters above for a given MPL | the same values for the Trickle Parameters above for a given MPL | |||
Domain. The mechanism for setting the Trickle Parameters is not | Domain. The mechanism for setting the Trickle Parameters is not | |||
specified within this document. | specified within this document. | |||
The default Trickle parameter values above combined with the default | ||||
MPL Forwarder parameters in the prior section specify a forwarding | ||||
strategy that utilizes both proactive and reactive techniques. Using | ||||
these default values, an MPL Forwarder proactively transmits any new | ||||
MPL Data Messages it receives then uses MPL Control Messages to | ||||
trigger additional MPL Data Message retransmissions where message | ||||
drops are detected. Setting DATA_MESSAGE_IMAX to the same as | ||||
DATA_MESSAGE_IMIN in this case is acceptable since subsequent MPL | ||||
Data Message retransmissions are triggered by MPL Control Messages, | ||||
where CONTROL_MESSAGE_IMAX is greater than CONTROL_MESSAGE_IMIN. | ||||
6. Protocol Message Formats | 6. Protocol Message Formats | |||
The protocol messages generated and processed by an MPL Forwarder are | The protocol messages generated and processed by an MPL Forwarder are | |||
described in this section. | described in 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: | |||
skipping to change at page 13, line 29 | skipping to change at page 12, line 18 | |||
| 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 MPL_OPT_TYPE | Option Type MPL_OPT_TYPE | |||
Opt Data Len Length of the Option Data field in octets. | Opt Data Len Length of the Option Data field in octets. | |||
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 the IPv6 | seed-id. 0 indicates that the seed-id is the | |||
Source Address and not included in the MPL | IPv6 Source Address and not included in the MPL | |||
Option. 1 indicates that the seed-id is a 16-bit | Option. 1 indicates that the seed-id is a 16-bit | |||
unsigned integer. 2 indicates that the seed-id is | unsigned integer. 2 indicates that the seed-id | |||
a 64-bit unsigned integer. 3 indicates that the | is a 64-bit unsigned integer. 3 indicates that | |||
seed-id is a 128-bit unsigned integer. | the seed-id is a 128-bit unsigned integer. | |||
M 1-bit flag. 1 indicates that the value in | M 1-bit flag. 1 indicates that the value in | |||
sequence is known to be the largest sequence | sequence 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 with an MPL Option in which this flag is | Messages with an MPL Option in which this flag is | |||
1 MUST be dropped. | 1 MUST 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 of MPL Data Messages from the MPL Seed | ordering of MPL Data Messages from the MPL Seed | |||
identified by seed-id. | identified by seed-id. | |||
skipping to change at page 14, line 44 | skipping to change at page 13, line 33 | |||
contained in an 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[1..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 and 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 corresponding | |||
skipping to change at page 15, line 17 | skipping to change at page 14, line 4 | |||
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 corresponding | |||
to the MPL Domain. | to the MPL Domain. | |||
Hop Limit 255 | Hop Limit 255 | |||
ICMPv6 Fields: | ICMPv6 Fields: | |||
Type MPL_ICMP_TYPE | Type MPL_ICMP_TYPE | |||
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 an MPL Forwarder is willing to receive. The MPL | Messages that an MPL Forwarder is willing to receive. The MPL | |||
Control Message allows neighboring MPL Forwarders to determine | Control Message allows neighboring MPL Forwarders to determine | |||
whether there are any new MPL Data Messages to exchange. | whether there are any new MPL Data Messages to exchange. | |||
6.3. MPL Seed Info | 6.3. MPL Seed Info | |||
An MPL Seed Info encodes the minimum sequence number for an MPL Seed | An 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 sequence | |||
number for the MPL Seed. | number for the MPL Seed. | |||
bm-len 6-bit unsigned integer. The size of buffered- | bm-len 6-bit unsigned integer. The size of buffered- | |||
mpl-messages in octets. | mpl-messages in octets. | |||
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 | seed-id. 0 indicates that the seed-id value is | |||
the IPv6 Source Address and not included in the | the IPv6 Source Address and not included in the | |||
MPL Seed Info. 1 indicates that the seed-id value | MPL Seed Info. 1 indicates that the seed-id | |||
is a 16-bit unsigned integer. 2 indicates that | value is a 16-bit unsigned integer. 2 indicates | |||
the seed-id value is a 64-bit unsigned integer. 3 | that the seed-id value is a 64-bit unsigned | |||
indicates that the seed-id is a 128-bit unsigned | integer. 3 indicates that the seed-id is a | |||
integer. | 128-bit unsigned integer. | |||
seed-id Variable-length unsigned integer. Indicates the | seed-id Variable-length unsigned integer. Indicates the | |||
MPL Seed associated with this MPL Seed Info. | 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 maintained | |||
in the corresponding Buffered Message Set for the | in the corresponding Buffered Message Set for the | |||
MPL Seed. The i'th bit represents a sequence | MPL Seed. The i'th bit represents a sequence | |||
number of min-seqno + i. '0' indicates that the | number of min-seqno + i. '0' indicates that the | |||
corresponding MPL Data Message does not exist in | corresponding MPL Data Message does not exist in | |||
skipping to change at page 19, line 5 | skipping to change at page 16, line 35 | |||
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 an 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 Domains | 8. MPL Seed Sequence Numbers | |||
An MPL Domain is a scope zone, as defined in [RFC4007], in which MPL | ||||
Interfaces subscribe to the same MPL Domain Address and participate | ||||
in disseminating MPL Data Messages. | ||||
By default, an MPL Forwarder SHOULD participate in an MPL Domain | ||||
identified by the ALL_MPL_FORWARDERS multicast address with a scope | ||||
value of 3 (subnet-local). | ||||
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 assignment of other multicast addresses is out of scope. | ||||
For each MPL Domain Address that an MPL Interface subscribes to, the | ||||
MPL Interface MUST also subscribe to the same MPL Domain Address with | ||||
a scope value of 2 (link-local) when reactive forwarding is in use | ||||
(i.e. when communicating MPL Control Messages). | ||||
9. 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 an 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 an MPL Seed for an MPL | ordering of MPL Data Messages generated by an MPL Seed for an MPL | |||
Domain. | Domain. | |||
10. MPL Data Messages | 9. MPL Data Messages | |||
10.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 An MPL Data Message MUST contain an MPL Option in its IPv6 Header | o An MPL Data Message MUST contain an MPL Option in its IPv6 Header | |||
to identify the MPL Seed that generated the message and the | to identify the MPL Seed that generated the message and the | |||
ordering relative to other MPL Data Messages generated by the MPL | ordering relative to other MPL Data Messages generated by the MPL | |||
Seed. | Seed. | |||
When the source address is in the AddressList of an MPL Interface | When the destination address is an MPL Domain Address and the source | |||
corresponding to the MPL Domain Address and the destination address | address is in the AddressLIst of an MPL Interface that belongs to | |||
is the MPL Domain Address, the application message and the MPL Data | that MPL Domain Address, the application message and the MPL Data | |||
Message MAY be identical. In other words, the MPL Data Message may | Message MAY be identical. In other words, the MPL Data Message may | |||
contain a 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 IPv6 | |||
in-IPv6 message forms an MPL Data Message. The outer IPv6 header | -in-IPv6 message forms an MPL Data Message. The outer IPv6 header | |||
conforms to the MPL Data Message requirements listed above. The | conforms to the MPL Data Message requirements listed above. The | |||
encapsulated IPv6 datagram encodes the multicast data message that is | encapsulated IPv6 datagram encodes the multicast data message that is | |||
communicated beyond the MPL Domain. | communicated beyond the MPL Domain. | |||
10.2. MPL Data Message Transmission | 9.2. MPL Data Message Transmission | |||
An 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]. An 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 RFC | |||
6206 [RFC6206], this document defines the following: | 6206 [RFC6206], this document defines the following: | |||
o This document defines a "consistent" transmission as receiving an | 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 Trickle | |||
skipping to change at page 22, line 25 | skipping to change at page 18, line 25 | |||
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 | |||
MinSequence of the corresponding MPL Seed in the Seed Set. When the | 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 | MPL Forwarder no longer buffers any messages for an MPL Seed, the MPL | |||
Forwarder MUST NOT increment MinSequence for that MPL Seed. | Forwarder MUST NOT increment MinSequence for that MPL Seed. | |||
When transmitting an 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. | |||
10.3. MPL Data Message Processing | 9.3. MPL Data Message Processing | |||
Upon receiving an 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 an MPL Data Message, an 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. | |||
skipping to change at page 24, line 5 | skipping to change at page 19, line 39 | |||
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. | |||
11. MPL Control Messages | 10. MPL Control Messages | |||
11.1. MPL Control Message Generation | 10.1. MPL Control Message Generation | |||
An MPL Forwarder generates MPL Control Messages to communicate an 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 an MPL Seed Info for each entry in the MPL Domain's | Section 6.2, with an MPL Seed Info for each entry in the MPL Domain's | |||
Seed Set. Each MPL Seed Info entry has the following content: | 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 MinSequence 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 an | 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. | |||
11.2. MPL Control Message Transmission | 10.2. MPL Control Message Transmission | |||
An MPL Forwarder transmits MPL Control Messages using the Trickle | An MPL Forwarder transmits MPL Control Messages using the Trickle | |||
algorithm. An MPL Forwarder maintains a single Trickle timer for | algorithm. An MPL Forwarder maintains a single Trickle timer for | |||
each MPL Domain. When CONTROL_MESSAGE_TIMER_EXPIRATIONS is 0, the | each MPL Domain. When CONTROL_MESSAGE_TIMER_EXPIRATIONS is 0, the | |||
MPL 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 RFC | |||
6206 [RFC6206], this document defines the following: | 6206 [RFC6206], this document defines the following: | |||
o This document defines a "consistent" transmission as receiving an | o This document defines a "consistent" transmission as receiving an | |||
MPL Control Message that indicates neither the receiving nor | MPL Control Message that results in a determination that neither | |||
transmitting node has any new MPL Data Messages to offer. | the receiving nor transmitting node has any new MPL Data Messages | |||
to offer. | ||||
o This document defines an "inconsistent" transmission as receiving | o This document defines an "inconsistent" transmission as receiving | |||
an MPL Control Message that indicates either the receiving or | an MPL Control Message that results in a determination that either | |||
transmitting node has at least one new MPL Data Message to offer. | the receiving or transmitting node has at least one new MPL Data | |||
Message to offer. | ||||
o This document defines an "event" as increasing MinSequence of any | o The Trickle timer is reset in response to external "events." This | |||
entry in the corresponding Seed Set or adding a message to the | document defines an "event" as increasing MinSequence of 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 an 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. | |||
11.3. MPL Control Message Processing | 10.3. MPL Control Message Processing | |||
An 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. | |||
An 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 an MPL Seed that does not exist | o The MPL Control Message includes an MPL Seed that does not exist | |||
in the MPL Domain's Seed Set. | in the MPL Domain's Seed Set. | |||
skipping to change at page 27, line 5 | skipping to change at page 21, line 49 | |||
When an 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. | |||
12. Acknowledgements | 11. Acknowledgements | |||
The authors would like to acknowledge the helpful comments of Robert | The authors would like to acknowledge the helpful comments of Robert | |||
Cragie, Esko Dijk, Ralph Droms, Paul Duffy, Ulrich Herberg, Owen | Cragie, Esko Dijk, Ralph Droms, Paul Duffy, Adrian Farrel, Ulrich | |||
Kirby, Joseph Reddy, Don Sturek, Dario Tedeschi, and Peter van der | Herberg, Owen Kirby, Kerry Lynn, Joseph Reddy, Michael Richardson, | |||
Stok, which greatly improved the document. | Don Sturek, Dario Tedeschi, and Peter van der Stok, which greatly | |||
improved the document. | ||||
13. IANA Considerations | 12. IANA Considerations | |||
This document defines one IPv6 Option, a type that must be allocated | This document defines one IPv6 Option, a type that must be 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 must be | |||
allocated from the "ICMPv6 "type" Numbers" registry of [RFC4443]. | allocated from the "ICMPv6 "type" Numbers" registry of [RFC4443]. | |||
This document registers two well-known multicast addresses from the | This document registers two well-known multicast addresses from the | |||
IPv6 multicast address space. | IPv6 multicast address space. | |||
13.1. MPL Option Type | 12.1. MPL Option Type | |||
IANA is requested to allocate an IPv6 Option Type from the IPv6 | IANA is requested to allocate an IPv6 Option Type from the IPv6 | |||
"Destination Options and Hop-by-Hop Options" registry of [RFC2780], | "Destination Options and Hop-by-Hop Options" registry of [RFC2780], | |||
as specified in Table 1 below: | as specified in Table 1 below: | |||
+--------------+-----+-----+--------------+-------------+-----------+ | +--------------+-------+-----+------------+-------------+-----------+ | |||
| Mnemonic | act | chg | rest | Description | Reference | | | Mnemonic | act | chg | rest | Description | Reference | | |||
+--------------+-----+-----+--------------+-------------+-----------+ | +--------------+-------+-----+------------+-------------+-----------+ | |||
| MPL_OPT_TYPE | 01 | 1 | TBD | MPL Option | This | | | MPL_OPT_TYPE | 01 | 1 | TBD | MPL Option | This | | |||
| | | | (suggested | | Document | | | | | | (suggested | | Document | | |||
| | | | value 01101) | | | | | | | | value | | | | |||
+--------------+-----+-----+--------------+-------------+-----------+ | | | | | 01101) | | | | |||
+--------------+-------+-----+------------+-------------+-----------+ | ||||
Table 1: IPv6 Option Type Allocation | Table 1: IPv6 Option Type Allocation | |||
13.2. MPL ICMPv6 Type | 12.2. MPL ICMPv6 Type | |||
IANA is requested to allocate an ICMPv6 Type from the "ICMPv6 "type" | IANA is requested to allocate an ICMPv6 Type from the "ICMPv6 "type" | |||
Numbers" registry of [RFC4443], as specified in Table 2 below: | Numbers" registry of [RFC4443], as specified in Table 2 below: | |||
+---------------+------+---------------------+---------------+ | +---------------+------+---------------------+---------------+ | |||
| Mnemonic | Type | Name | Reference | | | Mnemonic | Type | Name | Reference | | |||
+---------------+------+---------------------+---------------+ | +---------------+------+---------------------+---------------+ | |||
| MPL_ICMP_TYPE | TBD | MPL Control Message | This Document | | | MPL_ICMP_TYPE | TBD | MPL Control Message | This Document | | |||
+---------------+------+---------------------+---------------+ | +---------------+------+---------------------+---------------+ | |||
Table 2: IPv6 Option Type Allocation | Table 2: IPv6 Option Type Allocation | |||
13.3. Well-known Multicast Addresses | 12.3. Well-known Multicast Addresses | |||
IANA is requested to allocate an IPv6 multicast address, with Group | IANA is requested to allocate an IPv6 multicast address, with Group | |||
ID in the range [0x01,0xFF] for 6LoWPAN compression [RFC6282], | ID in the range [0x01,0xFF] for 6LoWPAN compression [RFC6282], | |||
"ALL_MPL_FORWARDERS" from the "Variable Scope Multicast Addresses" | "ALL_MPL_FORWARDERS" from the "Variable Scope Multicast Addresses" | |||
sub-registry of the "INTERNET PROTOCOL VERSION 6 MULTICAST ADDRESSES" | sub-registry of the "INTERNET PROTOCOL VERSION 6 MULTICAST ADDRESSES" | |||
registry. | registry. | |||
14. Security Considerations | 13. 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 an 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 an | Buffered Message List and (ii) increase the MinSequence value for an | |||
MPL Seed in the corresponding Seed Set. The former side effect allows | MPL Seed in the corresponding Seed Set. The former side effect | |||
an attacker to halt the forwarding process of any MPL Data Messages | allows an attacker to halt the forwarding process of any MPL Data | |||
being disseminated. The latter side effect allows an attacker to | Messages being disseminated. The latter side effect allows an | |||
prevent MPL Forwarders from accepting new MPL Data Messages that an | attacker to prevent MPL Forwarders from accepting new MPL Data | |||
MPL Seed generates while the sequence number is less than | Messages that an MPL Seed generates while the sequence number is less | |||
MinSequence. | than MinSequence. | |||
More generally, the basic ability to inject messages into a Low-power | More generally, the basic ability to inject messages into a Low-power | |||
and Lossy Network can be used as a denial-of-service attack | and Lossy Network can be used as a denial-of-service attack | |||
regardless of what forwarding protocol is used. For these reasons, | regardless of what forwarding protocol is used. For these reasons, | |||
Low-power and Lossy Networks typically employ link-layer security | Low-power and Lossy Networks typically employ link-layer security | |||
mechanisms to disable an attacker's ability to inject messages. | mechanisms to disable an attacker's ability to inject messages. | |||
To prevent attackers from injecting packets through an 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 message's destination address. | |||
MPL uses the Trickle algorithm to manage message transmissions and | MPL uses the Trickle algorithm to manage message transmissions and | |||
the security considerations described in [RFC6206] apply. | the security considerations described in [RFC6206] apply. | |||
15. Normative References | 14. References | |||
14.1. Normative References | ||||
[I-D.droms-6man-multicast-scopes] | ||||
Droms, R., "IPv6 Multicast Address Scopes", draft-droms- | ||||
6man-multicast-scopes-02 (work in progress), July 2013. | ||||
[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. | |||
[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 | [RFC2780] Bradner, S. and V. Paxson, "IANA Allocation Guidelines For | |||
Values In the Internet Protocol and Related Headers", | Values In the Internet Protocol and Related Headers", BCP | |||
BCP 37, RFC 2780, March 2000. | 37, RFC 2780, March 2000. | |||
[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. | 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, | |||
skipping to change at page 31, line 5 | skipping to change at page 24, line 38 | |||
[RFC6282] Hui, J. and P. Thubert, "Compression Format for IPv6 | [RFC6282] Hui, J. 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. | September 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. | |||
14.2. Informative References | ||||
[RFC3973] Adams, A., Nicholas, J., and W. Siadak, "Protocol | ||||
Independent Multicast - Dense Mode (PIM-DM): Protocol | ||||
Specification (Revised)", RFC 3973, January 2005. | ||||
[RFC4601] Fenner, B., Handley, M., Holbrook, H., and I. Kouvelas, | ||||
"Protocol Independent Multicast - Sparse Mode (PIM-SM): | ||||
Protocol Specification (Revised)", RFC 4601, August 2006. | ||||
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. 61 change blocks. | ||||
161 lines changed or deleted | 223 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/ |