Internet Draft      Bundle Protocol Specification     September 2004


 Delay Tolerant Networking Research Group                      K. Scott
 Internet Draft                                   The MITRE Corporation
 <draft-irtf-dtnrg-bundle-spec-02.txt>
 September 2004                                             S. Burleigh
 Expires: March 2005                          Jet Propulsion Laboratory



                       Bundle Protocol Specification


Status of this Memo

   By submitting this Internet-Draft, we certify that any applicable
   patent or other IPR claims of which we am aware have been disclosed,
   and any of which we become aware will be disclosed, in accordance
   with RFC 3668.

   This document is an Internet-Draft and is in full conformance with
   Sections 5 and 6 of RFC3667 and Section 5 of RFC3668.

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

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time. It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

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

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.

   This document was produced within the IRTF's Delay Tolerant
   Networking Research Group (DTNRG).  See http://www.dtnrg.org for more
   information.

Abstract

   This document describes the end-to-end protocol, header formats, and
   abstract service description for the exchange of messages (bundles)
   in Delay Tolerant Networking (DTN).




K. Scott and S. Burleigh      Expires - March 2005         [Page 1]


Internet Draft      Bundle Protocol Specification     September 2004



Conventions used in this document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC-2119 [1].

Table of Contents

   1.          Introduction..........................................3
   2.          Service Description...................................4
      2.1      Definitions...........................................4
      2.2      Services at the User Interface........................5
      2.3      Summary of Primitives.................................5
        2.3.1  Requests..............................................5
        2.3.2  Indications...........................................6
      2.4      Summary of Parameters.................................6
        2.4.1  Destination Communications endpoint ID................6
        2.4.2  Source Communications endpoint ID.....................6
        2.4.3  Report Communications endpoint ID.....................6
        2.4.4  Class of Service......................................6
        2.4.5  Delivery Options......................................7
        2.4.6  Lifespan..............................................7
        2.4.7  Application Data Unit.................................7
        2.4.8  Delivery Failure Action...............................7
      2.5      Bundling Service Primitives...........................8
        2.5.1  SEND.REQUEST..........................................8
        2.5.2  CANCELBUNDLE.REQUEST..................................8
        2.5.3  REGISTER.REQUEST......................................9
        2.5.4  START-DELIVERY.REQUEST................................9
        2.5.5  STOP-DELIVERY.REQUEST................................10
        2.5.6  CHANGE-REGISTRATION.REQUEST..........................10
        2.5.7  DEREGISTER.REQUEST...................................10
        2.5.8  POLL.REQUEST.........................................11
        2.5.9  DATA.INDICATION......................................11
        2.5.10 SENDERROR.INDICATION.................................12
        2.5.11 SENDTOKEN.INDICATION.................................12
        2.5.12 REGISTRATIONTOKEN.INDICATION.........................13
   3.          Bundle Message Format................................13
      3.1      General Bundle Header Format.........................16
      3.2      Tuples...............................................16
      3.3      Primary Bundle Header................................17
      3.4      Bundle Payload Header................................20
      3.5      Bundle Authentication Header.........................20
      3.6      Payload Security Header..............................20
      3.7      Bundle Fragment Header...............................21
      3.8      Dictionary Header....................................21
      3.9      Rules Governing the Appearance and Order of Headers..22
   4.          Bundle Processing....................................22
      4.1      Bundle transmission requests.........................22
      4.2      Bundles received from other bundle agents............22


K. Scott and S. Burleigh      Expires - March 2005         [Page 2]


Internet Draft      Bundle Protocol Specification     September 2004


      4.3      Local bundle delivery................................25
      4.4      Bundle forwarding....................................25
      4.5      Bundle Fragmentation and Reassembly..................26
        4.5.1  Bundle Fragmentation.................................26
        4.5.2  Bundle Reassembly....................................28
      4.6      Custodial Retransmission and Release.................28
   5.          Administrative Payloads..............................29
      5.1      Bundle Status Reports................................29
      5.2      Custodial Signals....................................32
   6.          Services Required of the Convergence Layer...........35
      6.1      The Convergence Layer................................35
      6.2      Summary of Convergence Layer Services................36
      6.3      Summary of Primitives................................36
        6.3.1  Requests.............................................36
        6.3.2  Indications..........................................36
      6.4      Summary of Parameters................................36
        6.4.1  Receiving Bundle Agent Endpoint ID...................36
        6.4.2  Sending Bundle Agent Endpoint ID.....................36
        6.4.3  Bundle...............................................36
        6.4.4  Bundle length........................................37
        6.4.5  Bundle authenticity..................................37
        6.4.6  Transmit length......................................37
      6.5      Convergence Layer Service Primitives.................37
        6.5.1  TRANSMIT.REQUEST.....................................37
        6.5.2  TRANSMIT-REPORT.INDICATION...........................38
        6.5.3  BUNDLE.INDICATION....................................38

1. Introduction

   This document describes version 3 of the Delay Tolerant
   Networking (DTN) "bundling" protocols.  Delay Tolerant Networking is
   an end-to-end architecture providing communications in and/or through
   highly stressed environments.  Stressed networking environments
   include those with intermittent connectivity, large and/or variable
   delays, and high bit error rates.  To provide its services, the DTN
   protocols sit at the application layer of the constituent internets,
   forming a store-and-forward overlay network.  Key capabilities of the
   bundling protocols include:

     o  Custody-based reliability
     o  Ability to cope with intermittent connectivity
     o  Ability to take advantage of scheduled and opportunistic
        connectivity (in addition to 'always-up' connectivity)
     o  Late binding of names to addresses

   For descriptions of these capabilities and rationale for the DTN
   architecture, see [2].  [3] contains a tutorial-level overview of DTN
   concepts.

   The bundle protocols sit at the application layer of the constituent
   internets as shown in Figure 1.  Bundling uses the 'native' internet


K. Scott and S. Burleigh      Expires - March 2005         [Page 3]


Internet Draft      Bundle Protocol Specification     September 2004


   protocols for communications within a given internet.  Note that
   'internet'  in the preceding is used in a general sense and does not
   necessarily refer to TCP/IP.  The interface between the common bundle
   protocol and a specific internetwork protocol suite is known as a
   convergence layer adapter.  Figure 1 shows three distinct transport
   and network protocols (denoted T1/N1, T2,N2, and T3/N3).

   +-----------+                                         +-----------+
   | BundleApp |                                         | BundleApp |
   +---------v-|   +->>>>>>>>>>v-+     +->>>>>>>>>>v-+   +-^---------+
   |  Bundle v |   | ^  Bundle v |     | ^  Bundle v |   | ^ Bundle  |
   +---------v-+   +-^---------v-+     +-^---------v-+   +-^---------+
   | Trans1  v |   + ^  T1/T2  v |     + ^  T2/T3  v |   | ^  Trans3 |
   +---------v-+   +-^---------v-+     +-^---------v +   +-^---------+
   | Net1    v |   | ^  N1/N2  v |     | ^  N2/N3  v |   | ^  Net3   |
   +---------v-+   +-^---------v +     +-^---------v-+   +-^---------+
   |         >>>>>>>>^         >>>>>>>>>>^         >>>>>>>>^         |
   +-----------+   +------------+      +-------------+   +-----------+

   |                     |                    |                      |
   |<--  An Internet --->|                    |<--- An Internet  --->|
   |                     |                    |                      |

   Figure 1: The bundling protocol sits at the application layer of the
             Internet model.

   This document describes the format of the messages (called bundles)
   passed between entities participating in bundle communications.  The
   entities are referred to as bundle nodes or bundle agents.  This
   document does not address:

     o  The mechanisms bundle agents use to transport data through a
        specific Internet, called convergence layer adapters, although
        it does discuss the services that must be provided by the
        convergence layer.

     o  The bundle routing algorithm or mechanisms for populating the
        routing or forwarding information bases of bundle nodes.

2. Service Description

2.1 Definitions

   Communications Endpoint ID - A Communications Endpoint ID identifies
   an application endpoint of DTN communications; the term corresponds
   to the term 'tuple' in [2].  A communications endpoint is identified
   by a DTN region identifier and an administrative part that is opaque
   to the bundle system outside the indicated region. One can think of a
   DTN communications endpoint as an application task, but in general
   the definition is meant to be broader.  For example, elements of a
   sensor network might register with a local bundle agent to receive


K. Scott and S. Burleigh      Expires - March 2005         [Page 4]


Internet Draft      Bundle Protocol Specification     September 2004


   information about certain topics of interest.  A communications
   endpoint ID could thus refer to a process running on a general-
   purpose processor, a special-purpose hardware device, an object in an
   object-oriented operating system, etc.

   Agent administration endpoint ID - Every bundle agent, in addition to
   being a sender, forwarder, and/or receiver of bundles, may also be
   the source and/or destination of bundle payloads (e.g., custody
   signals); that is, it may additionally function as a bundle
   application.  Each agent therefore has its own "agent administration"
   endpoint ID(s), so that bundles can be addressed and routed to it
   from anywhere in the network.

   Passive bundle reception - A bundle application is said to be in a
   period of passive bundle reception if it expects the bundle agent to
   asynchronously notify it of new bundles.  This assumes that the
   application has registered a Communications Endpoint ID and a
   callback mechanism with a bundle agent.

   Send token binding, registration token binding - A handle passed from
   a bundle application to the bundle agent when sending a bundle /
   registering to receive bundles.  This handle is used to associate an
   opaque token returned by the bundle agent with a specific bundle /
   registration.

   The terms "bundle content" and "bundle payload" (or simply "payload")
   are used interchangeably in this document.  The payload of an
   "original" bundle - i.e., one that is not a fragment of some larger
   bundle - is an application data unit.

