<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.25 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-palmero-ivy-dmalmo-02" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="DMALMO">Data Model for Asset Lifecycle Management and Operations</title>

    <author initials="M." surname="Palmero" fullname="Marisol Palmero">
      <organization>Cisco Systems</organization>
      <address>
        <email>mpalmero@cisco.com</email>
      </address>
    </author>
    <author initials="F." surname="Brockners" fullname="Frank Brockners">
      <organization>Cisco Systems</organization>
      <address>
        <email>fbrockne@cisco.com</email>
      </address>
    </author>
    <author initials="S." surname="Kumar" fullname="Sudhendu Kumar">
      <organization>NC State University</organization>
      <address>
        <email>skumar23@ncsu.edu</email>
      </address>
    </author>
    <author initials="C." surname="Cardona" fullname="Camilo Cardona">
      <organization>NTT</organization>
      <address>
        <email>camilo@ntt.net</email>
      </address>
    </author>
    <author initials="D." surname="Lopez" fullname="Diego Lopez">
      <organization>Telefonica I+D</organization>
      <address>
        <email>diego.r.lopez@telefonica.com</email>
      </address>
    </author>

    <date year="2024" month="July" day="08"/>

    <area>operations</area>
    <workgroup>IVY Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


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

<t>This model is based on the information model introduced in "Asset Lifecycle Management and Operations: A Problem Statement" (ALMO) <xref target="I-D.draft-palmero-opsawg-ps-almo-00"/> IETF draft.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>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) <xref target="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.</t>

<section anchor="requirements-language"><name>Requirements language</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

</section>
</section>
<section anchor="terminology"><name>Terminology</name>

<t>The document makes use of the following terms:</t>

<t><list style="symbols">
  <t>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.</t>
  <t>Features: are options or functional capabilities offered by an asset.</t>
  <t>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.</t>
  <t>Lifecycle Management and Operations (LMO) connects to:
  <list style="numbers">
      <t>Assets as a generalized entity subject to Lifecycle Management (LCM).</t>
      <t>Entitlements as the essential policy root for LCM.</t>
      <t>Metrics as the evidence for LCM transitions.</t>
      <t>Reports (no incidents) as the way of collecting input from users.</t>
    </list></t>
  <t>Usage: refers to how an asset is being used (e.g., which features are used).</t>
</list></t>

<t>Abbreviations:</t>

<t><list style="symbols">
  <t>ALMO: Asset Lifecycle Management and Operations</t>
  <t>EOL: End of Life</t>
  <t>EoS: End of Support</t>
  <t>LCM: Lifecycle Management</t>
  <t>PID: Product Identifier</t>
</list></t>

</section>
<section anchor="motivation"><name>Motivation</name>

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

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

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

<t>DMALMO offers a common data model to implement ALMO data.</t>

</section>
<section anchor="data-models"><name>Data Models</name>

<section anchor="overview"><name>Overview</name>

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

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

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

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

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

<t>The different modules included in DMALMO are:</t>

<t><list style="symbols">
  <t>Aggregated Assets Module</t>
</list></t>

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

<t><list style="symbols">
  <t>Entitlements Module</t>
</list></t>

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

<t><list style="symbols">
  <t>Features Module</t>
</list></t>

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

<t><list style="symbols">
  <t>Usage Module</t>
</list></t>

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

<t>As part of the ALMO future extension modules, DMALMO considers:</t>

<t><list style="symbols">
  <t>Event Report Module</t>
  <t>Organization Module, and</t>
  <t>User Module</t>
</list></t>

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

</section>
<section anchor="tree-diagrams-of-almo-modules"><name>Tree Diagrams of ALMO Modules</name>

<section anchor="aggregated-assets-module"><name>Aggregated Assets Module</name>

<t>This specification uses <xref target="RFC9179"/>, <xref target="RFC9472"/>
    module: ietf-almo-assets</t>

<figure><artwork><![CDATA[
  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
]]></artwork></figure>

</section>
<section anchor="entitlements-module"><name>Entitlements Module</name>

<figure><artwork><![CDATA[
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
]]></artwork></figure>

</section>
<section anchor="features-module"><name>Features Module</name>

<figure><artwork><![CDATA[
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
]]></artwork></figure>

</section>
<section anchor="usage-module"><name>Usage Module</name>

<figure><artwork><![CDATA[
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
]]></artwork></figure>

</section>
<section anchor="event-report-module"><name>Event Report Module</name>
<figure><artwork><![CDATA[
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
]]></artwork></figure>

</section>
<section anchor="organization-module"><name>Organization Module</name>
<figure><artwork><![CDATA[
module: ietf-almo-organization

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw address?      string
    +--rw department?   boolean
]]></artwork></figure>

</section>
<section anchor="user-module"><name>User Module</name>
<figure><artwork><![CDATA[
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
]]></artwork></figure>

</section>
</section>
<section anchor="yang-data-models-of-almo-modules"><name>YANG data models of ALMO Modules</name>

<section anchor="lmo-common-module"><name>LMO Common Module</name>

<figure><artwork><![CDATA[
<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
     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
      "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
          "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";
  }

  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";
  }
  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 
      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";
  }
  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";
  }
  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 { 
    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;
    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>
}
]]></artwork></figure>

</section>
<section anchor="lmo-module"><name>LMO Module</name>

<figure><artwork><![CDATA[
<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;
  }
  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 {
        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
              "Identifier for original source of this data";
          }
        }
      }
    }
  }
<CODE ENDS>
} ### Aggregated Asset Module

<CODE BEGINS> file "ietf-almo-assets@2023-10-23.yang"
module ietf-almo-assets {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-almo-assets";
  prefix ietf-almo-asset;
  import ietf-almo-common {
    prefix ietf-almo-common;
  }
  import ietf-almo {
    prefix ietf-almo;
  }
  import ietf-yang-types {
    prefix yang;
  }
  import ietf-geo-location {
    prefix ietf-geo-location;
  }
  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 concept asset aggregation
     and platform dependency of an asset.

     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 asset {
    base ietf-almo-common:almo-class;
    description 
      "An asset is a class of almo that represents a 
      hardware, software, application, or service component.
      An asset can also be physical or virtual";
  }
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class,'ietf-almo-asset:asset')";
    description
      "Assets container includes attributes that add the aggregated
       view";
    // Removed vendor, name, description, pid, serial-number, vid, 
    // mac-address, ip-address, entity-name, product-description, udi,
    // transparency-info, from version 08;
    // as these and similar properties are expected to be managed using
    // other inventory mechanisms. Maybe more leafs should be removed.
    leaf role {
      type identityref {
        base ietf-almo-common: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";
    }
    leaf aggregation {
      type boolean;
      must "../number-of-instances = 1 or current() = 'true'";
      default false;
      description
        "Asset aggregation; e.g., false (default) or true";
    }
    leaf number-of-instances {
      type uint32;
      default 1;
      description
        "Number of instances or endpoints covered by the aggregated
          asset. If different from 1, it should enforce that
          aggregation attribute is set to true";
    }
    leaf platform-dependency-os {
      type identityref {
          base ietf-almo-common:platform-dependency-os;  
      }
      description
        "Operating system for the asset to be deployed."; 
    }
    container install-location {
      uses ietf-geo-location:geo-location;
      description
        "Physical installed location of the product. Location is
          provided based on what customer/user configures";
    }
    leaf deployment-mode {
      type identityref {
        base ietf-almo-common:deployment-mode;
      }
      description
        "Deployment mode for the asset, if applicable; e.g.,
          HA cluster, virtual appliance, etc.";
    }
    leaf activation-date {
      type yang:date-and-time;
      description
        "Date of asset activation or initial contact";
    }
    leaf software-version {
      type string;
      description
        "Software version running on the hardware device or
          software component";
    }
    container hotfixes {
      config false;
      description "list of hotfixes";
      list hostfix {
      description
        "List of hotfixes that have been installed"; 
        leaf version {
          type identityref {
            base ietf-almo-common:version;
          }
          description
            "It includes the first hotfix installed";
        }
        leaf order {
          type uint8;
          description
            "It refers to the order of how the hotfixes have been
              installed, range 0..100";
        }
      }
    }
    leaf software-type {
      type string;
      description
        "Software type or Operating System";
    }
    leaf sign-of-life-timestamp {
      type yang:date-and-time;
      description
        "Date of last contact";
    }
    leaf tags {
      type string;
      description
        "Comma-separated descriptive tags for this asset";
    }
  }
