<?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-rfc2629 version 1.6.2 (Ruby 3.0.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-zhang-alto-oam-yang-02" category="std" consensus="true" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.3 -->
  <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-zhang-alto-oam-yang-02"/>
    <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>
          <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>
    <date year="2022" month="March" day="07"/>
    <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 create and update ALTO
information resources, manage the access control, configure server-to-server
communication and 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/openalto/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 create and update ALTO
information resources, manage the access control, configure server-to-server
communication and server discovery, and collect statistical data.</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"/> and
<xref target="RFC8896"/>), the design will also be extensible for future standard extensions
(e.g., <xref target="I-D.ietf-alto-path-vector"/>, <xref target="I-D.ietf-alto-unified-props-new"/>,
<xref target="I-D.ietf-alto-cdni-request-routing-alto"/>, and
<xref target="I-D.ietf-alto-performance-metrics"/>).</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">key-chain</td>
              <td align="left">ietf-key-chain</td>
              <td align="left">
                <xref target="RFC8177"/></td>
            </tr>
          </tbody>
        </table>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="sec-req">
      <name>Design Scope and Requirements</name>
      <section anchor="scope-of-data-model-for-alto-om">
        <name>Scope of Data Model for ALTO O&amp;M</name>
        <t>What is in the scope of this document?</t>
        <ul spacing="normal">
          <li>Data model for deploy an ALTO server/client.</li>
          <li>Data model for operate and manage a running ALTO server/client.</li>
          <li>Data model for functionality/capability configuration for ALTO services.</li>
          <li>Data model for monitoring ALTO-related performance metrics.</li>
        </ul>
        <t>What is not in the scope of this document?</t>
        <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="basic-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 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">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 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>
            <tr>
              <td align="left">R7: The data model should support configuration for security policy management.</td>
              <td align="left">Section 16.2.6 of <xref target="RFC7285"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="additional-requirements-for-extensibility">
        <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>
        <!--
To satisfy all the basic requirements and consider the potential requirements
for future extensions, this document focuses on the design objectives for the
YANG data model as follows:

- The data model should support configuration for ALTO server setup (e.g.,
  caching policy at information resource level, metadata for server discovery).
- The data model should provide configurable data model for administrators to
  create, update and remove ALTO information resources.
    - The data model should support different types of data source
      provisioning.
    - The data model should allow developers to augment new APIs for ALTO
      information resource generation algorithms.
    - The data model should be extensible for new ALTO information resources.
- The data model should collect statistics information of the
  requests/responses for each ALTO information resource.
- The data model should support security policy configuration at the
  information resource level.
-->

<!--
- The data model should provide intent-based interfaces for administrators to
  create, update and remove ALTO information resources.
  - The data model should be extensible for new ALTO information resources.
  - The data model should allow developers to augment new APIs for ALTO
    information resource generation.
- The data model should support configuration for ALTO server discovery.
- The data model should support access control at the information resource level.
- The data model should collect statistics information of the requests to each
  ALTO information resource.
-->

<!--
NOTE: The data model supporting configuration for the ALTO client and the
communication between the administrated ALTO server and other ALTO servers will
be considered in a future version of the document.
-->

<!-- End of sections -->

</section>
    </section>
    <section anchor="design-of-alto-om-data-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 provide all the basic ALTO O&amp;M
data models fitting the requirements listed in <xref target="sec-req"/>.</t>
        <t>The container "alto-server" in the ietf-alto module contains all the configured
and operational parameters of the adminstrated ALTO server instance.</t>
        <t>NOTE: So far, the ALTO YANG module only focuses on the ALTO server related
