<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-taylor-dtn-dpp-02" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="DPP">DTN Peering Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-taylor-dtn-dpp-02"/>
    <author fullname="Rick Taylor">
      <organization>Aalyria Technologies</organization>
      <address>
        <email>rtaylor@aalyria.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="23"/>
    <area>Internet</area>
    <workgroup>Delay/Disruption Tolerant Networking</workgroup>
    <keyword>DTN</keyword>
    <keyword>peering</keyword>
    <keyword>routing</keyword>
    <keyword>delay-tolerant networking</keyword>
    <abstract>
      <?line 100?>

<t>This document specifies the DTN Peering Protocol (DPP), an inter-domain
routing protocol for the Delay-Tolerant Networking (DTN) ecosystem. DPP
facilitates the exchange of reachability information between distinct
Administrative Domains (ADs), enabling inter-domain routing across networks
operated by different agencies and organizations. DPP separates the control
plane from the data plane: a DPP
speaker need not be a gateway that forwards bundles, allowing centralized
route controllers or orchestration systems to participate in peering on
behalf of the gateways they manage.</t>
      <t>DPP advertises the reachability of bundle nodes in both DTN addressing
schemes, <tt>ipn</tt> (integer-based) and <tt>dtn</tt> (name-based), and selects routes
for both by the same process. DPP speakers
authenticate each other using mutual TLS, with each Administrative Domain
authorizing its speakers' keys through DNSSEC-signed TLSA records. DPP
supports both persistent routes and routes tied to the scheduled contact
windows of deep-space networks.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ricktaylor.github.io/dpp/draft-taylor-dtn-dpp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-taylor-dtn-dpp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Delay/Disruption Tolerant Networking Working Group mailing list (<eref target="mailto:dtn@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/dtn/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dtn/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ricktaylor/dpp"/>.</t>
    </note>
  </front>
  <middle>
    <?line 121?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The DTN Peering Protocol (DPP) exchanges reachability information between
distinct Administrative Domains (ADs) of a Delay-Tolerant Network. It is an
inter-domain routing protocol, analogous in role to BGP <xref target="RFC4271"/> in the
Internet, and complements, rather than replaces, the routing that each AD
uses internally.</t>
      <t>A DPP speaker, acting for an AD, establishes an authenticated session with
a speaker of a neighboring AD, over which each advertises the bundle nodes
that are reachable through its AD, together with the gateway to which
bundles for those nodes should be sent and attributes such as when the
route is available. A speaker that receives routes selects among them, uses
the result to direct the forwarding of bundles by the gateways of its own
AD, and may advertise it onward to other ADs, offering transit. How a
speaker configures its AD's gateways is outside the scope of this
document.</t>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>Two DPP speakers establish a session to exchange reachability information
across administrative boundaries. Common scenarios include:</t>
        <dl>
          <dt>Inter-Agency Connectivity:</dt>
          <dd>
            <t>Two space agencies operate independent DTN infrastructures. DPP allows
their border gateways to advertise which spacecraft and ground stations
are reachable through each network, enabling bundles to flow between
agencies.</t>
          </dd>
          <dt>Commercial-Government Integration:</dt>
          <dd>
            <t>A commercial satellite operator peers with a government science network. DPP
enables the commercial network to advertise transit capacity to deep-space
assets, while the science network advertises its spacecraft endpoints.</t>
          </dd>
          <dt>Redundant Path Discovery:</dt>
          <dd>
            <t>A Mars relay satellite is reachable via two ground station complexes. If
both complexes belong to the same AD, DPP allows both paths to be
advertised with appropriate metrics, enabling the network to prefer one
path while maintaining the other as backup. If they belong to different
ADs, each AD advertises its own path, and peers choose between them by
local policy, estimated delivery time, and path length.</t>
          </dd>
          <dt>Scheduled Contact Windows:</dt>
          <dd>
            <t>Deep-space links are available only during planned contact windows. DPP's
time-variant routing attributes allow DPP speakers to advertise future
connectivity, enabling proactive bundle scheduling.</t>
          </dd>
          <dt>Independent Intra-Domain Routing:</dt>
          <dd>
            <t>DPP plays the role of an exterior gateway protocol: it carries routing
information between ADs and leaves each AD free to choose how it routes
bundles internally. One AD might use Contact Graph Routing (CGR),
standardized by CCSDS as Schedule-Aware Bundle Routing (SABR)
<xref target="CCSDS-SABR"/>; another might use static routes, or routes computed by
its mission planning or network orchestration systems. DPP speakers
advertise reachability derived from whatever their AD uses internally,
and peers need neither know nor share that mechanism. This also avoids
any need for a single contact plan spanning all agencies, spacecraft, and
ground stations: each organization maintains its own mission planning
systems and contact schedules, and the cost of contact-based routing
grows with network size.</t>
          </dd>
        </dl>
      </section>
      <section anchor="design-principles">
        <name>Design Principles</name>
        <dl>
          <dt>Transport:</dt>
          <dd>
            <t>Messages are defined using Protocol Buffers <xref target="PROTOBUF"/> and carried
over gRPC <xref target="GRPC"/>, and so over any transport that gRPC supports.</t>
          </dd>
          <dt>Both EID schemes:</dt>
          <dd>
            <t>Reachability is carried for both the <tt>ipn</tt> and <tt>dtn</tt> schemes, and routes
for both are selected by the same process.</t>
          </dd>
          <dt>DNS-rooted identity:</dt>
          <dd>
            <t>ADs are identified by DNS domain names, and each AD uses its own DNS
zone to authorize the speakers that act on its behalf.</t>
          </dd>
          <dt>Identity separate from reachability:</dt>
          <dd>
            <t>An AD's identity is independent of the nodes it advertises routes for.</t>
          </dd>
        </dl>
      </section>
      <section anchor="scope">
        <name>Scope</name>
        <t>This specification defines the protocol messages, state machine, and
operational requirements for DPP implementations. It does not define:</t>
        <ul spacing="normal">
          <li>
            <t>Routing within an Administrative Domain (e.g., CGR or static routing),
which is chosen independently by each AD</t>
          </li>
          <li>
            <t>How a DPP speaker configures the gateways of its AD with the routes it
has selected</t>
          </li>
          <li>
            <t>Bundle forwarding algorithms</t>
          </li>
          <li>
            <t>Policy languages for route filtering</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<section anchor="definitions">
        <name>Definitions</name>
        <dl>
          <dt>Administrative Domain (AD):</dt>
          <dd>
            <t>An autonomous unit of routing control identified by a DNS domain name.
Examples include agency networks (e.g., <tt>dsn.example.org</tt>), commercial
providers, or research institutions.</t>
          </dd>
          <dt>DPP Speaker:</dt>
          <dd>
            <t>An entity that participates in the DPP protocol, maintaining peering
sessions with other DPP speakers and exchanging route information on behalf
of an Administrative Domain. A DPP speaker may be a gateway, a centralized
route controller, or any other system authorized to advertise and receive
routes for its AD.</t>
          </dd>
          <dt>Gateway:</dt>
          <dd>
            <t>A bundle node within an Administrative Domain that forwards bundles to
or from other ADs. A gateway may or may not also be a DPP speaker. A
route names the gateway to which bundles should be sent
(<xref target="gateway-eid-resolution"/>).</t>
          </dd>
          <dt>Session:</dt>
          <dd>
            <t>A connection between two DPP speakers over which routes are exchanged.
The speaker that opens the connection is the Initiator; the other is the
Responder. Once a session is established the roles are symmetric.</t>
          </dd>
          <dt>Route:</dt>
          <dd>
            <t>A statement, received over a session, that bundles for the nodes matching
an EID pattern can be delivered via the advertising AD, together with
the attributes of that statement. A speaker also holds routes that it
originates for nodes within its own AD.</t>
          </dd>
          <dt>EID Pattern:</dt>
          <dd>
            <t>A pattern matching one or more Bundle Protocol <xref target="RFC9171"/> Endpoint
Identifiers, as defined in <xref target="I-D.ietf-dtn-eid-pattern"/> and
<xref target="I-D.taylor-dtn-eid-pattern-dtn"/>.</t>
          </dd>
          <dt>AD_PATH:</dt>
          <dd>
            <t>The ordered list of Administrative Domains that a route has traversed,
most recent first. The last entry is the originating AD. DPP is a
path-vector protocol: AD_PATH is used to detect loops and to compare path
lengths, as AS_PATH is in BGP.</t>
          </dd>
          <dt>Metric:</dt>
          <dd>
            <t>A numeric value set by the originating AD to express its preference
among routes into its own network. It is analogous to BGP's Multi-Exit
Discriminator, with the differences described in <xref target="metric"/>.</t>
          </dd>
          <dt>Local preference:</dt>
          <dd>
            <t>A preference that a speaker assigns to routes by local policy, for
example by originating AD or by the peer from which they were learned.
It is the first criterion of route selection after specificity
(<xref target="route-selection"/>).</t>
          </dd>
          <dt>Transitive:</dt>
          <dd>
            <t>A flag carried with an attribute whose type the receiving speaker may
not understand, telling such a speaker whether to propagate the
attribute unchanged when it re-advertises the route, or to drop it
(<xref target="forward-compatibility"/>). It says nothing about how a speaker that
does understand the attribute treats it.</t>
          </dd>
          <dt>Routing Information Base (RIB):</dt>
          <dd>
            <t>The set of routes a speaker holds, from all sessions and its own
origination, from which it selects routes. This document does not
prescribe how it is organized.</t>
          </dd>
          <dt>Forwarding Information Base (FIB):</dt>
          <dd>
            <t>The table used by a gateway to forward bundles. A speaker populates the
FIBs of its AD's gateways from the routes it selects; how it does so is
outside the scope of this document.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="architecture-overview">
      <name>Architecture Overview</name>
      <section anchor="architecture-ads">
        <name>Administrative Domains</name>
        <t>An Administrative Domain is an autonomous unit of routing control.</t>
        <dl>
          <dt>Identity:</dt>
          <dd>
            <t>An AD is identified solely by a DNS domain name (e.g., <tt>dsn.example.org</tt>).
Wherever an AD identity appears in DPP, in a <tt>Hello</tt>, in AD_PATH, or in
AD_SET, it is a fully qualified domain name without a trailing dot,
with any internationalized labels in A-label form
(<xref section="2.3.2.1" sectionFormat="of" target="RFC5890"/>). Two AD identities are the same if
they are equal under case-insensitive ASCII comparison.</t>
          </dd>
          <dt>Independence:</dt>
          <dd>
            <t>An AD Identity is distinct from the nodes it advertises. An AD named
<tt>dsn.example.org</tt> may advertise <tt>ipn:100.*.*</tt> and
<tt>dtn://rover1.example.org/**</tt>.</t>
          </dd>
          <dt>Advertising versus originating:</dt>
          <dd>
            <t>An AD that advertises a route is not necessarily the AD that originates it.
An AD originates routes for the resources it serves, and may also
re-advertise routes learned from other ADs, providing transit. The
originating AD is identified by the last element of the route's AD_PATH
(see <xref target="loop-detection"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="dpp-speakers-and-gateways">
        <name>DPP Speakers and Gateways</name>
        <t>DPP speakers and gateways are defined in <xref target="definitions"/>. A DPP speaker and
a gateway <bcp14>MAY</bcp14> be the same node, but they need not be. For example, a
centralized route controller may run DPP sessions on behalf of multiple
gateways within its AD, naming the appropriate gateway in each route it
advertises. This separation of the control plane (DPP) from the data plane
(bundle forwarding) allows flexible deployment topologies.</t>
        <t>An Administrative Domain <bcp14>MAY</bcp14> deploy multiple DPP speakers, each maintaining
independent sessions with external ADs. Because loop detection operates on
AD identity rather than on individual speaker identity, routes that leave
an AD through one speaker and return through another are detected as loops
(<xref target="loop-detection"/>). Keeping the routes selected by an AD's several
speakers consistent with one another, so that the AD's gateways forward
coherently, is an intra-domain matter outside the scope of this document.</t>
      </section>
      <section anchor="deployment-model">
        <name>Deployment Model</name>
        <t>DPP depends on DNS, which is not available on spacecraft and requires
low-latency connectivity. This is compatible with deep-space deployment
because of where the protocol's components sit:</t>
        <dl>
          <dt>DPP speakers are ground infrastructure.</dt>
          <dd>
            <t>DPP operates at administrative boundaries. DPP speakers are ground
stations, mission control centers, network operations facilities, or
centralized route controllers, all of which have Internet connectivity
and can perform DNS lookups. Gateways, by contrast, are the forwarding
nodes that handle bundle traffic and may be located anywhere, including
on spacecraft or relay satellites, since they need neither DNS access nor
direct participation in DPP.</t>
          </dd>
          <dt>DNS is used at session establishment only.</dt>
          <dd>
            <t>DPP performs DNS lookups only when establishing a session, to find a
peer's DPP service and to retrieve the TLSA records that authorize the
peer's key. Once a session is established, no further DNS queries are
required, and the session is unaffected by the subsequent unavailability
of DNS.</t>
          </dd>
          <dt>Spacecraft do not run DPP.</dt>
          <dd>
            <t>Spacecraft run the Bundle Protocol and may use CGR or static routing for
their own forwarding decisions, under instructions from their ground-based
mission operations, which participate in DPP on their behalf. Spacecraft
and relay satellites <bcp14>MAY</bcp14> serve as gateways, forwarding bundles between
ADs, without participating in DPP: a ground-based DPP speaker advertises
routes on their behalf, naming the in-space node as the gateway.</t>
          </dd>
        </dl>
        <t>As with BGP, the systems that run the routing protocol require connectivity
that the systems they route for need not have.</t>
      </section>
    </section>
    <section anchor="trust">
      <name>Trust and Verification Model</name>
      <t>DPP uses DNS as the root of trust for Administrative Domain identities. An
AD authorizes DPP speakers to act on its behalf by publishing, in its own
DNS zone, TLSA records <xref target="RFC6698"/> that identify the speakers' keys. DPP
speakers authenticate each other using mutual TLS <xref target="RFC8446"/>, and each
verifies that the key its peer presented in the TLS handshake is one that
the peer's claimed AD has authorized, following the DNS-Based
Authentication of Named Entities (DANE) model <xref target="RFC7671"/>.</t>
      <t>Because the key authorized in DNS is the key that authenticates the TLS
connection, the proof of authorization is bound to the session itself.</t>
      <t>In the anticipated mode of operation, a DPP speaker is provisioned with a
list of DNS domain names, one for each Administrative Domain with which its
operator wishes to peer. The speaker uses each name to verify the identity
of the corresponding peer (as described below), and may also use it to
discover how to reach that peer's DPP service.</t>
      <section anchor="dns-records">
        <name>DNS Records at _dpp</name>
        <t>An AD publishes the records used by DPP at the owner name
<tt>_dpp.&lt;AD-Domain&gt;</tt>. The <tt>_dpp</tt> label is specific to this protocol: the
records it holds authorize and locate DPP speakers, and do not describe
DTN nodes or convergence layers in general.</t>
        <t>The zone containing these records <bcp14>MUST</bcp14> be signed with DNSSEC <xref target="RFC9364"/>.</t>
        <section anchor="tlsa-records">
          <name>Authorization: TLSA Records</name>
          <t>To authorize a DPP speaker to act for an AD Identity (e.g.,
<tt>dsn.example.org</tt>), the administrator <bcp14>MUST</bcp14> publish a TLSA record <xref target="RFC6698"/>
for the speaker's key at <tt>_dpp.&lt;AD-Domain&gt;</tt>:</t>
          <artwork><![CDATA[
_dpp.<AD-Domain>.  IN  TLSA  <usage> <selector> <mtype> <data>
]]></artwork>
          <t>This owner name differs from the <tt>_port._protocol.host</tt> form described in
<xref section="3" sectionFormat="of" target="RFC6698"/>: the records authorize keys to act for an AD, not
for a service at a particular host and port, so they are published under
the AD's own name. A speaker's TLSA record is therefore independent of the
speaker's hostname, and of whether the speaker accepts incoming sessions.</t>
          <t>The consequences of this naming are as follows. The owner name is
registered for the TLSA RR type in the "Underscored and Globally Scoped
DNS Node Names" registry (<xref target="iana-underscore"/>), as <xref target="RFC8552"/> requires
for any underscored name used with a given RR type. The rules of
<xref section="3" sectionFormat="of" target="RFC6698"/> and <xref section="7" sectionFormat="of" target="RFC7671"/> for deriving the
TLSA base domain from a transport name, port, and CNAME chain do not
apply: the base domain is always <tt>_dpp.&lt;AD-Domain&gt;</tt> for the AD named in
the peer's <tt>Hello</tt>, and a speaker <bcp14>MUST NOT</bcp14> derive it from the hostname it
connected to or from any SVCB record. The same records serve to
authenticate both the Initiator and the Responder, whereas <xref target="RFC6698"/> and
<xref target="RFC7671"/> describe the authentication of a TLS server only. Because the
certificate usage is DANE-EE(3), the names in the certificate are not
checked (<xref section="5.1" sectionFormat="of" target="RFC7671"/>), which is what allows the
authorization to be independent of the speaker's hostname.</t>
          <t>The following rules apply:</t>
          <ul spacing="normal">
            <li>
              <t>The certificate usage <bcp14>MUST</bcp14> be DANE-EE(3) (<xref section="5.1" sectionFormat="of" target="RFC7671"/>).
Records with any other certificate usage <bcp14>MUST</bcp14> be treated as unusable. As
a consequence, a speaker's certificate need not be issued by any
certification authority, and the names and validity period in the
certificate are ignored; a self-signed certificate is sufficient.</t>
            </li>
            <li>
              <t>Implementations <bcp14>MUST</bcp14> support the SubjectPublicKeyInfo selector, SPKI(1),
and the SHA2-256(1) matching type. ADs <bcp14>SHOULD</bcp14> publish "3 1 1" records, as
recommended in <xref section="5.1" sectionFormat="of" target="RFC7671"/>. Because such a record matches
the speaker's public key rather than its certificate, it need not change
when the certificate is renewed with the same key.</t>
            </li>
          </ul>
          <t>Example:</t>
          <artwork><![CDATA[
_dpp.dsn.example.org.  IN  TLSA  3 1 1 (
    8f3a5e...c2 )
]]></artwork>
        </section>
        <section anchor="svcb-records">
          <name>Discovery: SVCB Records</name>
          <t>An AD whose DPP speakers accept incoming sessions <bcp14>MAY</bcp14> also publish SVCB
records <xref target="RFC9460"/> at <tt>_dpp.&lt;AD-Domain&gt;</tt>, identifying the hosts and
ports at which those speakers can be reached. An Initiator <bcp14>MAY</bcp14> use these
records to locate a peer's DPP service, or <bcp14>MAY</bcp14> instead be configured with
the peer's address; in the terms of <xref section="3" sectionFormat="of" target="RFC9460"/>, DPP is
SVCB-optional. SVCB records play no part in authorization: a speaker
listed in an SVCB record is authorized only if it presents a key matching
a TLSA record.</t>
          <section anchor="svcb-mapping">
            <name>SVCB Protocol Mapping for DPP</name>
            <t>This subsection is the protocol mapping for DPP required by
<xref section="2.4.3" sectionFormat="of" target="RFC9460"/>.</t>
            <dl>
              <dt>Query name:</dt>
              <dd>
                <t><tt>_dpp.&lt;AD-Domain&gt;</tt>, where <tt>&lt;AD-Domain&gt;</tt> is the AD Identity. Port Prefix
Naming (<xref section="2.3" sectionFormat="of" target="RFC9460"/>) is not used: the port is carried in
the <tt>port</tt> SvcParam, and no port label is prepended.</t>
              </dd>
              <dt>Authentication name:</dt>
              <dd>
                <t>None. The TLS connection to a DPP speaker is authenticated against the
TLSA records at <tt>_dpp.&lt;AD-Domain&gt;</tt> (<xref target="tlsa-records"/>), not against the
TargetName. The TargetName therefore need not appear in the speaker's
certificate, and a speaker reached through an SVCB record is
authenticated in exactly the same way as one reached through
configuration.</t>
              </dd>
              <dt>Default ALPN set:</dt>
              <dd>
                <t><tt>h2</tt>, since DPP is carried over gRPC <xref target="GRPC"/>, which uses HTTP/2. The
<tt>alpn</tt> SvcParam <bcp14>MAY</bcp14> be used to list additional protocols that the
speaker supports for gRPC, and <tt>no-default-alpn</tt> <bcp14>MAY</bcp14> be used to
exclude <tt>h2</tt>. There is no DPP-specific ALPN identifier.</t>
              </dd>
              <dt>Applicable SvcParamKeys:</dt>
              <dd>
                <t><tt>mandatory</tt>, <tt>alpn</tt>, <tt>no-default-alpn</tt>, <tt>port</tt>, <tt>ipv4hint</tt>, and
<tt>ipv6hint</tt>, with the meanings given in <xref section="7" sectionFormat="of" target="RFC9460"/>. Other
keys <bcp14>MUST</bcp14> be ignored.</t>
              </dd>
              <dt>Default port:</dt>
              <dd>
                <t>50051, the port conventionally used by gRPC services. No port is
assigned to DPP by IANA; see <xref target="iana-future"/>. A ServiceMode record that
lacks the <tt>port</tt> SvcParam directs the Initiator to the default port
(<xref section="7.2" sectionFormat="of" target="RFC9460"/>). An Initiator that is configured with a
peer's address, rather than discovering it, likewise uses the default
port unless configured otherwise.</t>
              </dd>
              <dt>Automatically mandatory keys:</dt>
              <dd>
                <t>None.</t>
              </dd>
              <dt>AliasMode:</dt>
              <dd>
                <t>Permitted, but <bcp14>NOT RECOMMENDED</bcp14>, for the reasons given in
<xref section="6" sectionFormat="of" target="RFC9461"/> for a comparable protocol. Whether or not an
alias is followed, the TLSA records used for authorization are those at
<tt>_dpp.&lt;AD-Domain&gt;</tt> for the AD named in the peer's <tt>Hello</tt>, never those
at an alias target.</t>
              </dd>
            </dl>
            <t>The TargetName of each ServiceMode record <bcp14>SHOULD</bcp14> be the hostname of a DPP
speaker. A TargetName of "." would make the <tt>_dpp</tt> owner name the
effective TargetName (<xref section="2.5.2" sectionFormat="of" target="RFC9460"/>), requiring address
records at a name beginning with an underscore label, which some
authoritative servers cannot publish (<xref section="10.3" sectionFormat="of" target="RFC9460"/>).</t>
            <t>Examples, the first using the default port and the second a port chosen
by the operator:</t>
            <artwork><![CDATA[
_dpp.dsn.example.org.  IN  SVCB  1 speaker.dsn.example.org.
_dpp.dsn.example.org.  IN  SVCB  2 backup.dsn.example.org. port=4600
]]></artwork>
          </section>
        </section>
        <section anchor="multiple-speakers">
          <name>Multiple DPP Speakers per AD</name>
          <t>An Administrative Domain that deploys multiple DPP speakers has two options
for key management:</t>
          <dl>
            <dt>Shared key:</dt>
            <dd>
              <t>All speakers share a single key pair. The AD publishes one TLSA record and
distributes the private key to each speaker. This is operationally simple
but means that compromise of any single speaker exposes the key for the
entire AD.</t>
            </dd>
            <dt>Per-speaker keys:</dt>
            <dd>
              <t>Each speaker has its own key pair, and the AD publishes one TLSA record
for each. A peer accepts any speaker whose key matches one of the records.</t>
            </dd>
          </dl>
          <t>Per-speaker keys provide better operational security: a compromised speaker
can be revoked by removing its TLSA record, without affecting other
speakers in the AD. The choice between shared and per-speaker keys is a
local operational decision and is transparent to the peering partner.</t>
          <t>The same mechanism allows an AD to delegate peering to a third party, such
as a network operations provider that runs DPP speakers on the AD's behalf.
The AD publishes a TLSA record for the delegate's key. The delegate never
holds a credential for the AD's zone, and the delegation is revoked by
removing the record.</t>
          <t>Example with per-speaker keys, one of them delegated, and SVCB records for
the two speakers that accept incoming sessions:</t>
          <artwork><![CDATA[
; Speakers accepting incoming sessions, on the default port
_dpp.dsn.example.org.  IN  SVCB  1 gds.dsn.example.org.
_dpp.dsn.example.org.  IN  SVCB  2 cbr.dsn.example.org.

; Keys authorized to act for dsn.example.org
_dpp.dsn.example.org.  IN  TLSA  3 1 1 (
    8f3a5e...c2 )   ; Goldstone
_dpp.dsn.example.org.  IN  TLSA  3 1 1 (
    51d07b...9e )   ; Canberra
_dpp.dsn.example.org.  IN  TLSA  3 1 1 (
    a7e214...41 )   ; Delegated operator (initiates only)
]]></artwork>
        </section>
      </section>
      <section anchor="handshake">
        <name>Session Establishment and Authentication</name>
        <t>A DPP session is established as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>TLS: The Initiator opens a TLS connection to the Responder. Both
speakers <bcp14>MUST</bcp14> use TLS 1.3 <xref target="RFC8446"/> or later, and both <bcp14>MUST</bcp14> present a
certificate: the Responder <bcp14>MUST</bcp14> request a certificate from the
Initiator, and <bcp14>MUST</bcp14> abort the connection if none is provided. The
Responder does not learn which AD the Initiator claims to represent
until it receives the Initiator's <tt>Hello</tt>, so it accepts the
Initiator's certificate provisionally and completes its verification in
step 5.</t>
          </li>
          <li>
            <t>Hello: Once the gRPC stream is established, each speaker <bcp14>MUST</bcp14> send a
<tt>Hello</tt> message, containing its <tt>local_ad_id</tt>, as its first message on
the stream. A speaker need not wait for its peer's <tt>Hello</tt> before
sending its own.</t>
          </li>
          <li>
            <t>Peer check: On receiving the peer's <tt>Hello</tt>, the Initiator <bcp14>MUST</bcp14> reject
the session if the <tt>local_ad_id</tt> it contains is not the AD to which the
Initiator intended to connect. The Responder <bcp14>MUST</bcp14> reject the session if
the <tt>local_ad_id</tt> is not an AD with which it is configured to peer. AD
identities are compared as described in <xref target="architecture-ads"/>; a
<tt>local_ad_id</tt> that is not a valid domain name in that form is treated
as not matching. Performing this check before the DNS lookup prevents
an unauthenticated peer from causing lookups of arbitrary names. Either speaker <bcp14>MUST</bcp14> also
reject the session if the <tt>version</tt> in the peer's <tt>Hello</tt> is not one it
supports, or if the peer's <tt>hold_time_seconds</tt> is unacceptable
(<xref target="hold-time"/>).</t>
          </li>
          <li>
            <t>Lookup: The speaker <bcp14>MUST</bcp14> query DNS for TLSA records at
<tt>_dpp.&lt;local_ad_id&gt;</tt>, where <tt>local_ad_id</tt> is the AD named in the
peer's <tt>Hello</tt>. The TLSA RRset <bcp14>MUST</bcp14> be validated as secure using
DNSSEC. The speaker <bcp14>MUST</bcp14> either perform DNSSEC validation itself, or
obtain the validation result from a validating resolver that it
trusts and that it reaches over a channel protected from
modification, as described in <xref section="4.9.3" sectionFormat="of" target="RFC4035"/>; an AD
bit received over an unprotected channel <bcp14>MUST NOT</bcp14> be relied on. If
the validation state is insecure, indeterminate, or bogus, or the
RRset contains no usable records (<xref section="4.1" sectionFormat="of" target="RFC6698"/>), the
speaker <bcp14>MUST</bcp14> reject the session.</t>
          </li>
          <li>
            <t>Verification: The certificate that the peer presented in the TLS
handshake <bcp14>MUST</bcp14> match at least one usable TLSA record, using the
DANE-EE matching rules of <xref section="5.1" sectionFormat="of" target="RFC7671"/>. If none matches,
the speaker <bcp14>MUST</bcp14> reject the session.</t>
          </li>
        </ol>
        <t>A speaker that rejects a session <bcp14>SHOULD</bcp14> send a <tt>Notification</tt> with an
appropriate error code before closing the stream. From each speaker's point
of view, the session is ESTABLISHED once it has both sent its own <tt>Hello</tt>
and verified its peer's. A speaker <bcp14>MUST NOT</bcp14> send <tt>RouteUpdate</tt> messages
before then.</t>
        <t>Because the Initiator knows which AD it is connecting to, it <bcp14>MAY</bcp14> perform
steps 4 and 5 for the Responder during the TLS handshake itself, and so
avoid sending its <tt>Hello</tt> to an unauthorized peer.</t>
        <t>DNS is consulted only during session establishment, and an established
session is not affected by the subsequent unavailability of DNS. A speaker
<bcp14>MAY</bcp14> periodically repeat steps 4 and 5 for an established session, and
terminate the session if the peer's key is no longer authorized. A lookup
failure during such a check <bcp14>MUST NOT</bcp14> by itself cause the session to be
terminated.</t>
      </section>
    </section>
    <section anchor="session-state-machine">
      <name>Session State Machine</name>
      <t>A conformant DPP speaker <bcp14>MUST</bcp14> implement the following session state
machine. The messages it refers to are defined in <xref target="protocol-definition"/>.
The state machine, like the decision process of <xref target="route-selection"/>, is
conceptual: an implementation need not be structured as described,
provided that its externally visible behavior is the same.</t>
      <section anchor="states">
        <name>States</name>
        <t>Both speakers run the same state machine. The steps referred to are those
of <xref target="handshake"/>.</t>
        <table>
          <thead>
            <tr>
              <th align="left">State</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">CONNECTING</td>
              <td align="left">TLS connection established with certificates exchanged, and gRPC stream open (step 1); the peer is not yet verified. Speaker <bcp14>MUST</bcp14> send its <tt>Hello</tt> and move to HELLO_SENT.</td>
            </tr>
            <tr>
              <td align="left">HELLO_SENT</td>
              <td align="left">
                <tt>Hello</tt> sent; waiting for the peer's <tt>Hello</tt>. Upon receipt, speaker moves to VERIFYING.</td>
            </tr>
            <tr>
              <td align="left">VERIFYING</td>
              <td align="left">Peer's <tt>Hello</tt> received. Speaker performs the peer check, DNS lookup, and verification (steps 3-5). On success, it moves to ESTABLISHED.</td>
            </tr>
            <tr>
              <td align="left">ESTABLISHED</td>
              <td align="left">Peer verified. Speaker <bcp14>MAY</bcp14> send and receive <tt>RouteUpdate</tt> and <tt>KeepAlive</tt> messages, beginning with the initial route exchange (<xref target="initial-exchange"/>).</td>
            </tr>
            <tr>
              <td align="left">CLOSING</td>
              <td align="left">The session is ending, because of an error or an orderly close. Speaker <bcp14>MUST</bcp14> send a <tt>Notification</tt> (if it has not already received one that ends the session, and if it can) and close the stream (<xref target="termination"/>).</td>
            </tr>
          </tbody>
        </table>
        <t>A <tt>Notification</tt> <bcp14>MAY</bcp14> be sent and received in any state.</t>
        <t>A speaker <bcp14>MUST</bcp14> move to CLOSING, sending the <tt>Notification</tt> code shown, if:</t>
        <ul spacing="normal">
          <li>
            <t>any step of <xref target="handshake"/> fails (<tt>UNSUPPORTED_VERSION</tt>, <tt>UNEXPECTED_AD</tt>,
<tt>AUTHORIZATION_FAILED</tt>, or <tt>UNACCEPTABLE_HOLD_TIME</tt>, as appropriate);</t>
          </li>
          <li>
            <t>it receives any message other than <tt>Hello</tt> or <tt>Notification</tt> before
reaching ESTABLISHED, or a second <tt>Hello</tt> on the same stream
(<tt>UNEXPECTED_MESSAGE</tt>);</t>
          </li>
          <li>
            <t>the session does not reach ESTABLISHED within a locally configured time
(<tt>UNSPECIFIED</tt>);</t>
          </li>
          <li>
            <t>the hold timer expires (<xref target="hold-time"/>; <tt>HOLD_TIMER_EXPIRED</tt>);</t>
          </li>
          <li>
            <t>it receives more routes from the peer than it will accept
(<xref target="denial-of-service"/>; <tt>MAX_ROUTES_EXCEEDED</tt>); or</t>
          </li>
          <li>
            <t>it decides to close the session for any other reason (<tt>CEASE</tt>, or
<tt>CONNECTION_COLLISION</tt> in the case of <xref target="sessions"/>).</t>
          </li>
        </ul>
        <t>A speaker <bcp14>MUST</bcp14> also move to CLOSING, without sending a <tt>Notification</tt>, if
it receives a <tt>Notification</tt> whose code ends the session
(<xref target="control-messages"/>), or if the gRPC stream is closed by the peer or
fails.</t>
        <t>In the ESTABLISHED state, a speaker that receives a <tt>PeerMessage</tt> whose
payload it does not recognize, or a <tt>Hello</tt>, <bcp14>SHOULD</bcp14> send a <tt>Notification</tt>
with level <tt>WARNING</tt> and code <tt>UNEXPECTED_MESSAGE</tt>, and <bcp14>MUST</bcp14> otherwise
ignore the message. A speaker <bcp14>MUST NOT</bcp14> send a message defined by an
extension that is not in effect on the session (<xref target="identity-message"/>).</t>
      </section>
      <section anchor="hold-time">
        <name>Hold Time and Keepalives</name>
        <t>Each speaker proposes a hold time in the <tt>hold_time_seconds</tt> field of its
<tt>Hello</tt>, which <bcp14>MUST</bcp14> be at least 3 seconds. A speaker that receives a
<tt>Hello</tt> with a <tt>hold_time_seconds</tt> of less than 3 <bcp14>MUST</bcp14> reject the session
with code <tt>UNACCEPTABLE_HOLD_TIME</tt>. The hold time for the session is the
smaller of the two values.</t>
        <t>In the ESTABLISHED state, a DPP speaker <bcp14>MUST</bcp14> send <tt>KeepAlive</tt> messages at
intervals not exceeding one third of the session hold time. If a speaker
receives no message from its peer for a period equal to the session hold
time, it <bcp14>MUST</bcp14> move to CLOSING with code <tt>HOLD_TIMER_EXPIRED</tt>.</t>
      </section>
      <section anchor="initial-exchange">
        <name>Initial Route Exchange</name>
        <t>On entering ESTABLISHED, a speaker <bcp14>MUST</bcp14> send to its peer every route that
it would advertise to that peer at that time (<xref target="readvertisement"/>),
followed by a <tt>RouteUpdate</tt> with <tt>initial_update_complete</tt> set. That
<tt>RouteUpdate</tt> <bcp14>MAY</bcp14> also carry announcements or withdrawals. A speaker <bcp14>MUST</bcp14>
send it even if it has no routes to advertise. The flag <bcp14>MUST NOT</bcp14> be set in
any later <tt>RouteUpdate</tt> on the session, and a receiving speaker <bcp14>MUST</bcp14>
ignore it if it is.</t>
        <t>Until a speaker has received its peer's <tt>RouteUpdate</tt> with
<tt>initial_update_complete</tt> set, or a locally configured time has elapsed
since the session became ESTABLISHED, it <bcp14>SHOULD</bcp14> defer updating its own
advertisements to other peers in response to routes received over the new
session. Without this, each advertisement received during the initial
exchange could change the speaker's selected routes, and so cause a
separate update to every other peer. Routes received during the initial
exchange <bcp14>MAY</bcp14> be used for forwarding as soon as they are received. This is
analogous to the End-of-RIB marker of <xref target="RFC4724"/>.</t>
      </section>
      <section anchor="sessions">
        <name>Multiple Sessions and Collisions</name>
        <t>A speaker <bcp14>MAY</bcp14> hold sessions with several speakers of the same AD, and an
AD's speakers <bcp14>MAY</bcp14> each hold sessions with the same peer; routes received
over each session are independent (<xref target="advertisement-id"/>). Two sessions
between the same pair of speakers, which can arise when each is configured
to initiate a session to the other, are not harmful, but carry the same
routes twice.</t>
        <t>A speaker identifies a peer speaker by the public key that the peer
presented in the TLS handshake (<xref target="handshake"/>) together with the peer's
<tt>speaker_id</tt>; speakers of one AD that share a key (<xref target="multiple-speakers"/>)
<bcp14>SHOULD</bcp14> therefore set distinct <tt>speaker_id</tt> values. When a speaker has two
sessions with the same peer speaker, both of which are ESTABLISHED or
being established, it <bcp14>SHOULD</bcp14> close one of them with code
<tt>CONNECTION_COLLISION</tt>. So that both speakers close the same session, the
session to close is the one initiated by the speaker whose public key has
the numerically greater SHA-256 digest, with the digests compared as
unsigned big-endian integers. A speaker <bcp14>MUST NOT</bcp14> close a session for this
reason until the newer session is ESTABLISHED, so that a session is not
lost to a connection attempt that fails.</t>
      </section>
      <section anchor="termination">
        <name>Session Termination</name>
        <t>A speaker that is ending a session, whether because of an error or by
choice, <bcp14>MUST</bcp14> send a <tt>Notification</tt> whose code describes the reason before
closing the gRPC stream, if it is able to; <tt>CEASE</tt> is used for an orderly
close with no other cause. It <bcp14>MUST</bcp14> then close the stream. It <bcp14>SHOULD</bcp14> log
the reason.</t>
        <t>A session has ended, from a speaker's point of view, when it has sent or
received a <tt>Notification</tt> whose code ends the session, or when the gRPC
stream has been closed by the peer or has failed. When a session ends, the
speaker <bcp14>MUST</bcp14> remove all routes received over it (<xref target="advertisement-id"/>),
repeat route selection, and update its advertisements to other peers
(<xref target="readvertisement"/>).</t>
        <t>This document defines no means of preserving routes across a session
failure, such as the graceful restart mechanism of BGP <xref target="RFC4724"/>, nor
of asking a peer to re-send its routes without re-establishing the
session. A transient transport failure therefore removes every route
learned over the session, including those for contact windows far in the
future, until a new session is established and the initial route
exchange repeated. Speakers on links prone to interruption <bcp14>SHOULD</bcp14> set
hold times accordingly. A mechanism for retaining routes across a brief
interruption may be the subject of a future extension.</t>
        <t>An Initiator whose session has ended <bcp14>MAY</bcp14> establish a new one. It <bcp14>SHOULD</bcp14>
wait before doing so, for an interval that increases with each successive
failure to establish or keep a session with the same peer, so that a
persistently failing peer is not retried continuously; it <bcp14>MAY</bcp14> reconnect
promptly after an orderly <tt>CEASE</tt>.</t>
      </section>
    </section>
    <section anchor="protocol-definition">
      <name>Protocol Definition</name>
      <t>This section defines the messages exchanged over a session. They are
written in the proto3 language of Protocol Buffers and encoded on the wire
as specified in <xref target="PROTOBUF"/>; the encoding, not the language, is what an
interoperating implementation must match. They are carried over a single
bidirectional gRPC <xref target="GRPC"/> stream for the lifetime of the session. The
sections that follow specify how the routing messages are processed.</t>
      <t>A speaker <bcp14>MUST</bcp14> be able to receive a <tt>PeerMessage</tt> of at least 4 MiB
(4,194,304 bytes), the default limit in common gRPC implementations, and
<bcp14>MUST NOT</bcp14> send one larger than that. A <tt>RouteUpdate</tt> whose announcements
and withdrawals would exceed the limit <bcp14>MUST</bcp14> be split into several
<tt>RouteUpdate</tt> messages; since each advertisement is complete in itself
(<xref target="advertisement-id"/>), a split has no effect on how the routes are
processed, and only the last message of the initial route exchange
carries <tt>initial_update_complete</tt> (<xref target="initial-exchange"/>).</t>
      <section anchor="service-definition">
        <name>Service Definition</name>
        <sourcecode type="protobuf"><![CDATA[
syntax = "proto3";
package dtn.peering.v1;

import "google/protobuf/timestamp.proto";

service DtnPeering {
  // Single stream for Hello, Routes, and Keepalives
  rpc Peer(stream PeerMessage) returns (stream PeerMessage);
}
]]></sourcecode>
      </section>
      <section anchor="message-envelope">
        <name>Message Envelope</name>
        <sourcecode type="protobuf"><![CDATA[
message PeerMessage {
  oneof payload {
    Hello hello = 1;
    KeepAlive keep_alive = 2;
    RouteUpdate update = 3;
    Notification notification = 4;
  }
}
]]></sourcecode>
      </section>
      <section anchor="identity-message">
        <name>Identity Message</name>
        <sourcecode type="protobuf"><![CDATA[
message Hello {
  // Protocol version; 1 for this document
  uint32 version = 1;
  // DNS Domain (e.g., "dsn.example.org")
  string local_ad_id = 2;
  uint32 hold_time_seconds = 3;
  // Optional protocol extensions supported by the sender
  repeated string capabilities = 4;
  // Optional, free-form (e.g., "goldstone-1")
  string speaker_id = 5;
}
]]></sourcecode>
        <t>The <tt>version</tt> field identifies the version of this protocol that the
sender implements. This document defines version 1. A speaker <bcp14>MUST</bcp14> set
<tt>version</tt> to the highest version it supports, and <bcp14>MUST</bcp14> reject a session
if the <tt>version</tt> in its peer's <tt>Hello</tt> is not one that it supports
(<xref target="handshake"/>). A <tt>Hello</tt> in which <tt>version</tt> is absent has version 0,
which is not valid.</t>
        <t>The <tt>capabilities</tt> field lists optional extensions to this protocol that
the sender supports, by the names registered for them
(<xref target="iana-capabilities"/>); this document defines none. An extension is in
effect on a session only if both speakers listed it. A speaker <bcp14>MUST</bcp14> ignore
capability names that it does not recognize, and <bcp14>MUST NOT</bcp14> send any message
or attribute defined by an extension that is not in effect.</t>
        <t>The optional <tt>speaker_id</tt> field allows a speaker to identify itself
among the speakers of its AD, for example in logs and diagnostics, and to
distinguish itself from other speakers of its AD that present the same
key (<xref target="sessions"/>). Its content is chosen by the AD and has no defined
format; in particular, it need not be an EID or a DNS name, since a DPP
speaker need not be a BP node. A receiving speaker <bcp14>MUST NOT</bcp14> use
<tt>speaker_id</tt> for authentication, authorization, loop detection, or route
selection.</t>
        <t>Authentication is performed by TLS (see <xref target="handshake"/>), so no
authentication messages are defined.</t>
      </section>
      <section anchor="routing-messages">
        <name>Routing Messages</name>
        <t>The semantics of these messages are specified in <xref target="routes"/>.</t>
        <sourcecode type="protobuf"><![CDATA[
message RouteUpdate {
  repeated RouteAdvertisement announcements = 1;
  repeated RouteWithdrawal withdrawals = 2;
  // Set once per session, on the last message of the
  // initial route exchange (see Initial Route Exchange)
  bool initial_update_complete = 3;
}

// One or more routes sharing the same attributes
message RouteAdvertisement {
  // Advertisement ID: identifies this advertisement within the
  // session; re-sending the same id replaces the advertisement
  uint64 id = 1;

  // Destination nodes; each pattern creates a route
  repeated EidPattern patterns = 2;

  // Required attributes
  // AD Domains traversed, most recent first
  repeated string ad_path = 3;
  // Originating AD's preference (lower = preferred)
  uint32 metric = 4;

  // Optional attributes
  repeated RouteAttribute attributes = 5;
}

// Removes all routes created by the advertisements with the
// listed advertisement IDs
message RouteWithdrawal {
  repeated uint64 advertisement_ids = 1;
}
]]></sourcecode>
      </section>
      <section anchor="route-attributes">
        <name>Route Attributes</name>
        <t>The semantics of each attribute are specified in <xref target="routes"/>.</t>
        <sourcecode type="protobuf"><![CDATA[
// Optional route attribute; see Optional Attributes. The field
// number of each typed member is the attribute's registered type.
message RouteAttribute {
  oneof attribute {
    // Bundle forwarding endpoint, for data plane separation
    string gateway_eid = 1;

    // Time window: when the advertising AD starts and stops
    // accepting bundles
    google.protobuf.Timestamp valid_from = 2;
    google.protobuf.Timestamp valid_until = 3;

    // What the advertising AD accepts
    uint64 bandwidth_bps = 4;     // Rate (bits per second)
    uint32 max_bundle_size = 5;   // Maximum bundle size (bytes)

    // Estimated earliest delivery time at the destination
    google.protobuf.Timestamp arrival_time = 6;

    // Aggregated AD_PATH members; see Aggregation
    AdSet ad_set = 7;

    // An attribute carried by type number rather than as a
    // typed member; see Attribute Types and Forward
    // Compatibility
    UnknownAttribute unknown = 65535;
  }
}

message UnknownAttribute {
  uint32 type_id = 1;   // Registered attribute type
  bytes value = 2;      // Encoding defined for the type
  bool transitive = 3;  // Propagate even if not understood
}

// Unordered set of AD identities; see Aggregation
message AdSet {
  repeated string ad_ids = 1;
}
]]></sourcecode>
        <t>The <tt>value</tt> of an <tt>UnknownAttribute</tt> carrying one of the attribute types
defined in this document is the Protocol Buffers encoding of the typed
member's value: for <tt>gateway_eid</tt>, the UTF-8 string; for <tt>valid_from</tt>,
<tt>valid_until</tt>, and <tt>arrival_time</tt>, the serialized
<tt>google.protobuf.Timestamp</tt>; for <tt>bandwidth_bps</tt> and <tt>max_bundle_size</tt>,
the varint; and for <tt>ad_set</tt>, the serialized <tt>AdSet</tt>.</t>
      </section>
      <section anchor="data-types">
        <name>Data Types</name>
        <sourcecode type="protobuf"><![CDATA[
message EidPattern {
  oneof scheme {
    IpnPattern ipn = 1;
    DtnPattern dtn = 2;
  }
}

// Matches every Service Number of the nodes it identifies.
// An unset component is a wildcard; ipn:** has both unset.
message IpnPattern {
  IpnComponent allocator = 1;
  IpnComponent node = 2;
}

message IpnComponent {
  oneof value {
    uint32 exact = 1;
    IpnRange range = 2;
  }
}

// Aligned power-of-two range of size > 1 (inclusive bounds)
message IpnRange {
  uint32 min = 1;
  uint32 max = 2;
}

// Matches every demux of the nodes it identifies. The authority
// is in the text form of the dtn EID Pattern specification.
message DtnPattern {
  string authority = 1;  // e.g. "*.example.org"
}
]]></sourcecode>
      </section>
      <section anchor="control-messages">
        <name>Control Messages</name>
        <sourcecode type="protobuf"><![CDATA[
message KeepAlive {}

message Notification {
  enum Level { INFO = 0; WARNING = 1; ERROR = 2; }
  enum Code {
    UNSPECIFIED = 0;
    // Session establishment
    UNSUPPORTED_VERSION = 1;
    UNEXPECTED_AD = 2;
    AUTHORIZATION_FAILED = 3;
    UNACCEPTABLE_HOLD_TIME = 4;
    // Session operation
    HOLD_TIMER_EXPIRED = 5;
    UNEXPECTED_MESSAGE = 6;
    MALFORMED_UPDATE = 7;
    MAX_ROUTES_EXCEEDED = 8;
    // Orderly close
    CEASE = 9;
    CONNECTION_COLLISION = 10;
  }
  Level level = 1;
  // Human-readable detail; not for machine interpretation
  string message = 2;
  Code code = 3;
}
]]></sourcecode>
        <t>A <tt>Notification</tt> reports a condition to the peer. It <bcp14>MAY</bcp14> be sent in any
state, including before a <tt>Hello</tt>. The <tt>level</tt> indicates severity for
logging and diagnostics. The <tt>code</tt> identifies the condition, and
determines whether the sender is ending the session:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Sent when</th>
              <th align="left">Ends the session</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">UNSPECIFIED</td>
              <td align="left">No other code applies</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">UNSUPPORTED_VERSION</td>
              <td align="left">The peer's <tt>version</tt> is not supported (<xref target="handshake"/>)</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">UNEXPECTED_AD</td>
              <td align="left">The peer's <tt>local_ad_id</tt> fails the peer check (<xref target="handshake"/>)</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">AUTHORIZATION_FAILED</td>
              <td align="left">TLSA lookup or verification fails (<xref target="handshake"/>)</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">UNACCEPTABLE_HOLD_TIME</td>
              <td align="left">The peer's hold time is unacceptable (<xref target="hold-time"/>)</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">HOLD_TIMER_EXPIRED</td>
              <td align="left">No message received within the hold time (<xref target="hold-time"/>)</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">UNEXPECTED_MESSAGE</td>
              <td align="left">A message not permitted in the current state, or not recognized, was received (<xref target="states"/>)</td>
              <td align="left">Only before ESTABLISHED</td>
            </tr>
            <tr>
              <td align="left">MALFORMED_UPDATE</td>
              <td align="left">A malformed advertisement was received (<xref target="malformed"/>)</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">MAX_ROUTES_EXCEEDED</td>
              <td align="left">The peer sent more routes than the receiver will accept (<xref target="denial-of-service"/>)</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">CEASE</td>
              <td align="left">The sender is closing the session in an orderly way (<xref target="termination"/>)</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">CONNECTION_COLLISION</td>
              <td align="left">The sender is closing a redundant session (<xref target="sessions"/>)</td>
              <td align="left">Yes</td>
            </tr>
          </tbody>
        </table>
        <t>A speaker that receives a <tt>Notification</tt> whose code ends the session <bcp14>MUST</bcp14>
treat the session as ended (<xref target="termination"/>). A speaker that receives any
other <tt>Notification</tt> <bcp14>MUST NOT</bcp14> end the session on that account. The
<tt>message</tt> field carries human-readable detail, such as which
advertisement was malformed; a speaker <bcp14>MUST NOT</bcp14> depend on its content.
Codes are registered in the "DPP Notification Codes" registry
(<xref target="iana-codes"/>).</t>
      </section>
    </section>
    <section anchor="routes">
      <name>Route Attributes and Advertisements</name>
      <t>Once a session is established (<xref target="handshake"/>), DPP speakers share
reachability information by sending <tt>RouteUpdate</tt> messages
(<xref target="routing-messages"/>), each carrying route advertisements and
withdrawals. A route advertisement tells the peer that bundles destined
for nodes matching a set of EID patterns can be delivered via the
advertising AD, together with the attributes of that route. The form of
those patterns, and how a speaker chooses between routes that match the
same EID, are described in <xref target="addressing"/>; how a speaker derives the
routes it advertises from those it has selected is described in
<xref target="readvertisement"/>.</t>
      <t>Routes are identified by the session they were received over and an
advertisement ID chosen by the sender (<xref target="advertisement-id"/>), not by their
patterns. This differs from BGP, in which a new advertisement for a prefix
implicitly replaces the previous one from the same peer: in DPP, a new
advertisement with a different ID adds routes, re-sending an ID replaces
them, and a withdrawal names IDs. The model resembles the path identifiers
of the BGP ADD-PATH extension <xref target="RFC7911"/>.</t>
      <t>DPP uses an extensible attribute model inspired by BGP path attributes
<xref target="RFC4271"/>. This allows new route properties to be defined in future protocol
versions without breaking existing implementations.</t>
      <section anchor="advertisement-structure">
        <name>Advertisement Structure</name>
        <t>A <tt>RouteAdvertisement</tt> (<xref target="routing-messages"/>) carries:</t>
        <dl>
          <dt>Advertisement ID:</dt>
          <dd>
            <t>An <tt>id</tt> that identifies the advertisement within the session, so that it
can later be replaced or withdrawn (<xref target="advertisement-id"/>).</t>
          </dd>
          <dt>Patterns:</dt>
          <dd>
            <t>One or more EID patterns identifying the destination nodes, constrained
as described in <xref target="pattern-constraints"/>. Each pattern creates a separate
route; all share the advertisement's attributes.</t>
          </dd>
          <dt>Attributes:</dt>
          <dd>
            <t>The properties of the route. Two are always present, <tt>ad_path</tt> and
<tt>metric</tt>; the rest are optional and are carried in an extensible list.</t>
          </dd>
        </dl>
      </section>
      <section anchor="required-attributes">
        <name>Required Attributes</name>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>ad_path</tt></td>
              <td align="left">List of AD domains traversed (for loop detection and path length; see <xref target="loop-detection"/>)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>metric</tt></td>
              <td align="left">Originating AD's preference among routes into its network (lower = preferred; see <xref target="metric"/>)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="loop-detection">
        <name>Loop Detection</name>
        <t>DPP is a path-vector protocol: routing loops are prevented using the
AD_PATH attribute (similar to BGP's AS_PATH <xref target="RFC4271"/>). Loop detection
operates on Administrative Domain identity, not on individual DPP speaker
identity. This means an AD <bcp14>MAY</bcp14> deploy multiple speakers without risk of
routing loops, as all speakers within an AD share the same <tt>local_ad_id</tt>.</t>
        <dl>
          <dt>Mechanism:</dt>
          <dd>
            <t>Every route advertisement <bcp14>MUST</bcp14> include the ordered list of ADs it has
traversed.</t>
          </dd>
          <dt>Propagation:</dt>
          <dd>
            <t>When a DPP speaker advertises a route to a peer, it <bcp14>MUST</bcp14> prepend its own
<tt>local_ad_id</tt> to the AD_PATH. This applies both to routes it originates
(which therefore carry an AD_PATH containing only the originating AD) and
to routes it re-advertises.</t>
          </dd>
          <dt>Verification:</dt>
          <dd>
            <t>When a DPP speaker receives a route advertisement, the first (left-most)
entry in AD_PATH <bcp14>MUST</bcp14> match the <tt>local_ad_id</tt> that the peer authenticated
during session establishment (<xref target="handshake"/>). If it does not, or if
AD_PATH is empty, the advertisement is malformed (<xref target="malformed"/>). This
prevents a peer from omitting its own AD from the path, or from
presenting a route as though it had been received directly from another
AD.</t>
          </dd>
          <dt>Detection:</dt>
          <dd>
            <t>If a DPP speaker receives an advertisement whose AD_PATH, or whose
AD_SET attribute if present (<xref target="aggregation"/>), contains its own
<tt>local_ad_id</tt>, it <bcp14>MUST NOT</bcp14> create routes from it; the advertisement is
treated as a withdrawal of its ID (<xref target="malformed"/>).</t>
          </dd>
        </dl>
        <t>AD identities in AD_PATH and AD_SET are compared as described in
<xref target="architecture-ads"/>.</t>
      </section>
      <section anchor="optional-attributes">
        <name>Optional Attributes</name>
        <t>Optional attributes, each carried as a <tt>RouteAttribute</tt>
(<xref target="route-attributes"/>):</t>
        <table>
          <thead>
            <tr>
              <th align="left">Attribute</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>gateway_eid</tt></td>
              <td align="left">Bundle forwarding endpoint (see <xref target="gateway-eid-resolution"/>)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>valid_from</tt></td>
              <td align="left">When the advertising AD starts accepting bundles (if omitted: immediately; see <xref target="time-variant"/>)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>valid_until</tt></td>
              <td align="left">When the advertising AD stops accepting bundles (if omitted: until withdrawn; see <xref target="time-variant"/>)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>arrival_time</tt></td>
              <td align="left">Estimated earliest delivery time at the destination (optional; see <xref target="time-variant"/>)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>bandwidth_bps</tt></td>
              <td align="left">Rate at which the advertising AD accepts bundles, in bits per second</td>
            </tr>
            <tr>
              <td align="left">
                <tt>max_bundle_size</tt></td>
              <td align="left">Largest bundle the advertising AD accepts, in bytes</td>
            </tr>
            <tr>
              <td align="left">
                <tt>ad_set</tt></td>
              <td align="left">ADs traversed by routes that were aggregated into this one, beyond those in AD_PATH (see <xref target="aggregation"/>)</td>
            </tr>
          </tbody>
        </table>
        <t>How each attribute is updated when a route is re-advertised is specified
in <xref target="readvertisement"/>.</t>
      </section>
      <section anchor="forward-compatibility">
        <name>Attribute Types and Forward Compatibility</name>
        <t>Every route attribute has a type, identified by a number in the "DPP Route
Attribute Types" registry (<xref target="iana-attributes"/>). Each registered type
records the protocol version (<xref target="identity-message"/>) that introduced it
and the document that defines it. The attributes defined in this document
are all introduced in version 1.</t>
        <t>A <tt>RouteAttribute</tt> (<xref target="route-attributes"/>) carries an attribute in one of
two forms: as the typed member of the <tt>attribute</tt> choice defined for its
type, or as an <tt>UnknownAttribute</tt>, which carries the type number, the
attribute's value as an opaque byte string, and a <tt>transitive</tt> flag that
tells a speaker which does not understand the type what to do with it. A
sender <bcp14>MUST</bcp14> choose the form as follows:</t>
        <ul spacing="normal">
          <li>
            <t>An attribute whose type was introduced in a version that the peer
supports (that is, not later than the <tt>version</tt> in the peer's <tt>Hello</tt>)
<bcp14>MUST</bcp14> be sent in its typed form.</t>
          </li>
          <li>
            <t>An attribute whose type was introduced in a later version than the peer
supports <bcp14>MUST</bcp14> be sent as an <tt>UnknownAttribute</tt>. Its <tt>value</tt> is the
encoding specified for that type in the document that defines it.</t>
          </li>
          <li>
            <t>An attribute whose type is in the Private Use range of the registry
<bcp14>MUST</bcp14> always be sent as an <tt>UnknownAttribute</tt>.</t>
          </li>
        </ul>
        <t>The second rule is what makes it possible for a speaker running an older
version to carry a transitive attribute defined by a newer one: because
Protocol Buffers does not deliver an unrecognized <tt>oneof</tt> member to the
application, a newer typed member would otherwise be silently lost at the
first older speaker on the path. The first rule is what allows speakers
running the same version to use the typed, more compact and more
convenient form between themselves.</t>
        <t>A receiving speaker <bcp14>MUST</bcp14> handle an <tt>UnknownAttribute</tt> as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>If it recognizes the type, it <bcp14>MUST</bcp14> decode the <tt>value</tt> as specified for
that type and process the attribute exactly as if it had been received
in typed form.</t>
          </li>
          <li>
            <t>If it does not recognize the type and <tt>transitive</tt> is true, it <bcp14>MUST</bcp14>
preserve the attribute and propagate it, unchanged, as an
<tt>UnknownAttribute</tt> when re-advertising the route.</t>
          </li>
          <li>
            <t>If it does not recognize the type and <tt>transitive</tt> is false, it <bcp14>MUST</bcp14>
discard the attribute and not propagate it.</t>
          </li>
        </ol>
        <t>The <tt>transitive</tt> flag exists only in <tt>UnknownAttribute</tt> form, and is
meaningful only to a speaker that does not understand the attribute's
type: it is all that such a speaker can know about the attribute. A
speaker that does understand the type <bcp14>MUST</bcp14> handle the attribute as the
document defining the type specifies, in particular when re-advertising a
route (<xref target="readvertisement"/>), whether the attribute arrived in typed or
<tt>UnknownAttribute</tt> form; and when it sends the attribute in
<tt>UnknownAttribute</tt> form it <bcp14>MUST</bcp14> set the flag as that document specifies.
For a Private Use type, the party using it chooses the flag. The flag is
deliberately not recorded in the registry: knowing whether an attribute
may be passed on unexamined is no substitute for knowing how it is to be
processed, and for every attribute defined in this document except
<tt>ad_set</tt> the correct behavior on re-advertisement is to replace or
recompute the value, not to propagate it. A document that defines a new
attribute type <bcp14>MUST</bcp14> specify its typed <tt>RouteAttribute</tt> member, the
encoding of its <tt>value</tt> in <tt>UnknownAttribute</tt> form, the value of its
<tt>transitive</tt> flag, and how a speaker that understands it treats it when a
route is re-advertised.</t>
      </section>
      <section anchor="time-variant">
        <name>Time-Variant Routing</name>
        <t>All times carried in DPP are absolute, and are compared across ADs. DPP
speakers <bcp14>MUST</bcp14> therefore keep their clocks synchronized to UTC, for example
using NTP. The time windows that DPP describes are typically measured in
minutes or hours, so the accuracy that ordinary network time
synchronization provides is sufficient; this document defines no
tolerance for clock skew, and two times are equal only if they are
identical.</t>
        <t>The <tt>valid_from</tt> and <tt>valid_until</tt> attributes allow an AD to advertise
reachability that is available only at certain times, as is common in
deep-space networks. Together they define the time window during which
the advertising AD will accept bundles for the advertised destinations. A
receiving AD can use these time windows as input to its own routing,
whether that is contact-based (e.g., <xref target="CCSDS-SABR"/>) or not. Routes without
these attributes are valid immediately and remain valid until explicitly
withdrawn.</t>
        <t>Because DTN is a store-and-forward network, the window in which an AD
accepts bundles need not coincide with the contacts over which it will
forward them. An AD with sufficient storage can accept bundles before its
next contact towards their destination opens, and hold them until it does;
it can also offer a single window that spans several such contacts.</t>
        <t>A route is available from the time given by its <tt>valid_from</tt> attribute.
A route with no <tt>valid_from</tt> attribute, or whose <tt>valid_from</tt> time has
passed, is available immediately. A route expires at the time given by its
<tt>valid_until</tt> attribute: once that time has passed, a DPP speaker <bcp14>MUST</bcp14>
treat the route as withdrawn. An advertisement that carries both
attributes with a <tt>valid_until</tt> time not later than its <tt>valid_from</tt> time
is malformed (<xref target="malformed"/>).</t>
        <t>The optional <tt>arrival_time</tt> attribute gives the advertising AD's estimate
of the earliest time at which a bundle that it accepts at the start of the
route's window can be delivered to the advertised destinations. Unlike the
time window, which describes only the advertising AD, the arrival time
describes the whole path to the destination. It is set by the originating
AD, if that AD can estimate when it will deliver bundles, and is updated by
each AD that re-advertises the route (<xref target="readvertisement"/>). A route without
an <tt>arrival_time</tt> attribute provides no estimate.</t>
        <t>An advertisement that carries both an <tt>arrival_time</tt> and a <tt>valid_from</tt>,
with the <tt>arrival_time</tt> earlier than the <tt>valid_from</tt>, is malformed
(<xref target="malformed"/>): a bundle cannot be delivered before it is accepted.</t>
        <t>Because the availability of routes changes over time, a DPP speaker <bcp14>MUST</bcp14>
repeat route selection (<xref target="route-selection"/>) for the current time whenever
any of the following occurs, and <bcp14>MUST</bcp14> update its own advertisements if the
routes that it would advertise change (<xref target="readvertisement"/>):</t>
        <ul spacing="normal">
          <li>
            <t>it receives, replaces, withdraws, or loses a route;</t>
          </li>
          <li>
            <t>the <tt>valid_from</tt> time of a route it holds is reached, making the route
available;</t>
          </li>
          <li>
            <t>the <tt>arrival_time</tt> of a route it holds is reached, after which the route
is estimated to deliver bundles as soon as they are accepted
(<xref target="route-selection"/>); or</t>
          </li>
          <li>
            <t>the <tt>valid_until</tt> time of a route it holds is reached, expiring the
route.</t>
          </li>
        </ul>
        <t>A peer <bcp14>MAY</bcp14> send multiple advertisements for the same pattern, each with its
own advertisement ID (<xref target="advertisement-id"/>), to describe a series of distinct
periods in which it accepts bundles, each with its own attributes.</t>
      </section>
      <section anchor="advertisement-id">
        <name>Advertisement IDs and Withdrawal</name>
        <t>Each <tt>RouteAdvertisement</tt> carries an advertisement ID, in its <tt>id</tt> field,
chosen by the sending speaker, that identifies the advertisement within
the session over which it is sent. Each EID pattern in the advertisement
creates a separate route, which has the advertisement's attributes; the
routes created by an advertisement are identified by the session, the
advertisement ID, and their patterns. The ID identifies the advertisement
as a whole, not any one of the routes it creates.</t>
        <t>An advertisement ID is meaningful only within the session in which it is
used. A speaker <bcp14>MAY</bcp14> choose advertisement IDs in any way, provided that it does not
use the same value for two advertisements that it intends to be held at
the same time on the same session. When a session ends, all routes
received over it are removed, and the advertisement IDs used in it have no
significance in any later session.</t>
        <t>When a DPP speaker receives a route advertisement, it <bcp14>MUST</bcp14> replace all of
the routes previously received over the same session with the same
advertisement ID, if any, with the routes created by the new advertisement. The
replacement is atomic: the new advertisement's patterns, attributes, and
time window take effect together, and any pattern that was in the previous
advertisement but is not in the new one is removed. This allows a peer to
change any aspect of an advertisement, including its time window, by
re-sending it with the same advertisement ID, without first withdrawing it.</t>
        <t>Advertisements with different advertisement IDs are independent, even if
they contain the same pattern and their time windows overlap. A speaker
can therefore hold several routes for the same pattern from a single
peer, for example when a centralized route controller advertises several
entry points into its AD, each with a different <tt>gateway_eid</tt> and metric
(<xref target="gateway-eid-resolution"/>). Route selection chooses between them in the
same way as between routes from different peers (<xref target="route-selection"/>).</t>
        <t>A <tt>RouteWithdrawal</tt> lists, in its <tt>advertisement_ids</tt> field, the IDs of
advertisements to be removed. For each ID that it lists, all routes
received over the same session from the advertisement with that ID are
removed. If no advertisement with that ID is held, the ID is silently
ignored. A peer that wishes to remove only some of the patterns in an
advertisement re-sends the advertisement with the same ID, omitting those
patterns.</t>
        <t>A route also ceases to exist when it expires (<xref target="time-variant"/>), and does
not need to be withdrawn. When every route created by an advertisement has
expired, its advertisement ID is no longer in use.</t>
      </section>
      <section anchor="malformed">
        <name>Malformed Advertisements and Processing Order</name>
        <t>A <tt>RouteAdvertisement</tt> is malformed if any of the following holds:</t>
        <ul spacing="normal">
          <li>
            <t>it contains no patterns;</t>
          </li>
          <li>
            <t>a pattern does not satisfy the constraints of <xref target="pattern-constraints"/>,
including the range constraints of <xref target="ipn-constraints"/>, or a <tt>dtn</tt>
pattern has an empty authority;</t>
          </li>
          <li>
            <t>its AD_PATH is empty, or the first entry of its AD_PATH does not match
the AD that the peer authenticated during session establishment
(<xref target="loop-detection"/>);</t>
          </li>
          <li>
            <t>it carries more than one attribute of the same type, whether in typed
or <tt>UnknownAttribute</tt> form, or an <tt>UnknownAttribute</tt> whose <tt>type_id</tt>
is 0, 65535, or that of a typed member the peer's version supports
(<xref target="forward-compatibility"/>);</t>
          </li>
          <li>
            <t>it carries both <tt>valid_from</tt> and <tt>valid_until</tt>, and <tt>valid_until</tt> is not
later than <tt>valid_from</tt> (<xref target="time-variant"/>);</t>
          </li>
          <li>
            <t>it carries both <tt>valid_from</tt> and <tt>arrival_time</tt>, and <tt>arrival_time</tt> is
earlier than <tt>valid_from</tt> (<xref target="time-variant"/>);</t>
          </li>
          <li>
            <t>its <tt>gateway_eid</tt> is not the administrative endpoint EID of a node, or
is a LocalNode EID (<xref target="gateway-eid-resolution"/>); or</t>
          </li>
          <li>
            <t>its <tt>bandwidth_bps</tt> or <tt>max_bundle_size</tt> is zero; or</t>
          </li>
          <li>
            <t>its <tt>ad_set</tt> is empty, or contains an AD that also appears in its
AD_PATH.</t>
          </li>
        </ul>
        <t>A pattern whose scheme the receiving speaker does not recognize (that is,
an <tt>EidPattern</tt> in which no known scheme is set) is not malformed: the
speaker <bcp14>MUST</bcp14> ignore that pattern and process the remainder of the
advertisement. This allows patterns for additional schemes to be defined
in future. If ignoring such patterns leaves an advertisement with no
patterns, the advertisement is treated as a withdrawal of its ID, without
notification.</t>
        <t>A receiving speaker <bcp14>MUST</bcp14> treat a malformed advertisement as a withdrawal
of its advertisement ID: any routes previously received over the session
with that ID are removed, and no routes are created. The speaker <bcp14>SHOULD</bcp14>
send a <tt>Notification</tt> with level <tt>WARNING</tt> and code <tt>MALFORMED_UPDATE</tt>,
identifying the advertisement in the <tt>message</tt> field, and <bcp14>MUST NOT</bcp14> end the
session on account of a malformed advertisement. This follows the approach
of <xref target="RFC7606"/> for BGP: ending the session would remove every route
received over it, which is a far greater disruption than the loss of the
one advertisement, and would make a peer's single error into an outage.</t>
        <t>An advertisement whose AD_PATH contains the receiving speaker's own AD
(<xref target="loop-detection"/>) is likewise treated as a withdrawal of its ID, but
without a <tt>Notification</tt>, since receiving one's own routes back is a
normal occurrence in a meshed topology.</t>
        <t>Within a single <tt>RouteUpdate</tt>, a receiving speaker <bcp14>MUST</bcp14> process the
withdrawals before the announcements, and the announcements in the order
in which they appear. Consequently, if an advertisement ID appears both in
the withdrawals and in an announcement, the announcement takes effect; and
if two announcements carry the same ID, the second replaces the first.
Senders <bcp14>SHOULD NOT</bcp14> construct such messages.</t>
        <t>A <tt>PeerMessage</tt> that cannot be decoded, or that contains a <tt>RouteUpdate</tt>
before the session is ESTABLISHED, is handled as described in <xref target="states"/>.</t>
      </section>
      <section anchor="gateway-eid-resolution">
        <name>Gateway EID Resolution</name>
        <t>The <tt>gateway_eid</tt> attribute identifies the gateway node to which bundles
matching the advertised patterns should be forwarded. This enables
separation of the control plane (DPP session) from the data plane (bundle
forwarding).</t>
        <t>The gateway EID always identifies a gateway in the AD that sent the
advertisement, which is the next hop for matching bundles, not a gateway
in the originating AD. A speaker that re-advertises a route therefore
replaces the gateway EID with one of its own (<xref target="readvertisement"/>).</t>
        <t>A <tt>gateway_eid</tt> <bcp14>MUST</bcp14> be the EID of the gateway node's administrative
endpoint (<xref section="4.2.5.2" sectionFormat="of" target="RFC9171"/>): for the <tt>ipn</tt> scheme,
<tt>ipn:A.N.0</tt>, the EID with Service Number zero for the node's FQNN
(<xref section="5.7" sectionFormat="of" target="RFC9758"/>); for the <tt>dtn</tt> scheme, <tt>dtn://&lt;node-name&gt;/</tt>,
the EID with a zero-length demux (<xref section="4.2.5.1.1" sectionFormat="of" target="RFC9171"/>). Any
singleton EID of a node may serve as a node ID for it, but the
administrative endpoint EID is the one such EID that every speaker will
form in the same way, so requiring it ensures that two routes via the same
gateway name it identically. An advertisement whose <tt>gateway_eid</tt> is not
of this form, or is a LocalNode EID (<xref section="5.4" sectionFormat="of" target="RFC9758"/>), is
malformed (<xref target="malformed"/>). A <tt>gateway_eid</tt> <bcp14>SHOULD</bcp14> use the same scheme as the route's patterns, since
the receiving AD must find a convergence layer path to the gateway using
the EID given.</t>
        <t>Resolution rules:</t>
        <ol spacing="normal" type="1"><li>
            <t>If a <tt>gateway_eid</tt> attribute is present, forward matching bundles to
the node it identifies.</t>
          </li>
          <li>
            <t>If <tt>gateway_eid</tt> is absent, derive the gateway EID from the peer's AD
identity (<tt>local_ad_id</tt> from Hello) by forming the administrative
endpoint EID of a <tt>dtn</tt> node whose node-name is the AD's domain name:  </t>
            <artwork><![CDATA[
<dns_name>  ->  dtn://<dns_name>/
]]></artwork>
            <t>
For example: <tt>dsn.example.org</tt> -&gt; <tt>dtn://dsn.example.org/</tt>  </t>
            <t>
This default assumes that the AD operates a gateway node whose <tt>dtn</tt>
node-name is the AD's own domain name. An AD for which that is not the
case <bcp14>MUST</bcp14> include an explicit <tt>gateway_eid</tt>.</t>
          </li>
        </ol>
        <t>No mapping from a domain name to an <tt>ipn</tt> FQNN is defined: the <tt>ipn.arpa</tt>
zone proposed in <xref target="I-D.ek-dtn-ipn-arpa"/> maps an FQNN to the records needed
to reach the node, but does not map a domain name to an FQNN. An AD whose
gateways have only <tt>ipn</tt> EIDs therefore needs to include an explicit
<tt>gateway_eid</tt> attribute.</t>
        <t>Determining how to reach a gateway at the convergence layer, once its EID
is known, is a function of the receiving AD's BP agents rather than of
DPP, and can use any available means, including configuration. For a
gateway with an <tt>ipn</tt> EID, <xref target="I-D.ek-dtn-ipn-arpa"/> specifies a DNS-based
procedure: for example, TCPCLv4 <xref target="RFC9174"/> endpoints for the node
(978879,2) are found from SRV records at
<tt>_dtn-bundle._tcp.2.978879.ipn.arpa.</tt>. No corresponding procedure is
currently specified for gateways with <tt>dtn</tt> EIDs.</t>
        <t>This allows the following deployments:</t>
        <dl>
          <dt>DNS-named gateway:</dt>
          <dd>
            <t>An AD with identity <tt>dsn.example.org</tt> that operates a gateway node named
<tt>dtn://dsn.example.org/</tt> need not include a <tt>gateway_eid</tt>. Since no
DNS-based procedure is currently specified for discovering the
convergence layer endpoints of a <tt>dtn</tt> node, the receiving AD must be
configured with how to reach that gateway; the default saves the
attribute, not the configuration.</t>
          </dd>
          <dt>Separated control plane:</dt>
          <dd>
            <t>A DPP speaker that is not itself a gateway (e.g., a centralized route
controller) can advertise routes with explicit <tt>gateway_eid</tt> pointing to
the forwarding nodes within the AD, enabling load distribution or failover.</t>
          </dd>
          <dt>Load distribution:</dt>
          <dd>
            <t>Multiple routes to the same destination can be advertised with different
<tt>gateway_eid</tt> values and metrics.</t>
          </dd>
        </dl>
        <t>Examples:</t>
        <artwork><![CDATA[
# AD identity is DNS name - gateway_eid derived automatically
AD Identity: dsn.example.org
Default Gateway EID: dtn://dsn.example.org/

RouteAdvertisement {
  patterns: [ipn:100.*.*]
  ad_path: ["dsn.example.org"]
  metric: 10
  // No gateway_eid needed - defaults to dtn://dsn.example.org/
}
]]></artwork>
        <artwork><![CDATA[
# Explicit gateway_eid for control/data plane separation
AD Identity: dsn.example.org

RouteAdvertisement {
  patterns: [ipn:100.*.*]
  ad_path: ["dsn.example.org"]
  metric: 10
  attributes: [
    gateway_eid: "dtn://ingress1.dsn.example.org/"
  ]
}
]]></artwork>
      </section>
    </section>
    <section anchor="addressing">
      <name>Addressing and Metrics</name>
      <t>This section describes the EID patterns carried in route advertisements
(<xref target="routes"/>), and how a DPP speaker selects between routes whose patterns
match the same EID.</t>
      <section anchor="routes-identify-nodes">
        <name>Routes Identify Nodes</name>
        <t>DPP advertises the reachability of bundle nodes, not of the services
registered at them. A bundle is forwarded to the node that is the sole
member of its destination endpoint; the service or demux component of the
destination EID selects an application at that node, after forwarding is
complete, and plays no part in it. Routes therefore match nodes:</t>
        <ul spacing="normal">
          <li>
            <t>For the <tt>ipn</tt> scheme, a node is identified by its Fully Qualified Node
Number (FQNN), the Allocator Identifier and Node Number together. All
<tt>ipn</tt> EIDs that share an FQNN refer to the same node
(<xref section="5.1" sectionFormat="of" target="RFC9758"/>), so an <tt>ipn</tt> route pattern specifies
Allocator Identifiers and Node Numbers only, and matches every Service
Number.</t>
          </li>
          <li>
            <t>For the <tt>dtn</tt> scheme, a node is identified by the node-name in the
authority of its EIDs (<xref section="4.2.5.1.1" sectionFormat="of" target="RFC9171"/>), so a <tt>dtn</tt>
route pattern specifies an authority only, and matches every demux.</t>
          </li>
        </ul>
        <t>In the text form of <xref target="I-D.ietf-dtn-eid-pattern"/>, an <tt>ipn</tt> route pattern
always ends in <tt>.*</tt> (any Service Number), and a <tt>dtn</tt> route pattern always
ends in <tt>/**</tt> (any demux). The protocol encoding (<xref target="data-types"/>) omits
these components, since they carry no information.</t>
        <t>Whether a particular service is offered at a node, and whether a gateway
will accept bundles for it, are matters of application registration and
of local policy at the receiving AD, not of reachability, and are outside
the scope of DPP.</t>
        <t>A node may have EIDs in more than one scheme, for example an <tt>ipn</tt> EID and
a <tt>dtn</tt> EID. The Bundle Protocol does not define any relationship between
such EIDs, and nor does DPP: routes for the two schemes are independent,
and a bundle is forwarded using routes for the scheme of its destination
EID. Only routes for singleton endpoints are advertised; non-singleton
endpoints (<xref section="4.2.5.1.1" sectionFormat="of" target="RFC9171"/>) are outside the scope of this
document.</t>
      </section>
      <section anchor="pattern-constraints">
        <name>EID Pattern Constraints (Monotonic Specificity)</name>
        <t>Route patterns are EID Patterns: <tt>ipn</tt> patterns as defined in
<xref target="I-D.ietf-dtn-eid-pattern"/>, and <tt>dtn</tt> patterns as defined in
<xref target="I-D.taylor-dtn-eid-pattern-dtn"/>, which supplies the scheme-specific
<tt>dtn</tt> pattern that <xref target="I-D.ietf-dtn-eid-pattern"/> leaves to be defined by
other documents. To keep specificity comparison and longest-match lookup
well-defined, DPP restricts both to a Strict Monotonic Subset.</t>
        <t>A pattern exhibits monotonic specificity if all wildcard components are
confined to the logical "leaves" of the naming hierarchy. A specific child
component cannot exist under a wildcard parent. Equivalently, when a pattern
is read in hierarchy order, the wildcard (if present) <bcp14>MUST</bcp14> be the terminal
element: no specific component, label, or character may follow it. This is
what guarantees that any two patterns matching the same EID are nested,
keeping both specificity comparison and longest-prefix lookup well-defined.</t>
        <section anchor="ipn-constraints">
          <name><tt>ipn</tt> Scheme Constraints (Left-to-Right Hierarchy)</name>
          <t>The <tt>ipn</tt> route pattern hierarchy is Allocator Identifier -&gt; Node Number
<xref target="RFC9758"/>; the Service Number is always a wildcard
(<xref target="routes-identify-nodes"/>). If the Allocator Identifier is not specific
(i.e., is a wildcard or range), the Node Number <bcp14>MUST</bcp14> be a wildcard.</t>
          <t>A range <bcp14>MUST</bcp14> consist of a single interval whose size is a power of two,
greater than one, and whose lower bound is a multiple of that size (i.e.,
it is equivalent to a bit prefix, in the same way as an Allocator
Identifier range in <xref target="RFC9758"/>). A range of size one <bcp14>MUST</bcp14> be expressed as
a specific value. Arbitrary ranges are not permitted, because two
overlapping ranges (e.g., <tt>[10-13]</tt> and <tt>[12-15]</tt>) can match the same EID
without either containing the other.</t>
          <ul spacing="normal">
            <li>
              <t>Valid: <tt>ipn:100.1.*</tt> (Specific Node), <tt>ipn:100.[12-15].*</tt> (Aligned Node
Range), <tt>ipn:100.*.*</tt> (Node Wildcard), <tt>ipn:**</tt> (Default Route,
equivalent to <tt>ipn:*.*.*</tt>).</t>
            </li>
            <li>
              <t>Invalid: <tt>ipn:100.1.5</tt> (Specific Service; not a route pattern),
<tt>ipn:*.1.*</tt> (Specific Node under Wildcard Allocator),
<tt>ipn:100.[10-13].*</tt> (Unaligned Range), <tt>ipn:100.[0-3,8-11].*</tt> (Multiple
Intervals).</t>
            </li>
          </ul>
        </section>
        <section anchor="dtn-constraints">
          <name><tt>dtn</tt> Scheme Constraints</name>
          <t>A <tt>dtn</tt> route pattern is a <tt>dtn</tt> EID Pattern
(<xref target="I-D.taylor-dtn-eid-pattern-dtn"/>) whose demux is <tt>**</tt>
(<xref target="routes-identify-nodes"/>) and whose authority is either exact or
contains a single wildcard that, in the hierarchy order defined by that
document, is the terminal element. Which authority patterns satisfy this
condition is determined by <xref target="I-D.taylor-dtn-eid-pattern-dtn"/>; this
document imposes only the monotonic requirement above. An advertisement
containing a <tt>dtn</tt> pattern that does not satisfy it is malformed
(<xref target="malformed"/>).</t>
          <t>For example, <tt>dtn://rover1.example.org/**</tt> (a single node) and
<tt>dtn://*.example.org/**</tt> (every node whose authority ends in
<tt>.example.org</tt>) are route patterns, and <tt>dtn://rover1.example.org/svc</tt> is
not, since it names a demux.</t>
        </section>
      </section>
      <section anchor="specificity">
        <name>Specificity Scoring</name>
        <t>The specificity score prioritizes Exact Matches over Wildcards, and Longer
Prefixes over Shorter Prefixes.</t>
        <ul empty="true">
          <li>
            <t>The specificity score is computed locally by the receiver from the EidPattern.
It is NOT transmitted in route advertisements, as it can be deterministically
derived from the pattern itself.</t>
          </li>
        </ul>
        <t>The score is calculated as a <tt>uint32</tt>:</t>
        <artwork><![CDATA[
Score = (IsExact x 256) + LiteralLength
]]></artwork>
        <dl>
          <dt>IsExact (0 or 1):</dt>
          <dd>
            <t>1 if the pattern identifies exactly one node, i.e., its Allocator
Identifier and Node Number (<tt>ipn</tt>) or its authority (<tt>dtn</tt>) contain no
wildcard or range; 0 otherwise.</t>
          </dd>
          <dt>Multiplier (256):</dt>
          <dd>
            <t>A weight ensuring a pattern for a single node outranks any wildcard
pattern matching that node. For <tt>ipn</tt> patterns the maximum LiteralLength
is 64 (2 x 32 bits), which is well below 256. For <tt>dtn</tt> patterns
LiteralLength can exceed 256, but a single-node pattern always has at
least as many literal characters as any wildcard pattern that matches
the same node, so the ordering is preserved.</t>
          </dd>
          <dt>LiteralLength:</dt>
          <dd>
            <t>The count of non-wildcard characters (or equivalent bits for integers).</t>
          </dd>
        </dl>
        <section anchor="dtn-scheme-scoring">
          <name><tt>dtn</tt> Scheme Scoring</name>
          <t>For <tt>dtn</tt> patterns, LiteralLength is the number of characters in the
authority, in the text form of <xref target="I-D.taylor-dtn-eid-pattern-dtn"/>,
excluding wildcard characters. The demux is always <tt>**</tt> and is not
counted.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Pattern</th>
                <th align="left">Characters</th>
                <th align="left">Score</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>dtn://rover1.example.org/**</tt></td>
                <td align="left">18 (single node)</td>
                <td align="left">274</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>dtn://*.example.org/**</tt></td>
                <td align="left">12 (wildcard)</td>
                <td align="left">12</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="ipn-scoring">
          <name><tt>ipn</tt> Scheme Scoring</name>
          <t>For <tt>ipn</tt> patterns, LiteralLength represents the "Effective Bit Depth" of
the pattern. The FQNN space is treated as a 64-bit integer composed of two
32-bit components, the Allocator Identifier and the Node Number, which
<xref target="RFC9758"/> limits to 32 bits each. The Service Number does not
contribute.</t>
          <artwork><![CDATA[
LiteralLength = Bits_Allocator + Bits_Node
]]></artwork>
          <t>Each component contributes:</t>
          <ul spacing="normal">
            <li>
              <t>Specific value (e.g., <tt>100</tt>): 32 bits.</t>
            </li>
            <li>
              <t>Wildcard (<tt>*</tt>): 0 bits.</t>
            </li>
            <li>
              <t>Range <tt>[min-max]</tt>: 32 - log2(Count) bits, where Count is the number of
values in the range (a power of two).</t>
            </li>
          </ul>
          <table>
            <thead>
              <tr>
                <th align="left">Pattern</th>
                <th align="left">Classification</th>
                <th align="left">IsExact</th>
                <th align="left">LiteralLength</th>
                <th align="left">Score</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>ipn:100.1.*</tt></td>
                <td align="left">Single Node</td>
                <td align="left">1</td>
                <td align="left">64</td>
                <td align="left">320</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>ipn:100.[12-15].*</tt></td>
                <td align="left">Node Range (Size 4)</td>
                <td align="left">0</td>
                <td align="left">62</td>
                <td align="left">62</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>ipn:100.*.*</tt></td>
                <td align="left">Node Wildcard</td>
                <td align="left">0</td>
                <td align="left">32</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>ipn:**</tt></td>
                <td align="left">Default Route</td>
                <td align="left">0</td>
                <td align="left">0</td>
                <td align="left">0</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="metric">
        <name>The Metric Field</name>
        <t>The <tt>metric</tt> field in route advertisements is analogous to BGP's Multi-Exit
Discriminator (MED) <xref target="RFC4271"/>. It allows an Administrative Domain to express
a preference for how traffic should enter its network when multiple paths
exist.</t>
        <t>For example:</t>
        <artwork><![CDATA[
Organization B has two DPP speakers peering with Organization A:
  - Speaker in Europe  (gateway with high latency to Mars relay)
  - Speaker in Australia (gateway with low latency to Mars relay)

Organization B advertises routes to ipn:200.*.* via both speakers:
  - Europe speaker:    metric = 100
  - Australia speaker: metric = 10

Organization A, having learned the same route from both peers,
prefers the lower metric and routes traffic via Australia.

If Organization A instead learns the Australia route only
indirectly, via a third AD, it still prefers Australia over the
direct Europe route: both routes originate in Organization B, and
once Organization B has been chosen as the destination AD, its
metric is applied regardless of AD_PATH length.
]]></artwork>
        <table>
          <thead>
            <tr>
              <th align="left">Property</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Direction</td>
              <td align="left">Controls incoming traffic (traffic TO your AD)</td>
            </tr>
            <tr>
              <td align="left">Scope</td>
              <td align="left">Only compared between routes from the SAME origin AD</td>
            </tr>
            <tr>
              <td align="left">Preference</td>
              <td align="left">Lower metric = more preferred</td>
            </tr>
            <tr>
              <td align="left">Use Cases</td>
              <td align="left">Capacity balancing, latency optimization, cost management</td>
            </tr>
          </tbody>
        </table>
        <t>The metric is set by the originating AD and propagated unchanged through
intermediate ADs: a DPP speaker that re-advertises a route <bcp14>MUST NOT</bcp14> modify
its metric. It lets an AD steer incoming traffic without coordination with
other ADs.</t>
        <t>The metric expresses the originating AD's preference between ways into its
own network. It does not express a preference between different
originating ADs, and is not used to choose between them (see
<xref target="route-selection"/>).</t>
        <t>This is a notable departure from the BGP MED, which is non-transitive: a
MED received from a neighboring AS is not propagated to other neighboring
ASes, and MEDs are compared only between routes received from the same
neighboring AS (<xref section="5.1.4" sectionFormat="of" target="RFC4271"/> and
<xref section="9.1.2.2" sectionFormat="of" target="RFC4271"/>; see also <xref target="RFC4451"/>). The
DPP metric is transitive, and is compared between routes with the same
originating AD, regardless of the neighbor from which they were learned.</t>
      </section>
      <section anchor="route-selection">
        <name>Route Selection Algorithm</name>
        <t>When a DPP speaker has multiple routes whose patterns match the same EID, it
<bcp14>MUST</bcp14> select the best path in two stages: it first chooses the originating
AD (the last entry in AD_PATH) to which bundles for that EID will be sent,
and then chooses among the routes to that AD. The process is specified as
a sequence of steps for clarity; an implementation <bcp14>MAY</bcp14> compute the result
by any means that produces the same outcome. The reasons for the order of
the steps are given in <xref target="selection-rationale"/>.</t>
        <t>Routes that a speaker originates for nodes within its own AD take part in
selection alongside routes received from peers. For this purpose an
originated route has an AD_PATH containing only the speaker's own AD, the
metric and other attributes that the speaker would advertise for it, and
is available from when it is configured.</t>
        <t>A pattern may legitimately be originated by more than one AD. For example,
a spacecraft may be reachable through the ground stations of several
agencies, each of which originates routes to it. This is expected in DTN,
and the selection process is designed for it.</t>
        <t>Route selection is performed for a time t: the time at which a bundle is,
or would be, accepted. A speaker forwarding a bundle that it holds selects
a route for the current time; a speaker deciding what to re-advertise
selects routes for each time within the windows that it advertises
(<xref target="readvertisement"/>). Only routes that have not expired by time t are
considered, including routes that are not yet available at time t: in a
store-and-forward network, a bundle accepted at time t can be held until
such a route becomes available. A route is available at time t if it has
no <tt>valid_from</tt> attribute, or its <tt>valid_from</tt> time is not later than t.
The outcome of selection for the current time changes only at the events
listed in <xref target="time-variant"/>, and a speaker needs to repeat selection only
when one of them occurs.</t>
        <t>Stage 1, choosing the originating AD:</t>
        <ol spacing="normal" type="1"><li>
            <t>Specificity: Keep only the routes with the highest Specificity Score
(<xref target="specificity"/>). For example, prefer <tt>dtn://rover1.example.org/**</tt>
over <tt>dtn://*.example.org/**</tt>.</t>
          </li>
          <li>
            <t>Local preference: If local policy assigns preferences to originating
ADs, or to the peers from which routes were learned (for example, to
reflect cost, contractual arrangements, or trust), keep only the routes
with the highest preference. A speaker with no such policy treats all
routes as equally preferred.</t>
          </li>
          <li>
            <t>Earliest delivery: For each route, take its estimated delivery time to
be its <tt>arrival_time</tt> if it has one, and otherwise the time at which it
becomes available, given by its <tt>valid_from</tt> attribute
(<xref target="time-variant"/>); in either case, if that time is earlier than t,
take it to be t. For each originating AD among the remaining routes,
find the earliest estimated delivery time among its routes. Keep only
the ADs for which this time is earliest.</t>
          </li>
          <li>
            <t>Shortest path to each origin: For each remaining AD, find the length of
the shortest AD_PATH among its routes whose estimated delivery time is
the time found in step 3. Keep only the ADs for which this length is
smallest. Path length counts entries in AD_PATH only; members of an
<tt>ad_set</tt> attribute (<xref target="aggregation"/>) are not counted.</t>
          </li>
          <li>
            <t>Tie-break between origins: If more than one AD remains, choose the AD
with the longest-held route among the routes considered in step 4; if
that does not decide, choose the AD whose name sorts first in a
case-insensitive comparison. A route's age is the time since the
advertisement that created it was first received on its session;
replacing an advertisement with the same ID does not reset the age of
routes whose pattern it retains.</t>
          </li>
        </ol>
        <t>Let T be the earliest time, not earlier than t, at which any of the chosen
AD's routes considered in step 4 is available. Stage 2, choosing a route to
that AD, from among the routes of the AD chosen in stage 1 that remain
after steps 1 and 2 and are available at time T:</t>
        <ol spacing="normal" type="1" start="6"><li>
            <t>Lowest metric: Keep only the routes with the lowest metric
(<xref target="metric"/>), regardless of the length of their AD_PATHs.</t>
          </li>
          <li>
            <t>Earliest arrival: Keep only the routes with the earliest
<tt>arrival_time</tt>. Routes without an <tt>arrival_time</tt> attribute are
considered only if no remaining route has one.</t>
          </li>
          <li>
            <t>Latest expiry: Keep only the routes that remain valid the longest, as
given by their <tt>valid_until</tt> attributes (<xref target="time-variant"/>). A route
with no <tt>valid_until</tt> attribute is treated as remaining valid
indefinitely.</t>
          </li>
          <li>
            <t>Shortest AD_PATH: Keep only the routes with the fewest entries in
AD_PATH.</t>
          </li>
          <li>
            <t>Oldest route: If more than one route remains, choose the one that has
been held the longest, for stability. If more than one route remains,
choose the one with the lower advertisement ID, and then the one
received over the session whose peer's public key has the numerically
smaller SHA-256 digest.</t>
          </li>
        </ol>
        <t>Treating a route without an <tt>arrival_time</tt> as delivering bundles as soon as
it accepts them is optimistic, and so favors routes that omit the
attribute. For this reason, a speaker that re-advertises a route that
carries an <tt>arrival_time</tt> is required to include one (<xref target="readvertisement"/>),
and an originating AD that can estimate when it will deliver bundles
<bcp14>SHOULD</bcp14> include an <tt>arrival_time</tt> in the routes it originates.</t>
        <t>Selecting a route by this process is meaningful only if each AD along the
path forwards bundles according to the route that it advertised. A DPP
speaker therefore <bcp14>MUST</bcp14> advertise to its peers, for each pattern and each
time, only a route derived from the route that it has selected for that
time (<xref target="readvertisement"/>), and <bcp14>MUST NOT</bcp14> advertise a route that it has not
selected.</t>
        <t>A DPP speaker <bcp14>MAY</bcp14> implement additional local policy that further modifies
this process, but such policy is outside the scope of this specification.</t>
      </section>
    </section>
    <section anchor="readvertisement">
      <name>Re-advertising Routes</name>
      <t>When a DPP speaker re-advertises a route that it learned from a peer, it
offers its own AD as a transit path to the route's destinations. Because
DTN is a store-and-forward network, most route attributes describe what the
advertising AD offers (when it accepts bundles, and which bundles it
accepts), rather than properties of the whole path; only AD_PATH, the
metric, and the arrival time describe the path beyond the advertising AD.</t>
      <t>Route selection depends on time (<xref target="route-selection"/>): the route that a
speaker selects for a pattern can differ for bundles that it accepts at
different times, as routes become available and expire. For each pattern,
a speaker that re-advertises routes therefore advertises a series of
routes with non-overlapping time windows, such that, for any time t within
one of those windows, the advertised route is derived from the route that
the speaker selects for time t. If the selected route changes at some time
within a window that the speaker would otherwise advertise, the speaker
splits that window at that time, and advertises each part with attributes
derived from the route selected for it. A speaker <bcp14>MUST NOT</bcp14> advertise a
route for a pattern for any time at which it has no route selected for
that pattern.</t>
      <t>Each such window is advertised as a separate advertisement, with its own
advertisement ID (<xref target="advertisement-id"/>), so that the speaker can update or
withdraw it independently when the routes it has selected change. The
speaker <bcp14>MAY</bcp14> combine several patterns into one advertisement if they share
the same time window and attributes.</t>
      <t>A speaker <bcp14>SHOULD NOT</bcp14> advertise to a peer a route whose AD_PATH, or whose
AD_SET (<xref target="aggregation"/>), already contains that peer's AD. The peer would
discard such a route as a loop (<xref target="loop-detection"/>), so advertising it
only consumes capacity and causes needless processing, which matters on
intermittent links.</t>
      <t>When deriving a re-advertised route from a selected route, the speaker
<bcp14>MUST</bcp14> update its attributes as follows:</t>
      <dl>
        <dt>AD_PATH:</dt>
        <dd>
          <t>The speaker <bcp14>MUST</bcp14> prepend its own <tt>local_ad_id</tt> (<xref target="loop-detection"/>).</t>
        </dd>
        <dt>Metric:</dt>
        <dd>
          <t>The speaker <bcp14>MUST NOT</bcp14> modify the metric (<xref target="metric"/>).</t>
        </dd>
        <dt>Gateway EID:</dt>
        <dd>
          <t>The <tt>gateway_eid</tt> attribute identifies a gateway in the AD that sent the
advertisement, which is the next hop for bundles matching the route
(<xref target="gateway-eid-resolution"/>). When the speaker re-advertises the route,
its own AD becomes that next hop. The speaker <bcp14>MUST NOT</bcp14> propagate the
<tt>gateway_eid</tt> it received. It <bcp14>MUST</bcp14> either include a <tt>gateway_eid</tt> giving
the administrative endpoint EID of a gateway in its own AD, or omit the
attribute, so that the receiving speaker derives the default gateway EID
from the re-advertising speaker's AD identity.</t>
        </dd>
        <dt>Time window:</dt>
        <dd>
          <t>The <tt>valid_from</tt> and <tt>valid_until</tt> attributes describe when the
re-advertising speaker's own AD will accept bundles for the route's
destinations (<xref target="time-variant"/>). The speaker <bcp14>MUST</bcp14> set them to reflect
that, and not simply copy the values it received. Because its AD can
store bundles until they can be forwarded, the window it advertises <bcp14>MAY</bcp14>
begin earlier than the window it received, provided that its AD can hold
bundles accepted before the received window opens until it does. The
window it advertises <bcp14>MUST NOT</bcp14> end later than the window it received,
since bundles accepted after the received route expires cannot be
forwarded over it. A single advertised window that spans several received
routes for the same pattern arises not by extending any one of them, but
from the derivation described above: for each time within the advertised
window, the advertised route is derived from the route selected for that
time, which may be a route that is not yet available.</t>
        </dd>
        <dt>Arrival time:</dt>
        <dd>
          <t>If the received advertisement includes an <tt>arrival_time</tt> attribute, the
speaker <bcp14>MUST</bcp14> include an <tt>arrival_time</tt> giving its own estimate of the
earliest time at which a bundle accepted at the start of its advertised
window can be delivered to the destination. That estimate <bcp14>MUST NOT</bcp14> be
earlier than the received arrival time, since a bundle cannot reach the
destination via the next AD sooner than that AD can deliver it. It will
typically be later, reflecting the time needed to forward the bundle to
the next AD, including any time for which the bundle must be stored. If
the received advertisement does not include an <tt>arrival_time</tt>, the
speaker <bcp14>MUST NOT</bcp14> add one.</t>
        </dd>
        <dt>Bundle size:</dt>
        <dd>
          <t>The <tt>max_bundle_size</tt> attribute gives the largest bundle that the
re-advertising speaker's AD will accept. The speaker <bcp14>MUST</bcp14> set it to
reflect that, and not simply copy the value it received. It <bcp14>MAY</bcp14> be
larger than the received value if the AD can deliver larger bundles to
the next AD, for example by fragmenting them (<xref section="5.8" sectionFormat="of" target="RFC9171"/>)
or by encapsulating them using Bundle-in-Bundle Encapsulation
<xref target="I-D.ietf-dtn-bibe"/> and fragmenting the encapsulating bundle. If the
AD can do neither, the advertised value <bcp14>MUST NOT</bcp14> be larger than the
received value.</t>
        </dd>
        <dt>Bandwidth:</dt>
        <dd>
          <t>The <tt>bandwidth_bps</tt> attribute gives the rate at which the re-advertising
speaker's AD accepts bundles for the route's destinations. The speaker
<bcp14>MUST</bcp14> set it to reflect that, and not simply copy the value it received.
Because the AD can store bundles, this rate is not limited by the rate of
later parts of the path, although sustained traffic in excess of those
rates will eventually exhaust the AD's storage.</t>
        </dd>
        <dt>AD_SET:</dt>
        <dd>
          <t>If the selected route carries an <tt>ad_set</tt> attribute, the speaker <bcp14>MUST</bcp14>
propagate it unchanged (<xref target="aggregation"/>).</t>
        </dd>
        <dt>Unknown attributes:</dt>
        <dd>
          <t>The speaker <bcp14>MUST</bcp14> treat attributes that it does not understand as
described in <xref target="forward-compatibility"/>. The definition of any new route
attribute <bcp14>MUST</bcp14> specify how the attribute is treated when a route is
re-advertised.</t>
        </dd>
      </dl>
      <section anchor="aggregation">
        <name>Aggregation</name>
        <t>A speaker <bcp14>MAY</bcp14> aggregate: that is, in place of the routes it has selected
for several patterns, it <bcp14>MAY</bcp14> advertise a single route whose pattern
covers them all, so as to reduce the number of routes it advertises. For
example, a speaker holding selected routes for <tt>ipn:100.[0-3].*</tt> and
<tt>ipn:100.[4-7].*</tt> may advertise <tt>ipn:100.[0-7].*</tt>. An aggregate is
derived from a set of selected routes, the component routes, as follows.</t>
        <dl>
          <dt>Pattern:</dt>
          <dd>
            <t>The aggregate's pattern <bcp14>MUST</bcp14> satisfy <xref target="pattern-constraints"/> and <bcp14>MUST</bcp14>
cover every component route's pattern. A speaker <bcp14>MUST NOT</bcp14> advertise an
aggregate whose pattern matches any node for which it has no selected
route at any time within the aggregate's window: aggregating <bcp14>MUST NOT</bcp14>
claim reachability that the speaker does not have.</t>
          </dd>
          <dt>AD_PATH and AD_SET:</dt>
          <dd>
            <t>The aggregate's AD_PATH is the longest common prefix of the component
routes' AD_PATHs, after the speaker has prepended its own AD to each
(<xref target="loop-detection"/>); since every component was received from some
peer, this prefix always contains at least the speaker's own AD. Every
AD that appears in any component's AD_PATH but not in that common
prefix <bcp14>MUST</bcp14> be placed in the aggregate's <tt>ad_set</tt> attribute, together
with the members of every component's own <tt>ad_set</tt>. AD_SET is an
unordered set, and is propagated unchanged by speakers that
re-advertise the aggregate. Loop detection considers both AD_PATH
and AD_SET (<xref target="loop-detection"/>). This is the role played by AS_SET in
BGP aggregation (<xref section="9.2.2.2" sectionFormat="of" target="RFC4271"/>).</t>
          </dd>
          <dt>Metric:</dt>
          <dd>
            <t>Component routes <bcp14>MUST</bcp14> have the same originating AD and the same metric;
routes that differ in either <bcp14>MUST NOT</bcp14> be aggregated together, since the
metric is compared only among routes from one originating AD
(<xref target="metric"/>). The aggregate carries that metric. The originating AD of
an aggregate is the last entry of its AD_PATH if the components share
one; if the common prefix is shorter than the components' AD_PATHs,
the originating AD is not recoverable from the aggregate, and speakers
receiving it <bcp14>MUST</bcp14> treat the last AD_PATH entry as the originating AD
for the purposes of <xref target="route-selection"/>.</t>
          </dd>
          <dt>Time window and arrival time:</dt>
          <dd>
            <t>The aggregate's window is set as for any re-advertised route
(<xref target="readvertisement"/>), and <bcp14>MUST</bcp14> lie within the intersection of the
windows during which the speaker has a selected route for every node
the aggregate's pattern matches. If any component carries an
<tt>arrival_time</tt>, the aggregate <bcp14>MUST</bcp14> carry one that is not earlier than
the latest of them, since the aggregate claims delivery to every
component's nodes.</t>
          </dd>
          <dt>Other attributes:</dt>
          <dd>
            <t><tt>gateway_eid</tt>, <tt>max_bundle_size</tt>, and <tt>bandwidth_bps</tt> describe the
aggregating speaker's own AD and are set as for any re-advertised
route. Component routes whose values for these attributes the speaker
would set differently (for example, routes reached through different
gateways) <bcp14>SHOULD NOT</bcp14> be aggregated.</t>
          </dd>
        </dl>
        <t>Because AD_SET loses the order and the per-route composition of the
component paths, path length comparison in <xref target="route-selection"/> counts
AD_PATH entries only; an aggregate therefore appears no longer than its
shortest component. Operators who prefer precise path information over
smaller route tables can disable aggregation.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="ad-authentication">
        <name>AD Authentication</name>
        <t>DPP authenticates Administrative Domains using mutual TLS and TLSA records
published in each AD's DNS zone (<xref target="trust"/>). The
security of this mechanism depends on:</t>
        <dl>
          <dt>DNSSEC:</dt>
          <dd>
            <t>The TLSA records are only as trustworthy as the DNSSEC chain that
protects them. For this reason, DPP requires the TLSA RRset to be
validated as secure (<xref target="handshake"/>), and an AD that cannot sign its zone
cannot be authenticated. An attacker who can forge a secure DNSSEC
response for an AD's zone, for example by compromising the zone's
signing keys or those of a parent zone, can impersonate that AD.</t>
          </dd>
          <dt>Private Key Protection:</dt>
          <dd>
            <t>The private key of each speaker authorized by a TLSA record <bcp14>MUST</bcp14> be
protected. Compromise of a key allows impersonation of the Administrative
Domain until its TLSA record is removed and the record's DNS TTL and
signature validity have expired. Speakers that periodically re-verify
their peers' authorization (see <xref target="handshake"/>) limit the lifetime of an
established session using a revoked key.</t>
          </dd>
          <dt>Channel binding:</dt>
          <dd>
            <t>Because the key authorized in DNS is the key that authenticates the TLS
connection, an attacker cannot relay one speaker's authentication to a
different session. An application-layer proof of key possession, such as
a signed nonce, would not have this property unless it were explicitly
bound to the TLS session.</t>
          </dd>
          <dt>DNS lookups triggered by unauthenticated peers:</dt>
          <dd>
            <t>The Responder looks up TLSA records for an AD named by a peer whose
authorization has not yet been verified. Restricting lookups to ADs with
which the Responder is configured to peer (<xref target="handshake"/>) prevents a
peer from causing lookups of arbitrary names.</t>
          </dd>
          <dt>Misdirected SVCB records:</dt>
          <dd>
            <t>An SVCB record at <tt>_dpp.&lt;AD-Domain&gt;</tt> can direct an Initiator to any
host and port. Because the resulting TLS connection must be
authenticated against the AD's TLSA records before any DPP message is
acted on, a forged or misconfigured SVCB record can cause connection
attempts to a host of the attacker's choosing, but cannot produce an
authenticated session with it. Initiators <bcp14>SHOULD</bcp14> apply the same
restrictions on destination ports to SVCB-derived addresses as to
configured ones (<xref section="12" sectionFormat="of" target="RFC9460"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="transport-security">
        <name>Transport Security</name>
        <t>All DPP sessions use TLS 1.3 <xref target="RFC8446"/> or later, with both speakers
authenticated, as specified in <xref target="handshake"/>. This protects the
confidentiality and integrity of route advertisements in transit, and
ensures that every message on a session comes from the authenticated peer.</t>
      </section>
      <section anchor="route-injection">
        <name>Route Injection Attacks</name>
        <t>A malicious or compromised DPP speaker could advertise routes for destinations
it does not legitimately serve. Implementations <bcp14>SHOULD</bcp14> support policy-based
route filtering, so that operators can restrict the patterns accepted from
each peer, and <bcp14>SHOULD</bcp14> provide the means to monitor route changes. Operators
are advised to confirm, through channels outside DPP, that a peer is
entitled to advertise routes to destinations that matter to them.</t>
        <t>Specificity is the first step of route selection, ahead of local
preference (<xref target="route-selection"/>). A malicious AD can therefore attract
traffic for part of another AD's destinations by advertising a more
specific pattern than the legitimate originating AD does: for example,
<tt>ipn:100.5.*</tt> within another AD's <tt>ipn:100.*.*</tt>, or
<tt>dtn://rover1.example.org/**</tt> within another AD's
<tt>dtn://*.example.org/**</tt>. Such a route is preferred for the EIDs that it
matches, whatever its local preference, delivery time, or path length, so
none of the later selection steps limits its effect. This is the DPP
equivalent of a BGP sub-prefix hijack. Until origin authorization is
available (see below), the principal defense is route filtering: operators
<bcp14>SHOULD</bcp14> configure, for each peer, the patterns that they are prepared to
accept from that peer, and <bcp14>SHOULD</bcp14> reject more specific patterns than they
expect.</t>
        <t>The AD_PATH verification in <xref target="loop-detection"/> ensures that the first entry
in AD_PATH is the authenticated peer, but a receiving speaker cannot verify
the remaining entries: a malicious peer can still add or remove ADs further
along the path, including the originating AD. Aggregation
(<xref target="aggregation"/>) widens this: because an aggregate's AD_PATH is only the
common prefix of its components' paths, a transit AD can shorten the
apparent path of a route by aggregating it, legitimately or otherwise, and
so make it more attractive in selection. Operators who do not trust a peer
to aggregate honestly can apply local preference to routes that carry an
<tt>ad_set</tt>.</t>
        <t>Similarly, the metric is not protected. A malicious transit AD could lower
the metric of routes it re-advertises, in violation of <xref target="metric"/>, and so
attract traffic for the originating AD, even over a longer path: once that
AD has been chosen as the destination, the metric takes precedence over
AD_PATH length (<xref target="route-selection"/>). Because metrics are not used to
choose between originating ADs, such manipulation cannot divert traffic
from one originating AD to another, but it can divert traffic between
routes into the same AD. Operators that are concerned by this can apply
local preference to the peers from which they learn routes, or ignore the
metric on routes from untrusted peers.</t>
        <t>The time window, arrival time, bundle size, and bandwidth attributes are
not protected either. Because estimated delivery time is used to choose
between originating ADs (<xref target="route-selection"/>), a malicious transit AD that
advertises an <tt>arrival_time</tt> earlier than the one it received, in
violation of <xref target="readvertisement"/>, or that omits the <tt>arrival_time</tt> it
received, can attract traffic away from other originating ADs, not just
between routes into the same AD. Local preference, which is applied before
estimated delivery time, can be used to limit the influence of untrusted
peers.</t>
        <t>The time window, bundle size, and bandwidth attributes describe what the
advertising AD itself offers, and a transit AD can legitimately advertise
values that differ from those it received, in either direction
(<xref target="readvertisement"/>). A receiving speaker therefore cannot detect a false
value by comparing it with the values advertised by other ADs on the path.
An AD that overstates what it can store or forward can attract bundles
that it then fails to deliver; the consequences are similar to those of
any other AD that accepts bundles and discards them.</t>
        <t>Mechanisms that could address these threats, analogous to those used to
secure BGP, are discussed in <xref target="future-security"/>.</t>
      </section>
      <section anchor="denial-of-service">
        <name>Denial of Service</name>
        <t>DPP speakers are potentially vulnerable to denial of service attacks:</t>
        <dl>
          <dt>Connection exhaustion:</dt>
          <dd>
            <t>Implementations <bcp14>SHOULD</bcp14> limit the number of concurrent sessions and
implement rate limiting for new connections.</t>
          </dd>
          <dt>Route table exhaustion:</dt>
          <dd>
            <t>Implementations <bcp14>SHOULD</bcp14> limit the number of routes accepted from a single
peer, and close the session with code <tt>MAX_ROUTES_EXCEEDED</tt> when the
limit is exceeded (<xref target="states"/>).</t>
          </dd>
          <dt>Keepalive flooding:</dt>
          <dd>
            <t>Implementations <bcp14>SHOULD</bcp14> rate-limit incoming messages.</t>
          </dd>
        </dl>
      </section>
      <section anchor="privacy-considerations">
        <name>Privacy Considerations</name>
        <t>Route advertisements reveal network topology and reachability information.
Operators should consider whether this information is sensitive before
establishing peering relationships.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="iana-underscore">
        <name>Underscore-Prefixed DNS Name</name>
        <t>This document requests registration of <tt>_dpp</tt> in the "Underscored and
Globally Scoped DNS Node Names" registry per <xref target="RFC8552"/>, for both RR types
used at that name:</t>
        <table>
          <thead>
            <tr>
              <th align="left">RR Type</th>
              <th align="left">_NODE NAME</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">SVCB</td>
              <td align="left">_dpp</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">TLSA</td>
              <td align="left">_dpp</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
        <t>The SVCB entry satisfies the requirement of <xref section="14.3" sectionFormat="of" target="RFC9460"/>
that a protocol mapping be accompanied by such a registration; the mapping
itself is in <xref target="svcb-mapping"/>.</t>
      </section>
      <section anchor="iana-codes">
        <name>DPP Notification Codes Registry</name>
        <t>This document requests the creation of a "DPP Notification Codes"
registry. The registration policy is Specification Required
(<xref section="4.6" sectionFormat="of" target="RFC8126"/>). Each entry consists of a numeric value, a
name, whether the code ends the session, and a reference. The initial
contents are the values defined in <xref target="control-messages"/>, with this
document as the reference. Values 0 through 10 are assigned by this
document; values 11 through 65535 are available for assignment.</t>
      </section>
      <section anchor="iana-capabilities">
        <name>DPP Capabilities Registry</name>
        <t>This document requests the creation of a "DPP Capabilities" registry of
names that may appear in the <tt>capabilities</tt> field of the <tt>Hello</tt> message
(<xref target="identity-message"/>). The registration policy is Specification Required
(<xref section="4.6" sectionFormat="of" target="RFC8126"/>). Each entry consists of a name, which <bcp14>MUST</bcp14>
consist of lowercase ASCII letters, digits, and hyphens, and a reference.
This document registers no names.</t>
      </section>
      <section anchor="iana-attributes">
        <name>DPP Route Attribute Types Registry</name>
        <t>This document requests the creation of a "DPP Route Attribute Types"
registry. Each entry consists of a type number, a name, the protocol
version that introduced it, and a reference to the document that defines
it (<xref target="forward-compatibility"/>). The type number is also the field number
of the attribute's typed member in <tt>RouteAttribute</tt>
(<xref target="route-attributes"/>).</t>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Name</th>
              <th align="left">Version</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Reserved</td>
              <td align="left"> </td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">gateway_eid</td>
              <td align="left">1</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">valid_from</td>
              <td align="left">1</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">valid_until</td>
              <td align="left">1</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">bandwidth_bps</td>
              <td align="left">1</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">max_bundle_size</td>
              <td align="left">1</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">arrival_time</td>
              <td align="left">1</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">ad_set</td>
              <td align="left">1</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">8-61439</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">61440-65534</td>
              <td align="left">Private Use</td>
              <td align="left"> </td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">65535</td>
              <td align="left">Reserved (UnknownAttribute)</td>
              <td align="left"> </td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
        <t>The registration policy for the Unassigned range is Specification
Required (<xref section="4.6" sectionFormat="of" target="RFC8126"/>). A specification requesting a type
<bcp14>MUST</bcp14> provide the items listed in <xref target="forward-compatibility"/>. The registry
does not record how an attribute is processed; that is defined by the
referenced document.</t>
      </section>
      <section anchor="iana-future">
        <name>Future Considerations</name>
        <t>This document does not request a port assignment. DPP uses port 50051 by
default (<xref target="svcb-mapping"/>), which is the port conventionally used by gRPC
services and is not assigned to any protocol in the "Service Name and
Transport Protocol Port Number Registry". Should a port be assigned for
DPP by a later document, it would become the default.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4035">
          <front>
            <title>Protocol Modifications for the DNS Security Extensions</title>
            <author fullname="R. Arends" initials="R." surname="Arends"/>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <author fullname="M. Larson" initials="M." surname="Larson"/>
            <author fullname="D. Massey" initials="D." surname="Massey"/>
            <author fullname="S. Rose" initials="S." surname="Rose"/>
            <date month="March" year="2005"/>
            <abstract>
              <t>This document is part of a family of documents that describe the DNS Security Extensions (DNSSEC). The DNS Security Extensions are a collection of new resource records and protocol modifications that add data origin authentication and data integrity to the DNS. This document describes the DNSSEC protocol modifications. This document defines the concept of a signed zone, along with the requirements for serving and resolving by using DNSSEC. These techniques allow a security-aware resolver to authenticate both DNS resource records and authoritative DNS error indications.</t>
              <t>This document obsoletes RFC 2535 and incorporates changes from all updates to RFC 2535. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4035"/>
          <seriesInfo name="DOI" value="10.17487/RFC4035"/>
        </reference>
        <reference anchor="RFC5890">
          <front>
            <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version. It describes the document collection and provides definitions and other material that are common to the set. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5890"/>
          <seriesInfo name="DOI" value="10.17487/RFC5890"/>
        </reference>
        <reference anchor="RFC6698">
          <front>
            <title>The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schlyter" initials="J." surname="Schlyter"/>
            <date month="August" year="2012"/>
            <abstract>
              <t>Encrypted communication on the Internet often uses Transport Layer Security (TLS), which depends on third parties to certify the keys used. This document improves on that situation by enabling the administrators of domain names to specify the keys used in that domain's TLS servers. This requires matching improvements in TLS client software, but no change in TLS server software. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6698"/>
          <seriesInfo name="DOI" value="10.17487/RFC6698"/>
        </reference>
        <reference anchor="RFC7671">
          <front>
            <title>The DNS-Based Authentication of Named Entities (DANE) Protocol: Updates and Operational Guidance</title>
            <author fullname="V. Dukhovni" initials="V." surname="Dukhovni"/>
            <author fullname="W. Hardaker" initials="W." surname="Hardaker"/>
            <date month="October" year="2015"/>
            <abstract>
              <t>This document clarifies and updates the DNS-Based Authentication of Named Entities (DANE) TLSA specification (RFC 6698), based on subsequent implementation experience. It also contains guidance for implementers, operators, and protocol developers who want to use DANE records.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7671"/>
          <seriesInfo name="DOI" value="10.17487/RFC7671"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8552">
          <front>
            <title>Scoped Interpretation of DNS Resource Records through "Underscored" Naming of Attribute Leaves</title>
            <author fullname="D. Crocker" initials="D." surname="Crocker"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Formally, any DNS Resource Record (RR) may occur under any domain name. However, some services use an operational convention for defining specific interpretations of an RRset by locating the records in a DNS branch under the parent domain to which the RRset actually applies. The top of this subordinate branch is defined by a naming convention that uses a reserved node name, which begins with the underscore character (e.g., "_name"). The underscored naming construct defines a semantic scope for DNS record types that are associated with the parent domain above the underscored branch. This specification explores the nature of this DNS usage and defines the "Underscored and Globally Scoped DNS Node Names" registry with IANA. The purpose of this registry is to avoid collisions resulting from the use of the same underscored name for different services.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="222"/>
          <seriesInfo name="RFC" value="8552"/>
          <seriesInfo name="DOI" value="10.17487/RFC8552"/>
        </reference>
        <reference anchor="RFC9171">
          <front>
            <title>Bundle Protocol Version 7</title>
            <author fullname="S. Burleigh" initials="S." surname="Burleigh"/>
            <author fullname="K. Fall" initials="K." surname="Fall"/>
            <author fullname="E. Birrane, III" initials="E." surname="Birrane, III"/>
            <date month="January" year="2022"/>
            <abstract>
              <t>This document presents a specification for the Bundle Protocol, adapted from the experimental Bundle Protocol specification developed by the Delay-Tolerant Networking Research Group of the Internet Research Task Force and documented in RFC 5050.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9171"/>
          <seriesInfo name="DOI" value="10.17487/RFC9171"/>
        </reference>
        <reference anchor="RFC9364">
          <front>
            <title>DNS Security Extensions (DNSSEC)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="February" year="2023"/>
            <abstract>
              <t>This document describes the DNS Security Extensions (commonly called "DNSSEC") that are specified in RFCs 4033, 4034, and 4035, as well as a handful of others. One purpose is to introduce all of the RFCs in one place so that the reader can understand the many aspects of DNSSEC. This document does not update any of those RFCs. A second purpose is to state that using DNSSEC for origin authentication of DNS data is the best current practice. A third purpose is to provide a single reference for other documents that want to refer to DNSSEC.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="237"/>
          <seriesInfo name="RFC" value="9364"/>
          <seriesInfo name="DOI" value="10.17487/RFC9364"/>
        </reference>
        <reference anchor="RFC9460">
          <front>
            <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9460"/>
          <seriesInfo name="DOI" value="10.17487/RFC9460"/>
        </reference>
        <reference anchor="RFC9758">
          <front>
            <title>Updates to the 'ipn' URI Scheme</title>
            <author fullname="R. Taylor" initials="R." surname="Taylor"/>
            <author fullname="E. Birrane III" initials="E." surname="Birrane III"/>
            <date month="May" year="2025"/>
            <abstract>
              <t>This document updates the specification of the 'ipn' URI scheme previously defined in RFC 6260 and the IANA registries established in RFC 7116. It also updates the rules for the encoding and decoding of these URIs when used as an Endpoint Identifier (EID) in the Bundle Protocol version 7 (BPv7) as defined in RFC 9171. These updates clarify the structure and behavior of the 'ipn' URI scheme, define new encodings of 'ipn' scheme URIs, and establish the registries necessary to manage this scheme.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9758"/>
          <seriesInfo name="DOI" value="10.17487/RFC9758"/>
        </reference>
        <reference anchor="I-D.ietf-dtn-eid-pattern">
          <front>
            <title>Bundle Protocol Endpoint ID Patterns</title>
            <author fullname="Brian Sipos" initials="B." surname="Sipos">
              <organization>The Johns Hopkins University Applied Physics Laboratory</organization>
            </author>
            <date day="23" month="September" year="2026"/>
            <abstract>
              <t>   This document extends the Bundle Protocol Endpoint ID (EID) concept
   into an EID Pattern, which is used to categorize any EID as matching
   a specific pattern or not.  EID Patterns are suitable for expressing
   configuration, for being used on-the-wire by protocols, and for being
   easily understandable by a layperson.  EID Patterns include scheme-
   specific optimizations for expressing set membership and each scheme
   pattern includes text and binary encoding forms; the pattern for the
   "ipn" EID scheme being designed to be highly compressible in its
   binary form.

   This document also defines a Public Key Infrastructure Using X.509
   (PKIX) Other Name form to contain an EID Pattern and a handling rule
   to use a pattern to match an EID.  The Other Name form is used to
   update the PKIX profiles of RFC 9174 and [I-D.ietf-dtn-bpsec-cose].

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dtn-eid-pattern-11"/>
        </reference>
        <reference anchor="I-D.taylor-dtn-eid-pattern-dtn">
          <front>
            <title>Endpoint ID Patterns for the dtn URI Scheme</title>
            <author fullname="Rick Taylor">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-taylor-dtn-eid-pattern-dtn-00"/>
          <annotation>Work in progress; not yet published.</annotation>
        </reference>
        <reference anchor="PROTOBUF" target="https://github.com/protocolbuffers/protocolbuffers.github.io/blob/d75b49a09168103d132dcccf7dc9d6e126ba1f98/content/programming-guides/encoding.md">
          <front>
            <title>Protocol Buffers: Encoding</title>
            <author>
              <organization>Google LLC</organization>
            </author>
            <date year="2026" month="October" day="08"/>
          </front>
          <seriesInfo name="commit" value="d75b49a09168103d132dcccf7dc9d6e126ba1f98"/>
          <annotation>The protobuf wire format. The current rendering is at https://protobuf.dev/programming-guides/encoding/.</annotation>
        </reference>
        <reference anchor="GRPC" target="https://github.com/grpc/grpc/blob/cf61c7d62a1a7f43b9d2ea6488186bc14fc41a8c/doc/PROTOCOL-HTTP2.md">
          <front>
            <title>gRPC over HTTP2</title>
            <author>
              <organization>The gRPC Authors</organization>
            </author>
            <date year="2025" month="April" day="17"/>
          </front>
          <seriesInfo name="commit" value="cf61c7d62a1a7f43b9d2ea6488186bc14fc41a8c"/>
          <annotation>The gRPC wire protocol over HTTP/2. The current revision is at https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md.</annotation>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3345">
          <front>
            <title>Border Gateway Protocol (BGP) Persistent Route Oscillation Condition</title>
            <author fullname="D. McPherson" initials="D." surname="McPherson"/>
            <author fullname="V. Gill" initials="V." surname="Gill"/>
            <author fullname="D. Walton" initials="D." surname="Walton"/>
            <author fullname="A. Retana" initials="A." surname="Retana"/>
            <date month="August" year="2002"/>
            <abstract>
              <t>The Border Gateway Protocol (BGP) [1] is an inter-Autonomous System
routing protocol. The primary function of a BGP speaking system is to
exchange network reachability information with other BGP systems.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3345"/>
          <seriesInfo name="DOI" value="10.17487/RFC3345"/>
        </reference>
        <reference anchor="RFC4271">
          <front>
            <title>A Border Gateway Protocol 4 (BGP-4)</title>
            <author fullname="Y. Rekhter" initials="Y." role="editor" surname="Rekhter"/>
            <author fullname="T. Li" initials="T." role="editor" surname="Li"/>
            <author fullname="S. Hares" initials="S." role="editor" surname="Hares"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>This document discusses the Border Gateway Protocol (BGP), which is an inter-Autonomous System routing protocol.</t>
              <t>The primary function of a BGP speaking system is to exchange network reachability information with other BGP systems. This network reachability information includes information on the list of Autonomous Systems (ASes) that reachability information traverses. This information is sufficient for constructing a graph of AS connectivity for this reachability from which routing loops may be pruned, and, at the AS level, some policy decisions may be enforced.</t>
              <t>BGP-4 provides a set of mechanisms for supporting Classless Inter-Domain Routing (CIDR). These mechanisms include support for advertising a set of destinations as an IP prefix, and eliminating the concept of network "class" within BGP. BGP-4 also introduces mechanisms that allow aggregation of routes, including aggregation of AS paths.</t>
              <t>This document obsoletes RFC 1771. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4271"/>
          <seriesInfo name="DOI" value="10.17487/RFC4271"/>
        </reference>
        <reference anchor="RFC4451">
          <front>
            <title>BGP MULTI_EXIT_DISC (MED) Considerations</title>
            <author fullname="D. McPherson" initials="D." surname="McPherson"/>
            <author fullname="V. Gill" initials="V." surname="Gill"/>
            <date month="March" year="2006"/>
            <abstract>
              <t>The BGP MULTI_EXIT_DISC (MED) attribute provides a mechanism for BGP speakers to convey to an adjacent AS the optimal entry point into the local AS. While BGP MEDs function correctly in many scenarios, a number of issues may arise when utilizing MEDs in dynamic or complex topologies.</t>
              <t>This document discusses implementation and deployment considerations regarding BGP MEDs and provides information with which implementers and network operators should be familiar. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4451"/>
          <seriesInfo name="DOI" value="10.17487/RFC4451"/>
        </reference>
        <reference anchor="RFC4724">
          <front>
            <title>Graceful Restart Mechanism for BGP</title>
            <author fullname="S. Sangli" initials="S." surname="Sangli"/>
            <author fullname="E. Chen" initials="E." surname="Chen"/>
            <author fullname="R. Fernando" initials="R." surname="Fernando"/>
            <author fullname="J. Scudder" initials="J." surname="Scudder"/>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
            <date month="January" year="2007"/>
            <abstract>
              <t>This document describes a mechanism for BGP that would help minimize the negative effects on routing caused by BGP restart. An End-of-RIB marker is specified and can be used to convey routing convergence information. A new BGP capability, termed "Graceful Restart Capability", is defined that would allow a BGP speaker to express its ability to preserve forwarding state during BGP restart. Finally, procedures are outlined for temporarily retaining routing information across a TCP session termination/re-establishment.</t>
              <t>The mechanisms described in this document are applicable to all routers, both those with the ability to preserve forwarding state during BGP restart and those without (although the latter need to implement only a subset of the mechanisms described in this document). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4724"/>
          <seriesInfo name="DOI" value="10.17487/RFC4724"/>
        </reference>
        <reference anchor="RFC7606">
          <front>
            <title>Revised Error Handling for BGP UPDATE Messages</title>
            <author fullname="E. Chen" initials="E." role="editor" surname="Chen"/>
            <author fullname="J. Scudder" initials="J." role="editor" surname="Scudder"/>
            <author fullname="P. Mohapatra" initials="P." surname="Mohapatra"/>
            <author fullname="K. Patel" initials="K." surname="Patel"/>
            <date month="August" year="2015"/>
            <abstract>
              <t>According to the base BGP specification, a BGP speaker that receives an UPDATE message containing a malformed attribute is required to reset the session over which the offending attribute was received. This behavior is undesirable because a session reset would impact not only routes with the offending attribute but also other valid routes exchanged over the session. This document partially revises the error handling for UPDATE messages and provides guidelines for the authors of documents defining new attributes. Finally, it revises the error handling procedures for a number of existing attributes.</t>
              <t>This document updates error handling for RFCs 1997, 4271, 4360, 4456, 4760, 5543, 5701, and 6368.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7606"/>
          <seriesInfo name="DOI" value="10.17487/RFC7606"/>
        </reference>
        <reference anchor="RFC6480">
          <front>
            <title>An Infrastructure to Support Secure Internet Routing</title>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document describes an architecture for an infrastructure to support improved security of Internet routing. The foundation of this architecture is a Resource Public Key Infrastructure (RPKI) that represents the allocation hierarchy of IP address space and Autonomous System (AS) numbers; and a distributed repository system for storing and disseminating the data objects that comprise the RPKI, as well as other signed objects necessary for improved routing security. As an initial application of this architecture, the document describes how a legitimate holder of IP address space can explicitly and verifiably authorize one or more ASes to originate routes to that address space. Such verifiable authorizations could be used, for example, to more securely construct BGP route filters. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6480"/>
          <seriesInfo name="DOI" value="10.17487/RFC6480"/>
        </reference>
        <reference anchor="RFC6811">
          <front>
            <title>BGP Prefix Origin Validation</title>
            <author fullname="P. Mohapatra" initials="P." surname="Mohapatra"/>
            <author fullname="J. Scudder" initials="J." surname="Scudder"/>
            <author fullname="D. Ward" initials="D." surname="Ward"/>
            <author fullname="R. Bush" initials="R." surname="Bush"/>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>To help reduce well-known threats against BGP including prefix mis- announcing and monkey-in-the-middle attacks, one of the security requirements is the ability to validate the origination Autonomous System (AS) of BGP routes. More specifically, one needs to validate that the AS number claiming to originate an address prefix (as derived from the AS_PATH attribute of the BGP route) is in fact authorized by the prefix holder to do so. This document describes a simple validation mechanism to partially satisfy this requirement. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6811"/>
          <seriesInfo name="DOI" value="10.17487/RFC6811"/>
        </reference>
        <reference anchor="RFC7911">
          <front>
            <title>Advertisement of Multiple Paths in BGP</title>
            <author fullname="D. Walton" initials="D." surname="Walton"/>
            <author fullname="A. Retana" initials="A." surname="Retana"/>
            <author fullname="E. Chen" initials="E." surname="Chen"/>
            <author fullname="J. Scudder" initials="J." surname="Scudder"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. The essence of the extension is that each path is identified by a Path Identifier in addition to the address prefix.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7911"/>
          <seriesInfo name="DOI" value="10.17487/RFC7911"/>
        </reference>
        <reference anchor="RFC9319">
          <front>
            <title>The Use of maxLength in the Resource Public Key Infrastructure (RPKI)</title>
            <author fullname="Y. Gilad" initials="Y." surname="Gilad"/>
            <author fullname="S. Goldberg" initials="S." surname="Goldberg"/>
            <author fullname="K. Sriram" initials="K." surname="Sriram"/>
            <author fullname="J. Snijders" initials="J." surname="Snijders"/>
            <author fullname="B. Maddison" initials="B." surname="Maddison"/>
            <date month="October" year="2022"/>
            <abstract>
              <t>This document recommends ways to reduce the forged-origin hijack attack surface by prudently limiting the set of IP prefixes that are included in a Route Origin Authorization (ROA). One recommendation is to avoid using the maxLength attribute in ROAs except in some specific cases. The recommendations complement and extend those in RFC 7115. This document also discusses the creation of ROAs for facilitating the use of Distributed Denial of Service (DDoS) mitigation services. Considerations related to ROAs and RPKI-based Route Origin Validation (RPKI-ROV) in the context of destination-based Remotely Triggered Discard Route (RTDR) (elsewhere referred to as "Remotely Triggered Black Hole") filtering are also highlighted.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="185"/>
          <seriesInfo name="RFC" value="9319"/>
          <seriesInfo name="DOI" value="10.17487/RFC9319"/>
        </reference>
        <reference anchor="RFC9461">
          <front>
            <title>Service Binding Mapping for DNS Servers</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>The SVCB DNS resource record type expresses a bound collection of endpoint metadata, for use when establishing a connection to a named service. DNS itself can be such a service, when the server is identified by a domain name. This document provides the SVCB mapping for named DNS servers, allowing them to indicate support for encrypted transport protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9461"/>
          <seriesInfo name="DOI" value="10.17487/RFC9461"/>
        </reference>
        <reference anchor="RFC8205">
          <front>
            <title>BGPsec Protocol Specification</title>
            <author fullname="M. Lepinski" initials="M." role="editor" surname="Lepinski"/>
            <author fullname="K. Sriram" initials="K." role="editor" surname="Sriram"/>
            <date month="September" year="2017"/>
            <abstract>
              <t>This document describes BGPsec, an extension to the Border Gateway Protocol (BGP) that provides security for the path of Autonomous Systems (ASes) through which a BGP UPDATE message passes. BGPsec is implemented via an optional non-transitive BGP path attribute that carries digital signatures produced by each AS that propagates the UPDATE message. The digital signatures provide confidence that every AS on the path of ASes listed in the UPDATE message has explicitly authorized the advertisement of the route.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8205"/>
          <seriesInfo name="DOI" value="10.17487/RFC8205"/>
        </reference>
        <reference anchor="RFC9174">
          <front>
            <title>Delay-Tolerant Networking TCP Convergence-Layer Protocol Version 4</title>
            <author fullname="B. Sipos" initials="B." surname="Sipos"/>
            <author fullname="M. Demmer" initials="M." surname="Demmer"/>
            <author fullname="J. Ott" initials="J." surname="Ott"/>
            <author fullname="S. Perreault" initials="S." surname="Perreault"/>
            <date month="January" year="2022"/>
            <abstract>
              <t>This document describes a TCP convergence layer (TCPCL) for Delay-Tolerant Networking (DTN). This version of the TCPCL protocol resolves implementation issues in the earlier TCPCL version 3 as defined in RFC 7242 and provides updates to the Bundle Protocol (BP) contents, encodings, and convergence-layer requirements in BP version 7 (BPv7). Specifically, TCPCLv4 uses BPv7 bundles encoded by the Concise Binary Object Representation (CBOR) as its service data unit being transported and provides a reliable transport of such bundles. This TCPCL version also includes security and extensibility mechanisms.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9174"/>
          <seriesInfo name="DOI" value="10.17487/RFC9174"/>
        </reference>
        <reference anchor="I-D.ek-dtn-ipn-arpa">
          <front>
            <title>The ipn.arpa Zone and IPN DNS Operations</title>
            <author fullname="Erik Kline" initials="E." surname="Kline">
              <organization>Aalyria Technologies, LLC</organization>
            </author>
            <date day="4" month="November" year="2025"/>
            <abstract>
              <t>   This document requests a DNS parent for IPN addresses, discusses the
   registration procedures and management of the DNS zone, as well as
   some operational recommendations.  This document specifies that IPN
   addresses may have a DNS representation of the form
   1.978879.ipn.arpa, for IPN node 1 under IPN Allocator 978879.

   This document also describes how this DNS structure can be useful in
   locating the Bundle Protocol (BP) Convergence Layer (CL) endpoint(s)
   of the BP Agent responsible for a given IPN address.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ek-dtn-ipn-arpa-00"/>
        </reference>
        <reference anchor="I-D.ietf-dtn-bibe">
          <front>
            <title>Bundle-in-Bundle Encapsulation</title>
            <author fullname="Rick Taylor" initials="R." surname="Taylor">
              <organization>Aalyria Technologies</organization>
            </author>
            <author fullname="Alberto Montilla" initials="A." surname="Montilla">
              <organization>Spatiam Corporation</organization>
            </author>
            <date day="23" month="October" year="2026"/>
            <abstract>
              <t>   This document describes Bundle-in-Bundle Encapsulation (BIBE), a
   Delay-Tolerant Networking (DTN) Bundle Protocol (BP) tunneling
   mechanism by which a bundle is carried as the payload of one or more
   encapsulating bundles, allowing security measures and routing policy
   to be applied to the encapsulating bundle without modification of the
   encapsulated bundle.  The protocol includes an optional segmentation
   mechanism, allowing a large encapsulated bundle to be carried in
   multiple encapsulating bundles.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dtn-bibe-01"/>
        </reference>
        <reference anchor="I-D.ietf-sidrops-aspa-verification">
          <front>
            <title>BGP AS_PATH Verification Based on Autonomous System Provider Authorization (ASPA) Objects</title>
            <author fullname="Alexander Azimov" initials="A." surname="Azimov">
              <organization>Yandex</organization>
            </author>
            <author fullname="Eugene Bogomazov" initials="E." surname="Bogomazov">
              <organization>Qrator Labs</organization>
            </author>
            <author fullname="Randy Bush" initials="R." surname="Bush">
              <organization>Internet Initiative Japan &amp; Arrcus, Inc.</organization>
            </author>
            <author fullname="Keyur Patel" initials="K." surname="Patel">
              <organization>Arrcus</organization>
            </author>
            <author fullname="Job Snijders" initials="J." surname="Snijders">
              <organization>BSD Software Development</organization>
            </author>
            <author fullname="Kotikalapudi Sriram" initials="K." surname="Sriram">
              <organization>USA National Institute of Standards and Technology</organization>
            </author>
            <date day="16" month="October" year="2026"/>
            <abstract>
              <t>   This document describes procedures that make use of Autonomous System
   Provider Authorization (ASPA) objects in the Resource Public Key
   Infrastructure (RPKI) to verify the Border Gateway Protocol (BGP)
   AS_PATH attribute of advertised routes.  This AS_PATH verification
   enhances routing security by adding means to detect and mitigate
   route leaks and AS_PATH manipulations.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-aspa-verification-29"/>
        </reference>
        <reference anchor="CCSDS-SABR" target="https://ccsds.org/Pubs/734x3b1.pdf">
          <front>
            <title>Schedule-Aware Bundle Routing</title>
            <author>
              <organization>Consultative Committee for Space Data Systems</organization>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="CCSDS" value="Recommended Standard 734.3-B-1"/>
        </reference>
      </references>
    </references>
    <?line 2222?>

<section anchor="cl-discovery">
      <name>Relationship to DNS-Based Convergence Layer Discovery</name>
      <t>This approach aligns with <xref target="I-D.ek-dtn-ipn-arpa"/>, which uses DNS for
convergence layer endpoint discovery (see also <xref target="gateway-eid-resolution"/>).
The two use separate parts of the DNS namespace because they name
different things. Names beneath <tt>ipn.arpa</tt> identify BP nodes, the
destinations and next hops of bundles, and are administered by the
Allocators that assign their Node Numbers. DPP speakers are not
necessarily BP nodes, and act for ADs rather than for Allocators: an AD
may hold several Allocator Identifiers, or none. DPP speakers are
therefore identified, authorized, and located under the AD's own domain
name, at <tt>_dpp.&lt;AD-Domain&gt;</tt>, and not beneath <tt>ipn.arpa</tt>. Because the
<tt>_dpp</tt> label is specific to DPP, it does not conflict with
the names used for convergence layer discovery (e.g., <tt>_dtn-bundle._tcp</tt>),
or with those that future specifications may define for other DTN
services.</t>
      <t>DNS discovery under <tt>ipn.arpa</tt> and DPP are complementary sources of
forwarding information. An Allocator can publish, for each of its nodes,
the convergence layer endpoints of an ingress service that accepts bundles
for that node, as in the examples of <xref target="I-D.ek-dtn-ipn-arpa"/>, giving other
networks a simple, static means of reaching the node without peering. DPP
provides what such discovery does not: reachability that varies with time,
transit through intermediate ADs, and selection between several ADs
through which the same destination can be reached. How a BP agent combines
forwarding information from the two sources is a matter of local
forwarding policy, as <xref target="I-D.ek-dtn-ipn-arpa"/> also notes.</t>
    </section>
    <section anchor="selection-rationale">
      <name>Design Rationale for Route Selection</name>
      <t>This appendix explains the choices made in <xref target="route-selection"/>. It is not
normative.</t>
      <t>Estimated delivery time is compared before path length because, in a DTN,
when a bundle can be delivered typically matters far more than the number
of ADs that it traverses. Arrival time is used where it is known, because
in a store-and-forward network the time at which an AD will accept a
bundle can be much earlier than the time at which the bundle will be
delivered. Where no arrival time is known, the time at which a route
becomes available is used instead; for routes that are already available,
step 3 then has no effect, and the choice between ADs is made on path
length.</t>
      <t>Stage 2 considers only those routes to the chosen AD that are available at
the time at which the route for which it was chosen becomes available. The
originating AD's metric therefore chooses between entry points into that
AD that are available at that time, even if the entry point it prefers has
a later arrival time; as with path length, this is the originating AD's
decision. The metric cannot delay traffic to wait for a preferred entry
point that becomes available later. Among routes of equal metric, the one
that delivers bundles soonest is preferred, and then the one that remains
valid the longest, reducing both the risk that a route expires before
bundles are forwarded and the frequency with which the selection changes.</t>
      <t>Metrics are not consulted in stage 1, and are compared only between routes
with the same originating AD. Choosing the originating AD before
considering metrics means that the outcome does not depend on the order in
which routes are compared. It also means that a new route originated by an
AD can only make that AD more likely to be chosen (if its estimated
delivery time is earlier, or the same over a shorter AD_PATH), or change
the route by which that AD is reached; it can never cause some other AD to
be chosen instead.</t>
      <t>As a result, the selected route is not necessarily the shortest or the
fastest route available. The originating AD's metric can direct traffic
over a longer or slower path into that AD, and the AD so chosen can be
reached over a longer path than some route to a different AD. This is
intended: it allows the originating AD to control how traffic enters its
network, while the choice between ADs is made on local policy, estimated
delivery time, and path length alone.</t>
      <t>This process differs from the BGP decision process
(<xref section="9.1.2.2" sectionFormat="of" target="RFC4271"/>), which compares AS_PATH length before the
MED, and compares MEDs only between routes received from the same
neighboring AS. Because that comparison is not a total order, the BGP
decision can depend on the order in which routes are compared, which can
cause persistent route oscillation <xref target="RFC3345"/>. Choosing the originating AD
first, without reference to metrics, avoids this.</t>
    </section>
    <section anchor="future-security">
      <name>Future Route Security Mechanisms</name>
      <t>This appendix outlines mechanisms, analogous to those used to secure BGP,
that could address the route injection threats described in
<xref target="route-injection"/>. None is specified here; they are recorded to inform
future work. BGP relies on the Resource Public Key Infrastructure (RPKI)
<xref target="RFC6480"/>, a certificate hierarchy that follows the allocation of IP
addresses and AS numbers; DPP uses neither, and DNS, signed with DNSSEC,
already provides a suitable hierarchy, as it does for the authorization of
DPP speakers (<xref target="tlsa-records"/>).</t>
      <dl>
        <dt>Origin validation:</dt>
        <dd>
          <t>Comparable to BGP Route Origin Validation <xref target="RFC6811"/>, the holder of a
namespace could publish in DNS which ADs are entitled to originate
patterns within it, and a receiving speaker could check the originating
AD in AD_PATH against that list, which would also address the
sub-pattern hijack described above.
</t>
          <t>For <tt>ipn</tt> patterns, the allocation model of <xref target="RFC9758"/> provides the
necessary hierarchy. IANA assigns Allocator Identifiers, and each
Allocator assigns Node Numbers within its own space, much as IP address
space is delegated from IANA to Regional Internet Registries and then to
network operators. The <tt>ipn.arpa</tt> zone proposed in <xref target="I-D.ek-dtn-ipn-arpa"/>
mirrors this hierarchy in DNS: a zone for each Allocator Identifier, at
<tt>A.ipn.arpa.</tt>, would be delegated to the nameservers of the Allocator
that holds it, and can be linked into the DNSSEC chain of trust of
<tt>ipn.arpa</tt>. An Allocator could publish in its zone the ADs entitled to
originate routes for its Node Numbers, much as a Route Origin
Authorization in the RPKI does for a range of IP addresses; such
authorizations would need to be signed, so the Allocator's zone would
need to be signed. Because <tt>ipn.arpa</tt> represents each Node Number as a
single decimal label, ranges of Node Numbers do not correspond to DNS
subtrees, so authorizations for ranges would be published as data at
the Allocator's name rather than beneath it. The range constraints of
<xref target="pattern-constraints"/>, under which every range corresponds to a bit
prefix, would allow these authorizations to be expressed compactly and
aligned with the patterns that DPP carries. The record formats would
need to be defined.</t>
          <t><xref target="I-D.ek-dtn-ipn-arpa"/> excludes the Default Allocator (Allocator
Identifier zero) and the Experimental Use Allocator Identifiers from
publication in the global DNS. Origin validation based on <tt>ipn.arpa</tt>
would therefore not be available for patterns within those Allocators'
spaces, which include the Node Numbers that the Default Allocator has
assigned to existing deployments. Other means, such as route filtering,
would continue to be needed for them.</t>
          <t>For <tt>dtn</tt> patterns, the holder of the DNS name in the pattern's
authority could publish this information under that name.</t>
          <t>Unlike route origin validation in BGP, more than one AD would commonly
be authorized for a pattern, since a destination may legitimately be
reachable through several ADs. As with the guidance on the use of
maxLength in the RPKI <xref target="RFC9319"/>, authorizations would need to cover
only the patterns that are actually advertised: an authorization that
also covered unadvertised more specific patterns would allow a malicious
AD to advertise them with a forged originating AD in its AD_PATH, a
sub-pattern hijack that neither origin validation nor competing
legitimate routes would prevent.</t>
        </dd>
        <dt>Neighbor authorization:</dt>
        <dd>
          <t>Comparable to Autonomous System Provider Authorization
<xref target="I-D.ietf-sidrops-aspa-verification"/>, each AD could publish, alongside
its TLSA records, the ADs that it authorizes to re-advertise its routes.
A receiving speaker could then check that each pair of adjacent ADs in
AD_PATH is so authorized. This would detect most forged paths, including
a malicious AD that appends a legitimate originating AD to its own
path, without requiring routes to be signed.</t>
        </dd>
        <dt>Path signatures:</dt>
        <dd>
          <t>Comparable to BGPsec <xref target="RFC8205"/>, each speaker could sign each route
that it advertises, using the key authorized by its AD's TLSA records,
so that a receiving speaker could verify every entry in AD_PATH. Unlike
BGPsec, such signatures could also cover the metric, which is not
modified in transit, and the arrival time advertised at each hop, so
that a receiving speaker could check that no transit AD advanced it.</t>
        </dd>
      </dl>
      <t>Any of these mechanisms would require DPP speakers to look up DNS records
while processing routes, rather than only during session establishment
(<xref target="handshake"/>). Their design would therefore need to consider the volume
of such lookups, the caching of their results, and how a failure to
obtain or validate DNS records is treated. In particular, an attacker
able to block DNSSEC validation of the records for a single pattern must
not thereby be able to cause a route that would otherwise be rejected to
be accepted.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author thanks Erik Kline and Adam Wiethuechter for their reviews and
comments.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7S963bbWJIm+h9PgWP/SCmHpC1f03JVzSgtZaZW+9aWsmvq
1OplgSQkoU0SLAK0rbLdzzLPcp7sxBeXvWMDoJzdZ51Z05UWSWzsS+y4fhEx
Ho+ztmoX5WF+5/j8df62LDfV6ip/u6nbelYv7mTFdLopP+Lrt2/vZLOiLa/q
zc1hXn5eZ9m8nq2KJT083xSX7bgtbhb1ZjxvV+P5ej2+/yBrttNl1TRVvWpv
1vS705PzX7LVdjktN4fZnAY7zGb1qilXzbY5zNvNtszoXQ+zYlMW9M7TVVtu
VmV7J/tUbz5cbertGjMpF8XNveOq2WzXLQ2dn9eLclOs2vx12eKHtII72Yfy
hv49P8zycU5Lw3/Wsjr8k4Zq9Z9zDDdubYxVGCP7WK62NMM8/6+9Oc9lsXf+
Kp/kv+JxfL4sqgV9Thv0v6qyvZzUG/55sZld08fXbbtuDu/dw6/wUfWxnNjP
7uGDe9NN/akp79Hz9/DcVdVeb6f05KaafZDNv0cbj68WtLdN6waNP5nIY5Oq
xo/vDR3d5Lpd0tlnxba9rjfYQhoyzy+3i4Wc9513NFx+zg/d4e9ojsWq+meB
bTnMj4rFzaYq8vNydr2qF/VVVTb8s1K3YCMv/F+F/HAyq5f0vlW9WdIIH3nT
3/3y4tH9h4/1n49/enZf//nkybOf9J9Pnzw90H/+dPDgif3z0aPwz8ePH+g/
nx2E3z57+OSR/fPRExv32dPHPO7p+Jj3nXejrObjddGCDu07t1fuW/x9yGu0
C3Wymq/riojj9Dh/Kz9q8st6k7fXZU6/zn9/d5qfza7LZSl7GLab/9/Y7bfb
bv6Wr07+4P6DJ/xnQ3RdNtXqsraH7eaMj3G8Axe0M/Px/fsyhdVKCTevVvl6
U19tyqZ5nq/qNr8p23y9nS6q5rqcTzDlt+/enL/5+fdf0nUb88h/3l5elhu6
2CerWT3Xu9FfJpHOYf5rXV8tyvzlyxedBY4P7o/v/7RjmUQ2ywrLe/p4+uhZ
cf/ZwZOfDu4/nB88fDCfzWaXT+ezZ/MnJZHGtDi4fCbDtMXmqqSH7GrofaCx
7q116lOZefdvd3Wmi3p674++9h4xubZctfd4Qwua8+pqfLWt5mVzr9S9mSzn
7gTOiUT45fTm/FO1KUE4dDcmOb6ZbTcbGi6n/5kLw66avGjDiuzJybz8eNs7
7/Ep/vru7Yv0BK/ok7z+WG7y387P3z645dgwG/71EX/bpIf3eHz/0fjg6XcO
b3b55GD2dP7kQXFQPL189HD6bP6gLJ48+umng5+eTGcHjy5njw6Kn2bfO7yr
zXom/8OH80eHvUdS7B5T8os3L8e84P5Z8Br5HIwk4v7ce9A9lY8VRF7nUHbP
dFk0dA+H50EnlGHTUsb48OEjY4yPHgS29ujR4/DPpw8eBR5537ghLT4w0Z8O
7LdPnx1ExnjwLDLGwFof3H8cmegj44PlB+Yc1Xo1Ljbrosc6p9W0TD5sqvmm
XjfjolkXY9q96rKaicCgX714cXZ8Nj47+vldSotgkPPtohwffSKtgHjKak58
4p3I71so8wXpFdtFy7tGf4DU2pKvUX62LmZlfly0RX52Q1u/TMn24NkOguUp
QviVIF3cvXl+1harebGZ508fPpo8HP88PrgzSKezWTNvWJK/3U6be/Trzw+n
B5P1/DLLJpNJlo3H47yYNu2mmLVZdn5NxEMEsV2Copp1OaPNKhsWHUOKWr5H
+tn+iCiW+DYR03hek6RdZarnRKo1+cOqzHhAf6GRzl/v57TEhvdmktPI2WUx
qxZVC62CHy8/z66L1VWZ15dE7wX9McX3N3mgVaL/KQ1alqt8XjU0CVrW0Zy4
UIU18qkc8xybfO/ouKG5l6uChAuYmVuBaWp5MdvUTWPqWZPVa5p5SycwvaEX
gD1jp4or4m3YKDqVRCdpeB10qOtiE1YBtrypF9l6UayINDb1UmQzKIM/O8wL
Xj4dQPGBrvuqpBdCFk5L+uaKBvpU3NAzdM1p2USg8yafMoU2dBaLRf0JU5/R
zDbFovpnOecDCS+mzW9olvT/ichlW2jbZN9phnVOk22rWUWCumR5rKder7Jp
eV0sLrH9mLHOhFd1Q2rmivaBaAorLuZ009qq0SUnh0VPy2xpTSQX8Ipp3V4z
hRXzOUQ/9OCGdRRa0QXd9Yt8D+dzRSc0LZpyvs9bfUEXnr6BtqIfj/jzplyU
s7bhUyQVENTHb5je8Gwa+j1oc0Zv0gOSnW5Y96R9A4cgcqNJ5/QcHcEWU8qX
23ZbLPLzl2cjYss0IP9ikL5Ui63+yaRFc7FX/JCTjYBdocld0aJfn52dvCAm
dbWiQ6aRj2izZmRCyMzIllmv6w09zwsg6mvoTczveW28XP1nW9EIdHy8ROVf
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
FfMXXPXpGtTYtNrDeCVhfyTaNtzHQEpk+FL4aQVRJOUD3RvqaMSmWPu9nMDY
OkZyqtjTwCl1I+vTFEv8SFPUkI6jAFQuVRrAKpzR6ttkaVCFs09nEoBpy3Wj
Zb0LrgoCtpP2Lpaya65uPV132tmMC7vcaDdRKQwg/XeauKk0N3pS+5KTNdfU
q4h7ECe1moEyE9wXqfMr6Zp2yGMBphSL0rf9ltho7M4SemvmsQm7on5dt0Yu
66XYtiwWTyoQCWXUw+DVZMVmojgsuEy2mzV7cFeB8kNxKC24clsTz26+tZTt
c0qSsBZXXjjkyoSUtU5R0ADyQZJvr+CzlfmRauCKGE+i/AhIL8qrSuprMqvK
3dLouFN0DijNe8o5XkeW+4xEVJtr5wZFBnE9YZaavISrDccjG22OzZSopbOQ
rTGrQhFK+kYuiTtcpwzHwDnkkHaOX6GseLgzrj6WuxNEGhJtkl0zmnI/rrjj
nqbNiSuSi5C1ktCzo2oy6m/UdjZT8FCrWetyVh36slduWUqMKpQzM31hqPDs
c0f6c7rh4rfShmBe7cgMGOpARJIdIEXVAiw+6U1QuTpugukdKE7ssUn8lFYk
tHJSEnvibTMsCK6Y1H0KuTV+AIvo3pBeFknYynm33N++yG4pFx921HY+Pmye
fS7iyKVyMu0+I7s8RXuO0l2dWH05uVBxQOtbhGjLbVXRB0t+m07hG6VNpNC3
sE25F0aQg8WHQ5FjbXeAH0jX2gz10izBLK25Y1BIo56Q06XFkOM72axi1hFr
fi61pjGyQiAK84ORiKUQDU80AcnWdLGmw/xfAGcKrLCrTcDIhszthqc4aY/o
0AeoQINJtE500Nv9phiHbb5dLlJJ/nwp6Meg1HLL3RQS2YCJeOWZd9HrAHku
2m4dwMZSXs+pQLZ+pwRJb/WwKElUpZewUgKTRlrxwqWMdhvFhp1vGsTCqzZk
3O6PBDfW2WgM1dvruALPp6zcv9TZkTVr55aCMdahjkwjjT/oRcFoo018iOK5
nX6qh7G2n9bHZXnM3tVQ2jltvirLn5ZacCktN2UXMOJeYmu3Pp+uWhmqc89H
f6QNgpJft3wVLpihQgpu1KW4GrviaXH0Eeccy5IV/Ne6eoddGzSqeVxcKXJL
HoeTq/nK2zbv2kMZqApCYBIvoSVBo/OrT5itms4S2PX2aKKhW9OK4eiLM/fH
G2YM9SZMVQsEsAdZ5LMNF5o3d+aqivuupXHFsXjWkvhIhwKNMn846XCbgVUu
LMSEcZolkTGWCq/1tX3HUZ2GlfhOp2kM/FzLvgmoWvrDWV2wmJPe66cdZF2M
GT0mfaYqx1O6ZB+CuSU72zD/6apgusvNyDf6lJzzcMkN4sdiTz3CXfMhCuaw
dY+eSz/1DoyCVY2y8z5LP+dqAdxWU0wjFtaaaz2maZbWGTKiEIOMRbGMq5DW
zWcZYPMYY6iFgQaIKqnAq90YQ0kmUfu1BMpz4aEoBKIdLG8vqOlrrFkDtYJh
a47xJSalVN1npA7iqPRMQIomzTYENt9hC06XjOUnxWOYsYfmloNKtBO6nyyV
HzipHCqi1JkaiSN1c3TpQF+MhhfireSXsJQ3fxboLZM0IjHaDpjtPgi4/76i
dE5KwJdD6R3y5ztP7nzLnkzY5QfnnOa93a4ULPyPlRNr7AP5KX1nQ2Az+Kva
2H3FyTx1Ykmlyfdeb+cnV9tLoG6/pKFOGq7xn1QeiGdonbJWdZfDm1CjCf9E
m1Uwi2StepcG5c5HezC52w9wC94dBJ1sy86+W31JFy5qYC5R5+0+34nexqXx
z6Wtp3Re5L4/WfbMiRU9qu+dyWXJJBF5sihbVk/x4D6ZJwt42c2T32Ofss9D
HLRelWbP8K6JA58ZaLKnnI/RaubL5Htv4JE6b0kofNOrBBYKja3sCR5kZ+k/
40hSfGS9nZLSRmrgTeg/sNouy43imfIg71Dx72j84PGTfF5diaA/x/F55nEL
gTcmkn15ldiMI3M9JtiAQD4Tu+kBrZIlNnV+WXysN01CzcinEnBH7AEaXDDi
Txp1Ww3uKgZVtJnrMtErW2pgw7kvboETGm7tKUk+q67CZpXN/livoEyr7bha
Gt15rTztV63zg3BWPhtq7pCmN+qeiq6Obt8F4jbWj4h9Xry/rMqpLR0bqqHC
ovgprPxI2MvEP8DeDdc8Eb/VPFFpTB2cVFoKXcKE0RPhS4rig0zkpFi1+tYe
9i6dDAhcDFfXhVvq+e9ozprUl4xTLAYGBrTDBmenWdJH6Ohv0WXqi5kmxiIP
d7ndsKXAYR8ki/rDEmyYN7ZwT3alYgWgpGUQZnfzd2lzWpVMX+52V7+jG8Su
e8PV19Uy1eiIlMqvUJ+Ko6nOv8poHQ0jJFWeTMtLe4BpJ6fsj7QCXNbGzb2o
Cg1vPqmLNPObgNJCMsc9u4q9fjeCw/a+eFqZ/grahSsds5ZYaxV1pdhk7LkQ
rMog79J19SJdt7I4cwVC0fvLm7rT+UNr3vU9lJJx2HD3ESPzXpjssHtVinBJ
zS0ozk27gmBeErbjL0KxrF47uCy2DIjNNa10J1vYXhPExWaXoDN2reFRdisH
D/LAWEpCpaHFUeb1A4T4fPKHbx8xkismyHle+yr4KLUrUHB2QZaGx/yhBF8/
+5J3MqbMO+z9fsv7Qs5RYFxaO1+9evDF1dpkJvtktU19/8d+QCC6P8JcR/5n
dPyLyvrb6FBWIkC7pK3mfo/1qDZqIsWLl+1YeMKFpZlxUmy1w26z6OLuYH/t
XJz7RrnxwJsyX5t6okA6PmlrHtr40yuSVk3depWu9VWvV83O3ltN3T8Tri4l
Hd9oilbCVfoKhYxhNEMyDS9K+kSgCUVIwDZph1QvpxWXLZFmJ66dBDyR3aLC
oSkvV0PodDEyYsDx+3Zf8fhcsddEpGurmqAp+orDsSso2bHvz07O+44QNPWA
iAqdYCyeaCX0NKRZGpFnKKcEyZC47/lIUbR4sJmAFDFwPBXCS7ArK6lGNzNU
iZQF24L44Rpns3IdWksYkiAk0q8UCYLkghX6lKw+NNZwia+IKmi+s7UHThWd
659e127TQN+JNxS2JvvarCZFbHfKGzOpBSmdFiEc2i3A9cUwHxovIld4qhq2
9CY5Pe9LCOkgf6B07vdry+a927qzuqwJryRd1mzY23vr/NUu5LB6FAbibh1R
+THXsiQg6FwmwzsYO77LsjqlJqMniwE3/Jg6mncUKINxL0EHEVXf6ZvgNjqu
gK9rMLuS2mCevw20JGBhYNg2AbK6wpg0VBQTqZoaY+GurBUs0MiUAgH94b7h
Tiksrf7Jzvfq4d3WsluVVxrFq6+DbpLeYav7cCkhNo7iZLkqIFJpAlm4ZEGA
Ga3lThm42lOBNT2VViyQLTQMq8thutJFupVCI6ukfHTaSdtHdyFJMvg4gM7r
9XKNT9hM+g32bD4cvsZQ0YCUGKwr3B18Fzowd8NO21+LnMt3TNa3BPCx0+G5
YovYjdybk/gwkykJV7ZWSKFCOYg31PDQSv+s1giMPKnutqs3t70jC87jwY5k
cIqr35lseWIg2o0g7bu4lOL67k7x9SuS0l1zyZk83B3wjxMPm/1fVnP7Nneu
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
poTMvoY8nOjPbfOb9BUhfGBYFf4PTDDNP6ixAQA=

-->

</rfc>