<CODE ENDS>
}
]]></artwork></figure>

</section>
<section anchor="entitlements-module-1"><name>Entitlements Module</name>

<figure><artwork><![CDATA[
<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.

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

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

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

        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";
                }
                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
            // 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 {
                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>
}
]]></artwork></figure>

</section>
<section anchor="features-module-1"><name>Features Module</name>

<figure><artwork><![CDATA[
<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 
     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";
          }
          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
        "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";
      }
      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";
      }    
      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>
}
]]></artwork></figure>

</section>
<section anchor="usage-module-1"><name>Usage Module</name>

<figure><artwork><![CDATA[
<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;
  }
  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;
    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 {
        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";
        }
        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 
            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>
}
]]></artwork></figure>

</section>
<section anchor="event-report-module-1"><name>Event Report Module</name>

<figure><artwork><![CDATA[
<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 {
    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, "+
         " '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";
    }
    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 {
           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>
} ### Organization Module

<CODE BEGINS> file "ietf-almo-organization@2023-10-23.yang"
module ietf-almo-organization {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-almo-organization";
  prefix ietf-almo-organization;
  import ietf-almo-common {
    prefix ietf-almo-common;
  }
  import ietf-almo {
    prefix ietf-almo;
  }
  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 defines the organization 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";
  }

  identity organization {
    base ietf-almo-common:almo-class;
    description 
    "An organization is a class of almo that represents an entity 
    such as a company, an institution, or an association, 
    comprising one or more people and having a particular 
    purpose";
  }
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class, "+
         " 'ietf-almo-organization:organization')";
    description
      "organization attributes";

    leaf address {
      type string;
      description 
        "organization address";
    }
    leaf department {
      type boolean;
      default false;
      description
        "How to categorize the organization";
    }
    //Fill more leafs for organizations here...
  }
<CODE ENDS>
}
]]></artwork></figure>

</section>
<section anchor="user-module-1"><name>User Module</name>

<figure><artwork><![CDATA[
<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;
  }
  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";
  }

  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";
          }
        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";
          }
          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>
}
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="deployment-considerations"><name>Deployment Considerations</name>

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

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

<t><list style="symbols">
  <t>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.</t>
  <t>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 <xref target="RFC6241"/>, RESTCONF <xref target="RFC8040"/>, streaming telemetry, etc. OpenAPI specification might also help to consume ALMO metrics.</t>
  <t>How the configuration of assets should be done.</t>
</list></t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The security considerations mentioned in section 17 of <xref target="RFC7950"/> apply.</t>

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

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

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="the-ietf-xml-registry"><name>The IETF XML Registry</name>

<t>This document registers URIs in the IETF XML registry <xref target="RFC3688"/>. Following the format in <xref target="RFC3688"/>, the registrations defined below are requested:</t>

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

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

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

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

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

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

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

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

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

</section>
<section anchor="the-yang-module-names-registry"><name>The YANG Module Names Registry</name>

<t>This document registers YANG modules in the YANG Module Names registry <xref target="RFC7950"/>. Following the format in <xref target="RFC7950"/>, the registrations defined below are requested:</t>

<t>name: ietf-almo <br />
namespace: urn:ietf:params:xml:ns:yang:ietf-almo <br />
maintained by IANA: N <br />
prefix: ietf-almo <br />
reference: RFC XXXX <br /></t>

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

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

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

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

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

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

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

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

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC2119'>
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname='S. Bradner' initials='S.' surname='Bradner'/>
    <date month='March' year='1997'/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name='BCP' value='14'/>
  <seriesInfo name='RFC' value='2119'/>
  <seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>

<reference anchor='RFC8174'>
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname='B. Leiba' initials='B.' surname='Leiba'/>
    <date month='May' year='2017'/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name='BCP' value='14'/>
  <seriesInfo name='RFC' value='8174'/>
  <seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>




    </references>

    <references title='Informative References'>




<reference anchor='I-D.draft-palmero-opsawg-ps-almo-00'>
   <front>
      <title>Asset Lifecycle Management and Operations, Problem Statement</title>
      <author fullname='Marisol Palmero' initials='M.' surname='Palmero'>
         <organization>Cisco Systems</organization>
      </author>
      <author fullname='Frank Brockners' initials='F.' surname='Brockners'>
         <organization>Cisco Systems</organization>
      </author>
      <author fullname='Sudhendu Kumar' initials='S.' surname='Kumar'>
         <organization>NC State University</organization>
      </author>
      <author fullname='Camilo Cardona' initials='C.' surname='Cardona'>
         <organization>NTT</organization>
      </author>
      <author fullname='Diego Lopez' initials='D.' surname='Lopez'>
         <organization>Telefonica I+D</organization>
      </author>
      <date day='29' month='June' year='2023'/>
      <abstract>
	 <t>   This document presents a problem statement for assets lifecycle
   management and operations.  It describes the framework, the
   motivation and requirements for asset-centric metrics including but
   not limited to asset adoption, usability, entitlements, supported
   features and capabilities, enabled features and capabilities.  An
   information model is proposed whose primary objective is to measure
   and improve the network operators&#x27; experience along the lifecycle
   journey, from technical requirements and technology selection through
   renewal, including the end of life of an asset.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-palmero-opsawg-ps-almo-00'/>
   
</reference>

<reference anchor='RFC9179'>
  <front>
    <title>A YANG Grouping for Geographic Locations</title>
    <author fullname='C. Hopps' initials='C.' surname='Hopps'/>
    <date month='February' year='2022'/>
    <abstract>
      <t>This document defines a generic geographical location YANG grouping. The geographical location grouping is intended to be used in YANG data models for specifying a location on or in reference to Earth or any other astronomical object.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9179'/>
  <seriesInfo name='DOI' value='10.17487/RFC9179'/>
</reference>

<reference anchor='RFC9472'>
  <front>
    <title>A YANG Data Model for Reporting Software Bills of Materials (SBOMs) and Vulnerability Information</title>
    <author fullname='E. Lear' initials='E.' surname='Lear'/>
    <author fullname='S. Rose' initials='S.' surname='Rose'/>
    <date month='October' year='2023'/>
    <abstract>
      <t>To improve cybersecurity posture, automation is necessary to locate the software a device is using, whether that software has known vulnerabilities, and what, if any, recommendations suppliers may have. This memo extends the Manufacturer User Description (MUD) YANG schema to provide the locations of software bills of materials (SBOMs) and vulnerability information by introducing a transparency schema.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9472'/>
  <seriesInfo name='DOI' value='10.17487/RFC9472'/>
</reference>

<reference anchor='RFC6241'>
  <front>
    <title>Network Configuration Protocol (NETCONF)</title>
    <author fullname='R. Enns' initials='R.' role='editor' surname='Enns'/>
    <author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'/>
    <author fullname='J. Schoenwaelder' initials='J.' role='editor' surname='Schoenwaelder'/>
    <author fullname='A. Bierman' initials='A.' role='editor' surname='Bierman'/>
    <date month='June' year='2011'/>
    <abstract>
      <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6241'/>
  <seriesInfo name='DOI' value='10.17487/RFC6241'/>
