<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.6 -->
<?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-oam-yang-00" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="3" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.3 -->
  <front>
    <title abbrev="ALTO O&amp;M YANG">A Yang Data Model for OAM and Management of ALTO Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-alto-oam-yang-00"/>
    <author initials="J." surname="Zhang" fullname="Jingxuan Jensen Zhang">
      <organization>Tongji University</organization>
      <address>
        <postal>
          <street>4800 Cao'An Hwy</street>
          <city>Shanghai</city>
          <code>201804</code>
          <country>China</country>
        </postal>
        <email>jingxuan.n.zhang@gmail.com</email>
      </address>
    </author>
    <author initials="D." surname="Dhody" fullname="Dhruv Dhody">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Divyashree Techno Park, Whitefield</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560066</code>
          <country>India</country>
        </postal>
        <email>dhruv.ietf@gmail.com</email>
      </address>
    </author>
    <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="R." surname="Schott" fullname="Roland Schott">
      <organization>Deutsche Telekom</organization>
      <address>
        <postal>
          <street>Heinrich-Hertz-Strasse 3-7</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>Roland.Schott@telekom.de</email>
      </address>
    </author>
    <date year="2022" month="April" day="12"/>
    <area>Networks</area>
    <workgroup>ALTO WG</workgroup>
    <keyword>ALTO, Internet-Draft</keyword>
    <abstract>
      <t>This document defines a YANG data model for Operations, Administration,
and Maintenance (OAM) &amp; Management of Application-Layer Traffic Optimization
(ALTO) Protocol. The operator can use the data model to create and update ALTO
information resources, manage the access control, configure server-to-server
communication and server discovery, and collect statistical data.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  ALTO Working Group mailing list (alto@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/alto/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/openalto/draft-alto-oam-yang"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>This document defines a YANG data model for the Operations, Administration, and
Maintenance (OAM) &amp; Management of Application-Layer Traffic Optimization (ALTO)
Protocol. The basic purpose of this YANG data model is discussed in Section 16
of <xref target="RFC7285" format="default"/>. The operator can use the data model to create and update ALTO
information resources, manage the access control, configure server-to-server
communication and server discovery, and collect statistical data.</t>
      <t>The basic structure of this YANG data model is guided by Section 16 of
<xref target="RFC7285" format="default"/> and <xref target="RFC7971" format="default"/>. Although the scope of the YANG data model in this
document mainly focuses on the support of the base ALTO protocol <xref target="RFC7285" format="default"/> and
the existing ALTO standard extensions (including <xref target="RFC8189" format="default"/>, <xref target="RFC8895" format="default"/> and
<xref target="RFC8896" format="default"/>), the design will also be extensible for future standard extensions
(e.g., <xref target="I-D.ietf-alto-path-vector" format="default"/>, <xref target="I-D.ietf-alto-unified-props-new" format="default"/>,
<xref target="I-D.ietf-alto-cdni-request-routing-alto" format="default"/>, and
<xref target="I-D.ietf-alto-performance-metrics" format="default"/>).</t>
    </section>
    <section anchor="requirements-language" numbered="true" toc="default">
      <name>Requirements Language</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. When the words
appear in lower case, they are to be interpreted with their natural language
meanings.</t>
      <!-- End of sections -->

</section>
    <section anchor="terminology" numbered="true" toc="default">
      <name>Terminology</name>
      <t>This document uses the following acronyms:</t>
      <ul spacing="normal">
        <li>OAM - Operations, Administration, and Maintainance</li>
        <li>O&amp;M - OAM and Management</li>
      </ul>
      <section anchor="tree-diagrams" numbered="true" toc="default">
        <name>Tree Diagrams</name>
        <t>A simplified graphical representation of the data model is used in this
document. The meaning of the symbols in these diagrams is defined in
<xref target="RFC8340" format="default"/>.</t>
      </section>
      <section anchor="prefixes-in-data-node-names" numbered="true" toc="default">
        <name>Prefixes in Data Node Names</name>
        <t>In this document, names of data nodes and other data model objects are often
used without a prefix, as long as it is clear from the context in which YANG
module each name is defined. Otherwise, names are prefixed using the standard
prefix associated with the corresponding YANG module, as shown in <xref target="tbl-yang-prefixes" format="default"/>.</t>
        <table anchor="tbl-yang-prefixes" align="center">
          <name>Prefixes and corresponding YANG modules</name>
          <thead>
            <tr>
              <th align="left">Prefix</th>
              <th align="left">YANG module</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">yang</td>
              <td align="left">ietf-yang-types</td>
              <td align="left">
                <xref target="RFC6991" format="default"/></td>
            </tr>
            <tr>
              <td align="left">inet</td>
              <td align="left">ietf-inet-types</td>
              <td align="left">
                <xref target="RFC6991" format="default"/></td>
            </tr>
            <tr>
              <td align="left">key-chain</td>
              <td align="left">ietf-key-chain</td>
              <td align="left">
                <xref target="RFC8177" format="default"/></td>
            </tr>
          </tbody>
        </table>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="sec-req" numbered="true" toc="default">
      <name>Design Scope and Requirements</name>
      <section anchor="scope-of-data-model-for-alto-om" numbered="true" toc="default">
        <name>Scope of Data Model for ALTO O&amp;M</name>
        <t>What is in the scope of this document?</t>
        <ul spacing="normal">
          <li>Data model for deploy an ALTO server/client.</li>
          <li>Data model for operate and manage a running ALTO server/client.</li>
          <li>Data model for functionality/capability configuration for ALTO services.</li>
          <li>Data model for monitoring ALTO-related performance metrics.</li>
        </ul>
        <t>What is not in the scope of this document?</t>
        <t>This document does not define any data model related to specific
implementation, including:</t>
        <ul spacing="normal">
          <li>Data structures for how to store/deliver ALTO information resources (e.g.,
database schema to store a network map).</li>
          <li>Data structures for how to store information collected from data sources.
(e.g., database schema to store topology collected from an Interface to the
Routing System (I2RS) client <xref target="RFC7921" format="default"/>)</li>
        </ul>
      </section>
      <section anchor="basic-requirements" numbered="true" toc="default">
        <name>Basic Requirements</name>
        <t>Based on discussions and recommendations in <xref target="RFC7285" format="default"/> and <xref target="RFC7971" format="default"/>, the
data model provided by this document satisfies basic requirements listed in
<xref target="TableReq" format="default"/>.</t>
        <table anchor="TableReq" align="center">
          <name>Basic Requirements of Data Model for ALTO O&amp;M.</name>
          <thead>
            <tr>
              <th align="left">Requirement</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">R1: The data model should support configuration for ALTO server setup.</td>
              <td align="left">Section 16.1 of <xref target="RFC7285" format="default"/></td>
            </tr>
            <tr>
              <td align="left">R2: The data model should provide logging management.</td>
              <td align="left">Section 16.2.1 of <xref target="RFC7285" format="default"/></td>
            </tr>
            <tr>
              <td align="left">R3: The data model should provide ALTO-related management information.</td>
              <td align="left">Section 16.2.2 of <xref target="RFC7285" format="default"/></td>
            </tr>
            <tr>
              <td align="left">R4: The data model should provide metrics for server failures.</td>
              <td align="left">Section 16.2.3 of <xref target="RFC7285" format="default"/>, Section 3.3 of <xref target="RFC7971" format="default"/></td>
            </tr>
            <tr>
              <td align="left">R5-1: The data model should support configuration for different data sources.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285" format="default"/>, Section 3.2 of <xref target="RFC7971" format="default"/></td>
            </tr>
            <tr>
              <td align="left">R5-2: The data model should support configuration for information resource generation algorithms.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285" format="default"/></td>
            </tr>
            <tr>
              <td align="left">R5-3: The data model should support configuration for access control at information resource level.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285" format="default"/></td>
            </tr>
            <tr>
              <td align="left">R6: The data model should provide performance monitoring for ALTO-specific metrics.</td>
              <td align="left">Section 16.2.5 of <xref target="RFC7285" format="default"/>, Section 3.4 of <xref target="RFC7971" format="default"/></td>
            </tr>
            <tr>
              <td align="left">R7: The data model should support configuration for security policy management.</td>
              <td align="left">Section 16.2.6 of <xref target="RFC7285" format="default"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="additional-requirements-for-extensibility" numbered="true" toc="default">
        <name>Additional Requirements for Extensibility</name>
        <t>R8: As the ALTO protocol is extensible, the data model for ALTO O&amp;M should
allow for augmentation to support potential future extensions.</t>
        <!--
To satisfy all the basic requirements and consider the potential requirements
for future extensions, this document focuses on the design objectives for the
YANG data model as follows:

- The data model should support configuration for ALTO server setup (e.g.,
  caching policy at information resource level, metadata for server discovery).
- The data model should provide configurable data model for administrators to
  create, update and remove ALTO information resources.
    - The data model should support different types of data source
      provisioning.
    - The data model should allow developers to augment new APIs for ALTO
      information resource generation algorithms.
    - The data model should be extensible for new ALTO information resources.
- The data model should collect statistics information of the
  requests/responses for each ALTO information resource.
- The data model should support security policy configuration at the
  information resource level.
-->

<!--
- The data model should provide intent-based interfaces for administrators to
  create, update and remove ALTO information resources.
  - The data model should be extensible for new ALTO information resources.
  - The data model should allow developers to augment new APIs for ALTO
    information resource generation.
- The data model should support configuration for ALTO server discovery.
- The data model should support access control at the information resource level.
- The data model should collect statistics information of the requests to each
  ALTO information resource.
-->

<!--
NOTE: The data model supporting configuration for the ALTO client and the
communication between the administrated ALTO server and other ALTO servers will
be considered in a future version of the document.
-->

</section>
      <section anchor="overview-of-alto-om-data-model-for-reference-alto-architecture" numbered="true" toc="default">
        <name>Overview of ALTO O&amp;M Data Model for Reference ALTO Architecture</name>
        <t><xref target="alto-ref-arch" format="default"/> shows a reference architecture for ALTO server
implementation and YANG modules that server components implement. The server
manager, information resource manager and data source listeners need to
implement <tt>ietf-alto.yang</tt> (see <xref target="alto-model" format="default"/>). The performance monitor and
logging and fault manager need to implement <tt>ietf-alto-stats.yang</tt> (see
<xref target="alto-stats-model" format="default"/>).</t>
        <t>The data broker and algorithm plugins are not in the scope of the data model
defined in this document. But user specified YANG modules can be applied to
different algorithm plugins by augmenting the data model defined in this
document (see <xref target="alto-ext-model" format="default"/>).</t>
        <figure anchor="alto-ref-arch">
          <name>A Reference ALTO Server Architecture and YANG Modules</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
  +----------------------+      +-----------------+
  | Performance Monitor: |<-----| Server Manager: |
  | ietf-alto-stats.yang |<-+ +-| ietf-alto.yang  |
  +----------------------+  | | +-----------------+
                          report
  +----------------------+  | | +-------------------+
  | Logging and Fault    |  +---| Information       |
  | Manager:             |<---+ | Resource Manager: |
  | ietf-alto-stats.yang |<-----| ietf-alto.yang    |
  +----------------------+      +-------------------+
                                         ^|
                                         || callback
                                         |v
     .............          ..............................
    /             \ ------> . Algorithm Plugin:          .
    . Data Broker .  read   . example-ietf-alto-alg.yang .
    ...............         ..............................
           ^
           | write
  +----------------+  Southbound  ++=============++
  | Data Source    |     API      ||             ||
  | Listener:      | <==========> || Data Source ||
  | ietf-alto.yang |              ||             ||
  +----------------+              ++=============++
]]></artwork>
        </figure>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="alto-model" numbered="true" toc="default">
      <name>Design of ALTO O&amp;M Data Model</name>
      <section anchor="overview-of-alto-om-data-model" numbered="true" toc="default">
        <name>Overview of ALTO O&amp;M Data Model</name>
        <t>The ietf-alto module defined in this document provide all the basic ALTO O&amp;M
