Network Working Group                                            M. Luby
Request for Comments: 3452                              Digital Fountain
Category: Experimental                                       L. Vicisano
                                                                  Cisco
                                                             J. Gemmell
                                                              Microsoft
                                                               L. Rizzo
                                                             Univ. Pisa
                                                             M. Handley
                                                                   ICIR
                                                           J. Crowcroft
                                                        Cambridge Univ.
                                                          December 2002


            Forward Error Correction (FEC) Building Block

Status of this Memo

  This memo defines an Experimental Protocol for the Internet
  community.  It does not specify an Internet standard of any kind.
  Discussion and suggestions for improvement are requested.
  Distribution of this memo is unlimited.

Copyright Notice

  Copyright (C) The Internet Society (2002).  All Rights Reserved.

Abstract

  This document generally describes how to use Forward Error Correction
  (FEC) codes to efficiently provide and/or augment reliability for
  data transport.  The primary focus of this document is the
  application of FEC codes to one-to-many reliable data transport using
  IP multicast.  This document describes what information is needed to
  identify a specific FEC code, what information needs to be
  communicated out-of-band to use the FEC code, and what information is
  needed in data packets to identify the encoding symbols they carry.
  The procedures for specifying FEC codes and registering them with the
  Internet Assigned Numbers Authority (IANA) are also described.  This
  document should be read in conjunction with and uses the terminology
  of the companion document titled, "The Use of Forward Error
  Correction (FEC) in Reliable Multicast".








Luby, et. al.                 Experimental                      [Page 1]

RFC 3452                   FEC Building Block              December 2002


Table of Contents

  1.  Introduction . . . . . . . . . . . . . . . . . . . . . . .   2
  2.  Rationale. . . . . . . . . . . . . . . . . . . . . . . . .   3
  3.  Functionality. . . . . . . . . . . . . . . . . . . . . . .   3
    3.1 FEC Encoding ID and FEC Instance ID. . . . . . . . . . .   5
    3.2 FEC Payload ID and FEC Object Transmission Information .   6
  4.  Applicability Statement . . . .  . . . . . . . . . . . . .   7
  5.  Packet Header Fields . . . . . . . . . . . . . . . . . . .   8
    5.1 Small Block, Large Block and Expandable FEC Codes. . . .   8
    5.2 Small Block Systematic FEC Codes . . . . . . . . . . . .   9
  6.  Requirements from other building blocks. . . . . . . . . .  11
  7.  Security Considerations. . . . . . . . . . . . . . . . . .  11
  8.  IANA Considerations. . . . . . . . . . . . . . . . . . . .  12
    8.1 Explicit IANA Assignment Guidelines. . . . . . . . . . .  12
  9.  Intellectual Property Disclosure . . . . . . . . . . . . .  13
  10. Acknowledgments. . . . . . . . . . . . . . . . . . . . . .  14
  11. References . . . . . . . . . . . . . . . . . . . . . . . .  14
  12. Authors' Addresses . . . . . . . . . . . . . . . . . . . .  15
  13. Full Copyright Statement . . . . . . . . . . . . . . . . .  16

1.  Introduction

  This document describes how to use Forward Error Correction (FEC)
  codes to provide support for reliable delivery of content using IP
  multicast.  This document should be read in conjunction with and uses
  the terminology of the companion document [4], which describes the
  use of FEC codes within the context of reliable IP multicast
  transport and provides an introduction to some commonly used FEC
  codes.

  This document describes a building block as defined in RFC 3048 [9].
  This document is a product of the IETF RMT WG and follows the general
  guidelines provided in RFC 3269 [3].

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

  Statement of Intent

     This memo contains part of the definitions necessary to fully
     specify a Reliable Multicast Transport protocol in accordance with
     RFC 2357. As per RFC 2357, the use of any reliable multicast
     protocol in the Internet requires an adequate congestion control
     scheme.





