ROLL                                                              J. Hui
Internet-Draft                                                     Cisco
Intended status: Standards Track                               R. Kelsey
Expires: April 22, July 28, 2013                                      Silicon Labs
                                                        October 19, 2012
                                                        January 24, 2013

       Multicast Protocol for Low power and Lossy Networks (MPL)
                    draft-ietf-roll-trickle-mcast-02
                    draft-ietf-roll-trickle-mcast-03

Abstract

   This document specifies the Multicast Protocol for Low power and
   Lossy Networks (MPL) that provides IPv6 multicast forwarding in
   constrained networks.  MPL avoids the need to construct or maintain
   any multicast forwarding topology, disseminating messages to all MPL
   forwarders in an MPL domain.  MPL uses the Trickle algorithm to drive
   packet
   manage message transmissions for both control and data-plane packets.
   Specific
   messages.  Different Trickle parameter configurations allow MPL to
   trade between dissemination latency and transmission efficiency.

Status of this Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on April 22, July 28, 2013.

Copyright Notice

   Copyright (c) 2012 2013 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  4
   3.  Applicability Statement  . . . . . . . . . . . . . . . . . . .  5
   4.  Protocol Overview  . . . . . . . . . . . . . . . . . . . . . .  6
     4.1.  Information Base Overview  . . . . .  5
   4.  Message Formats . . . . . . . . . . .  6
     4.2.  Overview . . . . . . . . . . . . . . . . . . .  7
     4.1.  MPL Option . . . . . .  6
     4.3.  Signaling Overview . . . . . . . . . . . . . . . . . . . .  7
     4.2.  ICMPv6
   5.  MPL Message Constants  . . . . . . . . . . . . . . . . . . . .  8
       4.2.1.  MPL Window . . . .  9
     5.1.  Multicast Addresses  . . . . . . . . . . . . . . . . . . .  9
   5.
     5.2.  Message Types  . . . . . . . . . . . . . . . . . . . . . .  9
     5.3.  MPL Forwarder Behavior Parameters . . . . . . . . . . . . . . . . .  9
     5.4.  Trickle Parameters . . . . . . . . . . . . . . . . . . . .  9
   6.  Protocol Message Formats . . . . . 11
     5.1.  Multicast Packet Dissemination . . . . . . . . . . . . . . 11
       5.1.1.  Trickle Parameters and Variables
     6.1.  MPL Option . . . . . . . . . . . 12
       5.1.2.  Proactive Propagation . . . . . . . . . . . . . 11
     6.2.  MPL Control Message  . . . 12
       5.1.3.  Reactive Propagation . . . . . . . . . . . . . . . . 12
     6.3.  MPL Seed Info  . 13
     5.2.  Sliding Windows . . . . . . . . . . . . . . . . . . . . . 13
     5.3.  Transmission of MPL Multicast Packets
   7.  Information Base . . . . . . . . . . . . . . . . . . . . . . . 15
     5.4.  Reception of MPL Multicast Packets
     7.1.  Local Interface Set  . . . . . . . . . . . . 16
     5.5.  Transmission of ICMPv6 MPL Messages . . . . . . . 15
     7.2.  Domain Set . . . . 16
     5.6.  Reception of ICMPv6 MPL Messages . . . . . . . . . . . . . 17
   6.  MPL Parameters . . . . . . . 15
     7.3.  Seed Set . . . . . . . . . . . . . . . . . . 19
   7.  Acknowledgements . . . . . . . 15
     7.4.  Buffered Message Set . . . . . . . . . . . . . . . . 20 . . . 15
   8.  IANA Considerations  MPL Domains  . . . . . . . . . . . . . . . . . . . . . . . 21
   9.  Security Considerations . . 17
   9.  MPL Seed Sequence Numbers  . . . . . . . . . . . . . . . . . 22 . 18
   10. References MPL Data Messages  . . . . . . . . . . . . . . . . . . . . . . 19
     10.1. MPL Data Message Generation  . . . . 23
     10.1. Normative References . . . . . . . . . . . 19
     10.2. MPL Data Message Transmission  . . . . . . . . 23
     10.2. Informative References . . . . . . 19
     10.3. MPL Data Message Processing  . . . . . . . . . . . . 23
   Authors' Addresses . . . 20
   11. MPL Control Messages . . . . . . . . . . . . . . . . . . . . . 24

1.  Introduction

   Low power and Lossy Networks typically operate with strict resource
   constraints in 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

   Low power and Lossy Networks typically operate with strict resource
   constraints in communication, computation, memory, and energy.  Such
   resource constraints may preclude the use of existing IPv6 multicast
   topology
   routing and forwarding mechanisms.  Traditional IP multicast
   forwarding delivery
   typically relies on topology maintenance mechanisms to
   forward multicast messages discover and
   maintain routes to all subscribers of a multicast group.  However,
   maintaining such topologies in LLNs is costly and may not be feasible
   given the available resources.

   Memory constraints may limit devices to maintaining links/routes to
   one or a few neighbors.  For this reason, the Routing Protocol for
   LLNs (RPL) specifies both storing and non-storing modes [RFC6550].
   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
   forward packets messages away from the LBR.  For the same reasons, a LLN
   device may not be able to maintain a multicast forwarding routing topology when
   operating with limited memory.

   Furthermore, the dynamic properties of wireless networks can make the
   cost of maintaining a multicast forwarding routing topology prohibitively
   expensive.  In wireless environments, topology maintenance may
   involve selecting a connected dominating set used to forward
   multicast messages to all nodes in an administrative domain.
   However, existing mechanisms often require two-hop topology
   information and the cost of maintaining such information grows
   polynomially with network density.

   This document specifies the Multicast Protocol for Low power and
   Lossy Networks (MPL), which provides IPv6 multicast forwarding in
   constrained networks.  MPL avoids the need to construct or maintain
   any multicast forwarding routing topology, disseminating multicast messages to
   all MPL forwarders in an MPL domain.  By using the Trickle algorithm
   [RFC6206], MPL requires only small, constant state for each MPL
   device that initiates disseminations.  The Trickle algorithm also
   allows MPL to be density-aware, allowing the communication rate to
   scale logarithmically with density.

