<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-dtn-bpbis-31" indexInclude="true" ipr="trust200902" number="9171" prepTime="2022-01-31T20:36:10" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="5" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-dtn-bpbis-31" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9171" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title>Bundle Protocol Version 7</title>
    <seriesInfo name="RFC" value="9171" stream="IETF"/>
    <author initials="S." surname="Burleigh" fullname="Scott Burleigh">
      <organization showOnFrontPage="true">IPNGROUP</organization>
      <address>
        <postal>
          <street>1435 Woodhurst Blvd.</street>
          <city>McLean</city>
          <region>VA</region>
          <code>22102</code>
          <country>United States of America</country>
        </postal>
        <email>sburleig.sb@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Fall" fullname="Kevin Fall">
      <organization showOnFrontPage="true">Roland Computing Services</organization>
      <address>
        <postal>
          <street>3871 Piedmont Ave. Suite 8</street>
          <city>Oakland</city>
          <region>CA</region>
          <code>94611</code>
          <country>United States of America</country>
        </postal>
        <email>kfall+rcs@kfall.com</email>
      </address>
    </author>
    <author initials="E." surname="Birrane, III" fullname="Edward J. Birrane, III">
      <organization abbrev="APL, Johns Hopkins University" showOnFrontPage="true">Johns Hopkins University Applied Physics Laboratory</organization>
      <address>
        <postal>
          <street>11100 Johns Hopkins Rd</street>
          <city>Laurel</city>
          <region>MD</region>
          <code>20723</code>
          <country>United States of America</country>
        </postal>
        <phone>+1 443 778 7423</phone>
        <email>Edward.Birrane@jhuapl.edu</email>
      </address>
    </author>
    <date month="01" year="2022"/>
    <workgroup>Networking Working Group</workgroup>
    <keyword>Delay-tolerant networking</keyword>
    <keyword>disruption-tolerant networking</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">
   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>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9171" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2022 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-conventions-used-in-this-do">Conventions Used in This Document</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-service-description">Service Description</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-definitions">Definitions</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-discussion-of-bp-concepts">Discussion of BP Concepts</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-services-offered-by-bundle-">Services Offered by Bundle Protocol Agents</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-format">Bundle Format</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-structure">Bundle Structure</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bp-fundamental-data-structu">BP Fundamental Data Structures</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.2.2">
                  <li pn="section-toc.1-1.4.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.2.2.1.1"><xref derivedContent="4.2.1" format="counter" sectionFormat="of" target="section-4.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-crc-type">CRC Type</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.4.2.2.2.2.1"><xref derivedContent="4.2.2" format="counter" sectionFormat="of" target="section-4.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-crc">CRC</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.2.2.3">
                    <t indent="0" pn="section-toc.1-1.4.2.2.2.3.1"><xref derivedContent="4.2.3" format="counter" sectionFormat="of" target="section-4.2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-processing-control-f">Bundle Processing Control Flags</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.2.2.4">
                    <t indent="0" pn="section-toc.1-1.4.2.2.2.4.1"><xref derivedContent="4.2.4" format="counter" sectionFormat="of" target="section-4.2.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-block-processing-control-fl">Block Processing Control Flags</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.2.2.5">
                    <t indent="0" pn="section-toc.1-1.4.2.2.2.5.1"><xref derivedContent="4.2.5" format="counter" sectionFormat="of" target="section-4.2.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-identifiers">Identifiers</xref></t>
                    <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.2.2.5.2">
                      <li pn="section-toc.1-1.4.2.2.2.5.2.1">
                        <t indent="0" pn="section-toc.1-1.4.2.2.2.5.2.1.1"><xref derivedContent="4.2.5.1" format="counter" sectionFormat="of" target="section-4.2.5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-endpoint-id">Endpoint ID</xref></t>
                        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.2.2.5.2.1.2">
                          <li pn="section-toc.1-1.4.2.2.2.5.2.1.2.1">
                            <t indent="0" pn="section-toc.1-1.4.2.2.2.5.2.1.2.1.1"><xref derivedContent="4.2.5.1.1" format="counter" sectionFormat="of" target="section-4.2.5.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-dtn-uri-scheme">The dtn URI Scheme</xref></t>
                          </li>
                          <li pn="section-toc.1-1.4.2.2.2.5.2.1.2.2">
                            <t indent="0" pn="section-toc.1-1.4.2.2.2.5.2.1.2.2.1"><xref derivedContent="4.2.5.1.2" format="counter" sectionFormat="of" target="section-4.2.5.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-ipn-uri-scheme">The ipn URI Scheme</xref></t>
                          </li>
                        </ul>
                      </li>
                      <li pn="section-toc.1-1.4.2.2.2.5.2.2">
                        <t indent="0" pn="section-toc.1-1.4.2.2.2.5.2.2.1"><xref derivedContent="4.2.5.2" format="counter" sectionFormat="of" target="section-4.2.5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-node-id">Node ID</xref></t>
                      </li>
                    </ul>
                  </li>
                  <li pn="section-toc.1-1.4.2.2.2.6">
                    <t indent="0" pn="section-toc.1-1.4.2.2.2.6.1"><xref derivedContent="4.2.6" format="counter" sectionFormat="of" target="section-4.2.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-dtn-time">DTN Time</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.2.2.7">
                    <t indent="0" pn="section-toc.1-1.4.2.2.2.7.1"><xref derivedContent="4.2.7" format="counter" sectionFormat="of" target="section-4.2.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-creation-timestamp">Creation Timestamp</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.2.2.8">
                    <t indent="0" pn="section-toc.1-1.4.2.2.2.8.1"><xref derivedContent="4.2.8" format="counter" sectionFormat="of" target="section-4.2.8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-block-type-specific-data">Block-Type-Specific Data</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-block-structures">Block Structures</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.3.2">
                  <li pn="section-toc.1-1.4.2.3.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.3.2.1.1"><xref derivedContent="4.3.1" format="counter" sectionFormat="of" target="section-4.3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-primary-bundle-block">Primary Bundle Block</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.3.2.2">
                    <t indent="0" pn="section-toc.1-1.4.2.3.2.2.1"><xref derivedContent="4.3.2" format="counter" sectionFormat="of" target="section-4.3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-canonical-bundle-block-form">Canonical Bundle Block Format</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.4">
                <t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent="4.4" format="counter" sectionFormat="of" target="section-4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-extension-blocks">Extension Blocks</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.4.2">
                  <li pn="section-toc.1-1.4.2.4.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.1.1"><xref derivedContent="4.4.1" format="counter" sectionFormat="of" target="section-4.4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-previous-node">Previous Node</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.4.2.2">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.2.1"><xref derivedContent="4.4.2" format="counter" sectionFormat="of" target="section-4.4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-age">Bundle Age</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.4.2.3">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.3.1"><xref derivedContent="4.4.3" format="counter" sectionFormat="of" target="section-4.4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-hop-count">Hop Count</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-processing">Bundle Processing</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-generation-of-administrativ">Generation of Administrative Records</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-transmission">Bundle Transmission</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.3">
                <t indent="0" pn="section-toc.1-1.5.2.3.1"><xref derivedContent="5.3" format="counter" sectionFormat="of" target="section-5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-dispatching">Bundle Dispatching</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.4">
                <t indent="0" pn="section-toc.1-1.5.2.4.1"><xref derivedContent="5.4" format="counter" sectionFormat="of" target="section-5.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-forwarding">Bundle Forwarding</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.4.2">
                  <li pn="section-toc.1-1.5.2.4.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.4.2.1.1"><xref derivedContent="5.4.1" format="counter" sectionFormat="of" target="section-5.4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-forwarding-contraindicated">Forwarding Contraindicated</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.4.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.4.2.2.1"><xref derivedContent="5.4.2" format="counter" sectionFormat="of" target="section-5.4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-forwarding-failed">Forwarding Failed</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.5.2.5">
                <t indent="0" pn="section-toc.1-1.5.2.5.1"><xref derivedContent="5.5" format="counter" sectionFormat="of" target="section-5.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-expiration">Bundle Expiration</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.6">
                <t indent="0" pn="section-toc.1-1.5.2.6.1"><xref derivedContent="5.6" format="counter" sectionFormat="of" target="section-5.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-reception">Bundle Reception</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.7">
                <t indent="0" pn="section-toc.1-1.5.2.7.1"><xref derivedContent="5.7" format="counter" sectionFormat="of" target="section-5.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-local-bundle-delivery">Local Bundle Delivery</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.8">
                <t indent="0" pn="section-toc.1-1.5.2.8.1"><xref derivedContent="5.8" format="counter" sectionFormat="of" target="section-5.8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-fragmentation">Bundle Fragmentation</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.9">
                <t indent="0" pn="section-toc.1-1.5.2.9.1"><xref derivedContent="5.9" format="counter" sectionFormat="of" target="section-5.9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-application-data-unit-reass">Application Data Unit Reassembly</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.10">
                <t indent="0" pn="section-toc.1-1.5.2.10.1"><xref derivedContent="5.10" format="counter" sectionFormat="of" target="section-5.10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-deletion">Bundle Deletion</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.11">
                <t indent="0" pn="section-toc.1-1.5.2.11.1"><xref derivedContent="5.11" format="counter" sectionFormat="of" target="section-5.11"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-discarding-a-bundle">Discarding a Bundle</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.12">
                <t indent="0" pn="section-toc.1-1.5.2.12.1"><xref derivedContent="5.12" format="counter" sectionFormat="of" target="section-5.12"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-canceling-a-transmission">Canceling a Transmission</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-administrative-record-proce">Administrative Record Processing</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-administrative-records">Administrative Records</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2.1.2">
                  <li pn="section-toc.1-1.6.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.6.2.1.2.1.1"><xref derivedContent="6.1.1" format="counter" sectionFormat="of" target="section-6.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-status-reports">Bundle Status Reports</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-generation-of-administrative">Generation of Administrative Records</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-services-required-of-the-co">Services Required of the Convergence Layer</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-convergence-layer">The Convergence Layer</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-summary-of-convergence-laye">Summary of Convergence-Layer Services</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.9.2">
              <li pn="section-toc.1-1.9.2.1">
                <t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent="9.1" format="counter" sectionFormat="of" target="section-9.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-block-types">Bundle Block Types</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.2">
                <t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent="9.2" format="counter" sectionFormat="of" target="section-9.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-primary-bundle-protocol-ver">Primary Bundle Protocol Version</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.3">
                <t indent="0" pn="section-toc.1-1.9.2.3.1"><xref derivedContent="9.3" format="counter" sectionFormat="of" target="section-9.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-processing-control-fl">Bundle Processing Control Flags</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.4">
                <t indent="0" pn="section-toc.1-1.9.2.4.1"><xref derivedContent="9.4" format="counter" sectionFormat="of" target="section-9.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-block-processing-control-fla">Block Processing Control Flags</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.5">
                <t indent="0" pn="section-toc.1-1.9.2.5.1"><xref derivedContent="9.5" format="counter" sectionFormat="of" target="section-9.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-status-report-reason">Bundle Status Report Reason Codes</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.6">
                <t indent="0" pn="section-toc.1-1.9.2.6.1"><xref derivedContent="9.6" format="counter" sectionFormat="of" target="section-9.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bundle-protocol-uri-scheme-">Bundle Protocol URI Scheme Types</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.7">
                <t indent="0" pn="section-toc.1-1.9.2.7.1"><xref derivedContent="9.7" format="counter" sectionFormat="of" target="section-9.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-dtn-uri-scheme">dtn URI Scheme</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.8">
                <t indent="0" pn="section-toc.1-1.9.2.8.1"><xref derivedContent="9.8" format="counter" sectionFormat="of" target="section-9.8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ipn-uri-scheme">ipn URI Scheme</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" format="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.10.2">
              <li pn="section-toc.1-1.10.2.1">
                <t indent="0" pn="section-toc.1-1.10.2.1.1"><xref derivedContent="10.1" format="counter" sectionFormat="of" target="section-10.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.10.2.2">
                <t indent="0" pn="section-toc.1-1.10.2.2.1"><xref derivedContent="10.2" format="counter" sectionFormat="of" target="section-10.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-significant-changes-from-rf">Significant Changes from RFC 5050</xref></t>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="Appendix B" format="default" sectionFormat="of" target="section-appendix.b"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-cddl-expression">CDDL Expression</xref></t>
          </li>
          <li pn="section-toc.1-1.13">
            <t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.14">
            <t indent="0" pn="section-toc.1-1.14.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="sect-1" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">
   Since the publication of the Bundle Protocol specification
   (Experimental RFC 5050 <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/>) in 2007, the Delay-Tolerant
   Networking (DTN) Bundle Protocol (BP) has been implemented in multiple
   programming languages and deployed to a wide variety of computing
   platforms.  This implementation and deployment experience has
   identified opportunities for making the protocol simpler, more
   capable, and easier to use.  The present document, standardizing the
   Bundle Protocol, is adapted from RFC 5050 in that context,
   reflecting lessons learned.  Significant changes from the Bundle
   Protocol specification defined in RFC 5050 are listed in <xref target="app-a" format="default" sectionFormat="of" derivedContent="Appendix A"/>.</t>
      <t indent="0" pn="section-1-2">
   This document describes BP version 7 (BPv7).</t>
      <t indent="0" pn="section-1-3">
   Delay-Tolerant Networking is a network architecture providing
   communications in and/or through highly stressed environments.
   Stressed networking environments include those with intermittent
   connectivity, large and/or variable delays, and high bit error
   rates.  To provide its services, BP may be viewed as sitting at the
   application layer of some number of constituent networks, forming a
   store-carry-forward overlay network.  Key capabilities of BP
   include:

      </t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-1-4">
        <li pn="section-1-4.1">Ability to use physical motility for the movement of data.</li>
        <li pn="section-1-4.2">Ability to move the responsibility for error control from one
            node to another.</li>
        <li pn="section-1-4.3">Ability to cope with intermittent connectivity, including cases
           where the sender and receiver are not concurrently present in
           the network.</li>
        <li pn="section-1-4.4">Ability to take advantage of scheduled, predicted, and
           opportunistic connectivity, whether bidirectional or
           unidirectional, in addition to continuous connectivity.</li>
        <li pn="section-1-4.5">Late binding of overlay-network endpoint identifiers to
           underlying constituent network addresses.</li>
      </ul>
      <t indent="0" pn="section-1-5">
   For descriptions of these capabilities and the rationale for the DTN
   architecture, see <xref target="RFC4838" format="default" sectionFormat="of" derivedContent="ARCH"/> and <xref target="SIGC" format="default" sectionFormat="of" derivedContent="SIGC"/>.</t>
      <t indent="0" pn="section-1-6">
   BP's location within the standard protocol stack is as shown in <xref target="fig-1" format="default" sectionFormat="of" derivedContent="Figure 1"/>.
   BP uses underlying "integrated" transport and/or network protocols for
   communications within a given constituent network.  The layer at which
   those underlying protocols are located is here termed the "convergence
   layer", and the interface between the Bundle Protocol and a specific
   underlying protocol is termed a "convergence-layer adapter".</t>
      <t indent="0" pn="section-1-7">
   <xref target="fig-1" format="default" sectionFormat="of" derivedContent="Figure 1"/> shows three distinct transport and network protocols
   (denoted T1/N1, T2/N2, and T3/N3).</t>
      <figure anchor="fig-1" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-the-bundle-protocol-in-the-">The Bundle Protocol in the Protocol Stack Model</name>
        <artwork name="" type="ascii-art" align="left" alt="" pn="section-1-8.1">
+-----------+                                         +-----------+
|   BP app  |                                         |   BP app  |
+---------v-|   +-&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;v-+     +-&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;v-+   +-^---------+
|   BP    v |   | ^    BP   v |     | ^   BP    v |   | ^   BP    |
+---------v-+   +-^---------v-+     +-^---------v-+   +-^---------+
| T1      v |   + ^  T1/T2  v |     + ^  T2/T3  v |   | ^ T3      |
+---------v-+   +-^---------v-+     +-^---------v +   +-^---------+
| N1      v |   | ^  N1/N2  v |     | ^  N2/N3  v |   | ^ N3      |
+---------v-+   +-^---------v +     +-^---------v-+   +-^---------+
|         &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;^         &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;^         &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;^         |
+-----------+   +-------------+     +-------------+   +-----------+
|                     |                     |                     |
|&lt;---- A network ----&gt;|                     |&lt;---- A network ----&gt;|
|                     |                     |                     |
</artwork>
      </figure>
      <t indent="0" pn="section-1-9">
   This document describes the format of the protocol data units (PDUs)
   (called "bundles") passed between entities participating in BP
   communications.</t>
      <t indent="0" pn="section-1-10">
   The entities are referred to as "bundle nodes". This document does
   not address:

      </t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-1-11">
        <li pn="section-1-11.1">Operations in the convergence-layer adapters that bundle nodes use
        to transport data through specific types of internets.  (However, the
        document does discuss the services that must be provided by each
        adapter at the convergence layer.)</li>
        <li pn="section-1-11.2">The bundle route computation algorithm.</li>
        <li pn="section-1-11.3">Mechanisms for populating the routing or forwarding information
           bases of bundle nodes.</li>
        <li pn="section-1-11.4">The mechanisms for securing bundles en route.</li>
        <li pn="section-1-11.5"> The mechanisms for managing bundle nodes.</li>
      </ul>
      <t indent="0" pn="section-1-12">
   Note that implementations of the specification presented in this
   document will not be interoperable with implementations of RFC 5050.</t>
    </section>
    <section anchor="sect-2" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-conventions-used-in-this-do">Conventions Used in This Document</name>
      <t indent="0" pn="section-2-1">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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only
       when, they appear in all capitals, as shown here.</t>
    </section>
    <section anchor="sect-3" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-service-description">Service Description</name>
      <section anchor="sect-3.1" numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-definitions">Definitions</name>
        <dl indent="3" newline="false" spacing="normal" pn="section-3.1-1">
          <dt pn="section-3.1-1.1">Bundle:</dt>
          <dd pn="section-3.1-1.2">A bundle is a PDU of BP, so named because
   negotiation of the parameters of a data exchange may be impractical
   in a delay-tolerant network: it is often better practice to "bundle"
   with a unit of application data all metadata that might be needed in
   order to make the data immediately usable when delivered to the
   application. Each bundle comprises a sequence of two or more
   "blocks" of protocol data, which serve various purposes.</dd>
          <dt pn="section-3.1-1.3">Block:</dt>
          <dd pn="section-3.1-1.4">A Bundle Protocol block is one of the protocol data
   structures that together constitute a well-formed bundle.</dd>
          <dt pn="section-3.1-1.5">Application Data Unit:</dt>
          <dd pn="section-3.1-1.6">An application data unit (ADU) is the unit
   of data whose conveyance to the bundle's destination is the purpose
   for the transmission of some bundle that is not a fragment (as
   defined below).</dd>
          <dt pn="section-3.1-1.7">Bundle payload:</dt>
          <dd pn="section-3.1-1.8">A bundle payload (or simply "payload") is the
   content of the bundle's payload block. The terms "bundle content",
   "bundle payload", and "payload" are used interchangeably in this
   document.  For a bundle that is not a fragment (as defined below),
   the payload is an ADU.</dd>
          <dt pn="section-3.1-1.9">Partial payload:</dt>
          <dd pn="section-3.1-1.10">A partial payload is a payload that comprises
   either the first N bytes or the last N bytes of some other payload
   of length M, such that 0 &lt; N &lt; M.  Note that every partial payload is a payload and therefore can be further subdivided into partial payloads.</dd>
          <dt pn="section-3.1-1.11">Fragment:</dt>
          <dd pn="section-3.1-1.12">A fragment, a.k.a. "fragmentary bundle", is a bundle
   whose payload block contains a partial payload.</dd>
          <dt pn="section-3.1-1.13">Bundle node:</dt>
          <dd pn="section-3.1-1.14">A bundle node (or, in the context of this document,
   simply a "node") is any entity that can send and/or receive bundles.
   Each bundle node has three conceptual components, defined below, as
   shown in <xref target="fig-2" format="default" sectionFormat="of" derivedContent="Figure 2"/>: a "Bundle Protocol Agent", a set of zero or more
   "convergence-layer adapters", and an "application agent".
 ("CL1 PDUs" are the PDUs of the convergence-layer protocol used in network 1.)</dd>
        </dl>
        <figure anchor="fig-2" align="left" suppress-title="false" pn="figure-2">
          <name slugifiedName="name-components-of-a-bundle-node">Components of a Bundle Node</name>
          <artwork name="" type="ascii-art" align="left" alt="" pn="section-3.1-2.1">
+-----------------------------------------------------------+
|Node                                                       |
|                                                           |
| +-------------------------------------------------------+ |
| |Application Agent                                      | |
| |                                                       | |
| | +--------------------------+ +----------------------+ | |
| | |Administrative element    | |Application-specific  | | |
| | |                          | |element               | | |
| | |                          | |                      | | |
| | +--------------------------+ +----------------------+ | |
| |                ^                          ^           | |
| |           Admin|records        Application|data       | |
| |                |                          |           | |
| +----------------v--------------------------v-----------+ |
|                               ^                           |
|                               | ADUs                      |
|                               |                           |
| +-----------------------------v-------------------------+ |
| |Bundle Protocol Agent                                  | |
| |                                                       | |
| |                                                       | |
| +-------------------------------------------------------+ |
|        ^                 ^                        ^       |
|        | Bundles         | Bundles        Bundles |       |
|        |                 |                        |       |
| +------v-----+     +-----v------+           +-----v-----+ |
| |CLA 1       |     |CLA 2       |           |CLA n      | |
| |            |     |            |   . . .   |           | |
| |            |     |            |           |           | |
+-+------------+-----+------------+-----------+-----------+-+
         ^                 ^                        ^
      CL1|PDUs          CL2|PDUs                 CLn|PDUs
         |                 |                        |
  +------v-----+     +-----v------+           +-----v-----+
   Network 1          Network 2                Network n
