<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.6 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc editing="no"?>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc iprnotified="no"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-alto-path-vector-16" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="3" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.5.0 -->
  <front>
    <title abbrev="ALTO-PV">ALTO Extension: Path Vector</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-alto-path-vector-16"/>
    <author initials="K." surname="Gao" fullname="Kai Gao">
      <organization>Sichuan University</organization>
      <address>
        <postal>
          <street>No.24 South Section 1, Yihuan Road</street>
          <city>Chengdu</city>
          <code>610000</code>
          <country>China</country>
        </postal>
        <email>kaigao@scu.edu.cn</email>
      </address>
    </author>
    <author initials="Y." surname="Lee" fullname="Young Lee">
      <organization>Samsung</organization>
      <address>
        <postal>
          <country>South Korea</country>
        </postal>
        <email>younglee.tx@gmail.com</email>
      </address>
    </author>
    <author initials="S." surname="Randriamasy" fullname="Sabine Randriamasy">
      <organization>Nokia Bell Labs</organization>
      <address>
        <postal>
          <street>Route de Villejust</street>
          <city>Nozay</city>
          <code>91460</code>
          <country>France</country>
        </postal>
        <email>sabine.randriamasy@nokia-bell-labs.com</email>
      </address>
    </author>
    <author initials="Y.R." surname="Yang" fullname="Yang Richard Yang">
      <organization>Yale University</organization>
      <address>
        <postal>
          <street>51 Prospect Street</street>
          <city>New Haven</city>
          <code>CT</code>
          <country>USA</country>
        </postal>
        <email>yry@cs.yale.edu</email>
      </address>
    </author>
    <author initials="J." surname="Zhang" fullname="Jingxuan Jensen Zhang">
      <organization>Tongji University</organization>
      <address>
        <postal>
          <street>4800 Caoan Road</street>
          <city>Shanghai</city>
          <code>201804</code>
          <country>China</country>
        </postal>
        <email>jingxuan.n.zhang@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>Application</area>
    <workgroup>ALTO</workgroup>
    <abstract>
      <t>This document is an extension to the base Application-Layer Traffic Optimization
(ALTO) protocol. It extends the ALTO Cost Map service and ALTO Property Map
service so that the application can decide which endpoint(s) to connect based on
not only numerical/ordinal cost values but also details of the paths. This is
useful for applications whose performance is impacted by specified components of
a network on the end-to-end paths, e.g., they may infer that several paths share
common links and prevent traffic bottlenecks by avoiding such paths. This
extension introduces a new abstraction called Abstract Network Element (ANE) to
represent these components and encodes a network path as a vector of ANEs. Thus,
it provides a more complete but still abstract graph representation of the
underlying network(s) for informed traffic optimization among endpoints.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <!-- ALTO can improve QoE of overlay applications. -->
<t>Network performance metrics are crucial to the Quality of Experience (QoE) of
today's applications. The ALTO protocol allows Internet Service Providers (ISPs)
to provide guidance, such as topological distance between different end
hosts, to overlay applications. Thus, the overlay applications can potentially
improve the QoE by better orchestrating their traffic to utilize the resources
in the underlying network infrastructure.</t>
      <!-- ALTO supports only cost information of end-to-end paths. -->
<t>Existing ALTO Cost Map and Endpoint Cost Service provide only cost information
on an end-to-end path defined by its &lt;source, destination&gt; endpoints: The base
protocol <xref target="RFC7285" format="default"/> allows the services to expose the topological distances of
end-to-end paths, while various extensions have been proposed to extend the
capability of these services, e.g., to express other performance metrics
<xref target="I-D.ietf-alto-performance-metrics" format="default"/>, to query multiple costs simultaneously
<xref target="RFC8189" format="default"/>, and to obtain the time-varying values
<xref target="RFC8896" format="default"/>.</t>
      <!-- However, the QoE also depends on ANEs. -->
<t>While the existing extensions are sufficient for many overlay applications,
the QoE of some overlay applications depends not only on the cost
information of end-to-end paths, but also on particular components of a network
on the paths and their properties. For example, job completion time, which is an
important QoE metric for a large-scale data analytics application, is impacted
by shared bottleneck links inside the carrier network as link capacity may
impact the rate of data input/output to the job. We refer to such components of
a network as Abstract Network Elements (ANE).</t>
      <t>Predicting such information can be very complex without the help of the ISP
<xref target="AAAI2019" format="default"/>. With proper guidance from the ISP, an overlay application may be
able to schedule its traffic for better QoE. In the meantime, it may be helpful
as well for ISPs if applications could avoid using bottlenecks or challenging
the network with poorly scheduled traffic.</t>
      <t>Despite the benefits, ISPs are not likely to expose details on their
network paths: first for the sake of confidentiality, second because it may
increase volume and computation overhead, and last because it is difficult for
ISPs to figure out what information and what details an application needs.
Likewise, applications do not necessarily need all the network path details and
are likely not able to understand them.</t>
      <t>Therefore, it is beneficial for both parties if an ALTO server provides ALTO
clients with an "abstract network state" that provides the necessary details to
applications, while hiding the network complexity and confidential information.
An "abstract network state" is a selected set of abstract representations of
Abstract Network Elements traversed by the paths between &lt;source, destination&gt;
pairs combined with properties of these Abstract Network Elements that are
relevant to the overlay applications' QoE. Both an application via its ALTO
client and the ISP via the ALTO server can achieve better confidentiality and
resource utilization by appropriately abstracting relevant Abstract Network
Elements. Server scalability can also be improved by combining Abstract Network
Elements and their properties in a single response.</t>
      <t>This document extends <xref target="RFC7285" format="default"/> to allow an ALTO server to convey "abstract
network state", for paths defined by their &lt;source, destination&gt; pairs. To this
end, it introduces a new cost type called "Path Vector". A Path Vector is an
array of identifiers that identifies an Abstract Network Element, which can
be associated with various properties. The associations between ANEs and their
properties are encoded in an ALTO information resource called Unified Property
Map, which is specified in <xref target="I-D.ietf-alto-unified-props-new" format="default"/>.</t>
      <t>For better confidentiality, this document aims to minimize information exposure.
In particular, this document enables and recommends that first ANEs are
constructed on demand, and second an ANE is only associated with properties that
are requested by an ALTO client. A Path Vector response involves two ALTO Maps:
the Cost Map that contains the Path Vector results and the up-to-date Unified
Property Map that contains the properties requested for these ANEs. To enforce
consistency and improve server scalability, this document uses the
<tt>multipart/related</tt> message defined in <xref target="RFC2387" format="default"/> to return the two maps in a
single response.</t>
      <t>The rest of the document is organized as follows. <xref target="term" format="default"/> introduces the extra
terminologies that are used in this document. <xref target="probstat" format="default"/> uses an illustrative
example to introduce the additional requirements of the ALTO framework, and
discusses potential use cases. <xref target="Overview" format="default"/> gives an overview of the protocol
design. <xref target="Basic" format="default"/> and <xref target="Services" format="default"/> specify the extension to the ALTO IRD and the
information resources, with some concrete examples presented in <xref target="Examples" format="default"/>.
<xref target="Compatibility" format="default"/> discusses the backward compatibility with the base protocol
and existing extensions. Security and IANA considerations are discussed in
<xref target="Security" format="default"/> and <xref target="IANA" format="default"/> respectively.</t>
    </section>
    <section anchor="requirements-languages" numbered="true" toc="default">
      <name>Requirements Languages</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/>
when, and only when, they appear in all capitals, as shown here.</t>
      <t>When the words appear in lower case, they are to be interpreted with their
natural language meanings.</t>
    </section>
    <section anchor="term" numbered="true" toc="default">
      <name>Terminology</name>
      <t>NOTE: This document depends on the Unified Property Map extension
<xref target="I-D.ietf-alto-unified-props-new" format="default"/> and should be processed after the Unified
Property Map document.</t>
      <t>This document extends the ALTO base protocol <xref target="RFC7285" format="default"/> and the Unified
Property Map extension <xref target="I-D.ietf-alto-unified-props-new" format="default"/>. In addition to
the terms defined in these documents, this document also uses the following
additional terms:</t>
      <ul spacing="normal">
        <li>
          <t>Abstract Network Element (ANE): An Abstract Network Element is an abstract
representation for a component in a network that handles data packets and whose
properties can potentially have an impact on the end-to-end performance of
traffic. An ANE can be a physical device such as a router, a link or an
interface, or an aggregation of devices such as a subnetwork, or a data
center.  </t>
          <t>
The definition of Abstract Network Element is similar to Network Element
defined in <xref target="RFC2216" format="default"/> in the sense that they both provide an abstract
representation of particular components of a network. However, they have
different criteria on how these particular components are selected.
Specifically, Network Element requires the components to be capable of
exercising QoS control, while Abstract Network Element only requires the
components to have an impact on the end-to-end performance.</t>
        </li>
        <li>ANE Name: An ANE can be constructed either statically in advance or on demand
based on the requested information. Thus, different ANEs may only be valid
within a particular scope, either ephemeral or persistent. Within each scope,
an ANE is uniquely identified by an ANE Name, as defined in <xref target="ane-name-spec" format="default"/>.
Note that an ALTO client must not assume ANEs in different scopes but with
the same ANE Name refer to the same component(s) of the network.</li>
        <li>Path Vector: A Path Vector, or an ANE Path Vector, is a JSON array of ANE
Names. It is a generalization of BGP path vector. While standard BGP path
vector specifies a sequence of autonomous systems for a destination IP prefix,
the Path Vector defined in this extension specifies a sequence of ANEs either
for a source PID and a destination PID as in the CostMapData (11.2.3.6 in
<xref target="RFC7285" format="default"/>), or for a source endpoint and a destination endpoint as in the
EndpointCostMapData (11.5.1.6 in <xref target="RFC7285" format="default"/>).</li>
        <li>Path Vector resource: A Path Vector resource refers to an ALTO resource which
supports the extension defined in this document.</li>
        <li>Path Vector cost type: The Path Vector cost type is a special cost type, which
is specified in <xref target="cost-type-spec" format="default"/>. When this cost type is present in an IRD
entry, it indicates that the information resource is a Path Vector resource.
When this cost type is present in a Filtered Cost Map request or an Endpoint
Cost Service request, it indicates each cost value must be interpreted as a
Path Vector.</li>
        <li>Path Vector request: A Path Vector request refers to the POST message sent to
an ALTO Path Vector resource.</li>
        <li>Path Vector response: A Path Vector response refers to the multipart/related
message returned by a Path Vector resource.</li>
      </ul>
    </section>
    <section anchor="probstat" numbered="true" toc="default">
      <name>Problem Statement</name>
      <section anchor="design-requirements" numbered="true" toc="default">
        <name>Design Requirements</name>
        <t>This section gives an illustrative example of how an overlay application can
benefit from the extension defined in this document.</t>
        <t>Assume that an application has control over a set of flows, which may go through
shared links or switches and share bottlenecks. The application hopes to
schedule the traffic among multiple flows to get better performance. The
capacity region information for those flows will benefit the scheduling.
However, existing cost maps can not reveal such information.</t>
        <t>Specifically, consider a network as shown in <xref target="fig-dumbbell" format="default"/>. The network has 7
switches (sw1 to sw7) forming a dumb-bell topology. Switches sw1/sw3 provide
access on one side, sw2/sw4 provide access on the other side, and sw5-sw7 form
the backbone. End hosts eh1 to eh4 are connected to access switches sw1 to sw4
respectively. Assume that the bandwidth of link eh1 -&gt; sw1 and link sw1 -&gt; sw5
is 150 Mbps, and the bandwidth of the other links is 100 Mbps.</t>
        <figure anchor="fig-dumbbell">
          <name>Raw Network Topology</name>
          <sourcecode type="drawing">
                              +-----+
                              |     |
                            --+ sw6 +--
                           /  |     |  \
     PID1 +-----+         /   +-----+   \          +-----+  PID2
     eh1__|     |_       /               \     ____|     |__eh2
192.0.2.2 | sw1 | \   +--|--+         +--|--+ /    | sw2 | 192.0.2.3
          +-----+  \  |     |         |     |/     +-----+
                    \_| sw5 +---------+ sw7 |
     PID3 +-----+   / |     |         |     |\     +-----+  PID4
     eh3__|     |__/  +-----+         +-----+ \____|     |__eh4
192.0.2.4 | sw3 |                                  | sw4 | 192.0.2.5
          +-----+                                  +-----+

bw(eh1--sw1) = bw(sw1--sw5) = 150 Mbps
bw(eh2--sw2) = bw(eh3--sw3) = bw(eh4--sw4) = 100 Mbps
bw(sw1--sw5) = bw(sw3--sw5) = bw(sw2--sw7) = bw(sw4--sw7) = 100 Mbps
bw(sw5--sw6) = bw(sw5--sw7) = bw(sw6--sw7) = 100 Mbps
</sourcecode>
        </figure>
        <t>The single-node ALTO topology abstraction of the network is shown in
<xref target="fig-base" format="default"/>. Assume the cost map returns a hypothetical cost type representing
the available bandwidth between a source and a destination.</t>
        <figure anchor="fig-base">
          <name>Base Single-Node Topology Abstraction</name>
          <sourcecode type="drawing">
                          +----------------------+
                 {eh1}    |                      |     {eh2}
                 PID1     |                      |     PID2
                   +------+                      +------+
                          |                      |
                          |                      |
                 {eh3}    |                      |     {eh4}
                 PID3     |                      |     PID4
                   +------+                      +------+
                          |                      |
                          +----------------------+
</sourcecode>
        </figure>
        <t>Now assume the application wants to maximize the total rate of the traffic among
a set of &lt;source, destination&gt; pairs, say eh1 -&gt; eh2 and eh1 -&gt; eh4.
Let x denote the transmission rate of eh1 -&gt; eh2 and y denote the rate of eh1 -&gt;
eh4. The objective function is</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    max(x + y).
]]></artwork>
        <t>With the ALTO Cost Map, the cost between PID1 and PID2 and between PID1 and PID4 will
be 100 Mbps. And the client can get a capacity
region of</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    x <= 100 Mbps,
    y <= 100 Mbps.
]]></artwork>
        <t>With this information, the client may mistakenly think it can achieve a maximum
total rate of 200 Mbps. However, one can easily see that this rate is
infeasible, as there are only two potential cases:</t>
        <ul spacing="normal">
          <li>
            <t>Case 1: eh1 -&gt; eh2 and eh1 -&gt; eh4 take different path segments from sw5 to sw7. For
example, if eh1 -&gt; eh2 uses path eh1 -&gt; sw1 -&gt; sw5 -&gt; sw6 -&gt; sw7 -&gt; sw2 -&gt; eh2
and eh1 -&gt; eh4 uses path eh1 -&gt; sw1 -&gt; sw5 -&gt; sw7 -&gt; sw4 -&gt; eh4, then the shared
bottleneck links are eh1 -&gt; sw1 and sw1 -&gt; sw5. In this case, the capacity
region is  </t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
    x     <= 100 Mbps
    y     <= 100 Mbps
    x + y <= 150 Mbps
]]></artwork>
            <t>
and the real optimal total rate is 150 Mbps.</t>
          </li>
          <li>
            <t>Case 2: eh1 -&gt; eh2 and eh1 -&gt; eh4 take the same path segment from sw5 to sw7.
