<?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.24 (Ruby 3.1.3) -->
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc editing="no"?>
<?rfc tocompact="yes"?>
<?rfc iprnotified="no"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-alto-oam-yang-04" category="std" consensus="true" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="ALTO O&amp;M YANG">A Yang Data Model for OAM and Management of ALTO Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-alto-oam-yang-04"/>
    <author initials="J." surname="Zhang" fullname="Jingxuan Jensen Zhang">
      <organization>Tongji University</organization>
      <address>
        <postal>
          <street>4800 Cao'An Hwy</street>
          <city>Shanghai</city>
          <code>201804</code>
          <country>China</country>
        </postal>
        <email>jingxuan.n.zhang@gmail.com</email>
      </address>
    </author>
    <author initials="D." surname="Dhody" fullname="Dhruv Dhody">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Divyashree Techno Park, Whitefield</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560066</code>
          <country>India</country>
        </postal>
        <email>dhruv.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Gao" fullname="Kai Gao">
      <organization>Sichuan University</organization>
      <address>
        <postal>
          <street>No.24 South Section 1, Yihuan Road</street>
          <city>Chengdu</city>
          <region>Sichuan</region>
          <code>610000</code>
          <country>China</country>
        </postal>
        <email>kaigao@scu.edu.cn</email>
      </address>
    </author>
    <author initials="R." surname="Schott" fullname="Roland Schott">
      <organization>Deutsche Telekom</organization>
      <address>
        <postal>
          <street>Heinrich-Hertz-Strasse 3-7</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>Roland.Schott@telekom.de</email>
      </address>
    </author>
    <author initials="Q." surname="Ma" fullname="Qiufang Ma">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Nanjing</city>
          <region>Jiangsu</region>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>maqiufang1@huawei.com</email>
      </address>
    </author>
    <date year="2023" month="February" day="23"/>
    <area>Networks</area>
    <workgroup>ALTO WG</workgroup>
    <keyword>ALTO, Internet-Draft</keyword>
    <abstract>
      <t>This document defines a YANG data model for Operations, Administration, and
Maintenance (OAM) &amp; Management of Application-Layer Traffic Optimization (ALTO)
Protocol. The operator can use the data model to set up the ALTO server, create,
update and remove ALTO information resources, manage the access control,
configure server discovery, and collect statistical data.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  ALTO Working Group mailing list (alto@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/alto/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/ietf-wg-alto/draft-alto-oam-yang"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines a YANG data model for the Operations, Administration, and
Maintenance (OAM) &amp; Management of Application-Layer Traffic Optimization (ALTO)
Protocol. The basic purpose of this YANG data model is discussed in Section 16
of <xref target="RFC7285"/>. The operator can use the data model to set up the ALTO server,
create, update and remove ALTO information resources, manage the access
control, configure server discovery, and collect statistical data.</t>
      <t>This document only focuses on the common and implementation-agnostic data model
for purposes including deploying an ALTO server/client, operating and managing
a running ALTO server/client, functionality/capability configuration of ALTO
services, and monitoring ALTO-related performance metrics. Any
implementation-specific information is not in the scope of this document.
<xref target="scope"/> illustrates more details about what is and is not in the scope.
<xref target="requirements"/> and <xref target="extra-req"/> define more concrete requirements for the
data model.</t>
      <t>The basic structure of this YANG data model is guided by Section 16 of
<xref target="RFC7285"/> and <xref target="RFC7971"/>. Although the scope of the YANG data model in this
document mainly focuses on the support of the base ALTO protocol <xref target="RFC7285"/> and
the existing ALTO standard extensions (including <xref target="RFC8189"/>, <xref target="RFC8895"/>,
<xref target="RFC8896"/>, <xref target="RFC9240"/>, <xref target="RFC9241"/>, and {RFC9275}), the design will also be
extensible for future standard extensions (e.g.,
<xref target="I-D.ietf-alto-performance-metrics"/>).</t>
      <t>The detailed design of the data model is illustrated by <xref target="alto-model"/> and
<xref target="alto-stats-model"/>. And some examples of how to extend this data model for
the specific ALTO server implementations are shown in <xref target="alto-ext-model"/>.</t>
    </section>
    <section anchor="requirements-language">
      <name>Requirements Language</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here. When the words
appear in lower case, they are to be interpreted with their natural language
meanings.</t>
      <!-- End of sections -->

</section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>This document uses the following acronyms:</t>
      <ul spacing="normal">
        <li>OAM - Operations, Administration, and Maintainance</li>
        <li>O&amp;M - OAM and Management</li>
      </ul>
      <section anchor="tree-diagrams">
        <name>Tree Diagrams</name>
        <t>A simplified graphical representation of the data model is used in this
document. The meaning of the symbols in these diagrams is defined in
<xref target="RFC8340"/>.</t>
      </section>
      <section anchor="prefixes-in-data-node-names">
        <name>Prefixes in Data Node Names</name>
        <t>In this document, names of data nodes and other data model objects are often
used without a prefix, as long as it is clear from the context in which YANG
module each name is defined. Otherwise, names are prefixed using the standard
prefix associated with the corresponding YANG module, as shown in <xref target="tbl-yang-prefixes"/>.</t>
        <table anchor="tbl-yang-prefixes">
          <name>Prefixes and corresponding YANG modules</name>
          <thead>
            <tr>
              <th align="left">Prefix</th>
              <th align="left">YANG module</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">yang</td>
              <td align="left">ietf-yang-types</td>
              <td align="left">
                <xref target="RFC6991"/></td>
            </tr>
            <tr>
              <td align="left">inet</td>
              <td align="left">ietf-inet-types</td>
              <td align="left">
                <xref target="RFC6991"/></td>
            </tr>
            <tr>
              <td align="left">tcp</td>
              <td align="left">ietf-tcp-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-tcp-client-server"/></td>
            </tr>
            <tr>
              <td align="left">tls</td>
              <td align="left">ietf-tls-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-tls-client-server"/></td>
            </tr>
            <tr>
              <td align="left">http</td>
              <td align="left">ietf-http-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-http-client-server"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="placeholders-in-reference-statement">
        <name>Placeholders in reference Statement</name>
        <t>Note to the RFC Editor: This section is to be removed prior to publication.</t>
        <t>This draft contains placeholder values that need to be replaced with finalized
values at the time of publication.  This note summarizes all of the
substitutions that are needed.  No other RFC Editor instructions are specified
elsewhere in this document.</t>
        <t>Artwork in this document contains shorthand references to drafts in progress.
Please apply the following replacements:</t>
        <ul spacing="normal">
          <li>DDDD --&gt; the assigned RFC value for draft-ietf-netconf-tcp-client-server</li>
          <li>FFFF --&gt; the assigned RFC value for draft-ietf-netconf-tls-client-server</li>
          <li>GGGG --&gt; the assigned RFC value for draft-ietf-netconf-http-client-server</li>
          <li>HHHH --&gt; the assigned RFC value for draft-ietf-netconf-netconf-client-server</li>
          <li>IIII --&gt; the assigned RFC value for draft-ietf-netconf-restconf-client-server</li>
          <li>XXXX --&gt; the assigned RFC value for this draft</li>
          <li>YYYY --&gt; the assigned RFC value for draft-ietf-alto-performance-metrics</li>
        </ul>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="sec-req">
      <name>Design Scope and Requirements</name>
      <section anchor="scope">
        <name>Scope of Data Model for ALTO O&amp;M</name>
        <t>Generally, the following items are in the scope of this document:</t>
        <ul spacing="normal">
          <li>Data model for deploying an ALTO server/client.</li>
          <li>Data model for operating and managing a running ALTO server/client.</li>
          <li>Data model for functionality/capability configuration of ALTO services.</li>
          <li>Data model for monitoring ALTO-related performance metrics.</li>
        </ul>
        <t>This document does not define any data model related to specific
implementation, including:</t>
        <ul spacing="normal">
          <li>Data structures for how to store/deliver ALTO information resources (e.g.,
database schema to store a network map).</li>
          <li>Data structures for how to store information collected from data sources.
(e.g., database schema to store topology collected from an Interface to the
Routing System (I2RS) client <xref target="RFC7921"/>)</li>
        </ul>
      </section>
      <section anchor="requirements">
        <name>Basic Requirements</name>
        <t>Based on discussions and recommendations in <xref target="RFC7285"/> and <xref target="RFC7971"/>, the
data model provided by this document satisfies basic requirements listed in
<xref target="TableReq"/>.</t>
        <table anchor="TableReq">
          <name>Basic Requirements of Data Model for ALTO O&amp;M.</name>
          <thead>
            <tr>
              <th align="left">Requirement</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">R1: The data model should support configuration for ALTO server setup.</td>
              <td align="left">Section 16.1 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R2: The data model should provide logging management.</td>
              <td align="left">Section 16.2.1 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R3: The data model should provide ALTO-related management information.</td>
              <td align="left">Section 16.2.2 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R4: The data model should support configuration for security policy management.</td>
              <td align="left">Section 16.2.6 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R5-1: The data model should support configuration for different data sources.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285"/>, Section 3.2 of <xref target="RFC7971"/></td>
            </tr>
            <tr>
              <td align="left">R5-2: The data model should support configuration for information resource generation algorithms.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R5-3: The data model should support configuration for access control at information resource level.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R6: The data model should provide metrics for server failures.</td>
              <td align="left">Section 16.2.3 of <xref target="RFC7285"/>, Section 3.3 of <xref target="RFC7971"/></td>
            </tr>
            <tr>
              <td align="left">R7: The data model should provide performance monitoring for ALTO-specific metrics.</td>
              <td align="left">Section 16.2.5 of <xref target="RFC7285"/>, Section 3.4 of <xref target="RFC7971"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="extra-req">
        <name>Additional Requirements for Extensibility</name>
        <t>R8: As the ALTO protocol is extensible, the data model for ALTO O&amp;M should
allow for augmentation to support potential future extensions.</t>
      </section>
      <section anchor="overview-of-alto-om-data-model-for-reference-alto-architecture">
        <name>Overview of ALTO O&amp;M Data Model for Reference ALTO Architecture</name>
        <t><xref target="alto-ref-arch"/> shows a reference architecture for the ALTO server
implementation and YANG modules that these server components need to implement.
The server manager, information resource manager and data source listeners need
to implement <tt>ietf-alto.yang</tt> (see <xref target="alto-model"/>). The performance monitor
and logging and fault manager need to implement <tt>ietf-alto-stats.yang</tt> (see
<xref target="alto-stats-model"/>).</t>
        <t>The data broker and algorithm plugins are not in the scope of the data models
defined in this document. But user-specified YANG modules can be applied to
different algorithm plugins by augmenting the data model defined in this
document (see <xref target="alto-ext-model"/>).</t>
        <figure anchor="alto-ref-arch">
          <name>A Reference ALTO Server Architecture and YANG Modules</name>
          <artwork><![CDATA[
  +----------------------+      +-----------------+
  | Performance Monitor: |<-----| Server Manager: |
  | ietf-alto-stats.yang |<-+ +-| ietf-alto.yang  |
  +----------------------+  | | +-----------------+
                          report
  +----------------------+  | | +-------------------+
  | Logging and Fault    |  +---| Information       |
  | Manager:             |<---+ | Resource Manager: |
  | ietf-alto-stats.yang |<-----| ietf-alto.yang    |
  +----------------------+      +-------------------+
                                         ^|
                                         || callback
                                         |v
     .............          ..............................
    /             \ ------> . Algorithm Plugin:          .
    . Data Broker .  read   . example-ietf-alto-alg.yang .
    ...............         ..............................
           ^
           | write
  +----------------+  Southbound  ++=============++
  | Data Source    |     API      ||             ||
  | Listener:      | <==========> || Data Source ||
  | ietf-alto.yang |              ||             ||
  +----------------+              ++=============++
]]></artwork>
        </figure>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="alto-model">
      <name>Design of ALTO O&amp;M Data Model</name>
      <section anchor="overview-of-alto-om-data-model">
        <name>Overview of ALTO O&amp;M Data Model</name>
        <t>The ietf-alto module defined in this document provides all the basic ALTO O&amp;M
data models fitting the requirements listed in <xref target="sec-req"/>.</t>
        <t>The top-level container "alto" in the ietf-alto module contains a single
"alto-server" and multiple "alto-client"s.</t>
        <t>The list "alto-client" defines a list of configurations for other applications
to launch an ALTO client. They can also be used by data sources and information
resource creation algorithms that are configured by an ALTO server instance.</t>
        <t>The container "alto-server" contains all the configured and operational
parameters of the administrated ALTO server instance.</t>
        <artwork><![CDATA[
module: ietf-alto
  +--rw alto!
     +--rw alto-client* [client-id]
     |  +--rw client-id                  string
     |  +--rw server-discovery-client
     |     +---u alto-server-discovery-client-grouping
     +--rw alto-server
        +--rw listen
        |  +---u alto-server-listen-stack-grouping
        +--rw server-discovery
        |  +---u alto-server-discovery-grouping
        +--rw logging-system
        |  +---u alto-logging-system-grouping
        +--rw cost-type* [cost-type-name]
        |  +--rw cost-type-name    string
        |  +--rw cost-mode         identityref
        |  +--rw cost-metric       identityref
        |  +--rw description?      string
        |  +--rw cost-context {performance-metrics}?
        |     +--rw cost-source    identityref
        |     +--rw parameters
        |        +--rw (parameters)?
        +--rw meta* [meta-key]
        |  +--rw meta-key      string
        |  +--rw meta-value    string
        +--rw auth-client* [client-id]
        |  +--rw client-id                  string
        |  +--rw (authentication)?
        |     +--:(http)
        |     |  +--rw http-auth-client
        |     |     +--rw user-id    leafref
        |     +--:(https)
        |        +--rw https-auth-client
        |           +--rw user-id    leafref
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*
        |          -> /alto/alto-server/auth-client/client-id
        +--rw data-source* [source-id]
        |  +--rw source-id                    string
        |  +--rw source-type                  identityref
        |  +--rw (update-policy)
        |  |  +--:(reactive)
        |  |  |  +--rw (publish-mode)?
        |  |  |     +--:(on-change)
        |  |  |     |  +--rw on-change        empty
        |  |  |     +--:(periodic)
        |  |  |        +--rw feed-interval    uint32
        |  |  +--:(proactive)
        |  |     +--rw poll-interval          uint32
        |  +--rw (source-params)?
        +--rw resource* [resource-id]
           +--rw resource-id                       resource-id
           +--rw resource-type                     identityref
           +--rw description?                      string
           +--rw accepted-role*
           |       -> /alto/alto-server/role/role-name
           +--rw dependency*
           |       -> /alto/alto-server/resource/resource-id
           +--rw (resource-params)?
              +--:(ird)
              |  +--rw alto-ird-params
              |     +--rw delegation    inet:uri
              +--:(networkmap)
              |  +--rw alto-networkmap-params
              |     +--rw is-default?   boolean
              |     +--rw filtered?     boolean
              |     +---u algorithm
              +--:(costmap)
              |  +--rw alto-costmap-params
              |     +--rw filtered?             boolean
              |     +---u filter-costmap-cap
              |     +---u algorithm
              +--:(endpointcost)
              |  +--rw alto-endpointcost-params
              |     +---u endpoint-cost-cap
              |     +---u algorithm
              +--:(endpointprop)
              |  +--rw alto-endpointprop-params
              |     +--rw prop-types*   string
              |     +---u algorithm
              +--:(propmap) {propmap}?
              |  +--rw alto-propmap-params
              |     +---u algorithm
              +--:(cdni) {cdni}?
              |  +--rw alto-cdni-params
              |     +---u algorithm
              +--:(update) {incr-update}?
                 +--rw alto-update-params
                    +---u algorithm
]]></artwork>
      </section>
      <section anchor="data-model-for-alto-client-operation-and-management">
        <name>Data Model for ALTO Client Operation and Management</name>
        <t>The <tt>alto-client</tt> list contains a list of client-side configurations.
<tt>server-discovery-client</tt> is defined to configure how an ALTO client discovers
the ALTO server.</t>
        <artwork><![CDATA[
module: ietf-alto
  +--rw alto!
     +--rw alto-client* [client-id]
     |  +--rw client-id                  string
     |  +--rw server-discovery-client
     |     +---u alto-server-discovery-client-grouping
     ...
]]></artwork>
      </section>
      <section anchor="data-model-for-server-level-operation-and-management">
        <name>Data Model for Server-level Operation and Management</name>
        <t>The ALTO server instance contains the following configuration parameters for
server-level operation and management for ALTO, which satisfies R1 - R4 in
<xref target="requirements"/>.</t>
        <artwork><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server
        +--rw listen
        |  +---u alto-server-listen-stack-grouping
        +--rw server-discovery
        |  +---u alto-server-discovery-grouping
        +--rw logging-system
        |  +---u alto-logging-system-grouping
        +--rw cost-type* [cost-type-name]
        |  +--rw cost-type-name    string
        |  +--rw cost-mode         identityref
        |  +--rw cost-metric       identityref
        |  +--rw description?      string
        |  +--rw cost-context {performance-metrics}?
        |     +--rw cost-source    identityref
        |     +--rw parameters
        |        +--rw (parameters)?
        +--rw meta* [meta-key]
        |  +--rw meta-key      string
        |  +--rw meta-value    string
     ...
]]></artwork>
        <section anchor="data-model-for-alto-server-setup">
          <name>Data Model for ALTO Server Setup</name>
          <t>To satisfy R1 in <xref target="requirements"/>, the ALTO server instance contains the
