<?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.33 (Ruby 3.1.4) -->
<?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-07" category="std" consensus="true" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <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-07"/>
    <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>Ida-Rhodes-Straße 2</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="May" day="16"/>
    <area>Networks</area>
    <workgroup>ALTO WG</workgroup>
    <keyword>Automation, Service Provisioning, Control, Operation</keyword>
    <abstract>
      <?line 108?>

<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>
    <?line 116?>

<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 <xref target="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>ALTO:</dt>
        <dd>
          <t>Application-Layer Traffic Optimization</t>
        </dd>
        <dt>CPU:</dt>
        <dd>
          <t>Central Processing Unit</t>
        </dd>
        <dt>DNS:</dt>
        <dd>
          <t>Domain Name System</t>
        </dd>
        <dt>HTTP:</dt>
        <dd>
          <t>Hypertext Transfer Protocol</t>
        </dd>
        <dt>IRR:</dt>
        <dd>
          <t>Internet Routing Registry</t>
        </dd>
        <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>
        <dt>OAuth:</dt>
        <dd>
          <t>Open Authorization</t>
        </dd>
        <dt>PID:</dt>
        <dd>
          <t>Provider-defined Identifier in ALTO</t>
        </dd>
        <dt>TCP:</dt>
        <dd>
          <t>Transmission Control Protocol</t>
        </dd>
        <dt>TLS:</dt>
        <dd>
          <t>Transport Layer Security</t>
        </dd>
        <dt>URI:</dt>
        <dd>
          <t>Uniform Resource Identifier</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. It also indicates the 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> (<xref target="alto-model"/>). The performance monitor
and logging and fault manager need to implement <tt>ietf-alto-stats.yang</tt> (<xref target="alto-stats-model"/>).</t>
        <t>In practice, an ALTO server may not follow this architecture exactly. However, to
implement the YANG modules defined in this document, an ALTO server implementation should contain all the
server components above as a minimal implementation.</t>
        <t>The data broker and algorithm plugins are not in the scope of the data models
defined in this document. User-specified YANG modules can be applied to
different algorithm plugins by augmenting the data model defined in this
document (<xref target="alto-ext-model"/>).</t>
        <t>Generally, the ALTO server components shown in <xref target="alto-ref-arch"/> have the following
interactions with each others:</t>
        <ul spacing="normal">
          <li>Both the server manager and information resource manager will report
statistics data to performance monitor and logging and fault manager.</li>
          <li>The algorithm plugins will register callbacks to the corresponding ALTO
information resources upon the configuration; Once an ALTO information
resource is requested, the registered callback algorithm will be invoked.</li>
          <li>A data source listener will fetch data from the configured data source using
the corresponding data source API in either proactive mode (polling) or
reactive mode (subscription/publication).</li>
          <li>A data source listener will update the preprocessed data to an optional data
broker.</li>
          <li>An algorithm plugin may read data from an optional data broker to calculate
the ALTO information resource.</li>
        </ul>
        <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
  +----------------+  Data Source  ++=============++
  | 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] {alto-client}?
     |  ...
     +--rw alto-server {alto-server}?
        +...
        +--rw auth-client* [client-id]
        |  ...
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*      client-ref
        +--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] {alto-client}?
     |  +--rw client-id                  string
     |  +--rw server-discovery-client
     |     +---u alto-server-discovery-client
     ...
]]></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 {alto-server}?
        +--rw listen
        |  +---u alto-server-listen-stack
        +--rw server-discovery
        |  +---u alto-server-discovery
        +--rw logging-system
        |  +---u alto-logging-system
        +--rw cost-type* [cost-type-name]
        |  +--rw cost-type-name    cost-type-name
        |  +--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      meta-key
        |  +--rw meta-value    binary
        ...
]]></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:
    +-- base-uri?   inet:uri
  grouping alto-server-listen-stack:
    +-- (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
       +--:(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
]]></artwork>
            </figure>
          </section>
          <section anchor="alto-server-discovery-setup">
            <name>ALTO Server Discovery Setup</name>
            <t>In practice, for a large-scale network consisting of multiple administrative
domains, the information about the network may be partitioned and distributed
over multiple ALTO servers. That may require discovery and communication among
different ALTO servers.</t>
            <t>The "ietf-alto" module provides the configuration for how an ALTO server can be
