Internet Engineering Task Force                                   RMT WG
INTERNET-DRAFT                                   M.Luby/Digital Fountain
draft-ietf-rmt-bb-fec-02.txt                            L.Vicisano/Cisco
                                                     J.Gemmell/Microsoft
                                            L.Rizzo/ACIRI and Univ. Pisa
                                                         M.Handley/ACIRI
                                                        J. Crowcroft/UCL
                                                        17 November 2000
                                                       Expires: May 2001


                 RMT BB Forward Error Correction Codes

This document is an Internet-Draft and is in full conformance with all
provisions of Section 10 of RFC2026.

Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups.  Note that other groups
may also distribute working documents as Internet-Drafts.

Internet-Drafts are 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 a "work in progress".

The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt

To view the list Internet-Draft Shadow Directories, see
http://www.ietf.org/shadow.html.

This document is a product of the IETF RMT WG.  Comments should be
addressed to the authors, or the WG's mailing list at rmt@isi.edu.


                                Abstract


     This memo describes the abstract packet formats and IANA
     registration procedures for use of Forward Error Correction
     (FEC) codes within the context of reliable IP multicast
     transport.  This memo should be read in conjunction with and
     uses the terminology of the companion memo [1], which
     describes the use of Forward Error Correction (FEC) codes
     within the context of reliable IP multicast transport and



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft                   [Page 1]


^L
INTERNET-DRAFT              Expires: May 2001              November 2000


     provides an introduction to some commonly used FEC codes.


1.  FEC Abstract Packet Fields and Out-of-Band Information

This section specifies the information that protocol packets must carry
to implement the various forms of FEC-based reliability.  A session is
defined to be all the information associated with a transmission of data
about a particular object by a single sender.  There are three classes
of packets that may contain FEC information within a session: data
packets, session-control packets and feedback packets.  They generally
contain different kinds of FEC information.  Note that some protocols do
not use feedback packets.

Data packets MAY sometime serve as session-control packets as well; both
data and session-control packets generally travel downstream (from the
sender towards receivers) and are addressed to a multicast IP address
(sometime the might be addressed to the unicast address of a specific
receiver). In the following, for simplicity we will refer to both data
and session control packets as downstream-traveling packets, or simply
downstream packets.

As a general rule, feedback packets travel upstream (from receivers to
the sender) and are addressed to the unicast address of the sender.
Sometimes, however, they might be addressed to a multicast IP address or
to the unicast address of a receiver or also the the unicast address of
some different node (intermediate node that provides recovery services
or neighboring router).

The FEC-related information that can be present in downstream packets
can be classified as follows:


 1) FEC Encoding Identifier

      Identifies the FEC encoding being used and has the purpose of
      allowing receivers to select the appropriate FEC decoder. As a
      general rule, the "FEC Encoding Identifier" MUST be the same for a
      given session, i.e., for all transmission of data related to a
      particular object, but MAY vary across different transmissions of
      data about different objects in different sessions, even if
      transmitted using the same set of multicast groups.

 2) FEC payload ID

      Identifies the symbol(s) in the payload of the packet. The content
      of this piece of information depends on the encoder being used
      (e.g. in Block FEC codes this may be the combination of block



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft       Section 1.  [Page 2]


^L
INTERNET-DRAFT              Expires: May 2001              November 2000


      index and symbol index; in expandable FEC codes this may be just a
      flat symbol identifier).

 3) FEC Object Transmission Information

      This is information regarding the encoding of a specific object
      needed by the FEC decoder (e.g. for Block FEC codes this may be
      the combination of block length and object length). This might
      also include general parameters of the FEC encoder.


     All the classes of information above, except 2), can either be
transmitted within the transport session (using protocol packet-header
fields) or out of band. The information described in 2) MUST be
transmitted in data-packet header fields, as it provides a description
of the data contained in the packet. In the following we specify the
content of 1), 2) and 3) independent of whether these pieces of
information are transmitted in protocol packets or out of band. This
document does not specify out of band methods to transport the
information.

Within the context of FEC repair schemes, feedback packets are
(optionally) used to request FEC retransmission.  The FEC-related
information present in feedback packets can be classified as follows:

 1) FEC Block Identifier

      This is the identifier of the FEC block for which retransmission
      is requested. This information does not apply to some type of
      decoders.

 2) Number of Repair Symbols

      This is the number of repair symbols requested, needed to recover
      the object.  This is used when there are still an ample supply of
      previously unsent symbols that can be sent, and this specifies the
      number of such additional symbols that should be sent.  This type
      of request is most applicable to both small and large block FEC
      codes and to expandable FEC codes.

 2) Range of Repair Symbols

      This is a range of the symbol indices that are being requested as
      repair symbols.  This is used when there is a specified set of
      repair symbols that will be most useful to reconstruct input
      symbols, and in general the requested symbols will be symbols not
      yet received by the requestor.  This type of request is most
      applicable to both small and large block FEC codes, and less



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft       Section 1.  [Page 3]