data models fitting the requirements listed in <xref target="sec-req" format="default"/>.</t>
        <t>The container "alto-server" in the ietf-alto module contains all the configured
and operational parameters of the adminstrated ALTO server instance.</t>
        <t>NOTE: So far, the ALTO YANG module only focuses on the ALTO server related
configuration. The ALTO client related configuration will be added in a future
version of the document.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
module: ietf-alto
  +--rw alto-server
     +--rw hostname?      inet:host
     +--rw cost-type* [cost-type-name]
     |  +--rw cost-type-name    string
     |  +--rw cost-mode         cost-mode
     |  +--rw cost-metric       cost-metric
     +--rw meta* [meta-key]
     |  +--rw meta-key      string
     |  +--rw meta-value    string
     +--rw resource* [resource-id]
     |  +--rw resource-id                       resource-id
     |  +--rw resource-type                     identityref
     |  +--rw description?                      string
     |  +--rw accepted-group*                   string
     |  +--rw dependency*                       resource-id
     |  +--rw auth
     |  |  +--rw (auth-type-selection)?
     |  |     +--:(auth-key-chain)
     |  |     |  +--rw key-chain?   key-chain:key-chain-ref
     |  |     +--:(auth-key)
     |  |     +--:(auth-tls)
     |  +--rw (resource-params)?
     |     +--:(ird)
     |     |  +--rw alto-ird-params
     |     |     +--rw delegation    inet:uri
     |     +--:(networkmap)
     |     |  +--rw alto-networkmap-params
     |     |     +--rw is-default?   boolean
     |     |     +--rw filtered?     boolean
     |     |     +--rw (algorithm)
     |     +--:(costmap)
     |     |  +--rw alto-costmap-params
     |     |     +--rw filtered?                   boolean
     |     |     +--rw cost-type-names*            string
     |     |     +--rw cost-constraints?           boolean
     |     |     +--rw max-cost-types?             uint32 {multi-cost}?
     |     |     +--rw testable-cost-type-names*   string {multi-cost}?
     |     |     +--rw calendar-attributes {cost-calendar}?
     |     |     |  +--rw cost-type-names*       string
     |     |     |  +--rw time-interval-size     decimal64
     |     |     |  +--rw number-of-intervals    uint32
     |     |     +--rw (algorithm)
     |     +--:(endpointcost)
     |     |  +--rw alto-endpointcost-params
     |     |     +--rw cost-type-names*            string
     |     |     +--rw cost-constraints?           boolean
     |     |     +--rw max-cost-types?             uint32 {multi-cost}?
     |     |     +--rw testable-cost-type-names*   string {multi-cost}?
     |     |     +--rw calendar-attributes {cost-calendar}?
     |     |     |  +--rw cost-type-names*       string
     |     |     |  +--rw time-interval-size     decimal64
     |     |     |  +--rw number-of-intervals    uint32
     |     |     +--rw (algorithm)
     |     +--:(endpointprop)
     |     |  +--rw alto-endpointprop-params
     |     |     +--rw prop-types*   string
     |     |     +--rw (algorithm)
     |     +--:(propmap) {propmap}?
     |     |  +--rw alto-propmap-params
     |     |     +--rw (algorithm)
     |     +--:(cdni) {cdni}?
     |     |  +--rw alto-cdni-params
     |     |     +--rw (algorithm)
     |     +--:(update) {incr-update}?
     |        +--rw alto-update-params
     |           +--rw (algorithm)
     +--rw data-source* [source-id]
        +--rw source-id                             string
        +--rw source-type                           identityref
        +--rw (update-policy)
        |  +--:(reactive)
        |  |  +--rw reactive                        boolean
        |  +--:(proactive)
        |     +--rw poll-interval                   uint32
        +--rw (source-params)?
           +--:(yang-datastore)
           |  +--rw yang-datastore-source-params
           |     +--rw source-path    yang:xpath1.0
           +--:(prometheus)
              +--rw prometheus-source-params
                 +--rw source-uri    inet:uri
                 +--rw query-data?   string
]]></artwork>
      </section>
      <section anchor="meta-information-of-alto-server" numbered="true" toc="default">
        <name>Meta Information of ALTO Server</name>
        <t>The ALTO server instance contains the following basic configurations for the
