<?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-05" 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-05"/>
    <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
        |     |          {http-listen,http:client-auth-supported,
        |     |           http:local-users-supported}?
        |     |     +--rw user-id    leafref
        |     +--:(https)
        |        +--rw https-auth-client
        |                {http:client-auth-supported,
        |                 http:local-users-supported}?
        |           +--rw user-id    leafref
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*
        |          -> /alto/alto-server/auth-client/client-id
        +--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
        |     |          {http-listen,http:client-auth-supported,
        |     |           http:local-users-supported}?
        |     |     +--rw user-id    leafref
        |     +--:(https)
        |        +--rw https-auth-client
        |                {http:client-auth-supported,
        |                 http:local-users-supported}?
        |           +--rw user-id    leafref
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*
        |          -> /alto/alto-server/auth-client/client-id
        ...
]]></artwork>
          <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-23.yang"><![CDATA[
module ietf-alto {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-alto";
  prefix "alto";

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

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

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

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

  organization
    "IETF ALTO Working Group";

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

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

     Copyright (c) 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-23" {
    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 {
              if-feature "http-listen";
              if-feature "http:client-auth-supported";
              if-feature "http:local-users-supported";
              description
                "Parameters of the authenticated HTTP client.";
              leaf user-id {
                type leafref {
                  path "/alto:alto/alto:alto-server/alto:listen"
                     + "/alto:http/alto:http-server-parameters"
                     + "/alto:client-authentication/alto:users"
                     + "/alto:user/alto:user-id";
                }
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   client.";
              }
            }
          }
          case https {
            description
              "The client is authenticated by the HTTP server.";
            container https-auth-client {
              if-feature "http:client-auth-supported";
              if-feature "http:local-users-supported";
              description
                "Parameters of the authenticated HTTPS client.";
              leaf user-id {
                type leafref {
                  path "/alto:alto/alto:alto-server/alto:listen"
                     + "/alto:https/alto:http-server-parameters"
                     + "/alto:client-authentication/alto:users"
                     + "/alto:user/alto:user-id";
                }
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   client.";
              }
            }
          }
        }
        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-23.yang"><![CDATA[
module ietf-alto-stats {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-alto-stats";
  prefix "alto-stats";

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

  import ietf-alto {
    prefix alto;
    reference
      "RFC XXXX: 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-23" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Operations, Administration,
       and Maintenance of ALTO Protocol.";
  }

  augment "/alto:alto/alto:alto-server" {
    description
      "Top-level statistics for the whole ALTO server.";
    leaf num-total-req {
      type yang: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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

-->

</rfc>
