<?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.7.30 (Ruby 2.6.10) -->
<?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-18" category="std" consensus="true" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="ALTO O&amp;M YANG">YANG Data Models for the Application-Layer Traffic Optimization (ALTO) Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-alto-oam-yang-18"/>
    <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</organization>
      <address>
        <postal>
          <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>Deutsche-Telekom-Allee 9</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="2026" month="February" day="04"/>
    <area>Networks</area>
    <workgroup>ALTO WG</workgroup>
    <keyword>Automation, Service Provisioning, Control, Operation</keyword>
    <abstract>
      <?line 108?>

<t>This document defines a YANG data model for Operations, Administration, and
Maintenance (OAM) &amp; Management of the Application-Layer Traffic Optimization (ALTO)
Protocol. The operator of an ALTO server can use this data model to (1) set
up the ALTO server, (2) configure server discovery, (3) create, update and
remove ALTO information resources, (4) manage the access control of each ALTO
information resource, and (5) collect statistical data from the ALTO server. The
application provider can also use this data model to configure ALTO clients
to communicate with known ALTO servers.</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 119?>

<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"/>.</t>
      <t>The operator of an ALTO server can use this data model to:</t>
      <ul spacing="normal">
        <li>
          <t>set up the ALTO server,</t>
        </li>
        <li>
          <t>configure server discovery,</t>
        </li>
        <li>
          <t>create, update and remove ALTO information resources,</t>
        </li>
        <li>
          <t>manage the access control of each ALTO information resource,</t>
        </li>
        <li>
          <t>collect statistical data of the ALTO server.</t>
        </li>
      </ul>
      <t>The application provider can also use this data model to configure ALTO clients
to communicate with known ALTO servers.</t>
      <t><xref target="scope"/> describes what is and is not in 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: <xref target="RFC8189"/>, <xref target="RFC8895"/>,
<xref target="RFC8896"/>, <xref target="RFC9240"/>, <xref target="RFC9241"/>, <xref target="RFC9274"/>, <xref target="RFC9275"/>, and
<xref target="RFC9439"/>.</t>
      <t>The detailed design of the data model is illustrated in <xref target="alto-model"/> and
<xref target="alto-stats-model"/>. Some examples of how to extend this data model for
specific ALTO server implementations are shown in <xref target="alto-ext-model"/>.</t>
      <t>The YANG data models in this document conform to the Network Management Datastore Architecture (NMDA) defined in <xref target="RFC8342"/>.</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>The complete name of a data node or data model object includes a prefix, which
indicates the YANG module in which the name is defined. In this document, the
prefix is omitted when the YANG module is clear from the context; otherwise,
the prefix is included. The prefixes indicating the corresponding YANG modules
are 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="RFC9911"/></td>
            </tr>
            <tr>
              <td align="left">inet</td>
              <td align="left">ietf-inet-types</td>
              <td align="left">
                <xref target="RFC9911"/></td>
            </tr>
            <tr>
              <td align="left">ds</td>
              <td align="left">ietf-datastores</td>
              <td align="left">
                <xref target="RFC8342"/></td>
            </tr>
            <tr>
              <td align="left">yp</td>
              <td align="left">ietf-yang-push</td>
              <td align="left">
                <xref target="RFC8641"/></td>
            </tr>
            <tr>
              <td align="left">ts</td>
              <td align="left">ietf-truststore</td>
              <td align="left">
                <xref target="RFC9641"/></td>
            </tr>
            <tr>
              <td align="left">tcp</td>
              <td align="left">ietf-tcp-server</td>
              <td align="left">
                <xref target="RFC9643"/></td>
            </tr>
            <tr>
              <td align="left">tls</td>
              <td align="left">ietf-tls-server</td>
              <td align="left">
                <xref target="RFC9645"/></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>
            <tr>
              <td align="left">ncc</td>
              <td align="left">ietf-netconf-client</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-netconf-client-server"/></td>
            </tr>
            <tr>
              <td align="left">rcc</td>
              <td align="left">ietf-restconf-client</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-restconf-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>
            <t>GGGG --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-http-client-server"/></t>
          </li>
          <li>
            <t>HHHH --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-netconf-client-server"/></t>
          </li>
          <li>
            <t>IIII --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-restconf-client-server"/></t>
          </li>
          <li>
            <t>XXXX --&gt; the assigned RFC number for this draft</t>
          </li>
        </ul>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="sec-req">
      <name>Design Scope and Requirements</name>
      <section anchor="scope">
        <name>Scope of Data Models 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>
            <t>Deploying an ALTO server/client.</t>
          </li>
          <li>
            <t>Operating and managing an ALTO server/client.</t>
          </li>
          <li>
            <t>Configuring functionality/capability configuration of ALTO services.</t>
          </li>
          <li>
            <t>Monitoring ALTO-related performance metrics.</t>
          </li>
        </ul>
        <t>This document does not normatively define any data model related to a specific
implementation, including:</t>
        <ul spacing="normal">
          <li>
            <t>Data structures for how to store/deliver ALTO information resources (e.g.,
database schema to store a network map).</t>
          </li>
          <li>
            <t>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"/>)</t>
          </li>
        </ul>
        <t>Likewise, the specification does not cover considerations that are specific to the ALTO Transport Information Publication Service (TIPS) <xref target="RFC9569"/>. Specifically, considerations related to HTTP/3 are out of scope.</t>
        <t>For convenience, examples of how related extensions can be defined are provided in the Appendices.</t>
      </section>
      <section anchor="requirements">
        <name>Basic Requirements</name>
        <t>Based on recommendations in <xref target="RFC7285"/> and <xref target="RFC7971"/>, the
data models provided by this document satisfy 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 basic configuration to receive data from 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 models for ALTO O&amp;M should
allow for augmentation to support potential future extensions.</t>
        <!-- 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 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 list "alto-client" and a single "alto-server" container.</t>
        <t>The "alto-client" list 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" contains a list of
