<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 3.1.2) -->
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc editing="no"?>
<?rfc tocompact="yes"?>
<?rfc iprnotified="no"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-alto-oam-yang-02" category="std" consensus="true" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.1 -->
  <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-02"/>
    <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="October" day="24"/>
    <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">
      <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"/>. 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"/> and <xref target="RFC7971"/>. Although the scope of the YANG data model in this
document mainly focuses on the support of the base ALTO protocol <xref target="RFC7285"/> and
the existing ALTO standard extensions (including <xref target="RFC8189"/>, <xref target="RFC8895"/>,
<xref target="RFC8896"/>, <xref target="RFC9240"/>, <xref target="RFC9241"/>, and {RFC9275}), the design will also be
extensible for future standard extensions (e.g.,
<xref target="I-D.ietf-alto-performance-metrics"/>).</t>
    </section>
    <section anchor="requirements-language">
      <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"/> <xref target="RFC8174"/>
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">
      <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">
        <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"/>.</t>
      </section>
      <section anchor="prefixes-in-data-node-names">
        <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"/>.</t>
        <table anchor="tbl-yang-prefixes">
          <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"/></td>
            </tr>
            <tr>
              <td align="left">inet</td>
              <td align="left">ietf-inet-types</td>
              <td align="left">
                <xref target="RFC6991"/></td>
            </tr>
            <tr>
              <td align="left">key-chain</td>
              <td align="left">ietf-key-chain</td>
              <td align="left">
                <xref target="RFC8177"/></td>
            </tr>
            <tr>
              <td align="left">tcp</td>
              <td align="left">ietf-tcp-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-tcp-client-server"/></td>
            </tr>
            <tr>
              <td align="left">tls</td>
              <td align="left">ietf-tls-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-tls-client-server"/></td>
            </tr>
            <tr>
              <td align="left">http</td>
              <td align="left">ietf-http-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-http-client-server"/></td>
            </tr>
          </tbody>
        </table>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="sec-req">
      <name>Design Scope and Requirements</name>
      <section anchor="scope-of-data-model-for-alto-om">
        <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"/>)</li>
        </ul>
      </section>
      <section anchor="requirements">
        <name>Basic Requirements</name>
        <t>Based on discussions and recommendations in <xref target="RFC7285"/> and <xref target="RFC7971"/>, the
data model provided by this document satisfies basic requirements listed in
<xref target="TableReq"/>.</t>
        <table anchor="TableReq">
          <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"/></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"/></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"/></td>
            </tr>
            <tr>
              <td align="left">R4: The data model should support configuration for security policy management.</td>
              <td align="left">Section 16.2.6 of <xref target="RFC7285"/></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"/>, Section 3.2 of <xref target="RFC7971"/></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"/></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"/></td>
            </tr>
            <tr>
              <td align="left">R6: The data model should provide metrics for server failures.</td>
              <td align="left">Section 16.2.3 of <xref target="RFC7285"/>, Section 3.3 of <xref target="RFC7971"/></td>
            </tr>
            <tr>
              <td align="left">R7: The data model should provide performance monitoring for ALTO-specific metrics.</td>
              <td align="left">Section 16.2.5 of <xref target="RFC7285"/>, Section 3.4 of <xref target="RFC7971"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="additional-requirements-for-extensibility">
        <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">
        <name>Overview of ALTO O&amp;M Data Model for Reference ALTO Architecture</name>
        <t><xref target="alto-ref-arch"/> 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"/>). The performance monitor and
