Skip to main content

Data Model for Asset Lifecycle Management and Operations
draft-palmero-ivy-dmalmo-01

Document Type Active Internet-Draft (individual)
Authors Marisol Palmero , Frank Brockners , Sudhendu Kumar , Camilo Cardona , Diego Lopez
Last updated 2024-04-24
Replaces draft-palmero-opsawg-dmlmo
RFC stream (None)
Intended RFC status (None)
Formats
Stream Stream state (No stream defined)
Consensus boilerplate Unknown
RFC Editor Note (None)
IESG IESG state I-D Exists
Telechat date (None)
Responsible AD (None)
Send notices to (None)
draft-palmero-ivy-dmalmo-01
IVY Working Group                                             M. Palmero
Internet-Draft                                              F. Brockners
Intended status: Standards Track                           Cisco Systems
Expires: 26 October 2024                                        S. Kumar
                                                     NC State University
                                                              C. Cardona
                                                                     NTT
                                                                D. Lopez
                                                          Telefonica I+D
                                                           24 April 2024

        Data Model for Asset Lifecycle Management and Operations
                      draft-palmero-ivy-dmalmo-01

Abstract

   This document includes a data model for assets lifecycle management
   and operations.  The primary objective of the data model is to
   measure and improve the network operators' experience along the
   lifecycle journey, from technical requirements and technology
   selection through renewal, including the end of life of an asset.

   This model is based on the information model introduced in "Asset
   Lifecycle Management and Operations: A Problem Statement" (ALMO)
   [I-D.draft-palmero-opsawg-ps-almo-00] IETF draft.

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

   This Internet-Draft will expire on 26 October 2024.

Copyright Notice

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

Palmero, et al.          Expires 26 October 2024                [Page 1]
Internet-Draft                   DMALMO                       April 2024

   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
     1.1.  Requirements language . . . . . . . . . . . . . . . . . .   3
   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   3
   3.  Motivation  . . . . . . . . . . . . . . . . . . . . . . . . .   4
   4.  Data Models . . . . . . . . . . . . . . . . . . . . . . . . .   4
     4.1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . .   5
     4.2.  Tree Diagrams of ALMO Modules . . . . . . . . . . . . . .   7
       4.2.1.  Aggregated Assets Module  . . . . . . . . . . . . . .   7
       4.2.2.  Entitlements Module . . . . . . . . . . . . . . . . .   7
       4.2.3.  Features Module . . . . . . . . . . . . . . . . . . .   9
       4.2.4.  Usage Module  . . . . . . . . . . . . . . . . . . . .   9
       4.2.5.  Event Report Module . . . . . . . . . . . . . . . . .  10
       4.2.6.  Organization Module . . . . . . . . . . . . . . . . .  11
       4.2.7.  User Module . . . . . . . . . . . . . . . . . . . . .  11
     4.3.  YANG data models of ALMO Modules  . . . . . . . . . . . .  12
       4.3.1.  LMO Common Module . . . . . . . . . . . . . . . . . .  12
       4.3.2.  LMO Module  . . . . . . . . . . . . . . . . . . . . .  22
       4.3.3.  Entitlements Module . . . . . . . . . . . . . . . . .  25
       4.3.4.  Features Module . . . . . . . . . . . . . . . . . . .  33
       4.3.5.  Usage Module  . . . . . . . . . . . . . . . . . . . .  38
       4.3.6.  Event Report Module . . . . . . . . . . . . . . . . .  43
       4.3.7.  User Module . . . . . . . . . . . . . . . . . . . . .  47
   5.  Deployment Considerations . . . . . . . . . . . . . . . . . .  52
   6.  Security Considerations . . . . . . . . . . . . . . . . . . .  52
   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  53
     7.1.  The IETF XML Registry . . . . . . . . . . . . . . . . . .  53
     7.2.  The YANG Module Names Registry  . . . . . . . . . . . . .  54
   8.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  55
     8.1.  Normative References  . . . . . . . . . . . . . . . . . .  55
     8.2.  Informative References  . . . . . . . . . . . . . . . . .  55
   Change log  . . . . . . . . . . . . . . . . . . . . . . . . . . .  56
   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .  56
   Appendix A  . . . . . . . . . . . . . . . . . . . . . . . . . . .  57
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  66

Palmero, et al.          Expires 26 October 2024                [Page 2]
Internet-Draft                   DMALMO                       April 2024

1.  Introduction

   The dynamicity in "where", "how" and "who" uses an asset introduces
   challenges for both lifecycle and adoption management of the assets.
   These challenges and the motivation to fix the problems are shown
   with some examples in the companion draft "Asset Lifecycle Management
   and Operations: A Problem Statement" (ALMO)
   [I-D.draft-palmero-opsawg-ps-almo-00] IETF draft.  Taking inspiration
   from the use cases and the Information Model given in Section 5 of
   the companion draft, we attempt to standardize some of the
   associations (with the data attributes) between the entities in the
   Information model.  The YANG data models specified in this draft are
   subject to modification and refinement subsequent to the IVY Working
   Group's ratification of a stable iteration of the core inventory data
   models.  Please note, the data model presented in the draft can be
   extended as per the expandability provided by the Information Model
   using the entity Future Expansion.

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

2.  Terminology

   The document makes use of the following terms:

   *  Asset: refers to hardware, software, applications, or services.
      An asset can be physical or virtual.  The granularity of what
      constitutes an asset is deployment and implementation specific.

   *  Features: are options or functional capabilities offered by an
      asset.

   *  Entitlement: commonly implemented as license; it represents the
      rights obtained by the user, that allow them to access and utilize
      certain capabilities of the asset, including a feature or set of
      features.

   *  Lifecycle Management and Operations (LMO) connects to:

      1.  Assets as a generalized entity subject to Lifecycle Management
          (LCM).

      2.  Entitlements as the essential policy root for LCM.

Palmero, et al.          Expires 26 October 2024                [Page 3]
Internet-Draft                   DMALMO                       April 2024

      3.  Metrics as the evidence for LCM transitions.

      4.  Reports (no incidents) as the way of collecting input from
          users.

   *  Usage: refers to how an asset is being used (e.g., which features
      are used).

   Abbreviations:

   *  ALMO: Asset Lifecycle Management and Operations

   *  EoL: End of Life

   *  EoS: End of Support

   *  LCM: Lifecycle Management

   *  PID: Product Identifier

3.  Motivation

   The motivation behind ALMO is to address the existing gap that
   network operators and business architects face in measuring and
   producing data related to various issues.  This includes challenges
   such as unactivated entitlements, underutilized features, incident
   resolution, virtualized asset lifecycle events, DevOps deployment,
   and supply chain management.

   By implementing ALMO, developer organizations can optimize their
   features by identifying and deprecating infrequently used features.
   They can also focus on widely deployed assets and improve usability
   and integration.  ALMO provides a structured approach for users to
   provide feedback about an asset, enabling developers to assess the
   impact of potential deficiencies based on user feedback.

   Overall, ALMO aims to bridge the gap in data measurement and
   production, helping operators and business architects improve asset
   management, optimize features, and gather valuable user feedback for
   continuous improvement.

   DMALMO offers a common data model to implement ALMO data.

4.  Data Models

Palmero, et al.          Expires 26 October 2024                [Page 4]
Internet-Draft                   DMALMO                       April 2024

4.1.  Overview

   Based on the ALMO IETF draft, assets can be characterized by their
   features, entitlements, and other attributes.  Features represent the
   specific capabilities or functionalities of an asset.  Entitlements,
   on the other hand, are related to asset usage and determine the level
   of access granted to users for utilizing the features.  This implies
   that users have the necessary rights or licenses to use the asset and
   its associated features.

   Entitlements can be complex to model as they vary in coverage and
   limitations.  Some entitlements cover all features, while others
   target specific ones.  For example, advanced or additional licenses
   may be required to access certain features like "MPLS-EVPN".

   It is common in the industry to have tables that outline the
   entitlements and the features they cover, enabling users to
   understand their access based on entitlements.  Some entitlements
   also impose restrictions on feature usage, such as limiting the
   number of users or CPUs.

   The DMALMO model does not aim to provide a catalog of features and
   entitlements, but rather provides an inventory with focus on
   connecting features and entitlements to assets and tracking their
   usage.  While it is possible to have multiple usage limits, the model
   may not support interrelating them.  For instance, the statement
   "Entitlement covers up to N CPUs if you have more than X users, if
   not then M CPUs" may not be supported, but "Entitlement covers up to
   N CPUs and up to X users" is supported.

   The usage aspect is particularly relevant in business use cases as it
   helps understand how to effectively utilize an asset.  It provides
   insights into asset usage and highlights the importance of tracking
   it.  While there may be other models addressing different aspects of
   an asset's lifecycle, the usage model serves a unique purpose by
   specifically focusing on practical utilization.  Therefore, it is not
   redundant with other models and offers valuable insights into asset
   usage.

   The different modules included in DMALMO are:

   *  Aggregated Assets Module

Palmero, et al.          Expires 26 October 2024                [Page 5]
Internet-Draft                   DMALMO                       April 2024

   In the context of ALMO, the Asset module represents specific entity,
   that can include various elements such as hardware, software,
   virtualized components, or even services.  The assets module can be
   linked to specific network inventory and can also augment certain
   attributes that might be required for the implementation of a
   specific use case.

   *  Entitlements Module

   Entitlement module defines the level of access or permission granted
   to a user or entity to utilize specific features, functionalities, or
   resources associated with an asset.  It represents the rights or
   licenses obtained by the user that allow them to access and utilize
   certain capabilities of the asset.

   *  Features Module

   Feature module includes various attributes and relationships that
   describe the characteristics, properties, and associations of the
   feature within a specific context.  A well-defined feature enhances
   the asset's value, differentiates it from others, and meets the
   requirements and expectations of users.

   *  Usage Module

   The Usage model of a feature includes various elements that capture
   information about how the feature is utilized within the asset.

   As part of the ALMO future extension modules, DMALMO considers:

   *  Event Report Module

   *  Organization Module, and

   *  User Module

   Where the Event Report module includes various components that
   capture information about specific events or incidents that occur
   within ALMO related entities.  And the Organization and User Modules
   encompass various components to capture information about users and
   organizations and their relationship to assets, features and/or
   entitlements.

Palmero, et al.          Expires 26 October 2024                [Page 6]
Internet-Draft                   DMALMO                       April 2024

4.2.  Tree Diagrams of ALMO Modules