configuration. The ALTO client related configuration will be added in a future
version of the document.</t>
        <artwork><![CDATA[
module: ietf-alto
  +--rw alto-server
     +--rw hostname?      inet:host
     +--rw cost-type* [cost-type-name]
     |  +--rw cost-type-name    string
     |  +--rw cost-mode         cost-mode
     |  +--rw cost-metric       cost-metric
     +--rw meta* [meta-key]
     |  +--rw meta-key      string
     |  +--rw meta-value    string
     +--rw resource* [resource-id]
     |  +--rw resource-id                       resource-id
     |  +--rw resource-type                     identityref
     |  +--rw description?                      string
     |  +--rw accepted-group*                   string
     |  +--rw dependency*                       resource-id
     |  +--rw auth
     |  |  +--rw (auth-type-selection)?
     |  |     +--:(auth-key-chain)
     |  |     |  +--rw key-chain?   key-chain:key-chain-ref
     |  |     +--:(auth-key)
     |  |     +--:(auth-tls)
     |  +--rw (resource-params)?
     |     +--:(ird)
     |     |  +--rw alto-ird-params
     |     |     +--rw delegation    inet:uri
     |     +--:(networkmap)
     |     |  +--rw alto-networkmap-params
     |     |     +--rw is-default?   boolean
     |     |     +--rw filtered?     boolean
     |     |     +--rw (algorithm)
     |     +--:(costmap)
     |     |  +--rw alto-costmap-params
     |     |     +--rw filtered?                   boolean
     |     |     +--rw cost-type-names*            string
     |     |     +--rw cost-constraints?           boolean
     |     |     +--rw max-cost-types?             uint32 {multi-cost}?
     |     |     +--rw testable-cost-type-names*   string {multi-cost}?
     |     |     +--rw calendar-attributes {cost-calendar}?
     |     |     |  +--rw cost-type-names*       string
     |     |     |  +--rw time-interval-size     decimal64
     |     |     |  +--rw number-of-intervals    uint32
     |     |     +--rw (algorithm)
     |     +--:(endpointcost)
     |     |  +--rw alto-endpointcost-params
     |     |     +--rw cost-type-names*            string
     |     |     +--rw cost-constraints?           boolean
     |     |     +--rw max-cost-types?             uint32 {multi-cost}?
     |     |     +--rw testable-cost-type-names*   string {multi-cost}?
     |     |     +--rw calendar-attributes {cost-calendar}?
     |     |     |  +--rw cost-type-names*       string
     |     |     |  +--rw time-interval-size     decimal64
     |     |     |  +--rw number-of-intervals    uint32
     |     |     +--rw (algorithm)
     |     +--:(endpointprop)
     |     |  +--rw alto-endpointprop-params
     |     |     +--rw prop-types*   string
     |     |     +--rw (algorithm)
     |     +--:(propmap) {propmap}?
     |     |  +--rw alto-propmap-params
     |     |     +--rw (algorithm)
     |     +--:(cdni) {cdni}?
     |     |  +--rw alto-cdni-params
     |     |     +--rw (algorithm)
     |     +--:(update) {incr-update}?
     |        +--rw alto-update-params
     |           +--rw (algorithm)
     +--rw data-source* [source-id]
        +--rw source-id                             string
        +--rw source-type                           identityref
        +--rw (update-policy)
        |  +--:(reactive)
        |  |  +--rw reactive                        boolean
        |  +--:(proactive)
        |     +--rw poll-interval                   uint32
        +--rw (source-params)?
           +--:(yang-datastore)
           |  +--rw yang-datastore-source-params
           |     +--rw source-path    yang:xpath1.0
           +--:(prometheus)
              +--rw prometheus-source-params
                 +--rw source-uri    inet:uri
                 +--rw query-data?   string
]]></artwork>
      </section>
      <section anchor="meta-information-of-alto-server">
        <name>Meta Information of ALTO Server</name>
        <t>The ALTO server instance contains the following basic configurations for the
server setup.</t>
        <t>The hostname is the name that is used to access the ALTO server. It will be also
used in the URI of each information resource provided by the ALTO server.</t>
        <t>The cost type list is the registry for the cost types that can be used in the
ALTO server.</t>
        <t>The <tt>meta</tt> 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).</t>
        <t>TODO: As suggested by <xref target="RFC7286"/> and <xref target="RFC8686"/>, the configuration related to