logging and fault manager need to implement <tt>ietf-alto-stats.yang</tt> (see
<xref target="alto-stats-model"/>).</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"/>).</t>
        <figure anchor="alto-ref-arch">
          <name>A Reference ALTO Server Architecture and YANG Modules</name>
          <artwork><![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">
      <name>Design of ALTO O&amp;M Data Model</name>
      <section anchor="overview-of-alto-om-data-model">
        <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"/>.</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>
        <!--
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.
-->

<artwork><![CDATA[
module: ietf-alto
  +--rw alto-server
     +--rw listen
     |  +---u alto-server-listen-stack-grouping
     +--rw server-discovery
     |  +---u alto-server-discovery-grouping
     +--rw logging-system
     |  +---u alto-logging-system-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 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)?
     +--rw resource* [resource-id]
        +--rw resource-id                       resource-id
        +--rw resource-type                     identityref
        +--rw description?                      string
        +--rw accepted-group*                   string
        +--rw dependency*
        |       -> /alto-server/resource/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 filter-costmap-cap
           |     +---u algorithm
           +--:(endpointcost)
           |  +--rw alto-endpointcost-params
           |     +---u endpoint-cost-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
]]></artwork>
      </section>
      <section anchor="data-model-for-server-level-operation-and-management">
        <name>Data Model for Server-level Operation and Management</name>
        <t>The ALTO server instance contains the following configuration parameters for
