<?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.22 (Ruby 3.1.3) -->
<?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-03" category="std" consensus="true" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <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-03"/>
    <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="2023" month="February" day="11"/>
    <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">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>
      </section>
      <section anchor="placeholders-in-reference-statement">
        <name>Placeholders in reference Statement</name>
        <t>Note to the RFC Editor: This section is to be removed prior to publication.</t>
        <t>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.</t>
        <t>Artwork in this document contains shorthand references to drafts in progress.
Please apply the following replacements:</t>
        <ul spacing="normal">
          <li>DDDD --&gt; the assigned RFC value for draft-ietf-netconf-tcp-client-server</li>
          <li>FFFF --&gt; the assigned RFC value for draft-ietf-netconf-tls-client-server</li>
          <li>GGGG --&gt; the assigned RFC value for draft-ietf-netconf-http-client-server</li>
          <li>HHHH --&gt; the assigned RFC value for draft-ietf-netconf-netconf-client-server</li>
          <li>IIII --&gt; the assigned RFC value for draft-ietf-netconf-restconf-client-server</li>
          <li>XXXX --&gt; the assigned RFC value for this draft</li>
          <li>YYYY --&gt; the assigned RFC value for draft-ietf-alto-performance-metrics</li>
        </ul>
        <!-- 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 top-level container "alto" in the ietf-alto module contains a single
"alto-server" and multiple "alto-client"s.</t>
        <t>The list "alto-client" defines a list of configurations for other applications
to launch an ALTO client. They can also be used by data sources and information
resource creation algorithms that are configured by an ALTO server instance.</t>
        <t>The container "alto-server" contains all the configured and operational
parameters of the administrated ALTO server instance.</t>
        <artwork><![CDATA[
module: ietf-alto
  +--rw alto!
     +--rw alto-client* [client-id]
     |  +--rw client-id                  string
     |  +--rw server-discovery-client
     |     +---u alto-server-discovery-client-grouping
     +--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 description?      string
        |  +--rw cost-context {performance-metrics}?
        |     +--rw cost-source    identityref
        |     +--rw parameters
        |        +--rw (parameters)?
        +--rw meta* [meta-key]
        |  +--rw meta-key      string
        |  +--rw meta-value    string
        +--rw auth-client* [client-id]
        |  +--rw client-id    string
        |  +--rw (authentication)?
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client* [client-id]
        |     +--rw client-id
        |             -> /alto/alto-server/auth-client/client-id
        +--rw data-source* [source-id]
        |  +--rw source-id                    string
        |  +--rw source-type                  identityref
        |  +--rw (update-policy)
        |  |  +--:(reactive)
        |  |  |  +--rw (publish-mode)?
        |  |  |     +--:(on-change)
        |  |  |     |  +--rw on-change        empty
        |  |  |     +--:(periodic)
        |  |  |        +--rw feed-interval    uint32
        |  |  +--:(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-role*
           |       -> /alto/alto-server/role/role-name
           +--rw dependency*
           |       -> /alto/alto-server/resource/resource-id
           +--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-alto-client-operation-and-management">
        <name>Data Model for ALTO Client Operation and Management</name>
        <t>The <tt>alto-client</tt> list contains a list of client-side configurations.
<tt>server-discovery-client</tt> is defined to configure how an ALTO client discover
the ALTO server.</t>
        <artwork><![CDATA[
module: ietf-alto
  +--rw alto!
     +--rw alto-client* [client-id]
     |  +--rw client-id                  string
     |  +--rw server-discovery-client
     |     +---u alto-server-discovery-client-grouping
     ...
]]></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!
     ...
     +--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 description?      string
        |  +--rw cost-context {performance-metrics}?
        |     +--rw cost-source    identityref
        |     +--rw parameters
        |        +--rw (parameters)?
        +--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
]]></artwork>
            <t>The <tt>server-discovery</tt> node provides configuration for ALTO server discovery
using different mechanisms. The initial module only defines the <tt>reverse-dns</tt>
case that is used to configure DNS NAPTR records for ALTO server discovery,
which is sugested 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. Cases for other mechanisms can be augmented in the future
modules.</t>
            <!--
- The `internet-routing-registry` 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)
  {{RFC2622}} to get the corresponding ALTO server to a given Autonomous System
  (AS).
- The `peeringdb` 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.
-->

</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 reactively waits the data source for pushing updates. For the
proactive update, the ALTO server has to proactively fetch the data source
periodically.</t>
          <t>To use the reactive update, there are two publish modes:</t>
          <ul spacing="normal">
            <li>If the <tt>on-change</tt> attribute presents, the data source is expected to push
the update as soon as the data source changes.</li>
            <li>Otherwise, if the <tt>feed-interval</tt> attribute presents, the data source is
expected to push the updates periodically. The value of <tt>feed-interval</tt>
specifies the interval of pushing the data change updates in milliseconds.
If <tt>feed-interval</tt> is zero, the data source is expected to work in the
<tt>on-change</tt> mode.</li>
          </ul>
          <t>To use the proactive update, the <tt>poll-interval</tt> attribute MUST present. The