^L
INTERNET-DRAFT              Expires: May 2001              November 2000


      applicable to expandable FEC codes.

 2) List of Repair Symbols

      This is a list of the symbol indices that are being requested as
      repair symbols.  This is used when there is a specified set of
      repair symbols that will be most useful to reconstruct input
      symbols, and in general the requested symbols will be symbols not
      yet received by the requestor.  This type of request is most
      applicable to both small and large block FEC codes, and less
      applicable to expandable FEC codes.


1.1.  FEC Encoding Identifier


This is a numeric index that identifies a specific FEC encoding scheme
OR a class of encoding schemes that share the same format of "FEC
Payload ID" and "FEC Object Transmission Information".

The FEC Encoding Identifier identifies a specific FEC encoding scheme
when the encoding scheme is formally and fully specified, in a way that
independent implementors can implement both encoder and decoder from the
specification. Companion documents of this specification may specify
such FEC encoding schemes and associate them with "FEC Encoding
Identifier" values. These documents MUST also specify a correspondent
format for the "FEC Payload ID" and "FEC Object Transmission
Information".  Currently FEC Encoding Identifiers in the range 0-127 are
reserved for this class of encoding schemes.

It is possible that a FEC encoding scheme cannot be completely specified
or that such a specification is simply not available or also that a
party exists that owns the encoding scheme and it is not willing to
disclose its algorithm. We refer to these encoding schemes as "Under-
Specified" schemes. Under-specified schemes can still be identified as
follows:

  o A format of the fields "FEC Payload ID" and "FEC Object Transmission
    Information" MUST be defined for the encoding scheme.

  o A value of "FEC Encoding Identifier" MUST be reserved and associated
    to the format definitions above. An already reserved "FEC Encoding
    Identifier"  MUST be reused if it is associated to the same format
    of "FEC Payload ID" and "FEC Object Transmission Information" as the
    ones needed for the new under-specified FEC encoding scheme.

  o A value of "FEC Encoding Name" must be reserved (see below).




Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft     Section 1.1.  [Page 4]


^L
INTERNET-DRAFT              Expires: May 2001              November 2000


An Under-specified FEC scheme is completely identified by the tuple (FEC
Encoding Identifier, FEC Encoding Name). The party that owns this tuple
MUST be able to provide an FEC encoder and decoder that implement the
under-specified FEC encoding scheme identified by the tuple.

"FEC Encoding Names" are numeric identifiers scoped by a FEC Encoding
Identifier.

The FEC Encoding Name MUST be part of the "FEC Object Transmission
Information" and must be communicated to receivers together with the FEC
Encoding Identifier.

An FEC Encoding Identifier MAY also define a format for the (abstract)
feedback packet fields "FEC Block Identifier", "Number of Repair
Symbols", "Range of Repair Symbols" and "List of Repair Symbols".


1.2.  FEC Payload ID and FEC Object Transmission Information


     A document that specifies an encoding scheme and reserves a value
of FEC Encoding Identifier MUST define a packet-field format for FEC
Payload ID and FEC Object Transmission Information according to the need
of the encoding scheme. This also applies to documents that reserves
values of FEC Encoding Identifiers for under-specified encoding schemes.
In this case the FEC Object Transmission Information must also include a
field to contain the "FEC Encoding Name".

A packet field definition of FEC Object Transmission Information MUST be
provided despite the fact that protocol instantiation may decide to
communicate this information out of band.

The packet field format of "FEC Block Identifier" and "Number of Repair
Symbols" SHOULD be specified for each FEC encoding scheme, even the
scheme is mainly intended for feedback-less protocols.  FEC Block
Identifier may not apply to some encoding schemes.

All packet field definition (FEC Payload ID, FEC Object Transmission
Information, FEC Block Identifier and Number of Repair Symbols) MUST be
fully specified at level of bit-fields and they must have a length that
is a multiple of a 4-byte word (this is to facilitate the alignment of
packet fields in protocol instantiations).


2.  Predefined FEC encoders

This section specifies the FEC Encoding Identifier and the relative
packets field for a number of known schemes that follow under the class



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft       Section 2.  [Page 5]


^L
INTERNET-DRAFT              Expires: May 2001              November 2000


of under-specified FEC encoding schemes. Others may be specified in
companion documents.


2.1.  Small Block, Large Block and Expandable FEC Codes

This section reserves a FEC Encoding Identifier for the family of codes
described in Section 2.2, 2.3 and 2.4 and specifies the relative packet
fields.  Under-specified FEC encoding schemes that belong to this class
MUST use this identifier and packet field definitions.

The FEC Encoding Identifier assigned to Small Block, Large Block, and
Expandable FEC Codes is 128.

The FEC Payload ID is composed of an encoding symbol index and an
encoding block number 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     encoding block number                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      encoding symbol ID                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


