<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.34 (Ruby 3.2.2) -->
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc editing="no"?>
<?rfc tocompact="yes"?>
<?rfc iprnotified="no"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-alto-oam-yang-08" category="std" consensus="true" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <front>
    <title abbrev="ALTO O&amp;M YANG">YANG Data Models for the Application-Layer Traffic Optimization (ALTO) Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-alto-oam-yang-08"/>
    <author initials="J." surname="Zhang" fullname="Jingxuan Jensen Zhang">
      <organization>Tongji University</organization>
      <address>
        <postal>
          <street>4800 Cao'An Hwy</street>
          <city>Shanghai</city>
          <code>201804</code>
          <country>China</country>
        </postal>
        <email>jingxuan.n.zhang@gmail.com</email>
      </address>
    </author>
    <author initials="D." surname="Dhody" fullname="Dhruv Dhody">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Divyashree Techno Park, Whitefield</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560066</code>
          <country>India</country>
        </postal>
        <email>dhruv.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Gao" fullname="Kai Gao">
      <organization>Sichuan University</organization>
      <address>
        <postal>
          <street>No.24 South Section 1, Yihuan Road</street>
          <city>Chengdu</city>
          <region>Sichuan</region>
          <code>610000</code>
          <country>China</country>
        </postal>
        <email>kaigao@scu.edu.cn</email>
      </address>
    </author>
    <author initials="R." surname="Schott" fullname="Roland Schott">
      <organization>Deutsche Telekom</organization>
      <address>
        <postal>
          <street>Ida-Rhodes-Straße 2</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>Roland.Schott@telekom.de</email>
      </address>
    </author>
    <author initials="Q." surname="Ma" fullname="Qiufang Ma">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Nanjing</city>
          <region>Jiangsu</region>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>maqiufang1@huawei.com</email>
      </address>
    </author>
    <date year="2023" month="May" day="30"/>
    <area>Networks</area>
    <workgroup>ALTO WG</workgroup>
    <keyword>Automation, Service Provisioning, Control, Operation</keyword>
    <abstract>
      <?line 111?>

<t>This document defines a YANG data model for Operations, Administration, and
Maintenance (OAM) &amp; Management of Application-Layer Traffic Optimization (ALTO)
Protocol. The operator 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 of 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 122?>

<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>set up the ALTO server,</li>
        <li>configure server discovery,</li>
        <li>create, update and remove ALTO information resources,</li>
        <li>manage the access control of each ALTO information resource,</li>
        <li>collect statistical data of the ALTO server.</li>
      </ul>
      <t>The application provider can also use this data model to configure ALTO clients
to communicate with known ALTO servers.</t>
      <t>This document only focuses on the common and implementation-agnostic data model
for purposes including deploying an ALTO server/client, operating and managing
a running ALTO server/client, functionality/capability configuration of ALTO
services, and monitoring ALTO-related performance metrics. Any
implementation-specific information is not in the scope of this document.
<xref target="scope"/> illustrates more details about what is and is not in the scope.
<xref target="requirements"/> and <xref target="extra-req"/> define more concrete requirements for the
data model.</t>
      <t>The basic structure of this YANG data model is guided by Section 16 of
<xref target="RFC7285"/> and <xref target="RFC7971"/>. Although the scope of the YANG data model in this
document mainly focuses on the support of the base ALTO protocol <xref target="RFC7285"/> and
the existing ALTO standard extensions (including <xref target="RFC8189"/>, <xref target="RFC8895"/>,
<xref target="RFC8896"/>, <xref target="RFC9240"/>, <xref target="RFC9241"/>, and <xref target="RFC9275"/>), future standard extensions (e.g.,
<xref target="I-D.ietf-alto-performance-metrics"/>) are also considered.</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
the specific ALTO server implementations are shown in <xref target="alto-ext-model"/>.</t>
    </section>
    <section anchor="requirements-language">
      <name>Requirements Language</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here. When the words
appear in lower case, they are to be interpreted with their natural language
meanings.</t>
      <!-- End of sections -->

</section>
    <section anchor="acronyms-and-abbreviations">
      <name>Acronyms and Abbreviations</name>
      <t>This document uses the following acronyms:</t>
      <dl>
        <dt>ALTO:</dt>
        <dd>
          <t>Application-Layer Traffic Optimization</t>
        </dd>
        <dt>CPU:</dt>
        <dd>
          <t>Central Processing Unit</t>
        </dd>
        <dt>DNS:</dt>
        <dd>
          <t>Domain Name System</t>
        </dd>
        <dt>HTTP:</dt>
        <dd>
          <t>Hypertext Transfer Protocol</t>
        </dd>
        <dt>IRR:</dt>
        <dd>
          <t>Internet Routing Registry</t>
        </dd>
        <dt>OAM:</dt>
        <dd>
          <t>Operations, Administration, and Maintenance (Section 3 of <xref target="RFC6291"/>)</t>
        </dd>
        <dt>O&amp;M:</dt>
        <dd>
          <t>OAM and Management (Section 3 of <xref target="RFC6291"/>)</t>
        </dd>
        <dt>OAuth:</dt>
        <dd>
          <t>Open Authorization</t>
        </dd>
        <dt>PID:</dt>
        <dd>
          <t>Provider-defined Identifier in ALTO</t>
        </dd>
        <dt>TCP:</dt>
        <dd>
          <t>Transmission Control Protocol</t>
        </dd>
        <dt>TLS:</dt>
        <dd>
          <t>Transport Layer Security</t>
        </dd>
        <dt>URI:</dt>
        <dd>
          <t>Uniform Resource Identifier</t>
        </dd>
      </dl>
      <section anchor="tree-diagrams">
        <name>Tree Diagrams</name>
        <t>The meaning of the symbols in the tree diagrams is defined in
<xref target="RFC8340"/>.</t>
      </section>
      <section anchor="prefixes-in-data-node-names">
        <name>Prefixes in Data Node Names</name>
        <t>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="RFC6991"/></td>
            </tr>
            <tr>
              <td align="left">inet</td>
              <td align="left">ietf-inet-types</td>
              <td align="left">
                <xref target="RFC6991"/></td>
            </tr>
            <tr>
              <td align="left">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">tcp</td>
              <td align="left">ietf-tcp-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-tcp-client-server"/></td>
            </tr>
            <tr>
              <td align="left">tls</td>
              <td align="left">ietf-tls-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-tls-client-server"/></td>
            </tr>
            <tr>
              <td align="left">http</td>
              <td align="left">ietf-http-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-http-client-server"/></td>
            </tr>
            <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>DDDD --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-tcp-client-server"/></li>
          <li>FFFF --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-tls-client-server"/></li>
          <li>GGGG --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-http-client-server"/></li>
          <li>HHHH --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-netconf-client-server"/></li>
          <li>IIII --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-restconf-client-server"/></li>
          <li>XXXX --&gt; the assigned RFC number for this draft</li>
          <li>YYYY --&gt; the assigned RFC number for <xref target="I-D.ietf-alto-performance-metrics"/></li>
        </ul>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="sec-req">
      <name>Design Scope and Requirements</name>
      <section anchor="scope">
        <name>Scope of Data Model for ALTO O&amp;M</name>
        <t>The following items are in the scope of the data model specified in this document:</t>
        <ul spacing="normal">
          <li>Deploying an ALTO server/client.</li>
          <li>Operating and managing an ALTO server/client.</li>
          <li>Configuring functionality/capability configuration of ALTO services.</li>
          <li>Monitoring ALTO-related performance metrics.</li>
        </ul>
        <t>This document does not define any data model related to specific
implementation, including:</t>
        <ul spacing="normal">
          <li>Data structures for how to store/deliver ALTO information resources (e.g.,
database schema to store a network map).</li>
          <li>Data structures for how to store information collected from data sources.
(e.g., database schema to store topology collected from an Interface to the
Routing System (I2RS) client <xref target="RFC7921"/>)</li>
        </ul>
      </section>
      <section anchor="requirements">
        <name>Basic Requirements</name>
        <t>Based on discussions and recommendations in <xref target="RFC7285"/> and <xref target="RFC7971"/>, the
data model provided by this document satisfies basic requirements listed in
<xref target="TableReq"/>.</t>
        <table anchor="TableReq">
          <name>Basic Requirements of Data Model for ALTO O&amp;M.</name>
          <thead>
            <tr>
              <th align="left">Requirement</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">R1: The data model should support configuration for ALTO server setup.</td>
              <td align="left">Section 16.1 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R2: The data model should provide logging management.</td>
              <td align="left">Section 16.2.1 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R3: The data model should provide ALTO-related management information.</td>
              <td align="left">Section 16.2.2 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R4: The data model should support configuration for security policy management.</td>
              <td align="left">Section 16.2.6 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R5-1: The data model should support configuration for different data sources.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285"/>, Section 3.2 of <xref target="RFC7971"/></td>
            </tr>
            <tr>
              <td align="left">R5-2: The data model should support configuration for information resource generation algorithms.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R5-3: The data model should support configuration for access control at information resource level.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R6: The data model should provide metrics for server failures.</td>
              <td align="left">Section 16.2.3 of <xref target="RFC7285"/>, Section 3.3 of <xref target="RFC7971"/></td>
            </tr>
            <tr>
              <td align="left">R7: The data model should provide performance monitoring for ALTO-specific metrics.</td>
              <td align="left">Section 16.2.5 of <xref target="RFC7285"/>, Section 3.4 of <xref target="RFC7971"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="extra-req">
        <name>Additional Requirements for Extensibility</name>
        <t>R8: As the ALTO protocol is extensible, the data model for ALTO O&amp;M should
allow for augmentation to support potential future extensions.</t>
      </section>
      <section anchor="overview-of-alto-om-data-model-for-reference-alto-architecture">
        <name>Overview of ALTO O&amp;M Data Model for Reference ALTO Architecture</name>
        <t><xref target="alto-ref-arch"/> shows a reference architecture for 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>
        <t>The following server components need to implement <tt>ietf-alto.yang</tt> (<xref target="alto-model"/>):</t>
        <dl>
          <dt>Server manager:</dt>
          <dd>
            <t>It provides the functionality and configuration of the server-level
  management, including server listen stack setup, server discovery setup,
  logging system configuration, global meta data, and server-level security
  configuration.</t>
          </dd>
          <dt>Information resource manager:</dt>
          <dd>
            <t>It 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 listener. Each data source
  listener defines a communication endpoint that can fetch the 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 <tt>ietf-alto-stats.yang</tt>