2.2 Services at the User Interface

   The bundling protocol SHALL provide the following services to
   bundling applications:

      a) sending an application data unit to an identified
        communications endpoint;
      b) canceling a previously submitted request to send an application
        data unit;
      c) beginning a period of passive application data unit reception;
      d) ending a period of passive application data unit reception;
      e) actively requesting delivery of an application data unit.

2.3 Summary of Primitives

2.3.1 Requests

   The bundling services SHALL consume the following request primitives
   from bundling applications:




K. Scott and S. Burleigh      Expires - March 2005         [Page 5]


Internet Draft      Bundle Protocol Specification     September 2004



      a) Send.request;
      b) Cancel.request
      c) Register.request;
      d) Start_delivery.request;
      e) Stop_delivery.request;
      f) Change_registration.request;
      g) Deregister.request;
      h) Poll.request;

2.3.2 Indications

   The Bundling services SHALL deliver the following indication
   primitives to bundling applications:

      a) Data.indication;
      b) SendError.indication
      c) SendToken.indication
      d) RegistrationToken.indication

2.4 Summary of Parameters

   NOTE  -  The availability and use of parameters for each primitive
   are indicated in section 2.5, where optional parameters are
   identified with square brackets [thus].  The following definitions
   apply.

2.4.1 Destination Communications endpoint ID

   The destination communications endpoint ID parameter shall identify
   the communications endpoint to which the application data unit is to
   be sent.

2.4.2 Source Communications endpoint ID

   The source communications endpoint ID parameter shall uniquely
   identify the communications endpoint from which the application data
   unit was sent.

2.4.3 Report Communications endpoint ID

   The report communications endpoint ID parameter shall identify the
   communications endpoint to which any bundle status reports pertaining
   to the application data unit, including end-to-end acknowledgments,
   should be sent.

2.4.4 Class of Service

   The class of service parameter shall indicate which class of standard
   procedures shall be followed when transmitting and delivering the
   application data unit.  Its value shall be one of the following:


K. Scott and S. Burleigh      Expires - March 2005         [Page 6]


Internet Draft      Bundle Protocol Specification     September 2004


      o Bulk
      o Normal
      o Expedited

2.4.5 Delivery Options

   The delivery options parameter shall indicate what optional
   procedures shall additionally be followed when transmitting and
   delivering the application data unit.  Its value shall be a
   combination of zero or more of the following:
      o Custody transfer
      o Return receipt
      o Report when bundle received
      o Report when bundle forwarded
      o Report when bundle custody taken
      o Payload security requirements
         - Confidentiality
         - Integrity
         - Authentication

2.4.6 Lifespan

   The lifespan parameter shall indicate the length of time, following
   initial transmission of a bundle, after which bundling agents shall
   no longer store or forward the bundle.  The sum of the bundle's
   transmission time and lifespan is its delivery deadline, the moment
   at which it will be deleted from the DTN network if it has not
   already been delivered to its destination communications endpoint.

2.4.7 Application Data Unit

   The application data unit parameter shall indicate the location (in
   memory or non-volatile storage, a local implementation matter) of the
   application data conveyed by the bundle.

2.4.8 Delivery Failure Action

   The delivery failure action parameter shall indicate what action is
   to be taken when a bundle arrives for delivery at a moment when its
   destination communications endpoint is not currently in a period of
   passive application data unit reception.  Its value shall be one of
   the following:
      o Defer delivery until the entity either actively requests
        delivery of the application data unit or else begins a period
        of passive application data unit reception.
      o Abort delivery of the application data unit.
      o Defer delivery and also execute a specified procedure, where
        the expression of the procedure to be executed is a matter of
        local implementation.




K. Scott and S. Burleigh      Expires - March 2005         [Page 7]


Internet Draft      Bundle Protocol Specification     September 2004


2.5 Bundling Service Primitives

2.5.1 SEND.REQUEST

   The Send.request primitive shall be used by the application to
   request transmission of an application data unit from the source
   communications endpoint to a destination communications endpoint.

   Semantics: Send.request shall provide parameters as follows:
      Send.request(  source communications endpoint ID,
                     destination communications endpoint ID,
                     report communications endpoint ID,
                     class of service,
                     delivery options,
                     lifespan,
                     send token binding,
                     application data unit)

   When Generated: Send.request MAY be generated by the source Bundling
   application at any time.

   Effect on Receipt: Receipt of Send.request shall cause the Bundling
   agent to initiate bundle transmission procedures as described in
   section 4.1.  The agent will deliver either a SendError.indication or
   a SendToken.indication to the application.  The SendToken.indication
   contains the send token binding and a token that the application can
   later use to refer to this transmission.

   Additional Comments: None.

2.5.2 CANCELBUNDLE.REQUEST

   The CancelBundle.request primitive shall be used by the application
   to request that a bundle transmission previously initiated in
   response to a Send.request be cancelled.

   Semantics: CancelBundle.request shall provide parameters as follows:
      Cancel.request (  send token)

   When Generated: CancelBundle.request MAY be generated by the
   application after sending application data via the Send.request and
   after receiving a reference token for the transmission via a
   SendToken.indication.  A CancelBundle.request should be sent if the
   application no longer wishes to effect the transmission referenced by
   the send token.

   Effect on Receipt: Receipt of CancelBundle.request shall cause the
   Bundling agent to cease attempts to effect the indicated
   transmission.  If the bundle agent is the current custodian, then
   retransmission resources, including any retransmission timers,
   associated with the bundle will be released.


K. Scott and S. Burleigh      Expires - March 2005         [Page 8]


Internet Draft      Bundle Protocol Specification     September 2004



   Additional Comments: None.

2.5.3 REGISTER.REQUEST

   The Register.request primitive shall be used to notify the Bundling
   agent of the application's interest in bundles destined for a
   specified communications endpoint and of the action to take on the
   application's behalf with regard to those bundles.

   Semantics: Register.request shall provide parameters as follows:
      Register.request( delivery failure action,
                        registration token binding,
                        destination communications endpoint ID)

   When Generated: Register.request is generated by any Bundling
   application at any time when not currently registered.

   Effect on Receipt: Receipt of Register.request shall cause the agent
   to deliver a RegisterToken.indication to the application.  The
   RegisterToken.indication contains the registration token binding and
   a token that the application can use to refer to this registration.
   Receipt of Register.request shall additionally cause the indicated
   delivery failure action to be applied to all arriving bundles
   destined for the indicated endpoint ID at any time when the
   application is not in a period of passive application data unit
   reception associated with this registration.

   Additional Comments: Multiple applications may register interest in
   bundles destined for the same communications endpoint, in which case
   the Bundling agent MUST honor individually the delivery failure
   actions specified for each such registration as applicable.
   Implementations MAY require that an expiration time be specified when
   Register.request is submitted, to enable the Bundling agent to
   conserve resources by autonomously issuing Deregister.requests as
   registrations expire.

2.5.4 START-DELIVERY.REQUEST

   The Start-delivery.request primitive shall be used to notify the
   Bundling agent of the start of a period of passive application data
   unit reception.

   Semantics: Start-delivery.request shall provide parameters as
   follows:
      Start-delivery.request( registration token)

   When Generated: Start_delivery.request is generated by any Bundling
   application at any time when it is registered but not currently in a
   period of passive application data unit reception.



K. Scott and S. Burleigh      Expires - March 2005         [Page 9]


Internet Draft      Bundle Protocol Specification     September 2004


   Effect on Receipt: Receipt of Start-delivery.request shall cause the
   Bundling agent to deliver to the Bundling application the contents of
   any bundles destined for the registration's endpoint ID that (a)
   arrived in the past and were deferred or (b) arrive during the new
   period of passive application data unit reception.

2.5.5 STOP-DELIVERY.REQUEST

   The Stop-delivery.request primitive shall be used to notify the
   Bundling agent of the end of a period of passive application data
   unit reception.

   Semantics: Stop-delivery.request shall provide parameters as follows:
      Stop-delivery.request( registration token)

   When Generated: Stop-delivery.request MAY be generated by any
   Bundling application at any time when the application is currently in
   a period of passive application data unit reception.

   Effect on Receipt: Receipt of Stop-delivery.request shall cause the
   Bundling agent to dispatch any subsequently arriving bundles destined
   for the registration's endpoint in accord with the registration's
   delivery failure action.

2.5.6 CHANGE-REGISTRATION.REQUEST

   The Change-registration.request primitive shall be used to amend the
   action to take on the application's behalf with regard to bundles
   destined for the registration's endpoint.

   Semantics: Change-registration.request shall provide parameters as
   follows:
      Change-registration.request(  registration token,
                                    delivery failure action)

   When Generated: Change-registration.request MAY be generated by any
   Bundling application at any time when registered.

   Effect on Receipt: Receipt of Change-registration.request shall cause
   the indicated delivery failure action to be applied to all arriving
   bundles destined for the registration's ID at any time when the
   application is not in a period of passive application data unit
   reception associated with this registration.

