<?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-01" 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-01"/>
    <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="July" 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/ietf-wg-alto/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 listen
     |  +---u alto-server-listen-stack-grouping
     +--rw cost-type* [cost-type-name]
     |  +--rw cost-type-name    string
     |  +--rw cost-mode         identityref
     |  +--rw cost-metric       identityref
     +--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
     |     |     +---u algorithm
     |     +--:(costmap)
     |     |  +--rw alto-costmap-params
     |     |     +--rw filtered?           boolean
     |     |     +---u filt-costmap-cap
     |     |     +---u algorithm
     |     +--:(endpointcost)
     |     |  +--rw alto-endpointcost-params
     |     |     +---u filt-costmap-cap
     |     |     +---u algorithm
     |     +--:(endpointprop)
     |     |  +--rw alto-endpointprop-params
     |     |     +--rw prop-types*   string
     |     |     +---u algorithm
     |     +--:(propmap) {propmap}?
     |     |  +--rw alto-propmap-params
     |     |     +---u algorithm
     |     +--:(cdni) {cdni}?
     |     |  +--rw alto-cdni-params
     |     |     +---u algorithm
     |     +--:(update) {incr-update}?
     |        +--rw alto-update-params
     |           +---u 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
           |     +--rw (restconf-endpoint)?
           |        +--:(local)
           |        +--:(remote)
           |           +--rw restconf-endpoint-params
           |              +---u rcc:restconf-client-listen-stack-grouping
           +--:(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 "listen" contains all the configurations for the whole server listen stack
across HTTP layer, TLS layer and TCP layer.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
  grouping alto-server-listen-stack-grouping
    +-- (transport)
       +--:(http) {http-listen}?
       |  +-- http
       |     +-- tcp-server-parameters
       |     |  +---u tcp:tcp-server-grouping
       |     +-- http-server-parameters
       |     |  +---u http:http-server-grouping
       |     +-- alto-server-parameters
       +--:(https)
          +-- https
             +-- tcp-server-parameters
                +---u tcp:tcp-server-grouping
                +-- tls-server-parameters
                |  +---u tls:tls-server-grouping
                +-- http-server-parameters
                |  +---u http:http-server-grouping
                +-- alto-server-parameters
]]></artwork>
        <t>TODO: A "base-uri" for ALTO clients to access may still be needed.</t>
        <t>The "cost-type" list is the registry for the cost types that can be used in the