Luby, et. al.                 Experimental                      [Page 2]

RFC 3452                   FEC Building Block              December 2002


     While waiting for such a scheme to be available, or for an
     existing scheme to be proven adequate, the Reliable Multicast
     Transport working group (RMT) publishes this Request for Comments
     in the "Experimental" category.

     It is the intent of RMT to re-submit this specification as an IETF
     Proposed Standard as soon as the above condition is met.

2.  Rationale

  FEC codes are a valuable basic component of any transport protocol
  that is to provide reliable delivery of content.  Using FEC codes is
  valuable in the context of IP multicast and reliable delivery because
  FEC encoding symbols can be useful to all receivers for
  reconstructing content even when the receivers have received
  different encoding symbols.  Furthermore, FEC codes can ameliorate or
  even eliminate the need for feedback from receivers to senders to
  request retransmission of lost packets.

  The goal of the FEC building block is to describe functionality
  directly related to FEC codes that is common to all reliable content
  delivery IP multicast protocols, and to leave out any additional
  functionality that is specific to particular protocols.  The primary
  functionality described in this document that is common to all such
  protocols that use FEC codes are FEC encoding symbols for an object
  that is included in packets that flow from a sender to receivers.
  This document for example does not describe how receivers may request
  transmission of particular encoding symbols for an object.  This is
  because although there are protocols where requests for transmission
  are of use, there are also protocols that do not require such
  requests.

  The companion document [4] should be consulted for a full explanation
  of the benefits of using FEC codes for reliable content delivery
  using IP multicast.  FEC codes are also useful in the context of
  unicast, and thus the scope and applicability of this document is not
  limited to IP multicast.

3.  Functionality

  This section describes FEC information that is either to be sent
  out-of-band or in packets.  The FEC information is associated with
  transmission of data about a particular object.  There are three
  classes of packets that may contain FEC information: data packets,
  session-control packets and feedback packets.  They generally contain
  different kinds of FEC information.  Note that some protocols may not
  use session-control or feedback packets.




Luby, et. al.                 Experimental                      [Page 3]

RFC 3452                   FEC Building Block              December 2002


  Data packets may sometimes serve as session-control packets as well;
  both data and session-control packets generally travel downstream
  from the sender towards receivers and are sent to a multicast channel
  or to a specific receiver using unicast.

  As a general rule, feedback packets travel upstream from receivers to
  the sender.  Sometimes, however, they might be sent to a multicast
  channel or to another receiver or to some intermediate node or
  neighboring router that provides recovery services.

  This document specifies the FEC information that must be carried in
  data packets and the other FEC information that must be communicated
  either out-of-band or in data packets.  This document does not
  specify out-of-band methods nor does it specify the way out-of-band
  FEC information is associated with FEC information carried in data
  packets.  These methods must be specified in a complete protocol
  instantiation that uses the FEC building block.  FEC information is
  classified as follows:

  1) FEC Encoding ID

     Identifies the FEC encoder being used and allows receivers to
     select the appropriate FEC decoder.  The value of the FEC Encoding
     ID MUST be the same for all transmission of data related to a
     particular object, but MAY vary across different transmissions of
     data about different objects, even if transmitted to the same set
     of multicast channels and/or using a single upper-layer session.
     The FEC Encoding ID is subject to IANA registration.

  2) FEC Instance ID

     Provides a more specific identification of the FEC encoder being
     used for an Under-Specified FEC scheme.  This value is not used
     for Fully-Specified FEC schemes.  (See Section 3.1 for the
     definition of Under-Specified and Fully-Specified FEC schemes.)
     The FEC Instance ID is scoped by the FEC Encoding ID, and is
     subject to IANA registration.

  3) FEC Payload ID

     Identifies the encoding symbol(s) in the payload of the packet.
     The types and lengths of the fields in the FEC Payload ID, i.e.,
     the format of the FEC Payload ID, are determined by the FEC
     Encoding ID.  The full specification of each field MUST be
     uniquely determined by the FEC Encoding ID for Fully-Specified FEC
     schemes, and MUST be uniquely determined by the combination of the
     FEC Encoding ID and the FEC Instance ID for Under-Specified FEC
     schemes.  As an example, for the Under-Specified FEC scheme with