discovered by another ALTO server or client on demand (<xref target="tree-alto-disc-gp"/>).
But it does not contain any configuration for the communication among ALTO
servers because the related solution has not become a standard. Future
documents may extend it to fully support multi-domain scenarios.</t>
            <figure anchor="tree-alto-disc-gp">
              <name>IETF ALTO Server Discovery Grouping Structure</name>
              <artwork align="center"><![CDATA[
  grouping alto-server-discovery:
    +-- (server-discovery-manner)?
       +--:(reverse-dns) {xdom-disc}?
          +-- rdns-naptr-records
             +-- static-prefix*           inet:ip-prefix
             +-- dynamic-prefix-source*   data-source-ref
]]></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:
    +-- (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 {alto-server}?
        ...
        +--rw data-source* [source-id]
        |  +--rw source-id                    source-id
        |  +--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 {alto-server}?
        ...
        +--rw resource* [resource-id]
           +--rw resource-id                 resource-id
           +--rw resource-type               identityref
           +--rw description?                string
           +--rw accepted-role*              role-ref
           +--rw dependency*                 resource-ref
           +--rw alto-ird-params
           |  +--rw delegation    inet:uri
           +--rw alto-networkmap-params
           |  +--rw is-default?   boolean
           |  +--rw filtered?     boolean
           |  +---u algorithm
           +--rw alto-costmap-params
           |  +--rw filtered?             boolean
           |  +---u filter-costmap-cap
           |  +---u algorithm
           +--rw alto-endpointcost-params
           |  +---u filter-costmap-cap
           |  +---u algorithm
           +--rw alto-endpointprop-params
           |  +--rw prop-type*   endpoint-property
           |  +---u algorithm
           +--rw alto-propmap-params {propmap}?
           |  +---u algorithm
           +--rw alto-cdni-params {cdni}?
           |  +---u algorithm
           +--rw alto-update-params {incr-update}?
           |  +---u algorithm
           +--rw resource-limits
              +--rw notify-res-mem-limit?      uint64
              +--rw notify-upd-stream-limit?   uint64
                      {incr-update}?

  notifications:
    +---n alto-resource-event {alto-server}?
       +--ro resource-id                    resource-ref
       +--ro notify-res-mem-threshold?      uint64
       +--ro notify-upd-stream-threshold?   uint64 {incr-update}?

  grouping filter-costmap-cap:
    +-- cost-type-name*            cost-type-ref
    +-- cost-constraints?          boolean
    +-- max-cost-types?            uint32 {multi-cost}?
    +-- testable-cost-type-name*   cost-type-ref {multi-cost}?
    +-- calendar-attributes {cost-calendar}?
       +-- cost-type-name*        cost-type-ref
       +-- time-interval-size     decimal64
       +-- number-of-intervals    uint32
  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>
          <t>Each <tt>resource</tt> entry may also set thresholds of memory usage and active update
streams (if "incr-update" feature is enabled). <xref target="TableThreshold"/> describes
limits that, once exceeded, will trigger notifications to be generated:</t>
          <table anchor="TableThreshold">
            <name>Notification Thresholds.</name>
            <thead>
              <tr>
                <th align="left">Notification Threshold</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">notify-res-mem-limit</td>
                <td align="left">Used to notify high memory utilization of the resource configured to an ALTO server instance. When exceeded, an alto-resource-event will be generated.</td>
              </tr>
              <tr>
                <td align="left">notify-upd-stream-limit</td>
                <td align="left">Used to notify a high number of active update streams that are serviced by an update resource configured to an ALTO server instance. When exceeded, an alto-resource-event will be generated.</td>
              </tr>
            </tbody>
          </table>
        </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 {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    http-user-id-ref
        |     +--:(https)
        |        +--rw https-auth-client
        |                {http:client-auth-supported,
        |                 http:local-users-supported}?
        |     |     +--rw user-id    https-user-id-ref
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*      client-ref
        ...
]]></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:
    +--rw server-level-monitor-config
    |  +--rw time-window-size?   uint32
    +--ro server-level-stats
       +---u server-level-stats
  augment /alto:alto/alto:alto-server/alto:resource:
    +--ro resource-level-stats
       +---u resource-level-stats

  grouping server-level-stats:
    +-- discontinuity-time?    yang:timestamp
    +-- last-report-time?      yang:timestamp
    +-- num-total-req?         yang:counter64
    +-- num-total-succ?        yang:counter64
    +-- num-total-fail?        yang:counter64
    +-- num-total-last-req?    yang:gauge64
    +-- num-total-last-succ?   yang:gauge64
    +-- num-total-last-fail?   yang:gauge64
  grouping network-map-stats:
    +-- num-map-pid?   yang:gauge64
  grouping prop-map-stats:
    +-- num-map-entry?   yang:gauge64
  grouping cdni-stats:
    +-- num-base-obj?   yang:gauge64
  grouping upd-stream-stats:
    +-- num-upd-stream?           yang:gauge64
    +-- num-upd-msg-total?        yang:gauge64
    +-- num-upd-msg-max?          yang:gauge64
    +-- num-upd-msg-min?          yang:gauge64
    +-- num-upd-msg-avg?          yang:gauge64
    +-- num-upd-msg-total-last?   yang:gauge64
    +-- num-upd-msg-max-last?     yang:gauge64
    +-- num-upd-msg-min-last?     yang:gauge64
    +-- num-upd-msg-avg-last?     yang:gauge64
  grouping resource-level-stats:
    +-- discontinuity-time?    yang:timestamp
    +-- last-report-time?      yang:timestamp
    +-- num-res-upd?           yang:counter64
    +-- res-mem-size?          uint64
    +-- res-enc-size?          uint64
    +-- num-res-req?           yang:counter64
    +-- num-res-succ?          yang:counter64
    +-- num-res-fail?          yang:counter64
    +-- num-res-last-req?      yang:gauge64
    +-- num-res-last-succ?     yang:gauge64
    +-- num-res-last-fail?     yang:gauge64
    +-- network-map-stats
    |  +---u network-map-stats
    +-- endpoint-prop-stats
    |  +---u prop-map-stats
    +-- property-map-stats
    |  +---u prop-map-stats
    +-- cdni-stats
    |  +---u cdni-stats
    +-- upd-stream-stats
]]></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> and <tt>num-res-last-*</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-stream</tt> and <tt>num-upd-msg-*</tt> provides statistics for update streams and
messages (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, Section 4";
  }
  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 a set of configured and operational
     parameters of an 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 alto-client {
    description
      "Indicates that the implementation embeds an ALTO client
       instance.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol";
  }

  feature alto-server {
    description
      "Indicates that the implementation embeds an ALTO server
       instance.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol";
  }

  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
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 8.3.5 ";
  }

  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
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 8.1 ";
  }

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

  identity cost-metric {
    description
      "The cost metric indicates what the cost represents.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.1";
  }

  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
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.2
       RFC 9274: A Cost Mode Registry for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  identity cost-source {
    description
      "The cost source indicates the high-level type of the
       data source.";
    reference
      "RFC YYYY: ALTO Performance Cost Metrics, Section 3.1";
  }

  // Identities for ALTO information resources

  identity ird {
    base resource-type;
    description
      "Identity for information resource directory.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 9";
  }

  identity network-map {
    base resource-type;
    description
      "Identity for network map.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 5";
  }

  identity cost-map {
    base resource-type;
    description
      "Identity for cost map.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6";
  }

  identity endpoint-prop {
    base resource-type;
    description
      "Identity for endpoint property service.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 11.4.1";
  }

  identity endpoint-cost {
    base resource-type;
    description
      "Identity for endpoint cost service.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 11.5.1";
  }

  identity property-map {
    base resource-type;
    description
      "Identity for property map.";
    reference
      "RFC 9240: An ALTO Extension: Entity Property Maps";
  }

  identity cdni {
    base resource-type;
    description
      "Identity for Content Delivery Network Interconnection (CDNI)
       advertisement service.";
    reference
      "RFC 9241: Content Delivery Network Interconnection (CDNI)
                 Request Routing: CDNI Footprint and Capabilities
                 Advertisement using ALTO";
  }

  identity update {
    base resource-type;
    description
      "Identity for update stream service.";
    reference
      "RFC 8895: Application-Layer Traffic Optimization (ALTO)
                 Incremental Updates Using Server-Sent Events
                 (SSE)";
  }

  // Identities for cost mode

  identity numerical {
    base cost-mode;
    description
      "This mode indicates that it is safe to perform numerical
       operations";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.2.1";
  }

  identity ordinal {
    base cost-mode;
    description
      "This mode indicates that the cost values in a cost map
       represent ranking";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.2.2";
  }

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

  // 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.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.1.1";
  }

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

  identity delay-ow {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 4.1";
  }

  identity delay-rt {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 4.2";
  }

  identity delay-variation {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 4.3";
  }

  identity lossrate {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 4.4";
  }

  identity hopcount {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 4.5";
  }

  identity tput {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 5.1";
  }

  identity bw-residual {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 5.2";
  }

  identity bw-available {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 5.3";
  }

  // 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
      "RFC YYYY: ALTO Performance Cost Metrics, Section 3.1";
  }

  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
      "RFC YYYY: ALTO Performance Cost Metrics, Section 3.1";
  }

  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
      "RFC YYYY: ALTO Performance Cost Metrics, Section 3.1";
  }

  // Typedefs

  typedef resource-id {
    type string {
      length "1..64";
      pattern '[0-9a-zA-Z\-:@_]*';
    }
    description
      "Type for a resource ID that are used to reference an ALTO
       information resource.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 9.1.1";
  }

  typedef cost-type-name {
    type string {
      length "1..max";
    }
    description
      "Type for the name of a single CostType that can be
       referenced by other ALTO information resources.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 9.2.2";
  }

  typedef meta-key {
    type string {
      length "1..max";
    }
    description
      "Type for a custom meta key of an ALTO server.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 8.4.1";
  }

  typedef endpoint-property {
    type union {
      type resource-specific-endpoint-property;
      type global-endpoint-property;
    }
    description
      "Type for an endpoint property.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 10.8";
  }

  typedef resource-specific-endpoint-property {
    type string {
      length "1..97";
      pattern '[0-9a-zA-Z\-:@_]*\.[0-9a-zA-Z\-:_]*';
    }
    description
      "Type for a resource-specific endpoint property.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 10.8.1";
  }

  typedef global-endpoint-property {
    type string {
      length "1..32";
      pattern '[0-9a-zA-Z\-:_]*';
    }
    description
      "Type for a global endpoint property.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 10.8.2";
  }

  typedef source-id {
    type string {
      length "1..max";
      pattern '[0-9a-zA-Z\-:@_]*';
    }
    description
      "Type for a data source ID that are used to reference a data
       source.";
  }

  typedef role-name {
    type string {
      length "1..max";
      pattern '[0-9a-zA-Z\-:@_]*';
    }
    description
      "Type for a name of a role for role-based access control.";
  }

  // Typedefs for referencing purposes

  typedef cost-type-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:cost-type"
         + "/alto:cost-type-name";
    }
    description
      "Type to reference a cost type name.";
  }

  typedef data-source-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:data-source"
         + "/alto:source-id";
    }
    description
      "Type to reference a data source identifier.";
  }

  typedef http-user-id-ref {
    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";
    }
    description
      "Type to reference an HTTP client user id.";
  }

  typedef https-user-id-ref {
    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";
    }
    description
      "Type to reference an HTTPS client user id.";
  }

  typedef resource-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:resource"
         + "/alto:resource-id";
    }
    description
      "Type to reference a resource identifier.";
  }

  typedef role-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:role"
         + "/alto:role-name";
    }
    description
      "Type to reference a role.";
  }

  typedef client-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:auth-client"
         + "/alto:client-id";
    }
    description
      "Type to reference an authenticated client.";
  }

  // Groupings

  grouping filter-costmap-cap {
    description
      "This grouping defines a data model for
       FilteredCostMapCapabilities.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 11.3.2.4";
    leaf-list cost-type-name {
      type cost-type-ref;
      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-name {
      if-feature "multi-cost";
      type cost-type-ref;
      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
        "RFC 8896: Application-Layer Traffic Optimization (ALTO)
                   Cost Calendar, Section 4.1";
      leaf-list cost-type-name {
        type cost-type-ref;
        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 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.";
    }
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer Traffic
                 Optimization (ALTO) Protocol, Section 5.4.2";
  }

  grouping alto-server {
    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 {
    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;
          }
        }
      }
      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 alto-server-discovery {
    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 method {
      description
        "Selects among available server discovery methods.";
      case reverse-dns {
        if-feature "xdom-disc";
        description
          "Configures 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 data-source-ref;
            description
              "Dynamic IP prefixes collected from data sources.";
          }
        }
      }
    }
  }

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

  grouping alto-logging-system {
    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
            "Provides a set of syslog parameters.";
          leaf config-file {
            type inet:uri {
              pattern 'file:.*';
            }
            description
              "Indicates 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. A single device can implement either alto-client or
       alto-server. No need to implement both.";
    list alto-client {
      if-feature 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 {
        description
          "Specifies a set of parameters for ALTO server discovery.";
        uses alto-server-discovery-client;
      }
    }
    container alto-server {
      if-feature 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;
      }
      container server-discovery {
        description
          "Configures how the ALTO server to be discovered by
           others.";
        uses alto-server-discovery;
      }
      container logging-system {
        description
          "Configure logging system to capture log messages
           generated by the ALTO server.";
        uses alto-logging-system;
      }
      list cost-type {
        key "cost-type-name";
        description
          "Mapping between name and referenced cost type.";
        leaf cost-type-name {
          type cost-type-name;
          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
          "RFC 7285: Application-Layer Traffic Optimization
                     (ALTO) Protocol, Section 8.4.1";
        leaf meta-key {
          type meta-key;
          description
            "Custom meta key";
        }
        leaf meta-value {
          type binary;
          mandatory true;
          description
            "Custom meta value encoded with the base64 encoding
             schema. The encoded value must be a valid JSON
             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. If no authentication method is
             configured, the client must be ignored.";
          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 http-user-id-ref;
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   HTTP 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 https-user-id-ref;
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   HTTPS 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 client-ref;
          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 source-id;
          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
                    "Indicates an on-change subscription.";
                }
              }
              case periodic {
                description
                  "The data source is requested to periodically
                   publish an update.";
                leaf feed-interval {
                  type uint32;
                  units "seconds";
                  mandatory true;
                  description
                    "Specifies the duration of time that should
                     occur between periodic push updates, in units
                     of seconds. If it is set to zero, it is
                     equivalent to the on-change mode.";
                }
              }
            }
          }
          case proactive {
            description
              "Configuration for the data source listener to
               proactively pull data from the data source.";
            leaf poll-interval {
              type uint32;
              units "seconds";
              mandatory true;
              description
                "Polling interval in seconds for proactive mode. If
                 it is set to zero, the data source listener will
                 never pull data periodically. The data can still
                 be pulled when an algorithm plugin of an
                 information resource calls this data source
                 listener. This can be useful for some on-demand
                 settings.";
            }
          }
        }
        choice source-params {
          description
            "Data source specific configuration.";
          reference
            "RFC XXXX: YANG Data Models for the Application-Layer
                       Traffic Optimization (ALTO) Protocol,
                       Section 5.4.1";
        }
      }
      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 role-ref;
          description
            "Roles allowed to access this information resource.";
        }
        leaf-list dependency {
          type resource-ref;
          description
            "A list of dependent information resources.";
        }
        container alto-ird-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:ird")';
          description
            "IRD-specific configuration.";
          leaf delegation {
            type inet:uri;
            mandatory true;
            description
              "Upstream IRD to be delegated.";
          }
        }
        container alto-networkmap-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:network-map")';
          description
            "Filtered Network Map specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Sections 11.2.1 and
                       11.3.1";
          leaf is-default {
            type boolean;
            description
              "Sets whether this is the default network map.";
          }
          leaf filtered {
            type boolean;
            default false;
            description
              "Configures whether filtered network map is
               supported.";
          }
          uses algorithm;
        }
        container alto-costmap-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:cost-map")';
          description
            "Filtered Cost Map specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Sections 11.2.2 and
                       11.3.2";
          leaf filtered {
            type boolean;
            description
              "Configures whether filtered cost map is supported.";
          }
          uses filter-costmap-cap;
          uses algorithm;
        }
        container alto-endpointcost-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:endpoint-cost")';
          description
            "Endpoint Cost Service specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Section 11.5";
          uses filter-costmap-cap;
          uses algorithm;
        }
        container alto-endpointprop-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:endpoint-prop")';
          description
            "Endpoint Cost Service specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Section 11.5";
          leaf-list prop-type {
            type endpoint-property;
            min-elements 1;
            description
              "Supported endpoint properties.";
          }
          uses algorithm;
        }
        container alto-propmap-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:property-map")';
          if-feature "propmap";
          description
            "(Filtered) Entity Property Map specific
             configuration.";
          reference
            "RFC 9240: An ALTO Extension: Entity Property Maps";
          uses algorithm;
        }
        container alto-cdni-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:cdni")';
          if-feature "cdni";
          description
            "CDNi specific configuration.";
          reference
            "RFC 9241: Content Delivery Network Interconnection
                       (CDNI) Request Routing: CDNI Footprint and
                       Capabilities Advertisement using ALTO";
          uses algorithm;
        }
        container alto-update-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:update")';
          if-feature "incr-update";
          description
            "Incremental Updates specific configuration.";
          reference
            "RFC 8895: Application-Layer Traffic Optimization
                       (ALTO) Incremental Updates Using Server-Sent
                       Events (SSE)";
          uses algorithm;
        }
        container resource-limits {
          description
            "Sets resource limits.";
          leaf notify-res-mem-limit {
            type uint64;
            units "bytes";
            description
              "Notification of resource memory usage.

               Notification must be generated when the defined
               threshold is reached.";
          }
          leaf notify-upd-stream-limit {
            when 'derived-from-or-self(../../resource-type,'
               + '"alto:update")';
            if-feature "incr-update";
            type uint64;
            description
              "Notification of number of active update streams.

               Notification must be generated when the defined
               threshold is reached.";
          }
        }
      }
    }
  }

  // Notifications

  notification alto-resource-event {
    if-feature alto-server;
    description
      "Notifications must be generated when notify-res-mem-limit
       and/or notify-upd-stream-limit thresholds are reached.";
    leaf resource-id {
      type resource-ref;
      mandatory true;
      description
        "Resource identifier.";
    }
    leaf notify-res-mem-threshold {
      type uint64;
      units "bytes";
      description
        "The notify-res-mem-limit threshold has been fired.";
    }
    leaf notify-upd-stream-threshold {
      if-feature "incr-update";
      type uint64;
      description
        "The notify-upd-stream-limit threshold has been fired.";
    }
  }
}
]]></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, Section 3";
  }
  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: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  // Groupings

  grouping server-level-stats {
    description
      "This grouping defines statistics for server-level
       monitoring.";
    leaf discontinuity-time {
      type yang:timestamp;
      description
        "The time on the most recent occasion at which the ALTO
         server suffered a discontinuity. This must be initialized
         when the ALTO server is configured or rebooted.";
    }
    leaf last-report-time {
      type yang:timestamp;
      description
        "The time on the most recent occasion at which the
         statistics were reported.";
    }
    leaf num-total-req {
      type yang:counter64;
      description
        "The total number of ALTO requests received by the ALTO
         server.";
    }
    leaf num-total-succ {
      type yang:counter64;
      description
        "The total number of successful responses sent by the ALTO
         server.";
    }
    leaf num-total-fail {
      type yang:counter64;
      description
        "The total number of failed responses sent by the ALTO
         server.";
    }
    leaf num-total-last-req {
      type yang:gauge64;
      description
        "The total number of ALTO requests received by the ALTO
         server within the last time window. The duration of the
         time window is configured by time-window-size parameter.";
    }
    leaf num-total-last-succ {
      type yang:gauge64;
      description
        "The total number of successful responses sent by the ALTO
         server within the last time window. The duration of the
         time window is configured by time-window-size parameter.";
    }
    leaf num-total-last-fail {
      type yang:gauge64;
      description
        "The total number of failed responses sent by the ALTO
         server within the last time window. The duration of the
         time window is configured by time-window-size parameter.";
    }
  }

  grouping network-map-stats {
    description
      "This grouping defines resource-specific statstics for the
       network map service only.";
    leaf num-map-pid {
      type yang:gauge64;
      description
        "Number of PIDs contained in the network map.";
    }
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 5";
  }

  grouping prop-map-stats {
    description
      "This grouping defines resource-specific statstics for the
       endpoint property or property map service only.";
    leaf num-map-entry {
      type yang:gauge64;
      description
        "Number of ALTO entities contained in the property map.";
    }
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 11.4.1
       RFC 9240: An ALTO Extension: Entity Property Maps";
  }

  grouping cdni-stats {
    description
      "This grouping defines resource-specific statstics for the
       CDNI advertisement service only.";
    leaf num-base-obj {
      type yang:gauge64;
      description
        "Number of base CDNi advertisement objects contained in the
         CDNI resource.";
    }
    reference
      "RFC 9241: Content Delivery Network Interconnection (CDNI)
                 Request Routing: CDNI Footprint and Capabilities
                 Advertisement using ALTO";
  }

  grouping upd-stream-stats {
    description
      "This grouping defines resource-specific statstics for the
       update stream service only.";
    leaf num-upd-stream {
      type yang:gauge64;
      description
        "Number of active update streams connected to the update
         stream service.";
    }
    leaf num-upd-msg-total {
      type yang:gauge64;
      description
        "Total number of update messages sent to all the active
         update streams.";
    }
    leaf num-upd-msg-max {
      type yang:gauge64;
      description
        "The maximum value over the total number of update messages
         sent to each active update stream. Assume there are 3
         active update streams A, B, and C with 4, 3, and 2 update
         messages sent to them respectively, the value of this
         metric is 4. After a while, if there is no new update
         message sent to any update stream, but the update stream A
         is closed, then the value of this metric is updated to
         3.";
    }
    leaf num-upd-msg-min {
      type yang:gauge64;
      description
        "The minimum value over the total number of update messages
         sent to each active update stream. The procedure is similar
         to num-msg-max.";
    }
    leaf num-upd-msg-avg {
      type yang:gauge64;
      description
        "The average value over the total number of update messages
         sent to each active update stream. The procedure is similar
         to num-msg-max.";
    }
    leaf num-upd-msg-total-last {
      type yang:gauge64;
      description
        "Total number of update messages sent to all the active
         update streams within the last time window. The duration
         of the time window is configured by time-window-size
         parameter.";
    }
    leaf num-upd-msg-max-last {
      type yang:gauge64;
      description
        "The maximum value over the number of update messages sent
         to each active update stream within the last time window.
         The procedure is similar to num-msg-max, but only count
         the update messages within the last time window. The
         duration of the time window is configured by
         time-window-size parameter.";
    }
    leaf num-upd-msg-min-last {
      type yang:gauge64;
      description
        "The minimal value over the number of update messages sent
         to each active update stream within the last time window.
         The procedure is similar to num-msg-max, but only count
         the update messages within the last time window. The
         duration of the time window is configured by
         time-window-size parameter.";
    }
    leaf num-upd-msg-avg-last {
      type yang:gauge64;
      description
        "The average value over the number of update messages sent
         to each active update stream within the last time window.
         The procedure is similar to num-msg-max, but only count
         the update messages within the last time window. The
         duration of the time window is configured by
         time-window-size parameter.";
    }
    reference
      "RFC 8895: Application-Layer Traffic Optimization (ALTO)
                 Incremental Updates Using Server-Sent Events
                 (SSE)";
  }

  grouping resource-level-stats {
    description
      "This grouping defines statistics for resource-level
       monitoring.";
    leaf discontinuity-time {
      type yang:timestamp;
      description
        "The time on the most recent occasion at which the ALTO
         service providing the information resource suffered a
         discontinuity. This must be initialized when the ALTO
         information resource is configured or the ALTO server is
         rebooted.";
    }
    leaf last-report-time {
      type yang:timestamp;
      description
        "The time on the most recent occasion at which the
         statistics are reported.";
    }
    leaf num-res-upd {
      type yang:counter64;
      description
        "The number of version updates since the information
         resource was created.";
    }
    leaf res-mem-size {
      type uint64;
      units "bytes";
      description
        "Memory size utilized by the information resource.";
    }
    leaf res-enc-size {
      type uint64;
      units "bytes";
      description
        "Size of JSON encoded data of the information resource.";
    }
    leaf num-res-req {
      type yang:counter64;
      description
        "The total number of ALTO requests to this information
         resource.";
    }
    leaf num-res-succ {
      type yang:counter64;
      description
        "The total number of successful responses for requests to
         this information resource.";
    }
    leaf num-res-fail {
      type yang:counter64;
      description
        "The total number of failed responses for requests to this
         information resource.";
    }
    leaf num-res-last-req {
      type yang:gauge64;
      description
        "The number of ALTO requests to this information resource
         within the last time window. The duration of the time
         window is configured by time-window-size parameter.";
    }
    leaf num-res-last-succ {
      type yang:gauge64;
      description
        "The number of successful responses for requests to this
         information resource within the last time window. The
         duration of the time window is configured by
         time-window-size parameter.";
    }
    leaf num-res-last-fail {
      type yang:gauge64;
      description
        "The number of failed responses for requests to this
         information resource within the last time window. The
         duration of the time window is configured by
         time-window-size parameter.";
    }
    container network-map-stats {
      when 'derived-from-or-self(../../alto:resource-type,'
         + '"alto:network-map")';
      description
        "Resource-specific statistics for network map
         service only.";
      uses network-map-stats;
    }
    container endpoint-prop-stats {
      when 'derived-from-or-self(../../alto:resource-type,'
         + '"alto:endpoint-prop")';
      description
        "Resource-specific statistics for endpoint property
         service only.";
      uses prop-map-stats;
    }
    container property-map-stats {
      when 'derived-from-or-self(../../alto:resource-type,'
         + '"alto:property-map")';
      description
        "Resource-specific statistics for entity property map
         service only.";
      uses prop-map-stats;
    }
    container cdni-stats {
      when 'derived-from-or-self(../../alto:resource-type,'
         + '"alto:cdni")';
      description
        "Resource-specific statistics for CDNI advertisement
         service only.";
      uses cdni-stats;
    }
    container upd-stream-stats {
      when 'derived-from-or-self(../../alto:resource-type,'
         + '"alto:update")';
      description
        "Resource-specific statistics for update stream service
         only.";
      uses upd-stream-stats;
    }
  }

  // Augment modules to add statistics

  augment "/alto:alto/alto:alto-server" {
    description
      "Augmenting statistics and configuration parameters for
       server-level monitoring.";
    container server-level-monitor-config {
      description
        "Configuration parameters for server-level monitoring.";
      leaf time-window-size {
        type uint32;
        units "seconds";
        default "300";
        description
          "Duration of the time window within that the statistics
           are reported.";
      }
    }
    container server-level-stats {
      config false;
      description
        "Top-level statistics for the whole ALTO server.";
      uses server-level-stats;
    }
  }

  augment "/alto:alto/alto:alto-server/alto:resource" {
    description
      "Augmenting statistics and configuration parameters for
       resource-level monitoring.";
    container resource-level-stats {
      config false;
      description
        "Common statistics for each information resource.";
      uses resource-level-stats;
    }
  }
}
]]></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 modules 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
in network environments. The NACM "default-deny-write" extension has not been
set for any data nodes defined in these modules.</t>
      <t>However, there are a number of writable data nodes defined in these YANG
