<?xml version='1.0' encoding='utf-8'?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
    please see http://xml.resource.org/authoring/README.html. -->
<rfc
      xmlns:xi="http://www.w3.org/2001/XInclude"
      category="std"
      consensus="true"
      docName="draft-wang-tsvwg-sw-slc-fec-scheme-03"
      indexInclude="true"
      ipr="trust200902"
      obsoletes=""
      updates=""
      submissionType="IETF"
      xml:lang="en"
      tocInclude="true"
      tocDepth="3"
      symRefs="true"
      sortRefs="true"
      scripts="Common,Latin"
      version="3">
  <!-- xml2rfc v2v3 conversion 2.38.1 -->
  <!-- category values: std, bcp, info, exp, and historic
    ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902,
       or pre5378Trust200902
    you can add the attributes updates="NNNN" and obsoletes="NNNN" 
    they will automatically be output with "(if approved)" -->

 <!-- ***** FRONT MATTER ***** -->

 <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
        full title is longer than 39 characters -->

   <title abbrev="SLC FEC Scheme">Sliding Window Selective Linear Code (SLC) Forward Error Correction (FEC) Scheme for FECFRAME</title>
    <!-- add 'role="editor"' below for the editors if appropriate -->

   <!-- Another author who claims to be an editor -->

   <author fullname="Ray Wang" initials="R." surname="Wang">
      <organization showOnFrontPage="true">Agora Lab</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->

          <city/>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone/>
        <email>wangrui@agora.io</email>
        <!-- uri and facsimile elements may also be added -->
     </address>
    </author>
   <author fullname="Liang Si" initials="L." surname="Si">
      <organization showOnFrontPage="true">Agora Lab</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->
         <city/>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone/>
        <email>siliang@agora.io</email>
        <!-- uri and facsimile elements may also be added -->
     </address>
    </author>
   <author fullname="Bifeng He" initials="B." surname="He">
      <organization showOnFrontPage="true">Agora Lab</organization>
      <address>
        <postal>
          <street/>
          <!-- Reorder these if your country does things differently -->
          <city/>
          <region/>
          <code/>
          <country>China</country>
        </postal>
        <phone/>
        <email>hebifeng@agora.io</email>
        <!-- uri and facsimile elements may also be added -->
     </address>
    </author>
    <date year="2022"/>
    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
        in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

   <!-- Meta-data Declarations -->

   <area>General</area>
    <workgroup>TSVWG</workgroup>
    <!-- WG name at the upperleft corner of the doc,
        IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
        which is used by the RFC Editor as a nod to the history of the IETF. -->

   <keyword>FEC</keyword>
   <keyword>FECFRAME</keyword>
   <keyword>Selective Linear Code</keyword>
    <!-- Keywords will be incorporated into HTML output
        files in a meta tag but they have no effect on text or nroff
        output. If you submit your draft to the RFC Editor, the
        keywords will be used for the search engine. -->

   <abstract>
      <t>RFC8680 describes a framework for using Sliding Window Forward Error Correction(FEC) codes to protection against packet loss, the framework significantly improves FEC efficiency and reduces FEC-related added latency compared to block FEC codes defined in RFC 6363. RFC8681 further describes two fully specified FEC schemes for Sliding Window Random Linear Codes(RLC), the schemes rely on an encoding window that slides over a continuous set of source symbols, generating new repair symbols whenever needed. This document describes a fully specified FEC scheme for Sliding Window Selective Linear Code(SLC) over the Galois Field GF (2^^8) , compared to RFC8681, this framework use a discrete encoding window which can protect arbitrary media streams selectively, and has better recovery performance in scenarios such as layered video coding or mixed streams for video streaming applications.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t>The use of Application-Level Forward Erasure Correction (AL-FEC) codes is a widely-used error control method used to improve the reliability of unicast, multicast, and broadcast transmissions.</t>
      <t>The <xref target="RFC5052" format="default"></xref> document describes a general framework to use FEC in Content Delivery Protocols (CDPs), and it is suitable for FEC schemes based on building blocks. Based on this framework, the <xref target="RFC5170" format="default"></xref> describes two fully-specified FEC Schemes, Low-Density Parity Check (LDPC) Staircase and LDPC Triangle, and the <xref target="RFC5510" format="default"></xref> describes one Fully-Specified FEC Scheme for the special case of Reed-Solomon (RS) over GF (2^^8).</t>
      <t>The <xref target="RFC6363" format="default"></xref> document describes a general framework used to protect arbitrary media streams along the lines defined by FECFRAME. The FEC scheme defined by the framework does not limit the type of input data, but only processes the data.</t>
      <t>Similar to <xref target="RFC5052" format="default"></xref>, <xref target="RFC6363" format="default"></xref> only considers block FEC schemes, which requires that the input stream be divided into a series of blocks according to the block partitioning algorithm defined in <xref target="RFC5052" format="default"></xref>. The <xref target="RFC6681" format="default"></xref>, <xref target="RFC6816" format="default"></xref>, and <xref target="RFC6865" format="default"></xref> are FEC schemes based on this framework. The value for the block size affects the packet loss resistance and the encoding and decoding delay of the FEC scheme. At the same code rate, the FEC scheme with larger size blocks have higher robustness (e.g., in case of long packet erasure bursts), but it has higher decoding delay which is unacceptable for real-time video streaming application.</t>
      <t>The framework described in <xref target="RFC8680" format="default"></xref> provides support for FEC codes based on a sliding coding window. The FEC scheme in this framework <xref target="RFC8681" format="default"></xref> is advantageous for real-time flows because of its high robustness and low additional delay.</t>
      <t>In general video coding, all frames in a GOP follow the rule of the frame by frame reference, that is, the reconstruction of the current video frame relies on the preceding frame. In that case, all frames in the encoding window are beneficial to the decoding of the current frame. However, for layered video coding, video frames may not reference the preceding frames, but the upper layer frames. When non-reference frames are encoded, the recovered packets will not help the decoding of the current frame, and even have a negative effect on the FEC error correction ability in extreme cases <xref target="Hel2011" format="default"></xref>, <xref target="Wan2022" format="default"></xref>.
      </t>
      <t>This document introduces one fully specified FEC scheme, it is capable to protect streams selectively by adding a filter into the FEC coding window management. The Sliding Window SLC FEC scheme described in this document belongs to the broad class of Sliding Window AL-FEC Codes (a.k.a., convolutional codes) [RFC8406]. The encoding process is based on an encoding window, and the source symbols are encoded by sliding the encoding window.  However, the encoding window does not slide directly over the set of the source symbols.  Instead, it filters the source symbols according to the rule defined by application (e.g., video frame dependency, or stream type) and then slide over the set of these filtered source symbols <xref target="Wan2022" format="default"></xref>. Repair symbols are generated on-the-fly, by the computation of a linear combination of source symbols present in the current encoding window and passed to the transport layer.</t>
      <t>When the loss of source symbol is detected at the receiver, the SLC decoder will recover the lost source symbol according to the linear combination of the source symbols and each received repair symbol (when the rank of the equations involved is solvable).</t>
      <t>This fully-specified FEC scheme follows the structure required by <xref target="RFC6363" format="default" sectionFormat="comma" section="5.6" derivedLink="https://rfc-editor.org/rfc/rfc6363#section-5.6" derivedContent="RFC6363"/> ("FEC Scheme Requirements"), namely:</t>
      <ul>
          <li>Formats and Codes: This section defines the FEC Framework Configuration Information (FFCI) carrying signaling, including mandatory elements and Scheme-Specific elements. It also defines the Source FEC Payload ID and Repair FEC Payload ID formats, carrying the signaling information associated with each source or repair symbol, including ESI, indexes of source symbols participating in encoding, and coding coefficients.</li>
          <li>Procedures: This section describes procedures specific to this FEC scheme, including encoding window management, coding matrix generation, a linear combination of source symbol computation in Finite Field, and the mapping between ADU, ADUI, and Source Symbols.</li>
          <li>FEC Code Specification: This section provides a high-level description of the Sliding Window SLC encoder and decoder.</li>
      </ul>
    </section>
    <section anchor="Terminology" numbered="true" toc="default" pn="section-2">
      <name slugifiedName="name-Terminology">Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
          "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
          described in <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/>.</t>
    </section>
    <section anchor="DefinitionsAndNotationsAndAbbreviations" numbered="true" toc="default" pn="section-3">
      <name slugifiedName="name-definitions-and-notations-and-abbreviations">Definitions Notations and Abbreviations</name>
      <section anchor="definitions" numbered="true" toc="default" pn="section-3.1">
        <name slugifiedName="name-definitions">Definitions</name>
        <t>This document uses the following terms and definitions. Some of these terms and definitions are FEC scheme-specific and are in line with <xref target="RFC5052" format="default"></xref> <xref target="RFC6363" format="default"></xref>:</t>
        <dl>
            <dt>Source symbol:</dt>
            <dd>unit of data used during the encoding process.</dd>
            <dt>Encoding symbol:</dt>
            <dd>unit of data generated by the encoding process.</dd>
            <dt>Repair symbol:</dt>
            <dd>an encoding symbol that is not a source symbol.</dd>
            <dt>Packet erasure channel:</dt>
            <dd>a communication path where packets are either dropped (e.g., by a congested router, or because the number of transmission errors exceeds the correction capabilities of the physical layer codes) or received.  When a packet is received, it is assumed that this packet is not corrupted.</dd>
            <dt>Application Data Unit (ADU):</dt>
            <dd>unit of source data provided as payload to the transport layer. Depending on the use case, an ADU may use an RTP encapsulation.</dd>
            <dt>ADU Information (ADUI):</dt>
            <dd>unit of data constituted by the ADU and the associated Flow ID, Length and Padding fields.</dd>
            <dt>FEC Framework Configuration Information (FFCI):</dt>
            <dd>information that controls the operation of FECFRAME. Each FEC Framework instance has its own configuration information. And the FFCI enables the synchronization of the FECFRAME sender and receiver instances.</dd>
            <dt>FEC Source Packet:</dt>
            <dd>at a sender (respectively, at a receiver) a payload submitted to (respectively, received from) the transport protocol containing an ADU along with an Explicit Source FEC Payload ID.</dd>
            <dt>FEC Repair Packet:</dt>
            <dd>at a sender (respectively, at a receiver) a payload submitted to (respectively, received from) the transport protocol containing one repair symbol along with a Repair FEC Payload ID and possibly an RTP header.</dd>
        </dl>
      </section>
      <section anchor="notations" numbered="true" toc="default" pn="section-3.2">
        <name slugifiedName="name-notations">Notations</name>
        <t>This document uses the following notations and some of them are FEC scheme-specific:</t>
        <dl>
            <dt>m:</dt>
            <dd>defines the length of the elements in the finite field, in bits. In this document, m is such that m=8.</dd>
            <dt>GF(q):</dt>
            <dd>denotes a finite field (also known as the Galois Field) with q elements. We assume that q = 2^^m in this document.</dd>
            <dt>a^^b:</dt>
            <dd>denotes a raised to the power b.</dd>
            <dt>E:</dt>
            <dd>denotes the size of an encoding symbol length in bytes.</dd>
            <dt>cw_size:</dt>
            <dd>denotes coding window size (in symbols).</dd>
            <dt>cw_size_max:</dt>
            <dd>denotes coding window maximum size (in symbols).</dd>
            <dt>gc:</dt>
            <dd>denotes the count of symbol groups participating in encoding (if there is a gap in the serial number, it is considered a new group) when a repair symbol is generated.</dd>
            <dt>gc_max:</dt>
            <dd>denotes the maximum count of symbol groups involved in encoding when generating maintenance symbols.</dd>
            <dt>cm:</dt>
            <dd>denotes coding matrix.</dd>
            <dt>cm_r:</dt>
            <dd>denotes row in the coding matrix.</dd>
            <dt>cm_c:</dt>
            <dd>denotes col in the coding matrix.</dd>
            <dt>ESI:</dt>
            <dd>denotes the first source symbol of the ADUI corresponding to this FEC Source Packet.</dd>
            <dt>Start_ESI:</dt>
            <dd>denotes the first ADUI's ESI of the first group.</dd>
            <dt>Residual_ESI_:</dt>
            <dd>denotes the residual value of the starting ESI of the current group relative to the previous group.</dd>
            <dt>Group_Size_:</dt>
            <dd>denotes the number of ADUIs contained in each group.</dd>
        </dl>
      </section>
      <section anchor="abbreviations" numbered="true" toc="default" pn="section-3.3">
        <name slugifiedName="name-abbreviations">Abbreviations</name>
        <t>This document uses the following abbreviations, and some of them are FEC scheme-specific:</t>
        <dl>
            <dt>FEC:</dt>
            <dd>stands for Forward Error (or Erasure) Correction codes.</dd>
            <dt>ADU:</dt>
            <dd>stands for Application Data Unit.</dd>
            <dt>ADUI:</dt>
            <dd>stands for Application Data Unit Information.</dd>
            <dt>ESI:</dt>
            <dd>stands for Encoding Symbol ID.</dd>
            <dt>FFCI:</dt>
            <dd>stands for FEC Framework Configuration Information.</dd>
            <dt>FSSI:</dt>
            <dd>stands for FEC Scheme-Specific Information.</dd>
        </dl>
      </section>
    </section>
   <section anchor="FormatsAndCodes" numbered="true" toc="default" pn="section-4">
      <name slugifiedName="name-FormatsAndCodes">Formats and Codes</name>
      <t>This section describes the format of FEC Framework Configuration Information (or FFCI) and FEC Payload IDs, which are carried in "big-endian" or "network order" format.</t>
      <section anchor="FFCI" numbered="true" toc="default" pn="section-4.1">
        <name slugifiedName="name-FFCI">FEC Framework Configuration Information</name>
        <t>The FFCI needs to be shared between FECFRAME sender and receiver instances to ensure the synchronization of information. It includes mandatory elements (e.g., FEC Encoding ID) and scheme-specific elements (e.g., Encoding Symbol size).</t>
        <section anchor="Mandatory" numbered="true" toc="default" pn="section-4.1.1">
          <name slugifiedName="name-Mandatory">Mandatory</name>
          <dl>
              <dt>FEC Encoding ID:</dt>
              <dd>the value assigned to this Fully-Specified FEC scheme <bcp14>MUST</bcp14> be XXX, as assigned by IANA(<xref target="iana" format="default" sectionFormat="of" derivedContent="Section 9"/>).</dd>
          </dl>
        </section>
        <section anchor="FSSI" numbered="true" toc="default" pn="section-4.1.2">
          <name slugifiedName="name-FSSI">FEC Scheme-Specific Information</name>
          <t>The FEC scheme-specific information (FSSI) of this scheme is as follows:</t>
          <dl>
              <dt>Encoding Symbol size (E):</dt>
              <dd>a non-negative integer that indicates the size of each encoding symbol in bytes;</dd>
              <dt>The maximum coding window size (cw_size_max):</dt>
              <dd>a non-negative integer that indicates the maximum size of the coding window allowed (in symbols);</dd>
              <dt>The maximum number of gc (gc_max):</dt>
              <dd>a non-negative integer that indicates the maximum count of groups protected by each repair packet.</dd>
          </dl>
          <t>These elements are required both by the encoder and decoder.</t>
          <t>When SDP is used to communicate the FFCI, this FEC Scheme-Specific Information <bcp14>MUST</bcp14> be carried in the ‘fssi’ parameter in textual representation specified in <xref target="RFC6364" format="default" sectionFormat="of" derivedContent="RFC6364"/>. For instance:</t>
          <sourcecode type="sdp" markers="false">
              fssi=E:1500,cw_size_max:128,gc_max:4
          </sourcecode>
          <t>If another mechanism requires the FSSI to be carried as an opaque octet string (for instance after a Base64 encoding), the encoding format consists of the following four octets:</t>
          <dl>
              <dt>Encoding symbol length (E):</dt>
              <dd>16-bit field;</dd>
              <dt>Maximum coding window size (cw_size_max):</dt>
              <dd>8-bit field;</dd>
              <dt>Maximum size of gc (gc_max):</dt>
              <dd>8-bit field.</dd>
          </dl>
          <t>The encoding format consists of the following 4 octets of <xref target="fig_FSSI_Encoding_Format" format="default" sectionFormat="of" derivedContent="Figure 1"/>:</t>
          <figure anchor="fig_FSSI_Encoding_Format" align="left" suppress-title="false" pn="figure-1">
              <name slugifiedName="name-fssi-encoding-format">FSSI Encoding Format</name>
              <artwork name="" type="" align="left" alt="">
 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 Symbol Length (E)  |  cw_size_max  |     gc_max    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
              </artwork>
          </figure>
        </section>
      </section>
      <section anchor="FEC_Payload_IDs" numbered="true" toc="default" pn="section-4.2">
        <name slugifiedName="name-fec-payload-ID">FEC Payload IDs</name>
        <section anchor="Explicit_Source_FEC_Payload_ID" numbered="true" toc="default" pn="section-4.2.1">
          <name slugifiedName="name-explicit-source-FEC-payload-ID">Explicit Source FEC Payload ID</name>
          <t>A FEC Source Packet <bcp14>MUST</bcp14> contain an Explicit Source FEC Payload ID that is appended to the end of the packet as illustrated in <xref target="fig_FEC_Source_Packet" format="default" sectionFormat="of" derivedContent="Figure 2"/>.</t>
          <figure anchor="fig_FEC_Source_Packet" align="left" suppress-title="false" pn="figure-2">
              <name slugifiedName="name-fec-source-packet-format">Structure of an FEC Source Packet with the Explicit Source FEC Payload ID</name>
              <artwork name="" type="" align="left" alt="">