</reference>

<reference anchor='RFC8040'>
  <front>
    <title>RESTCONF Protocol</title>
    <author fullname='A. Bierman' initials='A.' surname='Bierman'/>
    <author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'/>
    <author fullname='K. Watsen' initials='K.' surname='Watsen'/>
    <date month='January' year='2017'/>
    <abstract>
      <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8040'/>
  <seriesInfo name='DOI' value='10.17487/RFC8040'/>
</reference>

<reference anchor='RFC7950'>
  <front>
    <title>The YANG 1.1 Data Modeling Language</title>
    <author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'/>
    <date month='August' year='2016'/>
    <abstract>
      <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7950'/>
  <seriesInfo name='DOI' value='10.17487/RFC7950'/>
</reference>

<reference anchor='RFC3688'>
  <front>
    <title>The IETF XML Registry</title>
    <author fullname='M. Mealling' initials='M.' surname='Mealling'/>
    <date month='January' year='2004'/>
    <abstract>
      <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
    </abstract>
  </front>
  <seriesInfo name='BCP' value='81'/>
  <seriesInfo name='RFC' value='3688'/>
  <seriesInfo name='DOI' value='10.17487/RFC3688'/>
</reference>

<reference anchor='RFC8345'>
  <front>
    <title>A YANG Data Model for Network Topologies</title>
    <author fullname='A. Clemm' initials='A.' surname='Clemm'/>
    <author fullname='J. Medved' initials='J.' surname='Medved'/>
    <author fullname='R. Varga' initials='R.' surname='Varga'/>
    <author fullname='N. Bahadur' initials='N.' surname='Bahadur'/>
    <author fullname='H. Ananthakrishnan' initials='H.' surname='Ananthakrishnan'/>
    <author fullname='X. Liu' initials='X.' surname='Liu'/>
    <date month='March' year='2018'/>
    <abstract>
      <t>This document defines an abstract (generic, or base) YANG data model for network/service topologies and inventories. The data model serves as a base model that is augmented with technology-specific details in other, more specific topology and inventory data models.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8345'/>
  <seriesInfo name='DOI' value='10.17487/RFC8345'/>
</reference>




    </references>


<section numbered="false" anchor="change-log"><name>Change log</name>

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

<t>version 02</t>

<t><list style="symbols">
  <t>Added Appendix B for Entitlements Use Case.</t>
</list></t>

<t>version 01</t>

<t><list style="symbols">
  <t>DMALMO data models will be adjusted once the terminology of the core IVY WG data models is agreed.</t>
</list></t>

<t>version 00</t>

<t><list style="symbols">
  <t>Initial version of DMALMO, based on ALMO version 01 and DMLMO version 10.</t>
</list></t>

</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

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

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

</section>
<section numbered="false" anchor="appendix-a-dmalmo-independent-of-any-based-inventory-yang-models"><name>Appendix A: DMALMO independent of any based inventory YANG models</name>

<t>Hardware network inventory is described as part of network topology which is defined in <xref target="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.</t>

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

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

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