server setup.</t>
        <t>The hostname is the name that is used to access the ALTO server. It will be also
used in the URI of each information resource provided by the ALTO server.</t>
        <t>The cost type list is the registry for the cost types that can be used in the
ALTO server.</t>
        <t>The <tt>meta</tt> list contains the customized meta data of the ALTO server. It will be
populated into the meta field of the default Information Resource Directory
(IRD).</t>
        <t>TODO: As suggested by <xref target="RFC7286" format="default"/> and <xref target="RFC8686" format="default"/>, the configuration related to
ALTO server discovery should also be included here.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
module: ietf-alto
  +--rw alto-server
     +--rw hostname?      inet:host
     +--rw cost-type* [cost-type-name]
     |  +--rw cost-type-name    string
     |  +--rw cost-mode         cost-mode
     |  +--rw cost-metric       cost-metric
     +--rw meta* [meta-key]
     |  +--rw meta-key      string
     |  +--rw meta-value    string
     ...
]]></artwork>
      </section>
      <section anchor="alto-information-resources-configuration-management" numbered="true" toc="default">
        <name>ALTO Information Resources Configuration Management</name>
        <t>The ALTO server instance contains a list of <tt>resource</tt> entries. Each <tt>resource</tt>
entry contains the configurations of an ALTO information resource (See Section
8.1 of <xref target="RFC7285" format="default"/>). The operator of the ALTO server can use this model to
create, update, and remove the ALTO information resource.</t>
        <t>Each <tt>resoruce</tt> entry provide configuration defining how to create or update an ALTO
information resource. Adding a new <tt>resource</tt> entry will submit an ALTO
information resource creation intent to the intent system to create a new ALTO
information resource. Updating an existing <tt>resource</tt> entry will update the
corresponding ALTO information resource creation intent. Removing an existing
<tt>resource</tt> entry will remove the corresponding ALTO information resource
creation intent and also the created ALTO information resource.</t>
        <t>The parameter of the intent interface defined by a <tt>resource</tt> entry MUST include
a unique <tt>resource-id</tt> and a <tt>resource-type</tt>.</t>
        <t>It can also include an <tt>accepted-group</tt> node containing a list of <tt>user-group</tt>s
that can access this ALTO information resource.</t>
        <t>As section 15.5.2 of <xref target="RFC7285" format="default"/> suggests, the module also defines
authentication related configuration to employ access control at information
resource level. The ALTO server returns the IRD to the ALTO client based on its
authentication information.</t>
        <t>For some <tt>resource-type</tt>, the parameter of the intent interface MUST also
include the a <tt>dependency</tt> node containing the <tt>resource-id</tt> of the dependent
ALTO information resources (See Section 9.1.5 of <xref target="RFC7285" format="default"/>).</t>
        <t>For each type of ALTO information resource, the creation intent MAY also need
type-specific parameters. These type-specific parameters include two categories:</t>
        <ol spacing="normal" type="1"><li>One categories of the type-specific parameters are common for the same type
of ALTO information resource. They declare the Capabilities of the ALTO
information resource (See Section 9.1.3 of <xref target="RFC7285" format="default"/>).</li>
          <li>The other categories of the type-specific parameters are algorithm-specific.
The developer of the ALTO server can implement their own creation altorithms
and augment the <tt>algorithm</tt> node to declare algorithm-specific input
parameters.</li>
        </ol>
        <t>Except for the <tt>ird</tt> resource, all the other types of <tt>resource</tt> entries have
augmented <tt>algorithm</tt> node. The augmented <tt>algorithm</tt> node can reference data
sources subscribed by the <tt>data-source</tt> entries (See <xref target="data-source" format="default"/>).</t>
        <t>The developer cannot customize the creation algorithm of the <tt>ird</tt> resource. The
default <tt>ird</tt> resource will be created automatically based on all the added
<tt>resource</tt> entries. The delegated <tt>ird</tt> resource will be created as a static
ALTO information resource (See Section 9.2.4 of <xref target="RFC7285" format="default"/>).</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
module: ietf-alto
  +--rw alto-server
     ...
     +--rw resource* [resource-id]
     |  +--rw resource-id                       resource-id
     |  +--rw resource-type                     identityref
     |  +--rw description?                      string
     |  +--rw accepted-group*                   string
     |  +--rw dependency*                       resource-id
     |  +--rw auth
     |  |  +--rw (auth-type-selection)?
     |  |     +--:(auth-key-chain)
     |  |     |  +--rw key-chain?   key-chain:key-chain-ref
     |  |     +--:(auth-key)
     |  |     +--:(auth-tls)
     |  +--rw (resource-params)?
     |     +--:(ird)
     |     |  +--rw alto-ird-params
     |     |     +--rw delegation    inet:uri
     |     +--:(networkmap)
     |     |  +--rw alto-networkmap-params
     |     |     +--rw is-default?   boolean
     |     |     +--rw filtered?     boolean
     |     |     +--rw (algorithm)
     |     +--:(costmap)
     |     |  +--rw alto-costmap-params
     |     |     +--rw filtered?                   boolean
     |     |     +--rw cost-type-names*            string
     |     |     +--rw cost-constraints?           boolean
     |     |     +--rw max-cost-types?             uint32 {multi-cost}?
     |     |     +--rw testable-cost-type-names*   string {multi-cost}?
     |     |     +--rw calendar-attributes {cost-calendar}?
     |     |     |  +--rw cost-type-names*       string
     |     |     |  +--rw time-interval-size     decimal64
     |     |     |  +--rw number-of-intervals    uint32
     |     |     +--rw (algorithm)
     |     +--:(endpointcost)
     |     |  +--rw alto-endpointcost-params
     |     |     +--rw cost-type-names*            string
     |     |     +--rw cost-constraints?           boolean
     |     |     +--rw max-cost-types?             uint32 {multi-cost}?
     |     |     +--rw testable-cost-type-names*   string {multi-cost}?
     |     |     +--rw calendar-attributes {cost-calendar}?
     |     |     |  +--rw cost-type-names*       string
     |     |     |  +--rw time-interval-size     decimal64
     |     |     |  +--rw number-of-intervals    uint32
     |     |     +--rw (algorithm)
     |     +--:(endpointprop)
     |     |  +--rw alto-endpointprop-params
     |     |     +--rw prop-types*   string
     |     |     +--rw (algorithm)
     |     +--:(propmap) {propmap}?
     |     |  +--rw alto-propmap-params
     |     |     +--rw (algorithm)
     |     +--:(cdni) {cdni}?
     |     |  +--rw alto-cdni-params
     |     |     +--rw (algorithm)
     |     +--:(update) {incr-update}?
     |        +--rw alto-update-params
     |           +--rw (algorithm)
     ...
]]></artwork>
      </section>
      <section anchor="data-source" numbered="true" toc="default">
        <name>Data Sources</name>
        <t>The ALTO server instance contains a list of <tt>data-source</tt> entries to subscribe