modules that are considered vulnerable in network environments. Write
operations to these data nodes without proper protection can have a negative
effect. These are the data nodes and their vulnerable:</t>
      <dl>
        <dt>feed-interval:</dt>
        <dd>
          <t>A malicious client could attempt to set a very low/large value to this
  node. Setting a very low value could attack the data source. And setting a
  very large value would lead to maintaining stale data in the ALTO server.</t>
        </dd>
        <dt>poll-interval:</dt>
        <dd>
          <t>A malicious client could attempt to set a very low/large value to this
  node. Setting a very low value could attack the data source. And setting a
  very large value would lead to maintaining stale data in the ALTO server.</t>
        </dd>
      </dl>
      <t>The "ietf-alto" supports an HTTP listen mode to cover cases where the ALTO
server stack does not handle the TLS termination itself, but is handled by a
separate component. Special care should be considered when such mode is
enabled. Note that the default listen mode is "https".</t>
      <t>Also, please be aware that these modules include choice nodes that can be augmented
by other extended modules. The augmented data nodes may be considered sensitive
or vulnerable in some network environments. For instance, an augmented case of
the "source-params" choice in "data-source" may include authentication
information about how to access a data source including private network
information. The "yang-datastore" case in <xref target="example-data-source"/> is such an
example. The "restconf" and "netconf" nodes in it may reveal the access to a
private YANG datastore. Thus, those extended modules may have the NACM
extension "default-deny-all" set.</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="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="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="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="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="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="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="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="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="17" month="April" year="2023"/>
            <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-16"/>
        </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="17" month="April" year="2023"/>
            <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:

   *  2023-04-17 --&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-33"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-http-client-server">
          <front>
            <title>YANG Groupings for HTTP 1.1/2.0 Clients and HTTP Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="17" month="April" year="2023"/>
            <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:

   *  2023-04-17 --&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-13"/>
        </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="17" month="April" year="2023"/>
            <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:

   *  2023-04-17 --&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-29"/>
        </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="17" month="April" year="2023"/>
            <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:

   *  2023-04-17 --&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-29"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7921">
          <front>
            <title>An Architecture for the Interface to the Routing System</title>
            <author fullname="A. Atlas" initials="A." surname="Atlas">
              <organization/>
            </author>
            <author fullname="J. Halpern" initials="J." surname="Halpern">
              <organization/>
            </author>
            <author fullname="S. Hares" initials="S." surname="Hares">
              <organization/>
            </author>
            <author fullname="D. Ward" initials="D." surname="Ward">
              <organization/>
            </author>
            <author fullname="T. Nadeau" initials="T." surname="Nadeau">
              <organization/>
            </author>
            <date month="June" year="2016"/>
            <abstract>
              <t>This document describes the IETF architecture for a standard, programmatic interface for state transfer in and out of the Internet routing system.  It describes the high-level architecture, the building blocks of this high-level architecture, and their interfaces, with particular focus on those to be standardized as part of the Interface to the Routing System (I2RS).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7921"/>
          <seriesInfo name="DOI" value="10.17487/RFC7921"/>
        </reference>
        <reference anchor="RFC7971">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Deployment Considerations</title>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Scharf" initials="M." surname="Scharf">
              <organization/>
            </author>
            <author fullname="H. Seidel" initials="H." surname="Seidel">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." surname="Previdi">
              <organization/>
            </author>
            <date month="October" year="2016"/>
            <abstract>
              <t>Many Internet applications are used to access resources such as pieces of information or server processes that are available in several equivalent replicas on different hosts.  This includes, but is not limited to, peer-to-peer file sharing applications.  The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource. This memo discusses deployment-related issues of ALTO.  It addresses different use cases of ALTO such as peer-to-peer file sharing and Content Delivery Networks (CDNs) and presents corresponding examples. The document also includes recommendations for network administrators and application designers planning to deploy ALTO, such as recommendations on how to generate ALTO map information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7971"/>
          <seriesInfo name="DOI" value="10.17487/RFC7971"/>
        </reference>
        <reference anchor="RFC8346">
          <front>
            <title>A YANG Data Model for Layer 3 Topologies</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm">
              <organization/>
            </author>
            <author fullname="J. Medved" initials="J." surname="Medved">
              <organization/>
            </author>
            <author fullname="R. Varga" initials="R." surname="Varga">
              <organization/>
            </author>
            <author fullname="X. Liu" initials="X." surname="Liu">
              <organization/>
            </author>
            <author fullname="H. Ananthakrishnan" initials="H." surname="Ananthakrishnan">
              <organization/>
            </author>
            <author fullname="N. Bahadur" initials="N." surname="Bahadur">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for Layer 3 network topologies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8346"/>
          <seriesInfo name="DOI" value="10.17487/RFC8346"/>
        </reference>
        <reference anchor="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>
    <?line 2723?>