Luby, et. al.                 Experimental                      [Page 4]

RFC 3452                   FEC Building Block              December 2002


     FEC Encoding ID 129 defined in Section 5.1, the fields in the FEC
     Payload ID are a 32-bit Source Block Number followed by a 32-bit
     Encoding Symbol ID, where the full specification of both of these
     fields depends on the FEC Instance ID.

  4) FEC Object Transmission Information

     This is information regarding the encoding of a specific object
     needed by the FEC decoder.  As an example, for the Under-Specified
     FEC scheme with FEC Encoding ID 129 defined in Section 5.1, this
     information might include the lengths of the different source
     blocks that make up the object and the overall object length.
     This might also include specific parameters of the FEC encoder.

  The FEC Encoding ID, FEC Instance ID (for Under-Specified FEC
  schemes) and the FEC Object Transmission Information can be sent to a
  receiver within the data packet headers, within session control
  packets, or by some other means.  In any case, the means for
  communicating this to a receiver is outside the scope of this
  document.  The FEC Payload ID MUST be included in the data packet
  header fields, as it provides a description of the encoding symbols
  contained in the packet.

3.1.  FEC Encoding ID and FEC Instance ID

  The FEC Encoding ID is a numeric index that identifies a specific FEC
  scheme OR a class of encoding schemes that share the same FEC Payload
  ID format.

  An FEC scheme is a Fully-Specified FEC scheme if the encoding scheme
  is formally and fully specified, in a way that independent
  implementors can implement both encoder and decoder from a
  specification that is an IETF RFC.  The FEC Encoding ID uniquely
  identifies a Fully-Specified FEC scheme.  Companion documents of this
  specification may specify Fully-Specified FEC schemes and associate
  them with FEC Encoding ID values.

  These documents MUST also specify a format for the FEC Payload ID and
  specify the information in the FEC Object Transmission Information.

  It is possible that a FEC scheme may not be a Fully-Specified FEC
  scheme, because either a specification is simply not available or a
  party exists that owns the encoding scheme and is not willing to
  disclose the algorithm or specification.  We refer to such an FEC
  encoding schemes as an Under-Specified FEC scheme.  The following
  holds for an Under-Specified FEC scheme:





Luby, et. al.                 Experimental                      [Page 5]

RFC 3452                   FEC Building Block              December 2002


  o The fields and their formats of the FEC Payload ID and the specific
    information in the FEC Object Transmission Information MUST be
    defined for the Under-Specified FEC scheme.

  o A value for the FEC Encoding ID MUST be reserved and associated
    with the fields and their formats of the FEC Payload ID and the
    specific information in the FEC Object Transmission Information.
    An already reserved FEC Encoding ID value MUST be reused if the
    associated FEC Payload ID has the same fields and formats and the
    FEC Object Transmission Information has same information as the
    ones needed for the new Under-Specified FEC scheme.

  o A value for the FEC Instance ID MUST be reserved.

  An Under-Specified FEC scheme is fully identified by the tuple (FEC
  Encoding ID, FEC Instance ID).  The tuple MUST identify a single
  scheme that has at least one implementation.  The party that owns
  this tuple MUST be able to provide information on how to obtain the
  Under-Specified FEC scheme identified by the tuple, e.g., a pointer
  to a publicly available reference-implementation or the name and
  contacts of a company that sells it, either separately or embedded in
  another product.

  Different Under-Specified FEC schemes that share the same FEC
  Encoding ID -- but have different FEC Instance IDs -- also share the
  same fields and corresponding formats of the FEC Payload ID and
  specify the same information in the FEC Object Transmission
  Information.

  This specification reserves the range 0-127 for the values of FEC
  Encoding IDs for Fully-Specified FEC schemes and the range 128-255
  for the values of Under-Specified FEC schemes.