the data sources from which ALTO information resources are derived (See Section
16.2.4 of <xref target="RFC7285" format="default"/>).</t>
        <t>A <tt>data-source</tt> entry MUST include:</t>
        <ul spacing="normal">
          <li>a unique <tt>source-id</tt> for resource creation algorithms to reference,</li>
          <li>the <tt>source-type</tt> attribute to declare the type of the data source,</li>
          <li>the <tt>update-policy</tt> to specify how to get the data update from the data
source,</li>
          <li>the <tt>source-params</tt> to specify where and how to query the data.</li>
        </ul>
        <t>The update policy can be either reactive or proactive. For the reactive update,
the ALTO server gets the update as soon as the data source changes. For the
proactive update, the ALTO server has to proactively fetch the data source
periodically.</t>
        <t>To use the reactive update, the <tt>reactive</tt> attribute MUST be set true. To use
the proactive update, the <tt>poll-interval</tt> attribute MUST be greater than zero.
The value of <tt>poll-interval</tt> specifies the interval of fetching the data in
milliseconds. If <tt>reactive</tt> is false or <tt>poll-interval</tt> is zero, the ALTO server
will not update the data source.</t>
        <t>The <tt>data-source/source-params</tt> node can be augmented for different types of
data sources. This data model only includes import interfaces for a list of
predefined data sources. More data sources can be supported by future documents
and other third-party providers.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
module: ietf-alto
  +--rw alto-server
     ...
     +--rw data-source* [source-id]
        +--rw source-id                             string
        +--rw source-type                           identityref
        +--rw (update-policy)
        |  +--:(reactive)
        |  |  +--rw reactive                        boolean
        |  +--:(proactive)
        |     +--rw poll-interval                   uint32
        +--rw (source-params)?
           +--:(yang-datastore)
           |  +--rw yang-datastore-source-params
           |     +--rw source-path    yang:xpath1.0
           +--:(prometheus)
              +--rw prometheus-source-params
                 +--rw source-uri    inet:uri
                 +--rw query-data?   string
]]></artwork>
        <t>Note: Current source configuration still has limitations. It should be
revised to support more general southbound and data retrieval mechanisms.</t>
        <section anchor="internal-data-source" numbered="true" toc="default">
          <name>Yang DataStore Data Source</name>
          <t>The <tt>yang-datastore-source-params</tt> is used to import the YANG data which
is located in the same YANG model-driven data store supplying the current ALTO
O&amp;M data model. The <tt>source-path</tt> is used to specify the XPath of the data
source node.</t>
        </section>
        <section anchor="external-data-source" numbered="true" toc="default">
          <name>Prometheus Data Source</name>
          <t>The <tt>prometheus-source-params</tt> is used to import common performance metrics
data which is provided by a Prometheus server. The <tt>source-uir</tt> is used to
establish the connection with the Prometheus server. The <tt>query-data</tt> is used
to speficify the potential query expression in PromQL.</t>
        </section>
      </section>
      <section anchor="model-for-alto-server-to-server-communication" numbered="true" toc="default">
        <name>Model for ALTO Server-to-server Communication</name>
        <t>TBD.</t>
      </section>
    </section>
    <section anchor="alto-stats-model" numbered="true" toc="default">
      <name>Design of ALTO O&amp;M Statistics Data Model</name>
      <section anchor="model-for-alto-logging-and-fault-management" numbered="true" toc="default">
        <name>Model for ALTO Logging and Fault Management</name>
        <t>As section 16.2.1 and section 16.2.3 of <xref target="RFC7285" format="default"/> suggest, the YANG data
module defined in this document contains statistics for logging and failure
detection.</t>
        <t>NOTE: The detailed YANG module will appear in the future version.</t>
      </section>
      <section anchor="model-for-alto-specific-performance-monitoring" numbered="true" toc="default">
        <name>Model for ALTO-specific Performance Monitoring</name>
        <t>As section 16.2.5 of <xref target="RFC7285" format="default"/> suggests, the YANG data module defined in this
document also contains statistics for ALTO-specific performance metrics.</t>
        <t>More specifically, this data model contains the following measurement
information suggested by <xref target="RFC7971" format="default"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Measurement of impact
            </t>
            <ul spacing="normal">
              <li>Total amount and distribution of traffic</li>
              <li>Application performance</li>
            </ul>
          </li>
          <li>
            <t>System and service performance
            </t>
            <ul spacing="normal">
              <li>Requests and responses for each information resource</li>
              <li>CPU and memory utilization</li>
              <li>ALTO map updates</li>
              <li>Number of PIDs</li>
              <li>ALTO map sizes</li>
            </ul>
          </li>
        </ul>
        <t>Besides the measurement information suggested by <xref target="RFC7971" format="default"/>, this data model
also contains useful measurement information for other ALTO extensions:</t>
        <ul spacing="normal">
          <li>Number of generic ALTO entities (for <xref target="I-D.ietf-alto-unified-props-new" format="default"/> and
<xref target="I-D.ietf-alto-cdni-request-routing-alto" format="default"/>)</li>
          <li>Statistics for update sessions and events (for <xref target="RFC8189" format="default"/>)</li>
          <li>Statistics for calendar (for <xref target="RFC8896" format="default"/>)</li>
        </ul>
        <!--
Note that this module only contains statstics for performance information that a
common web server or an O&M tool cannot provide.
-->

<t>The module, "ietf-alto-stats", augments the ietf-alto module to include
statistics at the ALTO server and information resource level.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
module: ietf-alto-stats

  augment /alto:alto-server/alto:resource:
    +--ro num-res-upd?    yang:counter32
    +--ro res-mem-size?   yang:counter32
    +--ro res-enc-size?   yang:counter32

  augment /alto:alto-server/alto:resource/alto:resource-params
            /alto:networkmap/alto:alto-networkmap-params:
    +--ro num-map-pid?    yang:counter32

  augment /alto:alto-server/alto:resource/alto:resource-params
            /alto:propmap/alto:alto-propmap-params:
    +--ro num-map-entry?  yang:counter32

  augment /alto:alto-server/alto:resource/alto:resource-params
            /alto:cdni/alto:alto-cdni-params:
    +--ro num-base-obj?   yang:counter32

  augment /alto:alto-server/alto:resource/alto:resource-params
            /alto:update/alto:alto-update-params:
    +--ro num-upd-sess    yang:counter32
    +--ro num-event-total yang:counter32
    +--ro num-event-max?  yang:counter32
    +--ro num-event-min?  yang:counter32
    +--ro num-event-avg?  yang:counter32
]]></artwork>
      </section>
    </section>
    <section anchor="alto-ext-model" numbered="true" toc="default">
      <name>Extension of ALTO O&amp;M Data Model</name>
      <t>As ALTO protocol is extensible, new protocol extensions can be developed after