</artwork>
        </figure>
        <dl indent="3" newline="false" spacing="normal" pn="section-3.1-3">
          <dt pn="section-3.1-3.1">Bundle Protocol Agent:</dt>
          <dd pn="section-3.1-3.2">The Bundle Protocol Agent (BPA) of a node is
   the node component that offers the BP services and executes the
   procedures of the Bundle Protocol.</dd>
          <dt pn="section-3.1-3.3">Convergence-layer adapter:</dt>
          <dd pn="section-3.1-3.4">A convergence-layer adapter (CLA) is a
   node component that sends and receives bundles on behalf of the BPA,
   utilizing the services of some "integrated" protocol stack that is
   supported in one of the networks within which the node is
   functionally located.</dd>
          <dt pn="section-3.1-3.5">Application agent:</dt>
          <dd pn="section-3.1-3.6">The application agent (AA) of a node is the node
   component that utilizes the BP services to effect communication for
   some user purpose. The application agent in turn has two elements:
   an administrative element and an application-specific element.</dd>
          <dt pn="section-3.1-3.7">Application-specific element:</dt>
          <dd pn="section-3.1-3.8">The application-specific element of
   an AA is the node component that constructs, requests transmission
   of, accepts delivery of, and processes units of user application
   data.</dd>
          <dt pn="section-3.1-3.9">Administrative element:</dt>
          <dd pn="section-3.1-3.10">The administrative element of an AA is the
   node component that constructs and requests transmission of
   administrative records (defined below), including status reports,
   and accepts delivery of and processes any administrative records
   that the node receives.</dd>
          <dt pn="section-3.1-3.11">Administrative record:</dt>
          <dd pn="section-3.1-3.12">A BP administrative record is an ADU that is exchanged between the administrative elements of
   nodes' application agents for some BP administrative purpose.  The
   only administrative record defined in this specification is the
   status report, discussed later.</dd>
          <dt pn="section-3.1-3.13">Bundle endpoint:</dt>
          <dd pn="section-3.1-3.14">A bundle endpoint (or simply "endpoint") is a set
   of zero or more bundle nodes that all identify themselves for BP
   purposes by some common identifier, called a "bundle endpoint ID"
   (or, in this document, simply "endpoint ID"); endpoint IDs are
   described in detail in <xref target="sect-4.2.5.1" format="default" sectionFormat="of" derivedContent="Section 4.2.5.1"/>.</dd>
          <dt pn="section-3.1-3.15">Singleton endpoint:</dt>
          <dd pn="section-3.1-3.16">A singleton endpoint is an endpoint that always
   contains exactly one member.</dd>
          <dt pn="section-3.1-3.17">Registration:</dt>
          <dd pn="section-3.1-3.18">A registration is the state machine characterizing a
   given node's membership in a given endpoint.  Any single
   registration has an associated delivery failure action as defined
   below and must at any time be in one of two states: Active or
   Passive.  Registrations are local; information about a node's
   registrations is not expected to be available at other nodes, and
   the Bundle Protocol does not include a mechanism for distributing
   information about registrations.</dd>
          <dt pn="section-3.1-3.19">Delivery:</dt>
          <dd pn="section-3.1-3.20">A bundle is considered to have been delivered at a node
   subject to a registration as soon as the ADU that
   is the payload of the bundle, together with any relevant metadata
   (an implementation matter), has been presented to the node's
   application agent in a manner consistent with the state of that
   registration.</dd>
          <dt pn="section-3.1-3.21">Deliverability:</dt>
          <dd pn="section-3.1-3.22">A bundle is considered "deliverable" subject to a
   registration if and only if (a) the bundle's destination endpoint is
   the endpoint with which the registration is associated, (b) the
   bundle has not yet been delivered subject to this registration, and
   (c) the bundle has not yet been "abandoned" (as defined below)
   subject to this registration.</dd>
          <dt pn="section-3.1-3.23">Abandonment:</dt>
          <dd pn="section-3.1-3.24">To abandon a bundle subject to some registration is to
   assert that the bundle is not deliverable subject to that
   registration.</dd>
          <dt pn="section-3.1-3.25">Delivery failure action:</dt>
          <dd pn="section-3.1-3.26">The delivery failure action of a
   registration is the action that is to be taken when a bundle that is
   "deliverable" subject to that registration is received at a time
   when the registration is in the Passive state.</dd>
          <dt pn="section-3.1-3.27">Destination:</dt>
          <dd pn="section-3.1-3.28">The destination of a bundle is the endpoint comprising
   the node(s) at which the bundle is to be delivered (as defined
   above).</dd>
          <dt pn="section-3.1-3.29">Transmission:</dt>
          <dd pn="section-3.1-3.30">A transmission is an attempt by a node's BPA to cause
   copies of a bundle to be delivered to one or more of the nodes that
   are members of some endpoint (the bundle's destination) in response
   to a transmission request issued by the node's application agent.</dd>
          <dt pn="section-3.1-3.31">Forwarding:</dt>
          <dd pn="section-3.1-3.32">To forward a bundle to a node is to invoke the services
   of one or more CLAs in a sustained effort to cause a copy of the
   bundle to be received by that node.</dd>
          <dt pn="section-3.1-3.33">Discarding:</dt>
          <dd pn="section-3.1-3.34">To discard a bundle is to cease all operations on the
   bundle and functionally erase all references to it.  The specific
   procedures by which this is accomplished are an implementation
   matter.</dd>
          <dt pn="section-3.1-3.35">Retention constraint:</dt>
          <dd pn="section-3.1-3.36">A retention constraint is an element of the
   state of a bundle that prevents the bundle from being discarded.
   That is, a bundle cannot be discarded while it has any retention
   constraints.</dd>
          <dt pn="section-3.1-3.37">Deletion:</dt>
          <dd pn="section-3.1-3.38">To delete a bundle is to remove unconditionally all of
   the bundle's retention constraints, enabling the bundle to be
   discarded.</dd>
        </dl>
      </section>
      <section anchor="sect-3.2" numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-discussion-of-bp-concepts">Discussion of BP Concepts</name>
        <t indent="0" pn="section-3.2-1">
   Multiple instances of the same bundle (the same unit of DTN protocol
   data) might exist concurrently in different parts of a network --
   possibly differing in some blocks -- in the memory local to one or
   more bundle nodes and/or in transit between nodes. In the context of
   the operation of a bundle node, a bundle is an instance (copy), in
   that node's local memory, of some bundle that is in the network.</t>
        <t indent="0" pn="section-3.2-2">
   The payload for a bundle forwarded in response to a bundle
   transmission request is the ADU whose location is
   provided as a parameter to that request. The payload for a bundle
   forwarded in response to reception of a bundle is the payload of the
   received bundle.</t>
        <t indent="0" pn="section-3.2-3">
   In the most familiar case, a bundle node is instantiated as a single
   process running on a general-purpose computer, but in general the
   definition is meant to be broader: a bundle node might alternatively
   be a thread, an object in an object-oriented operating system, a
   special-purpose hardware device, etc.</t>
        <t indent="0" pn="section-3.2-4">
   The manner in which the functions of the BPA are performed is wholly
   an implementation matter. For example, BPA functionality might be
   coded into each node individually; it might be implemented as a
   shared library that is used in common by any number of bundle nodes
   on a single computer; it might be implemented as a daemon whose
   services are invoked via inter-process or network communication by
   any number of bundle nodes on one or more computers; it might be
   implemented in hardware.</t>
        <t indent="0" pn="section-3.2-5">
   Every CLA implements its own thin layer of protocol, interposed
   between BP and the (usually "top") protocol(s) of the underlying
   integrated protocol stack; this "CL protocol" may only serve to
   multiplex and demultiplex bundles to and from the underlying integrated
   protocol, or it may offer additional CL-specific functionality. The
   manner in which a CLA sends and receives bundles, as well as the
   definitions of CLAs and CL protocols, are beyond the scope of this
   specification.</t>
        <t indent="0" pn="section-3.2-6">
   Note that the administrative element of a node's application agent
   may itself, in some cases, function as a CLA.
   That is, outgoing bundles may be "tunneled" through encapsulating
   bundles:

        </t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.2-7">
          <li pn="section-3.2-7.1">An outgoing bundle constitutes a byte array. This byte array may,
          like any other, be presented to the BPA as an
          ADU that is to be transmitted to some endpoint.</li>
          <li pn="section-3.2-7.2">The original bundle thus forms the payload of an encapsulating
          bundle that is forwarded using some other convergence-layer
          protocol(s).</li>
          <li pn="section-3.2-7.3">When the encapsulating bundle is received, its payload is
          delivered to the peer application agent administrative element,
          which then instructs the BPA to dispatch that
          original bundle in the usual way.</li>
        </ul>
        <t indent="0" pn="section-3.2-8">
   The purposes for which this technique may be useful (such as cross-domain
   security) are beyond the scope of this specification.</t>
        <t indent="0" pn="section-3.2-9">
   The only interface between the BPA and the application-specific
   element of the AA is the BP service interface. But between the BPA
   and the administrative element of the AA there is a (conceptual)
   private control interface in addition to the BP service interface.
   This private control interface enables the BPA and the
   administrative element of the AA to direct each other to take action
   under specific circumstances.</t>
        <t indent="0" pn="section-3.2-10">
   In the case of a node that serves simply as a BP "router", the AA may have
   no application-specific element at all. The application-specific elements
   of other nodes' AAs may perform arbitrarily complex application functions,
   perhaps even offering multiplexed DTN communication services to a number of
   other applications. As with the BPA, the manner in which the AA performs
   its functions is wholly an implementation matter.</t>
        <t indent="0" pn="section-3.2-11">
   Singletons are the most familiar sort of endpoint, but in general
   the endpoint notion is meant to be broader. For example, the nodes
   in a sensor network might constitute a set of bundle nodes that are
   all registered in a single common endpoint and will all receive any
   data delivered at that endpoint. <strong>Note</strong> too that any given bundle
   node might be registered in multiple bundle endpoints and receive
   all data delivered at each of those endpoints.
</t>
        <t indent="0" pn="section-3.2-12">
     
   Recall that every node, by definition, includes an application agent, which
   in turn includes an administrative element, which exchanges administrative
   records with the administrative elements of other nodes.  As such, every
   node is permanently, structurally registered in the singleton endpoint at
   which administrative records received from other nodes are delivered.
   Registration in no other endpoint can ever be assumed to be permanent.
   This endpoint, termed the node's "administrative endpoint", is therefore
   uniquely and permanently associated with the node, and for this reason the
   ID of a node's administrative endpoint may always serve as the "node ID"
   (see <xref target="sect-4.2.5.2" format="default" sectionFormat="of" derivedContent="Section 4.2.5.2"/>) of the node.
</t>
        <t indent="0" pn="section-3.2-13">
   The destination of every bundle is an endpoint, which may or may not
   be singleton.  The source of every bundle is a node, identified by
   node ID.  Note, though, that the source node ID asserted in a given
   bundle may be the null endpoint ID (as described later) rather than
   the ID of the source node; bundles for which the asserted source
   node ID is the null endpoint ID are termed "anonymous" bundles.</t>
        <t indent="0" pn="section-3.2-14">
   Any number of transmissions may be concurrently undertaken by the
   BPA of a given node.</t>
        <t indent="0" pn="section-3.2-15">When the BPA of a node determines that it must forward a bundle either 
   to a node that is a member of the bundle's destination endpoint or to 
   some intermediate forwarding node, the BPA invokes the services of one 
   or more CLAs in a sustained effort to cause a copy of the bundle to be 
   received by that node.</t>
        <t indent="0" pn="section-3.2-16">Upon reception, the processing of a bundle depends on whether or not 
   the receiving node is registered in the bundle's destination endpoint.
 If it is, and if
   the payload of the bundle is non-fragmentary (possibly as a result
   of successful payload reassembly from fragmentary payloads,
   including the original payload of the newly received bundle), then
   the bundle is normally delivered to the node's application agent
   subject to the registration characterizing the node's membership in
   the destination endpoint.</t>
        <t indent="0" pn="section-3.2-17">
   The Bundle Protocol itself does not ensure delivery of a bundle to
   its destination.  Data loss along the path to the destination node
   can be minimized by utilizing reliable convergence-layer protocols
   between neighbors on all segments of the end-to-end path; however, for
   end-to-end bundle delivery assurance it will be necessary to develop
   extensions to the Bundle Protocol and/or application-layer
   mechanisms.</t>
        <t indent="0" pn="section-3.2-18">
   The Bundle Protocol is designed for extensibility.  Bundle Protocol
   extensions, documented elsewhere, may extend this specification by
   defining additional:

        </t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.2-19">
          <li pn="section-3.2-19.1">blocks</li>
          <li pn="section-3.2-19.2">administrative records</li>
          <li pn="section-3.2-19.3">bundle processing control flags</li>
          <li pn="section-3.2-19.4">block processing control flags</li>
          <li pn="section-3.2-19.5">types of bundle status reports</li>
          <li pn="section-3.2-19.6">bundle status report reason codes</li>
          <li pn="section-3.2-19.7">mandates and constraints on processing that
        conformant BPAs must perform at specified points in
        the inbound and outbound bundle processing cycles</li>
        </ul>
      </section>
      <section anchor="sect-3.3" numbered="true" toc="include" removeInRFC="false" pn="section-3.3">
        <name slugifiedName="name-services-offered-by-bundle-">Services Offered by Bundle Protocol Agents</name>
        <t indent="0" pn="section-3.3-1">
   The BPA of each node is expected to provide the following services
   to the node's application agent:

        </t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.3-2">
          <li pn="section-3.3-2.1">commencing a registration (registering the node in an endpoint).</li>
          <li pn="section-3.3-2.2">terminating a registration.</li>
          <li pn="section-3.3-2.3">switching a registration between Active and Passive states.</li>
          <li pn="section-3.3-2.4">transmitting a bundle to an identified bundle endpoint.</li>
          <li pn="section-3.3-2.5">canceling a transmission.</li>
          <li pn="section-3.3-2.6">polling a registration that is in the Passive state.</li>
          <li pn="section-3.3-2.7">delivering a received bundle.</li>
        </ul>
        <t indent="0" pn="section-3.3-3">   Note that the details of registration functionality are an
   implementation matter and are beyond the scope of this
   specification.</t>
      </section>
    </section>
    <section anchor="sect-4" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-bundle-format">Bundle Format</name>
      <section anchor="sect-4.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-bundle-structure">Bundle Structure</name>
        <t indent="0" pn="section-4.1-1">
   The format of bundles <bcp14>SHALL</bcp14> conform to the Concise Binary Object
   Representation (CBOR) <xref target="RFC8949" format="default" sectionFormat="of" derivedContent="RFC8949"/>.</t>
        <t indent="0" pn="section-4.1-2">
   Cryptographic verification of a block is possible only if the
   sequence of octets on which the verifying node computes its hash --
   the canonicalized representation of the block -- is identical to the
   sequence of octets on which the hash declared for that block was
   computed.  To ensure that blocks are always in canonical
   representation when they are transmitted and received, the CBOR
   encodings of the values of all fields in all blocks <bcp14>MUST</bcp14>
   conform to the core deterministic encoding requirements as specified in <xref target="RFC8949" format="default" sectionFormat="of" derivedContent="RFC8949"/>, except that indefinite-length items are not prohibited.</t>
        <t indent="0" pn="section-4.1-3">
   Each bundle <bcp14>SHALL</bcp14> be a concatenated sequence of at least two blocks,
   represented as a CBOR indefinite-length array.  The first block in
   the sequence (the first item of the array) <bcp14>MUST</bcp14> be a primary bundle
   block in CBOR encoding as described below; the bundle <bcp14>MUST</bcp14>
   have exactly one primary bundle block. The primary block <bcp14>MUST</bcp14> be
   followed by one or more canonical bundle blocks (additional array
   items) in CBOR encoding as described in <xref target="sect-4.3.2" format="default" sectionFormat="of" derivedContent="Section 4.3.2"/>.  Every
   block following the primary block <bcp14>SHALL</bcp14> be the CBOR encoding
   of a canonical block.  The last such block <bcp14>MUST</bcp14> be a payload block;
   the bundle <bcp14>MUST</bcp14> have exactly one payload block.  The payload block
   <bcp14>SHALL</bcp14> be followed by a CBOR "break" stop code, terminating the
   array.</t>
        <aside pn="section-4.1-4">
          <t indent="0" pn="section-4.1-4.1">
   (Note that, while CBOR permits considerable flexibility in the
   encoding of bundles, this flexibility must not be interpreted as
   inviting increased complexity in PDU structure.)</t>
        </aside>
        <t indent="0" pn="section-4.1-5">
   Associated with each block of a bundle is a block number.  The block
   number uniquely identifies the block within the bundle, enabling
   blocks (notably Bundle Protocol Security blocks) to reference other
   blocks in the same bundle without ambiguity.  The block number of
   the primary block is implicitly zero; the block numbers of all other
   blocks are explicitly stated in block headers as noted below. Block
   numbering is unrelated to the order in which blocks are sequenced in
   the bundle. The block number of the payload block is always 1.</t>
        <t indent="0" pn="section-4.1-6">
   An implementation of the Bundle Protocol <bcp14>MAY</bcp14> discard any sequence of
   bytes that does not conform to the Bundle Protocol specification.</t>
        <t indent="0" pn="section-4.1-7">
   An implementation of the Bundle Protocol <bcp14>MAY</bcp14> accept a sequence of
   bytes that does not conform to the Bundle Protocol specification
   (e.g., one that represents data elements in fixed-length arrays
   rather than indefinite-length arrays) and transform it into
   conformant BP structure before processing it.  Procedures for
   accomplishing such a transformation are beyond the scope of this
   specification.</t>
      </section>
      <section anchor="sect-4.2" numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-bp-fundamental-data-structu">BP Fundamental Data Structures</name>
        <section anchor="sect-4.2.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.1">
          <name slugifiedName="name-crc-type">CRC Type</name>
          <t indent="0" pn="section-4.2.1-1">
   CRC type is an unsigned integer type code for which the following
   values (and no others) are valid:

          </t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.2.1-2">
            <li pn="section-4.2.1-2.1">0 indicates "no Cyclic Redundancy Check (CRC) is present."</li>
            <li pn="section-4.2.1-2.2">1 indicates "a standard X-25 CRC-16 is present." <xref target="CRC16" format="default" sectionFormat="of" derivedContent="CRC16"/></li>
            <li pn="section-4.2.1-2.3">2 indicates "a standard CRC32C (Castagnoli) CRC-32 is present."
        <xref target="RFC4960" format="default" sectionFormat="of" derivedContent="RFC4960"/></li>
          </ul>
          <t indent="0" pn="section-4.2.1-3">
   CRC type <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer.</t>
          <t indent="0" pn="section-4.2.1-4">
   For examples of CRC32C CRCs, see <xref target="RFC7143" sectionFormat="of" section="A.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7143#appendix-A.4" derivedContent="RFC7143"/>.</t>
          <t indent="0" pn="section-4.2.1-5">
   Note that more robust protection of BP data integrity, as needed,
   may be provided by means of Block Integrity Blocks (BIBs) as defined in the
   Bundle Protocol Security specification <xref target="RFC9172" format="default" sectionFormat="of" derivedContent="BPSEC"/>.
          </t>
        </section>
        <section anchor="sect-4.2.2" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.2">
          <name slugifiedName="name-crc">CRC</name>
          <t indent="0" pn="section-4.2.2-1">
   The CRC <bcp14>SHALL</bcp14> be omitted from a block if and only if the block's CRC
   type code is zero.</t>
          <t indent="0" pn="section-4.2.2-2">
   When not omitted, the CRC <bcp14>SHALL</bcp14> be represented as a CBOR byte string
   of two bytes (that is, CBOR additional information 2, if CRC type is
   1) or of four bytes (that is, CBOR additional information 4, if CRC
   type is 2); in each case, the sequence of bytes <bcp14>SHALL</bcp14> constitute an
   unsigned integer value (of 16 or 32 bits, respectively) in network
   byte order.</t>
        </section>
        <section anchor="sect-4.2.3" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.3">
          <name slugifiedName="name-bundle-processing-control-f">Bundle Processing Control Flags</name>
          <t indent="0" pn="section-4.2.3-1">
   Bundle processing control flags assert properties of the bundle as a
   whole rather than of any particular block of the bundle.  They are
   conveyed in the primary block of the bundle.</t>
          <t indent="0" pn="section-4.2.3-2">
   The following properties are asserted by the bundle processing
   control flags:

          </t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.2.3-3">
            <li pn="section-4.2.3-3.1">The bundle is a fragment.  (Boolean)</li>
            <li pn="section-4.2.3-3.2">The bundle's payload is an administrative record.  (Boolean)</li>
            <li pn="section-4.2.3-3.3">The bundle must not be fragmented.  (Boolean)</li>
            <li pn="section-4.2.3-3.4">Acknowledgment by the user application is requested.  (Boolean)</li>
            <li pn="section-4.2.3-3.5">Status time is requested in all status reports.  (Boolean)</li>
            <li pn="section-4.2.3-3.6">
              <t indent="0" pn="section-4.2.3-3.6.1">Flags requesting types of status reports (all Boolean):

              </t>
              <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.2.3-3.6.2">
                <li pn="section-4.2.3-3.6.2.1">Request reporting of bundle reception.</li>
                <li pn="section-4.2.3-3.6.2.2">Request reporting of bundle forwarding.</li>
                <li pn="section-4.2.3-3.6.2.3">Request reporting of bundle delivery.</li>
                <li pn="section-4.2.3-3.6.2.4">Request reporting of bundle deletion.</li>
              </ul>
            </li>
          </ul>
          <t indent="0" pn="section-4.2.3-4">
   If the bundle processing control flags indicate that the bundle's
   ADU is an administrative record, then all status
   report request flag values <bcp14>MUST</bcp14> be zero.</t>
          <t indent="0" pn="section-4.2.3-5">
   If the bundle's source node is omitted (i.e., the source node ID is the ID
   of the null endpoint, which has no members as discussed below; this option
   enables anonymous bundle transmission), then the bundle is not uniquely
   identifiable and all Bundle Protocol features that rely on bundle identity
   must therefore be disabled: the "Bundle must not be fragmented" flag value
   <bcp14>MUST</bcp14> be 1, and all status report request flag values <bcp14>MUST</bcp14> be zero.</t>
          <t indent="0" pn="section-4.2.3-6">
   Bundle processing control flags that are unrecognized <bcp14>MUST</bcp14> be
   ignored, as future definitions of additional flags might not be
   integrated simultaneously into the Bundle Protocol implementations
   operating at all nodes.</t>
          <t indent="0" pn="section-4.2.3-7">
   The bundle processing control flags <bcp14>SHALL</bcp14> be represented as a CBOR
   unsigned integer item, the value of which <bcp14>SHALL</bcp14> be processed as a
   bit field indicating the control flag values as follows (note that
   bit numbering in this instance is reversed from the usual practice,
   beginning with the low-order bit instead of the high-order bit, in
   recognition of the potential definition of additional control flag
   values in the future):

          </t>
          <dl spacing="normal" indent="3" newline="false" pn="section-4.2.3-8">
            <dt pn="section-4.2.3-8.1">Bit 0 (the low-order bit, 0x000001):</dt>
            <dd pn="section-4.2.3-8.2">Bundle is a fragment.</dd>
            <dt pn="section-4.2.3-8.3">Bit 1 (0x000002):</dt>
            <dd pn="section-4.2.3-8.4">ADU is an administrative record.</dd>
            <dt pn="section-4.2.3-8.5">Bit 2 (0x000004):</dt>
            <dd pn="section-4.2.3-8.6">Bundle must not be fragmented.</dd>
            <dt pn="section-4.2.3-8.7">Bit 3 (0x000008):</dt>
            <dd pn="section-4.2.3-8.8">Reserved.</dd>
            <dt pn="section-4.2.3-8.9">Bit 4 (0x000010):</dt>
            <dd pn="section-4.2.3-8.10">Reserved.</dd>
            <dt pn="section-4.2.3-8.11">Bit 5 (0x000020):</dt>
            <dd pn="section-4.2.3-8.12">Acknowledgement by application is requested.</dd>
            <dt pn="section-4.2.3-8.13">Bit 6 (0x000040):</dt>
            <dd pn="section-4.2.3-8.14">Status time requested in reports.</dd>
            <dt pn="section-4.2.3-8.15">Bit 7 (0x000080):</dt>
            <dd pn="section-4.2.3-8.16">Reserved.</dd>
            <dt pn="section-4.2.3-8.17">Bit 8 (0x000100):</dt>
            <dd pn="section-4.2.3-8.18">Reserved.</dd>
            <dt pn="section-4.2.3-8.19">Bit 9 (0x000200):</dt>
            <dd pn="section-4.2.3-8.20">Reserved.</dd>
            <dt pn="section-4.2.3-8.21">Bit 10 (0x000400):</dt>
            <dd pn="section-4.2.3-8.22">Reserved.</dd>
            <dt pn="section-4.2.3-8.23">Bit 11 (0x000800):</dt>
            <dd pn="section-4.2.3-8.24">Reserved.</dd>
            <dt pn="section-4.2.3-8.25">Bit 12 (0x001000):</dt>
            <dd pn="section-4.2.3-8.26">Reserved.</dd>
            <dt pn="section-4.2.3-8.27">Bit 13 (0x002000):</dt>
            <dd pn="section-4.2.3-8.28">Reserved.</dd>
            <dt pn="section-4.2.3-8.29">Bit 14 (0x004000):</dt>
            <dd pn="section-4.2.3-8.30">Request reporting of bundle reception.</dd>
            <dt pn="section-4.2.3-8.31">Bit 15 (0x008000):</dt>
            <dd pn="section-4.2.3-8.32">Reserved.</dd>
            <dt pn="section-4.2.3-8.33">Bit 16 (0x010000):</dt>
            <dd pn="section-4.2.3-8.34">Request reporting of bundle forwarding.</dd>
            <dt pn="section-4.2.3-8.35">Bit 17 (0x020000):</dt>
            <dd pn="section-4.2.3-8.36">Request reporting of bundle delivery.</dd>
            <dt pn="section-4.2.3-8.37">Bit 18 (0x040000):</dt>
            <dd pn="section-4.2.3-8.38">Request reporting of bundle deletion.</dd>
            <dt pn="section-4.2.3-8.39">Bits 19-20:</dt>
            <dd pn="section-4.2.3-8.40">Reserved.</dd>
            <dt pn="section-4.2.3-8.41">Bits 21-63:</dt>
            <dd pn="section-4.2.3-8.42">Unassigned.</dd>
          </dl>
        </section>
        <section anchor="sect-4.2.4" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.4">
          <name slugifiedName="name-block-processing-control-fl">Block Processing Control Flags</name>
          <t indent="0" pn="section-4.2.4-1">
   The block processing control flags assert properties of canonical
   bundle blocks.  They are conveyed in the header of the block to
   which they pertain.</t>
          <t indent="0" pn="section-4.2.4-2">
   Block processing control flags that are unrecognized <bcp14>MUST</bcp14> be
   ignored, as future definitions of additional flags might not be
   integrated simultaneously into the Bundle Protocol implementations
   operating at all nodes.</t>
          <t indent="0" pn="section-4.2.4-3">
   The block processing control flags <bcp14>SHALL</bcp14> be represented as a CBOR
   unsigned integer item, the value of which <bcp14>SHALL</bcp14> be processed as a
   bit field indicating the control flag values as follows (note that
   bit numbering in this instance is reversed from the usual practice,
   beginning with the low-order bit instead of the high-order bit, for
   agreement with the bit numbering of the bundle processing control
   flags):</t>
          <dl spacing="normal" indent="3" newline="false" pn="section-4.2.4-4">
            <dt pn="section-4.2.4-4.1">Bit 0 (the low-order bit, 0x01):</dt>
            <dd pn="section-4.2.4-4.2">Block must be replicated in every fragment.</dd>
            <dt pn="section-4.2.4-4.3">Bit 1 (0x02):</dt>
            <dd pn="section-4.2.4-4.4">Transmit status report if block can't be processed.</dd>
            <dt pn="section-4.2.4-4.5">Bit 2 (0x04):</dt>
            <dd pn="section-4.2.4-4.6">Delete bundle if block can't be processed.</dd>
            <dt pn="section-4.2.4-4.7">Bit 3 (0x08):</dt>
            <dd pn="section-4.2.4-4.8">Reserved.</dd>
            <dt pn="section-4.2.4-4.9">Bit 4 (0x10):</dt>
            <dd pn="section-4.2.4-4.10">Discard block if it can't be processed.</dd>
            <dt pn="section-4.2.4-4.11">Bit 5 (0x20):</dt>
            <dd pn="section-4.2.4-4.12">Reserved.</dd>
            <dt pn="section-4.2.4-4.13">Bit 6 (0x40):</dt>
            <dd pn="section-4.2.4-4.14">Reserved.</dd>
            <dt pn="section-4.2.4-4.15">Bits 7-63:</dt>
            <dd pn="section-4.2.4-4.16">Unassigned.</dd>
          </dl>
          <t indent="0" pn="section-4.2.4-5">
   For each bundle whose bundle processing control flags indicate that
   the bundle's ADU is an administrative record, or
   whose source node ID is the null endpoint ID as defined below, the
   value of the "Transmit status report if block can't be processed"
   flag in every canonical block of the bundle <bcp14>MUST</bcp14> be zero.</t>
        </section>
        <section anchor="sect-4.2.5" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.5">
          <name slugifiedName="name-identifiers">Identifiers</name>
          <section anchor="sect-4.2.5.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.5.1">
            <name slugifiedName="name-endpoint-id">Endpoint ID</name>
            <t indent="0" pn="section-4.2.5.1-1">
   The destinations of bundles are bundle endpoints, identified by text
   strings termed "endpoint IDs" (see <xref target="sect-3.1" format="default" sectionFormat="of" derivedContent="Section 3.1"/>). Each endpoint ID
   (EID) is a Uniform Resource Identifier <xref target="RFC3986" format="default" sectionFormat="of" derivedContent="URI"/>. As such, each
   endpoint ID can be characterized as having this general structure:</t>
            <t indent="0" pn="section-4.2.5.1-2">
   &lt; scheme name &gt; : &lt; scheme-specific part, or "SSP" &gt;</t>
            <t indent="0" pn="section-4.2.5.1-3">
   The scheme identified by the &lt; scheme name &gt; in an endpoint ID is a
   set of syntactic and semantic rules that fully explain how to parse
   and interpret the scheme-specific part (SSP). Each scheme that may be used to form a BP
   endpoint ID must be added to the "Bundle Protocol URI Scheme Types" registry,
   maintained by IANA as described in <xref target="sect-9.6" format="default" sectionFormat="of" derivedContent="Section 9.6"/>;
   association of a unique URI scheme code number with each scheme name
   in this registry helps to enable compact representation of endpoint
   IDs in bundle blocks.  Note that the set of allowable schemes is
   effectively unlimited. Any scheme conforming to <xref target="RFC7595" format="default" sectionFormat="of" derivedContent="URIREG"/> may be
   added to the registry of URI scheme code numbers and thereupon used in a
   Bundle Protocol endpoint ID.</t>
            <t indent="0" pn="section-4.2.5.1-4">
   Each entry in the registry of URI scheme code numbers <bcp14>MUST</bcp14> contain a
   reference to a scheme code number definition document, which defines
   the manner in which the scheme-specific part of any URI formed in
   that scheme is parsed and interpreted and <bcp14>MUST</bcp14> be CBOR encoded for transmission as a BP endpoint ID.  The scheme
   code number definition document may also contain information as to
   (a) which convergence-layer protocol(s) may be used to forward a
   bundle to a BP destination endpoint identified by such an ID and
   (b) how the ID of the convergence-layer protocol endpoint to use for
   that purpose can be inferred from that destination endpoint ID.</t>
            <t indent="0" pn="section-4.2.5.1-5">
   Note that, although endpoint IDs are URIs, implementations of the BP
   service interface may support expression of endpoint IDs in some
   internationalized manner (e.g., Internationalized Resource
   Identifiers (IRIs); see <xref target="RFC3987" format="default" sectionFormat="of" derivedContent="RFC3987"/>).</t>
            <t indent="0" pn="section-4.2.5.1-6">
   Each BP endpoint ID (EID) <bcp14>SHALL</bcp14> be represented as a CBOR array
   comprising two items.</t>
            <t indent="0" pn="section-4.2.5.1-7">
   The first item of the array <bcp14>SHALL</bcp14> be the code number identifying the
   endpoint ID's URI scheme, as defined in the registry of URI scheme
   code numbers for the Bundle Protocol.  Each URI scheme code number <bcp14>SHALL</bcp14>
   be represented as a CBOR unsigned integer.</t>
            <t indent="0" pn="section-4.2.5.1-8">
   The second item of the array <bcp14>SHALL</bcp14> be the applicable CBOR
   encoding of the scheme-specific part of the EID, defined
   as noted in the references(s) for the URI scheme code number 
   registry entry for the EID's URI scheme.</t>
            <section anchor="sect-4.2.5.1.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.5.1.1">
              <name slugifiedName="name-the-dtn-uri-scheme">The dtn URI Scheme</name>
              <t indent="0" pn="section-4.2.5.1.1-1">
   The "dtn" scheme supports the identification of BP endpoints by
   arbitrarily expressive character strings.  It is specified as
   follows:</t>
              <dl indent="3" newline="false" spacing="normal" pn="section-4.2.5.1.1-2">
                <dt pn="section-4.2.5.1.1-2.1">Scheme syntax:</dt>
                <dd pn="section-4.2.5.1.1-2.2">This specification uses the Augmented Backus-Naur
  Form (ABNF) notation of <xref target="RFC5234" format="default" sectionFormat="of" derivedContent="RFC5234"/>.</dd>
              </dl>
              <sourcecode type="abnf" markers="false" pn="section-4.2.5.1.1-3">