In addition, a one bit FEC Encoding Flag SHOULD be included, and this
flag indicates whether the encoding symbol(s) in the payload of the
packet are source symbol(s) or redundant symbol(s).  The FEC Object
Transmission Information has the following structure:


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      FEC Encoding Name        |     Object Length (MSB)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Object Length (LSB)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Source Block Length                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Note that this structure limits the range of possible FEC Encoding Names
to 0-:-65536, despite the FEC Object Transmission Information can also
be transmitted out of band.




Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft     Section 2.1.  [Page 6]


^L
INTERNET-DRAFT              Expires: May 2001              November 2000


The Object Length, composed of a Most Significant Bytes portion (MSB)
and a Least Significant Bytes portion (LSB), is expressed in bytes.

There are three different types of feedback packets: number type, range
type, and list type.  The type of feedback packets used by the
application MUST be specified either out of band or within each feedback
packet. Feedback packets MUST contain both an FEC Block Identifier and
one of the following, depending on the type:

 o   number type: The number of repair symbols requested.

 o   range type: The range of symbol indices of the repair symbols
     requested.

 o   list type: The list of symbol indices of the repair symbols
     requested.

The structure of feedback packets is the following:


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      FEC Block Identifier                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Number type:


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Number of Repair Symbols                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
















Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft     Section 2.1.  [Page 7]


^L
INTERNET-DRAFT              Expires: May 2001              November 2000


Range type:


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Start Symbol Index of Repair Symbols             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              End Symbol Index of Repair Symbols               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


List type:


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               N = Number of Symbols in the List               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Repair Symbol Index 0                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Repair Symbol Index 1                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                             ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Repair Symbol Index N-1                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+



3.  IANA Considerations

Values of FEC Encoding Identifiers and FEC Encoding Names are subject to
IANA registration. FEC Encoding Identifiers and FEC Encoding Names are
hierarchical: FEC Encoding Identifiers (at the top level) scope ranges
of FEC Encoding Names. Not all FEC Encoding Identifiers have a
corresponding FEC Encoding Name scope (see below).

A FEC Encoding Identifier is a numeric non-negative index. Value from 0
to 127 are reserved for FEC encoders that are fully specified, as
described in section 3.1. The assignment of a FEC Encoding Identifier in
this range can only be granted if the requestor can provide such a
specification published as an IETF RFC. Value grater than 127 can be
assigned to under-specified encoding schemes.

In any case values of FEC Encoding Identifiers can only be assigned if
the required FEC packet fields corresponding to it (see section 3.1) are



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft       Section 3.  [Page 8]


^L
INTERNET-DRAFT              Expires: May 2001              November 2000


specified in a RFC.

Each FEC Encoding Identifier assigned to an under-specified encoding
scheme scopes a range of FEC Encoding Names. An FEC Encoding Name is a
numeric non-negative index. The document that reserves a FEC Encoding
Identifier MAY also specify a range for the subordinate FEC Encoding
Names.

Under the scope of a FEC Encoding Identifier, FEC Encoding Names are
assigned on a First Come First Served base to requestors that are able
to provide point of contact information and a pointer to publicly
accessible documentation describing the FEC encoder and a ways to obtain
it. The requestor is responsible for keeping this information up to
date.


4.  References


[1] Luby, M., Vicisano, L., Rizzo, L., Handley, M.,  Gemmell, J.,
Crowcroft, J., "The use of Forward Error Correction in Reliable
Multicast", draft-ietf-rmt-info-fec-00 submited to the IETF RMT working
group, November 2000.


5.  Authors' Addresses

   Michael Luby
   luby@digitalfountain.com
   Digital Fountain
   600 Alabama Street
   San Francisco, CA, USA, 94110

   Lorenzo Vicisano
   lorenzo@cisco.com
   cisco Systems, Inc.
   170 West Tasman Dr.,
   San Jose, CA, USA, 95134

   Jim Gemmell
   jgemmell@microsoft.com
   Microsoft Research
   301 Howard St., #830
   San Francisco, CA, USA, 94105

   Luigi Rizzo
   luigi@iet.unipi.it
   ACIRI, 1947 Center St., Berkeley CA 94704



Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft       Section 5.  [Page 9]


^L
INTERNET-DRAFT              Expires: May 2001              November 2000


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

   Mark Handley
   mjh@aciri.org
   ACIRI
   1947 Center St.
   Berkeley CA, USA, 94704

   Jon Crowcroft
   J.Crowcroft@cs.ucl.ac.uk
   Department of Computer Science
   University College London
   Gower Street,
   London WC1E 6BT, UK


































Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft      Section 5.  [Page 10]


^L
INTERNET-DRAFT              Expires: May 2001              November 2000


6.  Full Copyright Statement

Copyright (C) The Internet Society (2000).  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
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."


























Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft      Section 6.  [Page 11]


^L
INTERNET-DRAFT              Expires: May 2001              November 2000





















































Luby/Gemmell/Vicisano/Rizzo/Handley/Crowcroft      Section 6.  [Page 12]