following basic configurations for the server setup.</t>
          <section anchor="alto-server-listen-stack">
            <name>ALTO Server Listen Stack</name>
            <t>The "listen" contains all the configurations for the whole server listen stack
across HTTP layer, TLS layer and TCP layer.</t>
            <artwork><![CDATA[
  grouping alto-server-grouping:
    +-- base-uri?   inet:uri
  grouping alto-server-listen-stack-grouping:
    +-- (transport)
       +--:(http) {http-listen}?
       |  +-- http
       |     +-- tcp-server-parameters
       |     |  +---u tcp:tcp-server-grouping
       |     +-- http-server-parameters
       |     |  +---u http:http-server-grouping
       |     +-- alto-server-parameters
       |        +---u alto-server-grouping
       +--:(https)
          +-- https
             +-- tcp-server-parameters
             |  +---u tcp:tcp-server-grouping
             +-- tls-server-parameters
             |  +---u tls:tls-server-grouping
             +-- http-server-parameters
             |  +---u http:http-server-grouping
             +-- alto-server-parameters
                +---u alto-server-grouping
]]></artwork>
          </section>
          <section anchor="alto-server-discovery-setup">
            <name>ALTO Server Discovery Setup</name>
            <t>In practice, multiple ALTO servers can be deployed for scalability. That may
require communication among different ALTO servers.</t>
            <t>The YANG module defined in this document does not contain any configuration for
the communication between two ALTO servers. Instead, it provides the
configuration for how an ALTO server can be discovered by another ALTO server on
demand.</t>
            <artwork><![CDATA[
  grouping alto-server-discovery-grouping:
    +-- (server-discovery-manner)?
       +--:(reverse-dns)
          +-- rdns-naptr-records
             +-- static-prefix*           inet:ip-prefix
             +-- dynamic-prefix-source*
                     -> /alto-server/data-source/source-id
]]></artwork>
            <t>The <tt>server-discovery</tt> node provides configuration for ALTO server discovery