dtn-uri = "dtn:" ("none" / dtn-hier-part)

dtn-hier-part = "//" node-name name-delim demux ; a path-rootless

node-name = reg-name

name-delim = "/"

demux = *VCHAR
</sourcecode>
              <dl indent="3" newline="false" spacing="normal" pn="section-4.2.5.1.1-4">
                <dt pn="section-4.2.5.1.1-4.1">Scheme semantics:</dt>
                <dd pn="section-4.2.5.1.1-4.2">URIs of the dtn scheme are used as endpoint
   identifiers in the Delay-Tolerant Networking (DTN) Bundle Protocol
   (BP) as described in the present document.</dd>
              </dl>
              <t indent="0" pn="section-4.2.5.1.1-5">
   The endpoint ID "dtn:none" identifies the "null endpoint", the
   endpoint that by definition never has any members.</t>
              <t indent="0" pn="section-4.2.5.1.1-6">
   All BP endpoints identified by all other dtn-scheme endpoint IDs for which
   the first character of demux is a character other than '~' (tilde) are
   singleton endpoints. All BP endpoints identified by dtn-scheme endpoint IDs
   for which the first character <strong>is</strong> '~' (tilde) are <strong>not</strong> singleton
   endpoints.</t>
              <t indent="0" pn="section-4.2.5.1.1-7">
   A dtn-scheme endpoint ID for which the demux is of length zero <bcp14>MAY</bcp14>
   identify the administrative endpoint for the node identified by
   node-name, and as such may serve as a node ID.  No dtn-scheme
   endpoint ID for which the demux is of non-zero length may do so.</t>
              <t indent="0" pn="section-4.2.5.1.1-8">
   Note that these syntactic rules impose constraints on dtn-scheme
   endpoint IDs that were not imposed by the original specification of
   the dtn scheme as provided in <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/>.  It is believed that the
   dtn-scheme endpoint IDs employed by BP applications conforming to
   <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> are in most cases unlikely to be in violation of these
   rules, but the developers of such applications are advised of the
   potential for compromised interoperation.</t>
              <dl indent="3" newline="false" spacing="normal" pn="section-4.2.5.1.1-9">
                <dt pn="section-4.2.5.1.1-9.1">Encoding considerations:</dt>
                <dd pn="section-4.2.5.1.1-9.2">For transmission as a BP endpoint ID, the 
   scheme-specific part of a URI of the dtn scheme <bcp14>SHALL</bcp14> be represented
   as a CBOR text string unless the EID's SSP is "none", in which case
   the SSP <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer with the
   value zero.  For all other purposes, URIs of the dtn scheme are
   encoded exclusively in US-ASCII characters.</dd>
                <dt pn="section-4.2.5.1.1-9.3">Interoperability considerations:</dt>
                <dd pn="section-4.2.5.1.1-9.4">None.</dd>
                <dt pn="section-4.2.5.1.1-9.5">Security considerations:</dt>
                <dd pn="section-4.2.5.1.1-9.6">
                  <t indent="0" pn="section-4.2.5.1.1-9.6.1"><br/></t>
                  <dl indent="3" newline="false" spacing="normal" pn="section-4.2.5.1.1-9.6.2">
                    <dt pn="section-4.2.5.1.1-9.6.2.1">Reliability and consistency:</dt>
                    <dd pn="section-4.2.5.1.1-9.6.2.2">None of the BP endpoints identified by the
   URIs of the dtn scheme are guaranteed to be reachable at any time, and the
   identity of the processing entities operating on those endpoints is never
   guaranteed by the Bundle Protocol itself. Verification of the signature provided by the Block Integrity Block targeting the bundle's primary block, as defined by Bundle Protocol Security <xref target="RFC9172" format="default" sectionFormat="of" derivedContent="BPSEC"/>, is required for this purpose.</dd>
                    <dt pn="section-4.2.5.1.1-9.6.2.3">Malicious construction:</dt>
                    <dd pn="section-4.2.5.1.1-9.6.2.4">Malicious construction of a conformant
   dtn-scheme URI is limited to the malicious selection of node names and the
   malicious selection of demux strings.  That is, a maliciously constructed
   dtn-scheme URI could be used to direct a bundle to an endpoint that might
   be damaged by the arrival of that bundle or, alternatively, to declare a
   false source for a bundle and thereby cause incorrect processing at a node
   that receives the bundle.  In both cases (and indeed in all bundle
   processing), the node that receives a bundle should verify its authenticity
   and validity before operating on it in any way.</dd>
                    <dt pn="section-4.2.5.1.1-9.6.2.5">Back-end transcoding:</dt>
                    <dd pn="section-4.2.5.1.1-9.6.2.6">The limited expressiveness of URIs of the dtn
   scheme effectively eliminates the possibility of threat due to errors in
   back-end transcoding.</dd>
                    <dt pn="section-4.2.5.1.1-9.6.2.7">Rare IP address formats:</dt>
                    <dd pn="section-4.2.5.1.1-9.6.2.8">Not relevant, as IP addresses do not appear
   anywhere in conformant dtn-scheme URIs.</dd>
                    <dt pn="section-4.2.5.1.1-9.6.2.9">Sensitive information:</dt>
                    <dd pn="section-4.2.5.1.1-9.6.2.10">Because dtn-scheme URIs are used only to
   represent the identities of Bundle Protocol endpoints, the risk of
   disclosure of sensitive information due to interception of these URIs is
   minimal.  Examination of dtn-scheme URIs could be used to support traffic
   analysis; where traffic analysis is a plausible danger, bundles should be
   conveyed by secure convergence-layer protocols that do not expose endpoint
   IDs.</dd>
                    <dt pn="section-4.2.5.1.1-9.6.2.11">Semantic attacks:</dt>
                    <dd pn="section-4.2.5.1.1-9.6.2.12">The simplicity of dtn-scheme URI syntax minimizes the
   possibility of misinterpretation of a URI by a human user.</dd>
                  </dl>
                </dd>
              </dl>
            </section>
            <section anchor="sect-4.2.5.1.2" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.5.1.2">
              <name slugifiedName="name-the-ipn-uri-scheme">The ipn URI Scheme</name>
              <t indent="0" pn="section-4.2.5.1.2-1">
   The "ipn" scheme supports the identification of BP endpoints by
   pairs of unsigned integers, for compact representation in bundle
   blocks.  It is specified as follows:</t>
              <dl indent="3" newline="false" spacing="normal" pn="section-4.2.5.1.2-2">
                <dt pn="section-4.2.5.1.2-2.1">Scheme syntax:</dt>
                <dd pn="section-4.2.5.1.2-2.2">This specification uses the Augmented Backus-Naur
   Form (ABNF) notation of <xref target="RFC5234" format="default" sectionFormat="of" derivedContent="RFC5234"/>, including the core ABNF syntax
   rule for DIGIT defined by that specification.</dd>
              </dl>
              <sourcecode type="abnf" markers="false" pn="section-4.2.5.1.2-3">
ipn-uri = "ipn:" ipn-hier-part

ipn-hier-part = node-nbr nbr-delim service-nbr ; a path-rootless

node-nbr = 1*DIGIT

nbr-delim = "."