2.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in RFC 2119
   [RFC2119].

   The following terms are used throughout this document:

   MPL forwarder       An IPv6 Forwarder       - A router that subscribes implements this protocol.  A MPL
                       Forwarder is equipped with at least one MPL
                       Interface.

   MPL Interface       - An MPL Forwarder's attachment to the a
                       communications medium, over which it transmits
                       and receives MPL
                       multicast group Data Messages and participates in disseminating MPL multicast packets. Control
                       Messages according to this specification.  An MPL multicast scope The multicast scope that
                       Interface is assigned one or more unicast
                       addresses and is subscribed to one or more MPL uses when forwarding
                       Domain Addresses.

   MPL multicast packets.  In other words, the
                       multicast scope of the IPv6 Destination Domain Address
                       of an MPL multicast packet.

   MPL domain  - A connected set of MPL forwarders multicast address that define the
                       extent of identifies the MPL dissemination process.  As a
                       form set of flood, all
                       MPL forwarders in Interfaces within an MPL
                       domain will receive MPL multicast packets.  The Domain.  MPL domain MUST be composed of at least one Data
                       Messages disseminated in an MPL
                       multicast scope and MAY be composed of multiple Domain have the
                       associated MPL multicast scopes. Domain Address as their
                       destination address.

   MPL seed Domain          - A scope zone, as defined in [RFC4007], in which
                       MPL forwarder that begins the dissemination
                       process for an MPL multicast packet.  The MPL
                       seed may be different than the source of Interfaces subscribe to the
                       original multicast packet. same MPL seed identifier An identifier that uniquely identifies an Domain
                       Address and participate in disseminating MPL
                       forwarder within its Data
                       Messages.

   MPL domain.

   original multicast packet  An IPv6 Data Message    - A multicast packet message that is
                       disseminated using MPL.

   MPL multicast packet  An IPv6 multicast packet that contains an MPL
                       Hop-by-Hop Option.  When either source or
                       destinations are beyond the MPL used to communicate
                       a multicast scope,
                       the payload between MPL multicast packet is an IPv6-in-IPv6
                       packet that Forwarders and
                       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 header.  A MPL multicast scope,
                       Data Message has its destination address set to
                       the MPL Hop-by-Hop Option may be included
                       directly within the original multicast packet.

3.  Overview Domain Address.

   MPL delivers IPv6 Control Message - A link-local multicast packets by disseminating them message that is used to all
                       communicate information about recently received
                       MPL
   forwarders within an Data Messages to neighboring MPL domain. Forwarders.

   MPL dissemination is a form of
   flood. Seed            - An MPL forwarder may broadcast/multicast Forwarder that generates MPL Data
                       Messages and serves as an entry point into an MPL
                       Domain.

3.  Applicability Statement

   This protocol is an IPv6 multicast
   packet out of forwarding protocol for Low-Power
   and Lossy Networks.  By implementing a controlled dissemination using
   the same physical interface on which it was received.
   Using link-layer broadcast/multicast allows Trickle algorithm, this protocol is designed for networks that
   communicate using low-power and lossy links with widely varying
   topologies in both the space and time dimensions.

4.  Protocol Overview

   The goal of MPL is to forward multicast
   packets without explicitly identifying next-hop destinations.  An MPL
   forwarder may also broadcast/multicast MPL deliver multicast packets out
   other messages to all interfaces
   that subscribe 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
   as an MPL seed for messages' destination address within
   an original multicast packet.  The MPL seed may or
   may not be Domain.

4.1.  Information Base Overview

   A node records necessary protocol state in the same device as following information
   sets:

   o  The Local Interface Set records the source set of the original multicast
   packet.  When the original multicast packet's source is outside the
   LLN, the local MPL seed may be the ingress router.  Even if an original
   multicast packet source is within the LLN, the source may first
   forward Interfaces
      and the multicast packet unicast addresses assigned to the MPL seed using IPv6-in-IPv6
   tunneling.  Because those MPL state requirements grows with Interfaces.

   o  The Domain Set records the number set of
   active MPL seeds, limiting Domain Addresses and the number of
      local MPL seeds reduces the amount
   of state Interfaces that subscribe to those addresses.

   o  The Seed Set records information about received MPL forwarders must maintain.

   Because MPL typically broadcasts/multicasts Data Messages
      received from an MPL packets out of Seed.  The Seed Set maintains the minimum
      sequence number that the
   same interface on which they were received, MPL forwarders are likely 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 multicast packet more than once. Data
      Message, process its payload, and retransmit it.

   o  The Buffered Message Set records recently received MPL seed tags
   each original multicast packet with Data
      Messages from an MPL seed identifier and a
   sequence number.  The Seed.  MPL Data Messages resident in the
      Buffered Message Set have sequence number provides a total ordering of numbers that are greater than
      or equal to the minimum threshold maintained in the Seed Set. MPL multicast packets disseminated
      uses the Buffered Message Set to store MPL Data Messages that may
      be transmitted by the MPL seed. Forwarder for forwarding.