For example, if eh1 -&gt; eh2 uses path eh1 -&gt; sw1 -&gt; sw5 -&gt; sw7 -&gt; sw2 -&gt; eh2
and eh1 -&gt; eh4 also uses path eh1 -&gt; sw1 -&gt; sw5 -&gt; sw7 -&gt; sw4 -&gt; eh4, then the
shared bottleneck link is sw5 -&gt; sw7. In this case, the capacity region is  </t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
    x     <= 100 Mbps
    y     <= 100 Mbps
    x + y <= 100 Mbps
]]></artwork>
            <t>
and the real optimal total rate is 100 Mbps.</t>
          </li>
        </ul>
        <t>Clearly, with more accurate and fine-grained information, the application can
gain a better prediction of its traffic and may orchestrate its resources
accordingly. However, to provide such information, the network needs to expose
more details beyond the simple cost map abstraction. In particular:</t>
        <ul spacing="normal">
          <li>The ALTO server must give more details about the network paths that are
traversed by the traffic between a source and a destination beyond a simple
numerical value, which allows the overlay application to distinguish between
Case 1 and Case 2 and to compute the optimal total rate accordingly.</li>
          <li>The ALTO server must allow the client to distinguish the common ANE shared by
eh1 -&gt; eh2 and eh1 -&gt; eh4, e.g., eh1 - sw1 and sw1 - sw5 in Case 1.</li>
          <li>The ALTO server must give details on the properties of the ANEs used by eh1 -&gt;
eh2 and eh1 -&gt; eh4, e.g., the available bandwidth between eh1 - sw1, sw1 -
sw5, sw5 - sw7, sw5 - sw6, sw6 - sw7, sw7 - sw2, sw7 - sw4, sw2 - eh2, sw4 -
eh4 in Case 1.</li>
        </ul>
        <t>In general, we can conclude that to support the multiple flow scheduling
use case, the ALTO framework must be extended to satisfy the following
additional requirements:</t>
        <dl>
          <dt>
AR1:  </dt>
          <dd>
            <t>An ALTO server must provide essential information on ANEs on the
path of a &lt;source, destination&gt; pair that are critical to the QoE of the
overlay application.</t>
          </dd>
          <dt>
AR2:  </dt>
          <dd>
            <t>An ALTO server must provide essential information on how the paths of
different &lt;source, destination&gt; pairs share a common ANE.</t>
          </dd>
          <dt>
AR3:  </dt>
          <dd>
            <t>An ALTO server must provide essential information on the properties associated
with the ANEs.</t>
          </dd>
        </dl>
        <t>The extension defined in this document proposes a solution to provide these
details.</t>
      </section>
      <section anchor="use-cases" numbered="true" toc="default">
        <name>Use Cases</name>
        <t>While the multiple flow scheduling problem is used to help identify the
additional requirements, the extension defined in this document can be applied
to a wide range of applications. This section highlights some real use cases
that are reported.</t>
        <section anchor="large-scale-data-analytics" numbered="true" toc="default">
          <name>Large-scale Data Analytics</name>
          <t>One potential use case of the extension defined in this document is for
large-scale data analytics such as <xref target="SENSE" format="default"/> and <xref target="LHC" format="default"/>, where data of
gigabytes, terabytes and even petabytes are transferred. For these applications,
the QoE is usually measured as the job completion time, which is related to the
completion time of all the data transfers belonging to the job. With the
extension defined in this document, an ALTO client can identify bottlenecks
inside the network. Therefore, the overlay application can make optimal traffic
distribution or resource reservation (i.e., proportional to the size of the
transferred data), leading to optimal job completion time and network resource
utilization.</t>
        </section>
        <section anchor="context-aware-data-transfer" numbered="true" toc="default">
          <name>Context-aware Data Transfer</name>
          <t>It is important to know the capabilities of various ANEs between two end
hosts, especially in the mobile environment. With the extension defined in this
document, an ALTO client may query the "network context" information, i.e.,
whether the two hosts are connected to the access network through a wireless
link or a wire, and the capabilities of the access network. Thus, the client may
use different data transfer mechanisms, or even deploy different 5G User Plane
Functions (UPF) <xref target="I-D.ietf-dmm-5g-uplane-analysis" format="default"/> to optimize the data
transfer.</t>
        </section>
        <section anchor="cdn-and-service-edge" numbered="true" toc="default">
          <name>CDN and Service Edge</name>
          <t>A growing trend in today's applications is to bring storage and computation
closer to the end users for better QoE, such as Content Delivery Network (CDN),
AR/VR, and cloud gaming, as reported in various documents
(<xref target="I-D.contreras-alto-service-edge" format="default"/>,
<xref target="I-D.huang-alto-mowie-for-network-aware-app" format="default"/>, and
<xref target="I-D.yang-alto-deliver-functions-over-networks" format="default"/>).</t>
          <t>With the extension defined in this document, an ALTO server can selectively reveal the CDNs
and service edges that reside along the paths between different end hosts,
together with their properties such as capabilities (e.g., storage, GPU) and
available Service Level Agreement (SLA) plans. Thus, an ALTO client may leverage
the information to better conduct CDN request routing or offload functionalities
from the user equipment to the service edge, with considerations on different
resource constraints.</t>
        </section>
      </section>
    </section>
    <section anchor="Overview" numbered="true" toc="default">
      <name>Path Vector Extension: Overview</name>
      <t>This section gives a non-normative overview of the extension defined in this
document. It is assumed that readers are familiar with both the base protocol
<xref target="RFC7285" format="default"/> and the Unified Property Map extension
<xref target="I-D.ietf-alto-unified-props-new" format="default"/>.</t>
      <t>To satisfies the additional requirements, this extension:</t>
      <ol spacing="normal" type="1"><li>introduces Abstract Network Element (ANE) as the abstraction of components in
a network whose properties may have an impact on the end-to-end performance
of the traffic handled by those component,</li>
        <li>extends the Cost Map and Endpoint Cost Service to convey the ANEs traversed
by the path of a &lt;source, destination&gt; pair as Path Vectors,</li>
        <li>uses the Unified Property Map to convey the association between the
ANEs and their properties.</li>
      </ol>
      <t>Thus, an ALTO client can learn about the ANEs that are critical to the QoE of a
&lt;source, destination&gt; pair by investigating the corresponding Path Vector value
(AR1), identify common ANEs if an ANE appears in the Path Vectors of multiple
&lt;source, destination&gt; pairs (AR2), and retrieve the properties of the ANEs by
searching the Unified Property Map (AR3).</t>
      <section anchor="ane-design" numbered="true" toc="default">
        <name>Abstract Network Element</name>
        <t>This extension introduces Abstract Network Element (ANE) as an indirect and
network-agnostic way to specify a component or an aggregation of components of a
network whose properties have an impact on the end-to-end performance for
traffic between a source and a destination.</t>
        <t>When an ANE is defined by the ALTO server, it is assigned an identifier, i.e.,
a string of type ANEName as specified in <xref target="ane-name-spec" format="default"/>, and a set of
associated properties.</t>
        <section anchor="ane-domain" numbered="true" toc="default">
          <name>ANE Domain</name>
          <t>In this extension, the associations between ANE and the properties are conveyed
in a Unified Property Map. Thus, ANEs must constitute an entity domain (Section
5.1 of <xref target="I-D.ietf-alto-unified-props-new" format="default"/>), and each ANE property must be an
entity property (Section 5.2 of <xref target="I-D.ietf-alto-unified-props-new" format="default"/>).</t>
          <t>Specifically, this document defines a new entity domain called <tt>ane</tt> as
specified in <xref target="ane-domain-spec" format="default"/> and defines two initial properties for the <tt>ane</tt>
domain.</t>
        </section>
        <section anchor="assoc" numbered="true" toc="default">
          <name>Ephemeral ANE and Persistent ANE</name>
          <t>By design, ANEs are ephemeral and not to be used in further requests. More
precisely, the corresponding ANE names are no longer valid beyond the scope of
the Path Vector response or the incremental update stream for a Path Vector
request. This has several benefits including better privacy of the ISPs and more
flexible ANE computation.</t>
          <t>For example, an ALTO server may define an ANE for each aggregated bottleneck
link between the sources and destinations specified in the request. For requests
with different sources and destinations, the bottlenecks may be different but
can safely reuse the same ANE names. The client can still adjust its traffic
based on the information but is difficult to infer the underlying topology with
multiple queries.</t>
          <t>However, sometimes an ISP may intend to selectively reveal some "persistent"
network components which, opposite to being ephemeral, have a longer life cycle.
For example, an ALTO server may define an ANE for each service edge cluster.
Once a client chooses to use a service edge, e.g., by deploying some
user-defined functions, it may want to stick to the service edge to avoid the
complexity of state transition or synchronization, and continuously query the
properties of the edge cluster.</t>
          <t>This document provides a mechanism to expose such network components as
persistent ANEs. A persistent ANE has a persistent ID that is registered in a
Property Map, together with their properties. See <xref target="domain-defining" format="default"/> and
<xref target="persistent-entity-id" format="default"/> for more detailed instructions on how to identify
ephemeral ANEs and persistent ANEs.</t>
        </section>
        <section anchor="property-filtering" numbered="true" toc="default">
          <name>Property Filtering</name>
          <t>Resource-constrained ALTO clients may benefit from the filtering of Path Vector
query results at the ALTO server, as an ALTO client may only require a subset of
the available properties.</t>
          <t>Specifically, the available properties for a given resource are announced in the
Information Resource Directory as a new capability called <tt>ane-property-names</tt>.
The selected properties are specified in a filter called <tt>ane-property-names</tt> in
the request body, and the response includes and only includes the selected
properties for the ANEs in the response.</t>
          <t>The <tt>ane-property-names</tt> capability for Cost Map and for Endpoint Cost Service
is specified in <xref target="pvcm-cap" format="default"/> and <xref target="pvecs-cap" format="default"/> respectively. The
<tt>ane-property-names</tt> filter for Cost Map and Endpoint Cost Service is specified
in <xref target="pvcm-accept" format="default"/> and <xref target="pvecs-accept" format="default"/> accordingly.</t>
        </section>
      </section>
      <section anchor="path-vector-design" numbered="true" toc="default">
        <name>Path Vector Cost Type</name>
        <t>For an ALTO client to correctly interpret the Path Vector, this extension
specifies a new cost type called the Path Vector cost type.</t>
        <t>The Path Vector cost type must convey both the interpretation and semantics in
the "cost-mode" and "cost-metric" respectively. Unfortunately, a single
"cost-mode" value cannot fully specify the interpretation of a Path Vector,
which is a compound data type. For example, in programming languages such as
C++, a Path Vector will have the type of <tt>JSONArray&lt;ANEName&gt;</tt>.</t>
        <t>Instead of extending the "type system" of ALTO, this document takes a simple
and backward compatible approach. Specifically, the "cost-mode" of the Path
Vector cost type is "array", which indicates the value is a JSON array. Then, an
ALTO client must check the value of the "cost-metric". If the value is
"ane-path", it means that the JSON array should be further interpreted as a path
of ANENames.</t>
        <t>The Path Vector cost type is specified in <xref target="cost-type-spec" format="default"/>.</t>
      </section>
      <section anchor="multipart-path-vector-response" numbered="true" toc="default">
        <name>Multipart Path Vector Response</name>
        <t>For a basic ALTO information resource, a response contains only one type of
ALTO resources, e.g., Network Map, Cost Map, or Property Map. Thus, only one
round of communication is required: An ALTO client sends a request to an ALTO
server, and the ALTO server returns a response, as shown in <xref target="fig-alto" format="default"/>.</t>
        <figure anchor="fig-alto">
          <name>A Typical ALTO Request and Response</name>
          <artwork type="drawing" align="center" name="" alt=""><![CDATA[
  ALTO client                              ALTO server
       |-------------- Request ---------------->|
       |<------------- Response ----------------|
]]></artwork>
        </figure>
        <t>The extension defined in this document, on the other hand, involves two types of
information resources: Path Vectors conveyed in an InfoResourceCostMap (defined
in Section 11.2.3.6 of <xref target="RFC7285" format="default"/>) or an InfoResourceEndpointCostMap (defined
in Section 11.5.1.6 of <xref target="RFC7285" format="default"/>), and ANE properties conveyed in an
InfoResourceProperties (defined in Section 7.6 of <xref target="I-D.ietf-alto-unified-props-new" format="default"/>).</t>
        <t>Instead of two consecutive message exchanges, the extension defined in this
document enforces one round of communication. Specifically, the ALTO client must
include the source and destination pairs and the requested ANE properties in a
single request, and the ALTO server must return a single response containing
both the Path Vectors and properties associated with the ANEs in the Path
Vectors, as shown in <xref target="fig-pv" format="default"/>. Since the two parts are bundled together in one
response message, their orders are interchangeable. See <xref target="pvcm-resp" format="default"/> and
<xref target="pvecs-resp" format="default"/> for details.</t>
        <figure anchor="fig-pv">
          <name>The Path Vector Extension Request and Response</name>
          <artwork type="drawing" align="center" name="" alt=""><![CDATA[
  ALTO client                              ALTO server
       |------------- PV Request -------------->|
       |<----- PV Response (Cost Map Part) -----|
       |<--- PV Response (Property Map Part) ---|
]]></artwork>
        </figure>
        <t>This design is based on the following considerations:</t>
        <ol spacing="normal" type="1"><li>Since ANEs may be constructed on demand, and potentially based on the
requested properties (See <xref target="ane-design" format="default"/> for more details). If sources and
destinations are not in the same request as the properties, an ALTO server
either cannot construct ANEs on-demand, or must wait until both requests are
received.</li>
          <li>As ANEs may be constructed on demand, mappings of each ANE to its underlying
network devices and resources can be specific to the request. In order
to respond to the Property Map request correctly, an ALTO server must store
the mapping of each Path Vector request until the client fully retrieves the
property information. The "stateful" behavior may substantially harm the
server scalability and potentially lead to Denial-of-Service attacks.</li>
        </ol>
        <t>One approach to realize the one-round communication is to define a new media
type to contain both objects, but this violates modular design. This document
follows the standard-conforming usage of <tt>multipart/related</tt> media type defined
in <xref target="RFC2387" format="default"/> to elegantly combine the objects. Path Vectors are encoded in an
InfoResourceCostMap or an InfoResourceEndpointCostMap, and the Property Map is
encoded in an InfoResourceProperties. They are encapsulated as parts of a
multipart message. The modular composition allows ALTO servers and clients to
reuse the data models of the existing information resources. Specifically, this
document addresses the following practical issues using <tt>multipart/related</tt>.</t>
        <section anchor="identifying-the-media-type-of-the-root-object" numbered="true" toc="default">
          <name>Identifying the Media Type of the Root Object</name>
          <t>ALTO uses media type to indicate the type of an entry in the Information
Resource Directory (IRD) (e.g., <tt>application/alto-costmap+json</tt> for Cost Map
and <tt>application/alto-endpointcost+json</tt> for Endpoint Cost Service). Simply
putting <tt>multipart/related</tt> as the media type, however, makes it impossible
for an ALTO client to identify the type of service provided by related
entries.</t>
          <t>To address this issue, this document uses the <tt>type</tt> parameter to indicate the
root object of a multipart/related message. For a Cost Map resource, the
<tt>media-type</tt> in the IRD entry is <tt>multipart/related</tt> with the parameter
<tt>type=application/alto-costmap+json</tt>; for an Endpoint Cost Service, the
parameter is <tt>type=application/alto-endpointcost+json</tt>.</t>
        </section>
        <section anchor="ref-partmsg-design" numbered="true" toc="default">
          <name>References to Part Messages</name>
          <t>As the response of a Path Vector resource is a multipart message with two