3.2.  FEC Payload ID and FEC Object Transmission Information

  A document that specifies an FEC scheme and reserves a value of FEC
  Encoding ID MUST define the fields and their packet formats for the
  FEC Payload ID and specify the information in the FEC Object
  Transmission Information according to the needs of the encoding
  scheme.  This applies to documents that reserve values of FEC
  Encoding IDs for both Fully-Specified and Under-Specified FEC
  schemes.

  The specification of the fields and their packet formats for the FEC
  Payload ID MUST specify the meaning of the fields and their format
  down to the level of specific bits.  The total length of all the





Luby, et. al.                 Experimental                      [Page 6]

RFC 3452                   FEC Building Block              December 2002


  fields in the FEC Payload ID MUST have a length that is a multiple of
  a 4-byte word.  This requirement facilitates the alignment of packet
  fields in protocol instantiations.

4.  Applicability Statement

  The FEC building block applies to creating and sending encoding
  symbols for objects that are to be reliably transported using IP
  multicast or unicast.  The FEC building block does not provide higher
  level session support.  Thus, for example, many objects may be
  transmitted within the same session, in which case a higher level
  building block may carry a unique Transport Object ID (TOI) for each
  object in the session to allow the receiver to demultiplex packets
  within the session based on the TOI within each packet.  As another
  example, a receiver may subscribe to more than one session at a time.

  In this case a higher level building block may carry a unique
  Transport Session ID (TSI) for each session to allow the receiver to
  demultiplex packets based on the TSI within each packet.

  Other building blocks may supply direct support for carrying out-of-
  band information directly relevant to the FEC building block to
  receivers.  For example, the length of the object is part of the FEC
  Object Transmission Information that may in some cases be
  communicated out-of-band to receivers, and one mechanism for
  providing this to receivers is within the context of another building
  block that provides this information.

  Some protocols may use FEC codes as a mechanism for repairing the
  loss of packets.  Within the context of FEC repair schemes, feedback
  packets are (optionally) used to request FEC retransmission.  The
  FEC-related information present in feedback packets usually contains
  an FEC Block ID that defines the block that is being repaired, and
  the number of Repair Symbols requested.  Although this is the most
  common case, variants are possible in which the receivers provide
  more specific information about the Repair Symbols requested (e.g.,
  an index range or a list of symbols accepted).  It is also possible
  to include multiple requests in a single feedback packet.  This
  document does not provide any detail about feedback schemes used in
  combination with FEC nor the format of FEC information in feedback
  packets.  If feedback packets are used in a complete protocol
  instantiation, these details must be provided in the protocol
  instantiation specification.

  The FEC building block does not provide any support for congestion
  control.  Any complete protocol MUST provide congestion control that
  conforms to RFC 2357 [5], and thus this MUST be provided by another
  building block when the FEC building block is used in a protocol.



Luby, et. al.                 Experimental                      [Page 7]

RFC 3452                   FEC Building Block              December 2002


  A more complete description of the applicability of FEC codes can be
  found in the companion document [4].

5.  Packet Header Fields

  This section specifies the FEC Encoding ID, the associated FEC
  Payload ID format, and the specific information in the FEC Object
  Transmission Information for a number of known Under-Specified FEC
  schemes.  Under-Specified FEC schemes that use the same FEC Payload
  ID fields, formats, and specific information in the FEC Object
  Transmission Information (as for one of the FEC Encoding IDs
  specified in this section) MUST use the corresponding FEC Encoding
  ID.  Other FEC Encoding IDs may be specified for other Under-
  Specified FEC schemes in companion documents.