value of <tt>poll-interval</tt> specifies the interval of fetching the data in
milliseconds. If <tt>poll-interval</tt> is zero, the ALTO server will not fetch 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!
     ...
     +--rw alto-server
        ...
        +--rw data-source* [source-id]
        |  +--rw source-id                    string
        |  +--rw source-type                  identityref
        |  +--rw (update-policy)
        |  |  +--:(reactive)
        |  |  |  +--rw (publish-mode)?
        |  |  |     +--:(on-change)
        |  |  |     |  +--rw on-change        empty
        |  |  |     +--:(periodic)
        |  |  |        +--rw feed-interval    uint32
        |  |  +--:(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-role</tt> node containing a list of <tt>role-name</tt>s
that is used by role-based access control for this ALTO information resource.
See <xref target="alto-rbac"/> for details of information resource access control.</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!
     ...
     +--rw alto-server
        ...
        +--rw resource* [resource-id]
           +--rw resource-id                       resource-id
           +--rw resource-type                     identityref
           +--rw description?                      string
           +--rw accepted-role*
           |       -> /alto/alto-server/role/role-name
           +--rw dependency*
           |       -> /alto/alto-server/resource/resource-id
           +--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 anchor="alto-rbac">
          <name>ALTO Information Resource Access Control Management</name>
          <t>As section 15.5.2 of <xref target="RFC7285"/> suggests, the module also defines
authentication and authorization 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>The information resource access control is supported by the following
configuration:</t>
          <artwork><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server
        ...
        +--rw auth-client* [client-id]
        |  +--rw client-id    string
        |  +--rw (authentication)?
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client* [client-id]
        |     +--rw client-id
        |             -> /alto/alto-server/auth-client/client-id
        ...
]]></artwork>
          <t>It configures the role-based access control:</t>
          <ul spacing="normal">
            <li>
              <tt>auth-client</tt> declares a list of ALTO clients that can be authenticated by
the internal or external authorization server. This basic model does not
define any authentication approach, but the operators or future documents can
augment the <tt>authentication</tt> choice for different authentication mechanisms.</li>
            <li>
              <tt>role</tt> defines a list of roles for access control. Each role contains a list