2.5.7 DEREGISTER.REQUEST

   The Deregister.request primitive shall be used to notify the Bundling
   agent of the end of the application's interest in bundles destined
   for an endpoint.

   Semantics: Deregister.request shall provide parameters as follows:


K. Scott and S. Burleigh      Expires - March 2005        [Page 10]


Internet Draft      Bundle Protocol Specification     September 2004


      Deregister.request(registration token)

   When Generated: Deregister.request MAY be generated by any Bundling
   application at any time when registered.

   Effect on Receipt: Receipt of Deregister.request shall cause the
   Bundling agent to terminate the indicated registration.  Any bundles
   retained for deferred delivery per this registration shall be
   discarded and the delivery failure action policy associated with this
   registration shall be rescinded.

   Additional Comments: None.

2.5.8 POLL.REQUEST

   The Poll.request primitive shall be used to request immediate
   delivery of a bundle's content.

   Semantics: Poll.request shall provide parameters as follows:
      Poll.request(registration token)

   When Generated: Poll.request MAY be generated by any Bundling
   application at any time when it is registered but not currently in a
   period of passive application data unit reception.

   Effect on Receipt: Receipt of Poll.request shall cause the Bundling
   Agent to deliver to the Bundling application the content of the least
   recently received bundle, destined for the registration's
   communications endpoint ID, for which delivery was deferred.

2.5.9 DATA.INDICATION

   The Data.indication primitive shall be used to deliver the content of
   a bundle to the bundle's destination communications endpoint.

   Semantics: Data.indication shall provide parameters as follows:
      Data.indication(  source communications endpoint ID,
                           destination communications endpoint ID,
                           report communications endpoint ID,
                           class of service,
                           delivery options,
                           lifespan,
                           application data unit)

   When Generated: Data.indication shall be generated on receipt of a
   Poll.request primitive from a Bundling application or on arrival of a
   bundle destined for the application at a time when the application is
   in a period of passive bundle reception.

   Effect on Receipt: The effect on receipt of Data.indication by a
   Bundling application is undefined.


K. Scott and S. Burleigh      Expires - March 2005        [Page 11]


Internet Draft      Bundle Protocol Specification     September 2004



   Additional Comments: None.

2.5.10
       SENDERROR.INDICATION

   The SendError.indication primitive shall be used to deliver
   information about bundle transmission requests that the agent cannot
   accept from the application.

   Semantics: SendError.indication shall provide parameters as follows:
      SendError.indication (  source communications endpoint ID,
                              destination communications endpoint ID,
                              report communications endpoint ID,
                              class of service,
                              delivery options,
                              lifespan,
                              application data unit)

   When Generated: SendError.indication shall be generated when a
   Send.request primitive cannot be accepted by the agent.

   Effect on Receipt: The effect on receipt of SendError.indication by a
   Bundling application is undefined.

   Additional Comments: None.

2.5.11
       SENDTOKEN.INDICATION

   The SendToken.indication primitive shall be used to deliver a token
   to the application that it can use to refer to a particular bundle
   transmission effected in response to a Send.request primitive.

   Semantics: SendToken.indication shall provide parameters as follows:
      SendToken.indication (  send token binding,
                              send token)

   When Generated: SendToken.indication shall be generated when an
   application data unit is accepted by the agent for transmission.  The
   send token binding parameter is the same as that supplied with the
   Send.request, and the send token can be supplied to refer to that
   bundle.

   Effect on Receipt: The effect on receipt of SendToken.indication by a
   Bundling application is undefined.

   Additional Comments: None.







K. Scott and S. Burleigh      Expires - March 2005        [Page 12]


Internet Draft      Bundle Protocol Specification     September 2004


2.5.12
       REGISTRATIONTOKEN.INDICATION

   The RegistrationToken.indication primitive shall be used to deliver a
   token to the application that it can use to refer to a particular
   registration established via the Register.request primitive.

   Semantics: RegistrationToken.indication shall provide parameters as
   follows:
      RegistrationToken.indication  (  registration token binding,
                                       registration token)

   When Generated: RegistrationToken.indication shall be generated when
   a registration.request primitive is serviced by the agent.  The
   registration token binding parameter is the same as that supplied
   with the Register.request, and the registration token can be supplied
   to refer to that registration.

   Effect on Receipt: The effect on receipt of
   RegistrationToken.indication by a Bundling application is undefined.

   Additional Comments: None.

3. Bundle Message Format

   The DTN protocols use a chained header format reminiscent of IPv6
   headers.  Each bundle consists of at least a primary bundle header
   and a dictionary header.  Other header types can be chained after the
   dictionary header to support additional functionality such as
   authentication, bundle fragmentation, etc.

   This section describes the format of the different bundle headers.
   Rules for processing bundle headers appear in section 4 of this
   document.




















K. Scott and S. Burleigh      Expires - March 2005        [Page 13]


Internet Draft      Bundle Protocol Specification     September 2004


   The currently defined headers are:

                     Table 1: Bundle Header Types
+--------------------+------+---------------------------------------+
|       Header       | Type |              Comment                  |
+====================+======+=======================================+
|                    | 0x00 |  When used as a next header type,     |
|  No more headers   |      |  indicates that no other headers      |
|                    |      |  follow the current one.              |
+--------------------+------+---------------------------------------+
|  Primary bundle    | 0x01 |  Must appear before any other bundle  |
|  header            |      |  header.                              |
+--------------------+------+---------------------------------------+
|  Dictionary        | 0x02 |  Contains string text corresponding   |
|  header            |      |  to the string numbers used in the    |
|                    |      |  primary header.                      |
+--------------------+------+---------------------------------------+
|  Reserved          | 0x03 |  Reserved for future use.             |
+--------------------+------+---------------------------------------+
|  Reserved          | 0x04 |  Reserved for future use.             |
+--------------------+------+---------------------------------------+
|  Bundle Payload    | 0x05 |  Identifies actual bundle content.    |
+--------------------+------+---------------------------------------+
|  Reserved          | 0x06 |  Reserved for future use.             |
+--------------------+------+---------------------------------------+
|  Bundle            | 0x07 |  Used to assure the authenticity      |
|  authentication    |      |  of the bundle.                       |
+--------------------+------+---------------------------------------+
|  Payload security  | 0x08 |  Used to assure the integrity and     |
|                    |      |  (optionally) authenticity of the     |
|                    |      |  payload.                             |
+--------------------+------+---------------------------------------+
|  Bundle Fragment   | 0x09 |  This bundle is a fragment of a       |
|                    |      |  larger one.                          |
+--------------------+------+---------------------------------------+
|               All other values reserved for future use.           |
+--------------------+------+---------------------------------------+
















K. Scott and S. Burleigh      Expires - March 2005        [Page 14]


Internet Draft      Bundle Protocol Specification     September 2004


   The format of the various headers is shown in Figure 2 below.

Primary Bundle Header
+----------------+----------------+----------------+----------------+
|    Version     |  Next Header   |   COS Flags    | Pyld security  |
+----------------+----------------+----------------+----------------+
|  Destination   |    Source      |   Report-to    |   Custodian    |
+----------------+----------------+----------------+----------------+
|                                                                   |
+             Creation Timestamp (8 bytes)                          +
|                                                                   |
+---------------------------------+---------------------------------+
|                         Expiration Time                           |
+----------------+----------------+---------------------------------+


Dictionary Header
+----------------+----------------+----------------+----------------+
|  Next Header   |  String count  |  String records (variable)      +
+-------------------------------------------------------------------+


Bundle Fragment Header
+----------------+----------------+----------------+----------------+
|  Next Header   |  Length of original bundle payload (4 bytes)
+----------------+----------------+----------------+----------------+
                 |  Offset of this bundle fragment (4 bytes)
+----------------+--------------------------------------------------+
                 |
-----------------+


Bundle Authentication Header
+----------------+----------------+----------------+----------------+
|  Next Header   |   Length       | Auth. information (variable)
+----------------+----------------+----------------+----------------+


Payload Security Header
+----------------+----------------+----------------+----------------+
|  Next Header   |   Length       | Security information (variable)
+----------------+----------------+----------------+----------------+











K. Scott and S. Burleigh      Expires - March 2005        [Page 15]


Internet Draft      Bundle Protocol Specification     September 2004


Bundle Payload Header
+----------------+----------------+----------------+----------------+
| Payload class  |  Length of bundle payload (4 bytes)
+----------------+----------------+----------------+----------------+
                 |                                                  |
+----------------+                                                  |
|                           Bundle Payload (variable)               |
|                                                                   |
/                                                                   /
/                                                                   /
|                                                                   |
+-------------------------------------------------------------------+

                 Figure 2:   Bundle header formats.

3.1 General Bundle Header Format

   In most cases a bundle header begins with a one-octet next header
   type field.  This field identifies the type of the header following
   the one the field is part of.  The exceptions to this rule are the
   primary bundle header, which must appear before any other bundle sub-
   headers, and the payload header, which if present must be the last
   sub-header in the bundle.  The primary bundle header begins with a 1-
   byte version field that identifies the version of the bundling
   protocols used to create the current bundle, followed by a 1-byte
   next header type field.  The payload header begins with a 1-byte
   payload class that indicates whether the payload consists of
   administrative records (see section 5) or non-administrative
   application data.

   All multi-byte fields are transmitted in network byte order.