using different mechanisms. The initial module only defines the <tt>reverse-dns</tt>
case that is used to configure DNS NAPTR records for ALTO server discovery,
which is sugested by <xref target="RFC7286"/> and <xref target="RFC8686"/>. It configures a set of
endpoints that can be served by this ALTO server. The node
contains two leaf lists. The <tt>static</tt> list contains a list of manually configured
endpoints. The <tt>dynamic</tt> list points to a list of data sources to retrieve the
endpoints dynamically. As suggested by <xref target="RFC7286"/> and <xref target="RFC8686"/>, the IP
prefixes of the endpoints configured by both <tt>static</tt> and <tt>dynamic</tt> lists will
be translated into DNS NAPTR resource records for server discovery. The
<tt>server-discovery-manner</tt> choice can be augmented by the future modules to
support other mechanisms.</t>
          </section>
        </section>
        <section anchor="data-model-for-logging-management">
          <name>Data Model for Logging Management</name>
          <t>To satisfy R2 in <xref target="requirements"/>, the ALTO server instance contains the following
configuration parameters for the logging management.</t>
          <t>The <tt>logging-system</tt> node provides configuration to select a logging system to
capture log messages generated by the ALTO server.</t>
          <t>By default, <tt>syslog</tt> is the only supported logging system. When selecting
<tt>syslog</tt>, the related configuration is delegated to the configuration file of
the syslog server.</t>
          <artwork><![CDATA[
  grouping alto-logging-system-grouping:
    +-- (logging-system)?
       +--:(syslog)
          +-- syslog-params
             +-- config-file?   inet:uri
]]></artwork>
          <t>A specific server implementation can extend the <tt>logging-system</tt> node to add
other logging systems.</t>
        </section>
        <section anchor="data-model-for-alto-related-management">
          <name>Data Model for ALTO-related Management</name>
          <t>To satisfy R3 in <xref target="requirements"/>, the data model contains the following
ALTO-related management information.</t>
          <ul spacing="normal">
            <li>The "cost-type" list is the registry for the cost types that can be used in the
ALTO server.</li>
            <li>The "meta" list contains the customized meta data of the ALTO server. It will be
populated into the meta field of the default Information Resource Directory
(IRD).</li>
          </ul>
        </section>
        <section anchor="data-model-for-security-management">
          <name>Data Model for Security Management</name>
          <t>To satisfy R4 in <xref target="requirements"/>, the data model leverages HTTP and TLS to
provide basic security management for an ALTO server. All the related
configurations are covered by the server listen stack.</t>
        </section>
      </section>
      <section anchor="data-model-for-alto-server-configuration-management">
        <name>Data Model for ALTO Server Configuration Management</name>
        <section anchor="data-source">
          <name>Data Source Configuration Management</name>
          <t>To satisfy R5-1 in <xref target="requirements"/>, the ALTO server instance contains a list
of <tt>data-source</tt> entries to subscribe the data sources from which ALTO
information resources are derived (See Section 16.2.4 of <xref target="RFC7285"/>).</t>
          <t>A <tt>data-source</tt> entry MUST include:</t>
          <ul spacing="normal">
            <li>a unique <tt>source-id</tt> for resource creation algorithms to reference,</li>
            <li>the <tt>source-type</tt> attribute to declare the type of the data source,</li>
            <li>the <tt>update-policy</tt> to specify how to get the data update from the data
source,</li>
            <li>the <tt>source-params</tt> to specify where and how to query the data.</li>
          </ul>
          <t>The update policy can be either reactive or proactive. For the reactive update,
the ALTO server reactively waits the data source for pushing updates. For the
proactive update, the ALTO server has to proactively fetch the data source
periodically.</t>
          <t>To use the reactive update, there are two publish modes:</t>
          <ul spacing="normal">
            <li>If the <tt>on-change</tt> attribute is present, the data source is expected to push
the update as soon as the data source changes.</li>
            <li>Otherwise, if the <tt>feed-interval</tt> attribute is present, the data source is
expected to push the updates periodically. The value of <tt>feed-interval</tt>
specifies the interval of pushing the data change updates in milliseconds.
If <tt>feed-interval</tt> is zero, the data source is expected to work in the
<tt>on-change</tt> mode.</li>
          </ul>
          <t>To use the proactive update, the <tt>poll-interval</tt> attribute MUST be present. The
value of <tt>poll-interval</tt> specifies the interval of fetching the data in
milliseconds. If <tt>poll-interval</tt> is zero, the ALTO server will not fetch the
data source.</t>
          <t>The <tt>data-source/source-params</tt> node can be augmented for different types of
data sources.</t>
          <artwork><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server
        ...
        +--rw data-source* [source-id]
        |  +--rw source-id                    string
        |  +--rw source-type                  identityref
        |  +--rw (update-policy)
        |  |  +--:(reactive)
        |  |  |  +--rw (publish-mode)?
        |  |  |     +--:(on-change)
        |  |  |     |  +--rw on-change        empty
        |  |  |     +--:(periodic)
        |  |  |        +--rw feed-interval    uint32
        |  |  +--:(proactive)
        |  |     +--rw poll-interval          uint32
        |  +--rw (source-params)?
        ...
]]></artwork>
          <t>This data model only includes common configuration parameters for an ALTO server
to correctly interact with a data source. The implementation-specific parameters
of any certain data source can be augmented in another module. An example is
included in <xref target="example-data-source"/>.</t>
        </section>
        <section anchor="alto-information-resources-configuration-management">
          <name>ALTO Information Resources Configuration Management</name>
          <t>To satisfy R5-2 and R-3, the ALTO server instance contains a list of <tt>resource</tt>
entries. Each <tt>resource</tt> entry contains the configurations of an ALTO
information resource (See Section 8.1 of <xref target="RFC7285"/>). The operator of the ALTO
server can use this model to create, update, and remove the ALTO information
resources.</t>
          <t>Each <tt>resource</tt> entry provides configurations defining how to create or update
an ALTO information resource. Adding a new <tt>resource</tt> entry notifies the ALTO
server to create a new ALTO information resource. Updating an existing
<tt>resource</tt> entry notifies the ALTO server to update the generation parameters
(e.g., capabilities and the creation algorithm) of an existing ALTO information
resource. Removing an existing <tt>resource</tt> entry will remove the corresponding
ALTO information resource.</t>
          <t>A <tt>resource</tt> entry MUST include a unique <tt>resource-id</tt> and a <tt>resource-type</tt>.</t>
          <t>It can also include an <tt>accepted-role</tt> node containing a list of <tt>role-name</tt>s
that is used by role-based access control for this ALTO information resource.
See <xref target="alto-rbac"/> for details of information resource access control.</t>
          <t>For some <tt>resource-type</tt>, the <tt>resource</tt> entry MUST also include a
<tt>dependency</tt> node containing the <tt>resource-id</tt> of the dependent ALTO information
resources (See Section 9.1.5 of <xref target="RFC7285"/>).</t>
          <t>For each type of ALTO information resource, the <tt>resource</tt> entry MAY also need
type-specific parameters. These type-specific parameters include two categories:</t>
          <ol spacing="normal" type="1"><li>One 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 (See Section 9.1.3 of <xref target="RFC7285"/>).</li>
            <li>The other category of the type-specific parameters is algorithm-specific.
The developer of the ALTO server can implement their own creation algorithms
and augment the <tt>algorithm</tt> node to declare algorithm-specific input
parameters.</li>
          </ol>
          <t>Except for the <tt>ird</tt> resource, all the other types of <tt>resource</tt> entries have
an augmented <tt>algorithm</tt> node. The augmented <tt>algorithm</tt> node can reference data
sources subscribed by the <tt>data-source</tt> entries (See <xref target="data-source"/>). An
example of extending the <tt>algorithm</tt> node for a specific type of <tt>resource</tt> is
included in <xref target="example-alg"/>.</t>
          <t>The developer does not have to customize the creation algorithm of the <tt>ird</tt>
resource. The default <tt>ird</tt> resource will be created automatically based on all
the added <tt>resource</tt> entries. The delegated <tt>ird</tt> resource will be created as a
static ALTO information resource (See Section 9.2.4 of <xref target="RFC7285"/>).</t>
          <artwork><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server
        ...
        +--rw resource* [resource-id]
           +--rw resource-id                       resource-id
           +--rw resource-type                     identityref
           +--rw description?                      string
           +--rw accepted-role*
           |       -> /alto/alto-server/role/role-name
           +--rw dependency*
           |       -> /alto/alto-server/resource/resource-id
           +--rw (resource-params)?
              +--:(ird)
              |  +--rw alto-ird-params
              |     +--rw delegation    inet:uri
              +--:(networkmap)
              |  +--rw alto-networkmap-params
              |     +--rw is-default?   boolean
              |     +--rw filtered?     boolean
              |     +---u algorithm
              +--:(costmap)
              |  +--rw alto-costmap-params
              |     +--rw filtered?             boolean
              |     +---u filter-costmap-cap
              |     +---u algorithm
              +--:(endpointcost)
              |  +--rw alto-endpointcost-params
              |     +---u endpoint-cost-cap
              |     +---u algorithm
              +--:(endpointprop)
              |  +--rw alto-endpointprop-params
              |     +--rw prop-types*   string
              |     +---u algorithm
              +--:(propmap) {propmap}?
              |  +--rw alto-propmap-params
              |     +---u algorithm
              +--:(cdni) {cdni}?
              |  +--rw alto-cdni-params
              |     +---u algorithm
              +--:(update) {incr-update}?
                 +--rw alto-update-params
                    +---u algorithm

  grouping filter-costmap-cap:
    +-- cost-type-names*            string
    +-- cost-constraints?           boolean
    +-- max-cost-types?             uint32 {multi-cost}?
    +-- testable-cost-type-names*   string {multi-cost}?
    +-- calendar-attributes {cost-calendar}?
       +-- cost-type-names*       string
       +-- time-interval-size     decimal64
       +-- number-of-intervals    uint32
  grouping endpoint-cost-cap:
    +---u filter-costmap-cap
  grouping algorithm:
    +-- (algorithm)
]]></artwork>
        </section>
        <section anchor="alto-rbac">
          <name>ALTO Information Resource Access Control Management</name>
          <t>As section 15.5.2 of <xref target="RFC7285"/> suggests, the module also defines