server-level operation and management for ALTO, which satisfies R1 - R4 in
<xref target="requirements"/>.</t>
        <artwork><![CDATA[
module: ietf-alto
  +--rw alto-server
     +--rw listen
     |  +---u alto-server-listen-stack-grouping
     +--rw server-discovery
     |  +---u alto-server-discovery-grouping
     +--rw logging-system
     |  +---u alto-logging-system-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 anchor="data-model-for-alto-server-setup">
          <name>Data Model for ALTO Server Setup</name>
          <t>To satisfy R1 in <xref target="requirements"/>, the ALTO server instance contains the
following basic configurations for the server setup.</t>
          <section anchor="alto-server-listen-stack">
            <name>ALTO Server Listen Stack</name>
            <t>The "listen" contains all the configurations for the whole server listen stack
across HTTP layer, TLS layer and TCP layer.</t>
            <artwork><![CDATA[
  grouping alto-server-grouping:
    +-- base-uri?   inet:uri
  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>
          </section>
          <section anchor="alto-server-discovery-setup">
            <name>ALTO Server Discovery Setup</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 does not contain any configuration for
the communication between two ALTO servers. Instead, it provides the
configuration for how an ALTO server can be discovered by another ALTO server on
demand.</t>
            <artwork><![CDATA[
  grouping alto-server-discovery-grouping:
    +-- (server-discovery-manner)?
       +--:(reverse-dns)
       |  +-- rdns-naptr-records
       |     +-- static-prefix*           inet:ip-prefix
       |     +-- dynamic-prefix-source*
       |             -> /alto-server/data-source/source-id
       +--:(internet-routing-registry)
       |  +-- irr-params
       |     +-- aut-num?   inet:as-number
       +--:(peeringdb)
          +-- peeringdb-params
             +-- org-id?   uint32
]]></artwork>
            <t>The <tt>server-discovery</tt> node provides configuration for ALTO server
discovery using different mechanisms.</t>
            <ul spacing="normal">
              <li>The <tt>reverse-dns</tt> case is used to configure DNS NAPTR records for ALTO server
discovery, which is suugested by <xref target="RFC7286"/> and <xref target="RFC8686"/>. It configures a
set of endpoints in the scope of the network domain serving this ALTO server.
The node contains two leaf lists. The <tt>static</tt> list contains a list of manual
configured endpoints. The <tt>dynamic</tt> list points to a list of data sources to
retrieve the endpoints dynamically. As suggested by <xref target="RFC7286"/> and
<xref target="RFC8686"/>, the IP prefixes in the scope will be translated into DNS NAPTR
resource records for server discovery.</li>
              <li>The <tt>internet-routing-registry</tt> case is used to configure objects in an
Internet Routing Registry (IRR) database. Other ALTO servers/clients can query
an IRR database using the Routing Policy Specification Language (RPSL)
<xref target="RFC2622"/> to get the corresponding ALTO server to a given Autonomous System
(AS).</li>
              <li>The <tt>peeringdb</tt> case is used to configure organization records in PeeringDB.
Other ALTO servers/clients can directly query the PeeringDB to get the
corresponding ALTO server to a given network.</li>
            </ul>
          </section>
        </section>
        <section anchor="data-model-for-logging-management">
          <name>Data Model for Logging Management</name>
          <t>To satisfy R2 in <xref target="requirements"/>, the ALTO server instance contains the following
configuration parameters for the logging management.</t>
          <t>The <tt>logging-system</tt> node provides configuration to select a logging system to
capture log messages generated by the ALTO server.</t>
          <t>By default, <tt>syslog</tt> is the only supported logging system. When selecting
<tt>syslog</tt>, the related configuration is delegated to the configuration file of
the syslog server.</t>
          <artwork><![CDATA[
  grouping alto-logging-system-grouping:
    +-- (logging-system)?
       +--:(syslog)
          +-- syslog-params
             +-- config-file?   inet:uri
]]></artwork>
          <t>A specific server implementation can extend the <tt>logging-system</tt> node to add
other logging systems.</t>
        </section>
        <section anchor="data-model-for-alto-related-management">
          <name>Data Model for ALTO-related Management</name>
          <t>To satisfy R3 in <xref target="requirements"/>, the data model contains the following
ALTO-related management information.</t>
          <ul spacing="normal">
            <li>The "cost-type" list is the registry for the cost types that can be used in the
ALTO server.</li>
            <li>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).</li>
          </ul>
        </section>
        <section anchor="data-model-for-security-management">
          <name>Data Model for Security Management</name>
          <t>To satisfy R4 in <xref target="requirements"/>, the data model leverages HTTP and TLS to
provide basic security management for an ALTO server. All the related
configurations are covered by the server listen stack.</t>
        </section>
      </section>
      <section anchor="data-model-for-alto-server-configuration-management">
        <name>Data Model for ALTO Server Configuration Management</name>
        <section anchor="data-source">
          <name>Data Source Configuration Management</name>
          <t>To satisfy R5-1 in <xref target="requirements"/>, 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"/>).</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.</t>
          <artwork><![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)?
     ...
]]></artwork>
          <t>This data model only includes common configuration parameters for an ALTO server
to correctly interact with a data source. The implementation-specific parameters
of any certain data source can be augmented in another module. An example is
included in <xref target="example-data-source"/>.</t>
        </section>
        <section anchor="alto-information-resources-configuration-management">
          <name>ALTO Information Resources Configuration Management</name>
          <t>To satisfy R5-2 and R-3, 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"/>). 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 provides configurations defining how to create or update
an ALTO information resource. Adding a new <tt>resource</tt> entry notifies the ALTO
server to create a new ALTO information resource. Updating an existing
<tt>resource</tt> entry notifies the ALTO server to update the generation parameters
(e.g., capabilities and the creation algorithm) of an existing ALTO information
resource. Removing an existing <tt>resource</tt> entry will remove the corresponding
ALTO information resource.</t>
          <t>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.  As section 15.5.2 of
<xref target="RFC7285"/> 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 <tt>resource</tt> entry 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"/>).</t>
          <t>For each type of ALTO information resource, the <tt>resource</tt> entry 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"/>).</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"/>). An