ALTO server discovery should also be included here.</t>
        <artwork><![CDATA[
module: ietf-alto
  +--rw alto-server
     +--rw hostname?      inet:host
     +--rw cost-type* [cost-type-name]
     |  +--rw cost-type-name    string
     |  +--rw cost-mode         cost-mode
     |  +--rw cost-metric       cost-metric
     +--rw meta* [meta-key]
     |  +--rw meta-key      string
     |  +--rw meta-value    string
     ...
]]></artwork>
      </section>
      <section anchor="alto-information-resources-configuration-management">
        <name>ALTO Information Resources Configuration Management</name>
        <t>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 resource.</t>
        <t>Each <tt>resoruce</tt> entry provide configuration defining how to create or update an ALTO
information resource. Adding a new <tt>resource</tt> entry will submit an ALTO
information resource creation intent to the intent system to create a new ALTO
information resource. Updating an existing <tt>resource</tt> entry will update the
corresponding ALTO information resource creation intent. Removing an existing
<tt>resource</tt> entry will remove the corresponding ALTO information resource
creation intent and also the created ALTO information resource.</t>
        <t>The parameter of the intent interface defined by 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-group</tt> node containing a list of <tt>user-group</tt>s
that can access this ALTO information resource.</t>
        <t>As section 15.5.2 of <xref target="RFC7285"/> suggests, the module also defines
authentication related configuration to employ access control at information
resource level. The ALTO server returns the IRD to the ALTO client based on its
authentication information.</t>
        <t>For some <tt>resource-type</tt>, the parameter of the intent interface MUST also
include the 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 creation intent MAY also need
type-specific parameters. These type-specific parameters include two categories:</t>
        <ol spacing="normal" type="1"><li>One categories of the type-specific parameters are 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 categories of the type-specific parameters are algorithm-specific.
The developer of the ALTO server can implement their own creation altorithms
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
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"/>).</t>
        <t>The developer cannot 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-server
     ...
     +--rw resource* [resource-id]
     |  +--rw resource-id                       resource-id
     |  +--rw resource-type                     identityref
     |  +--rw description?                      string
     |  +--rw accepted-group*                   string
     |  +--rw dependency*                       resource-id
     |  +--rw auth
     |  |  +--rw (auth-type-selection)?
     |  |     +--:(auth-key-chain)
     |  |     |  +--rw key-chain?   key-chain:key-chain-ref
     |  |     +--:(auth-key)
     |  |     +--:(auth-tls)
     |  +--rw (resource-params)?
     |     +--:(ird)
     |     |  +--rw alto-ird-params
     |     |     +--rw delegation    inet:uri
     |     +--:(networkmap)
     |     |  +--rw alto-networkmap-params
     |     |     +--rw is-default?   boolean
     |     |     +--rw filtered?     boolean
     |     |     +--rw (algorithm)
     |     +--:(costmap)
     |     |  +--rw alto-costmap-params
     |     |     +--rw filtered?                   boolean
     |     |     +--rw cost-type-names*            string
     |     |     +--rw cost-constraints?           boolean
     |     |     +--rw max-cost-types?             uint32 {multi-cost}?
     |     |     +--rw testable-cost-type-names*   string {multi-cost}?
     |     |     +--rw calendar-attributes {cost-calendar}?
     |     |     |  +--rw cost-type-names*       string
     |     |     |  +--rw time-interval-size     decimal64
     |     |     |  +--rw number-of-intervals    uint32
     |     |     +--rw (algorithm)
     |     +--:(endpointcost)
     |     |  +--rw alto-endpointcost-params
     |     |     +--rw cost-type-names*            string
     |     |     +--rw cost-constraints?           boolean
     |     |     +--rw max-cost-types?             uint32 {multi-cost}?
     |     |     +--rw testable-cost-type-names*   string {multi-cost}?
     |     |     +--rw calendar-attributes {cost-calendar}?
     |     |     |  +--rw cost-type-names*       string
     |     |     |  +--rw time-interval-size     decimal64
     |     |     |  +--rw number-of-intervals    uint32
     |     |     +--rw (algorithm)
     |     +--:(endpointprop)
     |     |  +--rw alto-endpointprop-params
     |     |     +--rw prop-types*   string
     |     |     +--rw (algorithm)
     |     +--:(propmap) {propmap}?
     |     |  +--rw alto-propmap-params
     |     |     +--rw (algorithm)
     |     +--:(cdni) {cdni}?
     |     |  +--rw alto-cdni-params
     |     |     +--rw (algorithm)
     |     +--:(update) {incr-update}?
     |        +--rw alto-update-params
     |           +--rw (algorithm)
     ...
]]></artwork>
      </section>
      <section anchor="data-source">
        <name>Data Sources</name>
        <t>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 gets the update as soon as the data source changes. For the