<figure><artwork><![CDATA[
<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
     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
       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.";
  }

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


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

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

  import iana-hardware {
    prefix ianahw;
    reference
      "RFC 8348: A YANG Data Model for Hardware Management.";
  }

  import ietf-inet-types {
    prefix inet;
  }

  organization
    "IETF CCAMP Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ccamp/>
     WG List:  <mailto:ccamp@ietf.org>

     Editor:   Chaode Yu
               <yuchaode@huawei.com>

     Editor:   Italo Busi
               <italo.busi@huawei.com>

     Editor:   Aihua Guo
               <aihuaguo.ietf@gmail.com>

     Editor:   Sergio Belotti
               <sergio.belotti@nokia.com>

     Editor:   Jean-Francois Bouquier
               <jeff.bouquier@vodafone.com>

     Editor:   Fabio Peruzzini
               <fabio.peruzzini@telecomitalia.it>";

  description
    "This module defines a model for retrieving network inventory.
    The model fully conforms to the Network Management
    Datastore Architecture (NMDA).

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

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

    This version of this YANG module is part of RFC XXXX; 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.";

  // RFC Ed.: replace XXXX with actual RFC number and remove this
  // note.
  // RFC Ed.: update the date below with the date of RFC publication
  // and remove this note.

  revision 2022-07-11 {
    description
      "version 3.0.0";
    reference
      "draft-yg3bp-ccamp-inventory-yang-01: A YANG Data
      Model for Network Inventory.";
  }

  revision 2022-03-04 {
    description
      "version 3.0.0";
    reference
      "draft-yg3bp-ccamp-inventory-yang-00: A YANG Data
      Model for Network Inventory.";
  }

  revision 2021-11-09 {
    description
      "version 2.0.0";
    reference
      "draft-yg3bp-ccamp-optical-inventory-yang-00: A YANG Data
      Model for Optical Network Inventory.";
  }

  revision 2021-10-25 {
    description
      "Initial revision.";
    reference
      "draft-yg3bp-ccamp-optical-inventory-yang-00: A YANG Data
      Model for Optical Network Inventory.";
  }

  container network-inventory {
    config true;
    description
      "The top-level container for the network inventory
      information.";
    uses equipment-rooms-grouping;
    uses network-elements-grouping;
  }

  grouping common-entity-attributes {
    description
      "A set of attributes which are common to all the entities
      (e.g., component, equipment room) defined in this module.";
    leaf uuid {
      config true;
      type string;
      description
        "Uniquely identifies an entity (e.g., component).";
    }
    leaf name {
      type string;
      description
        "A name for an entity (e.g., component), as specified by
        a network manager, that provides a non-volatile 'handle'
        for the entity and that can be modified anytime during the
        entity lifetime.

        If no configured value exists, the server MAY set the value
        of this node to a locally unique value in the operational
        state.";
    }
    leaf description {
      type string;
      description "a textual description of inventory object";
    }
    leaf alias {
      type string;
      description
      "a alias name of inventory objects. This alias name can be
      specified by network manager.";
    }
  }

  grouping network-elements-grouping {
    description
      "The attributes of the network elements.";
    container network-elements {
      description
        "The container for the list of network elements.";
      list network-element {
        key uuid;
        description
          "The list of network elements within the network.";
        uses common-entity-attributes;
        container ne-location {
          description
            "To be added.";
          leaf-list equipment-room-name {
            type leafref {
              path "/ni:network-inventory/ni:equipment-rooms/" +
                   "ni:equipment-room/ni:name";
            }
            description
              "Names of equipment rooms where the NE is located.
              Please note that a NE could be located in several
              equipment rooms.";
          }
        }
        uses ne-specific-info-grouping;
        uses components-grouping;
      }
    }
  }

  grouping ne-specific-info-grouping {
    description
      "To be added.";
    leaf hardware-rev {
      type string;
      description
        "The vendor-specific hardware revision string for the NE.";
    }
    leaf firmware-rev {
      type string;
      description
        "The vendor-specific firmware revision string for the NE.";
    }
    leaf software-rev {
      type string;
      description
        "The vendor-specific software revision string for the NE.";
    }
    leaf mfg-name {
      type string;
      description "The name of the manufacturer of this NE";
    }
    leaf mfg-date {
      type yang:date-and-time;
      description "The date of manufacturing of the NE.";
    }
    leaf part-number {
      type string;
      description
        "The vendor-specific model name identifier string associated
         with this NE.  The preferred value is the customer-visible
         part number, which may be printed on the NE itself.";
    }
    leaf serial-number {
      type string;
      description
        "The vendor-specific serial number string for the NE";
    }
    leaf product-name {
      type string;
      description
        "indicates the vendor-spefic device type infomation.";
    }
  }

  grouping equipment-rooms-grouping {
    description
      "The attributes of the equipment rooms.";
    container equipment-rooms {
      description
        "The container for the list of equipment rooms.";
      list equipment-room {
        key uuid;
        description
          "The list of equipment rooms within the network.";
        uses common-entity-attributes;
        leaf location {
          type string;
          description
            "compared with the location information of the other
            inventory objects, a GIS address is preferred for
            equipment room";
        }
        container racks {
          description
            "To be added.";
          list rack {
            key uuid;
            description
              "The list of racks within an equipment room.";
            uses common-entity-attributes;
            uses rack-specific-info-grouping;
            list contained-chassis {
              key "ne-ref component-ref";
              description
                "The list of chassis within a rack.";
              leaf ne-ref {
                type leafref {
                  path "/ni:network-inventory/ni:network-elements"
                  + "/ni:network-element/ni:uuid";
                }
                description
                  "The reference to the network element containing
                  the chassis component.";
              }
              leaf component-ref {
                type leafref {
                  path "/ni:network-inventory/ni:network-elements"
                  + "/ni:network-element[ni:uuid"
                  + "=current()/../ne-ref]/ni:components"
                  + "/ni:component/ni:uuid";
                }
                description
                  "The reference to the chassis component within
                  the network element and contained by the rack.";
              }
            }
          }
        }
      }
    }
  }

  grouping rack-specific-info-grouping {
    description
      "To be added.";
    container rack-location {
      description
        "To be added.";
      leaf equipment-room-name {
        type leafref {
          path "/ni:network-inventory/ni:equipment-rooms"
          + "/ni:equipment-room/ni:name";
        }
        description
        "Name of equipment room where this rack is located.";
      }
      leaf row-number {
        type uint32;
        description
          "Identifies the row within the equipment room where
          the rack is located.";
      }
      leaf column-number {
        type uint32;
        description
          "Identifies the physical location of the rack within
          the column.";
      }
    }
    leaf rack-number {
      type uint32;
      description
        "An integer identifier of rack.";
    }
    leaf height {
      type uint16;
      units millimeter;
      description
        "To be added.";
    }
    leaf width {
      type uint16;
      units millimeter;
      description
        "To be added.";
    }
    leaf depth {
      type uint16;
      units millimeter;
      description
        "To be added.";
    }
    leaf max-voltage {
      type uint16;
      units volt;
      description
        "The maximum voltage could be supported by the rack.";
    }
  }

  grouping components-grouping {
    description
      "The attributes of the hardware components.";
    container components {
      description
        "The container for the list of components.";
      list component {
        key uuid;
        description
          "The list of components within a network element.";
        uses common-entity-attributes;
        leaf location {
          type string;
          description
            "To be added.

            In optical transport network, the location string is
            using the following pattern:
              '/ne=<nw-ne-name>[/r=<r_index>][/sh=<sh_index>
              [/s_sh=<s_sh_index> ...]][[/sl=<sl_index>
              [/s_sl=<s_sl_index> ...]][/p=<p_index> …]]'
            ";
        }
        leaf class {
          type identityref {
            base ianahw:hardware-class;
          }
          description
            "An indication of the general hardware type of the
             component.";
          reference
            "RFC 8348: A YANG Data Model for Hardware Management.";
        }
        leaf-list contained-child {
          type leafref {
            path "../ni:uuid";
          }
          description
            "The child components' identifier that are physically
            contained by this component.";
        }
        leaf parent-rel-pos {
          type int32 {
            range "0 .. 2147483647";
          }
          description
            "To be added.";
          reference
            "RFC 6933: Entity MIB (Version 4) -
                       entPhysicalParentRelPos";
        }
        container parent-references {
          description
            "To be added.";
          leaf equipment-room-uuid {
            type leafref {
              path "/ni:network-inventory/ni:equipment-rooms/" +
                   "ni:equipment-room/ni:uuid";
            }
            description
              "To be added.";
          }
          leaf ne-uuid {
            type leafref {
              path "/ni:network-inventory/ni:network-elements/" +
                   "ni:network-element/ni:uuid";
            }
            description
              "To be added.";
          }
          leaf rack-uuid {
            type leafref {
              path "/ni:network-inventory/ni:equipment-rooms/" +
                   "ni:equipment-room/ni:racks/ni:rack/ni:uuid";
            }
            description
              "To be added.";
          }
          container component-references {
            description
              "To be added.";
            list component-reference {
              key index;
              description
                "this list object is used to indicate its
                hierarchial parent components' identifier.
                This hierarchial relation can be found by index
                parameter. The topest parent component should be
                0-index.";
              leaf index {
                type uint8;
                description
                  "To be added.";
              }
              leaf class {
                type leafref {
                  path "../../../../ni:class";
                }
                description
                  "To be added.";
              }
              leaf uuid {
                type leafref {
                  path "../../../../ni:uuid";
                }
                description
                  "To be added.";
              }
            }
          }
        }
        leaf hardware-rev {
          type string;
          description
            "The vendor-specific hardware revision string for the
             component.  The preferred value is the hardware revision
             identifier actually printed on the component itself (if
             present).";
          reference
            "RFC 6933: Entity MIB (Version 4) -
                       entPhysicalHardwareRev";
        }
        leaf firmware-rev {
          type string;
          description
            "The vendor-specific firmware revision string for the
             component.";
          reference
            "RFC 6933: Entity MIB (Version 4) -
                       entPhysicalFirmwareRev";
        }
        leaf software-rev {
          type string;
          description
            "The vendor-specific software revision string for the
             component.";
          reference
            "RFC 6933: Entity MIB (Version 4) -
                       entPhysicalSoftwareRev";
        }
        leaf serial-num {
          type string;
          description
            "The vendor-specific serial number string for the
             component.  The preferred value is the serial number
             string actually printed on the component itself (if
             present).";
          reference
            "RFC 6933: Entity MIB (Version 4) -
            entPhysicalSerialNum";
        }
        leaf mfg-name {
          type string;
          description
            "The name of the manufacturer of this physical component.
             The preferred value is the manufacturer name string
             actually printed on the component itself (if present).

             Note that comparisons between instances of the
             'model-name', 'firmware-rev', 'software-rev', and
             'serial-num' nodes are only meaningful amongst
             components with the same value of 'mfg-name'.

             If the manufacturer name string associated with the
             physical component is unknown to the server, then this
             node is not instantiated.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalMfgName";
        }
        leaf part-number {
          type string;
          description
            "The vendor-specific model name identifier string
             associated with this physical component.  The preferred
             value is the customer-visible part number, which may be
             printed on the component itself.

             If the model name string associated with the physical
             component is unknown to the server, then this node is
             not instantiated.";
          reference
            "RFC 6933: Entity MIB (Version 4) -
            entPhysicalModelName";
        }
        leaf asset-id {
          type string;
          description
            "This node is a user-assigned asset tracking identifier
             for the component.

             A server implementation MAY map this leaf to the
             entPhysicalAssetID MIB object.  Such an implementation
             needs to use some mechanism to handle the differences in
             size and characters allowed between this leaf and
             entPhysicalAssetID.  The definition of such a mechanism
             is outside the scope of this document.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalAssetID";
        }
        leaf is-fru {
          type boolean;
          description
            "This node indicates whether or not this component is
             considered a 'field-replaceable unit' by the vendor.  If
             this node contains the value 'true', then this component
             identifies a field-replaceable unit.  For all components
             that are permanently contained within a
             field-replaceable unit, the value 'false' should be
             returned for this node.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalIsFRU";
        }
        leaf mfg-date {
          type yang:date-and-time;
          description
            "The date of manufacturing of the managed component.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalMfgDate";
        }
        leaf-list uri {
          type inet:uri;
          description
            "This node contains identification information about the
             component.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalUris";
        }
        uses component-specific-info-grouping;
      }
    }
  }

  grouping component-specific-info-grouping {
    description
      "In case if there are some missing attributes of component not
      defined by RFC8348. These attributes could be
      component-specific.
      Here we provide a extension structure for all the components
      we recognized. We will enrich these component specifc
      containers in the future.";
    choice component-class {
      description
        "To be added.";
      case chassis {
        when "./class = 'ianahw:chassis'";
        container chassis-specific-info {
          description
            "This container contains some attributes belong to
            chassis only.";
          uses chassis-specific-info-grouping;
        }
      }
      case container {
        when "./class = 'ianahw:container'";
        container slot-specific-info {
          description
            "This container contains some attributes belong to
            slot or sub-slot only.";
          uses slot-specific-info-grouping;
        }
      }
      case module {
        when "./ni:class = 'ianahw:module'";
        container board-specific-info {
          description
            "This container contains some attributes belong to
            board only.";
          uses board-specific-info-grouping;
        }
      }
      case port {
        when "./ni:class = 'ianahw:port'";
        container port-specific-info {
          description
            "This container contains some attributes belong to
            port only.";
          uses port-specific-info-grouping;
        }
      }
    //TO BE ADDED: transceiver
    }
  }

  grouping chassis-specific-info-grouping {
  //To be enriched in the future.
    description
      "To be added.";
  }

  grouping slot-specific-info-grouping {
  //To be enriched in the future.
    description
      "To be added.";
  }

  grouping board-specific-info-grouping {
  //To be enriched in the future.
    description
      "To be added.";
  }

  grouping port-specific-info-grouping {
  //To be enriched in the future.
    description
      "To be added.";
  }