this data model is published. To support future ALTO protocol extensions, the
extension documents can augment the existing cases of the <tt>resource-params</tt>
choice with new configuration parameters for existing ALTO information resource
extensions, or augment the <tt>resource-params</tt> with new cases for new ALTO
information resources.</t>
      <t>Developers and operators can also extend this ALTO O&amp;M data model to align
with their own implementations. Specifically, the following nodes of the data
model can be augmented:</t>
      <ul spacing="normal">
        <li>The <tt>algorithm</tt> choice of the <tt>resource-params</tt> of each <tt>resource</tt>.</li>
        <li>The <tt>data-source</tt> choice.</li>
      </ul>
      <t>The following example shows how the developer augments the <tt>algorithm</tt>
choice of <tt>alto-networkmap-params</tt> with a creation algorithm for the network
map resource.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
module: example-ietf-alto-alg

  augment /alto:alto-server/alto:resource/alto:resource-params
            /alto:networkmap/alto:alto-networkmap-params
            /alto:algorithm:
    +--:(l3-unicast-cluster)
       +--rw l3-unicast-cluster-algorithm
          +--rw l3-unicast-topo
          |       -> /alto:alto-server/data-source/source-id
          +--rw depth?             uint32
]]></artwork>
      <t>This example defines a creation algorithm called <tt>l3-unicast-cluster-algorithm</tt>
for the network map resource. It takes two algorithm-specific parameters:</t>
      <dl>
        <dt>
l3-unicast-topo  </dt>
        <dd>
          <t>This parameter refers to the source id of a data source node subscribed in the
<tt>data-source</tt> list (See <xref target="data-source" format="default"/>). The corresponding data source is
assumed to be an internel data source (See <xref target="internal-data-source" format="default"/>) for an
IETF layer 3 unicast topology defined in <xref target="RFC8346" format="default"/>. The algorithm uses the
topology data from this data source to compute the ALTO network map resource.</t>
        </dd>
        <dt>
depth  </dt>
        <dd>
          <t>This optional parameter sets the depth of the clustering algorithm. For
example, if the depth sets to 1, the algorithm will generate PID for every
l3-node in the topology.</t>
        </dd>
      </dl>
      <t>The creation algorithm can be reactively called once the referenced data source
updates. Therefore, the ALTO network map resource can be updated dynamically.
The update of the reference data source depends on the used <tt>update-policy</tt> (See
<xref target="data-source" format="default"/>).</t>
      <!-- End of sections -->

<!--
Note: current kramdown-rfc tool does not support recursive inclusion.
Simply put the YANG module section here and wait for a future update.
See details: https://github.com/cabo/kramdown-rfc/issues/106
-->

