<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp "&#160;">
  <!ENTITY zwsp "&#8203;">
  <!ENTITY nbhy "&#8209;">
  <!ENTITY wj "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     docName="draft-koo-dtn-traceroute-eb-00"
     category="std"
     ipr="trust200902"
     submissionType="IETF"
     consensus="true"
     tocInclude="true"
     sortRefs="true"
     symRefs="true"
     version="3">

  <front>
    <title abbrev="BPv7 TREB">Traceroute Extension Block for Bundle Protocol Version 7</title>
    
    <seriesInfo name="Internet-Draft" value="draft-koo-dtn-traceroute-eb-00"/>
    
    <author initials="C. H." surname="Koo" fullname="Cheol Hea Koo">
      <organization>Korea Aerospace Research Institute (KARI)</organization>
      <address>
        <postal>
          <country>Republic of Korea</country>
        </postal>
        <email>chkoo@kari.re.kr</email>
      </address>
    </author>
    
    <date year="2026"/>
    
    <area>Transport</area>
    <workgroup>Delay-Tolerant Networking</workgroup>
    
    <keyword>DTN</keyword>
    <keyword>BPv7</keyword>
    <keyword>traceroute</keyword>
    <keyword>diagnostics</keyword>
    
    <abstract>
      <t>This document defines a Traceroute Extension Block for Bundle
      Protocol Version 7 (BPv7). The extension block provides path
      discovery and per-hop performance measurement capabilities for
      Delay-Tolerant Networks (DTNs). Each node along the bundle's path
      appends a hop record containing its endpoint identifier, timestamp,
      link characteristics, and convergence layer information. This
      enables comprehensive network diagnostics including path
      verification, delay analysis, link type identification, and
      congestion monitoring without requiring status reports from every
      intermediate node.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      
      <t>Network diagnostic tools are essential for operational networks.
      In DTN, particularly space communications, operators need visibility
      into:</t>
      
      <ul>
        <li>Path Discovery: Which nodes relayed the bundle?</li>
        <li>Delay Analysis: How long did each hop take?</li>
        <li>Link Performance: Which link type was used (RF, Laser, Internet)?</li>
        <li>Protocol Analysis: Which convergence layer protocol was employed?</li>
        <li>Congestion Awareness: Which nodes are experiencing resource constraints?</li>
      </ul>
      
      <t>While Bundle Protocol Version 7 <xref target="RFC9171"/> provides
      Bundle Status Reports (BSRs) that can theoretically provide some path
      information, using BSRs for routine path tracking is inefficient.
      Enabling status reports for every bundle creates significant network
      overhead, as each intermediate node must generate and transmit a
      separate status report bundle back to the source. This approach is
      particularly problematic in bandwidth-constrained space networks.</t>
      
      <t>This specification addresses these needs through a comprehensive
      yet selective traceroute mechanism that can be enabled on specific
      diagnostic bundles when path visibility is required.</t>
    </section>
    
    <section anchor="conventions">
      <name>Conventions and Definitions</name>
      
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
      "OPTIONAL" in this document are to be interpreted as described in
      BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and
      only when, they appear in all capitals, as shown here.</t>
      
      <t>This document uses terminology from <xref target="RFC9171"/>:</t>
      
      <dl>
        <dt>Bundle Protocol Agent (BPA):</dt>
        <dd>The software component that implements the Bundle Protocol.</dd>
        
        <dt>Endpoint Identifier (EID):</dt>
        <dd>A name for a BP endpoint, used as the source or destination of bundles.</dd>
        
        <dt>Extension Block:</dt>
        <dd>A block other than the primary block or payload block that extends
        the capabilities of the Bundle Protocol.</dd>
      </dl>
    </section>
    
    <section anchor="specification">
      <name>Extension Block Specification</name>
      
      <section anchor="block-type">
        <name>Block Type Code</name>
        
        <t>This document requests IANA to assign a block type code for the
        Traceroute Extension Block from the "Bundle Block Types" registry.</t>
        
        <t>Suggested value: TBD1 (recommended: 194 or higher, in the
        Specification Required range)</t>
      </section>
      
      <section anchor="cddl">
        <name>CDDL Definition</name>
        
        <t>The block-type-specific-data is encoded as CBOR <xref target="RFC8949"/>
        following <xref target="RFC9171"/> Appendix B conventions:</t>
        
        <sourcecode type="cddl"><![CDATA[
; Traceroute Extension Block Data
traceroute-data = [
  traceroute-id: uint,          ; Unique identifier
  hop-limit: uint .size 1,      ; Max hop-records (1-255)
  hop-records: [* hop-record]   ; Array of hop records
]

hop-record = [
  self-node-eid: eid,           ; Current node
  next-node-eid: eid,           ; Next hop node
  event-type: event-type-code,  ; Event at this node
  dtn-timestamp: dtn-time,      ; When event occurred
  link-info                     ; Link characteristics
]

; Link characteristics grouped for modularity
link-info = [
  link-type: link-type-code,
  link-distance: link-distance-km,
  cl-type: cl-type-code,
  congestion-status: congestion-status-code
]

event-type-code = uint .size 1
  ; 0 = bundle-creation
  ; 1 = bundle-forwarding
  ; 2 = bundle-delivery
  ; 3 = bundle-deletion
  ; 4-255 = reserved

link-type-code = uint .size 1
  ; 0 = unknown/not-applicable
  ; 1 = RF (Radio Frequency)
  ; 2 = optical/laser
  ; 3 = internet/terrestrial
  ; 4 = inter-satellite-link (ISL)
  ; 5-255 = reserved

link-distance-km = uint
  ; 0 = unknown/withheld
  ; 1+ = distance in kilometers

cl-type-code = uint .size 1
  ; 0 = unknown/not-applicable
  ; 1 = LTP
  ; 2 = TCPCLv3
  ; 3 = TCPCLv4
  ; 4 = UDPCL
  ; 5-255 = reserved

congestion-status-code = uint .size 1
  ; 0 = unknown
  ; 1 = very low (0-10%)
  ; 2 = low (11-30%)
  ; 3 = medium (31-60%)
  ; 4 = high (61-80%)
  ; 5 = very high (81-100%)
  ; 6-100 = exact percentage
  ; 101-255 = reserved

dtn-time = uint  ; Milliseconds since DTN epoch
]]></sourcecode>
      </section>
      
      <section anchor="flags">
        <name>Block Processing Control Flags</name>
        
        <t>The following block processing control flags MUST be set:</t>
        
        <ul>
          <li>Bit 0 (must-replicate): MUST be 0 by default</li>
          <li>Bit 2 (delete-if-not-processed): MUST be 0</li>
          <li>Bit 4 (discard-if-not-processed): MUST be 0</li>
        </ul>
        
        <t>This ensures the traceroute block is preserved even by nodes
        that do not understand it.</t>
      </section>
    </section>
    
    <section anchor="processing">
      <name>Processing Rules</name>
      
      <section anchor="departure">
        <name>At the Departure Node</name>
        
        <t>A departure node MAY add a Traceroute Extension Block to any bundle.
        The first hop-record (hop-records[0]) MUST always represent the
        departure node.</t>
        
        <t>When creating a bundle with a Traceroute Extension Block:</t>
        
        <ol>
          <li><t>The BPA MUST create an initial hop-record with:
          self-node-eid set to the local node's EID;
          next-node-eid set to the next hop's EID (from routing table);
          event-type set to 0 (bundle-creation);
          dtn-timestamp set to current DTN time in milliseconds;
          link-info set to [0, 0, 0, 0] or known values.</t></li>
          <li><t>The traceroute-id SHOULD be unique within the scope of the
          departure node (typically 0, incremented for retries).</t></li>
          <li><t>The hop-limit SHOULD be set to a reasonable value based on
          expected network diameter (suggested default: 32).</t></li>
        </ol>
        
        <t>If the departure node wants to receive traceroute information via
        status reports, the bundle processing control flags for forwarding,
        delivery, and deletion reporting SHOULD be set accordingly.</t>
        
        <section anchor="carrier-bundle">
          <name>Traceroute Carrier Bundle</name>
          
          <t>A traceroute carrier bundle is a bundle specifically created for
          gathering path information. The Traceroute Extension Block SHOULD be
          placed as the last extension block (before the payload block) to enable
          efficient hop-record appending. Since <xref target="RFC9171"/> requires
          the payload block to be the last block of a bundle, appending a hop-record
          displaces only the payload block. Using a fixed payload such as
          "This bundle is the host of traceroute extension block." allows the
          payload block to be pre-encoded as a constant, making the cost of
          appending a hop-record independent of the number of extension blocks
          present.</t>
          
          <t>When the traceroute carrier bundle reaches its destination, the
          destination node includes the accumulated Traceroute Extension Block in
          the delivery status report returned to the departure node. Similarly,
          if a bundle is deleted at any intermediate node, the deletion status
          report carries the accumulated traceroute data up to that point. This
          enables complete forward-path visibility and failure localization from
          a single diagnostic bundle.</t>
        </section>
      </section>
      
      <section anchor="intermediate">
        <name>At Intermediate Nodes</name>
        
        <t>Any intermediate node in the bundle's path has the following options:</t>
        
        <ol>
          <li><t>The node MAY ignore this extension block and forward it unchanged.</t></li>
          <li><t>The node SHALL NOT remove this extension block.</t></li>
          <li><t>The node MAY protect this extension block with BPSec
          <xref target="RFC9172"/> if security context permits.</t></li>
        </ol>
        
        <t>If processing the block, the node MUST first check the hop-limit.
        If the number of hop-records equals hop-limit, the BPA SHALL forward
        the bundle without appending a new hop-record.</t>
        
        <t>Otherwise, the BPA MUST determine link-info elements and append
        a new hop-record:</t>
        
        <ol>
          <li><t>Determine link-info:
          link-type from the interface that received the bundle (1=RF, 2=optical,
          3=internet, 4=ISL, 0=unknown);
          link-distance as estimated distance in kilometers (0 if unknown);
          cl-type from the convergence layer that delivered the bundle;
          congestion-status from local resource utilization.</t></li>
          <li><t>Append hop-record with:
          self-node-eid set to the local node's EID;
          next-node-eid set to the next hop's EID;
          event-type set to 1 (bundle-forwarding);
          dtn-timestamp set to current DTN time;
          link-info set to determined values.</t></li>
        </ol>
        
        <t>Rationale for optional processing: nodes may not trust traceroute
        from unknown sources, classified missions may prohibit topology
        disclosure, or resource-constrained nodes may skip optional features.</t>
      </section>
      
      <section anchor="destination">
        <name>At the Destination Node</name>
        
        <t>When a BPA delivers a bundle containing a Traceroute Extension Block:</t>
        
        <ol>
          <li><t>The BPA MUST append a final hop-record with:
          self-node-eid set to the local node's EID;
          next-node-eid set to the local node's EID (self-delivery);
          event-type set to 2 (bundle-delivery);
          dtn-timestamp set to current DTN time;
          link-info set to characteristics of the final link.</t></li>
          <li><t>The completed traceroute-data is delivered to the application.</t></li>
          <li><t>If bundle processing control flags request a delivery report,
          the node MUST include the complete Traceroute Extension Block
          (with all accumulated hop-records) in the delivery status report.</t></li>
        </ol>
      </section>
      
      <section anchor="deletion">
        <name>On Bundle Deletion</name>
        
        <t>When a node deletes a bundle containing a Traceroute Extension Block
        (due to lifetime expiration, storage exhaustion, or other reasons):</t>
        
        <ol>
          <li><t>The node SHOULD append a hop-record with event-type set to 3
          (bundle-deletion) before generating any deletion status report.</t></li>
          <li><t>If bundle processing control flags request deletion reports,
          the node MUST include the Traceroute Extension Block (with the
          deletion hop-record) in the deletion status report.</t></li>
        </ol>
        
        <t>This enables the departure node to identify precise deletion
        locations and distinguish between network failures (no reports) and
        intentional deletion (deletion report received).</t>
      </section>
      
      <section anchor="status-reports">
        <name>Inclusion in Status Reports</name>
        
        <t>When a bundle contains a Traceroute Extension Block AND the bundle's
        processing control flags request reporting, nodes SHALL generate
        appropriate status reports with the Traceroute Extension Block included.
        This comprehensive reporting enables the departure node to distinguish
        between network failures (silence after last forwarding report) and
        intentional deletions (explicit deletion report with event-type=3).</t>
        
        <section anchor="forwarding-reports">
          <name>Forwarding Status Reports</name>
          
          <t>Intermediate nodes generating forwarding status reports:</t>
          
          <ol>
            <li><t>SHALL generate bundle forwarding status reports as requested
            by bundle processing control flags.</t></li>
            <li><t>MUST append a new hop-record for this node's forwarding event
            with: self-node-eid set to this node's EID; next-node-eid set to
            the next hop EID (the node this bundle is being forwarded to);
            event-type set to 1 (bundle-forwarding); dtn-timestamp set to
            current time; link-info set to determined values.</t></li>
            <li><t>MUST include the Traceroute Extension Block in the forwarding
            status report bundle, containing ALL previously accumulated
            hop-records (from bundle reception) PLUS the newly created
            hop-record from step 2.</t></li>
          </ol>
          
          <t>By including the forwarding hop-record in the status report, the
          departure node can identify:</t>
          
          <ul>
            <li><t>Last successful forwarding point: If forwarding fails, the
            last received status report shows which node forwarded to which
            next-hop.</t></li>
            <li><t>Failure location: If bundle disappears after Node N's
            forwarding report, the failure occurred between Node N and its
            declared next-hop (or at the next-hop itself).</t></li>
            <li><t>Complete forwarding chain: Each status report progressively
            builds the complete path topology.</t></li>
          </ul>
        </section>
        
        <section anchor="delivery-reports">
          <name>Delivery Status Reports</name>
          
          <t>The destination node MUST include the complete Traceroute Extension
          Block with all hop-records including the final delivery record
          (event-type=2) in the delivery status report. This confirms successful
          end-to-end delivery with full path visibility.</t>
        </section>
        
        <section anchor="deletion-reports">
          <name>Deletion Status Reports</name>
          
          <t>When a node deletes a bundle, it MUST include the Traceroute
          Extension Block with a deletion hop-record (event-type=3) appended
          in the deletion status report. This provides explicit notification
          of deletion location and reason (congestion, storage exhaustion,
          lifetime expiration, etc.).</t>
        </section>
      </section>
      
      <section anchor="completion">
        <name>Traceroute Completion</name>
        
        <t>A traceroute operation completes when the departure node receives
        sufficient information to determine the outcome. The following
        conditions define traceroute completion:</t>
        
        <section anchor="successful-completion">
          <name>Successful Completion</name>
          
          <t>A traceroute completes successfully when the departure node
          receives a delivery status report from the destination node
          containing the Traceroute Extension Block with event-type=2
          (bundle-delivery). The complete hop-records array provides
          full end-to-end path visibility.</t>
        </section>
        
        <section anchor="unsuccessful-completion">
          <name>Unsuccessful Completion</name>
          
          <t>A traceroute completes unsuccessfully under the following
          conditions:</t>
          
          <ul>
            <li><t>Deletion: The departure node receives a deletion status
            report containing the Traceroute Extension Block with event-type=3
            (bundle-deletion). The hop-records reveal the path up to the
            deletion point and the deleting node's identity.</t></li>
            <li><t>Truncation: The number of hop-records reaches hop-limit
            before the bundle reaches its destination. The traceroute data
            is incomplete but still provides partial path information.</t></li>
            <li><t>Timeout: No status report arrives within the expected
            time window. The last received forwarding status report (if any)
            indicates the last known successful hop. Silence after that point
            suggests failure between the last reporting node and its declared
            next-hop.</t></li>
          </ul>
        </section>
        
        <section anchor="partial-visibility">
          <name>Partial Path Visibility</name>
          
          <t>Even in unsuccessful cases, the accumulated hop-records provide
          diagnostic value. Operators can analyze:</t>
          
          <ul>
            <li><t>The path traversed before failure</t></li>
            <li><t>Per-hop timing to identify delay sources</t></li>
            <li><t>Link characteristics at each hop</t></li>
            <li><t>Congestion status along the path</t></li>
          </ul>
        </section>
      </section>
      
      <section anchor="fragmentation">
        <name>Fragmentation</name>
        
        <t>As required by <xref target="RFC9171"/> Section 5.8, this section
        defines rules for replication of the Traceroute Extension Block in
        bundle fragments.</t>
        
        <t>A Traceroute Extension Block SHALL have its "Block must be
        replicated in every fragment" processing control flag (bit 0) set
        to 0. Under <xref target="RFC9171"/> Section 5.8, the block is then
        replicated only into the fragment whose offset is zero. Exactly one
        Traceroute Extension Block survives reassembly, and its hop-records
        remain an unambiguous ordered path.</t>
        
        <t>A departure node creating a bundle specifically for traceroute
        diagnostics SHOULD set the "Bundle must not be fragmented" flag
        (bit 2) in the primary block to avoid fragmentation entirely.</t>
      </section>
      
      <section anchor="privacy">
        <name>Privacy and Policy Considerations</name>
        
        <t>Nodes MAY withhold sensitive information by setting link-info
        fields to their "unknown" values:</t>
        
        <sourcecode type="cddl">link-info = [0, 0, 0, 0]  ; All fields withheld</sourcecode>
        
        <t>A link-info array with any element set to 0 (unknown) SHALL NOT
        be treated as an error. This supports deployments where nodes in
        different administrative domains may have varying disclosure policies.</t>
      </section>
    </section>
    
    <section anchor="security">
      <name>Security Considerations</name>
      
      <section anchor="disclosure">
        <name>Information Disclosure</name>
        
        <t>The Traceroute Extension Block reveals network topology, node
        identities, link characteristics, and timing information. In
        sensitive environments, operators SHOULD:</t>
        
        <ul>
          <li>Use Bundle Protocol Security <xref target="RFC9172"/> to encrypt traceroute data</li>
          <li>Configure nodes to withhold sensitive link-info fields</li>
          <li>Restrict traceroute processing to authorized bundles</li>
        </ul>
      </section>
      
      <section anchor="amplification">
        <name>Amplification Attacks</name>
        
        <t>Unlike IP traceroute which generates ICMP responses, this
        mechanism does not generate additional bundles. The traceroute
        data travels with the original bundle, limiting amplification
        potential.</t>
      </section>
      
      <section anchor="exhaustion">
        <name>Resource Exhaustion</name>
        
        <t>A malicious actor could send bundles with large hop-limit values.
        Implementations SHOULD:</t>
        
        <ul>
          <li>Enforce a maximum hop-limit (suggested: 255)</li>
          <li>Rate-limit traceroute block processing</li>
          <li>Monitor for unusual traceroute patterns</li>
        </ul>
      </section>
    </section>
    
    <section anchor="iana">
      <name>IANA Considerations</name>
      
      <section anchor="iana-block">
        <name>Bundle Block Type Registration</name>
        
        <t>This document requests IANA to register the following entry in
        the "Bundle Block Types" registry:</t>
        
        <table>
          <thead>
            <tr><th>Value</th><th>Description</th><th>Reference</th></tr>
          </thead>
          <tbody>
            <tr><td>TBD1</td><td>Traceroute Extension Block</td><td>This document</td></tr>
          </tbody>
        </table>
      </section>
      
      <section anchor="iana-event">
        <name>Event Type Codes Registry</name>
        
        <t>This document requests IANA to create a new registry titled
        "Traceroute Extension Block Event Type Codes" with the following
        initial values:</t>
        
        <table>
          <thead>
            <tr><th>Value</th><th>Description</th><th>Reference</th></tr>
          </thead>
          <tbody>
            <tr><td>0</td><td>bundle-creation</td><td>This document</td></tr>
            <tr><td>1</td><td>bundle-forwarding</td><td>This document</td></tr>
            <tr><td>2</td><td>bundle-delivery</td><td>This document</td></tr>
            <tr><td>3</td><td>bundle-deletion</td><td>This document</td></tr>
            <tr><td>4-255</td><td>Unassigned</td><td></td></tr>
          </tbody>
        </table>
      </section>
      
      <section anchor="iana-link">
        <name>Link Type Codes Registry</name>
        
        <t>This document requests IANA to create a new registry titled
        "Traceroute Extension Block Link Type Codes" with the following
        initial values:</t>
        
        <table>
          <thead>
            <tr><th>Value</th><th>Description</th><th>Reference</th></tr>
          </thead>
          <tbody>
            <tr><td>0</td><td>unknown/not-applicable</td><td>This document</td></tr>
            <tr><td>1</td><td>RF (Radio Frequency)</td><td>This document</td></tr>
            <tr><td>2</td><td>optical/laser</td><td>This document</td></tr>
            <tr><td>3</td><td>internet/terrestrial</td><td>This document</td></tr>
            <tr><td>4</td><td>inter-satellite-link</td><td>This document</td></tr>
            <tr><td>5-255</td><td>Unassigned</td><td></td></tr>
          </tbody>
        </table>
      </section>
      
      <section anchor="iana-cl">
        <name>CL Type Codes Registry</name>
        
        <t>This document requests IANA to create a new registry titled
        "Traceroute Extension Block CL Type Codes" with the following
        initial values:</t>
        
        <table>
          <thead>
            <tr><th>Value</th><th>Description</th><th>Reference</th></tr>
          </thead>
          <tbody>
            <tr><td>0</td><td>unknown/not-applicable</td><td>This document</td></tr>
            <tr><td>1</td><td>LTP</td><td>This document</td></tr>
            <tr><td>2</td><td>TCPCLv3</td><td>This document</td></tr>
            <tr><td>3</td><td>TCPCLv4</td><td>This document</td></tr>
            <tr><td>4</td><td>UDPCL</td><td>This document</td></tr>
            <tr><td>5-255</td><td>Unassigned</td><td></td></tr>
          </tbody>
        </table>
      </section>
      
      <section anchor="iana-congestion">
        <name>Congestion Status Codes Registry</name>
        
        <t>This document requests IANA to create a new registry titled
        "Traceroute Extension Block Congestion Status Codes" with the
        following initial values:</t>
        
        <table>
          <thead>
            <tr><th>Value</th><th>Description</th><th>Reference</th></tr>
          </thead>
          <tbody>
            <tr><td>0</td><td>unknown</td><td>This document</td></tr>
            <tr><td>1</td><td>very-low (0-10%)</td><td>This document</td></tr>
            <tr><td>2</td><td>low (11-30%)</td><td>This document</td></tr>
            <tr><td>3</td><td>medium (31-60%)</td><td>This document</td></tr>
            <tr><td>4</td><td>high (61-80%)</td><td>This document</td></tr>
            <tr><td>5</td><td>very-high (81-100%)</td><td>This document</td></tr>
            <tr><td>6-100</td><td>exact percentage</td><td>This document</td></tr>
            <tr><td>101-255</td><td>Reserved</td><td></td></tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      
      <references>
        <name>Normative References</name>
        
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner"/>
            <date year="1997" month="March"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba"/>
            <date year="2017" month="May"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann"/>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman"/>
            <date year="2020" month="December"/>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        
        <reference anchor="RFC9171" target="https://www.rfc-editor.org/info/rfc9171">
          <front>
            <title>Bundle Protocol Version 7</title>
            <author initials="S." surname="Burleigh" fullname="S. Burleigh"/>
            <author initials="K." surname="Fall" fullname="K. Fall"/>
            <author initials="E." surname="Birrane" fullname="E. Birrane"/>
            <date year="2022" month="January"/>
          </front>
          <seriesInfo name="RFC" value="9171"/>
          <seriesInfo name="DOI" value="10.17487/RFC9171"/>
        </reference>
        
        <reference anchor="RFC9172" target="https://www.rfc-editor.org/info/rfc9172">
          <front>
            <title>Bundle Protocol Security (BPSec)</title>
            <author initials="E." surname="Birrane" fullname="E. Birrane"/>
            <author initials="K." surname="McKeever" fullname="K. McKeever"/>
            <date year="2022" month="January"/>
          </front>
          <seriesInfo name="RFC" value="9172"/>
          <seriesInfo name="DOI" value="10.17487/RFC9172"/>
        </reference>
      </references>
    </references>
    
    <section anchor="examples">
      <name>CBOR Encoding Examples</name>
      
      <t>This appendix provides complete CBOR encoding examples for
      representative scenarios.</t>
      
      <section anchor="cislunar">
        <name>Cislunar Scenario</name>
        
        <t>Network topology:</t>
        
        <artwork><![CDATA[
Earth Ground Station (ipn:1.0)
       |
       | RF link, 400,000 km, LTP
       v
Lunar Relay Satellite (ipn:2.0)
       |
       | RF link, 2,000 km, LTP
       v
Surface Rover (ipn:3.0)
]]></artwork>
        
        <t>Complete CBOR encoding (89 bytes):</t>
        
        <artwork><![CDATA[
83 00 18 20 83
85 82 02 82 01 00 82 02 82 02 00 00
   1B 00 00 00 C3 E1 D8 30 00 84 00 00 00 00
85 82 02 82 02 00 82 02 82 03 00 01
   1B 00 00 00 C3 E1 D8 35 3C 84 01 1A 00 06 1A 80 01 00
85 82 02 82 03 00 82 02 82 03 00 02
   1B 00 00 00 C3 E1 D8 35 46 84 01 19 07 D0 01 00
]]></artwork>
      </section>
      
      <section anchor="outer-solar">
        <name>Outer Solar System Scenario (uint64 Required)</name>
        
        <t>For Neptune distances (4.5 billion km), link-distance exceeds
        uint32 maximum (4,294,967,295), requiring uint64 encoding:</t>
        
        <artwork><![CDATA[
link-info = [1, 4500000000, 1, 3]

CBOR: 84 01 1B 00 00 00 01 0C 38 8D 00 01 03
           ^^ uint64 marker
]]></artwork>
        
        <t>This validates the design decision to use unconstrained CBOR
        uint for link-distance.</t>
      </section>
    </section>
    
    <section anchor="size">
      <name>Size Analysis</name>
      
      <table>
        <thead>
          <tr><th>Scenario</th><th>Distance</th><th>Total Size</th><th>Size/Hop</th></tr>
        </thead>
        <tbody>
          <tr><td>Cislunar</td><td>400,000 km</td><td>89 bytes</td><td>~28 bytes</td></tr>
          <tr><td>Mars</td><td>225,000,000 km</td><td>93 bytes</td><td>~29 bytes</td></tr>
          <tr><td>Neptune</td><td>4,500,000,000 km</td><td>101 bytes</td><td>~32 bytes</td></tr>
        </tbody>
      </table>
      
      <t>Formula: TracerouteEB_size ~= 10 + (28-32 * hops) bytes</t>
    </section>
    
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      
      <t>The author thanks the CCSDS SIS-DTN Working Group for their
      input on DTN diagnostic requirements.</t>
    </section>
  </back>
</rfc>