5.1.  Small Block, Large Block and Expandable FEC Codes

  This subsection reserves the FEC Encoding ID value 128 for the
  Under-Specified FEC schemes described in [4] that are called Small
  Block FEC codes, Large Block FEC codes and Expandable FEC codes.

  The FEC Payload ID is composed of a Source Block Number and an
  Encoding Symbol ID structured as follows:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Source Block Number                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Encoding Symbol ID                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  The Source Block Number identifies from which source block of the
  object the encoding symbol(s) in the payload are generated.  These
  blocks are numbered consecutively from 0 to N-1, where N is the
  number of source blocks in the object.

  The Encoding Symbol ID identifies which specific encoding symbol(s)
  generated from the source block are carried in the packet payload.
  The exact details of the correspondence between Encoding Symbol IDs
  and the encoding symbol(s) in the packet payload are dependent on the
  particular encoding algorithm used as identified by the FEC Encoding
  ID and by the FEC Instance ID, and these details may be proprietary.

  The FEC Object Transmission Information has the following specific
  information:

  o The FEC Encoding ID 128.



Luby, et. al.                 Experimental                      [Page 8]

RFC 3452                   FEC Building Block              December 2002


  o The FEC Instance ID associated with the FEC Encoding ID 128 to be
    used.

  o The total length of the object in bytes.

  o The number of source blocks that the object is partitioned into,
    and the length of each source block in bytes.

  To understand how this out-of-band information is communicated, one
  must look outside the scope of this document.  One example may be
  that the source block lengths may be derived by a fixed algorithm
  from the object length.  Another example may be that all source
  blocks are the same length and this is what is passed out-of-band to
  the receiver.  A third example could be that the full sized source
  block length is provided and this is the length used for all but the
  last source block, which is calculated based on the full source block
  length and the object length.

5.2.  Small Block Systematic FEC Codes

  This subsection reserves the FEC Encoding ID value 129 for the
  Under-Specified FEC schemes described in [4] that are called Small
  Block Systematic FEC codes.  For Small Block Systematic FEC codes,
  each source block is of length at most 65536 source symbols.

  Although these codes can generally be accommodated by the FEC
  Encoding ID described in Section 5.1, a specific FEC Encoding ID is
  defined for Small Block Systematic FEC codes to allow more
  flexibility and to retain header compactness.  The small source block
  length and small expansion factor that often characterize systematic
  codes may require the data source to frequently change the source
  block length.  To allow the dynamic variation of the source block
  length and to communicate it to the receivers with low overhead, the
  block length is included in the FEC Payload ID.

  The FEC Payload ID is composed of the Source Block Number, Source
  Block Length and the Encoding Symbol ID:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Source Block Number                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Source Block Length      |       Encoding Symbol ID      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+






Luby, et. al.                 Experimental                      [Page 9]

RFC 3452                   FEC Building Block              December 2002


  The Source Block Number identifies from which source block of the
  object the encoding symbol(s) in the payload are generated.  These
  blocks are numbered consecutively from 0 to N-1, where N is the
  number of source blocks in the object.

  The Source Block Length is the length in units of source symbols of
  the source block identified by the Source Block Number.

  The Encoding Symbol ID identifies which specific encoding symbol(s)
  generated from the source block are carried in the packet payload.
  Each encoding symbol is either an original source symbol or a
  redundant symbol generated by the encoder.  The exact details of the
  correspondence between Encoding Symbol IDs and the encoding symbol(s)
  in the packet payload are dependent on the particular encoding
  algorithm used as identified by the FEC Encoding ID and by the FEC
  Instance ID, and these details may be proprietary.

  The FEC Object Transmission Information has the following specific
  information:

  o The FEC Encoding ID 129.

  o The FEC Instance ID associated with the FEC Encoding ID 129 to be
    used.

  o The total length of the object in bytes.

  o The maximum number of encoding symbols that can be generated for
    any source block.  This field is provided for example to allow
    receivers to preallocate buffer space that is suitable for decoding
    to recover any source block.

  o For each source block, the length in bytes of encoding symbols for
    the source block.

  How this out-of-band information is communicated is outside the scope
  of this document.  As an example the length in bytes of encoding
  symbols for each source block may be the same for all source blocks.
  As another example, the encoding symbol length may be the same for
  all source blocks of a given object and this length is communicated
  for each object.  As a third example, it may be that there is a
  threshold value I, and for all source blocks consisting of less than
  I source symbols, the encoding symbol length is one fixed number of
  bytes, but for all source blocks consisting of I or more source
  symbols, the encoding symbol length is a different fixed number of
  bytes.





