Skip to main content

A Yang Data Model for OAM and Management of ALTO Protocol
draft-ietf-alto-oam-yang-01

The information below is for an old version of the document.
Document Type
This is an older version of an Internet-Draft whose latest revision state is "Active".
Authors Jingxuan Zhang , Dhruv Dhody , Kai Gao , Roland Schott
Last updated 2022-07-11
Replaces draft-zhang-alto-oam-yang
RFC stream Internet Engineering Task Force (IETF)
Formats
Reviews
Additional resources Mailing list discussion
Stream WG state WG Document
Associated WG milestone
Jun 2023
ALTO OAM Document/YANG Model
Document shepherd (None)
IESG IESG state I-D Exists
Consensus boilerplate Yes
Telechat date (None)
Responsible AD (None)
Send notices to (None)
draft-ietf-alto-oam-yang-01
ALTO WG                                                         J. Zhang
Internet-Draft                                         Tongji University
Intended status: Standards Track                                D. Dhody
Expires: 13 January 2023                             Huawei Technologies
                                                                  K. Gao
                                                      Sichuan University
                                                               R. Schott
                                                        Deutsche Telekom
                                                            12 July 2022

       A Yang Data Model for OAM and Management of ALTO Protocol
                      draft-ietf-alto-oam-yang-01