3.2 Tuples

   Communicating entities in the DTN are referred to via name tuples,
   also known as communication endpoint IDs (see section 2.1).  A name
   tuple is an ordered pair of variable-length octet arrays.

   The first octet array of a name tuple is termed the "routing part" or
   "region ID".  It is a sequence of US ASCII characters encoded using
   the punycode transfer encoding syntax documented in RFC 3492, with
   reference to RFCs 3490 and 3491.  Simply put, a region ID is a dotted
   string where the sequence of characters between any pair of dots - or
   preceding the first dot, or in the entire string if the string
   contains no dots - must not contain any character that is illegal in
   a domain name as defined by RFC 1035, but may specifically begin with
   the reserved internationalization prefix "ùxn" indicating the scheme
   by which the remaining ASCII characters in the sequence may be
   translated to Unicode.




K. Scott and S. Burleigh      Expires - March 2005        [Page 16]


Internet Draft      Bundle Protocol Specification     September 2004


   The second octet array of a name tuple is termed the "administrative
   part" of the endpoint ID.  It may be encoded in any of three possible
   ways:

      o  A single 8-bit integer, which is to be interpreted in a
          region-specific manner.

      o  A single 16-bit integer, which is to be interpreted in a
          region-specific manner.

      o  An absolute URI, as defined in RFC 2396.

   If the first character of a region ID is a dot, then the ensuing
   sequence of characters preceding the next dot identifies the "name
   invariance family" (NIF) to which the named region belongs; any DTN
   endpoint that is identified by administrative-part "X" within any
   region that is a member of NIF "Q" is guaranteed to be identified by
   X within every other region that is a member of Q.

   The routing part of a DTN name tuple must be globally parsable
   throughout the DTN.  The administrative part is opaque outside of the
   indicated region, but must be parsable anywhere in that region.

   For economy in bundle transmission, redundancy in the representation
   of tuples is minimized by the use of "string numbers" in the primary
   bundle header.  The distinct octet arrays that serve as the routing
   and administrative parts of the tuples identifying a bundle's
   destination, source, report-to endpoint, and current custodian are
   enumerated in the string records of the dictionary header; the tuples
   themselves are represented in the primary bundle header by ordered
   pairs of 4-bit "string numbers" that reference those string records.

   A string number is an ordinal reference to a string record, i.e.,
   string number zero is a reference to the first string record in the
   dictionary header, string number 1 is a reference to the second
   string record, etc.  Each tuple representation in the primary bundle
   header is a single byte comprising two string numbers: the 4 high-
   order bits identify the string record whose text is the routing part
   (region identifier) of the tuple, while the 4 low-order bits identify
   the string record whose text is the administrative part of the tuple.

3.3
    Primary Bundle Header

   The primary bundle header contains the basic information needed to
   route bundles to their destinations.  The fields of the primary
   bundle header are:

   Version.  A 1-byte field indicating the version of the bundling
          protocol that generated this header.  This document describes
          version 0x03 of the bundling protocol.



K. Scott and S. Burleigh      Expires - March 2005        [Page 17]


Internet Draft      Bundle Protocol Specification     September 2004


   Next Header Type.  The Next Header Type field is a 1-byte field that
          indicates the type of the header that immediately follows this
          one.  Header types are listed in Table 1 above.

   Class of Service Flags.  The COS Flags byte consists of a 1-bit
          custody switch followed by three (3) bits of priority and four
          (4) bits of delivery record request flags.  If the custody bit
          is 1 then the sender requests custodial transfer of the
          bundle.  The three-bit priority field indicates the bundle's
          priority, with higher values being of higher priority.  The
          interpretation of the delivery record request flags is as
          follows.

         Table 2: Delivery Record Request Flag Meanings

         +---------+--------------------------------------------+
         |  Value  |                  Meaning                   |
         +=========+============================================+
         |  0000   |  No delivery records requested.            |
         +---------+--------------------------------------------+
         |  0001   |  Request custody transfer reporting.       |
         +---------+--------------------------------------------+
         |  0010   |  Request reporting of bundle reception.    |
         +---------+--------------------------------------------+
         |  0100   |  Request reporting of bundle forwarding.   |
         +---------+--------------------------------------------+
         |  1000   |  Request end-to-end return receipt.        |
         +---------+--------------------------------------------+


   Payload Security.  The Payload Security byte consists of one bit
          indicating whether or not the payload is encrypted, two bits
          of payload integrity flags, and five bits reserved for future
          use.  The encryption bit is a Boolean value; it is set to 1 if
          and only if the payload is encrypted in a key system in which
          both the source and destination application endpoints' bundle
          agents are participants.  The payload integrity flags indicate
          whether or not a Payload Security header is present in the
          bundle and, if so, whether that header serves to assure bundle
          authenticity or only bundle integrity; the nature of the
          information in the Payload Security header (e.g., the hash
          algorithm used) is encoded within the header.  The
          interpretation of the payload integrity flags is as follows.










K. Scott and S. Burleigh      Expires - March 2005        [Page 18]


Internet Draft      Bundle Protocol Specification     September 2004


         Table 3: Payload Integrity Flag Meanings

         +---------+--------------------------------------------+
         |  Value  |                  Meaning                   |
         +=========+============================================+
         |   00    |  No bundle integrity or authentication.    |
         +---------+--------------------------------------------+
         |   01    |  Bundle integrity is supported.            |
         +---------+--------------------------------------------+
         |   10    |  Bundle authentication is supported.       |
         +---------+--------------------------------------------+

   Destination.   This 1-byte field contains the two 4-bit string
          numbers for the Region ID (routing part) and administrative
          part of the tuple identifying the destination endpoint.

   Source.     A 1-byte field containing the two 4-bit string numbers
          for the Region ID (routing part) and administrative part of
          the tuple identifying the source endpoint.

   Report-To.  A 1-byte field containing the two 4-bit string numbers
          for the Region ID (routing part) and administrative part of
          the tuple identifying the report-to endpoint.

   Current custodian.   A 1-byte field containing the two 4-bit string
          numbers for the Region ID (routing part) and administrative
          part of the tuple identifying the current custodian endpoint.
          Custody transfer provides a means of reliable bundle transfer.
          The rationale behind custody transfers is discussed in detail
          in [2].  The rules for processing custodial bundles are
          described in section 4.5 below.  The value of this field MUST
          be set to zero on send and ignored on receipt if the custody
          switch in the class of service (above) is zero.

   Creation Timestamp.  The creation timestamp is an 8-byte field
          containing the time the bundle payload was accepted for
          transmission by the source bundle agent, formatted as an NTP
          timestamp[4].

   Expiration Time.  The four-byte expiration time field indicates the
          time at which the bundle's data will no longer be useful,
          encoded as the number of seconds past the creation timestamp.
          When the current time is greater than the creation timestamp
          plus the expiration time, bundles may be discarded.

   The reason that the creation timestamp has higher granularity than
   the expiration time is because the creation timestamp together with
   the source tuple make up the bundle identifier, which must be unique
   to every original (non-fragmentary) bundle in the system.  Note that
   this implies that a bundle agent MUST NOT accept for transmission two



K. Scott and S. Burleigh      Expires - March 2005        [Page 19]


Internet Draft      Bundle Protocol Specification     September 2004


   or more payloads during a time interval bounded by two successive NTP
   timestamps.

3.4
    Bundle Payload Header

   The fields of the bundle payload header are:

   Payload Class.  The Payload Class field is a 1-byte field that
          indicates the nature of the payload.  The field contains 0x01
          if the payload consists of one or more Bundling administrative
          records (see section 5) and 0x00 otherwise.

   Length.  A 4-byte field indicating the total length, in bytes, of the
          payload.  Note that this may be less than the bundle's
          original payload length if fragmentation has occurred.  This
          length does NOT include the lengths of the header elements of
          this bundle payload header.

   Payload.  The application data carried by this bundle.

3.5 Bundle Authentication Header

   The fields of the bundle authentication header are:

   Next Header Type. The Next Header Type field is a 1-byte field that
          indicates the type of the header that immediately follows this
          one.  Header types are listed in Table 1 above.

   Length.  A 1-byte field indicating the total length, in bytes, of the
          authentication information.

   Authentication information.   The authentication information is the
          result of generating a hash over the entire bundle (excluding
          the bundle authentication header itself), then running the
          hash through a signature algorithm - e.g., sign using sender's
          private key.  Bundle authentication information is generated
          and checked on a hop-by-hop basis, between neighboring bundle
          agents along the end-to-end route of the bundle, to contain
          unauthorized use of delay tolerant network assets.

3.6 Payload Security Header

   The fields of the payload security header are:

   Next Header Type. The Next Header Type field is a 1-byte field that
          indicates the type of the header that immediately follows this
          one.  Header types are listed in Table 1 above.

   Length.  A 1-byte field indicating the total length, in bytes, of the
          security information.



K. Scott and S. Burleigh      Expires - March 2005        [Page 20]