different parts, it is important that each part can be uniquely identified.
Following the designs of <xref target="RFC8895" format="default"/>, this extension requires that an ALTO
server assigns a unique identifier to each part of the <tt>multipart/related</tt>
response message. This identifier, referred to as a Part Resource ID (See
<xref target="part-rid-spec" format="default"/> for details), is present in the part message's <tt>Content-ID</tt>
header. By concatenating the Part Resource ID to the identifier of the Path
Vector request, an ALTO server/client can uniquely identify the Path Vector Part
or the Property Map part.</t>
        </section>
      </section>
    </section>
    <section anchor="Basic" numbered="true" toc="default">
      <name>Specification: Basic Data Types</name>
      <section anchor="ane-name-spec" numbered="true" toc="default">
        <name>ANE Name</name>
        <t>An ANE Name is encoded as a JSON string with the same format as that of the type
PIDName (Section 10.1 of <xref target="RFC7285" format="default"/>).</t>
        <t>The type ANEName is used in this document to indicate a string of this
format.</t>
      </section>
      <section anchor="ane-domain-spec" numbered="true" toc="default">
        <name>ANE Domain</name>
        <t>The ANE domain associates property values with the Abstract Network Elements in
a Property Map. Accordingly, the ANE domain always depends on a Property Map.</t>
        <section anchor="domain-type" numbered="true" toc="default">
          <name>Entity Domain Type</name>
          <t>ane</t>
        </section>
        <section anchor="entity-address" numbered="true" toc="default">
          <name>Domain-Specific Entity Identifier</name>
          <t>The entity identifiers are the ANE Names in the associated Property Map.</t>
        </section>
        <section anchor="hierarchy-and-inheritance" numbered="true" toc="default">
          <name>Hierarchy and Inheritance</name>
          <t>There is no hierarchy or inheritance for properties associated with ANEs.</t>
        </section>
        <section anchor="domain-defining" numbered="true" toc="default">
          <name>Media Type of Defining Resource</name>
          <t>When resource specific domains are defined with entities of domain type <tt>ane</tt>,
the defining resource for entity domain type <tt>pid</tt> MUST be a Property Map. The
media type of defining resources for the <tt>ane</tt> domain is:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
application/alto-propmap+json
]]></artwork>
          <t>Specifically, for ephemeral ANEs that appear in a Path Vector response, their
entity domain names MUST be exactly ".ane" and the defining resource of these
ANEs is the Property Map part of the multipart response. Meanwhile, for
persistent ANEs whose entity domain name has the format of "PROPMAP.ane" where
PROPMAP is the name of a Property Map resource, PROPMAP is the defining resource
of these ANEs. Persistent entities are <tt>persistent</tt> because standalone queries
can be made by an ALTO client to their defining resources when the connection to
the Path Vector service is closed.</t>
          <t>For example, the defining resource of an ephemeral ANE whose entity identifier
is ".ane:NET1" is the Property Map part that contains this identifier. The
defining resource of a persistent ANE whose entity identifier is
"dc-props.ane:DC1" is the Property Map with the resource ID "dc-props".</t>
        </section>
      </section>
      <section anchor="ane-prop-name-spec" numbered="true" toc="default">
        <name>ANE Property Name</name>
        <t>An ANE Property Name is encoded as a JSON string with the same format as that of
Entity Property Name (Section 5.2.2 of <xref target="I-D.ietf-alto-unified-props-new" format="default"/>).</t>
      </section>
      <section anchor="initial-ane-property-types" numbered="true" toc="default">
        <name>Initial ANE Property Types</name>
        <t>In this document, two initial ANE property types are specified,
<tt>max-reservable-bandwidth</tt> and <tt>persistent-entity-id</tt>.</t>
        <t>Note that the two property types defined in this document do not depend on any
information resource, so their ResourceID part must be empty.</t>
        <figure anchor="fig-pe">
          <name>Examples of ANE Properties</name>
          <artwork type="drawing" align="center" name="" alt=""><![CDATA[
                                       ----- L1
                                      /
          PID1   +---------------+ 10 Gbps +----------+    PID3
   192.0.2.0/28+-+ +-----------+ +---------+          +--+192.0.2.32/28
                 | |   MEC1    | |         |          |
                 | +-----------+ |   +-----+          |
          PID2   |               |   |     +----------+
  192.0.2.16/28+-+               |   |         NET3
                 |               |   | 15 Gbps
                 |               |   |        \
                 +---------------+   |         -------- L2
                       NET1          |
                              +---------------+
                              | +-----------+ |   PID4
                              | |   MEC2    | +--+192.0.2.48/28
                              | +-----------+ |
                              +---------------+
                                    NET2
]]></artwork>
        </figure>
        <t>In this document, <xref target="fig-pe" format="default"/> is used to illustrate the use of the two initial
ANE property types. There are 3 sub-networks (NET1, NET2 and NET3) and two
interconnection links (L1 and L2). It is assumed that each sub-network has
sufficiently large bandwidth to be reserved.</t>
        <section anchor="maxresbw" numbered="true" toc="default">
          <name>New ANE Property Type: Maximum Reservable Bandwidth</name>
          <dl>
            <dt>
Identifier:  </dt>
            <dd>
              <t><tt>max-reservable-bandwidth</tt></t>
            </dd>
            <dt>
Intended Semantics:  </dt>
            <dd>
              <t>The maximum reservable bandwidth property stands for the maximum bandwidth
that can be reserved for all the traffic that traverses an ANE. The value MUST
be encoded as a non-negative numerical cost value as defined in Section
6.1.2.1 of <xref target="RFC7285" format="default"/> and the unit is bit per second. If this property is
requested but not present in an ANE, it MUST be interpreted as that the ANE
does not support bandwidth reservation.</t>
            </dd>
            <dt>
Security Considerations:  </dt>
            <dd>
              <t>ALTO entity properties expose information to ALTO clients. ALTO service
providers should be made aware of the security ramifications related to the
exposure of an entity property.</t>
            </dd>
            <dt>
Media Type of Defining Resource:  </dt>
            <dd>
              <t>application/alto-propmap+json</t>
            </dd>
          </dl>
          <t>To illustrate the use of <tt>max-reservable-bandwidth</tt>, consider the network in
<xref target="fig-pe" format="default"/>. An ALTO server can create an ANE for each interconnection link,
where the initial value for <tt>max-reservable-bandwidth</tt> is the link capacity.</t>
        </section>
        <section anchor="persistent-entity-id" numbered="true" toc="default">
          <name>New ANE Property Type: Persistent Entity ID</name>
          <dl>
            <dt>
Identifier:  </dt>
            <dd>
              <t><tt>persistent-entity-id</tt></t>
            </dd>
            <dt>
Intended Semantics:  </dt>
            <dd>
              <t>The persistent entity ID property is the entity identifier of the persistent
ANE which an ephemeral ANE presents (See <xref target="assoc" format="default"/> for details). The value of
this property is encoded with the format defined in Section 5.1.3 of
<xref target="I-D.ietf-alto-unified-props-new" format="default"/>.
</t>
              <t>In this format, the entity ID combines:</t>
              <ul spacing="normal">
                <li>a defining information resource for the ANE on which a
"persistent-entity-id" is queried, which is the Property Map resource
defining the ANE as a persistent entity, together with the properties</li>
                <li>the persistent name of the ANE in that Property Map</li>
              </ul>
              <t>With this format, the client has all the needed information for further
standalone query properties on the persistent ANE.</t>
            </dd>
            <dt>
Security Considerations:  </dt>
            <dd>
              <t>ALTO entity properties expose information to ALTO clients. ALTO service
providers should be made aware of the security ramifications related to the
exposure of an entity property.</t>
            </dd>
            <dt>
Media Type of Defining Resource:  </dt>
            <dd>
              <t>application/alto-propmap+json</t>
            </dd>
          </dl>
          <t>To illustrate the use of <tt>persistent-entity-id</tt>, consider the network in
<xref target="fig-pe" format="default"/>. Assume the ALTO server has a Property Map resource called
"mec-props" that defines persistent ANEs "MEC1" and "MEC2" that represent the
corresponding mobile edge computing (MEC) clusters. Since MEC1 is associated
with NET1, the <tt>persistent-entity-id</tt> of the ephemeral ANE <tt>.ane:NET1</tt> is the
persistent entity id <tt>mec-props.ane:MEC1</tt>.</t>
        </section>
      </section>
      <section anchor="cost-type-spec" numbered="true" toc="default">
        <name>Path Vector Cost Type</name>
        <t>This document defines a new cost type, which is referred to as the <tt>Path Vector</tt>
cost type. An ALTO server MUST offer this cost type if it supports the extension
defined in this document.</t>
        <section anchor="metric-spec" numbered="true" toc="default">
          <name>Cost Metric: ane-path</name>
          <t>The cost metric "ane-path" indicates the value of such a cost type conveys an
array of ANE names, where each ANE name uniquely represents an ANE traversed by
traffic from a source to a destination.</t>
          <t>An ALTO client MUST interpret the Path Vector as if the traffic between a source
and a destination logically traverses the ANEs in the same order as they appear
in the Path Vector.</t>
        </section>
        <section anchor="mode-spec" numbered="true" toc="default">
          <name>Cost Mode: array</name>
          <t>The cost mode "array" indicates that every cost value in the response body of a
(Filtered) Cost Map or an Endpoint Cost Service MUST be interpreted as a JSON
array object.</t>
          <t>Note that this cost mode only requires the cost value to be a JSON array of
JSONValue. However, an ALTO server that enables this extension MUST return a
JSON array of ANEName (<xref target="ane-name-spec" format="default"/>) when the cost metric is
"ane-path".</t>
        </section>
      </section>
      <section anchor="part-rid-spec" numbered="true" toc="default">
        <name>Part Resource ID</name>
        <t>A Part Resource ID is encoded as a JSON string with the same format as that of the
type ResourceID (Section 10.2 of <xref target="RFC7285" format="default"/>).</t>
        <t>Even though the client-id assigned to a Path Vector request and the Part
Resource ID MAY contain up to 64 characters by their own definition, their
concatenation (see <xref target="ref-partmsg-design" format="default"/>) MUST also conform to the same length
constraint. The same requirement applies to the resource ID of the Path Vector
resource, too. Thus, it is RECOMMENDED to limit the length of resource ID and
client ID related to a Path Vector resource to 31 characters.</t>
      </section>
    </section>
    <section anchor="Services" numbered="true" toc="default">
      <name>Specification: Service Extensions</name>
      <section anchor="notations" numbered="true" toc="default">
        <name>Notations</name>
        <t>This document uses the same syntax and notations as introduced in Section 8.2 of
RFC 7285 <xref target="RFC7285" format="default"/> to specify the extensions to existing ALTO resources and
services.</t>
      </section>
      <section anchor="pvcm-spec" numbered="true" toc="default">
        <name>Multipart Filtered Cost Map for Path Vector</name>
        <t>This document introduces a new ALTO resource called multipart Filtered Cost Map
resource, which allows an ALTO server to provide other ALTO resources associated
with the Cost Map resource in the same response.</t>
        <section anchor="media-type" numbered="true" toc="default">
          <name>Media Type</name>
          <t>The media type of the multipart Filtered Cost Map resource is
<tt>multipart/related;type=application/alto-costmap+json</tt>.</t>
        </section>
        <section anchor="http-method" numbered="true" toc="default">
          <name>HTTP Method</name>
          <t>The multipart Filtered Cost Map is requested using the HTTP POST method.</t>
        </section>
        <section anchor="pvcm-accept" numbered="true" toc="default">
          <name>Accept Input Parameters</name>
          <t>The input parameters of the multipart Filtered Cost Map are supplied in the body
of an HTTP POST request. This document extends the input parameters to a
Filtered Cost Map, which is defined as a JSON object of type
<tt>ReqFilteredCostMap</tt> in Section 4.1.2 of RFC 8189 <xref target="RFC8189" format="default"/>, with a data
format indicated by the media type <tt>application/alto-costmapfilter+json</tt>, which
is a JSON object of type PVReqFilteredCostMap:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
object {
  [EntityPropertyName ane-property-names<0..*>;]
} PVReqFilteredCostMap : ReqFilteredCostMap;
]]></artwork>
          <t>with fields:</t>
          <dl>
            <dt>
ane-property-names:  </dt>
            <dd>
              <t>A list of selected ANE properties to be included in the response. Each
property in this list MUST match one of the supported ANE properties indicated
in the resource's <tt>ane-property-names</tt> capability (See <xref target="pvcm-cap" format="default"/>). If the
field is NOT present, it MUST be interpreted as an empty list.</t>
            </dd>
          </dl>
          <t>Example: Consider the network in <xref target="fig-dumbbell" format="default"/>. If an ALTO client wants to
query the <tt>max-reservable-bandwidth</tt> between PID1 and PID2, it can submit the
following request.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
   POST /costmap/pv HTTP/1.1
   Host: alto.example.com
   Accept: multipart/related;type=application/alto-costmap+json,
           application/alto-error+json
   Content-Length: 201
   Content-Type: application/alto-costmapfilter+json

   {
     "cost-type": {
       "cost-mode": "array",
       "cost-metric": "ane-path"
     },
     "pids": {
       "srcs": [ "PID1" ],
       "dsts": [ "PID2" ]
     },
     "ane-property-names": [ "max-reservable-bandwidth" ]
   }
]]></artwork>
        </section>
        <section anchor="pvcm-cap" numbered="true" toc="default">
          <name>Capabilities</name>
          <t>The multipart Filtered Cost Map resource extends the capabilities defined
in Section 4.1.1 of <xref target="RFC8189" format="default"/>. The capabilities are defined by a JSON
object of type PVFilteredCostMapCapabilities:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
object {
  [EntityPropertyName ane-property-names<0..*>;]
} PVFilteredCostMapCapabilities : FilteredCostMapCapabilities;
]]></artwork>
          <t>with fields:</t>
          <dl>
            <dt>
cost-type-names:  </dt>
            <dd>
              <t>The <tt>cost-type-names</tt> field MUST include the Path Vector cost type,
unless explicitly documented by a future extension. This also implies that the
Path Vector cost type MUST be defined in the <tt>cost-types</tt> of the Information
Resource Directory's <tt>meta</tt> field.</t>
            </dd>
            <dt>
cost-constraints:  </dt>
            <dd>
              <t>If the <tt>cost-type-names</tt> field includes the Path Vector cost type,
<tt>cost-constraints</tt> field MUST be <tt>false</tt> or not present unless specifically
instructed by a future document.</t>
            </dd>
            <dt>
testable-cost-type-names:  </dt>
            <dd>
              <t>If the <tt>cost-type-names</tt> field includes the Path Vector cost type and the
<tt>testable-cost-type-names</tt> field is present, the Path Vector cost type MUST
NOT be included in the <tt>testable-cost-type-names</tt> field unless specifically
instructed by a future document.</t>
            </dd>
            <dt>
ane-property-names:  </dt>
            <dd>
              <t>Defines a list of ANE properties that can be returned. If the field is NOT
present, it MUST be interpreted as an empty list, indicating the ALTO server
cannot provide any ANE property.</t>
            </dd>
          </dl>
        </section>
        <section anchor="uses" numbered="true" toc="default">
          <name>Uses</name>
          <t>This member MUST include the resource ID of the network map based on which the
PIDs are defined. If this resource supports <tt>persistent-entity-id</tt>, it MUST also
include the defining resources of persistent ANEs that may appear in the response.</t>
        </section>
        <section anchor="pvcm-resp" numbered="true" toc="default">
          <name>Response</name>
          <t>The response MUST indicate an error, using ALTO protocol error handling, as