authentication and authorization related configuration to employ access control
at 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 following
configuration:</t>
          <artwork><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server
        ...
        +--rw auth-client* [client-id]
        |  +--rw client-id                  string
        |  +--rw (authentication)?
        |     +--:(http)
        |     |  +--rw http-auth-client
        |     |     +--rw user-id    leafref
        |     +--:(https)
        |        +--rw https-auth-client
        |           +--rw user-id    leafref
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*
        |          -> /alto/alto-server/auth-client/client-id
        ...
]]></artwork>
          <t>It configures the role-based access control:</t>
          <ul spacing="normal">
            <li>
              <tt>auth-client</tt> declares a list of ALTO clients that can be authenticated by
the internal or external authorization server. This basic model only includes
authentication approach directly provided by the HTTP server, but the
operators or future documents can augment the <tt>authentication</tt> choice for
different authentication mechanisms.</li>
            <li>
              <tt>role</tt> defines a list of roles for access control. Each role contains a list
of authenticated ALTO clients. Each client can be assigned to multiple roles.
The <tt>role-name</tt> can be referenced by the <tt>accepted-role</tt> list of a
<tt>resource</tt>. For a given authenticated ALTO client, if one of the roles
containing it is allowed to access a resource, this client is allowed to
access the resource.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="alto-stats-model">
      <name>Design of ALTO O&amp;M Statistics Data Model</name>
      <t>The module, "ietf-alto-stats", augments the ietf-alto module to include
statistics at the ALTO server and information resource level.</t>
      <artwork><![CDATA[
module: ietf-alto-stats

  augment /alto:alto-server:
    +--ro num-total-req?         yang:counter32
    +--ro num-total-succ?        yang:counter32
    +--ro num-total-fail?        yang:counter32
    +--ro num-total-last-req?    yang:counter32
    +--ro num-total-last-succ?   yang:counter32
    +--ro num-total-last-fail?   yang:counter32
  augment /alto:alto-server/alto:resource:
    +--ro num-res-upd?    yang:counter32
    +--ro res-mem-size?   yang:counter32
    +--ro res-enc-size?   yang:counter32
    +--ro num-res-req?    yang:counter32
    +--ro num-res-succ?   yang:counter32
    +--ro num-res-fail?   yang:counter32
  augment /alto:alto-server/alto:resource/alto:resource-params
            /alto:networkmap/alto:alto-networkmap-params:
    +--ro num-map-pid?   yang:counter32
  augment /alto:alto-server/alto:resource/alto:resource-params
            /alto:propmap/alto:alto-propmap-params:
    +--ro num-map-entry?   yang:counter32
  augment /alto:alto-server/alto:resource/alto:resource-params
            /alto:cdni/alto:alto-cdni-params:
    +--ro num-base-obj?   yang:counter32
  augment /alto:alto-server/alto:resource/alto:resource-params
            /alto:update/alto:alto-update-params:
    +--ro num-upd-sess?      yang:counter32
    +--ro num-event-total?   yang:counter32
    +--ro num-event-max?     yang:counter32
    +--ro num-event-min?     yang:counter32
    +--ro num-event-avg?     yang:counter32
]]></artwork>
      <section anchor="model-for-alto-server-failure-monitoring">
        <name>Model for ALTO Server Failure Monitoring</name>
        <t>To satisfy R6 in <xref target="requirements"/>, the YANG data module defined in this
document contains statistics that indicates server failures.</t>
        <t>More specifically, <tt>num-total-*</tt> and <tt>num-total-last-*</tt> provides server-level
failure counters; <tt>num-res-*</tt> provides information resource-level failure
counters.</t>
      </section>
      <section anchor="model-for-alto-specific-performance-monitoring">
        <name>Model for ALTO-specific Performance Monitoring</name>
        <t>To satisfy R7 in <xref target="requirements"/>, the YANG data module defined in this
document also contains statistics for ALTO-specific performance metrics.</t>
        <t>More specifically, this data model contains the following measurement
information 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"/>,
this data model also contains useful measurement information for other ALTO
extensions:</t>
        <ul spacing="normal">
          <li>
            <tt>num-map-entry</tt> and <tt>num-base-obj</tt> provides measurement for number of generic
ALTO entities (for <xref target="RFC9240"/> and <xref target="RFC9241"/>)</li>
          <li>
            <tt>num-upd-sess</tt> and <tt>num-event-*</tt> provides statistics for update sessions and