client-side configurations. Each "alto-client" entry contains the following
data nodes:</t>
        <dl>
          <dt>"client-id":</dt>
          <dd>
            <t>A unique identifier that can be referenced by other applications.</t>
          </dd>
          <dt>"server-discovery-client":</dt>
          <dd>
            <t>A container that is used to configure how this ALTO client discovers an ALTO server.</t>
          </dd>
        </dl>
        <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
     |     +---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 for 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 container "listen" contains all the data nodes for the whole server listen stack
across TCP, TLS, HTTP and application 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>
            <t>The "transport" choice node enables which protocol layers to be configured. By
default, two cases are defined for different deployment scenarios:</t>
            <ul spacing="normal">
              <li>
                <t>The "http" case is provided to support scenarios where the TLS-termination is
handled by other external components, e.g., reverse proxies or ingress
controllers.</t>
              </li>
              <li>
                <t>The "https" case is provided to support scenarios where the whole HTTPS
server listen stack including TLS is handled by the ALTO server itself.</t>
              </li>
            </ul>
          </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"/>).
However, 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:
    +-- (method)?
       +--:(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
as suggested 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 "dynamic" 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 "static" and "dynamic" lists will
be translated into DNS NAPTR resource records for server discovery. The
"server-discovery-manner" 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 shown 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 <xref target="RFC5424"/> 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 "logging-system" 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>
              <t>The "cost-type" list is the registry for the cost types that can be used in the
ALTO server.</t>
            </li>
            <li>
              <t>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).</t>
            </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 source-params
        ...
]]></artwork>
          </figure>
          <t>As shown in <xref target="tree-data-src"/>, a "data-source" list entry includes:</t>
          <ul spacing="normal">
            <li>
              <t>A unique "source-id" for resource creation algorithms to reference.</t>
            </li>
            <li>
              <t>The "source-type" attribute to declare the type of the data source.</t>
            </li>
            <li>
              <t>The "source-params" to specify where and how to query the data.</t>
            </li>
          </ul>
          <t>The "data-source/source-params" node can be augmented for different types of
data sources. Note that the purpose of this node is not to fully set up the
communication mechanisms for specific data sources, but to maintain how data
sources are configured and expose them to the ALTO server.</t>
          <t>This data model only includes a basic structure 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 in <xref target="requirements"/>, the ALTO server instance contains a list of "resource"
entries (<xref target="tree-alto-server-rsc"/>). Each "resource" entry contains the data nodes 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 "resource" entry provides data nodes defining how to create or update
an ALTO information resource. Adding a new "resource" entry notifies the ALTO
server to create a new ALTO information resource. Updating an existing
"resource" 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 "resource" 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 "accepted-role" node containing a list of "role-name"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 "resource-type", the "resource" entry may also include a
"dependency" node containing the "resource-id" of the dependent ALTO information
resources (Section 9.1.5 of <xref target="RFC7285"/>).</t>
          <t>For each type of ALTO information resource, the "resource" entry may also need
type-specific parameters. These type-specific parameters can be split into two categories:</t>
          <ol spacing="normal" type="1"><li>
              <t>One category of the type-specific parameters is common for the same type
of ALTO information resource. They declare the Capabilities attribute of the ALTO
information resource (Section 9.1.3 of <xref target="RFC7285"/>).</t>
            </li>
            <li>
              <t>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 "algorithm" node to declare algorithm-specific input
parameters.</t>
            </li>
          </ol>
          <t>Except for the "ird" resource, all the other types of "resource" entries have
an augmented "algorithm" node. The augmented "algorithm" node can reference data
sources subscribed by the "data-source" entries (See <xref target="data-source"/>). An
example of extending the "algorithm" node for a specific type of "resource" is
included in <xref target="example-alg"/>.</t>
          <t>The developer does not have to customize the creation algorithm of the "ird"
resource. The default "ird" resource will be created automatically based on all
the added "resource" entries. The delegated "ird" resource will be created as a
static ALTO information resource (Section 9.2.4 of <xref target="RFC7285"/>).</t>
          <t>Each "resource" 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>To satisfy R-3 in <xref target="requirements"/> and 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 tls-auth-client
        |                {http:client-auth-supported}?
        |           +--rw ca-cert {tls:client-auth-x509-cert}?
        |           |  +---u inline-or-truststore-ca-cert-ref
        |           +--rw ee-cert {tls:client-auth-x509-cert}?
        |           |  +---u inline-or-truststore-ee-cert-ref
        |           +--rw raw-public-key
        |           |       {tls:client-auth-raw-public-key}?
        |           |  +---u inline-or-truststore-public-key-ref
        |           +--rw tls12-psks?       empty
        |           |       {tls:client-auth-tls12-psk}?
        |           +--rw tls13-epsks?      empty
        |                   {tls:client-auth-tls13-epsk}?
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*      client-ref
        ...
]]></artwork>
          </figure>
          <t>The structure shown in <xref target="tree-auth"/> can be used to configure the role-based access control:</t>
          <ul spacing="normal">
            <li>
              <t>"auth-client" 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 or TLS server, but the
operators or future documents can augment the "authentication" choice for
different authentication mechanisms.</t>
            </li>
            <li>
              <t>"role" 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 "role-name" can be referenced by the "accepted-role" list of a
"resource". If an authenticated ALTO client is included in any roles with
access permission to a resource, the client is granted access to that
resource.</t>
            </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 indicate server failures (<xref target="tree-stat"/>).</t>
        <t>More specifically, "num-total-*" and "num-total-last-*" provide server-level
failure counters; "num-res-*" and "num-res-last-*" provide 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>
            <t>Requests and responses for each information resource</t>
          </li>
          <li>
            <t>CPU and memory utilization</t>
          </li>
          <li>
            <t>ALTO map updates</t>
          </li>
          <li>
            <t>Number of PIDs</t>
          </li>
          <li>
            <t>ALTO map sizes</t>
          </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>
            <t>"num-map-entry" and "num-base-obj" provide measurement for number of generic
ALTO entities (for <xref target="RFC9240"/> and <xref target="RFC9241"/>)</t>
          </li>
          <li>
            <t>"num-upd-stream" and "num-upd-msg-*" provide statistics for update streams and