Luby, et. al.                 Experimental                     [Page 10]

RFC 3452                   FEC Building Block              December 2002


  Note that each encoding symbol, i.e., each source symbol and
  redundant symbol, must be the same length for a given source block,
  and this implies that each source block length is a multiple of its
  encoding symbol length.  If the original source block length is not a
  multiple of the encoding symbol length, it is up to the sending
  application to appropriately pad the original source block to form
  the source block to be encoded, and to communicate this padding to
  the receiving application.  The form of this padding, if used, and
  how it is communicated to the receiving application, is outside the
  scope of this document, and must be handled at the application level.

6.  Requirements from other building blocks

  The FEC building block does not provide any support for congestion
  control.  Any complete protocol MUST provide congestion control that
  conforms to RFC 2357 [5], and thus this MUST be provided by another
  building block when the FEC building block is used in a protocol.

  There are no other specific requirements from other building blocks
  for the use of this FEC building block.  However, any protocol that
  uses the FEC building block will inevitably use other building blocks
  for example to provide support for sending higher level session
  information within data packets containing FEC encoding symbols.

7.  Security Considerations

  Data delivery can be subject to denial-of-service attacks by
  attackers which send corrupted packets that are accepted as
  legitimate by receivers.  This is particularly a concern for
  multicast delivery because a corrupted packet may be injected into
  the session close to the root of the multicast tree, in which case
  the corrupted packet will arrive to many receivers.  This is
  particularly a concern for the FEC building block because the use of
  even one corrupted packet containing encoding data may result in the
  decoding of an object that is completely corrupted and unusable.  It
  is thus RECOMMENDED that the decoded objects be checked for integrity
  before delivering objects to an application.  For example, an MD5
  hash [8] of an object may be appended before transmission, and the
  MD5 hash is computed and checked after the object is decoded but
  before it is delivered to an application.  Moreover, in order to
  obtain strong cryptographic integrity protection a digital signature
  verifiable by the receiver SHOULD be computed on top of such a hash
  value.  It is also RECOMMENDED that a packet authentication protocol
  such as TESLA [7] be used to detect and discard corrupted packets
  upon arrival.  Furthermore, it is RECOMMENDED that Reverse Path
  Forwarding checks be enabled in all network routers and switches





Luby, et. al.                 Experimental                     [Page 11]

RFC 3452                   FEC Building Block              December 2002


  along the path from the sender to receivers to limit the possibility
  of a bad agent successfully injecting a corrupted packet into the
  multicast tree data path.

  Another security concern is that some FEC information may be obtained
  by receivers out-of-band in a session description, and if the session
  description is forged or corrupted then the receivers will not use
  the correct protocol for decoding content from received packets.  To
  avoid these problems, it is RECOMMENDED that measures be taken to
  prevent receivers from accepting incorrect session descriptions,
  e.g., by using source authentication to ensure that receivers only
  accept legitimate session descriptions from authorized senders.

