<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-dtn-btpu-fec-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="BTPU-FEC">Forward Error Correction for the Bundle Transfer Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-dtn-btpu-fec-03"/>
    <author fullname="Rick Taylor">
      <organization>Aalyria Technologies</organization>
      <address>
        <email>rtaylor@aalyria.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="15"/>
    <area>INT</area>
    <workgroup>Delay/Disruption Tolerant Networking</workgroup>
    <keyword>DTN</keyword>
    <keyword>BPv7</keyword>
    <keyword>Bundle Protocol</keyword>
    <keyword>BTPU</keyword>
    <keyword>FEC</keyword>
    <abstract>
      <?line 43?>

<t>This document defines an optional extension to the Bundle Transfer Protocol - Unidirectional, as described in <xref target="BTPU"/>, to enable forward error correction (FEC) coding to be applied selectively to the transfer of individual bundles on a case by case basis.</t>
      <t>The definition and use of FEC follows the FECFRAME framework defined in <xref target="RFC6363"/>, and this document introduces new Message types to BTPU in order to carry the FEC information as defined in the framework.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ricktaylor.github.io/btpu-fec/draft-ietf-dtn-btpu-fec.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-dtn-btpu-fec/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Delay/Disruption Tolerant Networking Working Group mailing list (<eref target="mailto:dtn@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/dtn/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dtn/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ricktaylor/btpu-fec"/>.</t>
    </note>
  </front>
  <middle>
    <?line 49?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>There are a number of use-cases of the Bundle Transfer Protocol - Unidirectional <xref target="BTPU"/>, where the use of transfer segment repetition as a mechanism to protect against the loss of frames can be considered sub-optimal.  This document describes an alternate mechanism based on forward error correction (FEC) coding, that requires increased computational complexity but fewer transmitted bits.</t>
      <t>Rather than defining novel formats and registries for the variety of standardized FEC mechanisms, this document reuses the primitives and best practices of the FECFRAME framework, defined in <xref target="RFC6363"/>.</t>
      <t>Just as in core BTPU, a Bundle is split into a series of octet sequences that are emitted into Messages by the sender to be transported to receivers by the underlying link-layer protocol; but when FEC is desired, the Bundle is divided into FECFRAME Application Data Units (ADUs), and the mechanisms defined in the FECFRAME framework are used to produce Repair Symbols that are placed into new Messages, rather than just sub-slices of the original Bundle.  The new Messages are used to distinguish FEC Source and Repair data from core BTPU Segments.</t>
      <t>Although the content and processing of the new Messages differs from existing BTPU Messages, the rules around the emission and replication of the Messages are identical to the rules applicable to the core BTPU Segment Messages, and they follow the common BTPU Message format, allowing implementations that do not support this extension to efficiently detect and ignore the new Messages.</t>
      <section anchor="applicability">
        <name>Applicability</name>
        <t>Note that when FEC is available at the link-layer it is generally more effective than applying it at the Transfer layer, and ought to be used when it is available.  This extension is designed to provide FEC capabilities when the underlying link-layer protocol does not have native support for FEC, or when per-Transfer FEC is desired by a deployment.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<section anchor="terminology">
        <name>Terminology</name>
        <t>This document uses FEC terminology from <xref target="RFC6363"/>.  In particular, the term "Application Data Unit" (ADU) refers to the unit of source data as defined in <xref section="2" sectionFormat="of" target="RFC6363"/>, not the Application Data Unit defined in <xref target="RFC9171"/>.  In the context of this document, an ADU is a chunk of a Bundle that is provided to the FEC scheme for encoding.</t>
      </section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>Rather than updating the Segment Messages defined in BTPU, this extension introduces two new pairs of Messages to carry the source and repair symbols of a BTPU Bundle protected with FEC.  The use of new types allows a deployment to select the use of FEC as appropriate on a per-transfer basis, perhaps associated with some upper layer concept of reliability for a particular transfer, or change in transmission environment.</t>
      <t>In the language of <xref section="2" sectionFormat="of" target="RFC6363"/>, the FEC Source Messages act as FEC Source Packets, and the FEC Repair Messages as FEC Repair Packets.  Within the context of a particular Transfer, the sequence of FEC Source Messages is considered the Source Flow, and the sequence of FEC Repair Messages the Repair Flow.</t>
      <t>The source and repair Messages are grouped into two pairs:</t>
      <dl>
        <dt>Pre-agreed FEC:</dt>
        <dd>
          <t>The <xref target="pre-agreed-source">Pre-agreed FEC Source</xref> and <xref target="pre-agreed-repair">Pre-agreed FEC Repair</xref> Messages provide a wire-efficient format, for use when the FEC Framework Configuration Information <xref section="5.5" sectionFormat="of" target="RFC6363"/> has been pre-agreed via some a-priori configuration or out-of-band mechanism.  Each Message carries an 8-bit FEC Instance ID that references pre-configured FEC scheme information.</t>
        </dd>
        <dt>Explicit FEC:</dt>
        <dd>
          <t>The <xref target="explicit-source">Explicit FEC Source</xref> and <xref target="explicit-repair">Explicit FEC Repair</xref> Messages include the FEC-Scheme-Specific Information (FSSI) in the Message content, allowing for the ad-hoc use of different FEC schemes and configuration, given underlying implementation support.  Each Message carries an 8-bit FEC Encoding ID and the FSSI elements required by the FEC scheme.</t>
        </dd>
      </dl>
      <t>The following table summarizes the differences between the two approaches:</t>
      <table align="left" anchor="tab-fec-comparison">
        <name>Comparison of Pre-agreed and Explicit FEC</name>
        <thead>
          <tr>
            <th align="left">Aspect</th>
            <th align="left">Pre-agreed FEC</th>
            <th align="left">Explicit FEC</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Configuration</td>
            <td align="left">Out-of-band or a-priori</td>
            <td align="left">Self-describing</td>
          </tr>
          <tr>
            <td align="left">FEC Identifier</td>
            <td align="left">FEC Instance ID (8-bit)</td>
            <td align="left">FEC Encoding ID (8-bit)</td>
          </tr>
          <tr>
            <td align="left">Per-Message Overhead</td>
            <td align="left">Lower (no FSSI)</td>
            <td align="left">Higher (includes FSSI)</td>
          </tr>
        </tbody>
      </table>
      <t>Irrespective of whether Pre-agreed or Explicit FEC is in use for a Transfer, the FEC Framework Configuration Information <bcp14>MUST NOT</bcp14> change mid-transfer.  A switch between Pre-agreed and Explicit FEC Messages within a Transfer is considered a change in FEC Framework Configuration Information, even if both describe the same configuration, as a receiver might not have the FEC Instance ID mapping needed to determine whether they do.  If a receiver detects a change in FEC Framework Configuration Information during a Transfer, it <bcp14>MUST</bcp14> consider any incomplete Transfer affected by the change as cancelled, as defined in <xref section="4.2" sectionFormat="of" target="BTPU"/>.</t>
      <section anchor="instance-id">
        <name>Pre-agreed FEC Instance ID</name>
        <t>When pre-agreed FEC is desired, a lookup table <bcp14>MUST</bcp14> be configured at the sender and all receivers that maps a unique identifier, the FEC Instance ID, to a particular FEC scheme and corresponding FSSI, such that each <xref target="pre-agreed-source">Pre-agreed FEC Source</xref> and <xref target="pre-agreed-repair">Pre-agreed FEC Repair</xref> Message can refer to the FEC mechanism in use by referencing the FEC Instance ID, rather than including all the FEC configuration information in each Message.</t>
        <t>The FEC Instance ID is an unsigned integer in the range 0..255 inclusive, and is carried in the respective FEC Messages encoded in the FEC Instance ID field.  Just like the FEC scheme and configuration, the FEC Instance ID <bcp14>MUST</bcp14> be the same for all Messages concerned with an individual Transfer.  If a receiver detects a change in FEC Instance ID during a Transfer, it <bcp14>MUST</bcp14> consider the Transfer cancelled, as defined in <xref section="4.2" sectionFormat="of" target="BTPU"/>.</t>
        <t>Configuration of the mapping of FEC Instance ID to FEC scheme information <bcp14>MUST</bcp14> be performed out-of-band, or via an a-priori configuration mechanism.</t>
      </section>
      <section anchor="fec-transfer-operation">
        <name>FEC Transfer Operation</name>
        <t>The FEC Source and FEC Repair Messages defined in this document are Transfer Messages, as defined in <xref target="BTPU"/>: they share the same Transfer Number space as the core BTPU Transfer Messages, and the Transfer Window algorithm defined in <xref target="BTPU"/> applies to them.  However, a sender <bcp14>MUST NOT</bcp14> mix FEC Messages and core BTPU Transfer Messages (Transfer Segment or Transfer End) within the same Transfer.  If a receiver detects such mixing, it <bcp14>MUST</bcp14> consider the Transfer cancelled, as defined in <xref section="4.2" sectionFormat="of" target="BTPU"/>.  The Transfer Cancel Message, as defined in <xref target="BTPU"/>, <bcp14>MAY</bcp14> be used to cancel an FEC Transfer.</t>
        <t>Unlike core BTPU, FEC Transfers do not use an explicit Transfer End Message to signal completion.  Instead, the FEC scheme determines when sufficient ADUs and Repair Symbols have been received to reconstruct the original bundle.  The Transfer Window algorithm provides the receiver with an upper bound on how long to wait for FEC Messages associated with a given Transfer before considering it complete or failed.  The Bundle Length Hint, if present, can be used to verify that the reconstructed bundle has the expected size.</t>
      </section>
    </section>
    <section anchor="message-definitions">
      <name>Message Definitions</name>
      <t>All new Messages introduced in this document follow the common message format as defined in <xref section="7" sectionFormat="of" target="BTPU"/>, and Hint Items <bcp14>MAY</bcp14> be included in these Messages.  The Bundle Length Hint, as defined in <xref target="BTPU"/>, is valid in the FEC Source and FEC Repair Messages defined in this document, where it signals the total length of the bundle being transferred.</t>
      <t>This specification deviates from the recommendation in <xref section="5.3" sectionFormat="of" target="RFC6363"/> by placing the Explicit Source FEC Payload ID before the Source Data, as BTPU has no capability analogous to common header compression, as found in Robust Header Compression (ROHC) <xref target="RFC3095"/>, and therefore to maintain consistency with other BTPU messages, the metadata precedes the data.</t>
      <t>Unlike the Transfer Segment and Transfer End Messages defined in <xref target="BTPU"/>, FEC Messages do not include a Segment Index field.  The FEC Payload IDs, as defined by the FEC scheme in use, serve the equivalent role of identifying and ordering source blocks and repair symbols for reassembly.</t>
      <section anchor="pre-agreed-source">
        <name>Pre-agreed FEC Source Message</name>
        <t>The Pre-agreed FEC Source Message is used to encapsulate an Application Data Unit (ADU), as defined in <xref section="2" sectionFormat="of" target="RFC6363"/>, of a Bundle Transfer that uses FEC with a pre-agreed configuration.  Multiple ADUs together form a Source Block for FEC encoding.</t>
        <t>A Pre-agreed FEC Source Message has a type of TBD1. The Message Content field is formatted as follows:</t>
        <artwork><![CDATA[
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transfer Number                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FEC Inst. ID  |   Explicit Source FEC Payload ID ...          :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       ... Source Data ...                     :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Transfer Number:</dt>
          <dd>
            <t>The numeric identifier of the Transfer that this ADU is part of, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>FEC Instance ID:</dt>
          <dd>
            <t>The <xref target="instance-id">FEC Instance ID</xref> of the pre-agreed FEC scheme and configuration in use for the Transfer, encoded as an 8-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>Explicit Source FEC Payload ID:</dt>
          <dd>
            <t>The Explicit Source FEC Payload ID, with the format defined by the FEC scheme.  It is <bcp14>RECOMMENDED</bcp14> that FEC schemes support the Generic Explicit Source FEC Payload ID format defined in <xref section="5.3.1" sectionFormat="of" target="RFC6363"/>.</t>
          </dd>
          <dt>Source Data:</dt>
          <dd>
            <t>The octets of the ADU, with the length calculated as the Message content length excluding the length of the Transfer Number, FEC Instance ID, and Explicit Source FEC Payload ID.</t>
          </dd>
        </dl>
      </section>
      <section anchor="explicit-source">
        <name>Explicit FEC Source Message</name>
        <t>The Explicit FEC Source Message is used to encapsulate an Application Data Unit (ADU), as defined in <xref section="2" sectionFormat="of" target="RFC6363"/>, of a Bundle Transfer that uses FEC with an explicit FEC scheme and configuration.  Multiple ADUs together form a Source Block for FEC encoding.</t>
        <t>An Explicit FEC Source Message has a type of TBD2. The Message Content field is formatted as follows:</t>
        <artwork><![CDATA[
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transfer Number                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FEC Enc. ID   | FEC-Scheme-Specific Information elements ...  :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Explicit Source FEC Payload ID ...                            :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       ... Source Data ...                     :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Transfer Number:</dt>
          <dd>
            <t>The numeric identifier of the Transfer that this ADU is part of, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>FEC Encoding ID:</dt>
          <dd>
            <t>A FEC Encoding ID, as defined in <xref section="5.6" sectionFormat="of" target="RFC6363"/>, encoded as an 8-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>FEC-Scheme-Specific Information elements:</dt>
          <dd>
            <t>Zero or more FEC-Scheme-Specific Information elements as defined in <xref section="5.5" sectionFormat="of" target="RFC6363"/>.  The binary encoding format and length of these elements is defined by the FEC scheme identified by the FEC Encoding ID.</t>
          </dd>
          <dt>Explicit Source FEC Payload ID:</dt>
          <dd>
            <t>The Explicit Source FEC Payload ID, with the format defined by the FEC scheme.  It is <bcp14>RECOMMENDED</bcp14> that FEC schemes support the Generic Explicit Source FEC Payload ID format defined in <xref section="5.3.1" sectionFormat="of" target="RFC6363"/>.</t>
          </dd>
          <dt>Source Data:</dt>
          <dd>
            <t>The octets of the ADU, with the length calculated as the Message content length excluding the length of the Transfer Number, FEC Encoding ID, FEC-Scheme-Specific Information elements, and Explicit Source FEC Payload ID.</t>
          </dd>
        </dl>
      </section>
      <section anchor="pre-agreed-repair">
        <name>Pre-agreed FEC Repair Message</name>
        <t>The Pre-agreed FEC Repair Message is used to encapsulate the Repair Symbols (<xref section="2" sectionFormat="of" target="RFC6363"/>) of a Bundle Transfer that uses FEC with a pre-agreed configuration.</t>
        <t>A Pre-agreed FEC Repair Message has a type of TBD3. The Message Content field is formatted as follows:</t>
        <artwork><![CDATA[
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transfer Number                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FEC Inst. ID  |            Repair FEC Payload ID ...          :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  ... Repair Symbol Data ...                   :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Transfer Number:</dt>
          <dd>
            <t>The numeric identifier of the Transfer that these repair symbols are part of, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>FEC Instance ID:</dt>
          <dd>
            <t>The <xref target="instance-id">FEC Instance ID</xref> of the pre-agreed FEC scheme and configuration in use for the Transfer, encoded as an 8-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>Repair FEC Payload ID:</dt>
          <dd>
            <t>The Repair FEC Payload ID as defined in <xref section="5.4" sectionFormat="of" target="RFC6363"/>, with the format specified by the FEC scheme.</t>
          </dd>
          <dt>Repair Symbol Data:</dt>
          <dd>
            <t>The octets of the repair symbols, with the length calculated as the Message content length excluding the length of the Transfer Number, FEC Instance ID, and Repair FEC Payload ID.</t>
          </dd>
        </dl>
      </section>
      <section anchor="explicit-repair">
        <name>Explicit FEC Repair Message</name>
        <t>The Explicit FEC Repair Message is used to encapsulate the Repair Symbols (<xref section="2" sectionFormat="of" target="RFC6363"/>) of a Bundle Transfer that uses FEC with an explicit FEC scheme and configuration.</t>
        <t>An Explicit FEC Repair Message has a type of TBD4. The Message Content field is formatted as follows:</t>
        <artwork><![CDATA[
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transfer Number                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FEC Enc. ID   | FEC-Scheme-Specific Information elements ...  :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Repair FEC Payload ID ...                                     :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  ... Repair Symbol Data ...                   :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Transfer Number:</dt>
          <dd>
            <t>The numeric identifier of the Transfer that these repair symbols are part of, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>FEC Encoding ID:</dt>
          <dd>
            <t>A FEC Encoding ID, as defined in <xref section="5.6" sectionFormat="of" target="RFC6363"/>, encoded as an 8-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>FEC-Scheme-Specific Information elements:</dt>
          <dd>
            <t>Zero or more FEC-Scheme-Specific Information elements as defined in <xref section="5.5" sectionFormat="of" target="RFC6363"/>.  The binary encoding format and length of these elements is defined by the FEC scheme identified by the FEC Encoding ID.</t>
          </dd>
          <dt>Repair FEC Payload ID:</dt>
          <dd>
            <t>The Repair FEC Payload ID as defined in <xref section="5.4" sectionFormat="of" target="RFC6363"/>, with the format specified by the FEC scheme.</t>
          </dd>
          <dt>Repair Symbol Data:</dt>
          <dd>
            <t>The octets of the repair symbols, with the length calculated as the Message content length excluding the length of the Transfer Number, FEC Encoding ID, FEC-Scheme-Specific Information elements, and Repair FEC Payload ID.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The new Messages and mechanisms in this document do not add additional security considerations, nor impact the existing security considerations outlined in <xref target="BTPU"/> and <xref target="RFC6363"/>.</t>
      <t>FEC mechanisms do not provide authentication or integrity protection.  Malicious or corrupted FEC Messages could cause a receiver to reconstruct an incorrect bundle.  If a receiver detects an error during FEC decoding, it <bcp14>SHOULD</bcp14> cancel the Transfer as defined in <xref section="4.2" sectionFormat="of" target="BTPU"/>.  Additionally, deployments <bcp14>SHOULD</bcp14> use upper-layer integrity mechanisms, such as BPSec <xref target="RFC9172"/>, to detect corruption in reconstructed bundles.  When upper-layer integrity verification fails, implementations <bcp14>SHOULD</bcp14> discard the reconstructed bundle as per the upper-layer's security policy.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to assign new values from the "BTPU Message Types" registry for the new Message types defined in this document:</t>
      <table align="left" anchor="tab-iana-message-types">
        <name>New BTPU Message Types</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Message Type</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD1</td>
            <td align="left">Pre-agreed FEC Source Message</td>
          </tr>
          <tr>
            <td align="left">TBD2</td>
            <td align="left">Explicit FEC Source Message</td>
          </tr>
          <tr>
            <td align="left">TBD3</td>
            <td align="left">Pre-agreed FEC Repair Message</td>
          </tr>
          <tr>
            <td align="left">TBD4</td>
            <td align="left">Explicit FEC Repair Message</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="BTPU">
          <front>
            <title>Bundle Transfer Protocol - Unidirectional</title>
            <author fullname="Rick Taylor" initials="R." surname="Taylor">
              <organization>Aalyria Technologies</organization>
            </author>
            <date day="15" month="October" year="2026"/>
            <abstract>
              <t>   This document defines a protocol for the unidirectional transfer of
   large binary objects, typically Bundle Protocol version 7 bundles,
   between two nodes connected by a unidirectional, unreliable, frame-
   based link-layer protocol, without requiring IP services.

   The protocol does not require a return path for acknowledgements, but
   instead supports data repetition as a mechanism to protect against
   data loss.  It fully supports the disaggregation of flows of binary
   objects of different priority, preventing head-of-line blocking
   impacting performance.

   The wire format of the protocol is designed to enable performant
   implementation in hardware or software, with the aim of enabling
   protocol implementations to run at the line-rate of the underlying
   link-layer protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dtn-btpu-05"/>
        </reference>
        <reference anchor="RFC6363">
          <front>
            <title>Forward Error Correction (FEC) Framework</title>
            <author fullname="M. Watson" initials="M." surname="Watson"/>
            <author fullname="A. Begen" initials="A." surname="Begen"/>
            <author fullname="V. Roca" initials="V." surname="Roca"/>
            <date month="October" year="2011"/>
            <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. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6363"/>
          <seriesInfo name="DOI" value="10.17487/RFC6363"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <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>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9172">
          <front>
            <title>Bundle Protocol Security (BPSec)</title>
            <author fullname="E. Birrane, III" initials="E." surname="Birrane, III"/>
            <author fullname="K. McKeever" initials="K." surname="McKeever"/>
            <date month="January" year="2022"/>
            <abstract>
              <t>This document defines a security protocol providing data integrity and confidentiality services for the Bundle Protocol (BP).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9172"/>
          <seriesInfo name="DOI" value="10.17487/RFC9172"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9171">
          <front>
            <title>Bundle Protocol Version 7</title>
            <author fullname="S. Burleigh" initials="S." surname="Burleigh"/>
            <author fullname="K. Fall" initials="K." surname="Fall"/>
            <author fullname="E. Birrane, III" initials="E." surname="Birrane, III"/>
            <date month="January" year="2022"/>
            <abstract>
              <t>This document presents a specification for the Bundle Protocol, adapted from the experimental Bundle Protocol specification developed by the Delay-Tolerant Networking Research Group of the Internet Research Task Force and documented in RFC 5050.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9171"/>
          <seriesInfo name="DOI" value="10.17487/RFC9171"/>
        </reference>
        <reference anchor="RFC3095">
          <front>
            <title>RObust Header Compression (ROHC): Framework and four profiles: RTP, UDP, ESP, and uncompressed</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="C. Burmeister" initials="C." surname="Burmeister"/>
            <author fullname="M. Degermark" initials="M." surname="Degermark"/>
            <author fullname="H. Fukushima" initials="H." surname="Fukushima"/>
            <author fullname="H. Hannu" initials="H." surname="Hannu"/>
            <author fullname="L-E. Jonsson" surname="L-E. Jonsson"/>
            <author fullname="R. Hakenberg" initials="R." surname="Hakenberg"/>
            <author fullname="T. Koren" initials="T." surname="Koren"/>
            <author fullname="K. Le" initials="K." surname="Le"/>
            <author fullname="Z. Liu" initials="Z." surname="Liu"/>
            <author fullname="A. Martensson" initials="A." surname="Martensson"/>
            <author fullname="A. Miyazaki" initials="A." surname="Miyazaki"/>
            <author fullname="K. Svanbro" initials="K." surname="Svanbro"/>
            <author fullname="T. Wiebke" initials="T." surname="Wiebke"/>
            <author fullname="T. Yoshimura" initials="T." surname="Yoshimura"/>
            <author fullname="H. Zheng" initials="H." surname="Zheng"/>
            <date month="July" year="2001"/>
            <abstract>
              <t>This document specifies a highly robust and efficient header compression scheme for RTP/UDP/IP (Real-Time Transport Protocol, User Datagram Protocol, Internet Protocol), UDP/IP, and ESP/IP (Encapsulating Security Payload) headers. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3095"/>
          <seriesInfo name="DOI" value="10.17487/RFC3095"/>
        </reference>
      </references>
    </references>
    <?line 278?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author is indebted to the authors of the FECFRAME framework, and hopes that its successful application in areas outside RTP validates all the obvious hard work that went into making RFC6363 generic and reusable.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
H+U8nH3lAHh6ezaoMfRygOz/AKCMchufSwAA

-->

</rfc>