(<xref target="alto-stats-model"/>) to provide statistics information:</t>
        <dl>
          <dt>Performance monitor:</dt>
          <dd>
            <t>It collects ALTO-specific performance metrics during the ALTO server is
  running.</t>
          </dd>
          <dt>Logging and fault manager:</dt>
          <dd>
            <t>It collects runtime logs and failures generated by the 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 model 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 data model defined in this document
  (<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>Both the server manager and information resource manager will report
statistics data to the performance monitor and the logging and fault manager.</li>
          <li>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.</li>
          <li>A data source listener will fetch data from the configured data source using
the corresponding data source API in either proactive mode (polling) or
reactive mode (subscription/publication).</li>
          <li>A data source listener will send the preprocessed data to a data
broker.</li>
          <li>An algorithm plugin may read data from an optional data broker to calculate
the ALTO information resource.</li>
        </ul>
        <figure anchor="alto-ref-arch">
          <name>A Reference ALTO Server Architecture and YANG Modules</name>
          <artwork><![CDATA[
  +----------------------+      +-----------------+
  | Performance Monitor: |<-----| Server Manager: |
  | ietf-alto-stats.yang |<-+ +-| ietf-alto.yang  |
  +----------------------+  | | +-----------------+
                          report
  +----------------------+  | | +-------------------+
  | Logging and Fault    |  +---| Information       |
  | Manager:             |<---+ | Resource Manager: |
  | ietf-alto-stats.yang |<-----| ietf-alto.yang    |
  +----------------------+      +-------------------+
                                         ^|
                                         || callback
                                         |v
     .............          ................................
    /             \ <------ . Algorithm Plugin:            .
    . Data Broker .  read   . example-vendor-alto-alg.yang .
    ...............         ................................
           ^
           | write
  +----------------+  Data Source  ++=============++
  | Data Source    |      API      ||             ||
  | Listener:      | <=====-=====> || Data Source ||
  | ietf-alto.yang |               ||             ||
  +----------------+               ++=============++
]]></artwork>
        </figure>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="alto-model">
      <name>Design of ALTO O&amp;M Data Model</name>
      <section anchor="overview-of-alto-om-data-model">
        <name>Overview of ALTO O&amp;M Data Model</name>
        <t>The "ietf-alto" module defined in this document is designed to fit all the requirements listed in <xref target="sec-req"/>.</t>
        <t>As shown in <xref target="tree-str"/>, the top-level container 'alto' in the "ietf-alto" module contains a single
'alto-server' and a list 'alto-client'.</t>
        <t>The list 'alto-client' defines a list of configurations for other applications
to bootstrap an ALTO client. These data nodes can also be used by data sources and information
resource creation algorithms that are configured by an ALTO server instance.</t>
        <t>The container 'alto-server' contains both configuration and operational
data of an administrated ALTO server instance.</t>
        <figure anchor="tree-str">
          <name>IETF ALTO Tree Structure</name>
          <artwork align="center"><![CDATA[
module: ietf-alto
  +--rw alto!
     +--rw alto-client* [client-id] {alto-client}?
     |  ...
     +--rw alto-server {alto-server}?
        +...
        +--rw auth-client* [client-id]
        |  ...
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*      client-ref
        +--rw data-source* [source-id]
        |  ...
        +--rw resource* [resource-id]
           ...
]]></artwork>
        </figure>
      </section>
      <section anchor="data-model-for-alto-client-operation-and-management">
        <name>Data Model for ALTO Client Operation and Management</name>
        <t>As shown in <xref target="tree-alto-client"/>, the 'alto-client' list contains a list of
client-side configurations. Each 'alto-client' entry contains the following
configurations:</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-client
     |     +---u alto-server-discovery-client
     ...
]]></artwork>
        </figure>
      </section>
      <section anchor="data-model-for-server-level-operation-and-management">
        <name>Data Model for Server-level Operation and Management</name>
        <t>The ALTO server instance contains a set of data nodes 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 HTTP, TLS, and TCP layers (<xref target="tree-alto-gp"/>).</t>
            <figure anchor="tree-alto-gp">
              <name>IETF ALTO Server Groupings Structure</name>
              <artwork align="center"><![CDATA[
  grouping alto-server:
    +-- base-uri?   inet:uri
  grouping alto-server-listen-stack:
    +-- (transport)
       +--:(http) {http-listen}?
       |  +-- http
       |     +-- tcp-server-parameters
       |     |  +---u tcp:tcp-server-grouping
       |     +-- http-server-parameters
       |     |  +---u http:http-server-grouping
       |     +-- alto-server-parameters
       |        +---u alto-server
       +--:(https)
          +-- https
             +-- tcp-server-parameters
             |  +---u tcp:tcp-server-grouping
             +-- tls-server-parameters
             |  +---u tls:tls-server-grouping
             +-- http-server-parameters
             |  +---u http:http-server-grouping
             +-- alto-server-parameters
                +---u alto-server
]]></artwork>
            </figure>
          </section>
          <section anchor="alto-server-discovery-setup">
            <name>ALTO Server Discovery Setup</name>
            <t>In practice, for a large-scale network consisting of multiple administrative
domains, the information about the network may be partitioned and distributed
over multiple ALTO servers. That may require discovery and communication among
different ALTO servers.</t>
            <t>The "ietf-alto" module provides the configuration for how an ALTO server can be
discovered by another ALTO server or client on demand (<xref target="tree-alto-disc-gp"/>).
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:
    +-- (server-discovery-manner)?
       +--:(reverse-dns) {xdom-disc}?
          +-- rdns-naptr-records
             +-- static-prefix*           inet:ip-prefix
             +-- dynamic-prefix-source*   data-source-ref
]]></artwork>
            </figure>
            <t>The 'server-discovery' node provides configuration for the discovery of ALTO servers
using a variety of mechanisms. The initial version of the "ietf-alto" module only defines the 'reverse-dns'
case that is used to configure DNS NAPTR records for ALTO server discovery
as sugested by <xref target="RFC7286"/> and <xref target="RFC8686"/>. It configures a set of
endpoints that can be served by this ALTO server. The node
contains two leaf lists. The 'static' list contains a list of manually configured
endpoints. The '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>The 'cost-type' list is the registry for the cost types that can be used in the
ALTO server.</li>
            <li>The 'meta' list contains the customized meta data of the ALTO server. It is
populated into the meta field of the default Information Resource Directory
(IRD).</li>
          </ul>
        </section>
        <section anchor="data-model-for-security-management">
          <name>Data Model for Security Management</name>
          <t>To satisfy R4 in <xref target="requirements"/>, the data model leverages HTTP and TLS to
provide basic security management for an ALTO server. All the related
configurations are covered by the server listen stack.</t>
        </section>
      </section>
      <section anchor="data-model-for-alto-server-configuration-management">
        <name>Data Model for ALTO Server Configuration Management</name>
        <section anchor="data-source">
          <name>Data Source Configuration Management</name>
          <t>To satisfy R5-1 in <xref target="requirements"/>, the ALTO server instance contains a list
of 'data-source' entries to subscribe the data sources from which ALTO
information resources are derived (Section 16.2.4 of <xref target="RFC7285"/>).</t>
          <figure anchor="tree-data-src">
            <name>IETF ALTO Server Data Source Subtree Structure</name>
            <artwork align="center"><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server {alto-server}?
        ...
        +--rw data-source* [source-id]
        |  +--rw source-id                    source-id
        |  +--rw source-type                  identityref
        |  +--rw (update-policy)
        |  |  +--:(reactive)
        |  |  |  +--rw (publish-mode)?
        |  |  |     +--:(on-change)
        |  |  |     |  +--rw on-change        empty
        |  |  |     +--:(periodic)
        |  |  |        +--rw feed-interval    uint32
        |  |  +--:(proactive)
        |  |     +--rw poll-interval          uint32
        |  +--rw (source-params)?
        ...
]]></artwork>
          </figure>
          <t>As shown in <xref target="tree-data-src"/>, a 'data-source' list entry includes:</t>
          <ul spacing="normal">
            <li>A unique 'source-id' for resource creation algorithms to reference.</li>
            <li>The 'source-type' attribute to declare the type of the data source.</li>
            <li>The 'update-policy' to specify how to get the data update from the data
source.</li>
            <li>The 'source-params' to specify where and how to query the data.</li>
          </ul>
          <t>The update policy can be either reactive or proactive. For the reactive update,
the ALTO server reactively waits for the data source to push updates. For the
proactive update, the ALTO server proactively fetches the data source
periodically.</t>
          <t>Two publish modes are available to support reactive updates:</t>
          <ul spacing="normal">
            <li>If the 'on-change' attribute is present, the data source is expected to push
the update as soon as the data source changes.</li>
            <li>Otherwise, if the 'feed-interval' attribute is present, the data source is
expected to push the updates periodically. The value of 'feed-interval'
specifies the interval of pushing the data change updates in milliseconds.
If 'feed-interval' is zero, the data source is expected to work in the
'on-change' mode.</li>
          </ul>
          <t>To use the proactive update, the 'poll-interval' attribute MUST be present. The
value of 'poll-interval' specifies the interval of fetching the data in
milliseconds. If 'poll-interval' is zero, the data source listener will not
automatically fetch the data source periodically. In this case, a algorithm
plugin can still call the data source listener to fetch the data at runtime.</t>
          <t>The 'data-source/source-params' node can be augmented for different types of
data sources.</t>
          <t>This data model only includes common configuration parameters for an ALTO server
to correctly interact with a data source. The implementation-specific parameters
of any certain data source can be augmented in another module. An example is
included in <xref target="example-data-source"/>.</t>
        </section>
        <section anchor="alto-information-resources-configuration-management">
          <name>ALTO Information Resources Configuration Management</name>
          <t>To satisfy R5-2 and R-3, the ALTO server instance contains a list of 'resource'