Internet Draft      Bundle Protocol Specification     September 2004


   Security information.   The security information is the result of
          generating a hash over the entire payload, then optionally
          running the hash through a signature algorithm - e.g., sign
          using source's private key.  Payload security information is
          generated and checked on an end-to-end basis, between the
          source and destination communication endpoints' bundle agents,
          to assure the integrity and (optionally) authenticity of the
          delivered payload.

3.7 Bundle Fragment Header

   A "bundle fragment" is a bundle whose payload is some part of the
   payload of a larger "original" bundle; the payload of a bundle
   fragment is identified by its offset from the beginning of the
   original bundle's payload.  Bundle fragment headers are present in
   all bundle fragments.

   The fields of the Bundle Fragment Header are:

   Next Header Type. The Next Header Type field is a 1-byte field that
          indicates the type of the header that immediately follows this
          one.  Header types are listed in Table 1 above.

   Length of Original Bundle Payload.  This is the total length of the
          original bundle's payload before any fragmentation.

   Fragment Offset.  The byte offset of the beginning of this fragment's
          payload within the original bundle's payload.

   Note: As described in section 6, the "convergence layer" transport
   mechanisms underlying bundling are required to provide to bundle
   nodes the length of each bundle received.  The length of a received
   bundle payload may be computed by subtracting the sum of the lengths
   of the bundle's headers from this reported bundle length.  Reactive
   fragmentation is required when, and only when, this computed payload
   length is less than the payload length declared in the bundle's
   payload header.

3.8 Dictionary Header

   The fields of the dictionary header are:

   Next Header Type.  The Next Header Type field is a 1-byte field that
          indicates the type of the header that immediately follows this
          one.  Header types are listed in Table 1 above.

   String Count.  A 1-byte field indicating the number of string records
          in this header.

   String Records.  This is a variable-length field comprising some
          number (indicated in the String Count) of concatenated string


K. Scott and S. Burleigh      Expires - March 2005        [Page 21]


Internet Draft      Bundle Protocol Specification     September 2004


          record structures.  Each string record structure has this
          format:

+----------------+----------------+----------------+----------------+
|     Length     |  String text (variable)                          +
+-------------------------------------------------------------------+

   The fields of the string record structure are:

   Length.  A 1-byte field indicating the total length, in bytes, of the
          string text.

   String text.  The text of the octet array to which the sending bundle
          agent refers when citing this string record's ordinal position
          within the string records field of the dictionary header.

3.9 Rules Governing the Appearance and Order of Headers

   The following rules apply to the order and presence of DTN headers:
      o The primary bundle header must appear first.
      o The dictionary record must immediately follow the primary
        header.
      o There can be at most one header of each other type per bundle.
      o  If a payload header is present, it must be the last header in
        the bundle.
      o Rules regarding the order of appearance of other header types
        have not yet been established.

4. Bundle Processing

   There are currently no provisions for multipoint delivery of bundle
   payloads.

4.1 Bundle transmission requests

   The steps in processing a Send.request primitive are:

   Step 1: Permissions checking.  Bundle agents MAY enforce policy that
      restricts the permissions of applications.  Such policy could, for
      example, limit the rate at which particular applications are
      allowed to inject traffic, or limit the CoS options that
      particular applications are allowed to use.  Requests that meet
      the policy criteria shall result in the return of
      SendToken.indications; those that do not shall result in the
      return of SendError.indications.

   Step 2: If the request is accepted, then an outbound bundle is
      created and processing proceeds from Step 5 of section 4.2.

4.2 Bundles received from other bundle agents



K. Scott and S. Burleigh      Expires - March 2005        [Page 22]


Internet Draft      Bundle Protocol Specification     September 2004


   Note that whenever an administrative record (bundle status report or
   custodial signal) is generated in response to receipt of a bundle
   that is a fragment of some original bundle, the administrative record
   MUST contain the Fragment flag and the fragment offset and fragment
   length fields.  All administrative records are sent as the payloads
   of bundles.  Bundles containing custodial signals MUST be sent with
   the CoS flag requesting custodial delivery set, except when the
   payload of the referenced bundle is itself a custodial signal.

   The steps in processing a bundle received from another bundle agent
   are:

   Step 1: Bundle Authentication:  The bundle must first be
      authenticated as described in section 3.13 of [2], in one of two
      ways: either (a) the authenticity of the bundle must have been
      asserted by the convergence layer or (b) the bundle must contain a
      Bundle Authentication header whose signature is valid according to
      the certificate of the sending bundle agent.  The purpose of this
      authentication is to protect the bundle transmission
      infrastructure, not to provide security services to bundle
      applications.  If the authentication fails then the bundle MUST be
      discarded and processed no further; in this case a bundle status
      report indicating the authentication failure MAY be generated,
      destined for the receiving bundle agent's own administration
      endpoint.

   Step 2: Generate a bundle reception status report, if requested.  If
      the bundle's class of service requests that a bundle reception
      status report be generated when the bundle is received, a bundle
      reception status report MUST be generated, destined for the
      bundle's report-to endpoint ID.

   Step 3: Bundle custody transfer.  If the bundle's class of service
      requests custodial transfer, the bundle agent has to decide
      whether or not to take custody of the bundle.  The decision as to
      whether or not to take custody of a bundle may involve both
      resource and policy considerations.

      If the agent elects to NOT take custody of the bundle, then it
      MUST take the following actions:

         o  If for any reason the agent elects to discard the bundle
            altogether, the agent MUST generate a "Failed" custodial
            signal for the bundle, destined for the agent
            administration endpoint of the bundle's current custodian
            (the bundle agent that most recently took custody of the
            bundle); the custodial signal MUST contain a reason code
            explaining the failure of custody transfer.  The bundle
            MUST then be discarded and processed no further.




K. Scott and S. Burleigh      Expires - March 2005        [Page 23]


Internet Draft      Bundle Protocol Specification     September 2004


         o  If the bundle is not discarded and its destination tuple
            matches one of the bundle agent's interfaces, the agent
            MUST generate a "Succeeded" custodial signal for the
            bundle, destined for the agent administration endpoint of
            the bundle's current custodian; the reason code in the
            signal MUST be "Delivery to application by non-custodian".

         o  If the bundle is not discarded and its destination tuple
            does not match any of the bundle agent's interfaces, then
            when forwarding the bundle the agent MUST NOT assert a new
            current custodian for the bundle, i.e., it MUST NOT change
            the agent administration endpoint ID that is encoded as the
            bundle's current custodian.

      If the agent elects to take custody of the bundle, then it takes
      the following actions:

         o  If the bundle's class of service indicates that custody
            transfer reporting is requested, a bundle status report
            indicating that the current agent is taking custody of the
            bundle MUST be generated, destined for the report-to
            endpoint ID of the bundle.  If a bundle reception status
            report was generated above, this additional status report
            SHOULD be appended to the payload of the bundle in which
            that status report is sent.

         o  The agent MUST generate a "Succeeded" custodial signal for
            the bundle, destined for the agent administration endpoint
            of the bundle's current custodian; the reason code in the
            signal MUST be "Acceptance of custody".

         o  The bundle agent MUST modify the current custodian ID,
            changing that identifier to the agent's own administration
            endpoint ID.  This may entail the insertion of new string
            records into the bundle's dictionary header and, possibly,
            the removal of string records to which there is no longer
            any reference in the bundle's primary header.

         o  The bundle agent MAY set a custody transfer timer as an
            alternate means of initiating the procedures described in
            4.6 below.  The value of the retransmission timer interval
            is up to the bundle agent.

         o  The bundle agent MUST keep a copy of the bundle until it
            can be discarded in accord with the procedures described in
            Step 4 below or section 4.6 below, and this copy SHOULD be
            in persistent storage if at all possible.

   Step 4: Test for bundle expiration.  A bundle has expired if the
      current time is greater than the bundle's creation time plus its
      lifetime as specified in the primary bundle header.  If the bundle


K. Scott and S. Burleigh      Expires - March 2005        [Page 24]


Internet Draft      Bundle Protocol Specification     September 2004


      has expired then it MUST be discarded and processed no further; if
      the bundle's class of service requests custodial transfer and the
      local bundle agent is now the bundle's current custodian, then a
      bundle status report indicating TTL expiration MUST be generated,
      destined for the bundle's report-to endpoint ID.

   Step 5: Dispatch the bundle.  If the bundle's destination tuple
      matches one of the bundle agent's interfaces, processing proceeds
      from Step 1 of section 4.3; otherwise, processing proceeds from
      Step 1 of section 4.4.

4.3 Local bundle delivery

   The steps described here are carried out ONLY if the bundle's
   destination tuple matches one of the bundle agent's interfaces.

   Step 1: Reassembly.  If the received bundle is a fragment of a larger
      bundle, its payload MUST be combined with the payloads of the rest
      of the fragments that make up the entire original bundle before
      the bundle content can be further processed.  Identification and
      processing of bundle fragments is discussed in section 4.5 below.

   Step 2: If one or more applications have registered with the bundle
      agent with the bundle's destination communication endpoint ID, the
      original bundle content (payload) SHALL be delivered to each such
      application in a Data.indication when either (a) the corresponding
      registration is in - or enters - a period of passive bundle
      reception or (b) the application uses a Poll.request to initiate
      active bundle reception.

      If the bundle's destination endpoint ID is the bundle agent's own
      administration endpoint ID, then the administrative record
      contained in the bundle's payload is processed as described in
      section 4.6 below.

   Step 3: If the bundle's class of service requests that an end-to-end
      return receipt be sent, such a receipt MUST be generated, destined
      for the bundle's report-to endpoint ID, as soon as the bundle
      content has been delivered to at least one application.  Note that
      this return receipt only states that the bundle payload has been
      delivered to an application, not that any application has
      processed the content.