4.2.1.  Aggregated Assets Module

   This specification uses [RFC9179], [RFC9472] module: ietf-almo-assets

     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
       +--rw role?                     identityref
       +--rw aggregation?              boolean
       +--rw number-of-instances?      uint32
       +--rw platform-dependency-os?   identityref
       +--rw install-location
       |  +--rw geo-location
       |     +--rw reference-frame
       |     |  +--rw alternate-system?    string {alternate-systems}?
       |     |  +--rw astronomical-body?   string
       |     |  +--rw geodetic-system
       |     |     +--rw geodetic-datum?    string
       |     |     +--rw coord-accuracy?    decimal64
       |     |     +--rw height-accuracy?   decimal64
       |     +--rw (location)?
       |     |  +--:(ellipsoid)
       |     |  |  +--rw latitude?    decimal64
       |     |  |  +--rw longitude?   decimal64
       |     |  |  +--rw height?      decimal64
       |     |  +--:(cartesian)
       |     |     +--rw x?           decimal64
       |     |     +--rw y?           decimal64
       |     |     +--rw z?           decimal64
       |     +--rw velocity
       |     |  +--rw v-north?   decimal64
       |     |  +--rw v-east?    decimal64
       |     |  +--rw v-up?      decimal64
       |     +--rw timestamp?         yang:date-and-time
       |     +--rw valid-until?       yang:date-and-time
       +--rw deployment-mode?          identityref
       +--rw activation-date?          yang:date-and-time
       +--rw software-version?         string
       +--ro hotfixes
       |  +--ro hostfix* []
       |     +--ro version?   identityref
       |     +--ro order?     uint8
       +--rw software-type?            string
       +--rw sign-of-life-timestamp?   yang:date-and-time
       +--rw tags?                     string

4.2.2.  Entitlements Module

Palmero, et al.          Expires 26 October 2024                [Page 7]
Internet-Draft                   DMALMO                       April 2024

module: ietf-almo-entitlements

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw uid?                        string
    +--rw state?                      ietf-almo-common:entitlement-state-t
    +--rw renewal-profile
    |  +--rw activation-date?   yang:date-and-time
    |  +--rw expiration-date?   yang:date-and-time
    +--rw parent-entitlement
    |  +--rw almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class=current()/../almo-class]/inst/id
    +--rw entitlement-attachements
       +--rw entity
       |  +--rw organizations
       |     +--rw organization* [almo-class id]
       |        +--rw almo-class    -> /ietf-almo:almos/almo/almo-class
       |        +--rw id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
       +--rw assets
          +--rw assets
             +--rw asset* [almo-class id]
                +--rw almo-class    -> /ietf-almo:almos/almo/almo-class
                +--rw id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-feature:features/ietf-almo-feature:feature:
    +--ro entitlements-info
       +--ro entities-entitlement-info* []
          +--ro entity-entitlement-info
          |  +--ro organizations
          |     +--ro organization* [almo-class id]
          |        +--ro almo-class    -> /ietf-almo:almos/almo/almo-class
          |        +--ro id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
          +--ro entitlements
          |  +--ro entitlement* [almo-class id]
          |     +--ro almo-class    -> /ietf-almo:almos/almo/almo-class
          |     +--ro id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
          +--ro entitled?                  boolean
          +--ro infriges?                  boolean
          +--ro in-use?                    boolean
          +--ro entitlement-limit
             +--ro users
             |  +--ro value?     uint32
             |  +--ro maximum?   uint32
             +--ro cpus
             |  +--ro value?     uint32
             |  +--ro maximum?   uint32
             +--ro bandwidth
                +--ro value?     decimal64
                +--ro maximum?   decimal64

Palmero, et al.          Expires 26 October 2024                [Page 8]
Internet-Draft                   DMALMO                       April 2024

4.2.3.  Features Module

module: ietf-almo-feature

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw features
       +--rw feature* [almo-class id]
          +--rw almo-class    -> /ietf-almo:almos/almo/almo-class
          +--rw id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw name?                      string
    +--rw summary?                   string
    +--rw category?                  string
    +--rw entitlement?               string
    +--rw first-available-version?   string
    +--ro backported-versions
    |  +--ro backported-version* []
    |     +--ro version?   identityref
    +--rw scope?                     identityref
    +--rw config-options* [id]
    |  +--rw id                string
    |  +--rw name?             string
    |  +--rw summary?          string
    |  +--rw characteristic* [id]
    |     +--rw id       string
    |     +--rw name?    string
    |     +--rw value?   string
    +--rw asset
    |  +--rw almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class = current()/../almo-class]/inst/id
    +--rw subfeatures
       +--rw subfeature* [almo-class id]
          +--rw almo-class    -> /ietf-almo:almos/almo/almo-class
          +--rw id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id

4.2.4.  Usage Module

Palmero, et al.          Expires 26 October 2024                [Page 9]
Internet-Draft                   DMALMO                       April 2024

module: ietf-almo-usage

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw feature
    |  +--rw almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
    +--rw name?                   string
    +--rw summary?                string
    +--rw uri?                    string
    +--rw deployment-mode?        identityref
    +--rw scope?                  identityref
    +--rw activation-status?      string
    +--rw instances?              uint32
    +--rw timestamp?              yang:date-and-time
    +--rw count?                  uint32
    +--rw frequency* [name]
    |  +--rw name         string
    |  +--rw type-freq?   string
    |  +--rw value?       yang:counter64
    +--rw resource-consumption* [id]
       +--rw id                string
       +--rw name?             string
       +--rw summary?          string
       +--rw characteristic* [id]
          +--rw id           string
          +--rw name?        string
          +--rw unit?        string
          +--rw value?       yang:counter64
          +--rw value-max?   yang:counter64

4.2.5.  Event Report Module

Palmero, et al.          Expires 26 October 2024               [Page 10]
Internet-Draft                   DMALMO                       April 2024

module: ietf-almo-event-report

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw id?                 string
    +--rw title?              string
    +--rw summary?            string
    +--rw severity?           string
    +--rw status?             string
    +--rw created?            yang:date-and-time
    +--rw last_updated?       yang:date-and-time
    +--rw capability?         string
    +--rw technology?         string
    +--rw subtechnology?      string
    +--rw problem-type?       string
    +--rw resolution?         string
    +--rw owner?              string
    +--rw support-engineer?   string
    +--rw asset
    |  +--rw almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
    +--rw feature
    |  +--rw almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
    +--rw contract-number?    string

4.2.6.  Organization Module

   module: ietf-almo-organization

     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
       +--rw address?      string
       +--rw department?   boolean

4.2.7.  User Module

Palmero, et al.          Expires 26 October 2024               [Page 11]
Internet-Draft                   DMALMO                       April 2024

module: ietf-almo-user

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw billing-account?   uint32
    +--rw represents
    |  +--rw almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
    +--rw authority?         enumeration
    +--rw email?             string
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-entitlements:entitlement-attachements/ietf-almo-entitlements:entity:
    +--rw users
       +--rw users* [almo-class id]
          +--rw almo-class    -> /ietf-almo:almos/almo/almo-class
          +--rw id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-feature:features/ietf-almo-feature:feature/ietf-almo-entitlements:entitlements-info/ietf-almo-entitlements:entities-entitlement-info/ietf-almo-entitlements:entity-entitlement-info:
    +--ro users
       +--ro users* [almo-class id]
          +--ro almo-class    -> /ietf-almo:almos/almo/almo-class
          +--ro id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id

4.3.  YANG data models of ALMO Modules