entries (<xref target="tree-alto-server-rsc"/>). Each 'resource' entry contains the configurations of an ALTO
information resource (See Section 8.1 of <xref target="RFC7285"/>). The operator of the ALTO
server can use this model to create, update, and remove the ALTO information
resources.</t>
          <t>Each 'resource' entry provides configurations 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 include two categories:</t>
          <ol spacing="normal" type="1"><li>One category of the type-specific parameters is common for the same type
of ALTO information resource. They declare the Capabilities of the ALTO
information resource (Section 9.1.3 of <xref target="RFC7285"/>).</li>
            <li>The other category of the type-specific parameters is algorithm-specific.
The developer of the ALTO server can implement their own creation algorithms
and augment the 'algorithm' node to declare algorithm-specific input
parameters.</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>As per Section 15.5.2 of <xref target="RFC7285"/>, the "ietf-alto" module also defines
authentication and authorization related configuration to employ access control
at the information resource level. The ALTO server returns the IRD to the ALTO
client based on its authentication information.</t>
          <t>The information resource access control is supported using the structure shown in <xref target="tree-auth"/>.</t>
          <figure anchor="tree-auth">
            <name>IETF ALTO Client Authentication Subtree Structure</name>
            <artwork align="center"><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server {alto-server}?
        ...
        +--rw auth-client* [client-id]
        |  +--rw client-id                  string
        |  +--rw (authentication)?
        |     +--:(http)
        |     |  +--rw http-auth-client
        |     |          {http-listen,http:client-auth-supported,
        |     |           http:local-users-supported}?
        |     |     +--rw user-id    http-user-id-ref
        |     +--:(https)
        |        +--rw https-auth-client
        |                {http:client-auth-supported,
        |                 http:local-users-supported}?
        |     |     +--rw user-id    https-user-id-ref
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*      client-ref
        ...
]]></artwork>
          </figure>
          <t>The above structure can be used to configure the role-based access control:</t>
          <ul spacing="normal">
            <li>'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 server, but the
operators or future documents can augment the 'authentication' choice for
different authentication mechanisms.</li>
            <li>'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'. For a given authenticated ALTO client, if one of the roles
containing it is allowed to access a resource, this client is allowed to
access the resource.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="alto-stats-model">
      <name>Design of ALTO O&amp;M Statistics Data Model</name>
      <t>The "ietf-alto-stats" module augments the "ietf-alto" module to include
statistics at the ALTO server and information resource level (<xref target="tree-stat"/>).</t>
      <figure anchor="tree-stat">
        <name>IETF ALTO Statistics Structure</name>
        <artwork align="center"><![CDATA[
module: ietf-alto-stats

  augment /alto:alto/alto:alto-server:
    +--rw server-level-monitor-config
    |  +--rw time-window-size?   uint32
    +--ro server-level-stats
       +---u server-level-stats
  augment /alto:alto/alto:alto-server/alto:resource:
    +--ro resource-level-stats
       +---u resource-level-stats

  grouping server-level-stats:
    +-- discontinuity-time?    yang:timestamp
    +-- last-report-time?      yang:timestamp
    +-- num-total-req?         yang:counter64
    +-- num-total-succ?        yang:counter64
    +-- num-total-fail?        yang:counter64
    +-- num-total-last-req?    yang:gauge64
    +-- num-total-last-succ?   yang:gauge64
    +-- num-total-last-fail?   yang:gauge64
  grouping network-map-stats:
    +-- num-map-pid?   yang:gauge64
  grouping prop-map-stats:
    +-- num-map-entry?   yang:gauge64
  grouping cdni-stats:
    +-- num-base-obj?   yang:gauge64
  grouping upd-stream-stats:
    +-- num-upd-stream?           yang:gauge64
    +-- num-upd-msg-total?        yang:gauge64
    +-- num-upd-msg-max?          yang:gauge64
    +-- num-upd-msg-min?          yang:gauge64
    +-- num-upd-msg-avg?          yang:gauge64
    +-- num-upd-msg-total-last?   yang:gauge64
    +-- num-upd-msg-max-last?     yang:gauge64
    +-- num-upd-msg-min-last?     yang:gauge64
    +-- num-upd-msg-avg-last?     yang:gauge64
  grouping resource-level-stats:
    +-- discontinuity-time?    yang:timestamp
    +-- last-report-time?      yang:timestamp
    +-- num-res-upd?           yang:counter64
    +-- res-mem-size?          uint64
    +-- res-enc-size?          uint64
    +-- num-res-req?           yang:counter64
    +-- num-res-succ?          yang:counter64
    +-- num-res-fail?          yang:counter64
    +-- num-res-last-req?      yang:gauge64
    +-- num-res-last-succ?     yang:gauge64
    +-- num-res-last-fail?     yang:gauge64
    +-- network-map-stats
    |  +---u network-map-stats
    +-- endpoint-prop-stats
    |  +---u prop-map-stats
    +-- property-map-stats
    |  +---u prop-map-stats
    +-- cdni-stats
    |  +---u cdni-stats
    +-- upd-stream-stats
]]></artwork>
      </figure>
      <section anchor="model-for-alto-server-failure-monitoring">
        <name>Model for ALTO Server Failure Monitoring</name>
        <t>To satisfy R6 in <xref target="requirements"/>, the "ietf-alto-stats" module contains statistics that indicate server failures (<xref target="tree-stat"/>).</t>
        <t>More specifically, 'num-total-<em>' and 'num-total-last-</em>' provide server-level
failure counters; 'num-res-<em>' and 'num-res-last-</em>' 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>Requests and responses for each information resource</li>
          <li>CPU and memory utilization</li>
          <li>ALTO map updates</li>
          <li>Number of PIDs</li>
          <li>ALTO map sizes</li>
        </ul>
        <t>Besides the above measurement information suggested by <xref target="RFC7285"/> and <xref target="RFC7971"/>,
the "ietf-alto-stats" module also contains useful measurement information for other ALTO
extensions:</t>
        <ul spacing="normal">
          <li>'num-map-entry' and 'num-base-obj' provide measurement for number of generic
ALTO entities (for <xref target="RFC9240"/> and <xref target="RFC9241"/>)</li>
          <li>'num-upd-stream' and 'num-upd-msg-*' provide statistics for update streams and
messages (for <xref target="RFC8189"/>)</li>
        </ul>
        <t>The "ietf-alto-stats" module only focuses on the performance metrics that can be directly
measured at the ALTO server. The following metrics for "measurement of the
impact" suggested by <xref target="RFC7971"/> are not contained in this data model:</t>
        <ul spacing="normal">
          <li>Total amount and distribution of traffic</li>
          <li>Application performance</li>
        </ul>
        <!-- End of sections -->

<!--
Note: current kramdown-rfc tool does not support recursive inclusion.
Simply put the YANG module section here and wait for a future update.
See details: https://github.com/cabo/kramdown-rfc/issues/106
-->