4.4 Bundle forwarding

   The steps described here are carried out ONLY if the bundle's
   destination tuple does not match any of the bundle agent's
   interfaces.

   Step 1: Determine next hop for bundle.



K. Scott and S. Burleigh      Expires - March 2005        [Page 25]


Internet Draft      Bundle Protocol Specification     September 2004


      o If the bundle agent does NOT have an interface in the bundle's
        destination region, then it MUST determine the bundle's next
        hop using ONLY the bundle's destination region identifier.  The
        information in the administrative part of the bundle's
        destination endpoint identifier is NOT used at this time.  The
        agent determines the next hop bundle agent to which the bundle
        will be transmitted and schedules the bundle for transmission.

      o If the bundle agent contains an interface in the bundle's
        destination region, then the bundle's next hop is a local
        policy matter.  Bundle routers may forward bundles directly to
        their destinations once in the destination region, or they may
        forward bundles to bundle agents serving as intermediate
        point(s) in the region.

   Step 2: Forward the bundle.  At this point the bundle agent can
      schedule the bundle for transmission via an appropriate
      convergence layer adapter.

   Step 3: Generate a bundle forwarding status report if requested.  If
      the bundle's class of service requests that a bundle forwarding
      status report be generated when the bundle is forwarded, a bundle
      forwarding status report MUST be generated, destined for the
      bundle's report-to endpoint ID, when the convergence layer
      announces that the bundle has been transmitted.

4.5 Bundle Fragmentation and Reassembly

   It may be necessary for bundle agents to break bundles into smaller
   units in order to forward them.  This might be the case, for example,
   if the next hop destination is available only via intermittent
   contacts, and no upcoming contact is long enough to support sending
   the entire bundle.  The process of breaking bundles into smaller
   units is called fragmentation.  Reassembly of bundle fragments occurs
   at the ultimate destination bundle agent.  Bundles MAY also be
   reassembled from fragments by other bundle agents on the route to the
   final destination, relieving the ultimate destination bundle agent of
   this responsibility.

4.5.1 Bundle Fragmentation

   Bundle fragments are themselves bundles and are individually
   routable.  When breaking a bundle into fragments, the following SHALL
   be true:

     o  All fragments MUST contain the same headers as the original
        bundle, other than the payload header.  In particular, the
        creation timestamps in the primary headers of all bundle
        fragments MUST be the same as that of the original bundle.
        Recall that the pair (source tuple, creation timestamp) is
        unique for each original bundle.  This allows the destination


K. Scott and S. Burleigh      Expires - March 2005        [Page 26]


Internet Draft      Bundle Protocol Specification     September 2004


        to associate the bundle fragments with a single original
        bundle.

     o  In addition to the original headers, each bundle fragment MUST
        contain a fragment header identifying the fragmentary payload's
        position within the original payload and the length of the
        original (unfragmented) bundle's payload.  Note that there is
        only one 'level' of fragmentation (as in IP fragmentation).

     o  When original bundle transmission is terminated before the
        entire payload has been transmitted, the truncated bundle
        arriving at the receiving bundle agent is not well-formed and
        cannot be forwarded until it has been transformed into a bundle
        fragment.  Upon forwarding this truncated bundle the receiving
        bundle agent MUST insert a fragment header, with offset zero,
        indicating the length of the original bundle's payload and MUST
        change the payload length in the payload header to the actual
        length of the payload being forwarded.

     o  When transmission of a fragment is terminated before the
        fragment's entire payload has been transmitted, the truncated
        bundle arriving at the receiving bundle agent is again not
        well-formed.  Upon forwarding this truncated bundle the
        receiving bundle agent MUST retain its fragment header, with
        offset and original payload length unchanged, and MUST change
        the payload length in the payload header to the actual length
        of the payload being forwarded.

     o  Whenever transmission of any bundle is terminated before the
        bundle's entire payload has been transmitted, the sending
        bundle agent MUST divide the bundle into two fragmentary
        bundles:

            The transmitted fragment, whose payload's length is the
            number of octets of payload data that the receiving bundle
            agent is *known* to have received at the moment
            transmission was terminated.

            The retained fragment, whose payload's length is equal to
            the transmitted bundle's payload length less the length of
            the transmitted fragment's payload.

        The headers of both fragmentary bundles MUST be identical to
        the headers of the transmitted bundle except that:

            If the transmitted bundle was itself a fragment, then the
            offset in the fragment header of the new retained fragment
            bundle must be the sum of the payload offset of the
            transmitted bundle and the length of the transmitted
            fragment's payload.



K. Scott and S. Burleigh      Expires - March 2005        [Page 27]


Internet Draft      Bundle Protocol Specification     September 2004


            Otherwise, new fragment headers must be inserted into both
            the transmitted and retained fragment bundles.  Original
            payload length in each fragment header must be the length
            of the payload of the transmitted bundle; offset in the
            fragment header of the transmitted fragment must be zero;
            offset in the fragment header of the retained fragment must
            be the length of the transmitted fragment's payload.

   After fragmentation, the fragments are individually forwarded as
   distinct bundles: the receiving bundle agent MUST forward the
   fragment that it received and the sending bundle agent MUST forward
   its retained fragment.

   A bundle agent MAY fragment a bundle prior to transmission.  In this
   case, the first fragment MUST contain a fragment header with offset
   zero.

4.5.2 Bundle Reassembly

   Each bundle fragment contains a fragment header.  The fragment header
   contains the original bundle's payload length as well as the
   fragment's payload's offset within the original payload.  The
   fragment's bundle payload header contains the length of the current
   fragmentary payload.  This information is enough for the receiving
   bundle agent to reconstruct the original payload from the fragments.

4.6 Custodial Retransmission and Release

   Upon receipt of a custodial signal, the bundle agent may need to
   fragment the referenced bundle retroactively (in concept if not in
   fact).  This is because some forwarding agent one or more hops
   downstream from the custodian may have fragmented the bundle, in
   which case the fragment offset and/or length noted in the signal
   issued by some further downstream forwarding agent may differ from
   the fragment offset and/or length (if any) in the bundle that is in
   the agent's custody.  As a result, the bundle agent may temporarily
   find itself the custodian of two or even three distinct fragmentary
   bundles in place of the single bundle for which it originally had
   taken custody; processing of the signal may thereupon terminate the
   agent's custody of one of these fragmentary bundles.  The manner in
   which this conceptual retroactive fragmentation is accomplished is an
   implementation matter.

   Upon receipt of a "Succeeded" custodial signal, the bundle agent MAY
   release resources allocated to the referenced bundle.

   Upon receipt of a "Failed" custodial signal, the action taken by the
   bundle agent is implementation-dependent and may depend on the reason
   code in the signal.  For example, receipt of a "Failed" signal with
   the "Depleted storage" reason code might cause the bundle to be re-
   forwarded, possibly on a different route; receipt of a "Failed"


K. Scott and S. Burleigh      Expires - March 2005        [Page 28]


Internet Draft      Bundle Protocol Specification     September 2004


   signal with the "Redundant transmission" reason code might cause the
   bundle agent to release resources allocated to the referenced bundle
   and to revise its algorithm for computing custody transfer timer
   intervals.

   Upon expiration of a custody transfer timer:

      If the bundle itself has expired then it MUST be discarded and
      processed no further; a bundle status report indicating TTL
      expiration MUST be generated, destined for the bundle's report-to
      endpoint ID.

      Otherwise, the action taken by the bundle agent is implementation-
      dependent as in the case of receipt of a "Failed" custodial
      signal.  Note, though, that the action taken in this event is not
      informed by a reason code.

5. Administrative Payloads

   Administrative payloads are application data units that help to
   implement some features of bundling, although they are not part of
   the Bundling protocol itself.  Some are sent to the agent
   administration endpoints of bundle agents, rather than to Bundling
   application endpoints.

   An administrative bundle payload comprises one or more administrative
   records.  Two types of administrative records have been defined to
   date: bundle status reports and custodial signals.

   Every administrative record consists of an eight-bit record type
   code, followed by record content in type-specific format.  Record
   type codes are defined as follows:

         Table 4: Administrative Record Type Codes

         +---------+--------------------------------------------+
         |  Value  |                  Meaning                   |
         +=========+============================================+
         |  0x01   |  Bundle status report.                     |
         +---------+--------------------------------------------+
         |  0x02   |  Custodial signal.                         |
         +---------+--------------------------------------------+
         | (other) |  Reserved for future use.                  |
         +---------+--------------------------------------------+

   The contents of the various types of administrative records are
   described below.

5.1
    Bundle Status Reports

   One of the delivery options that senders can request is 'bundle


K. Scott and S. Burleigh      Expires - March 2005        [Page 29]


Internet Draft      Bundle Protocol Specification     September 2004


   status reports.'  These reports are intended to provide information
   about how bundles are progressing through the system, including
   notices of receipt, TTL expiration, forwarding, custody transfer, and
   final delivery.  Status reports have the following format.