4.2.  Overview

   MPL defines achieves its goal by implementing a new IPv6 Hop-by-Hop Option, controlled flood that
   attempts to disseminate the MPL Option, multicast data message to include
   MPL-specific information along with all interfaces
   within an MPL Domain.  MPL performs the original following tasks to
   disseminate a multicast packet.
   Each IPv6 message:

   o  When having a multicast packet that message to forward into an MPL disseminates Domain, the
      MPL Seed generates an MPL Data Message that includes the MPL
   Option.  Because Seed
      Identifier, a newly generated sequence number, and the original multicast packet's source and
      message.  If the MPL
   seed may multicast destination address is not be the same device, the MPL Option may be added to the
   original multicast packet en-route.  To allow Path MTU discovery
      Domain Address, IP-in-IP [RFC2473] is used to
   work properly, MPL encapsulates encapsulate the original
      multicast packet message in
   another IPv6 header that includes the MPL Option. Data Message.

   o  Upon receiving a new an MPL multicast packet for forwarding, Data Message, the MPL
   forwarder may proactively transmit Forwarder extracts the
      MPL multicast packet packet a
   limited Seed and sequence number of times and then falls back into an optional reactive
   mode.  In maintenance mode, an determines whether or not the MPL forwarder buffers recently
      Data Message was previously received MPL multicast packets using the Seed Set and advertises
      Buffered Message Set.

      *  If the sequence number is less than the lower-bound sequence
         number maintained in the Seed Set or a summary of recently 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 multicast packets from time to time, allowing
   neighboring Data Message, an MPL forwarders 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 determine if they have any new forward the message.

   o  Each MPL Forwarder may periodically link-local multicast packets MPL
      Control Messages on MPL Interfaces to offer or receive. communicate information
      contained in the MPL forwarders schedule their packet (control Forwarder's Seed Set and data) transmissions
   using the Trickle algorithm [RFC6206].  Trickle's adaptive
   transmission interval allows Buffered Message
      Sets.

   o  Upon receiving an MPL to quickly disseminate messages when Control Message, an MPL Forwarder determines
      whether there are any new MPL multicast packets, but reduces transmission
   overhead as Data Messages that have yet to be
      received by the dissemination process completes.  Trickle's
   suppression mechanism MPL Control Message's source and transmission time selection allow multicasts those
      MPL Data Messages.

   MPL's
   communication rate 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 scale logarithmically with density.

4. receive the message.  After transmitting the MPL Data
      Message Formats

4.1. a limited number of times, the MPL Option

   The forwarder may terminate
      proactive forwarding for the MPL Option is carried in Data Message message.

   Reactive Forwarding  - With reactive forwarding, an IPv6 Hop-by-Hop Options header,
   immediately following the IPv6 header.  The MPL Option has Forwarder
      link-local multicasts MPL Control Messages using the
   following format:

      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
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                     |  Option Type  |  Opt Trickle
      algorithm [RFC6206].  MPL Forwarders use MPL Control Messages to
      discover new MPL Data Len |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     | S |M|   rsv   |   sequence    |      seed-id (optional)       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Option Type         XX (to be confirmed by IANA).

   Opt Messages that have not yet been received.
      When discovering that a neighboring MPL Forwarder has not yet
      received a new MPL Data Len        Length of Message, the Option MPL Forwarder schedules those
      MPL Data field in octets.  MUST
                       be set to either 2 or 4.

   S                   2-bit unsigned integer.  Identifies Messages for transmission using the length of
                       seed-id. 0 indicates that Trickle algorithm.

4.3.  Signaling Overview

   This protocol generates and processes the seed-id 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 0 and
                       not included an
      address in the Local Interface Set of the MPL Option. 1 indicates Seed that generated
      the seed-id message and is a 16-bit unsigned integer. 2
                       indicates that valid within the seed-id MPL Domain.  The MPL Data
      Message's destination is a 64-bit unsigned
                       integer. 3 indicates that the seed-id is a 128-
                       bit unsigned integer.

   M                   1-bit flag. 0 indicates that MPL Domain Address corresponding to
      the value in
                       sequence is not MPL Domain.  An MPL Data Message contains:

      *  The Seed Identifier of the greatest sequence number MPL Seed that
                       was received from generated the MPL seed.

   rsv                 5-bit reserved field.  MUST be set to zero and
                       incoming MPL multicast packets in which they are
                       not zero MUST be dropped. Data
         Message.

      *  The sequence            8-bit unsigned integer.  Identifies relative
                       ordering number of MPL multicast packets from the source
                       identified by seed-id.

   seed-id             Uniquely identifies the MPL seed Seed that initiated
                       dissemination of generated the MPL multicast packet. Data
         Message.

      *  The
                       size of seed-id is indicated original multicast message.

   MPL Control Message  - Generated by an MPL Forwarder to communicate
      information contained in the S field.

   The Option Data Seed Set and Buffered Message Set to
      neighboring MPL Forwarders.  An MPL Control Message contains a
      list of tuples for each entry in the Trickle Multicast option MUST NOT change as Seed Set. Each tuple
      contains:

      *  The minimum sequence number maintained in the Seed Set for the
         MPL multicast packet is forwarded.  Nodes that do not understand Seed.

      *  A bit-vector indicating the Trickle Multicast option MUST discard sequence numbers of MPL Data
         Messages resident in the packet.  Thus,
   according to [RFC2460] Buffered Message Set for the three high order bits of MPL Seed,
         where the Option Type
   must be set first bit represents a sequence number equal to '010'. the
         minimum threshold maintained in the Seed Set.

      *  The Option Data length is variable.

   The seed-id uniquely identifies an MPL seed within of the bit-vector.

5.  MPL domain.
   When seed-id is 128 bits (S=3), the Constants

   This section describes various program and networking constants used
   by MPL.

5.1.  Multicast Addresses

   MPL seed MAY makes use an IPv6 address
   assigned to one of its interfaces that is unique within the MPL
   domain.  Managing Domain Addresses to identify MPL seed identifiers is not within scope of this
   document.

   The sequence field establishes a total ordering Interfaces of
   an MPL multicast
   packets from the same MPL seed.  The Domain.  By default, MPL seed MUST increment Forwarders subscribe to the
   sequence field's
   ALL_MPL_FORWARDERS multicast address with a scope value on of 3 (subnet-
   local).

   For each new MPL multicast packet Domain Address that it
   disseminates.  Implementations an MPL Interface subscribes to, the
   MPL Interface MUST follow also subscribe to the Serial Number
   Arithmetic as defined in [RFC1982] when incrementing MPL Domain Address with a sequence
   scope value
   or comparing two sequence values.

   Future updates to this specification may define additional fields
   following of 2 (link-local) when reactive forwarding is in use.
   MPL Forwarders use the seed-id field.

4.2.  ICMPv6 link-scoped MPL Message

   The MPL forwarder uses ICMPv6 Domain Address to communicate
   MPL messages Control Messages to advertise information
   about recently received neighboring (i.e. on-link) MPL multicast packets.  The ICMPv6 Forwarders.

5.2.  Message Types

   MPL
   message has the following format:

      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
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |     Type      |     Code      |          Checksum             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                                               |
     . defines an IPv6 Option for carrying an MPL Window[1..n]                        .
     .                                                               .
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   IP Fields:

   Source Address      A link-local address assigned to the sending
                       interface.

   Destination Address The link-local all-nodes Seed Identifier and a
   sequence number within an MPL forwarders multicast
                       address (FF02::TBD).

   Hop Limit           255

   ICMPv6 Fields:

   Type                XX (to be confirmed by IANA).

   Code                0

   Checksum Data Message.  The ICMP checksum.  See [RFC4443].

   MPL Window[1..n]    List of one or more MPL Windows (defined in
                       Section 4.2.1).

   An IPv6 Option Type has
   value MPL_OPT_TYPE.

   MPL forwarder transmits defines an ICMPv6 MPL message to advertise Message (MPL Control Message) for communicating
   information about buffered MPL multicast packets.  More explicitly,
   the ICMPv6 MPL message encodes the sliding window state (described contained in
   Section 5.2) that the MPL forwarder maintains for each MPL seed.  The
   advertisement serves to indicate its Seed Set and Buffered Message Set to
   neighboring MPL forwarders
   regarding newer messages Forwarders.  The MPL Control Message has ICMPv6 Type
   MPL_ICMP_TYPE.

5.3.  MPL Forwarder Parameters

   PROACTIVE_FORWARDING  A boolean value that it may send or indicates whether the neighboring MPL
   forwarders have yet to receive.

4.2.1.  MPL Window

   An
      Forwarder should schedule MPL Window encodes Data Message transmissions after
      receiving them for the sliding window state (described first time.

   SEED_SET_LIFETIME  The minimum lifetime for an entry in
   Section 5.2 that the MPL forwarder maintains Seed Set.

5.4.  Trickle Parameters

   As specified in [RFC6206], a Trickle timer runs for an MPL seed.  Each
   MPL Window a defined
   interval and has three configuration parameters: the following 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 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  |     w-min  Opt Data Len |   w-len
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     | S |M|V|  rsv  |   sequence    |      seed-id (0, 2 or 16 octets)  |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     | (optional)       |
     .              buffered-mpl-packets (0 to 8 octets)             .
     .                                                               .
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   w-min               8-bit unsigned integer.  Indicates the first
                       sequence number associated with the first bit in
                       buffered-mpl-packets.

   w-len               6-bit unsigned integer.  Indicates the size

   Option Type         MPL_OPT_TYPE

   Opt Data Len        Length of the sliding window and the number of valid bits Option Data field in buffered-mpl-packets.  The sliding window's
                       upper bound is the sum of w-min and w-len. octets.

   S                   2-bit unsigned integer.  Identifies the length of
                       seed-id. 0 indicates that the seed-id value is 0 the IPv6
                       Source Address and not included in the MPL
                       Option. 1 indicates that the seed-id value is a 16-bit
                       unsigned integer. 2 indicates that the seed-id value is
                       a
                       128-bit 64-bit unsigned integer. 3 is reserved. indicates that the
                       seed-id             Indicates is a 128-bit unsigned integer.

   M                   1-bit flag. 1 indicates that the value in
                       sequence is known to be the largest sequence
                       number that was received from the MPL seed associated with this
                       sliding window.

   buffered-mpl-packets  Variable-length bit vector.  Identifies Seed.

   V                   1-bit flag. 0 indicates that the MPL Option
                       conforms to this specification.  MPL Options
                       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 numbers            8-bit unsigned integer.  Identifies relative
                       ordering of MPL multicast packets Data Messages from the MPL Seed
                       identified by seed-id.

   seed-id             Uniquely identifies the MPL Seed that initiated
                       dissemination of the MPL forwarder has buffered. Data Message.  The sequence
                       number size
                       of seed-id is determined indicated by w-min + i, where i is the
                       offset within buffered-mpl-packets. S field.

   The Option Data (in particular the M flag) of the MPL Window does not have any octet alignment requirement.

5. Option is
   updated by MPL Forwarder Behavior

   An Forwarders as the MPL forwarder implementation needs to manage sliding windows for
   each active Data Message is forwarded.
   Nodes that do not understand the MPL seed.  The sliding window allows Option MUST discard the MPL forwarder to
   determine what multicast packets Data
   Message.  Thus, according to accept and what multicast packets [RFC2460] the three high order bits of
   the Option Type are buffered.  An MPL forwarder must also manage MPL packet
   transmissions.

5.1.  Multicast Packet Dissemination

   MPL uses the Trickle algorithm set to control packet transmissions when
   disseminating MPL multicast packets [RFC6206].  MPL provides two
   propagation mechanisms for disseminating MPL multicast packets.

   1.  With proactive propagation, '011'.  The Option Data length is
   variable.

   The seed-id uniquely identifies an MPL forwarder transmits buffered
       MPL multicast packets using the Trickle algorithm.  This method Seed.  When seed-id is called proactive propagation since 128
   bits (S=3), the MPL seed MAY use an IPv6 address assigned to one of
   its interfaces that is unique within the MPL forwarder actively
       transmits domain.  Managing MPL multicast packets without discovering that
   Seed Identifiers is not within scope of this document.

   The sequence field establishes a
       neighboring total ordering of MPL forwarder has yet to receive the message.

   2.  With reactive propagation, Data Messages
   generated by an MPL forwarder transmits ICMPv6 MPL
       messages using the Trickle algorithm.  An Seed for an MPL forwarder only
       transmits buffered Domain.  The MPL multicast packets upon discovering that
       neighboring devices have not yet to receive Seed MUST
   increment the corresponding MPL
       multicast packets.

   When receiving a sequence field's value on each new multicast packet, an MPL forwarder first
   utilizes proactive propagation to forward the MPL multicast packet.
   Proactive propagation reduces dissemination latency since it does not
   require discovering Data Message
   that neighboring devices have not yet received
   the MPL multicast packet.  MPL forwarders utilize proactive
   propagation it generates for newly received MPL multicast packets since they can
   assume that some neighboring an MPL forwarders have yet to receive Domain.  Implementations MUST follow the
   MPL multicast packet.  After
   Serial Number Arithmetic as defined in [RFC1982] when incrementing a limited number of MPL multicast packet
   transmissions, the MPL forwarder
   sequence value or comparing two sequence values.

   Future updates to this specification may terminate proactive propagation
   for define additional fields
   following the seed-id field.

6.2.  MPL multicast packet. Control Message

   An MPL forwarder may optionally use reactive propagation Forwarder uses ICMPv6 messages to communicate information
   contained in its Seed Set and Buffered Message Set to continue
   the dissemination process with lower communication overhead.  With
   reactive propagation, neighboring MPL forwarders use ICMPv6
   Forwarders.  The MPL
   messages Control Message has the following format:

      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
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |     Type      |     Code      |          Checksum             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                                               |
     .                      MPL Seed Info[1..n]                      .
     .                                                               .
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   IP Fields:

   Source Address      A link-local address assigned to discover new the sending
                       interface.

   Destination Address The link-scoped MPL multicast messages Domain Address corresponding
                       to the MPL Domain.

   Hop Limit           255

   ICMPv6 Fields:

   Type                MPL_ICMP_TYPE

   Code                0

   Checksum            The ICMP checksum.  See [RFC4443].

   MPL Seed Info[1..n] List of one or more MPL Seed Info entries.

   The MPL Control Message indicates the sequence numbers of MPL Data
   Messages that have not yet
   been received.  When discovering are within the Buffered Message Set. The MPL Control
   Message also indicates the sequence numbers of MPL Data Messages that a
   an MPL Forwarder is willing to receive.  The MPL Control Message
   allows neighboring MPL forwarder has
   not yet received a Forwarders to determine whether there are any
   new MPL multicast packet, the Data Messages to exchange.

6.3.  MPL forwarder
   enables proactive propagation again.

5.1.1.  Trickle Parameters and Variables

   As specified in RFC 6206 [RFC6206], a Trickle timer runs for a
   defined interval and has three configuration parameters: Seed Info

   An MPL Seed Info encodes the minimum
   interval size Imin, sequence number for the maximum interval size Imax, and a redundancy
   constant k. MPL defines a fourth configuration parameter, TimerExpirations, which Seed
   maintained in the Seed Set. The MPL Seed Info also indicates the number
   sequence numbers of Trickle timer expiration events that occur
   before terminating MPL Data Messages generated by the Trickle algorithm.

   Each MPL forwarder maintains a separate Trickle parameter set for Seed
   within the
   proactive and reactive propagation methods.  TimerExpirations MUST be
   greater than Buffered Message Set. The MPL Seed Info has the following
   format:

      0 for proactive propagation.  TimerExpirations MAY be
   set to                   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
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |   min-seqno   |  bm-len   | S |   seed-id (0/2/8/16 octets)   |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                                               |
     .            buffered-mpl-messages (variable length)            .
     .                                                               .
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   min-seqno           8-bit unsigned integer.  The lower-bound sequence
                       number for reactive propagation, which effectively disables
   reactive propagation.

   As specified in RFC 6206 [RFC6206], a Trickle timer has three
   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 Seed.

   bm-len              6-bit unsigned integer.  The size of buffered-
                       mpl-messages in octets.

   S                   2-bit unsigned integer.  Identifies the number length of Trickle
   timer expiration events since
                       seed-id. 0 indicates that the Trickle timer was last reset.

5.1.2.  Proactive Propagation

   With proactive propagation, seed-id value is
                       the MPL forwarder transmits buffered MPL
   multicast packets using IPv6 Source Address and not included in the Trickle algorithm.  Each buffered
                       MPL
   multicast packet Seed Info. 1 indicates that the seed-id value
                       is proactively being disseminated with
   proactive propagation has an associated Trickle timer.  Adhering to
   Section 5 of RFC 6206 [RFC6206], this document defines a 16-bit unsigned integer. 2 indicates that
                       the following:

   o  This document defines seed-id value is a "consistent" transmission for proactive
      propagation as receiving an MPL multicast packet 64-bit unsigned integer. 3
                       indicates that has the same
      MPL seed identifier and sequence number as seed-id is a buffered 128-bit unsigned
                       integer.

   seed-id             Variable-length unsigned integer.  Indicates the
                       MPL packet.

   o  This document defines an "inconsistent" transmission for proactive
      propagation as receiving an Seed associated with this MPL multicast packet that has Seed Info.

   buffered-mpl-messages  Variable-length bit vector.  Identifies the same
                       sequence numbers of MPL seed identifier, Data Messages maintained
                       in the M flag set, and has a Buffered Message Set for the MPL Seed.
                       The sequence number
      less than is determined by min-seqno +
                       i, where i is the buffered bit offset within buffered-mpl-
                       messages.

   The MPL multicast packet's sequence number.

   o  This document Seed Info does not define have any external "events".

   o  This document defines both octet alignment requirement.

7.  Information Base

7.1.  Local Interface Set

   The Local Interface Set records the local MPL multicast packets and ICMPv6 Interfaces of an MPL
      multicast packets as Trickle messages.  These messages are defined
      in
   Forwarder.  The Local Interface Set consists of Local Interface
   Tuples, one per MPL Interface: (AddressSet).

   AddressSet  - a set of unicast addresses assigned to the sections below.

   o MPL
      Interface.

7.2.  Domain Set

   The actions outside Domain Set records the Trickle algorithm MPL Interfaces that the protocol takes
      involve managing sliding window state, and is specified in
      Section 5.2.

5.1.3.  Reactive Propagation

   With reactive propagation, the subscribe to each MPL forwarder transmits ICMPv6
   Domain Address.  The Domain Set consists of MPL
   messages using the Trickle algorithm.  A Domain Tuples, one
   per MPL forwarder maintains Domain: (MPLInterfaceSet).

   MPLInterfaceSet  - a
   single Trickle timer for reactive propagation with each set of MPL domain.
   When REACTIVE_TIMER_EXPIRATIONS is 0, Interfaces that subscribe to the MPL forwarder does not
   execute
      Domain Address that identifies the Trickle algorithm for reactive propagation and reactive
   propagation MPL Domain.

7.3.  Seed Set

   The Seed Set records a sliding window used to determine the sequence
   numbers of MPL Data Messages that an MPL Forwarder is disabled.  Adhering willing to Section 5
   accept generated by the MPL Seed.  It consists of RFC 6206
   [RFC6206], this document defines MPL Seed Tuples:
   (SeedID, MinSequence, Lifetime).

   SeedID  - the following:

   o  This document defines a "consistent" transmission identifier for reactive
      propagation as receiving an ICMPv6 the MPL message Seed.

   MinSequence  - a lower-bound sequence number that indicates
      neither the receiving nor transmitting node has new MPL multicast
      packets to offer.

   o  This document defines an "inconsistent" transmission for reactive
      propagation as receiving an ICMPv6 MPL message that indicates
      either the receiving or transmitting node has at least one new MPL
      multicast packet to offer.

   o  This document defines an "event" for reactive propagation as
      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
      multicast packets as Trickle messages.  These messages are defined
      in the sections below.

   o  The actions outside the Trickle algorithm that the protocol takes
      involve managing sliding window state, and is specified in
      Section 5.2.

5.2.  Sliding Windows

   Every MPL forwarder MUST maintain a sliding window of sequence
   numbers for each MPL seed of recently received MPL packets.  The
   sliding window performs two functions:

   1.  Indicate what MPL multicast packets the MPL forwarder should
       accept.

   2.  Indicate what MPL multicast packets are buffered and may be
       transmitted to neighboring MPL forwarders.

   Each sliding window logically consists of:

   1.  A lower-bound sequence number, WindowMin, that represents represents the
      sequence number of the oldest MPL multicast packet Data Message the MPL
       forwarder Forwarder
      is willing to receive or has buffered. transmit.  An MPL
       forwarder Forwarder MUST ignore
      any MPL multicast packet Data Message that has sequence value less than than WindowMin.

   2.  An upper-bound sequence value, WindowMax, that represents the
       sequence number of the next MPL multicast packet that the MPL
       forwarder expects to receive.  An MPL forwarder MUST accept any
       MPL multicast packet that has sequence number greater than or
       equal to WindowMax.

   3.  A list of MPL multicast packets, BufferedPackets, buffered by the
       MPL forwarder.  Each entry in BufferedPackets MUST have a
       sequence number in the range [WindowMin, WindowMax).

   4.  A timer, HoldTimer, that
      MinSequence.

   Lifetime  - indicates the minimum lifetime of the
       sliding window.  The Seed Set entry.  An
      MPL forwarder Forwarder MUST NOT free a sliding window Seed Set entry before HoldTimer its expires.

   When receiving

7.4.  Buffered Message Set

   The Buffered Message Set records recently received MPL Data Messages
   from an MPL multicast packet, if no existing sliding window
   exists for Seed.  An MPL Forwarder uses the Buffered Message Set to
   buffer MPL seed, Data Messages while the MPL forwarder MUST create a new sliding
   window before accepting Forwarder is forwarding the
   MPL multicast packet. Data Messages.  The MPL forwarder
   may reclaim memory resources by freeing a sliding window Buffered Message Set consists of Buffered
   Message Tuples: (SeedID, SequenceNumber, DataMessage).

   SeedID  - the identifier for another the MPL seed if its HoldTimer has expired.  If, for any reason, Seed that generated the MPL
   forwarder cannot create a new sliding window, it MUST discard Data
      Message.

   SequenceNumber  - the
   packet.

   If a sliding window exists sequence number for the MPL seed, Data Message.

   DataMessage  - the MPL forwarder MUST
   ignore the Data Message.

   All MPL multicast packet if Data Messages within the packet's Buffered Message Set MUST have a
   sequence number is
   less greater 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 equal to MinSequence for the next higher layer.
   corresponding SeedID.  When accepting increasing MinSequence for an MPL multicast packet, Seed,
   the MPL forwarder Forwarder MUST update
   the sliding window based on the packet's sequence number.  If delete any MPL Data Messages from the Buffered
   Message Set that have sequence number is not numbers less than WindowMax, the MinSequence.

8.  MPL forwarder MUST
   set WindowMax to 1 greater than the packet's sequence number.  If
   WindowMax - WindowMin > MPL_MAX_WINDOW_SIZE, the Domains

   An MPL forwarder MUST
   increment WindowMin such that WindowMax - WindowMin <=
   MPL_MAX_WINDOW_SIZE.  At Domain is a scope zone, as defined in [RFC4007], in which MPL
   Interfaces subscribe to the same time, the MPL forwarder MUST free
   any entries Domain Address and participate
   in BufferedPackets that have a sequence number less than
   WindowMin.

   If the disseminating MPL forwarder has available memory resources, it Data Messages.

   By default, an MPL Forwarder MUST buffer 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 packet for proactive propagation.  If not enough
   memory resources are available addresses.  An MPL Interface MUST subscribe to buffer the packet,
   MPL Domain Addresses for the MPL
   forwarder MUST increment WindowMin and free entries in
   BufferedPackets Domains that have a sequence number less than WindowMin until
   enough memory resources are available.  Incrementing WindowMin will
   ensure it participates in.
   The allocation of other multicast addresses is out of scope.

   For each MPL Domain Address that the an MPL forwarder does not accept previously received
   packets.

   An Interface subscribes to, the
   MPL forwarder MAY reclaim memory resources from sliding windows
   for other Interface MUST also subscribe to the same MPL seeds.  If Domain Address with
   a sliding window for another MPL seed scope value of 2 (link-local) when reactive forwarding is
   actively disseminating messages and has more than one entry in its
   BufferedPackets, the use
   (i.e. when communicating MPL forwarder may free entries Control Messages).

9.  MPL Seed Sequence Numbers

   Each MPL Seed maintains a sequence number for each MPL Domain that it
   serves.  The sequence numbers are included in MPL seed Data Messages
   generated by incrementing WindowMin as described above.

   If the MPL forwarder cannot free enough memory resources to buffer the MPL multicast packet, the Seed.  The MPL forwarder Seed MUST set WindowMin to 1
   greater than increment the packet's sequence number.

   When memory resources are available, an MPL forwarder SHOULD buffer a
   number for each MPL multicast packet until the proactive propagation completes (i.e.
   the Trickle algorithm stops execution) and MAY buffer Data Message that it generates for longer.
   After proactive propagation completes, the an MPL forwarder may advance
   WindowMin to Domain.
   Implementations MUST follow the packet's Serial Number Arithmetic as defined
   in [RFC1982] when incrementing a sequence value or comparing two
   sequence values.  This sequence number is used to reclaim memory
   resources.  When the establish a total
   ordering of MPL forwarder no longer buffers any packets, it
   MAY set WindowMin equal to WindowMax.  When setting WindowMin equal
   to WindowMax, the Data Messages generated by an MPL forwarder MUST initialize HoldTimer to
   WINDOW_HOLD_TIME and start HoldTimer.  After HoldTimer expires, the Seed for an MPL forwarder MAY free the sliding window to reclaim memory
   resources.

5.3.  Transmission of
   Domain.

10.  MPL Multicast Packets

   The Data Messages

10.1.  MPL forwarder manages buffered Data Message Generation

   MPL multicast packet transmissions
   using the Trickle algorithm.  When adding a packet to
   BufferedPackets, Data Messages are generated by MPL Seeds when they enter the MPL forwarder
   Domain.  All MPL Data messages have the following properties:

   o  The IPv6 Source Address MUST create a Trickle timer for be an address in the packet and start execution AddressSet of the Trickle algorithm.

   After PROACTIVE_TIMER_EXPIRATIONS Trickle timer events, a
      corresponding MPL Interface and MUST be valid within the MPL
   forwarder
      Domain.

   o  The IPv6 Destination Address MUST stop executing be set to the Trickle algorithm.  When a buffered MPL multicast packet does not have Domain Address
      corresponding to the MPL Domain.

   o  A MPL Data Message MUST contain an active Trickle timer, MPL Option in its IPv6 Header
      to identify the MPL
   forwarder MAY free Seed that generated the buffered packet by advancing WindowMin message and the
      ordering relative to 1
   greater than other MPL Data Messages generated by the packet's sequence number.

   Each interface that supports MPL
      Seed.

   When the source address is configured with exactly one in the AddressList of an MPL
   multicast scope.  The Interface
   corresponding to the MPL multicast scope MUST be site-local or
   smaller Domain Address and defaults to link-local.  A scope larger than link-local
   MAY be used only when that scope corresponds exactly to the destination address
   is the MPL
   domain.

   An Domain Address, the application message and the MPL domain may therefore Data
   Message MAY be composed of one or more MPL multicast
   scopes.  For example, identical.  In other words, the MPL domain Data Message may be composed of
   contain a single MPL
   multicast scope when using a site-local scope.  Alternatively, IPv6 header that includes the MPL domain may be composed of multiple MPL multicast scopes when
   using a link-local scope. Option.

   Otherwise, IPv6-in-IPv6 encapsulation MUST be used when using MPL to forward an
   original multicast packet whose source or destination address is
   outside the MPL multicast scope.  IPv6-in-IPv6 encapsulation is
   necessary to support Path MTU discovery when satisfy the MPL forwarder is not
   the source of the original multicast packet.  IPv6-in-IPv6
   encapsulation also allows
   Data Message requirements listed above [RFC2473].  The complete IPv6-
   in-IPv6 message forms an MPL forwarder Data Message.  The outer IPv6 header
   conforms to remove the MPL Option
   when forwarding the original multicast packet over a link that does
   not support MPL. Data Message requirements listed above.  The destination address scope for the outer
   encapsulated IPv6
   header MUST be datagram encodes the MPL multicast scope.

   When an MPL domain data message that is composed of multiple MPL multicast scopes (e.g.
   when
   communicated beyond the MPL multicast scope is link-local), an MPL forwarder MUST
   decapsulate and encapsulate the original multicast packet when
   crossing between different Domain.

10.2.  MPL multicast scopes.  In doing so, the Data Message Transmission

   An MPL forwarder MUST duplicate the Forwarder manages transmission of MPL Option, unmodified, Data Messages in the new
   outer IPv6 header.

   The IPv6 destination address of
   Buffered Message set using the Trickle algorithm [RFC6206].  An MPL multicast packet
   Forwarder MUST use a separate Trickle timer for each MPL Data Message
   that it is the all-
   MPL-forwarders multicast address (TBD).  The scope actively forwarding.  In accordance with Section 5 of RFC
   6206 [RFC6206], this document defines the IPv6
   destination address is set to the MPL multicast scope.

5.4.  Reception of MPL Multicast Packets

   Upon following:

   o  This document defines a "consistent" transmission as receiving an
      MPL multicast packet, the MPL forwarder first
   determines whether or not to accept and buffer Data Message that has the MPL multicast
   packet based on its MPL seed same seed-id and sequence value, value as specified in
   Section 5.2.

   If the MPL forwarder accepts
      the MPL multicast packet, Data Message managed by the Trickle timer.

   o  This document defines an "inconsistent" transmission as receiving
      an MPL
   forwarder determines whether or not to deliver the original multicast
   packet to the next higher layer.  For example, if Data Message that has the MPL multicast
   packet uses IPv6-in-IPv6 encapsulation, same seed-id value and the M flag
      set, but has a sequence value less than MPL forwarder removes Data Message managed
      by the
   outer IPv6 header, which also removes MPL Option.

5.5.  Transmission of ICMPv6 Trickle timer.

   o  This document does not define any external "events".

   o  This document defines MPL Data Messages as Trickle messages.

   o  The MPL forwarder generates actions outside the Trickle algorithm that the protocol takes
      involve managing Seed Set and transmits Buffered Message Set

   As specified in [RFC6206], a new ICMPv6 MPL message
   whenever Trickle requests timer has three variables: the
   current interval size I, a transmission.  The time within the current interval t, and a
   counter c.  MPL forwarder includes
   an encoding defines a fourth variable, e, which counts the number
   of each sliding window in Trickle timer expiration events since the ICMPv6 MPL message.

   Each sliding window is encoded using an MPL Window entry, defined in
   Section 5.2.  The MPL forwarder sets Trickle timer was last
   reset.

   After DATA_MESSAGE_TIMER_EXPIRATIONS Trickle timer events, the MPL Window fields as
   follows:

   S  If
   Forwarder MUST disable the Trickle timer.  When a buffered MPL seed identifier is 0, set S to 0.  If Data
   Message does not have an associated Trickle timer, the MPL seed
      identifier is within Forwarder
   MAY delete the range [1, 65535], set S to 2.  Otherwise,
      set S to 3.

   w-min  Set to message from the lower bound Buffered Message Set by advancing
   MinSequence of the sliding window (i.e.
      WindowMin).

   w-len  Set to corresponding MPL Seed in the length of Seed Set. When the window (i.e.  WindowMax - WindowMin).

   seed-id  If S is non-zero, set to
   MPL Forwarder no longer buffers any messages for an MPL Seed, the MPL seed identifier.

   buffered-mpl-packets  Set each bit
   Forwarder MUST NOT increment MinSequence for that represents a sequence number
      of a packet in BufferedPackets MPL Seed.

   When transmitting an MPL Data Message, the MPL Forwarder MUST either
   set the M flag to 1.  Set all other bits zero or set it to 0.
      The i'th bit in buffered-mpl-packets represents a level that indicates whether or
   not the message's sequence number
      of w-min + i.

5.6.  Reception of ICMPv6 is the largest value that has been
   received from the MPL Messages

   An Seed.

10.3.  MPL forwarder processes each ICMPv6 Data Message Processing

   Upon receiving an MPL message that it receives
   to determine if it has any new MPL multicast packets to receive or
   offer.

   An Data Message, the MPL forwarder determines if a new Forwarder first processes
   the MPL multicast packet has not
   been received from a neighboring node if any of Option and updates the Trickle timer associated with the following
   conditions hold true:

   1.  The ICMPv6 MPL message includes
   Data Message if one exists.

   Upon receiving an MPL Window for Data Message, an MPL seed
       that does not have a corresponding sliding window entry on Forwarder MUST perform one
   of the following actions:

   o  Accept the message and enter the MPL forwarder.

   2.  The neighbor has a packet in its BufferedPackets that has
       sequence value greater than or equal to WindowMax (i.e. w-min +
       w-len >= WindowMax).

   3.  The neighbor has a packet Data Message in its BufferedPackets that has
       sequence number within range of the sliding window but is not
       included in BufferedPackets (i.e. Buffered
      Message Set.

   o  Accept the i'th bit message and update the corresponding MinSequence in buffered-mpl-
       packets is set the
      Seed Set to 1, where 1 greater than the message's sequence number is w-min + i).

   When an number.

   o  Discard the message without any change to the MPL forwarder determines that it has not yet received Information
      Base.

   If a new Seed Set entry exists for the MPL multicast packet buffered by a neighboring device, Seed, the MPL
   forwarder resets Forwarder MUST
   discard the Trickle timer associated with reactive
   propagation.

   An MPL forwarder determines Data Message if an entry its sequence number is less than
   MinSequence or exists in BufferedPackets has not
   been received by a neighboring MPL forwarder if any of the following
   conditions hold true:

   1.  The ICMPv6 MPL message Buffered Message Set.

   If a Seed Set entry does not include an MPL Window exist for the
       packet's MPL seed.

   2.  The packet's sequence number is greater than or equal to Seed, the
       neighbor's WindowMax value (i.e. MPL
   Forwarder MUST create a new entry for the packet's sequence number is
       greater than or equal to w-min + w-len).

   3.  The packet's sequence number is within MPL Seed before accepting
   the range of MPL Data Message.

   If memory is limited, an MPL Forwarder SHOULD reclaim memory
   resources by:

   o  Incrementing MinSequence entries in the
       neighbor's sliding window [WindowMin, WindowMax), but not
       included Seed Set and deleting MPL
      Data Messages in the neighbor's BufferedPacket (i.e. Buffered Message Set that fall below the packet's
       sequence number is greater than or equal to w-min, strictly less
       than w-min + w-len,
      corresponding MinSequence value.

   o  Deleting other Seed Set entries that have expired and the
      corresponding bit in buffered-mpl-
       packets is set to 0.

   When an MPL forwarder determines that it has at least one buffered MPL multicast packet that has not yet been received by a neighbor, Data Messages in the Buffered Message Set.

   If the MPL forwarder resets Forwarder accepts the Trickle timer associated with reactive
   propagation.  Additionally, for each buffered MPL multicast packet
   that should be transferred, Data Message, the MPL forwarder Forwarder
   MUST reset perform the following actions:

   o  If PROACTIVE_PROPAGATION is true, the MPL Forwarder MUST
      initialize and start a Trickle timer and reset e to 0 for proactive propagation. the MPL Data Message.

   o  If the MPL Control Message Trickle timer for proactive propagation has already stopped execution, is not running and
      CONTROL_MESSAGE_TIMER_EXPIRATIONS is non-zero, the MPL forwarder Forwarder
      MUST initialize a new Trickle timer and start execution
   of the Trickle algorithm.

6.  MPL Parameters

   An MPL forwarder maintains two sets of Control Message Trickle parameters for timer.

   o  If the
   proactive and reactive methods.  The Trickle parameters are listed
   below:

   PROACTIVE_IMIN  The minimum Trickle timer interval, as defined in
      [RFC6206] for proactive propagation.

   PROACTIVE_IMAX  The maximum Trickle timer interval, as defined in
      [RFC6206] for proactive propagation.

   PROACTIVE_K  The redundancy constant, as defined in [RFC6206] for
      proactive propagation.

   PROACTIVE_TIMER_EXPIRATIONS  The number of MPL Control Message Trickle timer expirations
      that occur before terminating is running, the Trickle algorithm. MPL
      Forwarder MUST be set
      to a value greater than 0.

   REACTIVE_IMIN  The minimum reset the MPL Control Message Trickle timer interval, as defined in
      [RFC6206] timer.

11.  MPL Control Messages

11.1.  MPL Control Message Generation

   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:

   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  bm-len set to the size of buffered-mpl-messages in octets.

   o  seed-id set to the MPL seed identifier.

   o  buffered-mpl-messages with each bit representing whether or not an
      MPL Data Message with the corresponding sequence number exists in
      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.

11.2.  MPL Control Message Transmission

   An MPL Forwarder transmits MPL Control Messages using the Trickle
   algorithm.  A MPL forwarder maintains a single Trickle timer for each
   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:

   o  This document defines a "consistent" transmission as receiving an
      MPL Control Message that indicates neither the receiving nor
      transmitting node has new MPL Data Message.

   o  This document defines an "inconsistent" transmission as receiving
      an MPL Control Message that indicates either 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
      entry in the Seed Set or adding a message to the Buffered Message
      Set.

   o  This document defines an MPL Control Message as a Trickle message.

   As specified in [RFC6206], a Trickle timer has three 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 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.

11.3.  MPL Control Message Processing

   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.

   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:

   o  The MPL Control Message includes an MPL Seed that does not exist
      in the Seed Set.

   o  The MPL Control Message indicates that the neighbor has an MPL
      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.

   When an MPL Forwarder determines that it has not yet received an MPL
   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.

   An MPL Forwarder determines if an MPL Data Message in the Buffered
   Message Set has not yet been received by a neighboring MPL Forwarder
   if any of the following conditions hold true:

   o  The MPL Control Message does not include an MPL Seed for the MPL
      Data Message.

   o  The MPL Data Message's sequence number is greater than or equal to
      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).

   When an MPL Forwarder determines that it has at least one MPL Data
   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 reactive propagation.

   REACTIVE_IMAX  The maximum each of those entries in the
   Buffered Message Set, the MPL Forwarder MUST reset the Trickle timer interval,
   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.

12.  Acknowledgements

   The authors would like to acknowledge the helpful comments of Robert
   Cragie, Esko Dijk, Ralph Droms, Paul Duffy, Ulrich Herberg, Owen
   Kirby, Joseph Reddy, Don Sturek, Dario Tedeschi, and Peter van der
   Stok, which greatly improved the document.

13.  IANA Considerations

   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].

   This document defines one ICMPv6 Message, a type that must be
   allocated from the "ICMPv6 "type" Numbers" registry of [RFC4443].

   This document registers two well-known multicast addresses from the
   IPv6 multicast address space.