defined in Section 8.5 of <xref target="RFC7285" format="default"/>, if the request is invalid.</t>
          <t>The "Content-Type" header of the response MUST be <tt>multipart/related</tt> as defined
by <xref target="RFC2387" format="default"/> with the following parameters:</t>
          <dl>
            <dt>
type:  </dt>
            <dd>
              <t>The type parameter MUST be "application/alto-costmap+json". Note that
<xref target="RFC2387" format="default"/> permits both parameters with and without the double quotes.</t>
            </dd>
            <dt>
start:  </dt>
            <dd>
              <t>The start parameter is as defined in <xref target="RFC2387" format="default"/>. If present, it MUST have the
same value as the <tt>Content-ID</tt> header of the Path Vector part.</t>
            </dd>
            <dt>
boundary:  </dt>
            <dd>
              <t>The boundary parameter is as defined in <xref target="RFC2387" format="default"/>.</t>
            </dd>
          </dl>
          <t>The body of the response MUST consist of two parts:</t>
          <ul spacing="normal">
            <li>
              <t>The Path Vector part MUST include <tt>Content-ID</tt> and <tt>Content-Type</tt> in its
header. The value of <tt>Content-ID</tt> MUST has the format of a Part Resource ID.
The <tt>Content-Type</tt> MUST be <tt>application/alto-costmap+json</tt>.  </t>
              <t>
The body of the Path Vector part MUST be a JSON object with the same format as
defined in Section 11.2.3.6 of <xref target="RFC7285" format="default"/> when the <tt>cost-type</tt> field is
present in the input parameters and MUST be a JSON object with the same format
as defined in Section 4.1.3 of <xref target="RFC8189" format="default"/> if the <tt>multi-cost-types</tt> field is
present. The JSON object MUST include the
<tt>vtag</tt> field in the <tt>meta</tt> field, which provides the version tag of the
returned CostMapData. The resource ID of the version tag MUST follow the
format of  </t>
              <artwork name="" type="" align="left" alt=""><![CDATA[
resource-id '.' part-resource-id
]]></artwork>
              <t>
where <tt>resource-id</tt> is the resource Id of the Path Vector resource, and
<tt>part-resource-id</tt> has the same value as the <tt>Content-ID</tt> of the Path Vector
part.
The <tt>meta</tt> field MUST also include the <tt>dependent-vtags</tt> field, whose value is
a single-element array to indicate the version tag of the network map used,
where the network map is specified in the <tt>uses</tt> attribute of the multipart
Filtered Cost Map resource in IRD.</t>
            </li>
            <li>
              <t>The Unified Property Map part MUST also include <tt>Content-ID</tt> and
<tt>Content-Type</tt> in its header. The value of <tt>Content-ID</tt> has the format of a
Part Resource ID. The <tt>Content-Type</tt> MUST be <tt>application/alto-propmap+json</tt>.  </t>
              <t>
The body of the Unified Property Map part is a JSON object with the same
format as defined in Section 4.6 of <xref target="I-D.ietf-alto-unified-props-new" format="default"/>. The
JSON object MUST include the <tt>dependent-vtags</tt> field in the <tt>meta</tt> field. The
value of the <tt>dependent-vtags</tt> field MUST be an array of VersionTag objects as
defined by Section 10.3 of <xref target="RFC7285" format="default"/>. The <tt>vtag</tt> of the Path Vector part MUST
be included in the <tt>dependent-vtags</tt>. If <tt>persistent-entity-id</tt> is requested, the
version tags of the dependent resources that MAY expose the entities in the
response MUST also be included.  </t>
              <t>
The PropertyMapData has one member for each ANEName that appears in the Path
Vector part, which is an entity identifier belonging to the self-defined
entity domain as defined in Section 5.1.2.3 of
<xref target="I-D.ietf-alto-unified-props-new" format="default"/>. The EntityProps for each ANE has one
member for each property that is both 1) associated with the ANE, and 2)
specified in the <tt>ane-property-names</tt> in the request. If the Path Vector cost
type is not included in the <tt>cost-type</tt> field or the <tt>multi-cost-type</tt> field,
the <tt>property-map</tt> field MUST be present and the value MUST be an empty object
({}).</t>
            </li>
          </ul>
          <t>A complete and valid response MUST include both the Path Vector part and the
Property Map part in the multipart message. If any part is NOT present, the
client MUST discard the received information and send another request if
necessary.</t>
          <t>According to <xref target="RFC2387" format="default"/>, the Path Vector part, whose media type is
the same as the <tt>type</tt> parameter of the multipart response message, is the root
object. Thus, it is the element the application processes first. Even though the
<tt>start</tt> parameter allows it to be placed anywhere in the part sequence, it is
RECOMMENDED that the parts arrive in the same order as they are processed, i.e.,
the Path Vector part is always put as the first part, followed by the Property
Map part. When doing so, an ALTO server MAY choose not to set the <tt>start</tt>
parameter, which implies the first part is the root object.</t>
          <t>Example: Consider the network in <xref target="fig-dumbbell" format="default"/>. The response of the example
request in <xref target="pvcm-accept" format="default"/> is as follows, where <tt>ANE1</tt> represents the
aggregation of all the switches in the network.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 200 OK
Content-Length: 821
Content-Type: multipart/related; boundary=example-1;
              type=application/alto-costmap+json

--example-1
Content-ID: costmap
Content-Type: application/alto-costmap+json

{
  "meta": {
    "vtag": {
      "resource-id": "filtered-cost-map-pv.costmap",
      "tag": "d827f484cb66ce6df6b5077cb8562b0a"
    },
    "dependent-vtags": [
      {
        "resource-id": "my-default-networkmap",
        "tag": "75ed013b3cb58f896e839582504f6228"
      }
    ],
    "cost-type": { "cost-mode": "array", "cost-metric": "ane-path" }
  },
  "cost-map": {
    "PID1": { "PID2": ["ANE1"] }
  }
}
--example-1
Content-ID: propmap
Content-Type: application/alto-propmap+json

{
  "meta": {
    "dependent-vtags": [
      {
        "resource-id": "filtered-cost-map-pv.costmap",
        "tag": "d827f484cb66ce6df6b5077cb8562b0a"
      }
    ]
  },
  "property-map": {
    ".ane:ANE1": { "max-reservable-bandwidth": 100000000 }
  }
}
]]></artwork>
          <!-- TODO: Error Handling -->

</section>
      </section>
      <section anchor="pvecs-spec" numbered="true" toc="default">
        <name>Multipart Endpoint Cost Service for Path Vector</name>
        <t>This document introduces a new ALTO resource called multipart Endpoint Cost
Service, which allows an ALTO server to provide other ALTO resources associated
with the Endpoint Cost Service resource in the same response.</t>
        <section anchor="media-type-1" numbered="true" toc="default">
          <name>Media Type</name>
          <t>The media type of the multipart Endpoint Cost Service resource is
<tt>multipart/related;type=application/alto-endpointcost+json</tt>.</t>
        </section>
        <section anchor="http-method-1" numbered="true" toc="default">
          <name>HTTP Method</name>
          <t>The multipart Endpoint Cost Service resource is requested using the HTTP POST method.</t>
        </section>
        <section anchor="pvecs-accept" numbered="true" toc="default">
          <name>Accept Input Parameters</name>
          <t>The input parameters of the multipart Endpoint Cost Service resource are
supplied in the body of an HTTP POST request. This document extends the input
parameters to an Endpoint Cost Service, which is defined as a JSON object of
type ReqEndpointCost in Section 4.2.2 in RFC 8189 <xref target="RFC8189" format="default"/>, with a data
format indicated by the media type <tt>application/alto-endpointcostparams+json</tt>,
which is a JSON object of type PVReqEndpointCost:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
object {
  [EntityPropertyName ane-property-names<0..*>;]
} PVReqEndpointcost : ReqEndpointcostMap;
]]></artwork>
          <t>with fields:</t>
          <dl>
            <dt>
ane-property-names:  </dt>
            <dd>
              <t>This document defines the <tt>ane-property-names</tt> in PVReqEndpointcost as the
same as in PVReqFilteredCostMap. See <xref target="pvcm-accept" format="default"/>.</t>
            </dd>
          </dl>
          <t>Example: Consider the network in <xref target="fig-dumbbell" format="default"/>. If an ALTO client wants to
query the <tt>max-reservable-bandwidth</tt> between eh1 and eh2, it can submit the
following request.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
POST /ecs/pv HTTP/1.1
Host: alto.example.com
Accept: multipart/related;type=application/alto-endpointcost+json,
        application/alto-error+json
Content-Length: 222
Content-Type: application/alto-endpointcostparams+json

{
  "cost-type": {
    "cost-mode": "array",
    "cost-metric": "ane-path"
  },
  "endpoints": {
    "srcs": [ "ipv4:192.0.2.2" ],
    "dsts": [ "ipv4:192.0.2.18" ]
  },
  "ane-property-names": [ "max-reservable-bandwidth" ]
}
]]></artwork>
        </section>
        <section anchor="pvecs-cap" numbered="true" toc="default">
          <name>Capabilities</name>
          <t>The capabilities of the multipart Endpoint Cost Service resource are defined by
a JSON object of type PVEndpointcostCapabilities, which is defined as the same
as PVFilteredCostMapCapabilities. See <xref target="pvcm-cap" format="default"/>.</t>
        </section>
        <section anchor="uses-1" numbered="true" toc="default">
          <name>Uses</name>
          <t>If this resource supports <tt>persistent-entity-id</tt>, it MUST also include the
defining resources of persistent ANEs that may appear in the response.</t>
        </section>
        <section anchor="pvecs-resp" numbered="true" toc="default">
          <name>Response</name>
          <t>The response MUST indicate an error, using ALTO protocol error handling, as
defined in Section 8.5 of <xref target="RFC7285" format="default"/>, if the request is invalid.</t>
          <t>The "Content-Type" header of the response MUST be <tt>multipart/related</tt> as defined
by <xref target="RFC7285" format="default"/> with the following parameters:</t>
          <dl>
            <dt>
type:  </dt>
            <dd>
              <t>The type parameter MUST be "application/alto-endpointcost+json".</t>
            </dd>
            <dt>
start:  </dt>
            <dd>
              <t>The start parameter is as defined in <xref target="pvcm-resp" format="default"/>.</t>
            </dd>
            <dt>
boundary:  </dt>
            <dd>
              <t>The boundary parameter is as defined in <xref target="RFC2387" format="default"/>.</t>
            </dd>
          </dl>
          <t>The body MUST consist of two parts:</t>
          <ul spacing="normal">
            <li>
              <t>The Path Vector part MUST include <tt>Content-ID</tt> and <tt>Content-Type</tt> in its
header. The value of <tt>Content-ID</tt> MUST has the format of a Part Resource ID.
The <tt>Content-Type</tt> MUST be <tt>application/alto-endpointcost+json</tt>.  </t>
              <t>
The body of the Path Vector part MUST be a JSON object with the same format as
defined in Section 11.5.1.6 of <xref target="RFC7285" format="default"/> when the <tt>cost-type</tt> field is
present in the input parameters and MUST be a JSON object with the same format
as defined in Section 4.1.3 of <xref target="RFC8189" format="default"/> if the <tt>multi-cost-types</tt> field is
present. The JSON object MUST include the
<tt>vtag</tt> field in the <tt>meta</tt> field, which provides the version tag of the returned
EndpointCostMapData. The resource ID of the version tag MUST follow the format of  </t>
              <artwork name="" type="" align="left" alt=""><![CDATA[
resource-id '.' part-resource-id
]]></artwork>
              <t>
where <tt>resource-id</tt> is the resource Id of the Path Vector resource, and
<tt>part-resource-id</tt> has the same value as the <tt>Content-ID</tt> of the Path Vector
part.</t>
            </li>
            <li>
              <t>The Unified Property Map part MUST also include <tt>Content-ID</tt> and
<tt>Content-Type</tt> in its header. The value of <tt>Content-ID</tt> MUST has the format
of a Part Resource ID. The <tt>Content-Type</tt> MUST be
<tt>application/alto-propmap+json</tt>.  </t>
              <t>
The body of the Unified Property Map part MUST be a JSON object with the same
format as defined in Section 4.6 of <xref target="I-D.ietf-alto-unified-props-new" format="default"/>. The
JSON object MUST include the <tt>dependent-vtags</tt> field in the <tt>meta</tt> field. The
value of the <tt>dependent-vtags</tt> field MUST be an array of VersionTag objects as
defined by Section 10.3 of <xref target="RFC7285" format="default"/>. The <tt>vtag</tt> of the Path Vector part MUST
be included in the <tt>dependent-vtags</tt>. If <tt>persistent-entity-id</tt> is requested, the
version tags of the dependent resources that MAY expose the entities in the
response MUST also be included.  </t>
              <t>
The PropertyMapData has one member for each ANEName that appears in the Path
Vector part, which is an entity identifier belonging to the self-defined
entity domain as defined in Section 5.1.2.3 of
<xref target="I-D.ietf-alto-unified-props-new" format="default"/>. The EntityProps for each ANE has one
member for each property that is both 1) associated with the ANE, and 2)
specified in the <tt>ane-property-names</tt> in the request. If the Path Vector cost
type is not included in the <tt>cost-type</tt> field or the <tt>multi-cost-type</tt> field,
the <tt>property-map</tt> field MUST be present and the value MUST be an empty object
({}).</t>
            </li>
          </ul>
          <t>A complete and valid response MUST include both the Path Vector part and the
Property Map part in the multipart message. If any part is NOT present, the
client MUST discard the received information and send another request if
necessary.</t>
          <t>According to <xref target="RFC2387" format="default"/>, the Path Vector part, whose media type is
the same as the <tt>type</tt> parameter of the multipart response message, is the root
object. Thus, it is the element the application processes first. Even though the
<tt>start</tt> parameter allows it to be placed anywhere in the part sequence, it is
RECOMMENDED that the parts arrive in the same order as they are processed, i.e.,
the Path Vector part is always put as the first part, followed by the Property
Map part. When doing so, an ALTO server MAY choose not to set the <tt>start</tt>
parameter, which implies the first part is the root object.</t>
          <t>Example: Consider the network in <xref target="fig-dumbbell" format="default"/>. The response of the example
request in <xref target="pvecs-accept" format="default"/> is as follows.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 200 OK
Content-Length: 810
Content-Type: multipart/related; boundary=example-1;
              type=application/alto-endpointcost+json

--example-1
Content-ID: ecs
Content-Type: application/alto-endpointcost+json

{
  "meta": {
    "vtag": {
      "resource-id": "ecs-pv.costmap",
      "tag": "d827f484cb66ce6df6b5077cb8562b0a"
    },
    "dependent-vtags": [
      {
        "resource-id": "my-default-networkmap",
        "tag": "75ed013b3cb58f896e839582504f6228"
      }
    ],
    "cost-type": { "cost-mode": "array", "cost-metric": "ane-path" }
  },
  "cost-map": {
    "ipv4:192.0.2.2": { "ipv4:192.0.2.18": ["ANE1"] }
  }
}
--example-1
Content-ID: propmap
Content-Type: application/alto-propmap+json

{
  "meta": {
    "dependent-vtags": [
      {
        "resource-id": "ecs-pv.costmap",
        "tag": "d827f484cb66ce6df6b5077cb8562b0a"
      }
    ]
  },
  "property-map": {
    ".ane:ANE1": { "max-reservable-bandwidth": 100000000 }
  }
}
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="Examples" numbered="true" toc="default">
      <name>Examples</name>
      <t>This section lists some examples of Path Vector queries and the corresponding