events (for <xref target="RFC8189"/>)</li>
        </ul>
        <t>This data model 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 by 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-module">
      <name>ALTO OAM YANG Module</name>
      <section anchor="the-ietf-alto-module">
        <name>The ietf-alto Module</name>
        <sourcecode type="yang" markers="true" name="ietf-alto@2023-02-10.yang"><![CDATA[
module ietf-alto {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-alto";
  prefix "alto";

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

  import ietf-tcp-server {
    prefix tcp;
    reference
      "RFC DDDD: YANG Groupings for TCP Clients and TCP Servers";
  }

  import ietf-tls-server {
    prefix tls;
    reference
      "RFC FFFF: YANG Groupings for TLS Clients and TLS Servers";
  }

  import ietf-http-server {
    prefix http;
    reference
      "RFC GGGG: YANG Groupings for HTTP Clients and HTTP Servers";
  }

  organization
    "IETF ALTO Working Group";

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

  description
    "This YANG module defines all the configured and operational
     parameters of the administrated ALTO server instance.

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

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

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

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.";

  revision "2023-02-10" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for OAM and Management of ALTO
       Protocol.";
  }

  typedef resource-id {
    type string {
      length "1..64";
      pattern "[0-9a-zA-Z\\-:@_]*";
    }
    description
      "Format of Resource ID";
    reference
      "Section 9.1.1 of RFC 7285.";
  }

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

  // Base identities

  identity resource-type {
    description
      "Base identity for type of information resource.";
  }

  identity source-type {
    description
      "Base identity for type of data source.";
  }

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

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

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

  // Identities for ALTO information resources

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

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

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

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

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

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

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

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

  // Identities for cost mode

  identity numerical {
    base cost-mode;
    description
      "This mode indicates that it is safe to perform numerical
       operations";
  }

  identity ordinal {
    base cost-mode;
    description
      "This mode indicates that the cost values in a cost map
       represent ranking";
  }

  identity array {
    if-feature "path-vector";
    base cost-mode;
    description
      "This mode indicates that every cost value in the response body
       of a (Filtered) Cost Map or an Endpoint Cost Service MUST be
       interpreted as a JSON array.";
  }

  // Identities for cost metrics

  identity routingcost {
    base cost-metric;
    description
      "This metric conveys a generic measure for the cost of routing
       traffic from a source to a destination.";
  }

  identity ane-path {
    if-feature "path-vector";
    base cost-metric;
    description
      "This metric indicates that the value of such a cost type
       conveys an array of Abstract Network Element (ANE) names,
       where each ANE name uniquely represents an ANE traversed by
       traffic from a source to a destination.";
  }

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

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

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

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

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

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

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

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

  // Identities for cost sources

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

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

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

  // Features

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

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

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

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

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

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

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

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

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

  // Groupings

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

  grouping endpoint-cost-cap {
    uses filter-costmap-cap;
    description
      "This grouping defines EndpointCostCapabilities as the same as
       FilteredCostMapCapabilities defined by the grouping
       filter-costmap-cap.";
    reference
      "Section 11.5.1.4 of RFC 7285";
  }

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

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

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

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

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

  grouping alto-logging-system-grouping {
    description
      "Grouping for configuration of logging system used by the ALTO
       server.";
    choice logging-system {
      description
        "Selects among available logging systems.";
      case syslog {
        description
          "Use syslog as logging system.";
        container syslog-params {
          description
            "Configuration parameters for syslog.";
          leaf config-file {
            type inet:uri {
              pattern 'file:.*';
            }
            default 'file:/etc/syslog.conf';
            description
              "The file location of the syslog configuration.";
          }
        }
      }
    }
  }

  // Top-level container

  container alto {
    presence "The ALTO is enabled";
    description
      "Parameters for the ALTO client and server.";
    list alto-client {
      key client-id;
      leaf client-id {
        type string;
        description
          "Identifier of a client that can be referenced by a data
           source or a resource creation algorithm to communicate with
           other ALTO servers.";
      }
      container server-discovery-client {
        uses alto-server-discovery-client-grouping;
        description
          "Configuration of how to discover another ALTO server.";
      }
      description
        "The ALTO client configuration.";
    }
    container alto-server {
      description
        "The ALTO server instance configuration.";
      container listen {
        description
          "Configure the ALTO server to listen for ALTO clients.";
        uses alto-server-listen-stack-grouping;
      }
      container server-discovery {
        description
          "Configure how the ALTO server to be discovered by others.";
        uses alto-server-discovery-grouping;
      }
      container logging-system {
        description
          "Configure logging system to capture log messages generated
           by the ALTO server.";
        uses alto-logging-system-grouping;
      }
      list cost-type {
        key "cost-type-name";
        leaf cost-type-name {
          type string;
          description
            "The name to reference cost type";
        }
        leaf cost-mode {
          type identityref {
            base cost-mode;
          }
          mandatory true;
          description
            "The referenced cost mode";
        }
        leaf cost-metric {
          type identityref {
            base cost-metric;
          }
          mandatory true;
          description
            "The referenced cost metric";
        }
        leaf description {
          type string;
          description
            "The human-readable description fo the cost-mode and
             cost-mode";
        }
        container cost-context {
          if-feature "performance-metrics";
          leaf cost-source {
            type identityref {
              base cost-source;
            }
            mandatory true;
            description
              "The referenced cost source";
          }
          container parameters {
            choice parameters {
              description
                "Cases of parameters to be augmented.";
            }
            description
              "Additional computation parameters for the cost
               source.";
          }
          description
            "Context of how the metric is obtained.";
        }
        description
          "Mapping between name and referenced cost type";
      }
      list meta {
        key "meta-key";
        leaf meta-key {
          type string;
          description
            "Custom meta key";
        }
        leaf meta-value {
          type string;
          mandatory true;
          description
            "Custom meta value";
        }
        description
          "Mapping of custom meta information";
        reference
          "Section 8.4.1 of RFC 7285.";
      }
      list auth-client {
        key "client-id";
        leaf client-id {
          type string;
          description
            "Identifier to reference an ALTO client.";
        }
        choice authentication {
          description
            "Choice of authentication methods to identify this
             ALTO client.";
          case http {
            description
              "The client is authenticated by the HTTP server.";
            container http-auth-client {
              description
                "Parameters of the authenticated HTTP client.";
              leaf user-id {
                type leafref {
                  path "/alto:alto/alto:alto-server/alto:listen"
                     + "/alto:http/alto:http-server-parameters"
                     + "/alto:client-authentication/alto:users"
                     + "/alto:user/alto:user-id";
                }
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   client.";
              }
            }
          }
          case https {
            description
              "The client is authenticated by the HTTP server.";
            container https-auth-client {
              description
                "Parameters of the authenticated HTTPS client.";
              leaf user-id {
                type leafref {
                  path "/alto:alto/alto:alto-server/alto:listen"
                     + "/alto:https/alto:http-server-parameters"
                     + "/alto:client-authentication/alto:users"
                     + "/alto:user/alto:user-id";
                }
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   client.";
              }
            }
          }
        }
        description
          "List of authenticated ALTO clients.";
      }
      list role {
        key "role-name";
        leaf role-name {
          type role-name;
          description
            "Name of a role for access control.";
        }
        leaf-list client {
          type leafref {
            path "/alto:alto/alto:alto-server/alto:auth-client"
               + "/alto:client-id";
          }
          description
            "List of authenticated ALTO clients assigned to the role.";
        }
        description
          "List of roles for access control.";
      }
      list data-source {
        key "source-id";
        leaf source-id {
          type string;
          description
            "Data source id that can be referenced by information
             resource creation algorithms.";
        }
        leaf source-type {
          type identityref {
            base source-type;
          }
          mandatory true;
          description
            "Identify the type of the data source.";
        }
        choice update-policy {
          mandatory true;
          case reactive {
            description
              "Configuration for the data source listener to
               reactively subscribe data and wait for updates
               published by the data source.";
            choice publish-mode {
              description
                "Configuration for when the data source publish an
                 update.";
              case on-change {
                description
                  "The data source is requested to publish an update
                   once the data has a change.";
                leaf on-change {
                  type empty;
                  mandatory true;
                  description
                    "Indicate an on-change subscription.";
                }
              }
              case periodic {
                description
                  "The data source is requested to periodically
                   publish an update.";
                leaf feed-interval {
                  type uint32;
                  mandatory true;
                  description
                    "Duration of time that should occur between
                     periodic push updates, in units of seconds.";
                }
              }
            }
          }
          case proactive {
            description
              "Configuration for the data source listener to
               proactively pull data from the data source.";
            leaf poll-interval {
              type uint32;
              mandatory true;
              description
                "Polling interval in seconds for proactive mode.";
            }
          }
          description
            "Policy to get updates from data sources.";
        }
        choice source-params {
          description
            "Data source specific configuration.";
        }
        description
          "List of subscribed data sources.";
      }
      list resource {
        key "resource-id";
        leaf resource-id {
          type resource-id;
          description
            "resource-id to be defined.";
        }
        leaf resource-type {
          type identityref {
            base resource-type;
          }
          mandatory true;
          description
            "identityref to be defined.";
        }
        leaf description {
          type string;
          description
            "The optional description for this information resource.";
        }
        leaf-list accepted-role {
          type leafref {
            path "/alto:alto/alto:alto-server/alto:role"
               + "/alto:role-name";
          }
          description
            "Roles allowed to access this information resource.";
        }
        leaf-list dependency {
          type leafref {
            path "/alto:alto/alto:alto-server/alto:resource"
               + "/alto:resource-id";
          }
          description
            "A list of dependent information resources.";
        }
        choice resource-params {
          description
            "Resource-specific configuration.";
          case ird {
            when 'derived-from-or-self(resource-type, "alto:ird")';
            container alto-ird-params {
              leaf delegation {
                type inet:uri;
                mandatory true;
                description
                  "Upstream IRD to be delegated.";
              }
              description
                "IRD-specific configuration.";
            }
          }
          case networkmap {
            when 'derived-from-or-self(resource-type,'
               + '"alto:network-map")';
            container alto-networkmap-params {
              description
                "(Filtered) Network Map specific configuration.";
              reference
                "Section 11.2.1 and Section 11.3.1 of RFC 7285.";
              leaf is-default {
                type boolean;
                description
                  "Set whether this is the default network map.";
              }
              leaf filtered {
                type boolean;
                default false;
                description
                  "Configure whether filtered network map is
                   supported.";
              }
              uses algorithm;
            }
          }
          case costmap {
            when 'derived-from-or-self(resource-type,'
               + '"alto:cost-map")';
            container alto-costmap-params {
              description
                "(Filtered) Cost Map specific configuration.";
              reference
                "Section 11.2.2 and Section 11.3.2 of RFC 7285.";
              leaf filtered {
                type boolean;
                description
                  "Configure whether filtered cost map is supported.";
              }
              uses filter-costmap-cap;
              uses algorithm;
            }
          }
          case endpointcost {
            when 'derived-from-or-self(resource-type,'
               + '"alto:endpoint-cost")';
            container alto-endpointcost-params {
              description
                "Endpoint Cost Service specific configuration.";
              reference
                "Section 11.5 of RFC 7285.";
              uses endpoint-cost-cap;
              uses algorithm;
            }
          }
          case endpointprop {
            when 'derived-from-or-self(resource-type,'
               + '"alto:endpoint-prop")';
            container alto-endpointprop-params {
              description
                "Endpoint Cost Service specific configuration.";
              reference
                "Section 11.5 of RFC 7285.";
              leaf-list prop-types {
                type string;
                min-elements 1;
                description
                  "Supported endpoint properties.";
              }
              uses algorithm;
            }
          }
          case propmap {
            when 'derived-from-or-self(resource-type,'
               + '"alto:property-map")';
            if-feature "propmap";
            container alto-propmap-params {
              uses algorithm;
              description
                "(Filtered) Entity Property Map specific
                 configuration.";
            }
          }
          case cdni {
            when 'derived-from-or-self(resource-type, "alto:cdni")';
            if-feature "cdni";
            container alto-cdni-params {
              uses algorithm;
              description
                "CDNi specific configuration";
            }
          }
          case update {
            when 'derived-from-or-self(resource-type,'
               + '"alto:update")';
            if-feature "incr-update";
            container alto-update-params {
              uses algorithm;
              description
                "Incremental Updates specific configuration";
            }
          }
        }
        description
          "ALTO information resources to be defined";
      }
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="the-ietf-alto-stats-module">
        <name>The ietf-alto-stats Module</name>
        <sourcecode type="yang" markers="true" name="ietf-alto-stats@2023-02-10.yang"><![CDATA[
module ietf-alto-stats {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-alto-stats";
  prefix "alto-stats";

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

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

  organization
    "IETF ALTO Working Group";

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

  description
    "This YANG module defines all the statistics of the administrated
     ALTO server instance.

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

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

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

  revision "2023-02-10" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

  augment "/alto:alto/alto:alto-server" {
    description
      "Top-level statistics for the whole ALTO server.";
    leaf num-total-req {
      type yang:counter32;
      config false;
      description
        "The total number of ALTO requests received by this ALTO
         server.";
    }
    leaf num-total-succ {
      type yang:counter32;
      config false;
      description
        "The total number of successful responses sent by this ALTO
         server.";
    }
    leaf num-total-fail {
      type yang:counter32;
      config false;
      description
        "The total number of failed responses sent by this ALTO
         server.";
    }
    leaf num-total-last-req {
      type yang:counter32;
      config false;
      description
        "The total number of ALTO requests received within the last
         5 minutes.";
    }
    leaf num-total-last-succ {
      type yang:counter32;
      config false;
      description
        "The total number of successful responses sent by this ALTO
         server within the last 5 minutes.";
    }
    leaf num-total-last-fail {
      type yang:counter32;
      config false;
      description
        "The total number of failed responses sent by this ALTO
         server within the last 5 minutes.";
    }
  }

  augment "/alto:alto/alto:alto-server/alto:resource" {
    description
      "Common statistics for each information resource.";
    leaf num-res-upd {
      type yang:counter32;
      config false;
      description
        "The number of version updates since the information resource
         was created.";
    }
    leaf res-mem-size {
      type yang:counter32;
      config false;
      description
        "Memory size (Bytes) utilized by the information resource.";
    }
    leaf res-enc-size {
      type yang:counter32;
      config false;
      description
        "Size (Bytes) of JSON encoded data of the information
         resource.";
    }
    leaf num-res-req {
      type yang:counter32;
      config false;
      description
        "The number of ALTO requests to this information resource.";
    }
    leaf num-res-succ {
      type yang:counter32;
      config false;
      description
        "The number of successful responses for requests to this
         information resource.";
    }
    leaf num-res-fail {
      type yang:counter32;
      config false;
      description
        "The total number of failed responses for requests to this
         information resource.";
    }
  }

  augment "/alto:alto/alto:alto-server/alto:resource"
        + "/alto:resource-params/alto:networkmap"
        + "/alto:alto-networkmap-params" {
    description
      "Augmented statistics for network maps only.";
    leaf num-map-pid {
      type yang:counter32;
      config false;
      description
        "Number of PIDs contained by the network map.";
    }
  }

  augment "/alto:alto/alto:alto-server/alto:resource"
        + "/alto:resource-params/alto:propmap"
        + "/alto:alto-propmap-params" {
    description
      "Augmented statistics for property maps only.";
    leaf num-map-entry {
      type yang:counter32;
      config false;
      description
        "Number of ALTO entities contained by the property map.";
    }
  }

  augment "/alto:alto/alto:alto-server/alto:resource"
        + "/alto:resource-params/alto:cdni"
        + "/alto:alto-cdni-params" {
    description
      "Augmented statistics for CDNi resources only.";
    leaf num-base-obj {
      type yang:counter32;
      config false;
      description
        "Number of base CDNi advertisement objects contained by the
         CDNi resource.";
    }
  }

  augment "/alto:alto/alto:alto-server/alto:resource"
        + "/alto:resource-params/alto:update"
        + "/alto:alto-update-params" {
    description
      "Augmented statistics for incremental updates only.";
    leaf num-upd-sess {
      type yang:counter32;
      config false;
      description
        "Number of sessions connected to the incremental update
         service.";
    }
    leaf num-event-total {
      type yang:counter32;
      config false;
      description
        "Total number of update events sent to all the connected
         clients.";
    }
    leaf num-event-max {
      type yang:counter32;
      config false;
      description
        "The maximum number of update events sent to the connected
         clients.";
    }
    leaf num-event-min {
      type yang:counter32;
      config false;
      description
        "The minimum number of update events sent to the connected
         clients.";
    }
    leaf num-event-avg {
      type yang:counter32;
      config false;
      description
        "The average number of update events sent to the connected
         clients.";
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="the-ietf-alto-yang-module">
        <name>The "ietf-alto" YANG Module</name>
        <t>The "ietf-alto" YANG module defines data nodes that are designed to be accessed
via YANG based management protocols, such as NETCONF <xref target="RFC6241"/> and RESTCONF
<xref target="RFC8040"/>. Both of these protocols have mandatory-to-implement secure
transport layers (e.g., SSH, TLS) with mutual authentication.</t>
        <t>The Network Access Control Model (NACM) <xref target="RFC8341"/> provides the means to
restrict access for particular users to a pre-configured subset of all
available protocol operations and content.</t>
        <t>None of the readable data nodes in this YANG module are considered sensitive or
vulnerable in network environments. The NACM "default-deny-all" extension has
not been set for any data nodes defined in this module.</t>
        <t>None of the writable data nodes in this YANG module are considered sensitive or
vulnerable in network environments. The NACM "default-deny-write" extension has
not been set for any data nodes defined in this module.</t>
        <t>This module does not define any RPCs, actions, or notifications, and thus the
security consideration for such is not provided here.</t>
        <t>Please be aware that this module uses groupings defined in other RFCs that
define data nodes that do set the NACM "default-deny-all" and
"default-deny-write" extensions.</t>
      </section>
      <section anchor="the-ietf-alto-stats-yang-module">
        <name>The "ietf-alto-stats" YANG Module</name>
        <t>The "ietf-alto-stats" YANG module defines data nodes that are designed to be
accessed via YANG based management protocols, such as NETCONF <xref target="RFC6241"/> and
RESTCONF <xref target="RFC8040"/>. Both of these protocols have mandatory-to-implement
secure transport layers (e.g., SSH, TLS) with mutual authentication.</t>
        <t>The Network Access Control Model (NACM) <xref target="RFC8341"/> provides the means to
restrict access for particular users to a pre-configured subset of all
available protocol operations and content.</t>
        <t>None of the readable data nodes in this YANG module are considered sensitive or
vulnerable in network environments. The NACM "default-deny-all" extension has
not been set for any data nodes defined in this module.</t>
        <t>None of the writable data nodes in this YANG module are considered sensitive or
vulnerable in network environments. The NACM "default-deny-write" extension has
not been set for any data nodes defined in this module.</t>
        <t>This module does not define any RPCs, actions, or notifications, and thus the
security consideration for such is not provided here.</t>
        <t>Please be aware that this module uses groupings defined in other RFCs that
define data nodes that do set the NACM "default-deny-all" and</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers two URIs in the "IETF XML Registry" <xref target="RFC3688"/>.
Following the format in RFC 3688, the following registrations are requested.</t>
      <artwork><![CDATA[
  URI: urn:ietf:params:xml:ns:yang:ietf-alto
  Registrant Contact: The IESG.
  XML: N/A; the requested URI is an XML namespace.

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

  Name: ietf-alto-stats
  Namespace: urn:ietf:params:xml:ns:yang:ietf-alto-stats
  Prefix: alto
  Reference: [RFCthis]
]]></artwork>
      <t>[RFC Editor: Please replace RFCthis with the published RFC number for this document.]</t>
      <!-- End of sections -->

</section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling">
              <organization/>
            </author>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language.  This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC7285">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Protocol</title>
            <author fullname="R. Alimi" initials="R." role="editor" surname="Alimi">
              <organization/>
            </author>
            <author fullname="R. Penno" initials="R." role="editor" surname="Penno">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." role="editor" surname="Yang">
              <organization/>
            </author>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." surname="Previdi">
              <organization/>
            </author>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="S. Shalunov" initials="S." surname="Shalunov">
              <organization/>
            </author>
            <author fullname="R. Woundy" initials="R." surname="Woundy">
              <organization/>
            </author>
            <date month="September" year="2014"/>
            <abstract>
              <t>Applications using the Internet already have access to some topology information of Internet Service Provider (ISP) networks.  For example, views to Internet routing tables at Looking Glass servers are available and can be practically downloaded to many network application clients.  What is missing is knowledge of the underlying network topologies from the point of view of ISPs.  In other words, what an ISP prefers in terms of traffic optimization -- and a way to distribute it.</t>
              <t>The Application-Layer Traffic Optimization (ALTO) services defined in this document provide network information (e.g., basic network location structure and preferences of network paths) with the goal of modifying network resource consumption patterns while maintaining or improving application performance.  The basic information of ALTO is based on abstract maps of a network.  These maps provide a simplified view, yet enough information about a network for applications to effectively utilize them.  Additional services are built on top of the maps.</t>
              <t>This document describes a protocol implementing the ALTO services. Although the ALTO services would primarily be provided by ISPs, other entities, such as content service providers, could also provide ALTO services.  Applications that could use the ALTO services are those that have a choice to which end points to connect.  Examples of such applications are peer-to-peer (P2P) and content delivery networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7285"/>
          <seriesInfo name="DOI" value="10.17487/RFC7285"/>
        </reference>
        <reference anchor="RFC7286">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Server Discovery</title>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <author fullname="N. Schwan" initials="N." surname="Schwan">
              <organization/>
            </author>
            <author fullname="M. Scharf" initials="M." surname="Scharf">
              <organization/>
            </author>
            <author fullname="H. Song" initials="H." surname="Song">
              <organization/>
            </author>
            <date month="November" year="2014"/>
            <abstract>
              <t>The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource.  ALTO is realized by a client-server protocol.  Before an ALTO client can ask for guidance, it needs to discover one or more ALTO servers.</t>
              <t>This document specifies a procedure for resource-consumer-initiated ALTO server discovery, which can be used if the ALTO client is embedded in the resource consumer.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7286"/>
          <seriesInfo name="DOI" value="10.17487/RFC7286"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8177">
          <front>
            <title>YANG Data Model for Key Chains</title>
            <author fullname="A. Lindem" initials="A." role="editor" surname="Lindem">
              <organization/>
            </author>
            <author fullname="Y. Qu" initials="Y." surname="Qu">
              <organization/>
            </author>
            <author fullname="D. Yeung" initials="D." surname="Yeung">
              <organization/>
            </author>
            <author fullname="I. Chen" initials="I." surname="Chen">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>This document describes the key chain YANG data model.  Key chains are commonly used for routing protocol authentication and other applications requiring symmetric keys.  A key chain is a list containing one or more elements containing a Key ID, key string, send/accept lifetimes, and the associated authentication or encryption algorithm.  By properly overlapping the send and accept lifetimes of multiple key chain elements, key strings and algorithms may be gracefully updated.  By representing them in a YANG data model, key distribution can be automated.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8177"/>
          <seriesInfo name="DOI" value="10.17487/RFC8177"/>
        </reference>
        <reference anchor="RFC8189">
          <front>
            <title>Multi-Cost Application-Layer Traffic Optimization (ALTO)</title>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="N. Schwan" initials="N." surname="Schwan">
              <organization/>
            </author>
            <date month="October" year="2017"/>
            <abstract>
              <t>The Application-Layer Traffic Optimization (ALTO) protocol, specified in RFC 7285, defines several services that return various metrics describing the costs between network endpoints.</t>
              <t>This document defines a new service that allows an ALTO Client to retrieve several cost metrics in a single request for an ALTO filtered cost map and endpoint cost map.  In addition, it extends the constraints to further filter those maps by allowing an ALTO Client to specify a logical combination of tests on several cost metrics.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8189"/>
          <seriesInfo name="DOI" value="10.17487/RFC8189"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams.  The purpose of this document is to provide a single location for this definition.  This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC8686">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Cross-Domain Server Discovery</title>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <date month="February" year="2020"/>
            <abstract>
              <t>The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource.  ALTO is realized by a client-server protocol.  Before an ALTO client can ask for guidance, it needs to discover one or more ALTO servers that can provide suitable guidance.</t>
              <t>In some deployment scenarios, in particular if the information about the network topology is partitioned and distributed over several ALTO servers, it may be necessary to discover an ALTO server outside of the ALTO client's own network domain, in order to get appropriate guidance.  This document details applicable scenarios, itemizes requirements, and specifies a procedure for ALTO cross-domain server discovery.</t>
              <t>Technically, the procedure specified in this document takes one IP address or prefix and a U-NAPTR Service Parameter (typically, "ALTO:https") as parameters. It performs DNS lookups (for NAPTR resource records in the "in-addr.arpa." or "ip6.arpa." trees) and returns one or more URIs of information resources related to that IP address or prefix.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8686"/>
          <seriesInfo name="DOI" value="10.17487/RFC8686"/>
        </reference>
        <reference anchor="RFC8895">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Incremental Updates Using Server-Sent Events (SSE)</title>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <date month="November" year="2020"/>
            <abstract>
              <t>The Application-Layer Traffic Optimization (ALTO) protocol (RFC 7285) provides network-related information, called network information resources, to client applications so that clients can make informed decisions in utilizing network resources. This document presents a mechanism to allow an ALTO server to push updates to ALTO clients to achieve two benefits: (1) updates can be incremental, in that if only a small section of an information resource changes, the ALTO server can send just the changes and (2) updates can be immediate, in that the ALTO server can send updates as soon as they are available.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8895"/>
          <seriesInfo name="DOI" value="10.17487/RFC8895"/>
        </reference>
        <reference anchor="RFC8896">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Cost Calendar</title>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="R. Yang" initials="R." surname="Yang">
              <organization/>
            </author>
            <author fullname="Q. Wu" initials="Q." surname="Wu">
              <organization/>
            </author>
            <author fullname="L. Deng" initials="L." surname="Deng">
              <organization/>
            </author>
            <author fullname="N. Schwan" initials="N." surname="Schwan">
              <organization/>
            </author>
            <date month="November" year="2020"/>
            <abstract>
              <t>This document is an extension to the base Application-Layer Traffic Optimization (ALTO) protocol.  It extends the ALTO cost information service so that applications decide not only 'where' to connect but also 'when'.  This is useful for applications that need to perform bulk data transfer and would like to schedule these transfers during an off-peak hour, for example.  This extension introduces the ALTO Cost Calendar with which an ALTO Server exposes ALTO cost values in JSON arrays where each value corresponds to a given time interval.  The time intervals, as well as other Calendar attributes, are specified in the Information Resources Directory and ALTO Server responses.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8896"/>
          <seriesInfo name="DOI" value="10.17487/RFC8896"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC2622">
          <front>
            <title>Routing Policy Specification Language (RPSL)</title>
            <author fullname="C. Alaettinoglu" initials="C." surname="Alaettinoglu">
              <organization/>
            </author>
            <author fullname="C. Villamizar" initials="C." surname="Villamizar">
              <organization/>
            </author>
            <author fullname="E. Gerich" initials="E." surname="Gerich">
              <organization/>
            </author>
            <author fullname="D. Kessens" initials="D." surname="Kessens">
              <organization/>
            </author>
            <author fullname="D. Meyer" initials="D." surname="Meyer">
              <organization/>
            </author>
            <author fullname="T. Bates" initials="T." surname="Bates">
              <organization/>
            </author>
            <author fullname="D. Karrenberg" initials="D." surname="Karrenberg">
              <organization/>
            </author>
            <author fullname="M. Terpstra" initials="M." surname="Terpstra">
              <organization/>
            </author>
            <date month="June" year="1999"/>
            <abstract>
              <t>RPSL allows a network operator to be able to specify routing policies at various levels in the Internet hierarchy; for example at the Autonomous System (AS) level.  At the same time, policies can be specified with sufficient detail in RPSL so that low level router configurations can be generated from them.  RPSL is extensible; new routing protocols and new protocol features can be introduced at any time.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2622"/>
          <seriesInfo name="DOI" value="10.17487/RFC2622"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman">
              <organization/>
            </author>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices.  It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages.  The NETCONF protocol operations are realized as remote procedure calls (RPCs).  This document obsoletes RFC 4741.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC7921">
          <front>
            <title>An Architecture for the Interface to the Routing System</title>
            <author fullname="A. Atlas" initials="A." surname="Atlas">
              <organization/>
            </author>
            <author fullname="J. Halpern" initials="J." surname="Halpern">
              <organization/>
            </author>
            <author fullname="S. Hares" initials="S." surname="Hares">
              <organization/>
            </author>
            <author fullname="D. Ward" initials="D." surname="Ward">
              <organization/>
            </author>
            <author fullname="T. Nadeau" initials="T." surname="Nadeau">
              <organization/>
            </author>
            <date month="June" year="2016"/>
            <abstract>
              <t>This document describes the IETF architecture for a standard, programmatic interface for state transfer in and out of the Internet routing system.  It describes the high-level architecture, the building blocks of this high-level architecture, and their interfaces, with particular focus on those to be standardized as part of the Interface to the Routing System (I2RS).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7921"/>
          <seriesInfo name="DOI" value="10.17487/RFC7921"/>
        </reference>
        <reference anchor="RFC7971">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Deployment Considerations</title>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Scharf" initials="M." surname="Scharf">
              <organization/>
            </author>
            <author fullname="H. Seidel" initials="H." surname="Seidel">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." surname="Previdi">
              <organization/>
            </author>
            <date month="October" year="2016"/>
            <abstract>
              <t>Many Internet applications are used to access resources such as pieces of information or server processes that are available in several equivalent replicas on different hosts.  This includes, but is not limited to, peer-to-peer file sharing applications.  The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource. This memo discusses deployment-related issues of ALTO.  It addresses different use cases of ALTO such as peer-to-peer file sharing and Content Delivery Networks (CDNs) and presents corresponding examples. The document also includes recommendations for network administrators and application designers planning to deploy ALTO, such as recommendations on how to generate ALTO map information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7971"/>
          <seriesInfo name="DOI" value="10.17487/RFC7971"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability.  There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.  This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder">
              <organization/>
            </author>
            <author fullname="P. Shafer" initials="P." surname="Shafer">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <author fullname="R. Wilton" initials="R." surname="Wilton">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model.  This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC8346">
          <front>
            <title>A YANG Data Model for Layer 3 Topologies</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm">
              <organization/>
            </author>
            <author fullname="J. Medved" initials="J." surname="Medved">
              <organization/>
            </author>
            <author fullname="R. Varga" initials="R." surname="Varga">
              <organization/>
            </author>
            <author fullname="X. Liu" initials="X." surname="Liu">
              <organization/>
            </author>
            <author fullname="H. Ananthakrishnan" initials="H." surname="Ananthakrishnan">
              <organization/>
            </author>
            <author fullname="N. Bahadur" initials="N." surname="Bahadur">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for Layer 3 network topologies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8346"/>
          <seriesInfo name="DOI" value="10.17487/RFC8346"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8641">
          <front>
            <title>Subscription to YANG Notifications for Datastore Updates</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm">
              <organization/>
            </author>
            <author fullname="E. Voit" initials="E." surname="Voit">
              <organization/>
            </author>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore.  Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8641"/>
          <seriesInfo name="DOI" value="10.17487/RFC8641"/>
        </reference>
        <reference anchor="RFC9240">
          <front>
            <title>An Extension for Application-Layer Traffic Optimization (ALTO): Entity Property Maps</title>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <author fullname="K. Gao" initials="K." surname="Gao">
              <organization/>
            </author>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document specifies an extension to the base Application-Layer Traffic Optimization (ALTO) Protocol that generalizes the concept of "endpoint properties", which have been tied to IP addresses so far, to entities defined by a wide set of objects. Further, these properties are presented as maps, similar to the network and cost maps in the base ALTO Protocol. While supporting the endpoints and related Endpoint Property Service defined in RFC 7285, the ALTO Protocol is extended in two major directions. First, from endpoints restricted to IP addresses to entities covering a wider and extensible set of objects; second, from properties for specific endpoints to entire entity property maps. These extensions introduce additional features that allow entities and property values to be specific to a given information resource. This is made possible by a generic and flexible design of entity and property types.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9240"/>
          <seriesInfo name="DOI" value="10.17487/RFC9240"/>
        </reference>
        <reference anchor="RFC9241">
          <front>
            <title>Content Delivery Network Interconnection (CDNI) Footprint and Capabilities Advertisement Using Application-Layer Traffic Optimization (ALTO)</title>
            <author fullname="J. Seedorf" initials="J." surname="Seedorf">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <author fullname="K. Ma" initials="K." surname="Ma">
              <organization/>
            </author>
            <author fullname="J. Peterson" initials="J." surname="Peterson">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <date month="July" year="2022"/>
            <abstract>
              <t>The Content Delivery Networks Interconnection (CDNI) framework in RFC 6707 defines a set of protocols to interconnect CDNs to achieve multiple goals, including extending the reach of a given CDN. A CDNI Request Routing Footprint &amp; Capabilities Advertisement interface (FCI) is needed to achieve the goals of a CDNI. RFC 8008 defines the FCI semantics and provides guidelines on the FCI protocol, but the exact protocol is not specified. This document defines a new Application-Layer Traffic Optimization (ALTO) service, called "CDNI Advertisement Service", that provides an implementation of the FCI, following the guidelines defined in RFC 8008.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9241"/>
          <seriesInfo name="DOI" value="10.17487/RFC9241"/>
        </reference>
        <reference anchor="RFC9275">
          <front>
            <title>An Extension for Application-Layer Traffic Optimization (ALTO): Path Vector</title>
            <author fullname="K. Gao" initials="K." surname="Gao">
              <organization/>
            </author>
            <author fullname="Y. Lee" initials="Y." surname="Lee">
              <organization/>
            </author>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." surname="Yang">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <date month="September" year="2022"/>
            <abstract>
              <t>This document is an extension to the base Application-Layer Traffic Optimization (ALTO) protocol. It extends the ALTO cost map and ALTO property map services so that an application can decide to which endpoint(s) to connect based not only on numerical/ordinal cost values but also on fine-grained abstract information regarding the paths. This is useful for applications whose performance is impacted by specific components of a network on the end-to-end paths, e.g., they may infer that several paths share common links and prevent traffic bottlenecks by avoiding such paths. This extension introduces a new abstraction called the "Abstract Network Element" (ANE) to represent these components and encodes a network path as a vector of ANEs. Thus, it provides a more complete but still abstract graph representation of the underlying network(s) for informed traffic optimization among endpoints.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9275"/>
          <seriesInfo name="DOI" value="10.17487/RFC9275"/>
        </reference>
        <reference anchor="I-D.ietf-alto-performance-metrics">
          <front>
            <title>ALTO Performance Cost Metrics</title>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Y. Richard Yang" initials="Y. R." surname="Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Young Lee" initials="Y." surname="Lee">
              <organization>Samsung</organization>
            </author>
            <author fullname="Dhruv Dhody" initials="D." surname="Dhody">
              <organization>Huawei</organization>
            </author>
            <author fullname="Sabine Randriamasy" initials="S." surname="Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Luis M. Contreras" initials="L. M." surname="Contreras">
              <organization>Telefonica</organization>
            </author>
            <date day="21" month="March" year="2022"/>
            <abstract>
              <t>   The cost metric is a basic concept in Application-Layer Traffic
   Optimization (ALTO), and different applications may use different
   types of cost metrics.  Since the ALTO base protocol (RFC 7285)
   defines only a single cost metric (namely, the generic "routingcost"
   metric), if an application wants to issue a cost map or an endpoint
   cost request in order to identify a resource provider that offers
   better performance metrics (e.g., lower delay or loss rate), the base
   protocol does not define the cost metric to be used.

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-alto-performance-metrics-28"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-tcp-client-server">
          <front>
            <title>YANG Groupings for TCP Clients and TCP Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <author fullname="Michael Scharf" initials="M." surname="Scharf">
              <organization>Hochschule Esslingen - University of Applied Sciences</organization>
            </author>
            <date day="12" month="December" year="2022"/>
            <abstract>
              <t>   This document defines three YANG 1.1 modules to support the
   configuration of TCP clients and TCP servers.  The modules include
   basic parameters of a TCP connection relevant for client or server
   applications, as well as client configuration required for traversing
   proxies.  The modules can be used either standalone or in conjunction
   with configuration of other stack protocol layers.

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

Editorial Note (To be removed by RFC Editor)

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

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

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

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

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

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

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

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

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

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

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

   *  Appendix B.  Change Log

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

Editorial Note (To be removed by RFC Editor)

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

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

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

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

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

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

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

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

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

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

   *  Appendix A.  Change Log

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

Editorial Note (To be removed by RFC Editor)

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

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

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

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

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

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

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

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

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

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

   *  2022-12-12 --&gt; the publication date of this draft

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

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

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

   *  Appendix A.  Change Log

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

Editorial Note (To be removed by RFC Editor)

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

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

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

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

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

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

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

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

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

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

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

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

   *  2022-12-12 --&gt; the publication date of this draft

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

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

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

   *  Appendix A.  Change Log

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

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

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

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

  organization
    "IETF ALTO Working Group";

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

  description
    "This YANG module defines an example of the extended ALTO server
     discovery manners for IRR and PeeringDB.

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

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

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

  revision "2023-02-10" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

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

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

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

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

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

  organization
    "IETF ALTO Working Group";

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

  description
    "This YANG module defines an example of the extended ALTO client
     authentication approaches for the role-based access control.

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

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

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

  revision "2023-02-10" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

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

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

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

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

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

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

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

  organization
    "IETF ALTO Working Group";

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

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

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

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

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

  revision "2023-02-10" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

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

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

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

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

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

  augment /alto:alto/alto:alto-server/alto:resource
            /alto:resource-params/alto:networkmap
            /alto:alto-networkmap-params/alto:algorithm:
    +--:(l3-unicast-cluster)
       +--rw l3-unicast-cluster-algorithm
          +--rw l3-unicast-topo    leafref
          +--rw depth?             uint32
]]></artwork>
        <t>This example defines a creation algorithm called <tt>l3-unicast-cluster-algorithm</tt>
for the network map resource. It takes two algorithm-specific parameters:</t>
        <dl>
          <dt>l3-unicast-topo</dt>
          <dd>
            <t>This parameter refers to the target path name of an operational
<tt>yang-datastore</tt> data source node (See <xref target="example-data-source"/>) subscribed
in the <tt>data-source</tt> list (See <xref target="data-source"/>). The referenced target path
in the corresponding <tt>yang-datastore</tt> data source is assumed for an IETF
layer 3 unicast topology defined in <xref target="RFC8346"/>. The algorithm uses the
topology data from this data source to compute the ALTO network map resource.</t>
          </dd>
          <dt>depth</dt>
          <dd>
            <t>This optional parameter sets the depth of the clustering algorithm. For
example, if the depth sets to 1, the algorithm will generate PID for every
l3-node in the topology.</t>
          </dd>
        </dl>
        <t>The creation algorithm can be reactively called once the referenced data source
updates. Therefore, the ALTO network map resource can be updated dynamically.
The update of the reference data source depends on the used <tt>update-policy</tt> (See
<xref target="data-source"/>).</t>
        <artwork><![CDATA[
module example-ietf-alto-alg {
  yang-version 1.1;

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

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

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

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

  organization
    "IETF ALTO Working Group";

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

  description
    "This YANG module defines an example of the extended ALTO
     information resource creation algorithm for translating an L3
     unicast topology of I2RS to an ALTO network map.

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

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

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

  revision "2023-02-10" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

  augment "/alto:alto/alto:alto-server/alto:resource"
        + "/alto:resource-params/alto:networkmap"
        + "/alto:alto-networkmap-params/alto:algorithm" {
    description
      "Example of network map creation algorithm.";
    case l3-unicast-cluster {
      description
        "Example algorithm translating an L3 unicast topology of I2RS
         to an ALTO network map";
      container l3-unicast-cluster-algorithm {
        description
          "Parameters for l3-unicast-cluster algorithm";
        leaf l3-unicast-topo {
          type leafref {
            path "/alto:alto/alto:alto-server/alto:data-source"
               + "/alto-ds:yang-datastore-source-params"
               + "/alto-ds:target-paths/alto-ds:name";
          }
          must 'deref(.)/../..'
             + '/alto-ds:datastore = "ds:operational"';
          mandatory true;
          description
            "The data source to an IETF layer 3 unicast topology.";
        }
        leaf depth {
          type uint32;
          description
            "The depth of the clustering.";
        }
      }
    }
  }
}
]]></artwork>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="ack" numbered="false">
      <name>Acknowledgements</name>
      <t>The authors thank Qin Wu for the help with drafting the initial version of the
YANG modules. Thanks also to Adrian Farrel, Jordi Ros Giralt, Qiao Xiang, and
Qin Wu for their reviews and valuable feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
bcEo/e26/c7SfO228bvLYFt9Iz4c9vo1Z//WyWtRtfbCD571RK16NScDN8ii
QHkjK2f4cDSfkDSuWtnIo+hVYQsrjbmWzJllmr+UeyENNgo/m4N+9wJ+JB0r
QUz1K34VOYv7TkjMyRV+6SHSPQwDaLXnSYHMwC3kfn4vyCVTN4ThNlDhQjMB
RDdrTXbkP5glcbVguL3wENBmNuTiBy6SlMRxh98IXx7SVUadjOxkDWD+dLTx
JQ4EQwMq0VbpHDi0bPDawZvvOd9CMsPDykWdZqLrw0PaBsAcdRAk/PSaPCcI
/pujw8ptg4IPdJmvkkpfVcSas+8SFwUeFH3T82q7RE1c++sJpt/FIuscxiYI
JVeCTd7ORpTH/50do5mvQ/nuCNhrbnBBMSPpGLgOoYOOZ+g0EZs5dVvt1Lh0
65aGQDNUBwDmWd5u9QlXYlbwNV01BwCg19yRubDsVkcIWqPabYD8PctRm2+R
4GISUIbZteNuAVtRYcPFoZSXS2fzeFwHyZ0LDugE6zpjqlPUx8yGFvMUuRxe
6l3gpsds9HhVBZ2MsuVqrvGNZGuTxbqT7sv6i0+o1t9IjRcl2ZFvQThOiqt8
UF6MwVgoMntQq6+5lXiHo8LoXbIkKvJPneCpPdjAbOZ6d4y1J89ExWNIupwo
i/3LC8/hLhLbMmJnyWhn5zKtp4vz4biY7Yxh/+24IO6kVQVMYmf38bNIEhmz
SbX/ys1+zHVJPXtIPwBRSdJTl9S0Ld5HLFcHeBGVXJHD3V/Bb+S1hQVmP8rG
osxH+NJIFIsfZ9kItiJJZNPZBr4oZTY35Af4BZCGGG2WsHxPPevm+IDeV9Yk
Fn1nA0vDYaXLkTrgUBKaNFmQp9gVvXfdHMqpg+kNBb/3jIPlBEc8wDfiEuYt
gNkjDsQpo7NJsKrRNb4to+mPn1U942MNwvD4L0/88eHv3vHdIpweAPigBwIs
XRiEgFw9Lgj0QwuGoryMcy2MqNejF6dfM8X+EUwN5C3UMVMHcYcx+wg3/viN
+mNyjnnKf603BvIK2P/jt8ChcF5D6H/n6lLcdVgdfec3DD68jAlG4O1f48Pf
6da/4YGcE3Ye7NQUMPcUkbUyONOAt0zjTO8eFPNlmV5Oa7U53lJ7j/f2FKHp
tFxUtQlRhBErqqJGoQNUYSIWM4AdfGbkMQXa0JUy6rZCbYFuaesRjxOPreIQ
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
SCMDbAEA

-->

</rfc>
