| rfc9171xml2.original.xml | rfc9171.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
| <!-- <!ENTITY I-D.ietf-dtn-bpsec SYSTEM "https://xml2rfc.ietf.org/public/rfc/bib | ||||
| xml3/reference.I-D.draft-ietf-dtn-bpsec.xml"> --> | ||||
| <!ENTITY I-D.ietf-dtn-bpsec SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/ | ||||
| reference.I-D.ietf-dtn-bpsec.xml"> | ||||
| <!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.2119.xml"> | ||||
| <!ENTITY RFC4960 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.4960.xml"> | ||||
| <!ENTITY RFC5234 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.5234.xml"> | ||||
| <!ENTITY RFC8174 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.8174.xml"> | ||||
| <!ENTITY RFC8949 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.8949.xml"> | ||||
| <!-- <!ENTITY I-D.ietf-dtn-tcpclv4 SYSTEM "https://xml2rfc.ietf.org/public/rfc/b | ||||
| ibxml3/reference.I-D.draft-ietf-dtn-tcpclv4.xml"> --> | ||||
| <!ENTITY I-D.ietf-dtn-tcpclv4 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml | ||||
| 3/reference.I-D.ietf-dtn-tcpclv4.xml"> | ||||
| <!ENTITY RFC3986 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.3986.xml"> | ||||
| <!ENTITY RFC7595 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.7595.xml"> | ||||
| <!-- <!ENTITY I-D.ietf-dtn-bibect SYSTEM "https://xml2rfc.ietf.org/public/rfc/bi | ||||
| bxml3/reference.I-D.draft-ietf-dtn-bibect.xml"> --> | ||||
| <!ENTITY I-D.ietf-dtn-bibect SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3 | ||||
| /reference.I-D.ietf-dtn-bibect.xml"> | ||||
| <!ENTITY RFC3987 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.3987.xml"> | ||||
| <!ENTITY RFC5050 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.5050.xml"> | ||||
| <!ENTITY RFC6255 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.6255.xml"> | ||||
| <!ENTITY RFC6257 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.6257.xml"> | ||||
| <!ENTITY RFC6258 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.6258.xml"> | ||||
| <!ENTITY RFC6259 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.6259.xml"> | ||||
| <!ENTITY RFC6260 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.6260.xml"> | ||||
| <!ENTITY RFC7143 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.7143.xml"> | ||||
| ]> | ||||
| <rfc submissionType="IETF" docName="draft-ietf-dtn-bpbis-31" category="std" ipr= | ||||
| "trust200902"> | ||||
| <!-- Generated by id2xml 1.5.0 on 2021-04-05T23:37:33Z --> | ||||
| <?rfc strict="yes"?> | ||||
| <?rfc compact="yes"?> | ||||
| <?rfc subcompact="no"?> | ||||
| <?rfc symrefs="yes"?> | ||||
| <?rfc sortrefs="yes"?> | ||||
| <?rfc text-list-symbols="*o+-"?> | ||||
| <?rfc toc="yes"?> | ||||
| <?rfc tocDepth="5"?> | ||||
| <front> | ||||
| <title>Bundle Protocol Version 7</title> | ||||
| <author initials="S." surname="Burleigh" fullname="Scott Burleigh"> | ||||
| <organization abbrev="JPL, Calif. Inst. Of Technology">Jet Propulsion Lab | ||||
| oratory, California Institute of Technology</organization> | ||||
| <address><postal><street>4800 Oak Grove Dr.</street> | ||||
| <city>Pasadena</city><region>CA</region><code>91109-8099</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <phone>+1 818 393 3353</phone> | ||||
| <email>Scott.C.Burleigh@jpl.nasa.gov</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="K." surname="Fall" fullname="Kevin Fall"> | ||||
| <organization>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" fullname="Edward J. Birrane"> | <!-- [CS] updated by Chris 04/13/21 --> | |||
| <organization abbrev="APL, Johns Hopkins University">Johns Hopkins Univer | ||||
| sity 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 | ||||
| <!-- draft-ietf-dtn-bpbis-31-manual.txt(3160): Warning: This author is listed in | <!DOCTYPE rfc [ | |||
| the | <!ENTITY nbsp " "> | |||
| Authors' Addresses section, but was not found on the first page: US | <!ENTITY zwsp "​"> | |||
| --></email> | <!ENTITY nbhy "‑"> | |||
| </address> | <!ENTITY wj "⁠"> | |||
| </author> | ]> | |||
| <date year="2021" month="April"/> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-dtn-bpbis-31 | |||
| <workgroup>Networking Working Group</workgroup> | " number="9171" | |||
| submissionType="IETF" category="std" consensus="true" ipr="trust200902" obsolete | ||||
| s="" updates="" xml:lang="en" symRefs="true" sortRefs="true" tocInclude="true" t | ||||
| ocDepth="5" version="3"> | ||||
| <!-- [rfced] Please insert any keywords (beyond those that appear in | <!-- xml2rfc v2v3 conversion 3.7.0 --> | |||
| the title) for use on https://www.rfc-editor.org/search. --> | <!-- Generated by id2xml 1.5.0 on 2021-04-05T23:37:33Z --> | |||
| <front> | ||||
| <title>Bundle Protocol Version 7</title> | ||||
| <seriesInfo name="RFC" value="9171"/> | ||||
| <author initials="S." surname="Burleigh" fullname="Scott Burleigh"> | ||||
| <organization>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>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, II | ||||
| I"> | ||||
| <organization abbrev="APL, Johns Hopkins University">Johns Hopkins Univers | ||||
| ity 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 year="2022" month="January"/> | ||||
| <workgroup>Networking Working Group</workgroup> | ||||
| <keyword>example</keyword> | <keyword>Delay-tolerant networking</keyword> | |||
| <keyword>disruption-tolerant networking</keyword> | ||||
| <abstract><t> | <abstract> | |||
| This Internet Draft presents a specification for the Bundle | <t> | |||
| This document presents a specification for the Bundle | ||||
| Protocol, adapted from the experimental Bundle Protocol | Protocol, adapted from the experimental Bundle Protocol | |||
| specification developed by the Delay-Tolerant Networking Research | specification developed by the Delay-Tolerant Networking Research | |||
| group of the Internet Research Task Force and documented in RFC | Group of the Internet Research Task Force and documented in RFC | |||
| 5050.</t> | 5050. | |||
| </abstract> | ||||
| </front> | ||||
| <middle> | </t> | |||
| <section title="Introduction" anchor="sect-1"><t> | </abstract> | |||
| Since the publication of the Bundle Protocol Specification | </front> | |||
| (Experimental RFC 5050 <xref target="RFC5050"/>) in 2007, the Delay-Tolerant | <middle> | |||
| Networking (DTN) Bundle Protocol has been implemented in multiple | <section anchor="sect-1" numbered="true" toc="default"> | |||
| <name>Introduction</name> | ||||
| <t> | ||||
| Since the publication of the Bundle Protocol specification | ||||
| (Experimental RFC 5050 <xref target="RFC5050" format="default"/>) in 2007, th | ||||
| e Delay-Tolerant | ||||
| Networking (DTN) Bundle Protocol (BP) has been implemented in multiple | ||||
| programming languages and deployed to a wide variety of computing | programming languages and deployed to a wide variety of computing | |||
| platforms. This implementation and deployment experience has | platforms. This implementation and deployment experience has | |||
| identified opportunities for making the protocol simpler, more | identified opportunities for making the protocol simpler, more | |||
| capable, and easier to use. The present document, standardizing the | capable, and easier to use. The present document, standardizing the | |||
| Bundle Protocol (BP), is adapted from RFC 5050 in that context, | Bundle Protocol, is adapted from RFC 5050 in that context, | |||
| reflecting lessons learned. Significant changes from the Bundle | reflecting lessons learned. Significant changes from the Bundle | |||
| Protocol specification defined in RFC 5050 are listed in section 13.</t> | Protocol specification defined in RFC 5050 are listed in <xref target="app-a" | |||
| />.</t> | ||||
| <t> | <t> | |||
| This document describes version 7 of BP.</t> | This document describes BP version 7 (BPv7).</t> | |||
| <t> | ||||
| <t> | Delay-Tolerant Networking is a network architecture providing | |||
| Delay Tolerant Networking is a network architecture providing | ||||
| communications in and/or through highly stressed environments. | communications in and/or through highly stressed environments. | |||
| Stressed networking environments include those with intermittent | Stressed networking environments include those with intermittent | |||
| connectivity, large and/or variable delays, and high bit error | connectivity, large and/or variable delays, and high bit error | |||
| rates. To provide its services, BP may be viewed as sitting at the | rates. To provide its services, BP may be viewed as sitting at the | |||
| application layer of some number of constituent networks, forming a | application layer of some number of constituent networks, forming a | |||
| store-carry-forward overlay network. Key capabilities of BP | store-carry-forward overlay network. Key capabilities of BP | |||
| include: | include: | |||
| <list style="symbols"> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>Ability to use physical motility for the movement of data</t> | <li>Ability to use physical motility for the movement of data.</li> | |||
| <li>Ability to move the responsibility for error control from one | ||||
| <t>Ability to move the responsibility for error control from one | node to another.</li> | |||
| node to another</t> | <li>Ability to cope with intermittent connectivity, including cases | |||
| where the sender and receiver are not concurrently present in | ||||
| <t>Ability to cope with intermittent connectivity, including cases | the network.</li> | |||
| where the sender and receiver are not concurrently present in | <li>Ability to take advantage of scheduled, predicted, and | |||
| the network</t> | opportunistic connectivity, whether bidirectional or | |||
| unidirectional, in addition to continuous connectivity.</li> | ||||
| <t>Ability to take advantage of scheduled, predicted, and | <li>Late binding of overlay-network endpoint identifiers to | |||
| opportunistic connectivity, whether bidirectional or | underlying constituent network addresses.</li> | |||
| unidirectional, in addition to continuous connectivity</t> | </ul> | |||
| <t> | ||||
| <t>Late binding of overlay network endpoint identifiers to | ||||
| underlying constituent network addresses</t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| For descriptions of these capabilities and the rationale for the DTN | For descriptions of these capabilities and the rationale for the DTN | |||
| architecture, see [ARCH] and [SIGC].</t> | architecture, see <xref target="RFC4838"/> and <xref target="SIGC"/>.</t> | |||
| <t> | ||||
| <t> | BP's location within the standard protocol stack is as shown in <xref target= | |||
| BP's location within the standard protocol stack is as shown in Figure 1. | "fig-1"/>. | |||
| BP uses underlying "native" transport and/or network protocols for | BP uses underlying "integrated" transport and/or network protocols for | |||
| communications within a given constituent network. The layer at which | communications within a given constituent network. The layer at which | |||
| those underlying protocols are located is here termed the "convergence | those underlying protocols are located is here termed the "convergence | |||
| layer" and the interface between the bundle protocol and a specific | layer", and the interface between the Bundle Protocol and a specific | |||
| underlying protocol is termed a "convergence layer adapter".</t> | underlying protocol is termed a "convergence-layer adapter".</t> | |||
| <t> | ||||
| <t> | <xref target="fig-1"/> shows three distinct transport and network protocols | |||
| Figure 1 shows three distinct transport and network protocols | ||||
| (denoted T1/N1, T2/N2, and T3/N3).</t> | (denoted T1/N1, T2/N2, and T3/N3).</t> | |||
| <figure anchor="fig-1"> | ||||
| <figure title="The Bundle Protocol in the Protocol Stack Model" anchor="f | <name>The Bundle Protocol in the Protocol Stack Model</name> | |||
| ig-1"><artwork><![CDATA[ | <artwork name="" type="ascii-art" align="left" alt=""><![CDATA[ | |||
| +-----------+ +-----------+ | +-----------+ +-----------+ | |||
| | BP app | | BP app | | | BP app | | BP app | | |||
| +---------v-| +->>>>>>>>>>v-+ +->>>>>>>>>>v-+ +-^---------+ | +---------v-| +->>>>>>>>>>v-+ +->>>>>>>>>>v-+ +-^---------+ | |||
| | BP v | | ^ BP v | | ^ BP v | | ^ BP | | | BP v | | ^ BP v | | ^ BP v | | ^ BP | | |||
| +---------v-+ +-^---------v-+ +-^---------v-+ +-^---------+ | +---------v-+ +-^---------v-+ +-^---------v-+ +-^---------+ | |||
| | T1 v | + ^ T1/T2 v | + ^ T2/T3 v | | ^ T3 | | | T1 v | + ^ T1/T2 v | + ^ T2/T3 v | | ^ T3 | | |||
| +---------v-+ +-^---------v-+ +-^---------v + +-^---------+ | +---------v-+ +-^---------v-+ +-^---------v + +-^---------+ | |||
| | N1 v | | ^ N1/N2 v | | ^ N2/N3 v | | ^ N3 | | | N1 v | | ^ N1/N2 v | | ^ N2/N3 v | | ^ N3 | | |||
| +---------v-+ +-^---------v + +-^---------v-+ +-^---------+ | +---------v-+ +-^---------v + +-^---------v-+ +-^---------+ | |||
| | >>>>>>>>^ >>>>>>>>>>^ >>>>>>>>^ | | | >>>>>>>>^ >>>>>>>>>>^ >>>>>>>>^ | | |||
| +-----------+ +-------------+ +-------------+ +-----------+ | +-----------+ +-------------+ +-------------+ +-----------+ | |||
| | | | | | | | | | | |||
| |<---- A network ---->| |<---- A network ---->| | |<---- A network ---->| |<---- A network ---->| | |||
| | | | | | | | | | | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t> | <t> | |||
| This document describes the format of the protocol data units | This document describes the format of the protocol data units (PDUs) | |||
| (called "bundles") passed between entities participating in BP | (called "bundles") passed between entities participating in BP | |||
| communications.</t> | communications.</t> | |||
| <t> | ||||
| <t> | ||||
| The entities are referred to as "bundle nodes". This document does | The entities are referred to as "bundle nodes". This document does | |||
| not address: | not address: | |||
| <list style="symbols"> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>Operations in the convergence layer adapters that bundle nodes use | <li>Operations in the convergence-layer adapters that bundle nodes use | |||
| to transport data through specific types of internets. (However, the | to transport data through specific types of internets. (However, the | |||
| document does discuss the services that must be provided by each | document does discuss the services that must be provided by each | |||
| adapter at the convergence layer.)</t> | adapter at the convergence layer.)</li> | |||
| <li>The bundle route computation algorithm.</li> | ||||
| <t>The bundle route computation algorithm.</t> | <li>Mechanisms for populating the routing or forwarding information | |||
| bases of bundle nodes.</li> | ||||
| <t>Mechanisms for populating the routing or forwarding information | <li>The mechanisms for securing bundles en route.</li> | |||
| bases of bundle nodes.</t> | <li> The mechanisms for managing bundle nodes.</li> | |||
| </ul> | ||||
| <t>The mechanisms for securing bundles en route.</t> | <t> | |||
| <t> The mechanisms for managing bundle nodes.</t> | ||||
| </list></t> | ||||
| <t> | ||||
| Note that implementations of the specification presented in this | Note that implementations of the specification presented in this | |||
| document will not be interoperable with implementations of RFC 5050.</t> | document will not be interoperable with implementations of RFC 5050.</t> | |||
| </section> | ||||
| <section anchor="sect-2" numbered="true" toc="default"> | ||||
| <name>Conventions Used in This Document</name> | ||||
| <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | ||||
| "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | ||||
| "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | ||||
| "<bcp14>SHOULD NOT</bcp14>", | ||||
| "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
| "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document | ||||
| are to be interpreted as described in BCP 14 | ||||
| <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | ||||
| when, they appear in all capitals, as shown here.</t> | ||||
| </section> | ||||
| <section anchor="sect-3" numbered="true" toc="default"> | ||||
| <name>Service Description</name> | ||||
| <section anchor="sect-3.1" numbered="true" toc="default"> | ||||
| <name>Definitions</name> | ||||
| </section> | <dl> | |||
| <dt>Bundle:</dt> | ||||
| <section title="Conventions used in this document" anchor="sect-2"><t> | <dd>A bundle is a PDU of BP, so named because | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in BCP | ||||
| 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | ||||
| when, they appear in all capitals, as shown here.</t> | ||||
| </section> | ||||
| <section title="Service Description" anchor="sect-3"><section title="Defi | ||||
| nitions" anchor="sect-3.1"><t> | ||||
| Bundle - A bundle is a protocol data unit of BP, so named because | ||||
| negotiation of the parameters of a data exchange may be impractical | negotiation of the parameters of a data exchange may be impractical | |||
| in a delay-tolerant network: it is often better practice to "bundle" | 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 | with a unit of application data all metadata that might be needed in | |||
| order to make the data immediately usable when delivered to the | order to make the data immediately usable when delivered to the | |||
| application. Each bundle comprises a sequence of two or more | application. Each bundle comprises a sequence of two or more | |||
| "blocks" of protocol data, which serve various purposes.</t> | "blocks" of protocol data, which serve various purposes.</dd> | |||
| <t> | <dt>Block:</dt> | |||
| Block - A bundle protocol block is one of the protocol data | <dd>A Bundle Protocol block is one of the protocol data | |||
| structures that together constitute a well-formed bundle.</t> | structures that together constitute a well-formed bundle.</dd> | |||
| <t> | <dt>Application Data Unit:</dt> | |||
| Application Data Unit (ADU) - An application data unit is the unit | <dd>An application data unit (ADU) is the unit | |||
| of data whose conveyance to the bundle's destination is the purpose | of data whose conveyance to the bundle's destination is the purpose | |||
| for the transmission of some bundle that is not a fragment (as | for the transmission of some bundle that is not a fragment (as | |||
| defined below).</t> | defined below).</dd> | |||
| <t> | <dt>Bundle payload:</dt> | |||
| Bundle payload - A bundle payload (or simply "payload") is the | <dd>A bundle payload (or simply "payload") is the | |||
| content of the bundle's payload block. The terms "bundle content", | content of the bundle's payload block. The terms "bundle content", | |||
| "bundle payload", and "payload" are used interchangeably in this | "bundle payload", and "payload" are used interchangeably in this | |||
| document. For a bundle that is not a fragment (as defined below), | document. For a bundle that is not a fragment (as defined below), | |||
| the payload is an application data unit.</t> | the payload is an ADU.</dd> | |||
| <t> | <dt>Partial payload:</dt> | |||
| Partial payload - A partial payload is a payload that comprises | <dd>A partial payload is a payload that comprises | |||
| either the first N bytes or the last N bytes of some other payload | either the first N bytes or the last N bytes of some other payload | |||
| of length M, such that 0 < N < M. Note that every partial payload is a payload and therefore can be further subdivided into partial payloads.</t> | of length M, such that 0 < N < M. Note that every partial payload is a payload and therefore can be further subdivided into partial payloads.</dd> | |||
| <t> | <dt>Fragment:</dt> | |||
| Fragment - A fragment, a.k.a. "fragmentary bundle", is a bundle | <dd>A fragment, a.k.a. "fragmentary bundle", is a bundle | |||
| whose payload block contains a partial payload.</t> | whose payload block contains a partial payload.</dd> | |||
| <t> | <dt>Bundle node:</dt> | |||
| Bundle node - A bundle node (or, in the context of this document, | <dd>A bundle node (or, in the context of this document, | |||
| simply a "node") is any entity that can send and/or receive bundles. | simply a "node") is any entity that can send and/or receive bundles. | |||
| Each bundle node has three conceptual components, defined below, as | Each bundle node has three conceptual components, defined below, as | |||
| shown in Figure 2: a "bundle protocol agent", a set of zero or more | shown in <xref target="fig-2"/>: a "Bundle Protocol Agent", a set of zero or | |||
| "convergence layer adapters", and an "application agent". ("CL1 PDUs" are the | more | |||
| PDUs of the convergence-layer protocol used in network | "convergence-layer adapters", and an "application agent". | |||
| 1.)</t> | ("CL1 PDUs" are the PDUs of the convergence-layer protocol used in network 1.)< | |||
| /dd> | ||||
| </dl> | ||||
| <figure title="Components of a Bundle Node" anchor="fig-2"><artwork><![CD | <figure anchor="fig-2"> | |||
| ATA[ | <name>Components of a Bundle Node</name> | |||
| <artwork name="" type="ascii-art" align="left" alt=""><![CDATA[ | ||||
| +-----------------------------------------------------------+ | +-----------------------------------------------------------+ | |||
| |Node | | |Node | | |||
| | | | | | | |||
| | +-------------------------------------------------------+ | | | +-------------------------------------------------------+ | | |||
| | |Application Agent | | | | |Application Agent | | | |||
| | | | | | | | | | | |||
| | | +--------------------------+ +----------------------+ | | | | | +--------------------------+ +----------------------+ | | | |||
| | | |Administrative element | |Application-specific | | | | | | |Administrative element | |Application-specific | | | | |||
| | | | | |element | | | | | | | | |element | | | | |||
| | | | | | | | | | | | | | | | | | | |||
| skipping to change at line 294 ¶ | skipping to change at line 276 ¶ | |||
| | |CLA 1 | |CLA 2 | |CLA n | | | | |CLA 1 | |CLA 2 | |CLA n | | | |||
| | | | | | . . . | | | | | | | | | . . . | | | | |||
| | | | | | | | | | | | | | | | | | | |||
| +-+------------+-----+------------+-----------+-----------+-+ | +-+------------+-----+------------+-----------+-----------+-+ | |||
| ^ ^ ^ | ^ ^ ^ | |||
| CL1|PDUs CL2|PDUs CLn|PDUs | CL1|PDUs CL2|PDUs CLn|PDUs | |||
| | | | | | | | | |||
| +------v-----+ +-----v------+ +-----v-----+ | +------v-----+ +-----v------+ +-----v-----+ | |||
| Network 1 Network 2 Network n | Network 1 Network 2 Network n | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t> | <dl> | |||
| Bundle protocol agent - The bundle protocol agent (BPA) of a node is | <dt>Bundle Protocol Agent:</dt> | |||
| <dd>The Bundle Protocol Agent (BPA) of a node is | ||||
| the node component that offers the BP services and executes the | the node component that offers the BP services and executes the | |||
| procedures of the bundle protocol.</t> | procedures of the Bundle Protocol.</dd> | |||
| <dt>Convergence-layer adapter:</dt> | ||||
| <t> | <dd>A convergence-layer adapter (CLA) is a | |||
| Convergence layer adapter - A convergence layer adapter (CLA) is a | ||||
| node component that sends and receives bundles on behalf of the BPA, | node component that sends and receives bundles on behalf of the BPA, | |||
| utilizing the services of some 'native' protocol stack that is | utilizing the services of some "integrated" protocol stack that is | |||
| supported in one of the networks within which the node is | supported in one of the networks within which the node is | |||
| functionally located.</t> | functionally located.</dd> | |||
| <dt>Application agent:</dt> | ||||
| <t> | <dd>The application agent (AA) of a node is the node | |||
| Application agent - The application agent (AA) of a node is the node | ||||
| component that utilizes the BP services to effect communication for | component that utilizes the BP services to effect communication for | |||
| some user purpose. The application agent in turn has two elements, | some user purpose. The application agent in turn has two elements: | |||
| an administrative element and an application-specific element.</t> | an administrative element and an application-specific element.</dd> | |||
| <dt>Application-specific element:</dt> | ||||
| <t> | <dd>The application-specific element of | |||
| Application-specific element - The application-specific element of | ||||
| an AA is the node component that constructs, requests transmission | an AA is the node component that constructs, requests transmission | |||
| of, accepts delivery of, and processes units of user application | of, accepts delivery of, and processes units of user application | |||
| data.</t> | data.</dd> | |||
| <dt>Administrative element:</dt> | ||||
| <t> | <dd>The administrative element of an AA is the | |||
| Administrative element - The administrative element of an AA is the | ||||
| node component that constructs and requests transmission of | node component that constructs and requests transmission of | |||
| administrative records (defined below), including status reports, | administrative records (defined below), including status reports, | |||
| and accepts delivery of and processes any administrative records | and accepts delivery of and processes any administrative records | |||
| that the node receives.</t> | that the node receives.</dd> | |||
| <dt>Administrative record:</dt> | ||||
| <t> | <dd>A BP administrative record is an ADU that is exchanged between the admini | |||
| Administrative record - A BP administrative record is an application | strative elements of | |||
| data unit that is exchanged between the administrative elements of | ||||
| nodes' application agents for some BP administrative purpose. The | nodes' application agents for some BP administrative purpose. The | |||
| only administrative record defined in this specification is the | only administrative record defined in this specification is the | |||
| status report, discussed later.</t> | status report, discussed later.</dd> | |||
| <dt>Bundle endpoint:</dt> | ||||
| <t> | <dd>A bundle endpoint (or simply "endpoint") is a set | |||
| Bundle endpoint - A bundle endpoint (or simply "endpoint") is a set | ||||
| of zero or more bundle nodes that all identify themselves for BP | of zero or more bundle nodes that all identify themselves for BP | |||
| purposes by some common identifier, called a "bundle endpoint ID" | purposes by some common identifier, called a "bundle endpoint ID" | |||
| (or, in this document, simply "endpoint ID"; endpoint IDs are | (or, in this document, simply "endpoint ID"); endpoint IDs are | |||
| described in detail in Section 4.5.5.1 below.</t> | described in detail in <xref target="sect-4.2.5.1"/>.</dd> | |||
| <dt>Singleton endpoint:</dt> | ||||
| <t> | <dd>A singleton endpoint is an endpoint that always | |||
| Singleton endpoint - A singleton endpoint is an endpoint that always | contains exactly one member.</dd> | |||
| contains exactly one member.</t> | <dt>Registration:</dt> | |||
| <dd>A registration is the state machine characterizing a | ||||
| <t> | ||||
| Registration - A registration is the state machine characterizing a | ||||
| given node's membership in a given endpoint. Any single | given node's membership in a given endpoint. Any single | |||
| registration has an associated delivery failure action as defined | registration has an associated delivery failure action as defined | |||
| below and must at any time be in one of two states: Active or | below and must at any time be in one of two states: Active or | |||
| Passive. Registrations are local; information about a node's | Passive. Registrations are local; information about a node's | |||
| registrations is not expected to be available at other nodes, and | registrations is not expected to be available at other nodes, and | |||
| the Bundle Protocol does not include a mechanism for distributing | the Bundle Protocol does not include a mechanism for distributing | |||
| information about registrations.</t> | information about registrations.</dd> | |||
| <dt>Delivery:</dt> | ||||
| <t> | <dd>A bundle is considered to have been delivered at a node | |||
| Delivery - A bundle is considered to have been delivered at a node | subject to a registration as soon as the ADU that | |||
| subject to a registration as soon as the application data unit that | ||||
| is the payload of the bundle, together with any relevant metadata | is the payload of the bundle, together with any relevant metadata | |||
| (an implementation matter), has been presented to the node's | (an implementation matter), has been presented to the node's | |||
| application agent in a manner consistent with the state of that | application agent in a manner consistent with the state of that | |||
| registration.</t> | registration.</dd> | |||
| <dt>Deliverability:</dt> | ||||
| <t> | <dd>A bundle is considered "deliverable" subject to a | |||
| Deliverability - A bundle is considered "deliverable" subject to a | ||||
| registration if and only if (a) the bundle's destination endpoint is | registration if and only if (a) the bundle's destination endpoint is | |||
| the endpoint with which the registration is associated, (b) the | the endpoint with which the registration is associated, (b) the | |||
| bundle has not yet been delivered subject to this registration, and | bundle has not yet been delivered subject to this registration, and | |||
| (c) the bundle has not yet been "abandoned" (as defined below) | (c) the bundle has not yet been "abandoned" (as defined below) | |||
| subject to this registration.</t> | subject to this registration.</dd> | |||
| <dt>Abandonment:</dt> | ||||
| <t> | <dd>To abandon a bundle subject to some registration is to | |||
| Abandonment - To abandon a bundle subject to some registration is to | ||||
| assert that the bundle is not deliverable subject to that | assert that the bundle is not deliverable subject to that | |||
| registration.</t> | registration.</dd> | |||
| <dt>Delivery failure action:</dt> | ||||
| <t> | <dd>The delivery failure action of a | |||
| Delivery failure action - The delivery failure action of a | ||||
| registration is the action that is to be taken when a bundle that is | registration is the action that is to be taken when a bundle that is | |||
| "deliverable" subject to that registration is received at a time | "deliverable" subject to that registration is received at a time | |||
| when the registration is in the Passive state.</t> | when the registration is in the Passive state.</dd> | |||
| <dt>Destination:</dt> | ||||
| <t> | <dd>The destination of a bundle is the endpoint comprising | |||
| Destination - The destination of a bundle is the endpoint comprising | ||||
| the node(s) at which the bundle is to be delivered (as defined | the node(s) at which the bundle is to be delivered (as defined | |||
| above).</t> | above).</dd> | |||
| <dt>Transmission:</dt> | ||||
| <t> | <dd>A transmission is an attempt by a node's BPA to cause | |||
| Transmission - 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 | 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 | are members of some endpoint (the bundle's destination) in response | |||
| to a transmission request issued by the node's application agent.</t> | to a transmission request issued by the node's application agent.</dd> | |||
| <dt>Forwarding:</dt> | ||||
| <t> | <dd>To forward a bundle to a node is to invoke the services | |||
| Forwarding - 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 | of one or more CLAs in a sustained effort to cause a copy of the | |||
| bundle to be received by that node.</t> | bundle to be received by that node.</dd> | |||
| <dt>Discarding:</dt> | ||||
| <t> | <dd>To discard a bundle is to cease all operations on the | |||
| Discarding - To discard a bundle is to cease all operations on the | ||||
| bundle and functionally erase all references to it. The specific | bundle and functionally erase all references to it. The specific | |||
| procedures by which this is accomplished are an implementation | procedures by which this is accomplished are an implementation | |||
| matter.</t> | matter.</dd> | |||
| <dt>Retention constraint:</dt> | ||||
| <t> | <dd>A retention constraint is an element of the | |||
| Retention constraint - A retention constraint is an element of the | ||||
| state of a bundle that prevents the bundle from being discarded. | state of a bundle that prevents the bundle from being discarded. | |||
| That is, a bundle cannot be discarded while it has any retention | That is, a bundle cannot be discarded while it has any retention | |||
| constraints.</t> | constraints.</dd> | |||
| <dt>Deletion:</dt> | ||||
| <t> | <dd>To delete a bundle is to remove unconditionally all of | |||
| Deletion - To delete a bundle is to remove unconditionally all of | ||||
| the bundle's retention constraints, enabling the bundle to be | the bundle's retention constraints, enabling the bundle to be | |||
| discarded.</t> | discarded.</dd> | |||
| </dl> | ||||
| </section> | </section> | |||
| <section anchor="sect-3.2" numbered="true" toc="default"> | ||||
| <section title="Discussion of BP concepts" anchor="sect-3.2"><t> | <name>Discussion of BP Concepts</name> | |||
| <t> | ||||
| Multiple instances of the same bundle (the same unit of DTN protocol | Multiple instances of the same bundle (the same unit of DTN protocol | |||
| data) might exist concurrently in different parts of a network -- | data) might exist concurrently in different parts of a network -- | |||
| possibly differing in some blocks -- in the memory local to one or | 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 | 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 | 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> | that node's local memory, of some bundle that is in the network.</t> | |||
| <t> | ||||
| <t> | ||||
| The payload for a bundle forwarded in response to a bundle | The payload for a bundle forwarded in response to a bundle | |||
| transmission request is the application data unit whose location is | transmission request is the ADU whose location is | |||
| provided as a parameter to that request. The payload for a bundle | 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 | forwarded in response to reception of a bundle is the payload of the | |||
| received bundle.</t> | received bundle.</t> | |||
| <t> | ||||
| <t> | ||||
| In the most familiar case, a bundle node is instantiated as a single | In the most familiar case, a bundle node is instantiated as a single | |||
| process running on a general-purpose computer, but in general the | process running on a general-purpose computer, but in general the | |||
| definition is meant to be broader: a bundle node might alternatively | definition is meant to be broader: a bundle node might alternatively | |||
| be a thread, an object in an object-oriented operating system, a | be a thread, an object in an object-oriented operating system, a | |||
| special-purpose hardware device, etc.</t> | special-purpose hardware device, etc.</t> | |||
| <t> | ||||
| <t> | ||||
| The manner in which the functions of the BPA are performed is wholly | The manner in which the functions of the BPA are performed is wholly | |||
| an implementation matter. For example, BPA functionality might be | an implementation matter. For example, BPA functionality might be | |||
| coded into each node individually; it might be implemented as a | coded into each node individually; it might be implemented as a | |||
| shared library that is used in common by any number of bundle nodes | 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 | on a single computer; it might be implemented as a daemon whose | |||
| services are invoked via inter-process or network communication by | services are invoked via inter-process or network communication by | |||
| any number of bundle nodes on one or more computers; it might be | any number of bundle nodes on one or more computers; it might be | |||
| implemented in hardware.</t> | implemented in hardware.</t> | |||
| <t> | ||||
| <t> | ||||
| Every CLA implements its own thin layer of protocol, interposed | Every CLA implements its own thin layer of protocol, interposed | |||
| between BP and the (usually "top") protocol(s) of the underlying | between BP and the (usually "top") protocol(s) of the underlying | |||
| native protocol stack; this "CL protocol" may only serve to | integrated protocol stack; this "CL protocol" may only serve to | |||
| multiplex and de-multiplex bundles to and from the underlying native | multiplex and demultiplex bundles to and from the underlying integrated | |||
| protocol, or it may offer additional CL-specific functionality. The | protocol, or it may offer additional CL-specific functionality. The | |||
| manner in which a CLA sends and receives bundles, as well as 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 | definitions of CLAs and CL protocols, are beyond the scope of this | |||
| specification.</t> | specification.</t> | |||
| <t> | ||||
| <t> | ||||
| Note that the administrative element of a node's application agent | Note that the administrative element of a node's application agent | |||
| may itself, in some cases, function as a convergence-layer adapter. | may itself, in some cases, function as a CLA. | |||
| That is, outgoing bundles may be "tunneled" through encapsulating | That is, outgoing bundles may be "tunneled" through encapsulating | |||
| bundles: | bundles: | |||
| <list style="symbols"> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>An outgoing bundle constitutes a byte array. This byte array may, | <li>An outgoing bundle constitutes a byte array. This byte array may, | |||
| like any other, be presented to the bundle protocol agent as an | like any other, be presented to the BPA as an | |||
| application data unit that is to be transmitted to some endpoint.</t> | ADU that is to be transmitted to some endpoint.</li> | |||
| <li>The original bundle thus forms the payload of an encapsulating | ||||
| <t>The original bundle thus forms the payload of an encapsulating | bundle that is forwarded using some other convergence-layer | |||
| bundle that is forwarded using some other convergence-layer | protocol(s).</li> | |||
| protocol(s).</t> | <li>When the encapsulating bundle is received, its payload is | |||
| delivered to the peer application agent administrative element, | ||||
| <t>When the encapsulating bundle is received, its payload is | which then instructs the BPA to dispatch that | |||
| delivered to the peer application agent administrative element, | original bundle in the usual way.</li> | |||
| which then instructs the bundle protocol agent to dispatch that | </ul> | |||
| original bundle in the usual way.</t> | <t> | |||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| The purposes for which this technique may be useful (such as cross-domain | The purposes for which this technique may be useful (such as cross-domain | |||
| security) are beyond the scope of this specification.</t> | security) are beyond the scope of this specification.</t> | |||
| <t> | ||||
| <t> | ||||
| The only interface between the BPA and the application-specific | The only interface between the BPA and the application-specific | |||
| element of the AA is the BP service interface. But between the BPA | element of the AA is the BP service interface. But between the BPA | |||
| and the administrative element of the AA there is a (conceptual) | and the administrative element of the AA there is a (conceptual) | |||
| private control interface in addition to the BP service interface. | private control interface in addition to the BP service interface. | |||
| This private control interface enables the BPA and the | This private control interface enables the BPA and the | |||
| administrative element of the AA to direct each other to take action | administrative element of the AA to direct each other to take action | |||
| under specific circumstances.</t> | under specific circumstances.</t> | |||
| <t> | ||||
| <t> | ||||
| In the case of a node that serves simply as a BP "router", the AA may have | 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 | no application-specific element at all. The application-specific elements | |||
| of other nodes' AAs may perform arbitrarily complex application functions, | of other nodes' AAs may perform arbitrarily complex application functions, | |||
| perhaps even offering multiplexed DTN communication services to a number of | perhaps even offering multiplexed DTN communication services to a number of | |||
| other applications. As with the BPA, the manner in which the AA performs | other applications. As with the BPA, the manner in which the AA performs | |||
| its functions is wholly an implementation matter.</t> | its functions is wholly an implementation matter.</t> | |||
| <t> | ||||
| <t> | ||||
| Singletons are the most familiar sort of endpoint, but in general | Singletons are the most familiar sort of endpoint, but in general | |||
| the endpoint notion is meant to be broader. For example, the nodes | 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 | 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 | all registered in a single common endpoint and will all receive any | |||
| data delivered at that endpoint. *Note* too that any given bundle | data delivered at that endpoint. <strong>Note</strong> too that any given bun dle | |||
| node might be registered in multiple bundle endpoints and receive | node might be registered in multiple bundle endpoints and receive | |||
| all data delivered at each of those endpoints.</t> | all data delivered at each of those endpoints. | |||
| </t> | ||||
| <t> | ||||
| <t> | Recall that every node, by definition, includes an application agent, which | |||
| Recall that every node, by definition, includes an application agent which | ||||
| in turn includes an administrative element, which exchanges administrative | in turn includes an administrative element, which exchanges administrative | |||
| records with the administrative elements of other nodes. As such, every | records with the administrative elements of other nodes. As such, every | |||
| node is permanently, structurally registered in the singleton endpoint at | node is permanently, structurally registered in the singleton endpoint at | |||
| which administrative records received from other nodes are delivered. | which administrative records received from other nodes are delivered. | |||
| Registration in no other endpoint can ever be assumed to be permanent. | Registration in no other endpoint can ever be assumed to be permanent. | |||
| This endpoint, termed the node's "administrative endpoint", is therefore | This endpoint, termed the node's "administrative endpoint", is therefore | |||
| uniquely and permanently associated with the node, and for this reason the | uniquely and permanently associated with the node, and for this reason the | |||
| ID of a node's administrative endpoint additionally serves as the "node ID" | ID of a node's administrative endpoint may always serve as the "node ID" | |||
| (see 4.1.5.2 below) of the node.</t> | (see <xref target="sect-4.2.5.2"/>) of the node. | |||
| </t> | ||||
| <t> | <t> | |||
| The destination of every bundle is an endpoint, which may or may not | 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 | 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 | 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 | bundle may be the null endpoint ID (as described later) rather than | |||
| the ID of the source node; bundles for which the asserted source | the ID of the source node; bundles for which the asserted source | |||
| node ID is the null endpoint ID are termed "anonymous" bundles.</t> | node ID is the null endpoint ID are termed "anonymous" bundles.</t> | |||
| <t> | ||||
| <t> | ||||
| Any number of transmissions may be concurrently undertaken by the | Any number of transmissions may be concurrently undertaken by the | |||
| bundle protocol agent of a given node.</t> | BPA of a given node.</t> | |||
| <t> | <t>When the BPA of a node determines that it must forward a bundle either | |||
| When the bundle protocol agent of a node determines that a bundle | to a node that is a member of the bundle's destination endpoint or to | |||
| must be forwarded to a node (either to a node that is a member of | some intermediate forwarding node, the BPA invokes the services of one | |||
| the bundle's destination endpoint or to some intermediate forwarding | or more CLAs in a sustained effort to cause a copy of the bundle to be | |||
| node) in the course of completing the successful transmission of | received by that node.</t> | |||
| that bundle, the bundle protocol agent 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> | <t>Upon reception, the processing of a bundle depends on whether or not | |||
| Upon reception, the processing of a bundle that has been received by | the receiving node is registered in the bundle's destination endpoint. | |||
| a given node depends on whether or not the receiving node is | If it is, and if | |||
| registered in the bundle's destination endpoint. If it is, and if | ||||
| the payload of the bundle is non-fragmentary (possibly as a result | the payload of the bundle is non-fragmentary (possibly as a result | |||
| of successful payload reassembly from fragmentary payloads, | of successful payload reassembly from fragmentary payloads, | |||
| including the original payload of the newly received bundle), then | including the original payload of the newly received bundle), then | |||
| the bundle is normally delivered to the node's application agent | the bundle is normally delivered to the node's application agent | |||
| subject to the registration characterizing the node's membership in | subject to the registration characterizing the node's membership in | |||
| the destination endpoint.</t> | the destination endpoint.</t> | |||
| <t> | ||||
| <t> | The Bundle Protocol itself does not ensure delivery of a bundle to | |||
| The bundle protocol does not natively ensure delivery of a bundle to | ||||
| its destination. Data loss along the path to the destination node | its destination. Data loss along the path to the destination node | |||
| can be minimized by utilizing reliable convergence-layer protocols | can be minimized by utilizing reliable convergence-layer protocols | |||
| between neighbors on all segments of the end-to-end path, but for | 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 | end-to-end bundle delivery assurance it will be necessary to develop | |||
| extensions to the bundle protocol and/or application-layer | extensions to the Bundle Protocol and/or application-layer | |||
| mechanisms.</t> | mechanisms.</t> | |||
| <t> | ||||
| The Bundle Protocol is designed for extensibility. Bundle Protocol | ||||
| extensions, documented elsewhere, may extend this specification by | ||||
| defining additional: | ||||
| <t> | </t> | |||
| The bundle protocol is designed for extensibility. Bundle protocol | <ul spacing="normal"> | |||
| extensions, documented elsewhere, may extend this specification by: | <li>blocks</li> | |||
| <li>administrative records</li> | ||||
| <list style="symbols"> | <li>bundle processing control flags</li> | |||
| <li>block processing control flags</li> | ||||
| <t>defining additional blocks;</t> | <li>types of bundle status reports</li> | |||
| <li>bundle status report reason codes</li> | ||||
| <t>defining additional administrative records;</t> | <li>mandates and constraints on processing that | |||
| conformant BPAs must perform at specified points in | ||||
| <t>defining additional bundle processing flags;</t> | the inbound and outbound bundle processing cycles</li> | |||
| </ul> | ||||
| <t>defining additional block processing flags;</t> | </section> | |||
| <section anchor="sect-3.3" numbered="true" toc="default"> | ||||
| <t>defining additional types of bundle status reports;</t> | <name>Services Offered by Bundle Protocol Agents</name> | |||
| <t> | ||||
| <t>defining additional bundle status report reason codes;</t> | ||||
| <t>defining additional mandates and constraints on processing that | ||||
| conformant bundle protocol agents must perform at specified points in | ||||
| the inbound and outbound bundle processing cycles.</t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| <section title="Services Offered by Bundle Protocol Agents" anchor="sect- | ||||
| 3.3"><t> | ||||
| The BPA of each node is expected to provide the following services | The BPA of each node is expected to provide the following services | |||
| to the node's application agent: | to the node's application agent: | |||
| <list style="symbols"> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>commencing a registration (registering the node in an endpoint);</t> | <li>commencing a registration (registering the node in an endpoint).</ | |||
| li> | ||||
| <t>terminating a registration;</t> | <li>terminating a registration.</li> | |||
| <li>switching a registration between Active and Passive states.</li> | ||||
| <t>switching a registration between Active and Passive states;</t> | <li>transmitting a bundle to an identified bundle endpoint.</li> | |||
| <li>canceling a transmission.</li> | ||||
| <t>transmitting a bundle to an identified bundle endpoint;</t> | <li>polling a registration that is in the Passive state.</li> | |||
| <li>delivering a received bundle.</li> | ||||
| <t>canceling a transmission;</t> | </ul> | |||
| <t> Note that the details of registration functionality are an | ||||
| <t>polling a registration that is in the Passive state;</t> | ||||
| <t>delivering a received bundle.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t> Note that the details of registration functionality are an | ||||
| implementation matter and are beyond the scope of this | implementation matter and are beyond the scope of this | |||
| specification.</t> | specification.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="sect-4" numbered="true" toc="default"> | ||||
| </section> | <name>Bundle Format</name> | |||
| <section anchor="sect-4.1" numbered="true" toc="default"> | ||||
| <section title="Bundle Format" anchor="sect-4"><section title="Bundle Str | <name>Bundle Structure</name> | |||
| ucture" anchor="sect-4.1"><t> | <t> | |||
| The format of bundles SHALL conform to the Concise Binary Object | The format of bundles <bcp14>SHALL</bcp14> conform to the Concise Binary Obje | |||
| Representation (CBOR <xref target="RFC8949"/>).</t> | ct | |||
| Representation (CBOR) <xref target="RFC8949" format="default"/>.</t> | ||||
| <t> | <t> | |||
| Cryptographic verification of a block is possible only if the | Cryptographic verification of a block is possible only if the | |||
| sequence of octets on which the verifying node computes its hash - | sequence of octets on which the verifying node computes its hash -- | |||
| the canonicalized representation of the block - is identical to the | the canonicalized representation of the block -- is identical to the | |||
| sequence of octets on which the hash declared for that block was | sequence of octets on which the hash declared for that block was | |||
| computed. To ensure that blocks are always in canonical | computed. To ensure that blocks are always in canonical | |||
| representation when they are transmitted and received, the CBOR | representation when they are transmitted and received, the CBOR | |||
| representations of the values of all fields in all blocks must | encodings of the values of all fields in all blocks <bcp14>MUST</bcp14> | |||
| conform to the rules for Canonical CBOR as specified in <xref target="RFC8949 | conform to the core deterministic encoding requirements as specified in <xref | |||
| "/>.</t> | target="RFC8949" format="default"/>, except that indefinite-length items are no | |||
| t prohibited.</t> | ||||
| <t> | <t> | |||
| Each bundle SHALL be a concatenated sequence of at least two blocks, | Each bundle <bcp14>SHALL</bcp14> be a concatenated sequence of at least two b | |||
| locks, | ||||
| represented as a CBOR indefinite-length array. The first block in | represented as a CBOR indefinite-length array. The first block in | |||
| the sequence (the first item of the array) MUST be a primary bundle | the sequence (the first item of the array) <bcp14>MUST</bcp14> be a primary b | |||
| block in CBOR representation as described below; the bundle MUST | undle | |||
| have exactly one primary bundle block. The primary block MUST be | 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 | followed by one or more canonical bundle blocks (additional array | |||
| items) in CBOR representation as described in 4.3.2 below. Every | items) in CBOR encoding as described in <xref target="sect-4.3.2"/>. Every | |||
| block following the primary block SHALL be the CBOR representation | block following the primary block <bcp14>SHALL</bcp14> be the CBOR encoding | |||
| of a canonical block. The last such block MUST be a payload block; | of a canonical block. The last such block <bcp14>MUST</bcp14> be a payload b | |||
| the bundle MUST have exactly one payload block. The payload block | lock; | |||
| SHALL be followed by a CBOR "break" stop code, terminating the | the bundle <bcp14>MUST</bcp14> have exactly one payload block. The payload b | |||
| lock | ||||
| <bcp14>SHALL</bcp14> be followed by a CBOR "break" stop code, terminating the | ||||
| array.</t> | array.</t> | |||
| <aside><t> | ||||
| <t> | ||||
| (Note that, while CBOR permits considerable flexibility in the | (Note that, while CBOR permits considerable flexibility in the | |||
| encoding of bundles, this flexibility must not be interpreted as | encoding of bundles, this flexibility must not be interpreted as | |||
| inviting increased complexity in protocol data unit structure.)</t> | inviting increased complexity in PDU structure.)</t></aside> | |||
| <t> | ||||
| <t> | ||||
| Associated with each block of a bundle is a block number. The block | Associated with each block of a bundle is a block number. The block | |||
| number uniquely identifies the block within the bundle, enabling | number uniquely identifies the block within the bundle, enabling | |||
| blocks (notably bundle security protocol blocks) to reference other | blocks (notably Bundle Protocol Security blocks) to reference other | |||
| blocks in the same bundle without ambiguity. The block number of | blocks in the same bundle without ambiguity. The block number of | |||
| the primary block is implicitly zero; the block numbers of all other | the primary block is implicitly zero; the block numbers of all other | |||
| blocks are explicitly stated in block headers as noted below. Block | blocks are explicitly stated in block headers as noted below. Block | |||
| numbering is unrelated to the order in which blocks are sequenced in | 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> | the bundle. The block number of the payload block is always 1.</t> | |||
| <t> | ||||
| <t> | An implementation of the Bundle Protocol <bcp14>MAY</bcp14> discard any seque | |||
| An implementation of the Bundle Protocol MAY discard any sequence of | nce of | |||
| bytes that does not conform to the Bundle Protocol specification.</t> | bytes that does not conform to the Bundle Protocol specification.</t> | |||
| <t> | ||||
| <t> | An implementation of the Bundle Protocol <bcp14>MAY</bcp14> accept a sequence | |||
| An implementation of the Bundle Protocol MAY accept a sequence of | of | |||
| bytes that does not conform to the Bundle Protocol specification | bytes that does not conform to the Bundle Protocol specification | |||
| (e.g., one that represents data elements in fixed-length arrays | (e.g., one that represents data elements in fixed-length arrays | |||
| rather than indefinite-length arrays) and transform it into | rather than indefinite-length arrays) and transform it into | |||
| conformant BP structure before processing it. Procedures for | conformant BP structure before processing it. Procedures for | |||
| accomplishing such a transformation are beyond the scope of this | accomplishing such a transformation are beyond the scope of this | |||
| specification.</t> | specification.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-4.2" numbered="true" toc="default"> | |||
| <name>BP Fundamental Data Structures</name> | ||||
| <section title="BP Fundamental Data Structures" anchor="sect-4.2"><sectio | <section anchor="sect-4.2.1" numbered="true" toc="default"> | |||
| n title="CRC Type" anchor="sect-4.2.1"><t> | <name>CRC Type</name> | |||
| <t> | ||||
| CRC type is an unsigned integer type code for which the following | CRC type is an unsigned integer type code for which the following | |||
| values (and no others) are valid: | values (and no others) are valid: | |||
| <list style="symbols"> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>0 indicates "no CRC is present."</t> | <li>0 indicates "no Cyclic Redundancy Check (CRC) is present."</li> | |||
| <li>1 indicates "a standard X-25 CRC-16 is present." <xref target="C | ||||
| <t>1 indicates "a standard X-25 CRC-16 is present." [CRC16]</t> | RC16"/></li> | |||
| <li>2 indicates "a standard CRC32C (Castagnoli) CRC-32 is present." | ||||
| <t>2 indicates "a standard CRC32C (Castagnoli) CRC-32 is present." | <xref target="RFC4960" format="default"/></li> | |||
| <xref target="RFC4960"/></t> | </ul> | |||
| <t> | ||||
| </list> | CRC type <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer.</t> | |||
| </t> | <t> | |||
| For examples of CRC32C CRCs, see <xref target="RFC7143" sectionFormat="of" se | ||||
| <t> | ction="A.4"/>.</t> | |||
| CRC type SHALL be represented as a CBOR unsigned integer.</t> | <t> | |||
| <t> | ||||
| For examples of CRC32C CRCs, see Appendix A.4 of <xref target="RFC7143"/>.</t | ||||
| > | ||||
| <t> | ||||
| Note that more robust protection of BP data integrity, as needed, | Note that more robust protection of BP data integrity, as needed, | |||
| may be provided by means of Block Integrity Blocks as defined in the | may be provided by means of Block Integrity Blocks (BIBs) as defined in the | |||
| Bundle Security Protocol <xref target="I-D.ietf-dtn-bpsec"/>).</t> | Bundle Protocol Security specification <xref target="RFC9172"/>. | |||
| </t> | ||||
| </section> | </section> | |||
| <section anchor="sect-4.2.2" numbered="true" toc="default"> | ||||
| <section title="CRC" anchor="sect-4.2.2"><t> | <name>CRC</name> | |||
| CRC SHALL be omitted from a block if and only if the block's CRC | <t> | |||
| The CRC <bcp14>SHALL</bcp14> be omitted from a block if and only if the block | ||||
| 's CRC | ||||
| type code is zero.</t> | type code is zero.</t> | |||
| <t> | ||||
| <t> | When not omitted, the CRC <bcp14>SHALL</bcp14> be represented as a CBOR byte | |||
| When not omitted, the CRC SHALL be represented as a CBOR byte string | string | |||
| of two bytes (that is, CBOR additional information 2, if CRC type is | 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 | 1) or of four bytes (that is, CBOR additional information 4, if CRC | |||
| type is 2); in each case the sequence of bytes SHALL constitute an | type is 2); in each case, the sequence of bytes <bcp14>SHALL</bcp14> constitu te an | |||
| unsigned integer value (of 16 or 32 bits, respectively) in network | unsigned integer value (of 16 or 32 bits, respectively) in network | |||
| byte order.</t> | byte order.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-4.2.3" numbered="true" toc="default"> | |||
| <name>Bundle Processing Control Flags</name> | ||||
| <section title="Bundle Processing Control Flags" anchor="sect-4.2.3"><t> | <t> | |||
| Bundle processing control flags assert properties of the bundle as a | Bundle processing control flags assert properties of the bundle as a | |||
| whole rather than of any particular block of the bundle. They are | whole rather than of any particular block of the bundle. They are | |||
| conveyed in the primary block of the bundle.</t> | conveyed in the primary block of the bundle.</t> | |||
| <t> | ||||
| <t> | ||||
| The following properties are asserted by the bundle processing | The following properties are asserted by the bundle processing | |||
| control flags: | control flags: | |||
| <list style="symbols"> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>The bundle is a fragment. (Boolean)</t> | <li>The bundle is a fragment. (Boolean)</li> | |||
| <li>The bundle's payload is an administrative record. (Boolean)</li | ||||
| <t>The bundle's payload is an administrative record. (Boolean)</t> | > | |||
| <li>The bundle must not be fragmented. (Boolean)</li> | ||||
| <t>The bundle must not be fragmented. (Boolean)</t> | <li>Acknowledgment by the user application is requested. (Boolean)< | |||
| /li> | ||||
| <t>Acknowledgment by the user application is requested. (Boolean)</t> | <li>Status time is requested in all status reports. (Boolean)</li> | |||
| <li> | ||||
| <t>Status time is requested in all status reports. (Boolean)</t> | <t>Flags requesting types of status reports (all Boolean): | |||
| <t>Flags requesting types of status reports (all Boolean): | ||||
| <list style="symbols"> | ||||
| <t>Request reporting of bundle reception.</t> | ||||
| <t>Request reporting of bundle forwarding.</t> | ||||
| <t>Request reporting of bundle delivery.</t> | ||||
| <t>Request reporting of bundle deletion.</t> | ||||
| </list> | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | </t> | |||
| <ul spacing="normal"> | ||||
| <li>Request reporting of bundle reception.</li> | ||||
| <li>Request reporting of bundle forwarding.</li> | ||||
| <li>Request reporting of bundle delivery.</li> | ||||
| <li>Request reporting of bundle deletion.</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| <t> | ||||
| If the bundle processing control flags indicate that the bundle's | If the bundle processing control flags indicate that the bundle's | |||
| application data unit is an administrative record, then all status | ADU is an administrative record, then all status | |||
| report request flag values MUST be zero.</t> | report request flag values <bcp14>MUST</bcp14> be zero.</t> | |||
| <t> | ||||
| <t> | ||||
| If the bundle's source node is omitted (i.e., the source node ID is the ID | 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 | of the null endpoint, which has no members as discussed below; this option | |||
| enables anonymous bundle transmission), then the bundle is not uniquely | enables anonymous bundle transmission), then the bundle is not uniquely | |||
| identifiable and all bundle protocol features that rely on bundle identity | identifiable and all Bundle Protocol features that rely on bundle identity | |||
| must therefore be disabled: the "Bundle must not be fragmented" flag value | must therefore be disabled: the "Bundle must not be fragmented" flag value | |||
| MUST be 1 and all status report request flag values MUST be zero.</t> | <bcp14>MUST</bcp14> be 1, and all status report request flag values <bcp14>MU | |||
| ST</bcp14> be zero.</t> | ||||
| <t> | <t> | |||
| Bundle processing control flags that are unrecognized MUST be | Bundle processing control flags that are unrecognized <bcp14>MUST</bcp14> be | |||
| ignored, as future definitions of additional flags might not be | ignored, as future definitions of additional flags might not be | |||
| integrated simultaneously into the Bundle Protocol implementations | integrated simultaneously into the Bundle Protocol implementations | |||
| operating at all nodes.</t> | operating at all nodes.</t> | |||
| <t> | ||||
| <t> | The bundle processing control flags <bcp14>SHALL</bcp14> be represented as a | |||
| The bundle processing control flags SHALL be represented as a CBOR | CBOR | |||
| unsigned integer item, the value of which SHALL be processed as a | unsigned integer item, the value of which <bcp14>SHALL</bcp14> be processed a | |||
| s a | ||||
| bit field indicating the control flag values as follows (note that | bit field indicating the control flag values as follows (note that | |||
| bit numbering in this instance is reversed from the usual practice, | bit numbering in this instance is reversed from the usual practice, | |||
| beginning with the low-order bit instead of the high-order bit, in | beginning with the low-order bit instead of the high-order bit, in | |||
| recognition of the potential definition of additional control flag | recognition of the potential definition of additional control flag | |||
| values in the future): | values in the future): | |||
| <list style="symbols"> | </t> | |||
| <dl spacing="normal"> | ||||
| <t>Bit 0 (the low-order bit, 0x000001): bundle is a fragment.</t> | <dt>Bit 0 (the low-order bit, 0x000001):</dt> | |||
| <dd>Bundle is a fragment.</dd> | ||||
| <t>Bit 1 (0x000002): payload is an administrative record.</t> | <dt>Bit 1 (0x000002):</dt> | |||
| <dd>ADU is an administrative record.</dd> | ||||
| <t>Bit 2 (0x000004): bundle must not be fragmented.</t> | <dt>Bit 2 (0x000004):</dt> | |||
| <dd>Bundle must not be fragmented.</dd> | ||||
| <t>Bit 3 (0x000008): reserved.</t> | <dt>Bit 3 (0x000008):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 4 (0x000010): reserved.</t> | <dt>Bit 4 (0x000010):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 5 (0x000020): user application acknowledgement is requested.</t> | <dt>Bit 5 (0x000020):</dt> | |||
| <dd>Acknowledgement by application is requested.</dd> | ||||
| <t>Bit 6 (0x000040): status time is requested in all status reports.</t> | <dt>Bit 6 (0x000040):</dt> | |||
| <dd>Status time requested in reports.</dd> | ||||
| <t>Bit 7 (0x000080): reserved.</t> | <dt>Bit 7 (0x000080):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 8 (0x000100): reserved.</t> | <dt>Bit 8 (0x000100):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 9 (0x000200): reserved.</t> | <dt>Bit 9 (0x000200):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 10(0x000400): reserved.</t> | <dt>Bit 10 (0x000400):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 11(0x000800): reserved.</t> | <dt>Bit 11 (0x000800):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 12(0x001000): reserved.</t> | <dt>Bit 12 (0x001000):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 13(0x002000): reserved.</t> | <dt>Bit 13 (0x002000):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 14(0x004000): bundle reception status reports are requested.</t> | <dt>Bit 14 (0x004000):</dt> | |||
| <dd>Request reporting of bundle reception.</dd> | ||||
| <t>Bit 15(0x008000): reserved.</t> | <dt>Bit 15 (0x008000):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 16(0x010000): bundle forwarding status reports are requested.</t> | <dt>Bit 16 (0x010000):</dt> | |||
| <dd>Request reporting of bundle forwarding.</dd> | ||||
| <t>Bit 17(0x020000): bundle delivery status reports are requested.</t> | <dt>Bit 17 (0x020000):</dt> | |||
| <dd>Request reporting of bundle delivery.</dd> | ||||
| <t>Bit 18(0x040000): bundle deletion status reports are requested.</t> | <dt>Bit 18 (0x040000):</dt> | |||
| <dd>Request reporting of bundle deletion.</dd> | ||||
| <t>Bits 19-20 are reserved.</t> | <dt>Bits 19-20:</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bits 21-63 are unassigned.</t> | <dt>Bits 21-63:</dt> | |||
| <dd>Unassigned.</dd> | ||||
| </list></t> | </dl> | |||
| </section> | ||||
| </section> | <section anchor="sect-4.2.4" numbered="true" toc="default"> | |||
| <name>Block Processing Control Flags</name> | ||||
| <section title="Block Processing Control Flags" anchor="sect-4.2.4"><t> | <t> | |||
| The block processing control flags assert properties of canonical | The block processing control flags assert properties of canonical | |||
| bundle blocks. They are conveyed in the header of the block to | bundle blocks. They are conveyed in the header of the block to | |||
| which they pertain.</t> | which they pertain.</t> | |||
| <t> | ||||
| <t> | Block processing control flags that are unrecognized <bcp14>MUST</bcp14> be | |||
| Block processing control flags that are unrecognized MUST be | ||||
| ignored, as future definitions of additional flags might not be | ignored, as future definitions of additional flags might not be | |||
| integrated simultaneously into the Bundle Protocol implementations | integrated simultaneously into the Bundle Protocol implementations | |||
| operating at all nodes.</t> | operating at all nodes.</t> | |||
| <t> | ||||
| <t> | The block processing control flags <bcp14>SHALL</bcp14> be represented as a C | |||
| The block processing control flags SHALL be represented as a CBOR | BOR | |||
| unsigned integer item, the value of which SHALL be processed as a | unsigned integer item, the value of which <bcp14>SHALL</bcp14> be processed a | |||
| s a | ||||
| bit field indicating the control flag values as follows (note that | bit field indicating the control flag values as follows (note that | |||
| bit numbering in this instance is reversed from the usual practice, | bit numbering in this instance is reversed from the usual practice, | |||
| beginning with the low-order bit instead of the high-order bit, for | beginning with the low-order bit instead of the high-order bit, for | |||
| agreement with the bit numbering of the bundle processing control | agreement with the bit numbering of the bundle processing control | |||
| flags): | flags):</t> | |||
| <dl spacing="normal"> | ||||
| <list style="symbols"> | <dt>Bit 0 (the low-order bit, 0x01):</dt> | |||
| <dd>Block must be replicated in every fragment.</dd> | ||||
| <t>Bit 0(the low-order bit, 0x01): block must be replicated in every | <dt>Bit 1 (0x02):</dt> | |||
| fragment.</t> | <dd>Transmit status report if block can't be processed.</dd> | |||
| <dt>Bit 2 (0x04):</dt> | ||||
| <t>Bit 1(0x02): transmission of a status report is requested if | <dd>Delete bundle if block can't be processed.</dd> | |||
| block can't be processed.</t> | <dt>Bit 3 (0x08):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 2(0x04): bundle must be deleted if block can't be processed.</t> | <dt>Bit 4 (0x10):</dt> | |||
| <dd>Discard block if it can't be processed.</dd> | ||||
| <t>Bit 3(0x08): reserved.</t> | <dt>Bit 5 (0x20):</dt> | |||
| <dd>Reserved.</dd> | ||||
| <t>Bit 4(0x10): block must be removed from bundle if it can't be | <dt>Bit 6 (0x40):</dt> | |||
| processed.</t> | <dd>Reserved.</dd> | |||
| <dt>Bits 7-63:</dt> | ||||
| <t>Bit 5(0x20): reserved.</t> | <dd>Unassigned.</dd> | |||
| </dl> | ||||
| <t>Bit 6 (0x40): reserved.</t> | <t> | |||
| <t>Bits 7-63 are unassigned.</t> | ||||
| </list></t> | ||||
| <t> | ||||
| For each bundle whose bundle processing control flags indicate that | For each bundle whose bundle processing control flags indicate that | |||
| the bundle's application data unit is an administrative record, or | the bundle's ADU is an administrative record, or | |||
| whose source node ID is the null endpoint ID as defined below, the | 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" | value of the "Transmit status report if block can't be processed" | |||
| flag in every canonical block of the bundle MUST be zero.</t> | flag in every canonical block of the bundle <bcp14>MUST</bcp14> be zero.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-4.2.5" numbered="true" toc="default"> | |||
| <name>Identifiers</name> | ||||
| <section title="Identifiers" anchor="sect-4.2.5"><section title="Endpoint | <section anchor="sect-4.2.5.1" numbered="true" toc="default"> | |||
| ID" anchor="sect-4.2.5.1"><t> | <name>Endpoint ID</name> | |||
| <t> | ||||
| The destinations of bundles are bundle endpoints, identified by text | The destinations of bundles are bundle endpoints, identified by text | |||
| strings termed "endpoint IDs" (see <xref target="sect-3.1"/>). Each endpoint | strings termed "endpoint IDs" (see <xref target="sect-3.1" format="default"/> | |||
| ID | ). Each endpoint ID | |||
| (EID) is a Uniform Resource Identifier (URI; <xref target="URI"/>). As such, | (EID) is a Uniform Resource Identifier <xref target="RFC3986" format="default | |||
| each | "/>. As such, each | |||
| endpoint ID can be characterized as having this general structure:</t> | endpoint ID can be characterized as having this general structure:</t> | |||
| <t> | ||||
| <t> | ||||
| < scheme name > : < scheme-specific part, or "SSP" ></t> | < scheme name > : < scheme-specific part, or "SSP" ></t> | |||
| <t> | ||||
| <t> | ||||
| The scheme identified by the < scheme name > in an endpoint ID is a | The scheme identified by the < scheme name > in an endpoint ID is a | |||
| set of syntactic and semantic rules that fully explain how to parse | set of syntactic and semantic rules that fully explain how to parse | |||
| and interpret the SSP. Each scheme that may be used to form a BP | and interpret the scheme-specific part (SSP). Each scheme that may be used to | |||
| endpoint ID must be added to the registry of URI scheme code numbers | form a BP | |||
| for Bundle Protocol maintained by IANA as described in <xref target="sect-10" | 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"/> | |||
| ; | ||||
| association of a unique URI scheme code number with each scheme name | association of a unique URI scheme code number with each scheme name | |||
| in this registry helps to enable compact representation of endpoint | in this registry helps to enable compact representation of endpoint | |||
| IDs in bundle blocks. Note that the set of allowable schemes is | IDs in bundle blocks. Note that the set of allowable schemes is | |||
| effectively unlimited. Any scheme conforming to <xref target="URIREG"/> may b | effectively unlimited. Any scheme conforming to <xref target="RFC7595" format | |||
| e | ="default"/> may be | |||
| added to the URI scheme code number registry and thereupon used in a | added to the registry of URI scheme code numbers and thereupon used in a | |||
| bundle protocol endpoint ID.</t> | Bundle Protocol endpoint ID.</t> | |||
| <t> | ||||
| <t> | Each entry in the registry of URI scheme code numbers <bcp14>MUST</bcp14> con | |||
| Each entry in the URI scheme code number registry MUST contain a | tain a | |||
| reference to a scheme code number definition document, which defines | reference to a scheme code number definition document, which defines | |||
| the manner in which the scheme-specific part of any URI formed in | the manner in which the scheme-specific part of any URI formed in | |||
| that scheme is parsed and interpreted and MUST be encoded, in CBOR | that scheme is parsed and interpreted and <bcp14>MUST</bcp14> be CBOR encoded | |||
| representation, for transmission as a BP endpoint ID. The scheme | for transmission as a BP endpoint ID. The scheme | |||
| code number definition document may also contain information as to | code number definition document may also contain information as to | |||
| (a) which convergence-layer protocol(s) may be used to forward a | (a) which convergence-layer protocol(s) may be used to forward a | |||
| bundle to a BP destination endpoint identified by such an ID, and | 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 | (b) how the ID of the convergence-layer protocol endpoint to use for | |||
| that purpose can be inferred from that destination endpoint ID.</t> | that purpose can be inferred from that destination endpoint ID.</t> | |||
| <t> | ||||
| <t> | ||||
| Note that, although endpoint IDs are URIs, implementations of the BP | Note that, although endpoint IDs are URIs, implementations of the BP | |||
| service interface may support expression of endpoint IDs in some | service interface may support expression of endpoint IDs in some | |||
| internationalized manner (e.g., Internationalized Resource | internationalized manner (e.g., Internationalized Resource | |||
| Identifiers (IRIs); see <xref target="RFC3987"/>).</t> | Identifiers (IRIs); see <xref target="RFC3987" format="default"/>).</t> | |||
| <t> | ||||
| <t> | Each BP endpoint ID (EID) <bcp14>SHALL</bcp14> be represented as a CBOR array | |||
| Each BP endpoint ID (EID) SHALL be represented as a CBOR array | ||||
| comprising two items.</t> | comprising two items.</t> | |||
| <t> | ||||
| <t> | The first item of the array <bcp14>SHALL</bcp14> be the code number identifyi | |||
| The first item of the array SHALL be the code number identifying the | ng the | |||
| endpoint ID's URI scheme, as defined in the registry of URI scheme | endpoint ID's URI scheme, as defined in the registry of URI scheme | |||
| code numbers for Bundle Protocol. Each URI scheme code number SHALL | code numbers for the Bundle Protocol. Each URI scheme code number <bcp14>SHA LL</bcp14> | |||
| be represented as a CBOR unsigned integer.</t> | be represented as a CBOR unsigned integer.</t> | |||
| <t> | ||||
| <t> | The second item of the array <bcp14>SHALL</bcp14> be the applicable CBOR | |||
| The second item of the array SHALL be the applicable CBOR | encoding of the scheme-specific part of the EID, defined | |||
| representation of the scheme-specific part (SSP) of the EID, defined | ||||
| as noted in the references(s) for the URI scheme code number | as noted in the references(s) for the URI scheme code number | |||
| registry entry for the EID's URI scheme.</t> | registry entry for the EID's URI scheme.</t> | |||
| <section anchor="sect-4.2.5.1.1" numbered="true" toc="default"> | ||||
| <section title="The "dtn" URI scheme" anchor="sect-4.2.5.1.1">< | <name>The dtn URI Scheme</name> | |||
| t> | <t> | |||
| The "dtn" scheme supports the identification of BP endpoints by | The "dtn" scheme supports the identification of BP endpoints by | |||
| arbitrarily expressive character strings. It is specified as | arbitrarily expressive character strings. It is specified as | |||
| follows:</t> | follows:</t> | |||
| <dl> | ||||
| <t> | <dt>Scheme syntax:</dt> | |||
| Scheme syntax: This specification uses the Augmented Backus-Naur | <dd>This specification uses the Augmented Backus-Naur | |||
| Form (ABNF) notation of <xref target="RFC5234"/>.</t> | Form (ABNF) notation of <xref target="RFC5234" format="default"/>.</dd> | |||
| </dl> | ||||
| <figure><artwork><![CDATA[ | <sourcecode type="abnf"><![CDATA[ | |||
| dtn-uri = "dtn:" ("none" / dtn-hier-part) | dtn-uri = "dtn:" ("none" / dtn-hier-part) | |||
| dtn-hier-part = "//" node-name name-delim demux ; a path-rootless | dtn-hier-part = "//" node-name name-delim demux ; a path-rootless | |||
| node-name = 1*(ALPHA/DIGIT/"-"/"."/"_") reg-name | node-name = reg-name | |||
| name-delim = "/" | name-delim = "/" | |||
| demux = *VCHAR | demux = *VCHAR | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | <dl> | |||
| <t> | <dt>Scheme semantics:</dt> | |||
| Scheme semantics: URIs of the dtn scheme are used as endpoint | <dd>URIs of the dtn scheme are used as endpoint | |||
| identifiers in the Delay-Tolerant Networking (DTN) Bundle Protocol | identifiers in the Delay-Tolerant Networking (DTN) Bundle Protocol | |||
| (BP) as described in the present document.</t> | (BP) as described in the present document.</dd> | |||
| </dl> | ||||
| <t> | <t> | |||
| The endpoint ID "dtn:none" identifies the "null endpoint", the | The endpoint ID "dtn:none" identifies the "null endpoint", the | |||
| endpoint that by definition never has any members.</t> | endpoint that by definition never has any members.</t> | |||
| <t> | ||||
| <t> | ||||
| All BP endpoints identified by all other dtn-scheme endpoint IDs for which | 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 | the first character of demux is a character other than '~' (tilde) are | |||
| singleton endpoints. All BP endpoints identified by dtn-scheme endpoint IDs | singleton endpoints. All BP endpoints identified by dtn-scheme endpoint IDs | |||
| for which the first character *is* '~' (tilde) are *not* singleton | for which the first character <strong>is</strong> '~' (tilde) are <strong>not </strong> singleton | |||
| endpoints.</t> | endpoints.</t> | |||
| <t> | ||||
| <t> | A dtn-scheme endpoint ID for which the demux is of length zero <bcp14>MAY</bc | |||
| A dtn-scheme endpoint ID for which the demux is of length zero MAY | p14> | |||
| identify the administrative endpoint for the node identified by | identify the administrative endpoint for the node identified by | |||
| node-name, and as such may serve as a node ID. No dtn-scheme | 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> | endpoint ID for which the demux is of non-zero length may do so.</t> | |||
| <t> | ||||
| <t> | ||||
| Note that these syntactic rules impose constraints on dtn-scheme | Note that these syntactic rules impose constraints on dtn-scheme | |||
| endpoint IDs that were not imposed by the original specification of | endpoint IDs that were not imposed by the original specification of | |||
| the dtn scheme as provided in <xref target="RFC5050"/>. It is believed that the | the dtn scheme as provided in <xref target="RFC5050" format="default"/>. It is believed that the | |||
| dtn-scheme endpoint IDs employed by BP applications conforming to | dtn-scheme endpoint IDs employed by BP applications conforming to | |||
| <xref target="RFC5050"/> are in most cases unlikely to be in violation of the se | <xref target="RFC5050" format="default"/> are in most cases unlikely to be in violation of these | |||
| rules, but the developers of such applications are advised of the | rules, but the developers of such applications are advised of the | |||
| potential for compromised interoperation.</t> | potential for compromised interoperation.</t> | |||
| <dl> | ||||
| <t> | <dt>Encoding considerations:</dt> | |||
| Encoding considerations: For transmission as a BP endpoint ID, the | <dd>For transmission as a BP endpoint ID, the | |||
| scheme-specific part of a URI of the dtn scheme SHALL be represented | scheme-specific part of a URI of the dtn scheme <bcp14>SHALL</bcp14> be repre | |||
| sented | ||||
| as a CBOR text string unless the EID's SSP is "none", in which case | as a CBOR text string unless the EID's SSP is "none", in which case | |||
| the SSP SHALL be represented as a CBOR unsigned integer with the | the SSP <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer with t he | |||
| value zero. For all other purposes, URIs of the dtn scheme are | value zero. For all other purposes, URIs of the dtn scheme are | |||
| encoded exclusively in US-ASCII characters.</t> | encoded exclusively in US-ASCII characters.</dd> | |||
| <dt>Interoperability considerations:</dt> | ||||
| <t> | <dd>None.</dd> | |||
| Interoperability considerations: none.</t> | <dt>Security considerations:</dt> | |||
| <dd> | ||||
| <t> | <t><br/></t> | |||
| Security considerations:</t> | <dl> | |||
| <dt>Reliability and consistency:</dt> | ||||
| <t>Reliability and consistency: none of the BP endpoints identified by the | <dd>None of the BP endpoints identified by the | |||
| URIs of the dtn scheme are guaranteed to be reachable at any time, and 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 | identity of the processing entities operating on those endpoints is never | |||
| guaranteed by the Bundle Protocol itself. Bundle authentication as defined | guaranteed by the Bundle Protocol itself. Verification of the signature provi | |||
| by the Bundle Security Protocol is required for this purpose.</t> | ded by the Block Integrity Block targeting the bundle's primary block, as define | |||
| d by Bundle Protocol Security <xref target="RFC9172"/>, is required for this pur | ||||
| <t>Malicious construction: malicious construction of a conformant | pose.</dd> | |||
| <dt>Malicious construction:</dt> | ||||
| <dd>Malicious construction of a conformant | ||||
| dtn-scheme URI is limited to the malicious selection of node names and the | dtn-scheme URI is limited to the malicious selection of node names and the | |||
| malicious selection of demux strings. That is, a maliciously constructed | 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 | 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 | 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 | 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 | that receives the bundle. In both cases (and indeed in all bundle | |||
| processing), the node that receives a bundle should verify its authenticity | processing), the node that receives a bundle should verify its authenticity | |||
| and validity before operating on it in any way.</t> | and validity before operating on it in any way.</dd> | |||
| <dt>Back-end transcoding:</dt> | ||||
| <t>Back-end transcoding: the limited expressiveness of URIs of the dtn | <dd>The limited expressiveness of URIs of the dtn | |||
| scheme effectively eliminates the possibility of threat due to errors in | scheme effectively eliminates the possibility of threat due to errors in | |||
| back-end transcoding.</t> | back-end transcoding.</dd> | |||
| <dt>Rare IP address formats:</dt> | ||||
| <t>Rare IP address formats: not relevant, as IP addresses do not appear | <dd>Not relevant, as IP addresses do not appear | |||
| anywhere in conformant dtn-scheme URIs.</t> | anywhere in conformant dtn-scheme URIs.</dd> | |||
| <dt>Sensitive information:</dt> | ||||
| <t>Sensitive information: because dtn-scheme URIs are used only to | <dd>Because dtn-scheme URIs are used only to | |||
| represent the identities of Bundle Protocol endpoints, the risk of | represent the identities of Bundle Protocol endpoints, the risk of | |||
| disclosure of sensitive information due to interception of these URIs is | disclosure of sensitive information due to interception of these URIs is | |||
| minimal. Examination of dtn-scheme URIs could be used to support traffic | minimal. Examination of dtn-scheme URIs could be used to support traffic | |||
| analysis; where traffic analysis is a plausible danger, bundles should be | analysis; where traffic analysis is a plausible danger, bundles should be | |||
| conveyed by secure convergence-layer protocols that do not expose endpoint | conveyed by secure convergence-layer protocols that do not expose endpoint | |||
| IDs.</t> | IDs.</dd> | |||
| <dt>Semantic attacks:</dt> | ||||
| <t>Semantic attacks: the simplicity of dtn-scheme URI syntax minimizes the | <dd>The simplicity of dtn-scheme URI syntax minimizes the | |||
| possibility of misinterpretation of a URI by a human user.</t> | possibility of misinterpretation of a URI by a human user.</dd> | |||
| </dl> | ||||
| </section> | </dd> | |||
| </dl> | ||||
| <section title="The "ipn" URI scheme" anchor="sect-4.2.5.1.2">< | </section> | |||
| t> | <section anchor="sect-4.2.5.1.2" numbered="true" toc="default"> | |||
| <name>The ipn URI Scheme</name> | ||||
| <t> | ||||
| The "ipn" scheme supports the identification of BP endpoints by | The "ipn" scheme supports the identification of BP endpoints by | |||
| pairs of unsigned integers, for compact representation in bundle | pairs of unsigned integers, for compact representation in bundle | |||
| blocks. It is specified as follows:</t> | blocks. It is specified as follows:</t> | |||
| <dl> | ||||
| <t> | <dt>Scheme syntax:</dt> | |||
| Scheme syntax: This specification uses the Augmented Backus-Naur | <dd>This specification uses the Augmented Backus-Naur | |||
| Form (ABNF) notation of <xref target="RFC5234"/>, including the core ABNF syn | Form (ABNF) notation of <xref target="RFC5234" format="default"/>, including | |||
| tax | the core ABNF syntax | |||
| rule for DIGIT defined by that specification.</t> | rule for DIGIT defined by that specification.</dd> | |||
| </dl> | ||||
| <figure><artwork><![CDATA[ | <sourcecode type="abnf"><![CDATA[ | |||
| ipn-uri = "ipn:" ipn-hier-part | ipn-uri = "ipn:" ipn-hier-part | |||
| ipn-hier-part = node-nbr nbr-delim service-nbr ; a path-rootless | ipn-hier-part = node-nbr nbr-delim service-nbr ; a path-rootless | |||
| node-nbr = 1*DIGIT | node-nbr = 1*DIGIT | |||
| nbr-delim = "." | nbr-delim = "." | |||
| service-nbr = 1*DIGIT | service-nbr = 1*DIGIT | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | <dl> | |||
| <t> | <dt>Scheme semantics:</dt> | |||
| Scheme semantics: URIs of the ipn scheme are used as endpoint | <dd>URIs of the ipn scheme are used as endpoint | |||
| identifiers in the Delay-Tolerant Networking (DTN) Bundle Protocol | identifiers in the Delay-Tolerant Networking (DTN) Bundle Protocol | |||
| (BP) as described in the present document.</t> | (BP) as described in the present document.</dd> | |||
| </dl> | ||||
| <t> | <t> | |||
| All BP endpoints identified by ipn-scheme endpoint IDs are singleton | All BP endpoints identified by ipn-scheme endpoint IDs are singleton | |||
| endpoints.</t> | endpoints.</t> | |||
| <t> | ||||
| <t> | An ipn-scheme endpoint ID for which service-nbr is zero <bcp14>MAY</bcp14> id | |||
| An ipn-scheme endpoint ID for which service-nbr is zero MAY identify | entify | |||
| the administrative endpoint for the node identified by node-nbr, and | 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 | as such may serve as a node ID. No ipn-scheme endpoint ID for which | |||
| service-nbr is non-zero may do so.</t> | service-nbr is non-zero may do so.</t> | |||
| <dl> | ||||
| <t> | <dt>Encoding considerations:</dt> | |||
| Encoding considerations: For transmission as a BP endpoint ID, the | <dd>For transmission as a BP endpoint ID, the | |||
| scheme-specific part of a URI of the ipn scheme the SSP SHALL be | 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 | represented as a CBOR array comprising two items. The first item of | |||
| this array SHALL be the EID's node number (a number that identifies | this array <bcp14>SHALL</bcp14> be the EID's node number (a number that ident ifies | |||
| the node) represented as a CBOR unsigned integer. The second item | the node) represented as a CBOR unsigned integer. The second item | |||
| of this array SHALL be the EID's service number (a number that | of this array <bcp14>SHALL</bcp14> be the EID's service number (a number that | |||
| identifies some application service) represented as a CBOR unsigned | identifies some application service) represented as a CBOR unsigned | |||
| integer. For all other purposes, URIs of the ipn scheme are encoded | integer. For all other purposes, URIs of the ipn scheme are encoded | |||
| exclusively in US-ASCII characters.</t> | exclusively in US-ASCII characters.</dd> | |||
| <dt>Interoperability considerations:</dt> | ||||
| <t> | <dd>None.</dd> | |||
| Interoperability considerations: none.</t> | <dt>Security considerations:</dt> | |||
| <dd> | ||||
| <t> | <t><br/></t> | |||
| Security considerations:</t> | <dl> | |||
| <dt>Reliability and consistency:</dt> | ||||
| <t>Reliability and consistency: none of the BP endpoints identified by the | <dd>None of the BP endpoints identified by the | |||
| URIs of the ipn scheme are guaranteed to be reachable at any time, and 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 | identity of the processing entities operating on those endpoints is never | |||
| guaranteed by the Bundle Protocol itself. Bundle authentication as defined | guaranteed by the Bundle Protocol itself. Verification of the signature provi | |||
| by the Bundle Security Protocol <xref target="I-D.ietf-dtn-bpsec"/> is | ded by the Block Integrity Block targeting the bundle's primary block, as define | |||
| required for this purpose.</t> | d by Bundle Protocol Security <xref target="RFC9172" format="default"/>, is | |||
| required for this purpose.</dd> | ||||
| <t>Malicious construction: malicious construction of a conformant | <dt>Malicious construction:</dt> | |||
| <dd>Malicious construction of a conformant | ||||
| ipn-scheme URI is limited to the malicious selection of node numbers and | ipn-scheme URI is limited to the malicious selection of node numbers and | |||
| the malicious selection of service numbers. That is, a maliciously | the malicious selection of service numbers. That is, a maliciously | |||
| constructed ipn-scheme URI could be used to direct a bundle to an endpoint | 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 | 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 | 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 | 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 | bundle processing), the node that receives a bundle should verify its | |||
| authenticity and validity before operating on it in any way.</t> | authenticity and validity before operating on it in any way.</dd> | |||
| <dt>Back-end transcoding:</dt> | ||||
| <t>Back-end transcoding: the limited expressiveness of URIs of the ipn | <dd>The limited expressiveness of URIs of the ipn | |||
| scheme effectively eliminates the possibility of threat due to errors in | scheme effectively eliminates the possibility of threat due to errors in | |||
| back-end transcoding.</t> | back-end transcoding.</dd> | |||
| <dt>Rare IP address formats:</dt> | ||||
| <t>Rare IP address formats: not relevant, as IP addresses do not appear | <dd>Not relevant, as IP addresses do not appear | |||
| anywhere in conformant ipn-scheme URIs.</t> | anywhere in conformant ipn-scheme URIs.</dd> | |||
| <dt>Sensitive information:</dt> | ||||
| <t>Sensitive information: because ipn-scheme URIs are used only to | <dd>Because ipn-scheme URIs are used only to | |||
| represent the identities of Bundle Protocol endpoints, the risk of | represent the identities of Bundle Protocol endpoints, the risk of | |||
| disclosure of sensitive information due to interception of these URIs is | disclosure of sensitive information due to interception of these URIs is | |||
| minimal. Examination of ipn-scheme URIs could be used to support traffic | minimal. Examination of ipn-scheme URIs could be used to support traffic | |||
| analysis; where traffic analysis is a plausible danger, bundles should be | analysis; where traffic analysis is a plausible danger, bundles should be | |||
| conveyed by secure convergence-layer protocols that do not expose endpoint | conveyed by secure convergence-layer protocols that do not expose endpoint | |||
| IDs.</t> | IDs.</dd> | |||
| <dt>Semantic attacks:</dt> | ||||
| <t>Semantic attacks: the simplicity of ipn-scheme URI syntax minimizes the | <dd>The simplicity of ipn-scheme URI syntax minimizes the | |||
| possibility of misinterpretation of a URI by a human user. | possibility of misinterpretation of a URI by a human user. | |||
| </t> | </dd> | |||
| </dl> | ||||
| </section> | </dd> | |||
| </dl> | ||||
| </section> | </section> | |||
| </section> | ||||
| <section title="Node ID" anchor="sect-4.2.5.2"><t> | <section anchor="sect-4.2.5.2" numbered="true" toc="default"> | |||
| For many purposes of the Bundle Protocol it is important to identify | <name>Node ID</name> | |||
| <t> | ||||
| For many purposes of the Bundle Protocol, it is important to identify | ||||
| the node that is operative in some context.</t> | the node that is operative in some context.</t> | |||
| <t> | ||||
| <t> | As discussed in <xref target="sect-3.1"/>, nodes are distinct from endpoints; | |||
| As discussed in 3.1 above, nodes are distinct from endpoints; | ||||
| specifically, an endpoint is a set of zero or more nodes. But | specifically, an endpoint is a set of zero or more nodes. But | |||
| rather than define a separate namespace for node identifiers, we | rather than define a separate namespace for node identifiers, we | |||
| instead use endpoint identifiers to identify nodes as discussed in | instead use endpoint identifiers to identify nodes as discussed in | |||
| 3.2 above. Formally: | <xref target="sect-3.2"/>. Formally:</t> | |||
| <list style="symbols"> | ||||
| <t>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".</t> | ||||
| <t>As such, the EID of a node's administrative endpoint SHALL | ||||
| uniquely identify that node.</t> | ||||
| <t>A "node ID" is an EID that identifies the | ||||
| administrative endpoint of a node.</t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| </section> | <ul spacing="normal"> | |||
| <li>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>As such, the EID of a node's administrative endpoint <bcp14>SHALL</bcp14 | ||||
| > | ||||
| uniquely identify that node.</li> | ||||
| <li>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 title="DTN Time" anchor="sect-4.2.6"><t> | </section> | |||
| </section> | ||||
| <section anchor="sect-4.2.6" numbered="true" toc="default"> | ||||
| <name>DTN Time</name> | ||||
| <t> | ||||
| A DTN time is an unsigned integer indicating the number of | A DTN time is an unsigned integer indicating the number of | |||
| milliseconds that have elapsed since the DTN Epoch, 2000-01-01 | 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> | 00:00:00 +0000 (UTC). DTN time is not affected by leap seconds.</t> | |||
| <t> | ||||
| <t> | Each DTN time <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer | |||
| Each DTN time SHALL be represented as a CBOR unsigned integer item. | item. | |||
| Implementers need to be aware that DTN time values conveyed in CBOR | Implementers need to be aware that DTN time values conveyed in CBOR | |||
| representation in bundles will nearly always exceed (2**32 - 1); the | 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 | manner in which a DTN time value is represented in memory is an | |||
| implementation matter. The DTN time value zero indicates that the | implementation matter. The DTN time value zero indicates that the | |||
| time is unknown.</t> | time is unknown.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-4.2.7" numbered="true" toc="default"> | |||
| <name>Creation Timestamp</name> | ||||
| <section title="Creation Timestamp" anchor="sect-4.2.7"><t> | <t> | |||
| Each bundle's creation timestamp SHALL be represented as a CBOR | Each bundle's creation timestamp <bcp14>SHALL</bcp14> be represented as a CBO | |||
| R | ||||
| array comprising two items.</t> | array comprising two items.</t> | |||
| <t> | ||||
| <t> | The first item of the array, termed "bundle creation time", <bcp14>SHALL</bcp | |||
| The first item of the array, termed "bundle creation time", SHALL be | 14> be | |||
| the DTN time at which the transmission request was received that | the DTN time at which the transmission request was received that | |||
| resulted in the creation of the bundle, represented as a CBOR | resulted in the creation of the bundle, represented as a CBOR | |||
| unsigned integer.</t> | unsigned integer.</t> | |||
| <t> | ||||
| <t> | ||||
| The second item of the array, termed the creation timestamp's | The second item of the array, termed the creation timestamp's | |||
| "sequence number", SHALL be the latest value (as of the time at | "sequence number", <bcp14>SHALL</bcp14> be the latest value (as of the time a t | |||
| which the transmission request was received) of a monotonically | which the transmission request was received) of a monotonically | |||
| increasing positive integer counter managed by the source node's | increasing positive integer counter managed by the source node's | |||
| bundle protocol agent, represented as a CBOR unsigned integer. The | BPA, represented as a CBOR unsigned integer. The | |||
| sequence counter MAY be reset to zero whenever the current time | sequence counter <bcp14>MAY</bcp14> be reset to zero whenever the current tim | |||
| e | ||||
| advances by one millisecond.</t> | advances by one millisecond.</t> | |||
| <t> | ||||
| <t> | ||||
| For nodes that lack accurate clocks, it is recommended that bundle | 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 | 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> | of the bundle sequence count never be reset to zero.</t> | |||
| <t> | ||||
| <t> | ||||
| Note that, in general, the creation of two distinct bundles with the | Note that, in general, the creation of two distinct bundles with the | |||
| same source node ID and bundle creation timestamp may result in | same source node ID and bundle creation timestamp may result in | |||
| unexpected network behavior and/or suboptimal performance. The | unexpected network behavior and/or suboptimal performance. The | |||
| combination of source node ID and bundle creation timestamp serves | combination of source node ID and bundle creation timestamp serves | |||
| to identify a single transmission request, enabling it to be | to identify a single transmission request, enabling it to be | |||
| acknowledged by the receiving application (provided the source node | acknowledged by the receiving application (provided the source node | |||
| ID is not the null endpoint ID).</t> | ID is not the null endpoint ID).</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-4.2.8" numbered="true" toc="default"> | |||
| <name>Block-Type-Specific Data</name> | ||||
| <section title="Block-type-specific Data" anchor="sect-4.2.8"><t> | <t> | |||
| Block-type-specific data in each block (other than the primary | Block-type-specific data in each block (other than the primary | |||
| block) SHALL be the applicable CBOR representation of the content of | block) <bcp14>SHALL</bcp14> be the applicable CBOR encoding of the content of | |||
| the block. Details of this representation are included in the | the block. Details of this representation are included in the | |||
| specification defining the block type.</t> | specification defining the block type.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="sect-4.3" numbered="true" toc="default"> | ||||
| </section> | <name>Block Structures</name> | |||
| <t> | ||||
| <section title="Block Structures" anchor="sect-4.3"><t> | ||||
| This section describes the primary block in detail and non-primary | This section describes the primary block in detail and non-primary | |||
| blocks in general. Rules for processing these blocks appear in | blocks in general. Rules for processing these blocks appear in | |||
| Section 5 of this document.</t> | <xref target="sect-5"/>.</t> | |||
| <t> | ||||
| <t> | ||||
| Note that supplementary DTN protocol specifications (including, but | Note that supplementary DTN protocol specifications (including, but | |||
| not restricted to, the Bundle Security Protocol <xref target="I-D.ietf-dtn-bp sec"/>) may require | not restricted to, Bundle Protocol Security <xref target="RFC9172" format="de fault"/>) may require | |||
| that BP implementations conforming to those protocols construct and | that BP implementations conforming to those protocols construct and | |||
| process additional blocks.</t> | process additional blocks.</t> | |||
| <section anchor="sect-4.3.1" numbered="true" toc="default"> | ||||
| <section title="Primary Bundle Block" anchor="sect-4.3.1"><t> | <name>Primary Bundle Block</name> | |||
| <t> | ||||
| The primary bundle block contains the basic information needed to | The primary bundle block contains the basic information needed to | |||
| forward bundles to their destinations.</t> | forward bundles to their destinations.</t> | |||
| <t> | ||||
| <t> | Each primary block <bcp14>SHALL</bcp14> be represented as a CBOR array; the n | |||
| Each primary block SHALL be represented as a CBOR array; the number | umber | |||
| of elements in the array SHALL be 8 (if the bundle is not a fragment | of elements in the array <bcp14>SHALL</bcp14> be 8 (if the bundle is not a fr | |||
| agment | ||||
| and the block has no CRC), 9 (if the block has a CRC and the bundle | 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 | 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 | has no CRC), or 11 (if the bundle is a fragment and the block has a | |||
| CRC).</t> | CRC).</t> | |||
| <t> | ||||
| 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> | ||||
| The fields of the primary bundle block <bcp14>SHALL</bcp14> be as follows, li | ||||
| sted | ||||
| in the order in which they <bcp14>MUST</bcp14> appear:</t> | ||||
| <t> | <dl> | |||
| The primary block of each bundle SHALL be immutable. The CBOR-encoded | <dt>Version:</dt> | |||
| values of all fields in the primary block MUST remain unchanged from the | <dd>An unsigned integer value indicating the version of the | |||
| time the block is created to the time it is delivered.</t> | Bundle Protocol that constructed this block. The present document | |||
| describes BPv7. This version number <bcp14>SHALL</bcp14> be | ||||
| <t> | represented as a CBOR unsigned integer item.</dd> | |||
| The fields of the primary bundle block SHALL be as follows, listed | <dt>Bundle Processing Control Flags:</dt> | |||
| in the order in which they MUST appear:</t> | <dd>The bundle processing control flags | |||
| are discussed in <xref target="sect-4.2.3" format="default"/>.</dd> | ||||
| <t> | <dt>CRC Type:</dt> | |||
| Version: An unsigned integer value indicating the version of the | <dd>CRC type codes are discussed in <xref target="sect-4.2.1" format="default | |||
| bundle protocol that constructed this block. The present document | "/>. The | |||
| describes version 7 of the bundle protocol. Version number SHALL be | CRC type code for the primary block <bcp14>MAY</bcp14> be zero if the bundle | |||
| represented as a CBOR unsigned integer item.</t> | contains a BPSec Block Integrity Block <xref target="RFC9172" format="default | |||
| "/> | ||||
| <t> | whose target is the | |||
| Bundle Processing Control Flags: The Bundle Processing Control Flags | primary block; otherwise, the CRC type code for the primary block | |||
| are discussed in <xref target="sect-4.2.3"/>. above.</t> | <bcp14>MUST</bcp14> be non-zero.</dd> | |||
| <dt>Destination EID:</dt> | ||||
| <t> | <dd>The Destination EID field identifies the bundle | |||
| CRC Type: CRC Type codes are discussed in <xref target="sect-4.2.1"/>. above. | ||||
| The | ||||
| CRC Type code for the primary block MAY be zero if the bundle | ||||
| contains a BPsec <xref target="I-D.ietf-dtn-bpsec"/> Block Integrity Block wh | ||||
| ose target is the | ||||
| primary block; otherwise the CRC Type code for the primary block | ||||
| MUST be non-zero.</t> | ||||
| <t> | ||||
| Destination EID: The Destination EID field identifies the bundle | ||||
| endpoint that is the bundle's destination, i.e., the endpoint that | endpoint that is the bundle's destination, i.e., the endpoint that | |||
| contains the node(s) at which the bundle is to be delivered.</t> | contains the node(s) at which the bundle is to be delivered.</dd> | |||
| <dt>Source node ID:</dt> | ||||
| <t> | <dd>The Source node ID field identifies the bundle node | |||
| Source node ID: The Source node ID field identifies the bundle node | at which the bundle was initially transmitted, except that source | |||
| 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 | node ID may be the null endpoint ID in the event that the bundle's | |||
| source chooses to remain anonymous.</t> | source chooses to remain anonymous.</dd> | |||
| <dt>Report-to EID:</dt> | ||||
| <t> | <dd>The Report-to EID field identifies the bundle | |||
| Report-to EID: The Report-to EID field identifies the bundle | ||||
| endpoint to which status reports pertaining to the forwarding and | endpoint to which status reports pertaining to the forwarding and | |||
| delivery of this bundle are to be transmitted.</t> | delivery of this bundle are to be transmitted.</dd> | |||
| <dt>Creation Timestamp:</dt> | ||||
| <t> | <dd>The creation timestamp comprises two unsigned | |||
| Creation Timestamp: The creation timestamp comprises two unsigned | ||||
| integers that, together with the source node ID and (if the bundle | integers that, together with the source node ID and (if the bundle | |||
| is a fragment) the fragment offset and payload length, serve to | is a fragment) the fragment offset and payload length, serve to | |||
| identify the bundle. See 4.2.7 above for the definition of this | identify the bundle. See <xref target="sect-4.2.7"/> for the definition of th | |||
| field.</t> | is | |||
| field.</dd> | ||||
| <t> | <dt>Lifetime:</dt> | |||
| Lifetime: The lifetime field is an unsigned integer that indicates | <dd> | |||
| <t>The Lifetime field is an unsigned integer that indicates | ||||
| the time at which the bundle's payload will no longer be useful, | the time at which the bundle's payload will no longer be useful, | |||
| encoded as a number of milliseconds past the creation time. (For | encoded as a number of milliseconds past the creation time. (For | |||
| high-rate deployments with very brief disruptions, fine-grained | high-rate deployments with very brief disruptions, fine-grained | |||
| expression of bundle lifetime may be useful.) When a bundle's age | expression of bundle lifetime may be useful.) When a bundle's age | |||
| exceeds its lifetime, bundle nodes need no longer retain or forward | exceeds its lifetime, bundle nodes need no longer retain or forward | |||
| the bundle; the bundle SHOULD be deleted from the network.</t> | the bundle; the bundle <bcp14>SHOULD</bcp14> be deleted from the network.</t> | |||
| <t> | ||||
| <t> | ||||
| If the asserted lifetime for a received bundle is so lengthy that | If the asserted lifetime for a received bundle is so lengthy that | |||
| retention of the bundle until its expiration time might degrade | retention of the bundle until its expiration time might degrade | |||
| operation of the node at which the bundle is received, or if the | operation of the node at which the bundle is received, or if the | |||
| bundle protocol agent of that node determines that the bundle must | BPA of that node determines that the bundle must | |||
| be deleted in order to prevent network performance degradation | be deleted in order to prevent network performance degradation | |||
| (e.g., the bundle appears to be part of a denial-of-service attack), | (e.g., the bundle appears to be part of a denial-of-service attack), | |||
| then that bundle protocol agent MAY impose a temporary overriding | then that BPA <bcp14>MAY</bcp14> impose a temporary overriding | |||
| lifetime of shorter duration; such overriding lifetime SHALL NOT | lifetime of shorter duration; such an overriding lifetime <bcp14>SHALL NOT</b | |||
| replace the lifetime asserted in the bundle but SHALL serve as the | cp14> | |||
| 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. | bundle's effective lifetime while the bundle resides at that node. | |||
| Procedures for imposing lifetime overrides are beyond the scope of | Procedures for imposing lifetime overrides are beyond the scope of | |||
| this specification.</t> | this specification.</t> | |||
| <t> | ||||
| <t> | ||||
| For bundles originating at nodes that lack accurate clocks, it is | For bundles originating at nodes that lack accurate clocks, it is | |||
| recommended that bundle age be obtained from the Bundle Age | recommended that bundle age be obtained from the Bundle Age | |||
| extension block (see 4.4.2 below) rather than from the difference | extension block (see <xref target="sect-4.4.2"/>) rather than from the differ ence | |||
| between current time and bundle creation time. Bundle lifetime | between current time and bundle creation time. Bundle lifetime | |||
| SHALL be represented as a CBOR unsigned integer item.</t> | <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer item.</t> | |||
| </dd> | ||||
| <t> | <dt>Fragment offset:</dt> | |||
| Fragment offset: If and only if the Bundle Processing Control Flags | <dd>If and only if the bundle processing control flags | |||
| of this Primary block indicate that the bundle is a fragment, | of this primary block indicate that the bundle is a fragment, | |||
| fragment offset SHALL be present in the primary block. Fragment | fragment offset <bcp14>SHALL</bcp14> be present in the primary block. Fragmen | |||
| offset SHALL be represented as a CBOR unsigned integer indicating | t | |||
| the offset from the start of the original application data unit at | offset <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer indicat | |||
| which the bytes comprising the payload of this bundle were located.</t> | ing | |||
| the offset from the start of the original ADU at | ||||
| which the bytes comprising the payload of this bundle were located.</dd> | ||||
| <t> | <dt>Total Application Data Unit Length:</dt> | |||
| Total Application Data Unit Length: If and only if the Bundle | <dd>If and only if the bundle | |||
| Processing Control Flags of this Primary block indicate that the | processing control flags of this primary block indicate that the | |||
| bundle is a fragment, total application data unit length SHALL be | bundle is a fragment, total application data unit length <bcp14>SHALL</bcp14> | |||
| be | ||||
| present in the primary block. Total application data unit length | present in the primary block. Total application data unit length | |||
| SHALL be represented as a CBOR unsigned integer indicating the total | <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer indicating the | |||
| length of the original application data unit of which this bundle's | total | |||
| payload is a part.</t> | length of the original ADU of which this bundle's | |||
| payload is a part.</dd> | ||||
| <t> | <dt>CRC:</dt> | |||
| CRC: A CRC SHALL be present in the primary block unless the bundle includes | <dd>A CRC <bcp14>SHALL</bcp14> be present in the primary block unless the bun | |||
| a BPsec <xref target="I-D.ietf-dtn-bpsec"/> Block Integrity Block whose | dle includes | |||
| target is the primary block, in which case a CRC MAY be present in the | a BPSec Block Integrity Block <xref target="RFC9172" format="default"/> whose | |||
| primary block. The length and nature of the CRC SHALL be as indicated by | target is the primary block, in which case a CRC <bcp14>MAY</bcp14> be presen | |||
| the CRC type. The CRC SHALL be computed over the concatenation of all | t in the | |||
| primary block. The length and nature of the CRC <bcp14>SHALL</bcp14> be as i | ||||
| ndicated by | ||||
| the CRC type. The CRC <bcp14>SHALL</bcp14> be computed over the concatenatio | ||||
| n of all | ||||
| bytes (including CBOR "break" characters) of the primary block including | bytes (including CBOR "break" characters) of the primary block including | |||
| the CRC field itself, which for this purpose SHALL be temporarily populated | the CRC field itself, which, for this purpose, <bcp14>SHALL</bcp14> be tempor | |||
| with all bytes set to zero.</t> | arily populated | |||
| with all bytes set to zero.</dd> | ||||
| </section> | </dl> | |||
| <section title="Canonical Bundle Block Format" anchor="sect-4.3.2"><t> | </section> | |||
| <section anchor="sect-4.3.2" numbered="true" toc="default"> | ||||
| <name>Canonical Bundle Block Format</name> | ||||
| <t> | ||||
| Every block other than the primary block (all such blocks are termed | Every block other than the primary block (all such blocks are termed | |||
| "canonical" blocks) SHALL be represented as a CBOR array; the number | "canonical" blocks) <bcp14>SHALL</bcp14> be represented as a CBOR array; the | |||
| of elements in the array SHALL be 5 (if CRC type is zero) or 6 | number | |||
| of elements in the array <bcp14>SHALL</bcp14> be 5 (if CRC type is zero) or 6 | ||||
| (otherwise).</t> | (otherwise).</t> | |||
| <t> | ||||
| <t> | The fields of every canonical block <bcp14>SHALL</bcp14> be as follows, liste | |||
| The fields of every canonical block SHALL be as follows, listed in | d in | |||
| the order in which they MUST appear: | the order in which they <bcp14>MUST</bcp14> appear:</t> | |||
| <dl> | ||||
| <list style="symbols"> | <dt>Block type code:</dt><dd>An unsigned integer. Bundle block type c | |||
| ode 1 | ||||
| <t>Block type code, an unsigned integer. Bundle block type code 1 | indicates that the block is a Bundle Payload Block. Other block type cod | |||
| indicates that the block is a bundle payload block. Block type codes 2 | es | |||
| through 9 are explicitly reserved as noted later in this | are described in <xref target="sect-9.1" format="default"/>. | |||
| specification. Block type codes 192 through 255 are not reserved and | Block type codes 192 through 255 are not reserved and | |||
| are available for private and/or experimental use. All other block | are available for private and/or experimental use. All other block | |||
| type code values are reserved for future use.</t> | type code values are reserved for future use.</dd> | |||
| <dt>Block number:</dt><dd>An unsigned integer as discussed in <xref t | ||||
| <t>Block number, an unsigned integer as discussed in 4.1 above. Block | arget="sect-4.1"/>. The block | |||
| number SHALL be represented as a CBOR unsigned integer.</t> | number <bcp14>SHALL</bcp14> be represented as a CBOR unsigned integer.</ | |||
| dd> | ||||
| <t>Block processing control flags as discussed in Section 4.2.4 | <dt>Block processing control flags:</dt><dd>As discussed in <xref tar | |||
| above.</t> | get="sect-4.2.4"/>.</dd> | |||
| <dt>CRC type:</dt><dd>As discussed in <xref target="sect-4.2.1" forma | ||||
| <t>CRC type as discussed in <xref target="sect-4.2.1"/> above.</t> | t="default"/>.</dd> | |||
| <dt>Block-type-specific data:</dt><dd>Represented as a single definit | ||||
| <t>Block-type-specific data represented as a single definite-length | e-length | |||
| CBOR byte string, i.e., a CBOR byte string that is not of indefinite | 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 | length. For each type of block, the block-type-specific data byte | |||
| string is the serialization, in a block- type-specific manner, of the | string is the serialization, in a block-type-specific manner, of the | |||
| data conveyed by that type of block; definitions of blocks are | data conveyed by that type of block; definitions of blocks are | |||
| required to define the manner in which block-type-specific data are | required to define the manner in which block-type-specific data are | |||
| serialized within the block-type-specific data field. For the Payload | serialized within the block-type-specific data field. For the Bundle Pay | |||
| Block in particular (block type 1), the block-type-specific data | load | |||
| field, termed the "payload", SHALL be an application data unit, or | Block in particular (block type 1), the block-type-specific data | |||
| some contiguous extent thereof, represented as a definite- length CBOR | field, termed the "payload", <bcp14>SHALL</bcp14> be an ADU, or | |||
| byte string. | some contiguous extent thereof, represented as a definite-length CBOR | |||
| </t> | byte string.</dd> | |||
| <dt>If and only if the value of the CRC type field of this block is | ||||
| <t>If and only if the value of the CRC type field of this block is | non-zero:</dt><dd>A CRC. If present, the length and nature of the CRC <b | |||
| non-zero, a CRC. If present, the length and nature of the CRC SHALL be | cp14>SHALL</bcp14> be | |||
| as indicated by the CRC type and the CRC SHALL be computed over the | as indicated by the CRC type and the CRC <bcp14>SHALL</bcp14> be compute | |||
| concatenation of all bytes of the block (including CBOR "break" | d over the | |||
| characters) including the CRC field itself, which for this purpose | concatenation of all bytes of the block (including CBOR "break" | |||
| SHALL be temporarily populated with all bytes set to zero.</t> | characters) including the CRC field itself, which, for this purpose, | |||
| <bcp14>SHALL</bcp14> be temporarily populated with all bytes set to zero | ||||
| </list> | .</dd> | |||
| </t> | </dl> | |||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="sect-4.4" numbered="true" toc="default"> | ||||
| </section> | <name>Extension Blocks</name> | |||
| <t>"Extension blocks" are all blocks other than the primary and payload | ||||
| <section title="Extension Blocks" anchor="sect-4.4"><t> | ||||
| "Extension blocks" are all blocks other than the primary and payload | ||||
| blocks. Three types of extension blocks are defined below. All | blocks. Three types of extension blocks are defined below. All | |||
| implementations of the Bundle Protocol specification (the present | implementations of the Bundle Protocol specification (the present | |||
| document) MUST include procedures for recognizing, parsing, and | document) <bcp14>MUST</bcp14> include procedures for recognizing, parsing, an d | |||
| acting on, but not necessarily producing, these types of extension | acting on, but not necessarily producing, these types of extension | |||
| blocks.</t> | blocks.</t> | |||
| <t> | ||||
| <t> | ||||
| The specifications for additional types of extension blocks must | The specifications for additional types of extension blocks must | |||
| indicate whether or not BP implementations conforming to those | indicate whether or not BP implementations conforming to those | |||
| specifications must recognize, parse, act on, and/or produce blocks | specifications must recognize, parse, act on, and/or produce blocks | |||
| of those types. As not all nodes will necessarily instantiate BP | of those types. As not all nodes will necessarily instantiate BP | |||
| implementations that conform to those additional specifications, it | implementations that conform to those additional specifications, it | |||
| is possible for a node to receive a bundle that includes extension | is possible for a node to receive a bundle that includes extension | |||
| blocks that the node cannot process. The values of the block | blocks that the node cannot process. The values of the block | |||
| processing control flags indicate the action to be taken by the | processing control flags indicate the action to be taken by the | |||
| bundle protocol agent when this is the case.</t> | BPA when this is the case.</t> | |||
| <t> | ||||
| <t> | ||||
| No mandated procedure in this specification is unconditionally | No mandated procedure in this specification is unconditionally | |||
| dependent on the absence or presence of any extension block. | dependent on the absence or presence of any extension block. | |||
| Therefore any bundle protocol agent MAY insert or remove any | Therefore, any BPA <bcp14>MAY</bcp14> insert or remove any | |||
| extension block in any bundle, subject to all mandates in the Bundle | extension block in any bundle, subject to all mandates in the Bundle | |||
| Protocol specification and all extension block specifications to | Protocol specification and all extension block specifications to | |||
| which the node's BP implementation conforms. Note that removal of | which the node's BP implementation conforms. Note that removal of | |||
| an extension block will probably disable one or more elements of | an extension block will probably disable one or more elements of | |||
| bundle processing that were intended by the BPA that inserted that | bundle processing that were intended by the BPA that inserted that | |||
| block. In particular, note that removal of an extension block 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 | is one of the targets of a BPSec security block may render the | |||
| bundle unverifiable.</t> | bundle unverifiable.</t> | |||
| <t> | ||||
| <t> | ||||
| The following extension blocks are defined in the current document.</t> | The following extension blocks are defined in the current document.</t> | |||
| <section anchor="sect-4.4.1" numbered="true" toc="default"> | ||||
| <section title="Previous Node" anchor="sect-4.4.1"><t> | <name>Previous Node</name> | |||
| The Previous Node block, block type 6, identifies the node that | <t> | |||
| 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 | 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 | the bundle currently resides); its block-type-specific data is the | |||
| node ID of that forwarder node which SHALL take the form of a node | node ID of that forwarder node. That node ID <bcp14>SHALL</bcp14> conform to | |||
| ID represented as described in <xref target="sect-4.2.5.2"/>. above. If the | <xref target="sect-4.2.5.2" format="default"/>. | |||
| local | If the local | |||
| node is the source of the bundle, then the bundle MUST NOT contain | node is the source of the bundle, then the bundle <bcp14>MUST NOT</bcp14> con | |||
| any Previous Node block. Otherwise the bundle SHOULD contain one | tain | |||
| (1) occurrence of this type of block and MUST NOT contain more than | 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> | one.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-4.4.2" numbered="true" toc="default"> | |||
| <name>Bundle Age</name> | ||||
| <section title="Bundle Age" anchor="sect-4.4.2"><t> | <t> | |||
| The Bundle Age block, block type 7, contains the number of | The Bundle Age Block, block type 7, contains the number of | |||
| milliseconds that have elapsed between the time the bundle was | milliseconds that have elapsed between the time the bundle was | |||
| created and time at which it was most recently forwarded. It is | 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 | intended for use by nodes lacking access to an accurate clock, to | |||
| aid in determining the time at which a bundle's lifetime expires. | aid in determining the time at which a bundle's lifetime expires. | |||
| The block-type-specific data of this block is an unsigned integer | The block-type-specific data of this block is an unsigned integer | |||
| containing the age of the bundle in milliseconds, which SHALL be | 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 | 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 | 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 | forwarding nodes, up to the time at which the bundle was most | |||
| recently forwarded, plus the summation of signal propagation time | recently forwarded, plus the summation of signal propagation time | |||
| over all episodes of transmission between forwarding nodes. | over all episodes of transmission between forwarding nodes. | |||
| Determination of these values is an implementation matter.) If the | Determination of these values is an implementation matter.) If the | |||
| bundle's creation time is zero, then the bundle MUST contain exactly | bundle's creation time is zero, then the bundle <bcp14>MUST</bcp14> contain e | |||
| one (1) occurrence of this type of block; otherwise, the bundle MAY | xactly | |||
| one (1) occurrence of this type of block; otherwise, the bundle <bcp14>MAY</b | ||||
| cp14> | ||||
| contain at most one (1) occurrence of this type of block. A bundle | contain at most one (1) occurrence of this type of block. A bundle | |||
| MUST NOT contain multiple occurrences of the bundle age block, as | <bcp14>MUST NOT</bcp14> contain multiple occurrences of the Bundle Age Block, as | |||
| this could result in processing anomalies.</t> | this could result in processing anomalies.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-4.4.3" numbered="true" toc="default"> | |||
| <name>Hop Count</name> | ||||
| <section title="Hop Count" anchor="sect-4.4.3"><t> | <t> | |||
| The Hop Count block, block type 10, contains two unsigned integers, | 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 | 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. Hop | which a bundle was forwarded from one node to another node. The hop | |||
| limit MUST be in the range 1 through 255. The hop limit value SHOULD | limit <bcp14>MUST</bcp14> be in the range 1 through 255. The hop limit value | |||
| NOT be changed at any time after creation of the Hop Count block; | <bcp14>SHOULD | |||
| the hop count value SHOULD initially be zero and SHOULD be increased | 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> | by 1 on each hop.</t> | |||
| <t> | ||||
| <t> | The Hop Count Block is mainly intended as a safety mechanism, a | |||
| The hop count block is mainly intended as a safety mechanism, a | ||||
| means of identifying bundles for removal from the network that can | means of identifying bundles for removal from the network that can | |||
| never be delivered due to a persistent forwarding error. Hop count | never be delivered due to a persistent forwarding error. The hop count | |||
| is particularly valuable as a defense against routing anomalies that | is particularly valuable as a defense against routing anomalies that | |||
| might cause a bundle to be forwarded in a cyclical "ping-pong" | might cause a bundle to be forwarded in a cyclical "ping-pong" | |||
| fashion between two nodes. When a bundle's hop count exceeds its | fashion between two nodes. When a bundle's hop count exceeds its | |||
| hop limit, the bundle SHOULD be deleted for the reason "hop limit exceeded", | hop limit, the bundle <bcp14>SHOULD</bcp14> be deleted for the reason "Hop li | |||
| following the bundle deletion procedure defined in | mit exceeded", following the Bundle Deletion procedure defined in | |||
| <xref target="sect-5.10"/>.</t> | <xref target="sect-5.10" format="default"/>.</t> | |||
| <t> | ||||
| <t> | ||||
| Procedures for determining the appropriate hop limit for a bundle | Procedures for determining the appropriate hop limit for a bundle | |||
| are beyond the scope of this specification.</t> | are beyond the scope of this specification.</t> | |||
| <t> | ||||
| <t> | The block-type-specific data in a Hop Count Block <bcp14>SHALL</bcp14> be | |||
| The block-type-specific data in a hop count block SHALL be | ||||
| represented as a CBOR array comprising two items. The first item of | represented as a CBOR array comprising two items. The first item of | |||
| this array SHALL be the bundle's hop limit, represented as a CBOR | this array <bcp14>SHALL</bcp14> be the bundle's hop limit, represented as a C | |||
| unsigned integer. The second item of this array SHALL be the | BOR | |||
| 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 | bundle's hop count, represented as a CBOR unsigned integer. A bundle | |||
| MAY contain one occurrence of this type of block but MUST NOT | <bcp14>MAY</bcp14> contain one occurrence of this type of block but <bcp14>MU ST NOT</bcp14> | |||
| contain more than one.</t> | contain more than one.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| </section> | ||||
| </section> | <section anchor="sect-5" numbered="true" toc="default"> | |||
| <name>Bundle Processing</name> | ||||
| </section> | <t> | |||
| The bundle-processing procedures mandated in this section and in | ||||
| <section title="Bundle Processing" anchor="sect-5"><t> | <xref target="sect-6" format="default"/> govern the operation of the BPA and | |||
| The bundle processing procedures mandated in this section and in | the | |||
| <xref target="sect-6"/> govern the operation of the Bundle Protocol Agent and | application agent administrative element of each bundle node. They | |||
| the | ||||
| Application Agent administrative element of each bundle node. They | ||||
| are neither exhaustive nor exclusive. Supplementary DTN protocol | are neither exhaustive nor exclusive. Supplementary DTN protocol | |||
| specifications (including, but not restricted to, the Bundle | specifications (including, but not restricted to, Bundle Protocol | |||
| Security Protocol <xref target="I-D.ietf-dtn-bpsec"/>) may augment, override, | Security <xref target="RFC9172" format="default"/>) may augment, override, or | |||
| or supersede the | supersede the | |||
| mandates of this document.</t> | mandates of this document.</t> | |||
| <section anchor="sect-5.1" numbered="true" toc="default"> | ||||
| <section title="Generation of Administrative Records" anchor="sect-5.1">< | <name>Generation of Administrative Records</name> | |||
| t> | <t> | |||
| All transmission of bundles is in response to bundle transmission | All transmission of bundles is in response to bundle transmission | |||
| requests presented by nodes' application agents. When required to | requests presented by nodes' application agents. When required to | |||
| "generate" an administrative record (such as a bundle status | "generate" an administrative record (such as a bundle status | |||
| report), the bundle protocol agent itself is responsible for causing | report), the BPA itself is responsible for causing | |||
| a new bundle to be transmitted, conveying that record. In concept, | a new bundle to be transmitted, conveying that record. In concept, | |||
| the bundle protocol agent discharges this responsibility by | the BPA discharges this responsibility by | |||
| directing the administrative element of the node's application agent | directing the administrative element of the node's application agent | |||
| to construct the record and request its transmission as detailed in | to construct the record and request its transmission as detailed in | |||
| <xref target="sect-6"/> below. In practice, the manner in which administrativ e | <xref target="sect-6" format="default"/>. In practice, the manner in which ad ministrative | |||
| record generation is accomplished is an implementation matter, | record generation is accomplished is an implementation matter, | |||
| provided the constraints noted in <xref target="sect-6"/> are observed.</t> | provided the constraints noted in <xref target="sect-6" format="default"/> ar | |||
| e observed.</t> | ||||
| <t> | <t> | |||
| Status reports are relatively small bundles. Moreover, even when | Status reports are relatively small bundles. Moreover, even when | |||
| the generation of status reports is enabled the decision on whether | the generation of status reports is enabled, the decision on whether | |||
| or not to generate a requested status report is left to the | or not to generate a requested status report is left to the | |||
| discretion of the bundle protocol agent. Nonetheless, note that | discretion of the BPA. Nonetheless, note that | |||
| requesting status reports for any single bundle might easily result | requesting status reports for any single bundle might easily result | |||
| in the generation of (1 + (2 *(N-1))) status report bundles, where N | 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 | is the number of nodes on the path from the bundle's source to its | |||
| destination, inclusive. That is, the requesting of status reports | destination, inclusive. That is, the requesting of status reports | |||
| for large numbers of bundles could result in an unacceptable | for large numbers of bundles could result in an unacceptable | |||
| increase in the bundle traffic in the network. For this reason, the | increase in the bundle traffic in the network. For this reason, the | |||
| generation of status reports MUST be disabled by default and enabled | generation of status reports <bcp14>MUST</bcp14> be disabled by default and e nabled | |||
| only when the risk of excessive network traffic is deemed | only when the risk of excessive network traffic is deemed | |||
| acceptable. Mechanisms that could assist in assessing and | acceptable. Mechanisms that could assist in assessing and | |||
| mitigating this risk, such as pre-placed agreements authorizing the | mitigating this risk, such as pre-placed agreements authorizing the | |||
| generation of status reports under specified circumstances, are | generation of status reports under specified circumstances, are | |||
| beyond the scope of this specification.</t> | beyond the scope of this specification.</t> | |||
| <t> | <t>Notes on administrative record terminology:</t> | |||
| Notes on administrative record terminology: | <ul spacing="normal"> | |||
| <li>A "bundle reception status report" is a bundle status report with | ||||
| <list style="symbol"> | the "Reporting node received bundle" flag set to 1.</li> | |||
| <li>A "bundle forwarding status report" is a bundle status report | ||||
| <t>A "bundle reception status report is a bundle status report with | with the "Reporting node forwarded the bundle" flag set to 1.</li> | |||
| the "reporting node received bundle" flag set to 1.</t> | <li>A "bundle delivery status report" is a bundle status report with | |||
| the "Reporting node delivered the bundle" flag set to 1.</li> | ||||
| <t>A "bundle forwarding status report" is a bundle status report | <li>A "bundle deletion status report" is a bundle status report with | |||
| with the "reporting node forwarded the bundle" flag set to 1.</t> | the "Reporting node deleted the bundle" flag set to 1.</li> | |||
| </ul> | ||||
| <t>A "bundle delivery status report" is a bundle status report with | </section> | |||
| the "reporting node delivered the bundle" flag set to 1.</t> | <section anchor="sect-5.2" numbered="true" toc="default"> | |||
| <name>Bundle Transmission</name> | ||||
| <t>A "bundle deletion status report" is a bundle status report with | <t> | |||
| the "reporting node deleted the bundle" flag set to 1.</t> | The steps in processing a bundle transmission request are as follows:</t | |||
| > | ||||
| </list> | <ol type="Step %d:" indent="9"> | |||
| </t> | <li> | |||
| Transmission of the bundle is initiated. An outbound bundle | ||||
| </section> | <bcp14>MUST</bcp14> be created per the parameters of the bundle transmission | |||
| <section title="Bundle Transmission" anchor="sect-5.2"><t> | ||||
| The steps in processing a bundle transmission request are:</t> | ||||
| <t> | ||||
| Step 1: Transmission of the bundle is initiated. An outbound bundle | ||||
| MUST be created per the parameters of the bundle transmission | ||||
| request, with the retention constraint "Dispatch pending". The | request, with the retention constraint "Dispatch pending". The | |||
| source node ID of the bundle MUST be either the null endpoint ID, | source node ID of the bundle <bcp14>MUST</bcp14> be either (a) the null endpo | |||
| indicating that the source of the bundle is anonymous, or else the | int 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 | EID of a singleton endpoint whose only member is the node of which | |||
| the BPA is a component.</t> | the BPA is a component.</li> | |||
| <t> | ||||
| Step 2: Processing proceeds from Step 1 of <xref target="sect-5.4"/>.</t> | ||||
| </section> | <li> Processing proceeds from Step 1 of <xref target="sect-5.4" format="defaul | |||
| t"/>.</li> | ||||
| </ol> | ||||
| <section title="Bundle Dispatching" anchor="sect-5.3"><t> | </section> | |||
| <section anchor="sect-5.3" numbered="true" toc="default"> | ||||
| <name>Bundle Dispatching</name> | ||||
| <t> | ||||
| (Note that this procedure is initiated only following completion of | (Note that this procedure is initiated only following completion of | |||
| Step 4 of <xref target="sect-5.6"/>.)</t> | Step 4 of <xref target="sect-5.6" format="default"/>.)</t> | |||
| <t> | ||||
| <t> | The steps in dispatching a bundle are as follows:</t> | |||
| The steps in dispatching a bundle are:</t> | <ol type="Step %d:" indent="9"> | |||
| <li> | ||||
| <t> | If the bundle's destination endpoint is an endpoint of which | |||
| Step 1: If the bundle's destination endpoint is an endpoint of which | the node is a member, the Bundle Delivery procedure defined in | |||
| the node is a member, the bundle delivery procedure defined in | <xref target="sect-5.7" format="default"/> <bcp14>MUST</bcp14> be followed an | |||
| <xref target="sect-5.7"/> MUST be followed and for the purposes of all subseq | d, for the purposes of all subsequent | |||
| uent | processing of this bundle at this node, the node's membership in the | |||
| processing of this bundle at this node the node's membership in the | bundle's destination endpoint <bcp14>SHALL</bcp14> be disavowed; specifically | |||
| bundle's destination endpoint SHALL be disavowed; specifically, even | , even | |||
| though the node is a member of the bundle's destination endpoint, | though the node is a member of the bundle's destination endpoint, | |||
| the node SHALL NOT undertake to forward the bundle to itself in the | the node <bcp14>SHALL NOT</bcp14> undertake to forward the bundle to itself i | |||
| course of performing the procedure described in <xref target="sect-5.4"/>.</t | n the | |||
| > | course of performing the procedure described in <xref target="sect-5.4" forma | |||
| t="default"/>.</li> | ||||
| <t> | ||||
| Step 2: Processing proceeds from Step 1 of <xref target="sect-5.4"/>.</t> | ||||
| </section> | <li> Processing proceeds from Step 1 of <xref target="sect-5.4" format | |||
| ="default"/>.</li> | ||||
| </ol> | ||||
| <section title="Bundle Forwarding" anchor="sect-5.4"><t> | </section> | |||
| The steps in forwarding a bundle are:</t> | <section anchor="sect-5.4" numbered="true" toc="default"> | |||
| <name>Bundle Forwarding</name> | ||||
| <t> | ||||
| The steps in forwarding a bundle are as follows:</t> | ||||
| <ol type="Step %d:" indent="9"> | ||||
| <t> | <li>The retention constraint "Forward pending" <bcp14>MUST</bcp14> be added to | |||
| Step 1: The retention constraint "Forward pending" MUST be added to | ||||
| the bundle, and the bundle's "Dispatch pending" retention constraint | the bundle, and the bundle's "Dispatch pending" retention constraint | |||
| MUST be removed.</t> | <bcp14>MUST</bcp14> be removed.</li> | |||
| <li><t>The BPA <bcp14>MUST</bcp14> determine whether or not | ||||
| <t> | ||||
| Step 2: The bundle protocol agent MUST determine whether or not | ||||
| forwarding is contraindicated (that is, rendered inadvisable) for | forwarding is contraindicated (that is, rendered inadvisable) for | |||
| any of the reasons listed in the IANA registry of Bundle Status | any of the reasons listed in the IANA "Bundle Status Report Reason Codes" reg | |||
| Report Reason Codes (see section 10.5 below), whose initial contents | istry | |||
| are listed in Figure 4. In particular: | (see <xref target="sect-9.5"/>), whose initial contents | |||
| are listed in <xref target="tab-1"/>. In particular:</t> | ||||
| <list style="symbols"> | ||||
| <t>The bundle protocol agent MAY choose either to forward the bundle | ||||
| directly to its destination node(s) (if possible) or to 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 [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.</t> | ||||
| <t>Provided the bundle protocol agent succeeded in selecting the | ||||
| node(s) to forward the bundle to, the bundle protocol agent MUST | ||||
| subsequently select the convergence layer adapter(s) whose services | ||||
| will enable the node to send the bundle to those nodes. The manner | ||||
| in which specific appropriate convergence layer adapters are | ||||
| selected is beyond the scope of this document; the TCP | ||||
| convergence-layer adapter <xref target="I-D.ietf-dtn-tcpclv4"/> MUST | ||||
| be implemented when some or all of the bundles forwarded by the | ||||
| bundle protocol agent 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 convergence | ||||
| layer adapter(s) to use in forwarding this bundle, then forwarding | ||||
| is contraindicated.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Step 3: If forwarding of the bundle is determined to be | ||||
| contraindicated for any of the reasons listed in the IANA registry | ||||
| of Bundle Status Report Reason Codes (see section 10.5 below), then | ||||
| the Forwarding Contraindicated procedure defined in <xref target="sect-5.4.1" | ||||
| /> | ||||
| MUST be followed; the remaining steps of <xref target="sect-5.4"/> are skippe | ||||
| d at | ||||
| this time.</t> | ||||
| <t> | ||||
| Step 4: For each node selected for forwarding, the bundle protocol | ||||
| agent MUST invoke the services of the selected convergence layer | ||||
| adapter(s) in order to effect the sending of the bundle to that | ||||
| node. Determining the time at which the bundle protocol agent | ||||
| invokes convergence layer adapter services is a BPA implementation | ||||
| matter. Determining the time at which each convergence layer | ||||
| adapter subsequently responds to this service invocation by sending | ||||
| the bundle is a convergence-layer adapter implementation matter. | ||||
| Note that: | ||||
| <list style="symbols"> | ||||
| <t>If the bundle has a Previous Node block, as defined in 4.4.1 | ||||
| above, then that block MUST be removed from the bundle before the | ||||
| bundle is forwarded.</t> | ||||
| <t>If the bundle protocol agent is configured to attach Previous | ||||
| Node blocks to forwarded bundles, then a Previous Node block | ||||
| containing the node ID of the forwarding node MUST be inserted into | ||||
| the bundle before the bundle is forwarded.</t> | ||||
| <t>If the bundle has a bundle age block, as defined in 4.4.2. | <ul spacing="normal"> | |||
| above, then at the last possible moment before the CLA initiates | <li>The BPA <bcp14>MAY</bcp14> choose to either forward the bundle | |||
| conveyance of the bundle via the CL protocol the bundle age value | directly to its destination node(s) (if possible) or forward the | |||
| MUST be increased by the difference between the current time and the | bundle to some other node(s) for further forwarding. The manner in | |||
| time at which the bundle was received (or, if the local node is the | which this decision is made may depend on the scheme name in the | |||
| source of the bundle, created).</t> | 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"/>. If the BPA elects to forward the b | ||||
| undle 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>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"/> <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 f | ||||
| orwarding this bundle, then forwarding | ||||
| is contraindicated.</li> | ||||
| </ul> | ||||
| </li> | ||||
| </list> | <li> | |||
| </t> | If forwarding of the bundle is determined to be | |||
| contraindicated for any of the reasons listed in the IANA "Bundle Status Repo | ||||
| rt | ||||
| Reason Codes" registry (see <xref target="sect-9.5"/>), then | ||||
| the Forwarding Contraindicated procedure defined in <xref target="sect-5.4.1" | ||||
| format="default"/> | ||||
| <bcp14>MUST</bcp14> be followed; the remaining steps of this Bundle Forwardin | ||||
| g procedure are skipped at this time.</li> | ||||
| <t> | <li><t>For each node selected for forwarding, the BPA <bcp14>MUST</bcp14> invo | |||
| Step 5: When all selected convergence layer adapters have informed | ke the services of the selected CLA(s) in order to effect the sending of the bun | |||
| the bundle protocol agent that they have concluded their data | dle to that | |||
| sending procedures with regard to this bundle, processing may depend | node. Determining the time at which the BPA | |||
| on the results of those procedures.</t> | 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> | ||||
| <t> | <ul spacing="normal"> | |||
| If completion of the data sending procedures by all selected | <li>If the bundle has a Previous Node Block, as defined in <xref targe | |||
| convergence layer adapters has not resulted in successful forwarding | t="sect-4.4.1"/>, | |||
| then that block <bcp14>MUST</bcp14> be removed from the bundle before | ||||
| the | ||||
| bundle is forwarded.</li> | ||||
| <li>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 i | ||||
| nserted into | ||||
| the bundle before the bundle is forwarded.</li> | ||||
| <li>If the bundle has a Bundle Age Block, as defined in <xref target=" | ||||
| sect-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> | ||||
| 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> | ||||
| 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 | of the bundle (an implementation-specific determination that is | |||
| beyond the scope of this specification), then the bundle protocol | beyond the scope of this specification), then the BPA <bcp14>MAY</bcp14> choo | |||
| agent MAY choose (in an implementation-specific manner, again beyond | se (in an implementation-specific manner, again beyond | |||
| the scope of this specification) to initiate another attempt to | the scope of this specification) to initiate another attempt to | |||
| forward the bundle. In that event, processing proceeds from Step 4. | forward the bundle. In that event, processing proceeds from Step 4. | |||
| The minimum number of times a given node will initiate another | The minimum number of times a given node will initiate another | |||
| forwarding attempt for any single bundle in this event (a number | forwarding attempt for any single bundle in this event (a number | |||
| which may be zero) is a node configuration parameter that must be | 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 | exposed to other nodes in the network to the extent that this is | |||
| required by the operating environment.</t> | required by the operating environment.</t> | |||
| <t> | ||||
| <t> | If completion of the data-sending procedures by all selected | |||
| If completion of the data sending procedures by all selected | CLAs <strong>HAS</strong> resulted in successful forwarding of | |||
| convergence layer adapters HAS resulted in successful forwarding of | the bundle, or if it has not but the BPA does not | |||
| the bundle, or if it has not but the bundle protocol agent does not | ||||
| choose to initiate another attempt to forward the bundle, then: | choose to initiate another attempt to forward the bundle, then: | |||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>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>SH | ||||
| OULD</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>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>The bundle's "Forward pending" retention constraint <bcp14>MUST</b | ||||
| cp14> be | ||||
| removed.</li> | ||||
| </ul> | ||||
| <section anchor="sect-5.4.1" numbered="true" toc="default"> | ||||
| <name>Forwarding Contraindicated</name> | ||||
| <t> | ||||
| The steps in responding to contraindication of forwarding are as follows:</t> | ||||
| <list style="symbols"> | <ol type="Step %d:" indent="9"> | |||
| <li>The BPA <bcp14>MUST</bcp14> determine whether or not to | ||||
| <t>If the "request reporting of bundle forwarding" flag in the | declare failure in forwarding the bundle. Note: This decision is | |||
| bundle's status report request field is set to 1, and status | ||||
| reporting is enabled, then a bundle forwarding status report SHOULD | ||||
| be generated, destined for the bundle's report-to endpoint ID. The | ||||
| reason code on this bundle forwarding status report MUST be "no | ||||
| additional information".</t> | ||||
| <t>If any applicable bundle protocol extensions mandate generation | ||||
| of status reports upon conclusion of convergence-layer data sending | ||||
| procedures, all such status reports SHOULD be generated with | ||||
| extension-mandated reason codes.</t> | ||||
| <t>The bundle's "Forward pending" retention constraint MUST be | ||||
| removed.</t> | ||||
| </list> | ||||
| </t> | ||||
| <section title="Forwarding Contraindicated" anchor="sect-5.4.1"><t> | ||||
| The steps in responding to contraindication of forwarding are:</t> | ||||
| <t> | ||||
| Step 1: The bundle protocol agent MUST 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 | likely to be influenced by the reason for which forwarding is | |||
| contraindicated.</t> | contraindicated.</li> | |||
| <li> | ||||
| <t> | If forwarding failure is declared, then the Forwarding | |||
| Step 2: If forwarding failure is declared, then the Forwarding | Failed procedure defined in <xref target="sect-5.4.2" format="default" | |||
| Failed procedure defined in <xref target="sect-5.4.2"/> MUST be followed.</t> | /> <bcp14>MUST</bcp14> be followed.</li> | |||
| </ol> | ||||
| <t> | <t> | |||
| Otherwise, when - at some future time - the forwarding of this | Otherwise, when -- at some future time -- the forwarding of this | |||
| bundle ceases to be contraindicated, processing proceeds from Step 4 | bundle ceases to be contraindicated, processing proceeds from Step 4 | |||
| of <xref target="sect-5.4"/>.</t> | of <xref target="sect-5.4" format="default"/>.</t> | |||
| </section> | ||||
| <section title="Forwarding Failed" anchor="sect-5.4.2"><t> | ||||
| The steps in responding to a declaration of forwarding failure are:</t> | ||||
| <t> | </section> | |||
| Step 1: The bundle protocol agent MAY forward the bundle back to the | <section anchor="sect-5.4.2" numbered="true" toc="default"> | |||
| node that sent it, as identified by the Previous Node block, if | <name>Forwarding Failed</name> | |||
| present. This forwarding, if performed, SHALL be accomplished by | <t> | |||
| performing Step 4 and Step 5 of section 5.4 where the sole node | The steps in responding to a declaration of forwarding failure are as follows | |||
| selected for forwarding SHALL be the node that sent the bundle.</t> | :</t> | |||
| <t> | <ol type="Step %d:" indent="9"> | |||
| Step 2: If the bundle's destination endpoint is an endpoint of which | <li>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"/> where the sole node | ||||
| selected for forwarding <bcp14>SHALL</bcp14> be the node that sent the bundle | ||||
| .</li> | ||||
| <li> | ||||
| If the bundle's destination endpoint is an endpoint of which | ||||
| the node is a member, then the bundle's "Forward pending" retention | the node is a member, then the bundle's "Forward pending" retention | |||
| constraint MUST be removed. Otherwise, the bundle MUST be deleted: | constraint <bcp14>MUST</bcp14> be removed. Otherwise, the bundle <bcp14>MUST< | |||
| the bundle deletion procedure defined in <xref target="sect-5.10"/> MUST be | /bcp14> be deleted: | |||
| the Bundle Deletion procedure defined in <xref target="sect-5.10" format="def | ||||
| ault"/> <bcp14>MUST</bcp14> be | ||||
| followed, citing the reason for which forwarding was determined to | followed, citing the reason for which forwarding was determined to | |||
| be contraindicated.</t> | be contraindicated.</li> | |||
| </ol> | ||||
| </section> | </section> | |||
| </section> | ||||
| </section> | <section anchor="sect-5.5" numbered="true" toc="default"> | |||
| <name>Bundle Expiration</name> | ||||
| <section title="Bundle Expiration" anchor="sect-5.5"><t> | <t> | |||
| A bundle expires when the bundle's age exceeds its lifetime as | A bundle expires when the bundle's age exceeds its lifetime as | |||
| specified in the primary bundle block or as overridden by the bundle | specified in the primary bundle block or as overridden by the BPA. Bundle age | |||
| protocol agent. Bundle age MAY be determined by subtracting the | <bcp14>MAY</bcp14> be determined by subtracting the | |||
| bundle's creation timestamp time from the current time if (a) that | 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 | timestamp time is not zero and (b) the local node's clock is known | |||
| to be accurate; otherwise bundle age MUST be obtained from the | to be accurate; otherwise, bundle age <bcp14>MUST</bcp14> be obtained from th | |||
| Bundle Age extension block. Bundle expiration MAY occur at any | e | |||
| Bundle Age extension block. Bundle expiration <bcp14>MAY</bcp14> occur at an | ||||
| y | ||||
| point in the processing of a bundle. When a bundle expires, the | point in the processing of a bundle. When a bundle expires, the | |||
| bundle protocol agent MUST delete the bundle for the reason | BPA <bcp14>MUST</bcp14> delete the bundle for the reason | |||
| "lifetime expired" (when the expired lifetime is the lifetime as | "Lifetime expired" (when the expired lifetime is the lifetime as | |||
| specified in the primary block) or "traffic pared" (when the expired | specified in the primary block) or "Traffic pared" (when the expired | |||
| lifetime is a lifetime override as imposed by the bundle protocol | lifetime is a lifetime override as imposed by the BPA): the Bundle Deletion p | |||
| agent): the bundle deletion procedure defined in <xref target="sect-5.10"/> M | rocedure defined in <xref target="sect-5.10" format="default"/> <bcp14>MUST</bcp | |||
| UST | 14> | |||
| be followed.</t> | be followed.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-5.6" numbered="true" toc="default"> | |||
| <name>Bundle Reception</name> | ||||
| <section title="Bundle Reception" anchor="sect-5.6"><t> | <t> | |||
| The steps in processing a bundle that has been received from another | The steps in processing a bundle that has been received from another | |||
| node are:</t> | node are as follows:</t> | |||
| <ol type="Step %d:" indent="9"> | ||||
| <t> | <li>The retention constraint "Dispatch pending" <bcp14>MUST</bcp14> be added | |||
| Step 1: The retention constraint "Dispatch pending" MUST be added to | to | |||
| the bundle.</t> | the bundle.</li> | |||
| <li> | ||||
| <t> | If the "request reporting of bundle reception" flag in the | |||
| Step 2: If the "request reporting of bundle reception" flag in the | bundle's status report request field is set to 1 and status | |||
| bundle's status report request field is set to 1, and status | ||||
| reporting is enabled, then a bundle reception status report with | reporting is enabled, then a bundle reception status report with | |||
| reason code "No additional information" SHOULD be generated, | reason code "No additional information" <bcp14>SHOULD</bcp14> be generated, | |||
| destined for the bundle's report-to endpoint ID.</t> | destined for the bundle's report-to endpoint ID.</li> | |||
| <li> | ||||
| <t> | CRCs <bcp14>SHOULD</bcp14> be computed for every block of the bundle that | |||
| Step 3: CRCs SHOULD be computed for every block of the bundle that | ||||
| has an attached CRC. If any block of the bundle is malformed | has an attached CRC. If any block of the bundle is malformed | |||
| according to this specification (including syntactically invalid | according to this specification (including syntactically invalid | |||
| CBOR), or if any block has an attached CRC and the CRC computed for | 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 | this block upon reception differs from that attached CRC, then the | |||
| bundle protocol agent MUST delete the bundle for the reason "Block unintellig | BPA <bcp14>MUST</bcp14> delete the bundle for the reason "Block unintelligibl | |||
| ible". The bundle deletion procedure defined in <xref target="sect-5.10"/> MUST | e". The Bundle Deletion procedure defined in <xref target="sect-5.10" format="d | |||
| be followed and all remaining steps of the bundle | efault"/> <bcp14>MUST</bcp14> be followed, and all remaining steps of the Bundle | |||
| reception procedure MUST be skipped.</t> | Reception procedure <bcp14>MUST</bcp14> be skipped.</li> | |||
| <li> | ||||
| <t> | <t>For each block in the bundle that is an extension block that | |||
| Step 4: For each block in the bundle that is an extension block that | the BPA cannot process:</t> | |||
| the bundle protocol agent cannot process: | ||||
| <list style="symbols"> | ||||
| <t>If the block processing flags in that block indicate that a | ||||
| status report is requested in this event, and status reporting is | ||||
| enabled, then a bundle reception status report with reason code | ||||
| "Block unsupported" SHOULD be generated, destined for the bundle's | ||||
| report-to endpoint ID.</t> | ||||
| <t>If the block processing flags in that block indicate that the | ||||
| bundle must be deleted in this event, then the bundle protocol agent | ||||
| MUST delete the bundle for the reason "Block unsupported"; the | ||||
| bundle deletion procedure defined in <xref target="sect-5.10"/> MUST | ||||
| be followed and all remaining steps of the bundle reception | ||||
| procedure MUST be skipped.</t> | ||||
| <t>If the block processing flags in that block do NOT indicate that | ||||
| the bundle must be deleted in this event but do indicate that the | ||||
| block must be discarded, then the bundle protocol agent MUST remove | ||||
| this block from the bundle.</t> | ||||
| <t>If the block processing flags in that block indicate neither that | ||||
| the bundle must be deleted nor that that the block must be | ||||
| discarded, then processing continues with the next extension block | ||||
| that the bundle protocol agent cannot process, if any; otherwise, | ||||
| processing proceeds from step 5.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | <ul spacing="normal"> | |||
| Step 5: Processing proceeds from Step 1 of <xref target="sect-5.3"/>.</t> | <li>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 t | ||||
| he bundle's | ||||
| report-to endpoint ID.</li> | ||||
| <li>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 unsupporte | ||||
| d"; the | ||||
| Bundle Deletion procedure defined in <xref target="sect-5.10" format=" | ||||
| default"/> <bcp14>MUST</bcp14> | ||||
| be followed, and all remaining steps of the Bundle Reception | ||||
| procedure <bcp14>MUST</bcp14> be skipped.</li> | ||||
| <li>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>If the block processing control flags in that block neither indica | ||||
| te 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> | ||||
| </section> | <li> | |||
| Processing proceeds from Step 1 of <xref target="sect-5.3" format="defau | ||||
| lt"/>.</li> | ||||
| </ol> | ||||
| <section title="Local Bundle Delivery" anchor="sect-5.7"><t> | </section> | |||
| <section anchor="sect-5.7" numbered="true" toc="default"> | ||||
| <name>Local Bundle Delivery</name> | ||||
| <t> | ||||
| The steps in processing a bundle that is destined for an endpoint of | The steps in processing a bundle that is destined for an endpoint of | |||
| which this node is a member are:</t> | which this node is a member are as follows:</t> | |||
| <ol type="Step %d:" indent="9"> | ||||
| <t> | <li> | |||
| Step 1: If the received bundle is a fragment, the application data | If the received bundle is a fragment, the ADU Reassembly procedure described | |||
| unit reassembly procedure described in <xref target="sect-5.9"/> MUST be foll | in <xref target="sect-5.9" format="default"/> <bcp14>MUST</bcp14> be followed. | |||
| owed. | ||||
| If this procedure results in reassembly of the entire original | If this procedure results in reassembly of the entire original | |||
| application data unit, processing of the fragmentary bundle whose | ADU, processing of the fragmentary bundle whose | |||
| payload has been replaced by the reassembled application data unit | payload has been replaced by the reassembled ADU | |||
| (whether this bundle or a previously received fragment) proceeds | (whether this bundle or a previously received fragment) proceeds | |||
| from Step 2; otherwise, the retention constraint "Reassembly pending" MUST be | from Step 2; otherwise, the retention constraint "Reassembly pending" <bcp14> | |||
| added to the bundle and all remaining steps of this | MUST</bcp14> be added to the bundle, and all remaining steps of this | |||
| procedure MUST be skipped.</t> | procedure <bcp14>MUST</bcp14> be skipped.</li> | |||
| <li> | ||||
| <t> | <t>Delivery depends on the state of the registration whose | |||
| Step 2: Delivery depends on the state of the registration whose | endpoint ID matches that of the destination of the bundle:</t> | |||
| endpoint ID matches that of the destination of the bundle: | ||||
| <list style="symbols"> | ||||
| <t>An additional implementation-specific delivery deferral procedure | ||||
| MAY optionally be associated with the registration.</t> | ||||
| <t>If the registration is in the Active state, then the bundle MUST | ||||
| 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.</t> | ||||
| <t>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 MUST be taken. Delivery | ||||
| failure action MUST be one of the following: | ||||
| <list style="symbols"> | ||||
| <t>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 else the registration | ||||
| is in the Active state, and also perform any additional | ||||
| delivery deferral procedure associated with the registration; | ||||
| or</t> | ||||
| <t>abandon delivery of the bundle subject to this registration | ||||
| (as defined in 3.1. ).</t> | ||||
| </list> | ||||
| </t> | ||||
| </list> | <ul spacing="normal"> | |||
| </t> | <li>An additional implementation-specific delivery deferral procedure | |||
| <bcp14>MAY</bcp14> optionally be associated with the registration.</li | ||||
| > | ||||
| <li>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> | ||||
| <t>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. T | ||||
| he | ||||
| delivery failure action <bcp14>MUST</bcp14> be one of the following: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>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>Abandon delivery of the bundle subject to this registration | ||||
| (as defined in <xref target="sect-3.1"/>).</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <t> | <li> | |||
| Step 3: As soon as the bundle has been delivered, if the "request reporting o | As soon as the bundle has been delivered, if the "request reporting of bundle | |||
| f bundle delivery" flag in the bundle's status report | delivery" flag in the bundle's status report | |||
| request field is set to 1 and bundle status reporting is enabled, | request field is set to 1 and bundle status reporting is enabled, | |||
| then a bundle delivery status report SHOULD be generated, destined | then a bundle delivery status report <bcp14>SHOULD</bcp14> be generated, dest ined | |||
| for the bundle's report-to endpoint ID. Note that this status report | for the bundle's report-to endpoint ID. Note that this status report | |||
| only states that the payload has been delivered to the application | only states that the payload has been delivered to the application | |||
| agent, not that the application agent has processed that payload.</t> | agent, not that the application agent has processed that payload.</li> | |||
| </ol> | ||||
| </section> | ||||
| <section title="Bundle Fragmentation" anchor="sect-5.8"><t> | </section> | |||
| It may at times be advantageous for bundle protocol agents to reduce | <section anchor="sect-5.8" numbered="true" toc="default"> | |||
| <name>Bundle Fragmentation</name> | ||||
| <t> | ||||
| It may at times be advantageous for BPAs to reduce | ||||
| the sizes of bundles in order to forward them. This might be the | 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 | 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 | accessible only via intermittent contacts and no upcoming contact is | |||
| long enough to enable the forwarding of the entire bundle.</t> | long enough to enable the forwarding of the entire bundle.</t> | |||
| <t> | ||||
| <t> | ||||
| The size of a bundle can be reduced by "fragmenting" the bundle. To | 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 | 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 | two "fragments" -- new bundles with the same source node ID and | |||
| creation timestamp as the original bundle - whose payloads MUST be | creation timestamp as the original bundle -- whose payloads <bcp14>MUST</bcp1 | |||
| 4> be | ||||
| the first N and the last (M - N) bytes of the original bundle's | the first N and the last (M - N) bytes of the original bundle's | |||
| payload, where 0 < N < M.</t> | payload, where 0 < N < M.</t> | |||
| <t> | ||||
| <t> | ||||
| Note that fragments are bundles and therefore may themselves be | Note that fragments are bundles and therefore may themselves be | |||
| fragmented, so multiple episodes of fragmentation may in effect | fragmented, so multiple episodes of fragmentation may in effect | |||
| replace the original bundle with more than two fragments. (However, | replace the original bundle with more than two fragments. (However, | |||
| there is only one 'level' of fragmentation, as in IP fragmentation.)</t> | there is only one "level" of fragmentation, as in IP fragmentation.)</t> | |||
| <t> | ||||
| <t> | Any bundle whose primary block's bundle processing control flags do <strong>N | |||
| Any bundle whose primary block's bundle processing flags do NOT | OT</strong> | |||
| indicate that it must not be fragmented MAY be fragmented at any | indicate that it must not be fragmented <bcp14>MAY</bcp14> be fragmented at a | |||
| time, for any purpose, at the discretion of the bundle protocol | ny | |||
| agent. NOTE, however, that some combinations of bundle | 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 | fragmentation, replication, and routing might result in unexpected | |||
| traffic patterns.</t> | traffic patterns.</t> | |||
| <t> | ||||
| Fragmentation <bcp14>SHALL</bcp14> be constrained as follows: | ||||
| <t> | </t> | |||
| Fragmentation SHALL be constrained as follows: | <ul spacing="normal"> | |||
| <li>The concatenation of the payloads of all fragments produced by | ||||
| <list style="symbols"> | fragmentation <bcp14>MUST</bcp14> always be identical to the payload o | |||
| f the | ||||
| <t>The concatenation of the payloads of all fragments produced by | fragmented bundle (that is, the bundle that is being | |||
| fragmentation MUST always be identical to the payload of the | fragmented). Note that the payloads of fragments resulting from | |||
| fragmented bundle (that is, the bundle that is being | different fragmentation episodes, in different parts of the network, | |||
| fragmented). Note that the payloads of fragments resulting from | may be overlapping subsets of the fragmented bundle's payload.</li> | |||
| different fragmentation episodes, in different parts of the network, | <li>The primary block of each fragment <bcp14>MUST</bcp14> differ from | |||
| may be overlapping subsets of the fragmented bundle's payload.</t> | that of the | |||
| fragmented bundle, in that the bundle processing control flags of the | ||||
| <t>The primary block of each fragment MUST differ from that of the | fragment <bcp14>MUST</bcp14> indicate that the bundle is a fragment an | |||
| fragmented bundle, in that the bundle processing flags of the | d both | |||
| fragment MUST indicate that the bundle is a fragment and both | fragment offset and total application data unit length must be | |||
| fragment offset and total application data unit length must be | provided. Additionally, the CRC of the primary block of the | |||
| provided. Additionally, the CRC of the primary block of the | fragmented bundle, if any, <bcp14>MUST</bcp14> be replaced in each fra | |||
| fragmented bundle, if any, MUST be replaced in each fragment by a | gment by a | |||
| new CRC computed for the primary block of that fragment.</t> | new CRC computed for the primary block of that fragment.</li> | |||
| <li>The payload blocks of fragments will differ from that of the | ||||
| <t>The payload blocks of fragments will differ from that of the | fragmented bundle as noted above.</li> | |||
| fragmented bundle as noted above.</t> | <li>If the fragmented bundle is not a fragment or is the fragment | |||
| with offset zero, then all extension blocks of the fragmented bundle | ||||
| <t>If the fragmented bundle is not a fragment or is the fragment | <bcp14>MUST</bcp14> be replicated in the fragment whose offset is zero | |||
| with offset zero, then all extension blocks of the fragmented bundle | .</li> | |||
| MUST be replicated in the fragment whose offset is zero.</t> | <li>Each of the fragmented bundle's extension blocks whose "Block | |||
| must be replicated in every fragment" flag is set to 1 <bcp14>MUST</bc | ||||
| <t>Each of the fragmented bundle's extension blocks whose "Block | p14> be | |||
| must be replicated in every fragment" flag is set to 1 MUST be | replicated in every fragment. </li> | |||
| replicated in every fragment. </t> | <li>Beyond these rules, rules for the replication of extension blocks | |||
| in the fragments must be defined in the specifications for those | ||||
| <t>Beyond these rules, rules for the replication of extension blocks | extension block types.</li> | |||
| in the fragments must be defined in the specifications for those | </ul> | |||
| extension block types.</t> | </section> | |||
| <section anchor="sect-5.9" numbered="true" toc="default"> | ||||
| </list> | <name>Application Data Unit Reassembly</name> | |||
| </t> | <t> | |||
| Note that the Bundle Fragmentation procedure described in <xref target="sect- | ||||
| </section> | 5.8"/> | |||
| <section title="Application Data Unit Reassembly" anchor="sect-5.9"><t> | ||||
| Note that the bundle fragmentation procedure described in 5.8 above | ||||
| may result in the replacement of a single original bundle with an | may result in the replacement of a single original bundle with an | |||
| arbitrarily large number of fragmentary bundles. In order to be | arbitrarily large number of fragmentary bundles. In order to be | |||
| delivered at a destination node, the original bundle's payload must | delivered at a destination node, the original bundle's payload must | |||
| be reassembled from the payloads of those fragments.</t> | be reassembled from the payloads of those fragments.</t> | |||
| <t> | ||||
| <t> | ||||
| The "material extents" of a received fragment's payload are all | The "material extents" of a received fragment's payload are all | |||
| continuous sequences of bytes in that payload that do not overlap | continuous sequences of bytes in that payload that do not overlap | |||
| with the material extents of the payloads of any previously received | with the material extents of the payloads of any previously received | |||
| fragments with the same source node ID and creation timestamp. If | fragments with the same source node ID and creation timestamp. If | |||
| the concatenation - as informed by fragment offsets and payload | the concatenation -- as informed by fragment offsets and payload | |||
| lengths - of the material extents of the payloads of this fragment | lengths -- of the material extents of the payloads of this fragment | |||
| and all previously received fragments with the same source node ID | and all previously received fragments with the same source node ID | |||
| and creation timestamp as this fragment forms a continuous byte | and creation timestamp as this fragment forms a continuous byte | |||
| array whose length is equal to the total application data unit | array whose length is equal to the total application data unit | |||
| length noted in the fragment's primary block, then: | length noted in the fragment's primary block, then: | |||
| <list style="symbols"> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>This byte array -- the reassembled application data unit -- | <li>This byte array -- the reassembled ADU -- | |||
| MUST replace the payload of that fragment whose material extents | <bcp14>MUST</bcp14> replace the payload of that fragment whose materia | |||
| include the extent at offset zero. Note that this will enable | l extents | |||
| delivery of the reconstituted original bundle as described in Step 1 | include the extent at offset zero. Note that this will enable | |||
| of 5.7.</t> | delivery of the reconstituted original bundle as described in Step 1 | |||
| of <xref target="sect-5.7"/>.</li> | ||||
| <t>The "Reassembly pending" retention constraint MUST be removed | <li>The "Reassembly pending" retention constraint <bcp14>MUST</bcp14> | |||
| from every other fragment with the same source node ID and creation | be removed | |||
| timestamp as this fragment.</t> | from every other fragment with the same source node ID and creation | |||
| timestamp as this fragment.</li> | ||||
| </list> | </ul> | |||
| </t> | <t> | |||
| Note: Reassembly of ADUs from fragments occurs at | ||||
| <t> | ||||
| Note: reassembly of application data units from fragments occurs at | ||||
| the nodes that are members of destination endpoints as necessary; an | the nodes that are members of destination endpoints as necessary; an | |||
| application data unit MAY also be reassembled at some other node on | ADU <bcp14>MAY</bcp14> also be reassembled at some other node on | |||
| the path to the destination.</t> | the path to the destination.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-5.10" numbered="true" toc="default"> | |||
| <name>Bundle Deletion</name> | ||||
| <section title="Bundle Deletion" anchor="sect-5.10"><t> | <t> | |||
| The steps in deleting a bundle are:</t> | The steps in deleting a bundle are as follows:</t> | |||
| <ol type="Step %d:" indent="9"> | ||||
| <t> | <li> | |||
| Step 1: If the "request reporting of bundle deletion" flag in the | If the "request reporting of bundle deletion" flag in the | |||
| bundle's status report request field is set to 1, and if status | bundle's status report request field is set to 1 and if status | |||
| reporting is enabled, then a bundle deletion status report citing | reporting is enabled, then a bundle deletion status report citing | |||
| the reason for deletion SHOULD be generated, destined for the | the reason for deletion <bcp14>SHOULD</bcp14> be generated, destined for the | |||
| bundle's report-to endpoint ID.</t> | bundle's report-to endpoint ID.</li> | |||
| <li> | ||||
| <t> | All of the bundle's retention constraints <bcp14>MUST</bcp14> be removed | |||
| Step 2: All of the bundle's retention constraints MUST be removed.</t> | .</li> | |||
| </ol> | ||||
| </section> | </section> | |||
| <section anchor="sect-5.11" numbered="true" toc="default"> | ||||
| <section title="Discarding a Bundle" anchor="sect-5.11"><t> | <name>Discarding a Bundle</name> | |||
| As soon as a bundle has no remaining retention constraints it MAY be | <t> | |||
| As soon as a bundle has no remaining retention constraints, it <bcp14>MAY</bc | ||||
| p14> be | ||||
| discarded, thereby releasing any persistent storage that may have | discarded, thereby releasing any persistent storage that may have | |||
| been allocated to it.</t> | been allocated to it.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-5.12" numbered="true" toc="default"> | |||
| <name>Canceling a Transmission</name> | ||||
| <section title="Canceling a Transmission" anchor="sect-5.12"><t> | <t> | |||
| When requested to cancel a specified transmission, where the bundle | When requested to cancel a specified transmission, where the bundle | |||
| created upon initiation of the indicated transmission has not yet | created upon initiation of the indicated transmission has not yet | |||
| been discarded, the bundle protocol agent MUST delete that bundle | been discarded, the BPA <bcp14>MUST</bcp14> delete that bundle | |||
| for the reason "transmission cancelled". For this purpose, the | for the reason "Transmission canceled". For this purpose, the | |||
| procedure defined in <xref target="sect-5.10"/> MUST be followed.</t> | procedure defined in <xref target="sect-5.10" format="default"/> <bcp14>MUST< | |||
| /bcp14> be followed.</t> | ||||
| </section> | </section> | |||
| </section> | ||||
| </section> | <section anchor="sect-6" numbered="true" toc="default"> | |||
| <name>Administrative Record Processing</name> | ||||
| <section title="Administrative Record Processing" anchor="sect-6"><sectio | <section anchor="sect-6.1" numbered="true" toc="default"> | |||
| n title="Administrative Records" anchor="sect-6.1"><t> | <name>Administrative Records</name> | |||
| Administrative records are standard application data units that are | <t> | |||
| used in providing some of the features of the Bundle Protocol. One | Administrative records are standard ADUs that are | |||
| type of administrative record has been defined to date: bundle | used in providing some of the features of the Bundle Protocol. | |||
| status reports. Note that additional types of administrative | Bundle Protocol administrative record types are registered in the | |||
| IANA "Bundle Administrative Record Types" registry <xref target="RFC5050"/>; | ||||
| of these, only administrative record type 1, "Bundle status report", is defin | ||||
| ed | ||||
| for BPv7 at this time. Note that additional types of administrative | ||||
| records may be defined by supplementary DTN protocol specification | records may be defined by supplementary DTN protocol specification | |||
| documents.</t> | documents.</t> | |||
| <t> | ||||
| <t> | ||||
| Every administrative record consists of: | Every administrative record consists of: | |||
| <list style="symbols"> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>Record type code (an unsigned integer for which valid values are | <li>A record type code (an unsigned integer for which valid values are | |||
| as defined below).</t> | as defined below).</li> | |||
| <li>Record content in type-specific format.</li> | ||||
| <t>Record content in type-specific format.</t> | </ul> | |||
| <t> | ||||
| </list> | Each BP administrative record <bcp14>SHALL</bcp14> be represented as a CBOR a | |||
| </t> | rray | |||
| <t> | ||||
| Valid administrative record type codes are defined as follows:</t> | ||||
| <figure title="Administrative Record Type Codes" anchor="fig-3"> | ||||
| <artwork><![CDATA[ | ||||
| +---------+--------------------------------------------+ | ||||
| | Value | Meaning | | ||||
| +=========+============================================+ | ||||
| | 1 | Bundle status report. | | ||||
| +---------+--------------------------------------------+ | ||||
| | (other) | Reserved for future use. | | ||||
| +---------+--------------------------------------------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t> | ||||
| Each BP administrative record SHALL be represented as a CBOR array | ||||
| comprising two items.</t> | comprising two items.</t> | |||
| <t> | ||||
| <t> | The first item of the array <bcp14>SHALL</bcp14> be a record type code, which | |||
| The first item of the array SHALL be a record type code, which SHALL | <bcp14>SHALL</bcp14> | |||
| be represented as a CBOR unsigned integer.</t> | be represented as a CBOR unsigned integer.</t> | |||
| <t> | ||||
| <t> | The second element of this array <bcp14>SHALL</bcp14> be the applicable CBOR | |||
| The second element of this array SHALL be the applicable CBOR | encoding of the content of the record. Details of the CBOR | |||
| representation of the content of the record. Details of the CBOR | encoding of administrative record type 1 are provided below. | |||
| representation of administrative record type 1 are provided below. | Details of the CBOR encoding of other types of administrative | |||
| Details of the CBOR representation of other types of administrative | records are included in the specifications defining those | |||
| record type are included in the specifications defining those | ||||
| records.</t> | records.</t> | |||
| <section anchor="sect-6.1.1" numbered="true" toc="default"> | ||||
| <section title="Bundle Status Reports" anchor="sect-6.1.1"><t> | <name>Bundle Status Reports</name> | |||
| <t> | ||||
| The transmission of "bundle status reports" under specified | The transmission of "bundle status reports" under specified | |||
| conditions is an option that can be invoked when transmission of a | conditions is an option that can be invoked when transmission of a | |||
| bundle is requested. These reports are intended to provide | bundle is requested. These reports are intended to provide | |||
| information about how bundles are progressing through the system, | information about how bundles are progressing through the system, | |||
| including notices of receipt, forwarding, final delivery, and | including notices of receipt, forwarding, final delivery, and | |||
| deletion. They are transmitted to the Report-to endpoints of | deletion. They are transmitted to the report-to endpoints of | |||
| bundles.</t> | bundles.</t> | |||
| <t> | ||||
| <t> | Each bundle status report <bcp14>SHALL</bcp14> be represented as a CBOR array | |||
| Each bundle status report SHALL be represented as a CBOR array. The | . The | |||
| number of elements in the array SHALL be either 6 (if the subject | number of elements in the array <bcp14>SHALL</bcp14> be either 6 (if the subj | |||
| ect | ||||
| bundle is a fragment) or 4 (otherwise).</t> | bundle is a fragment) or 4 (otherwise).</t> | |||
| <t> | ||||
| <t> | The first element of the bundle status report <bcp14>SHALL</bcp14> be bundle | |||
| The first item of the bundle status report array SHALL be bundle | status information represented as a CBOR array of at least four | |||
| status information represented as a CBOR array of at least 4 | elements. The first four elements of the bundle status information | |||
| elements. The first four items of the bundle status information | shall provide information on the following four status | |||
| array shall provide information on the following four status | ||||
| assertions, in this order: | assertions, in this order: | |||
| <list style="symbols"> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>Reporting node received bundle.</t> | <li>Reporting node received bundle.</li> | |||
| <li>Reporting node forwarded the bundle.</li> | ||||
| <t>Reporting node forwarded the bundle.</t> | <li>Reporting node delivered the bundle.</li> | |||
| <li>Reporting node deleted the bundle.</li> | ||||
| <t>Reporting node delivered the bundle.</t> | </ul> | |||
| <t> | ||||
| <t>Reporting node deleted the bundle.</t> | Each element of the bundle status information <bcp14>SHALL</bcp14> be a bundl | |||
| e | ||||
| </list> | status item encoded as a CBOR array.</t> | |||
| </t> | <t>The number of elements in | |||
| each bundle status item <bcp14>SHALL</bcp14> be either 2 (if the value of the | ||||
| <t> | first element of | |||
| Each item of the bundle status information array SHALL be a bundle | the bundle status item is 1 AND the "Report status time" flag was | |||
| status item represented as a CBOR array; the number of elements in | set to 1 in the bundle processing control flags of the bundle whose status | |||
| each such array SHALL be either 2 (if the value of the first item of | is being reported) or 1 (otherwise).</t> | |||
| this bundle status item is 1 AND the "Report status time" flag was | <t>The first element of each bundle status item <bcp14>SHALL</bcp14> | |||
| set to 1 in the bundle processing flags of the bundle whose status | be a status indicator, a Boolean value indicating whether or not the | |||
| is being reported) or 1 (otherwise). The first item of the bundle | corresponding bundle status is asserted, encoded as a CBOR Boolean value. | |||
| status item array SHALL be a status indicator, a Boolean value | If present, the second element of each bundle status item | |||
| indicating whether or not the corresponding bundle status is | <bcp14>SHALL</bcp14> indicate the time (as reported by the local system clock | |||
| asserted, represented as a CBOR Boolean value. The second item of | ; | |||
| the bundle status item array, if present, SHALL indicate the time | this is an implementation matter) at which the indicated status was asserted | |||
| (as reported by the local system clock, an implementation matter) at | for | |||
| which the indicated status was asserted for this bundle, represented | this bundle, represented as a DTN time as described in <xref target="sect-4.2 | |||
| as a DTN time as described in <xref target="sect-4.2.6"/>. above.</t> | .6" format="default"/>.</t> | |||
| <t> | ||||
| <t> | The second element of the bundle status report <bcp14>SHALL</bcp14> be the | |||
| The second item of the bundle status report array SHALL be the | ||||
| bundle status report reason code explaining the value of the status | bundle status report reason code explaining the value of the status | |||
| indicator, represented as a CBOR unsigned integer. Valid status | indicator, represented as a CBOR unsigned integer. Valid status | |||
| report reason codes are registered in the IANA Bundle Status Report | report reason codes are registered in the IANA "Bundle Status Report | |||
| Reason Codes registry in the Bundle Protocol Namespace (see 10.5 | Reason Codes" subregistry in the "Bundle Protocol" registry (see <xref target | |||
| below). The initial contents of that registry are listed in Figure | ="sect-9.5"/>). The initial contents of that registry are listed in <xref targe | |||
| 4 below but the list of status report reason codes provided here is | t="tab-1"/>, but the list of status report reason codes provided here is | |||
| neither exhaustive nor exclusive; supplementary DTN protocol | neither exhaustive nor exclusive; supplementary DTN protocol | |||
| specifications (including, but not restricted to, the Bundle | specifications (including, but not restricted to, Bundle Protocol | |||
| Security Protocol <xref target="I-D.ietf-dtn-bpsec"/>) may define additional | Security <xref target="RFC9172" format="default"/>) may define additional rea | |||
| reason codes.</t> | son codes.</t> | |||
| <table anchor="tab-1" align="left"> | ||||
| <figure title="Status Report Reason Codes" anchor="fig-4"><artwork><![CDATA[ | <name>Status Report Reason Codes</name> | |||
| <thead> | ||||
| +---------+--------------------------------------------+ | <tr> | |||
| <th>Value</th> | ||||
| | Value | Meaning | | <th>Meaning</th> | |||
| </tr> | ||||
| +=========+============================================+ | </thead> | |||
| <tbody> | ||||
| | 0 | No additional information. | | <tr> | |||
| <td>0</td> | ||||
| +---------+--------------------------------------------+ | <td>No additional information.</td> | |||
| </tr> | ||||
| | 1 | Lifetime expired. | | <tr> | |||
| <td>1</td> | ||||
| +---------+--------------------------------------------+ | <td>Lifetime expired.</td> | |||
| </tr> | ||||
| | 2 | Forwarded over unidirectional link. | | <tr> | |||
| <td>2</td> | ||||
| +---------+--------------------------------------------+ | <td>Forwarded over unidirectional link.</td> | |||
| </tr> | ||||
| | 3 | Transmission canceled. | | <tr> | |||
| <td>3</td> | ||||
| +---------+--------------------------------------------+ | <td>Transmission canceled.</td> | |||
| </tr> | ||||
| | 4 | Depleted storage. | | <tr> | |||
| <td>4</td> | ||||
| +---------+--------------------------------------------+ | <td>Depleted storage.</td> | |||
| </tr> | ||||
| | 5 | Destination endpoint ID unavailable. | | <tr> | |||
| <td>5</td> | ||||
| +---------+--------------------------------------------+ | <td>Destination endpoint ID unavailable.</td> | |||
| </tr> | ||||
| | 6 | No known route to destination from here. | | <tr> | |||
| <td>6</td> | ||||
| +---------+--------------------------------------------+ | <td>No known route to destination from here.</td> | |||
| </tr> | ||||
| | 7 | No timely contact with next node on route. | | <tr> | |||
| <td>7</td> | ||||
| +---------+--------------------------------------------+ | <td>No timely contact with next node on route.</td> | |||
| </tr> | ||||
| | 8 | Block unintelligible. | | <tr> | |||
| <td>8</td> | ||||
| +---------+--------------------------------------------+ | <td>Block unintelligible.</td> | |||
| </tr> | ||||
| | 9 | Hop limit exceeded. | | <tr> | |||
| <td>9</td> | ||||
| +---------+--------------------------------------------+ | <td>Hop limit exceeded.</td> | |||
| </tr> | ||||
| | 10 | Traffic pared (e.g., status reports). | | <tr> | |||
| <td>10</td> | ||||
| +---------+--------------------------------------------+ | <td>Traffic pared (e.g., status reports).</td> | |||
| </tr> | ||||
| | 11 | Block unsupported. | | <tr> | |||
| <td>11</td> | ||||
| +---------+--------------------------------------------+ | <td>Block unsupported.</td> | |||
| </tr> | ||||
| | (other) | Reserved for future use. | | <tr> | |||
| <td>17-254</td> | ||||
| <td>Unassigned</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>255</td> | ||||
| <td>Reserved</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| +---------+--------------------------------------------+ | <t> | |||
| ]]></artwork> | The third element of the bundle status report <bcp14>SHALL</bcp14> be the sou | |||
| </figure> | rce | |||
| <t> | ||||
| The third item of the bundle status report array SHALL be the source | ||||
| node ID identifying the source of the bundle whose status is being | 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"/>. above. | reported, represented as described in <xref target="sect-4.2.5.1.1" format="d | |||
| </t> | efault"/>.</t> | |||
| <t> | ||||
| <t> | The fourth element of the bundle status report <bcp14>SHALL</bcp14> be the | |||
| The fourth item of the bundle status report array SHALL be the | ||||
| creation timestamp of the bundle whose status is being reported, | creation timestamp of the bundle whose status is being reported, | |||
| represented as described in <xref target="sect-4.2.7"/>. above.</t> | represented as described in <xref target="sect-4.2.7" format="default"/>.</t> | |||
| <t> | ||||
| <t> | The fifth element of the bundle status report <bcp14>SHALL</bcp14> be present | |||
| The fifth item of the bundle status report array SHALL be present if | if | |||
| and only if the bundle whose status is being reported contained a | and only if the bundle whose status is being reported contained a | |||
| fragment offset. If present, it SHALL be the subject bundle's | fragment offset. If present, it <bcp14>SHALL</bcp14> be the subject bundle's | |||
| fragment offset represented as a CBOR unsigned integer item.</t> | fragment offset represented as a CBOR unsigned integer item.</t> | |||
| <t> | ||||
| <t> | The sixth element of the bundle status report <bcp14>SHALL</bcp14> be present | |||
| The sixth item of the bundle status report array SHALL be present if | if | |||
| and only if the bundle whose status is being reported contained a | and only if the bundle whose status is being reported contained a | |||
| fragment offset. If present, it SHALL be the length of the subject | fragment offset. If present, it <bcp14>SHALL</bcp14> be the length of the su bject | |||
| bundle's payload represented as a CBOR unsigned integer item.</t> | bundle's payload represented as a CBOR unsigned integer item.</t> | |||
| <t> | ||||
| <t> | ||||
| Note that the forwarding parameters (such as lifetime, applicable | Note that the forwarding parameters (such as lifetime, applicable | |||
| security measures, etc.) of the bundle whose status is being | security measures, etc.) of the bundle whose status is being | |||
| reported MAY be reflected in the parameters governing the forwarding | reported <bcp14>MAY</bcp14> be reflected in the parameters governing the forw arding | |||
| of the bundle that conveys a status report, but this is an | of the bundle that conveys a status report, but this is an | |||
| implementation matter. Bundle protocol deployment experience to | implementation matter. Bundle Protocol deployment experience to | |||
| date has not been sufficient to suggest any clear guidance on this | date has not been sufficient to suggest any clear guidance on this | |||
| topic.</t> | topic.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="sect-6.2" numbered="true" toc="default"> | ||||
| </section> | <name>Generation of Administrative Records</name> | |||
| <t> | ||||
| <section title="Generation of Administrative Records" anchor="sect-6.2">< | ||||
| t> | ||||
| Whenever the application agent's administrative element is directed | Whenever the application agent's administrative element is directed | |||
| by the bundle protocol agent to generate an administrative record, | by the BPA to generate an administrative record, | |||
| the following procedure must be followed:</t> | the following procedure must be followed:</t> | |||
| <ol type="Step %d:" indent="9"> | ||||
| <t> | <li> | |||
| Step 1: The administrative record must be constructed. If the | The administrative record must be constructed. If the | |||
| administrative record references a bundle and the referenced bundle | administrative record references a bundle and the referenced bundle | |||
| is a fragment, the administrative record MUST contain the fragment | is a fragment, the administrative record <bcp14>MUST</bcp14> contain the frag | |||
| offset and fragment length.</t> | ment | |||
| offset and fragment length.</li> | ||||
| <t> | <li> | |||
| Step 2: A request for transmission of a bundle whose payload is this | A request for transmission of a bundle whose payload is this | |||
| administrative record MUST be presented to the bundle protocol | administrative record <bcp14>MUST</bcp14> be presented to the BPA.</li> | |||
| agent.</t> | </ol> | |||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="sect-7" numbered="true" toc="default"> | ||||
| </section> | <name>Services Required of the Convergence Layer</name> | |||
| <section anchor="sect-7.1" numbered="true" toc="default"> | ||||
| <section title="Services Required of the Convergence Layer" anchor="sect- | <name>The Convergence Layer</name> | |||
| 7"><section title="The Convergence Layer" anchor="sect-7.1"><t> | <t> | |||
| The successful operation of the end-to-end bundle protocol depends | The successful operation of the end-to-end Bundle Protocol depends | |||
| on the operation of underlying protocols at what is termed the | on the operation of underlying protocols at what is termed the | |||
| "convergence layer"; these protocols accomplish communication | "convergence layer"; these protocols accomplish communication | |||
| between nodes. A wide variety of protocols may serve this purpose, | between nodes. A wide variety of protocols may serve this purpose, | |||
| so long as each convergence layer protocol adapter provides a | so long as each CLA provides a | |||
| defined minimal set of services to the bundle protocol agent. This | defined minimal set of services to the BPA. This | |||
| convergence layer service specification enumerates those services.</t> | convergence-layer service specification enumerates those services.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-7.2" numbered="true" toc="default"> | |||
| <name>Summary of Convergence-Layer Services</name> | ||||
| <section title="Summary of Convergence Layer Services" anchor="sect-7.2"> | <t> | |||
| <t> | Each CLA is expected to provide the | |||
| Each convergence layer protocol adapter is expected to provide the | following services to the BPA: | |||
| following services to the bundle protocol agent: | ||||
| <list style="symbols"> | ||||
| <t>sending a bundle to a bundle node that is reachable via the | ||||
| convergence layer protocol;</t> | ||||
| <t>notifying the bundle protocol agent of the disposition of its | ||||
| data sending procedures with regard to a bundle, upon concluding | ||||
| those procedures;</t> | ||||
| <t>delivering to the bundle protocol agent a bundle that was sent by | ||||
| a bundle node via the convergence layer protocol.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | </t> | |||
| The convergence layer service interface specified here is neither | <ul spacing="normal"> | |||
| <li>sending a bundle to a bundle node that is reachable via the | ||||
| convergence-layer protocol.</li> | ||||
| <li>notifying the BPA of the disposition of its | ||||
| data-sending procedures with regard to a bundle, upon concluding | ||||
| those procedures.</li> | ||||
| <li>delivering to the BPA a bundle that was sent by | ||||
| a bundle node via the convergence-layer protocol.</li> | ||||
| </ul> | ||||
| <t> | ||||
| The convergence-layer service interface specified here is neither | ||||
| exhaustive nor exclusive. That is, supplementary DTN protocol | exhaustive nor exclusive. That is, supplementary DTN protocol | |||
| specifications (including, but not restricted to, the Bundle | specifications (including, but not restricted to, Bundle Protocol | |||
| Security Protocol <xref target="I-D.ietf-dtn-bpsec"/>) may expect convergence | Security <xref target="RFC9172" format="default"/>) may expect CLAs | |||
| layer adapters | ||||
| that serve BP implementations conforming to those protocols to | that serve BP implementations conforming to those protocols to | |||
| provide additional services such as reporting on the transmission | provide additional services such as reporting on the transmission | |||
| and/or reception progress of individual bundles (at completion | and/or reception progress of individual bundles (at completion | |||
| and/or incrementally), retransmitting data that were lost in | and/or incrementally), retransmitting data that were lost in | |||
| transit, discarding bundle-conveying data units that the convergence | transit, discarding bundle-conveying data units that the | |||
| layer protocol determines are corrupt or inauthentic, or reporting | convergence-layer protocol determines are corrupt or inauthentic, or reportin | |||
| g | ||||
| on the integrity and/or authenticity of delivered bundles.</t> | on the integrity and/or authenticity of delivered bundles.</t> | |||
| <t> | ||||
| <t> | In addition, the Bundle Protocol relies on the capabilities of protocols at t | |||
| In addition, bundle protocol relies on the capabilities of protocols at the | he | |||
| convergence layer to minimize congestion in the store-carry-forward overlay | convergence layer to minimize congestion in the store-carry-forward overlay | |||
| network. The potentially long round-trip times characterizing | network. The potentially long round-trip times characterizing | |||
| delay-tolerant networks are incompatible with end-to- end reactive | delay-tolerant networks are incompatible with end-to-end, reactive | |||
| congestion control mechanisms, so convergence-layer protocols MUST provide | congestion-control mechanisms, so convergence-layer protocols <bcp14>MUST</bc | |||
| p14> provide | ||||
| rate limiting or congestion control.</t> | rate limiting or congestion control.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="sect-8" numbered="true" toc="default"> | ||||
| </section> | <name>Security Considerations</name> | |||
| <t> | ||||
| <section title="Implementation Status" anchor="sect-8"><t> | The Bundle Protocol security architecture and the available security | |||
| [NOTE to the RFC Editor: please remove this section before publication, as we | services are specified in an accompanying document, the Bundle Protocol Secur | |||
| ll as the reference to RFC 7942.]</t> | ity | |||
| (BPSec) specification <xref target="RFC9172" format="default"/>. Whenever Bu | ||||
| <t> | ndle | |||
| This section records the status of known implementations of the | ||||
| protocol defined by this specification at the time of posting of | ||||
| this Internet-Draft, and is based on a proposal described in RFC | ||||
| 7942. The description of implementations in this section is | ||||
| intended to assist the IETF in its decision processes in progressing | ||||
| drafts to RFCs. Please note that the listing of any individual | ||||
| implementation here does not imply endorsement by the IETF. | ||||
| Furthermore, no effort has been spent to verify the information | ||||
| presented here that was supplied by IETF contributors. This is not | ||||
| intended as, and must not be construed to be, a catalog of available | ||||
| implementations or their features. Readers are advised to note that | ||||
| other implementations may exist.</t> | ||||
| <t> | ||||
| According to RFC 7942, "this will allow reviewers and working groups to assig | ||||
| n due consideration to documents that have the benefit of running code, which ma | ||||
| y serve as evidence of valuable experimentation and feedback that have made the | ||||
| implemented protocols more mature. It is up to the individual working groups to | ||||
| use this information as they see fit".</t> | ||||
| <t> | ||||
| At the time of this writing, there are six known implementations of | ||||
| the current document.</t> | ||||
| <t> | ||||
| The first known implementation is microPCN (<eref target="https://upcn.eu/"/> | ||||
| ). | ||||
| According to the developers:</t> | ||||
| <t> | ||||
| The Micro Planetary Communication Network (uPCN) is a free software project | ||||
| intended to offer an implementation of Delay-tolerant Networking protocols | ||||
| for POSIX operating systems (well, and for Linux) plus for the ARM Cortex | ||||
| STM32F4 microcontroller series. More precisely it currently provides an | ||||
| implementation of | ||||
| <list style="symbols"> | ||||
| <t>the Bundle Protocol (BP, RFC 5050),</t> | ||||
| <t>version 6 of the Bundle Protocol version 7 specification draft,</t> | ||||
| <t>the DTN IP Neighbor Discovery (IPND) protocol, and</t> | ||||
| <t>a routing approach optimized for message-ferry micro LEO | ||||
| satellites.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| uPCN is written in C and is built upon the real-time operating | ||||
| system FreeRTOS. The source code of uPCN is released under the | ||||
| "BSD 3-Clause License".</t> | ||||
| <t> | ||||
| The project depends on an execution environment offering link | ||||
| layer protocols such as AX.25. The source code uses the USB | ||||
| subsystem to interact with the environment.</t> | ||||
| <t> | ||||
| The second known implementation is PyDTN, developed by X-works, | ||||
| s.r.o (<eref target="https://x-works.sk/"/>). The final third of the impleme | ||||
| ntation | ||||
| was developed during the IETF 101 Hackathon. According to the | ||||
| developers, PyDTN implements bundle coding/decoding and neighbor | ||||
| discovery. PyDTN is written in Python and has been shown to be | ||||
| interoperable with uPCN.</t> | ||||
| <t> | ||||
| The third known implementation is "Terra" | ||||
| (<eref target="https://github.com/RightMesh/Terra/"/>), a Java implementation | ||||
| developed in the context of terrestrial DTN. It includes an | ||||
| implementation of a "minimal TCP" convergence layer adapter.</t> | ||||
| <t> | ||||
| The fourth and fifth known implementations are products of | ||||
| cooperating groups at two German universities: | ||||
| <list style="symbols"> | ||||
| <t>An implementation written in Go, licensed under GPLv3, is focused | ||||
| on being easily extensible suitable for research. It is maintained | ||||
| at the University of Marburg and can be accessed from <eref | ||||
| target="https://github.com/dtn7/dtn7-go."/> </t> | ||||
| <t>An implementation written in Rust, licensed under the MIT/Apache | ||||
| license, is intended for environments with limited resources or | ||||
| demanding safety and/or performance requirements. It is maintained | ||||
| at the Technical University of Darmstadt and can be accessed at | ||||
| <eref target="https://github.com/dtn7/dtn7-rs/."/> </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| The sixth known implementation is the "bpv7" module in version 4.0.0 | ||||
| of the Interplanetary Overlay Network (ION) software maintained at | ||||
| the Jet Propulsion Laboratory, California Institute of Technology, | ||||
| for the U.S. National Aeronautics and Space Administration (NASA).</t> | ||||
| </section> | ||||
| <section title="Security Considerations" anchor="sect-9"><t> | ||||
| The bundle protocol security architecture and the available security | ||||
| services are specified in an accompanying document, the Bundle | ||||
| Security Protocol (BPsec) specification <xref target="I-D.ietf-dtn-bpsec"/>. | ||||
| Whenever Bundle | ||||
| Protocol security services (as opposed to the security services | Protocol security services (as opposed to the security services | |||
| provided by overlying application protocols or underlying | provided by overlying application protocols or underlying | |||
| convergence-layer protocols) are required, those services SHALL be | convergence-layer protocols) are required, those services <bcp14>SHALL</bcp14 | |||
| provided by BPsec rather than by some other mechanism with the same | > be | |||
| provided by BPSec rather than by some other mechanism with the same | ||||
| or similar scope.</t> | or similar scope.</t> | |||
| <t> | ||||
| <t> | A Bundle Protocol Agent (BPA) that sources, cryptographically | |||
| A Bundle Protocol Agent (BPA) which sources, cryptographically | verifies, and/or accepts a bundle <bcp14>MUST</bcp14> implement support for B | |||
| verifies, and/or accepts a bundle MUST implement support for BPsec. | PSec. | |||
| Use of BPsec for a particular Bundle Protocol session is optional.</t> | Use of BPSec for any single bundle is optional.</t> | |||
| <t> | ||||
| <t> | The BPSec extensions to the Bundle Protocol enable each block of a | |||
| The BPsec extensions to Bundle Protocol enable each block of a | bundle (other than a BPSec extension block) to be individually | |||
| bundle (other than a BPsec extension block) to be individually | ||||
| authenticated by a signature block (Block Integrity Block, or BIB) | authenticated by a signature block (Block Integrity Block, or BIB) | |||
| and also enable each block of a bundle other than the primary block | and also enable each block of a bundle other than the primary block | |||
| (and the BPsec extension blocks themselves) to be individually | (and the BPSec extension blocks themselves) to be individually | |||
| encrypted by a Block Confidentiality Block (BCB).</t> | encrypted by a Block Confidentiality Block (BCB).</t> | |||
| <t> | ||||
| <t> | ||||
| Because the security mechanisms are extension blocks that are | Because the security mechanisms are extension blocks that are | |||
| themselves inserted into the bundle, the protections they afford | themselves inserted into the bundle, the protections they afford | |||
| apply while the bundle is at rest, awaiting transmission at the next | apply while the bundle is at rest, awaiting transmission at the next | |||
| forwarding opportunity, as well as in transit.</t> | forwarding opportunity, as well as in transit.</t> | |||
| <t> | ||||
| <t> | ||||
| Additionally, convergence-layer protocols that ensure authenticity | Additionally, convergence-layer protocols that ensure authenticity | |||
| of communication between adjacent nodes in BP network topology | of communication between adjacent nodes in a BP network topology | |||
| SHOULD be used where available, to minimize the ability of | <bcp14>SHOULD</bcp14> be used where available, to minimize the ability of | |||
| unauthenticated nodes to introduce inauthentic traffic into the | unauthenticated nodes to introduce inauthentic traffic into the | |||
| network. Convergence-layer protocols that ensure confidentiality of | network. Convergence-layer protocols that ensure confidentiality of | |||
| communication between adjacent nodes in BP network topology SHOULD | communication between adjacent nodes in a BP network topology <bcp14>SHOULD</ bcp14> | |||
| also be used where available, to minimize exposure of the bundle's | also be used where available, to minimize exposure of the bundle's | |||
| primary block and other clear-text blocks, thereby offering some | primary block and other cleartext blocks, thereby offering some | |||
| defense against traffic analysis.</t> | defense against traffic analysis.</t> | |||
| <t> | ||||
| <t> | ||||
| In order to provide authenticity and/or confidentiality of | In order to provide authenticity and/or confidentiality of | |||
| communication between BP nodes, the convergence-layer protocol | communication between BP nodes, the convergence-layer protocol | |||
| requires as input the name(s) of the expected communication peer(s). | requires as input the name or names of the expected communication peer(s). | |||
| These must be supplied by the convergence-layer adapter. Details of | These must be supplied by the CLA. Details of | |||
| the means by which the CLA determines which CL endpoint name(s) must | 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 | be provided to the CL protocol are out of scope for this | |||
| specification. Note, though, that when the CL endpoint names are a | specification. Note, though, that when the CL endpoint names are a | |||
| function of BP endpoint IDs, the correctness and authenticity of | function of BP endpoint IDs, the correctness and authenticity of | |||
| that mapping will be vital to the overall security properties that | that mapping will be vital to the overall security properties that | |||
| the CL provides to the system.</t> | the CL provides to the system.</t> | |||
| <t> | ||||
| <t> | ||||
| Note that, while the primary block must remain in the clear for | Note that, while the primary block must remain in the clear for | |||
| routing purposes, the Bundle Protocol could be protected against | routing purposes, the Bundle Protocol could be protected against | |||
| traffic analysis to some extent by using bundle-in-bundle | traffic analysis to some extent by using bundle-in-bundle | |||
| encapsulation <xref target="I-D.ietf-dtn-bibect"/> to tunnel bundles to a saf e forward | encapsulation <xref target="I-D.ietf-dtn-bibect" format="default"/> to tunnel bundles to a safe forward | |||
| distribution point: the encapsulated bundle could form the payload | distribution point: the encapsulated bundle could form the payload | |||
| of an encapsulating bundle, and that payload block could be | of an encapsulating bundle, and that payload block could be | |||
| encrypted by a BCB.</t> | encrypted by a BCB.</t> | |||
| <t> | ||||
| <t> | ||||
| Note that the generation of bundle status reports is disabled by | Note that the generation of bundle status reports is disabled by | |||
| default because malicious initiation of bundle status reporting | default because malicious initiation of bundle status reporting | |||
| could result in the transmission of extremely large numbers of | could result in the transmission of extremely large numbers of | |||
| bundles, effecting a denial of service attack. Imposing bundle | bundles, effecting a denial-of-service attack. Imposing bundle | |||
| lifetime overrides would constitute one defense against such an | lifetime overrides would constitute one defense against such an | |||
| attack.</t> | attack.</t> | |||
| <t> | ||||
| <t> | ||||
| Note also that the reception of large numbers of fragmentary bundles | Note also that the reception of large numbers of fragmentary bundles | |||
| with very long lifetimes could constitute a denial of service | with very long lifetimes could constitute a denial-of-service | |||
| attack, occupying storage while pending reassembly that will never | attack, occupying storage while pending reassembly that will never | |||
| occur. Imposing bundle lifetime overrides would, again, constitute | occur. Imposing bundle lifetime overrides would, again, constitute | |||
| one defense against such an attack.</t> | one defense against such an attack.</t> | |||
| <t> | ||||
| <t> | ||||
| This protocol makes use of absolute timestamps for several purposes. | This protocol makes use of absolute timestamps for several purposes. | |||
| Provisions are included for nodes without accurate clocks to retain | Provisions are included for nodes without accurate clocks to retain | |||
| most of the protocol functionality, but nodes that are unaware that | most of the protocol functionality, but nodes that are unaware that | |||
| their clock is inaccurate may exhibit unexpected behavior.</t> | their clock is inaccurate may exhibit unexpected behavior.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-9" numbered="true" toc="default"> | |||
| <name>IANA Considerations</name> | ||||
| <section title="IANA Considerations" anchor="sect-10"><t> | <t> | |||
| The Bundle Protocol includes fields requiring registries managed by | The Bundle Protocol includes fields requiring registries managed by | |||
| IANA.</t> | IANA.</t> | |||
| <section anchor="sect-9.1" numbered="true" toc="default"> | ||||
| <name>Bundle Block Types</name> | ||||
| <t> | ||||
| 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"/>, to the "Bundle Block Types" registr | ||||
| y | ||||
| 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"> | ||||
| <name>"Bundle Block Types" Registry</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th>Bundle Protocol Version</th> | ||||
| <th>Value</th> | ||||
| <th>Description</th> | ||||
| <th>Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>none</td> | ||||
| <td>0</td> | ||||
| <td>Reserved</td> | ||||
| <td><xref target="RFC6255"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <section title="Bundle Block Types" anchor="sect-10.1"><t> | <td>6,7</td> | |||
| The current Bundle Block Types registry in the Bundle Protocol | <td>1</td> | |||
| Namespace is augmented by adding a column identifying the version of | <td>Bundle Payload Block</td> | |||
| the Bundle protocol (Bundle Protocol Version) that applies to the | <td><xref target="RFC5050"/> [RFC9171]</td> | |||
| new values. IANA is requested to add the following values, as | </tr> | |||
| described in section 4.3.1, to the Bundle Block Types registry. The | <tr> | |||
| current values in the Bundle Block Types registry should have the | ||||
| Bundle Protocol Version set to the value "6", as shown below.</t> | ||||
| <figure><artwork><![CDATA[ | ||||
| +----------+-------+-----------------------------+---------------+ | ||||
| | Bundle | Value | Description | Reference | | ||||
| | Protocol | | | | | ||||
| | Version | | | | | ||||
| +----------+-------+-----------------------------+---------------+ | ||||
| | none | 0 | Reserved | [RFC6255] | | ||||
| | 6,7 | 1 | Bundle Payload Block | [RFC5050] | | ||||
| | | | | RFC-to-be | | ||||
| | 6 | 2 | Bundle Authentication Block | [RFC6257] | | ||||
| | 6 | 3 | Payload Integrity Block | [RFC6257] | | ||||
| | 6 | 4 | Payload Confidentiality | [RFC6257] | | ||||
| | | | Block | | | ||||
| | 6 | 5 | Previous-Hop Insertion Block| [RFC6259] | | ||||
| | 7 | 6 | Previous node (proximate | RFC-to-be | | ||||
| | | | sender) | | | ||||
| | 7 | 7 | Bundle age (in milliseconds)| RFC-to-be | | ||||
| | 6 | 8 | Metadata Extension Block | [RFC6258] | | ||||
| | 6 | 9 | Extension Security Block | [RFC6257] | | ||||
| | 7 | 10 | Hop count (#prior xmit | RFC-to-be | | ||||
| | | | attempts) | | | ||||
| | 7 | 11-191| Unassigned | | | ||||
| | 6,7 |192-255| Reserved for Private and/or | [RFC5050], | | ||||
| | | | Experimental Use | RFC-to-be | | ||||
| +----------+-------+-----------------------------+---------------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section title="Primary Bundle Protocol Version" anchor="sect-10.2"><t> | ||||
| IANA is requested to add the following value to the Primary Bundle | ||||
| Protocol Version registry in the Bundle Protocol Namespace.</t> | ||||
| <figure><artwork><![CDATA[ | ||||
| +-------+-------------+---------------+ | ||||
| | Value | Description | Reference | | ||||
| +-------+-------------+---------------+ | ||||
| | 7 | Assigned | RFC-to-be | | ||||
| +-------+-------------+---------------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t> Values 8-255 (rather than 7-255) are now Unassigned.</t> | ||||
| </section> | ||||
| <section title="Bundle Processing Control Flags" anchor="sect-10.3"><t> | ||||
| The current Bundle Processing Control Flags registry in the Bundle | ||||
| Protocol Namespace is augmented by adding a column identifying the | ||||
| version of the Bundle protocol (Bundle Protocol Version) that | ||||
| applies to the new values. IANA is requested to add the following | ||||
| values, as described in section 4.1.3, to the Bundle Processing | ||||
| Control Flags registry. The current values in the Bundle Processing | ||||
| Control Flags registry should have the Bundle Protocol Version set | ||||
| to the value 6 or "6, 7", as shown below.</t> | ||||
| <figure title="Bundle Processing Control Flags Registry"> | ||||
| <artwork><![CDATA[ | ||||
| +--------------------+----------------------------------+----------+ | ||||
| | Bundle | Bit | Description | Reference| | ||||
| | Protocol| Position | | | | ||||
| | Version | (right | | | | ||||
| | | to left) | | | | ||||
| +--------------------+----------------------------------+----------+ | ||||
| | 6,7 | 0 | Bundle is a fragment |[RFC5050],| | ||||
| | | | |RFC-to-be | | ||||
| | 6,7 | 1 | Application data unit is an |[RFC5050],| | ||||
| | | | administrative record |RFC-to-be | | ||||
| | 6,7 | 2 | Bundle must not be fragmented |[RFC5050],| | ||||
| | | | |RFC-to-be | | ||||
| | 6 | 3 | Custody transfer is requested |[RFC5050] | | ||||
| | 6 | 4 | Destination endpoint is singleton|[RFC5050] | | ||||
| | 6,7 | 5 | Acknowledgement by application |[RFC5050],| | ||||
| | | | is requested |RFC-to-be | | ||||
| | 7 | 6 | Status time requested in reports |RFC-to-be | | ||||
| | 6 | 7 | Class of service, priority |[RFC5050] | | ||||
| | 6 | 8 | Class of service, priority |[RFC5050] | | ||||
| | 6 | 9 | Class of service, reserved |[RFC5050] | | ||||
| | 6 | 10 | Class of service, reserved |[RFC5050] | | ||||
| | 6 | 11 | Class of service, reserved |[RFC5050] | | ||||
| | 6 | 12 | Class of service, reserved |[RFC5050] | | ||||
| | 6 | 13 | Class of service, reserved |[RFC5050] | | ||||
| | 6,7 | 14 | Request reporting of bundle |[RFC5050],| | ||||
| | | | reception |RFC-to-be | | ||||
| | 6 | 15 | Request reporting of custody |[RFC5050] | | ||||
| | | | acceptance | | | ||||
| | 6,7 | 16 | Request reporting of bundle |[RFC5050],| | ||||
| | | | forwarding |RFC-to-be | | ||||
| | 6,7 | 17 | Request reporting of bundle |[RFC5050],| | ||||
| | | | delivery |RFC-to-be | | ||||
| | 6,7 | 18 | Request reporting of bundle |[RFC5050],| | ||||
| | | | deletion |RFC-to-be | | ||||
| | 6,7 | 19 | Reserved |[RFC5050],| | ||||
| | | | |RFC-to-be | | ||||
| | 6,7 | 20 | Reserved |[RFC5050],| | ||||
| | | | |RFC-to-be | | ||||
| | | 21-63 | Unassigned | | | ||||
| +--------------------+----------------------------------+----------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section title="Block Processing Control Flags" anchor="sect-10.4"><t> | ||||
| The current Block Processing Control Flags registry in the Bundle | ||||
| Protocol Namespace is augmented by adding a column identifying the | ||||
| version of the Bundle protocol (Bundle Protocol Version) that | ||||
| applies to the related BP version. The current values in the Block | ||||
| Processing Control Flags registry should have the Bundle Protocol | ||||
| Version set to the value 6 or "6, 7", as shown below.</t> | ||||
| <figure title="Block Processing Control Flags Registry"> | ||||
| <artwork><![CDATA[ | ||||
| +--------------------+----------------------------------+----------+ | ||||
| | Bundle | Bit | Description | Reference| | ||||
| | Protocol| Position | | | | ||||
| | Version | (right | | | | ||||
| | | to left) | | | | ||||
| +--------------------+----------------------------------+----------+ | ||||
| | 6,7 | 0 | Block must be replicated in |[RFC5050],| | ||||
| | | | every fragment |RFC-to-be | | ||||
| | 6,7 | 1 | Transmit status report if block |[RFC5050],| | ||||
| | | | can't be processed |RFC-to-be | | ||||
| | 6,7 | 2 | Delete bundle if block can't be |[RFC5050],| | ||||
| | | | processed |RFC-to-be | | ||||
| | 6 | 3 | Last block |[RFC5050] | | ||||
| | 6,7 | 4 | Discard block if it can't be |[RFC5050],| | ||||
| | | | processed |RFC-to-be | | ||||
| | 6 | 5 | Block was forwarded without |[RFC5050] | | ||||
| | | | being processed | | | ||||
| | 6 | 6 | Block contains an EID reference |[RFC5050] | | ||||
| | | | field | | | ||||
| | | 7-63 | Unassigned | | | ||||
| +--------------------+----------------------------------+----------+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section title="Bundle Status Report Reason Codes" anchor="sect-10.5"><t> | ||||
| The current Bundle Status Report Reason Codes registry in the Bundle | ||||
| Protocol Namespace is augmented by adding a column identifying the | ||||
| version of the Bundle protocol (Bundle Protocol Version) that | ||||
| applies to the new values. IANA is requested to add the following | ||||
| values, as described in section 6.1.1, to the Bundle Status Report | ||||
| Reason Codes registry. The current values in the Bundle Status | ||||
| Report Reason Codes registry should have the Bundle Protocol Version | ||||
| set to the value 6 or 7 or "6, 7", as shown below.</t> | ||||
| <figure title="Bundle Status Report Reason Codes Registry"> | ||||
| <artwork><![CDATA[ | ||||
| +--------------------+----------------------------------+----------+ | <td>6</td> | |||
| <td>2</td> | ||||
| <td>Bundle Authentication Block</td> | ||||
| <td><xref target="RFC6257"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| | Bundle | Value | Description | Reference| | <td>6</td> | |||
| <td>3</td> | ||||
| <td>Payload Integrity Block</td> | ||||
| <td><xref target="RFC6257"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| | Protocol| | | | | <td>6</td><td>4</td> | |||
| <td>Payload Confidentiality Block</td> | ||||
| <td><xref target="RFC6257"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| | Version | | | | | <td>6</td> | |||
| <td>5</td> | ||||
| <td>Previous-Hop Insertion Block</td> | ||||
| <td><xref target="RFC6259"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| | | | | | | <td>7</td> | |||
| <td>6</td> | ||||
| <td>Previous node (proximate sender)</td> | ||||
| <td>[RFC9171]</td> | ||||
| </tr> | ||||
| <tr> | ||||
| +--------------------+----------------------------------+----------+ | <td>7</td> | |||
| <td>7</td> | ||||
| <td>Bundle age (in milliseconds)</td> | ||||
| <td>[RFC9171]</td> | ||||
| </tr> | ||||
| <tr> | ||||
| | 6,7 | 0 | No additional information |[RFC5050],| | <td>6</td> | |||
| <td>8</td> | ||||
| <td>Metadata Extension Block</td> | ||||
| <td><xref target="RFC6258"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| | | | |RFC-to-be | | <td>6</td> | |||
| <td>9</td> | ||||
| <td>Extension Security Block</td> | ||||
| <td><xref target="RFC6257"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| | 6,7 | 1 | Lifetime expired |[RFC5050],| | <td>7</td> | |||
| <td>10</td> | ||||
| <td>Hop count (#prior xmit attempts)</td> | ||||
| <td>[RFC9171]</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>7</td> | ||||
| <td>11-191</td> | ||||
| <td>Unassigned</td> | ||||
| <td></td> | ||||
| </tr> | ||||
| <tr> | ||||
| | | | |RFC-to-be | | <td>6,7</td> | |||
| <td>192-255</td> | ||||
| <td>Reserved for Private and/or Experimental Use</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr> | ||||
| | 6,7 | 2 | Forwarded over unidirectional |[RFC5050],| | </tbody> | |||
| </table> | ||||
| </section> | ||||
| <section anchor="sect-9.2" numbered="true" toc="default"> | ||||
| <name>Primary Bundle Protocol Version</name> | ||||
| <t> | ||||
| IANA has added the following value to the "Primary Bundle | ||||
| Protocol Version" subregistry in the "Bundle Protocol" registry.</t> | ||||
| <table align="left"> | ||||
| <name>"Primary Bundle Protocol Version" Registry</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th>Value</th> | ||||
| <th>Description</th> | ||||
| <th>Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>7</td> | ||||
| <td>Assigned</td> | ||||
| <td>[RFC9171]</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t> Values 8-255 (rather than 7-255) are now Unassigned.</t> | ||||
| </section> | ||||
| <section anchor="sect-9.3" numbered="true" toc="default"> | ||||
| <name>Bundle Processing Control Flags</name> | ||||
| <t> | ||||
| 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"/>, to the "Bundle Processin | ||||
| g | ||||
| 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 preexist | ||||
| ing values in the "Bundle Processing | ||||
| Control Flags" registry, as shown below.</t> | ||||
| <table align="left"> | ||||
| <name>"Bundle Processing Control Flags" Registry</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th>Bundle Protocol Version</th> | ||||
| <th>Bit Position (right to left)</th> | ||||
| <th>Description</th> | ||||
| <th>Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>6,7</td> | ||||
| <td>0</td> | ||||
| <td>Bundle is a fragment</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| <td>6,7</td> | ||||
| <td>1</td> | ||||
| <td>ADU is an administrative record</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| <td>6,7</td> | ||||
| <td>2</td> | ||||
| <td>Bundle must not be fragmented</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| <td>6</td> | ||||
| <td>3</td> | ||||
| <td>Custody transfer is requested</td> | ||||
| <td><xref target="RFC5050"/></td> | ||||
| </tr><tr> | ||||
| <td>6</td> | ||||
| <td>4</td> | ||||
| <td>Destination endpoint is a singleton</td> | ||||
| <td><xref target="RFC5050"/></td> | ||||
| </tr><tr> | ||||
| <td>6,7</td> | ||||
| <td>5</td> | ||||
| <td>Acknowledgement by application is requested</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| <td>7</td> | ||||
| <td>6</td> | ||||
| <td>Status time requested in reports</td> | ||||
| <td>[RFC9171]</td> | ||||
| </tr><tr> | ||||
| <td>6</td> | ||||
| <td>7-8</td> | ||||
| <td>Class of service: priority</td> | ||||
| <td><xref target="RFC5050"/></td> | ||||
| </tr><tr> | ||||
| <td>6</td> | ||||
| <td>9-13</td> | ||||
| <td>Class of service: reserved</td> | ||||
| <td><xref target="RFC5050"/></td> | ||||
| </tr><tr> | ||||
| <td>6,7</td> | ||||
| <td>14</td> | ||||
| <td>Request reporting of bundle reception</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| <td>6</td> | ||||
| <td>15</td> | ||||
| <td>Request reporting of custody acceptance</td> | ||||
| <td><xref target="RFC5050"/></td> | ||||
| </tr><tr> | ||||
| <td>6,7</td> | ||||
| <td>16</td> | ||||
| <td>Request reporting of bundle forwarding</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| <td>6,7</td> | ||||
| <td>17</td> | ||||
| <td>Request reporting of bundle delivery</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| <td>6,7</td> | ||||
| <td>18</td> | ||||
| <td>Request reporting of bundle deletion</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| <td>6,7</td> | ||||
| <td>19</td> | ||||
| <td>Reserved</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| <td>6,7</td> | ||||
| <td>20</td> | ||||
| <td>Reserved</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| <td></td> | ||||
| <td>21-63</td> | ||||
| <td>Unassigned</td> | ||||
| <td></td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | ||||
| <section anchor="sect-9.4" numbered="true" toc="default"> | ||||
| <name>Block Processing Control Flags</name> | ||||
| <t> | ||||
| 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 Proce | ||||
| ssing | ||||
| Control Flags" registry, as shown below.</t> | ||||
| | | | link |RFC-to-be | | <table align="left"> | |||
| <name>"Block Processing Control Flags" Registry</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th>Bundle Protocol Version</th> | ||||
| <th><t>Bit Position (right to left)</t></th> | ||||
| <th>Description</th> | ||||
| <th>Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| | 6,7 | 3 | Transmission canceled |[RFC5050],| | <td>6,7</td> | |||
| <td>0</td> | ||||
| <td>Block must be replicated in every fragment</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | | | |RFC-to-be | | <td>6,7</td> | |||
| <td>1</td> | ||||
| <td>Transmit status report if block can't be processed</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | 6,7 | 4 | Depleted storage |[RFC5050],| | <td>6,7</td> | |||
| <td>2</td> | ||||
| <td>Delete bundle if block can't be processed</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | | | |RFC-to-be | | <td>6</td> | |||
| <td>3</td> | ||||
| <td>Last block</td> | ||||
| <td><xref target="RFC5050"/></td> | ||||
| </tr><tr> | ||||
| | 6,7 | 5 | Destination endpoint ID |[RFC5050],| | <td>6,7</td> | |||
| <td>4</td> | ||||
| <td>Discard block if it can't be processed</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | | | unavailable |RFC-to-be | | <td>6</td> | |||
| <td>5</td> | ||||
| <td>Block was forwarded without being processed</td> | ||||
| <td><xref target="RFC5050"/></td> | ||||
| </tr><tr> | ||||
| | 6,7 | 6 | No known route to destination |[RFC5050],| | <td>6</td> | |||
| <td>6</td> | ||||
| <td>Block contains an EID-reference field</td> | ||||
| <td><xref target="RFC5050"/></td> | ||||
| </tr><tr> | ||||
| | | | from here |RFC-to-be | | <td></td> | |||
| <td>7-63</td> | ||||
| <td>Unassigned</td> | ||||
| <td></td> | ||||
| </tr> | ||||
| </tbody> | ||||
| | 6,7 | 7 | No timely contact with next node |[RFC5050],| | </table> | |||
| </section> | ||||
| <section anchor="sect-9.5" numbered="true" toc="default"> | ||||
| <name>Bundle Status Report Reason Codes</name> | ||||
| <t> | ||||
| 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"/>, to the "Bundle Status Re | ||||
| port | ||||
| 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"> | ||||
| <name>"Bundle Status Report Reason Codes" Registry</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th>Bundle Protocol Version</th> | ||||
| <th>Value</th> | ||||
| <th>Description</th> | ||||
| <th>Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>6,7</td> | ||||
| <td>0</td> | ||||
| <td>No additional information</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | | | on route |RFC-to-be | | <td>6,7</td> | |||
| <td>1</td> | ||||
| <td>Lifetime expired</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | 6,7 | 8 | Block unintelligible |[RFC5050],| | <td>6,7</td> | |||
| <td>2</td> | ||||
| <td>Forwarded over unidirectional link</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | | | |RFC-to-be | | <td>6,7</td> | |||
| <td>3</td> | ||||
| <td>Transmission canceled</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | 7 | 9 | Hop limit exceeded |RFC-to-be | | <td>6,7</td> | |||
| <td>4</td> | ||||
| <td>Depleted storage</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | 7 | 10 | Traffic pared |RFC-to-be | | <td>6,7</td> | |||
| <td>5</td> | ||||
| <td>Destination endpoint ID unavailable</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | 7 | 11 | Block unsupported |RFC-to-be | | <td>6,7</td> | |||
| <td>6</td> | ||||
| <td>No known route to destination from here</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | | 12-254 | Unassigned | | | <td>6,7</td> | |||
| <td>7</td> | ||||
| <td>No timely contact with next node on route</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | 6,7 | 255 | Reserved |[RFC6255],| | <td>6,7</td> | |||
| <td>8</td> | ||||
| <td>Block unintelligible</td> | ||||
| <td><xref target="RFC5050"/> [RFC9171]</td> | ||||
| </tr><tr> | ||||
| | | | |RFC-to-be | | <td>7</td> | |||
| <td>9</td> | ||||
| <td>Hop limit exceeded</td> | ||||
| <td>[RFC9171]</td> | ||||
| </tr><tr> | ||||
| +-------+-----------------------------------------------+----------+ | <td>7</td> | |||
| <td>10</td> | ||||
| <td>Traffic pared</td> | ||||
| <td>[RFC9171]</td> | ||||
| </tr><tr> | ||||
| ]]></artwork> | <td>7</td> | |||
| </figure> | <td>11</td> | |||
| </section> | <td>Block unsupported</td> | |||
| <td>[RFC9171]</td> | ||||
| </tr><tr> | ||||
| <section title="Bundle Protocol URI scheme types" anchor="sect-10.6"><t> | <td></td> | |||
| The Bundle Protocol has a URI scheme type field - an unsigned | <td>17-254</td> | |||
| integer of indefinite length - for which IANA is requested to create | <td>Unassigned</td> | |||
| and maintain a new "Bundle Protocol URI Scheme Type" registry in the | <td></td> | |||
| Bundle Protocol Namespace. The "Bundle Protocol URI Scheme Type" | </tr><tr> | |||
| registry governs an unsigned integer namespace. Initial values for | ||||
| the Bundle Protocol URI Scheme Type registry are given below.</t> | ||||
| <t> | <td>6,7</td> | |||
| The registration policy for this registry is: Standards Action. The | <td>255</td> | |||
| allocation should only be granted for a standards-track RFC approved | <td>Reserved</td> | |||
| <td><xref target="RFC6255"/> [RFC9171]</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | ||||
| <section anchor="sect-9.6" numbered="true" toc="default"> | ||||
| <name>Bundle Protocol URI Scheme Types</name> | ||||
| <t> | ||||
| 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 th | ||||
| e | ||||
| "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> | ||||
| The registration policy for this registry is Standards Action <xref target="R | ||||
| FC8126"/>. The | ||||
| allocation should only be granted for a Standards Track RFC approved | ||||
| by the IESG.</t> | by the IESG.</t> | |||
| <t> | ||||
| <t> | The range of values is provided as unsigned integers.</t> | |||
| The value range is: unsigned integer.</t> | <t> | |||
| <t> | ||||
| Each assignment consists of a URI scheme type name and its | Each assignment consists of a URI scheme type name and its | |||
| associated description, a reference to the document that defines the | associated description, a reference to the document that defines the | |||
| URI scheme, and a reference to the document that defines the use of | URI scheme, and a reference to the document that defines the use of | |||
| this URI scheme in BP endpoint IDs (including the CBOR | this URI scheme in BP endpoint IDs (including the CBOR | |||
| representation of those endpoint IDs in transmitted bundles).</t> | encoding of those endpoint IDs in transmitted bundles).</t> | |||
| <table align="left"> | ||||
| <figure title="Bundle Protocol URI Scheme Type Registry"> | <name>"Bundle Protocol URI Scheme Types" Registry</name> | |||
| <artwork><![CDATA[ | <thead> | |||
| <tr> | ||||
| +---------+-------------+----------------+------------------+ | <th>Value</th> | |||
| <th>Description</th> | ||||
| | | | BP Utilization | URI Definition | | <th>BP Utilization Reference</th> | |||
| <th>URI Definition Reference</th> | ||||
| | Value | Description | Reference | Reference | | </tr> | |||
| </thead> | ||||
| +---------+-------------+----------------+------------------+ | <tbody> | |||
| <tr> | ||||
| | 0 | Reserved | n/a | | | <td>0</td> | |||
| <td>Reserved</td> | ||||
| | 1 | dtn | RFC-to-be | RFC-to-be | | <td>n/a</td> | |||
| <td></td> | ||||
| | 2 | ipn | RFC-to-be | [RFC6260], | | </tr> | |||
| <tr> | ||||
| | | | | RFC-to-be | | <td>1</td> | |||
| <td>dtn</td> | ||||
| | 3-254 | Unassigned | n/a | | | <td>[RFC9171]</td> | |||
| <td>[RFC9171]</td> | ||||
| |255-65535| reserved | n/a | | | </tr> | |||
| <tr> | ||||
| | >65535 | open for | n/a | | | <td>2</td> | |||
| <td>ipn</td> | ||||
| | | private use | n/a | | | <td>[RFC9171]</td> | |||
| <td><xref target="RFC6260"/> [RFC9171]</td> | ||||
| +---------+-------------+----------------+------------------+ | </tr> | |||
| <tr> | ||||
| ]]></artwork> | <td>3-254</td> | |||
| </figure> | <td>Unassigned</td> | |||
| </section> | <td>n/a</td> | |||
| <td></td> | ||||
| <section title="URI scheme "dtn"" anchor="sect-10.7"><t> | </tr> | |||
| In the Uniform Resource Identifier (URI) Schemes (uri-schemes) | <tr> | |||
| registry, IANA is requested to update the registration of the URI | <td>255-65535</td> | |||
| <td>Reserved</td> | ||||
| <td>n/a</td> | ||||
| <td></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>>65535</td> | ||||
| <td>Reserved for Private Use</td> | ||||
| <td>n/a</td> | ||||
| <td></td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | ||||
| <section anchor="sect-9.7" numbered="true" toc="default"> | ||||
| <name>dtn URI Scheme</name> | ||||
| <t> | ||||
| 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> | scheme with the string "dtn" as the scheme name, as follows:</t> | |||
| <dl> | ||||
| <dt>URI scheme name:</dt> | ||||
| <dd>"dtn"</dd> | ||||
| <dt>Status:</dt> | ||||
| <dd>Permanent</dd> | ||||
| <dt>Applications and/or protocols that use this URI scheme name:</dt> | ||||
| <dd>The Delay-Tolerant Networking (DTN) Bundle Protocol (BP).</dd> | ||||
| <dt>Contact:</dt> | ||||
| <dd><t><contact fullname="Scott Burleigh"/> | ||||
| <sburleig.sb@gmail.com></t> | ||||
| </dd> | ||||
| <dt>Change controller:</dt> | ||||
| <dd>IETF (iesg@ietf.org)</dd> | ||||
| <dt>Reference:</dt> | ||||
| <dd>[RFC9171]</dd> | ||||
| </dl> | ||||
| <t> | </section> | |||
| URI scheme name: "dtn"</t> | <section anchor="sect-9.8" numbered="true" toc="default"> | |||
| <name>ipn URI Scheme</name> | ||||
| <t> | <t> | |||
| Status: permanent</t> | In the "Uniform Resource Identifier (URI) Schemes" (uri-schemes) | |||
| registry, IANA has updated the registration of the URI | ||||
| <t> | ||||
| Applications and/or protocols that use this URI scheme name: the | ||||
| Delay-Tolerant Networking (DTN) Bundle Protocol (BP).</t> | ||||
| <t>Contact: | ||||
| <list> | ||||
| <t>Scott Burleigh</t> | ||||
| <t>Jet Propulsion Laboratory,</t> | ||||
| <t>California Institute of Technology</t> | ||||
| <t>scott.c.burleigh@jpl.nasa.gov</t> | ||||
| <t>+1 (800) 393-3353</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>Change controller: | ||||
| <list> | ||||
| <t>IETF, iesg@ietf.org</t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| <section title="URI scheme "ipn"" anchor="sect-10.8"><t> | ||||
| In the Uniform Resource Identifier (URI) Schemes (uri-schemes) | ||||
| registry, IANA is requested to update the registration of the URI | ||||
| scheme with the string "ipn" as the scheme name, originally | scheme with the string "ipn" as the scheme name, originally | |||
| documented in RFC 6260 <xref target="RFC6260"/>, as follows.</t> | documented in RFC 6260 <xref target="RFC6260" format="default"/>, as follows. | |||
| </t> | ||||
| <t> | <dl> | |||
| URI scheme name: "ipn"</t> | <dt>URI scheme name:</dt> | |||
| <dd>"ipn"</dd> | ||||
| <t> | <dt>Status:</dt> | |||
| Status: permanent</t> | <dd>Permanent</dd> | |||
| <dt>Applications and/or protocols that use this URI scheme name:</dt> | ||||
| <t> | <dd>The Delay-Tolerant Networking (DTN) Bundle Protocol (BP).</dd> | |||
| Applications and/or protocols that use this URI scheme name: the | <dt>Contact:</dt> | |||
| Delay-Tolerant Networking (DTN) Bundle Protocol (BP).</t> | <dd><t><contact fullname="Scott Burleigh"/> | |||
| <sburleig.sb@gmail.com></t> | ||||
| <t>Contact: | </dd> | |||
| <dt>Change controller:</dt> | ||||
| <list> | <dd>IETF (iesg@ietf.org)</dd> | |||
| <t>Scott Burleigh</t> | <dt>Reference:</dt> | |||
| <dd>[RFC9171]</dd> | ||||
| <t>Jet Propulsion Laboratory,</t> | </dl> | |||
| </section> | ||||
| <t>California Institute of Technology</t> | </section> | |||
| </middle> | ||||
| <t>scott.c.burleigh@jpl.nasa.gov</t> | <back> | |||
| <t>+1 (800) 393-3353</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>Change controller: | ||||
| <list> | ||||
| <t>IETF, iesg@ietf.org</t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| </middle> | ||||
| <back> | ||||
| <references title="Normative References"> | ||||
| &I-D.ietf-dtn-bpsec; | ||||
| <!-- <reference><front> --> | ||||
| <!-- | ||||
| draft-ietf-dtn-bpbis-31-manual.txt(2665): Warning: Failed parsing a reference | ||||
| . | ||||
| Are all elements separated by commas (not periods, not just spaces)?: | ||||
| [CRC16] ITU-T Recommendation X.25, p. 9, section 2.2.7.4, | ||||
| International Telecommunications Union, October 1996. | ||||
| --> | ||||
| <!-- </front> --> | ||||
| <!-- </reference> --> | ||||
| &RFC2119; | ||||
| &RFC4960; | ||||
| &RFC5234; | ||||
| &RFC8174; | ||||
| &RFC8949; | ||||
| <!-- <reference><front> --> | ||||
| <!-- | ||||
| draft-ietf-dtn-bpbis-31-manual.txt(2683): Warning: Failed parsing a reference | ||||
| . | ||||
| Are all elements separated by commas (not periods, not just spaces)?: | ||||
| [SABR] "Schedule-Aware Bundle Routing", CCSDS Recommended Standard | ||||
| 734.3-B-1, Consultative Committee for Space Data Systems, July 2019. | ||||
| --> | ||||
| <!-- </front> --> | ||||
| <!-- </reference> --> | ||||
| &I-D.ietf-dtn-tcpclv4; | ||||
| <reference anchor="URI"><front> | ||||
| <title>Uniform Resource Identifier (URI): Generic Syntax</title> | ||||
| <author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee"> | ||||
| </author> | ||||
| <author initials="R." surname="Fielding" fullname="R. Fielding"> | ||||
| </author> | ||||
| <author initials="L." surname="Masinter" fullname="L. Masinter"> | ||||
| </author> | ||||
| <date month="January" year="2005"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="3986"/> | ||||
| <seriesInfo name="STD" value="66"/> | ||||
| </reference> | ||||
| <reference anchor="URIREG"><front> | ||||
| <title>Guidelines and Registration Procedures for URI Schemes</title> | ||||
| <author initials="D." surname="Thaler" fullname="D. Thaler"> | ||||
| </author> | ||||
| <author initials="T." surname="Hansen" fullname="T. Hansen"> | ||||
| </author> | ||||
| <author initials="T." surname="Hardie" fullname="T. Hardie"> | ||||
| </author> | ||||
| <date month="June" year="2015"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7595"/> | ||||
| <seriesInfo name="BCP" value="35"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references title="Informative References"> | ||||
| <!-- <reference><front> --> | ||||
| <!-- | ||||
| draft-ietf-dtn-bpbis-31-manual.txt(2700): Warning: Failed parsing a reference | ||||
| . | ||||
| Are all elements separated by commas (not periods, not just spaces)?: | ||||
| [ARCH] V. Cerf et al., "Delay-Tolerant Network Architecture", RFC | ||||
| 4838, April 2007. | ||||
| --> | ||||
| <!-- </front> --> | ||||
| <!-- </reference> --> | ||||
| &I-D.ietf-dtn-bibect; | ||||
| &RFC3987; | ||||
| &RFC5050; | ||||
| &RFC6255; | ||||
| &RFC6257; | ||||
| &RFC6258; | ||||
| &RFC6259; | ||||
| &RFC6260; | ||||
| &RFC7143; | ||||
| <!-- <reference><front> --> | ||||
| <!-- | ||||
| draft-ietf-dtn-bpbis-31-manual.txt(2731): Warning: Failed parsing a reference | ||||
| . | ||||
| Are all elements separated by commas (not periods, not just spaces)?: | ||||
| [SIGC] Fall, K., "A Delay-Tolerant Network Architecture for | ||||
| Challenged Internets", SIGCOMM 2003. | ||||
| --> | ||||
| <!-- </front> --> | ||||
| <!-- </reference> --> | ||||
| </references> | ||||
| <section title="Acknowledgments" anchor="sect-12"><t> | ||||
| 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: Dr. Vinton Cerf of Google, Scott Burleigh, | ||||
| Adrian Hooke, and Leigh Torgerson of the Jet Propulsion Laboratory, | ||||
| Michael Demmer of the University of California at Berkeley, Robert | ||||
| Durst, Keith Scott, and Susan Symington of The MITRE Corporation, | ||||
| Kevin Fall of Carnegie Mellon University, Stephen Farrell of Trinity | ||||
| College Dublin, Howard Weiss and Peter Lovell of SPARTA, Inc., and | ||||
| Manikantan Ramadas of Ohio University.</t> | ||||
| <t> | ||||
| This document was prepared using 2-Word-v2.0.template.dot.</t> | ||||
| </section> | ||||
| <section title="Significant Changes from RFC 5050" anchor="sect-13"><t> | ||||
| Points on which this draft significantly differs from RFC 5050 | ||||
| include the following: | ||||
| <list style="symbols"> | ||||
| <t>Clarify the difference between transmission and forwarding.</t> | ||||
| <t>Migrate custody transfer to the bundle-in-bundle encapsulation | ||||
| specification <xref target="I-D.ietf-dtn-bibect"/>.</t> | ||||
| <t>Introduce the concept of "node ID" as functionally distinct from | <displayreference target="RFC3986" to="URI"/> | |||
| endpoint ID, while having the same syntax.</t> | <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"/> | ||||
| <t>Restructure primary block, making it immutable. Add optional | <references> | |||
| CRC.</t> | <name>References</name> | |||
| <references> | ||||
| <name>Normative References</name> | ||||
| <t>Add optional CRCs to non-primary blocks.</t> | <!-- draft-ietf-dtn-bpsec ([BPSEC] per orig.; RFC 9172) --> | |||
| <reference anchor='RFC9172' target="https://www.rfc-editor.org/info/rfc9172"> | ||||
| <front> | ||||
| <title>Bundle Protocol Security (BPSec)</title> | ||||
| <author initials='E' surname='Birrane, III' fullname='Edward J. Birrane, I | ||||
| II'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='K' surname='McKeever' fullname='Kenneth McKeever'> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month='January' year='2022' /> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="9172"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC9172"/> | ||||
| </reference> | ||||
| <t>Add block ID number to canonical block format (to support | <reference anchor="CRC16" target="https://www.itu.int/rec/T-REC-X.25-199610-I/"> | |||
| BPsec).</t> | <front> | |||
| <title>X.25: Interface between Data Terminal Equipment (DTE) and Data Circuit | ||||
| -terminating Equipment (DCE) for terminals operating in the packet mode and conn | ||||
| ected to public data networks by dedicated circuit</title> | ||||
| <author> | ||||
| <organization>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> | ||||
| <t>Add definition of bundle age extension block.</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| FC.2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.4960.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5234.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8949.xml"/> | ||||
| <t>Add definition of previous node extension block.</t> | <reference anchor="SABR" target="https://public.ccsds.org/Pubs/734x3b1.pdf"> | |||
| <front> | ||||
| <title>Schedule-Aware Bundle Routing</title> | ||||
| <author> | ||||
| <organization>Consultative Committee for Space Data Systems</organizat | ||||
| ion> | ||||
| </author> | ||||
| <date month="July" year="2019"/> | ||||
| </front> | ||||
| <seriesInfo name="CCSDS Recommended Standard" value="734.3-B-1"/> | ||||
| </reference> | ||||
| <t>Add definition of hop count extension block.</t> | <!-- draft-ietf-dtn-tcpclv4 ([TCPCL] per orig.; RFC 9174) --> | |||
| <reference anchor='RFC9174' target="https://www.rfc-editor.org/info/rfc9174"> | ||||
| <front> | ||||
| <title>Delay-Tolerant Networking TCP Convergence-Layer Protocol Version 4< | ||||
| /title> | ||||
| <author initials='B' surname='Sipos' fullname='Brian Sipos'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='M' surname='Demmer' fullname='Michael Demmer'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='J' surname='Ott' fullname='Jörg Ott'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='S' surname='Perreault' fullname='Simon Perreault'> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month='January' year='2022' /> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="9174"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC9174"/> | ||||
| </reference> | ||||
| <t>Remove Quality of Service markings.</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| FC.3986.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7595.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <t>Change from SDNVs to CBOR representation.</t> | <!-- draft-ietf-dtn-bibect ([BIBE]; Expired) --> | |||
| <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | ||||
| .ietf-dtn-bibect.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.3987.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.4838.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5050.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6255.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6257.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6258.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6259.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6260.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7143.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8126.xml"/> | ||||
| <t>Add lifetime overrides.</t> | <reference anchor="SIGC" target="https://dl.acm.org/doi/10.1145/863955.863960"> | |||
| <front> | ||||
| <title>A Delay-Tolerant Network Architecture for Challenged Internets</t | ||||
| itle> | ||||
| <author initials="K" surname="Fall" fullname="Kevin Fall"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <date month="August" year="2003"/> | ||||
| </front> | ||||
| <seriesInfo name="DOI" value="10.1145/863955.863960"/> | ||||
| <refcontent>SIGCOMM 2003</refcontent> | ||||
| </reference> | ||||
| <t>Time values are denominated in milliseconds, not seconds.</t> | </references> | |||
| </list> | </references> | |||
| <section anchor="app-a" numbered="true" toc="default"> | ||||
| <name>Significant Changes from RFC 5050</name> | ||||
| <t> | ||||
| This document makes the following significant changes from RFC 5050: | ||||
| </t> | </t> | |||
| <ul spacing="normal"> | ||||
| </section> | <li>Clarifies the difference between transmission and forwarding.</li> | |||
| <li>Migrates custody transfer to the bundle-in-bundle encapsulation | ||||
| <section title="For More Information" anchor="sect-a"><t> | specification <xref target="I-D.ietf-dtn-bibect" format="default"/>.</ | |||
| Copyright (c) 2021 IETF Trust and the persons identified as authors | li> | |||
| of the code. All rights reserved.</t> | <li>Introduces the concept of "node ID" as functionally distinct from | |||
| endpoint ID, while having the same syntax.</li> | ||||
| <t> | <li>Restructures primary block, making it immutable. Adds optional | |||
| Redistribution and use in source and binary forms, with or without | CRC.</li> | |||
| modification, is permitted pursuant to, and subject to the license | <li>Adds optional CRCs to non-primary blocks.</li> | |||
| terms contained in, the Simplified BSD License set forth in Section | <li>Adds block ID number to canonical block format (to support | |||
| 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents | BPSec).</li> | |||
| (<eref target="http://trustee.ietf.org/license-info"/>).</t> | <li>Adds definition of Bundle Age extension block.</li> | |||
| <li>Adds definition of Previous Node extension block.</li> | ||||
| </section> | <li>Adds definition of Hop Count extension block.</li> | |||
| <li>Removes Quality of Service markings.</li> | ||||
| <section title="CDDL expression" anchor="sect-b"><t> | <li>Changes from Self-Delimiting Numeric Values (SDNVs) to CBOR encoding | |||
| .</li> | ||||
| <li>Adds lifetime overrides.</li> | ||||
| <li>Clarifies that time values are denominated in milliseconds, not seco | ||||
| nds.</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="app-c" numbered="true" toc="default"> | ||||
| <name>CDDL Expression</name> | ||||
| <t> | ||||
| For informational purposes, Carsten Bormann and Brian Sipos have | For informational purposes, Carsten Bormann and Brian Sipos have | |||
| kindly provided an expression of the Bundle Protocol specification | kindly provided an expression of the Bundle Protocol specification | |||
| in the Concise Data Definition Language (CDDL). That CDDL | in the Concise Data Definition Language (CDDL). That CDDL | |||
| expression is presented below. Note that wherever the CDDL | expression is presented below. Note that wherever the CDDL | |||
| expression is in disagreement with the textual representation of the | expression is in disagreement with the textual representation of the | |||
| BP specification presented in the earlier sections of this document, | BP specification presented in the earlier sections of this document, | |||
| the textual representation rules.</t> | the textual representation rules.</t> | |||
| <sourcecode type="cddl"><![CDATA[ | ||||
| <figure><artwork><![CDATA[ | ||||
| bpv7_start = bundle / #6.55799(bundle) | bpv7_start = bundle / #6.55799(bundle) | |||
| ; Times before 2000 are invalid | ; Times before 2000 are invalid | |||
| dtn-time = uint | dtn-time = uint | |||
| ; CRC enumerated type | ; CRC enumerated type | |||
| crc-type = &( | crc-type = &( | |||
| skipping to change at line 3304 ¶ | skipping to change at line 3009 ¶ | |||
| ), | ), | |||
| ? crc-value, | ? crc-value, | |||
| ] | ] | |||
| bundle-control-flags = uint .bits bundleflagbits | bundle-control-flags = uint .bits bundleflagbits | |||
| bundleflagbits = &( | bundleflagbits = &( | |||
| reserved: 21, | ||||
| reserved: 20, | reserved: 20, | |||
| reserved: 19, | reserved: 19, | |||
| bundle-deletion-status-reports-are-requested: 18, | bundle-deletion-status-reports-are-requested: 18, | |||
| bundle-delivery-status-reports-are-requested: 17, | bundle-delivery-status-reports-are-requested: 17, | |||
| bundle-forwarding-status-reports-are-requested: 16, | bundle-forwarding-status-reports-are-requested: 16, | |||
| skipping to change at line 3362 ¶ | skipping to change at line 3065 ¶ | |||
| canonical-block-structure = [ | canonical-block-structure = [ | |||
| block-type-code: uint, | block-type-code: uint, | |||
| block-number: uint, | block-number: uint, | |||
| block-control-flags, | block-control-flags, | |||
| crc-type, | crc-type, | |||
| ; Each block type defines the content within the bytestring | ; Each block type defines the content within the byte string | |||
| block-type-specific-data, | block-type-specific-data, | |||
| ? crc-value | ? crc-value | |||
| ] | ] | |||
| block-control-flags = uint .bits blockflagbits | block-control-flags = uint .bits blockflagbits | |||
| blockflagbits = &( | blockflagbits = &( | |||
| skipping to change at line 3386 ¶ | skipping to change at line 3089 ¶ | |||
| reserved: 6, | reserved: 6, | |||
| reserved: 5, | reserved: 5, | |||
| block-must-be-removed-from-bundle-if-it-cannot-be-processed: 4, | block-must-be-removed-from-bundle-if-it-cannot-be-processed: 4, | |||
| reserved: 3, | reserved: 3, | |||
| bundle-must-be-deleted-if-block-cannot-be-processed: 2, | bundle-must-be-deleted-if-block-cannot-be-processed: 2, | |||
| status-report-must-be-transmitted-if-block-cannot-be-processed: 1, | status-report-must-be-transmitted-if-block-cannot-be-processed: | |||
| 1, | ||||
| block-must-be-replicated-in-every-fragment: 0 | block-must-be-replicated-in-every-fragment: 0 | |||
| ) | ) | |||
| block-type-specific-data = bstr / #6.24(bstr) | block-type-specific-data = bstr / #6.24(bstr) | |||
| ; Actual CBOR data embedded in a bytestring, with optional tag to | ; Actual CBOR data embedded in a byte string, with optional tag to | |||
| indicate so. | indicate so. | |||
| ; Additional plain bstr allows ciphertext data. | ; Additional plain bstr allows ciphertext data. | |||
| embedded-cbor<Item> = (bstr .cbor Item) / #6.24(bstr .cbor Item) / | embedded-cbor<Item> = (bstr .cbor Item) / #6.24(bstr .cbor Item) / | |||
| bstr | bstr | |||
| ; Extension block type, which does not specialize other than the | ; Extension block type, which does not specialize other than the | |||
| code/number | code/number | |||
| extension-block = $extension-block .within canonical-block-structure | extension-block = | |||
| $extension-block .within canonical-block-structure | ||||
| ; Generic shared structure of all non-primary blocks | ; Generic shared structure of all non-primary blocks | |||
| extension-block-use<CodeValue, BlockData> = [ | extension-block-use<CodeValue, BlockData> = [ | |||
| block-type-code: CodeValue, | block-type-code: CodeValue, | |||
| block-number: (uint .gt 1), | block-number: (uint .gt 1), | |||
| block-control-flags, | block-control-flags, | |||
| skipping to change at line 3446 ¶ | skipping to change at line 3151 ¶ | |||
| block-control-flags, | block-control-flags, | |||
| crc-type, | crc-type, | |||
| $payload-block-data, | $payload-block-data, | |||
| ? crc-value | ? crc-value | |||
| ] | ] | |||
| ; Arbitrary payload data, including non-CBOR bytestring | ; Arbitrary payload data, including non-CBOR byte string | |||
| $payload-block-data /= block-type-specific-data | $payload-block-data /= block-type-specific-data | |||
| ; Administrative record as a payload data specialization | ; Administrative record as a payload data specialization | |||
| $payload-block-data /= embedded-cbor<admin-record> | $payload-block-data /= embedded-cbor<admin-record> | |||
| admin-record = $admin-record .within admin-record-structure | admin-record = $admin-record .within admin-record-structure | |||
| admin-record-structure = [ | admin-record-structure = [ | |||
| skipping to change at line 3537 ¶ | skipping to change at line 3242 ¶ | |||
| extension-block-use<10, embedded-cbor<ext-data-hop-count>> | extension-block-use<10, embedded-cbor<ext-data-hop-count>> | |||
| ext-data-hop-count = [ | ext-data-hop-count = [ | |||
| hop-limit: uint, | hop-limit: uint, | |||
| hop-count: uint | hop-count: uint | |||
| ] | ] | |||
| ]]></sourcecode> | ||||
| </section> | ||||
| ]]></artwork> | <section anchor="acks-section" numbered="false" toc="default"> | |||
| </figure> | <name>Acknowledgments</name> | |||
| </section> | <t> | |||
| This work is freely adapted from RFC 5050, which was an effort of | ||||
| </back> | the Delay-Tolerant Networking Research Group. The following DTNRG | |||
| participants contributed significant technical material and/or | ||||
| </rfc> | 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 Berke | ||||
| ley; | ||||
| <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>Scott Burleigh would like to thank the Jet Propulsion Laboratory, Californ | ||||
| ia Institute of Technology, for its generous and sustained support of this work. | ||||
| </t> | ||||
| </section> | ||||
| </back> | ||||
| </rfc> | ||||
| End of changes. 389 change blocks. | ||||
| 2505 lines changed or deleted | 2365 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||