responses. Some long lines are truncated for better readability.</t>
      <section anchor="example-ird" numbered="true" toc="default">
        <name>Example: Information Resource Directory</name>
        <t>To give a comprehensive example of the extension defined in this document, we
consider the network in <xref target="fig-pe" format="default"/>. Assume that the ALTO server provides the
following information resources:</t>
        <ul spacing="normal">
          <li>
            <tt>my-default-networkmap</tt>: A Network Map resource which contains the PIDs in the
network.</li>
          <li>
            <tt>filtered-cost-map-pv</tt>: A Multipart Filtered Cost Map resource for Path Vector,
which exposes the <tt>max-reservable-bandwidth</tt> property for the PIDs in
<tt>my-default-networkmap</tt>.</li>
          <li>
            <tt>ane-props</tt>: A filtered Unified Property resource that exposes the
information for persistent ANEs in the network.</li>
          <li>
            <tt>endpoint-cost-pv</tt>: A Multipart Endpoint Cost Service for Path Vector, which
exposes the <tt>max-reservable-bandwidth</tt> and the <tt>persistent-entity-id</tt> properties.</li>
          <li>
            <tt>update-pv</tt>: An Update Stream service, which provides the incremental update
service for the <tt>endpoint-cost-pv</tt> service.</li>
          <li>
            <tt>multicost-pv</tt>: A Multipart Endpoint Cost Service with both Multi-Cost and
Path Vector.</li>
        </ul>
        <t>Below is the Information Resource Directory of the example ALTO server. To
enable the extension defined in this document, the <tt>path-vector</tt> cost type
(<xref target="cost-type-spec" format="default"/>) is defined in the <tt>cost-types</tt> of the <tt>meta</tt> field, and is
included in the <tt>cost-type-names</tt> of resources <tt>filtered-cost-map-pv</tt> and
<tt>endpoint-cost-pv</tt>.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
{
  "meta": {
    "cost-types": {
      "path-vector": {
        "cost-mode": "array",
        "cost-metric": "ane-path"
      },
      "num-rc": {
        "cost-mode": "numerical",
        "cost-metric": "routingcost"
      }
    }
  },
  "resources": {
    "my-default-networkmap": {
      "uri" : "https://alto.example.com/networkmap",
      "media-type" : "application/alto-networkmap+json"
    },
    "filtered-cost-map-pv": {
      "uri": "https://alto.example.com/costmap/pv",
      "media-type": "multipart/related;
                     type=application/alto-costmap+json",
      "accepts": "application/alto-costmapfilter+json",
      "capabilities": {
        "cost-type-names": [ "path-vector" ],
        "ane-property-names": [ "max-reservable-bandwidth" ]
      },
      "uses": [ "my-default-networkmap" ]
    },
    "ane-props": {
      "uri": "https://alto.example.com/ane-props",
      "media-type": "application/alto-propmap+json",
      "accepts": "application/alto-propmapparams+json",
      "capabilities": {
        "mappings": {
          ".ane": [ "cpu" ]
        }
      }
    },
    "endpoint-cost-pv": {
      "uri": "https://alto.exmaple.com/endpointcost/pv",
      "media-type": "multipart/related;
                     type=application/alto-endpointcost+json",
      "accepts": "application/alto-endpointcostparams+json",
      "capabilities": {
        "cost-type-names": [ "path-vector" ],
        "ane-property-names": [
          "max-reservable-bandwidth", "persistent-entity-id"
        ]
      },
      "uses": [ "ane-props" ]
    },
    "update-pv": {
      "uri": "https://alto.example.com/updates/pv",
      "media-type": "text/event-stream",
      "uses": [ "endpoint-cost-pv" ],
      "accepts": "application/alto-updatestreamparams+json",
      "capabilities": {
        "support-stream-control": true
      }
    },
    "multicost-pv": {
      "uri": "https://alto.exmaple.com/endpointcost/mcpv",
      "media-type": "multipart/related;
                     type=application/alto-endpointcost+json",
      "accepts": "application/alto-endpointcostparams+json",
      "capabilities": {
        "cost-type-names": [ "path-vector", "num-rc" ],
        "max-cost-types": 2,
        "testable-cost-type-names": [ "num-rc" ]
        "ane-property-names": [
          "max-reservable-bandwidth", "persistent-entity-id"
        ]
      },
      "uses": [ "ane-props" ]
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-multipart-filtered-cost-map" numbered="true" toc="default">
        <name>Example: Multipart Filtered Cost Map</name>
        <t>The following examples demonstrate the request to the <tt>filtered-cost-map-pv</tt>
resource and the corresponding response.</t>
        <t>The request uses the "path-vector" cost type in the <tt>cost-type</tt> field. The
<tt>ane-property-names</tt> field is missing, indicating that the client only requests
for the Path Vector but not the ANE properties.</t>
        <t>The response consists of two parts. The first part returns the array of ANEName
for each source and destination pair. There are two ANEs, where <tt>L1</tt> represents
the interconnection link L1, and <tt>L2</tt> represents the interconnection link L2.</t>
        <t>The second part returns an empty Property Map. Note that the ANE entries are
omitted since they have no properties (See Section 3.1 of
<xref target="I-D.ietf-alto-unified-props-new" format="default"/>).</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
POST /costmap/pv HTTP/1.1
Host: alto.example.com
Accept: multipart/related;type=application/alto-costmap+json,
        application/alto-error+json
Content-Length: 153
Content-Type: application/alto-costmapfilter+json

{
  "cost-type": {
    "cost-mode": "array",
    "cost-metric": "ane-path"
  },
  "pids": {
    "srcs": [ "PID1" ],
    "dsts": [ "PID3", "PID4" ]
  }
}
]]></artwork>
        <artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 200 OK
Content-Length: 818
Content-Type: multipart/related; boundary=example-1;
              type=application/alto-costmap+json

--example-1
Content-ID: costmap
Content-Type: application/alto-costmap+json

{
  "meta": {
    "vtag": {
      "resource-id": "filtered-cost-map-pv.costmap",
      "tag": "d827f484cb66ce6df6b5077cb8562b0a"
    },
    "dependent-vtags": [
      {
        "resource-id": "my-default-networkmap",
        "tag": "75ed013b3cb58f896e839582504f6228"
      }
    ],
    "cost-type": {
      "cost-mode": "array",
      "cost-metric": "ane-path"
    }
  },
  "cost-map": {
    "PID1": {
      "PID3": [ "L1" ],
      "PID4": [ "L1", "L2" ]
    }
  }
}
--example-1
Content-ID: propmap
Content-Type: application/alto-propmap+json

{
  "meta": {
    "dependent-vtags": [
      {
        "resource-id": "filtered-cost-map-pv.costmap",
        "tag": "d827f484cb66ce6df6b5077cb8562b0a"
      }
    ]
  },
  "property-map": {
  }
}
]]></artwork>
      </section>
      <section anchor="example-ecspv" numbered="true" toc="default">
        <name>Example: Multipart Endpoint Cost Service Resource</name>
        <t>The following examples demonstrate the request to the <tt>endpoint-cost-pv</tt>
resource and the corresponding response.</t>
        <t>The request uses the Path Vector cost type in the <tt>cost-type</tt> field, and
queries the Maximum Reservable Bandwidth ANE property and the Persistent Entity
property for two source and destination pairs: 192.0.2.34 -&gt; 192.0.2.2 and
192.0.2.34 -&gt; 192.0.2.50.</t>
        <t>The response consists of two parts. The first part returns the array of ANEName
for each valid source and destination pair. As one can see in <xref target="fig-pe" format="default"/>, flow
192.0.2.34 -&gt; 192.0.2.2 traverses NET2, L1 and NET1, and flow 192.0.2.34 -&gt;
192.0.2.50 traverses NET2, L2 and NET3.</t>
        <t>The second part returns the requested properties of ANEs. Assume NET1, NET2 and NET3 has
sufficient bandwidth and their <tt>max-reservable-bandwidth</tt> values are set to a sufficiently
large number (50 Gbps in this case). On the other hand, assume there are no
prior reservation on L1 and L2, and their <tt>max-reservable-bandwidth</tt> values are
the corresponding link capacity (10 Gbps for L1 and 15 Gbps for L2).</t>
        <t>Both NET1 and NET2 have a mobile edge deployed, i.e., MEC1 in NET1 and MEC2 in
NET2. Assume the ANEName for MEC1 and MEC2 are <tt>MEC1</tt> and <tt>MEC2</tt> and their
properties can be retrieved from the Property Map <tt>ane-props</tt>. Thus, the
<tt>persistent-entity-id</tt> property of NET1 and NET3 are <tt>ane-props.ane:MEC1</tt> and
<tt>ane-props.ane:MEC2</tt> respectively.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
POST /endpointcost/pv HTTP/1.1
Host: alto.example.com
Accept: multipart/related;
        type=application/alto-endpointcost+json,
        application/alto-error+json
Content-Length: 278
Content-Type: application/alto-endpointcostparams+json

{
  "cost-type": {
    "cost-mode": "array",
    "cost-metric": "ane-path"
  },
  "endpoints": {
    "srcs": [ "ipv4:192.0.2.34" ],
    "dsts": [ "ipv4:192.0.2.2", "ipv4:192.0.2.50" ]
  },
  "ane-property-names": [
    "max-reservable-bandwidth",
    "persistent-entity-id"
  ]
}
]]></artwork>
        <artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 200 OK
Content-Length: 1305
Content-Type: multipart/related; boundary=example-2;
              type=application/alto-endpointcost+json

--example-2
Content-ID: ecs
Content-Type: application/alto-endpointcost+json

{
  "meta": {
    "vtags": {
      "resource-id": "endpoint-cost-pv.ecs",
      "tag": "bb6bb72eafe8f9bdc4f335c7ed3b10822a391cef"
    },
    "cost-type": {
      "cost-mode": "array",
      "cost-metric": "ane-path"
    }
  },
  "endpoint-cost-map": {
    "ipv4:192.0.2.34": {
      "ipv4:192.0.2.2":   [ "NET3", "L1", "NET1" ],
      "ipv4:192.0.2.50":   [ "NET3", "L2", "NET2" ]
    }
  }
}
--example-2
Content-ID: propmap
Content-Type: application/alto-propmap+json

{
  "meta": {
    "dependent-vtags": [
      {
        "resource-id": "endpoint-cost-pv.ecs",
        "tag": "bb6bb72eafe8f9bdc4f335c7ed3b10822a391cef"
      },
      {
        "resource-id": "ane-props",
        "tag": "bf3c8c1819d2421c9a95a9d02af557a3"
      }
    ]
  },
  "property-map": {
    ".ane:NET1": {
      "max-reservable-bandwidth": 50000000000,
      "persistent-entity-id": "ane-props.ane:MEC1"
    },
    ".ane:NET2": {
      "max-reservable-bandwidth": 50000000000,
      "persistent-entity-id": "ane-props.ane:MEC2"
    },
    ".ane:NET3": {
      "max-reservable-bandwidth": 50000000000
    },
    ".ane:L1": {
      "max-reservable-bandwidth": 10000000000
    },
    ".ane:L2": {
      "max-reservable-bandwidth": 15000000000
    }
  }
}
]]></artwork>
        <t>As mentioned in <xref target="metric-spec" format="default"/>, an advanced ALTO server may obfuscate the
response in order to preserve its own privacy or conform to its own policies.
For example, an ALTO server may choose to aggregate NET1 and L1 as a new ANE
with ANE name <tt>AGGR1</tt>, and aggregate NET2 and L2 as a new ANE with ANE name
<tt>AGGR2</tt>. The <tt>max-reservable-bandwidth</tt> of <tt>AGGR1</tt> takes the value of L1, which
is smaller than that of NET1, and the <tt>persistent-entity-id</tt> of <tt>AGGR1</tt> takes
the value of NET1. The properties of <tt>AGGR2</tt> are computed in a similar way and
the obfuscated response is as shown below. Note that the obfuscation of Path
Vector responses is implementation-specific and is out of the scope of this
document, and developers may refer to <xref target="Security" format="default"/> for further references.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 200 OK
Content-Length: 1157
Content-Type: multipart/related; boundary=example-2;
              type=application/alto-endpointcost+json

--example-2
Content-ID: ecs
Content-Type: application/alto-endpointcost+json

{
  "meta": {
    "vtags": {
      "resource-id": "endpoint-cost-pv.ecs",
      "tag": "bb6bb72eafe8f9bdc4f335c7ed3b10822a391cef"
    },
    "cost-type": {
      "cost-mode": "array",
      "cost-metric": "ane-path"
    }
  },
  "endpoint-cost-map": {
    "ipv4:192.0.2.34": {
      "ipv4:192.0.2.2":   [ "NET3", "AGGR1" ],
      "ipv4:192.0.2.50":   [ "NET3", "AGGR2" ]
    }
  }
}
--example-2
Content-ID: propmap
Content-Type: application/alto-propmap+json

{
  "meta": {
    "dependent-vtags": [
      {
        "resource-id": "endpoint-cost-pv.ecs",
        "tag": "bb6bb72eafe8f9bdc4f335c7ed3b10822a391cef"
      },
      {
        "resource-id": "ane-props",
        "tag": "bf3c8c1819d2421c9a95a9d02af557a3"
      }
    ]
  },
  "property-map": {
    ".ane:AGGR1": {
      "max-reservable-bandwidth": 10000000000,
      "persistent-entity-id": "ane-props.ane:MEC1"
    },
    ".ane:AGGR2": {
      "max-reservable-bandwidth": 15000000000,
      "persistent-entity-id": "ane-props.ane:MEC2"
    },
    ".ane:NET3": {
      "max-reservable-bandwidth": 50000000000
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-sse" numbered="true" toc="default">
        <name>Example: Incremental Updates</name>
        <t>In this example, an ALTO client subscribes to the incremental update for the
multipart Endpoint Cost Service resource <tt>endpoint-cost-pv</tt>.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
POST /updates/pv HTTP/1.1
Host: alto.example.com
Accept: text/event-stream
Content-Type: application/alto-updatestreamparams+json
Content-Length: 112

{
  "add": {
    "ecspvsub1": {
      "resource-id": "endpoint-cost-pv",
      "input": <ecs-input>
    }
  }
}
]]></artwork>
        <t>Based on the server-side process defined in <xref target="RFC8895" format="default"/>, the ALTO server will
send the <tt>control-uri</tt> first using Server-Sent Event (SSE), followed by the full
response of the multipart message.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: text/event-stream

event: application/alto-updatestreamcontrol+json
data: {"control-uri": "https://alto.example.com/updates/streams/123"}

event: multipart/related;boundary=example-3;
       type=application/alto-endpointcost+json,ecspvsub1
data: --example-3
data: Content-ID: ecsmap
data: Content-Type: application/alto-endpointcost+json
data:
data: <endpoint-cost-map-entry>
data: --example-3
data: Content-ID: propmap
data: Content-Type: application/alto-propmap+json
data:
data: <property-map-entry>
data: --example-3--
]]></artwork>
        <t>When the contents change, the ALTO server will publish the updates for each node
in this tree separately.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
event: application/merge-patch+json, ecspvsub1.ecsmap
data: <Merge patch for endpoint-cost-map-update>

event: application/merge-patch+json, ecspvsub1.propmap
data: <Merge patch for property-map-update>
]]></artwork>
        <!-- TODO: the remaining issue is where to specify the json-merge-patch capability for each node -->