of authenticated ALTO clients. Each client can be assigned to multiple roles.
The <tt>role-name</tt> can be referenced by the <tt>accepted-role</tt> list of a
<tt>resource</tt>. For a given authenticated ALTO client, if one of the roles
containing it is allowed to access a resource, this client is allowed to
access the resource.</li>
          </ul>
        </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>
      <section anchor="model-for-alto-server-failure-monitoring">
        <name>Model for ALTO Server Failure Monitoring</name>
        <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>
      <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-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 "2023-02-10" {
    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.";
  }

  typedef role-name {
    type string;
    description
      "Name of a role for role-based access control.";
  }

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

  identity cost-source {
    description
      "Theh cost source attribute indicates the high-level type of the
       data source.";
    reference
      "Section 3.1 of RFC YYYY.";
  }

  // Identities for ALTO information resources

  identity ird {
    base resource-type;
    description
      "Identity for information resource directory.";
  }

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

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

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

  identity endpoint-prop {
    base resource-type;
    description
      "Identity for endpoint property service.";
  }

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

  identity cdni {
    base resource-type;
    description
      "Identity for content delivery network interconnection (CDNI)
       advertisement service.";
  }

  identity update {
    base resource-type;
    description
      "Identity for update stream service.";
  }

  // 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 YYYY";
  }

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

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

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

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

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

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

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

  // Identities for cost sources

  identity nomial {
    if-feature "performance-metrics";
    base cost-source;
    description
      "The 'nominal' category indicates that the metric value is
       statically configured by the underlying devices.";
    reference
      "Section 3.1 of RFC YYYY";
  }

  identity sla {
    if-feature "performance-metrics";
    base cost-source;
    description
      "The 'sla' category indicates that the metric value is derived
       from some commitment which this document refers to as
       service-level agreement (SLA).";
    reference
      "Section 3.1 of RFC YYYY";
  }

  identity estimation {
    if-feature "performance-metrics";
    base cost-source;
    description
      "The 'estimation' category indicates that the metric value is
       computed through an estimation process.";
    reference
      "Section 3.1 of RFC YYYY";
  }

  // 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 xdom-disc {
    description
      "Support cross-domain server discovery.";
    reference
      "RFC8686: Application-Layer Traffic Optimization (ALTO)
       Cross-Domain Server Discovery";
  }

  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 9275: An Extension for Application-Layer Traffic
       Optimization (ALTO): Path Vector";
  }

  feature performance-metrics {
    description
      "Support performance metrics extension.";
    reference
      "RFC YYYY: 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
      "Grouping for configuration of 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 {
        if-feature xdom-disc;
        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/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.";
      }
    }
  }

  grouping alto-server-discovery-client-grouping {
    description
      "Grouping for configuration of how a client can discover another
       ALTO server.";
    choice server-discovery-client-manner {
      description
        "Selects among available server discovery manners.";
      case reverse-dns {
        if-feature xdom-disc;
        description
          "Use reverse DNS lookup to discover an ALTO server.";
        reference
          "RFC 8686: Application-Layer Traffic Optimization (ALTO)
           Cross-Domain Server Discovery.";
        container rdns-params {
          description
            "Configuration for reverse DNS lookup.";
          leaf-list dns-server {
            type inet:host;
            description
              "DNS server list for reverse DNS lookup.";
          }
        }
      }
    }
  }

  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:.*';
            }
            default 'file:/etc/syslog.conf';
            description
              "The file location of the syslog configuration.";
          }
        }
      }
    }
  }

  // Top-level container

  container alto {
    presence "The ALTO is enabled";
    description
      "Parameters for the ALTO client and server.";
    list alto-client {
      key client-id;
      leaf client-id {
        type string;
        description
          "Identifier of a client that can be referenced by a data
           source or a resource creation algorithm to communicate with
           other ALTO servers.";
      }
      container server-discovery-client {
        uses alto-server-discovery-client-grouping;
        description
          "Configuration of how to discover another ALTO server.";
      }
      description
        "The ALTO client configuration.";
    }
    container alto-server {
      description
        "The ALTO server instance configuration.";
      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";
        }
        leaf description {
          type string;
          description
            "The human-readable description fo the cost-mode and
             cost-mode";
        }
        container cost-context {
          if-feature "performance-metrics";
          leaf cost-source {
            type identityref {
              base cost-source;
            }
            mandatory true;
            description
              "The referenced cost source";
          }
          container parameters {
            choice parameters {
              description
                "Cases of parameters to be augmented.";
            }
            description
              "Additional computation parameters for the cost
               source.";
          }
          description
            "Context of how the metric is obtained.";
        }
        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 auth-client {
        key "client-id";
        leaf client-id {
          type string;
          description
            "Identifier to reference an ALTO client.";
        }
        choice authentication {
          description
            "Choice of authentication methods to identify this
             ALTO client.";
        }
        description
          "List of authenticated ALTO clients.";
      }
      list role {
        key "role-name";
        leaf role-name {
          type role-name;
          description
            "Name of a role for access control.";
        }
        list client {
          key "client-id";
          leaf client-id {
            type leafref {
              path "/alto:alto/alto:alto-server/alto:auth-client"
                 + "/alto:client-id";
            }
            description
              "Identifier of an ALTO client assigned to the role.";
          }
          description
            "List of roles for access control.";
        }
        description
          "List of roles for access control.";
      }
      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 {
            description
              "Configuration for the data source listener to
               reactively subscribe data and wait for updates
               published by the data source.";
            choice publish-mode {
              description
                "Configuration for when the data source publish an
                 update.";
              case on-change {
                description
                  "The data source is requested to publish an update
                   once the data has a change.";
                leaf on-change {
                  type empty;
                  mandatory true;
                  description
                    "Indicate an on-change subscription.";
                }
              }
              case periodic {
                description
                  "The data source is requested to periodically
                   publish an update.";
                leaf feed-interval {
                  type uint32;
                  mandatory true;
                  description
                    "Duration of time that should occur between
                     periodic push updates, in units of seconds.";
                }
              }
            }
          }
          case proactive {
            description
              "Configuration for the data source listener to
               proactively pull data from the data source.";
            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-role {
          type leafref {
            path "/alto:alto/alto:alto-server/alto:role"
               + "/alto:role-name";
          }
          description
            "Roles allowed to access this information resource.";
        }
        leaf-list dependency {
          type leafref {
            path "/alto:alto/alto:alto-server/alto:resource"
               + "/alto:resource-id";
          }
          description
            "A list of dependent information resources.";
        }
        choice resource-params {
          description
            "Resource-specific configuration.";
          case ird {
            when 'derived-from-or-self(resource-type, "alto:ird")';
            container alto-ird-params {
              leaf delegation {
                type inet:uri;
                mandatory true;
                description
                  "Upstream IRD to be delegated.";
              }
              description
                "IRD-specific configuration.";
            }
          }
          case networkmap {
            when 'derived-from-or-self(resource-type,'
               + '"alto:network-map")';
            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 {
            when 'derived-from-or-self(resource-type,'
               + '"alto:cost-map")';
            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 {
            when 'derived-from-or-self(resource-type,'
               + '"alto:endpoint-cost")';
            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 {
            when 'derived-from-or-self(resource-type,'
               + '"alto:endpoint-prop")';
            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 {
            when 'derived-from-or-self(resource-type,'
               + '"alto:property-map")';
            if-feature "propmap";
            container alto-propmap-params {
              uses algorithm;
              description
                "(Filtered) Entity Property Map specific
                 configuration.";
            }
          }
          case cdni {
            when 'derived-from-or-self(resource-type, "alto:cdni")';
            if-feature "cdni";
            container alto-cdni-params {
              uses algorithm;
              description
                "CDNi specific configuration";
            }
          }
          case update {
            when 'derived-from-or-self(resource-type,'
               + '"alto: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 statistics 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 "2023-02-10" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

  augment "/alto:alto/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/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/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/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/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/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>
      <section anchor="the-ietf-alto-yang-module">
        <name>The "ietf-alto" YANG Module</name>
        <t>The "ietf-alto" YANG module defines data nodes that are designed to be accessed
via YANG based management protocols, such as NETCONF <xref target="RFC6241"/> and RESTCONF
<xref target="RFC8040"/>. Both of these protocols have mandatory-to-implement secure
transport layers (e.g., SSH, TLS) with mutual authentication.</t>
        <t>The Network Access Control Model (NACM) <xref target="RFC8341"/> provides the means to
restrict access for particular users to a pre-configured subset of all
available protocol operations and content.</t>
        <t>None of the readable data nodes in this YANG module are considered sensitive or
vulnerable in network environments. The NACM "default-deny-all" extension has
not been set for any data nodes defined in this module.</t>
        <t>None of the writable data nodes in this YANG module are considered sensitive or
vulnerable in network environments. The NACM "default-deny-write" extension has
not been set for any data nodes defined in this module.</t>
        <t>This module does not define any RPCs, actions, or notifications, and thus the
security consideration for such is not provided here.</t>
        <t>Please be aware that this module uses groupings defined in other RFCs that
define data nodes that do set the NACM "default-deny-all" and
"default-deny-write" extensions.</t>
      </section>
      <section anchor="the-ietf-alto-stats-yang-module">
        <name>The "ietf-alto-stats" YANG Module</name>
        <t>The "ietf-alto-stats" YANG module defines data nodes that are designed to be
accessed via YANG based management protocols, such as NETCONF <xref target="RFC6241"/> and
RESTCONF <xref target="RFC8040"/>. Both of these protocols have mandatory-to-implement
secure transport layers (e.g., SSH, TLS) with mutual authentication.</t>
        <t>The Network Access Control Model (NACM) <xref target="RFC8341"/> provides the means to
restrict access for particular users to a pre-configured subset of all
available protocol operations and content.</t>
        <t>None of the readable data nodes in this YANG module are considered sensitive or
vulnerable in network environments. The NACM "default-deny-all" extension has
not been set for any data nodes defined in this module.</t>
        <t>None of the writable data nodes in this YANG module are considered sensitive or
vulnerable in network environments. The NACM "default-deny-write" extension has
not been set for any data nodes defined in this module.</t>
        <t>This module does not define any RPCs, actions, or notifications, and thus the
security consideration for such is not provided here.</t>
        <t>Please be aware that this module uses groupings defined in other RFCs that
define data nodes that do set the NACM "default-deny-all" and</t>
      </section>
    </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="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman">
              <organization/>
            </author>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices.  It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages.  The NETCONF protocol operations are realized as remote procedure calls (RPCs).  This document obsoletes RFC 4741.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </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="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability.  There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.  This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder">
              <organization/>
            </author>
            <author fullname="P. Shafer" initials="P." surname="Shafer">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <author fullname="R. Wilton" initials="R." surname="Wilton">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model.  This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </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="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8641">
          <front>
            <title>Subscription to YANG Notifications for Datastore Updates</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm">
              <organization/>
            </author>
            <author fullname="E. Voit" initials="E." surname="Voit">
              <organization/>
            </author>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore.  Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8641"/>
          <seriesInfo name="DOI" value="10.17487/RFC8641"/>
        </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="12" month="December" 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-15"/>
        </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="12" month="December" 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-12-12 --&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-32"/>
        </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="12" month="December" 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-12-12 --&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-12"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-netconf-client-server">
          <front>
            <title>NETCONF Client and Server Models</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="12" month="December" year="2022"/>
            <abstract>
              <t>   This document defines two YANG modules, one module to configure a
   NETCONF client and the other module to configure a NETCONF server.
   Both modules support both the SSH and TLS transport protocols, and
   support both standard NETCONF and NETCONF Call Home connections.

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

   *  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

   *  EEEE --&gt; the assigned RFC value for draft-ietf-netconf-ssh-client-
      server

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

   *  GGGG --&gt; the assigned RFC value for draft-ietf-netconf-http-
      client-server

   *  HHHH --&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-12-12 --&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-netconf-client-server-28"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-restconf-client-server">
          <front>
            <title>RESTCONF Client and Server Models</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="12" month="December" year="2022"/>
            <abstract>
              <t>   This document defines two YANG modules, one module to configure a
   RESTCONF client and the other module to configure a RESTCONF server.
   Both modules support the TLS transport protocol with both standard
   RESTCONF and RESTCONF Call Home connections.

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

   *  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

   *  EEEE --&gt; the assigned RFC value for draft-ietf-netconf-ssh-client-
      server

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

   *  GGGG --&gt; the assigned RFC value for draft-ietf-netconf-http-
      client-server

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

   *  IIII --&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-12-12 --&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-restconf-client-server-28"/>
        </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>server-discovery-manner</tt> choice of the <tt>server-discovery</tt>.</li>
        <li>The <tt>authentication</tt> choice of each <tt>auth-client</tt>.</li>
        <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-server-disc">
        <name>Example Module for Extended Server Discovery Manners</name>
        <t>The base data model defined by ietf-alto.yang only includes a reverse DNS based
server discovery manner. The following example module demonstrates how
additional server discovery manners can be augmented into the base data model.</t>
        <t>The case <tt>internet-routing-registry</tt> allows the ALTO server to update the
server URI to the attribute of the corresponding aut-num class in IRR.</t>
        <t>The case <tt>peeringdb</tt> allows the ALTO server to update the server URI to the org
object of the organization record in PeeringDB.</t>
        <artwork><![CDATA[
module example-ietf-alto-server-discovery {
  yang-version 1.1;

  namespace "urn:example:ietf-alto-server-discovery";
  prefix "alto-disc";

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

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

  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 an example of the extended ALTO server
     discovery manners for IRR and PeeringDB.

     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 "2023-02-10" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

  augment "/alto:alto/alto:alto-server/alto:server-discovery"
        + "/alto:server-discovery-manner" {
    description
      "Examples of server discovery mechanisms provided by the ALTO
       server.";
    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.";
        }
      }
    }
  }

  augment "/alto:alto/alto:alto-client/alto:server-discovery-client"
        + "/alto:server-discovery-client-manner" {
    description
      "Examples of server discovery mechanisms used by the ALTO
       client.";
    case internet-routing-registry {
      description
        "Use Internet Routing Registry (IRR) to discover an ALTO
         server.";
      reference
        "RFC 2622: Routing Policy Specification Language (RPSL).";
      container irr-params {
        description
          "Configuration for IRR query using RPSL.";
        leaf whois-server {
          type inet:host;
          description
            "Whois server for IRR query using RPSL.";
        }
      }
    }
    case peeringdb {
      description
        "Use PeeringDB to discover an ALTO server.";
      container peeringdb-params {
        description
          "Configuration for PeeringDB query";
        leaf peeringdb-endpoint {
          type inet:uri;
          description
            "Endpoint of PeeringDB API server.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-client-auth">
        <name>Example Module for Extended Client Authentication Approaches</name>
        <t>The base data model defined by ietf-alto.yang does not include any choice cases
for specific client authentication approaches. The following example module
demonstrates how additional client authentication approaches can be augmented
into the base data model.</t>
        <t>The case <tt>http-basic</tt> includes the <tt>username</tt> and <tt>password</tt> which are required
by the ALTO server to authenticate an ALTO client using the HTTP basic
authentication.</t>
        <t>The case <tt>oauth2</tt> includes the URI to a third-party OAuth 2.0 based
authorization server that the ALTO server can redirect to for the client
authentication.</t>
        <artwork><![CDATA[
module example-ietf-alto-alg {
  yang-version 1.1;

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

  import ietf-inet-types {
    prefix "inet";
    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 an example of the extended ALTO client
     authentication approaches for the role-based access control.

     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 "2023-02-10" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

  augment "/alto:alto/alto:alto-server/alto:auth-client"
        + "/alto:authentication" {
    description
      "Example of extended ALTO client authentication approaches.";
    case http-basic {
      description
        "Example of the HTTP basic authentication.";
      container basic-auth {
        description
          "Parameters for the HTTP basic authentication.";
        leaf username {
          type string;
          mandatory true;
          description
            "username of the HTTP basic authentication.";
        }
        leaf password {
          type string;
          mandatory true;
          description
            "password of the HTTP basic authentication.";
        }
      }
    }
    case oauth2 {
      description
        "Example of authentication by a third-party OAuth 2.0
         server.";
      container oauth2 {
        description
          "Parameters for authentication by a third-party OAuth 2.0
           server.";
        leaf oauth2-server {
          type inet:uri;
          description
            "The URI to the authorization server.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <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 datastore. It includes:</t>
        <ul spacing="normal">
          <li>
            <tt>datastore</tt> to indicate which datastore is fetched.</li>
          <li>
            <tt>target-paths</tt> to specify the list of nodes or subtrees in the datastore.</li>
          <li>
            <tt>protocol</tt> to indicate which protocol is used to access the datastore. Either
<tt>restconf</tt> or <tt>netconf</tt> can be used.</li>
        </ul>
        <artwork><![CDATA[
module example-ietf-alto-data-source {
  yang-version 1.1;

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

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

  import ietf-datastores {
    prefix ds;
    reference
      "RFC8342: Network Management Datastore Architecture (NMDA)";
  }

  import ietf-yang-push {
    prefix yp;
    reference
      "RFC8641: Subscription to YANG Notifications for Datastore
       Updates";
  }

  import ietf-netconf-client {
    prefix ncc;
    reference
      "RFC HHHH: NETCONF Client and Server Models";
  }

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

  organization
    "IETF ALTO Working Group";

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

  description
    "This YANG module defines an example of the extended ALTO data
     source for YANG-based datastore.

     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 "2023-02-10" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

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

  identity protocol-type {
    description
      "Base identity for protocol type.";
  }

  identity netconf {
    base protocol-type;
    description
      "Identity for NETCONF protocol.";
  }

  identity restconf {
    base protocol-type;
    description
      "Identity for RESTCONF protocol.";
  }

  augment "/alto:alto/alto:alto-server/alto:data-source"
        + "/alto:source-params" {
    description
      "Example of data source for YANG datastore.";
    case yang-datastore {
      when 'derived-from-or-self(source-type, "alto-ds:yang-datastore")';
      description
        "Example data source for local and/or remote YANG datastore.";
      container yang-datastore-source-params {
        description
          "YANG datastore specific configuration.";
        leaf datastore {
          type ds:datastore-ref;
          mandatory true;
          description
            "Identity reference of the datastore from which to get
             data.";
        }
        list target-paths {
          key name;
          description
            "XPath to subscribed YANG datastore node or subtree.";
          leaf name {
            type string;
            description
              "Identifier of the supported xpath or subtree filters.";
          }
          uses yp:selection-filter-types;
        }
        leaf protocol {
          type identityref {
            base protocol-type;
          }
          description
            "Protocol used to access the YANG datastore.";
        }
        container restconf {
          uses rcc:restconf-client-app-grouping {
            when 'derived-from-or-self(../protocol, "restconf")';
          }
          description
            "Parameters for restconf endpoint of the YANG datastore.";
        }
        container netconf {
          uses ncc:netconf-client-app-grouping {
            when 'derived-from-or-self(../protocol, "netconf")';
          }
          description
            "Parameters for netconf endpoint of the YANG datastore.";
        }
      }
    }
  }
}
]]></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/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    leafref
          +--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 target path name of an operational
<tt>yang-datastore</tt> data source node (See <xref target="example-data-source"/>) subscribed
in the <tt>data-source</tt> list (See <xref target="data-source"/>). The referenced target path
in the corresponding <tt>yang-datastore</tt> data source is assumed 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 {
  yang-version 1.1;

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

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

  import ietf-datastores {
    prefix ds;
    reference
      "RFC8342: Network Management Datastore Architecture (NMDA)";
  }

  import example-ietf-alto-data-source {
    prefix "alto-ds";
  }

  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 an example of the extended ALTO
     information resource creation algorithm for translating an L3
     unicast topology of I2RS to an ALTO network map.

     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 "2023-02-10" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

  augment "/alto:alto/alto:alto-server/alto:resource"
        + "/alto:resource-params/alto:networkmap"
        + "/alto:alto-networkmap-params/alto:algorithm" {
    description
      "Example of network map creation algorithm.";
    case l3-unicast-cluster {
      description
        "Example algorithm translating an L3 unicast topology of I2RS
         to an ALTO network map";
      container l3-unicast-cluster-algorithm {
        description
          "Parameters for l3-unicast-cluster algorithm";
        leaf l3-unicast-topo {
          type leafref {
            path "/alto:alto/alto:alto-server/alto:data-source"
               + "/alto-ds:yang-datastore-source-params"
               + "/alto-ds:target-paths/alto-ds:name";
          }
          must 'deref(.)/../..'
             + '/alto-ds:datastore = "ds:operational"';
          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:
H4sIAAAAAAAAA+19aXvbRpLwd/yKXuV5xtJEpA4fcZhkMrJkJ5q1ZY2kbCY7
O/sKIiEJYxJgANAKx9b+9reuvoAGSB1OZmfFOUwRje7q6urqquo6er1eNMqH
WTxJBmpUxOdVL02q8148rvJeHk968zi76G0+jqq0GkOTHfUT/KD24ipWb/JR
MlbneaHe7rxRcTZSb+IsvkgmSVap/FztvD55qw6LvMqH+TiKz86K5P2Af337
uzfqp52D76JhXCUXeTEfqLIaRVE6LQaqKmZltb25+eXmdhQXSTxQB0l1lRfv
ygj//6LIZ1Pp58fvonfJHH4d8Q/raj+rkiJLqt4eTiaKygoA+3/xOM8A+nlS
RtN0ECkYrUiHFf+i1DCfINCl/jvNxqlur1QySqs0uxioLIe/YDb6AU5sMo1t
P/DDKJlWlwP1GHuZFllepedpMpJ3y7yoiuTcjFPOJ+6ftd7K2Zn5BV6P4ll1
mRcAfQ8eIpDw4p/66j8vYUXoF17FPwGsv8ziTP0pycokc57nxUWcpf+IqzTP
Buokzy7+nqofsvR9UpRpNac2ySROxwP1d+mkn/X/ge//8QJ/7wM81ArQlyQA
1pPnm5tqN84f7WTq+yvuYQhdDdQxvnUZp/wTUMpAbW9uPd98Ij/MsgpXffcy
zWJvRnt9tXeZj+bOjPYui9l751d/Ht/P4qskVSfJ8DLLx/lFSsgzMxnhy30k
6pY57KXv53F5CX9IH+owLt6tqx8v0yqBxRuPnGm9gFkBMRUJ/VYkFwTCv8dF
BjviXezM9umzzc1nz/zZ7mej1J/tv/fVd3HuzPXf49T8oiFcOcj720/UcQ4E
oI6TIc5bba2rn9JLXOejPB6tODDuXibZxWjmwPJsaxM+QcwzOmG90iF1FiaH
d3F6Eed/LIezfjKa9YeZN4mjvjoeXuZV5czjKB8jR3B+91dtL5lV5fAScT5O
3smSyGj8bp/f/WPFDfqjxEPK90mawR6+7H2fFNU/esdVEZdloh73vnBQsRcX
E+AAo8pFxpPtL5/6uPguKSZxNo+iLIcvFWAAecTRq93tra0v5evjZ8+fy9dn
m9ub+uuXX27J1y+2nz+1X5/J1+dbXzyxX78wX5/rfp8/fqI7e/7Mvvb8y6f2
K/yaZud12J5tb2sotp8YKL7ctl+/2LKDOF+37Vcz3qYDhWn75bb59ctt59cv
CLb93l7fHhbTpCAIs2HSmyTIXkuvEfDkYZ6d96rhtDccp8Bue2VSAK2FW43L
JVpdVtUynel/F7cskjLYNOr1eio+A9oDbhxFJ5dpqeDYnNFRNwIukSWliulI
UyM8Gyf2bATEEM2X62pnNEmzFHvBH9YjPjNTOLIyxJtahYN0Tf2ufo5Op+N0
SK/0XsfzpFAncLadp0Pou0onsqWiVTwA18yB21cnsLtyGh3AGMLensH+qOBH
B8IqV0M4YquEzu/ZdIRfsSNLcMBrAC35rBgmMIUJgUbdxEP4pYRdBJsoH6/j
l/P0YlYkitHWA6rgbxEesLNMJkFD8QM1SsthDl/m6/QrwD0G/gabHFqWFbww
Jmj7vAKTdDQaJ1H0GR7zRT6aESu82Xog5B1rgmBE97Umitck8tfkLC6h3XRW
THNYEOisQvDrsOKMADkzYGojYLOW7z+L4JUPH4TjXF//qy20RREsCqwwjtOB
pItZOgIMnc0dDEH7yMEQjch/A0tEjO2MQZSaXVzS9ACwqQyRNEfIaOTIUBcc
Udl4DqQESwNElmfcx2w6BeFO9wLwM3bVVJZe1eCJsFnyC84d5GlqSqJqXIzg
ZyC+EslTrabZcDwbYRvqAA+O6+t1+QMOCfgj0n88M0+Qcbt/bOEfhAXh39dr
60whSZleZOoqHY9VPC5zdZZEMvzZOKENcz6jJQhCl/Qv+jj+wqPg+nqtj/v2
KPl5lha0jUr1GoSpGRAZrzkI8gol+VKtvPnh+GRlnf9VB2/p+9HLP/+wf/Ry
D78ff7/z+rX5olscf//2h9fwPJJv9s3dt2/evDzY45fhV1X76c3OTyuMn5W3
hyf7bw92Xq80Vx50EdxGZ4lC7lBMi6QCwotLROKwSM94n77YPVRbTxjzKD7A
csvKffHk+jq6AuGMh8qRjPhPWIm5iqfTJC6wixgWYxhP0wpWZB0HKC/zq0xd
JkXSB7E0YZIjXEX2rXF+leD2LxPdYRDeq7Qisk8LkNRgZWHjjfU6TBKQ0LKL
Epbq638DfvsSwTyHLUwbq1S93h9wEU9AXEpJ1p7XeS/tCYTuHDZ4foV0Gw+L
PJtPSjxFSVPsLeK/fCbC/5CC8KXf0UsNJRNgAWBQcN9L44sinpRRtKPKdAK8
GbUuBb9NL4m3FAlMH7ShihmTbFOfk8yE03qrztxVEKPfA73tLB+X3Bi6Be7G
4xPXpuMHe5KN+Rj3Yp+APQR1L/0loTdJhz6AwdUBSMwA+j4PbZC5TqJ0iYMS
oBm0LZl0YNTChT4/+zusUUlLnp/D/oxoMrjWoDTASTilgYmYQBW+wH/TCqEd
jpF8zot8QjNDHg8bHOG7AsxdspYOg8yAGyQx/IAwOdPsq7cIzFWKZMfwIhA8
HoAwKxFvhDRhIBE/AxDKfJjGLk3C8AUs0zTPiOMRL+axnW0AoP31b6ufVWdj
Nk7IUCUymI8gJUQfBc3qo9sD/HWUnMMWQpr6OOjxf6ExdgIPiX1Rh9V8CrP4
yNsWBXzYtvAcZETdDL+3NAPxVrdCSVdOP2y1WBLmDsal6QCE4M4O6kIydYBC
se6BBOSuLpoSNPTxYaCa6FVkAfpmxZAwH+Mt61WuXDPBj+NhcpmPR6BT4soV
egnUMWxF2cUHeUWcCikAcKlejlKQZAaKWIswHyQ5ZmZweoAgMQISS1Gcy0GS
OtOyWF/zIzT+EDEDFynV1EKh3sfjGfGouFJZAv3oXqmR0CKQdjxO/5GMImkO
jRE6EO1IUnCHVAxnhpMoZ5NJXMCLJTFxZhdROQPNIa1mzERpZNwjODpuIGAC
sqPt5FGxJumHXsHW5TQZEleLknGZXOFhoJmV4Rgw/Z2CTGWNRxYZsIsKgAFW
zywGoZZwRosEMssFLCscA4fAHYC9wSEDZ5XP1gVhbDdD1r4HHzwhWGQsUa4A
dOKUCIckSzgWxtZdAF29gs9tuqrvB+jqO/jcoqvmvoC+vofPLfoKqp/Q3T58
btFdWEeF/v4Cn0X9VWZ3wAs/wecGALTJdt3Cwh5LmMckZCPVeSLgh8+gPUzp
Z2YXx1oUrxmYtdE4in7E3ZPqo9eV3R1i/5bo0df7RkCvOQhFmQjbhLUNxmG/
2Zz1KYZYVKFYFbMss+L6gh7OZxlhAhhJNd8AeS4+S/GrUZ9YFDHTw/5S2IuB
riZ5hkxBDw34GtO56SyGksXoWxQBR1qIpprmnCf8Gh/uMPm5K2XoYYFZCDca
Rihs0VqK+Gb0lYFZA6PGlTQZOMSpB5hQsgHdor2RMRDURLWSoQgSUqzQbjiJ
TSewMBlfEMBKTdf6S4zrDSW6KEyMxCCasAzeh2F5/PbRq3xKonC9H6A0uow4
By4ppxvaz0Aew3U8npdw/KnV/e2j4zXFRKR11G0QJdZoP7wgPbi2YwrnT9g2
0CZBbUKbC/jEIPbO9xojFrWRFjqUYlIaIme14RR4r1Vr/ygpUWeHo6gUPd0F
SI1BlmfpF6W0kxjUSICfhDN3IupTfRwx7+bvAoy9e/t0wXj7ThHGo60BqSXO
asGpPhuPjB2ig8fAbiuTajbtL8Kjtaf0t5Rvc1oCj0fbbTAKYYEicnGBW2Fi
FLoFIHXDuH0zKAnGx4tg9NitBdTlHzfB43Z/+8YwPrn5WsOZOivwqAHOlA7n
CzFcg/HZjWF82rsFRY7Sc9qolc9yl8PjkxqM6+bxYxfHxNo0jK0U2Q5j6EhS
F0km9guQ8i/gXK4uJwT3AhiXwWMrRbbD6JtnUVUJQj1O3ifj/t1hfLZoz4gk
IpRIDOc8Tsd4EC+5wWswPu5Y68fBtf5iEYye5GSlK80oe1q+MWLVIhifdsD4
pAkjqtj6bNSadeCwb5eE+6Jg74zQOwGlTP9NbPtSDLkkdkbR0fOB2mHrnG+a
hrPd2nzX65Yxd1RBYxSjFsjEN7sw0h/JREKmU1CHsyoFsMR+bM3GYl2MTnKR
JOakLFfG7u/JE2xmgDdRecc2tme3XeSYqu1Q6zXJpWa1F+s3W89ADi31DVFU
vwaIS1F9Wde98+FrpdphPLxE0hNW3bl715EcYxrY2VzmaoVE3266N6Chdb+2
yLG1xOYFmgQQOrozWtcXRixWov2lQ2Lv0+X6IiRZ7s+GNG3l5E4i3mQENq4k
YKi7W6bIEWIJVTeyaAhtgnZwpXYO90uzFNL7DZh759hniardmdCIHQhq66lx
LVZ6PYg9SRHlJ2VVbrD1rRTKJQNt67jtw+o1qcsNPiGzDSxqwRsfLxFp/by/
F9Ei3bFWvbOY7e6iKpX3Tov3t2z3SX4LiG/xYnVzGcMUFnfUlB+QN3Yu8l3I
1xAv4ggpFtDRRbNIUERPB29PXjbPdZ4EctAmQsxRJ/o1kgySsH9LfZZUV4lc
qjl0B0TpItTeuzi/lnRzGp0l5ojiK6RYH0XkS+VcOBlDLVvHPlNv36PZByhE
O0ziKVs7861CSy12iiG6ppFpIyItmyxzRXLei+HRGt2ToPuDNbbHzit1UqmZ
cGiiriWfDdaCBXRIzDM6mM1rfEUmnbGqUayH6Uee0hgOt2ejQYb4FJO8BUqd
GuNjHy8kTtVqmSTKTJvIYG2NgQiIdXTZrlVNHPc8no0rA4m+AgiN10M6Lp1R
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
dFlBX2zVOZM6lxK5KSEYBElzg+kWN2jdegtrFd4rNjXEj7ThbiqOkFw8Qed9
gxc59F00Xw2+UL1F7y2o/pgqtZSm9Ju9gTDdOtyNygChqdE5IVzJxLFCOieF
lXBqr7YdEQ7XTbyKW4KXuCxnE5Yv/GNBYRBBD/2wtfyaYgbAbDQGLqVTKrgC
gQ9esGSiB287xEQBVwX648KiwfqLwztGVQjw7SUN0d7+Pk9HfF8MBDBmH28f
UDkBWoo11uAkJot5IFbGOciKPVzJlUYbq7qsPN+sDdY9W5oxbrSjl8cnu28P
XnmZ2cVmLdLw/s7BTi/wvk3FcJWMx713GTosEyWzUoD0T5btR6GXV59vrqGq
l+VWhzA6Xx1zrrxS/+s6SAzhYpR3pAYKMLlfcmgtgvnVwimGK2LecYrudr3h
FFvnGDrXwtPT3/S/hmO50/IXufzNOJJO+PLAkfz5CEd68uTx7VhSo1DEPbOj
MsyPAN77YUgeBYTK7Taw1oWUFip4fbyYCpanA00J4Wq/Xy011aU47m3muhzX
vfFkl+K87dNdivveZrrLceAbT3cRE247VH2W3C1zNyv7tgvc34WEbGNBkfIC
WO91Nm3WuBXY6FUJAPUDz3VRZ0xebWpBI3ZRp5DION1LQLUQ2bylGLFZ5E6Z
nOtBW4m8PgnFnZVmuYbs5GyK74aldHP7vtBSs7ugSq93OR/Qa6hrAy3frQl4
1OM4z9/Npi652d3RrMJ8s2M6WPWkMQ2f1K0J1avvXNuSVg81dZ79bdBxIFNm
raHaP1TBOro+ONdB0IIVpEMg4ivQpsFQ6GpyxeaiaUlx4yQrX2nyjs91DyY8
b6WL63WgZI/n4+EEeRGXtiLPJa/8UguK7LemCU5f1t/eJQQ/nW4hdWPismxO
8hHeB7eL3Tx3egRdWecWrEpA+xQcq//JWNYPtjuHxbhcvF7o0qGn35hyGuyP
U1Pchu9xpccuTuuxlKyW2EF/LKu7zMtqaS6HIzrFQJeC5obyQkuF39vun1rZ
ZF1Bxi3hgZ/gxvFBud1GqRfz9feHlDz+sAzxS9u4rFdmDpKZV9P4Hg5Y7q9J
Z2515FYac429+qNjuB/hm4P+7x91nzKsOXLjjaQabghAOPyjpekXdUiCFBVV
TSJ0SDNyPfK5IRlvbKiTfCrOtGYhTN4QoxkIJvhCGqjMKrZY+TFDqtFHboDa
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

-->

</rfc>