</section>
    </section>
    <section anchor="alto-oam-yang-modules">
      <name>ALTO OAM YANG Modules</name>
      <section anchor="the-ietf-alto-yang-module">
        <name>The "ietf-alto" YANG Module</name>
        <sourcecode type="yang" markers="true" name="ietf-alto@2023-02-23.yang"><![CDATA[
module ietf-alto {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-alto";
  prefix alto;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types, Section 4";
  }
  import ietf-tcp-server {
    prefix tcp;
    reference
      "RFC DDDD: YANG Groupings for TCP Clients and TCP Servers";
  }
  import ietf-tls-server {
    prefix tls;
    reference
      "RFC FFFF: YANG Groupings for TLS Clients and TLS Servers";
  }
  import ietf-http-server {
    prefix http;
    reference
      "RFC GGGG: YANG Groupings for HTTP Clients and HTTP Servers";
  }

  organization
    "IETF ALTO Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/alto/about/>
     WG List:  <alto@ietf.org>";
  description
    "This YANG module defines a set of configured and operational
     parameters of an administrated ALTO server instance.

     Copyright (c) 2023 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2023-02-23 {
    description
      "Initial Version.";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer Traffic
                 Optimization (ALTO) Protocol";
  }

  // Features

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

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

  feature http-listen {
    description
      "The 'http-listen' feature is only used for test deployment.
       This feature shouldn't be used in the production
       deployment.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 8.3.5 ";
  }

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

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

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

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

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

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

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

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

  // Base identities

  identity resource-type {
    description
      "Base identity for type of information resource.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 8.1 ";
  }

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

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

  identity cost-mode {
    description
      "The cost mode indicates how costs should be interpreted.
       Specifically, the cost mode attribute indicates whether
       indicated costs should be interpreted as numerical
       values or ordinal rankings.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.2
       RFC 9274: A Cost Mode Registry for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

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

  // Identities for ALTO information resources

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

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

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

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

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

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

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

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

  // Identities for cost mode

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

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

  identity array {
    if-feature "path-vector";
    base cost-mode;
    description
      "This mode indicates that every cost value in the response
       body of a (Filtered) Cost Map or an Endpoint Cost Service is
       interpreted as a JSON array.";
    reference
      "RFC 9275: An Extension for Application-Layer Traffic
                 Optimization (ALTO): Path Vector, Section 6.5.2";
  }

  // Identities for cost metrics

  identity routingcost {
    base cost-metric;
    description
      "This metric conveys a generic measure for the cost of
       routing traffic from a source to a destination.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.1.1";
  }

  identity ane-path {
    if-feature "path-vector";
    base cost-metric;
    description
      "This metric indicates that the value of such a cost type
       conveys an array of Abstract Network Element (ANE) names,
       where each ANE name uniquely represents an ANE traversed by
       traffic from a source to a destination.";
    reference
      "RFC 9275: An Extension for Application-Layer Traffic
                 Optimization (ALTO): Path Vector, Section 6.5.1";
  }

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

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

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

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

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

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

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

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

  // Identities for cost sources

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

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

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

  // Typedefs

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

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

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

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

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

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

  typedef source-id {
    type string {
      length "1..max";
    }
    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 resource-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:resource"
         + "/alto:resource-id";
    }
    description
      "Type to reference a resource identifier.";
  }

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

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

  // Groupings

  grouping filter-costmap-cap {
    description
      "This grouping defines a data model for
       FilteredCostMapCapabilities.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 11.3.2.4";
    leaf-list cost-type-name {
      type cost-type-ref;
      min-elements 1;
      description
        "Supported cost types.";
    }
    leaf cost-constraints {
      type boolean;
      default false;
      description
        "If set to true, then the ALTO server allows cost
         constraints to be included in requests to the
         corresponding URI.";
    }
    leaf max-cost-types {
      if-feature "multi-cost";
      type uint32;
      default "0";
      description
        "If present with value N greater than 0, this resource
         understands the multi-cost extensions and can return a
         multi-cost map with any combination of N or
         fewer cost types in the 'cost-type-names' list.";
    }
    leaf-list testable-cost-type-name {
      if-feature "multi-cost";
      type cost-type-ref;
      description
        "If present, the resource allows constraint tests, but only
         on the cost type names in this array.";
    }
    container calendar-attributes {
      if-feature "cost-calendar";
      description
        "Configuration for CalendarAttributes.";
      reference
        "RFC 8896: Application-Layer Traffic Optimization (ALTO)
                   Cost Calendar, Section 4.1";
      leaf-list cost-type-name {
        type cost-type-ref;
        min-elements 1;
        description
          "An array of one or more elements indicating the cost
           type names in the IRD entry to which the values of
           'time-interval-size' and 'number-of-intervals' apply.";
      }
      leaf time-interval-size {
        type decimal64 {
          fraction-digits 4;
        }
        units "seconds";
        mandatory true;
        description
          "The duration of an ALTO Calendar time interval.";
      }
      leaf number-of-intervals {
        type uint32 {
          range "1..max";
        }
        mandatory true;
        description
          "A strictly positive integer (greater or equal to 1) that
           indicates the number of values of the Cost Calendar
           array.";
      }
    }
  }

  grouping algorithm {
    description
      "This grouping defines the base data model for information
       resource creation algorithm.";
    choice algorithm {
      mandatory true;
      description
        "Information resource creation algorithm to be augmented.";
    }
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer Traffic
                 Optimization (ALTO) Protocol, Section 5.4.2";
  }

  grouping alto-server {
    description
      "A reuseable grouping for configuring an ALTO server without
       any consideration for how underlying transport sessions are
       established.";
    leaf base-uri {
      type inet:uri;
      description
        "The base URI for the ALTO server.";
    }
  }

  grouping alto-server-listen-stack {
    description
      "A reuseable grouping for configuring an ALTO server
       'listen' protocol stack for a single connection.";
    choice transport {
      mandatory true;
      description
        "Selects between available transports.";
      case http {
        if-feature "http-listen";
        container http {
          description
            "Configures ALTO server stack assuming that
             TLS-termination is handled externally.";
          container tcp-server-parameters {
            description
              "A wrapper around the TCP server parameters
               to avoid name collisions.";
            uses tcp:tcp-server-grouping {
              refine "local-port" {
                default "80";
                description
                  "The RESTCONF server will listen on the IANA-
                   assigned well-known port value for 'http' (80)
                   if no value is specified.";
              }
            }
          }
          container http-server-parameters {
            description
              "A wrapper around the HTTP server parameters
               to avoid name collisions.";
            uses http:http-server-grouping;
          }
          container alto-server-parameters {
            description
              "A wrapper around the ALTO server parameters
               to avoid name collisiions.";
            uses alto-server;
          }
        }
      }
      case https {
        container https {
          description
            "Configures ALTO server stack assuming that
             TLS-termination is handled internally.";
          container tcp-server-parameters {
            description
              "A wrapper around the TCP server parameters
               to avoid name collisions.";
            uses tcp:tcp-server-grouping {
              refine "local-port" {
                default "443";
                description
                  "The ALTO server will listen on the IANA-
                   assigned well-known port value for 'https'
                   (443) if no value is specified.";
              }
            }
          }
          container tls-server-parameters {
            description
              "A wrapper around the TLS server parameters
               to avoid name collisions.";
            uses tls:tls-server-grouping;
          }
          container http-server-parameters {
            description
              "A wrapper around the HTTP server parameters
               to avoid name collisions.";
            uses http:http-server-grouping;
          }
          container alto-server-parameters {
            description
              "A wrapper around the ALTO server parameters
               to avoid name collisions.";
            uses alto-server;
          }
        }
      }
    }
  }

  grouping alto-server-discovery {
    description
      "Grouping for the configuration of how to set up server
       discovery for clients or other ALTO servers to discovery the
       URI of this ALTO server.";
    choice method {
      description
        "Selects among available server discovery methods.";
      case reverse-dns {
        if-feature "xdom-disc";
        description
          "Configures DNS NAPTR records for cross-domain ALTO server
           discovery using reverse DNS lookup.";
        reference
          "RFC 8686: Application-Layer Traffic Optimization (ALTO)
                     Cross-Domain Server Discovery.";
        container rdns-naptr-records {
          description
            "Configuration parameters for DNS NAPTR records.";
          leaf-list static-prefix {
            type inet:ip-prefix;
            description
              "Specifies a list of static IP prefixes.";
          }
          leaf-list dynamic-prefix-source {
            type data-source-ref;
            description
              "Dynamic IP prefixes collected from data sources.";
          }
        }
      }
    }
  }

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

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

  // Top-level container

  container alto {
    presence "The ALTO service is enabled";
    description
      "Indicates a set of parameters for both ALTO clients and
       servers. A single device can implement either alto-client or
       alto-server. No need to implement both.";
    list alto-client {
      if-feature alto-client;
      key "client-id";
      description
        "The ALTO client configuration.";
      leaf client-id {
        type string;
        description
          "A unique identifier of a client that can be referenced
           by a data source or a resource creation algorithm to
           communicate with other ALTO servers.";
      }
      container server-discovery {
        description
          "Specifies a set of parameters for ALTO server discovery.";
        uses alto-server-discovery-client;
      }
    }
    container alto-server {
      if-feature alto-server;
      description
        "The ALTO server instance configuration.";
      container listen {
        description
          "Configure the ALTO server to listen for ALTO clients.";
        uses alto-server-listen-stack;
      }
      container server-discovery {
        description
          "Configures how the ALTO server to be discovered by
           others.";
        uses alto-server-discovery;
      }
      container logging-system {
        description
          "Configure logging system to capture log messages
           generated by the ALTO server.";
        uses alto-logging-system;
      }
      list cost-type {
        key "cost-type-name";
        description
          "Mapping between name and referenced cost type.";
        leaf cost-type-name {
          type cost-type-name;
          description
            "The name to reference a cost type.";
        }
        leaf cost-mode {
          type identityref {
            base cost-mode;
          }
          mandatory true;
          description
            "The referenced cost mode.";
        }
        leaf cost-metric {
          type identityref {
            base cost-metric;
          }
          mandatory true;
          description
            "The referenced cost metric.";
        }
        leaf description {
          type string;
          description
            "A human-readable description fo the 'cost-mode' and
             'cost-metric'.";
        }
        container cost-context {
          if-feature "performance-metrics";
          description
            "Context of how the metric is obtained.";
          leaf cost-source {
            type identityref {
              base cost-source;
            }
            mandatory true;
            description
              "The referenced cost source.";
          }
          container parameters {
            description
              "Additional computation parameters for the cost
               source.";
            choice parameters {
              description
                "Cases of parameters to be augmented.";
            }
          }
        }
      }
      list meta {
        key "meta-key";
        description
          "Mapping of custom meta information";
        reference
          "RFC 7285: Application-Layer Traffic Optimization
                     (ALTO) Protocol, Section 8.4.1";
        leaf meta-key {
          type meta-key;
          description
            "Custom meta key";
        }
        leaf meta-value {
          type binary;
          mandatory true;
          description
            "Custom meta value encoded with the base64 encoding
             schema. The encoded value must be a valid JSON
             value.";
        }
      }
      list auth-client {
        key "client-id";
        description
          "List of authenticated ALTO clients.";
        leaf client-id {
          type string;
          description
            "Identifier to reference an ALTO client.";
        }
        choice authentication {
          description
            "Choice of authentication methods to identify this
             ALTO client. If no authentication method is
             configured, the client must be ignored.";
          case http {
            description
              "The client is authenticated by the HTTP server.";
            container http-auth-client {
              if-feature "http-listen";
              if-feature "http:client-auth-supported";
              if-feature "http:local-users-supported";
              description
                "Parameters of the authenticated HTTP client.";
              leaf user-id {
                type http-user-id-ref;
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   HTTP client.";
              }
            }
          }
          case https {
            description
              "The client is authenticated by the HTTP server.";
            container https-auth-client {
              if-feature "http:client-auth-supported";
              if-feature "http:local-users-supported";
              description
                "Parameters of the authenticated HTTPS client.";
              leaf user-id {
                type https-user-id-ref;
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   HTTPS client.";
              }
            }
          }
        }
      }
      list role {
        key "role-name";
        description
          "List of roles for access control.";
        leaf role-name {
          type role-name;
          description
            "Name of a role for access control.";
        }
        leaf-list client {
          type client-ref;
          description
            "List of authenticated ALTO clients assigned to the
             role.";
        }
      }
      list data-source {
        key "source-id";
        description
          "List of subscribed data sources.";
        leaf source-id {
          type source-id;
          description
            "Data source id that can be referenced by information
             resource creation algorithms.";
        }
        leaf source-type {
          type identityref {
            base source-type;
          }
          mandatory true;
          description
            "Identify the type of the data source.";
        }
        choice update-policy {
          mandatory true;
          description
            "Policy to get updates from data sources.";
          case reactive {
            description
              "Configuration for the data source listener to
               reactively subscribe data and wait for updates
               published by the data source.";
            choice publish-mode {
              description
                "Configuration for when the data source publish an
                 update.";
              case on-change {
                description
                  "The data source is requested to publish an
                   update once the data has a change.";
                leaf on-change {
                  type empty;
                  mandatory true;
                  description
                    "Indicates an on-change subscription.";
                }
              }
              case periodic {
                description
                  "The data source is requested to periodically
                   publish an update.";
                leaf feed-interval {
                  type uint32;
                  units "seconds";
                  mandatory true;
                  description
                    "Specifies the duration of time that should
                     occur between periodic push updates, in units
                     of seconds. If it is set to zero, it is
                     equivalent to the on-change mode.";
                }
              }
            }
          }
          case proactive {
            description
              "Configuration for the data source listener to
               proactively pull data from the data source.";
            leaf poll-interval {
              type uint32;
              units "seconds";
              mandatory true;
              description
                "Polling interval in seconds for proactive mode. If
                 it is set to zero, the data source listener will
                 never pull data periodically. The data can still
                 be pulled when an algorithm plugin of an
                 information resource calls this data source
                 listener. This can be useful for some on-demand
                 settings.";
            }
          }
        }
        choice source-params {
          description
            "Data source specific configuration.";
          reference
            "RFC XXXX: YANG Data Models for the Application-Layer
                       Traffic Optimization (ALTO) Protocol,
                       Section 5.4.1";
        }
      }
      list resource {
        key "resource-id";
        description
          "ALTO information resources to be defined";
        leaf resource-id {
          type resource-id;
          description
            "resource-id to be defined.";
        }
        leaf resource-type {
          type identityref {
            base resource-type;
          }
          mandatory true;
          description
            "identityref to be defined.";
        }
        leaf description {
          type string;
          description
            "The optional description for this information
             resource.";
        }
        leaf-list accepted-role {
          type role-ref;
          description
            "Roles allowed to access this information resource.";
        }
        leaf-list dependency {
          type resource-ref;
          description
            "A list of dependent information resources.";
        }
        container alto-ird-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:ird")';
          description
            "IRD-specific configuration.";
          leaf delegation {
            type inet:uri;
            mandatory true;
            description
              "Upstream IRD to be delegated.";
          }
        }
        container alto-networkmap-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:network-map")';
          description
            "Filtered Network Map specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Sections 11.2.1 and
                       11.3.1";
          leaf is-default {
            type boolean;
            description
              "Sets whether this is the default network map.";
          }
          leaf filtered {
            type boolean;
            default false;
            description
              "Configures whether filtered network map is
               supported.";
          }
          uses algorithm;
        }
        container alto-costmap-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:cost-map")';
          description
            "Filtered Cost Map specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Sections 11.2.2 and
                       11.3.2";
          leaf filtered {
            type boolean;
            description
              "Configures whether filtered cost map is supported.";
          }
          uses filter-costmap-cap;
          uses algorithm;
        }
        container alto-endpointcost-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:endpoint-cost")';
          description
            "Endpoint Cost Service specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Section 11.5";
          uses filter-costmap-cap;
          uses algorithm;
        }
        container alto-endpointprop-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:endpoint-prop")';
          description
            "Endpoint Cost Service specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Section 11.5";
          leaf-list prop-type {
            type endpoint-property;
            min-elements 1;
            description
              "Supported endpoint properties.";
          }
          uses algorithm;
        }
        container alto-propmap-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:property-map")';
          if-feature "propmap";
          description
            "(Filtered) Entity Property Map specific
             configuration.";
          reference
            "RFC 9240: An ALTO Extension: Entity Property Maps";
          uses algorithm;
        }
        container alto-cdni-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:cdni")';
          if-feature "cdni";
          description
            "CDNi specific configuration.";
          reference
            "RFC 9241: Content Delivery Network Interconnection
                       (CDNI) Request Routing: CDNI Footprint and
                       Capabilities Advertisement using ALTO";
          uses algorithm;
        }
        container alto-update-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:update")';
          if-feature "incr-update";
          description
            "Incremental Updates specific configuration.";
          reference
            "RFC 8895: Application-Layer Traffic Optimization
                       (ALTO) Incremental Updates Using Server-Sent
                       Events (SSE)";
          uses algorithm;
        }
        container resource-limits {
          description
            "Sets resource limits.";
          leaf notify-res-mem-limit {
            type uint64;
            units "bytes";
            description
              "Notification of resource memory usage.

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

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

  // Notifications

  notification alto-resource-event {
    if-feature alto-server;
    description
      "Notifications must be generated when notify-res-mem-limit
       and/or notify-upd-stream-limit thresholds are reached.";
    leaf resource-id {
      type resource-ref;
      mandatory true;
      description
        "Resource identifier.";
    }
    leaf notify-res-mem-threshold {
      type uint64;
      units "bytes";
      description
        "The notify-res-mem-limit threshold has been fired.";
    }
    leaf notify-upd-stream-threshold {
      if-feature "incr-update";
      type uint64;
      description
        "The notify-upd-stream-limit threshold has been fired.";
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="the-ietf-alto-stats-yang-module">
        <name>The "ietf-alto-stats" YANG Module</name>
        <sourcecode type="yang" markers="true" name="ietf-alto-stats@2023-02-23.yang"><![CDATA[
module ietf-alto-stats {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-alto-stats";
  prefix alto-stats;

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types, Section 3";
  }
  import ietf-alto {
    prefix alto;
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  organization
    "IETF ALTO Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/alto/about/>
     WG List:  <alto@ietf.org>";
  description
    "This YANG module defines a set of statistics of an ALTO
     server instance.

     Copyright (c) 2023 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2023-02-23 {
    description
      "Initial Version.";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  // Groupings

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

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

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

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

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

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

  // Augment modules to add statistics

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

  augment "/alto:alto/alto:alto-server/alto:resource" {
    description
      "Augmenting statistics and configuration parameters for
       resource-level monitoring.";
    container resource-level-stats {
      config false;
      description
        "Common statistics for each information resource.";
      uses resource-level-stats;
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The "ietf-alto" and "ietf-alto-stats" YANG modules define data nodes that are designed to be accessed
via YANG based management protocols, such as NETCONF <xref target="RFC6241"/> and RESTCONF
<xref target="RFC8040"/>. Both of these protocols have mandatory-to-implement secure
transport layers (e.g., SSH, TLS) with mutual authentication.</t>
      <t>The Network Access Control Model (NACM) <xref target="RFC8341"/> provides the means to
restrict access for particular users to a pre-configured subset of all
available protocol operations and content.</t>
      <t>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) to these data nodes without proper protection
can have a negative effect on network operations. These are the subtrees and data
nodes in "ietf-alto" YANG module 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>
        <dt>'/alto/alto-server/data-source/feed-interval':</dt>
        <dd>
          <t>This leaf specifies a period for an ALTO server to wait for updates published
  by a data source. A malicious ALTO client could attempt to set a very low (or large)
  value to this node. Setting a very low value could attack the data source.
  Setting a very large value would lead to maintaining stale data in the ALTO server.</t>
        </dd>
        <dt>'/alto/alto-server/data-source/poll-interval':</dt>
        <dd>
          <t>This leaf specifies a period for an ALTO server to proactively poll updates
  from a data source. A malicious client could attempt to set a very low (or large)
  value to this node. Setting a very low value could attack the data source.
   Setting a very large value would lead to maintaining stale data in the ALTO server.</t>
        </dd>
      </dl>
      <t>Some of the readable data nodes in "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.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the following URIs in the "IETF XML Registry" <xref target="RFC3688"/>:</t>
      <artwork><![CDATA[
  URI: urn:ietf:params:xml:ns:yang:ietf-alto
  Registrant Contact: The IESG.
  XML: N/A; the requested URI is an XML namespace.

  URI: urn:ietf:params:xml:ns:yang:ietf-alto-stats
  Registrant Contact: The IESG.
  XML: N/A; the requested URI is an XML namespace.
]]></artwork>
      <t>This document registers the following two YANG modules in the "YANG Module Names" registry
<xref target="RFC6020"/>:</t>
      <artwork><![CDATA[
  Name: ietf-alto
  Namespace: urn:ietf:params:xml:ns:yang:ietf-alto
  Prefix: alto
  Maintained by IANA: N
  Reference: [RFC XXXX]

  Name: ietf-alto-stats
  Namespace: urn:ietf:params:xml:ns:yang:ietf-alto-stats
  Prefix: alto-stats
  Maintained by IANA: N
  Reference: [RFC XXXX]
]]></artwork>
      <!-- End of sections -->

</section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling">
              <organization/>
            </author>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC5424">
          <front>
            <title>The Syslog Protocol</title>
            <author fullname="R. Gerhards" initials="R." surname="Gerhards">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman">
              <organization/>
            </author>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices.  It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages.  The NETCONF protocol operations are realized as remote procedure calls (RPCs).  This document obsoletes RFC 4741.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language.  This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC7285">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Protocol</title>
            <author fullname="R. Alimi" initials="R." role="editor" surname="Alimi">
              <organization/>
            </author>
            <author fullname="R. Penno" initials="R." role="editor" surname="Penno">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." role="editor" surname="Yang">
              <organization/>
            </author>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." surname="Previdi">
              <organization/>
            </author>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="S. Shalunov" initials="S." surname="Shalunov">
              <organization/>
            </author>
            <author fullname="R. Woundy" initials="R." surname="Woundy">
              <organization/>
            </author>
            <date month="September" year="2014"/>
            <abstract>
              <t>Applications using the Internet already have access to some topology information of Internet Service Provider (ISP) networks.  For example, views to Internet routing tables at Looking Glass servers are available and can be practically downloaded to many network application clients.  What is missing is knowledge of the underlying network topologies from the point of view of ISPs.  In other words, what an ISP prefers in terms of traffic optimization -- and a way to distribute it.</t>
              <t>The Application-Layer Traffic Optimization (ALTO) services defined in this document provide network information (e.g., basic network location structure and preferences of network paths) with the goal of modifying network resource consumption patterns while maintaining or improving application performance.  The basic information of ALTO is based on abstract maps of a network.  These maps provide a simplified view, yet enough information about a network for applications to effectively utilize them.  Additional services are built on top of the maps.</t>
              <t>This document describes a protocol implementing the ALTO services. Although the ALTO services would primarily be provided by ISPs, other entities, such as content service providers, could also provide ALTO services.  Applications that could use the ALTO services are those that have a choice to which end points to connect.  Examples of such applications are peer-to-peer (P2P) and content delivery networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7285"/>
          <seriesInfo name="DOI" value="10.17487/RFC7285"/>
        </reference>
        <reference anchor="RFC7286">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Server Discovery</title>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <author fullname="N. Schwan" initials="N." surname="Schwan">
              <organization/>
            </author>
            <author fullname="M. Scharf" initials="M." surname="Scharf">
              <organization/>
            </author>
            <author fullname="H. Song" initials="H." surname="Song">
              <organization/>
            </author>
            <date month="November" year="2014"/>
            <abstract>
              <t>The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource.  ALTO is realized by a client-server protocol.  Before an ALTO client can ask for guidance, it needs to discover one or more ALTO servers.</t>
              <t>This document specifies a procedure for resource-consumer-initiated ALTO server discovery, which can be used if the ALTO client is embedded in the resource consumer.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7286"/>
          <seriesInfo name="DOI" value="10.17487/RFC7286"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8189">
          <front>
            <title>Multi-Cost Application-Layer Traffic Optimization (ALTO)</title>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="N. Schwan" initials="N." surname="Schwan">
              <organization/>
            </author>
            <date month="October" year="2017"/>
            <abstract>
              <t>The Application-Layer Traffic Optimization (ALTO) protocol, specified in RFC 7285, defines several services that return various metrics describing the costs between network endpoints.</t>
              <t>This document defines a new service that allows an ALTO Client to retrieve several cost metrics in a single request for an ALTO filtered cost map and endpoint cost map.  In addition, it extends the constraints to further filter those maps by allowing an ALTO Client to specify a logical combination of tests on several cost metrics.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8189"/>
          <seriesInfo name="DOI" value="10.17487/RFC8189"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams.  The purpose of this document is to provide a single location for this definition.  This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability.  There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.  This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8686">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Cross-Domain Server Discovery</title>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <date month="February" year="2020"/>
            <abstract>
              <t>The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource.  ALTO is realized by a client-server protocol.  Before an ALTO client can ask for guidance, it needs to discover one or more ALTO servers that can provide suitable guidance.</t>
              <t>In some deployment scenarios, in particular if the information about the network topology is partitioned and distributed over several ALTO servers, it may be necessary to discover an ALTO server outside of the ALTO client's own network domain, in order to get appropriate guidance.  This document details applicable scenarios, itemizes requirements, and specifies a procedure for ALTO cross-domain server discovery.</t>
              <t>Technically, the procedure specified in this document takes one IP address or prefix and a U-NAPTR Service Parameter (typically, "ALTO:https") as parameters. It performs DNS lookups (for NAPTR resource records in the "in-addr.arpa." or "ip6.arpa." trees) and returns one or more URIs of information resources related to that IP address or prefix.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8686"/>
          <seriesInfo name="DOI" value="10.17487/RFC8686"/>
        </reference>
        <reference anchor="RFC8895">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Incremental Updates Using Server-Sent Events (SSE)</title>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <date month="November" year="2020"/>
            <abstract>
              <t>The Application-Layer Traffic Optimization (ALTO) protocol (RFC 7285) provides network-related information, called network information resources, to client applications so that clients can make informed decisions in utilizing network resources. This document presents a mechanism to allow an ALTO server to push updates to ALTO clients to achieve two benefits: (1) updates can be incremental, in that if only a small section of an information resource changes, the ALTO server can send just the changes and (2) updates can be immediate, in that the ALTO server can send updates as soon as they are available.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8895"/>
          <seriesInfo name="DOI" value="10.17487/RFC8895"/>
        </reference>
        <reference anchor="RFC8896">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Cost Calendar</title>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="R. Yang" initials="R." surname="Yang">
              <organization/>
            </author>
            <author fullname="Q. Wu" initials="Q." surname="Wu">
              <organization/>
            </author>
            <author fullname="L. Deng" initials="L." surname="Deng">
              <organization/>
            </author>
            <author fullname="N. Schwan" initials="N." surname="Schwan">
              <organization/>
            </author>
            <date month="November" year="2020"/>
            <abstract>
              <t>This document is an extension to the base Application-Layer Traffic Optimization (ALTO) protocol.  It extends the ALTO cost information service so that applications decide not only 'where' to connect but also 'when'.  This is useful for applications that need to perform bulk data transfer and would like to schedule these transfers during an off-peak hour, for example.  This extension introduces the ALTO Cost Calendar with which an ALTO Server exposes ALTO cost values in JSON arrays where each value corresponds to a given time interval.  The time intervals, as well as other Calendar attributes, are specified in the Information Resources Directory and ALTO Server responses.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8896"/>
          <seriesInfo name="DOI" value="10.17487/RFC8896"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-tcp-client-server">
          <front>
            <title>YANG Groupings for TCP Clients and TCP Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <author fullname="Michael Scharf" initials="M." surname="Scharf">
              <organization>Hochschule Esslingen - University of Applied Sciences</organization>
            </author>
            <date day="17" month="April" year="2023"/>
            <abstract>
              <t>   This document defines three YANG 1.1 modules to support the
   configuration of TCP clients and TCP servers.  The modules include
   basic parameters of a TCP connection relevant for client or server
   applications, as well as client configuration required for traversing
   proxies.  The modules can be used either standalone or in conjunction
   with configuration of other stack protocol layers.

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

Editorial Note (To be removed by RFC Editor)

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

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

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

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

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

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

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

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

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

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

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

   *  Appendix B.  Change Log

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

Editorial Note (To be removed by RFC Editor)

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

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

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

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

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

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

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

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

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

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

   *  Appendix A.  Change Log

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-http-client-server-13"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-netconf-client-server">
          <front>
            <title>NETCONF Client and Server Models</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="17" month="April" year="2023"/>
            <abstract>
              <t>   This document defines two YANG modules, one module to configure a
   NETCONF client and the other module to configure a NETCONF server.
   Both modules support both the SSH and TLS transport protocols, and
   support both standard NETCONF and NETCONF Call Home connections.

Editorial Note (To be removed by RFC Editor)

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

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

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

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

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

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

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

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

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

   *  HHHH --&gt; the assigned RFC value for this draft
   Artwork in this document contains placeholder values for the date of
   publication of this draft.  Please apply the following replacement:

   *  2023-04-17 --&gt; the publication date of this draft

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

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

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

   *  Appendix A.  Change Log

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-netconf-client-server-29"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-restconf-client-server">
          <front>
            <title>RESTCONF Client and Server Models</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="17" month="April" year="2023"/>
            <abstract>
              <t>   This document defines two YANG modules, one module to configure a
   RESTCONF client and the other module to configure a RESTCONF server.
   Both modules support the TLS transport protocol with both standard
   RESTCONF and RESTCONF Call Home connections.

Editorial Note (To be removed by RFC Editor)

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

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

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

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

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

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

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

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

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

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

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

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

   *  2023-04-17 --&gt; the publication date of this draft

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

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

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

   *  Appendix A.  Change Log

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-restconf-client-server-29"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7921">
          <front>
            <title>An Architecture for the Interface to the Routing System</title>
            <author fullname="A. Atlas" initials="A." surname="Atlas">
              <organization/>
            </author>
            <author fullname="J. Halpern" initials="J." surname="Halpern">
              <organization/>
            </author>
            <author fullname="S. Hares" initials="S." surname="Hares">
              <organization/>
            </author>
            <author fullname="D. Ward" initials="D." surname="Ward">
              <organization/>
            </author>
            <author fullname="T. Nadeau" initials="T." surname="Nadeau">
              <organization/>
            </author>
            <date month="June" year="2016"/>
            <abstract>
              <t>This document describes the IETF architecture for a standard, programmatic interface for state transfer in and out of the Internet routing system.  It describes the high-level architecture, the building blocks of this high-level architecture, and their interfaces, with particular focus on those to be standardized as part of the Interface to the Routing System (I2RS).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7921"/>
          <seriesInfo name="DOI" value="10.17487/RFC7921"/>
        </reference>
        <reference anchor="RFC7971">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Deployment Considerations</title>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Scharf" initials="M." surname="Scharf">
              <organization/>
            </author>
            <author fullname="H. Seidel" initials="H." surname="Seidel">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." surname="Previdi">
              <organization/>
            </author>
            <date month="October" year="2016"/>
            <abstract>
              <t>Many Internet applications are used to access resources such as pieces of information or server processes that are available in several equivalent replicas on different hosts.  This includes, but is not limited to, peer-to-peer file sharing applications.  The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource. This memo discusses deployment-related issues of ALTO.  It addresses different use cases of ALTO such as peer-to-peer file sharing and Content Delivery Networks (CDNs) and presents corresponding examples. The document also includes recommendations for network administrators and application designers planning to deploy ALTO, such as recommendations on how to generate ALTO map information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7971"/>
          <seriesInfo name="DOI" value="10.17487/RFC7971"/>
        </reference>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder">
              <organization/>
            </author>
            <author fullname="P. Shafer" initials="P." surname="Shafer">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <author fullname="R. Wilton" initials="R." surname="Wilton">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model.  This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC8346">
          <front>
            <title>A YANG Data Model for Layer 3 Topologies</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm">
              <organization/>
            </author>
            <author fullname="J. Medved" initials="J." surname="Medved">
              <organization/>
            </author>
            <author fullname="R. Varga" initials="R." surname="Varga">
              <organization/>
            </author>
            <author fullname="X. Liu" initials="X." surname="Liu">
              <organization/>
            </author>
            <author fullname="H. Ananthakrishnan" initials="H." surname="Ananthakrishnan">
              <organization/>
            </author>
            <author fullname="N. Bahadur" initials="N." surname="Bahadur">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for Layer 3 network topologies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8346"/>
          <seriesInfo name="DOI" value="10.17487/RFC8346"/>
        </reference>
        <reference anchor="RFC8641">
          <front>
            <title>Subscription to YANG Notifications for Datastore Updates</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm">
              <organization/>
            </author>
            <author fullname="E. Voit" initials="E." surname="Voit">
              <organization/>
            </author>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore.  Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8641"/>
          <seriesInfo name="DOI" value="10.17487/RFC8641"/>
        </reference>
        <reference anchor="RFC9240">
          <front>
            <title>An Extension for Application-Layer Traffic Optimization (ALTO): Entity Property Maps</title>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <author fullname="K. Gao" initials="K." surname="Gao">
              <organization/>
            </author>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document specifies an extension to the base Application-Layer Traffic Optimization (ALTO) Protocol that generalizes the concept of "endpoint properties", which have been tied to IP addresses so far, to entities defined by a wide set of objects. Further, these properties are presented as maps, similar to the network and cost maps in the base ALTO Protocol. While supporting the endpoints and related Endpoint Property Service defined in RFC 7285, the ALTO Protocol is extended in two major directions. First, from endpoints restricted to IP addresses to entities covering a wider and extensible set of objects; second, from properties for specific endpoints to entire entity property maps. These extensions introduce additional features that allow entities and property values to be specific to a given information resource. This is made possible by a generic and flexible design of entity and property types.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9240"/>
          <seriesInfo name="DOI" value="10.17487/RFC9240"/>
        </reference>
        <reference anchor="RFC9241">
          <front>
            <title>Content Delivery Network Interconnection (CDNI) Footprint and Capabilities Advertisement Using Application-Layer Traffic Optimization (ALTO)</title>
            <author fullname="J. Seedorf" initials="J." surname="Seedorf">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <author fullname="K. Ma" initials="K." surname="Ma">
              <organization/>
            </author>
            <author fullname="J. Peterson" initials="J." surname="Peterson">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <date month="July" year="2022"/>
            <abstract>
              <t>The Content Delivery Networks Interconnection (CDNI) framework in RFC 6707 defines a set of protocols to interconnect CDNs to achieve multiple goals, including extending the reach of a given CDN. A CDNI Request Routing Footprint &amp; Capabilities Advertisement interface (FCI) is needed to achieve the goals of a CDNI. RFC 8008 defines the FCI semantics and provides guidelines on the FCI protocol, but the exact protocol is not specified. This document defines a new Application-Layer Traffic Optimization (ALTO) service, called "CDNI Advertisement Service", that provides an implementation of the FCI, following the guidelines defined in RFC 8008.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9241"/>
          <seriesInfo name="DOI" value="10.17487/RFC9241"/>
        </reference>
        <reference anchor="RFC9275">
          <front>
            <title>An Extension for Application-Layer Traffic Optimization (ALTO): Path Vector</title>
            <author fullname="K. Gao" initials="K." surname="Gao">
              <organization/>
            </author>
            <author fullname="Y. Lee" initials="Y." surname="Lee">
              <organization/>
            </author>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <date month="September" year="2022"/>
            <abstract>
              <t>This document is an extension to the base Application-Layer Traffic Optimization (ALTO) protocol. It extends the ALTO cost map and ALTO property map services so that an application can decide to which endpoint(s) to connect based not only on numerical/ordinal cost values but also on fine-grained abstract information regarding the paths. This is useful for applications whose performance is impacted by specific components of a network on the end-to-end paths, e.g., they may infer that several paths share common links and prevent traffic bottlenecks by avoiding such paths. This extension introduces a new abstraction called the "Abstract Network Element" (ANE) to represent these components and encodes a network path as a vector of ANEs. Thus, it provides a more complete but still abstract graph representation of the underlying network(s) for informed traffic optimization among endpoints.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9275"/>
          <seriesInfo name="DOI" value="10.17487/RFC9275"/>
        </reference>
        <reference anchor="I-D.ietf-alto-performance-metrics">
          <front>
            <title>ALTO Performance Cost Metrics</title>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Y. Richard Yang" initials="Y. R." surname="Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Young Lee" initials="Y." surname="Lee">
              <organization>Samsung</organization>
            </author>
            <author fullname="Dhruv Dhody" initials="D." surname="Dhody">
              <organization>Huawei</organization>
            </author>
            <author fullname="Sabine Randriamasy" initials="S." surname="Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Luis M. Contreras" initials="L. M." surname="Contreras">
              <organization>Telefonica</organization>
            </author>
            <date day="21" month="March" year="2022"/>
            <abstract>
              <t>   The cost metric is a basic concept in Application-Layer Traffic
   Optimization (ALTO), and different applications may use different
   types of cost metrics.  Since the ALTO base protocol (RFC 7285)
   defines only a single cost metric (namely, the generic "routingcost"
   metric), if an application wants to issue a cost map or an endpoint
   cost request in order to identify a resource provider that offers
   better performance metrics (e.g., lower delay or loss rate), the base
   protocol does not define the cost metric to be used.

   This document addresses this issue by extending the specification to
   provide a variety of network performance metrics, including network
   delay, delay variation (a.k.a, jitter), packet loss rate, hop count,
   and bandwidth.

   There are multiple sources (e.g., estimation based on measurements or
   service-level agreement) to derive a performance metric.  This
   document introduces an additional "cost-context" field to the ALTO
   "cost-type" field to convey the source of a performance metric.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-alto-performance-metrics-28"/>
        </reference>
        <reference anchor="RFC6291">
          <front>
            <title>Guidelines for the Use of the "OAM" Acronym in the IETF</title>
            <author fullname="L. Andersson" initials="L." surname="Andersson">
              <organization/>
            </author>
            <author fullname="H. van Helvoort" initials="H." surname="van Helvoort">
              <organization/>
            </author>
            <author fullname="R. Bonica" initials="R." surname="Bonica">
              <organization/>
            </author>
            <author fullname="D. Romascanu" initials="D." surname="Romascanu">
              <organization/>
            </author>
            <author fullname="S. Mansfield" initials="S." surname="Mansfield">
              <organization/>
            </author>
            <date month="June" year="2011"/>
            <abstract>
              <t>At first glance, the acronym "OAM" seems to be well-known and well-understood.  Looking at the acronym a bit more closely reveals a set of recurring problems that are revisited time and again.</t>
              <t>This document provides a definition of the acronym "OAM" (Operations, Administration, and Maintenance) for use in all future IETF documents that refer to OAM.  There are other definitions and acronyms that will be discussed while exploring the definition of the constituent parts of the "OAM" term.  This memo documents an Internet Best Current  Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="161"/>
          <seriesInfo name="RFC" value="6291"/>
          <seriesInfo name="DOI" value="10.17487/RFC6291"/>
        </reference>
      </references>
    </references>
    <?line 2808?>

<section anchor="alto-ext-model">
      <name>Examples of Extending the ALTO O&amp;M Data Model</name>
      <t>Developers and operators can also extend the ALTO O&amp;M data model to align
with their own implementations. Specifically, the following nodes of the data
model can be augmented:</t>
      <ul spacing="normal">
        <li>The <tt>server-discovery-manner</tt> choice of the <tt>server-discovery</tt>.</li>
        <li>The <tt>authentication</tt> choice of each <tt>auth-client</tt>.</li>
        <li>The <tt>data-source</tt> choice.</li>
        <li>The <tt>algorithm</tt> choice of the <tt>resource-params</tt> of each <tt>resource</tt>.</li>
      </ul>
      <section anchor="example-server-disc">
        <name>An Example Module for Extended Server Discovery Manners</name>
        <t>The base data model defined by ietf-alto.yang only includes a reverse DNS based
server discovery manner. The following example module demonstrates how
additional server discovery manners can be augmented into the base data model.</t>
        <t>The case <tt>internet-routing-registry</tt> allows the ALTO server to update the
server URI to the attribute of the corresponding aut-num class in IRR.</t>
        <t>The case <tt>peeringdb</tt> allows the ALTO server to update the server URI to the org
object of the organization record in PeeringDB.</t>
        <artwork><![CDATA[
module example-vendor-alto-server-discovery {
  yang-version 1.1;

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

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

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

  organization
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

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

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

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  augment "/alto:alto/alto:alto-server/alto:server-discovery"
        + "/alto:method" {
    description
      "Examples of server discovery mechanisms provided by the ALTO
       server.";
    case internet-routing-registry {
      description
        "Update descr attributes of an aut-num class in an Internet
         Routing Registry (IRR) database for ALTO server discovery
         using Routing Policy Specification Language (RPSL).";
      reference
        "RFC 2622: Routing Policy Specification Language (RPSL).";
      container irr-params {
        description
          "Configuration parameters for IRR database.";
        leaf aut-num {
          type inet:as-number;
          description
            "The Autonomous System (AS) number to be updated.";
        }
      }
    }
    case peeringdb {
      description
        "Update metadata of a network record in PeeringDB database
         for ALTO server discovery using PeeringDB lookup.";
      container peeringdb-params {
        description
          "Configuration parameters for PeeringDB database.";
        leaf org-id {
          type uint32;
          description
            "Specifies an identifier that refers to the org object
             of the organization record in PeeringDB.";
        }
      }
    }
  }

  augment "/alto:alto/alto:alto-client"
        + "/alto:server-discovery/alto:method" {
    description
      "Examples of server discovery mechanisms used by an ALTO
       client.";
    case internet-routing-registry {
      description
        "Use IRR to discover an ALTO server.";
      reference
        "RFC 2622: Routing Policy Specification Language (RPSL).";
      container irr-params {
        description
          "Configuration for IRR query using RPSL.";
        leaf whois-server {
          type inet:host;
          description
            "Whois server for an IRR query using RPSL.";
        }
      }
    }
    case peeringdb {
      description
        "Use PeeringDB to discover an ALTO server.";
      container peeringdb-params {
        description
          "Configuration for PeeringDB queries.";
        leaf peeringdb-endpoint {
          type inet:uri;
          description
            "Endpoint of PeeringDB API server.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-client-auth">
        <name>An Example Module for Extended Client Authentication Approaches</name>
        <t>The base data model "ietf-alto" only includes the client
authentication approaches directly provided by the HTTP server. However, an
implementation may authenticate clients in different ways. For example, an implementation may
delegate the authentication to a third-party OAuth 2.0 server. The following
example module demonstrates how additional client authentication approaches can
enrich the base data model.</t>
        <t>In this example, the <tt>oauth2</tt> case includes the URI to a third-party OAuth 2.0
based authorization server that the ALTO server can redirect to for the client
authentication.</t>
        <artwork><![CDATA[
module example-vendor-alto-auth {
  yang-version 1.1;

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

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

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

  organization
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

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

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

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  augment "/alto:alto/alto:alto-server/alto:auth-client"
        + "/alto:authentication" {
    description
      "Example of extended ALTO client authentication approaches.";
    case oauth2 {
      description
        "Example of authentication by a third-party OAuth 2.0
         server.";
      container oauth2 {
        description
          "Parameters for authentication by a third-party OAuth 2.0
           server.";
        leaf oauth2-server {
          type inet:uri;
          description
            "The URI to the authorization server.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-data-source">
        <name>Example Module for Extended Data Sources</name>
        <t>The base data model defined by ietf-alto.yang does not include any choice cases
for specific data sources. The following example module demonstrates how a
implementation-specific data source can be augmented into the base data model.</t>
        <t>The <tt>yang-datastore</tt> case is used to import the YANG data from a YANG
model-driven datastore. It includes:</t>
        <ul spacing="normal">
          <li>
            <tt>datastore</tt> to indicate which datastore is fetched.</li>
          <li>
            <tt>target-paths</tt> to specify the list of nodes or subtrees in the datastore.</li>
          <li>
            <tt>protocol</tt> to indicate which protocol is used to access the datastore. Either
<tt>restconf</tt> or <tt>netconf</tt> can be used.</li>
        </ul>
        <artwork><![CDATA[
module example-vendor-alto-data-source {
  yang-version 1.1;

  namespace "https://example.com/ns/vendor-alto-data-source";
  prefix vendor-alto-ds;

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

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

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

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

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

  organization
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

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

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

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

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

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

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

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

  augment "/alto:alto/alto:alto-server/alto:data-source"
        + "/alto:source-params" {
    description
      "Example of data source for YANG datastore.";
    case yang-datastore {
      when 'derived-from-or-self(alto:source-type,'
         + '"yang-datastore")';
      description
        "Example data source for local or remote YANG datastore.";
      container yang-datastore-source-params {
        description
          "YANG datastore specific configuration.";
        leaf datastore {
          type ds:datastore-ref;
          mandatory true;
          description
            "Reference of the datastore from which to get data.";
        }
        list target-paths {
          key name;
          description
            "XML Path Language (XPath) to subscribed YANG datastore
             node or subtree.";
          leaf name {
            type string;
            description
              "Name of the supported XPath or subtree filters.";
          }
          uses yp:selection-filter-types;
        }
        leaf protocol {
          type identityref {
            base protocol-type;
          }
          description
            "Indicates the protocol that is used to access the YANG
             datastore.";
        }
        container restconf {
          uses rcc:restconf-client-app-grouping {
            when 'derived-from-or-self(../protocol, "restconf")';
          }
          description
            "Parameters for the RESTCONF endpoint of the YANG
             datastore.";
        }
        container netconf {
          uses ncc:netconf-client-app-grouping {
            when 'derived-from-or-self(../protocol, "netconf")';
          }
          description
            "Parameters for the NETCONF endpoint of the YANG
             datastore.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-alg">
        <name>An Example Module for Information Resource Creation Algorithm</name>
        <t>The base data model "ietf-alto" does not include any choices cases
for information resource creation algorithms. But developers may augment the
"ietf-alto" module with definitions for custom creation algorithms
for different information resources. The following example module demonstrates
the parameters of a network map creation algorithm that translates an IETF
layer 3 unicast topology into a network map.</t>
        <artwork><![CDATA[
module: example-vendor-alto-alg

  augment /alto:alto/alto:alto-server/alto:resource
            /alto:alto-networkmap-params/alto:algorithm:
    +--:(l3-unicast-cluster)
       +--rw l3-unicast-cluster-algorithm
          +--rw l3-unicast-topo
          |  +--rw source-datastore    alto:data-source-ref
          |  +--rw topo-name?          leafref
          +--rw depth?             uint32
]]></artwork>
        <t>This example defines a creation algorithm called <tt>l3-unicast-cluster-algorithm</tt>
for the network map resource. It takes two algorithm-specific parameters:</t>
        <dl>
          <dt>'l3-unicast-topo':</dt>
          <dd>
            <t>This parameter contains information referring to the target path name of an
operational <tt>yang-datastore</tt> data source node (See <xref target="example-data-source"/>)
subscribed in the <tt>data-source</tt> list (See <xref target="data-source"/>). The referenced
target path in the corresponding <tt>yang-datastore</tt> data source is assumed for
an IETF layer 3 unicast topology defined in <xref target="RFC8346"/>. The algorithm uses
the topology data from this data source to compute the ALTO network map
resource. 'source-datastore' refers to the 'source-id' of the operational
<tt>yang-datastore</tt> data source node, and 'topo-name' refers to the 'name' of
the target path in the source datastore.</t>
          </dd>
          <dt>'depth':</dt>
          <dd>
            <t>This optional parameter sets the depth of the clustering algorithm. For
example, if the depth 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.
The update of the reference data source depends on the used <tt>update-policy</tt> (See
<xref target="data-source"/>).</t>
        <artwork><![CDATA[
module example-vendor-alto-alg {
  yang-version 1.1;

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

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

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

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

  organization
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

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

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

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  augment "/alto:alto/alto:alto-server/alto:resource"
        + "/alto:alto-networkmap-params/alto:algorithm" {
    description
      "Example of a network map creation algorithm.";
    case l3-unicast-cluster {
      description
        "Example algorithm translating a Layer 3 unicast topology
         of Interface to the Routing System (I2RS) to an ALTO
         network map.";
      container l3-unicast-cluster-algorithm {
        description
          "Parameters for l3-unicast-cluster algorithm.";
        container l3-unicast-topo {
          leaf source-datastore {
            type alto:data-source-ref;
            must 'deref(.)/../alto-ds:yang-datastore-source-params'
               + '/alto-ds:datastore '
               + '= "ietf-datastores:operational"'
               {
              error-message
                "The referenced YANG datastore MUST be
                 operational";
            }
            mandatory true;
            description
              "The data source to YANG datastore.";
          }
          leaf topo-name {
            type leafref {
              path '/alto:alto/alto:alto-server/alto:data-source'
                 + '[alto:source-id'
                 + ' = current()/../source-datastore]'
                 + '/alto-ds:yang-datastore-source-params'
                 + '/alto-ds:target-paths/alto-ds:name';
            }
            description
              "The name of the IETF Layer 3 unicast topology.";
          }
          description
            "The data source info to an IETF Layer 3 unicast
             topology.";
        }
        leaf depth {
          type uint32;
          description
            "The depth of the clustering.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-usage">
        <name>Example Usage</name>
        <t>This section presents a complete example showing how the base data model and
all the vendor extended models above are used to set up an ALTO server and
configure corresponding components (e.g., data source listener, information
resource, access control).</t>
        <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "ietf-alto:alto": {
    "alto-server": {
      "listen": {
        "https": {
          "tcp-server-parameters": {
            "local-address": "0.0.0.0"
          },
          "alto-server-parameters": {},
          "http-server-parameters": {
            "server-name": "alto.example.com",
            "client-authentication": {
              "users": {
                "user": [
                  {
                    "user-id": "alice",
                    "basic": {
                      "user-id": "alice",
                      "password": "$0$p8ssw0rd"
                    }
                  }
                ]
              }
            }
          },
          "tls-server-parameters": {
            "server-identity": {}
          }
        }
      },
      "server-discovery": {
        "example-vendor-alto-server-discovery:irr-params": {
          "aut-num": 64496
        }
      },
      "auth-client": [
        {
          "client-id": "alice",
          "https-auth-client": {
            "user-id": "alice"
          }
        },
        {
          "client-id": "bob",
          "example-vendor-alto-auth:oauth2": {
            "oauth2-server": "https://auth.example.com/login"
          }
        }
      ],
      "role": [
        {
          "role-name": "group0",
          "client": [
            "alice",
            "bob"
          ]
        }
      ],
      "data-source": [
        {
          "source-id": "test-yang-ds",
          "source-type": "example-vendor-alto-data-source:yang-\
                                                          datastore",
          "feed-interval": 30,
          "example-vendor-alto-data-source:yang-datastore-source-\
                                                           params": {
            "datastore": "ietf-datastores:operational",
            "target-paths": [
              {
                "name": "network-topology",
                "datastore-xpath-filter": "/network-topology:network\
           -topology/topology[topology-id=bgp-example-ipv4-topology]"
              }
            ],
            "protocol": "restconf",
            "restconf": {
              "listen": {
                "endpoint": [
                  {
                    "name": "example restconf server",
                    "https": {
                      "tcp-server-parameters": {
                        "local-address": "172.17.0.2"
                      },
                      "http-client-parameters": {
                        "client-identity": {
                          "basic": {
                            "user-id": "carol",
                            "cleartext-password": "secret"
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ],
      "resource": [
        {
          "resource-id": "default-network-map",
          "resource-type": "network-map",
          "accepted-role": [
            "group0"
          ],
          "alto-networkmap-params": {
            "is-default": true,
            "example-vendor-alto-alg:l3-unicast-cluster-algorithm": {
              "l3-unicast-topo": {
                "source-datastore": "test-yang-ds",
                "topo-name": "network-topology"
              },
              "depth": 2
            }
          }
        }
      ]
    }
  }
}
]]></artwork>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="ack" numbered="false">
      <name>Acknowledgements</name>
      <t>The authors thank Qin Wu for the help with drafting the initial version of the
YANG modules. Big thanks also to ALTO WG chairs (Mohamed Boucadair and Qin Wu)
and Adrian Farrel, Dong Guo, Jordi Ros Giralt, Luis M. Contreras, 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 review, Andy Bierman for the yangdoctors
review, and Spencer Dawkins for the tsvart review.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
4f8BmtFv4efIAQA=

-->

</rfc>