proactive update, the ALTO server has to proactively fetch the data source
periodically.</t>
        <t>To use the reactive update, the <tt>reactive</tt> attribute MUST be set true. To use
the proactive update, the <tt>poll-interval</tt> attribute MUST be greater than zero.
The value of <tt>poll-interval</tt> specifies the interval of fetching the data in
milliseconds. If <tt>reactive</tt> is false or <tt>poll-interval</tt> is zero, the ALTO server
will not update the data source.</t>
        <t>The <tt>data-source/source-params</tt> node can be augmented for different types of
data sources. This data model only includes import interfaces for a list of
predefined data sources. More data sources can be supported by future documents
and other third-party providers.</t>
        <artwork><![CDATA[
module: ietf-alto
  +--rw alto-server
     ...
     +--rw data-source* [source-id]
        +--rw source-id                             string
        +--rw source-type                           identityref
        +--rw (update-policy)
        |  +--:(reactive)
        |  |  +--rw reactive                        boolean
        |  +--:(proactive)
        |     +--rw poll-interval                   uint32
        +--rw (source-params)?
           +--:(yang-datastore)
           |  +--rw yang-datastore-source-params
           |     +--rw source-path    yang:xpath1.0
           +--:(prometheus)
              +--rw prometheus-source-params
                 +--rw source-uri    inet:uri
                 +--rw query-data?   string
]]></artwork>
        <t>Note: Current source configuration still has limitations. It should be
revised to support more general southbound and data retrieval mechanisms.</t>
        <section anchor="internal-data-source">
          <name>Yang DataStore Data Source</name>
          <t>The <tt>yang-datastore-source-params</tt> is used to import the YANG data which
is located in the same YANG model-driven data store supplying the current ALTO
O&amp;M data model. The <tt>source-path</tt> is used to specify the XPath of the data
source node.</t>
        </section>
        <section anchor="external-data-source">
          <name>Prometheus Data Source</name>
          <t>The <tt>prometheus-source-params</tt> is used to import common performance metrics
data which is provided by a Prometheus server. The <tt>source-uir</tt> is used to
establish the connection with the Prometheus server. The <tt>query-data</tt> is used
to speficify the potential query expression in PromQL.</t>
        </section>
      </section>
      <section anchor="model-for-alto-server-to-server-communication">
        <name>Model for ALTO Server-to-server Communication</name>
        <t>TBD.</t>
      </section>
    </section>
    <section anchor="design-of-alto-om-statistics-data-model">
      <name>Design of ALTO O&amp;M Statistics Data Model</name>
      <t>As section 16.2.5 of <xref target="RFC7285"/> suggests, 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 suggested by <xref target="RFC7971"/>:</t>
      <ul spacing="normal">
        <li>
          <t>Measurement of impact
          </t>
          <ul spacing="normal">
            <li>Total amount and distribution of traffic</li>
            <li>Application performance</li>
          </ul>
        </li>
        <li>
          <t>System and service performance
          </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>
        </li>
      </ul>
      <t>Besides the measurement information suggested by <xref target="RFC7971"/>, this data model