Bundle Status Report for bundle 'X':

+----------------+----------------+----------------+----------------+
|  Status Flags  |  Fragment offset (4 bytes, if present)
+----------------+----------------+----------------+----------------+
                 |  Fragment length (4 bytes, if present)
+--------------------------------------------------+----------------+
                 |  Copy of bundle X's Send Timestamp (8 bytes)
+----------------+                                                  +

+                +----------------+----------------+----------------+
                 |  Time of Receipt of bundle 'X' (8 bytes, if
+----------------+                                                  +
    present)
                 +----------------+----------------+----------------+
                 |  Time of Forwarding of bundle 'X' (8 bytes, if
+----------------+
    present)                                                        +
                 +----------------+----------------+----------------+
                 |  Time of Delivery of bundle 'X' (8 bytes, if
+----------------+                                                  +
    present)
                 +----------------+----------------+----------------+
                 |  Time of Deletion of bundle 'X' (8 bytes, if
+----------------+                                                  +
    present)
+                +----------------+----------------+----------------+
                 |  Region length |       Region ID of
+----------------+----------------+                                 +
            X's source endpoint (variable)                          /
+                +----------------+---------------------------------+
/                |  Admin. Length |   Administrative part of
+----------------+----------------+                                 +
            X's source endpoint (variable)                          /
+                +----------------+---------------------------------|
/                |
+----------------+











K. Scott and S. Burleigh      Expires - March 2005        [Page 30]


Internet Draft      Bundle Protocol Specification     September 2004


   The fields in a bundle status report are:

   Status Flags.  A 1-byte field containing the following flags:

         Table 5: Status Flags for Bundle Status Reports

         +---------+--------------------------------------------+
         |  Value  |                  Meaning                   |
         +=========+============================================+
         |  0x01   |  Reporting node correctly received bundle. |
         +---------+--------------------------------------------+
         |  0x02   |  Reporting node took custody of bundle.    |
         +---------+--------------------------------------------+
         |  0x04   |  Reporting node has forwarded the bundle.  |
         +---------+--------------------------------------------+
         |  0x08   |  Reporting node has delivered the bundle.  |
         +---------+--------------------------------------------+
         |  0x10   |  Bundle's TTL expired at reporting node.   |
         +---------+--------------------------------------------+
         |  0x20   |  Bundle was found to be inauthentic.       |
         +---------+--------------------------------------------+
         |  0x40   |  Unused.                                   |
         +---------+--------------------------------------------+
         |  0x80   |  Report is for a bundle fragment; fragment |
         |         |  offset and length fields are present.     |
         +---------+--------------------------------------------+

   Fragment offset.  If the bundle fragment bit is set in the status
          flags, then the offset of the payload of the bundle that
          caused the status report to be generated (within the original
          payload) is included here.  This offset, together with the
          bundle ID of the original bundle, uniquely identifies this
          bundle fragment.

   Fragment length.  If the bundle fragment bit is set in the status
          flags, then the length of the payload of the subject bundle is
          included here.

   Send Timestamp For Reported Bundle.  A copy of the send timestamp of
          the bundle that caused the status report to be generated.

   Time of Receipt (if present).  If the bundle-received bit is set in
          the status flags, then a timestamp indicating the time at
          which the bundle was received by the reporting node is
          included here.  The timestamp is 8 bytes long, formatted as an
          NTP timestamp.

   Time of Forward (if present).  If the bundle-forwarded bit is set in
          the status flags, then a timestamp indicating the time at
          which the bundle was first forwarded by the reporting node is
          included here.  The timestamp is 8 bytes long, formatted as an


K. Scott and S. Burleigh      Expires - March 2005        [Page 31]


Internet Draft      Bundle Protocol Specification     September 2004


          NTP timestamp.


   Time of Delivery (if present).  If the bundle-delivered bit is set in
          the status flags, then a timestamp indicating the time at
          which the bundle was delivered to the application by the
          reporting node is included here.  The timestamp is 8 bytes
          long, formatted as an NTP timestamp.

   Time of Deletion (if present).  If the TTL-expired bit or the
          authentication-failed bit is set in the status flags, then a
          timestamp indicating the time at which the bundle was
          discarded by the reporting node is included here.  The
          timestamp is 8 bytes long, formatted as an NTP timestamp.

   Region length.  The length in bytes of the region ID (routing part)
          of the tuple identifying the application endpoint which was
          the source of the bundle that caused the status report to be
          generated.

          The combination of the reported bundle's send timestamp and
          source tuple constitutes the bundle identifier.  This,
          together with the fragment offset if present, uniquely
          identifies the subject bundle to the reportee.

  Region ID text.  The text of the region ID (routing part) of the
          tuple identifying the subject bundle's source endpoint.

   Administrative part length.  The length in bytes of the
          administrative part of the tuple identifying the subject
          bundle's source endpoint.

  Administrative part text.  The text of the administrative part of the
          tuple identifying the subject bundle's source endpoint.

   The action that the report-to addressee takes on receipt of a bundle
   status report is application-specific.

5.2
    Custodial Signals

   Custodial signals are administrative records that effect custodial
   operations.  They are sent to the administration endpoints
   corresponding to bundle agents that are the custodians of bundles.

   Custodial signals have the following format.








K. Scott and S. Burleigh      Expires - March 2005        [Page 32]


Internet Draft      Bundle Protocol Specification     September 2004


   Custodial Signal regarding bundle 'X':

+----------------+----------------+----------------+----------------+
|  Status Flags  |  Reason code   |  Fragment offset (4 bytes, if
+----------------+----------------+----------------+----------------+
   present)                       |  Fragment length (4 bytes, if
----------------+---------------------------------+-----------------+
   present)                       |  Copy of bundle X's Send
+----------------+----------------+                                 +
   Timestamp (8 bytes)
+                                 +----------------+----------------+
                                  |  Time of signal (8 bytes)
+----------------+----------------+                                 +

+                                 +----------------+----------------+
                                  |  Region length |  Region ID of
+----------------+----------------+----------------+                +
            X's source endpoint (variable)                          /
+                                 +---------------------------------+
/                                 |  Admin. Length | Administrative
+----------------+----------------+----------------+                +
            part of X's source endpoint (variable)                  /
+                                 +----------------+----------------+
/                                 |
+----------------+----------------+




























K. Scott and S. Burleigh      Expires - March 2005        [Page 33]


Internet Draft      Bundle Protocol Specification     September 2004


   The fields in a custodial signal are:

   Status Flags.  A 1-byte field containing the following flags:

         Table 6: Status Flags for Custodial Signals

         +---------+--------------------------------------------+
         |  Value  |                  Meaning                   |
         +=========+============================================+
         |  0x01   |  Custody transfer succeeded.               |
         +---------+--------------------------------------------+
         |  0x02   |  Unused.                                   |
         +---------+--------------------------------------------+
         |  0x04   |  Unused.                                   |
         +---------+--------------------------------------------+
         |  0x08   |  Unused.                                   |
         +---------+--------------------------------------------+
         |  0x10   |  Unused.                                   |
         +---------+--------------------------------------------+
         |  0x20   |  Unused.                                   |
         +---------+--------------------------------------------+
         |  0x40   |  Unused.                                   |
         +---------+--------------------------------------------+
         |  0x80   |  Report is for a bundle fragment; fragment |
         |         |  offset and length fields are present.     |
         +---------+--------------------------------------------+

   Reason code.  A 1-byte field explaining the value of the "Custody
   transfer succeeded" flag in the status flags byte.  Reason codes are
   defined as follows:

         Table 7: Custodial Signal Reason Codes

         +---------+--------------------------------------------+
         |  Value  |                  Meaning                   |
         +=========+============================================+
         |  0x01   |  Acceptance of custody.                    |
         +---------+--------------------------------------------+
         |  0x02   |  Delivery to application by non-custodian. |
         +---------+--------------------------------------------+
         |  0x03   |  Redundant transmission (reception by the  |
         |         |  agent that is already current custodian). |
         +---------+--------------------------------------------+
         |  0x04   |  Depleted storage.                         |
         +---------+--------------------------------------------+
         |  0x05   |  No known route to destination from here.  |
         +---------+--------------------------------------------+
         |  0x06   |  No timely contact with next node on route.|
         +---------+--------------------------------------------+
         | (other) |  Reserved for future use.                  |
         +---------+--------------------------------------------+


K. Scott and S. Burleigh      Expires - March 2005        [Page 34]


