<?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.25 (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-06" 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">YANG Data Models for the Application-Layer Traffic Optimization (ALTO) Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-alto-oam-yang-06"/>
    <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>
          <region>Sichuan</region>
          <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>
    <author initials="Q." surname="Ma" fullname="Qiufang Ma">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Nanjing</city>
          <region>Jiangsu</region>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>maqiufang1@huawei.com</email>
      </address>
    </author>
    <date year="2023" month="March" day="12"/>
    <area>Networks</area>
    <workgroup>ALTO WG</workgroup>
    <keyword>Automation, Service Provisioning, Control, Operation</keyword>
    <abstract>
      <t>This document defines YANG data models for Operations, Administration, and
Maintenance (OAM) &amp; Management of Application-Layer Traffic Optimization (ALTO)
Protocol. The operator can use these data models to set up an ALTO server, create,
update and remove ALTO information resources, manage the access control,
configure 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 set up the ALTO server,
create, update and remove ALTO information resources, manage the access
control, configure server discovery, and collect statistical data.</t>
      <t>This document only focuses on the common and implementation-agnostic data model
for purposes including deploying an ALTO server/client, operating and managing
a running ALTO server/client, functionality/capability configuration of ALTO
services, and monitoring ALTO-related performance metrics. Any
implementation-specific information is not in the scope of this document.
<xref target="scope"/> illustrates more details about what is and is not in the scope.
<xref target="requirements"/> and <xref target="extra-req"/> define more concrete requirements for the
data model.</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>
      <t>The detailed design of the data model is illustrated by <xref target="alto-model"/> and
<xref target="alto-stats-model"/>. And some examples of how to extend this data model for
the specific ALTO server implementations are shown in <xref target="alto-ext-model"/>.</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="acronyms-and-abbreviations">
      <name>Acronyms and Abbreviations</name>
      <t>This document uses the following acronyms:</t>
      <dl>
        <dt>OAM:</dt>
        <dd>
          <t>Operations, Administration, and Maintenance (Section 3 of <xref target="RFC6291"/>)</t>
        </dd>
        <dt>O&amp;M:</dt>
        <dd>
          <t>OAM and Management (Section 3 of <xref target="RFC6291"/>)</t>
        </dd>
      </dl>
      <section anchor="tree-diagrams">
        <name>Tree Diagrams</name>
        <t>The meaning of the symbols in the tree 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-statements">
        <name>Placeholders in Reference Statements</name>
        <t>Note to the RFC Editor: This section is to be removed prior to publication.</t>
        <t>This document 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>Please apply the following replacements:</t>
        <ul spacing="normal">
          <li>DDDD --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-tcp-client-server"/></li>
          <li>FFFF --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-tls-client-server"/></li>
          <li>GGGG --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-http-client-server"/></li>
          <li>HHHH --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-netconf-client-server"/></li>
          <li>IIII --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-restconf-client-server"/></li>
          <li>XXXX --&gt; the assigned RFC number for this draft</li>
          <li>YYYY --&gt; the assigned RFC number for <xref target="I-D.ietf-alto-performance-metrics"/></li>
        </ul>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="sec-req">
      <name>Design Scope and Requirements</name>
      <section anchor="scope">
        <name>Scope of Data Model for ALTO O&amp;M</name>
        <t>The following items are in the scope of the data models specified in this document:</t>
        <ul spacing="normal">
          <li>Deploying an ALTO server/client.</li>
          <li>Operating and managing an ALTO server/client.</li>
          <li>Functionality/capability configuration of ALTO services.</li>
          <li>Monitoring ALTO-related performance metrics.</li>
        </ul>
        <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="extra-req">
        <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>
      </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 the ALTO server
implementation and YANG modules that these server components need to 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 models
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 is designed to fit all the requirements listed in <xref target="sec-req"/>.</t>
        <t>As shown in <xref target="tree-str"/>, the top-level container 'alto' in the "ietf-alto" module contains a single
'alto-server' and a list of 'alto-client' that are uniquely identified.</t>
        <t>The list 'alto-client' defines a list of configurations for other applications
to bootstrap an ALTO client. These data nodes 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 both configuration and operational
data of an administrated ALTO server instance.</t>
        <figure anchor="tree-str">
          <name>IETF ALTO Tree Structure</name>
          <artwork align="center"><![CDATA[
module: ietf-alto
  +--rw alto!
     +--rw alto-client* [client-id]
     |  ...
     +--rw alto-server
        +...
        +--rw auth-client* [client-id]
        |  ...
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*
        |          -> /alto/alto-server/auth-client/client-id
        +--rw data-source* [source-id]
        |  ...
        +--rw resource* [resource-id]
           ...
]]></artwork>
        </figure>
      </section>
      <section anchor="data-model-for-alto-client-operation-and-management">
        <name>Data Model for ALTO Client Operation and Management</name>
        <t>As shown in <xref target="tree-alto-client"/>, the 'alto-client' list contains a list of client-side configurations.
'server-discovery-client' is used to configure how an ALTO client discovers
an ALTO server.</t>
        <figure anchor="tree-alto-client">
          <name>IETF ALTO Client Subtree Structure</name>
          <artwork align="center"><![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>
        </figure>
      </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 a set of data nodes server-level operation and management for ALTO that are shown in <xref target="tree-alto-server-level"/>. This structure  satisfies R1 - R4 in <xref target="requirements"/>.</t>
        <figure anchor="tree-alto-server-level">
          <name>IETF ALTO Server Level Subtree Structure</name>
          <artwork align="center"><![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>
        </figure>
        <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
basic data nodes for the server setup that are detailed in the following subsections.</t>
          <section anchor="alto-server-listen-stack">
            <name>ALTO Server Listen Stack</name>
            <t>The 'listen' contains all the data nodes for the whole server listen stack
across HTTP, TLS, and TCP layers (<xref target="tree-alto-gp"/>).</t>
            <figure anchor="tree-alto-gp">
              <name>IETF ALTO Server Groupings Structure</name>
              <artwork align="center"><![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
       |        +---u alto-server-grouping
       +--:(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
                +---u alto-server-grouping
]]></artwork>
            </figure>
          </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 "ietf-alto" module does not contain any configuration for
the communication between peer ALTO servers. Instead, it provides the
configuration for how an ALTO server can be discovered by another ALTO server on
demand (<xref target="tree-alto-disc-gp"/>).</t>
            <figure anchor="tree-alto-disc-gp">
              <name>IETF ALTO Server Discovery Grouping Structure</name>
              <artwork align="center"><![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>
            </figure>
            <t>The 'server-discovery' node provides configuration for the discovery of ALTO servers
using a variety of mechanisms. The initial version of the "ietf-alto" module only defines the 'reverse-dns'
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 that can be served by this ALTO server. The node
contains two leaf lists. The 'static' list contains a list of manually 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 of the endpoints configured by both <tt>static</tt> and <tt>dynamic</tt> lists will
be translated into DNS NAPTR resource records for server discovery. The
<tt>server-discovery-manner</tt> choice can be augmented by the future modules to
support other mechanisms.</t>
          </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 
the logging data nodes shonw in <xref target="tree-alto-log-gp"/>.</t>
          <t>The 'logging-system' data node provides configuration to select a logging system to
capture log messages generated by an ALTO server.</t>
          <t>By default, 'syslog' is the only supported logging system. When selecting
'syslog', the related configuration is delegated to the configuration file of
the syslog server.</t>
          <figure anchor="tree-alto-log-gp">
            <name>IETF ALTO Logging System Grouping Structure</name>
            <artwork align="center"><![CDATA[
  grouping alto-logging-system-grouping:
    +-- (logging-system)?
       +--:(syslog)
          +-- syslog-params
             +-- config-file?   inet:uri
]]></artwork>
          </figure>
          <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 (<xref target="tree-alto-server-level"/>):</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 is
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 'data-source' entries to subscribe the data sources from which ALTO
information resources are derived (Section 16.2.4 of <xref target="RFC7285"/>).</t>
          <figure anchor="tree-data-src">
            <name>IETF ALTO Server Data Source Subtree Structure</name>
            <artwork align="center"><![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>
          </figure>
          <t>As shown in <xref target="tree-data-src"/>, a 'data-source' list entry includes:</t>
          <ul spacing="normal">
            <li>A unique `source-id' for resource creation algorithms to reference.</li>
            <li>The 'source-type' attribute to declare the type of the data source.</li>
            <li>The 'update-policy' to specify how to get the data update from the data
source.</li>
            <li>The 'source-params' 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, two publish modes are supported:</t>
          <ul spacing="normal">
            <li>If the 'on-change' attribute is present, the data source is expected to push
the update as soon as the data source changes.</li>
            <li>Otherwise, if the 'feed-interval' attribute is present, the data source is
expected to push the updates periodically. The value of 'feed-interval'
specifies the interval of pushing the data change updates in milliseconds.
If 'feed-interval' is zero, the data source is expected to work in the
'on-change' mode.</li>
          </ul>
          <t>To use the proactive update, the <tt>poll-interval</tt> attribute MUST be 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>
          <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 'resource'
entries (<xref target="tree-alto-server-rsc"/>). 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
resources.</t>
          <t>Each <tt>resource</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>
          <figure anchor="tree-alto-server-rsc">
            <name>IETF ALTO Resource Subtree Structure</name>
            <artwork align="center"><![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>
          </figure>
          <t>A 'resource' list entry MUST include a unique 'resource-id' and a 'resource-type'.</t>
          <t>It may 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 may also include a
<tt>dependency</tt> node containing the <tt>resource-id</tt> of the dependent ALTO information
resources (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 category of the type-specific parameters is common for the same type
of ALTO information resource. They declare the Capabilities of the ALTO
information resource (Section 9.1.3 of <xref target="RFC7285"/>).</li>
            <li>The other category of the type-specific parameters is algorithm-specific.
The developer of the ALTO server can implement their own creation algorithms
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
an 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 the <tt>algorithm</tt> node for a specific type of <tt>resource</tt> is
included in <xref target="example-alg"/>.</t>
          <t>The developer does not have to 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 (Section 9.2.4 of <xref target="RFC7285"/>).</t>
        </section>
        <section anchor="alto-rbac">
          <name>ALTO Information Resource Access Control Management</name>
          <t>As per Section 15.5.2 of <xref target="RFC7285"/>, the "ietf-alto" module also defines
authentication and authorization related configuration to employ access control
at the 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 using the structure shown in <xref target="tree-auth"/>.</t>
          <figure anchor="tree-auth">
            <name>IETF ALTO Client Authentication Subtree Structure</name>
            <artwork align="center"><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server
        ...
        +--rw auth-client* [client-id]
        |  +--rw client-id                  string
        |  +--rw (authentication)?
        |     +--:(http)
        |     |  +--rw http-auth-client
        |     |          {http-listen,http:client-auth-supported,
        |     |           http:local-users-supported}?
        |     |     +--rw user-id    leafref
        |     +--:(https)
        |        +--rw https-auth-client
        |                {http:client-auth-supported,
        |                 http:local-users-supported}?
        |           +--rw user-id    leafref
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*
        |          -> /alto/alto-server/auth-client/client-id
        ...
]]></artwork>
          </figure>
          <t>The above structure can be used to configure 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 only includes
authentication approach directly provided by the HTTP server, 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 "ietf-alto-stats" module augments the "ietf-alto" module to include
statistics at the ALTO server and information resource level (<xref target="tree-stat"/>).</t>
      <figure anchor="tree-stat">
        <name>IETF ALTO Statistics Structure</name>
        <artwork align="center"><![CDATA[
module: ietf-alto-stats

  augment /alto:alto/alto:alto-server:
    +--ro num-total-req?         yang:counter64
    +--ro num-total-succ?        yang:counter64
    +--ro num-total-fail?        yang:counter64
    +--ro num-total-last-req?    yang:counter64
    +--ro num-total-last-succ?   yang:counter64
    +--ro num-total-last-fail?   yang:counter64
  augment /alto:alto/alto:alto-server/alto:resource:
    +--ro num-res-upd?    yang:counter64
    +--ro res-mem-size?   yang:counter64
    +--ro res-enc-size?   yang:counter64
    +--ro num-res-req?    yang:counter64
    +--ro num-res-succ?   yang:counter64
    +--ro num-res-fail?   yang:counter64
  augment /alto:alto/alto:alto-server/alto:resource
            /alto:resource-params/alto:networkmap
            /alto:alto-networkmap-params:
    +--ro num-map-pid?   yang:counter64
  augment /alto:alto/alto:alto-server/alto:resource
            /alto:resource-params/alto:propmap
            /alto:alto-propmap-params:
    +--ro num-map-entry?   yang:counter64
  augment /alto:alto/alto:alto-server/alto:resource
            /alto:resource-params/alto:cdni/alto:alto-cdni-params:
    +--ro num-base-obj?   yang:counter64
  augment /alto:alto/alto:alto-server/alto:resource
            /alto:resource-params/alto:update/alto:alto-update-params:
    +--ro num-upd-sess?      yang:counter64
    +--ro num-event-total?   yang:counter64
    +--ro num-event-max?     yang:counter64
    +--ro num-event-min?     yang:counter64
    +--ro num-event-avg?     yang:gauge64
]]></artwork>
      </figure>
      <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 "ietf-alto-stats" module contains statistics that indicates server failures (<xref target="tree-stat"/>).</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 "ietf-alto-stats" module also contains statistics for ALTO-specific performance metrics (<xref target="tree-stat"/>).</t>
        <t>More specifically, this data model contains the following measurement
information of "system and service performance" suggested by <xref target="RFC7285"/> and
<xref target="RFC7971"/>:</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>
        <t>Besides the above measurement information suggested by <xref target="RFC7285"/> and <xref target="RFC7971"/>,
the "ietf-alto-stats" module 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>
        <t>The "ietf-alto-stats" module only focuses on the performance metrics that can be directly
measured at the ALTO server. The following metrics for "measurement of the
impact" suggested by <xref target="RFC7971"/> are not contained in this data model:</t>
        <ul spacing="normal">
          <li>Total amount and distribution of traffic</li>
          <li>Application performance</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-modules">
      <name>ALTO OAM YANG Modules</name>
      <section anchor="the-ietf-alto-yang-module">
        <name>The "ietf-alto" YANG Module</name>
        <sourcecode type="yang" markers="true" name="ietf-alto@2023-02-23.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) 2023 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-23 {
    description
      "Initial Version.";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer Traffic
                 Optimization (ALTO) Protocol";
  }

  // Features

  feature http-listen {
    description
      "The 'http-listen' feature is only used for test deployment.
       This feature shouldn't be used in the production
       deployment.";
    reference
      "Section 8.3.5 of RFC 7285";
  }

  feature xdom-disc {
    description
      "Indicates support of cross-domain server discovery.";
    reference
      "RFC 8686: Application-Layer Traffic Optimization (ALTO)
                 Cross-Domain Server Discovery";
  }

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

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

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

  feature propmap {
    description
      "Indicates support of entity property map extension.";
    reference
      "RFC 9240: An ALTO Extension: Entity Property Maps";
  }

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

  feature path-vector {
    description
      "Indicates support of path vector extension.";
    reference
      "RFC 9275: An Extension for Application-Layer Traffic
                 Optimization (ALTO): Path Vector";
  }

  feature performance-metrics {
    description
      "Indicates support of performance metrics extension.";
    reference
      "RFC YYYY: ALTO Performance Cost Metrics";
  }

  // Base identities

  identity resource-type {
    description
      "Base identity for type of information resource.";
    reference
      "Section 8.1 of RFC 7285";
  }

  identity source-type {
    description
      "Base identity for type of data source. A data source indicates
      the origin from which the ALTO information resources is derived.";
  }

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

  identity cost-mode {
    description
      "The cost mode indicates how costs should be interpreted.
       Specifically, the cost mode attribute indicates whether
       indicated costs should be interpreted as numerical
       values or ordinal rankings.";
    reference
      "Section 6.1.2 of RFC 7285";
  }

  identity cost-source {
    description
      "Theh cost source 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.";
    reference
      "Section 5 of RFC 7285";
  }

  identity cost-map {
    base resource-type;
    description
      "Identity for cost map.";
    reference
      "Section 6 of RFC 7285";
  }

  identity endpoint-cost {
    base resource-type;
    description
      "Identity for endpoint cost service.";
    reference
      "Section 11.5.1 of RFC 7285";
  }

  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 is
       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 nominal {
    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";
  }

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

  // Groupings

  grouping filter-costmap-cap {
    description
      "This grouping defines a data model for
       FilteredCostMapCapabilities.";
    reference
      "Section 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;
      default false;
      description
        "If set to true, then the ALTO server allows cost
         constraints to be included in requests to the
         corresponding URI.";
    }
    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 and can return a
         multi-cost map with any combination of N or
         fewer cost types in the 'cost-type-names' list.";
    }
    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";
      description
        "Configuration for CalendarAttributes.";
      reference
        "Section 4.1 of RFC 8896";
      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;
        }
        units "seconds";
        mandatory true;
        description
          "The duration of an ALTO Calendar time interval.";
      }
      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.";
      }
    }
  }

  grouping endpoint-cost-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";
    uses filter-costmap-cap;
  }

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

  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 the 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.";
        reference
          "RFC 8686: Application-Layer Traffic Optimization (ALTO)
                     Cross-Domain Server Discovery.";
        container rdns-naptr-records {
          description
            "Configuration parameters for DNS NAPTR records.";
          leaf-list static-prefix {
            type inet:ip-prefix;
            description
              "Specifies a list of static IP prefixes.";
          }
          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.";
          }
        }
      }
    }
  }

  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 lookups.";
          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
          "Specifies syslog as the 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 service is enabled";
    description
      "Indicates a set of parameters for both ALTO clients and servers.";
    list alto-client {
      key "client-id";
      description
        "The ALTO client configuration.";
      leaf client-id {
        type string;
        description
          "A unique 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 {
        description
          "Configuration of how to discover an ALTO server.";
        uses alto-server-discovery-client-grouping;
      }
    }
    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";
        description
          "Mapping between name and referenced cost type.";
        leaf cost-type-name {
          type string;
          description
            "The name to reference a 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
            "A human-readable description fo the 'cost-mode' and
             'cost-metric'.";
        }
        container cost-context {
          if-feature "performance-metrics";
          description
            "Context of how the metric is obtained.";
          leaf cost-source {
            type identityref {
              base cost-source;
            }
            mandatory true;
            description
              "The referenced cost source.";
          }
          container parameters {
            description
              "Additional computation parameters for the cost
               source.";
            choice parameters {
              description
                "Cases of parameters to be augmented.";
            }
          }
        }
      }
      list meta {
        key "meta-key";
        description
          "Mapping of custom meta information";
        reference
          "Section 8.4.1 of RFC 7285.";
        leaf meta-key {
          type string;
          description
            "Custom meta key";
        }
        leaf meta-value {
          type string;
          mandatory true;
          description
            "Custom meta value";
        }
      }
      list auth-client {
        key "client-id";
        description
          "List of authenticated ALTO clients.";
        leaf client-id {
          type string;
          description
            "Identifier to reference an ALTO client.";
        }
        choice authentication {
          description
            "Choice of authentication methods to identify this
             ALTO client.";
          case http {
            description
              "The client is authenticated by the HTTP server.";
            container http-auth-client {
              if-feature "http-listen";
              if-feature "http:client-auth-supported";
              if-feature "http:local-users-supported";
              description
                "Parameters of the authenticated HTTP client.";
              leaf user-id {
                type leafref {
                  path "/alto:alto/alto:alto-server/alto:listen"
                     + "/alto:http/alto:http-server-parameters"
                     + "/alto:client-authentication/alto:users"
                     + "/alto:user/alto:user-id";
                }
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   client.";
              }
            }
          }
          case https {
            description
              "The client is authenticated by the HTTP server.";
            container https-auth-client {
              if-feature "http:client-auth-supported";
              if-feature "http:local-users-supported";
              description
                "Parameters of the authenticated HTTPS client.";
              leaf user-id {
                type leafref {
                  path "/alto:alto/alto:alto-server/alto:listen"
                     + "/alto:https/alto:http-server-parameters"
                     + "/alto:client-authentication/alto:users"
                     + "/alto:user/alto:user-id";
                }
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   client.";
              }
            }
          }
        }
      }
      list role {
        key "role-name";
        description
          "List of roles for access control.";
        leaf role-name {
          type role-name;
          description
            "Name of a role for access control.";
        }
        leaf-list client {
          type leafref {
            path "/alto:alto/alto:alto-server/alto:auth-client"
               + "/alto:client-id";
          }
          description
            "List of authenticated ALTO clients assigned to the role.";
        }
      }
      list data-source {
        key "source-id";
        description
          "List of subscribed data sources.";
        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;
          description
            "Policy to get updates from data sources.";
          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.";
            }
          }
        }
        choice source-params {
          description
            "Data source specific configuration.";
        }
      }
      list resource {
        key "resource-id";
        description
          "ALTO information resources to be defined";
        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 {
              description
                "IRD-specific configuration.";
              leaf delegation {
                type inet:uri;
                mandatory true;
                description
                  "Upstream IRD to be delegated.";
              }
            }
          }
          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
                "Sections 11.2.2 and 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 {
              description
                "(Filtered) Entity Property Map specific
                 configuration.";
              uses algorithm;
            }
          }
          case cdni {
            when 'derived-from-or-self(resource-type, "alto:cdni")';
            if-feature "cdni";
            container alto-cdni-params {
              description
                "CDNi specific configuration.";
              uses algorithm;
            }
          }
          case update {
            when 'derived-from-or-self(resource-type,'
               + '"alto:update")';
            if-feature "incr-update";
            container alto-update-params {
              description
                "Incremental Updates specific configuration.";
              uses algorithm;
            }
          }
        }
      }
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="the-ietf-alto-stats-yang-module">
        <name>The "ietf-alto-stats" YANG Module</name>
        <sourcecode type="yang" markers="true" name="ietf-alto-stats@2023-02-23.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: YANG Data Models for the Application-Layer
                 Traffic Optimization (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 a set of statistics of an ALTO
     server instance.

     Copyright (c) 2023 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-23 {
    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:counter64;
      config false;
      description
        "The total number of ALTO requests received by the ALTO
         server.";
    }
    leaf num-total-succ {
      type yang:counter64;
      config false;
      description
        "The total number of successful responses sent by the ALTO
         server.";
    }
    leaf num-total-fail {
      type yang:counter64;
      config false;
      description
        "The total number of failed responses sent by the ALTO
         server.";
    }
    leaf num-total-last-req {
      type yang:counter64;
      config false;
      description
        "The total number of ALTO requests received by the server
         within the last 5 minutes.";
    }
    leaf num-total-last-succ {
      type yang:counter64;
      config false;
      description
        "The total number of successful responses sent by the ALTO
         server within the last 5 minutes.";
    }
    leaf num-total-last-fail {
      type yang:counter64;
      config false;
      description
        "The total number of failed responses sent by the 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:counter64;
      config false;
      description
        "The number of version updates since the information resource
         was created.";
    }
    leaf res-mem-size {
      type yang:counter64;
      units "bytes";
      config false;
      description
        "Memory size utilized by the information resource.";
    }
    leaf res-enc-size {
      type yang:counter64;
      units "bytes";
      config false;
      description
        "Size of JSON encoded data of the information resource.";
    }
    leaf num-res-req {
      type yang:counter64;
      config false;
      description
        "The number of ALTO requests to this information resource.";
    }
    leaf num-res-succ {
      type yang:counter64;
      config false;
      description
        "The number of successful responses for requests to this
         information resource.";
    }
    leaf num-res-fail {
      type yang:counter64;
      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:counter64;
      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:counter64;
      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:counter64;
      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:counter64;
      config false;
      description
        "Number of sessions connected to the incremental update
         service.";
    }
    leaf num-event-total {
      type yang:counter64;
      config false;
      description
        "Total number of update events sent to all the connected
         clients.";
    }
    leaf num-event-max {
      type yang:counter64;
      config false;
      description
        "The maximum number of update events sent to the connected
         clients.";
    }
    leaf num-event-min {
      type yang:counter64;
      config false;
      description
        "The minimum number of update events sent to the connected
         clients.";
    }
    leaf num-event-avg {
      type yang:gauge64;
      config false;
      description
        "The average number of update events sent by the ALTO server
         to the connected clients.";
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The "ietf-alto" and "ietf-alto-stats" YANG modules define 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 these 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 these module.</t>
      <t>None of the writable data nodes in these YANG modules are considered sensitive or
vulnerable in network environments. The NACM "default-deny-write" extension has
not been set for any data nodes defined in these modules.</t>
      <t>These modules use 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="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the following URIs in the "IETF XML Registry" <xref target="RFC3688"/>:</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 the following 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
  Maintained by IANA: N
  Reference: [RFC XXXX]

  Name: ietf-alto-stats
  Namespace: urn:ietf:params:xml:ns:yang:ietf-alto-stats
  Prefix: alto-stats
  Maintained by IANA: N
  Reference: [RFC XXXX]
]]></artwork>
      <!-- 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>
        <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="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="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="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>
        <name>Informative References</name>
        <reference anchor="RFC2622">
          <front>
            <title>Routing Policy Specification Language (RPSL)</title>
            <author fullname="C. Alaettinoglu" initials="C." surname="Alaettinoglu">
              <organization/>
            </author>
            <author fullname="C. Villamizar" initials="C." surname="Villamizar">
              <organization/>
            </author>
            <author fullname="E. Gerich" initials="E." surname="Gerich">
              <organization/>
            </author>
            <author fullname="D. Kessens" initials="D." surname="Kessens">
              <organization/>
            </author>
            <author fullname="D. Meyer" initials="D." surname="Meyer">
              <organization/>
            </author>
            <author fullname="T. Bates" initials="T." surname="Bates">
              <organization/>
            </author>
            <author fullname="D. Karrenberg" initials="D." surname="Karrenberg">
              <organization/>
            </author>
            <author fullname="M. Terpstra" initials="M." surname="Terpstra">
              <organization/>
            </author>
            <date month="June" year="1999"/>
            <abstract>
              <t>RPSL allows a network operator to be able to specify routing policies at various levels in the Internet hierarchy; for example at the Autonomous System (AS) level.  At the same time, policies can be specified with sufficient detail in RPSL so that low level router configurations can be generated from them.  RPSL is extensible; new routing protocols and new protocol features can be introduced at any time.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2622"/>
          <seriesInfo name="DOI" value="10.17487/RFC2622"/>
        </reference>
        <reference anchor="RFC7921">
          <front>
            <title>An Architecture for the Interface to the Routing System</title>
            <author fullname="A. Atlas" initials="A." surname="Atlas">
              <organization/>
            </author>
            <author fullname="J. Halpern" initials="J." surname="Halpern">
              <organization/>
            </author>
            <author fullname="S. Hares" initials="S." surname="Hares">
              <organization/>
            </author>
            <author fullname="D. Ward" initials="D." surname="Ward">
              <organization/>
            </author>
            <author fullname="T. Nadeau" initials="T." surname="Nadeau">
              <organization/>
            </author>
            <date month="June" year="2016"/>
            <abstract>
              <t>This document describes the IETF architecture for a standard, programmatic interface for state transfer in and out of the Internet routing system.  It describes the high-level architecture, the building blocks of this high-level architecture, and their interfaces, with particular focus on those to be standardized as part of the Interface to the Routing System (I2RS).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7921"/>
          <seriesInfo name="DOI" value="10.17487/RFC7921"/>
        </reference>
        <reference anchor="RFC7971">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Deployment Considerations</title>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Scharf" initials="M." surname="Scharf">
              <organization/>
            </author>
            <author fullname="H. Seidel" initials="H." surname="Seidel">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." surname="Previdi">
              <organization/>
            </author>
            <date month="October" year="2016"/>
            <abstract>
              <t>Many Internet applications are used to access resources such as pieces of information or server processes that are available in several equivalent replicas on different hosts.  This includes, but is not limited to, peer-to-peer file sharing applications.  The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource. This memo discusses deployment-related issues of ALTO.  It addresses different use cases of ALTO such as peer-to-peer file sharing and Content Delivery Networks (CDNs) and presents corresponding examples. The document also includes recommendations for network administrators and application designers planning to deploy ALTO, such as recommendations on how to generate ALTO map information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7971"/>
          <seriesInfo name="DOI" value="10.17487/RFC7971"/>
        </reference>
        <reference anchor="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="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="RFC6291">
          <front>
            <title>Guidelines for the Use of the "OAM" Acronym in the IETF</title>
            <author fullname="L. Andersson" initials="L." surname="Andersson">
              <organization/>
            </author>
            <author fullname="H. van Helvoort" initials="H." surname="van Helvoort">
              <organization/>
            </author>
            <author fullname="R. Bonica" initials="R." surname="Bonica">
              <organization/>
            </author>
            <author fullname="D. Romascanu" initials="D." surname="Romascanu">
              <organization/>
            </author>
            <author fullname="S. Mansfield" initials="S." surname="Mansfield">
              <organization/>
            </author>
            <date month="June" year="2011"/>
            <abstract>
              <t>At first glance, the acronym "OAM" seems to be well-known and well-understood.  Looking at the acronym a bit more closely reveals a set of recurring problems that are revisited time and again.</t>
              <t>This document provides a definition of the acronym "OAM" (Operations, Administration, and Maintenance) for use in all future IETF documents that refer to OAM.  There are other definitions and acronyms that will be discussed while exploring the definition of the constituent parts of the "OAM" term.  This memo documents an Internet Best Current  Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="161"/>
          <seriesInfo name="RFC" value="6291"/>
          <seriesInfo name="DOI" value="10.17487/RFC6291"/>
        </reference>
      </references>
    </references>
    <section anchor="alto-ext-model">
      <name>Examples of Extending the ALTO O&amp;M Data Model</name>
      <t>Developers and operators can also extend the 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>An 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-vendor-alto-server-discovery {
  yang-version 1.1;

  namespace "https://example.com/ns/vendor-alto-server-discovery";
  prefix vendor-alto-disc;

  import ietf-alto {
    prefix alto;
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

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

  organization
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

     E-mail: alto-oam-yang@example.com";

  description
    "This module contains a collection of vendor-specific cases of
     server discovery mechanisms for ALTO.";

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "Vendor ALTO Server Discovery Mechanisms: ALTO O&M YANG Model.";
  }

  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 Routing Policy Specification Language (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) number 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 an 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 an IRR query using RPSL.";
        }
      }
    }
    case peeringdb {
      description
        "Use PeeringDB to discover an ALTO server.";
      container peeringdb-params {
        description
          "Configuration for PeeringDB queries.";
        leaf peeringdb-endpoint {
          type inet:uri;
          description
            "Endpoint of PeeringDB API server.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-client-auth">
        <name>An Example Module for Extended Client Authentication Approaches</name>
        <t>The base data model "ietf-alto" only includes the client
authentication approaches directly provided by the HTTP server. However, an
implementation may authenticate clients in different ways. For example, an implementation may
delegate the authentication to a third-party OAuth 2.0 server. The following
example module demonstrates how additional client authentication approaches can
enrich the base data model.</t>
        <t>In this example, the <tt>oauth2</tt> case 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-vendor-alto-auth {
  yang-version 1.1;

  namespace "https://example.com/ns/vendor-alto-auth";
  prefix vendor-alto-auth;

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

  import ietf-alto {
    prefix alto;
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  organization
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

     E-mail: alto-oam-yang@example.com";

  description
    "This module contains a collection of vendor-specific cases of
     client authentication approaches for ALTO.";

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "Vendor ALTO Client Authentication Approaches: ALTO O&M YANG
       Model.";
  }

  augment "/alto:alto/alto:alto-server/alto:auth-client"
        + "/alto:authentication" {
    description
      "Example of extended ALTO client authentication approaches.";
    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-vendor-alto-data-source {
  yang-version 1.1;

  namespace "https://example.com/ns/vendor-alto-data-source";
  prefix vendor-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
      "RFC 8641: 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
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

     E-mail: alto-oam-yang@example.com";

  description
    "This module contains a collection of vendor-specific cases of
     data sources for ALTO.";

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "Vendor ALTO Data Sources: ALTO O&M YANG Model.";
  }

  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(alto:source-type,'
         + '"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>An Example Module for Information Resource Creation Algorithm</name>
        <t>The base data model "ietf-alto" does not include any choices cases
for information resource creation algorithms. But developers may augment the
"ietf-alto" module with definitions for 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-vendor-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
          |  +--rw source-datastore
          |  |       -> /alto:alto/alto-server/data-source/source-id
          |  +--rw topo-name?          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 contains information referring 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. 'source-datastore' refers to the 'source-id' of the operational
<tt>yang-datastore</tt> data source node, and 'topo-name' refers to the 'name' of
the target path in the source datastore.</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-vendor-alto-alg {
  yang-version 1.1;

  namespace "https://example.com/ns/vendor-alto-alg";
  prefix vendor-alto-alg;

  import ietf-alto {
    prefix alto;
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

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

  import example-vendor-alto-data-source {
    prefix alto-ds;
  }

  organization
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

     E-mail: alto-oam-yang@example.com";

  description
    "This module contains a collection of vendor-specific cases of
     information resource creation algorithms for ALTO.";

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "Vendor ALTO Information Resource Creation Algorithms: ALTO O&M
       YANG Model.";
  }

  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";
        container l3-unicast-topo {
          leaf source-datastore {
            type leafref {
              path '/alto:alto/alto:alto-server/alto:data-source'
                 + '/alto:source-id';
            }
            must 'deref(.)/../alto-ds:yang-datastore-source-params'
               + '/alto-ds:datastore = "ietf-datastores:operational"'
               {
              error-message
                "The referenced YANG datastore MUST be operational";
            }
            mandatory true;
            description
              "The data source to YANG datastore.";
          }
          leaf topo-name {
            type leafref {
              path '/alto:alto/alto:alto-server/alto:data-source'
                 + '[alto:source-id = current()/../source-datastore]'
                 + '/alto-ds:yang-datastore-source-params'
                 + '/alto-ds:target-paths/alto-ds:name';
            }
            description
              "The name of the IETF layer 3 unicast topology.";
          }
          description
            "The data source info to an IETF layer 3 unicast
             topology.";
        }
        leaf depth {
          type uint32;
          description
            "The depth of the clustering.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-usage">
        <name>Example Usage</name>
        <t>This section presents a complete example showing how the base data model and
all the vendor extended models above are used to set up an ALTO server and
configure corresponding components (e.g., data source listener, information
resource, access control).</t>
        <artwork><![CDATA[
{
  "ietf-alto:alto": {
    "alto-server": {
      "listen": {
        "https": {
          "tcp-server-parameters": {
            "local-address": "0.0.0.0"
          },
          "alto-server-parameters": {},
          "http-server-parameters": {
            "server-name": "alto.example.com",
            "client-authentication": {
              "users": {
                "user": [
                  {
                    "user-id": "alice",
                    "basic": {
                      "user-id": "alice",
                      "password": "$0$p8ssw0rd"
                    }
                  }
                ]
              }
            }
          },
          "tls-server-parameters": {
            "server-identity": {}
          }
        }
      },
      "server-discovery": {
        "example-vendor-alto-server-discovery:irr-params": {
          "aut-num": 64496
        }
      },
      "auth-client": [
        {
          "client-id": "alice",
          "https-auth-client": {
            "user-id": "alice"
          }
        },
        {
          "client-id": "bob",
          "example-vendor-alto-auth:oauth2": {
            "oauth2-server": "https://auth.example.com/login"
          }
        }
      ],
      "role": [
        {
          "role-name": "group0",
          "client": [
            "alice",
            "bob"
          ]
        }
      ],
      "data-source": [
        {
  "source-id": "test-yang-ds",
  "source-type": "example-vendor-alto-data-source:yang-datastore",
  "feed-interval": 30,
  "example-vendor-alto-data-source:yang-datastore-source-params": {
    "datastore": "ietf-datastores:operational",
    "target-paths": [
      {
        "name": "network-topology",
        "datastore-xpath-filter": "/network-topology:network-topology
/topology[topology-id=bgp-example-ipv4-topology]"
      }
    ],
    "protocol": "restconf",
    "restconf": {
      "listen": {
        "endpoint": [
          {
            "name": "example restconf server",
            "https": {
              "tcp-server-parameters": {
                "local-address": "172.17.0.2"
              },
              "http-client-parameters": {
                "client-identity": {
                  "basic": {
                    "user-id": "carol",
                    "cleartext-password": "secret"
                  }
                }
              }
            }
          }
        ]
      }
    }
  }
        }
      ],
      "resource": [
        {
          "resource-id": "default-network-map",
          "resource-type": "network-map",
          "accepted-role": [
            "group0"
          ],
          "alto-networkmap-params": {
            "is-default": true,
            "example-vendor-alto-alg:l3-unicast-cluster-algorithm": {
              "l3-unicast-topo": {
                "source-datastore": "test-yang-ds",
                "topo-name": "network-topology"
              },
              "depth": 2
            }
          }
        }
      ]
    }
  }
}
]]></artwork>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="ack" numbered="false">
      <name>Acknowledgements</name>
      <t>The authors thank Qin Wu for the help with drafting the initial version of the
YANG modules. Big thanks also to ALTO WG chairs (Mohamed Boucadair and Qin Wu)
and all the directorate reviewers (Adrian Farrel, Jordi Ros Giralt, and Qiao
Xiang) for their thorough reviews, shepherding, and valuable feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
sjIpWkvAA8LY6138m4MIxMP//d//gfD/eVim+5w5Sv3r5xHymTfW5EntbiA+
/o5KfCQHREAsG57xA9UJzRXW+Rx6sb7ye6rTDNtH+F8YtqanSHDZ36JRNeQX
Fl0+J7okjks1PoJaZZaQ2pjws8aBw6d/Rx2iWiAXVUdUMXp9VK1CVngi29Hl
Pf/vY/eyHz8CaU+nF/Hw3RqVrrhs337M537rQ1V3nfb+R6ozvxd4nqsW0xta
TNZkcNU+8/VvmR/0kVjiEb2X54SWszCsTEa7rOo+6wAsn/9n//FRXAOkSWg6
YSLJx/EiXwAFis8//8p+PmcipXGcMU1Rc/gcvTnRM+NOFBO2ZOgDBcLvTLO/
xzp2ox89ApWk6U1moJ/QeOynPh7kTyiTOHuoEkyO/L1X8hx7Czab5Utjlu9g
5GvY8D9Ym9hNFxGBt5oNjasNdRjTtGfwyZK0YcJGd5lWZEVHbh82aBBvl7ZH
5OlH1jnRhw94OgccpJCWFDQL9UjkVgcDgLBNhGxTbXMBYPUZAkgAwP+mSbTJ
nIkQvsnbJ0GEaOBvbDvaNJb+RZb+vEimSwGCbsZe33InpopuLeO7pVp1FAwW
JPm8IDYuWCWKIhd5XuG5qXFjkwZMFDmUyxsfJeL2K50aBJ0XXiwdpY/9Wwxb
j7RkRL5SrqZlRqr9nqhB15pKZxq4Z8qxe7OgUapRfgGj9LQrOgFVZ8XxlK1j
gCIcjTk2ht4b+sVVxTM7MKuY12dxLfCP/2CGZF7Iifmt+FFa7NPRT5HkFUJz
M6u8FF310rY5niwGjKy5Wa9lXQtUyQSK4z89PG11ipsi9A3f6j/q5WTf9gf1
wJ6xi8PYtcayawG8q8H1wMOp6DGNAJT8o8OgEl1F/XQqCa6kuKFa05IRbp48
e/uc55oO78+UgRkWZkEGaJhgYChfbQwTtPxKFS2kwT1lg692RPCcB4LMxSIP
xWTctUwr2GIhekXLsx9UfN3V3Y82Gec97TGoWwP+SEsVVrrxL0Qjurvata9h
GbkL8BPQv01O8EHUHvRol+7rpnzDCHUp7r+3sNdTrXSPLgPpxmtUYsFepxY5
22eLi+r2dMObrtxTmgnnravTanbk7C1J5fl6lHbjudO4ZfXU5Ks5cJBG7cbY
XRYP17ULoXV+cLoveuL0odpcHUfGdeinC2OkL6xQeyzKm3oug9rA8J037aKJ
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
V6Bh/X9Dm1TliWgBAA==

-->

</rfc>