also contains useful measurement information for other ALTO extensions:</t>
      <ul spacing="normal">
        <li>Number of generic ALTO entities (for <xref target="I-D.ietf-alto-unified-props-new"/> and
<xref target="I-D.ietf-alto-cdni-request-routing-alto"/>)</li>
        <li>Statistics for update sessions and events (for <xref target="RFC8189"/>)</li>
        <li>Statistics for calendar (for <xref target="RFC8896"/>)</li>
      </ul>
      <!--
Note that this module only contains statstics for performance information that a
common web server or an O&M tool cannot provide.
-->

<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/alto:resource:
    +--ro num-res-upd?    yang:counter32
    +--ro res-mem-size?   yang:counter32
    +--ro res-enc-size?   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>
    <section anchor="extension-of-alto-om-data-model">
      <name>Extension of ALTO O&amp;M Data Model</name>
      <t>As ALTO protocol is extensible, new protocol extensions can be developed after
this data model is published. To support future ALTO protocol extensions, the
extension documents can augment the existing cases of the <tt>resource-params</tt>
choice with new configuration parameters for existing ALTO information resource
extensions, or augment the <tt>resource-params</tt> with new cases for new ALTO
information resources.</t>
      <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>algorithm</tt> choice of the <tt>resource-params</tt> of each <tt>resource</tt>.</li>
        <li>The <tt>data-source</tt> choice.</li>
      </ul>
      <t>The following example shows how the developer augments the <tt>algorithm</tt>