messages (for <xref target="RFC8189"/>)</t>
          </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>
            <t>Total amount and distribution of traffic</t>
          </li>
          <li>
            <t>Application performance</t>
          </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@2026-02-04.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 9911: Common YANG Data Types, Section 4";
  }
  import ietf-truststore {
    prefix ts;
    reference
      "RFC 9641: A YANG Data Model for a Truststore";
  }
  import ietf-tcp-server {
    prefix tcp;
    reference
      "RFC 9643: YANG Groupings for TCP Clients and TCP Servers";
  }
  import ietf-tls-server {
    prefix tls;
    reference
      "RFC 9645: 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) 2026 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 2026-02-04 {
    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 9439: 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 9439: 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
      "One-way delay.";
    reference
      "RFC 9439: ALTO Performance Cost Metrics, Section 4.1";
  }

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

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

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

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

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

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

  identity bw-available {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "Available bandwidth.";
    reference
      "RFC 9439: 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 9439: 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 9439: 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 9439: 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";
    }
    description
      "Type for a data source ID that are used to reference a data
       source.";
  }

  typedef role-name {
    type string {
      length "1..max";
    }
    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 inline-ca-cert-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:listen"
         + "/alto:https/alto:tls-server-parameters"
         + "/alto:client-authentication/alto:ca-certs"
         + "/alto:inline-definition/alto:certificate"
         + "/alto:name";
    }
    description
      "Type to reference a TLS CA certificate.";
  }

  typedef inline-ee-cert-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:listen"
         + "/alto:https/alto:tls-server-parameters"
         + "/alto:client-authentication/alto:ee-certs"
         + "/alto:inline-definition/alto:certificate"
         + "/alto:name";
    }
    description
      "Type to reference a TLS EE certificate.";
  }

  typedef inline-raw-public-key-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:listen"
         + "/alto:https/alto:tls-server-parameters"
         + "/alto:client-authentication/alto:raw-public-keys"
         + "/alto:inline-definition/alto:public-key"
         + "/alto:name";
    }
    description
      "Type to reference a raw public key.";
  }

  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-bind/local-port" {
                default "80";
                description
                  "The ALTO 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 collisions.";
            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-bind/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 discover 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.";
          }
        }
      }
    }
  }

  grouping inline-or-truststore-ca-cert-ref {
    description
      "Grouping for the reference of a CA certificate to
       authenticate the TLS client.";
    choice inline-or-truststore {
      description
        "Selects between inline and truststore";
      case inline {
        if-feature "ts:inline-definitions-supported";
        leaf inline {
          type inline-ca-cert-ref;
          description
            "Reference to an inline CA certificate configured by
             the TLS server.";
        }
        description
          "Reference of an inline CA certificate to authenticate
           the TLS client.";
      }
      case central-truststore {
        if-feature "ts:central-truststore-supported";
        if-feature "ts:certificates";
        uses ts:central-certificate-ref-grouping;
        description
          "Reference of a CA certificate in the truststore to
           authenticate the TLS client.";
      }
    }
  }

  grouping inline-or-truststore-ee-cert-ref {
    description
      "Grouping for the reference of a EE certificate to
       authenticate the TLS client.";
    choice inline-or-truststore {
      description
        "Selects between inline and truststore";
      case inline {
        if-feature "ts:inline-definitions-supported";
        leaf inline {
          type inline-ee-cert-ref;
          description
            "Reference to an inline EE certificate configured by
             the TLS server.";
        }
        description
          "Reference of an inline EE certificate to authenticate
           the TLS client.";
      }
      case central-truststore {
        if-feature "ts:central-truststore-supported";
        if-feature "ts:certificates";
        uses ts:central-certificate-ref-grouping;
        description
          "Reference of a EE certificate in the truststore to
           authenticate the TLS client.";
      }
    }
  }

  grouping inline-or-truststore-public-key-ref {
    description
      "Grouping for the reference of a raw public key to
       authenticate the TLS client.";
    choice inline-or-truststore {
      description
        "Selects between inline and truststore";
      case inline {
        if-feature "ts:inline-definitions-supported";
        leaf inline {
          type inline-raw-public-key-ref;
          description
            "Reference to an inline public key configured by the
             TLS server.";
        }
        description
          "Reference of an inline public key to authenticate the
           TLS client.";
      }
      case central-truststore {
        if-feature "ts:central-truststore-supported";
        if-feature "ts:public-keys";
        uses ts:central-public-key-ref-grouping;
        description
          "Reference of a raw public key in the truststore to
           authenticate the TLS client.";
      }
    }
  }

  // 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 for 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 to identify an authenticated HTTPS
                 client.";
              leaf user-id {
                type https-user-id-ref;
                description
                  "Reference of the user-id for the authenticated
                   HTTPS client.";
              }
            }
            container tls-auth-client {
              if-feature "tls:client-auth-supported";
              description
                "Parameters to identify an authenticated TLS
                 client.";
              container ca-cert {
                if-feature "tls:client-auth-x509-cert";
                description
                  "Reference of the CA certificate to authenticate
                   the TLS client.";
                uses inline-or-truststore-ca-cert-ref;
              }
              container ee-cert {
                if-feature "tls:client-auth-x509-cert";
                description
                  "Reference of the EE certificate to authenticate
                   the TLS client.";
                uses inline-or-truststore-ee-cert-ref;
              }
              container raw-public-key {
                if-feature "tls:client-auth-raw-public-key";
                description
                  "Reference of the raw public key to authenticate
                   the TLS client.";
                uses inline-or-truststore-public-key-ref;
              }
              leaf tls12-psks {
                if-feature "tls:client-auth-tls12-psk";
                type empty;
                description
                  "Indicates that the client is authenticated by
                   the TLS server using the configured PSKs
                   (pre-shared or pairwise-symmetric keys).";
              }
              leaf tls13-epsks {
                if-feature "tls:client-auth-tls13-epsk";
                type empty;
                description
                  "Indicates that the client is authenticated by
                   the TLS 1.3 server using the configured external
                   PSKs (pre-shared keys).";
              }
            }
          }
        }
      }
      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.";
        }
        container 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@2026-02-04.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 9911: Common YANG Data Types, Section 3";
  }
  import ietf-alto {
    prefix alto;
    revision-date 2026-02-04;
    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) 2026 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 2026-02-04 {
    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 specified in this document define a schema for data
that is designed to be accessed via network management protocols such
as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.  The lowest NETCONF layer
is the secure transport layer, and the mandatory-to-implement secure
transport is Secure Shell (SSH) <xref target="RFC6242"/>.  The lowest RESTCONF layer
is HTTPS, and the mandatory-to-implement secure transport is TLS
<xref target="RFC8446"/>.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/>
provides the means to restrict access for particular NETCONF or
RESTCONF users to a preconfigured subset of all available NETCONF or
RESTCONF protocol operations and content.</t>
      <t>There are a number of data nodes defined in these two YANG modules that are
writable/creatable/deletable (i.e., config true, which is the
default).  These data nodes may be considered sensitive or vulnerable
in some network environments.  Write operations (e.g., edit-config)
and delete operations to these data nodes without proper protection
or authentication can have a negative effect on network operations.
These are the subtrees and data nodes and their sensitivity/
vulnerability:</t>
      <dl>
        <dt>"/alto/alto-client/server-discovery":</dt>
        <dd>
          <t>This subtree specifies a set of parameters for an ALTO client to discover ALTO servers.
  Unauthorized access to it could cause intruders to modify the ALTO discovery
  parameters (e.g., "dns-server") in order to expose an ALTO client to fake ALTO servers. Likewise, this data node can be manipulated to prevent an ALTO client from discovering a reachable ALTO server.</t>
        </dd>
        <dt>"/alto/alto-server/auth-client":</dt>
        <dd>
          <t>This list specifies all the authenticated ALTO clients on an ALTO server.
  Unauthorized write access to this list can allow intruders to modify the entries
  so as to add a client that have not been authenticated yet or delete a client
  that has already been authenticated. Likewise, this data node can be manipulated to prevent access of legitimate ALTO clients.</t>
        </dd>
        <dt>"/alto/alto-server/role":</dt>
        <dd>
          <t>This list specifies roles which authenticated ALTO clients were assigned to for
  access control. Unauthorized write access to this list allow intruders to
  modify the entries so as to permit access that should not be permitted, or deny
  access that should be permitted.</t>
        </dd>
      </dl>
      <t>Some of the readable data nodes in the "ietf-alto" YANG module may be considered
sensitive or vulnerable in some network environments. It is thus important to
control read access (e.g., via get, get-config, or notification) to these data
nodes. These are the subtrees and data nodes and their sensitivity/vulnerability:</t>
      <dl>
        <dt>"/alto/alto-server/logging-system":</dt>
        <dd>
          <t>This subtree provides configuration to select a logging system to capture log
  messages generated by an ALTO server. Unauthorized read access of this node
  can allow intruders to access logging information, which could be used to craft
  an attack the 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. Specifically, the following data nodes
reuse groupings with their security considerations:</t>
      <dl>
        <dt>"/alto/alto-server/listen/http/http-server-parameters":</dt>
        <dd>
          <t>This subtree reuses the "http-server-grouping" grouping defined in
  <xref target="I-D.ietf-netconf-http-client-server"/>. The security considerations of
  <xref target="I-D.ietf-netconf-http-client-server"/> have been applied to it.
  Specifically, the "server-name" and "client-authentication" nodes in it
  may be considered sensitive or vulnerable. For this reason, the NACM
  extension "default-deny-write" has been applied to them.</t>
        </dd>
        <dt>"/alto/alto-server/listen/https/http-server-parameters":</dt>
        <dd>
          <t>This subtree reuses the "http-server-grouping" grouping defined in
  <xref target="I-D.ietf-netconf-http-client-server"/>. The security considerations of
  <xref target="I-D.ietf-netconf-http-client-server"/> have been applied to it.
  Specifically, the "server-name"and "client-authentication" nodes in it
  may be considered sensitive or vulnerable. For this reason, the NACM
  extension "default-deny-write" has been applied to them.</t>
        </dd>
        <dt>"/alto/alto-server/listen/https/tls-server-parameters":</dt>
        <dd>
          <t>This subtree reuses the "tls-server-grouping" grouping defined in
  <xref target="RFC9645"/>. The security considerations of
  <xref target="RFC9645"/> have been applied to it.
  Specifically, all the "key" and "private-key" data nodes in it have the
  NACM extension "default-deny-all" set, thus preventing unrestricted
  read-access to the cleartext key values. Also, all writable data nodes
  in it may be considered sensitive or vulnerable. For this reason, the
  NACM extension "default-deny-write" has been applied to them.</t>
        </dd>
      </dl>
    </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 anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-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"/>
            <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"/>
            <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="RFC5424">
          <front>
            <title>The Syslog Protocol</title>
            <author fullname="R. Gerhards" initials="R." surname="Gerhards"/>
            <date month="March" year="2009"/>
            <abstract>
              <t>This document describes the syslog protocol, which is used to convey event notification messages. This protocol utilizes a layered architecture, which allows the use of any number of transport protocols for transmission of syslog messages. It also provides a message format that allows vendor-specific extensions to be provided in a structured way.</t>
              <t>This document has been written with the original design goals for traditional syslog in mind. The need for a new layered specification has arisen because standardization efforts for reliable and secure syslog extensions suffer from the lack of a Standards-Track and transport-independent RFC. Without this document, each other standard needs to define its own syslog packet format and transport mechanism, which over time will introduce subtle compatibility issues. This document tries to provide a foundation that syslog extensions can build on. This layered architecture approach also provides a solid basis that allows code to be written once for each syslog feature rather than once for each transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5424"/>
          <seriesInfo name="DOI" value="10.17487/RFC5424"/>
        </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"/>
            <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"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <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="RFC9911">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schönwälder" initials="J." role="editor" surname="Schönwälder"/>
            <date month="December" year="2025"/>
            <abstract>
              <t>This document defines a collection of common data types to be used with the YANG data modeling language. It includes several new type definitions and obsoletes RFC 6991.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9911"/>
          <seriesInfo name="DOI" value="10.17487/RFC9911"/>
        </reference>
        <reference anchor="RFC7285">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Protocol</title>
            <author fullname="R. Alimi" initials="R." role="editor" surname="Alimi"/>
            <author fullname="R. Penno" initials="R." role="editor" surname="Penno"/>
            <author fullname="Y. Yang" initials="Y." role="editor" surname="Yang"/>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel"/>
            <author fullname="S. Previdi" initials="S." surname="Previdi"/>
            <author fullname="W. Roome" initials="W." surname="Roome"/>
            <author fullname="S. Shalunov" initials="S." surname="Shalunov"/>
            <author fullname="R. Woundy" initials="R." surname="Woundy"/>
            <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"/>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling"/>
            <author fullname="N. Schwan" initials="N." surname="Schwan"/>
            <author fullname="M. Scharf" initials="M." surname="Scharf"/>
            <author fullname="H. Song" initials="H." surname="Song"/>
            <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"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <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="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <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"/>
            <author fullname="W. Roome" initials="W." surname="Roome"/>
            <author fullname="N. Schwan" initials="N." surname="Schwan"/>
            <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="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <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"/>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling"/>
            <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"/>
            <author fullname="Y. Yang" initials="Y." surname="Yang"/>
            <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"/>
            <author fullname="R. Yang" initials="R." surname="Yang"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <author fullname="L. Deng" initials="L." surname="Deng"/>
            <author fullname="N. Schwan" initials="N." surname="Schwan"/>
            <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="RFC9240">
          <front>
            <title>An Extension for Application-Layer Traffic Optimization (ALTO): Entity Property Maps</title>
            <author fullname="W. Roome" initials="W." surname="Roome"/>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy"/>
            <author fullname="Y. Yang" initials="Y." surname="Yang"/>
            <author fullname="J. Zhang" initials="J." surname="Zhang"/>
            <author fullname="K. Gao" initials="K." surname="Gao"/>
            <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"/>
            <author fullname="Y. Yang" initials="Y." surname="Yang"/>
            <author fullname="K. Ma" initials="K." surname="Ma"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Zhang" initials="J." surname="Zhang"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>&lt;p&gt;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.&lt;/p&gt;</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9241"/>
          <seriesInfo name="DOI" value="10.17487/RFC9241"/>
        </reference>
        <reference anchor="RFC9274">
          <front>
            <title>A Cost Mode Registry for the Application-Layer Traffic Optimization (ALTO) Protocol</title>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document creates a new IANA registry for tracking cost modes supported by the Application-Layer Traffic Optimization (ALTO) Protocol. Also, this document relaxes a constraint that was imposed by the ALTO specification on allowed cost mode values.</t>
              <t>This document updates RFC 7285.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9274"/>
          <seriesInfo name="DOI" value="10.17487/RFC9274"/>
        </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"/>
            <author fullname="Y. Lee" initials="Y." surname="Lee"/>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy"/>
            <author fullname="Y. Yang" initials="Y." surname="Yang"/>
            <author fullname="J. Zhang" initials="J." surname="Zhang"/>
            <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="RFC9439">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Performance Cost Metrics</title>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <author fullname="Y. Yang" initials="Y." surname="Yang"/>
            <author fullname="Y. Lee" initials="Y." surname="Lee"/>
            <author fullname="D. Dhody" initials="D." surname="Dhody"/>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy"/>
            <author fullname="L. Contreras" initials="L." surname="Contreras"/>
            <date month="August" year="2023"/>
            <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.</t>
              <t>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.</t>
              <t>There are multiple sources (e.g., estimations based on measurements
or a Service Level Agreement) available for deriving 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="RFC" value="9439"/>
          <seriesInfo name="DOI" value="10.17487/RFC9439"/>
        </reference>
        <reference anchor="RFC9641">
          <front>
            <title>A YANG Data Model for a Truststore</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document presents a YANG module for configuring bags of certificates and bags of public keys that can be referenced by other data models for trust. Notifications are sent when certificates are about to expire.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9641"/>
          <seriesInfo name="DOI" value="10.17487/RFC9641"/>
        </reference>
        <reference anchor="RFC9643">
          <front>
            <title>YANG Groupings for TCP Clients and TCP Servers</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="M. Scharf" initials="M." surname="Scharf"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document presents 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 data models defined by these modules may be used directly (e.g., to define a specific TCP client or TCP server) or in conjunction with the configuration defined for higher level protocols that depend on TCP (e.g., SSH, TLS, etc.). Examples of higher level protocol configuration designed to be used in conjunction with this configuration are in RFCs 9644 and 9645.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9643"/>
          <seriesInfo name="DOI" value="10.17487/RFC9643"/>
        </reference>
        <reference anchor="RFC9645">
          <front>
            <title>YANG Groupings for TLS Clients and TLS Servers</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document presents four YANG 1.1 modules -- three IETF modules and one supporting IANA module.</t>
              <t>The three IETF modules are "ietf-tls-common", "ietf-tls-client", and "ietf-tls-server". The "ietf-tls-client" and "ietf-tls-server" modules are the primary productions of this work, supporting the configuration and monitoring of TLS clients and servers.</t>
              <t>The IANA module is "iana-tls-cipher-suite-algs". This module defines YANG enumerations that provide support for an IANA-maintained algorithm registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9645"/>
          <seriesInfo name="DOI" value="10.17487/RFC9645"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-http-client-server">
          <front>
            <title>YANG Groupings for HTTP Clients and HTTP Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="30" month="January" year="2026"/>
            <abstract>
              <t>   This document presents three YANG 1.1 modules as follows.  The "iana-
   http-versions" module defines a YANG "typedef" for HTTP protocol
   versions.  The "ietf-http-client" module defines a YANG "grouping"
   for configuring a minimal HTTP client.  The "ietf-http-server" module
   defines a "grouping" for configuring a minimal HTTP server.  Lastly,
   the "iana-http-versions" module defines a YANG "typedef" for HTTP
   protocol versions.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-http-client-server-32"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-netconf-client-server">
          <front>
            <title>A YANG Data Model for NETCONF Clients and Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="4" month="December" year="2025"/>
            <abstract>
              <t>   This document presents two YANG modules, one module to configure a
   NETCONF client and the other module to configure a NETCONF server.
   These modules support both the SSH and TLS transport protocols, and
   support both standard NETCONF and NETCONF Call Home connections.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-netconf-client-server-41"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-restconf-client-server">
          <front>
            <title>A YANG Data Model for RESTCONF Clients and Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="4" month="December" year="2025"/>
            <abstract>
              <t>   This document presents two YANG modules, one module to configure a
   RESTCONF client and the other module to configure a RESTCONF server.
   These modules support both standard and RESTCONF Call Home
   connections.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-restconf-client-server-45"/>
        </reference>
        <reference anchor="RFC6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author fullname="M. Wasserman" initials="M." surname="Wasserman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
      </references>
      <references anchor="sec-informative-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"/>
            <author fullname="J. Halpern" initials="J." surname="Halpern"/>
            <author fullname="S. Hares" initials="S." surname="Hares"/>
            <author fullname="D. Ward" initials="D." surname="Ward"/>
            <author fullname="T. Nadeau" initials="T." surname="Nadeau"/>
            <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"/>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel"/>
            <author fullname="M. Scharf" initials="M." surname="Scharf"/>
            <author fullname="H. Seidel" initials="H." surname="Seidel"/>
            <author fullname="S. Previdi" initials="S." surname="Previdi"/>
            <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"/>
            <author fullname="J. Medved" initials="J." surname="Medved"/>
            <author fullname="R. Varga" initials="R." surname="Varga"/>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <author fullname="H. Ananthakrishnan" initials="H." surname="Ananthakrishnan"/>
            <author fullname="N. Bahadur" initials="N." surname="Bahadur"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for Layer 3 network topologies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8346"/>
          <seriesInfo name="DOI" value="10.17487/RFC8346"/>
        </reference>
        <reference anchor="RFC8641">
          <front>
            <title>Subscription to YANG Notifications for Datastore Updates</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore. Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8641"/>
          <seriesInfo name="DOI" value="10.17487/RFC8641"/>
        </reference>
        <reference anchor="RFC6291">
          <front>
            <title>Guidelines for the Use of the "OAM" Acronym in the IETF</title>
            <author fullname="L. Andersson" initials="L." surname="Andersson"/>
            <author fullname="H. van Helvoort" initials="H." surname="van Helvoort"/>
            <author fullname="R. Bonica" initials="R." surname="Bonica"/>
            <author fullname="D. Romascanu" initials="D." surname="Romascanu"/>
            <author fullname="S. Mansfield" initials="S." surname="Mansfield"/>
            <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>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <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="RFC9569">
          <front>
            <title>The Application-Layer Traffic Optimization (ALTO) Transport Information Publication Service (TIPS)</title>
            <author fullname="K. Gao" initials="K." surname="Gao"/>
            <author fullname="R. Schott" initials="R." surname="Schott"/>
            <author fullname="Y. R. Yang" initials="Y. R." surname="Yang"/>
            <author fullname="L. Delwiche" initials="L." surname="Delwiche"/>
            <author fullname="L. Keller" initials="L." surname="Keller"/>
            <date month="September" year="2024"/>
            <abstract>
              <t>"Application-Layer Traffic Optimization (ALTO) Protocol" (RFC 7285) leverages HTTP/1.1 and is designed for the simple, sequential request-reply use case, in which an ALTO client requests a sequence of information resources and the server responds with the complete content of each resource, one at a time.</t>
              <t>RFC 8895, which describes ALTO incremental updates using Server-Sent Events (SSE), defines a multiplexing protocol on top of HTTP/1.x, so that an ALTO server can incrementally push resource updates to clients whenever monitored network information resources change, allowing the clients to monitor multiple resources at the same time. However, HTTP/2 and later versions already support concurrent, non-blocking transport of multiple streams in the same HTTP connection.</t>
              <t>To take advantage of newer HTTP features, this document introduces the ALTO Transport Information Publication Service (TIPS). TIPS uses an incremental RESTful design to give an ALTO client the new capability to explicitly and concurrently (in a non-blocking manner) request (or pull) specific incremental updates using HTTP/2 or HTTP/3, while still functioning for HTTP/1.1.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9569"/>
          <seriesInfo name="DOI" value="10.17487/RFC9569"/>
        </reference>
      </references>
    </references>
    <?line 2852?>

<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>
          <t>The <tt>server-discovery-manner</tt> choice of the <tt>server-discovery</tt>.</t>
        </li>
        <li>
          <t>The <tt>authentication</tt> choice of each <tt>auth-client</tt>.</t>
        </li>
        <li>
          <t>The <tt>data-source</tt> node.</t>
        </li>
        <li>
          <t>The <tt>algorithm</tt> choice of the <tt>resource-params</tt> of each <tt>resource</tt>.</t>
        </li>
      </ul>
      <section anchor="example-server-disc">
        <name>An Example Module for Extended Server Discovery Manners</name>
        <t>The base module "ietf-alto" only includes a reverse DNS based
server discovery manner. The following example module demonstrates how
additional server discovery methods 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-alto-server-discovery {
  yang-version 1.1;

  namespace "https://example.com/ns/example-alto-server-discovery";
  prefix ex-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 9911: 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 2026-02-04 {
    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 module "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-alto-auth {
  yang-version 1.1;

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

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 9911: 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 2026-02-04 {
    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 module "ietf-alto" 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>
            <t><tt>datastore</tt> to indicate which datastore is fetched.</t>
          </li>
          <li>
            <t><tt>target-paths</tt> to specify the list of nodes or subtrees in the datastore.</t>
          </li>
          <li>
            <t><tt>protocol</tt> to indicate which protocol is used to access the datastore. Either
<tt>restconf</tt> or <tt>netconf</tt> can be used.</t>
          </li>
        </ul>
        <artwork><![CDATA[
module example-alto-data-source {
  yang-version 1.1;

  namespace "https://example.com/ns/example-alto-data-source";
  prefix ex-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 2026-02-04 {
    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" {
    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 module "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-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 is set 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.</t>
        <artwork><![CDATA[
module example-alto-alg {
  yang-version 1.1;

  namespace "https://example.com/ns/example-alto-alg";
  prefix ex-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-alto-data-source {
    prefix ex-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 2026-02-04 {
    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:source-params'
               + '/ex-alto-ds:yang-datastore-source-params'
               + '/ex-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:source-params'
                 + '/ex-alto-ds:yang-datastore-source-params'
                 + '/ex-alto-ds:target-paths/ex-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 an example showing how the base data model and
all the extended models above are used to set up an ALTO server and
configure corresponding components (e.g., data source listener, information
resource, and access control).</t>
        <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "ietf-alto:alto": {
    "alto-server": {
      "listen": {
        "https": {
          "tcp-server-parameters": {
            "local-bind": [
              {
                "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": {
                      "username": "alice",
                      "password": {
                        "hashed-password": "$0$p8ssw0rd"
                      }
                    }
                  }
                ]
              }
            }
          },
          "tls-server-parameters": {
            "server-identity": {
              "raw-private-key": {
                "inline-definition": {
                  "hidden-private-key": [null]
                }
              }
            }
          }
        }
      },
      "server-discovery": {
        "example-alto-server-discovery:irr-params": {
          "aut-num": 64496
        }
      },
      "auth-client": [
        {
          "client-id": "alice",
          "https-auth-client": {
            "user-id": "alice"
          }
        },
        {
          "client-id": "bob",
          "example-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-alto-data-source:yang-datastore",
          "source-params": {
            "example-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": {
                  "endpoints": {
                    "endpoint": [
                      {
                        "name": "example restconf server",
                        "tcp": {
                          "tcp-server-parameters": {
                            "local-bind": [
                              {
                                "local-address": "192.0.2.2"
                              }
                            ]
                          },
                          "http-client-parameters": {
                            "uri": {
                              "scheme": "https",
                              "authority": {
                                "host": "192.0.2.2"
                              }
                            },
                            "tls-client-parameters": {
                              "client-identity": {
                                "raw-private-key": {
                                  "inline-definition": {
                                    "hidden-private-key": [null]
                                  }
                                }
                              },
                              "server-authentication": {
                                "raw-public-keys": {
                                  "inline-definition": {
                                    "public-key": [
                                      {
                                        "name": "alto-pubkey",
                                        "public-key-format": "ietf-\
                        crypto-types:subject-public-key-info-format",
                                        "public-key": "\
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsmEuE0u2Q7QB/sOOF8vf+\
f2jw5rNpQt+sWsN9gpOreaOMyAAYyytMF13PZYADO50j3G0eqljx8R//ZUc+\
G0PN4fpOLDpj4lC5vBb9pnQ8EpqOLJGMe3+\
73fVG2wfZOZi408GQfxrnJjVKUiBqyu1MGPW60NjZYvomSuU754JwxZcgWymwHMOtRoD\
KglYTFY2R5Pnq1XKxx8+3BF/PiCZ5dBDFap6oXVEwvwqspQjy4MS7u/hU1Q1sQkvxMM+\
HE6svGfndT9vu5SRhQeYxHQrC5C5rbsyWyg8nVdugmyJDQIYK0pZVTtpi8ucvU4JEtjf\
                                        c/hpxFz28FFszwqg3m71lwIDAQAB"
                                      }
                                    ]
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        }
      ],
      "resource": [
        {
          "resource-id": "default-network-map",
          "resource-type": "network-map",
          "accepted-role": [
            "group0"
          ],
          "alto-networkmap-params": {
            "is-default": true,
            "example-alto-alg:l3-unicast-cluster-algorithm": {
              "l3-unicast-topo": {
                "source-datastore": "test-yang-ds",
                "topo-name": "network-topology"
              },
              "depth": 2
            }
          }
        }
      ]
    }
  }
}
]]></artwork>
        <t>Note that this example only uses a clear text password for demonstration
purpose. In practice, it is NOT RECOMMENDED to use any clear text passwords
when using this data model.</t>
      </section>
    </section>
    <section anchor="a-sample-alto-server-architecture-to-implement-alto-om-yang-modules">
      <name>A Sample ALTO Server Architecture to Implement ALTO O&amp;M YANG Modules</name>
      <t><xref target="alto-ref-arch"/> shows a sample architecture for an ALTO server
implementation. It indicates the major server components that an ALTO server
usually needs to include and the YANG modules that these server components
need to implement.</t>
      <ul empty="true">
        <li>
          <t>This section does not intend to impose an internal structure of server
implementations, but is provided to exemplify how the various data model
components can be used, including having provisions for future augmentations.</t>
        </li>
      </ul>
      <t>The following server components need to implement the 'ietf-alto' module (<xref target="alto-model"/>):</t>
      <dl>
        <dt>Server manager:</dt>
        <dd>
          <t>Provides the functionality and configuration of the server-level
  management, including server listen stack setup, server discovery setup,
  logging system configuration, global metadata, and server-level security
  configuration.</t>
        </dd>
        <dt>Information resource manager:</dt>
        <dd>
          <t>Provides the operation and management for creating, updating, and
  removing ALTO information resources.</t>
        </dd>
        <dt>Data source listener:</dt>
        <dd>
          <t>An ALTO server may start multiple data source listeners. Each data source
  listener defines a communication endpoint that can fetch ALTO-related
  information from data sources. The information can be either raw
  network/computation information or pre-processed ALTO-level information.</t>
        </dd>
      </dl>
      <t>The following components need to implement the 'ietf-alto-stats' module
(<xref target="alto-stats-model"/>) to provide statistics information:</t>
      <dl>
        <dt>Performance monitor:</dt>
        <dd>
          <t>Collects ALTO-specific performance metrics at a running ALTO server.</t>
        </dd>
        <dt>Logging and fault manager:</dt>
        <dd>
          <t>Collects runtime logs and failure events that are generated by an ALTO server and the service
  of each ALTO information resource.</t>
        </dd>
      </dl>
      <t>The following components are also important for an ALTO server, although they
are not in the scope of the data models defined in this document:</t>
      <dl>
        <dt>Data broker:</dt>
        <dd>
          <t>An ALTO server may implement a data broker to store network/computation
  information collected from data sources or cache some preprocessed data. The
  service of the ALTO information resource can read them from the data broker
  to calculate ALTO responses and return to ALTO clients.</t>
        </dd>
        <dt>Algorithm plugin:</dt>
        <dd>
          <t>The service of each ALTO information resource needs to configure an algorithm to decide
  how to calculate the ALTO responses. The algorithm plugins implement those
  algorithms. User-specified YANG modules can be applied to different algorithm
  plugins by augmenting the ALTO modules
  (<xref target="alto-ext-model"/>).</t>
        </dd>
      </dl>
      <t>Generally, the ALTO server components illustrated above have the following
interactions with each other:</t>
      <ul spacing="normal">
        <li>
          <t>Both the server manager and information resource manager will report
statistics data to the performance monitor and the logging and fault manager.</t>
        </li>
        <li>
          <t>The algorithm plugins will register callbacks to the corresponding ALTO
information resources upon configuration; Once an ALTO information
resource is requested, the registered callback algorithm will be invoked.</t>
        </li>
        <li>
          <t>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).</t>
        </li>
        <li>
          <t>A data source listener will send the preprocessed data to a data
broker.</t>
        </li>
        <li>
          <t>An algorithm plugin may read data from an optional data broker to calculate
the ALTO information resource.</t>
        </li>
      </ul>
      <figure anchor="alto-ref-arch">
        <name>A Sample ALTO Server Architecture and ALTO YANG Modules</name>
        <artwork><![CDATA[
  +----------------------+      +-----------------+
  | Performance Monitor: |<-----| Server Manager: |
  |  "ietf-alto-stats"   |<-+ +-|  "ietf-alto"    |
  +----------------------+  | | +-----------------+
                          report
  +----------------------+  | | +-------------------+
  | Logging and Fault    |  +---| Information       |
  | Manager:             |<---+ | Resource Manager: |
  | "ietf-alto-stats"    |<-----|    "ietf-alto"    |
  +----------------------+      +-------------------+
                                         ^|
                                         || callback
                                         |v
     .............          ................................
    /             \ <------ . Algorithm Plugin:            .
    . Data Broker .  read   .   "example-alto-alg"         .
    ...............         ................................
           ^
           | write
  +----------------+  Data Source  ++=============++
  | Data Source    |      API      ||             ||
  | Listener:      | <=====-=====> || Data Source ||
  |  "ietf-alto"   |               ||             ||
  +----------------+               ++=============++
]]></artwork>
      </figure>
      <!-- End of sections -->

</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, Dong Guo, Jordi Ros Giralt, Luis M. Contreras, Mahdi
Soleimani, Qiao Xiang, Shenshen Chen, and Y. Richard Yang for their thorough
reviews, shepherding, and valuable feedback.</t>
      <t>Thanks to Dan Romascanu for the opsdir and genart reviews, Andy Bierman for the
yangdoctors review, Spencer Dawkins for the tsvart review, Scott Rose for the
dnsdir review, and Rich Salz for the secdir review.</t>
      <t>Thanks to Martin Duke for the careful AD review.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
W5RQrN0LJAtpurFZhmu9rpcW82rdWsW+5RdXGc8SC7ef7IBYuNPbaZIZ1Mcv
O6hP/c60ejZjTgmMkumvgplZHi9shIwIKzVEmv+37KLsICMIvCKID/ysKO8R
j624ktLU6siyr9VG+crTaRmJy9NtWRnM03UVqaz+acftMi0W4N9IcQs1EU9X
QufsEq56XNgy20bd7oBOM9sS7EN9lhubxrfVN1waTrQIg17wuqzY6xu4+aof
5PMpTEaubv1iRlkELKx20UagRrsVKAjDP4OT4+Onxz/tnz4dvfl5/CZ+/uRm
6+n+t0fP9vdfHux/+3gffz8Y/QX+PtovJkezo63ZzrdffPt0s3j58tnj66vP
/xlc7fx08zA/nX5bfl58V5w+GU1f5lH48mS+v//9fF6ePNveffX37/cPXz7c
+mn3+Vb0c/LT28dnm5t/fz2A3s+3Xp3uXU1fvjic/rSXHDy8fnr5ZJp++/ho
+vPLF988P4l2odEXu1d/fb5zc/X3l3+P97YeP//26m2efvPTX//yOn7683y2
ffL81XePtk5/+vv319nkfPb6i4d739y8/ftg9N18cvP1ycvyLDv8Z/CXUfL9
xbPvd84evkp/3v7bX96+ffz57tNnm6/ig78/HD49fBZOH2V/++vRzfXNz8X0
25/meyfnX8w2x6+3v90uvn1z/fbkBGD5+uhRcf38Kh1ePLmePTw/G38bff/2
62/zg4cHD/PLYv7dfPQ4/etwNprMvzn89vj7v2xN//7Xi3IaP54Nrl/vfXNU
/nS1vIQ32BxP3z77Zefxs2fFLzc/j3YnX2wnN8eH+9/uP13EgtVnMbvAz2/E
eNqvhbbrtfG3pl/83/vWWW95F1XY0qKiRbqKzlbH2orK9mnXxdzwtldqS2NL
NBVOy2jYraly9LPU2my9q24Iqz0h1lWcuOhKoOE3qqLTogKFyajf9qjmM4dU
XsH8MnX1+aBV85N99COJV0mp7n9NyCfrNXTdWYUyAvUvbca2s+hbzmaUhIFc
XENOSCsoI60yhHEch/ZXREPxdJZjPZmeOEbjN7qloNE4Jlfk05cX4uzo4OXJ
ydHp4dEh5cUrpFNnffAiIFdZTgdifJZUjORnYl+cM5Rk+JZRUY6jA0xwrItd
6TyWVkrTIgjQy4uoIo+uuiH0XicDPZX1kc/C9pB2YR8WTirRnzK+0vbJnoQ/
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
9Ph/EWXjTQDjAQA=

-->

</rfc>