<CODE ENDS>
}
]]></artwork></figure>

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

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

<t>This process requires to include a mapping YANG module per imported inventory YANG module.</t>

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

<figure><artwork><![CDATA[
<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 {
    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')";

    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]/"
            + "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>
}
]]></artwork></figure>

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

<figure><artwork><![CDATA[
<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.

     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>
}
]]></artwork></figure>

<t>openconfig-platform.yang is not included in the section for simplicity of the output.</t>

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

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

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

<t>lmo0(config)#lmos lmo asset inst router2 ? 
Possible completions:
  activation-date          age                             aggregation                capture-info                component-network-element-ref<br />
  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                     <br />
  platform-dependency-os   rack-equipment-room-ref         rack-ref                   role                        sign-of-life-timestamp       <br />
  software-type            software-version                tags</t>

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

</section>
<section numbered="false" anchor="appendix-b-entitlement-explanation-scope-and-modelling"><name>Appendix B: Entitlement explanation, scope and modelling</name>

<t>Under DLMO, Entitlements entitle an actor (e.g. organisations, individuals) the use of a feature provided by an asset. Entitlements under this context could also be called actor’s rights, commercial usage entitlements, or Commercial licensing agreements. Based on the context mentioned, one of the models is shown below.</t>

<t>Please note that DLMO entitlements are not security entitlements or access list type of control.</t>

<section numbered="false" anchor="scope-of-the-entitlement-model"><name>Scope of the entitlement model</name>

<t>The DLMO YANG model aims to establish an inventory of entitlements, providing details on each entitlement it encompasses. This includes the entitled actors and the features to which they are entitled. Additionally, it offers further information into the utilization of the entitlements, facilitating an understanding of how close a feature is to reaching its entitlement limit.</t>

<t>In general, this model seeks to address the following questions:</t>