choice of <tt>alto-networkmap-params</tt> with a creation algorithm for the network
map resource.</t>
      <artwork><![CDATA[
module: example-ietf-alto-alg

  augment /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
          |       -> /alto:alto-server/data-source/source-id
          +--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 source id of a data source node subscribed in the
<tt>data-source</tt> list (See <xref target="data-source"/>). The corresponding data source is
assumed to be an internel data source (See <xref target="internal-data-source"/>) 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>
      <!-- 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 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@2022-03-07.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-yang-types {
    prefix "yang";
    reference
      "RFC 6991: Common YANG Data Types";
  }

  import ietf-key-chain {
    prefix key-chain;
    reference
      "RFC 8177: YANG Data Model for Key Chains";
  }

  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 "2022-03-07" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for OAM and Management of ALTO
       Protocol.";
  }

  typedef cost-mode {
    type enumeration {
      enum numerical {
        value 1;
        description
          "This mode indicates that it is safe to perform numerical
           operations";
      }
      enum ordinal {
        value 2;
        description
          "This mode indicates that the cost values in a cost map
           represent ranking";
      }
    }
    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.";
  }

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

  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.";
  }

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

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

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

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

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

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

  identity prometheus {
    base source-types;
    description
      "Identity for data source of prometheus system.";
  }

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

  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 XXXX: An ALTO Extension: Entity Property Maps";
  }

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

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

  grouping filt-costmap-cap {
    description
      "This grouping defines 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 algorithm {
    choice algorithm {
      mandatory true;
      description
        "Information resource creation algorithm to be augmented.";
    }
    description
      "This grouping defines base data model for information
       resource creation algorithm.";
  }

  container alto-server {
    description
      "The ALTO server instance.";
    leaf hostname {
      type inet:host;
      description
        "The name that is used to access the ALTO server.";
    }
    list cost-type {
      key "cost-type-name";
      leaf cost-type-name {
        type string;
        description
          "The name to reference cost type";
      }
      leaf cost-mode {
        type cost-mode;
        mandatory true;
        description
          "The referenced cost mode";
      }
      leaf cost-metric {
        type cost-metric;
        mandatory true;
        description
          "The referenced cost metric";
      }
      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 resource {
      key "resource-id";
      leaf resource-id {
        type resource-id;
        description
          "resource-id to be defined.";
      }
      leaf resource-type {
        type identityref {
          base resource-types;
        }
        mandatory true;
        description
          "identityref to be defined.";
      }
      leaf description {
        type string;
        description
          "The optional description for this information resource.";
      }
      leaf-list accepted-group {
        type string;
        description
          "Access list for authenticated clients.";
      }
      leaf-list dependency {
        type resource-id;
        description
          "A list of dependent information resources.";
      }
      container auth {
        description
          "The authentication options";
        choice auth-type-selection {
          description
            "Options for expressing authentication
             setting.";
          case auth-key-chain {
            leaf key-chain {
              type key-chain:key-chain-ref;
              description
                "key-chain name.";
            }
          }
          case auth-key {
          }
          case auth-tls {
          }
        }
      }
      choice resource-params {
        description
          "Resource-specific configuration.";
        case ird {
          container alto-ird-params {
            leaf delegation {
              type inet:uri;
              mandatory true;
              description
                "Upstream IRD to be delegated";
            }
            description
              "IRD-specific configuration";
          }
        }
        case networkmap {
          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 {
          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 filt-costmap-cap;
            uses algorithm;
          }
        }
        case endpointcost {
          container alto-endpointcost-params {
            description
              "Endpoint Cost Service specific configuration";
            reference
              "Section 11.5 of RFC 7285";
            uses filt-costmap-cap;
            uses algorithm;
          }
        }
        case endpointprop {
          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 {
          if-feature "propmap";
          container alto-propmap-params {
            uses algorithm;
            description
              "(Filtered) Entity Property Map specific
               configuration";
          }
        }
        case cdni {
          if-feature "cdni";
          container alto-cdni-params {
            uses algorithm;
            description
              "CDNi specific configuration";
          }
        }
        case update {
          if-feature "incr-update";
          container alto-update-params {
            uses algorithm;
            description
              "Incremental Updates specific configuration";
          }
        }
      }
      description
        "ALTO information resources to be defined";
    }
    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-types;
        }
        mandatory true;
        description
          "Source-type to be defined";
      }
      choice update-policy {
        mandatory true;
        case reactive {
          leaf reactive {
            type boolean;
            mandatory true;
            description
              "Reactive mode";
          }
        }
        case proactive {
          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 {
        case yang-datastore {
          container yang-datastore-source-params {
            leaf source-path {
              type yang:xpath1.0;
              mandatory true;
              description
                "XPath to subscribed YANG datastore node";
            }
            description
              "YANG datastore specific configuration";
          }
        }
        case prometheus {
          container prometheus-source-params {
            leaf source-uri {
              type inet:uri;
              mandatory true;
              description
                "URI to prometheus agent";
            }
            leaf query-data {
              type string;
              description
                "Query expression";
            }
            description
              "Prometheus specific configuration";
          }
        }
        description
          "Data source specific configuration";
      }
      description
        "List of subscribed data sources.";
    }
  }
}
]]></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@2022-03-07.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 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.";

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

  augment "/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.";
    }
  }

  augment "/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-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-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-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>
      <t>TBD.</t>
    </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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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="RFC7921" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/rfc7971">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Deployment Considerations</title>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling">
              <organization/>
            </author>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="M. Scharf" initials="M." surname="Scharf">
              <organization/>
            </author>
            <author fullname="H. Seidel" initials="H." surname="Seidel">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." surname="Previdi">
              <organization/>
            </author>
            <date month="October" year="2016"/>
            <abstract>
              <t>Many Internet applications are used to access resources such as pieces of information or server processes that are available in several equivalent replicas on different hosts.  This includes, but is not limited to, peer-to-peer file sharing applications.  The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource. This memo discusses deployment-related issues of ALTO.  It addresses different use cases of ALTO such as peer-to-peer file sharing and Content Delivery Networks (CDNs) and presents corresponding examples. The document also includes recommendations for network administrators and application designers planning to deploy ALTO, such as recommendations on how to generate ALTO map information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7971"/>
          <seriesInfo name="DOI" value="10.17487/RFC7971"/>
        </reference>
        <reference anchor="RFC8346" target="https://www.rfc-editor.org/info/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="I-D.ietf-alto-path-vector" target="https://www.ietf.org/archive/id/draft-ietf-alto-path-vector-24.txt">
          <front>
            <title>An ALTO Extension: Path Vector</title>
            <author fullname="Kai Gao">
              <organization>Sichuan University</organization>
            </author>
            <author fullname="Young Lee">
              <organization>Samsung</organization>
            </author>
            <author fullname="Sabine Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Yang Richard Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Jingxuan Jensen Zhang">
              <organization>Tongji University</organization>
            </author>
            <date day="7" month="March" 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 which
   endpoint(s) to connect based on not only numerical/ordinal cost
   values but also fine-grained abstract information of the paths.  This
   is useful for applications whose performance is impacted by specified
   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 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="Internet-Draft" value="draft-ietf-alto-path-vector-24"/>
        </reference>
        <reference anchor="I-D.ietf-alto-unified-props-new" target="https://www.ietf.org/archive/id/draft-ietf-alto-unified-props-new-24.txt">
          <front>
            <title>An ALTO Extension: Entity Property Maps</title>
            <author fullname="Wendy Roome">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Sabine Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Y. Richard Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Jingxuan Jensen Zhang">
              <organization>Tongji University</organization>
            </author>
            <author fullname="Kai Gao">
              <organization>Sichuan University</organization>
            </author>
            <date day="28" month="February" 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 were so far tied to IP addresses, 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 RFC7285, 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 on specific endpoints to entire
   entity property maps.  These extensions introduce additional features
   allowing 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="Internet-Draft" value="draft-ietf-alto-unified-props-new-24"/>
        </reference>
        <reference anchor="I-D.ietf-alto-performance-metrics" target="https://www.ietf.org/archive/id/draft-ietf-alto-performance-metrics-26.txt">
          <front>
            <title>ALTO Performance Cost Metrics</title>
            <author fullname="Qin Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Y. Richard Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Young Lee">
              <organization>Samsung</organization>
            </author>
            <author fullname="Dhruv Dhody">
              <organization>Huawei</organization>
            </author>
            <author fullname="Sabine Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Luis Miguel Contreras Murillo">
              <organization>Telefonica</organization>
            </author>
            <date day="2" 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-26"/>
        </reference>
        <reference anchor="I-D.ietf-alto-cdni-request-routing-alto" target="https://www.ietf.org/archive/id/draft-ietf-alto-cdni-request-routing-alto-22.txt">
          <front>
            <title>Content Delivery Network Interconnection (CDNI) Request Routing: CDNI Footprint and Capabilities Advertisement using ALTO</title>
            <author fullname="Jan Seedorf">
              <organization>HFT Stuttgart - Univ. of Applied Sciences</organization>
            </author>
            <author fullname="Y. Richard Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Kevin J. Ma">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Jon Peterson">
              <organization>NeuStar</organization>
            </author>
            <author fullname="Jingxuan Jensen Zhang">
              <organization>Tongji University</organization>
            </author>
            <date day="16" month="February" 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="Internet-Draft" value="draft-ietf-alto-cdni-request-routing-alto-22"/>
        </reference>
      </references>
    </references>
    <section anchor="example-module-for-information-resource-creation-algorithm">
      <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 {

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

  import ietf-alto {
    prefix "alto";
  }

  augment "/alto:alto-server/alto:resource/alto:resource-params"
        + "/alto:networkmap/alto:alto-networkmap-params"
        + "/alto:algorithm" {
    case l3-unicast-cluster {
      container l3-unicast-cluster-algorithm {
        leaf l3-unicast-topo {
          type leafref {
            path "/alto:alto-server/data-source/source-id";
          }
          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 anchor="ack" numbered="false">
      <name>Acknowledgements</name>
      <t>The authors thank Qiufang Ma and Qin Wu for their help with drafting the
initial version of the YANG modules. Thanks also to Adrian Farrel, Qiao Xiang,
Qin Wu, and Qiufang Ma for their reviews and valuable feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