4.3.1.  LMO Common Module

   <CODE BEGINS> file "ietf-almo-common@2023-10-23.yang"
   module ietf-almo-common {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-almo-common";
     prefix ietf-almo-common;
     organization
       "IETF OPSA (Operations and Management Area) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
        WG List:  <mailto:opsawg@ietf.org>
        Editor:  Marisol Palmero
                 <mailto:mpalmero@cisco.com>
        Editor:  Josh Suhr
                 <mailto:josuhr@cisco.com>
        Editor:  Sudhendu Kumar
                 <mailto:skumar23@ncsu.edu>";
     description
       "This YANG module defines a collection of useful data types
        and identity for Lifecycle Management and Operations (LMO).

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

        Redistribution and use in source and binary forms, with or

Palmero, et al.          Expires 26 October 2024               [Page 12]
Internet-Draft                   DMALMO                       April 2024

        without modification, is permitted pursuant to, and subject to
        the license terms contained in, the Simplified BSD License set
        forth in Section 4.c of the IETF Trust's Legal Provisions

        Relating to IETF Documents
        (https://trustee.ietf.org/license-info).

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

     revision 2023-10-23 {
       description
         "Renamed all references from LMO to ALMO. Refer to
         DMLMO draft";
       reference
         "RFC XXXX: ALMO YANG Model";
     }

     typedef entitlement-id-t {
       type string;
       description
         "Entitlement ID Type";
     }
     typedef entitlement-model-t {
       type enumeration {
         enum perpetual {
           description
             "Perpetual entitlement";
         }
         enum subscription {
           description
             "Subscription entitlement";
         }
         enum usage-based {
           description
             "Usage-based entitlement";
         }
         enum other {
           description
             "Undefined entitlement type";
         }
       }
       description
         "Entitlement Model Type";
     }
     identity entitlement-buying-program-t {
       description

Palmero, et al.          Expires 26 October 2024               [Page 13]
Internet-Draft                   DMALMO                       April 2024

         "Entitlement Buying Program that contains the plan to generate
          revenue for specific asset";
     }
     identity enterprise-agreement {
           base entitlement-buying-program-t;
           description
             "Enterprise Agreement";
     }
     identity managed-service-entitlement-agreement {
           base entitlement-buying-program-t;
           description
             "Managed Service Entitlement Agreement";
     }
     identity service-provider-network-agreement {
           base entitlement-buying-program-t;
           description
             "Service Provider Network Agreement";
     }
     identity collab-active-user {
           base entitlement-buying-program-t;
           description
             "Collaboration Active User";
     }
     identity service-full-coverage {
           base entitlement-buying-program-t;
           description
             "Service Full-Coverage";
     }
     identity offer-type-t {
       description
         "License Offer Type, part of the plan to generate revenue
          for specific asset";
     }
     identity perpetual-software {
         base offer-type-t;
         description
             "Perpetual softwar gives the user the right to use the
              program indefinitely";
     }
     identity standalone-hardware {
         base offer-type-t;
         description
             "Standalone hardware is able to function independently
              of other hardware";
     }
     identity on-premise-software-subscription {
         base offer-type-t;
         description

Palmero, et al.          Expires 26 October 2024               [Page 14]
Internet-Draft                   DMALMO                       April 2024

             "On-Premise software subscription, relates to a temporary
              on-prem licencing model, allowing users to pay a per user
              fee";
     }
     identity cloud-software-saas-subscription {
         base offer-type-t;
         description
             "Cloud Software (SaaS) subscription is a service busines
              model where the user is entitled to use the cloud software
              for a specific time period";
     }
     identity third-party-software {
         base offer-type-t;
         description
             "It includes licenses, entitlements, agreements, obligations
             or other commitment under which the user can use the asset
             not directly sold by the manufacturer";
     }
     identity flex-cloud-prem-subscription {
         base offer-type-t;
         description
             "Flex Cloud-Prem subscription allows software vendors to
             limit the number of entitlements for the use of the specific
             asset";
     }
     typedef purchase-order-t {
       type string;
       description
         "License purchase order number";
     }
     typedef entitlement-state-t {
       type enumeration {
         enum inactive {
           description
             "Inactive State";
         }
         enum active {
           description
             "Active State";
         }
         enum unknown {
           description
             "Unknown State";
         }
       }
       description
         "Entitlement State Type";
     }

Palmero, et al.          Expires 26 October 2024               [Page 15]
Internet-Draft                   DMALMO                       April 2024

     typedef asset-id {
       type string;
       description
         "Asset ID Type";
     }

     typedef vendor-id {
       type enumeration {
         enum cisco {
           description
             "Vendor-id is Cisco";
         }
         enum other {
           description
             "Vendor-id is not determined";
         }
       }
       description
         "Vendor identifier";
     }

     identity asset-type {
       description
         "type of the asset: hardware, software, software cloud, ...";
     }
     identity hw {
       base asset-type;
       description
         "Hardware refers to any physical device";
     }
     identity sw {
       base asset-type;
       description
         "Software refers to a collection of code installed on a
         hardware asset";
     }
     identity sw-cloud {
       base asset-type;
       description
         "Cloud-based software, that allows users access to software
         application that run on a shared computing resources via
         Internet";
     }
     identity nfv {
       base asset-type;
       description
         "irtual assets, as a separate type to connect with NFV practice";
     }

Palmero, et al.          Expires 26 October 2024               [Page 16]
Internet-Draft                   DMALMO                       April 2024

     identity phone {
       base asset-type;
       description
         "Mobile telephone or a handheld two-way communication device
         over a cellular network.";
     }
     identity other {
       base asset-type;
       description
         "Different or additional type not specified as part of another
         defined asset-type.";
     }
     identity asset-subtype {
       description
         "subtype of the asset: router, switch, wireless,
         controller, ...";
     }
     identity router {
       base asset-subtype;
       description
         "Network connecting device. It operates at layer-3 of the OSI
         model.";
     }
     identity switch {
       base asset-subtype;
       description
         "Network connecting device. It operates at layer-2(Data Link
         Layer) of the OSI model.";
     }
     identity wireless {
       base asset-subtype;
       description
         "Network connecting device. It creates a wireless local area
         network. It connects to a wired router, switch, or hub via an
         Ethernet cable, and projects a Wi-Fi signal to a designated
         area";
     }
     identity controller {
       base asset-subtype;
       description
         "Centralized device in the network which is used in combination
         with network connection devices, when there is a need to manage
         them in large quantities.";
     }
     identity board {
       base asset-subtype;
       description
         "Electronic circuit board in an asset which interconnects

Palmero, et al.          Expires 26 October 2024               [Page 17]
Internet-Draft                   DMALMO                       April 2024

         another hardware assets attached to it.";
     }
     identity p-supply {
       base asset-subtype;
       description
         "Power supply, as it might have independent identity.";
     }
     identity transceiver {
       base asset-subtype;
       description
         "Device that is both a transmitter and a receiver. Usually
         it's in a single device.
         This is commonly used as a modular network interface";
     }
     identity others {
       base asset-subtype;
       description
         "Different or additional type not specified as part of another
         defined asset-subtype. To be considered a few specific subtype
         of assets related to: 3GPP, BBF, TMF, I2NSF (and security in
         general), PCE, etc";
     }
     identity version {
       description
         "Base identity for all version types";
     }
     identity version-sw {
     base version;
       description
         "Version release of the operating system that runs on the
         asset";
     }
     identity platform-dependency-os {
       description
         "Operating system that creates an environment for the asset
          to get deployed. Enum of options covering OS platform
          dependency.";
     }
     identity linux {
       base platform-dependency-os;
       description
         "UNIX like operating system";
     }
     identity windows {
       base platform-dependency-os;
       description
         "Windows operating system";
     }

Palmero, et al.          Expires 26 October 2024               [Page 18]
Internet-Draft                   DMALMO                       April 2024

     identity macOS {
       base platform-dependency-os;
       description
         "Mac operating system develop by Apple, Inc.";
     }
     identity darwin {
       base platform-dependency-os;
       description
         "Open-source Unix-like operating system first released by Apple
         Inc.";
     }
     identity ubuntu {
       base platform-dependency-os;
       description
         "Linux distribution, used in desktop distribution";
     }
     identity red-hat {
       base platform-dependency-os;
       description
         "Red Hat Enterprise Linux, released in multiple server and
         desktop versions";
     }
   // NEED to extend and include iOS, Android, etc.;

     identity role {
       description
         "What the role of a given device/component is in the network.
         This attribute normally will be configured on the specific
         component during setup. This attribute normally will be
         configured on the specific component during setup";
     }
     identity border-router {
       base role;
       description
         "Router that provides connectivity between interior and
         exterior network routers or to the cloud";
     }
     identity access {
       base role;
       description
         "Router that provides access to a larger communication network
         of some sort.";
     }
     identity control-plane {
       base role;
       description
         "Network component that controls how data packets are
         forwarded";

Palmero, et al.          Expires 26 October 2024               [Page 19]
Internet-Draft                   DMALMO                       April 2024

     }
     identity edge {
       base role;
       description
         "Router that provides an entry point into enterprise or service
         provider core networks";
     }
     identity core {
       base role;
       description
         "Component part of the high-speed backbone of the network. It
         provides fast and efficient data transport, excluding 3GPP";
     }
     identity ran {
       base role;
       description
          "RAN links user equipment, such as a cellphone, computer or
          any remotely controlled machine, over a fiber or wireless
          backhaul connection. That link goes to the core network, which
          manages subscriber information, location and more.";
     }
     identity datacenter {
       base role;
       description
         "Component placed in the data center, mantaining and housing
         back-end IT system and data stores";
     }
     identity branch {
       base role;
       description
         "Router in a remote branch of an enterprise's network";

     }
     identity deployment-mode {
       description
         "This attribute will denote the configured deployment mode
          for the asset and features, if applicable; e.g.,
          High Availability(HA) or Faiover cluster, virtual appliance,
          etc.";
     }
     identity primary {
       base deployment-mode;
       description
         "Asset or featurs that support critical applications to
         minimize system downtime, to achieve high availabiilty or
         failover";
     }
     identity secondary {

Palmero, et al.          Expires 26 October 2024               [Page 20]
Internet-Draft                   DMALMO                       April 2024

       base deployment-mode;
       description
         "Redundant asset or feature, that is triggered when the
         primary encounters performance issues, to achieve high
         availability or failover";
     }
     identity cloud {
       base deployment-mode;
       description
         "Especially it refers to remote, distributed and shared asset
         resources (i.e. data storage, computing power, etc.), which
         are hooked together and meant to operate as a single
         ecosystem.";
     }
     identity virtual-appliance {
       base deployment-mode;
       description
         "pre-configured virtual machine image, ready to run on a
         hypervisor";
     }
     identity container {
       base deployment-mode;
       description
         "Standard unit of software that packages up code and all its
         dependencies so the application runs quickly and reliably from
         one computing environment to another";

     }
     identity undeployed {
       base deployment-mode;
       description
         "it refers to an asset that is undeployed";

     }
     identity metric-type {
       description
         "Specify the different type of metrics, i.e accumulated-count,
          average-count, last-count, high-water mark count, low-water
          mark count" ;
     }
     identity feature-scope {
       description
         "Optional tag that could apply to any usage feature, so that
          if there are multiple dimensions of reporting that need to
          be accommodated (i.e., report feature usage by 'site')";
     }
     identity site {
       base feature-scope;

Palmero, et al.          Expires 26 October 2024               [Page 21]
Internet-Draft                   DMALMO                       April 2024

       description
         "Single location, part of the network";
     }
     identity network {
       base feature-scope;
       description
         "scope limited to the networking assets";
     }
     typedef feature-usage-type {
       type enumeration {
         enum none {
           description
             "No Usage";
         }
         enum low {
           description
             "Usage meeting the Low Threshold";
         }
         enum medium {
           description
             "Usage meeting the Medium Threshold";
         }
         enum high {
           description
             "Usage meeting the High Threshold";
         }
         // NEED to elaborate more on this list, based on use case
         // validation
       }
       description
         "feature usage % 0-25-50-75-100";
     }

     identity almo-class {
       description "Base identity for classes of LMOs";
     }
   <CODE ENDS>

4.3.2.  LMO Module

   <CODE BEGINS> file "ietf-almo@2023-10-23.yang"
   module ietf-almo {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-almo";
     prefix ietf-almo;
     import ietf-almo-common {
       prefix ietf-almo-common;
     }

Palmero, et al.          Expires 26 October 2024               [Page 22]
Internet-Draft                   DMALMO                       April 2024

     import ietf-yang-types {
       prefix yang;
     }
     organization
       "IETF OPSA (Operations and Management Area) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
        WG List:  <mailto:opsawg@ietf.org>
        Editor:  Jan Lindblad
                 <mailto:jlindbla@cisco.com>
        Editor:  Marisol Palmero
                 <mailto:mpalmero@cisco.com>";
     description
       "This YANG module add the flexibility to define its own
        and extensible set of almo classes.

        Copyright (c) 2021 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 Simplified BSD License set
        forth in Section 4.c of the IETF Trust's Legal Provisions

        Relating to IETF Documents
        (https://trustee.ietf.org/license-info).

        This version of this YANG module is part of RFC XXXX
        (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
        for full legal notices.";
     revision 2023-10-23 {
       description
         "Renamed all references from LMO to ALMO. Refer to
         DMLMO draft";
       reference
         "RFC XXXX: ALMO YANG Model";
     }

     container almos {
       //config false; //temporarily commented out for easy testing
       description
         "Container that includes instances for all types of datasets
          which are part of DMLMO";
       list almo {
         key almo-class;
         description
           "list that includes the instances for all DMLMO datasets";
         leaf almo-class {

Palmero, et al.          Expires 26 October 2024               [Page 23]
Internet-Draft                   DMALMO                       April 2024

           type identityref {
             base ietf-almo-common:almo-class;
           }
           description
             "almo-class defining the type of instance";
         }
         list inst {
           key id;
           description
             "defines the specific instance";
           leaf id {
             type string;
             description
               "Identifies the instance";
           }
           container parent {
             description
               "identifies the hierarchy structure for a given instance";
             leaf almo-class {
               type leafref {
                 path /almos/almo/almo-class;
               }
               description
                 "almo-class that defines the parent type of instance";
             }
             leaf id {
               type leafref {
                  path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class"
               + "=current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
               }
               description
                 "identifies the parent type of instance";
             }
           }
           container capture-info {
             // Moved capture-info to the instance level, as
             // asset/... data will generally be collected
             // from one source at one time.
             description
               "Capture information for this data";
             leaf collected-on {
               type yang:date-and-time;
               description
                 "Time at which this data was collected";
             }
             leaf collected-from {
               type string;
               description

Palmero, et al.          Expires 26 October 2024               [Page 24]
Internet-Draft                   DMALMO                       April 2024

                 "Identifier for original source of this data";
             }
           }
         }
       }
     }
   <CODE ENDS>

4.3.3.  Entitlements Module

   <CODE BEGINS> file "ietf-almo-entitlements@2023-10-23.yang"
   module ietf-almo-entitlements {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-almo-entitlements";
     prefix ietf-almo-entitlements;
     import ietf-yang-types {
       prefix yang;
     }
     import ietf-almo-common {
       prefix ietf-almo-common;
     }
     import ietf-almo {
       prefix ietf-almo;
     }
     import ietf-almo-assets {
       prefix ietf-almo-asset;
     }
     import ietf-almo-feature {
       prefix ietf-almo-feature;
     }
     import ietf-almo-organization {
       prefix ietf-almo-organization;
     }
     organization
       "IETF OPSA (Operations and Management Area) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
        WG List:  <mailto:opsawg@ietf.org>
        Editor:  Marisol Palmero
                 <mailto:mpalmero@cisco.com>
        Editor:  Josh Suhr
                 <mailto:josuhr@cisco.com>
        Editor:  Sudhendu Kumar
                 <mailto:skumar23@ncsu.edu>";
     description
       "This YANG module includes the entitlement attributes of a
        product.

Palmero, et al.          Expires 26 October 2024               [Page 25]
Internet-Draft                   DMALMO                       April 2024

        Copyright (c) 2021 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 Simplified BSD License set
        forth in Section 4.c of the IETF Trust's Legal Provisions

        Relating to IETF Documents
        (https://trustee.ietf.org/license-info).

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

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

     revision 2023-10-23 {
       description
         "Renamed all references from LMO to ALMO. Refer to
         DMLMO draft";
       reference
         "RFC XXXX: ALMO YANG Model";
     }

   // Can we capture entitlement ties to API access where we may be
   // entitled on events queries per second, minute, hour, etc.
   // This is a popular model in the cloud space for example the Google
   // MAPs API??

     identity entitlement {
       base ietf-almo-common:almo-class;
       description "A entitlement is a class of ALMO that represents how
       the asset(s) or feature(s) can be leveraged and what is required
       in cases the asset(s) or feature(s) are changed.";
     }
     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
       when "derived-from-or-self(../ietf-almo:almo-class, "+
            " 'ietf-almo-entitlements:entitlement')";
       description
         "entitlements container includes attributes for entitlements";
       leaf uid {
         type string;

Palmero, et al.          Expires 26 October 2024               [Page 26]
Internet-Draft                   DMALMO                       April 2024

         description
           "Unique Entitlement Identifier";
       }

       leaf state {
         type ietf-almo-common:entitlement-state-t;
         description
           "Entitlement state; e.g., active, inactive, or unknown";
       }
       container renewal-profile {
         description
           "Profile of entitlement renewal status and information";
         leaf activation-date {
           type yang:date-and-time;
           description
             "Activation Date";
         }
         leaf expiration-date {
           type yang:date-and-time;
           description
             "Expiration Date";
         }
       }

       container parent-entitlement {
         // There is already a parent in the base model  but we have to force this  to
         // be entilement.. can we do something else?
         description
           "identifies the hierarchy structure for a given instance";
         leaf almo-class {
           type leafref {
             path /ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class;
           }
             must "derived-from-or-self(current(), "+
                " 'ietf-almo-entitlements:entitlement')";
             description
             "almo-class that defines the parent type of instance";
         }
         leaf id {
           type leafref {
              path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class"
           + "=current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
           }
           description
             "identifies the parent type of instance";
         }
       }

Palmero, et al.          Expires 26 October 2024               [Page 27]
Internet-Draft                   DMALMO                       April 2024

       container entitlement-attachements {
         description
            "An entilement entitles an entity to the use of a feature under an
            asset.";

         container entity {
           description "The entity to which the entilemets entitles.
           There can be multiple. Empty entity attachments can occur for
           special licenses. This value  still SHOULD always be explicitly filed.
           It might be expanded to cover selection cases e.g. all users in
           a special country.";
           container organizations {
             description "Attachment to specifc organizations.";
             list organization {
               key "almo-class id";
               description
                 "list of organizations";
               leaf almo-class {
                 type leafref {
                   path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
                 }
                 must "derived-from-or-self(current(), "+
                      " 'ietf-almo-organization:organization')";
                 description
                   "organization to which this entitlement is attached";
               }
               leaf id {
                 type leafref {
                   path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                        " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
                 }
                 description
                   "organization to which this entitlement is attached";
               }
             }

           }

         }

           // We could expand this to more generic selections of users
           // or organizations, but not to save lines, but when the attachment
           // is loose per the license: "e.g. users in Asia"

         container assets {
           description "Descriptive set of assets to which the license is attached. Some licenses might not be attached to specific assets";

Palmero, et al.          Expires 26 October 2024               [Page 28]
Internet-Draft                   DMALMO                       April 2024

           container assets {
             description
                "list of assets to which this license is attached";
             list asset {
               key "almo-class id";
               description
                 "list of assets to which this license is attached";
               leaf almo-class {
                 type leafref {
                   path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
                 }
                 must "derived-from-or-self(current(), "+
                      " 'ietf-almo-asset:asset')";
                 description
                   "organization to which this entitlement is attached";
               }
               leaf id {
                 type leafref {
                   path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                        " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
                 }
                 description
                   "organization to which this entitlement is attached";
               }
             }

           }

           // We could have other container with more descriptive set of assets
           // such as "all laptops in school Y (site license)"

         }
         }

       }

     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-feature:features/ietf-almo-feature:feature {
       when "derived-from-or-self(../../../ietf-almo:almo-class, "+
            " 'ietf-almo-asset:asset')";
       description "Augmenting features with entilement info.";

       container entitlements-info {
         config false;
         description
          "information over this feature under this asset";

Palmero, et al.          Expires 26 October 2024               [Page 29]
Internet-Draft                   DMALMO                       April 2024

           list entities-entitlement-info {
             description "include info for the entitlement";
             container entity-entitlement-info {
               description "Entities that uses the feature. It can be empty
               but each server should provide meaning to this. It could mean
               general use of the feature";
               container organizations {
                 description "link  to  organizations.";
                 list organization {
                   key "almo-class id";
                   description
                     "list of organizations";
                   leaf almo-class {
                     type leafref {
                       path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
                     }
                     must "derived-from-or-self(current(), "+
                          " 'ietf-almo-organization:organization')";
                     description
                       "organization to which this entitlement is attached";
                   }
                   leaf id {
                     type leafref {
                       path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                            " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
                     }
                     description
                       "organization to which this feature and entitlement is related";
                   }
                 }

           }

             }

             container entitlements {
               description "List of entitlements that enable the use of this
               feature.";
               list entitlement {
                 key "almo-class id";
                 description
                   "Subfeature ID";
                 leaf almo-class {
                   type leafref {
                     path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
                   }

Palmero, et al.          Expires 26 October 2024               [Page 30]
Internet-Draft                   DMALMO                       April 2024

                   must "derived-from-or-self(current(), "+
                   " 'ietf-almo-entitlements:entitlement')";
                   description
                     "Reference to almo-class";
                 }
                 leaf id {
                   type leafref {
                      path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                           " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
                   }
                   description
                     "Reference to Feature ID";
                 }

               }

             }

             leaf entitled {
               type boolean;
               description "Means one or more entitles allows the use of this feature.
               This does not deal with limits, just the general use of the feature
               The lack of this leaf means the server state is not determined";
             }

             leaf infriges {
               type boolean;
               description "Whether the feature use is infriging its entilement level.
               It means the feature is in use iwthout an entitlement, or going over a level.";
             }

             leaf in-use {
               type boolean;
               description "Whther the level of usage of the feature will leave it
               to infrigement if the entilement in entitlements is removed";
             }

             container entitlement-limit {
               // TODO: this was failing even without the entitled.
               //must "../entitled = 'true'" {
               //  error-message "entiltlement-limit can only exist if entitled is set to true";
               //}
               description "Limits of the entilement";
               // Check with Jan if it is better to use the usage class, but thsi one is specific
               // for licenses.
               // This container should be expanded if needed by augmentation
               // This could also be a grouping with the usage, but then the meanings

Palmero, et al.          Expires 26 October 2024               [Page 31]
Internet-Draft                   DMALMO                       April 2024

               // could change..
               // And one cannot really augment groupins, so yeah..
               // Pending: Will the meaning of this containers mean anything?
               // Maybe the container without the value as None?
               container users {
                 description "Number of users";
                 leaf value {
                   type uint32;
                   units "users";
                   description "Limit in number of users";
                 }
                 leaf maximum {
                   type uint32;
                   units "users";
                   description
                   "Maximum number of users allowed by the current entilement.
                   Lack of this container means there is no user limit";
                 }
               }
               container cpus {
                 description "Number of cpus";
                 leaf value {
                   type uint32;
                   units "cpus";
                   description "Limit in number of cpus. Some vendors have their own
                   meaning of cpus in the commercial sense. This could mean that too.";
                 }

                 leaf maximum {
                   type uint32;
                   units "cpus";
                   description
                   "Maximum number of cpus allowed by the current entilement.
                   Lack of this container means there is no cpu limit on the entitlement level";
                 }
               }

               container bandwidth {
                 description "Limit in bandwidth";
                 leaf value {
                   type decimal64 {
                   fraction-digits 6;
                   }
                   units "Mbps";
                   description "Limit in the bandwidth of a service.";
                 }
                 leaf maximum {
                   type decimal64 {

Palmero, et al.          Expires 26 October 2024               [Page 32]
Internet-Draft                   DMALMO                       April 2024

                   fraction-digits 6;
                   }
                   units "Mbps";
                   description
                   "Maximum amount of bandwidth of the server by license restriction.";
                 }
               }

               // do an expansion of egress and ingress queues as an example

             }
         }

         }

     }
   <CODE ENDS>

4.3.4.  Features Module

   <CODE BEGINS> file "ietf-almo-feature@2023-10-23.yang"
   module ietf-almo-feature {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-almo-feature";
     prefix ietf-almo-feature;
     import ietf-almo-common {
       prefix ietf-almo-common;
     }
     import ietf-almo {
       prefix ietf-almo;
     }
     import ietf-almo-assets {
       prefix ietf-almo-asset;
     }
     organization
       "IETF OPSA (Operations and Management Area) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
        WG List:  <mailto:opsawg@ietf.org>
        Editor:  Marisol Palmero
                 <mailto:mpalmero@cisco.com>
        Editor:  Josh Suhr
                 <mailto:josuhr@cisco.com>
        Editor:  Sudhendu Kumar
                 <mailto:skumar23@ncsu.edu>";
     description
       "This YANG module includes the different attributes that define
        description, usage and resource consumption for specific

Palmero, et al.          Expires 26 October 2024               [Page 33]
Internet-Draft                   DMALMO                       April 2024

        features or capabilities of assets.

        Copyright (c) 2021 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 Simplified BSD License set
        forth in Section 4.c of the IETF Trust's Legal Provisions

        Relating to IETF Documents
        (https://trustee.ietf.org/license-info).

        This version of this YANG module is part of RFC XXXX
        (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
        for full legal notices.";
     revision 2023-10-23 {
       description
         "Renamed all references from LMO to ALMO. Refer to
         DMLMO draft";
       reference
         "RFC XXXX: ALMO YANG Model";
     }

     identity feature {
       base ietf-almo-common:almo-class;
       description
         "A feature is a class of almo that represents
          options or functional capabilities available in an asset";
     }

     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
       when "derived-from-or-self(../ietf-almo:almo-class, 'ietf-almo-asset:asset')";
       description
         "feature attributes related to assets";

       container features {
         description
           "Features supported by an asset";
         list feature {
           key "almo-class id";
           description
             "Subfeature ID";
           leaf almo-class {
             type leafref {
               path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
             }

Palmero, et al.          Expires 26 October 2024               [Page 34]
Internet-Draft                   DMALMO                       April 2024

             must "derived-from-or-self(current(), "+
             " 'ietf-almo-feature:feature')";
             description
               "Reference to almo-class";
           }
           leaf id {
             type leafref {
                path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                     " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
             }
             description
               "Reference to Feature ID";
           }

           }

         }
       //Fill more leafs for license when organization
       //module is present here...
     }

     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
       when "derived-from-or-self(../ietf-almo:almo-class, "+
            " 'ietf-almo-feature:feature')";
       description
         "feature attributes";

       leaf name {
         type string;
         description
           "Friendly name of the feature";
       }
       leaf summary {
         type string;
         description
           "Brief description of the feature";
       }
       leaf category {
         type string;
         description
           "Feature category or tag list (as applicable to the
           product)";
       }
       leaf entitlement {
         type string;
         description

Palmero, et al.          Expires 26 October 2024               [Page 35]
Internet-Draft                   DMALMO                       April 2024

           "Minimum entitlement level, subscription, or license level
             required for the feature";
       }
       leaf first-available-version {
         type string;
         description
           "The first version in which this feature was enabled";
       }
       container backported-versions {
         config false;
         description
           "software patch or update is taken from a recent software
           version and applied to an older version of the same
           software";
         list backported-version {
           config false;
           description
             "Backport releases to older release";
           leaf version {
             type identityref {
               base ietf-almo-common:version;
             }
             description
               "version of the backport release";
           }
         }
       }
       leaf scope {
         type identityref {
           base ietf-almo-common:feature-scope;
         }
         description
           "Optional tag that could apply to any of the usage
           features, so that if there are multiple dimensions of
           reporting that need to be accommodated (i.e., report
           feature usage by 'site')";
       }
       list config-options {
         key "id";
         description
           "Feature configuration profile - optional, for features
           that require configuration beyond enable/disable";
         leaf id {
           type string;
           description
             "Identify feature configuration option uniquely across
             all products";
         }

Palmero, et al.          Expires 26 October 2024               [Page 36]
Internet-Draft                   DMALMO                       April 2024

         leaf name {
           type string;
           description
             "Friendly name of the feature option";
         }
         leaf summary {
           type string;
           description
             "Brief description of the feature option";
         }
         list characteristic {
           key "id";
           description
             "Characteristics of feature configuration options,
               i.e. value=enabled/disabled";
           leaf id {
             type string;
             description
               "Identifier for feature option configuration
                 characteristic";
           }
           leaf name {
             type string;
             description
               "Friendly name for feature option configuration
                 characteristic";
           }
           leaf value {
             type string;
             description
               "Configuration characteristic value; describes how
               this feature option characteristic is configured";
           }
         }
       }
       container asset{
         description
           "Asset that this feature is attached to";
         leaf almo-class {
           type leafref {
             path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
           }
           must "derived-from-or-self(current(), "+
                " 'ietf-almo-asset:asset')";
           default ietf-almo-asset:asset;
           description
             "Asset class to which this feature is attached";
         }

Palmero, et al.          Expires 26 October 2024               [Page 37]
Internet-Draft                   DMALMO                       April 2024

         leaf id {
           type leafref {
             path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                 "current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
           }
           description
             "Asset to which this feature is attached";
         }
       }
       container subfeatures {
         description
           "Sub-features to the top-level feature";
         list subfeature {
           key "almo-class id";
           description
             "Subfeature ID";
           leaf almo-class {
             type leafref {
               path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
             }
             must "derived-from-or-self(current(), "+
                  " 'ietf-almo-feature:feature')";
             description
               "almo-class reference";
           }
           leaf id {
             type leafref {
               path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                    " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
             }
             description
               "Reference to Feature ID";
           }
         }
       }
     }
   <CODE ENDS>

4.3.5.  Usage Module

   <CODE BEGINS> file "ietf-almo-usage@2023-10-23.yang"
   module ietf-almo-usage {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-almo-usage";
     prefix ietf-almo-usage;
     import ietf-almo-common {
       prefix ietf-almo-common;
     }

Palmero, et al.          Expires 26 October 2024               [Page 38]
Internet-Draft                   DMALMO                       April 2024

     import ietf-almo {
       prefix ietf-almo;
     }
     import ietf-yang-types {
       prefix yang;
     }
     import ietf-almo-feature {
       prefix ietf-almo-feature;
     }
     organization
       "IETF OPSA (Operations and Management Area) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
        WG List:  <mailto:opsawg@ietf.org>
        Editor:  Jan Lindblad
                 <mailto:jlindbla@cisco.com>
        Editor:  Marisol Palmero
                 <mailto:mpalmero@cisco.com>";
     description
       "This YANG module includes the different attributes that define
        description, usage and resource consumption for specific
        features or capabilities of assets.

        Copyright (c) 2021 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 Simplified BSD License set
        forth in Section 4.c of the IETF Trust's Legal Provisions

        Relating to IETF Documents
        (https://trustee.ietf.org/license-info).

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

     revision 2023-10-23 {
       description
         "Renamed all references from LMO to ALMO. Refer to
         initial DMLMO draft";
       reference
         "RFC XXXX: ALMO YANG Model";
     }

     identity usage {
       base ietf-almo-common:almo-class;

Palmero, et al.          Expires 26 October 2024               [Page 39]
Internet-Draft                   DMALMO                       April 2024

       description "A usage is a class of almo that represents how
       features of an asset are used";
     }
     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
       when "derived-from-or-self(../ietf-almo:almo-class, "+
            " 'ietf-almo-usage:usage')";
       description
         "usage attributes";
       container feature {
         leaf almo-class {
           type leafref {
             path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
           }
           must "derived-from-or-self(current(), "+
                " 'ietf-almo-feature:feature')";
           default ietf-almo-feature:feature;
           description
             "feature to which this license is attached";
         }
         leaf id {
           type leafref {
              path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                   " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
           }
           description
             "Feature to which this license is attached";
         }
         description
           "usage link to a feature";
       }
       leaf name {
         type string;
         description
           "Name of feature usage characteristic";
       }
       leaf summary {
         type string;
         description
           "Brief description of feature usage characteristic";
       }
       leaf uri {
         type string;
         description
           "Target URI of feature characteristic, if applicable - e.g.,
            for clickstream or API";
       }
       leaf deployment-mode {
         type identityref {

Palmero, et al.          Expires 26 October 2024               [Page 40]
Internet-Draft                   DMALMO                       April 2024

           base ietf-almo-common:deployment-mode;
         }
         description
           "Deployment mode for the feature. When applicable, feature
            might be independent of the deployment mode in the asset;
            e.g., cloud, HA cluster, virtual appliance, etc.";
       }
       leaf scope {
         type identityref {
           base ietf-almo-common:feature-scope;
         }
         description
           "Optional tag that could apply to any of the usage
           features, so that if there are multiple dimensions of
           reporting that need to be accommodated, (i.e., report
           feature usage by 'site')";
       }
       leaf activation-status {
         type string;
         description
           "Feature activation status for this instance of the
           product (on/off; active/inactive; enabled/disabled)";
       }
       leaf instances {
         type uint32;
         description
           "Number of instances or end-points using this feature";
       }

       leaf timestamp {
         type yang:date-and-time;
         description
           "Some counters will benefit from timestamp based on the
           time when the counter has been collected";
       }
       leaf count {
         type uint32;
         units "times";
         description
           "Count of times the feature has been used";
       }
       list frequency {
         key "name";
         description
           "Frequency with which the feature is used";
         leaf name {
           type string {
             length "1..64";

Palmero, et al.          Expires 26 October 2024               [Page 41]
Internet-Draft                   DMALMO                       April 2024

           }
           description
             "reference in case that feature is for different
             purpose of usage";
         }
         leaf type-freq {
           type string;
           description
             "Frequency type, i.e daily, weekly, monthly";
         }
         leaf value {
           type yang:counter64;
           description
             "Value collected for the usage";
         }
       }
       list resource-consumption {
         key "id";
         description
           "Resource consumption profile";
         leaf id {
           type string;
           description
             "Identify resource for consumption measurement";
         }
         leaf name {
           type string;
           description
             "Friendly name of the resource";
         }
         leaf summary {
           type string;
           description
             "Brief description of the resource";
         }
         list characteristic {
           key "id";
           description
             "Characteristic of resource consumption";
           leaf id {
             type string;
             description
               "Identifier for resource consumption characteristic";
           }
           leaf name {
             type string;
             description
               "Friendly name for resource consumption

Palmero, et al.          Expires 26 October 2024               [Page 42]
Internet-Draft                   DMALMO                       April 2024

               characteristic";
           }

           leaf unit {
             type string;
             description
               "unit of measurement for the characteristic";
           }

           // NEED to define identity type for unit: min, hour, sec,
           // days, ...

           leaf value {
             type yang:counter64;
             description
               "Resource consumption characteristic measurement";
           }
           leaf value-max {
             type yang:counter64;
             description
               "Maximum resource consumption characteristic value";
           }
         }
       }
     }
   <CODE ENDS>

4.3.6.  Event Report Module

   <CODE BEGINS> file "ietf-almo-event-report@2023-10-23.yang"
   module ietf-almo-event-report {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-almo-event-report";
     prefix ietf-almo-event;

     import ietf-almo-common {
       prefix ietf-almo-common;
     }
     import ietf-almo {
       prefix ietf-almo;
     }
     import ietf-yang-types {
       prefix yang;
     }
     import ietf-almo-assets {
       prefix ietf-almo-asset;
     }
     import ietf-almo-feature {

Palmero, et al.          Expires 26 October 2024               [Page 43]
Internet-Draft                   DMALMO                       April 2024

       prefix ietf-almo-feature;
     }
     organization
       "IETF OPSA (Operations and Management Area) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
        WG List:  <mailto:opsawg@ietf.org>
        Editor:  Marisol Palmero
                 <mailto:mpalmero@cisco.com>
        Editor:  Josh Suhr
                 <mailto:josuhr@cisco.com>
        Editor:  Sudhendu Kumar
                 <mailto:skumar23@ncsu.edu>";
     description
       "This YANG module includes the incident management attributes
        to handle event reports.

        Copyright (c) 2021 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 Simplified BSD License set
        forth in Section 4.c of the IETF Trust's Legal Provisions

        Relating to IETF Documents
        (https://trustee.ietf.org/license-info).

        This version of this YANG module is part of RFC XXXX
        (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
        for full legal notices.";
     revision 2023-10-23 {
       description
         "Renamed all references from LMO to ALMO. Refer to
          DMLMO draft";
       reference
         "RFC XXXX: ALMO YANG Model";
     }

     identity event {
       base ietf-almo-common:almo-class;
       description
       "An event is a class of ALMO that represents an event
       that is not part of normal operations that disrupts
       operational processes.";
     }
     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
       when "derived-from-or-self(../ietf-almo:almo-class, "+

Palmero, et al.          Expires 26 October 2024               [Page 44]
Internet-Draft                   DMALMO                       April 2024

            " 'ietf-almo-event:event')";
       description
         "event container includes attributes for event reports";

       leaf id {
         type string;
         description
           "Technical Support Center Case Number id";
       }
       leaf title {
         type string;
         description
           "headline Incident Case";
       }
       leaf summary {
         type string;
         description
           "Problem description summary";
       }
       leaf severity {
         type string;
         description
         "severity, in some cases also defined as priority";
         // NEED to define different levels of severity, from
         // severity 1 to 6, i.e. Sev1: network down, Sev6: enhacement
       }
       leaf status {
         type string;
         description
         "case status, i.e. Customer-Pending, Customer
         Engineer-Pending, Developer-Pending, Closed, Open, etc.";
         // NEED to define different status
       }
       leaf created {
         type yang:date-and-time;
         description
         "created date-and-time";
       }
       leaf last_updated {
         type yang:date-and-time;
         description
         "last updated date-and-time";
       }
       leaf capability {
         type string;
         description
         "i.e. to reveal associated RMA items";
       }

Palmero, et al.          Expires 26 October 2024               [Page 45]
Internet-Draft                   DMALMO                       April 2024

       leaf technology{
         type string;
         description
         "Technology related";
       }
       leaf subtechnology{
         type string;
         description
         "Subtechnology related";
       }
       leaf problem-type{
         type string;
         description
         "Problem type definition, i.e. network, faulty hardware,
         performance, security, etc. ";
       }
       leaf resolution{
         type string;
         description
         "code (closed cases only)";
       }
       leaf owner{
         type string;
         description
         "Customer in charge of the case";
       // NEED to refer to user almo-class
       }
       leaf support-engineer{
         type string;
         description
         "Customer Support Engineer in charge of the case";
       // NEED to refer to user almo-class
       }
       container asset {
         description
             "Asset container to which this event is attached";
         leaf almo-class {
           type leafref {
             path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
           }
           must "derived-from-or-self(current(), "+
                " 'ietf-almo-asset:asset')";
           default ietf-almo-asset:asset;
           description
             "Asset class to which this event is attached";
         }
         leaf id {
           type leafref {

Palmero, et al.          Expires 26 October 2024               [Page 46]
Internet-Draft                   DMALMO                       April 2024

              path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                   " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
           }
           description
             "Asset to which this event is attached";
         }
       }
       container feature {
         description
             "Feature to which this event is attached";
         leaf almo-class {
           type leafref {
             path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
           }
           must "derived-from-or-self(current(), "+
                " 'ietf-almo-feature:feature')";
           default ietf-almo-feature:feature;
           description
             "Feature class to which this event is attached";
         }
         leaf id {
           type leafref {
             path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                  " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
           }
           description
             "Feature to which this event is attached";
         }
       }
       leaf contract-number {
         type string;
         description
         "Support contract number";
       // NEED to evaluate if it should be independent container. It
       // should be associated to asset and license
       }
     }
   <CODE ENDS>

4.3.7.  User Module

   <CODE BEGINS> file "ietf-almo-user@2023-10-23.yang"
   module ietf-almo-user {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-almo-user";
     prefix ietf-almo-user;
     import ietf-almo-common {
       prefix ietf-almo-common;

Palmero, et al.          Expires 26 October 2024               [Page 47]
Internet-Draft                   DMALMO                       April 2024

     }
     import ietf-almo {
       prefix ietf-almo;
     }
     import ietf-almo-entitlements {
       prefix ietf-almo-entitlements;
     }
     import ietf-almo-organization {
       prefix ietf-almo-organization;
     }
     import ietf-almo-feature {
       prefix ietf-almo-feature;
     }
     organization
       "IETF OPSA (Operations and Management Area) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
        WG List:  <mailto:opsawg@ietf.org>
        Editor:  Jan Lindblad
                 <mailto:jlindbla@cisco.com>
        Editor:  Marisol Palmero
                 <mailto:mpalmero@cisco.com>";
     description
       "This YANG module includes the user module and the different
        attributes that defines it.

        Copyright (c) 2021 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 Simplified BSD License set
        forth in Section 4.c of the IETF Trust's Legal Provisions

        Relating to IETF Documents
        (https://trustee.ietf.org/license-info).

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

     revision 2023-10-23 {
       description
         "Renamed all references from LMO to ALMO. Refer to
         DMLMO draft";
       reference
         "RFC XXXX: ALMO YANG Model";
     }

Palmero, et al.          Expires 26 October 2024               [Page 48]
Internet-Draft                   DMALMO                       April 2024

     identity user {
       base ietf-almo-common:almo-class;
       description
       "A user is a class of almo that refers to owner or consumer
       of the asset. User belongs to an organization. Within the
       organization there are entities that: a) use the assets
       in their operations, b) manage the assets. ";
     }
     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
       when "derived-from-or-self(../ietf-almo:almo-class, "+
            " 'ietf-almo-user:user')";
       description
         "user attributes";

       leaf billing-account {
         type uint32;
         description "billing account information";
       }
       container represents {
         description
           "Organization to which this user is attached";
         leaf almo-class {
           type leafref {
             path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
           }
           must "derived-from-or-self(current(), "+
                " 'ietf-almo-organization:organization')";
           description
             "Organization class to which this user is attached";
         }
         leaf id {
           type leafref {
             path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                  " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
           }
           description
             "Organization to which this user is attached";
         }
       }
       leaf authority {
         type enumeration {
           enum super-user {
             description
               "super-user";
             }
           enum standard-user {
             description
               "standard-user";

Palmero, et al.          Expires 26 October 2024               [Page 49]
Internet-Draft                   DMALMO                       April 2024

             }
           enum restricted-user {
             description
               "restricted-user";
             }
           enum admin {
             description
               "admin";
             }
         }
         default standard-user;
         description
           "authority assign to the user";
       }
       leaf email {
         type string;
         description
             "user email";
       }
       // Fill in more leafs you want on organizations here...
     }

     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-entitlements:entitlement-attachements/ietf-almo-entitlements:entity {
       when "derived-from-or-self(../../../ietf-almo:almo-class, "+
            " 'ietf-almo-entitlements:entitlement')";
       description
         "entitlement attributes related to user";

       container users {
         description "Users to which the entilement is attached";
         list users {
           key "almo-class id";
           description
             "list of users";
           leaf almo-class {
             type leafref {
               path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
             }
             must "derived-from-or-self(current(), "+
                  " 'users')";
             description
               "users to which this entitlement is attached";
           }
           leaf id {
             type leafref {
               path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                    " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
             }

Palmero, et al.          Expires 26 October 2024               [Page 50]
Internet-Draft                   DMALMO                       April 2024

             description
               "users to which this entitlement is attached";
           }
         }

       }
     }

     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-feature:features/ietf-almo-feature:feature/ietf-almo-entitlements:entitlements-info/ietf-almo-entitlements:entities-entitlement-info/ietf-almo-entitlements:entity-entitlement-info {
       when "derived-from-or-self(../../../../../../ietf-almo:almo-class, "+
            " 'ietf-almo-entitlements:entitlement')";
       description
         "entitlement attributes related to user";

       container users {
         description "Users to which the entilement is attached";
         list users {
           key "almo-class id";
           description
             "list of users";
           leaf almo-class {
             type leafref {
               path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
             }
             must "derived-from-or-self(current(), "+
                  " 'users')";
             description
               "users to which this entitlement is attached";
           }
           leaf id {
             type leafref {
               path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                    " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
             }
             description
               "users to which this entitlement is attached";
           }
         }

       }
     }
   <CODE ENDS>

Palmero, et al.          Expires 26 October 2024               [Page 51]
Internet-Draft                   DMALMO                       April 2024

5.  Deployment Considerations

   ALMO Data Models defines the data schemas for ALMO data.  ALMO Data
   Models are based on YANG.  YANG data models can be used independent
   of the transport and can be converted into any encoding format
   supported by the network configuration protocol.  YANG is a protocol
   independent.

   To enable the exchange of ALMO data among all interested parties,
   deployment considerations that are out of the scope of this document,
   will need to include:

   *  The data structure to describe all metrics and quantify relevant
      data consistently, i.e. specific formats like XML or JSON encoded
      message would be deemed valid or invalid based on ALMO models.

   *  The process to share and collect ALMO data across the consumers
      consistently, including the transport mechanism.  The ALMO YANG
      models can be used with network management protocols such as
      NETCONF [RFC6241], RESTCONF [RFC8040], streaming telemetry, etc.
      OpenAPI specification might also help to consume ALMO metrics.

   *  How the configuration of assets should be done.

6.  Security Considerations

   The security considerations mentioned in section 17 of [RFC7950]
   apply.

   LMO brings several security and privacy implications because of the
   various components and attributes of the information model.  For
   example, each functional component can be tampered with to give
   manipulated data.  ALMO when used alone or with other relevant data,
   can identify an individual, revealing Personal Identifiable
   Information (PII).  Misconfigurations can lead to data being accessed
   by unauthorized entities.

   Methods exist to secure the communication of management information.
   The transport entity of the functional model MUST implement methods
   for secure transport.  This document also contains an Information
   model and Data-Model in which none of the objects defined are
   writable.  If the objects are deemed sensitive in a particular
   environment, access to them MUST be restricted using appropriately
   configured security and access control rights.  The information model
   contains several optional elements which can be enabled or disabled
   for the sake of privacy and security.  Proper authentication and
   audit trail MUST be included for all the users/processes that access
   ALMO data.

Palmero, et al.          Expires 26 October 2024               [Page 52]
Internet-Draft                   DMALMO                       April 2024

7.  IANA Considerations

7.1.  The IETF XML Registry

   This document registers URIs in the IETF XML registry [RFC3688].
   Following the format in [RFC3688], the registrations defined below
   are requested:

   URI: urn:ietf:params:xml:ns:yang:ietf-almo
   Registrant Contact: The OPSA WG of the IETF.
   XML: N/A, the requested URI is an XML namespace.

   URI: urn:ietf:params:xml:ns:yang:ietf-almo-common
   Registrant Contact: The OPSA WG of the IETF.
   XML: N/A, the requested URI is an XML namespace.

   URI: urn:ietf:params:xml:ns:yang:ietf-almo-assets
   Registrant Contact: The OPSA WG of the IETF.
   XML: N/A, the requested URI is an XML namespace.

   URI: urn:ietf:params:xml:ns:yang:ietf-almo-entitlements
   Registrant Contact: The OPSA WG of the IETF.
   XML: N/A, the requested URI is an XML namespace.

   URI: urn:ietf:params:xml:ns:yang:ietf-almo-feature
   Registrant Contact: The OPSA WG of the IETF.
   XML: N/A, the requested URI is an XML namespace.

   URI: urn:ietf:params:xml:ns:yang:ietf-almo-usage
   Registrant Contact: The OPSA WG of the IETF.
   XML: N/A, the requested URI is an XML namespace.

   URI: urn:ietf:params:xml:ns:yang:ietf-almo-event-report
   Registrant Contact: The OPSA WG of the IETF.
   XML: N/A, the requested URI is an XML namespace.

   URI: urn:ietf:params:xml:ns:yang:ietf-almo-organization
   Registrant Contact: The OPSA WG of the IETF.
   XML: N/A, the requested URI is an XML namespace.

   URI: urn:ietf:params:xml:ns:yang:ietf-almo-user
   Registrant Contact: The OPSA WG of the IETF.
   XML: N/A, the requested URI is an XML namespace.

Palmero, et al.          Expires 26 October 2024               [Page 53]
Internet-Draft                   DMALMO                       April 2024

7.2.  The YANG Module Names Registry

   This document registers YANG modules in the YANG Module Names
   registry [RFC7950].  Following the format in [RFC7950], the
   registrations defined below are requested:

   name: ietf-almo
   namespace: urn:ietf:params:xml:ns:yang:ietf-almo
   maintained by IANA: N
   prefix: ietf-almo
   reference: RFC XXXX

   name: ietf-almo-common
   namespace: urn:ietf:params:xml:ns:yang:ietf-almo-common
   maintained by IANA: N
   prefix: ietf-almo-common
   reference: RFC XXXX

   name: ietf-almo-assets
   namespace: urn:ietf:params:xml:ns:yang:ietf-almo-assets
   maintained by IANA: N
   prefix: ietf-almo-asset
   reference: RFC XXXX

   name: ietf-almo-entitlements
   namespace: urn:ietf:params:xml:ns:yang:ietf-almo-entitlements
   maintained by IANA: N
   prefix: ietf-almo-entitlements
   reference: RFC XXXX

   name: ietf-almo-feature
   namespace: urn:ietf:params:xml:ns:yang:ietf-almo-feature
   maintained by IANA: N
   prefix: ietf-almo-feature
   reference: RFC XXXX

   name: ietf-almo-usage
   namespace: urn:ietf:params:xml:ns:yang:ietf-almo-usage
   maintained by IANA: N
   prefix: ietf-almo-usage
   reference: RFC XXXX

   name: ietf-almo-event-report
   namespace: urn:ietf:params:xml:ns:yang:ietf-almo-event-report
   maintained by IANA: N
   prefix: ietf-almo-event
   reference: RFC XXXX

Palmero, et al.          Expires 26 October 2024               [Page 54]
Internet-Draft                   DMALMO                       April 2024

   name: ietf-almo-organization
   namespace: urn:ietf:params:xml:ns:yang:ietf-almo-organization
   maintained by IANA: N
   prefix: ietf-almo-organization
   reference: RFC XXXX

   name: ietf-almo-user
   namespace: urn:ietf:params:xml:ns:yang:ietf-almo-user
   maintained by IANA: N
   prefix: ietf-almo-user
   reference: RFC XXXX

8.  References

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

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

8.2.  Informative References

   [I-D.draft-palmero-opsawg-ps-almo-00]
              Palmero, M., Brockners, F., Kumar, S., Cardona, C., and D.
              Lopez, "Asset Lifecycle Management and Operations, Problem
              Statement", Work in Progress, Internet-Draft, draft-
              palmero-opsawg-ps-almo-00, 29 June 2023,
              <https://datatracker.ietf.org/doc/html/draft-palmero-
              opsawg-ps-almo-00>.

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

   [RFC6241]  Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
              and A. Bierman, Ed., "Network Configuration Protocol
              (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
              <https://www.rfc-editor.org/rfc/rfc6241>.

   [RFC7950]  Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
              RFC 7950, DOI 10.17487/RFC7950, August 2016,
              <https://www.rfc-editor.org/rfc/rfc7950>.

Palmero, et al.          Expires 26 October 2024               [Page 55]
Internet-Draft                   DMALMO                       April 2024

   [RFC8040]  Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
              Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
              <https://www.rfc-editor.org/rfc/rfc8040>.

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

   [RFC9179]  Hopps, C., "A YANG Grouping for Geographic Locations",
              RFC 9179, DOI 10.17487/RFC9179, February 2022,
              <https://www.rfc-editor.org/rfc/rfc9179>.

   [RFC9472]  Lear, E. and S. Rose, "A YANG Data Model for Reporting
              Software Bills of Materials (SBOMs) and Vulnerability
              Information", RFC 9472, DOI 10.17487/RFC9472, October
              2023, <https://www.rfc-editor.org/rfc/rfc9472>.

Change log

   RFC Editor Note: This section is to be removed during the final
   publication of the document.

   version 01

   *  DMALMO data models will be adjusted once the terminology of the
      core IVY WG data models is agreed.

   version 00

   *  Initial version of DMALMO, based on ALMO version 01 and DMLMO
      version 10.

Acknowledgments

   This document was created by meaningful contributions from Josh Suhr,
   Eric Vyncke, Yannis Viniotis, Nagendra Kumar Nainar, Yenu Gobena,
   Dhiren Tailor, Jan Lindblad and Shwetha Bhandari.

   The authors wish to thank Gonzalo Salgueiro, Martin Beverley, Mohamed
   Boucadair, Ignacio Dominguez Martinez, and many others for their
   helpful comments and suggestions.

Palmero, et al.          Expires 26 October 2024               [Page 56]
Internet-Draft                   DMALMO                       April 2024

Appendix A

   Hardware network inventory is described as part of network topology
   which is defined in [RFC8345], it has been explored in several IETF
   work as it might need an extension for some of the use cases that
   need to consume inventory information.  This is the case for ALMO and
   DMALMO, as assets are defined as hardware, software or even service
   instances.

   This section summarizes and provides an example with the changes to
   make DMALMO compatible to any future changes that will come as part
   of the current inventory discussions and decisions.

   DMLMO version -09 provided the approach to make DMALMO independent
   from the network inventory discussions, providing a way to consume
   any inventory management module(s).  Version -09 contains changes to
   accommodate ietf-almo-assets, to any other inventory module that
   might be required.

   The following example considers iana-hardware and ietf-network-
   inventory YANG modules as inventory YANG modules to consider.  It
   could include others, i.e., openconfig-platform.

   <CODE BEGINS> file "iana-hardware@.yang"
   module iana-hardware {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:iana-hardware";
     prefix ianahw;

     organization "IANA";
     contact
       "        Internet Assigned Numbers Authority

        Postal: ICANN
                12025 Waterfront Drive, Suite 300
                Los Angeles, CA  90094-2536
                United States of America

        Tel:    +1 310 301 5800
        E-Mail: iana@iana.org>";

     description
       "IANA-defined identities for hardware class.

        The latest revision of this YANG module can be obtained from
        the IANA website.

        Requests for new values should be made to IANA via

Palmero, et al.          Expires 26 October 2024               [Page 57]
Internet-Draft                   DMALMO                       April 2024

        email (iana@iana.org).

        Copyright (c) 2018 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 Simplified 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).

        The initial version of this YANG module is part of RFC 8348;
        see the RFC itself for full legal notices.";
     reference
       "https://www.iana.org/assignments/yang-parameters";

     revision 2018-03-13 {
       description
         "Initial revision.";
       reference
         "RFC 8348: A YANG Data Model for Hardware Management";
     }

     /*
      * Identities
      */

     identity hardware-class {
       description
         "This identity is the base for all hardware class
          identifiers.";
     }

     identity unknown {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is unknown
          to the server.";
     }

     identity chassis {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is an
          overall container for networking equipment.  Any class of
          physical component, except a stack, may be contained within a

Palmero, et al.          Expires 26 October 2024               [Page 58]
Internet-Draft                   DMALMO                       April 2024

          chassis; a chassis may only be contained within a stack.";
     }

     identity backplane {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is some sort
          of device for aggregating and forwarding networking traffic,
          such as a shared backplane in a modular ethernet switch.  Note
          that an implementation may model a backplane as a single
          physical component, which is actually implemented as multiple
          discrete physical components (within a chassis or stack).";
     }

     identity container {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is capable
          of containing one or more removable physical entities,
          possibly of different types.  For example, each (empty or
          full) slot in a chassis will be modeled as a container.  Note
          that all removable physical components should be modeled
          within a container component, such as field-replaceable
          modules, fans, or power supplies.  Note that all known
          containers should be modeled by the agent, including empty
          containers.";
     }

     identity power-supply {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is a
          power-supplying component.";
     }

     identity fan {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is a fan or
          other heat-reduction component.";
     }

     identity sensor {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is some sort
          of sensor, such as a temperature sensor within a router
          chassis.";

Palmero, et al.          Expires 26 October 2024               [Page 59]
Internet-Draft                   DMALMO                       April 2024

     }

     identity module {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is some sort
          of self-contained sub-system.  If a module component is
          removable, then it should be modeled within a container

          component; otherwise, it should be modeled directly within
          another physical component (e.g., a chassis or another
          module).";
     }

     identity port {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is some sort
          of networking port capable of receiving and/or transmitting
          networking traffic.";
     }

     identity stack {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is some sort
          of super-container (possibly virtual) intended to group
          together multiple chassis entities.  A stack may be realized
          by a virtual cable, a real interconnect cable attached to
          multiple chassis, or multiple interconnect cables.  A stack
          should not be modeled within any other physical components,
          but a stack may be contained within another stack.  Only
          chassis components should be contained within a stack.";
     }

     identity cpu {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is some sort
          of central processing unit.";
     }

     identity energy-object {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is some sort
          of energy object, i.e., it is a piece of equipment that is
          part of or attached to a communications network that is

Palmero, et al.          Expires 26 October 2024               [Page 60]
Internet-Draft                   DMALMO                       April 2024

          monitored, it is controlled, or it aids in the management of
          another device for Energy Management.";
     }

     identity battery {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is some sort
          of battery.";
     }

     identity storage-drive {
       base ianahw:hardware-class;
       description
         "This identity is applicable if the hardware class is some sort
          of component with data storage capability as its main
          functionality, e.g., hard disk drive (HDD), solid-state device
          (SSD), solid-state hybrid drive (SSHD), object storage device
          (OSD), or other.";
     }
   <CODE ENDS>

   The YANG modules ietf-almo-example-mapping-ietf-network-inventory and
   ietf-almo-example-mapping-openconfig-platform make the import of the
   inventory module(s) and augment the ietf-almo-assets YANG module to
   include inventory attributes to the asset identity.

   For this practice, ietf-almo-assets.yang, removes vendor, name,
   description, pid, serial-number, vid, mac-address, ip-address,
   entity-name, product-description, udi, transparency-info as these and
   similar properties are expected to be managed using other inventory
   mechanism.

   This process requires to include a mapping YANG module per imported
   inventory YANG module.

   Module ietf-almo-example-mapping-ietf-network-inventory, makes the
   mapping between ietf-network-inventory and ietf-almo-assets,
   augmenting asset identity:

   <CODE BEGINS>
     file "ietf-almo-example-mapping-ietf-network-inventory@2023-10-23.yang"
   module ietf-almo-example-mapping-ietf-network-inventory {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-almo-example-mapping-ietf-network-inventory";
     prefix ietf-almo-example-map-ietf;

     import ietf-almo {

Palmero, et al.          Expires 26 October 2024               [Page 61]
Internet-Draft                   DMALMO                       April 2024

       prefix ietf-almo;
     }
     import ietf-almo-assets {
       prefix ietf-almo-asset;
     }
     import ietf-network-inventory {
       prefix ni;
     }
     organization
       "IETF OPSA (Operations and Management Area) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
        WG List:  <mailto:opsawg@ietf.org>
        Editor:  Jan Lindblad
                 <mailto:jlindbla@cisco.com>
        Editor:  Marisol Palmero
                 <mailto:mpalmero@cisco.com>";

     description
       "This YANG module maps the IETF LMO asset concept to the
        IETF network inventory framework.

        Copyright (c) 2021 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 Simplified BSD License set
        forth in Section 4.c of the IETF Trust's Legal Provisions

        Relating to IETF Documents
        (https://trustee.ietf.org/license-info).

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

     revision 2023-10-23 {
       description
         "Renamed all references from LMO to ALMO. Refer to
         DMLMO draft";
       reference
         "RFC XXXX: ALMO YANG Model";
     }

     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
       when "derived-from-or-self(../ietf-almo:almo-class,'ietf-almo-asset:asset')";

Palmero, et al.          Expires 26 October 2024               [Page 62]
Internet-Draft                   DMALMO                       April 2024

       choice mapping-type {
         // config true;
         description
           "mapping type description";
         case network-element {
           leaf network-element-ref {
             type leafref {
               path "/ni:network-inventory/ni:network-elements/"
               + "ni:network-element/ni:uuid";
             }
             description
               "network element reference description";
           }
         }
         case component {
           leaf component-network-element-ref {
             type leafref {
               path "/ni:network-inventory/ni:network-elements/"
               + "ni:network-element/ni:uuid";
             }
             description
               "component network element reference description";
           }
           leaf component-ref {
             type leafref {
               path "/ni:network-inventory/ni:network-elements/"
               + "ni:network-element"
               + "[ni:uuid = current()/../network-element-ref]/"
               + "ni:components/ni:component/ni:uuid";
             }
             description
               "component reference description";
             }
         }
         case rack {
           leaf rack-equipment-room-ref {
             type leafref {
               path "/ni:network-inventory/ni:equipment-rooms/"
               + "ni:equipment-room/ni:uuid";
             }
             description
               "rack equipment room reference description";
           }
           leaf rack-ref {
             type leafref {
               path "/ni:network-inventory/ni:equipment-rooms/"
               + "ni:equipment-room"
               + "[ni:uuid = current()/../rack-equipment-room-ref]/"

Palmero, et al.          Expires 26 October 2024               [Page 63]
Internet-Draft                   DMALMO                       April 2024

               + "ni:racks/ni:rack/ni:uuid";
             }
             description
               "rack reference description";
           }
         }
       }

       description
         "This adds a reference from LMO instances of class 'asset'
          to the IETF network inventory tree.";
     }
   <CODE ENDS>

   Module ietf-almo-example-mapping-openconfig-platform, includes the
   mapping between openconfig-platform and ietf-almo-assets, augmenting
   asset identity:

   <CODE BEGINS>
     file "ietf-almo-example-mapping-openconfig-platform@2023-10-23.yang"
   module ietf-almo-example-mapping-openconfig-platform {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-almo-example-mapping-openconfig-platform";
     prefix ietf-almo-example-map-oc;

     import ietf-almo {
       prefix ietf-almo;
     }
     import ietf-almo-assets {
       prefix ietf-almo-asset;
     }
     // For the show case, import statement should be uncommented,
     // import openconfig-platform {
     //  prefix oc-platform;
     // }
     organization
       "IETF OPSA (Operations and Management Area) Working Group";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
        WG List:  <mailto:opsawg@ietf.org>
        Editor:  Jan Lindblad
                 <mailto:jlindbla@cisco.com>
        Editor:  Marisol Palmero
                 <mailto:mpalmero@cisco.com>";
     description
       "This YANG module maps the IETF LMO asset concept to the
        OpenConfig platform framework.

Palmero, et al.          Expires 26 October 2024               [Page 64]
Internet-Draft                   DMALMO                       April 2024

        Copyright (c) 2021 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 Simplified BSD License set
        forth in Section 4.c of the IETF Trust's Legal Provisions

        Relating to IETF Documents
        (https://trustee.ietf.org/license-info).

        This version of this YANG module is part of RFC XXXX
        (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
        for full legal notices.";
     revision 2023-10-23 {
       description
         "Renamed all references from LMO to ALMO. Refer to
         DMLMO draft";
       reference
         "RFC XXXX: ALMO YANG Model";
     }

     augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
       when "derived-from-or-self(../ietf-almo:almo-class,'ietf-almo-asset:asset')";

       leaf oc-component-ref {
         type string;
         config true;
         // leafref path "/oc-platform:components/oc-platform:component/"
         // + "oc-platform:name";
         // this is simplified version to show case
         description "simplified example to include component reference";
       }

       description
         "This adds a reference from LMO instances of class 'asset'
          to the OpenConfig platform tree.";
     }
   <CODE ENDS>

   openconfig-platform.yang is not included in the section for
   simplicity of the output.

   Once compilation is applied to the YANG modules, the following
   configuration, considers network element "router2" as a hardware
   network element, which is described under network-inventory YANG
   module:

Palmero, et al.          Expires 26 October 2024               [Page 65]
Internet-Draft                   DMALMO                       April 2024

   network-inventory network-elements network-element 22222 name router2
   hardware-rev 1.1 software-rev 17.1 mfg-name cisco serial-number
   AF123456 product-name ASR1k components component fan part-number
   678678 components component psu part-number 654321

   "router2" asset identity is augmented including attributes from ietf-
   network-inventory(i.e. rack-equipment-room-ref, rack-ref, network-
   element-ref, etc) and any other imported YANG module, i.e.
   openconfig-platform inventory YANG modules, with oc-component-ref.

   lmo0(config)#lmos lmo asset inst router2 ?  Possible completions:
   activation-date age aggregation capture-info component-network-
   element-ref
   component-ref ietf-almo-asset:deployment-mode ietf-almo-
   feature:features install-location interfaces licenses network-
   element-ref number-of-instances oc-component-ref parent
   platform-dependency-os rack-equipment-room-ref rack-ref role sign-of-
   life-timestamp
   software-type software-version tags

   Changes in future versions of DMLMO, might require one unique import
   statement in the mapping YANG module, from another inventory YANG
   module.

Authors' Addresses

   Marisol Palmero
   Cisco Systems
   Email: mpalmero@cisco.com

   Frank Brockners
   Cisco Systems
   Email: fbrockne@cisco.com

   Sudhendu Kumar
   NC State University
   Email: skumar23@ncsu.edu

   Camilo Cardona
   NTT
   Email: camilo@ntt.net

   Diego Lopez
   Telefonica I+D

Palmero, et al.          Expires 26 October 2024               [Page 66]
Internet-Draft                   DMALMO                       April 2024

   Email: diego.r.lopez@telefonica.com

Palmero, et al.          Expires 26 October 2024               [Page 67]