<t>*What entitlements are administered/owned by the organization (entitlement's inventory)?
*How are entitlements linked to actors/assets?
*What constraints do assets, under the current entitlements, impose on the actors' use of the asset's features?
*How are entitlements utilized? Which actors are using features backed by entilements? And in cases where the entitlements provide limits, how close the use of those features is to those limits.</t>

<t>These points will be elaborated further in sections below. Initially, we will delineate some aspects not covered by this model, followed by an explanation of features.</t>

<t>The model is designed with flexibility in mind, allowing for expansion through the utilization of tools provided by YANG.</t>

</section>
<section numbered="false" anchor="out-of-scope-elmements-of-the-dlmo-entitlement-model"><name>Out of scope elmements of the DLMO entitlement model</name>

<t>The realm of entitlements or licenses is inherently complex, presenting challenges in creating a model that can comprehensively encompass all scenarios without ambiguity. While we strive to address various situations through examples and use cases, it's important to acknowledge that the model might not be able to cover all corner cases without ambiguity. In such cases, we recommend implementations provide additional documentation to clarify potential ambiguities.</t>

<t>The current model does not aim to serve as a catalog of licenses. While it may accommodate basic scenarios, it does not aim to cover the full spectrum of license characteristics, which can vary significantly. Instead, our focus is on providing a general framework for describing relationships and answering the questions we in scope mentioned above.</t>

<t>To clarify, here are some questions that our model does not attempt to answer:</t>

<t>*What are the implications of purchasing a specific entitlement?
*Which license should I acquire to get feature X?
*Is license migration feasible?</t>

<t>It's important to emphasize that this model primarily addresses the commercial utilization of features, rather than access control. For instance, if a network device cannot be configured for MPLS due to licensing restrictions, this implies that the organization owning the router (the actor in this scenario) is not permitted to utilize the MPLS feature. This distinction is separate from, for instance, the ability of user Y to configure MPLS due to access control limitations.</t>

<t>In some cases, the model will not contain information on why an actor can use a feature. The model does provide information on the attachments of entitlements to actors, but some licenses can entiltle actors without being attached to them. The model could provide descriptive information on which actors are covered by a license (by expanding the mdoel, see use case B below), but it does not say directly why an actor is entitled.</t>

</section>
<section numbered="false" anchor="features"><name>Features</name>

<t>Entitlements entitle an actor to enjoy a feature of an asset. In some cases, this feature can simply be the use of the asset itself (e.g., the use of software, the use of network equipment). However, in common cases, assets can offer a rich array of features that are subject to entitlement levels.</t>

<t>Under DLMO, we do not attempt to model features exhaustively. Instead, we provide a descriptive definition of features, which falls under the responsibility of the model's implementers.</t>

<t>We'll provide examples of feature definitions in our use cases.</t>

</section>
<section numbered="false" anchor="entitlements-modeling"><name>Entitlements Modeling</name>

<t>The model aims to provide a framework for addressing the questions outlined above across various use cases. In this section, we delve deeper into these questions, offering examples to demonstrate why some are more complex than initially perceived.</t>

</section>
<section numbered="false" anchor="use-case-a-what-entitlements-are-administeredowned-by-the-organization-entitlements-inventory"><name>Use case A: What entitlements are administered/owned by the organization (entitlement's inventory)?</name>

<t>The model should facilitate listing all entitlements associated with a set of assets under the same asset administration. In scenarios where entitlements are tied to assets, the asset itself could provide this information. Alternatively, providers may support something similar to a license server, which could house comprehensive information regarding an organization's licenses.</t>

<t>Within the model, all entitlements and features are listed using their respective ietf-almo class:</t>

<figure><artwork><![CDATA[
module: ietf-almo
  +--rw almos
     +--rw almo* [almo-class]
        +--rw almo-class    identityref
        +--rw inst* [id]
]]></artwork></figure>

<t>Just by listing the entitlements, and provide their basic information, a netconf client will be able to retrieve basic inventory information of existing entitlements, without processing the more complex relationships that we will describe in the next section.</t>

<t>Entitlements might be listed by multiple assets. For instance, a license server, functioning as an asset, might list an entitlement, while the asset entitled by the license might also list it. Proper identification of entitlements is imperative to ensure consistency across systems, enabling monitoring systems to recognize when multiple assets list the same entitlement.</t>

<t>Furthermore, there are cases where an authorized asset might not be aware of the covering license. Consider the scenario of a site license, wherein any device under the site may utilize a feature without explicit knowledge of the covering license. In such cases, asset awareness relies on management controls or a service license capable of listing it.</t>

<t>The model accommodates listing entitlements acquired by the organization but not yet applied or utilized by any actor/asset. For these "pending" entitlements, logistical constraints may arise in informing their existence, as there must be at least one element exporting the model that is aware of their existence.</t>

</section>
<section numbered="false" anchor="use-case-b-what-is-the-link-between-a-license-and-assetsactors"><name>Use case B: What is the link between a license and assets/actors?</name>

<t>Attaching an entitlement to an asset/actor means that the entitlement is exclusively used by that actor/asset.</t>

<t>The "attachhement" of licenses to actors and assets is done within the entitlement class:</t>

<figure><artwork><![CDATA[
           +--rw ietf-almo-entitlements:entitlement-attachements
           |  +--rw ietf-almo-entitlements:entity
           |  |  +--rw ietf-almo-entitlements:organizations
           |  |  |  +--rw ietf-almo-entitlements:organization* [almo-class id]
           |  |  |     +--rw ietf-almo-entitlements:almo-class    -> /ietf-almo:almos/almo/almo-class
           |  |  |     +--rw ietf-almo-entitlements:id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
           |  |  +--rw ietf-almo-user:users
           |  |     +--rw ietf-almo-user:users* [almo-class id]
           |  |        +--rw ietf-almo-user:almo-class    -> /ietf-almo:almos/almo/almo-class
           |  |        +--rw ietf-almo-user:id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
           |  +--rw ietf-almo-entitlements:assets
           |     +--rw ietf-almo-entitlements:assets
           |        +--rw ietf-almo-entitlements:asset* [almo-class id]
           |           +--rw ietf-almo-entitlements:almo-class    -> /ietf-almo:almos/almo/almo-class
           |           +--rw ietf-almo-entitlements:id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
]]></artwork></figure>

<t>Many licenses are inherently associated with an actor and user. For example, a software license might be directly attached to a user. Also, the use of a network device might come with a basic license provided solely to an organization.</t>

<t>It's important to note that the current model does not provide information on whether an entitlement can be reassigned to other devices (e.g., fixed or floating license). Such scenarios fall under the "what if" category, which is not covered by this model.</t>

<t>Additionally, some licenses may entitle a user to an asset without the entitlement being explicitly attached to either party. For instance, a site license may provide access to multiple users without being directly linked to them.</t>

<t>Note that attachment is optional. Entitlements are normally linked to an organization, but this is not mandatory by the model. Entilements might also not be linked to any asset, for instance, when they are able of covering multiple ones.</t>

<t>While attachment is optional, the model should be capable of expressing attachment in various scenarios. The model can be expanded to list to which actors/assets an entitlement is aimed for, when this link is more vague, such as a site license (e.g., assets located in a specific site), or more open licenses (e.g., free software for all users subscribed to a streaming platform).</t>

</section>
<section numbered="false" anchor="use-case-c-what-constraints-do-assets-in-the-context-impose-on-the-actors-use-of-the-assets-features"><name>Use case C: What constraints do assets in the context impose on the actors' use of the asset's features?</name>

<t>Assets provide various features or capabilities to actors, which may be restricted based on the availability of proper entitlements.</t>

<t>The use of an entitlement signifies permission to access specific features associated with an asset. However, it's essential for the model to provide information on the status of the entitlement, particularly if it is at risk of being infringed upon. This can help organizations stay informed about their entitlement usage and take necessary actions to prevent potential violations or overuse of features.</t>

<t>All the information related to how an asset provides a feature to actors is included under the feature container wihtin the asset class, under the entitlements-info container.</t>

<figure><artwork><![CDATA[
           +--rw ietf-almo-feature:features
           |  +--rw ietf-almo-feature:feature* [almo-class id]
           |     +--rw ietf-almo-feature:almo-class                -> /ietf-almo:almos/almo/almo-class
           |     +--rw ietf-almo-feature:id                        -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
           |     +--ro ietf-almo-entitlements:entitlements-info
           |        +--ro ietf-almo-entitlements:entities-entitlement-info* []
           |           +--ro ietf-almo-entitlements:entity-entitlement-info
           |           |  +--ro ietf-almo-entitlements:organizations
           |           |  |  +--ro ietf-almo-entitlements:organization* [almo-class id]
           |           |  |     +--ro ietf-almo-entitlements:almo-class    -> /ietf-almo:almos/almo/almo-class
           |           |  |     +--ro ietf-almo-entitlements:id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
           |           |  +--ro ietf-almo-user:users
           |           |     +--ro ietf-almo-user:users* [almo-class id]
           |           |        +--ro ietf-almo-user:almo-class    -> /ietf-almo:almos/almo/almo-class
           |           |        +--ro ietf-almo-user:id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
           |           +--ro ietf-almo-entitlements:entitlements
           |           |  +--ro ietf-almo-entitlements:entitlement* [almo-class id]
           |           |     +--ro ietf-almo-entitlements:almo-class    -> /ietf-almo:almos/almo/almo-class
           |           |     +--ro ietf-almo-entitlements:id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
           |           +--ro ietf-almo-entitlements:entitled?                  boolean
           |           +--ro ietf-almo-entitlements:infriges?                  boolean
           |           +--ro ietf-almo-entitlements:in-use?                    boolean

]]></artwork></figure>

<t>For focus, the leafs related to the use of features are hidden, but are explained in the next section.</t>

<t>Note that here the actor (e.g. organization or user) is linked again with the feature. This might look redundant for simple cases (see use case 1), but if it is important when the element has the ability of providing detailed information of enttilement for specific users (see other use case, TBD). This also allwos to explicitly state which users have attempted to use the feature, but did not have the correct entitlement.</t>

</section>
<section numbered="false" anchor="use-case-d-entitlements-utilization-the-actors-using-features-backed-by-entilements-and-how-close-the-features-usage-is-to-the-imposed-limits-cases-where-the-entitlements-provide-limits"><name>Use case D: Entitlements utilization, the actors using features backed by entilements, and how close the features-usage is to the imposed limits (cases where the entitlements provide limits).</name>

<figure><artwork><![CDATA[
           +--rw ietf-almo-feature:features
           |  +--rw ietf-almo-feature:feature* [almo-class id]
           |     +--rw ietf-almo-feature:almo-class                -> /ietf-almo:almos/almo/almo-class
           |     +--rw ietf-almo-feature:id                        -> /ietf-almo:almos/almo/ietf-almo:almo-class =  current()/../almo-class]/inst/id
           |     +--ro ietf-almo-entitlements:entitlements-info
           |        +--ro ietf-almo-entitlements:entities-entitlement-info* []
           |           +--ro ietf-almo-entitlements:entity-entitlement-info
           |           |  +--ro ietf-almo-entitlements:organizations
           |           |  |  +--ro ietf-almo-entitlements:organization* [almo-class id]
           |           |  |     +--ro ietf-almo-entitlements:almo-class    -> /ietf-almo:almos/almo/almo-class
           |           |  |     +--ro ietf-almo-entitlements:id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
           |           |  +--ro ietf-almo-user:users
           |           |     +--ro ietf-almo-user:users* [almo-class id]
           |           |        +--ro ietf-almo-user:almo-class    -> /ietf-almo:almos/almo/almo-class
           |           |        +--ro ietf-almo-user:id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
           |           +--ro ietf-almo-entitlements:entitlements
           |           |  +--ro ietf-almo-entitlements:entitlement* [almo-class id]
           |           |     +--ro ietf-almo-entitlements:almo-class    -> /ietf-almo:almos/almo/almo-class
           |           |     +--ro ietf-almo-entitlements:id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
           |           +--ro ietf-almo-entitlements:entitled?                  boolean
           |           +--ro ietf-almo-entitlements:infriges?                  boolean
           |           +--ro ietf-almo-entitlements:in-use?                    boolean
           |           +--ro ietf-almo-entitlements:entitlement-limit
           |              +--ro ietf-almo-entitlements:users
           |              |  +--ro ietf-almo-entitlements:value?     uint32
           |              |  +--ro ietf-almo-entitlements:maximum?   uint32
           |              +--ro ietf-almo-entitlements:cpus
           |              |  +--ro ietf-almo-entitlements:value?     uint32
           |              |  +--ro ietf-almo-entitlements:maximum?   uint32
           |              +--ro ietf-almo-entitlements:bandwidth
           |                 +--ro ietf-almo-entitlements:value?     decimal64
           |                 +--ro ietf-almo-entitlements:maximum?   decimal64

]]></artwork></figure>

</section>
</section>
<section numbered="false" anchor="use-cases"><name>Use cases</name>

<section numbered="false" anchor="single-device-with-a-single-license-allowing-its-general-functionality"><name>Single Device with a single license allowing its general functionality</name>

<figure><artwork><![CDATA[
{
  "ietf-almo:almos": {
    "ietf-almo:almo": [
      {
        "ietf-almo:almo-class": "ietf-almo-assets:asset",
        "inst": [
          {
            "id": "device_one",
            "ietf-almo-feature:features": {
              "feature": [
                {
                  "almo-class": "feature",
                  "id": "general_device_operation",
                  "ietf-almo-entitlements:entitlements-info": {
                    "entities-entitlement-info": [
                      {
         "entity-entitlement-info": {
           "organizations": {
             "organization": [
               {
               "almo-class": "ietf-almo-organization:organization",
               "id": "main_organization"
               }
             ]
           }
         },
                        "entitlements": {
                          "entitlement": [
                            {
                              "almo-class": "ietf-almo-entitlements:entitlement",
                              "id": "entilement_one"
                            }
                          ]
                        },
                        "ietf-almo-entitlements:entitled": true,
                        "ietf-almo-entitlements:in-use": true,
                        "ietf-almo-entitlements:infriges": false
                      }
                    ]
                  }
                }
              ]
            }
          }
        ]
      },
      {
        "ietf-almo:almo-class": "ietf-almo-feature:feature",
        "inst": [
          {
            "id": "general_device_operation"
          }
        ]
      },
      {
        "ietf-almo:almo-class": "ietf-almo-organization:organization",
        "inst": [
          {
            "id": "main_organization"
          }
        ]
      },
      {
        "ietf-almo:almo-class": "ietf-almo-entitlements:entitlement",
        "inst": [
          {
            "id": "entilement_one",
            "ietf-almo-entitlements:uid": "uid12345",
            "ietf-almo-entitlements:state": "active",
            "ietf-almo-entitlements:renewal-profile": {
              "activation-date": "2020-10-10T00:00:01Z",
              "expiration-date": "2030-10-10T00:00:01Z"
            },
            "ietf-almo-entitlements:entitlement-attachements": {
              "entity": {
                "organizations": {
                  "organization": [
                    {
                      "almo-class": "ietf-almo-organization:organization",
                      "id": "main_organization"
                    }
                  ]
                }
              },
              "assets": {
                "assets": {
                  "asset": [
                    {
                      "almo-class": "ietf-almo-assets:asset",
                      "id": "device_one"
                    }
                  ]
                }
              }
            }
          }
        ]
      }
    ]
  }
}
]]></artwork></figure>

</section>
<section numbered="false" anchor="a-device-with-multiple-features-set-on-different-license-levels"><name>A device with multiple features set on different license levels</name>

<figure><artwork><![CDATA[
{
  "ietf-almo:almos": {
    "ietf-almo:almo": [
      {
        "ietf-almo:almo-class": "ietf-almo-assets:asset",
        "inst": [
          {
            "id": "device_one",
            "ietf-almo-feature:features": {
              "feature": [
                {
                  "almo-class": "feature",
                  "id": "general_device_operation",
                  "ietf-almo-entitlements:entitlements-info": {
                    "entities-entitlement-info": [
                      {
                        "entity-entitlement-info": {
                          "organizations": {
                            "organization": [
                              {
                                "almo-class": "ietf-almo-organization:organization",
                                "id": "main_organization"
                              }
                            ]
                          }
                        },
                        "entitlements": {
                          "entitlement": [
                            {
                              "almo-class": "ietf-almo-entitlements:entitlement",
                              "id": "medium_entitlement"
                            }
                          ]
                        },
                        "ietf-almo-entitlements:entitled": true,
                        "ietf-almo-entitlements:in-use": true,
                        "ietf-almo-entitlements:infriges": false
                      }
                    ]
                  }
                },
                {
                  "almo-class": "feature",
                  "id": "basic_feature",
                  "ietf-almo-entitlements:entitlements-info": {
                    "entities-entitlement-info": [
                      {
                        "entity-entitlement-info": {
                          "organizations": {
                            "organization": [
                              {
                                "almo-class": "ietf-almo-organization:organization",
                                "id": "main_organization"
                              }
                            ]
                          }
                        },
                        "entitlements": {
                          "entitlement": [
                            {
                              "almo-class": "ietf-almo-entitlements:entitlement",
                              "id": "medium_entitlement"
                            }
                          ]
                        },
                        "ietf-almo-entitlements:entitled": true,
                        "ietf-almo-entitlements:in-use": true,
                        "ietf-almo-entitlements:infriges": false
                      }
                    ]
                  }
                },
                {
                  "almo-class": "feature",
                  "id": "medium_feature",
                  "ietf-almo-entitlements:entitlements-info": {
                    "entities-entitlement-info": [
                      {
                        "entity-entitlement-info": {
                          "organizations": {
                            "organization": [
                              {
                                "almo-class": "ietf-almo-organization:organization",
                                "id": "main_organization"
                              }
                            ]
                          }
                        },
                        "entitlements": {
                          "entitlement": [
                            {
                              "almo-class": "ietf-almo-entitlements:entitlement",
                              "id": "medium_entitlement"
                            }
                          ]
                        },
                        "ietf-almo-entitlements:entitled": true,
                        "ietf-almo-entitlements:in-use": true,
                        "ietf-almo-entitlements:infriges": false
                      }
                    ]
                  }
                },
                {
                  "almo-class": "feature",
                  "id": "advanced_feature",
                  "ietf-almo-entitlements:entitlements-info": {
                    "entities-entitlement-info": [
                      {
                        "entity-entitlement-info": {
                          "organizations": {
                            "organization": [
                              {
                                "almo-class": "ietf-almo-organization:organization",
                                "id": "main_organization"
                              }
                            ]
                          }
                        },
                        "ietf-almo-entitlements:entitled": false,
                        "ietf-almo-entitlements:in-use": false,
                        "ietf-almo-entitlements:infriges": false
                      }
                    ]
                  }
                }
              ]
            }
          }
        ]
      },
      {
        "ietf-almo:almo-class": "ietf-almo-feature:feature",
        "inst": [
          {
            "id": "general_device_operation"
          },
          {
            "id": "basic_feature"
          },
          {
            "id": "medium_feature"
          },
          {
            "id": "advanced_feature"
          }
        ]
      },
      {
        "ietf-almo:almo-class": "ietf-almo-organization:organization",
        "inst": [
          {
            "id": "main_organization"
          }
        ]
      },
      {
        "ietf-almo:almo-class": "ietf-almo-entitlements:entitlement",
        "inst": [
          {
            "id": "basic_entitlement",
            "ietf-almo-entitlements:uid": "uid123451",
            "ietf-almo-entitlements:state": "active",
            "ietf-almo-entitlements:renewal-profile": {
              "activation-date": "2020-10-10T00:00:01Z",
              "expiration-date": "2030-10-10T00:00:01Z"
            },
            "ietf-almo-entitlements:entitlement-attachements": {
              "entity": {
                "organizations": {
                  "organization": [
                    {
                      "almo-class": "ietf-almo-organization:organization",
                      "id": "main_organization"
                    }
                  ]
                }
              },
              "assets": {
                "assets": {
                  "asset": [
                    {
                      "almo-class": "ietf-almo-assets:asset",
                      "id": "device_one"
                    }
                  ]
                }
              }
            }
          },
          {
            "id": "medium_entitlement",
            "ietf-almo-entitlements:uid": "uid123453",
            "ietf-almo-entitlements:state": "active",
            "ietf-almo-entitlements:renewal-profile": {
              "activation-date": "2020-10-10T00:00:01Z",
              "expiration-date": "2030-10-10T00:00:01Z"
            },
            "ietf-almo-entitlements:entitlement-attachements": {
              "entity": {
                "organizations": {
                  "organization": [
                    {
                      "almo-class": "ietf-almo-organization:organization",
                      "id": "main_organization"
                    }
                  ]
                }
              },
              "assets": {
                "assets": {
                  "asset": [
                    {
                      "almo-class": "ietf-almo-assets:asset",
                      "id": "device_one"
                    }
                  ]
                }
              }
            }
          }
        ]
      }
    ]
  }
}
]]></artwork></figure>

</section>
<section numbered="false" anchor="a-db-being-license-need-to-add-limitation"><name>A DB being license, need to add limitation</name>

<figure><artwork><![CDATA[
{
  "ietf-almo:almos": {
    "ietf-almo:almo": [
      {
        "ietf-almo:almo-class": "ietf-almo-assets:asset",
        "inst": [
          {
            "id": "database_one",
            "parent": {
              "almo-class": "ietf-almo-assets:asset",
              "id": "server_one"
            },
            "ietf-almo-feature:features": {
              "feature": [
                {
                  "almo-class": "feature",
                  "id": "db_operation",
                  "ietf-almo-entitlements:entitlements-info": {
                    "entities-entitlement-info": [
                      {
         "entity-entitlement-info": {
           "organizations": {
             "organization": [
               {
               "almo-class": "ietf-almo-organization:organization",
               "id": "main_organization"
               }
             ]
           }
         },
                        "entitlements": {
                          "entitlement": [
                            {
                              "almo-class": "ietf-almo-entitlements:entitlement",
                              "id": "entilement_one"
                            }
                          ]
                        },
                        "ietf-almo-entitlements:entitled": true,
                        "ietf-almo-entitlements:in-use": true,
                        "ietf-almo-entitlements:infriges": false
                      }
                    ]
                  }
                }
              ]
            }
          },
          {
            "id": "server_one"
          }
        ]
      },
      {
        "ietf-almo:almo-class": "ietf-almo-feature:feature",
        "inst": [
          {
            "id": "db_operation"
          }
        ]
      },
      {
        "ietf-almo:almo-class": "ietf-almo-organization:organization",
        "inst": [
          {
            "id": "main_organization"
          }
        ]
      },
      {
        "ietf-almo:almo-class": "ietf-almo-entitlements:entitlement",
        "inst": [
          {
            "id": "entilement_one",
            "ietf-almo-entitlements:uid": "uid12345",
            "ietf-almo-entitlements:state": "active",
            "ietf-almo-entitlements:renewal-profile": {
              "activation-date": "2020-10-10T00:00:01Z",
              "expiration-date": "2030-10-10T00:00:01Z"
            },
            "ietf-almo-entitlements:entitlement-attachements": {
              "entity": {
                "organizations": {
                  "organization": [
                    {
                      "almo-class": "ietf-almo-organization:organization",
                      "id": "main_organization"
                    }
                  ]
                }
              },
              "assets": {
                "assets": {
                  "asset": [
                    {
                      "almo-class": "ietf-almo-assets:asset",
                      "id": "database_one"
                    }
                  ]
                }
              }
            }
          }
        ]
      }
    ]
  }
}
]]></artwork></figure>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
l8Mv7w2//nJ4dO/eptgwm1oeDrsI3MDQ49wi6tnFizqhc9b4k+dnl5wQ/KvN
Me+dXN4vq9xAfFfp5GYl9Txy/T33yWvPa9+Ygf5rYCCCnm6ymuPgb/V3f7tZ
7P8FmsSzOJ2Ok6he/JhIRieeJ/xMd+r5rVLiDVb6JZ9HU9W2NJHvYmWiACvg
O1rSCTFS14LAPcKosdaY/Pd8y4s0rQ7X5wzzzxnm+Pm3yDD/TaSWG6xbI5KK
sTgrOTxkG1bMoqSQ38G/dUpUnHA0p6TWkEjniDMZFcAHZFG6ta5aPZl6Vrai
dJaNqY9pgh9YVMB+Izeud5NgfwFq/ZoqCFUOklAREZ74xM9b6eoCrprTpi7t
0kA+sNz4uQ6w2iwFradDJTKahXUQ/JAy7NQZrf2slPdGd5nwOnyFrVMNdADi
nEOlDGpbUy9x9zv3qHrjE3LwuRrMiOd4+l1fSNy2pOaO0U7vPU64jOs5+C3J
GZtmRo1CCxF/X3e7kGrPDjfNaQDTOWPsz7iIQY/JJwvM6swryuNS2XB8edwC
0SaqMjjBx0JUhZ9VBNLhMFjTqT5bHQeblukTmOqCardZIa5Ja7WB6pO2bX+P
xfJqdzfUBgsWpNptDPd7sdvRjqilvNhxPG0s8AZ4rRHQzVDZRtGqYSfJ6QYa
wXa7yK4wMcJ9SvkG9MTcWXjg6WT6bXIaALqUY5huYVREXbLm4AZKOZF1zRje
5da0qTTqWEn/wiuF0Tbn7zTQkpQvdkDLQLDCJ81ANmwUG8EPob9ZfbW53Rs2
9zVmvkalyQ9VMInrqLAg9DsmFmJCXQvMYZ65EU7DN3NCXgbKdZxSDjxtjlbi
gvhsp8RmflibuR1q4bpFXTf2XvWs66YCR+/aEB/WXGgNq5p+f69WeU1DavMI
3IVB777r9nVtmd595D/HN/C5wp2nZcOOTORK38c6LYx9J4MJ2LXxhyq2IOLW
3/jgZy/DZy/DZy/DBy1g52c+1oOHelm0bbmRJ/o2lpKr2MjQzkXOUzBlqsNp
ym6at3NXPXCjBE3go6tfmpmxZEeUFJSKYtK04W117d9wvNysOLGDNYo4AWM5
B7uQdbphlg+RvPbBAAnZLYO9mjJxTP/v3F52x/8UjmFgGLMJolJmnXYLR0Yb
c+XDVSyvndlAj38ll2RDcN2DAalNAxeMgVhhODbsQhwlquw7RkVNnTgoGGcZ
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
MqwX4nLgcvyQXyZbixOelQIA

-->

</rfc>