13.1.  MPL Option Type

   IANA is requested to allocate an IPv6 Option Type from the IPv6
   "Destination Options and Hop-by-Hop Options" registry of [RFC2780],
   as defined specified in
      [RFC6206] for reactive propagation.

   REACTIVE_K  The redundancy constant, Table 1 below:

   +--------------+-----+-----+--------------+-------------+-----------+
   |   Mnemonic   | act | chg |     rest     | Description | Reference |
   +--------------+-----+-----+--------------+-------------+-----------+
   | MPL_OPT_TYPE |  01 |  1  |      TBD     |  MPL Option |    This   |
   |              |     |     |  (suggested  |             |  Document |
   |              |     |     | value 01101) |             |           |
   +--------------+-----+-----+--------------+-------------+-----------+

                   Table 1: IPv6 Option Type Allocation

13.2.  MPL ICMPv6 Type

   IANA is requested to allocate an ICMPv6 Type from the "ICMPv6 "type"
   Numbers" registry of [RFC4443], as defined specified in [RFC6206] for
      reactive propagation.

   REACTIVE_TIMER_EXPIRATIONS Table 2 below:

      +---------------+------+---------------------+---------------+
      |    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 number use of Trickle timer expirations
      that occur before terminating 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 Trickle algorithm.  MAY be set
      to 0, which disables reactive propagation.

   WINDOW_HOLD_TIME  The minimum lifetime
   Buffered Message List and (ii) increase the MinSequence value for sliding window state.