+---------------------------------+
|            IP Header            |
+---------------------------------+
|         Transport Header        |
+---------------------------------+
|               ADUI              |
+---------------------------------+
| Explicit Source FEC Payload ID  |
+---------------------------------+
              </artwork>
          </figure>
          <t>More precisely, the Explicit Source FEC Payload ID is composed of the following field:</t>
          <dl>
              <dt>Encoding Symbol ID (ESI) (32-bit field):</dt>
              <dd>this unsigned integer identifies the first source symbol of the ADUI corresponding to this FEC Source Packet. The ESI is incremented for each new source symbol, and after reaching the maximum value (2^^32-1), wrapping to zero occurs.</dd>
          </dl>
          <figure anchor="fig_Source_FEC_Payload_ID" align="left" suppress-title="false" pn="figure-3">
              <name slugifiedName="name-source-fec-payload-ID">Source FEC Payload ID Encoding Format</name>
              <artwork name="" type="" align="left" alt="">
 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 Symbol ID (ESI)                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
              </artwork>
          </figure>
        </section>
        <section anchor="Repair_FEC_Payload_ID" numbered="true" toc="default" pn="section-4.2.2">
          <name slugifiedName="name-repair-FEC-payload-ID">Repair FEC Payload ID</name>
          <t>A FEC repair packet <bcp14>MUST</bcp14> contain a Repair FEC Payload ID prepended to the repair symbol as illustrated in <xref target="fig_FEC_Repair_Packet" format="default" sectionFormat="of" derivedContent="Figure 4"/>. There <bcp14>MUST</bcp14> be a single repair symbol per FEC repair packet.</t>
          <figure anchor="fig_FEC_Repair_Packet" align="left" suppress-title="false" pn="figure-4">
              <name slugifiedName="name-fec-repair-packet-format">Structure of an FEC Repair Packet with the Repair FEC Payload ID</name>
              <artwork name="" type="" align="left" alt="">