</section>
    <section anchor="alto-oam-yang-module" numbered="true" toc="default">
      <name>ALTO OAM YANG Module</name>
      <section anchor="the-ietf-alto-module" numbered="true" toc="default">
        <name>The ietf-alto Module</name>
        <sourcecode type="yang" markers="true" name="ietf-alto@2022-03-07.yang"><![CDATA[
module ietf-alto {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-alto";
  prefix "alto";

  import ietf-inet-types {
    prefix "inet";
    reference
      "RFC 6991: Common YANG Data Types";
  }

  import ietf-yang-types {
    prefix "yang";
    reference
      "RFC 6991: Common YANG Data Types";
  }

  import ietf-key-chain {
    prefix key-chain;
    reference
      "RFC 8177: YANG Data Model for Key Chains";
  }

  organization
    "IETF ALTO Working Group";

  contact
    "WG Web:   <https://datatracker.ietf.org/wg/alto/about/>
     WG List:  <alto@ietf.org>";

  description
    "This YANG module defines all the configured and operational
     parameters of the administrated ALTO server instance.

     Copyright (c) 2022 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.

     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 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.";

  revision "2022-03-07" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for OAM and Management of ALTO
       Protocol.";
  }

  typedef cost-mode {
    type enumeration {
      enum numerical {
        value 1;
        description
          "This mode indicates that it is safe to perform numerical
           operations";
      }
      enum ordinal {
        value 2;
        description
          "This mode indicates that the cost values in a cost map
           represent ranking";
      }
    }
    description
      "The cost mode attribute indicates how costs should be
       interpreted. Specifically, the cost mode attribute indicates
       whether returned costs should be interpreted as numerical
       values or ordinal rankings.";
    reference
      "Section 6.1.2 of RFC 7285.";
  }

  typedef cost-metric {
    type string;
    description
      "The cost metric attribute indicates what the cost
       represents.";
    reference
      "Section 6.1.1 of RFC 7285.";
  }

  typedef resource-id {
    type string {
      length "1..64";
      pattern "[0-9a-zA-Z\\-:@_]*";
    }
    description
      "Format of Resource ID";
    reference
      "Section 9.1.1 of RFC 7285.";
  }

  identity resource-types {
    description
      "Base identity for type of information resource.";
  }

  identity source-types {
    description
      "Base identity for type of data source.";
  }

  identity network-map {
    base resource-types;
    description
      "Identity for network map.";
  }

  identity cost-map {
    base resource-types;
    description
      "Identity for cost map.";
  }

  identity property-map {
    base resource-types;
    description
      "Identity for property map.";
  }

  identity yang-datastore {
    base source-types;
    description
      "Identity for data source of YANG-based datastore.";
  }

  identity prometheus {
    base source-types;
    description
      "Identity for data source of prometheus system.";
  }

  feature multi-cost {
    description
      "Support multi-cost extension.";
    reference
      "RFC 8189: Multi-Cost Application-Layer Traffic Optimization
       (ALTO)";
  }

  feature cost-calendar {
    description
      "Support cost calendar extension.";
    reference
      "RFC 8896: Application-Layer Traffic Optimization (ALTO) Cost
       Calendar";
  }

  feature propmap {
    description
      "Support entity property map extension.";
    reference
      "RFC XXXX: An ALTO Extension: Entity Property Maps";
  }

  feature cdni {
    description
      "Support CDNi extension.";
    reference
      "RFC XXXX: Content Delivery Network Interconnection (CDNI)
       Request Routing: CDNI Footprint and Capabilities
       Advertisement using ALTO";
  }

  feature incr-update {
    description
      "Support incremental update extension.";
    reference
      "RFC 8896: Application-Layer Traffic Optimization (ALTO)
       Incremental Updates Using Server-Sent Events (SSE)";
  }

  grouping filt-costmap-cap {
    description
      "This grouping defines data model for
       FilteredCostMapCapabilities.";
    reference
      "Sec 11.3.2.4 of RFC 7285.";
    leaf-list cost-type-names {
      type string;
      min-elements 1;
      description
        "Supported cost types";
    }
    leaf cost-constraints {
      type boolean;
      description
        "If true, then the ALTO server allows cost
         constraints to be included in requests to the
         corresponding URI. If not present, this field MUST
         be interpreted as if it specified false.";
    }
    leaf max-cost-types {
      if-feature "multi-cost";
      type uint32;
      default 0;
      description
        "If present with value N greater than 0, this resource
         understands the multi-cost extensions in this document and
         can return a multi-cost map with any combination of N or
         fewer cost types in the 'cost-type-names' list. If omitted,
         the default value is 0.";
    }
    leaf-list testable-cost-type-names {
      if-feature "multi-cost";
      type string;
      description
        "If present, the resource allows constraint tests, but only
         on the cost type names in this array.";
    }
    container calendar-attributes {
      if-feature "cost-calendar";
      leaf-list cost-type-names {
        type string;
        min-elements 1;
        description
          "An array of one or more elements indicating the cost type
           names in the IRD entry to which the values of
           'time-interval-size' and 'number-of-intervals' apply.";
      }
      leaf time-interval-size {
        type decimal64 {
          fraction-digits 4;
        }
        mandatory true;
        description
          "The duration of an ALTO Calendar time interval in a unit
           of seconds.";
      }
      leaf number-of-intervals {
        type uint32 {
          range "1..max";
        }
        mandatory true;
        description
          "A strictly positive integer (greater or equal to 1) that
           indicates the number of values of the Cost Calendar
           array.";
      }
      description
        "Configuration for CalendarAttributes.";
      reference
        "Section 4.1 of RFC 8896.";
    }
  }

  grouping algorithm {
    choice algorithm {
      mandatory true;
      description
        "Information resource creation algorithm to be augmented.";
    }
    description
      "This grouping defines base data model for information
       resource creation algorithm.";
  }

  container alto-server {
    description
      "The ALTO server instance.";
    leaf hostname {
      type inet:host;
      description
        "The name that is used to access the ALTO server.";
    }
    list cost-type {
      key "cost-type-name";
      leaf cost-type-name {
        type string;
        description
          "The name to reference cost type";
      }
      leaf cost-mode {
        type cost-mode;
        mandatory true;
        description
          "The referenced cost mode";
      }
      leaf cost-metric {
        type cost-metric;
        mandatory true;
        description
          "The referenced cost metric";
      }
      description
        "Mapping between name and referenced cost type";
    }
    list meta {
      key "meta-key";
      leaf meta-key {
        type string;
        description
          "Custom meta key";
      }
      leaf meta-value {
        type string;
        mandatory true;
        description
          "Custom meta value";
      }
      description
        "Mapping of custom meta information";
      reference
        "Section 8.4.1 of RFC 7285.";
    }
    list resource {
      key "resource-id";
      leaf resource-id {
        type resource-id;
        description
          "resource-id to be defined.";
      }
      leaf resource-type {
        type identityref {
          base resource-types;
        }
        mandatory true;
        description
          "identityref to be defined.";
      }
      leaf description {
        type string;
        description
          "The optional description for this information resource.";
      }
      leaf-list accepted-group {
        type string;
        description
          "Access list for authenticated clients.";
      }
      leaf-list dependency {
        type resource-id;
        description
          "A list of dependent information resources.";
      }
      container auth {
        description
          "The authentication options";
        choice auth-type-selection {
          description
            "Options for expressing authentication
             setting.";
          case auth-key-chain {
            leaf key-chain {
              type key-chain:key-chain-ref;
              description
                "key-chain name.";
            }
          }
          case auth-key {
          }
          case auth-tls {
          }
        }
      }
      choice resource-params {
        description
          "Resource-specific configuration.";
        case ird {
          container alto-ird-params {
            leaf delegation {
              type inet:uri;
              mandatory true;
              description
                "Upstream IRD to be delegated";
            }
            description
              "IRD-specific configuration";
          }
        }
        case networkmap {
          container alto-networkmap-params {
            description
              "(Filtered) Network Map specific configuration";
            reference
              "Section 11.2.1 and Section 11.3.1 of RFC 7285.";
            leaf is-default {
              type boolean;
              description
                "Set whether this is the default network map";
            }
            leaf filtered {
              type boolean;
              default false;
              description
                "Configure whether filtered network map is
                 supported.";
            }
            uses algorithm;
          }
        }
        case costmap {
          container alto-costmap-params {
            description
              "(Filtered) Cost Map specific configuration";
            reference
              "Section 11.2.2 and Section 11.3.2 of RFC 7285.";
            leaf filtered {
              type boolean;
              description
                "Configure whether filtered cost map is supported.";
            }
            uses filt-costmap-cap;
            uses algorithm;
          }
        }
        case endpointcost {
          container alto-endpointcost-params {
            description
              "Endpoint Cost Service specific configuration";
            reference
              "Section 11.5 of RFC 7285";
            uses filt-costmap-cap;
            uses algorithm;
          }
        }
        case endpointprop {
          container alto-endpointprop-params {
            description
              "Endpoint Cost Service specific configuration";
            reference
              "Section 11.5 of RFC 7285";
            leaf-list prop-types {
              type string;
              min-elements 1;
              description
                "Supported endpoint properties.";
            }
            uses algorithm;
          }
        }
        case propmap {
          if-feature "propmap";
          container alto-propmap-params {
            uses algorithm;
            description
              "(Filtered) Entity Property Map specific
               configuration";
          }
        }
        case cdni {
          if-feature "cdni";
          container alto-cdni-params {
            uses algorithm;
            description
              "CDNi specific configuration";
          }
        }
        case update {
          if-feature "incr-update";
          container alto-update-params {
            uses algorithm;
            description
              "Incremental Updates specific configuration";
          }
        }
      }
      description
        "ALTO information resources to be defined";
    }
    list data-source {
      key "source-id";
      leaf source-id {
        type string;
        description
          "Data source id that can be referenced by information
           resource creation algorithms.";
      }
      leaf source-type {
        type identityref {
          base source-types;
        }
        mandatory true;
        description
          "Source-type to be defined";
      }
      choice update-policy {
        mandatory true;
        case reactive {
          leaf reactive {
            type boolean;
            mandatory true;
            description
              "Reactive mode";
          }
        }
        case proactive {
          leaf poll-interval {
            type uint32;
            mandatory true;
            description
              "Polling interval in seconds for proactive mode";
          }
        }
        description
          "Policy to get updates from data sources";
      }
      choice source-params {
        case yang-datastore {
          container yang-datastore-source-params {
            leaf source-path {
              type yang:xpath1.0;
              mandatory true;
              description
                "XPath to subscribed YANG datastore node";
            }
            description
              "YANG datastore specific configuration";
          }
        }
        case prometheus {
          container prometheus-source-params {
            leaf source-uri {
              type inet:uri;
              mandatory true;
              description
                "URI to prometheus agent";
            }
            leaf query-data {
              type string;
              description
                "Query expression";
            }
            description
              "Prometheus specific configuration";
          }
        }
        description
          "Data source specific configuration";
      }
      description
        "List of subscribed data sources.";
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="the-ietf-alto-stats-module" numbered="true" toc="default">
        <name>The ietf-alto-stats Module</name>
        <sourcecode type="yang" markers="true" name="ietf-alto-stats@2022-03-07.yang"><![CDATA[
module ietf-alto-stats {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-alto-stats";
  prefix "alto-stats";

  import ietf-yang-types {
    prefix "yang";
    reference
      "RFC 6991: Common YANG Data Types";
  }

  import ietf-alto {
    prefix alto;
    reference
      "RFC XXXX: A YANG Data Model for OAM and Management of ALTO
       Protocol.";
  }

  organization
    "IETF ALTO Working Group";

  contact
    "WG Web:   <https://datatracker.ietf.org/wg/alto/about/>
     WG List:  <alto@ietf.org>";

  description
    "This YANG module defines all the configured and operational
     parameters of the administrated ALTO server instance.

     Copyright (c) 2022 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision "2022-03-07" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

  augment "/alto:alto-server/alto:resource" {
    description
      "Common statistics for each information resource.";
    leaf num-res-upd {
      type yang:counter32;
      config false;
      description
        "The number of version updates since the information resource
         was created.";
    }
    leaf res-mem-size {
      type yang:counter32;
      config false;
      description
        "Memory size (Bytes) utilized by the information resource.";
    }
    leaf res-enc-size {
      type yang:counter32;
      config false;
      description
        "Size (Bytes) of JSON encoded data of the information
         resource.";
    }
  }

  augment "/alto:alto-server/alto:resource/alto:resource-params"
        + "/alto:networkmap/alto:alto-networkmap-params" {
    description
      "Augmented statistics for network maps only.";
    leaf num-map-pid {
      type yang:counter32;
      config false;
      description
        "Number of PIDs contained by the network map.";
    }
  }

  augment "/alto:alto-server/alto:resource/alto:resource-params"
        + "/alto:propmap/alto:alto-propmap-params" {
    description
      "Augmented statistics for property maps only.";
    leaf num-map-entry {
      type yang:counter32;
      config false;
      description
        "Number of ALTO entities contained by the property map.";
    }
  }

  augment "/alto:alto-server/alto:resource/alto:resource-params"
        + "/alto:cdni/alto:alto-cdni-params" {
    description
      "Augmented statistics for CDNi resources only.";
    leaf num-base-obj {
      type yang:counter32;
      config false;
      description
        "Number of base CDNi advertisement objects contained by the
         CDNi resource.";
    }
  }

  augment "/alto:alto-server/alto:resource/alto:resource-params"
        + "/alto:update/alto:alto-update-params" {
    description
      "Augmented statistics for incremental updates only.";
    leaf num-upd-sess {
      type yang:counter32;
      config false;
      description
        "Number of sessions connected to the incremental update
         service.";
    }
    leaf num-event-total {
      type yang:counter32;
      config false;
      description
        "Total number of update events sent to all the connected
         clients.";
    }
    leaf num-event-max {
      type yang:counter32;
      config false;
      description
        "The maximum number of update events sent to the connected
         clients.";
    }
    leaf num-event-min {
      type yang:counter32;
      config false;
      description
        "The minimum number of update events sent to the connected
         clients.";
    }
    leaf num-event-avg {
      type yang:counter32;
      config false;
      description
        "The average number of update events sent to the connected
         clients.";
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>TBD.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document registers two URIs in the "IETF XML Registry" <xref target="RFC3688" format="default"/>.
Following the format in RFC 3688, the following registrations are requested.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
  URI: urn:ietf:params:xml:ns:yang:ietf-alto
  Registrant Contact: The IESG.
  XML: N/A; the requested URI is an XML namespace.

  URI: urn:ietf:params:xml:ns:yang:ietf-alto-stats
  Registrant Contact: The IESG.
  XML: N/A; the requested URI is an XML namespace.
]]></artwork>
      <t>This document registers two YANG modules in the "YANG Module Names" registry
<xref target="RFC6020" format="default"/>.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
  Name: ietf-alto
  Namespace: urn:ietf:params:xml:ns:yang:ietf-alto
  Prefix: alto
  Reference: [RFCthis]

  Name: ietf-alto-stats
  Namespace: urn:ietf:params:xml:ns:yang:ietf-alto-stats
  Prefix: alto
  Reference: [RFCthis]
]]></artwork>
      <t>[RFC Editor: Please replace RFCthis with the published RFC number for this document.]</t>
      <!-- End of sections -->

</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="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling">
              <organization/>
            </author>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language.  This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </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="RFC7286">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Server Discovery</title>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <author fullname="N. Schwan" initials="N." surname="Schwan">
              <organization/>
            </author>
            <author fullname="M. Scharf" initials="M." surname="Scharf">
              <organization/>
            </author>
            <author fullname="H. Song" initials="H." surname="Song">
              <organization/>
            </author>
            <date month="November" year="2014"/>
            <abstract>
              <t>The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource.  ALTO is realized by a client-server protocol.  Before an ALTO client can ask for guidance, it needs to discover one or more ALTO servers.</t>
              <t>This document specifies a procedure for resource-consumer-initiated ALTO server discovery, which can be used if the ALTO client is embedded in the resource consumer.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7286"/>
          <seriesInfo name="DOI" value="10.17487/RFC7286"/>
        </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="RFC8177">
          <front>
            <title>YANG Data Model for Key Chains</title>
            <author fullname="A. Lindem" initials="A." role="editor" surname="Lindem">
              <organization/>
            </author>
            <author fullname="Y. Qu" initials="Y." surname="Qu">
              <organization/>
            </author>
            <author fullname="D. Yeung" initials="D." surname="Yeung">
              <organization/>
            </author>
            <author fullname="I. Chen" initials="I." surname="Chen">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>This document describes the key chain YANG data model.  Key chains are commonly used for routing protocol authentication and other applications requiring symmetric keys.  A key chain is a list containing one or more elements containing a Key ID, key string, send/accept lifetimes, and the associated authentication or encryption algorithm.  By properly overlapping the send and accept lifetimes of multiple key chain elements, key strings and algorithms may be gracefully updated.  By representing them in a YANG data model, key distribution can be automated.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8177"/>
          <seriesInfo name="DOI" value="10.17487/RFC8177"/>
        </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="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams.  The purpose of this document is to provide a single location for this definition.  This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC8686">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Cross-Domain Server Discovery</title>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <date month="February" year="2020"/>
            <abstract>
              <t>The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource.  ALTO is realized by a client-server protocol.  Before an ALTO client can ask for guidance, it needs to discover one or more ALTO servers that can provide suitable guidance.</t>
              <t>In some deployment scenarios, in particular if the information about the network topology is partitioned and distributed over several ALTO servers, it may be necessary to discover an ALTO server outside of the ALTO client's own network domain, in order to get appropriate guidance.  This document details applicable scenarios, itemizes requirements, and specifies a procedure for ALTO cross-domain server discovery.</t>
              <t>Technically, the procedure specified in this document takes one IP address or prefix and a U-NAPTR Service Parameter (typically, "ALTO:https") as parameters. It performs DNS lookups (for NAPTR resource records in the "in-addr.arpa." or "ip6.arpa." trees) and returns one or more URIs of information resources related to that IP address or prefix.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8686"/>
          <seriesInfo name="DOI" value="10.17487/RFC8686"/>
        </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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7921">
          <front>
            <title>An Architecture for the Interface to the Routing System</title>
            <author fullname="A. Atlas" initials="A." surname="Atlas">
              <organization/>
            </author>
            <author fullname="J. Halpern" initials="J." surname="Halpern">
              <organization/>
            </author>
            <author fullname="S. Hares" initials="S." surname="Hares">
              <organization/>
            </author>
            <author fullname="D. Ward" initials="D." surname="Ward">
              <organization/>
            </author>
            <author fullname="T. Nadeau" initials="T." surname="Nadeau">
              <organization/>
            </author>
            <date month="June" year="2016"/>
            <abstract>
              <t>This document describes the IETF architecture for a standard, programmatic interface for state transfer in and out of the Internet routing system.  It describes the high-level architecture, the building blocks of this high-level architecture, and their interfaces, with particular focus on those to be standardized as part of the Interface to the Routing System (I2RS).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7921"/>
          <seriesInfo name="DOI" value="10.17487/RFC7921"/>
        </reference>
        <reference anchor="RFC7971">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Deployment Considerations</title>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Scharf" initials="M." surname="Scharf">
              <organization/>
            </author>
            <author fullname="H. Seidel" initials="H." surname="Seidel">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." surname="Previdi">
              <organization/>
            </author>
            <date month="October" year="2016"/>
            <abstract>
              <t>Many Internet applications are used to access resources such as pieces of information or server processes that are available in several equivalent replicas on different hosts.  This includes, but is not limited to, peer-to-peer file sharing applications.  The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource. This memo discusses deployment-related issues of ALTO.  It addresses different use cases of ALTO such as peer-to-peer file sharing and Content Delivery Networks (CDNs) and presents corresponding examples. The document also includes recommendations for network administrators and application designers planning to deploy ALTO, such as recommendations on how to generate ALTO map information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7971"/>
          <seriesInfo name="DOI" value="10.17487/RFC7971"/>
        </reference>
        <reference anchor="RFC8346">
          <front>
            <title>A YANG Data Model for Layer 3 Topologies</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm">
              <organization/>
            </author>
            <author fullname="J. Medved" initials="J." surname="Medved">
              <organization/>
            </author>
            <author fullname="R. Varga" initials="R." surname="Varga">
              <organization/>
            </author>
            <author fullname="X. Liu" initials="X." surname="Liu">
              <organization/>
            </author>
            <author fullname="H. Ananthakrishnan" initials="H." surname="Ananthakrishnan">
              <organization/>
            </author>
            <author fullname="N. Bahadur" initials="N." surname="Bahadur">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for Layer 3 network topologies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8346"/>
          <seriesInfo name="DOI" value="10.17487/RFC8346"/>
        </reference>
        <reference anchor="I-D.ietf-alto-path-vector">
          <front>
            <title>An ALTO Extension: Path Vector</title>
            <author fullname="Kai Gao">
              <organization>Sichuan University</organization>
            </author>
            <author fullname="Young Lee">
              <organization>Samsung</organization>
            </author>
            <author fullname="Sabine Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Yang Richard Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Jingxuan Jensen Zhang">
              <organization>Tongji University</organization>
            </author>
            <date day="20" month="March" year="2022"/>
            <abstract>
              <t>   This document is an extension to the base Application-Layer Traffic
   Optimization (ALTO) protocol.  It extends the ALTO Cost Map and ALTO
   Property Map services so that an application can decide which
   endpoint(s) to connect based on not only numerical/ordinal cost
   values but also fine-grained abstract information 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>
          <seriesInfo name="Internet-Draft" value="draft-ietf-alto-path-vector-25"/>
        </reference>
        <reference anchor="I-D.ietf-alto-unified-props-new">
          <front>
            <title>An 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="28" month="February" year="2022"/>
            <abstract>
              <t>   This document specifies an extension to the base Application-Layer
   Traffic Optimization (ALTO) protocol that generalizes the concept of
   "endpoint properties", which were so far tied to IP addresses, to
   entities defined by a wide set of objects.  Further, these properties
   are presented as maps, similar to the network and cost maps in the
   base ALTO protocol.  While supporting the endpoints and related
   endpoint property service defined in RFC7285, the ALTO 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-24"/>
        </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="21" month="March" year="2022"/>
            <abstract>
              <t>   The cost metric is a basic concept in Application-Layer Traffic
   Optimization (ALTO), and different applications may use different
   types of cost metrics.  Since the ALTO base protocol (RFC 7285)
   defines only a single cost metric (namely, the generic "routingcost"
   metric), if an application wants to issue a cost map or an endpoint
   cost request in order to identify a resource provider that offers
   better performance metrics (e.g., lower delay or loss rate), the base
   protocol does not define the cost metric to be used.

   This document addresses this issue by extending the specification to
   provide a variety of network performance metrics, including network
   delay, delay variation (a.k.a, 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-28"/>
        </reference>
        <reference anchor="I-D.ietf-alto-cdni-request-routing-alto">
          <front>
            <title>Content Delivery Network Interconnection (CDNI) Request Routing: CDNI Footprint and Capabilities Advertisement using ALTO</title>
            <author fullname="Jan Seedorf">
              <organization>HFT Stuttgart - Univ. of Applied Sciences</organization>
            </author>
            <author fullname="Y. Richard Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Kevin J. Ma">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Jon Peterson">
              <organization>NeuStar</organization>
            </author>
            <author fullname="Jingxuan Jensen Zhang">
              <organization>Tongji University</organization>
            </author>
            <date day="16" month="February" year="2022"/>
            <abstract>
              <t>   The Content Delivery Networks Interconnection (CDNI) framework in RFC
   6707 defines a set of protocols to interconnect CDNs to achieve
   multiple goals, including extending the reach of a given CDN.  A CDNI
   Request Routing Footprint &amp; Capabilities Advertisement interface
   (FCI) is needed to achieve the goals of a CDNI.  RFC 8008 defines the
   FCI semantics and provides guidelines on the FCI protocol, but the
   exact protocol is not specified.  This document defines a new
   Application-Layer Traffic Optimization (ALTO) service, called "CDNI
   Advertisement Service", that provides an implementation of the FCI,
   following the guidelines defined in RFC 8008.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-alto-cdni-request-routing-alto-22"/>
        </reference>
      </references>
    </references>
    <section anchor="example-module-for-information-resource-creation-algorithm" numbered="true" toc="default">
      <name>Example Module for Information Resource Creation Algorithm</name>
      <t>The base data model defined by ietf-alto.yang does not include any choice cases
for information resource creation algorithms. But developers may augment the
ietf-alto.yang data model with definitions for any custom creation algorithms
for different information resources. The following example module demonstrates
the parameters of a network map creation algorithm that translates an IETF
layer 3 unicast topology into a network map.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
module example-ietf-alto-alg {

  namespace "urn:example:ietf-alto-alg";
  prefix "alto-alg";

  import ietf-alto {
    prefix "alto";
  }

  augment "/alto:alto-server/alto:resource/alto:resource-params"
        + "/alto:networkmap/alto:alto-networkmap-params"
        + "/alto:algorithm" {
    case l3-unicast-cluster {
      container l3-unicast-cluster-algorithm {
        leaf l3-unicast-topo {
          type leafref {
            path "/alto:alto-server/data-source/source-id";
          }
          mandatory true;
          description
            "The data source to an IETF layer 3 unicast topology.";
        }
        leaf depth {
          type uint32;
          description
            "The depth of the clustering.";
        }
      }
    }
  }
}
]]></artwork>
      <!-- End of sections -->

</section>
    <section anchor="ack" numbered="false" toc="default">
      <name>Acknowledgements</name>
      <t>The authors thank Qiufang Ma and Qin Wu for their help with drafting the
initial version of the YANG modules. Thanks also to Adrian Farrel, Qiao Xiang,
Qin Wu, and Qiufang Ma for their reviews and valuable feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
lmB5yUn5McgLMwOIkZRDXCtAdvxvb93w8DnNAAA=

-->

</rfc>