8.  IANA Considerations

  Values of FEC Encoding IDs and FEC Instance IDs are subject to IANA
  registration.  FEC Encoding IDs and FEC Instance IDs are
  hierarchical:  FEC Encoding IDs scope ranges of FEC Instance IDs.
  Only FEC Encoding IDs that correspond to Under-Specified FEC schemes
  scope a corresponding set of FEC Instance IDs.

  The FEC Encoding ID is a numeric non-negative index.  In this
  document, the range of values for FEC Encoding IDs is 0 to 255.
  Values from 0 to 127 are reserved for Fully-Specified FEC schemes and
  Values from 128 to 255 are reserved for Under-Specified FEC schemes,
  as described in more detail in Section 3.1.  This specification
  already assigns the values 128 and 129, as described in Section 5.

  Each FEC Encoding ID assigned to an Under-Specified FEC scheme scopes
  an independent range of FEC Instance IDs (i.e., the same value of FEC
  Instance ID can be reused for different FEC Encoding IDs).  An FEC
  Instance ID is a numeric non-negative index.

8.1.  Explicit IANA Assignment Guidelines

  This document defines a name-space for FEC Encoding IDs named:

                          ietf:rmt:fec:encoding

  IANA has established and manages the new registry for the
  "ietf:rmt:fec:encoding" name-space.  The values that can be assigned
  within the "ietf:rmt:fec:encoding" name-space are numeric indexes in
  the range [0, 255], boundaries included.  Assignment requests are
  granted on a "Specification Required" basis as defined in RFC 2434
  [6]: An IETF RFC MUST exist and specify the FEC Payload ID fields and
  formats as well as the FEC Object Transmission Information for the
  value of "ietf:rmt:fec:encoding" (FEC Encoding ID) being assigned by
  IANA (see Section 3.1 for more details).  Note that the values 128



Luby, et. al.                 Experimental                     [Page 12]

RFC 3452                   FEC Building Block              December 2002


  and 129 of "ietf:rmt:fec:encoding" are already assigned by this
  document as described in Section 5.

  This document also defines a name-space for FEC Instance IDs named:

                     ietf:rmt:fec:encoding:instance

  The "ietf:rmt:fec:encoding:instance" name-space is a sub-name-space
  associated with the "ietf:rmt:fec:encoding" name-space.  Each value
  of "ietf:rmt:fec:encoding" assigned in the range [128, 255] has a
  separate "ietf:rmt:fec:encoding:instance" sub-name-space that it
  scopes.  Values of "ietf:rmt:fec:encoding" in the range [0, 127] do
  not scope a "ietf:rmt:fec:encoding:instance" sub-name-space.

  The values that can be assigned within each
  "ietf:rmt:fec:encoding:instance" sub-name-space are non-negative
  numeric indices. Assignment requests are granted on a "First Come
  First Served" basis as defined in RFC 2434 [6].  The same value of
  "ietf:rmt:fec:encoding:instance" can be assigned within multiple
  distinct sub-name-spaces, i.e., the same value of
  "ietf:rmt:fec:encoding:instance" can be used for multiple values of
  "ietf:rmt:fec:encoding".

  Requestors of "ietf:rmt:fec:encoding:instance" assignments MUST
  provide the following information:

  o The value of "ietf:rmt:fec:encoding" that scopes the
    "ietf:rmt:fec:encoding:instance" sub-name-space.  This must be in
    the range [128, 255].

  o Point of contact information

  o A pointer to publicly accessible documentation describing the
    Under-Specified FEC scheme, associated with the value of
    "ietf:rmt:fec:encoding:instance" assigned, and a way to obtain it
    (e.g., a pointer to a publicly available reference-implementation
    or the name and contacts of a company that sells it, either
    separately or embedded in a product).

  It is the responsibility of the requestor to keep all the above
  information up to date.

9.  Intellectual Property Disclosure

  The IETF has been notified of intellectual property rights claimed in
  regard to some or all of the specification contained in this
  document.  For more information consult the online list of claimed
  rights.



Luby, et. al.                 Experimental                     [Page 13]

RFC 3452                   FEC Building Block              December 2002


10.  Acknowledgments

  Brian Adamson contributed to this document by shaping Section 5.2 and
  providing general feedback.  We also wish to thank Vincent Roca,
  Justin Chapweske and Roger Kermode for their extensive comments.