example of extending <tt>algorithm</tt> node for a specific type of <tt>resource</tt> is
included in <xref target="example-alg"/>.</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"/>).</t>
          <artwork><![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*
        |       -> /alto-server/resource/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 filter-costmap-cap
           |     +---u algorithm
           +--:(endpointcost)
           |  +--rw alto-endpointcost-params
           |     +---u endpoint-cost-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 filter-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
  grouping endpoint-cost-cap:
    +---u filter-costmap-cap
  grouping algorithm:
    +-- (algorithm)
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="alto-stats-model">
      <name>Design of ALTO O&amp;M Statistics Data Model</name>
      <t>The module, "ietf-alto-stats", augments the ietf-alto module to include
statistics at the ALTO server and information resource level.</t>
      <artwork><![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>
      <t>## Model for ALTO Server Failure Monitoring</t>
      <t>To satisfy R6 in <xref target="requirements"/>, the YANG data module defined in this
document contains statistics that indicates server failures.</t>
      <t>More specifically, <tt>num-total-*</tt> and <tt>num-total-last-*</tt> provides server-level
failure counters; <tt>num-res-*</tt> provides information resource-level failure
counters.</t>
      <section anchor="model-for-alto-specific-performance-monitoring">
        <name>Model for ALTO-specific Performance Monitoring</name>
        <t>To satisfy R7 in <xref target="requirements"/>, 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"/>:</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"/>, this data model
also contains useful measurement information for other ALTO extensions:</t>
        <ul spacing="normal">
          <li>
            <tt>num-map-entry</tt> and <tt>num-base-obj</tt> provides measurement for number of generic
ALTO entities (for <xref target="RFC9240"/> and <xref target="RFC9241"/>)</li>
          <li>
            <tt>num-upd-sess</tt> and <tt>num-event-*</tt> provides statistics for update sessions and
events (for <xref target="RFC8189"/>)</li>
        </ul>
        <!-- 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>
    <section anchor="alto-oam-yang-module">
      <name>ALTO OAM YANG Module</name>
      <section anchor="the-ietf-alto-module">
        <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-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";
  }

  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-10-24" {
    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 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 filter-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 endpoint-cost-cap {
    uses filter-costmap-cap;
    description
      "This grouping defines EndpointCostCapabilities as the same as
       FilteredCostMapCapabilities defined by the grouping
       filter-costmap-cap.";
    reference
      "Section 11.5.1.4 of RFC 7285";
  }

  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.";
    leaf base-uri {
      type inet:uri;
      description
        "The base URI for the ALTO server.";
    }
  }

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

  grouping alto-server-discovery-grouping {
    description
      "Configure how to set up server discovery for clients or other
       ALTO servers to discovery the URI of this ALTO server.";
    choice server-discovery-manner {
      description
        "Selects among available server discovery manners";
      case reverse-dns {
        description
          "Configure DNS NAPTR records for cross-domain ALTO server
           discovery using reverse DNS lookup.";
        container rdns-naptr-records {
          description
            "Configuration parameters for DNS NAPTR records.";
          leaf-list static-prefix {
            type inet:ip-prefix;
            description
              "Static IP prefixes in the scope.";
          }
          leaf-list dynamic-prefix-source {
            type leafref {
              path "/alto:alto-server/alto:data-source/alto:source-id";
            }
            description
              "Dynamic IP prefixes collected from data sources.";
          }
        }
        reference
          "RFC 8686: Application-Layer Traffic Optimization (ALTO)
           Cross-Domain Server Discovery.";
      }
      case internet-routing-registry {
        description
          "Update descr attributes of a aut-num class in a Internet
           Routing Registry (IRR) database for ALTO server discovery
           using RPSL.";
        reference
          "RFC 2622: Routing Policy Specification Language (RPSL).";
        container irr-params {
          description
            "Configuration parameters for IRR database.";
          leaf aut-num {
            type inet:as-number;
            description
              "The autonomous system (AS) to be updated.";
          }
        }
      }
      case peeringdb {
        description
          "Update metadata of a network record in PeeringDB database
           for ALTO server discovery using PeeringDB lookup.";
        container peeringdb-params {
          description
            "Configuration parameters for PeeringDB database.";
          leaf org-id {
            type uint32;
            description
              "The ID referring to the org object of the
               organization record in PeeringDB.";
          }
        }
      }
    }
  }

  grouping alto-logging-system-grouping {
    description
      "Grouping for configuration of logging system used by the ALTO
       server.";
    choice logging-system {
      description
        "Selects among available logging systems";
      case syslog {
        description
          "Use syslog as logging system.";
        container syslog-params {
          description
            "Configuration parameters for syslog.";
          leaf config-file {
            type inet:uri {
              pattern 'file:.*';
            }
            description
              "The file location of the syslog configuration.";
          }
        }
      }
    }
  }

  // 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;
    }
    container server-discovery {
      description
        "Configure how the ALTO server to be discovered by others.";
      uses alto-server-discovery-grouping;
    }
    container logging-system {
      description
        "Configure logging system to capture log messages generated
         by the ALTO server.";
      uses alto-logging-system-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 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
          "Identify the type of the data source.";
      }
      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 {
        description
          "Data source specific configuration.";
      }
      description
        "List of subscribed data sources.";
    }
    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 leafref {
          path "/alto:alto-server/alto:resource/alto: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 filter-costmap-cap;
            uses algorithm;
          }
        }
        case endpointcost {
          container alto-endpointcost-params {
            description
              "Endpoint Cost Service specific configuration.";
            reference
              "Section 11.5 of RFC 7285.";
            uses endpoint-cost-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";
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="the-ietf-alto-stats-module">
        <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">
      <name>Security Considerations</name>
      <t>TBD.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers two URIs in the "IETF XML Registry" <xref target="RFC3688"/>.
Following the format in RFC 3688, the following registrations are requested.</t>
      <artwork><![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"/>.</t>
      <artwork><![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="RFC2622">
          <front>
            <title>Routing Policy Specification Language (RPSL)</title>
            <author fullname="C. Alaettinoglu" initials="C." surname="Alaettinoglu">
              <organization/>
            </author>
            <author fullname="C. Villamizar" initials="C." surname="Villamizar">
              <organization/>
            </author>
            <author fullname="E. Gerich" initials="E." surname="Gerich">
              <organization/>
            </author>
            <author fullname="D. Kessens" initials="D." surname="Kessens">
              <organization/>
            </author>
            <author fullname="D. Meyer" initials="D." surname="Meyer">
              <organization/>
            </author>
            <author fullname="T. Bates" initials="T." surname="Bates">
              <organization/>
            </author>
            <author fullname="D. Karrenberg" initials="D." surname="Karrenberg">
              <organization/>
            </author>
            <author fullname="M. Terpstra" initials="M." surname="Terpstra">
              <organization/>
            </author>
            <date month="June" year="1999"/>
            <abstract>
              <t>RPSL allows a network operator to be able to specify routing policies at various levels in the Internet hierarchy; for example at the Autonomous System (AS) level.  At the same time, policies can be specified with sufficient detail in RPSL so that low level router configurations can be generated from them.  RPSL is extensible; new routing protocols and new protocol features can be introduced at any time.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2622"/>
          <seriesInfo name="DOI" value="10.17487/RFC2622"/>
        </reference>
        <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="RFC9240">
          <front>
            <title>An Extension for Application-Layer Traffic Optimization (ALTO): Entity Property Maps</title>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <author fullname="K. Gao" initials="K." surname="Gao">
              <organization/>
            </author>
            <date month="July" 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 have been tied to IP addresses so far, 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 RFC 7285, 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 for specific endpoints to entire entity property maps. These extensions introduce additional features that allow 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="RFC" value="9240"/>
          <seriesInfo name="DOI" value="10.17487/RFC9240"/>
        </reference>
        <reference anchor="RFC9241">
          <front>
            <title>Content Delivery Network Interconnection (CDNI) Footprint and Capabilities Advertisement Using Application-Layer Traffic Optimization (ALTO)</title>
            <author fullname="J. Seedorf" initials="J." surname="Seedorf">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <author fullname="K. Ma" initials="K." surname="Ma">
              <organization/>
            </author>
            <author fullname="J. Peterson" initials="J." surname="Peterson">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <date month="July" 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="RFC" value="9241"/>
          <seriesInfo name="DOI" value="10.17487/RFC9241"/>
        </reference>
        <reference anchor="RFC9275">
          <front>
            <title>An Extension for Application-Layer Traffic Optimization (ALTO): Path Vector</title>
            <author fullname="K. Gao" initials="K." surname="Gao">
              <organization/>
            </author>
            <author fullname="Y. Lee" initials="Y." surname="Lee">
              <organization/>
            </author>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <date month="September" 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 to which endpoint(s) to connect based not only on numerical/ordinal cost values but also on fine-grained abstract information regarding the paths. This is useful for applications whose performance is impacted by specific 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 the "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="RFC" value="9275"/>
          <seriesInfo name="DOI" value="10.17487/RFC9275"/>
        </reference>
        <reference anchor="I-D.ietf-alto-performance-metrics">
          <front>
            <title>ALTO Performance Cost Metrics</title>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Y. Richard Yang" initials="Y. R." surname="Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Young Lee" initials="Y." surname="Lee">
              <organization>Samsung</organization>
            </author>
            <author fullname="Dhruv Dhody" initials="D." surname="Dhody">
              <organization>Huawei</organization>
            </author>
            <author fullname="Sabine Randriamasy" initials="S." surname="Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Luis M. Contreras" initials="L. M." surname="Contreras">
              <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-netconf-tcp-client-server">
          <front>
            <title>YANG Groupings for TCP Clients and TCP Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <author fullname="Michael Scharf" initials="M." surname="Scharf">
              <organization>Hochschule Esslingen - University of Applied Sciences</organization>
            </author>
            <date day="19" month="October" year="2022"/>
            <abstract>
              <t>   This document defines three YANG 1.1 modules to support the
   configuration of TCP clients and TCP servers.  The modules include
   basic parameters of a TCP connection relevant for client or server
   applications, as well as client configuration required for traversing
   proxies.  The modules can be used either standalone or in conjunction
   with configuration of other stack protocol layers.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-tcp-client-server-14"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-tls-client-server">
          <front>
            <title>YANG Groupings for TLS Clients and TLS Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="19" month="October" year="2022"/>
            <abstract>
              <t>   This document defines three YANG 1.1 modules: the first defines
   features and groupings common to both TLS clients and TLS servers,
   the second defines a grouping for a generic TLS client, and the third
   defines a grouping for a generic TLS server.

Editorial Note (To be removed by RFC Editor)

   This draft contains placeholder values that need to be replaced with
   finalized values at the time of publication.  This note summarizes
   all of the substitutions that are needed.  No other RFC Editor
   instructions are specified elsewhere in this document.

   Artwork in this document contains shorthand references to drafts in
   progress.  Please apply the following replacements:

   *  AAAA --&gt; the assigned RFC value for draft-ietf-netconf-crypto-
      types

   *  BBBB --&gt; the assigned RFC value for draft-ietf-netconf-trust-
      anchors

   *  CCCC --&gt; the assigned RFC value for draft-ietf-netconf-keystore

   *  DDDD --&gt; the assigned RFC value for draft-ietf-netconf-tcp-client-
      server

   *  FFFF --&gt; the assigned RFC value for this draft

   Artwork in this document contains placeholder values for the date of
   publication of this draft.  Please apply the following replacement:

   *  2022-10-19 --&gt; the publication date of this draft
   The "Relation to other RFCs" section Section 1.1 contains the text
   "one or more YANG modules" and, later, "modules".  This text is
   sourced from a file in a context where it is unknown how many modules
   a draft defines.  The text is not wrong as is, but it may be improved
   by stating more directly how many modules are defined.

   The "Relation to other RFCs" section Section 1.1 contains a self-
   reference to this draft, along with a corresponding Informative
   Reference in the Appendix.

   The following Appendix section is to be removed prior to publication:

   *  Appendix B.  Change Log

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-tls-client-server-31"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-http-client-server">
          <front>
            <title>YANG Groupings for HTTP Clients and HTTP Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="19" month="October" year="2022"/>
            <abstract>
              <t>   This document defines two YANG modules: the first defines a minimal
   grouping for configuring an HTTP client, and the second defines a
   minimal grouping for configuring an HTTP server.  It is intended that
   these groupings will be used to help define the configuration for
   simple HTTP-based protocols (not for complete web servers or
   browsers).

Editorial Note (To be removed by RFC Editor)

   This draft contains placeholder values that need to be replaced with
   finalized values at the time of publication.  This note summarizes
   all of the substitutions that are needed.  No other RFC Editor
   instructions are specified elsewhere in this document.

   Artwork in this document contains shorthand references to drafts in
   progress.  Please apply the following replacements (note: not all may
   be present):

   *  AAAA --&gt; the assigned RFC value for draft-ietf-netconf-crypto-
      types

   *  DDDD --&gt; the assigned RFC value for draft-ietf-netconf-tcp-client-
      server

   *  FFFF --&gt; the assigned RFC value for draft-ietf-netconf-tls-client-
      server

   *  GGGG --&gt; the assigned RFC value for this draft

   Artwork in this document contains placeholder values for the date of
   publication of this draft.  Please apply the following replacement:

   *  2022-10-19 --&gt; the publication date of this draft
   The "Relation to other RFCs" section Section 1.1 contains the text
   "one or more YANG modules" and, later, "modules".  This text is
   sourced from a file in a context where it is unknown how many modules
   a draft defines.  The text is not wrong as is, but it may be improved
   by stating more directly how many modules are defined.

   The "Relation to other RFCs" section Section 1.1 contains a self-
   reference to this draft, along with a corresponding Informative
   Reference in the Appendix.

   The following Appendix section is to be removed prior to publication:

   *  Appendix A.  Change Log

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-http-client-server-11"/>
        </reference>
      </references>
    </references>
    <section anchor="alto-ext-model">
      <name>Example: Extending the ALTO O&amp;M Data Model</name>
      <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>data-source</tt> choice.</li>
        <li>The <tt>algorithm</tt> choice of the <tt>resource-params</tt> of each <tt>resource</tt>.</li>
      </ul>
      <section anchor="example-data-source">
        <name>Example Module for Extended Data Sources</name>
        <t>The base data model defined by ietf-alto.yang does not include any choice cases
for specific data sources. The following example module demonstrates how a
implementation-specific data source can be augmented into the base data model.</t>
        <t>The <tt>yang-datastore</tt> case 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>
        <artwork><![CDATA[
module example-ietf-alto-data-source {

  namespace "urn:example:ietf-alto-data-source";
  prefix "alto-ds";

  import ietf-alto {
    prefix alto;
  }

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

  augment "/alto:alto-server/alto:data-source/alto:source-params" {
    case yang-datastore {
      when 'derived-from-or-self(source-type, "alto: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;
            }
          }
        }
      }
    }
  }
]]></artwork>
      </section>
      <section anchor="example-alg">
        <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><![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"/>). The corresponding data source is
assumed to be a <tt>yang-datastore</tt> data source (See <xref target="example-data-source"/>) for an
IETF layer 3 unicast topology defined in <xref target="RFC8346"/>. 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"/>).</t>
        <artwork><![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>
    <section anchor="ack" numbered="false">
      <name>Acknowledgements</name>
      <t>The authors thank Qiufang Ma and Qin Wu for their help with drafting the
initial version of the YANG modules. Thanks also to Adrian Farrel, Qiao Xiang,
Qin Wu, and Qiufang Ma for their reviews and valuable feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
4LuM4xFaPYF3/A9BGfqs1QMBAA==

-->

</rfc>