</section>
      <section anchor="example-multi-cost" numbered="true" toc="default">
        <name>Example: Multi-cost</name>
        <t>The following examples demonstrate the request to the <tt>multicost-pv</tt> resource and the corresponding response.</t>
        <t>The request asks for two cost types: the first is the Path Vector cost type, and
the second is a numerical routing cost. It also queries the Maximum Reservable
Bandwidth ANE property and the Persistent Entity property for two source and
destination pairs: 192.0.2.34 -&gt; 192.0.2.2 and 192.0.2.34 -&gt; 192.0.2.50.</t>
        <t>The response consists of two parts. The first part returns a JSONArray that
contains two JSONValue for each requested source and destination pair: the first
JSONValue is a JSONArray of ANENames, which is the value of the Path Vector cost
type, and the second JSONValue is a JSONNumber which is the value of the routing
cost. The second part is the same as in <xref target="example-ecspv" format="default"/></t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
POST /endpointcost/mcpv HTTP/1.1
Host: alto.example.com
Accept: multipart/related;
        type=application/alto-endpointcost+json,
        application/alto-error+json
Content-Length: 351
Content-Type: application/alto-endpointcostparams+json

{
  "multi-cost-types": [
    { "cost-mode": "array", "cost-metric": "ane-path" },
    { "cost-mode": "numerical", "cost-metric": "routingcost" }
  ],
  "endpoints": {
    "srcs": [ "ipv4:192.0.2.34" ],
    "dsts": [ "ipv4:192.0.2.2", "ipv4:192.0.2.50" ]
  },
  "ane-property-names": [
    "max-reservable-bandwidth",
    "persistent-entity-id"
  ]
}
]]></artwork>
        <artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 200 OK
Content-Length: 1240
Content-Type: multipart/related; boundary=example-2;
              type=application/alto-endpointcost+json

--example-2
Content-ID: ecs
Content-Type: application/alto-endpointcost+json

{
  "meta": {
    "vtags": {
      "resource-id": "endpoint-cost-pv.ecs",
      "tag": "bb6bb72eafe8f9bdc4f335c7ed3b10822a391cef"
    },
    "multi-cost-types": [
      { "cost-mode": "array", "cost-metric": "ane-path" },
      { "cost-mode": "numerical", "cost-metric": "routingcost" }
    ]
  },
  "endpoint-cost-map": {
    "ipv4:192.0.2.34": {
      "ipv4:192.0.2.2":   [[ "NET3", "AGGR1" ], 1],
      "ipv4:192.0.2.50":   [[ "NET3", "AGGR2" ], 1]
    }
  }
}
--example-2
Content-ID: propmap
Content-Type: application/alto-propmap+json

{
  "meta": {
    "dependent-vtags": [
      {
        "resource-id": "endpoint-cost-pv.ecs",
        "tag": "bb6bb72eafe8f9bdc4f335c7ed3b10822a391cef"
      },
      {
        "resource-id": "ane-props",
        "tag": "bf3c8c1819d2421c9a95a9d02af557a3"
      }
    ]
  },
  "property-map": {
    ".ane:AGGR1": {
      "max-reservable-bandwidth": 10000000000,
      "persistent-entity-id": "ane-props.ane:MEC1"
    },
    ".ane:AGGR2": {
      "max-reservable-bandwidth": 15000000000,
      "persistent-entity-id": "ane-props.ane:MEC2"
    },
    ".ane:NET3": {
      "max-reservable-bandwidth": 50000000000
    }
  }
}
]]></artwork>
      </section>
    </section>
    <section anchor="Compatibility" numbered="true" toc="default">
      <name>Compatibility with Other ALTO Extensions</name>
      <section anchor="compatibility-with-legacy-alto-clientsservers" numbered="true" toc="default">
        <name>Compatibility with Legacy ALTO Clients/Servers</name>
        <t>The multipart Filtered Cost Map resource and the multipart Endpoint Cost
Service resource has no backward compatibility issue with legacy ALTO clients and
servers. Although these two types of resources reuse the media types defined in
the base ALTO protocol for the accept input parameters, they have different
media types for responses. If the ALTO server provides these two types of
resources, but the ALTO client does not support them, the ALTO client will
ignore the resources without incurring any incompatibility problem.</t>
        <!--
The Path Vector extension on Filtered Cost Map and Endpoint Cost Service is
backward compatible with the base ALTO protocol:

- If the ALTO server provides extended capabilities `dependent-property-map` and
  `allow-compound-response` for Filtered Cost Map or Endpoint Cost Service, but
  the client only supports the base ALTO protocol, then the client will ignore
  those capabilities without conducting any incompatibility.
- If the client sends a request with the input parameter `properties`, but the
  server only supports the base ALTO protocol, the server will ignore this
  field.
-->

</section>
      <section anchor="compatibility-with-multi-cost-extension" numbered="true" toc="default">
        <name>Compatibility with Multi-Cost Extension</name>
        <!-- FIXME: path-vector cannot be used in multi-cost, also no reason -->

<t>The extension defined in this document is compatible with the multi-cost
extension <xref target="RFC8189" format="default"/>. Such a resource has a media type of either
<tt>multipart/related; type=application/alto-costmap+json</tt> or <tt>multipart/related;
type=application/alto-endpointcost+json</tt>. Its <tt>cost-constraints</tt> field must
either be <tt>false</tt> or not present and the Path Vector cost type must be present
in the <tt>cost-type-names</tt> capability field but must not be present in the
<tt>testable-cost-type-names</tt> field, as specified in <xref target="pvcm-cap" format="default"/> and <xref target="pvecs-cap" format="default"/>.</t>
        <!--