11.  References

  [1] Bradner, S., "The Internet Standards Process -- Revision 3", BCP
      9, RFC 2026, October 1996.

  [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement
      Levels", BCP 14, RFC 2119, March 1997.

  [3] Kermode, R. and L. Vicisano, "Author Guidelines for Reliable
      Multicast Transport (RMT) Building Blocks and Protocol
      Instantiation documents", RFC 3269, April 2002.

  [4] Luby, M., Vicisano, L., Gemmell, J., Rizzo, L., Handley, M. and
      J. Crowcroft, "The Use of Forward Error Correction (FEC) in
      Reliable Multicast", RFC 3453, December 2002.

  [5] Mankin, A., Romanow, A., Bradner, S. and V. Paxson, "IETF
      Criteria for Evaluating Reliable Multicast Transport and
      Application Protocols", RFC 2357, June 1998.

  [6] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA
      Considerations Section in RFCs", BCP 26, RFC 2434, October 1998.

  [7] Perrig, A., Canetti, R., Song, D. and J. Tygar, "Efficient and
      Secure Source Authentication for Multicast", Network and
      Distributed System Security Symposium, NDSS 2001, pp. 35-46,
      February 2001.

  [8] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April
      1992.

  [9] Whetten, B., Vicisano, L., Kermode, R., Handley, M., Floyd, S.
      and M. Luby, "Reliable Multicast Transport Building Blocks for
      One-to-Many Bulk-Data Transfer", RFC 3048, January 2001.











Luby, et. al.                 Experimental                     [Page 14]

RFC 3452                   FEC Building Block              December 2002


12.  Authors' Addresses

  Michael Luby
  Digital Fountain, Inc.
  39141 Civic Center Drive
  Suite 300
  Fremont, CA  94538

  EMail: [email protected]

  Lorenzo Vicisano
  Cisco Systems, Inc.
  170 West Tasman Dr.,
  San Jose, CA, USA, 95134

  EMail: [email protected]

  Jim Gemmell
  Microsoft Research
  455 Market St. #1690
  San Francisco, CA, 94105

  EMail: [email protected]

  Luigi Rizzo
  Dip. di Ing. dell'Informazione
  Universita` di Pisa
  via Diotisalvi 2, 56126 Pisa, Italy

  EMail: [email protected]

  Mark Handley
  ICSI Center for Internet Research
  1947 Center St.
  Berkeley CA, USA, 94704

  EMail: [email protected]

  Jon Crowcroft
  Marconi Professor of Communications Systems
  University of Cambridge
  Computer Laboratory
  William Gates Building
  J J Thomson Avenue
  Cambridge
  CB3 0FD

  EMail: [email protected]



Luby, et. al.                 Experimental                     [Page 15]

RFC 3452                   FEC Building Block              December 2002


13.  Full Copyright Statement

  Copyright (C) The Internet Society (2002).  All Rights Reserved.

  This document and translations of it may be copied and furnished to
  others, and derivative works that comment on or otherwise explain it
  or assist in its implementation may be prepared, copied, published
  and distributed, in whole or in part, without restriction of any
  kind, provided that the above copyright notice and this paragraph are
  included on all such copies and derivative works.  However, this
  document itself may not be modified in any way, such as by removing
  the copyright notice or references to the Internet Society or other
  Internet organizations, except as needed for the purpose of
  developing Internet standards in which case the procedures for
  copyrights defined in the Internet Standards process must be
  followed, or as required to translate it into languages other than
  English.

  The limited permissions granted above are perpetual and will not be
  revoked by the Internet Society or its successors or assigns.

  This document and the information contained herein is provided on an
  "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
  TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
  BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
  HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement

  Funding for the RFC Editor function is currently provided by the
  Internet Society.



















Luby, et. al.                 Experimental                     [Page 16]