Internet Draft      Bundle Protocol Specification     September 2004



   Fragment offset.  If the bundle fragment bit is set in the status
          flags, then the offset of the payload of the bundle that
          caused the custodial signal to be generated (within the
          original payload) is included here.  This offset, together
          with the bundle ID of the original bundle, uniquely identifies
          this bundle fragment.

   Fragment length.  If the bundle fragment bit is set in the status
          flags, then the length of the payload of the subject bundle is
          included here.  This length, together with the fragment
          offset, is used to track aggregated transfer of custody of the
          original bundle.

   Send Timestamp For Reported Bundle.  A copy of the send timestamp of
          the bundle to which the signal applies.

   Time of Signal.  A timestamp indicating the time at which the signal
          was issued.  The timestamp is 8 bytes long, formatted as an
          NTP timestamp.

   Region length.  The length in bytes of the region ID (routing part)
          of the tuple identifying the application endpoint which was
          the source of the bundle to which the signal applies.

          The combination of the reported bundle's send timestamp and
          source tuple constitutes the bundle identifier.  This,
          together with the fragment offset if present, uniquely
          identifies the subject bundle to the receiving custodian.

  Region ID text.  The text of the region ID (routing part) of the
          tuple identifying the subject bundle's source endpoint.

   Administrative part length.  The length in bytes of the
          administrative part of the tuple identifying the subject
          bundle's source endpoint.

  Administrative part text.  The text of the administrative part of the
          tuple identifying the subject bundle's source endpoint.

6. Services Required of the Convergence Layer

6.1 The Convergence Layer

   The successful operation of the end-to-end Bundling protocol depends
   on the operation of underlying protocols at what is termed the
   "convergence layer"; these protocols accomplish point-to-point
   communication between bundle agents.  A wide variety of protocols may
   serve this purpose, so long as they provide a defined minimal set of
   services to Bundling.  This convergence layer service specification
   enumerates those services.


K. Scott and S. Burleigh      Expires - March 2005        [Page 35]


Internet Draft      Bundle Protocol Specification     September 2004



6.2 Summary of Convergence Layer Services

   Each protocol at the convergence layer SHALL provide the following
   services to Bundling:

      a) transmitting a bundle to a remote bundle agent identified by
        administration endpoint ID;
      b) delivering a bundle that was transmitted by an identified
        remote bundle agent.

6.3 Summary of Primitives

6.3.1 Requests

   The convergence layer service SHALL consume the following request
   primitives:

      a) Transmit.request

6.3.2 Indications

   The convergence layer service SHALL deliver the following indication
   primitives:

      a) Transmit-Report.indication
      b) Bundle.indication

6.4 Summary of Parameters

   NOTE  -  The availability and use of parameters for each primitive
   are indicated in section 6.5, where optional parameters are
   identified with square brackets [thus].  The following definitions
   apply.

6.4.1 Receiving Bundle Agent Endpoint ID

   The receiving bundle agent administration endpoint ID parameter shall
   uniquely identify the administration endpoint of the bundle agent to
   which a bundle is to be sent.

6.4.2 Sending Bundle Agent Endpoint ID

   The sending bundle agent administration endpoint ID parameter shall
   uniquely identify the administration endpoint of the bundle agent
   from which a bundle was sent.

6.4.3 Bundle

   The bundle parameter shall indicate the location of a bundle, in the
   format described in section 3, that has been conveyed or is to be


K. Scott and S. Burleigh      Expires - March 2005        [Page 36]


Internet Draft      Bundle Protocol Specification     September 2004


   conveyed by the convergence layer protocol.

6.4.4 Bundle length

   The bundle length parameter shall indicate the length of a bundle
   that is to be conveyed by the convergence layer protocol.

6.4.5 Bundle authenticity

   The bundle authenticity parameter shall indicate the convergence
   protocol's assessment of the authenticity of a received bundle, i.e.,
   whether or not the bundle was indeed sent by the known bundle agent
   who claimed to have sent it and (if it was) whether or not it was
   altered after transmission.  The value of this parameter shall be one
   of the following:
      o Bundle authenticity is asserted.
      o Bundle authenticity is denied.
      o Bundle authenticity is unknown.

6.4.6 Transmit length

   The transmit length parameter shall indicate the number of bytes of
   payload data that are *known* to have received by the designated
   receiving bundle agent in the course of the data transmission
   procedures undertaken by the convergence layer protocol in response
   to a Transmit.request primitive.

6.5 Convergence Layer Service Primitives

6.5.1 TRANSMIT.REQUEST

   The Transmit.request primitive shall be used by Bundling to request
   transmission of a bundle to a neighboring bundle agent.

   Semantics: Transmit.request shall provide parameters as follows:
      Transmit.request  (  receiving bundle agent endpoint ID,
                     bundle length,
                     bundle)

   When Generated: Transmit.request MAY be generated by Bundling at any
   time.

   Effect on Receipt: Receipt of Transmit.request shall cause the
   convergence layer protocol to initiate data transmission procedures.
   In addition, the convergence layer protocol shall deliver a Transmit-
   Report.indication to Bundling when it has concluded its transmission
   of the bundle.

   Additional Comments:  The convergence layer adapter is responsible
   for translating the receiving bundle agent endpoint ID into an
   appropriate convergence-layer protocol address for transmission.


K. Scott and S. Burleigh      Expires - March 2005        [Page 37]


Internet Draft      Bundle Protocol Specification     September 2004



6.5.2 TRANSMIT-REPORT.INDICATION

   The Transmit-Report.indication primitive shall be used by the
   convergence layer protocol to report to Bundling on the results of
   processing a Transmit.request primitive.

   Semantics: Transmit-Report.indication shall provide parameters as
   follows:
      Transmit-Report.indication (  receiving bundle agent endpoint ID,
                     bundle length,
                     bundle,
                     transmit length)

   When Generated: Transmit-Report.indication SHALL be generated upon
   the conclusion of data transmission initiated in response to a
   Transmit.request primitive.  The transmit length reported in the
   indication will be less than the bundle length in (and only in) the
   event that transmission of the bundle was truncated for some reason
   peculiar to the convergence layer protocol.

   Effect on Receipt: Receipt of Transmit-Report.indication SHALL cause
   the subject bundle to be reactively fragmented as described in
   section 4.5.1 if and only if transmit length is less than bundle
   payload length.  Otherwise the effect on receipt of Transmit-
   Report.indication by Bundling is undefined.

   Additional Comments: None.

6.5.3 BUNDLE.INDICATION

   The Bundle.indication primitive shall be used by the convergence
   layer protocol to deliver a received bundle to Bundling for
   processing.

   Semantics: Bundle.indication shall provide parameters as follows:
      Bundle.indication (  sending bundle agent endpoint ID,
                     bundle authenticity,
                     bundle,
                     transmit length)

   When Generated: Bundle.indication SHALL be generated on arrival of a
   bundle sent from a remote bundle agent.

   Effect on Receipt: Receipt of Bundle.indication shall cause Bundling
   to process the received bundle as described in section 4.2 and (as
   applicable) section 4.5.1.

   Additional Comments: The convergence layer adapter is responsible for
   translating the convergence-layer protocol address of the sender into
   the sender's bundle agent endpoint ID.  Sending bundle agent endpoint


K. Scott and S. Burleigh      Expires - March 2005        [Page 38]


Internet Draft      Bundle Protocol Specification     September 2004


   ID is required for bundle authentication purposes, e.g., consulting
   the bundle agent's pre-distributed security certificate to verify the
   signature on Bundle Authentication header information.

Security Considerations

   Section 3.13 of [2] describes the general methods for protecting the
   DTN infrastructure.  In summary, bundle applications must present
   credentials to bundle agents before the agents will accept bundles
   from the applications.  Agents sign all bundles they transmit, and
   receiving bundle agents discard any bundles whose signatures are not
   valid.

Informative References

   [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement
       Levels", BCP 14, RFC 2119, March 1997

   [2] V. Cerf, et. al., "Delay-Tolerant Network Architecture," work in
       progress, draft-irtf-dtnrg-arch-02.txt, July 2004

   [3] F. Warthman, "Delay-Tolerant Networks (DTNs): A Tutorial",
       Warthman Associates, available from http://www.dtnrg.org

   [4] Mills, D., "Network Time Protocol (Version 3) Specification,
       Implementation and Analysis", RFC 1305, March 1992

Acknowledgements

   The authors gratefully acknowledge the contributions of Dr. Vint Cerf
   of MCI, Dr. Kevin Fall of Intel Corporation, Adrian Hooke and Leigh
   Torgerson of the Jet Propulsion Laboratory, Howard Weiss of SPARTA,
   Inc., and Robert Durst of The MITRE Corporation.

Author's Addresses

Dr. Keith L. Scott              Scott C. Burleigh
The MITRE Corporation           Jet Propulsion Laboratory
7515 Colshire Drive             4800 Oak Grove Drive
McLean, VA 22102                M/S: 179-206
Telephone +1 (703) 883-6547     Pasadena, CA 91109-8099
FAX +1 (703) 883-7142           Telephone +1 (818) 393-3353
Email kscott@mitre.org          FAX +1 (818) 354-1075
                                Email Scott.Burleigh@jpl.nasa.gov

   Please refer comments to dtn-interest@mailman.dtnrg.org.  The Delay
   Tolerant Networking Research Group (DTNRG) web site is located at
   http://www.dtnrg.org.




K. Scott and S. Burleigh      Expires - March 2005        [Page 39]


Internet Draft      Bundle Protocol Specification     September 2004



Copyright Notice

   Copyright (C) The Internet Society (2004).  This document is subject
   to the rights, licenses and restrictions contained in BCP 78, and
   except as set forth therein, the authors retain all their rights.


Disclaimer

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.


Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at ietf-
   ipr@ietf.org.


Release Statement

By submitting this Internet-Draft, the authors accept the provisions of
Section 4 of RFC 3667.





K. Scott and S. Burleigh      Expires - March 2005        [Page 40]