<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
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  augment "/alto:alto/alto:alto-server/alto:server-discovery"
        + "/alto:method" {
    description
      "Examples of server discovery mechanisms provided by the ALTO
       server.";
    case internet-routing-registry {
      description
        "Update descr attributes of an aut-num class in an 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
            "Specifies an identifier that refers to the org object
             of the organization record in PeeringDB.";
        }
      }
    }
  }

  augment "/alto:alto/alto:alto-client"
        + "/alto:server-discovery/alto:method" {
    description
      "Examples of server discovery mechanisms used by an ALTO
       client.";
    case internet-routing-registry {
      description
        "Use 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
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  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: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  import ietf-datastores {
    prefix ds;
    reference
      "RFC 8342: 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
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

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

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

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

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

  augment "/alto:alto/alto:alto-server/alto:data-source"
        + "/alto:source-params" {
    description
      "Example of data source for YANG datastore.";
    case yang-datastore {
      when 'derived-from-or-self(alto:source-type,'
         + '"yang-datastore")';
      description
        "Example data source for local or remote YANG datastore.";
      container yang-datastore-source-params {
        description
          "YANG datastore specific configuration.";
        leaf datastore {
          type ds:datastore-ref;
          mandatory true;
          description
            "Reference of the datastore from which to get data.";
        }
        list target-paths {
          key name;
          description
            "XML Path Language (XPath) to subscribed YANG datastore
             node or subtree.";
          leaf name {
            type string;
            description
              "Name of the supported XPath or subtree filters.";
          }
          uses yp:selection-filter-types;
        }
        leaf protocol {
          type identityref {
            base protocol-type;
          }
          description
            "Indicates the protocol that is used to access the YANG
             datastore.";
        }
        container restconf {
          uses rcc:restconf-client-app-grouping {
            when 'derived-from-or-self(../protocol, "restconf")';
          }
          description
            "Parameters for the RESTCONF endpoint of the YANG
             datastore.";
        }
        container netconf {
          uses ncc:netconf-client-app-grouping {
            when 'derived-from-or-self(../protocol, "netconf")';
          }
          description
            "Parameters for the 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:alto-networkmap-params/alto:algorithm:
    +--:(l3-unicast-cluster)
       +--rw l3-unicast-cluster-algorithm
          +--rw l3-unicast-topo
          |  +--rw source-datastore    alto:data-source-ref
          |  +--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
      "RFC 8342: 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
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  augment "/alto:alto/alto:alto-server/alto:resource"
        + "/alto:alto-networkmap-params/alto:algorithm" {
    description
      "Example of a network map creation algorithm.";
    case l3-unicast-cluster {
      description
        "Example algorithm translating a Layer 3 unicast topology
         of Interface to the Routing System (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 alto:data-source-ref;
            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[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "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 Adrian Farrel, Jordi Ros Giralt, Luis M. Contreras, and Qiao
Xiang for their thorough reviews, shepherding, and valuable feedback.</t>
      <t>Thanks to Dan Romascanu for the opsdir review, Andy Bierman for the yangdoctors
review, and Spencer Dawkins for the tsvart review.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
9ZgAw/8PJ830UQy5AQA=

-->

</rfc>