Abstract

   This document defines a YANG data model for Operations,
   Administration, and Maintenance (OAM) & 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.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the ALTO Working Group
   mailing list (alto@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/browse/alto/.

   Source for this draft and an issue tracker can be found at
   https://github.com/ietf-wg-alto/draft-alto-oam-yang.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

Zhang, et al.            Expires 13 January 2023                [Page 1]
Internet-Draft                ALTO O&M YANG                    July 2022

   This Internet-Draft will expire on 13 January 2023.

Copyright Notice

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

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents (https://trustee.ietf.org/
   license-info) in effect on the date of publication of this document.
   Please review these documents carefully, as they describe your rights
   and restrictions with respect to this document.  Code Components
   extracted from this document must include Revised BSD License text as
   described in Section 4.e of the Trust Legal Provisions and are
   provided without warranty as described in the Revised BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Requirements Language . . . . . . . . . . . . . . . . . . . .   3
   3.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   3
     3.1.  Tree Diagrams . . . . . . . . . . . . . . . . . . . . . .   3
     3.2.  Prefixes in Data Node Names . . . . . . . . . . . . . . .   4
   4.  Design Scope and Requirements . . . . . . . . . . . . . . . .   4
     4.1.  Scope of Data Model for ALTO O&M  . . . . . . . . . . . .   4
     4.2.  Basic Requirements  . . . . . . . . . . . . . . . . . . .   5
     4.3.  Additional Requirements for Extensibility . . . . . . . .   6
     4.4.  Overview of ALTO O&M Data Model for Reference ALTO
           Architecture  . . . . . . . . . . . . . . . . . . . . . .   6
   5.  Design of ALTO O&M Data Model . . . . . . . . . . . . . . . .   6
     5.1.  Overview of ALTO O&M Data Model . . . . . . . . . . . . .   7
     5.2.  Meta Information of ALTO Server . . . . . . . . . . . . .   8
     5.3.  ALTO Information Resources Configuration Management . . .  10
     5.4.  Data Sources  . . . . . . . . . . . . . . . . . . . . . .  12
       5.4.1.  Yang DataStore Data Source  . . . . . . . . . . . . .  13
       5.4.2.  Prometheus Data Source  . . . . . . . . . . . . . . .  14
     5.5.  Model for ALTO Server-to-server Communication . . . . . .  14
   6.  Design of ALTO O&M Statistics Data Model  . . . . . . . . . .  14
     6.1.  Model for ALTO Logging and Fault Management . . . . . . .  14
     6.2.  Model for ALTO-specific Performance Monitoring  . . . . .  14
   7.  Extension of ALTO O&M Data Model  . . . . . . . . . . . . . .  16
   8.  ALTO OAM YANG Module  . . . . . . . . . . . . . . . . . . . .  17
     8.1.  The ietf-alto Module  . . . . . . . . . . . . . . . . . .  17
     8.2.  The ietf-alto-stats Module  . . . . . . . . . . . . . . .  34
   9.  Security Considerations . . . . . . . . . . . . . . . . . . .  39
   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  39
   11. References  . . . . . . . . . . . . . . . . . . . . . . . . .  39
     11.1.  Normative References . . . . . . . . . . . . . . . . . .  40

Zhang, et al.            Expires 13 January 2023                [Page 2]
Internet-Draft                ALTO O&M YANG                    July 2022

     11.2.  Informative References . . . . . . . . . . . . . . . . .  41
   Appendix A.  Example Module for Information Resource Creation
           Algorithm . . . . . . . . . . . . . . . . . . . . . . . .  42
   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  43
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  43

1.  Introduction

   This document defines a YANG data model for the Operations,
   Administration, and Maintenance (OAM) & Management of Application-
   Layer Traffic Optimization (ALTO) Protocol.  The basic purpose of
   this YANG data model is discussed in Section 16 of [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.

   The basic structure of this YANG data model is guided by Section 16
   of [RFC7285] and [RFC7971].  Although the scope of the YANG data
   model in this document mainly focuses on the support of the base ALTO
   protocol [RFC7285] and the existing ALTO standard extensions
   (including [RFC8189], [RFC8895] and [RFC8896]), the design will also
   be extensible for future standard extensions (e.g.,
   [I-D.ietf-alto-path-vector], [I-D.ietf-alto-unified-props-new],
   [I-D.ietf-alto-cdni-request-routing-alto], and
   [I-D.ietf-alto-performance-metrics]).

2.  Requirements Language

   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 [RFC2119] [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.

3.  Terminology

   This document uses the following acronyms:

   *  OAM - Operations, Administration, and Maintainance

   *  O&M - OAM and Management

3.1.  Tree Diagrams

   A simplified graphical representation of the data model is used in
   this document.  The meaning of the symbols in these diagrams is
   defined in [RFC8340].

Zhang, et al.            Expires 13 January 2023                [Page 3]
Internet-Draft                ALTO O&M YANG                    July 2022

3.2.  Prefixes in Data Node Names

   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 Table 1.

                +===========+=================+===========+
                | Prefix    | YANG module     | Reference |
                +===========+=================+===========+
                | yang      | ietf-yang-types | [RFC6991] |
                +-----------+-----------------+-----------+
                | inet      | ietf-inet-types | [RFC6991] |
                +-----------+-----------------+-----------+
                | key-chain | ietf-key-chain  | [RFC8177] |
                +-----------+-----------------+-----------+

                    Table 1: Prefixes and corresponding
                                YANG modules

4.  Design Scope and Requirements

4.1.  Scope of Data Model for ALTO O&M

   What is in the scope of this document?

   *  Data model for deploy an ALTO server/client.

   *  Data model for operate and manage a running ALTO server/client.

   *  Data model for functionality/capability configuration for ALTO
      services.

   *  Data model for monitoring ALTO-related performance metrics.

   What is not in the scope of this document?

   This document does not define any data model related to specific
   implementation, including:

   *  Data structures for how to store/deliver ALTO information
      resources (e.g., database schema to store a network map).

   *  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 [RFC7921])

Zhang, et al.            Expires 13 January 2023                [Page 4]
Internet-Draft                ALTO O&M YANG                    July 2022

4.2.  Basic Requirements

   Based on discussions and recommendations in [RFC7285] and [RFC7971],
   the data model provided by this document satisfies basic requirements
   listed in Table 2.

     +======================================+========================+
     | Requirement                          | Reference              |
     +======================================+========================+
     | R1: The data model should support    | Section 16.1 of        |
     | configuration for ALTO server setup. | [RFC7285]              |
     +--------------------------------------+------------------------+
     | R2: The data model should provide    | Section 16.2.1 of      |
     | logging management.                  | [RFC7285]              |
     +--------------------------------------+------------------------+
     | R3: The data model should provide    | Section 16.2.2 of      |
     | ALTO-related management information. | [RFC7285]              |
     +--------------------------------------+------------------------+
     | R4: The data model should provide    | Section 16.2.3 of      |
     | metrics for server failures.         | [RFC7285], Section 3.3 |
     |                                      | of [RFC7971]           |
     +--------------------------------------+------------------------+
     | R5-1: The data model should support  | Section 16.2.4 of      |
     | configuration for different data     | [RFC7285], Section 3.2 |
     | sources.                             | of [RFC7971]           |
     +--------------------------------------+------------------------+
     | R5-2: The data model should support  | Section 16.2.4 of      |
     | configuration for information        | [RFC7285]              |
     | resource generation algorithms.      |                        |
     +--------------------------------------+------------------------+
     | R5-3: The data model should support  | Section 16.2.4 of      |
     | configuration for access control at  | [RFC7285]              |
     | information resource level.          |                        |
     +--------------------------------------+------------------------+
     | R6: The data model should provide    | Section 16.2.5 of      |
     | performance monitoring for ALTO-     | [RFC7285], Section 3.4 |
     | specific metrics.                    | of [RFC7971]           |
     +--------------------------------------+------------------------+
     | R7: The data model should support    | Section 16.2.6 of      |
     | configuration for security policy    | [RFC7285]              |
     | management.                          |                        |
     +--------------------------------------+------------------------+

          Table 2: Basic Requirements of Data Model for ALTO O&M.

Zhang, et al.            Expires 13 January 2023                [Page 5]
Internet-Draft                ALTO O&M YANG                    July 2022

4.3.  Additional Requirements for Extensibility

   R8: As the ALTO protocol is extensible, the data model for ALTO O&M
   should allow for augmentation to support potential future extensions.

4.4.  Overview of ALTO O&M Data Model for Reference ALTO Architecture

   Figure 1 shows a reference architecture for ALTO server
   implementation and YANG modules that server components implement.
   The server manager, information resource manager and data source
   listeners need to implement ietf-alto.yang (see Section 5).  The
   performance monitor and logging and fault manager need to implement
   ietf-alto-stats.yang (see Section 6).

   The data broker and algorithm plugins are not in the scope of the
   data model 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 Section 7).

     +----------------------+      +-----------------+
     | 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 |              ||             ||
     +----------------+              ++=============++

      Figure 1: A Reference ALTO Server Architecture and YANG Modules

5.  Design of ALTO O&M Data Model

Zhang, et al.            Expires 13 January 2023                [Page 6]
Internet-Draft                ALTO O&M YANG                    July 2022

5.1.  Overview of ALTO O&M Data Model

   The ietf-alto module defined in this document provide all the basic
   ALTO O&M data models fitting the requirements listed in Section 4.

   The container "alto-server" in the ietf-alto module contains all the
   configured and operational parameters of the adminstrated ALTO server
   instance.

   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.

module: ietf-alto
  +--rw alto-server
     +--rw listen
     |  +---u alto-server-listen-stack-grouping
     +--rw cost-type* [cost-type-name]
     |  +--rw cost-type-name    string
     |  +--rw cost-mode         identityref
     |  +--rw cost-metric       identityref
     +--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
     |     |     +---u algorithm
     |     +--:(costmap)
     |     |  +--rw alto-costmap-params
     |     |     +--rw filtered?           boolean

Zhang, et al.            Expires 13 January 2023                [Page 7]
Internet-Draft                ALTO O&M YANG                    July 2022

     |     |     +---u filt-costmap-cap
     |     |     +---u algorithm
     |     +--:(endpointcost)
     |     |  +--rw alto-endpointcost-params
     |     |     +---u filt-costmap-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
     +--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
           |     +--rw (restconf-endpoint)?
           |        +--:(local)
           |        +--:(remote)
           |           +--rw restconf-endpoint-params
           |              +---u rcc:restconf-client-listen-stack-grouping
           +--:(prometheus)
              +--rw prometheus-source-params
                 +--rw source-uri    inet:uri
                 +--rw query-data?   string

5.2.  Meta Information of ALTO Server

   The ALTO server instance contains the following basic configurations
   for the server setup.

Zhang, et al.            Expires 13 January 2023                [Page 8]
Internet-Draft                ALTO O&M YANG                    July 2022

   The "listen" contains all the configurations for the whole server
   listen stack across HTTP layer, TLS layer and TCP layer.

     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
          +--:(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

   TODO: A "base-uri" for ALTO clients to access may still be needed.

   The "cost-type" list is the registry for the cost types that can be
   used in the ALTO server.

   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).

   TODO: As suggested by [RFC7286] and [RFC8686], the configuration
   related to ALTO server discovery should also be included here.

   module: ietf-alto
     +--rw alto-server
        +--rw listen
        |  +---u alto-server-listen-stack-grouping
        +--rw cost-type* [cost-type-name]
        |  +--rw cost-type-name    string
        |  +--rw cost-mode         identityref
        |  +--rw cost-metric       identityref
        +--rw meta* [meta-key]
        |  +--rw meta-key      string
        |  +--rw meta-value    string
        ...

Zhang, et al.            Expires 13 January 2023                [Page 9]
Internet-Draft                ALTO O&M YANG                    July 2022

5.3.  ALTO Information Resources Configuration Management

   The ALTO server instance contains a list of resource entries.  Each
   resource entry contains the configurations of an ALTO information
   resource (See Section 8.1 of [RFC7285]).  The operator of the ALTO
   server can use this model to create, update, and remove the ALTO
   information resource.

   Each resoruce entry provide configuration defining how to create or
   update an ALTO information resource.  Adding a new resource entry
   will submit an ALTO information resource creation intent to the
   intent system to create a new ALTO information resource.  Updating an
   existing resource entry will update the corresponding ALTO
   information resource creation intent.  Removing an existing resource
   entry will remove the corresponding ALTO information resource
   creation intent and also the created ALTO information resource.

   The parameter of the intent interface defined by a resource entry
   MUST include a unique resource-id and a resource-type.

   It can also include an accepted-group node containing a list of user-
   groups that can access this ALTO information resource.

   As section 15.5.2 of [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.

   For some resource-type, the parameter of the intent interface MUST
   also include the a dependency node containing the resource-id of the
   dependent ALTO information resources (See Section 9.1.5 of
   [RFC7285]).

   For each type of ALTO information resource, the creation intent MAY
   also need type-specific parameters.  These type-specific parameters
   include two categories:

   1.  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 [RFC7285]).

   2.  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 algorithm
       node to declare algorithm-specific input parameters.

Zhang, et al.            Expires 13 January 2023               [Page 10]
Internet-Draft                ALTO O&M YANG                    July 2022

   Except for the ird resource, all the other types of resource entries
   have augmented algorithm node.  The augmented algorithm node can
   reference data sources subscribed by the data-source entries (See
   Section 5.4).

   The developer cannot customize the creation algorithm of the ird
   resource.  The default ird resource will be created automatically
   based on all the added resource entries.  The delegated ird resource
   will be created as a static ALTO information resource (See
   Section 9.2.4 of [RFC7285]).

   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
        |     |     +---u algorithm
        |     +--:(costmap)
        |     |  +--rw alto-costmap-params
        |     |     +--rw filtered?           boolean
        |     |     +---u filt-costmap-cap
        |     |     +---u algorithm
        |     +--:(endpointcost)
        |     |  +--rw alto-endpointcost-params
        |     |     +---u filt-costmap-cap
        |     |     +---u algorithm
        |     +--:(endpointprop)
        |     |  +--rw alto-endpointprop-params
        |     |     +--rw prop-types*   string
        |     |     +---u algorithm

Zhang, et al.            Expires 13 January 2023               [Page 11]
Internet-Draft                ALTO O&M YANG                    July 2022

        |     +--:(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 filt-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

5.4.  Data Sources

   The ALTO server instance contains a list of data-source entries to
   subscribe the data sources from which ALTO information resources are
   derived (See Section 16.2.4 of [RFC7285]).

   A data-source entry MUST include:

   *  a unique source-id for resource creation algorithms to reference,

   *  the source-type attribute to declare the type of the data source,

   *  the update-policy to specify how to get the data update from the
      data source,

   *  the source-params to specify where and how to query the data.

   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.

   To use the reactive update, the reactive attribute MUST be set true.
   To use the proactive update, the poll-interval attribute MUST be
   greater than zero.  The value of poll-interval specifies the interval
   of fetching the data in milliseconds.  If reactive is false or poll-
   interval is zero, the ALTO server will not update the data source.

Zhang, et al.            Expires 13 January 2023               [Page 12]
Internet-Draft                ALTO O&M YANG                    July 2022

   The data-source/source-params 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.

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
           |     +--rw (restconf-endpoint)?
           |        +--:(local)
           |        +--:(remote)
           |           +--rw restconf-endpoint-params
           |              +---u rcc:restconf-client-listen-stack-grouping
           +--:(prometheus)
              +--rw prometheus-source-params
                 +--rw source-uri    inet:uri
                 +--rw query-data?   string

   Note: Current source configuration still has limitations.  It should
   be revised to support more general southbound and data retrieval
   mechanisms.

5.4.1.  Yang DataStore Data Source

   The yang-datastore-source-params is used to import the YANG data from
   a YANG model-driven data store.

   It supports two types of endpoints: local and remote.

   *  For a local endpoint, the YANG data is located the data from the
      same YANG model-driven data store supplying the current ALTO O&M
      data model.  Therefore, the ALTO data source listener retrieves
      the data using the internal API provided by the data store.

Zhang, et al.            Expires 13 January 2023               [Page 13]
Internet-Draft                ALTO O&M YANG                    July 2022

   *  For a remote endpoint, the ALTO data source listener establishes
      an HTTP connection to the remote RESTCONF server, and retrieve the
      data using the RESTCONF API.

   The source-path is used to specify the XPath of the data source node.

5.4.2.  Prometheus Data Source

   The prometheus-source-params is used to import common performance
   metrics data which is provided by a Prometheus server.  The source-
   uir is used to establish the connection with the Prometheus server.
   The query-data is used to speficify the potential query expression in
   PromQL.

5.5.  Model for ALTO Server-to-server Communication

   In practice, multiple ALTO servers can be deployed for scalability.
   That may require communication among different ALTO servers.

   The YANG module defined in this document contains the configuration
   for the communication between two ALTO servers.

   TODO: this is still under the open discussion status.

6.  Design of ALTO O&M Statistics Data Model

6.1.  Model for ALTO Logging and Fault Management

   As section 16.2.1 and section 16.2.3 of [RFC7285] suggest, the YANG
   data module defined in this document contains statistics for logging
   and failure detection.

   NOTE: The detailed YANG module will appear in the future version.

6.2.  Model for ALTO-specific Performance Monitoring

   As section 16.2.5 of [RFC7285] suggests, the YANG data module defined
   in this document also contains statistics for ALTO-specific
   performance metrics.

   More specifically, this data model contains the following measurement
   information suggested by [RFC7971]:

   *  Measurement of impact

      -  Total amount and distribution of traffic

      -  Application performance

Zhang, et al.            Expires 13 January 2023               [Page 14]
Internet-Draft                ALTO O&M YANG                    July 2022

   *  System and service performance

      -  Requests and responses for each information resource

      -  CPU and memory utilization

      -  ALTO map updates

      -  Number of PIDs

      -  ALTO map sizes

   Besides the measurement information suggested by [RFC7971], this data
   model also contains useful measurement information for other ALTO
   extensions:

   *  Number of generic ALTO entities (for
      [I-D.ietf-alto-unified-props-new] and
      [I-D.ietf-alto-cdni-request-routing-alto])

   *  Statistics for update sessions and events (for [RFC8189])

   *  Statistics for calendar (for [RFC8896])

   The module, "ietf-alto-stats", augments the ietf-alto module to
   include statistics at the ALTO server and information resource level.

Zhang, et al.            Expires 13 January 2023               [Page 15]
Internet-Draft                ALTO O&M YANG                    July 2022

   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

7.  Extension of ALTO O&M Data Model

   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 resource-params choice with new configuration parameters
   for existing ALTO information resource extensions, or augment the
   resource-params with new cases for new ALTO information resources.

   Developers and operators can also extend this ALTO O&M data model to
   align with their own implementations.  Specifically, the following
   nodes of the data model can be augmented:

   *  The algorithm choice of the resource-params of each resource.

Zhang, et al.            Expires 13 January 2023               [Page 16]
Internet-Draft                ALTO O&M YANG                    July 2022

   *  The data-source choice.

   The following example shows how the developer augments the algorithm
   choice of alto-networkmap-params with a creation algorithm for the
   network map resource.

   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

   This example defines a creation algorithm called l3-unicast-cluster-
   algorithm for the network map resource.  It takes two algorithm-
   specific parameters:

   l3-unicast-topo  This parameter refers to the source id of a data
      source node subscribed in the data-source list (See Section 5.4).
      The corresponding data source is assumed to be an internel data
      source (See Section 5.4.1) for an IETF layer 3 unicast topology
      defined in [RFC8346].  The algorithm uses the topology data from
      this data source to compute the ALTO network map resource.

   depth  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.

   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 update-policy (See Section 5.4).

8.  ALTO OAM YANG Module

8.1.  The ietf-alto Module

   <CODE BEGINS> file "ietf-alto@2022-07-11.yang"
   module ietf-alto {
     yang-version 1.1;
     namespace
       "urn:ietf:params:xml:ns:yang:ietf-alto";
     prefix "alto";

Zhang, et al.            Expires 13 January 2023               [Page 17]
Internet-Draft                ALTO O&M YANG                    July 2022

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

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

     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/>

Zhang, et al.            Expires 13 January 2023               [Page 18]
Internet-Draft                ALTO O&M YANG                    July 2022

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

     // Base identities

     identity resource-type {

Zhang, et al.            Expires 13 January 2023               [Page 19]
Internet-Draft                ALTO O&M YANG                    July 2022

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

     // Identities for ALTO information resources

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

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

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

     // Identities for predefined data sources

Zhang, et al.            Expires 13 January 2023               [Page 20]
Internet-Draft                ALTO O&M YANG                    July 2022

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

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

     // 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";

Zhang, et al.            Expires 13 January 2023               [Page 21]
Internet-Draft                ALTO O&M YANG                    July 2022

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

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

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

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

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

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

Zhang, et al.            Expires 13 January 2023               [Page 22]
Internet-Draft                ALTO O&M YANG                    July 2022

     }

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

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

     // Features

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

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

Zhang, et al.            Expires 13 January 2023               [Page 23]
Internet-Draft                ALTO O&M YANG                    July 2022

     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 XXXX: An ALTO Extension: Path Vector";
     }

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

     // Groupings

     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

Zhang, et al.            Expires 13 January 2023               [Page 24]
Internet-Draft                ALTO O&M YANG                    July 2022

            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

Zhang, et al.            Expires 13 January 2023               [Page 25]
Internet-Draft                ALTO O&M YANG                    July 2022

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

     grouping alto-server-grouping {
       description
         "A reuseable grouping for configuring an ALTO server without
          any consideration for how underlying transport sessions are
          established.";
       // TODO: ALTO specific server-level configuration
     }

     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 {

Zhang, et al.            Expires 13 January 2023               [Page 26]
Internet-Draft                ALTO O&M YANG                    July 2022

                 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 {

Zhang, et al.            Expires 13 January 2023               [Page 27]
Internet-Draft                ALTO O&M YANG                    July 2022

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

     // Top-level container

     container alto-server {
       description
         "The ALTO server instance.";
       container listen {
         description
           "Configure the ALTO server to listen for ALTO clients.";
         uses alto-server-listen-stack-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

Zhang, et al.            Expires 13 January 2023               [Page 28]
Internet-Draft                ALTO O&M YANG                    July 2022

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

Zhang, et al.            Expires 13 January 2023               [Page 29]
Internet-Draft                ALTO O&M YANG                    July 2022

         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;

Zhang, et al.            Expires 13 January 2023               [Page 30]
Internet-Draft                ALTO O&M YANG                    July 2022

                 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

Zhang, et al.            Expires 13 January 2023               [Page 31]
Internet-Draft                ALTO O&M YANG                    July 2022

                   "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-type;
           }
           mandatory true;
           description

Zhang, et al.            Expires 13 January 2023               [Page 32]
Internet-Draft                ALTO O&M YANG                    July 2022

             "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";
               choice restconf-endpoint {
                 case local {
                   // Use local API to access YANG datastore
                 }
                 case remote {
                   container restconf-endpoint-params {
                     uses rcc:restconf-client-listen-stack-grouping;
                   }
                 }
               }
             }
           }
           case prometheus {
             container prometheus-source-params {

Zhang, et al.            Expires 13 January 2023               [Page 33]
Internet-Draft                ALTO O&M YANG                    July 2022

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

8.2.  The ietf-alto-stats Module

   <CODE BEGINS> file "ietf-alto-stats@2022-07-11.yang"
   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

Zhang, et al.            Expires 13 January 2023               [Page 34]
Internet-Draft                ALTO O&M YANG                    July 2022

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

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

Zhang, et al.            Expires 13 January 2023               [Page 35]
Internet-Draft                ALTO O&M YANG                    July 2022

       }
       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-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 {

Zhang, et al.            Expires 13 January 2023               [Page 36]
Internet-Draft                ALTO O&M YANG                    July 2022

         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-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

Zhang, et al.            Expires 13 January 2023               [Page 37]
Internet-Draft                ALTO O&M YANG                    July 2022

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

Zhang, et al.            Expires 13 January 2023               [Page 38]
Internet-Draft                ALTO O&M YANG                    July 2022

       }
       leaf num-event-avg {
         type yang:counter32;
         config false;
         description
           "The average number of update events sent to the connected
            clients.";
       }
     }
   }
   <CODE ENDS>

9.  Security Considerations

   TBD.

10.  IANA Considerations

   This document registers two URIs in the "IETF XML Registry"
   [RFC3688].  Following the format in RFC 3688, the following
   registrations are requested.

     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.

   This document registers two YANG modules in the "YANG Module Names"
   registry [RFC6020].

     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]

   [RFC Editor: Please replace RFCthis with the published RFC number for
   this document.]

11.  References

Zhang, et al.            Expires 13 January 2023               [Page 39]
Internet-Draft                ALTO O&M YANG                    July 2022

11.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/rfc/rfc2119>.

   [RFC3688]  Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
              DOI 10.17487/RFC3688, January 2004,
              <https://www.rfc-editor.org/rfc/rfc3688>.

   [RFC6020]  Bjorklund, M., Ed., "YANG - A Data Modeling Language for
              the Network Configuration Protocol (NETCONF)", RFC 6020,
              DOI 10.17487/RFC6020, October 2010,
              <https://www.rfc-editor.org/rfc/rfc6020>.

   [RFC6991]  Schoenwaelder, J., Ed., "Common YANG Data Types",
              RFC 6991, DOI 10.17487/RFC6991, July 2013,
              <https://www.rfc-editor.org/rfc/rfc6991>.

   [RFC7285]  Alimi, R., Ed., Penno, R., Ed., Yang, Y., Ed., Kiesel, S.,
              Previdi, S., Roome, W., Shalunov, S., and R. Woundy,
              "Application-Layer Traffic Optimization (ALTO) Protocol",
              RFC 7285, DOI 10.17487/RFC7285, September 2014,
              <https://www.rfc-editor.org/rfc/rfc7285>.

   [RFC7286]  Kiesel, S., Stiemerling, M., Schwan, N., Scharf, M., and
              H. Song, "Application-Layer Traffic Optimization (ALTO)
              Server Discovery", RFC 7286, DOI 10.17487/RFC7286,
              November 2014, <https://www.rfc-editor.org/rfc/rfc7286>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.

   [RFC8177]  Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J.
              Zhang, "YANG Data Model for Key Chains", RFC 8177,
              DOI 10.17487/RFC8177, June 2017,
              <https://www.rfc-editor.org/rfc/rfc8177>.

   [RFC8189]  Randriamasy, S., Roome, W., and N. Schwan, "Multi-Cost
              Application-Layer Traffic Optimization (ALTO)", RFC 8189,
              DOI 10.17487/RFC8189, October 2017,
              <https://www.rfc-editor.org/rfc/rfc8189>.

   [RFC8340]  Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
              BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
              <https://www.rfc-editor.org/rfc/rfc8340>.

Zhang, et al.            Expires 13 January 2023               [Page 40]
Internet-Draft                ALTO O&M YANG                    July 2022

   [RFC8686]  Kiesel, S. and M. Stiemerling, "Application-Layer Traffic
              Optimization (ALTO) Cross-Domain Server Discovery",
              RFC 8686, DOI 10.17487/RFC8686, February 2020,
              <https://www.rfc-editor.org/rfc/rfc8686>.

   [RFC8895]  Roome, W. and Y. Yang, "Application-Layer Traffic
              Optimization (ALTO) Incremental Updates Using Server-Sent
              Events (SSE)", RFC 8895, DOI 10.17487/RFC8895, November
              2020, <https://www.rfc-editor.org/rfc/rfc8895>.

   [RFC8896]  Randriamasy, S., Yang, R., Wu, Q., Deng, L., and N.
              Schwan, "Application-Layer Traffic Optimization (ALTO)
              Cost Calendar", RFC 8896, DOI 10.17487/RFC8896, November
              2020, <https://www.rfc-editor.org/rfc/rfc8896>.

11.2.  Informative References

   [I-D.ietf-alto-cdni-request-routing-alto]
              Seedorf, J., Yang, Y. R., Ma, K. J., Peterson, J., and J.
              J. Zhang, "Content Delivery Network Interconnection (CDNI)
              Request Routing: CDNI Footprint and Capabilities
              Advertisement using ALTO", Work in Progress, Internet-
              Draft, draft-ietf-alto-cdni-request-routing-alto-22, 16
              February 2022, <https://datatracker.ietf.org/doc/html/
              draft-ietf-alto-cdni-request-routing-alto-22>.

   [I-D.ietf-alto-path-vector]
              Gao, K., Lee, Y., Randriamasy, S., Yang, Y. R., and J. J.
              Zhang, "An ALTO Extension: Path Vector", Work in Progress,
              Internet-Draft, draft-ietf-alto-path-vector-25, 20 March
              2022, <https://datatracker.ietf.org/doc/html/draft-ietf-
              alto-path-vector-25>.

   [I-D.ietf-alto-performance-metrics]
              Wu, Q., Yang, Y. R., Lee, Y., Dhody, D., Randriamasy, S.,
              and L. M. C. Murillo, "ALTO Performance Cost Metrics",
              Work in Progress, Internet-Draft, draft-ietf-alto-
              performance-metrics-28, 21 March 2022,
              <https://datatracker.ietf.org/doc/html/draft-ietf-alto-
              performance-metrics-28>.

   [I-D.ietf-alto-unified-props-new]
              Roome, W., Randriamasy, S., Yang, Y. R., Zhang, J. J., and
              K. Gao, "An ALTO Extension: Entity Property Maps", Work in
              Progress, Internet-Draft, draft-ietf-alto-unified-props-
              new-24, 28 February 2022,
              <https://datatracker.ietf.org/doc/html/draft-ietf-alto-
              unified-props-new-24>.

Zhang, et al.            Expires 13 January 2023               [Page 41]
Internet-Draft                ALTO O&M YANG                    July 2022

   [RFC7921]  Atlas, A., Halpern, J., Hares, S., Ward, D., and T.
              Nadeau, "An Architecture for the Interface to the Routing
              System", RFC 7921, DOI 10.17487/RFC7921, June 2016,
              <https://www.rfc-editor.org/rfc/rfc7921>.

   [RFC7971]  Stiemerling, M., Kiesel, S., Scharf, M., Seidel, H., and
              S. Previdi, "Application-Layer Traffic Optimization (ALTO)
              Deployment Considerations", RFC 7971,
              DOI 10.17487/RFC7971, October 2016,
              <https://www.rfc-editor.org/rfc/rfc7971>.

   [RFC8346]  Clemm, A., Medved, J., Varga, R., Liu, X.,
              Ananthakrishnan, H., and N. Bahadur, "A YANG Data Model
              for Layer 3 Topologies", RFC 8346, DOI 10.17487/RFC8346,
              March 2018, <https://www.rfc-editor.org/rfc/rfc8346>.

Appendix A.  Example Module for Information Resource Creation Algorithm

   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.

Zhang, et al.            Expires 13 January 2023               [Page 42]
Internet-Draft                ALTO O&M YANG                    July 2022

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

Acknowledgements

   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.

Authors' Addresses

   Jingxuan Jensen Zhang
   Tongji University
   4800 Cao'An Hwy
   Shanghai
   201804
   China
   Email: jingxuan.n.zhang@gmail.com

Zhang, et al.            Expires 13 January 2023               [Page 43]
Internet-Draft                ALTO O&M YANG                    July 2022

   Dhruv Dhody
   Huawei Technologies
   Divyashree Techno Park, Whitefield
   Bangalore 560066
   Karnataka
   India
   Email: dhruv.ietf@gmail.com

   Kai Gao
   Sichuan University
   No.24 South Section 1, Yihuan Road
   Chengdu
   610000
   China
   Email: kaigao@scu.edu.cn

   Roland Schott
   Deutsche Telekom
   Heinrich-Hertz-Strasse 3-7
   64295 Darmstadt
   Germany
   Email: Roland.Schott@telekom.de

Zhang, et al.            Expires 13 January 2023               [Page 44]