+---------------------------------+
|            IP Header            |
+---------------------------------+
|         Transport Header        |
+---------------------------------+
|       Repair FEC Payload ID     |
+---------------------------------+
|          Repair Symbol          |
+---------------------------------+
              </artwork>
          </figure>
          <t>More precisely, the SLC decoder scheme require the following information from the Repair FEC Payload ID:</t>
          <dl>
              <dt>Start_ESI (32-bit field):</dt>
              <dd>this unsigned integer indicates the ESI of the first source symbol of the first group in the encoding window when this repair symbol was generated.</dd>
              <dt>gc (8-bit field):</dt>
              <dd>this unsigned integer indicates the number of symbol groups in the encoding window when this repair symbol is generated (if there is a gap in the serial number, it is considered a new group).</dd>
              <dt>cm_r (8-bit field):</dt>
              <dd>this unsigned integer is used as a parameter to generate the desired encoding matrix. This cm_r <bcp14>MUST NOT</bcp14> be greater than cw_size_max.</dd>
              <dt>Residual_ESI_ (8-bit field):</dt>
              <dd>this unsigned integer represents the residual value of the starting ESI of the current group relative to the previous group.</dd>
              <dt>Group_Size_ (8-bit field):</dt>
              <dd>this unsigned integer is the number of the source symbols contained in each group.</dd>
          </dl>
          <figure anchor="fig_Repair_FEC_Payload_ID" align="left" suppress-title="false" pn="figure-5">
              <name slugifiedName="name-repair-fec-payload-ID">Repair FEC Payload ID Encoding Format</name>
              <artwork name="" type="" align="left" alt="">
 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_ESI                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       gc      |     cm_r      | Residual_ESI_2|      ...      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Residual_ESI_gc|  Group_Size_1 |      ...      | Group_Size_gc |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
              </artwork>
          </figure>
          <t>The length of the Repair FEC Payload ID depends on the gc parameter.</t>
        </section>
      </section>
    </section>
   <section anchor="procedures" numbered="true" toc="default" pn="section-5">
      <name>Procedures</name>
      <section anchor="restrictions" numbered="true" toc="default" pn="section-5.1">
        <name slugifiedName="name-restrictions">Restrictions</name>
        <t>This specification has the following restrictions:</t>
        <dl>
            <dt>1.</dt>
            <dd>There <bcp14>MUST</bcp14> be exactly one source symbol per ADUI, and therefore per ADI;</dd>
            <dt>2.</dt>
            <dd>There <bcp14>MUST</bcp14> be exactly one repair symbol per FEC Repair Packet.</dd>
        </dl>
      </section>
      <section anchor="ADU_ADUI_and_SourceSymbolsMappings" numbered="true" toc="default" pn="section-5.2">
        <name slugifiedName="name-adu-adui-sources-symbols-mappings">ADU, ADUI, and Source Symbols Mappings</name>
        <t>Before FEC coding, the mapping from ADU to AUDI needs to be established. When multiple source flows (e.g., media streams) are mapped onto the same FECFRAME instance, each flow is assigned its Flow ID value. The Flow ID needs to be included in the ADUI. Then, the recovered ADU can be allocated to the corresponding source flow by its Flow ID. </t>
        <t>Because the length of each ADU may be inconsistent, to ensure that the decoder can extract ADU from ADUI, the original ADU length also needs to be added to ADUI.</t>
        <t>For each incoming ADU, an ADUI MUST be created as follows. First of all, 3 bytes are prepended (<xref target="fig_ADUI_Creation_Example" format="default" sectionFormat="of" derivedContent="Figure 6"/>):</t>
        <dl>
            <dt>Flow ID (F) (8-bit field):</dt>
            <dd>this unsigned byte contains the integer identifier associated with the source ADU flow to which this ADU belongs.</dd>
            <dt>Length (L) (16-bit field):</dt>
            <dd>this unsigned integer contains the length of this ADU in network byte order (i.e., big endian). This length is for the ADU itself and does not include the F, or Pad fields.</dd>
        </dl>
        <t>Then, zero padding is added to the ADU if needed:</t>
        <dl>
            <dt>Padding (Pad) (variable size field):</dt>
            <dd>this field is used for alignment purposes up to a size of exactly E bytes.</dd>
        </dl>
        <t>The data unit resulting from the ADU and the F, L, and Pad fields is called ADUI. An ADUI always contributes to an integral number of source symbols.</t>
        <figure anchor="fig_ADUI_Creation_Example" align="left" suppress-title="false" pn="figure-6">
            <name slugifiedName="name-ADI-creation">ADUI Creation Example</name>
            <artwork name="" type="" align="left" alt="">
                Encoding Symbol Length (E)
+-------+-------------+------------------------+---------+
|   F   |      L      |          ADU           |   Pad   |
+-------+-------------+------------------------+---------+
\___________________________ ____________________________/
                            v

                     SLC FEC encoding
+--------------------------------------------------------+
|                         Repair                         |
+--------------------------------------------------------+
            </artwork>
        </figure>
      </section>
      <section anchor="encoding_window_management" numbered="true" toc="default" pn="section-5.3">
        <name slugifiedName="name-encoding-window-management">Encoding Window Management</name>
        <t>Whenever an ADU arrives, ADU-to-source symbols mapping will be performed. Then, the source symbols will be added to the array source_symbol_history. Whenever a repair symbol needs to be generated, the SLC FEC encoder will search backward in the source_symbol_history, and the source symbols that conforms the rules defined by the application will be put into the encoding window. When the encoding window cw_size is equal to its maximum value cw_size_max or the symbol group count gc is equal to its maximum value gc_max, the search is stopped and the FEC coding will be performed on the source symbols in the encoding window.</t>
        <t>Taking <xref target="fig_EncodingWindowManagement" format="default" sectionFormat="of" derivedContent="Figure 7"/> as an example, the coding dependency between frames is used as the rule of source symbol selection, and frame I is the reference frame of frame P1, so I and P1 are placed in the encoding window when generating Repair2. However, P1 is not the reference frame of P2 under the SVC mode, so P1 is skipped, I and P2 are put into the encoding window to generate Repair3. The same process is performed to produce Rapair4 and Repair5.</t>
        <figure anchor="fig_EncodingWindowManagement" align="left" suppress-title="false" pn="figure-7">
            <name slugifiedName="name-fig-encoding-window-management">Example of Encoding Window Management</name>
            <artwork name="" type="" align="left" alt="">