ALTO server.</t>
        <t>The "meta" 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 listen
     |  +---u alto-server-listen-stack-grouping
     +--rw cost-type* [cost-type-name]
     |  +--rw cost-type-name    string
     |  +--rw cost-mode         identityref
     |  +--rw cost-metric       identityref
     +--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
     |     |     +---u algorithm
     |     +--:(costmap)
     |     |  +--rw alto-costmap-params
     |     |     +--rw filtered?           boolean
     |     |     +---u filt-costmap-cap
     |     |     +---u algorithm
     |     +--:(endpointcost)
     |     |  +--rw alto-endpointcost-params
     |     |     +---u filt-costmap-cap
     |     |     +---u algorithm
     |     +--:(endpointprop)
     |     |  +--rw alto-endpointprop-params
     |     |     +--rw prop-types*   string
     |     |     +---u algorithm
     |     +--:(propmap) {propmap}?
     |     |  +--rw alto-propmap-params
     |     |     +---u algorithm
     |     +--:(cdni) {cdni}?
     |     |  +--rw alto-cdni-params
     |     |     +---u algorithm
     |     +--:(update) {incr-update}?
     |        +--rw alto-update-params
     |           +---u algorithm
     ...

  grouping filt-costmap-cap
    +-- cost-type-names*            string
    +-- cost-constraints?           boolean
    +-- max-cost-types?             uint32 {multi-cost}?
    +-- testable-cost-type-names*   string {multi-cost}?
    +-- calendar-attributes {cost-calendar}?
       +-- cost-type-names*       string
       +-- time-interval-size     decimal64
       +-- number-of-intervals    uint32
]]></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
           |     +--rw (restconf-endpoint)?
           |        +--:(local)
           |        +--:(remote)
           |           +--rw restconf-endpoint-params
           |              +---u rcc:restconf-client-listen-stack-grouping
           +--:(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 from a YANG model-driven data store.</t>
          <t>It supports two types of endpoints: local and remote.</t>
          <ul spacing="normal">
            <li>For a local endpoint, the YANG data is located the data from the same
YANG model-driven data store supplying the current ALTO O&amp;M data model.
Therefore, the ALTO data source listener retrieves the data using the
internal API provided by the data store.</li>
            <li>For a remote endpoint, the ALTO data source listener establishes an HTTP
connection to the remote RESTCONF server, and retrieve the data using the
RESTCONF API.</li>
          </ul>
          <t>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>In practice, multiple ALTO servers can be deployed for scalability. That may
require communication among different ALTO servers.</t>
        <t>The YANG module defined in this document contains the configuration for
the communication between two ALTO servers.</t>
        <t>TODO: this is still under the open discussion status.</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:
    +--ro num-total-req?         yang:counter32
    +--ro num-total-succ?        yang:counter32
    +--ro num-total-fail?        yang:counter32
    +--ro num-total-last-req?    yang:counter32
    +--ro num-total-last-succ?   yang:counter32
    +--ro num-total-last-fail?   yang:counter32
  augment /alto:alto-server/alto:resource:
    +--ro num-res-upd?    yang:counter32
    +--ro res-mem-size?   yang:counter32
    +--ro res-enc-size?   yang:counter32
    +--ro num-res-req?    yang:counter32
    +--ro num-res-succ?   yang:counter32
    +--ro num-res-fail?   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-07-11.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";
  }

  import ietf-tcp-server {
    prefix tcp;
    reference
      "RFC DDDD: YANG Groupings for TCP Clients and TCP Servers";
  }

  import ietf-tls-server {
    prefix tls;
    reference
      "RFC FFFF: YANG Groupings for TLS Clients and TLS Servers";
  }

  import ietf-http-server {
    prefix http;
    reference
      "RFC GGGG: YANG Groupings for HTTP Clients and HTTP Servers";
  }

  import ietf-restconf-client {
    prefix rcc;
    reference
      "RFC IIII: YANG Groupings for RESTCONF Clients and RESTCONF
       Servers";
  }

  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-07-11" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for OAM and Management of ALTO
       Protocol.";
  }

  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.";
  }

  // Base identities

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

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

  identity cost-mode {
    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.";
  }

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

  // Identities for ALTO information resources

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

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

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

  // Identities for predefined data sources

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

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

  // Identities for cost mode

  identity numerical {
    base cost-mode;
    description
      "This mode indicates that it is safe to perform numerical
       operations";
  }

  identity ordinal {
    base cost-mode;
    description
      "This mode indicates that the cost values in a cost map
       represent ranking";
  }

  identity array {
    if-feature "path-vector";
    base cost-mode;
    description
      "This mode indicates that every cost value in the response body
       of a (Filtered) Cost Map or an Endpoint Cost Service MUST be
       interpreted as a JSON array.";
  }

  // Identities for cost metrics

  identity routingcost {
    base cost-metric;
    description
      "This metric conveys a generic measure for the cost of routing
       traffic from a source to a destination.";
  }

  identity ane-path {
    if-feature "path-vector";
    base cost-metric;
    description
      "This metric indicates that the value of such a cost type
       conveys an array of Abstract Network Element (ANE) names,
       where each ANE name uniquely represents an ANE traversed by
       traffic from a source to a destination.";
  }

  identity delay-ow {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "Section 4.1 of RFC XXXX";
  }

  identity delay-rt {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "Section 4.2 of RFC XXXX";
  }

  identity delay-variation {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "Section 4.3 of RFC XXXX";
  }

  identity lossrate {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "Section 4.4 of RFC XXXX";
  }

  identity hopcount {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "Section 4.5 of RFC XXXX";
  }

  identity tput {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "Section 5.1 of RFC XXXX";
  }

  identity bw-residual {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "Section 5.2 of RFC XXXX";
  }

  identity bw-available {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "Section 5.3 of RFC XXXX";
  }

  // Features

  feature http-listen {
    description
      "The 'http-listen' feature is only used for test depolyment.
       According to Sec 8.3.5 of RFC 7285, it shouldn't be used in
       the production depolyment.";
  }

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

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

  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 9240: An ALTO Extension: Entity Property Maps";
  }

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

  feature path-vector {
    description
      "Support path vector extension.";
    reference
      "RFC XXXX: An ALTO Extension: Path Vector";
  }

  feature performance-metrics {
    description
      "Support performance metrics extension.";
    reference
      "RFC XXXX: ALTO Performance Cost Metrics";
  }

  // Groupings

  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.";
  }

  grouping alto-server-grouping {
    description
      "A reuseable grouping for configuring an ALTO server without
       any consideration for how underlying transport sessions are
       established.";
    // TODO: ALTO specific server-level configuration
  }

  grouping alto-server-listen-stack-grouping {
    description
      "A reuseable grouping for configuring an ALTO server
       'listen' protocol stack for a single connection.";
    choice transport {
      mandatory true;
      description
        "Selects between available transports.";
      case http {
        if-feature "http-listen";
        container http {
          description
            "Configures ALTO server stack assuming that
             TLS-termination is handled externally.";
          container tcp-server-parameters {
            description
              "A wrapper around the TCP server parameters
               to avoid name collisions.";
            uses tcp:tcp-server-grouping {
              refine "local-port" {
                default "80";
                description
                  "The RESTCONF server will listen on the IANA-
                   assigned well-known port value for 'http'
                   (80) if no value is specified.";
              }
            }
          }
          container http-server-parameters {
            description
              "A wrapper around the HTTP server parameters
               to avoid name collisions.";
            uses http:http-server-grouping;
          }
          container alto-server-parameters {
            description
              "A wrapper around the ALTO server parameters
               to avoid name collisiions.";
            uses alto-server-grouping;
          }
        }
      }
      case https {
        container https {
          description
            "Configures ALTO server stack assuming that
             TLS-termination is handled internally.";
          container tcp-server-parameters {
            description
              "A wrapper around the TCP server parameters
               to avoid name collisions.";
            uses tcp:tcp-server-grouping {
              refine "local-port" {
                default "443";
                description
                  "The ALTO server will listen on the IANA-
                   assigned well-known port value for 'https'
                   (443) if no value is specified.";
              }
            }
            container tls-server-parameters {
              description
                "A wrapper around the TLS server parameters
                 to avoid name collisions.";
              uses tls:tls-server-grouping;
            }
            container http-server-parameters {
              description
                "A wrapper around the HTTP server parameters
                 to avoid name collisions.";
              uses http:http-server-grouping;
            }
            container alto-server-parameters {
              description
                "A wrapper around the ALTO server parameters
                 to avoid name collisions.";
              uses alto-server-grouping;
            }
          }
        }
      }
    }
  }

  // Top-level container

  container alto-server {
    description
      "The ALTO server instance.";
    container listen {
      description
        "Configure the ALTO server to listen for ALTO clients.";
      uses alto-server-listen-stack-grouping;
    }
    list cost-type {
      key "cost-type-name";
      leaf cost-type-name {
        type string;
        description
          "The name to reference cost type";
      }
      leaf cost-mode {
        type identityref {
          base cost-mode;
        }
        mandatory true;
        description
          "The referenced cost mode";
      }
      leaf cost-metric {
        type identityref {
          base 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-type;
        }
        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-type;
        }
        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";
            choice restconf-endpoint {
              case local {
                // Use local API to access YANG datastore
              }
              case remote {
                container restconf-endpoint-params {
                  uses rcc:restconf-client-listen-stack-grouping;
                }
              }
            }
          }
        }
        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-07-11.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-07-11" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

  augment "/alto:alto-server" {
    description
      "Top-level statistics for the whole ALTO server.";
    leaf num-total-req {
      type yang:counter32;
      config false;
      description
        "The total number of ALTO requests received by this ALTO
         server.";
    }
    leaf num-total-succ {
      type yang:counter32;
      config false;
      description
        "The total number of successful responses sent by this ALTO
         server.";
    }
    leaf num-total-fail {
      type yang:counter32;
      config false;
      description
        "The total number of failed responses sent by this ALTO
         server.";
    }
    leaf num-total-last-req {
      type yang:counter32;
      config false;
      description
        "The total number of ALTO requests received within the last
         5 minutes.";
    }
    leaf num-total-last-succ {
      type yang:counter32;
      config false;
      description
        "The total number of successful responses sent by this ALTO
         server within the last 5 minutes.";
    }
    leaf num-total-last-fail {
      type yang:counter32;
      config false;
      description
        "The total number of failed responses sent by this ALTO
         server within the last 5 minutes.";
    }
  }

  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.";
    }
    leaf num-res-req {
      type yang:counter32;
      config false;
      description
        "The number of ALTO requests to this information resource.";
    }
    leaf num-res-succ {
      type yang:counter32;
      config false;
      description
        "The number of successful responses for requests to this
         information resource.";
    }
    leaf num-res-fail {
      type yang:counter32;
      config false;
      description
        "The total number of failed responses for requests to this
         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:
H4sIACm5zGIAA+19+3vbyK3o7/wr5qrf19hdS7GdxJton1472XUbJ6ntnO2e
tueElkYyG4pUSSqONnH/9ovHPMkhJTt2t/d+0XmsQw5nMAAGwGAwQL/fj8b5
KItncijGRTyp+omsJv04rfJ+Hs/6yzib9rd3oiqpUmiyL36BB+IwrmJxnI9l
KiZ5IV7uH4s4G4vjOIunciazSuQTsf/87KV4VeRVPsrTKD4/L+S7IT99+ftj
8cv+ix+jUVzJaV4sh6KsxlGUzIuhqIpFWe1ubz/Z3o3iQsZD8UJWl3nxtozw
/0+LfDFX/fz8Y/RWLuHpmB9siaOskkUmq/4hTiaKygoA+984zTOAfinLaJ4M
IwGjFcmo4idCjPIZAl3qfydZmuj2QshxUiXZdCiyHP4Fs9EvcGKzeWz7gQdj
Oa8uhuIB9jIvsrxKJokcq2/LvKgKOTHjlMuZ+89ab+Xi3DyBz6N4UV3kBUDf
h5cIJHz4x4H47wugCD1hKv4RYH2/iDPxR5mVMnPe58U0zpJf4yrJs6E4y7Pp
PxLxOkveyaJMqiW1kbM4SYfiH6qTQTb4Fb//forPBwAPtQL0SQlgPXy8vS0O
4vzefiZ+uuQeRtDVUJziVxdxwo+AU4Zid3vn8fZD9WCRVUj1g4ski70ZHQ7E
4UU+XjozOrwoFu+cp/48flrElzIRZ3J0keVpPk0IeWYmY/x4gEzdMofD5N0y
Li/gH6oP8Sou3m6Jny+SSgLx0rEzrR9gVsBMhaRnhZwSCH+KiwxWxNvYme2j
ve3tvT1/tkfZOPFn+6eB+DHOnbn+KU7MEw1h70U+2H0oTnNgAHEqRzhvsbMl
fkkukM4neTzuOTAeXMhsOl44sOztbMMviHlGJ9ArGVFnYXZ4GyfTOP++HC0G
crwYjDJvEicDcTq6yKvKmcdJnqJEcJ77VDuUi6ocXSDOU/lWkUSNxt8O+Nvv
K24wGEsPKT/JJIM1fNH/SRbVr/3TqojLUooH/S8dVBzGxQwkwLhykfFw98kj
Hxc/ymIWZ8soynL4owIMoIw4eXawu7PzRP35YO/xY/Xn3vbutv7zyZMd9eeX
u48f2T/31J+Pd758aP/80vz5WPf7+MFD3dnjPfvZ4yeP7J/wNMkmNdi+fLJr
hn7y5Y7tjvo46h8OrCSfx9VF/x1wDsmP2stFRjKqPy/yednP5GXge1nQ8NlI
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
8X8Bz1OCM5zwAAA=

-->

</rfc>