7.  Acknowledgements an
   MPL Seed in the Seed Set. The authors would like former side effect allows an attacker
   to acknowledge halt the helpful comments forwarding process of Robert
   Cragie, Esko Dijk, Ralph Droms, Paul Duffy, Owen Kirby, Joseph Reddy,
   Dario Tedeschi, and Peter van der Stok, which greatly improved the
   document.

8.  IANA Considerations any MPL Data Messages being
   disseminated.  The Trickle Multicast option requires latter side effect allows an IPv6 Option Number.

   HEX         act  chg  rest
   ---         ---  ---  -----
     C          01    0  TBD

   The first two bits indicate attacker to prevent
   MPL Forwarders from accepting new MPL Data Messages that an MPL Seed
   generates while the IPv6 node MUST discard the
   packet if it doesn't recognize sequence number is less than MinSequence.

   More generally, the option type, 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 third bit
   indicates that the Option Data MPL Forwarder MUST NOT change en-route.

9.  Security Considerations

   TODO.

10.  References

10.1. 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,
              August 1996.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              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
              (IPv6) Specification", RFC 2460, December 1998.

   [RFC2473]  Conta, A. and S. Deering, "Generic Packet Tunneling in
              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
              Message Protocol (ICMPv6) for the Internet Protocol
              Version 6 (IPv6) Specification", RFC 4443, March 2006.

   [RFC6206]  Levis, P., Clausen, T., Hui, J., Gnawali, O., and J. Ko,
              "The Trickle Algorithm", RFC 6206, March 2011.

   [RFC6550]  Winter, T., Thubert, P., Brandt, A., Hui, J., Kelsey, R.,
              Levis, P., Pister, K., Struik, R., Vasseur, JP., and R.
              Alexander, "RPL: IPv6 Routing Protocol for Low-Power and
              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

   Jonathan W. Hui
   Cisco
   170 West Tasman Drive
   San Jose, California  95134
   USA

   Phone: +408 424 1547
   Email: jonhui@cisco.com

   Richard Kelsey
   Silicon Labs
   25 Thomson Place
   Boston, Massachusetts  02210
   USA

   Phone: +617 951 1225
   Email: richard.kelsey@silabs.com