service-nbr = 1*DIGIT
</sourcecode>
              <dl indent="3" newline="false" spacing="normal" pn="section-4.2.5.1.2-4">
                <dt pn="section-4.2.5.1.2-4.1">Scheme semantics:</dt>
                <dd pn="section-4.2.5.1.2-4.2">URIs of the ipn scheme are used as endpoint
   identifiers in the Delay-Tolerant Networking (DTN) Bundle Protocol
   (BP) as described in the present document.</dd>
              </dl>
              <t indent="0" pn="section-4.2.5.1.2-5">
   All BP endpoints identified by ipn-scheme endpoint IDs are singleton
   endpoints.</t>
              <t indent="0" pn="section-4.2.5.1.2-6">
   An ipn-scheme endpoint ID for which service-nbr is zero <bcp14>MAY</bcp14> identify
   the administrative endpoint for the node identified by node-nbr, and
   as such may serve as a node ID.  No ipn-scheme endpoint ID for which
   service-nbr is non-zero may do so.</t>
              <dl indent="3" newline="false" spacing="normal" pn="section-4.2.5.1.2-7">
                <dt pn="section-4.2.5.1.2-7.1">Encoding considerations:</dt>
                <dd pn="section-4.2.5.1.2-7.2">For transmission as a BP endpoint ID, the
   scheme-specific part of a URI of the ipn scheme <bcp14>SHALL</bcp14> be
   represented as a CBOR array comprising two items.  The first item of
   this array <bcp14>SHALL</bcp14> be the EID's node number (a number that identifies
   the node) represented as a CBOR unsigned integer.  The second item
   of this array <bcp14>SHALL</bcp14> be the EID's service number (a number that
   identifies some application service) represented as a CBOR unsigned
   integer.  For all other purposes, URIs of the ipn scheme are encoded
   exclusively in US-ASCII characters.</dd>
                <dt pn="section-4.2.5.1.2-7.3">Interoperability considerations:</dt>
                <dd pn="section-4.2.5.1.2-7.4">None.</dd>
                <dt pn="section-4.2.5.1.2-7.5">Security considerations:</dt>
                <dd pn="section-4.2.5.1.2-7.6">
                  <t indent="0" pn="section-4.2.5.1.2-7.6.1"><br/></t>
                  <dl indent="3" newline="false" spacing="normal" pn="section-4.2.5.1.2-7.6.2">
                    <dt pn="section-4.2.5.1.2-7.6.2.1">Reliability and consistency:</dt>
                    <dd pn="section-4.2.5.1.2-7.6.2.2">None of the BP endpoints identified by the
   URIs of the ipn scheme are guaranteed to be reachable at any time, and the
   identity of the processing entities operating on those endpoints is never
   guaranteed by the Bundle Protocol itself. Verification of the signature provided by the Block Integrity Block targeting the bundle's primary block, as defined by Bundle Protocol Security <xref target="RFC9172" format="default" sectionFormat="of" derivedContent="BPSEC"/>, is
   required for this purpose.</dd>
                    <dt pn="section-4.2.5.1.2-7.6.2.3">Malicious construction:</dt>
                    <dd pn="section-4.2.5.1.2-7.6.2.4">Malicious construction of a conformant
   ipn-scheme URI is limited to the malicious selection of node numbers and
   the malicious selection of service numbers.  That is, a maliciously
   constructed ipn-scheme URI could be used to direct a bundle to an endpoint
   that might be damaged by the arrival of that bundle or, alternatively, to
   declare a false source for a bundle and thereby cause incorrect processing
   at a node that receives the bundle.  In both cases (and indeed in all
   bundle processing), the node that receives a bundle should verify its
   authenticity and validity before operating on it in any way.</dd>
                    <dt pn="section-4.2.5.1.2-7.6.2.5">Back-end transcoding:</dt>
                    <dd pn="section-4.2.5.1.2-7.6.2.6">The limited expressiveness of URIs of the ipn
   scheme effectively eliminates the possibility of threat due to errors in
   back-end transcoding.</dd>
                    <dt pn="section-4.2.5.1.2-7.6.2.7">Rare IP address formats:</dt>
                    <dd pn="section-4.2.5.1.2-7.6.2.8">Not relevant, as IP addresses do not appear
   anywhere in conformant ipn-scheme URIs.</dd>
                    <dt pn="section-4.2.5.1.2-7.6.2.9">Sensitive information:</dt>
                    <dd pn="section-4.2.5.1.2-7.6.2.10">Because ipn-scheme URIs are used only to
   represent the identities of Bundle Protocol endpoints, the risk of
   disclosure of sensitive information due to interception of these URIs is
   minimal.  Examination of ipn-scheme URIs could be used to support traffic
   analysis; where traffic analysis is a plausible danger, bundles should be
   conveyed by secure convergence-layer protocols that do not expose endpoint
   IDs.</dd>
                    <dt pn="section-4.2.5.1.2-7.6.2.11">Semantic attacks:</dt>
                    <dd pn="section-4.2.5.1.2-7.6.2.12">The simplicity of ipn-scheme URI syntax minimizes the
   possibility of misinterpretation of a URI by a human user.
 </dd>
                  </dl>
                </dd>
              </dl>
            </section>
          </section>
          <section anchor="sect-4.2.5.2" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.5.2">
            <name slugifiedName="name-node-id">Node ID</name>
            <t indent="0" pn="section-4.2.5.2-1">
   For many purposes of the Bundle Protocol, it is important to identify
   the node that is operative in some context.</t>
            <t indent="0" pn="section-4.2.5.2-2">
   As discussed in <xref target="sect-3.1" format="default" sectionFormat="of" derivedContent="Section 3.1"/>, nodes are distinct from endpoints;
   specifically, an endpoint is a set of zero or more nodes.  But
   rather than define a separate namespace for node identifiers, we
   instead use endpoint identifiers to identify nodes as discussed in
   <xref target="sect-3.2" format="default" sectionFormat="of" derivedContent="Section 3.2"/>. Formally:</t>
            <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.2.5.2-3">
              <li pn="section-4.2.5.2-3.1">Every node is, by definition, permanently registered in the
    singleton endpoint at which administrative records are delivered
    to its application agent's administrative element, termed the
    node's "administrative endpoint".</li>
              <li pn="section-4.2.5.2-3.2">As such, the EID of a node's administrative endpoint <bcp14>SHALL</bcp14>
    uniquely identify that node.</li>
              <li pn="section-4.2.5.2-3.3">The EID of any singleton endpoint is allowed to serve as a "node ID"
   identifying the node that is the sole member of that endpoint.</li>
            </ul>
          </section>
        </section>
        <section anchor="sect-4.2.6" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.6">
          <name slugifiedName="name-dtn-time">DTN Time</name>
          <t indent="0" pn="section-4.2.6-1">
   A DTN time is an unsigned integer indicating the number of
   milliseconds that have elapsed since the DTN Epoch, 2000-01-01
   00:00:00 +0000 (UTC).  DTN time is not affected by leap seconds.</t>
          <t indent="0" pn="section-4.2.6-2">
   Each DTN time <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer item.
   Implementers need to be aware that DTN time values conveyed in CBOR
   encoding in bundles will nearly always exceed (2<sup>32</sup> - 1); the
   manner in which a DTN time value is represented in memory is an
   implementation matter.  The DTN time value zero indicates that the
   time is unknown.</t>
        </section>
        <section anchor="sect-4.2.7" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.7">
          <name slugifiedName="name-creation-timestamp">Creation Timestamp</name>
          <t indent="0" pn="section-4.2.7-1">
   Each bundle's creation timestamp <bcp14>SHALL</bcp14> be represented as a CBOR
   array comprising two items.</t>
          <t indent="0" pn="section-4.2.7-2">
   The first item of the array, termed "bundle creation time", <bcp14>SHALL</bcp14> be
   the DTN time at which the transmission request was received that
   resulted in the creation of the bundle, represented as a CBOR
   unsigned integer.</t>
          <t indent="0" pn="section-4.2.7-3">
   The second item of the array, termed the creation timestamp's
   "sequence number", <bcp14>SHALL</bcp14> be the latest value (as of the time at
   which the transmission request was received) of a monotonically
   increasing positive integer counter managed by the source node's
   BPA, represented as a CBOR unsigned integer.  The
   sequence counter <bcp14>MAY</bcp14> be reset to zero whenever the current time
   advances by one millisecond.</t>
          <t indent="0" pn="section-4.2.7-4">
   For nodes that lack accurate clocks, it is recommended that bundle
   creation time be set to zero and that the counter used as the source
   of the bundle sequence count never be reset to zero.</t>
          <t indent="0" pn="section-4.2.7-5">
   Note that, in general, the creation of two distinct bundles with the
   same source node ID and bundle creation timestamp may result in
   unexpected network behavior and/or suboptimal performance. The
   combination of source node ID and bundle creation timestamp serves
   to identify a single transmission request, enabling it to be
   acknowledged by the receiving application (provided the source node
   ID is not the null endpoint ID).</t>
        </section>
        <section anchor="sect-4.2.8" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.8">
          <name slugifiedName="name-block-type-specific-data">Block-Type-Specific Data</name>
          <t indent="0" pn="section-4.2.8-1">
   Block-type-specific data in each block (other than the primary
   block) <bcp14>SHALL</bcp14> be the applicable CBOR encoding of the content of
   the block.  Details of this representation are included in the
   specification defining the block type.</t>
        </section>
      </section>
      <section anchor="sect-4.3" numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-block-structures">Block Structures</name>
        <t indent="0" pn="section-4.3-1">
   This section describes the primary block in detail and non-primary
   blocks in general. Rules for processing these blocks appear in
   <xref target="sect-5" format="default" sectionFormat="of" derivedContent="Section 5"/>.</t>
        <t indent="0" pn="section-4.3-2">
   Note that supplementary DTN protocol specifications (including, but
   not restricted to, Bundle Protocol Security <xref target="RFC9172" format="default" sectionFormat="of" derivedContent="BPSEC"/>) may require
   that BP implementations conforming to those protocols construct and
   process additional blocks.</t>
        <section anchor="sect-4.3.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.3.1">
          <name slugifiedName="name-primary-bundle-block">Primary Bundle Block</name>
          <t indent="0" pn="section-4.3.1-1">
   The primary bundle block contains the basic information needed to
   forward bundles to their destinations.</t>
          <t indent="0" pn="section-4.3.1-2">
   Each primary block <bcp14>SHALL</bcp14> be represented as a CBOR array; the number
   of elements in the array <bcp14>SHALL</bcp14> be 8 (if the bundle is not a fragment
   and the block has no CRC), 9 (if the block has a CRC and the bundle
   is not a fragment), 10 (if the bundle is a fragment and the block
   has no CRC), or 11 (if the bundle is a fragment and the block has a
   CRC).</t>
          <t indent="0" pn="section-4.3.1-3">
   The primary block of each bundle <bcp14>SHALL</bcp14> be immutable.  The CBOR-
   encoded values of all fields in the primary block <bcp14>MUST</bcp14> remain
   unchanged from the time the block is created to the time it is
   delivered.</t>
          <t indent="0" pn="section-4.3.1-4">
   The fields of the primary bundle block <bcp14>SHALL</bcp14> be as follows, listed
          in the order in which they <bcp14>MUST</bcp14> appear:</t>
          <dl indent="3" newline="false" spacing="normal" pn="section-4.3.1-5">
            <dt pn="section-4.3.1-5.1">Version:</dt>
            <dd pn="section-4.3.1-5.2">An unsigned integer value indicating the version of the
   Bundle Protocol that constructed this block. The present document
   describes BPv7. This version number <bcp14>SHALL</bcp14> be
   represented as a CBOR unsigned integer item.</dd>
            <dt pn="section-4.3.1-5.3">Bundle Processing Control Flags:</dt>
            <dd pn="section-4.3.1-5.4">The bundle processing control flags
   are discussed in <xref target="sect-4.2.3" format="default" sectionFormat="of" derivedContent="Section 4.2.3"/>.</dd>
            <dt pn="section-4.3.1-5.5">CRC Type:</dt>
            <dd pn="section-4.3.1-5.6">CRC type codes are discussed in <xref target="sect-4.2.1" format="default" sectionFormat="of" derivedContent="Section 4.2.1"/>.  The
   CRC type code for the primary block <bcp14>MAY</bcp14> be zero if the bundle
   contains a BPSec Block Integrity Block <xref target="RFC9172" format="default" sectionFormat="of" derivedContent="BPSEC"/> 
   whose target is the
   primary block; otherwise, the CRC type code for the primary block
   <bcp14>MUST</bcp14> be non-zero.</dd>
            <dt pn="section-4.3.1-5.7">Destination EID:</dt>
            <dd pn="section-4.3.1-5.8">The Destination EID field identifies the bundle
   endpoint that is the bundle's destination, i.e., the endpoint that
   contains the node(s) at which the bundle is to be delivered.</dd>
            <dt pn="section-4.3.1-5.9">Source node ID:</dt>
            <dd pn="section-4.3.1-5.10">The Source node ID field identifies the bundle node
   at which the bundle was initially transmitted, except that source
   node ID may be the null endpoint ID in the event that the bundle's
   source chooses to remain anonymous.</dd>
            <dt pn="section-4.3.1-5.11">Report-to EID:</dt>
            <dd pn="section-4.3.1-5.12">The Report-to EID field identifies the bundle
   endpoint to which status reports pertaining to the forwarding and
   delivery of this bundle are to be transmitted.</dd>
            <dt pn="section-4.3.1-5.13">Creation Timestamp:</dt>
            <dd pn="section-4.3.1-5.14">The creation timestamp comprises two unsigned
   integers that, together with the source node ID and (if the bundle
   is a fragment) the fragment offset and payload length, serve to
   identify the bundle. See <xref target="sect-4.2.7" format="default" sectionFormat="of" derivedContent="Section 4.2.7"/> for the definition of this
   field.</dd>
            <dt pn="section-4.3.1-5.15">Lifetime:</dt>
            <dd pn="section-4.3.1-5.16">
              <t indent="0" pn="section-4.3.1-5.16.1">The Lifetime field is an unsigned integer that indicates
   the time at which the bundle's payload will no longer be useful,
   encoded as a number of milliseconds past the creation time. (For
   high-rate deployments with very brief disruptions, fine-grained
   expression of bundle lifetime may be useful.)  When a bundle's age
   exceeds its lifetime, bundle nodes need no longer retain or forward
   the bundle; the bundle <bcp14>SHOULD</bcp14> be deleted from the network.</t>
              <t indent="0" pn="section-4.3.1-5.16.2">
   If the asserted lifetime for a received bundle is so lengthy that
   retention of the bundle until its expiration time might degrade
   operation of the node at which the bundle is received, or if the
   BPA of that node determines that the bundle must
   be deleted in order to prevent network performance degradation
   (e.g., the bundle appears to be part of a denial-of-service attack),
   then that BPA <bcp14>MAY</bcp14> impose a temporary overriding
   lifetime of shorter duration; such an overriding lifetime <bcp14>SHALL NOT</bcp14>
   replace the lifetime asserted in the bundle but <bcp14>SHALL</bcp14> serve as the
   bundle's effective lifetime while the bundle resides at that node.
   Procedures for imposing lifetime overrides are beyond the scope of
   this specification.</t>
              <t indent="0" pn="section-4.3.1-5.16.3">
   For bundles originating at nodes that lack accurate clocks, it is
   recommended that bundle age be obtained from the Bundle Age
   extension block (see <xref target="sect-4.4.2" format="default" sectionFormat="of" derivedContent="Section 4.4.2"/>) rather than from the difference
   between current time and bundle creation time.  Bundle lifetime
   <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer item.</t>
            </dd>
            <dt pn="section-4.3.1-5.17">Fragment offset:</dt>
            <dd pn="section-4.3.1-5.18">If and only if the bundle processing control flags
   of this primary block indicate that the bundle is a fragment, 
   fragment offset <bcp14>SHALL</bcp14> be present in the primary block. Fragment
   offset <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer indicating
   the offset from the start of the original ADU at
   which the bytes comprising the payload of this bundle were located.</dd>
            <dt pn="section-4.3.1-5.19">Total Application Data Unit Length:</dt>
            <dd pn="section-4.3.1-5.20">If and only if the bundle
   processing control flags of this primary block indicate that the
   bundle is a fragment, total application data unit length <bcp14>SHALL</bcp14> be
   present in the primary block. Total application data unit length
   <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer indicating the total
   length of the original ADU of which this bundle's
   payload is a part.</dd>
            <dt pn="section-4.3.1-5.21">CRC:</dt>
            <dd pn="section-4.3.1-5.22">A CRC <bcp14>SHALL</bcp14> be present in the primary block unless the bundle includes
   a BPSec Block Integrity Block <xref target="RFC9172" format="default" sectionFormat="of" derivedContent="BPSEC"/> whose
   target is the primary block, in which case a CRC <bcp14>MAY</bcp14> be present in the
   primary block.  The length and nature of the CRC <bcp14>SHALL</bcp14> be as indicated by
   the CRC type.  The CRC <bcp14>SHALL</bcp14> be computed over the concatenation of all
   bytes (including CBOR "break" characters) of the primary block including
   the CRC field itself, which, for this purpose, <bcp14>SHALL</bcp14> be temporarily populated
   with all bytes set to zero.</dd>
          </dl>
        </section>
        <section anchor="sect-4.3.2" numbered="true" toc="include" removeInRFC="false" pn="section-4.3.2">
          <name slugifiedName="name-canonical-bundle-block-form">Canonical Bundle Block Format</name>
          <t indent="0" pn="section-4.3.2-1">
   Every block other than the primary block (all such blocks are termed
   "canonical" blocks) <bcp14>SHALL</bcp14> be represented as a CBOR array; the number
   of elements in the array <bcp14>SHALL</bcp14> be 5 (if CRC type is zero) or 6
   (otherwise).</t>
          <t indent="0" pn="section-4.3.2-2">
   The fields of every canonical block <bcp14>SHALL</bcp14> be as follows, listed in
   the order in which they <bcp14>MUST</bcp14> appear:</t>
          <dl indent="3" newline="false" spacing="normal" pn="section-4.3.2-3">
            <dt pn="section-4.3.2-3.1">Block type code:</dt>
            <dd pn="section-4.3.2-3.2">An unsigned integer. Bundle block type code 1
        indicates that the block is a Bundle Payload Block. Other block type codes
        are described in <xref target="sect-9.1" format="default" sectionFormat="of" derivedContent="Section 9.1"/>.
        Block type codes 192 through 255 are not reserved and
        are available for private and/or experimental use.  All other block
        type code values are reserved for future use.</dd>
            <dt pn="section-4.3.2-3.3">Block number:</dt>
            <dd pn="section-4.3.2-3.4">An unsigned integer as discussed in <xref target="sect-4.1" format="default" sectionFormat="of" derivedContent="Section 4.1"/>.  The block
        number <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer.</dd>
            <dt pn="section-4.3.2-3.5">Block processing control flags:</dt>
            <dd pn="section-4.3.2-3.6">As discussed in <xref target="sect-4.2.4" format="default" sectionFormat="of" derivedContent="Section 4.2.4"/>.</dd>
            <dt pn="section-4.3.2-3.7">CRC type:</dt>
            <dd pn="section-4.3.2-3.8">As discussed in <xref target="sect-4.2.1" format="default" sectionFormat="of" derivedContent="Section 4.2.1"/>.</dd>
            <dt pn="section-4.3.2-3.9">Block-type-specific data:</dt>
            <dd pn="section-4.3.2-3.10">Represented as a single definite-length
        CBOR byte string, i.e., a CBOR byte string that is not of indefinite
        length.  For each type of block, the block-type-specific data byte
        string is the serialization, in a block-type-specific manner, of the
        data conveyed by that type of block; definitions of blocks are
        required to define the manner in which block-type-specific data are
        serialized within the block-type-specific data field. For the Bundle Payload
        Block in particular (block type 1), the block-type-specific data
        field, termed the "payload", <bcp14>SHALL</bcp14> be an ADU, or
        some contiguous extent thereof, represented as a definite-length CBOR
        byte string.</dd>
            <dt pn="section-4.3.2-3.11">If and only if the value of the CRC type field of this block is
        non-zero:</dt>
            <dd pn="section-4.3.2-3.12">A CRC. If present, the length and nature of the CRC <bcp14>SHALL</bcp14> be
        as indicated by the CRC type and the CRC <bcp14>SHALL</bcp14> be computed over the
        concatenation of all bytes of the block (including CBOR "break"
        characters) including the CRC field itself, which, for this purpose,
        <bcp14>SHALL</bcp14> be temporarily populated with all bytes set to zero.</dd>
          </dl>
        </section>
      </section>
      <section anchor="sect-4.4" numbered="true" toc="include" removeInRFC="false" pn="section-4.4">
        <name slugifiedName="name-extension-blocks">Extension Blocks</name>
        <t indent="0" pn="section-4.4-1">"Extension blocks" are all blocks other than the primary and payload
   blocks. Three types of extension blocks are defined below.  All
   implementations of the Bundle Protocol specification (the present
   document) <bcp14>MUST</bcp14> include procedures for recognizing, parsing, and
   acting on, but not necessarily producing, these types of extension
   blocks.</t>
        <t indent="0" pn="section-4.4-2">
   The specifications for additional types of extension blocks must
   indicate whether or not BP implementations conforming to those
   specifications must recognize, parse, act on, and/or produce blocks
   of those types.  As not all nodes will necessarily instantiate BP
   implementations that conform to those additional specifications, it
   is possible for a node to receive a bundle that includes extension
   blocks that the node cannot process. The values of the block
   processing control flags indicate the action to be taken by the
   BPA when this is the case.</t>
        <t indent="0" pn="section-4.4-3">
   No mandated procedure in this specification is unconditionally
   dependent on the absence or presence of any extension block.
   Therefore, any BPA <bcp14>MAY</bcp14> insert or remove any
   extension block in any bundle, subject to all mandates in the Bundle
   Protocol specification and all extension block specifications to
   which the node's BP implementation conforms.  Note that removal of
   an extension block will probably disable one or more elements of
   bundle processing that were intended by the BPA that inserted that
   block.  In particular, note that removal of an extension block that
   is one of the targets of a BPSec security block may render the
   bundle unverifiable.</t>
        <t indent="0" pn="section-4.4-4">
   The following extension blocks are defined in the current document.</t>
        <section anchor="sect-4.4.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.1">
          <name slugifiedName="name-previous-node">Previous Node</name>
          <t indent="0" pn="section-4.4.1-1">
   The Previous Node Block, block type 6, identifies the node that
   forwarded this bundle to the local node (i.e., to the node at which
   the bundle currently resides); its block-type-specific data is the
   node ID of that forwarder node.  That node ID <bcp14>SHALL</bcp14> conform to <xref target="sect-4.2.5.2" format="default" sectionFormat="of" derivedContent="Section 4.2.5.2"/>.
   If the local
   node is the source of the bundle, then the bundle <bcp14>MUST NOT</bcp14> contain
   any Previous Node Block.  Otherwise, the bundle <bcp14>SHOULD</bcp14> contain one
   (1) occurrence of this type of block and <bcp14>MUST NOT</bcp14> contain more than
   one.</t>
        </section>
        <section anchor="sect-4.4.2" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2">
          <name slugifiedName="name-bundle-age">Bundle Age</name>
          <t indent="0" pn="section-4.4.2-1">
   The Bundle Age Block, block type 7, contains the number of
   milliseconds that have elapsed between the time the bundle was
   created and the time at which it was most recently forwarded.  It is
   intended for use by nodes lacking access to an accurate clock, to
   aid in determining the time at which a bundle's lifetime expires.
   The block-type-specific data of this block is an unsigned integer
   containing the age of the bundle in milliseconds, which <bcp14>SHALL</bcp14> be
   represented as a CBOR unsigned integer item. (The age of the bundle
   is the sum of all known intervals of the bundle's residence at
   forwarding nodes, up to the time at which the bundle was most
   recently forwarded, plus the summation of signal propagation time
   over all episodes of transmission between forwarding nodes.
   Determination of these values is an implementation matter.) If the
   bundle's creation time is zero, then the bundle <bcp14>MUST</bcp14> contain exactly
   one (1) occurrence of this type of block; otherwise, the bundle <bcp14>MAY</bcp14>
   contain at most one (1) occurrence of this type of block.  A bundle
   <bcp14>MUST NOT</bcp14> contain multiple occurrences of the Bundle Age Block, as
   this could result in processing anomalies.</t>
        </section>
        <section anchor="sect-4.4.3" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.3">
          <name slugifiedName="name-hop-count">Hop Count</name>
          <t indent="0" pn="section-4.4.3-1">
   The Hop Count Block, block type 10, contains two unsigned integers:
   hop limit and hop count.  A "hop" is here defined as an occasion on
   which a bundle was forwarded from one node to another node.  The hop
   limit <bcp14>MUST</bcp14> be in the range 1 through 255. The hop limit value <bcp14>SHOULD NOT</bcp14> be changed at any time after creation of the Hop Count Block;
   the hop count value <bcp14>SHOULD</bcp14> initially be zero and <bcp14>SHOULD</bcp14> be increased
   by 1 on each hop.</t>
          <t indent="0" pn="section-4.4.3-2">
   The Hop Count Block is mainly intended as a safety mechanism, a
   means of identifying bundles for removal from the network that can
   never be delivered due to a persistent forwarding error.  The hop count
   is particularly valuable as a defense against routing anomalies that
   might cause a bundle to be forwarded in a cyclical "ping-pong"
   fashion between two nodes.  When a bundle's hop count exceeds its
   hop limit, the bundle <bcp14>SHOULD</bcp14> be deleted for the reason "Hop limit exceeded", following the Bundle Deletion procedure defined in
   <xref target="sect-5.10" format="default" sectionFormat="of" derivedContent="Section 5.10"/>.</t>
          <t indent="0" pn="section-4.4.3-3">
   Procedures for determining the appropriate hop limit for a bundle
   are beyond the scope of this specification.</t>
          <t indent="0" pn="section-4.4.3-4">
   The block-type-specific data in a Hop Count Block <bcp14>SHALL</bcp14> be
   represented as a CBOR array comprising two items.  The first item of
   this array <bcp14>SHALL</bcp14> be the bundle's hop limit, represented as a CBOR
   unsigned integer.  The second item of this array <bcp14>SHALL</bcp14> be the
   bundle's hop count, represented as a CBOR unsigned integer. A bundle
   <bcp14>MAY</bcp14> contain one occurrence of this type of block but <bcp14>MUST NOT</bcp14>
   contain more than one.</t>
        </section>
      </section>
    </section>
    <section anchor="sect-5" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-bundle-processing">Bundle Processing</name>
      <t indent="0" pn="section-5-1">
   The bundle-processing procedures mandated in this section and in
   <xref target="sect-6" format="default" sectionFormat="of" derivedContent="Section 6"/> govern the operation of the BPA and the
   application agent administrative element of each bundle node. They
   are neither exhaustive nor exclusive. Supplementary DTN protocol
   specifications (including, but not restricted to, Bundle Protocol 
   Security <xref target="RFC9172" format="default" sectionFormat="of" derivedContent="BPSEC"/>) may augment, override, or supersede the
   mandates of this document.</t>
      <section anchor="sect-5.1" numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-generation-of-administrativ">Generation of Administrative Records</name>
        <t indent="0" pn="section-5.1-1">
   All transmission of bundles is in response to bundle transmission
   requests presented by nodes' application agents. When required to
   "generate" an administrative record (such as a bundle status
   report), the BPA itself is responsible for causing
   a new bundle to be transmitted, conveying that record. In concept,
   the BPA discharges this responsibility by
   directing the administrative element of the node's application agent
   to construct the record and request its transmission as detailed in
   <xref target="sect-6" format="default" sectionFormat="of" derivedContent="Section 6"/>. In practice, the manner in which administrative
   record generation is accomplished is an implementation matter,
   provided the constraints noted in <xref target="sect-6" format="default" sectionFormat="of" derivedContent="Section 6"/> are observed.</t>
        <t indent="0" pn="section-5.1-2">
   Status reports are relatively small bundles.  Moreover, even when
   the generation of status reports is enabled, the decision on whether
   or not to generate a requested status report is left to the
   discretion of the BPA.  Nonetheless, note that
   requesting status reports for any single bundle might easily result
   in the generation of (1 + (2 *(N-1))) status report bundles, where N
   is the number of nodes on the path from the bundle's source to its
   destination, inclusive.  That is, the requesting of status reports
   for large numbers of bundles could result in an unacceptable
   increase in the bundle traffic in the network. For this reason, the
   generation of status reports <bcp14>MUST</bcp14> be disabled by default and enabled
   only when the risk of excessive network traffic is deemed
   acceptable.  Mechanisms that could assist in assessing and
   mitigating this risk, such as pre-placed agreements authorizing the
   generation of status reports under specified circumstances, are
   beyond the scope of this specification.</t>
        <t indent="0" pn="section-5.1-3">Notes on administrative record terminology:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.1-4">
          <li pn="section-5.1-4.1">A "bundle reception status report" is a bundle status report with
          the "Reporting node received bundle" flag set to 1.</li>
          <li pn="section-5.1-4.2">A "bundle forwarding status report" is a bundle status report
          with the "Reporting node forwarded the bundle" flag set to 1.</li>
          <li pn="section-5.1-4.3">A "bundle delivery status report" is a bundle status report with
          the "Reporting node delivered the bundle" flag set to 1.</li>
          <li pn="section-5.1-4.4">A "bundle deletion status report" is a bundle status report with
          the "Reporting node deleted the bundle" flag set to 1.</li>
        </ul>
      </section>
      <section anchor="sect-5.2" numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-bundle-transmission">Bundle Transmission</name>
        <t indent="0" pn="section-5.2-1">
        The steps in processing a bundle transmission request are as follows:</t>
        <ol type="Step %d:" indent="9" spacing="normal" start="1" pn="section-5.2-2">
        <li pn="section-5.2-2.1" derivedCounter="Step 1:">
   Transmission of the bundle is initiated. An outbound bundle
   <bcp14>MUST</bcp14> be created per the parameters of the bundle transmission
   request, with the retention constraint "Dispatch pending". The
   source node ID of the bundle <bcp14>MUST</bcp14> be either (a) the null endpoint ID,
   indicating that the source of the bundle is anonymous or (b) the
   EID of a singleton endpoint whose only member is the node of which
   the BPA is a component.</li>
          <li pn="section-5.2-2.2" derivedCounter="Step 2:"> Processing proceeds from Step 1 of <xref target="sect-5.4" format="default" sectionFormat="of" derivedContent="Section 5.4"/>.</li>
        </ol>
      </section>
      <section anchor="sect-5.3" numbered="true" toc="include" removeInRFC="false" pn="section-5.3">
        <name slugifiedName="name-bundle-dispatching">Bundle Dispatching</name>
        <t indent="0" pn="section-5.3-1">
   (Note that this procedure is initiated only following completion of
   Step 4 of <xref target="sect-5.6" format="default" sectionFormat="of" derivedContent="Section 5.6"/>.)</t>
        <t indent="0" pn="section-5.3-2">
        The steps in dispatching a bundle are as follows:</t>
        <ol type="Step %d:" indent="9" spacing="normal" start="1" pn="section-5.3-3">
        <li pn="section-5.3-3.1" derivedCounter="Step 1:">
  If the bundle's destination endpoint is an endpoint of which
   the node is a member, the Bundle Delivery procedure defined in
   <xref target="sect-5.7" format="default" sectionFormat="of" derivedContent="Section 5.7"/> <bcp14>MUST</bcp14> be followed and, for the purposes of all subsequent
   processing of this bundle at this node, the node's membership in the
   bundle's destination endpoint <bcp14>SHALL</bcp14> be disavowed; specifically, even
   though the node is a member of the bundle's destination endpoint,
   the node <bcp14>SHALL NOT</bcp14> undertake to forward the bundle to itself in the
   course of performing the procedure described in <xref target="sect-5.4" format="default" sectionFormat="of" derivedContent="Section 5.4"/>.</li>
          <li pn="section-5.3-3.2" derivedCounter="Step 2:"> Processing proceeds from Step 1 of <xref target="sect-5.4" format="default" sectionFormat="of" derivedContent="Section 5.4"/>.</li>
        </ol>
      </section>
      <section anchor="sect-5.4" numbered="true" toc="include" removeInRFC="false" pn="section-5.4">
        <name slugifiedName="name-bundle-forwarding">Bundle Forwarding</name>
        <t indent="0" pn="section-5.4-1">
        The steps in forwarding a bundle are as follows:</t>
        <ol type="Step %d:" indent="9" spacing="normal" start="1" pn="section-5.4-2">
        
  <li pn="section-5.4-2.1" derivedCounter="Step 1:">The retention constraint "Forward pending" <bcp14>MUST</bcp14> be added to
   the bundle, and the bundle's "Dispatch pending" retention constraint
   <bcp14>MUST</bcp14> be removed.</li>
          <li pn="section-5.4-2.2" derivedCounter="Step 2:">
            <t indent="0" pn="section-5.4-2.2.1">The BPA <bcp14>MUST</bcp14> determine whether or not
   forwarding is contraindicated (that is, rendered inadvisable) for
   any of the reasons listed in the IANA "Bundle Status Report Reason Codes" registry 
   (see <xref target="sect-9.5" format="default" sectionFormat="of" derivedContent="Section 9.5"/>), whose initial contents
   are listed in  <xref target="tab-1" format="default" sectionFormat="of" derivedContent="Table 1"/>. In particular:</t>
            <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.4-2.2.2">
              <li pn="section-5.4-2.2.2.1">The BPA <bcp14>MAY</bcp14> choose to either forward the bundle
          directly to its destination node(s) (if possible) or forward the
          bundle to some other node(s) for further forwarding. The manner in
          which this decision is made may depend on the scheme name in the
          destination endpoint ID and/or on other state but in any case is
          beyond the scope of this document; one possible mechanism is
          described in <xref target="SABR" format="default" sectionFormat="of" derivedContent="SABR"/>. If the BPA elects to forward the bundle to some
          other node(s) for further forwarding but finds it impossible to
          select any node(s) to forward the bundle to, then forwarding is
          contraindicated.</li>
              <li pn="section-5.4-2.2.2.2">Provided the BPA succeeded in selecting the
          node or nodes to forward the bundle to, the BPA <bcp14>MUST</bcp14>
          subsequently select the CLA(s) whose services
          will enable the node to send the bundle to those nodes.  The manner
          in which specific appropriate CLAs are
          selected is beyond the scope of this document; the TCP
          CLA <xref target="RFC9174" format="default" sectionFormat="of" derivedContent="TCPCL"/> <bcp14>MUST</bcp14>
          be implemented when some or all of the bundles forwarded by the
          BPA must be forwarded via the Internet but may not
          be appropriate for the forwarding of any particular bundle. If the
          agent finds it impossible to select any appropriate CLA(s) to use in forwarding this bundle, then forwarding
          is contraindicated.</li>
            </ul>
          </li>
          <li pn="section-5.4-2.3" derivedCounter="Step 3:">
   If forwarding of the bundle is determined to be
   contraindicated for any of the reasons listed in the IANA "Bundle Status Report
   Reason Codes" registry (see <xref target="sect-9.5" format="default" sectionFormat="of" derivedContent="Section 9.5"/>), then
   the Forwarding Contraindicated procedure defined in <xref target="sect-5.4.1" format="default" sectionFormat="of" derivedContent="Section 5.4.1"/>
            <bcp14>MUST</bcp14> be followed; the remaining steps of this Bundle Forwarding procedure are skipped at this time.</li>
          <li pn="section-5.4-2.4" derivedCounter="Step 4:">
            <t indent="0" pn="section-5.4-2.4.1">For each node selected for forwarding, the BPA <bcp14>MUST</bcp14> invoke the services of the selected CLA(s) in order to effect the sending of the bundle to that
   node. Determining the time at which the BPA
   invokes CLA services is a BPA implementation
   matter.  Determining the time at which each CLA subsequently responds to this service invocation by sending
   the bundle is a CLA implementation matter.
  Note that:</t>
            <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.4-2.4.2">
              <li pn="section-5.4-2.4.2.1">If the bundle has a Previous Node Block, as defined in <xref target="sect-4.4.1" format="default" sectionFormat="of" derivedContent="Section 4.4.1"/>,
          then that block <bcp14>MUST</bcp14> be removed from the bundle before the
          bundle is forwarded.</li>
              <li pn="section-5.4-2.4.2.2">If the BPA is configured to attach Previous
          Node Blocks to forwarded bundles, then a Previous Node Block
          containing the node ID of the forwarding node <bcp14>MUST</bcp14> be inserted into
          the bundle before the bundle is forwarded.</li>
              <li pn="section-5.4-2.4.2.3">If the bundle has a Bundle Age Block, as defined in <xref target="sect-4.4.2" format="default" sectionFormat="of" derivedContent="Section 4.4.2"/>,
          then at the last possible moment before the CLA initiates
          conveyance of the bundle via the CL protocol the bundle age value
          <bcp14>MUST</bcp14> be increased by the difference between the current time and the
          time at which the bundle was received (or, if the local node is the
          source of the bundle, created).</li>
            </ul>
          </li>
          <li pn="section-5.4-2.5" derivedCounter="Step 5:">
   When all selected CLAs have informed
   the BPA that they have concluded their data-sending procedures
   with regard to this bundle, processing may depend on the results of those
   procedures.</li>
        </ol>
        <t indent="0" pn="section-5.4-3"> 
   If completion of the data-sending procedures by all selected
   CLAs has not resulted in successful forwarding
   of the bundle (an implementation-specific determination that is
   beyond the scope of this specification), then the BPA <bcp14>MAY</bcp14> choose (in an implementation-specific manner, again beyond
   the scope of this specification) to initiate another attempt to
   forward the bundle.  In that event, processing proceeds from Step 4.
   The minimum number of times a given node will initiate another
   forwarding attempt for any single bundle in this event (a number
   that may be zero) is a node configuration parameter that must be
   exposed to other nodes in the network to the extent that this is
   required by the operating environment.</t>
        <t indent="0" pn="section-5.4-4">
   If completion of the data-sending procedures by all selected
   CLAs <strong>HAS</strong> resulted in successful forwarding of
   the bundle, or if it has not but the BPA does not
   choose to initiate another attempt to forward the bundle, then:
        </t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.4-5">
          <li pn="section-5.4-5.1">If the "request reporting of bundle forwarding" flag in the
          bundle's status report request field is set to 1 and status
          reporting is enabled, then a bundle forwarding status report <bcp14>SHOULD</bcp14>
          be generated, destined for the bundle's report-to endpoint ID. The
          reason code on this bundle forwarding status report <bcp14>MUST</bcp14> be "no
          additional information".</li>
          <li pn="section-5.4-5.2">If any applicable Bundle Protocol extensions mandate generation
          of status reports upon conclusion of convergence-layer data-sending
          procedures, all such status reports <bcp14>SHOULD</bcp14> be generated with
          extension-mandated reason codes.</li>
          <li pn="section-5.4-5.3">The bundle's "Forward pending" retention constraint <bcp14>MUST</bcp14> be
          removed.</li>
        </ul>
        <section anchor="sect-5.4.1" numbered="true" toc="include" removeInRFC="false" pn="section-5.4.1">
          <name slugifiedName="name-forwarding-contraindicated">Forwarding Contraindicated</name>
          <t indent="0" pn="section-5.4.1-1">
   The steps in responding to contraindication of forwarding are as follows:</t>
          <ol type="Step %d:" indent="9" spacing="normal" start="1" pn="section-5.4.1-2">
  <li pn="section-5.4.1-2.1" derivedCounter="Step 1:">The BPA <bcp14>MUST</bcp14> determine whether or not to
   declare failure in forwarding the bundle. Note: This decision is
   likely to be influenced by the reason for which forwarding is
   contraindicated.</li>
            <li pn="section-5.4.1-2.2" derivedCounter="Step 2:">
   If forwarding failure is declared, then the Forwarding
          Failed procedure defined in <xref target="sect-5.4.2" format="default" sectionFormat="of" derivedContent="Section 5.4.2"/> <bcp14>MUST</bcp14> be followed.</li>
          </ol>
          <t indent="0" pn="section-5.4.1-3">
   Otherwise, when -- at some future time -- the forwarding of this
   bundle ceases to be contraindicated, processing proceeds from Step 4
          of <xref target="sect-5.4" format="default" sectionFormat="of" derivedContent="Section 5.4"/>.</t>
        </section>
        <section anchor="sect-5.4.2" numbered="true" toc="include" removeInRFC="false" pn="section-5.4.2">
          <name slugifiedName="name-forwarding-failed">Forwarding Failed</name>
          <t indent="0" pn="section-5.4.2-1">
   The steps in responding to a declaration of forwarding failure are as follows:</t>
          <ol type="Step %d:" indent="9" spacing="normal" start="1" pn="section-5.4.2-2">
   <li pn="section-5.4.2-2.1" derivedCounter="Step 1:">The BPA <bcp14>MAY</bcp14> forward the bundle back to the
   node that sent it, as identified by the Previous Node Block, if
   present.  This forwarding, if performed, <bcp14>SHALL</bcp14> be accomplished by
   performing Step 4 and Step 5 of <xref target="sect-5.4" format="default" sectionFormat="of" derivedContent="Section 5.4"/> where the sole node
   selected for forwarding <bcp14>SHALL</bcp14> be the node that sent the bundle.</li>
            <li pn="section-5.4.2-2.2" derivedCounter="Step 2:">
   If the bundle's destination endpoint is an endpoint of which
   the node is a member, then the bundle's "Forward pending" retention
   constraint <bcp14>MUST</bcp14> be removed. Otherwise, the bundle <bcp14>MUST</bcp14> be deleted:
   the Bundle Deletion procedure defined in <xref target="sect-5.10" format="default" sectionFormat="of" derivedContent="Section 5.10"/> <bcp14>MUST</bcp14> be
   followed, citing the reason for which forwarding was determined to
          be contraindicated.</li>
          </ol>
        </section>
      </section>
      <section anchor="sect-5.5" numbered="true" toc="include" removeInRFC="false" pn="section-5.5">
        <name slugifiedName="name-bundle-expiration">Bundle Expiration</name>
        <t indent="0" pn="section-5.5-1">
   A bundle expires when the bundle's age exceeds its lifetime as
   specified in the primary bundle block or as overridden by the BPA. Bundle age <bcp14>MAY</bcp14> be determined by subtracting the
   bundle's creation timestamp time from the current time if (a) that
   timestamp time is not zero and (b) the local node's clock is known
   to be accurate; otherwise, bundle age <bcp14>MUST</bcp14> be obtained from the
   Bundle Age extension block.  Bundle expiration <bcp14>MAY</bcp14> occur at any
   point in the processing of a bundle. When a bundle expires, the
   BPA <bcp14>MUST</bcp14> delete the bundle for the reason
   "Lifetime expired" (when the expired lifetime is the lifetime as
   specified in the primary block) or "Traffic pared" (when the expired
   lifetime is a lifetime override as imposed by the BPA): the Bundle Deletion procedure defined in <xref target="sect-5.10" format="default" sectionFormat="of" derivedContent="Section 5.10"/> <bcp14>MUST</bcp14>
   be followed.</t>
      </section>
      <section anchor="sect-5.6" numbered="true" toc="include" removeInRFC="false" pn="section-5.6">
        <name slugifiedName="name-bundle-reception">Bundle Reception</name>
        <t indent="0" pn="section-5.6-1">
   The steps in processing a bundle that has been received from another
   node are as follows:</t>
        <ol type="Step %d:" indent="9" spacing="normal" start="1" pn="section-5.6-2">
   <li pn="section-5.6-2.1" derivedCounter="Step 1:">The retention constraint "Dispatch pending" <bcp14>MUST</bcp14> be added to
   the bundle.</li>
          <li pn="section-5.6-2.2" derivedCounter="Step 2:">
   If the "request reporting of bundle reception" flag in the
   bundle's status report request field is set to 1 and status
   reporting is enabled, then a bundle reception status report with
   reason code "No additional information" <bcp14>SHOULD</bcp14> be generated,
   destined for the bundle's report-to endpoint ID.</li>
          <li pn="section-5.6-2.3" derivedCounter="Step 3:">
   CRCs <bcp14>SHOULD</bcp14> be computed for every block of the bundle that
   has an attached CRC.  If any block of the bundle is malformed
   according to this specification (including syntactically invalid
   CBOR), or if any block has an attached CRC and the CRC computed for
   this block upon reception differs from that attached CRC, then the
   BPA <bcp14>MUST</bcp14> delete the bundle for the reason "Block unintelligible".  The Bundle Deletion procedure defined in <xref target="sect-5.10" format="default" sectionFormat="of" derivedContent="Section 5.10"/> <bcp14>MUST</bcp14> be followed, and all remaining steps of the Bundle
   Reception procedure <bcp14>MUST</bcp14> be skipped.</li>
          <li pn="section-5.6-2.4" derivedCounter="Step 4:">
            <t indent="0" pn="section-5.6-2.4.1">For each block in the bundle that is an extension block that
   the BPA cannot process:</t>
            <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.6-2.4.2">
              <li pn="section-5.6-2.4.2.1">If the block processing control flags in that block indicate that a
          status report is requested in this event and if status reporting is
          enabled, then a bundle reception status report with reason code
          "Block unsupported" <bcp14>SHOULD</bcp14> be generated, destined for the bundle's
          report-to endpoint ID.</li>
              <li pn="section-5.6-2.4.2.2">If the block processing control flags in that block indicate that the
          bundle must be deleted in this event, then the BPA
          <bcp14>MUST</bcp14> delete the bundle for the reason "Block unsupported"; the
          Bundle Deletion procedure defined in <xref target="sect-5.10" format="default" sectionFormat="of" derivedContent="Section 5.10"/> <bcp14>MUST</bcp14>
          be followed, and all remaining steps of the Bundle Reception
          procedure <bcp14>MUST</bcp14> be skipped.</li>
              <li pn="section-5.6-2.4.2.3">If the block processing control flags in that block do <strong>NOT</strong> indicate that
          the bundle must be deleted in this event but do indicate that the
          block must be discarded, then the BPA <bcp14>MUST</bcp14> remove
          this block from the bundle.</li>
              <li pn="section-5.6-2.4.2.4">If the block processing control flags in that block neither indicate that
          the bundle must be deleted nor indicate that the block must be
          discarded, then processing continues with the next extension block
          that the BPA cannot process, if any; otherwise,
          processing proceeds from Step 5.</li>
            </ul>
          </li>
          <li pn="section-5.6-2.5" derivedCounter="Step 5:">
        Processing proceeds from Step 1 of <xref target="sect-5.3" format="default" sectionFormat="of" derivedContent="Section 5.3"/>.</li>
        </ol>
      </section>
      <section anchor="sect-5.7" numbered="true" toc="include" removeInRFC="false" pn="section-5.7">
        <name slugifiedName="name-local-bundle-delivery">Local Bundle Delivery</name>
        <t indent="0" pn="section-5.7-1">
   The steps in processing a bundle that is destined for an endpoint of
        which this node is a member are as follows:</t>
        <ol type="Step %d:" indent="9" spacing="normal" start="1" pn="section-5.7-2">
        <li pn="section-5.7-2.1" derivedCounter="Step 1:">
   If the received bundle is a fragment, the ADU Reassembly procedure described in <xref target="sect-5.9" format="default" sectionFormat="of" derivedContent="Section 5.9"/> <bcp14>MUST</bcp14> be followed.
   If this procedure results in reassembly of the entire original
   ADU, processing of the fragmentary bundle whose
   payload has been replaced by the reassembled ADU
   (whether this bundle or a previously received fragment) proceeds
   from Step 2; otherwise, the retention constraint "Reassembly pending" <bcp14>MUST</bcp14> be added to the bundle, and all remaining steps of this
   procedure <bcp14>MUST</bcp14> be skipped.</li>
          <li pn="section-5.7-2.2" derivedCounter="Step 2:">
            <t indent="0" pn="section-5.7-2.2.1">Delivery depends on the state of the registration whose
   endpoint ID matches that of the destination of the bundle:</t>
            <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.7-2.2.2">
              <li pn="section-5.7-2.2.2.1">An additional implementation-specific delivery deferral procedure
          <bcp14>MAY</bcp14> optionally be associated with the registration.</li>
              <li pn="section-5.7-2.2.2.2">If the registration is in the Active state, then the bundle <bcp14>MUST</bcp14>
          be delivered automatically as soon as it is the next bundle that is
          due for delivery according to the BPA's bundle delivery scheduling
          policy (an implementation matter).</li>
              <li pn="section-5.7-2.2.2.3">
                <t indent="0" pn="section-5.7-2.2.2.3.1">If the registration is in the Passive state, or if delivery of
          the bundle fails for some implementation-specific reason, then the
          registration's delivery failure action <bcp14>MUST</bcp14> be taken. The
          delivery failure action <bcp14>MUST</bcp14> be one of the following:
                </t>
                <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.7-2.2.2.3.2">
                  <li pn="section-5.7-2.2.2.3.2.1">Defer delivery of the bundle subject to this registration
               until (a) this bundle is the least recently received of all
               bundles currently deliverable subject to this registration and
               (b) either the registration is polled or the registration
               is in the Active state, and also perform any additional
               delivery deferral procedure associated with the registration,
               or</li>
                  <li pn="section-5.7-2.2.2.3.2.2">Abandon delivery of the bundle subject to this registration
               (as defined in <xref target="sect-3.1" format="default" sectionFormat="of" derivedContent="Section 3.1"/>).</li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-5.7-2.3" derivedCounter="Step 3:">
   As soon as the bundle has been delivered, if the "request reporting of bundle delivery" flag in the bundle's status report
   request field is set to 1 and bundle status reporting is enabled,
   then a bundle delivery status report <bcp14>SHOULD</bcp14> be generated, destined
   for the bundle's report-to endpoint ID. Note that this status report
   only states that the payload has been delivered to the application
        agent, not that the application agent has processed that payload.</li>
        </ol>
      </section>
      <section anchor="sect-5.8" numbered="true" toc="include" removeInRFC="false" pn="section-5.8">
        <name slugifiedName="name-bundle-fragmentation">Bundle Fragmentation</name>
        <t indent="0" pn="section-5.8-1">
   It may at times be advantageous for BPAs to reduce
   the sizes of bundles in order to forward them. This might be the
   case, for example, if a node to which a bundle is to be forwarded is
   accessible only via intermittent contacts and no upcoming contact is
   long enough to enable the forwarding of the entire bundle.</t>
        <t indent="0" pn="section-5.8-2">
   The size of a bundle can be reduced by "fragmenting" the bundle. To
   fragment a bundle whose payload is of size M is to replace it with
   two "fragments" -- new bundles with the same source node ID and
   creation timestamp as the original bundle -- whose payloads <bcp14>MUST</bcp14> be
   the first N and the last (M - N) bytes of the original bundle's
   payload, where 0 &lt; N &lt; M.</t>
        <t indent="0" pn="section-5.8-3">
   Note that fragments are bundles and therefore may themselves be
   fragmented, so multiple episodes of fragmentation may in effect
   replace the original bundle with more than two fragments. (However,
   there is only one "level" of fragmentation, as in IP fragmentation.)</t>
        <t indent="0" pn="section-5.8-4">
   Any bundle whose primary block's bundle processing control flags do <strong>NOT</strong>
   indicate that it must not be fragmented <bcp14>MAY</bcp14> be fragmented at any
   time, for any purpose, at the discretion of the BPA.  <strong>NOTE</strong>, however, that some combinations of bundle
   fragmentation, replication, and routing might result in unexpected
   traffic patterns.</t>
        <t indent="0" pn="section-5.8-5">
   Fragmentation <bcp14>SHALL</bcp14> be constrained as follows:

        </t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.8-6">
          <li pn="section-5.8-6.1">The concatenation of the payloads of all fragments produced by
          fragmentation <bcp14>MUST</bcp14> always be identical to the payload of the
          fragmented bundle (that is, the bundle that is being
          fragmented). Note that the payloads of fragments resulting from
          different fragmentation episodes, in different parts of the network,
          may be overlapping subsets of the fragmented bundle's payload.</li>
          <li pn="section-5.8-6.2">The primary block of each fragment <bcp14>MUST</bcp14> differ from that of the
          fragmented bundle, in that the bundle processing control flags of the
          fragment <bcp14>MUST</bcp14> indicate that the bundle is a fragment and both
          fragment offset and total application data unit length must be
          provided.  Additionally, the CRC of the primary block of the
          fragmented bundle, if any, <bcp14>MUST</bcp14> be replaced in each fragment by a
          new CRC computed for the primary block of that fragment.</li>
          <li pn="section-5.8-6.3">The payload blocks of fragments will differ from that of the
          fragmented bundle as noted above.</li>
          <li pn="section-5.8-6.4">If the fragmented bundle is not a fragment or is the fragment
          with offset zero, then all extension blocks of the fragmented bundle
          <bcp14>MUST</bcp14> be replicated in the fragment whose offset is zero.</li>
          <li pn="section-5.8-6.5">Each of the fragmented bundle's extension blocks whose "Block
          must be replicated in every fragment" flag is set to 1 <bcp14>MUST</bcp14> be
          replicated in every fragment. </li>
          <li pn="section-5.8-6.6">Beyond these rules, rules for the replication of extension blocks
          in the fragments must be defined in the specifications for those
          extension block types.</li>
        </ul>
      </section>
      <section anchor="sect-5.9" numbered="true" toc="include" removeInRFC="false" pn="section-5.9">
        <name slugifiedName="name-application-data-unit-reass">Application Data Unit Reassembly</name>
        <t indent="0" pn="section-5.9-1">
   Note that the Bundle Fragmentation procedure described in <xref target="sect-5.8" format="default" sectionFormat="of" derivedContent="Section 5.8"/>
   may result in the replacement of a single original bundle with an
   arbitrarily large number of fragmentary bundles.  In order to be
   delivered at a destination node, the original bundle's payload must
   be reassembled from the payloads of those fragments.</t>
        <t indent="0" pn="section-5.9-2">
   The "material extents" of a received fragment's payload are all
   continuous sequences of bytes in that payload that do not overlap
   with the material extents of the payloads of any previously received
   fragments with the same source node ID and creation timestamp.  If
   the concatenation -- as informed by fragment offsets and payload
   lengths -- of the material extents of the payloads of this fragment
   and all previously received fragments with the same source node ID
   and creation timestamp as this fragment forms a continuous byte
   array whose length is equal to the total application data unit
   length noted in the fragment's primary block, then:

        </t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.9-3">
          <li pn="section-5.9-3.1">This byte array -- the reassembled ADU --
          <bcp14>MUST</bcp14> replace the payload of that fragment whose material extents
          include the extent at offset zero.  Note that this will enable
          delivery of the reconstituted original bundle as described in Step 1
          of <xref target="sect-5.7" format="default" sectionFormat="of" derivedContent="Section 5.7"/>.</li>
          <li pn="section-5.9-3.2">The "Reassembly pending" retention constraint <bcp14>MUST</bcp14> be removed
          from every other fragment with the same source node ID and creation
          timestamp as this fragment.</li>
        </ul>
        <t indent="0" pn="section-5.9-4">
   Note: Reassembly of ADUs from fragments occurs at
   the nodes that are members of destination endpoints as necessary; an
   ADU <bcp14>MAY</bcp14> also be reassembled at some other node on
   the path to the destination.</t>
      </section>
      <section anchor="sect-5.10" numbered="true" toc="include" removeInRFC="false" pn="section-5.10">
        <name slugifiedName="name-bundle-deletion">Bundle Deletion</name>
        <t indent="0" pn="section-5.10-1">
        The steps in deleting a bundle are as follows:</t>
        <ol type="Step %d:" indent="9" spacing="normal" start="1" pn="section-5.10-2">
        <li pn="section-5.10-2.1" derivedCounter="Step 1:">
   If the "request reporting of bundle deletion" flag in the
   bundle's status report request field is set to 1 and if status
   reporting is enabled, then a bundle deletion status report citing
   the reason for deletion <bcp14>SHOULD</bcp14> be generated, destined for the
   bundle's report-to endpoint ID.</li>
          <li pn="section-5.10-2.2" derivedCounter="Step 2:">
        All of the bundle's retention constraints <bcp14>MUST</bcp14> be removed.</li>
        </ol>
      </section>
      <section anchor="sect-5.11" numbered="true" toc="include" removeInRFC="false" pn="section-5.11">
        <name slugifiedName="name-discarding-a-bundle">Discarding a Bundle</name>
        <t indent="0" pn="section-5.11-1">
   As soon as a bundle has no remaining retention constraints, it <bcp14>MAY</bcp14> be
   discarded, thereby releasing any persistent storage that may have
   been allocated to it.</t>
      </section>
      <section anchor="sect-5.12" numbered="true" toc="include" removeInRFC="false" pn="section-5.12">
        <name slugifiedName="name-canceling-a-transmission">Canceling a Transmission</name>
        <t indent="0" pn="section-5.12-1">
   When requested to cancel a specified transmission, where the bundle
   created upon initiation of the indicated transmission has not yet
   been discarded, the BPA <bcp14>MUST</bcp14> delete that bundle
   for the reason "Transmission canceled". For this purpose, the
   procedure defined in <xref target="sect-5.10" format="default" sectionFormat="of" derivedContent="Section 5.10"/> <bcp14>MUST</bcp14> be followed.</t>
      </section>
    </section>
    <section anchor="sect-6" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-administrative-record-proce">Administrative Record Processing</name>
      <section anchor="sect-6.1" numbered="true" toc="include" removeInRFC="false" pn="section-6.1">
        <name slugifiedName="name-administrative-records">Administrative Records</name>
        <t indent="0" pn="section-6.1-1">
   Administrative records are standard ADUs that are
   used in providing some of the features of the Bundle Protocol.
   Bundle Protocol administrative record types are registered in the
   IANA "Bundle Administrative Record Types" registry <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/>;
   of these, only administrative record type 1, "Bundle status report", is defined
   for BPv7 at this time. Note that additional types of administrative
   records may be defined by supplementary DTN protocol specification
   documents.</t>
        <t indent="0" pn="section-6.1-2">
   Every administrative record consists of:

        </t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6.1-3">
          <li pn="section-6.1-3.1">A record type code (an unsigned integer for which valid values are
          as defined below).</li>
          <li pn="section-6.1-3.2">Record content in type-specific format.</li>
        </ul>
        <t indent="0" pn="section-6.1-4">
   Each BP administrative record <bcp14>SHALL</bcp14> be represented as a CBOR array
   comprising two items.</t>
        <t indent="0" pn="section-6.1-5">
   The first item of the array <bcp14>SHALL</bcp14> be a record type code, which <bcp14>SHALL</bcp14>
   be represented as a CBOR unsigned integer.</t>
        <t indent="0" pn="section-6.1-6">
   The second element of this array <bcp14>SHALL</bcp14> be the applicable CBOR
   encoding of the content of the record.  Details of the CBOR
   encoding of administrative record type 1 are provided below.
   Details of the CBOR encoding of other types of administrative
   records are included in the specifications defining those
   records.</t>
        <section anchor="sect-6.1.1" numbered="true" toc="include" removeInRFC="false" pn="section-6.1.1">
          <name slugifiedName="name-bundle-status-reports">Bundle Status Reports</name>
          <t indent="0" pn="section-6.1.1-1">
   The transmission of "bundle status reports" under specified
   conditions is an option that can be invoked when transmission of a
   bundle is requested. These reports are intended to provide
   information about how bundles are progressing through the system,
   including notices of receipt, forwarding, final delivery, and
   deletion. They are transmitted to the report-to endpoints of
   bundles.</t>
          <t indent="0" pn="section-6.1.1-2">
   Each bundle status report <bcp14>SHALL</bcp14> be represented as a CBOR array.  The
   number of elements in the array <bcp14>SHALL</bcp14> be either 6 (if the subject
   bundle is a fragment) or 4 (otherwise).</t>
          <t indent="0" pn="section-6.1.1-3">
   The first element of the bundle status report <bcp14>SHALL</bcp14> be bundle
   status information represented as a CBOR array of at least four
   elements.  The first four elements of the bundle status information
   shall provide information on the following four status
   assertions, in this order:

          </t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6.1.1-4">
            <li pn="section-6.1.1-4.1">Reporting node received bundle.</li>
            <li pn="section-6.1.1-4.2">Reporting node forwarded the bundle.</li>
            <li pn="section-6.1.1-4.3">Reporting node delivered the bundle.</li>
            <li pn="section-6.1.1-4.4">Reporting node deleted the bundle.</li>
          </ul>
          <t indent="0" pn="section-6.1.1-5">
   Each element of the bundle status information <bcp14>SHALL</bcp14> be a bundle
   status item encoded as a CBOR array.</t>
          <t indent="0" pn="section-6.1.1-6">The number of elements in
   each bundle status item <bcp14>SHALL</bcp14> be either 2 (if the value of the first element of
   the bundle status item is 1 AND the "Report status time" flag was
   set to 1 in the bundle processing control flags of the bundle whose status
   is being reported) or 1 (otherwise).</t>
          <t indent="0" pn="section-6.1.1-7">The first element of each bundle status item <bcp14>SHALL</bcp14>
   be a status indicator, a Boolean value indicating whether or not the
   corresponding bundle status is asserted, encoded as a CBOR Boolean value.
   If present, the second element of each bundle status item
   <bcp14>SHALL</bcp14> indicate the time (as reported by the local system clock;
   this is an implementation matter) at which the indicated status was asserted for
   this bundle, represented as a DTN time as described in <xref target="sect-4.2.6" format="default" sectionFormat="of" derivedContent="Section 4.2.6"/>.</t>
          <t indent="0" pn="section-6.1.1-8">
   The second element of the bundle status report <bcp14>SHALL</bcp14> be the
   bundle status report reason code explaining the value of the status
   indicator, represented as a CBOR unsigned integer. Valid status
   report reason codes are registered in the IANA "Bundle Status Report
   Reason Codes" subregistry in the "Bundle Protocol" registry (see <xref target="sect-9.5" format="default" sectionFormat="of" derivedContent="Section 9.5"/>).  The initial contents of that registry are listed in <xref target="tab-1" format="default" sectionFormat="of" derivedContent="Table 1"/>, but the list of status report reason codes provided here is
   neither exhaustive nor exclusive; supplementary DTN protocol
   specifications (including, but not restricted to, Bundle Protocol 
   Security <xref target="RFC9172" format="default" sectionFormat="of" derivedContent="BPSEC"/>) may define additional reason codes.</t>
          <table anchor="tab-1" align="left" pn="table-1">
            <name slugifiedName="name-status-report-reason-codes">Status Report Reason Codes</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Value</th>
                <th align="left" colspan="1" rowspan="1">Meaning</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">0</td>
                <td align="left" colspan="1" rowspan="1">No additional information.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">1</td>
                <td align="left" colspan="1" rowspan="1">Lifetime expired.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">2</td>
                <td align="left" colspan="1" rowspan="1">Forwarded over unidirectional link.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">3</td>
                <td align="left" colspan="1" rowspan="1">Transmission canceled.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">4</td>
                <td align="left" colspan="1" rowspan="1">Depleted storage.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">5</td>
                <td align="left" colspan="1" rowspan="1">Destination endpoint ID unavailable.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">6</td>
                <td align="left" colspan="1" rowspan="1">No known route to destination from here.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">7</td>
                <td align="left" colspan="1" rowspan="1">No timely contact with next node on route.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">8</td>
                <td align="left" colspan="1" rowspan="1">Block unintelligible.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">9</td>
                <td align="left" colspan="1" rowspan="1">Hop limit exceeded.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">10</td>
                <td align="left" colspan="1" rowspan="1">Traffic pared (e.g., status reports).</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">11</td>
                <td align="left" colspan="1" rowspan="1">Block unsupported.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">17-254</td>
                <td align="left" colspan="1" rowspan="1">Unassigned</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">255</td>
                <td align="left" colspan="1" rowspan="1">Reserved</td>
              </tr>
            </tbody>
          </table>
          <t indent="0" pn="section-6.1.1-10">
   The third element of the bundle status report <bcp14>SHALL</bcp14> be the source
   node ID identifying the source of the bundle whose status is being
   reported, represented as described in <xref target="sect-4.2.5.1.1" format="default" sectionFormat="of" derivedContent="Section 4.2.5.1.1"/>.</t>
          <t indent="0" pn="section-6.1.1-11">
   The fourth element of the bundle status report <bcp14>SHALL</bcp14> be the
   creation timestamp of the bundle whose status is being reported,
   represented as described in <xref target="sect-4.2.7" format="default" sectionFormat="of" derivedContent="Section 4.2.7"/>.</t>
          <t indent="0" pn="section-6.1.1-12">
   The fifth element of the bundle status report <bcp14>SHALL</bcp14> be present if
   and only if the bundle whose status is being reported contained a
   fragment offset.  If present, it <bcp14>SHALL</bcp14> be the subject bundle's
   fragment offset represented as a CBOR unsigned integer item.</t>
          <t indent="0" pn="section-6.1.1-13">
   The sixth element of the bundle status report <bcp14>SHALL</bcp14> be present if
   and only if the bundle whose status is being reported contained a
   fragment offset.  If present, it <bcp14>SHALL</bcp14> be the length of the subject
   bundle's payload represented as a CBOR unsigned integer item.</t>
          <t indent="0" pn="section-6.1.1-14">
   Note that the forwarding parameters (such as lifetime, applicable
   security measures, etc.) of the bundle whose status is being
   reported <bcp14>MAY</bcp14> be reflected in the parameters governing the forwarding
   of the bundle that conveys a status report, but this is an
   implementation matter.  Bundle Protocol deployment experience to
   date has not been sufficient to suggest any clear guidance on this
   topic.</t>
        </section>
      </section>
      <section anchor="sect-6.2" numbered="true" toc="include" removeInRFC="false" pn="section-6.2">
        <name slugifiedName="name-generation-of-administrative">Generation of Administrative Records</name>
        <t indent="0" pn="section-6.2-1">
   Whenever the application agent's administrative element is directed
   by the BPA to generate an administrative record,
        the following procedure must be followed:</t>
        <ol type="Step %d:" indent="9" spacing="normal" start="1" pn="section-6.2-2">
        <li pn="section-6.2-2.1" derivedCounter="Step 1:">
   The administrative record must be constructed. If the
   administrative record references a bundle and the referenced bundle
   is a fragment, the administrative record <bcp14>MUST</bcp14> contain the fragment
   offset and fragment length.</li>
          <li pn="section-6.2-2.2" derivedCounter="Step 2:">
   A request for transmission of a bundle whose payload is this
   administrative record <bcp14>MUST</bcp14> be presented to the BPA.</li>
        </ol>
      </section>
    </section>
    <section anchor="sect-7" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-services-required-of-the-co">Services Required of the Convergence Layer</name>
      <section anchor="sect-7.1" numbered="true" toc="include" removeInRFC="false" pn="section-7.1">
        <name slugifiedName="name-the-convergence-layer">The Convergence Layer</name>
        <t indent="0" pn="section-7.1-1">
   The successful operation of the end-to-end Bundle Protocol depends
   on the operation of underlying protocols at what is termed the
   "convergence layer"; these protocols accomplish communication
   between nodes. A wide variety of protocols may serve this purpose,
   so long as each CLA provides a
   defined minimal set of services to the BPA. This
   convergence-layer service specification enumerates those services.</t>
      </section>
      <section anchor="sect-7.2" numbered="true" toc="include" removeInRFC="false" pn="section-7.2">
        <name slugifiedName="name-summary-of-convergence-laye">Summary of Convergence-Layer Services</name>
        <t indent="0" pn="section-7.2-1">
   Each CLA is expected to provide the
   following services to the BPA:

        </t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-7.2-2">
          <li pn="section-7.2-2.1">sending a bundle to a bundle node that is reachable via the
          convergence-layer protocol.</li>
          <li pn="section-7.2-2.2">notifying the BPA of the disposition of its
          data-sending procedures with regard to a bundle, upon concluding
          those procedures.</li>
          <li pn="section-7.2-2.3">delivering to the BPA a bundle that was sent by
          a bundle node via the convergence-layer protocol.</li>
        </ul>
        <t indent="0" pn="section-7.2-3">
   The convergence-layer service interface specified here is neither
   exhaustive nor exclusive. That is, supplementary DTN protocol
   specifications (including, but not restricted to, Bundle Protocol 
   Security <xref target="RFC9172" format="default" sectionFormat="of" derivedContent="BPSEC"/>) may expect CLAs
   that serve BP implementations conforming to those protocols to
   provide additional services such as reporting on the transmission
   and/or reception progress of individual bundles (at completion
   and/or incrementally), retransmitting data that were lost in
   transit, discarding bundle-conveying data units that the
   convergence-layer protocol determines are corrupt or inauthentic, or reporting
   on the integrity and/or authenticity of delivered bundles.</t>
        <t indent="0" pn="section-7.2-4">
   In addition, the Bundle Protocol relies on the capabilities of protocols at the
   convergence layer to minimize congestion in the store-carry-forward overlay
   network.  The potentially long round-trip times characterizing
   delay-tolerant networks are incompatible with end-to-end, reactive
   congestion-control mechanisms, so convergence-layer protocols <bcp14>MUST</bcp14> provide
   rate limiting or congestion control.</t>
      </section>
    </section>
    <section anchor="sect-8" numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-8-1">
   The Bundle Protocol security architecture and the available security
   services are specified in an accompanying document, the Bundle Protocol Security
   (BPSec) specification <xref target="RFC9172" format="default" sectionFormat="of" derivedContent="BPSEC"/>.  Whenever Bundle
   Protocol security services (as opposed to the security services
   provided by overlying application protocols or underlying
   convergence-layer protocols) are required, those services <bcp14>SHALL</bcp14> be
   provided by BPSec rather than by some other mechanism with the same
   or similar scope.</t>
      <t indent="0" pn="section-8-2">
   A Bundle Protocol Agent (BPA) that sources, cryptographically
   verifies, and/or accepts a bundle <bcp14>MUST</bcp14> implement support for BPSec.
   Use of BPSec for any single bundle is optional.</t>
      <t indent="0" pn="section-8-3">
   The BPSec extensions to the Bundle Protocol enable each block of a
   bundle (other than a BPSec extension block) to be individually
   authenticated by a signature block (Block Integrity Block, or BIB)
   and also enable each block of a bundle other than the primary block
   (and the BPSec extension blocks themselves) to be individually
   encrypted by a Block Confidentiality Block (BCB).</t>
      <t indent="0" pn="section-8-4">
   Because the security mechanisms are extension blocks that are
   themselves inserted into the bundle, the protections they afford
   apply while the bundle is at rest, awaiting transmission at the next
   forwarding opportunity, as well as in transit.</t>
      <t indent="0" pn="section-8-5">
   Additionally, convergence-layer protocols that ensure authenticity
   of communication between adjacent nodes in a BP network topology
   <bcp14>SHOULD</bcp14> be used where available, to minimize the ability of
   unauthenticated nodes to introduce inauthentic traffic into the
   network.  Convergence-layer protocols that ensure confidentiality of
   communication between adjacent nodes in a BP network topology <bcp14>SHOULD</bcp14>
   also be used where available, to minimize exposure of the bundle's
   primary block and other cleartext blocks, thereby offering some
   defense against traffic analysis.</t>
      <t indent="0" pn="section-8-6">
   In order to provide authenticity and/or confidentiality of
   communication between BP nodes, the convergence-layer protocol
   requires as input the name or names of the expected communication peer(s).
   These must be supplied by the CLA. Details of
   the means by which the CLA determines which CL endpoint name(s) must
   be provided to the CL protocol are out of scope for this
   specification. Note, though, that when the CL endpoint names are a
   function of BP endpoint IDs, the correctness and authenticity of
   that mapping will be vital to the overall security properties that
   the CL provides to the system.</t>
      <t indent="0" pn="section-8-7">
   Note that, while the primary block must remain in the clear for
   routing purposes, the Bundle Protocol could be protected against
   traffic analysis to some extent by using bundle-in-bundle
   encapsulation <xref target="I-D.ietf-dtn-bibect" format="default" sectionFormat="of" derivedContent="BIBE"/> to tunnel bundles to a safe forward
   distribution point: the encapsulated bundle could form the payload
   of an encapsulating bundle, and that payload block could be
   encrypted by a BCB.</t>
      <t indent="0" pn="section-8-8">
   Note that the generation of bundle status reports is disabled by
   default because malicious initiation of bundle status reporting
   could result in the transmission of extremely large numbers of
   bundles, effecting a denial-of-service attack.  Imposing bundle
   lifetime overrides would constitute one defense against such an
   attack.</t>
      <t indent="0" pn="section-8-9">
   Note also that the reception of large numbers of fragmentary bundles
   with very long lifetimes could constitute a denial-of-service
   attack, occupying storage while pending reassembly that will never
   occur.  Imposing bundle lifetime overrides would, again, constitute
   one defense against such an attack.</t>
      <t indent="0" pn="section-8-10">
   This protocol makes use of absolute timestamps for several purposes.
   Provisions are included for nodes without accurate clocks to retain
   most of the protocol functionality, but nodes that are unaware that
   their clock is inaccurate may exhibit unexpected behavior.</t>
    </section>
    <section anchor="sect-9" numbered="true" toc="include" removeInRFC="false" pn="section-9">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-9-1">
   The Bundle Protocol includes fields requiring registries managed by
   IANA.</t>
      <section anchor="sect-9.1" numbered="true" toc="include" removeInRFC="false" pn="section-9.1">
        <name slugifiedName="name-bundle-block-types">Bundle Block Types</name>
        <t indent="0" pn="section-9.1-1">
   The "Bundle Block Types" subregistry in the "Bundle Protocol"
   registry has been augmented by adding a column identifying the version of
   the Bundle Protocol (Bundle Protocol Version) that applies to the
   values.  IANA has added the following values, as
   described in <xref target="sect-4.3.1" format="default" sectionFormat="of" derivedContent="Section 4.3.1"/>, to the "Bundle Block Types" registry
   with a value of "7" for the Bundle Protocol Version. IANA
   has set the Bundle Protocol Version to "6" or "6,7" for 
   preexisting values in the "Bundle Block Types" registry,
   as shown below.</t>
        <table align="left" pn="table-2">
          <name slugifiedName="name-bundle-block-types-registry">"Bundle Block Types" Registry</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Bundle Protocol Version</th>
              <th align="left" colspan="1" rowspan="1">Value</th>
              <th align="left" colspan="1" rowspan="1">Description</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">none</td>
              <td align="left" colspan="1" rowspan="1">0</td>
              <td align="left" colspan="1" rowspan="1">Reserved</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6255" format="default" sectionFormat="of" derivedContent="RFC6255"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">1</td>
              <td align="left" colspan="1" rowspan="1">Bundle Payload Block</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">2</td>
              <td align="left" colspan="1" rowspan="1">Bundle Authentication Block</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6257" format="default" sectionFormat="of" derivedContent="RFC6257"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">3</td>
              <td align="left" colspan="1" rowspan="1">Payload Integrity Block</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6257" format="default" sectionFormat="of" derivedContent="RFC6257"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">4</td>
              <td align="left" colspan="1" rowspan="1">Payload Confidentiality Block</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6257" format="default" sectionFormat="of" derivedContent="RFC6257"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">5</td>
              <td align="left" colspan="1" rowspan="1">Previous-Hop Insertion Block</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6259" format="default" sectionFormat="of" derivedContent="RFC6259"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">7</td>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">Previous node (proximate sender)</td>
              <td align="left" colspan="1" rowspan="1">[RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">7</td>
              <td align="left" colspan="1" rowspan="1">7</td>
              <td align="left" colspan="1" rowspan="1">Bundle age (in milliseconds)</td>
              <td align="left" colspan="1" rowspan="1">[RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">8</td>
              <td align="left" colspan="1" rowspan="1">Metadata Extension Block</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6258" format="default" sectionFormat="of" derivedContent="RFC6258"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">9</td>
              <td align="left" colspan="1" rowspan="1">Extension Security Block</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6257" format="default" sectionFormat="of" derivedContent="RFC6257"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">7</td>
              <td align="left" colspan="1" rowspan="1">10</td>
              <td align="left" colspan="1" rowspan="1">Hop count (#prior xmit attempts)</td>
              <td align="left" colspan="1" rowspan="1">[RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">7</td>
              <td align="left" colspan="1" rowspan="1">11-191</td>
              <td align="left" colspan="1" rowspan="1">Unassigned</td>
              <td align="left" colspan="1" rowspan="1"/>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">192-255</td>
              <td align="left" colspan="1" rowspan="1">Reserved for Private and/or Experimental Use</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sect-9.2" numbered="true" toc="include" removeInRFC="false" pn="section-9.2">
        <name slugifiedName="name-primary-bundle-protocol-ver">Primary Bundle Protocol Version</name>
        <t indent="0" pn="section-9.2-1">
   IANA has added the following value to the "Primary Bundle
   Protocol Version" subregistry in the "Bundle Protocol" registry.</t>
        <table align="left" pn="table-3">
          <name slugifiedName="name-primary-bundle-protocol-vers">"Primary Bundle Protocol Version" Registry</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Value</th>
              <th align="left" colspan="1" rowspan="1">Description</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">7</td>
              <td align="left" colspan="1" rowspan="1">Assigned</td>
              <td align="left" colspan="1" rowspan="1">[RFC9171]</td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-9.2-3"> Values 8-255 (rather than 7-255) are now Unassigned.</t>
      </section>
      <section anchor="sect-9.3" numbered="true" toc="include" removeInRFC="false" pn="section-9.3">
        <name slugifiedName="name-bundle-processing-control-fl">Bundle Processing Control Flags</name>
        <t indent="0" pn="section-9.3-1">
   The "Bundle Processing Control Flags" subregistry in the "Bundle
   Protocol" registry has been augmented by adding a column identifying the
   version of the Bundle Protocol (Bundle Protocol Version) that
   applies to the new values.  IANA has added the following
   values, as described in <xref target="sect-4.2.3" format="default" sectionFormat="of" derivedContent="Section 4.2.3"/>, to the "Bundle Processing
   Control Flags" registry with a value of "7" for the Bundle Protocol Version.
 IANA has set the Bundle Protocol Version to the value "6" or "6,7" for preexisting values in the "Bundle Processing
   Control Flags" registry, as shown below.</t>
        <table align="left" pn="table-4">
          <name slugifiedName="name-bundle-processing-control-fla">"Bundle Processing Control Flags" Registry</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Bundle Protocol Version</th>
              <th align="left" colspan="1" rowspan="1">Bit Position (right to left)</th>
              <th align="left" colspan="1" rowspan="1">Description</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">0</td>
              <td align="left" colspan="1" rowspan="1">Bundle is a fragment</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">1</td>
              <td align="left" colspan="1" rowspan="1">ADU is an administrative record</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">2</td>
              <td align="left" colspan="1" rowspan="1">Bundle must not be fragmented</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">3</td>
              <td align="left" colspan="1" rowspan="1">Custody transfer is requested</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">4</td>
              <td align="left" colspan="1" rowspan="1">Destination endpoint is a singleton</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">5</td>
              <td align="left" colspan="1" rowspan="1">Acknowledgement by application is requested</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">7</td>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">Status time requested in reports</td>
              <td align="left" colspan="1" rowspan="1">[RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">7-8</td>
              <td align="left" colspan="1" rowspan="1">Class of service: priority</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">9-13</td>
              <td align="left" colspan="1" rowspan="1">Class of service: reserved</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">14</td>
              <td align="left" colspan="1" rowspan="1">Request reporting of bundle reception</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">15</td>
              <td align="left" colspan="1" rowspan="1">Request reporting of custody acceptance</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">16</td>
              <td align="left" colspan="1" rowspan="1">Request reporting of bundle forwarding</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">17</td>
              <td align="left" colspan="1" rowspan="1">Request reporting of bundle delivery</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">18</td>
              <td align="left" colspan="1" rowspan="1">Request reporting of bundle deletion</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">19</td>
              <td align="left" colspan="1" rowspan="1">Reserved</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">20</td>
              <td align="left" colspan="1" rowspan="1">Reserved</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"/>
              <td align="left" colspan="1" rowspan="1">21-63</td>
              <td align="left" colspan="1" rowspan="1">Unassigned</td>
              <td align="left" colspan="1" rowspan="1"/>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sect-9.4" numbered="true" toc="include" removeInRFC="false" pn="section-9.4">
        <name slugifiedName="name-block-processing-control-fla">Block Processing Control Flags</name>
        <t indent="0" pn="section-9.4-1">
   The "Block Processing Control Flags" subregistry in the "Bundle
   Protocol" registry has been augmented by adding a column identifying the
   version of the Bundle Protocol (Bundle Protocol Version) that
   applies to the related BP version.  IANA has set the Bundle Protocol 
   Version to the value "6" or "6,7" for preexisting values in the "Bundle Processing
   Control Flags" registry, as shown below.</t>
        <table align="left" pn="table-5">
          <name slugifiedName="name-block-processing-control-flag">"Block Processing Control Flags" Registry</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Bundle Protocol Version</th>
              <th align="left" colspan="1" rowspan="1">
                <t indent="0" pn="section-9.4-2.1.1.0.1">Bit Position (right to left)</t>
              </th>
              <th align="left" colspan="1" rowspan="1">Description</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">0</td>
              <td align="left" colspan="1" rowspan="1">Block must be replicated in every fragment</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">1</td>
              <td align="left" colspan="1" rowspan="1">Transmit status report if block  can't be processed</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">2</td>
              <td align="left" colspan="1" rowspan="1">Delete bundle if block can't be processed</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">3</td>
              <td align="left" colspan="1" rowspan="1">Last block</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">4</td>
              <td align="left" colspan="1" rowspan="1">Discard block if it can't be processed</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">5</td>
              <td align="left" colspan="1" rowspan="1">Block was forwarded without being processed</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">Block contains an EID-reference field</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"/>
              <td align="left" colspan="1" rowspan="1">7-63</td>
              <td align="left" colspan="1" rowspan="1">Unassigned</td>
              <td align="left" colspan="1" rowspan="1"/>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sect-9.5" numbered="true" toc="include" removeInRFC="false" pn="section-9.5">
        <name slugifiedName="name-bundle-status-report-reason">Bundle Status Report Reason Codes</name>
        <t indent="0" pn="section-9.5-1">
   The "Bundle Status Report Reason Codes" subregistry in the "Bundle
   Protocol" registry has been augmented by adding a column identifying the
   version of the Bundle Protocol (Bundle Protocol Version) that
   applies to the new values.  IANA has added the following
   values, as described in <xref target="sect-6.1.1" format="default" sectionFormat="of" derivedContent="Section 6.1.1"/>, to the "Bundle Status Report
   Reason Codes" registry with a value of "7" for the Bundle Protocol Version.  IANA has set the Bundle Protocol
   Version to the value "6,7" for preexisting values in the "Bundle Status 
   Report Reason Codes" registry, as shown below.</t>
        <table align="left" pn="table-6">
          <name slugifiedName="name-bundle-status-report-reason-">"Bundle Status Report Reason Codes" Registry</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Bundle Protocol Version</th>
              <th align="left" colspan="1" rowspan="1">Value</th>
              <th align="left" colspan="1" rowspan="1">Description</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">0</td>
              <td align="left" colspan="1" rowspan="1">No additional information</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">1</td>
              <td align="left" colspan="1" rowspan="1">Lifetime expired</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">2</td>
              <td align="left" colspan="1" rowspan="1">Forwarded over unidirectional link</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">3</td>
              <td align="left" colspan="1" rowspan="1">Transmission canceled</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">4</td>
              <td align="left" colspan="1" rowspan="1">Depleted storage</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">5</td>
              <td align="left" colspan="1" rowspan="1">Destination endpoint ID unavailable</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">6</td>
              <td align="left" colspan="1" rowspan="1">No known route to destination from here</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">7</td>
              <td align="left" colspan="1" rowspan="1">No timely contact with next node on route</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">8</td>
              <td align="left" colspan="1" rowspan="1">Block unintelligible</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC5050" format="default" sectionFormat="of" derivedContent="RFC5050"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">7</td>
              <td align="left" colspan="1" rowspan="1">9</td>
              <td align="left" colspan="1" rowspan="1">Hop limit exceeded</td>
              <td align="left" colspan="1" rowspan="1">[RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">7</td>
              <td align="left" colspan="1" rowspan="1">10</td>
              <td align="left" colspan="1" rowspan="1">Traffic pared</td>
              <td align="left" colspan="1" rowspan="1">[RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">7</td>
              <td align="left" colspan="1" rowspan="1">11</td>
              <td align="left" colspan="1" rowspan="1">Block unsupported</td>
              <td align="left" colspan="1" rowspan="1">[RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"/>
              <td align="left" colspan="1" rowspan="1">17-254</td>
              <td align="left" colspan="1" rowspan="1">Unassigned</td>
              <td align="left" colspan="1" rowspan="1"/>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">6,7</td>
              <td align="left" colspan="1" rowspan="1">255</td>
              <td align="left" colspan="1" rowspan="1">Reserved</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6255" format="default" sectionFormat="of" derivedContent="RFC6255"/> [RFC9171]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sect-9.6" numbered="true" toc="include" removeInRFC="false" pn="section-9.6">
        <name slugifiedName="name-bundle-protocol-uri-scheme-">Bundle Protocol URI Scheme Types</name>
        <t indent="0" pn="section-9.6-1">
   The Bundle Protocol has a URI scheme type field -- an unsigned
   integer of indefinite length -- for which IANA has created,
   and will maintain, a new "Bundle Protocol URI Scheme Types" subregistry in the
   "Bundle Protocol" registry.  The "Bundle Protocol URI Scheme Types"
   registry governs a namespace of unsigned integers.  Initial values for
   the "Bundle Protocol URI Scheme Types" registry are given below.</t>
        <t indent="0" pn="section-9.6-2">
   The registration policy for this registry is Standards Action <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>. The
   allocation should only be granted for a Standards Track RFC approved
   by the IESG.</t>
        <t indent="0" pn="section-9.6-3">
   The range of values is provided as unsigned integers.</t>
        <t indent="0" pn="section-9.6-4">
   Each assignment consists of a URI scheme type name and its
   associated description, a reference to the document that defines the
   URI scheme, and a reference to the document that defines the use of
   this URI scheme in BP endpoint IDs (including the CBOR
   encoding of those endpoint IDs in transmitted bundles).</t>
        <table align="left" pn="table-7">
          <name slugifiedName="name-bundle-protocol-uri-scheme-t">"Bundle Protocol URI Scheme Types" Registry</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Value</th>
              <th align="left" colspan="1" rowspan="1">Description</th>
              <th align="left" colspan="1" rowspan="1">BP Utilization Reference</th>
              <th align="left" colspan="1" rowspan="1">URI Definition Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">0</td>
              <td align="left" colspan="1" rowspan="1">Reserved</td>
              <td align="left" colspan="1" rowspan="1">n/a</td>
              <td align="left" colspan="1" rowspan="1"/>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">1</td>
              <td align="left" colspan="1" rowspan="1">dtn</td>
              <td align="left" colspan="1" rowspan="1">[RFC9171]</td>
              <td align="left" colspan="1" rowspan="1">[RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">2</td>
              <td align="left" colspan="1" rowspan="1">ipn</td>
              <td align="left" colspan="1" rowspan="1">[RFC9171]</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6260" format="default" sectionFormat="of" derivedContent="RFC6260"/> [RFC9171]</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">3-254</td>
              <td align="left" colspan="1" rowspan="1">Unassigned</td>
              <td align="left" colspan="1" rowspan="1">n/a</td>
              <td align="left" colspan="1" rowspan="1"/>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">255-65535</td>
              <td align="left" colspan="1" rowspan="1">Reserved</td>
              <td align="left" colspan="1" rowspan="1">n/a</td>
              <td align="left" colspan="1" rowspan="1"/>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">&gt;65535</td>
              <td align="left" colspan="1" rowspan="1">Reserved for Private Use</td>
              <td align="left" colspan="1" rowspan="1">n/a</td>
              <td align="left" colspan="1" rowspan="1"/>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sect-9.7" numbered="true" toc="include" removeInRFC="false" pn="section-9.7">
        <name slugifiedName="name-dtn-uri-scheme">dtn URI Scheme</name>
        <t indent="0" pn="section-9.7-1">
   In the "Uniform Resource Identifier (URI) Schemes" (uri-schemes)
   registry, IANA has updated the registration of the URI
   scheme with the string "dtn" as the scheme name, as follows:</t>
        <dl indent="3" newline="false" spacing="normal" pn="section-9.7-2">
          <dt pn="section-9.7-2.1">URI scheme name:</dt>
          <dd pn="section-9.7-2.2">"dtn"</dd>
          <dt pn="section-9.7-2.3">Status:</dt>
          <dd pn="section-9.7-2.4">Permanent</dd>
          <dt pn="section-9.7-2.5">Applications and/or protocols that use this URI scheme name:</dt>
          <dd pn="section-9.7-2.6">The Delay-Tolerant Networking (DTN) Bundle Protocol (BP).</dd>
          <dt pn="section-9.7-2.7">Contact:</dt>
          <dd pn="section-9.7-2.8">
            <t indent="0" pn="section-9.7-2.8.1"><contact fullname="Scott Burleigh"/>
          &lt;sburleig.sb@gmail.com&gt;</t>
          </dd>
          <dt pn="section-9.7-2.9">Change controller:</dt>
          <dd pn="section-9.7-2.10">IETF (iesg@ietf.org)</dd>
          <dt pn="section-9.7-2.11">Reference:</dt>
          <dd pn="section-9.7-2.12">[RFC9171]</dd>
        </dl>
      </section>
      <section anchor="sect-9.8" numbered="true" toc="include" removeInRFC="false" pn="section-9.8">
        <name slugifiedName="name-ipn-uri-scheme">ipn URI Scheme</name>
        <t indent="0" pn="section-9.8-1">
   In the "Uniform Resource Identifier (URI) Schemes" (uri-schemes)
   registry, IANA has updated the registration of the URI
   scheme with the string "ipn" as the scheme name, originally
   documented in RFC 6260 <xref target="RFC6260" format="default" sectionFormat="of" derivedContent="RFC6260"/>, as follows.</t>
        <dl indent="3" newline="false" spacing="normal" pn="section-9.8-2">
          <dt pn="section-9.8-2.1">URI scheme name:</dt>
          <dd pn="section-9.8-2.2">"ipn"</dd>
          <dt pn="section-9.8-2.3">Status:</dt>
          <dd pn="section-9.8-2.4">Permanent</dd>
          <dt pn="section-9.8-2.5">Applications and/or protocols that use this URI scheme name:</dt>
          <dd pn="section-9.8-2.6">The Delay-Tolerant Networking (DTN) Bundle Protocol (BP).</dd>
          <dt pn="section-9.8-2.7">Contact:</dt>
          <dd pn="section-9.8-2.8">
            <t indent="0" pn="section-9.8-2.8.1"><contact fullname="Scott Burleigh"/>
          &lt;sburleig.sb@gmail.com&gt;</t>
          </dd>
          <dt pn="section-9.8-2.9">Change controller:</dt>
          <dd pn="section-9.8-2.10">IETF (iesg@ietf.org)</dd>
          <dt pn="section-9.8-2.11">Reference:</dt>
          <dd pn="section-9.8-2.12">[RFC9171]</dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="RFC3986" to="URI"/>
    <displayreference target="RFC4838" to="ARCH"/>
    <displayreference target="RFC7595" to="URIREG"/>
    <displayreference target="RFC9172" to="BPSEC"/>
    <displayreference target="RFC9174" to="TCPCL"/>
    <displayreference target="I-D.ietf-dtn-bibect" to="BIBE"/>
    <references pn="section-10">
      <name slugifiedName="name-references">References</name>
      <references pn="section-10.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC9172" target="https://www.rfc-editor.org/info/rfc9172" quoteTitle="true" derivedAnchor="BPSEC">
          <front>
            <title>Bundle Protocol Security (BPSec)</title>
            <author initials="E" surname="Birrane, III" fullname="Edward J. Birrane, III">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K" surname="McKeever" fullname="Kenneth McKeever">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="January" year="2022"/>
          </front>
          <seriesInfo name="RFC" value="9172"/>
          <seriesInfo name="DOI" value="10.17487/RFC9172"/>
        </reference>
        <reference anchor="CRC16" target="https://www.itu.int/rec/T-REC-X.25-199610-I/" quoteTitle="true" derivedAnchor="CRC16">
          <front>
            <title>X.25: Interface between Data Terminal Equipment (DTE) and Data Circuit-terminating Equipment (DCE) for terminals operating in the packet mode and connected to public data networks by dedicated circuit</title>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
            <date month="October" year="1996"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.25"/>
          <refcontent>p. 9, Section 2.2.7.4</refcontent>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">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="RFC4960" target="https://www.rfc-editor.org/info/rfc4960" quoteTitle="true" derivedAnchor="RFC4960">
          <front>
            <title>Stream Control Transmission Protocol</title>
            <author initials="R." surname="Stewart" fullname="R. Stewart" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2007" month="September"/>
            <abstract>
              <t indent="0">This document obsoletes RFC 2960 and RFC 3309.  It describes the Stream Control Transmission Protocol (SCTP).  SCTP is designed to transport Public Switched Telephone Network (PSTN) signaling messages over IP networks, but is capable of broader applications.</t>
              <t indent="0">SCTP is a reliable transport protocol operating on top of a connectionless packet network such as IP.  It offers the following services to its users:</t>
              <t indent="0">--  acknowledged error-free non-duplicated transfer of user data,</t>
              <t indent="0">--  data fragmentation to conform to discovered path MTU size,</t>
              <t indent="0">--  sequenced delivery of user messages within multiple streams, with an option for order-of-arrival delivery of individual user messages,</t>
              <t indent="0">--  optional bundling of multiple user messages into a single SCTP packet, and</t>
              <t indent="0">--  network-level fault tolerance through supporting of multi-homing at either or both ends of an association.</t>
              <t indent="0"> The design of SCTP includes appropriate congestion avoidance behavior and resistance to flooding and masquerade attacks.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4960"/>
          <seriesInfo name="DOI" value="10.17487/RFC4960"/>
        </reference>
        <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234" quoteTitle="true" derivedAnchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author initials="D." surname="Crocker" fullname="D. Crocker" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Overell" fullname="P. Overell">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="January"/>
            <abstract>
              <t indent="0">Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">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="RFC8949" target="https://www.rfc-editor.org/info/rfc8949" quoteTitle="true" derivedAnchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2020" month="December"/>
            <abstract>
              <t indent="0">The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t indent="0">This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049.  It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="SABR" target="https://public.ccsds.org/Pubs/734x3b1.pdf" quoteTitle="true" derivedAnchor="SABR">
          <front>
            <title>Schedule-Aware Bundle Routing</title>
            <author>
              <organization showOnFrontPage="true">Consultative Committee for Space Data Systems</organization>
            </author>
            <date month="July" year="2019"/>
          </front>
          <seriesInfo name="CCSDS Recommended Standard" value="734.3-B-1"/>
        </reference>
        <reference anchor="RFC9174" target="https://www.rfc-editor.org/info/rfc9174" quoteTitle="true" derivedAnchor="TCPCL">
          <front>
            <title>Delay-Tolerant Networking TCP Convergence-Layer Protocol Version 4</title>
            <author initials="B" surname="Sipos" fullname="Brian Sipos">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Demmer" fullname="Michael Demmer">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J" surname="Ott" fullname="Jörg Ott">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S" surname="Perreault" fullname="Simon Perreault">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="January" year="2022"/>
          </front>
          <seriesInfo name="RFC" value="9174"/>
          <seriesInfo name="DOI" value="10.17487/RFC9174"/>
        </reference>
        <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" quoteTitle="true" derivedAnchor="URI">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Fielding" fullname="R. Fielding">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Masinter" fullname="L. Masinter">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2005" month="January"/>
            <abstract>
              <t indent="0">A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC7595" target="https://www.rfc-editor.org/info/rfc7595" quoteTitle="true" derivedAnchor="URIREG">
          <front>
            <title>Guidelines and Registration Procedures for URI Schemes</title>
            <author initials="D." surname="Thaler" fullname="D. Thaler" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Hansen" fullname="T. Hansen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Hardie" fullname="T. Hardie">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2015" month="June"/>
            <abstract>
              <t indent="0">This document updates the guidelines and recommendations, as well as the IANA registration processes, for the definition of Uniform Resource Identifier (URI) schemes.  It obsoletes RFC 4395.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="35"/>
          <seriesInfo name="RFC" value="7595"/>
          <seriesInfo name="DOI" value="10.17487/RFC7595"/>
        </reference>
      </references>
      <references pn="section-10.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="RFC4838" target="https://www.rfc-editor.org/info/rfc4838" quoteTitle="true" derivedAnchor="ARCH">
          <front>
            <title>Delay-Tolerant Networking Architecture</title>
            <author initials="V." surname="Cerf" fullname="V. Cerf">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Burleigh" fullname="S. Burleigh">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Hooke" fullname="A. Hooke">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Torgerson" fullname="L. Torgerson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Durst" fullname="R. Durst">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Scott" fullname="K. Scott">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Fall" fullname="K. Fall">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Weiss" fullname="H. Weiss">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2007" month="April"/>
            <abstract>
              <t indent="0">This document describes an architecture for delay-tolerant and disruption-tolerant networks, and is an evolution of the architecture originally designed for the Interplanetary Internet, a communication system envisioned to provide Internet-like services across interplanetary distances in support of deep space exploration.  This document describes an architecture that addresses a variety of problems with internetworks having operational and performance characteristics that make conventional (Internet-like) networking approaches either unworkable or impractical.  We define a message- oriented overlay that exists above the transport (or other) layers of the networks it interconnects.  The document presents a motivation for the architecture, an architectural overview, review of state management required for its operation, and a discussion of application design issues.  This document represents the consensus of the IRTF DTN research group and has been widely reviewed by that group.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4838"/>
          <seriesInfo name="DOI" value="10.17487/RFC4838"/>
        </reference>
        <reference anchor="I-D.ietf-dtn-bibect" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-ietf-dtn-bibect-03" derivedAnchor="BIBE">
          <front>
            <title>Bundle-in-Bundle Encapsulation</title>
            <author fullname="Scott Burleigh">
              <organization showOnFrontPage="true">JPL, Calif. Inst. Of Technology</organization>
            </author>
            <date month="February" day="18" year="2020"/>
            <abstract>
              <t indent="0">   This document describes Bundle-in-Bundle Encapsulation (BIBE), a
   Delay-Tolerant Networking (DTN) Bundle Protocol (BP) "convergence
   layer" protocol that tunnels BP "bundles" through encapsulating
   bundles.  The services provided by the BIBE convergence-layer
   protocol adapter encapsulate an outbound BP "bundle" in a BIBE
   convergence-layer protocol data unit for transmission as the payload
   of a bundle.  Security measures applied to the encapsulating bundle
   may augment those applied to the encapsulated bundle.  The protocol
   includes a mechanism for recovery from loss of an encapsulating
   bundle, called "custody transfer".  This mechanism is adapted from
   the custody transfer procedures described in 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="Internet-Draft" value="draft-ietf-dtn-bibect-03"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-dtn-bibect-03.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="RFC3987" target="https://www.rfc-editor.org/info/rfc3987" quoteTitle="true" derivedAnchor="RFC3987">
          <front>
            <title>Internationalized Resource Identifiers (IRIs)</title>
            <author initials="M." surname="Duerst" fullname="M. Duerst">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Suignard" fullname="M. Suignard">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2005" month="January"/>
            <abstract>
              <t indent="0">This document defines a new protocol element, the Internationalized  Resource Identifier (IRI), as a complement of the Uniform Resource  Identifier (URI). An IRI is a sequence of characters from the  Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to   URIs is defined, which means that IRIs can be used instead of URIs,  where appropriate, to identify resources.</t>
              <t indent="0"> The approach of defining a new protocol element was chosen instead of extending or changing the definition of URIs.  This was done in order  to allow a clear distinction and to avoid incompatibilities with  existing software. Guidelines are provided for the use and deployment of IRIs in various protocols, formats, and software components that currently deal with URIs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3987"/>
          <seriesInfo name="DOI" value="10.17487/RFC3987"/>
        </reference>
        <reference anchor="RFC5050" target="https://www.rfc-editor.org/info/rfc5050" quoteTitle="true" derivedAnchor="RFC5050">
          <front>
            <title>Bundle Protocol Specification</title>
            <author initials="K." surname="Scott" fullname="K. Scott">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Burleigh" fullname="S. Burleigh">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2007" month="November"/>
            <abstract>
              <t indent="0">This document describes the end-to-end protocol, block formats, and abstract service description for the exchange of messages (bundles) in Delay Tolerant Networking (DTN).</t>
              <t indent="0">This document was produced within the IRTF's Delay Tolerant Networking Research Group (DTNRG) and represents the consensus of all of the active contributors to this group.  See http://www.dtnrg.org for more information.  This memo defines an Experimental Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5050"/>
          <seriesInfo name="DOI" value="10.17487/RFC5050"/>
        </reference>
        <reference anchor="RFC6255" target="https://www.rfc-editor.org/info/rfc6255" quoteTitle="true" derivedAnchor="RFC6255">
          <front>
            <title>Delay-Tolerant Networking Bundle Protocol IANA Registries</title>
            <author initials="M." surname="Blanchet" fullname="M. Blanchet">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t indent="0">The Delay-Tolerant Networking (DTN) Research Group research group has defined many protocols such as the Bundle Protocol and Licklider Transmission Protocol.  The specifications of these protocols contain fields that are subject to a registry.  For the purpose of its research work, the group created ad hoc registries.  As the specifications are stable and have multiple interoperable implementations, the group would like to hand off the registries to IANA for official custody.  This document describes the actions executed by IANA.  This document is not an Internet Standards Track  specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6255"/>
          <seriesInfo name="DOI" value="10.17487/RFC6255"/>
        </reference>
        <reference anchor="RFC6257" target="https://www.rfc-editor.org/info/rfc6257" quoteTitle="true" derivedAnchor="RFC6257">
          <front>
            <title>Bundle Security Protocol Specification</title>
            <author initials="S." surname="Symington" fullname="S. Symington">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Farrell" fullname="S. Farrell">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Weiss" fullname="H. Weiss">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Lovell" fullname="P. Lovell">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t indent="0">This document defines the bundle security protocol, which provides data integrity and confidentiality services for the Bundle Protocol. Separate capabilities are provided to protect the bundle payload and additional data that may be included within the bundle.  We also describe various security considerations including some policy options.</t>
              <t indent="0">This document is a product of the Delay-Tolerant Networking Research Group and has been reviewed by that group.  No objections to its publication as an RFC were raised.  This document defines an Experimental  Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6257"/>
          <seriesInfo name="DOI" value="10.17487/RFC6257"/>
        </reference>
        <reference anchor="RFC6258" target="https://www.rfc-editor.org/info/rfc6258" quoteTitle="true" derivedAnchor="RFC6258">
          <front>
            <title>Delay-Tolerant Networking Metadata Extension Block</title>
            <author initials="S." surname="Symington" fullname="S. Symington">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t indent="0">This document defines an extension block that may be used with the Delay-Tolerant Networking (DTN) Bundle Protocol.  This Metadata Extension Block is designed to carry additional information that DTN nodes can use to make processing decisions regarding bundles, such as deciding whether to store a bundle or determining to which nodes to forward a bundle.  The metadata that is carried in a metadata block must be formatted according to the metadata type that is identified in the block's metadata type field.  One specific metadata type, for carrying URIs as metadata, is defined in this document.  Other metadata types may be defined in separate documents.  This document is a product of the Delay Tolerant Networking Research Group and has been reviewed by that group.  No objections to its publication as an RFC were raised.  This document defines an Experimental Protocol for the  Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6258"/>
          <seriesInfo name="DOI" value="10.17487/RFC6258"/>
        </reference>
        <reference anchor="RFC6259" target="https://www.rfc-editor.org/info/rfc6259" quoteTitle="true" derivedAnchor="RFC6259">
          <front>
            <title>Delay-Tolerant Networking Previous-Hop Insertion Block</title>
            <author initials="S." surname="Symington" fullname="S. Symington">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t indent="0">This document defines an extension block for use with the Delay- Tolerant Networking (DTN) Bundle Protocol.  This Previous-Hop Insertion Block (PHIB) extension block is designed to be inserted by a forwarding node to provide the endpoint identifier (EID) of an endpoint of which the forwarding node is a member so that this EID may be conveyed to the next-hop receiving node.  Knowledge of an EID of an endpoint of which a previous-hop node is a member may be required in some circumstances to support certain routing protocols (e.g., flood routing).  If this EID cannot be provided by the convergence layer or other means, the PHIB defines the mechanism whereby the EID can be provided with the bundle.  Each PHIB is always removed from the bundle by the receiving node so that its presence within the bundle is limited to exactly one hop.  This document defines the format and processing of this PHIB.  This document is a product of the Delay-Tolerant Networking Research Group and has been reviewed by that group.  No objections to its publication as an RFC were raised.  This document defines an Experimental Protocol for the  Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6259"/>
          <seriesInfo name="DOI" value="10.17487/RFC6259"/>
        </reference>
        <reference anchor="RFC6260" target="https://www.rfc-editor.org/info/rfc6260" quoteTitle="true" derivedAnchor="RFC6260">
          <front>
            <title>Compressed Bundle Header Encoding (CBHE)</title>
            <author initials="S." surname="Burleigh" fullname="S. Burleigh">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t indent="0">This document describes a convention by which Delay-Tolerant Networking (DTN) Bundle Protocol (BP) "convergence-layer" adapters may represent endpoint identifiers in a compressed form within the primary blocks of bundles, provided those endpoint identifiers conform to the structure prescribed by this convention.</t>
              <t indent="0">Compressed Bundle Header Encoding (CBHE) compression is a convergence-layer adaptation.  It is opaque to bundle processing. Therefore, it has no impact on the interoperability of different Bundle Protocol implementations, but instead affects only the interoperability of different convergence-layer adaptation implementations.</t>
              <t indent="0">This document is a product of the Delay-Tolerant Networking Research Group and has been reviewed by that group.  No objections to its publication as an RFC were raised.  This document defines an Experimental  Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6260"/>
          <seriesInfo name="DOI" value="10.17487/RFC6260"/>
        </reference>
        <reference anchor="RFC7143" target="https://www.rfc-editor.org/info/rfc7143" quoteTitle="true" derivedAnchor="RFC7143">
          <front>
            <title>Internet Small Computer System Interface (iSCSI) Protocol (Consolidated)</title>
            <author initials="M." surname="Chadalapaka" fullname="M. Chadalapaka">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Satran" fullname="J. Satran">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Meth" fullname="K. Meth">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D." surname="Black" fullname="D. Black">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="April"/>
            <abstract>
              <t indent="0">This document describes a transport protocol for SCSI that works on top of TCP.  The iSCSI protocol aims to be fully compliant with the standardized SCSI Architecture Model (SAM-2).  RFC 3720 defined the original iSCSI protocol.  RFC 3721 discusses iSCSI naming examples and discovery techniques.  Subsequently, RFC 3980 added an additional naming format to the iSCSI protocol.  RFC 4850 followed up by adding a new public extension key to iSCSI.  RFC 5048 offered a number of clarifications as well as a few improvements and corrections to the original iSCSI protocol.</t>
              <t indent="0">This document obsoletes RFCs 3720, 3980, 4850, and 5048 by consolidating them into a single document and making additional updates to the consolidated specification.  This document also updates RFC 3721.  The text in this document thus supersedes the text in all the noted RFCs wherever there is a difference in semantics.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7143"/>
          <seriesInfo name="DOI" value="10.17487/RFC7143"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author initials="M." surname="Cotton" fullname="M. Cotton">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Narten" fullname="T. Narten">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="June"/>
            <abstract>
              <t indent="0">Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t indent="0">To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t indent="0">This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="SIGC" target="https://dl.acm.org/doi/10.1145/863955.863960" quoteTitle="true" derivedAnchor="SIGC">
          <front>
            <title>A Delay-Tolerant Network Architecture for Challenged Internets</title>
            <author initials="K" surname="Fall" fullname="Kevin Fall">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="August" year="2003"/>
          </front>
          <seriesInfo name="DOI" value="10.1145/863955.863960"/>
          <refcontent>SIGCOMM 2003</refcontent>
        </reference>
      </references>
    </references>
    <section anchor="app-a" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-significant-changes-from-rf">Significant Changes from RFC 5050</name>
      <t indent="0" pn="section-appendix.a-1">
This document makes the following significant changes from RFC 5050:
      </t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.a-2">
        <li pn="section-appendix.a-2.1">Clarifies the difference between transmission and forwarding.</li>
        <li pn="section-appendix.a-2.2">Migrates custody transfer to the bundle-in-bundle encapsulation
          specification <xref target="I-D.ietf-dtn-bibect" format="default" sectionFormat="of" derivedContent="BIBE"/>.</li>
        <li pn="section-appendix.a-2.3">Introduces the concept of "node ID" as functionally distinct from
          endpoint ID, while having the same syntax.</li>
        <li pn="section-appendix.a-2.4">Restructures primary block, making it immutable.  Adds optional
          CRC.</li>
        <li pn="section-appendix.a-2.5">Adds optional CRCs to non-primary blocks.</li>
        <li pn="section-appendix.a-2.6">Adds block ID number to canonical block format (to support
          BPSec).</li>
        <li pn="section-appendix.a-2.7">Adds definition of Bundle Age extension block.</li>
        <li pn="section-appendix.a-2.8">Adds definition of Previous Node extension block.</li>
        <li pn="section-appendix.a-2.9">Adds definition of Hop Count extension block.</li>
        <li pn="section-appendix.a-2.10">Removes Quality of Service markings.</li>
        <li pn="section-appendix.a-2.11">Changes from Self-Delimiting Numeric Values (SDNVs) to CBOR encoding.</li>
        <li pn="section-appendix.a-2.12">Adds lifetime overrides.</li>
        <li pn="section-appendix.a-2.13">Clarifies that time values are denominated in milliseconds, not seconds.</li>
      </ul>
    </section>
    <section anchor="app-c" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-cddl-expression">CDDL Expression</name>
      <t indent="0" pn="section-appendix.b-1">
   For informational purposes, Carsten Bormann and Brian Sipos have
   kindly provided an expression of the Bundle Protocol specification
   in the Concise Data Definition Language (CDDL).  That CDDL
   expression is presented below.  Note that wherever the CDDL
   expression is in disagreement with the textual representation of the
   BP specification presented in the earlier sections of this document,
   the textual representation rules.</t>
      <sourcecode type="cddl" markers="false" pn="section-appendix.b-2">
   bpv7_start = bundle / #6.55799(bundle)

   ; Times before 2000 are invalid

   dtn-time = uint

   ; CRC enumerated type

   crc-type = &amp;(

     crc-none: 0,

     crc-16bit: 1,

     crc-32bit: 2

   )

   ; Either 16-bit or 32-bit

   crc-value = (bstr .size 2) / (bstr .size 4)

   creation-timestamp = [

     dtn-time, ; absolute time of creation

     sequence: uint ; sequence within the time

   ]

   eid = $eid .within eid-structure

   eid-structure = [

     uri-code: uint,

     SSP: any

   ]

   $eid /= [

     uri-code: 1,

     SSP: (tstr / 0)

   ]

   $eid /= [

     uri-code: 2,

     SSP: [

       nodenum: uint,

       servicenum: uint

     ]

   ]

   ; The root bundle array

   bundle = [primary-block, *extension-block, payload-block]

   primary-block = [

     version: 7,

     bundle-control-flags,

     crc-type,

     destination: eid,

     source-node: eid,

     report-to: eid,

     creation-timestamp,

     lifetime: uint,

     ? (

       fragment-offset: uint,

       total-application-data-length: uint

     ),

     ? crc-value,

   ]

   bundle-control-flags = uint .bits bundleflagbits

   bundleflagbits = &amp;(

     reserved: 20,

     reserved: 19,

     bundle-deletion-status-reports-are-requested: 18,

     bundle-delivery-status-reports-are-requested: 17,

     bundle-forwarding-status-reports-are-requested: 16,

     reserved: 15,

     bundle-reception-status-reports-are-requested: 14,

     reserved: 13,

     reserved: 12,

     reserved: 11,

     reserved: 10,

     reserved: 9,

     reserved: 8,

     reserved: 7,

     status-time-is-requested-in-all-status-reports: 6,

     user-application-acknowledgement-is-requested: 5,

     reserved: 4,

     reserved: 3,

     bundle-must-not-be-fragmented: 2,

     payload-is-an-administrative-record: 1,

     bundle-is-a-fragment: 0

   )

   ; Abstract shared structure of all non-primary blocks

   canonical-block-structure = [

     block-type-code: uint,

     block-number: uint,

     block-control-flags,

     crc-type,

     ; Each block type defines the content within the byte string

     block-type-specific-data,

     ? crc-value

   ]

   block-control-flags = uint .bits blockflagbits

   blockflagbits = &amp;(

     reserved: 7,

     reserved: 6,

     reserved: 5,

     block-must-be-removed-from-bundle-if-it-cannot-be-processed: 4,

     reserved: 3,

     bundle-must-be-deleted-if-block-cannot-be-processed: 2,

     status-report-must-be-transmitted-if-block-cannot-be-processed:
     1,

     block-must-be-replicated-in-every-fragment: 0

   )

   block-type-specific-data = bstr / #6.24(bstr)

   ; Actual CBOR data embedded in a byte string, with optional tag to
   indicate so.

   ; Additional plain bstr allows ciphertext data.

   embedded-cbor&lt;Item&gt; = (bstr .cbor Item) / #6.24(bstr .cbor Item) /
   bstr

   ; Extension block type, which does not specialize other than the
   code/number

   extension-block =
   $extension-block .within canonical-block-structure

   ; Generic shared structure of all non-primary blocks

   extension-block-use&lt;CodeValue, BlockData&gt; = [

     block-type-code: CodeValue,

     block-number: (uint .gt 1),

     block-control-flags,

     crc-type,

     BlockData,

     ? crc-value

   ]

   ; Payload block type

   payload-block = payload-block-structure .within canonical-block-
   structure

   payload-block-structure = [

     block-type-code: 1,

     block-number: 1,

     block-control-flags,

     crc-type,

     $payload-block-data,

     ? crc-value

   ]

   ; Arbitrary payload data, including non-CBOR byte string

   $payload-block-data /= block-type-specific-data

   ; Administrative record as a payload data specialization

   $payload-block-data /= embedded-cbor&lt;admin-record&gt;

   admin-record = $admin-record .within admin-record-structure

   admin-record-structure = [

     record-type-code: uint,

     record-content: any

   ]

   ; Only one defined record type

   $admin-record /= [1, status-record-content]

   status-record-content = [

     bundle-status-information,

     status-report-reason-code: uint,

     source-node-eid: eid,

     subject-creation-timestamp: creation-timestamp,

     ? (

       subject-payload-offset: uint,

       subject-payload-length: uint

     )

   ]

   bundle-status-information = [

     reporting-node-received-bundle: status-info-content,

     reporting-node-forwarded-bundle: status-info-content,

     reporting-node-delivered-bundle: status-info-content,

     reporting-node-deleted-bundle: status-info-content

   ]

   status-info-content = [

     status-indicator: bool,

     ? timestamp: dtn-time

   ]

   ; Previous Node extension block

   $extension-block /=

     extension-block-use&lt;6, embedded-cbor&lt;ext-data-previous-node&gt;&gt;

   ext-data-previous-node = eid

   ; Bundle Age extension block

   $extension-block /=

     extension-block-use&lt;7, embedded-cbor&lt;ext-data-bundle-age&gt;&gt;

   ext-data-bundle-age = uint

   ; Hop Count extension block

   $extension-block /=

     extension-block-use&lt;10, embedded-cbor&lt;ext-data-hop-count&gt;&gt;

   ext-data-hop-count = [

     hop-limit: uint,

     hop-count: uint

   ]
</sourcecode>
    </section>
    <section anchor="acks-section" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.c">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t indent="0" pn="section-appendix.c-1">
   This work is freely adapted from RFC 5050, which was an effort of
   the Delay-Tolerant Networking Research Group. The following DTNRG
   participants contributed significant technical material and/or
   inputs to that document: <contact fullname="Dr. Vinton Cerf"/> of Google;
   <contact fullname="Scott Burleigh"/>, <contact fullname="Adrian Hooke"/>, and
   <contact fullname="Leigh Torgerson"/> of the Jet Propulsion Laboratory;
   <contact fullname="Michael Demmer"/> of the University of California at Berkeley;
   <contact fullname="Robert Durst"/>, <contact fullname="Keith Scott"/>, and
   <contact fullname="Susan Symington"/> of The MITRE Corporation;
   <contact fullname="Kevin Fall"/> of Carnegie Mellon University;
   <contact fullname="Stephen Farrell"/> of Trinity College Dublin;
   <contact fullname="Howard Weiss"/> and <contact fullname="Peter Lovell"/> of
   SPARTA, Inc.;
   and <contact fullname="Manikantan Ramadas"/> of Ohio University.</t>
      <t indent="0" pn="section-appendix.c-2">Scott Burleigh would like to thank the Jet Propulsion Laboratory, California Institute of Technology, for its generous and sustained support of this work.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.d">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="S." surname="Burleigh" fullname="Scott Burleigh">
        <organization showOnFrontPage="true">IPNGROUP</organization>
        <address>
          <postal>
            <street>1435 Woodhurst Blvd.</street>
            <city>McLean</city>
            <region>VA</region>
            <code>22102</code>
            <country>United States of America</country>
          </postal>
          <email>sburleig.sb@gmail.com</email>
        </address>
      </author>
      <author initials="K." surname="Fall" fullname="Kevin Fall">
        <organization showOnFrontPage="true">Roland Computing Services</organization>
        <address>
          <postal>
            <street>3871 Piedmont Ave. Suite 8</street>
            <city>Oakland</city>
            <region>CA</region>
            <code>94611</code>
            <country>United States of America</country>
          </postal>
          <email>kfall+rcs@kfall.com</email>
        </address>
      </author>
      <author initials="E." surname="Birrane, III" fullname="Edward J. Birrane, III">
        <organization abbrev="APL, Johns Hopkins University" showOnFrontPage="true">Johns Hopkins University Applied Physics Laboratory</organization>
        <address>
          <postal>
            <street>11100 Johns Hopkins Rd</street>
            <city>Laurel</city>
            <region>MD</region>
            <code>20723</code>
            <country>United States of America</country>
          </postal>
          <phone>+1 443 778 7423</phone>
          <email>Edward.Birrane@jhuapl.edu</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