As [](#fcm-cap) mentions, the syntax and semantics of whether `constraints` or
`or-constraints` field for the `array` cost mode is not specified in this
document. So if an ALTO server provides a resource with the `array` cost mode
and the capability `cost-constraints` or `testable-cost-types-names`, the ALTO
client MAY ignore the capability `cost-constraints` or
`testable-cost-types-names` unless the implementation or future documents
specify the behavior.
-->

<!--
Cost type path-vector is not a testable cost type. Any format of constraints
SHOULD NOT be applied to cost type path-vector in order for multi-cost to
support the path-vector extension. Specifically,

- Cost type path-vector MUST NOT be included in `testable-cost-types-names` or
  `testable-cost-types`.
- When `testable-cost-types-names` is omitted in the `capabilities` and
  `testable-cost-types` is omitted in the input parameters, `constraints` or
  `or-constraints` SHOULD NOT add any format of constraints on cost type
  path-vector.
-->

</section>
      <section anchor="compatibility-with-incremental-update" numbered="true" toc="default">
        <name>Compatibility with Incremental Update</name>
        <!-- FIXME: using resource-id header in MIME part -->

<t>ALTO clients and servers MUST follow the specifications given in Section 5.2 of
<xref target="RFC8895" format="default"/> to support incremental updates for a Path Vector resource.</t>
      </section>
      <section anchor="compatibility-with-cost-calendar" numbered="true" toc="default">
        <name>Compatibility with Cost Calendar</name>
        <t>The extension specified in this document is compatible with the Cost Calendar
extension <xref target="RFC8896" format="default"/>. When used together with the Cost Calendar extension, the
cost value between a source and a destination is an array of Path Vectors, where
the k-th Path Vector refers to the abstract network paths traversed in the k-th
time interval by traffic from the source to the destination.</t>
        <t>When used with time-varying properties, e.g., maximum reservable bandwidth
(maxresbw), a property of a single ANE may also have different values in
different time intervals. In this case, if such an ANE has different property
values in two time intervals, it MUST be treated as two different ANEs, i.e.,
with different entity identifiers. However, if it has the same property values
in two time intervals, it MAY use the same identifier.</t>
        <t>This rule allows the Path Vector extension to represent both changes of ANEs and
changes of the ANEs' properties in a uniform way. The Path Vector part is
calendared in a compatible way, and the Property Map part is not affected by the
calendar extension.</t>
        <t>The two extensions combined together can provide the historical network
correlation information for a set of source and destination pairs. A network
broker or client may use this information to derive other resource requirements
such as Time-Block-Maximum Bandwidth, Bandwidth-Sliding-Window, and
Time-Bandwidth-Product (TBP) (See <xref target="SENSE" format="default"/> for details).</t>
      </section>
    </section>
    <section anchor="SecDisc" numbered="true" toc="default">
      <name>General Discussions</name>
      <!--
Cost Calendar is proposed as a useful ALTO extension to provide the historical
cost values for Filtered Cost Map Service and Endpoint Cost Service. Since path
vector is an extension to these services, it SHOULD be compatible with Cost
Calendar extension.

However, the calendar of a path-vector (Endpoint) Cost Map is insufficient for
the application which requires the historical data of routing state information.
The (Endpoint) Cost Map can only provide the changes of the paths. But more
useful information is the history of network element properties which are
recorded in the dependent Network Element Property Map.

Before the Unified Property Map is introduced as an ALTO extension, Filtered
Cost Map Service and Endpoint Cost Service are the only resources which require
the calendar supported. Because other resources don't have to be updated
frequently. But Network Element Property Map as a use case of Unified Property
Map will collect the real-time information of the network. It SHOULD be updated
as soon as possible once the metrics of network elements change.

So the requirement is to provide a general calendar extension which not only
meets the Filtered Cost Map and Endpoint Cost Service but also applies to the
Property Map Service.
-->

<section anchor="constraint-tests-for-general-cost-types" numbered="true" toc="default">
        <name>Constraint Tests for General Cost Types</name>
        <t>The constraint test is a simple approach to query the data. It allows users to
filter the query result by specifying some boolean tests. This approach is
already used in the ALTO protocol. <xref target="RFC7285" format="default"/> and <xref target="RFC8189" format="default"/> allow ALTO
clients to specify the <tt>constraints</tt> and <tt>or-constraints</tt> tests to better
filter the result.</t>
        <t>However, the current syntax can only be used to test scalar cost types, and
cannot easily express constraints on complex cost types, e.g., the Path Vector
cost type defined in this document.</t>
        <t>In practice, developing a bespoke language for general-purpose boolean tests can
be a complex undertaking, and it is conceivable that there are some existing
implementations already (the authors have not done an exhaustive search to
determine whether there are such implementations). One avenue to develop such a
language may be to explore extending current query languages like XQuery
<xref target="XQuery" format="default"/> or JSONiq <xref target="JSONiq" format="default"/> and integrating these with ALTO.</t>
        <t>Filtering the Path Vector results or developing a more sophisticated filtering
mechanism is beyond the scope of this document.</t>
      </section>
      <section anchor="general-multi-resource-query" numbered="true" toc="default">
        <name>General Multi-Resource Query</name>
        <t>Querying multiple ALTO information resources continuously is a general
requirement. Enabling such a capability, however, must address general
issues like efficiency and consistency. The incremental update extension
<xref target="RFC8895" format="default"/> supports submitting multiple queries in a single request, and allows
flexible control over the queries. However, it does not cover the case
introduced in this document where multiple resources are needed for a single
request.</t>
        <t>This extension gives an example of using a multipart message to encode the
responses from two specific ALTO information resources: a Filtered Cost Map or
an Endpoint Cost Service, and a Property Map. By packing multiple resources in a
single response, the implication is that servers may proactively push related
information resources to clients.</t>
        <t>Thus, it is worth looking into the direction of extending the SSE mechanism as
used in the incremental update extension <xref target="RFC8895" format="default"/>, or upgrading to HTTP/2
<xref target="RFC7540" format="default"/> and HTTP/3 <xref target="I-D.ietf-quic-http" format="default"/>, which provides the ability to
multiplex queries and to allow servers proactively send related information
resources.</t>
        <t>Defining a general multi-resource query mechanism is out of the scope of this
document.</t>
      </section>
    </section>
    <section anchor="Security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>This document is an extension of the base ALTO protocol, so the Security
Considerations <xref target="RFC7285" format="default"/> of the base ALTO protocol fully apply when this
extension is provided by an ALTO server.</t>
      <!-- Additional security considerations -->

<!-- ## Privacy Concerns { #pricon } -->

<t>The Path Vector extension requires additional scrutiny on three security
considerations discussed in the base protocol: confidentiality of ALTO
information (Section 15.3 of <xref target="RFC7285" format="default"/>), potential undesirable guidance from
authenticated ALTO information (Section 15.2 of <xref target="RFC7285" format="default"/>), and availability
of ALTO service (Section 15.5 of <xref target="RFC7285" format="default"/>).</t>
      <t>For confidentiality of ALTO information, a network operator should be aware of
that this extension may introduce a new risk: the Path Vector information may
make network attacks easier. For example, as the Path Vector information may
reveal more fine-grained internal network structures than the base protocol, an
ALTO client may detect the bottleneck link and start a distributed
denial-of-service (DDoS) attack involving minimal flows to conduct the
in-network congestion.</t>
      <t>To mitigate this risk, the ALTO server should consider protection mechanisms to
reduce information exposure or obfuscate the real information, in particular,
in settings where the network and the application do not belong to the same
trust domain. For example, in the multi-flow bandwidth reservation use case as
introduced in <xref target="probstat" format="default"/>, only the available bandwidth of the shared
bottleneck link is crucial, and the ALTO server may only preserve the critical
bottlenecks and can change the order of links appearing in the Path Vector
response.</t>
      <t>However, arbitrary reduction and obfuscation of information exposure may
potentially introduce a risk on the integrity of the ALTO information, leading to
infeasible or suboptimal decisions of ALTO clients,</t>
      <t>To mitigate this risk, if an ALTO client finds that the traffic distribution
based on the Path Vector information is not feasible (e.g., causing constant
congestion) or not better than a distribution which does not fully conform to
the information (e.g., by randomly choosing the source/destination for certain
flows), it can follow the protection strategies for potential undesirable
guidance from authenticated ALTO information, specified in Section 15.2.2 of RFC
7285 <xref target="RFC7285" format="default"/>. While repeatedly sending the same query can potentially detect
the integrity problem for certain obfuscation methods (e.g., those based on time
or randomness) under certain network conditions (e.g., where the routing and ANE
properties are stable), an ALTO client must be aware that this behavior may be
considered as a denial-of-service attack on the server and may lead to
the rejection of further requests from the client.</t>
      <t>On the other hand, this risk can also be mitigated from the server side. While
the implementation of an ALTO server is beyond the scope of this document,
implementations of ALTO servers involving reduction or obfuscation of the Path
Vector information should consider reduction/obfuscation mechanisms that can
preserve the integrity of ALTO information, for example, by using minimal
feasible region compression algorithms <xref target="TON2019" format="default"/> or obfuscation protocols
<xref target="SC2018" format="default"/><xref target="JSAC2019" format="default"/>.</t>
      <!--
On the other hand, in a setting of the same trust domain, a key benefit
of the path-vector abstraction is to reduce information transferred from the network
to the application.
-->

<t>For availability of ALTO service, an ALTO server should be cognizant that using
Path Vector extension might have a new risk: frequent requesting for Path
Vectors might consume intolerable amounts of the server-side computation and
storage, which can break the ALTO server. For example, if an ALTO server
implementation dynamically computes the Path Vectors for each request, the
service providing Path Vectors may become an entry point for denial-of-service
attacks on the availability of an ALTO server.</t>
      <t>To mitigate this risk, an ALTO server may consider using optimizations such as
precomputation-and-projection mechanisms <xref target="JSAC2019" format="default"/> to reduce the overhead for
processing each query. Also, an ALTO server may also protect itself from
malicious clients by monitoring the behaviors of clients and stopping serving
clients with suspicious behaviors (e.g., sending requests at a high frequency).</t>
    </section>
    <section anchor="IANA" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="alto-entity-domain-type-registry" numbered="true" toc="default">
        <name>ALTO Entity Domain Type Registry</name>
        <t>This document registers a new entry to the ALTO Domain Entity Type Registry, as
instructed by Section 12.2 of <xref target="I-D.ietf-alto-unified-props-new" format="default"/>. The new entry
is as shown below in <xref target="tbl-entity-domain" format="default"/>.</t>
        <table anchor="tbl-entity-domain" align="center">
          <name>ALTO Entity Domain Type Registry</name>
          <thead>
            <tr>
              <th align="left">Identifier</th>
              <th align="left">Entity Address Encoding</th>
              <th align="left">Hierarchy &amp; Inheritance</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ane</td>
              <td align="left">See <xref target="entity-address" format="default"/></td>
              <td align="left">None</td>
            </tr>
          </tbody>
        </table>
        <dl>
          <dt>
Identifier:  </dt>
          <dd>
            <t>See <xref target="domain-type" format="default"/>.</t>
          </dd>
          <dt>
Entity Identifier Encoding:  </dt>
          <dd>
            <t>See <xref target="entity-address" format="default"/>.</t>
          </dd>
          <dt>
Hierarchy:  </dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>
Inheritance:  </dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>
Media Type of Defining Resource:  </dt>
          <dd>
            <t>See <xref target="domain-defining" format="default"/>.</t>
          </dd>
          <dt>
Security Considerations:  </dt>
          <dd>
            <t>In some usage scenarios, ANE addresses carried in ALTO Protocol messages may
reveal information about an ALTO client or an ALTO service provider.
Applications and ALTO service providers using addresses of ANEs will be made
aware of how (or if) the addressing scheme relates to private information and
network proximity, in further iterations of this document.</t>
          </dd>
        </dl>
      </section>
      <section anchor="alto-entity-property-type-registry" numbered="true" toc="default">
        <name>ALTO Entity Property Type Registry</name>
        <t>Two initial entries are registered to the ALTO Domain <tt>ane</tt> in the <tt>ALTO Entity
Property Type Registry</tt>, as instructed by Section 12.3 of
<xref target="I-D.ietf-alto-unified-props-new" format="default"/>. The two new entries are shown below in
<xref target="tbl-prop-type-reg" format="default"/>.</t>
        <table anchor="tbl-prop-type-reg" align="center">
          <name>Initial Entries for ane Domain in the ALTO Entity Property Types Registry</name>
          <thead>
            <tr>
              <th align="left">Identifier</th>
              <th align="left">Intended Semantics</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">max-reservable-bandwidth</td>
              <td align="left">See <xref target="maxresbw" format="default"/></td>
            </tr>
            <tr>
              <td align="left">persistent-entity-id</td>
              <td align="left">See <xref target="persistent-entity-id" format="default"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="acknowledgments" numbered="true" toc="default">
      <name>Acknowledgments</name>
      <t>The authors would like to thank discussions with Andreas
Voellmy, Erran Li, Haibin Song, Haizhou Du, Jiayuan Hu, Qiao Xiang, Tianyuan Liu,
Xiao Shi, Xin Wang, and Yan Luo. The authors thank Greg Bernstein (Grotto Networks),
Dawn Chen (Tongji University), Wendy Roome, and Michael Scharf for
their contributions to earlier drafts.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <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="RFC7285">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Protocol</title>
            <author fullname="R. Alimi" initials="R." role="editor" surname="Alimi">
              <organization/>
            </author>
            <author fullname="R. Penno" initials="R." role="editor" surname="Penno">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." role="editor" surname="Yang">
              <organization/>
            </author>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." surname="Previdi">
              <organization/>
            </author>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="S. Shalunov" initials="S." surname="Shalunov">
              <organization/>
            </author>
            <author fullname="R. Woundy" initials="R." surname="Woundy">
              <organization/>
            </author>
            <date month="September" year="2014"/>
            <abstract>
              <t>Applications using the Internet already have access to some topology information of Internet Service Provider (ISP) networks.  For example, views to Internet routing tables at Looking Glass servers are available and can be practically downloaded to many network application clients.  What is missing is knowledge of the underlying network topologies from the point of view of ISPs.  In other words, what an ISP prefers in terms of traffic optimization -- and a way to distribute it.</t>
              <t>The Application-Layer Traffic Optimization (ALTO) services defined in this document provide network information (e.g., basic network location structure and preferences of network paths) with the goal of modifying network resource consumption patterns while maintaining or improving application performance.  The basic information of ALTO is based on abstract maps of a network.  These maps provide a simplified view, yet enough information about a network for applications to effectively utilize them.  Additional services are built on top of the maps.</t>
              <t>This document describes a protocol implementing the ALTO services. Although the ALTO services would primarily be provided by ISPs, other entities, such as content service providers, could also provide ALTO services.  Applications that could use the ALTO services are those that have a choice to which end points to connect.  Examples of such applications are peer-to-peer (P2P) and content delivery networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7285"/>
          <seriesInfo name="DOI" value="10.17487/RFC7285"/>
        </reference>
        <reference anchor="RFC2387">
          <front>
            <title>The MIME Multipart/Related Content-type</title>
            <author fullname="E. Levinson" initials="E." surname="Levinson">
              <organization/>
            </author>
            <date month="August" year="1998"/>
            <abstract>
              <t>This document defines the Multipart/Related content-type and provides examples of its use.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2387"/>
          <seriesInfo name="DOI" value="10.17487/RFC2387"/>
        </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">
              <organization/>
            </author>
            <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>
        <reference anchor="RFC8189">
          <front>
            <title>Multi-Cost Application-Layer Traffic Optimization (ALTO)</title>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="N. Schwan" initials="N." surname="Schwan">
              <organization/>
            </author>
            <date month="October" year="2017"/>
            <abstract>
              <t>The Application-Layer Traffic Optimization (ALTO) protocol, specified in RFC 7285, defines several services that return various metrics describing the costs between network endpoints.</t>
              <t>This document defines a new service that allows an ALTO Client to retrieve several cost metrics in a single request for an ALTO filtered cost map and endpoint cost map.  In addition, it extends the constraints to further filter those maps by allowing an ALTO Client to specify a logical combination of tests on several cost metrics.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8189"/>
          <seriesInfo name="DOI" value="10.17487/RFC8189"/>
        </reference>
        <reference anchor="RFC8895">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Incremental Updates Using Server-Sent Events (SSE)</title>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <date month="November" year="2020"/>
            <abstract>
              <t>The Application-Layer Traffic Optimization (ALTO) protocol (RFC 7285) provides network-related information, called network information resources, to client applications so that clients can make informed decisions in utilizing network resources. This document presents a mechanism to allow an ALTO server to push updates to ALTO clients to achieve two benefits: (1) updates can be incremental, in that if only a small section of an information resource changes, the ALTO server can send just the changes and (2) updates can be immediate, in that the ALTO server can send updates as soon as they are available.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8895"/>
          <seriesInfo name="DOI" value="10.17487/RFC8895"/>
        </reference>
        <reference anchor="RFC8896">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Cost Calendar</title>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="R. Yang" initials="R." surname="Yang">
              <organization/>
            </author>
            <author fullname="Q. Wu" initials="Q." surname="Wu">
              <organization/>
            </author>
            <author fullname="L. Deng" initials="L." surname="Deng">
              <organization/>
            </author>
            <author fullname="N. Schwan" initials="N." surname="Schwan">
              <organization/>
            </author>
            <date month="November" year="2020"/>
            <abstract>
              <t>This document is an extension to the base Application-Layer Traffic Optimization (ALTO) protocol.  It extends the ALTO cost information service so that applications decide not only 'where' to connect but also 'when'.  This is useful for applications that need to perform bulk data transfer and would like to schedule these transfers during an off-peak hour, for example.  This extension introduces the ALTO Cost Calendar with which an ALTO Server exposes ALTO cost values in JSON arrays where each value corresponds to a given time interval.  The time intervals, as well as other Calendar attributes, are specified in the Information Resources Directory and ALTO Server responses.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8896"/>
          <seriesInfo name="DOI" value="10.17487/RFC8896"/>
        </reference>
        <reference anchor="I-D.ietf-alto-unified-props-new">
          <front>
            <title>ALTO Extension: Entity Property Maps</title>
            <author fullname="Wendy Roome">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Sabine Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Y. Richard Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Jingxuan Jensen Zhang">
              <organization>Tongji University</organization>
            </author>
            <author fullname="Kai Gao">
              <organization>Sichuan University</organization>
            </author>
            <date day="12" month="August" year="2021"/>
            <abstract>
              <t>   This document extends the base Application-Layer Traffic Optimization
   (ALTO) Protocol by generalizing the concept of "endpoint properties"
   to entities defined by a wide set of objects, instead of only IP
   addresses.  Further, these properties are presented as maps, similar
   to the network and cost maps in the base ALTO protocol.  The protocol
   is extended in two major directions.  First, from endpoints
   restricted to IP addresses to entities covering a wider and
   extensible set of objects; second, from properties on specific
   endpoints to entire entity property maps.  These extensions introduce
   additional features allowing entities and property values to be
   specific to a given information resource.  This is made possible by a
   generic and flexible design of entity and property types.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-alto-unified-props-new-18"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC2216">
          <front>
            <title>Network Element Service Specification Template</title>
            <author fullname="S. Shenker" initials="S." surname="Shenker">
              <organization/>
            </author>
            <author fullname="J. Wroclawski" initials="J." surname="Wroclawski">
              <organization/>
            </author>
            <date month="September" year="1997"/>
            <abstract>
              <t>This document defines a framework for specifying services provided by network elements, and available to applications, in an internetwork which offers multiple qualities of service. The document first provides some necessary context -- including relevant definitions and suggested data formats -- and then specifies a "template" which service specification documents should follow.  This memo provides information for the Internet community.  It does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2216"/>
          <seriesInfo name="DOI" value="10.17487/RFC2216"/>
        </reference>
        <reference anchor="RFC7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe">
              <organization/>
            </author>
            <author fullname="R. Peon" initials="R." surname="Peon">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7540"/>
          <seriesInfo name="DOI" value="10.17487/RFC7540"/>
        </reference>
        <reference anchor="I-D.ietf-quic-http">
          <front>
            <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title>
            <author fullname="Mike Bishop">
              <organization>Akamai</organization>
            </author>
            <date day="2" month="February" year="2021"/>
            <abstract>
              <t>   The QUIC transport protocol has several features that are desirable
   in a transport for HTTP, such as stream multiplexing, per-stream flow
   control, and low-latency connection establishment.  This document
   describes a mapping of HTTP semantics over QUIC.  This document also
   identifies HTTP/2 features that are subsumed by QUIC, and describes
   how HTTP/2 extensions can be ported to HTTP/3.

DO NOT DEPLOY THIS VERSION OF HTTP

   DO NOT DEPLOY THIS VERSION OF HTTP/3 UNTIL IT IS IN AN RFC.  This
   version is still a work in progress.  For trial deployments, please
   use earlier versions.

Note to Readers

   Discussion of this draft takes place on the QUIC working group
   mailing list (quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/search/?email_list=quic.

   Working Group information can be found at https://github.com/quicwg;
   source code and issues list for this draft can be found at
   https://github.com/quicwg/base-drafts/labels/-http.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-http-34"/>
        </reference>
        <reference anchor="I-D.ietf-alto-performance-metrics">
          <front>
            <title>ALTO Performance Cost Metrics</title>
            <author fullname="Qin Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Y. Richard Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Young Lee">
              <organization>Samsung</organization>
            </author>
            <author fullname="Dhruv Dhody">
              <organization>Huawei</organization>
            </author>
            <author fullname="Sabine Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Luis Miguel Contreras Murillo">
              <organization>Telefonica</organization>
            </author>
            <date day="27" month="July" year="2021"/>
            <abstract>
              <t>   Cost metric is a basic concept in Application-Layer Traffic
   Optimization (ALTO), and different applications may use different
   cost metrics.  Since the ALTO base protocol (RFC 7285) defines only a
   single cost metric (i.e., the generic "routingcost" metric), if an
   application wants to issue a cost map or an endpoint cost request to
   determine the resource provider that offers better delay performance,
   the base protocol does not define the cost metric to be used.

   This document addresses the issue by introducing network performance
   metrics, including network delay, jitter, packet loss rate, hop
   count, and bandwidth.

   There are multiple sources (e.g., estimation based on measurements or
   service-level agreement) to derive a performance metric.  This
   document introduces an additional "cost-context" field to the ALTO
   "cost-type" field to convey the source of a performance metric.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-alto-performance-metrics-17"/>
        </reference>
        <reference anchor="I-D.ietf-dmm-5g-uplane-analysis">
          <front>
            <title>User Plane Protocol and Architectural Analysis on 3GPP 5G System</title>
            <author fullname="Shunsuke Homma">
              <organization>NTT</organization>
            </author>
            <author fullname="Takuya Miyasaka">
              <organization>KDDI Research</organization>
            </author>
            <author fullname="Satoru Matsushima">
              <organization>SoftBank</organization>
            </author>
            <author fullname="Daniel Voyer">
              <organization>Bell Canada</organization>
            </author>
            <date day="2" month="November" year="2020"/>
            <abstract>
              <t>   This document analyzes the mobile user plane protocol and the
   architecture specified in 3GPP 5G documents.  The analysis work is to
   clarify those specifications, extract protocol and architectural
   requirements and derive evaluation aspects for user plane protocols
   on IETF side.  This work is corresponding to the User Plane Protocol
   Study work on 3GPP side.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dmm-5g-uplane-analysis-04"/>
        </reference>
        <reference anchor="I-D.contreras-alto-service-edge">
          <front>
            <title>Use of ALTO for Determining Service Edge</title>
            <author fullname="Luis M. Contreras">
              <organization>Telefonica</organization>
            </author>
            <author fullname="Danny Alex Lachos">
              <organization>Unicamp</organization>
            </author>
            <author fullname="Christian Esteve Rothenberg">
              <organization>Unicamp</organization>
            </author>
            <author fullname="Sabine Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <date day="12" month="July" year="2021"/>
            <abstract>
              <t>   Service providers are starting to deploy and interconnect computing
   capabilities across the network for hosting network functions and
   applications.  In distributed computing environments, both computing
   and topological information are necessary in order to determine the
   more convenient infrastructure where to deploy such a service or
   application.  This document proposes an initial approach towards the
   use of ALTO to provide such information and assist the selection of
   appropriate deployment locations for services and applications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-contreras-alto-service-edge-03"/>
        </reference>
        <reference anchor="I-D.yang-alto-deliver-functions-over-networks">
          <front>
            <title>Delivering Functions over Networks: Traffic and Performance Optimization for Edge Computing using ALTO</title>
            <author fullname="Shu Yang">
              <organization>Shenzhen University</organization>
            </author>
            <author fullname="Laizhong Cui">
              <organization>Shenzhen University</organization>
            </author>
            <author fullname="Mingwei Xu">
              <organization>Tsinghua University</organization>
            </author>
            <author fullname="C.Q. Feng">
              <organization>Research Institute of Tsinghua University in Shenzhen</organization>
            </author>
            <author fullname="Xiuli Xia">
              <organization>China Resources Resolink</organization>
            </author>
            <date day="9" month="August" year="2021"/>
            <abstract>
              <t>   As the rapid development of internet, massive data are produced.
   Service providers typically need to deploy services near the edge
   networks to better satisfy user_s demand.  In order to obtain better
   quality of the networks, computing functions and user traffic need to
   be scheduled properly.  However, it is challenging to efficiently
   schedule resources among the distributed edge servers because of the
   lack of network information, such as network topology, traffic
   distribution, link delay/bandwidth and utilization/capability of
   computing servers.  In this standard, we employed the ALTO protocol
   to help deliver functions and schedule traffic at the edge computing
   platform.  This protocol supplied information of multiple resources
   for the distributed edge computing platform, thus enhancing the
   efficiency of function delivery in edge computing platform.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-yang-alto-deliver-functions-over-networks-02"/>
        </reference>
        <reference anchor="I-D.huang-alto-mowie-for-network-aware-app">
          <front>
            <title>MoWIE for Network Aware Application</title>
            <author fullname="Chunshan Xiong">
              <organization>Tencent</organization>
            </author>
            <author fullname="Yunfei Zhang">
              <organization>Tencent</organization>
            </author>
            <author fullname="Y. Richard Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Gang Li">
              <organization>China Mobile Research Institute</organization>
            </author>
            <author fullname="Yixue Lei">
              <organization>Tencent</organization>
            </author>
            <author fullname="Yunbo Han">
              <organization>Tencent</organization>
            </author>
            <date day="12" month="July" year="2021"/>
            <abstract>
              <t>   With the quick deployment of 5G networks in the world, cloud based
   interactive services such as clouding gaming have gained substantial
   attention and are regarded as potential killer applications.  To
   ensure users' quality of experience (QoE), a cloud interactive
   service may require not only high bandwidth (e.g., high-resolution
   media transmission) but also low delay (e.g., low latency and low
   lagging).  However, the bandwidth and delay experienced by a mobile
   and wireless user can be dynamic, as a function of many factors, and
   unhandled changes can substantially compromise users' QoE.  In this
   document, we investigate network-aware applications (NAA), which
   realize cloud based interactive services with improved QoE, by
   efficient utilization of Mobile and Wireless Information Exposure
   (MoWIE) . In particular, this document demonstrates, through
   realistic evaluations, that mobile network information such as MCS
   (Modulation and Coding Scheme) can effectively expose the dynamicity
   of the underlying network and can be made available to applications
   through MoWIE; using such information, the applications can then
   adapt key control knobs such as media codec scheme, encapsulation and
   application logical function to minimize QoE deduction.  Based on the
   evaluations, we discuss how MoWIE can be a systematic extension of
   the ALTO protocol, to expose more lower-layer and finer grain network
   dynamics.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-huang-alto-mowie-for-network-aware-app-03"/>
        </reference>
        <reference anchor="XQuery" target="https://www.w3.org/TR/xquery-31/">
          <front>
            <title>XQuery 3.1: An XML Query Language</title>
            <author>
              <organization/>
            </author>
            <date year="2017"/>
          </front>
        </reference>
        <reference anchor="JSONiq" target="https://www.jsoniq.org/">
          <front>
            <title>The JSON Query language</title>
            <author>
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="JSAC2019">
          <front>
            <title>Toward Fine-Grained, Privacy-Preserving, Efficient Multi-Domain Network Resource Discovery</title>
            <author initials="Q." surname="Xiang" fullname="Qiao Xiang">
              <organization>Yale University</organization>
            </author>
            <author initials="J." surname="Zhang" fullname="Jingxuan Zhang">
              <organization>Tongji University</organization>
            </author>
            <author initials="X." surname="Wang" fullname="Xin Wang">
              <organization>Tongji University</organization>
            </author>
            <author initials="Y." surname="Liu" fullname="Yang Liu">
              <organization>Tongji University</organization>
            </author>
            <author initials="C." surname="Guok" fullname="Chin Guok">
              <organization>ESNet</organization>
            </author>
            <author initials="F." surname="Le" fullname="Franck Le">
              <organization>IBM T.J. Watson Research Center</organization>
            </author>
            <author initials="J." surname="MacAuley" fullname="John MacAuley">
              <organization>ESNet</organization>
            </author>
            <author initials="H." surname="Newman" fullname="Harvey Newman">
              <organization>Caltech</organization>
            </author>
            <author initials="Y.R." surname="Yang" fullname="Yang Richard Yang">
              <organization>Yale University</organization>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="IEEE/ACM" value="IEEE Journal on Selected Areas of Communication 37(8): 1924-1940"/>
        </reference>
        <reference anchor="TON2019">
          <front>
            <title>An objective-driven on-demand network abstraction for adaptive applications</title>
            <author initials="K." surname="Gao" fullname="Kai Gao">
              <organization>Sichuan University</organization>
            </author>
            <author initials="Q." surname="Xiang" fullname="Qiao Xiang">
              <organization>Yale University</organization>
            </author>
            <author initials="X." surname="Wang" fullname="Xin Wang">
              <organization>Tongji University</organization>
            </author>
            <author initials="Y.R." surname="Yang" fullname="Yang Richard Yang">
              <organization>Yale University</organization>
            </author>
            <author initials="J." surname="Bi" fullname="Jun Bi">
              <organization>Tsinghua University</organization>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="IEEE/ACM" value="Transactions on Networking (TON) Vol 27, no. 2 (2019): 805-818."/>
        </reference>
        <reference anchor="SC2018">
          <front>
            <title>Fine-grained, multi-domain network resource abstraction as a fundamental primitive to enable high-performance, collaborative data sciences</title>
            <author initials="Q." surname="Xiang" fullname="Qiao Xiang">
              <organization>Yale University</organization>
            </author>
            <author initials="J." surname="Zhang" fullname="Jingxuan Zhang">
              <organization>Tongji University</organization>
            </author>
            <author initials="X." surname="Wang" fullname="Xin Wang">
              <organization>Tongji University</organization>
            </author>
            <author initials="Y." surname="Liu" fullname="Yang Liu">
              <organization>Tongji University</organization>
            </author>
            <author initials="C." surname="Guok" fullname="Chin Guok">
              <organization>ESNet</organization>
            </author>
            <author initials="F." surname="Le" fullname="Franck Le">
              <organization>IBM T.J. Watson Research Center</organization>
            </author>
            <author initials="J." surname="MacAuley" fullname="John MacAuley">
              <organization>ESNet</organization>
            </author>
            <author initials="H." surname="Newman" fullname="Harvey Newman">
              <organization>Caltech</organization>
            </author>
            <author initials="Y.R." surname="Yang" fullname="Yang Richard Yang">
              <organization>Yale University</organization>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="Proceedings of the Super Computing 2018, 5:1-5:13" value=""/>
        </reference>
        <reference anchor="AAAI2019">
          <front>
            <title>Optimizing in the dark: Learning an optimal solution through a simple request interface</title>
            <author initials="Q." surname="Xiang" fullname="Qiao Xiang">
              <organization>Yale University</organization>
            </author>
            <author initials="H." surname="Yu" fullname="Haitao Yu">
              <organization>Tongji University</organization>
            </author>
            <author initials="J." surname="Aspnes" fullname="James Aspnes">
              <organization>Yale University</organization>
            </author>
            <author initials="F." surname="Le" fullname="Franck Le">
              <organization>IBM T.J. Watson Research Center</organization>
            </author>
            <author initials="L." surname="Kong" fullname="Linghe Kong">
              <organization>Shanghai Jiao Tong University</organization>
            </author>
            <author initials="Y.R." surname="Yang" fullname="Yang Richard Yang">
              <organization>Yale University</organization>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="Proceedings of the AAAI Conference on Artificial Intelligence 33, 1674-1681" value=""/>
        </reference>
        <reference anchor="SENSE" target="http://sense.es.net/services">
          <front>
            <title>Services - SENSE</title>
            <author>
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="LHC" target="https://atlas.cern/tags/lhc">
          <front>
            <title>CERN - LHC</title>
            <author>
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="revision-logs" numbered="true" toc="default">
      <name>Revision Logs</name>
      <section anchor="changes-since-15" numbered="true" toc="default">
        <name>Changes since -15</name>
        <t>Revision -16</t>
        <ul spacing="normal">
          <li>resolves the compatibility with the Multi-Cost extension (RFC 8189)</li>
          <li>adds media types of defining resources for ANE property types (for IANA
registration)</li>
        </ul>
      </section>
      <section anchor="changes-since-14" numbered="true" toc="default">
        <name>Changes since -14</name>
        <t>Revision -15</t>
        <ul spacing="normal">
          <li>fixes the IDNits warnings,</li>
          <li>fixes grammar issues,</li>
          <li>addresses the comments in the AD review.</li>
        </ul>
      </section>
      <section anchor="changes-since-13" numbered="true" toc="default">
        <name>Changes since -13</name>
        <t>Revision -14</t>
        <ul spacing="normal">
          <li>addresses the comments in the chair review,</li>
          <li>fixes most issues raised by IDNits.</li>
        </ul>
      </section>
      <section anchor="changes-since-12" numbered="true" toc="default">
        <name>Changes since -12</name>
        <t>Revision -13</t>
        <ul spacing="normal">
          <li>changes the abstract based on the chairs' reviews</li>
          <li>integrates Richard's responds to WGLC reviews</li>
        </ul>
      </section>
      <section anchor="changes-since-11" numbered="true" toc="default">
        <name>Changes since -11</name>
        <t>Revision -12</t>
        <ul spacing="normal">
          <li>clarifies the definition of ANEs in a similar way as how Network Elements is
defined in <xref target="RFC2216" format="default"/></li>
          <li>restructures several paragraphs that are not clear (Sec 3, Path Vector bullet, Sec 4.2, Sec 5.1.3, Sec 6.2.4, Sec 6.4.2, Sec 9.3)</li>
          <li>uses <tt>ALTO Entity Domain Type Registry</tt></li>
        </ul>
      </section>
      <section anchor="changes-since-10" numbered="true" toc="default">
        <name>Changes since -10</name>
        <t>Revision -11</t>
        <ul spacing="normal">
          <li>replaces "part"  with "components" in the abstract;</li>
          <li>identifies additional requirements (AR) derived from the flow scheduling
example, and introduces how the extension addresses the additional
requirements</li>
          <li>fixes the inconsistent use of "start" parameter in multipart responses;</li>
          <li>specifies explicitly how to handle "cost-constraints";</li>
          <li>uses the latest IANA registration mechanism defined in
<xref target="I-D.ietf-alto-unified-props-new" format="default"/>;</li>
          <li>renames <tt>persistent-entities</tt> to <tt>persistent-entity-id</tt>;</li>
          <li>makes <tt>application/alto-propmap+json</tt> as the media type of defining resources
for the <tt>ane</tt> domain;</li>
          <li>updates the examples;</li>
          <li>adds the discussion on ephemeral and persistent ANEs.</li>
        </ul>
      </section>
      <section anchor="changes-since-09" numbered="true" toc="default">
        <name>Changes since -09</name>
        <t>Revision -10</t>
        <ul spacing="normal">
          <li>
            <t>revises the introduction which
            </t>
            <ul spacing="normal">
              <li>extends the scope where the PV extension can be applied beyond the "path
correlation" information</li>
            </ul>
          </li>
          <li>brings back the capacity region use case to better illustrate the problem</li>
          <li>revises the overview to explain and defend the concepts and decision choices</li>
          <li>fixes inconsistent terms, typos</li>
        </ul>
      </section>
      <section anchor="changes-since-08" numbered="true" toc="default">
        <name>Changes since -08</name>
        <t>This revision</t>
        <ul spacing="normal">
          <li>fixes a few spelling errors</li>
          <li>emphasizes that abstract network elements can be generated on demand in both
introduction and motivating use cases</li>
        </ul>
      </section>
      <section anchor="changes-since-version-06" numbered="true" toc="default">
        <name>Changes Since Version -06</name>
        <ul spacing="normal">
          <li>
            <t>We emphasize the importance of the path vector extension in two aspects:  </t>
            <ol spacing="normal" type="1"><li>It expands the problem space that can be solved by ALTO, from preferences
of network paths to correlations of network paths.</li>
              <li>It is motivated by new usage scenarios from both application's and
network's perspectives.</li>
            </ol>
          </li>
          <li>More use cases are included, in addition to the original capacity region use
case.</li>
          <li>We add more discussions to fully explore the design space of the path vector
extension and justify our design decisions, including the concept of abstract
network element, cost type (reverted to -05), newer capabilities and the
multipart message.</li>
          <li>Fix the incremental update process to be compatible with SSE -16 draft, which
uses client-id instead of resource-id to demultiplex updates.</li>
          <li>Register an additional ANE property (i.e., persistent-entities) to cover all
use cases mentioned in the draft.</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
/8ARshWI/+g/mYo8ywQZRuovrgcyqPO6bPEYW5Oj4cPpwdHBePTgwTh9MJk+
GB3uPnw4Hh0dPhiOdhN2wojfZKshgaDPRMZzXpnWcuYr5LsJAFvzacJ1+JU8
PEwnu3v7o/3x6PBoevToQXq0/+jwaHi4ezB9MBweiTvIvqd/xdcTu5u6/Uzr
HUw0Fu1tS2HloUw+JRqUXEiw1S3E1q2/8Vvm/dpzFtH6tnOOA3U7zvljoH2n
w//Q43dAd+AKWbpfMEW1EpAIbmudacfYS51/HDBJNf7if/VB03r55OWxPSXL
5bdiubT9/peNcJzuwMDukByssvibxOREkxpXhue3Dsfp3tvvEJtz20QfEJ+z
tsTQ5iCdW1fwG0bsBBXZ7xqyc8vysOxhV/yO/dj4HbOI43fWVn66SxCPBmb+
I6wtF6vimB8PH/xO8TshTtDGKgniCeusrw3iCVf9W0XwnAYr4vCd8JMPC9/p
jsXfpIW1l5BozUeVzfWphoc8qiGrQtX/bGRMesWBMenVB8XFcFAMXMUoIGZN
NMyHhsK0iJBneZuCYVqRMMPhbdx7DWoLI29HwawPgdkU/8LcVufy4S9B7Eu2
uD441lTzoYuCCUJgoif2jrYCPv4xcTDrgmCUwvoQmK5Gyh9CWgO7mllHJ8Lb
FC6nm0I6GyW2uNwUoxLdN4pnC7zUxvw6D3Lk4PhdPMh6Fv9h/mN1j/0e/uMW
adn6CIdvUAL8t3XK/kc4YTtFzH+ZJ7arvcAnT+xHeGKdHxaGbFQ9/liP7K/w
x/7bu2P/Z52PHbfZ2DX3ecNtxhX8pj7IO1yaT47IT47IT47IT47IT47IT47I
T47I/2RHZNSKM/JE3tV7uLf7+3kPW2rNehcibORDDFMf7UNEgH3yGn6E17Bh
jaPhm/a3/0NciWtw4N/WeXjPuiqV7+7pr+rxq1z5NuxWRS3d06CmZUhQpeK0
kwSiKkOuowNaCHEUFO+woJtk3tXlMmf/CEpVo7SuiZsmE8mT5aICjtrd0jT6
3T1Fi6zE+m7nBbWilua0ZXqFKWnXbiueCt7eAvImNWtKPdnOUk/tbtyRmh+Y
+7t7RqIae9F5qy8wETpoS+qVbmYjQSHs1FIyjxP9fQgIDN7l+qaxN5VwiGq0
RZ2ArUzPukd1m1fEyc5a7E1Wiopv97Z51SomV7RU3UNb8fX1OKi8jF+UsbZZ
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
RmsBAA==

-->

</rfc>