| +---+  FEC coding  +-------+
| | I |------------->|Repair1|
| +---+              +-------+
|
| +---+    +----+  FEC coding  +-------+
| | I |--->| P1 |------------->|Repair2|
| +---+    +----+              +-------+
|   +-------------+
|   |             |
| +---+    +----+ |   +----+  FEC coding  +-------+
| | I |    |    | +-->| P2 |------------->|Repair3|
| +---+    +----+     +----+              +-------+
|   +-------------+
|   |             |
| +---+    +----+ |   +----+    +----+  FEC coding  +-------+
| | I |    |    | +-->| P2 |--->| P3 |------------->|Repair4|
| +---+    +----+     +----+    +----+              +-------+
|   +-------------+      +-------------+
|   |             |      |             |
| +---+    +----+ |   +----+    +----+ |   +----+  FEC coding  +-------+
| | I |    |    | +-->| P2 |    |    | +-->| P4 |------------->|Repair5|
| +---+    +----+     +----+    +----+     +----+              +-------+
|
| time
            </artwork>
        </figure>
        <t>Note that each time a repair symbol is generated, cm_r will be updated. The update rules are as follows:</t>
        <ul empty="true" spacing="normal" bare="false">
          <li>if (++cm_r>=cw_size_max) cm_r=0;</li>
        </ul>
      </section>
      <section anchor="CodingMatrixGeneration" numbered="true" toc="default" pn="section-5.4">
        <name slugifiedName="name-coding-matrix-generation">Coding Matrix Generation</name>
        <t>Compared with the RLC FEC encoder, which depends on a pseudorandom number generator to compute the coding coefficients, the SLC FEC encoder uses a fixed coding matrix to reduce overhead. The elements of the coding matrix calculated by a contant formula with parameters cm_r and cm_c at both the SLC FEC encoder and the decoder. The cm_r and cm_c parameters control these elements. The values of cm_c between 0 (the minimum value) and cw_size_max-1 (the maximum value). And the values of cm_r between 0 and 255-cw_size_max.</t>
        <ul empty="true" spacing="normal" bare="false">
          <li> G (cm_r, cm_c) = y_c / (x_r + y_c) = (cm_c + cw_size_max) / (cm_r + cm_c + cw_size_max) </li>
        </ul>
        <t>where cm_r represents the row number in the matrix, cm_c represents the col number in the matrix, cw_size_max represents the maximum value of the encoding window, x_r = cm_r, y_c = cw_size_max+cm_c. The basic operations of the above equations are carried out in the GF (2^^8).</t>
      </section>
      <section anchor="LinearCombination" numbered="true" toc="default" pn="section-5.5">
        <name slugifiedName="name-linear-combination">Linear Operation on encoding side and decoding side</name>
        <section anchor="EncodingSideLinearCombination" numbered="true" toc="default" pn="section-5.5.1">
          <name slugifiedName="name-encoding-side-linear-combination">Encoding Side</name>
          <t>In <xref target="CodingMatrixGeneration" format="default" sectionFormat="of" derivedContent="Section 5.4"/>, the elements of coding matrix G(cm_r, cm_c) are obtained. Then, a repair symbol is generated by the computation of a linear combination of source symbols.</t>
          <t>A linear combination of the cw_size source symbols present in the encoding window, say src_0 to src_cw_size_1, is computed as follows. For each byte of position i in each source and the repair symbol, where i belongs to [0; E-1].</t>
          <ul empty="true" spacing="normal" bare="false">
            <li> repair[i] = G(cm_r, 0) * src_0[i] + G(cm_r, 1) * src_1[i] + … + G(cm_r, cw_size-1) * src_cw_size_1[i] </li>
          </ul>
          <t>where * is the multiplication over GF (2^^8), + is the addition over GF (2^^8). In this document, the following irreducible polynomial is used for GF(2^^8).</t>
          <ul empty="true" spacing="normal" bare="false" pn="section-3.7.1-3">
            <li>x^^8 + x^^4 + x^^3 + x^^2 + 1 </li>
          </ul>
        </section>
        <section anchor="DecodingSideLinearCombination" numbered="true" toc="default" pn="section-5.5.2">
          <name slugifiedName="name-decoding-side-linear-combination">Decoding Side</name>
          <t>For decoding side, it is assumed that the repair symbol protects cw_size source symbols, among which j source symbols are lost, then,</t>
          <ul empty="true" spacing="normal" bare="false">
            <li>remove_src[i] = repair[i] - G(cm_r, 0) * src_0[i] - … - G(cm_r, k) * src_k[i] - G(cm_r, k + j + 1) * src_k_j_1[i] - … - G(cm_r, cw_size-1) * src_cw_size_1[i]</li>
          </ul>
          <t>It is assumed that in the linear system maintained by the decoding side, there is a symbol sequence S = {lost_src_1, lost_src_2, … , lost_src_N} consisting of N lost source symbols, a symbol sequence R = {repair_1, repair_2, … , repair_N} consisting of N repair symbols</t>
          <t>There is a matrix A whose row represents the position of the repair symbol in R and whose column represents the position of the lost source symbol in S. A[row][col] represents the matrix element of lost_src_row corresponding to repair_col (if it does not exist, then A[row][col] = 0).</t>
          <ul empty="true" spacing="normal" bare="false">
            <li>A[row][col] = G(cm_r,cm_c)</li>
          </ul>
          <t>where cm_r can be extracted from the Repair FEC Payload ID, cm_c represents the position of the lost source symbol in the encoding window.</t>
          <t>Therefore, there is a linear system of equation as follows:</t>
          <ul empty="true" spacing="normal" bare="false">
            <li>A * Transpose(lost_src_1, lost_src_2, … , lost_src_N) = Transpose(remove_src_1, remove_src_2, … , remove_src_N)</li>
          </ul>
          <t>The inverse matrix of A can be obtained by Gauss elimination method, and finally S can be recovered:</t>
          <ul empty="true" spacing="normal" bare="false">
            <li>Transpose(lost_src_1, lost_src_2, … , lost_src_N) = A^^-1 * Transpose(remove_src_1, remove_src_2, … , remove_src_N)</li>
          </ul>
        </section>
      </section>
    </section>
   <section anchor="FecCodeSpecification" numbered="true" toc="default" pn="section-6">
      <name slugifiedName="name-fec-code-specification">FEC Code Specification</name>
      <section anchor="EncodingSide" numbered="true" toc="default" pn="section-6.1">
        <name slugifiedName="name-encoding-side">Encoding Side</name>
        <t>1. Whenever a new repair symbol needs to be produced, the source symbols are put into the sliding encoding window according to the rule defined by application (e.g., coding dependency between frames).</t>
        <t>2. The SLC FEC encoder gathers the cw_size source symbols currently in the sliding encoding window.</t>
        <t>3. The elements of the coding matrix are determined according to the parameters cm_r and cm_c (<xref target="CodingMatrixGeneration" format="default" sectionFormat="of" derivedContent="Section 5.4"/>).</t>
        <t>4. The SLC FEC encoder computes the repair symbol by a linear combination of the cw_size source symbols present in the encoding window using the coding matrix (<xref target="EncodingSideLinearCombination" format="default" sectionFormat="of" derivedContent="Section 5.5.1"/>).</t>
        <t>When encoding, the execution object is ADUI composed of Flow ID, Length, ADU, Padding.</t>
      </section>
      <section anchor="DecodingSide" numbered="true" toc="default" pn="section-6.2">
        <name slugifiedName="name-decoding-side">Decoding Side</name>
        <t>1. A linear system composed of source symbols, elements of the coding matrix, and repair symbols <bcp14>MUST</bcp14> to be maintained to recover the lost source packets.</t>
        <t>2. When a repair symbol is received, it detects whether there is loss in the protected source symbols. If at least one of the corresponding source symbols has been lost, an equation composed of the repair symbol, the corresponding source symbols, and the elements of the coding matrix will be added to the linear system (the elements of the coding matrix are generated by the method provided in <xref target="CodingMatrixGeneration" format="default" sectionFormat="of" derivedContent="Section 5.4"/>).</t>
        <t>3. When the linear system covering one or more lost source symbols is full, decoding is performed in order to recover lost source symbols (<xref target="DecodingSideLinearCombination" format="default" sectionFormat="of" derivedContent="Section 5.5.2"/>). </t>
        <t>4. Each time an ADUI can be totally recovered, padding is removed (thanks to the Length field, L, of the ADUI), and the ADU will be assigned to the corresponding flow.</t>
        <t>Note that the recovered source symbols can be directly passed to the application through the callback function, or passed to the application after receiving a certain number of source symbols, which depends on the operation decision of the application.</t>
      </section>
    </section>
   <section anchor="SecurityConsiderations" numbered="true" toc="default" pn="section-7">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t>The FEC Framework document <xref target="RFC6363" format="default" sectionFormat="of" derivedContent="RFC6363"/> provides a comprehensive analysis of security considerations applicable to FEC schemes. Therefore, the present section follows the security considerations section of <xref target="RFC6363" format="default" sectionFormat="of" derivedContent="RFC6363"/> and only discusses specific topics.</t>
      <section anchor="AttacksAgainstTheDataFlow" numbered="true" toc="default" pn="section-7.1">
        <name slugifiedName="name-attacks-against-the-data-flow">Attacks Against the Data Flow</name>
        <section anchor="AccessToConfidentialContent" numbered="true" toc="default" pn="section-7.1.1">
          <name slugifiedName="name-access-to-confidential-content">Access to Confidential Content</name>
          <t>The Sliding Window SLC FEC scheme specified in this document does not change the recommendations of <xref target="RFC6363" format="default" sectionFormat="of" derivedContent="RFC6363"/>. To summarize, if confidentiality is a concern, it is <bcp14>RECOMMENDED</bcp14> that one of the solutions mentioned in <xref target="RFC6363" format="default" sectionFormat="of" derivedContent="RFC6363"/> is used with special considerations to the way this solution is applied (e.g., is encryption applied before or after FEC protection, within the end system or in a middlebox), to the operational constrains (e.g., performing FEC decoding in a protected environment may be complicated or even impossible) and to the threat model.</t>
        </section>
        <section anchor="ContentCorruption" numbered="true" toc="default" pn="section-7.1.2">
          <name slugifiedName="name-content-corruption">Content Corruption</name>
          <t>The Sliding Window SLC FEC scheme specified in this document does not change the recommendations of <xref target="RFC6363" format="default" sectionFormat="of" derivedContent="RFC6363"/>. To summarize, it is <bcp14>RECOMMENDED</bcp14> that one of the solutions mentioned in <xref target="RFC6363" format="default" sectionFormat="of" derivedContent="RFC6363"/> is used on both the FEC Source and Repair Packets.</t>
        </section>
      </section>
      <section anchor="AttacksAgainstTheFecParameters" numbered="true" toc="default" pn="section-7.2">
        <name slugifiedName="name-attacks-against-the-fec-parameters">Attacks Against the FEC Parameters</name>
        <t>The Sliding Window SLC FEC scheme specified in this document defines parameters that can be the basis of attacks. More specifically, the following parameters of the FEC Framework Configuration Information may be modified by an attacker (<xref target="FFCI" format="default" sectionFormat="of" derivedContent="Section 4.1"/>):</t>
        <dl>
            <dt>FEC Encoding ID:</dt>
            <dd>changing this parameter leads the receiver to consider a different FEC Scheme. It will lead to severe consequences that the format of the AUDI, the Explicit Source FEC Payload ID, and Repair FEC Payload ID of received packets will probably differ. The FEC decoder can't get the correct decoding information, resulting in decoding failure or decoding error.</dd>
            <dt>Encoding symbol length (E):</dt>
            <dd>setting this E parameter to a different value will enable an attacker to create a DoS since the repair symbols and certain source symbols will be larger or smaller than E, incoherency for the receiver.</dd>
        </dl>
        <t>Therefore, it is <bcp14>RECOMMENDED</bcp14> that security measures be taken to guarantee the FFCI integrity, as specified in <xref target="RFC6363" format="default" sectionFormat="of" derivedContent="RFC6363"/>. How to achieve this depends on how the FFCI is communicated from the sender to the receiver, which is not specified in this document.</t>
        <t>Similarly, attacks are possible against the Explicit Source FEC Payload ID and Repair FEC Payload ID. More specifically, in the case of an FEC Source Packet, the following value can be modified by an attacker who targets receivers:</t>
        <dl>
            <dt>Encoding Symbol ID (ESI):</dt>
            <dd>changing the ESI leads a receiver to consider a wrong ADU, resulting in severe consequences, including corrupted content passed to the receiving application.
                And in the case of an FEC Repair Packet.</dd>
            <dt>Start_ESI:</dt>
            <dd>changing this value causes the FEC decoder to add the wrong source symbol in the linear system, and therefore any source symbol recovered by the linear system may be wrong.</dd>
            <dt>gc:</dt>
            <dd>changing this value causes the FEC decoder to add an incorrect number of source symbols in the linear system. Therefore any source symbol recovered by the linear system may be wrong.</dd>
            <dt>cm_r:</dt>
            <dd>changing this value leads a receiver to generate a wrong coding coefficient, and therefore any source symbol decoded using the repair symbol contained in this packet will be corrupted.</dd>
            <dt>Residual_ESI_:</dt>
            <dd>changing this value causes the FEC decoder to add the wrong source symbol in the linear system, and therefore any source symbol recovered by the linear system may be wrong.</dd>
            <dt>Group_Size_:</dt>
            <dd>changing this value causes the FEC decoder to add an incorrect number of source symbols in the linear system. Therefore any source symbol recovered by the linear system may be wrong.</dd>
        </dl>
        <t>Therefore, it is <bcp14>RECOMMENDED</bcp14> that security measures are taken to guarantee the FEC Source and Repair Packets as stated in <xref target="RFC6363" format="default" sectionFormat="of" derivedContent="RFC6363"/>.</t>
      </section>
      <section anchor="ProtectedTogether" numbered="true" toc="default" pn="section-7.3">
        <name slugifiedName="name-protect-together">When Several Source Flows Are to Be Protected Together</name>
        <t>The Sliding Window SLC FEC scheme specified in this document does not change the recommendations of <xref target="RFC6363" format="default" sectionFormat="of" derivedContent="RFC6363"/>.</t>
      </section>
      <section anchor="BaselineSecureFECFRAMEOperation" numbered="true" toc="default" pn="section-7.4">
        <name slugifiedName="name-baseline-secure-FECFRAME-operation">Baseline Secure FECFRAME Operation</name>
        <t>The Sliding Window SLC FEC scheme specified in this document does not change the recommendations of <xref target="RFC6363" format="default" sectionFormat="of" derivedContent="RFC6363"/> concerning the use of the IPsec/Encapsulating Security Payload (ESP) security protocol as a mandatory-to-implement (but not mandatory-to-use) security scheme. This is well suited to situations where the only insecure domain is the one over which the FEC Framework operates.</t>
      </section>
    </section>
   <section anchor="OperationsAnRSanagementConsiderations" numbered="true" toc="default" pn="section-8">
      <name>Operations and Management Considerations</name>
      <t>The FECFRAME document <xref target="RFC6363" format="default" sectionFormat="of" derivedContent="RFC6363"/> provides a comprehensive analysis of operations and management considerations applicable to FEC schemes. Therefore, the present section only discusses specific topics.</t>
      <section anchor="OR_gc_max" numbered="true" toc="default" pn="section-8.1">
        <name slugifiedName="name-or-gc-max">Operational Recommendations: gc_max</name>
        <t>The Sliding Window SLC FEC scheme specified in this document defines the maximum number of groups participating in encoding, called gc_max, reflecting the maximum number of source symbols that the coding window can hold. Gc_max is directly proportional to the computational complexity of FEC encoding. If gc_max is too large, the time complexity of FEC encoding will be too high, and the CPU overhead will be too large. Generally, it is appropriate to associate gc_max with cw_size_max.</t>
        <t>For example, in real-time video streaming applications, the frame rate (FR) and bit rate (BR) is determined by transmitting the video frames. The possible number of packets per frame can be calculated according to FR and BR, and they can calculate the maximum number of symbols in the coding window.</t>
        <ul empty="true" spacing="normal" bare="false">
          <li> BR kbps / 8 / FR fps / MTU * gc_max &lt;= cw_size_max </li>
        </ul>
        <t>Where MTU denotes Maximum Transmission Unit.</t>
      </section>
    </section>
   <section anchor="iana" numbered="true" toc="default" pn="section-9">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t>This document registers one values in the “FEC Framework (FECFRAME) FEC Encoding IDs” sub-registry as follows:</t>
      <dl>
          <dt>XXX</dt>
          <dd>refers to the Sliding Window Selective Linear Code (SLC) Forward Error Correction (FEC) Scheme for Arbitrary Packet Flows.</dd>
      </dl>
    </section>
    <section anchor="Acknowledgements" numbered="true" toc="default" pn="section-10">
      <name slugifiedName="name-acknowledgements">Acknowledgments</name>
      <t>The authors would like to thank the FEC Framework Design Team for providing a great FEC Framework. The authors would also like to thank Shie Qian for reviewing the earlier draft versions of this document. </t>
    </section>
    <!-- Possibly a 'Contributors' section ... -->
  </middle>
  <!--  *****BACK MATTER ***** -->

 <back>
    <!-- References split into informative and normative -->

   <!-- There are 2 ways to insert reference entries from the citation libraries:
    1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
    2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
       (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

    Both are cited textually in the same manner: by using xref elements.
    If you use the PI option, xml2rfc will, by default, try to find included files in the same
    directory as the including file. You can also define the XML_LIBRARY environment variable
    with a value containing a set of directories to search.  These can be either in the local
    filing system or remote ones accessed by http (http://domain/dir/... ).-->

   <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->
     <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
        </reference>
     <reference anchor="RFC5052" target="https://www.rfc-editor.org/info/rfc5052" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5052.xml">
          <front>
            <title>Forward Error Correction (FEC) Building Block</title>
            <seriesInfo name="DOI" value="10.17487/RFC5052"/>
            <seriesInfo name="RFC" value="5052"/>
            <!--seriesInfo name="BCP" value="14"/-->
            <author initials="M." surname="Watson" fullname="M. Watson">
              <organization/>
            </author>
            <author initials="M." surname="Luby" fullname="M. Luby">
              <organization/>
            </author>
            <author initials="L." surname="Vicisano" fullname="L. Vicisano">
              <organization/>
            </author>
            <date year="2007" month="August"/>
            <abstract>
              <t>This document describes how to use Forward Error Correction (FEC) codes to efficiently provide and/or augment reliability for bulk data transfer over IP multicast.  This document defines a framework for the definition of the information that needs to be communicated in order to use an FEC code for bulk data transfer, in addition to the encoded data itself, and for definition of formats and codes for communication of that information.  Both information communicated with the encoded data itself and information that needs to be communicated ’out-of-band’ are considered.  The procedures for specifying new FEC codes, defining the information communication requirements associated with those codes and registering them with the Internet Assigned Numbers Authority (IANA) are also described. The requirements on Content Delivery Protocols that wish to use FEC codes defined within this framework are also defined.  The companion document titled "The Use of Forward Error Correction (FEC) in Reliable Multicast" describes some applications of FEC codes for delivering content.  This document obsoletes RFC 3452.</t>
            </abstract>
          </front>
        </reference>
     <reference anchor="RFC6363" target="https://www.rfc-editor.org/info/rfc6363" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6363.xml">
          <front>
            <title>Forward Error Correction (FEC) Framework</title>
            <seriesInfo name="DOI" value="10.17487/RFC6363"/>
            <seriesInfo name="RFC" value="6363"/>
            <!--seriesInfo name="BCP" value="14"/-->
            <author initials="M." surname="Watson" fullname="M. Watson">
              <organization/>
            </author>
            <author initials="A." surname="Begen" fullname="A. Begen">
              <organization/>
            </author>
            <author initials="V." surname="Roca" fullname="V. Roca">
              <organization/>
            </author>
            <date year="2011" month="October"/>
            <abstract>
              <t>This document describes a framework for using Forward Error Correction (FEC) codes with applications in public and private IP networks to provide protection against packet loss.  The framework supports applying FEC to arbitrary packet flows over unreliable transport and is primarily intended for real-time, or streaming, media.  This framework can be used to define Content Delivery Protocols that provide FEC for streaming media delivery or other packet flows.  Content Delivery Protocols defined using this framework can support any FEC scheme (and associated FEC codes) that is compliant with various requirements defined in this document. Thus, Content Delivery Protocols can be defined that are not specific to a particular FEC scheme, and FEC schemes can be defined that are not specific to a particular Content Delivery Protocol.</t>
            </abstract>
          </front>
        </reference>
     <reference anchor="RFC6364" target="https://www.rfc-editor.org/info/rfc6364" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6364.xml">
          <front>
            <title>Session Description Protocol Elements for the Forward Error Correction (FEC) Framework</title>
            <seriesInfo name="DOI" value="10.17487/RFC6364"/>
            <seriesInfo name="RFC" value="6364"/>
            <!--seriesInfo name="BCP" value="14"/-->
            <author initials="A." surname="Begen" fullname="A. Begen">
              <organization/>
            </author>
            <date year="2011" month="October"/>
            <abstract>
              <t>This document specifies the use of the Session Description Protocol(SDP) to describe the parameters required to signal the Forward Error Correction (FEC) Framework Configuration Information between the sender(s) and receiver(s).  This document also provides examples that show the semantics for grouping multiple source and repair flows together for the applications that simultaneously use multiple instances of the FEC Framework.</t>
            </abstract>
          </front>
        </reference>
     <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
        </reference>
     <reference anchor="RFC8680" target="https://www.rfc-editor.org/info/rfc8680" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8680.xml">
          <front>
            <title>Forward Error Correction (FEC) Framework Extension to Sliding Window Codes</title>
            <seriesInfo name="DOI" value="10.17487/RFC8680"/>
            <seriesInfo name="RFC" value="8680"/>
            <!--seriesInfo name="BCP" value="14"/-->
            <author initials="V." surname="Roca" fullname="V. Roca">
              <organization/>
            </author>
            <author initials="A." surname="Begen" fullname="A. Begen">
              <organization/>
            </author>
            <date year="2020" month="January"/>
            <abstract>
              <t>RFC 6363 describes a framework for using Forward Error Correction (FEC) codes to provide protection against packet loss.  The framework supports applying FEC to arbitrary packet flows over unreliable transport and is primarily intended for real-time, or streaming, media.  However, FECFRAME as per RFC 6363 is restricted to block FEC codes.  This document updates RFC 6363 to support FEC codes based on a sliding encoding window, in addition to block FEC codes, in a backward-compatible way.  During multicast/broadcast real-time content delivery, the use of sliding window codes significantly improves robustness in harsh environments, with less repair traffic and lower FEC-related added latency.</t>
            </abstract>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <!-- Here we use entities that we defined at the beginning. -->

     <reference anchor="RFC5170" target="https://www.rfc-editor.org/info/rfc5170" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5170.xml">
          <front>
            <title>Low Density Parity Check (LDPC) Staircase and Triangle Forward Error Correction (FEC) Schemes</title>
            <seriesInfo name="DOI" value="10.17487/RFC5170"/>
            <seriesInfo name="RFC" value="5170"/>
            <author initials="V." surname="Roca" fullname="V. Roca">
              <organization/>
            </author>
            <author initials="C." surname="Neumann" fullname="C. Neumann">
              <organization/>
            </author>
            <author initials="D." surname="Furodet" fullname="D. Furodet">
              <organization/>
            </author>
            <date year="2008" month="June"/>
            <abstract>
              <t>This document describes two Fully-Specified Forward Error Correction (FEC) Schemes, Low Density Parity Check (LDPC) Staircase and LDPC Triangle, and their application to the reliable delivery of data objects on the packet erasure channel (i.e., a communication path where packets are either received without any corruption or discarded during transmission).  These systematic FEC codes belong to the well-known class of "Low Density Parity Check" codes, and are large block FEC codes in the sense of RFC 3453.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC5510" target="https://www.rfc-editor.org/info/rfc5510" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5510.xml">
          <front>
            <title>Reed-Solomon Forward Error Correction (FEC) Schemes</title>
            <seriesInfo name="DOI" value="10.17487/RFC5510"/>
            <seriesInfo name="RFC" value="5510"/>
            <!--seriesInfo name="BCP" value="72"/-->
            <author initials="J." surname="Lacan" fullname="J. Lacan">
              <organization/>
            </author>
            <author initials="V." surname="Roca" fullname="V. Roca">
              <organization/>
            </author>
            <author initials="J." surname="Peltotalo" fullname="J. Peltotalo">
              <organization/>
            </author>
            <author initials="S." surname="Peltotalo" fullname="S. Peltotalo">
              <organization/>
            </author>
            <date year="2009" month="April"/>
            <abstract>
              <t>This document describes a Fully-Specified Forward Error Correction (FEC) Scheme for the Reed-Solomon FEC codes over GF(2^^m), where m is in {2..16}, and its application to the reliable delivery of data objects on the packet erasure channel (i.e., a communication path where packets are either received without any corruption or discarded during transmission).  This document also describes a Fully-Specified FEC Scheme for the special case of Reed-Solomon codes over GF(2^^8) when there is no encoding symbol group.  Finally, in the context of the Under-Specified Small Block Systematic FEC Scheme (FEC Encoding ID 129), this document assigns an FEC Instance ID to the special case of Reed-Solomon codes over GF(2^^8).</t>
              <t>Reed-Solomon codes belong to the class of Maximum Distance Separable (MDS) codes, i.e., they enable a receiver to recover the k source symbols from any set of k received symbols.  The schemes described here are compatible with the implementation from Luigi Rizzo.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6681" target="https://www.rfc-editor.org/info/rfc6681" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6681.xml">
          <front>
            <title>Raptor Forward Error Correction (FEC) Schemes for FECFRAME</title>
            <seriesInfo name="DOI" value="10.17487/RFC6681"/>
            <seriesInfo name="RFC" value="6681"/>
            <!--seriesInfo name="BCP" value="72"/-->
            <author initials="M." surname="Watson" fullname="M. Watson">
              <organization/>
            </author>
            <author initials="T." surname="Stockhammer" fullname="T. Stockhammer">
              <organization/>
            </author>
            <author initials="M." surname="Luby" fullname="M. Luby">
              <organization/>
            </author>
            <date year="2012" month="August"/>
            <abstract>
              <t>This document describes Fully-Specified Forward Error Correction (FEC) Schemes for the Raptor and RaptorQ codes and their application to reliable delivery of media streams in the context of the FEC Framework. The Raptor and RaptorQ codes are systematic codes, where a number of repair symbols are generated from a set of source symbols and sent in one or more repair flows in addition to the source symbols that are sent to the receiver(s) within a source flow. The Raptor and RaptorQ codes offer close to optimal protection against arbitrary packet losses at a low computational complexity. Six FEC Schemes are defined: two for the protection of arbitrary packet flows, two that are optimized for small source blocks, and two for the protection of a single flow that already contains a sequence number.  Repair data may be sent over arbitrary datagram transport
                  (e.g., UDP) or using RTP.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6816" target="https://www.rfc-editor.org/info/rfc6816" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6816.xml">
          <front>
            <title>Simple Low-Density Parity Check (LDPC) Staircase Forward Error Correction (FEC) Scheme for FECFRAME</title>
            <seriesInfo name="DOI" value="10.17487/RFC6816"/>
            <seriesInfo name="RFC" value="6816"/>
            <!--seriesInfo name="BCP" value="72"/-->
            <author initials="V." surname="Roca" fullname="V. Roca">
              <organization/>
            </author>
            <author initials="M." surname="Cunche" fullname="M. Cunche">
              <organization/>
            </author>
            <author initials="J." surname="Lacan" fullname="J. Lacan">
              <organization/>
            </author>
            <date year="2012" month="December"/>
            <abstract>
              <t>This document describes a fully specified simple Forward Error Correction (FEC) scheme for Low-Density Parity Check (LDPC) Staircase codes that can be used to protect media streams along the lines defined by FECFRAME.  These codes have many interesting properties: they are systematic codes, they perform close to ideal codes in many use-cases, and they also feature very high encoding and decoding throughputs.  LDPC-Staircase codes are therefore a good solution to protect a single high bitrate source flow or to protect globally several mid-rate flows within a single FECFRAME instance.  They are also a good solution whenever the processing load of a software encoder or decoder must be kept to a minimum.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6865" target="https://www.rfc-editor.org/info/rfc6865" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6865.xml">
          <front>
            <title>Simple Reed- Solomon Forward Error Correction (FEC) Scheme for FECFRAME</title>
            <seriesInfo name="DOI" value="10.17487/RFC6865"/>
            <seriesInfo name="RFC" value="6865"/>
            <!--seriesInfo name="BCP" value="72"/-->
            <author initials="V." surname="Roca" fullname="V. Roca">
              <organization/>
            </author>
            <author initials="M." surname="Cunche" fullname="M. Cunche">
              <organization/>
            </author>
            <author initials="J." surname="Lacan" fullname="J. Lacan">
              <organization/>
            </author>
            <author initials="A." surname="Bouabdallah" fullname="A. Bouabdallah">
              <organization/>
            </author>
            <author initials="K." surname="Matsuzono" fullname="K. Matsuzono">
              <organization/>
            </author>
            <date year="2013" month="February"/>
            <abstract>
              <t>This document describes a fully-specified simple Forward Error Correction (FEC) scheme for Reed-Solomon codes over the finite field (also known as the Galois Field) GF(2^^m), with 2 &lt;= m &lt;= 16, that can be used to protect arbitrary media streams along the lines defined by FECFRAME.  The Reed-Solomon codes considered have attractive properties, since they offer optimal protection against packet erasures and the source symbols are part of the encoding symbols, which can greatly simplify decoding.  However, the price to pay is a limit on the maximum source block size, on the maximum number of encoding symbols, and a computational complexity higher than that of the Low-Density Parity Check (LDPC) codes, for instance.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8406" target="https://www.rfc-editor.org/info/rfc8406" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8406.xml">
          <front>
            <title>Taxonomy of Coding Techniques for Efficient Network Communications</title>
            <seriesInfo name="DOI" value="10.17487/RFC8406"/>
            <seriesInfo name="RFC" value="8406"/>
            <!--seriesInfo name="BCP" value="72"/-->
            <author initials="B." surname="Adamson" fullname="B. Adamson">
              <organization/>
            </author>
            <author initials="C." surname="Adjih" fullname="C. Adjih">
              <organization/>
            </author>
            <author initials="J." surname="Bilbao" fullname="J. Bilbao">
              <organization/>
            </author>
            <author initials="V." surname="Firoiu" fullname="V. Firoiu">
              <organization/>
            </author>
            <author initials="F." surname="Fitzek" fullname="F. Fitzek">
              <organization/>
            </author>
            <author initials="S." surname="Ghanem" fullname="S. Ghanem">
              <organization/>
            </author>
            <author initials="E." surname="Lochin" fullname="E. Lochin">
              <organization/>
            </author>
            <author initials="A." surname="Masucci" fullname="A. Masucci">
              <organization/>
            </author>
            <author initials="M-J." surname="Montpetit" fullname="M-J. Montpetit">
              <organization/>
            </author>
            <author initials="M." surname="Pedersen" fullname="M. Pedersen">
              <organization/>
            </author>
            <author initials="G." surname="Peralta" fullname="G. Peralta">
              <organization/>
            </author>
            <author initials="V." surname="Roca" fullname="V. Roca">
              <organization/>
            </author>
            <author initials="P." surname="Saxena" fullname="P. Saxena">
              <organization/>
            </author>
            <author initials="S." surname="Sivakumar" fullname="K. Sivakumar">
              <organization/>
            </author>
            <date year="2018" month="June"/>
            <abstract>
              <t>This document summarizes recommended terminology for Network Coding
                  concepts and constructs.  It provides a comprehensive set of terms in
                  order to avoid ambiguities in future IRTF and IETF documents on
                  Network Coding.  This document is the product of the Coding for
                  Efficient Network Communications Research Group (NWCRG), and it is in
                  line with the terminology used by the RFCs produced by the Reliable
                  Multicast Transport (RMT) and FEC Framework (FECFRAME) IETF working
                  groups.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8681" target="https://www.rfc-editor.org/info/rfc8681" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8681.xml">
          <front>
            <title>Sliding Window Random Linear Code (RLC) Forward Erasure Correction (FEC) Schemes for FECFRAME</title>
            <seriesInfo name="DOI" value="10.17487/RFC8681"/>
            <seriesInfo name="RFC" value="8681"/>
            <!--seriesInfo name="BCP" value="72"/-->
            <author initials="V." surname="Roca" fullname="V. Roca">
              <organization/>
            </author>
            <author initials="B." surname="Teibi" fullname="B. Teibi">
              <organization/>
            </author>
            <date year="2020" month="February"/>
            <abstract>
              <t>This document describes a fully-specified simple Forward Error Correction (FEC) scheme for Reed-Solomon codes over the finite field (also known as the Galois Field) GF(2^^m), with 2 &lt;= m &lt;= 16, that can be used to protect arbitrary media streams along the lines defined by FECFRAME.  The Reed-Solomon codes considered have attractive properties, since they offer optimal protection against packet erasures and the source symbols are part of the encoding symbols, which can greatly simplify decoding.  However, the price to pay is a limit on the maximum source block size, on the maximum number of encoding symbols, and a computational complexity higher than that of the Low-Density Parity Check (LDPC) codes, for instance.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="Wan2022" target="https://ieeexplore.ieee.org/document/9741773/" quoteTitle="true" derivedAnchor="Wan2022">
          <front>
            <title>Sliding-Window Forward Error Correction Based on Reference Order for Real-Time Video Streaming</title>
            <seriesInfo name="DOI" value="10.1109/ACCESS.2022.3162217"/>
            <author initials="R." surname="Wang">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Si">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="He">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="March" year="2022"/>
          </front>
        </reference>
        <reference anchor="Hel2011" target="https://ieeexplore.ieee.org/document/9741773/" quoteTitle="true" derivedAnchor="Hel2011">
          <front>
            <title>Sliding-Window Forward Error Correction Based on Reference Order for Real-Time Video Streaming</title>
            <seriesInfo name="DOI" value="10.1109/TMM.2011.2129499"/>
            <author initials="H." surname="Cornelius">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="G." surname="Barquero">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D." surname="Schierl">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Wiegand">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="June" year="2011"/>
          </front>
        </reference>
        <!-- A reference written by by an organization not a person. -->
      </references>
    </references>
   <!--section anchor="theoretical_analysis" numbered="true" toc="default" removeInRFC="false" pn="section-appendix.a">
     <name slugifiedName="name-theoretical-analysis">Theoretical analysis of Sliding Window SLC FEC code combined with practical application (Informational)</name>
     <t>Taking the transmission of real-time video stream in Scalable Video Coding (SVC) mode as an example, in SVC mode, the frame does not follow the rule of the frame by frame reference. In the traditional Sliding Window FEC codes (e.g., convolutional RS), frames are added to the encoding window according to the time order to contain non-reference frames. In the Sliding Window SLC FEC code (a.k.a, convolutional SLC), the frames are added to the encoding window by reference-order.</t>
     <t>The network which obeys the ideal random packet loss model conforms to the characteristics of the Bernoulli experiment. Assuming that the packet loss rate is p, the sender sends N packets, and the receiver receives X packets after passing through the packet loss network. X obeys the binomial distribution with parameters N and p.</t>
     <ul empty="true" spacing="normal" bare="false">
       <li>X~B(N,p)</li>
     </ul>
     <t>The probability distribution of X is as follows:</t>
     <ul empty="true" spacing="normal" bare="false">
       <li>P{X=K} = C(N,K)*p^^K*(1-p)^^(N-K)</li>
     </ul>
     <section anchor="BlockRS" numbered="true" toc="default" pn="section-appendix.a.1">
       <name slugifiedName="name-block-rs">Block RS</name>
       <t>For Block RS (N, K), the solvability probability is equal to the probability of X &gt;= k, that is,</t>
       <ul empty="true" spacing="normal" bare="false">
         <li>P{Block RS(N,K) solvable} = P{X&gt;=K} = C(N,K)*(1-p)^^K*p^^(N-K)+ C(N,K+1)*(1-p)^^(K+1)*p^^(N-K-1)+…+ C(N,N)*(1-p)^^N*p^^(N-N)</li>
       </ul>
       <t>The solvable probabilities of RS (4,2), RS (6,3) and RS (8,4) under the random packet loss network with packet loss rate P can be calculated:</t>
       <ul empty="true" spacing="normal" bare="false">
         <li>P{RS(4,2) solvable} = P{X&gt;=2} = 3*p^^4-4*p^^3+1</li>
         <li>P{RS(6,3) solvable} = -10*p^^6+24*p^^5-15*p^^4+1</li>
         <li>P{RS(8,4) solvable} = 35*p^^8-120*p^^7+140*p^^6-56*p^^5+1</li>
       </ul>
       <t>When p &lt; 0.41, the larger N is, the higher the solvability probability is. When p &gt; 0.41, the larger N is, the lower the solvability probability is.</t>
     </section>
     <section anchor="ConvolutionalRS" numbered="true" toc="default" pn="section-appendix.a.2">
       <name slugifiedName="name-convolutional-rs">Convolutional RS</name>
       <t>Next, let's look at the convolutional RS. We only calculate the solvability probability of the first two frames, assuming that each frame is divided into four packets. There is a reference relationship between frame 1 and frame 2.</t>
       <t>The first frame of convolutional RS can be solved in two cases. The first case is that frame 1 can be solved in a single frame.</t>
       <t>In the second case, frame 1 is not solvable, but frame 1 and 2 are jointly solvable. Let X1 denotess the number of packets received by frame 1, and let X2 denotes the number of packets received by frame 2. Then the sample space of frame 1 is not solvable but frame 1 and frame 2 are jointly solvable is as follows:</t>
       <ul empty="true" spacing="normal" bare="false">
         <li>S = {(X1=0,X2=4), (X1=1,X2=3), (X1=1,X2=4)}</li>
       </ul>
       <t>Thus, the probability of the second case can be obtained as follows:</t>
       <ul empty="true" spacing="normal" bare="false">
         <li>P{F1 is not solvable, but F1 and F2 are jointly solvable}</li>
         <li>= P{X1=0,X2=4}+P{X1=1,X2=3}+P{X1=1,X2=4}</li>
         <li>= p^^4*(1-p)^^4+C(4,1) *(1-p)^^1*p^^3*C(4,3) *(1-p)^^3*p^^1+C(4,1) *(1-p)^^1*p^^3*(1-p)^^4</li>
         <li>= (1-p)^^4*(13*p^^4+4*p^^3)</li>
       </ul>
       <t>Thus, the first frame solvable probability in convolutional RS is equal to the sum of the probability of the first frame being solvable alone and the first frame not solvable but two frames being solvable together.</t>
       <ul empty="true" spacing="normal" bare="false">
         <li>P{F1} = 3*p^^4-4*p^^3+1+(1-p)^^4*(13*p^^4+4*p^^3)</li>
       </ul>
       <t>The solvable probability of frame 2 is equal to the joint solvable probability of frame 1 and frame 2：</t>
       <ul empty="true" spacing="normal" bare="false">
         <li>P{F2} = 35*p^^8-120*p^^7+140*p^^6-56*p^^5+1</li>
         <li>expect frame rate E(RS(4,2)) = P{F1}+P{F2}=2*(3*p^^4 - 4*p^^3 + 1)</li>
         <li>E(convolutional RS)= P{F1}+P{F2} = 3*p^^4-4*p^^3+1+(1-p)^^4*(13*p^^4+4*p^^3)+35*p^^8-120*p^^7+140*p^^6-56*p^^5+1</li>
       </ul>
       <t>When p &lt; 0.5, the expect frame rate of convolutional RS is close to that of block RS, but when p &gt; 0.5, the expect frame rate begins to be lower than that of block RS.</t>
     </section>
     <section anchor="convolutionalSLC" numbered="true" toc="default" pn="section-appendix.a.3">
       <name slugifiedName="name-convolutional-SLC">convolutional SLC</name>
       <t>For convolutional SLC, frame 2 must refer to frame 1. That is, the successful display of frame 2 depends on the solvability of frame 1.</t>
       <ul empty="true" spacing="normal" bare="false">
         <li>E(convolutional SLC)=P{F1}+P{F1}*P{F2|F1}</li>
         <li>= (1-p)^^4*(13*p^^4+4*p^^3)+35*p^^8-120*p^^7+140*p^^6-56*p^^5+3*p^^4-4*p^^3+2</li>
       </ul>
       <t>In all the scopes of p, the expected frame rate of convolutional SLC is higher than that of Block RS. Thus, the error correction ability of convolutional SLC in this situation is proved theoretically.</t>
     </section>
   </section-->
    <!-- Change Log

v00 2006-03-15  EBD   Initial version

v01 2006-04-03  EBD   Moved PI location back to position 1 -
                     v3.1 of XMLmind is better with them at this location.
v02 2007-03-07  AH    removed extraneous nested_list attribute,
                     other minor corrections
v03 2007-03-09  EBD   Added comments on null IANA sections and fixed heading capitalization.
                     Modified comments around figure to reflect non-implementation of
                     figure indent control.  Put in reference using anchor="DOMINATION".
                     Fixed up the date specification comments to reflect current truth.
v04 2007-03-09 AH     Major changes: shortened discussion of PIs,
                     added discussion of rfc include.
v05 2007-03-10 EBD    Added preamble to C program example to tell about ABNF and alternative 
                     images. Removed meta-characters from comments (causes problems).

v06 2010-04-01 TT     Changed ipr attribute values to latest ones. Changed date to
                     year only, to be consistent with the comments. Updated the 
                     IANA guidelines reference from the I-D to the finished RFC.
v07 2020-01-21 HL    Converted the template to use XML schema version 3.
    -->
 </back>
</rfc>
