<?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.7.19 (Ruby 2.6.10) -->


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

]>


<rfc ipr="trust200902" docName="draft-mcd-ivy-entitlements-inventory-00" category="info" submissionType="IETF" xml:lang="en">
  <front>
    <title abbrev="entitlement inventory">A YANG module for entitlement inventory</title>

    <author initials="M." surname="Palmero" fullname="Marisol Palmero" role="editor">
      <organization>Cisco Systems</organization>
      <address>
        <email>mpalmero@cisco.com</email>
      </address>
    </author>
    <author initials="C." surname="Cardona" fullname="Camilo Cardona" role="editor">
      <organization>NTT</organization>
      <address>
        <email>camilo@gin.ntt.net</email>
      </address>
    </author>
    <author initials="D." surname="Lopez" fullname="Diego Lopez" role="editor">
      <organization>Telefonica I+D</organization>
      <address>
        <email>diego.r.lopez@telefonica.com</email>
      </address>
    </author>

    <date year="2024" month="November" day="03"/>

    <area>OPS</area>
    <workgroup>IVY</workgroup>
    <keyword>entitlement</keyword> <keyword>inventory</keyword> <keyword>assets</keyword> <keyword>features</keyword>

    <abstract>


<?line 36?>
<t>This document proposes a YANG module with an inventory of entitlements. The model helps manage details about entitlements, such as  their scope, how they are assigned, and when they expire. The model introduces the a descriptive definition of features and use restriction that can help a entitlement admistration an understanding of the state of their assets and the capabilities available across the network.</t>



    </abstract>



  </front>

  <middle>


<?line 38?>

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

<t>An entitlement grants specific holders the right to access particular features of one or more assets. The use of these features may be restricted in various ways, such as by duration, usage limits, or predefined conditions. Having information a centralizaed point with the state of the entitlements of the network can save time and facilitate decision making. In this document, we propose a yang model that, complementing the network inventory module, can provide the information the asset/entitlement adminstrator needs for this.</t>

<section anchor="glosary"><name>Glosary</name>

<t>TODO. We need the distinction between licenses and entitlements.</t>

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

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

</section>
<section anchor="QUESTIONS"><name>Scope of the entitlement model</name>

<t>The entitlement model aims to provide an inventory of entitlements. This includes the entitled holders and the features to which they are entitled. Additionally, it offers  information into the restrictions of the operation of the different assets (network entities and components).</t>

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

<t><list style="symbols">
  <t>What entitlements are administered/owned by the organization?</t>
  <t>How are entitlements restricted to some assets and holders?</t>
  <t>What entitlements are assigned or installed on each assets?</t>
  <t>What constraints do the current entitlements impose in the assets functionality?</t>
  <t>Does the entitlement imposses any kind of global restrictions? What are they?</t>
  <t>What are the restrictions that each asset due to the entitlements it holds?</t>
</list></t>

<t>These points will be elaborated further in section <xref target="ENTMODEL"/>. 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 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 attempt to address various situations through examples and use cases, we  acknowledge that the model might not be able to cover all corner cases without ambiguity. In such cases, we recommend that 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 expose in section <xref target="QUESTIONS"/>.</t>

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

<t><list style="symbols">
  <t>What are the implications of purchasing a specific entitlement?</t>
  <t>Which entitlement should I acquire to get a specific feature?</t>
  <t>Is license migration feasible?</t>
  <t>What features will be allowed if I install an entitlement in specific device?</t>
  <t>Features or restrictions that depend on each user. We are not covering this in the current version of this document, but it could be done if we expand the holders indentification.</t>
</list></t>

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

</section>
<section anchor="features-or-maybe-capabilities"><name>Features (or maybe capabilities?)</name>

<t>Entitlements entitle a holder to use a feature of an asset. In some cases, this feature can be simply 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 the entitlement  model, 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. Also, the main philosofy behind the model is to only list those features that are allowed/restricted based on the entitlements that the organization coutns with. The features under the entitlmeents model are not there to list all features available by an asset, but only those that depend on the entitlmeent state of the asset.</t>

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

</section>
</section>
<section anchor="ENTMODEL"><name>Entitlements Modeling</name>

<t>The model aims to provide a framework for addressing the questions outlined in Section <xref target="QUESTIONS"/> 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>

<t>The entitlement model is included in Secion <xref target="MODEL"/>. We will describe how each of the questions in Section <xref target="QUESTIONS"/> are responded by the model. First, we will introduce  a toy example to show how each question can be answered.</t>

<section anchor="toy-example-for-entitlement-model"><name>Toy example for entitlement model</name>

<t>As a toy example for the model we'll use the next scenario: Two network elements (routers), each with a line card, and a port.  Both routers are of the same type (generic_router), which requires an entitlement to operate. The router entitlement is issued for each device specifically. The line card also requires a license to operate, and an extra license to allow for more than 100Gbps per port and breakout functionality, but they are not issued for each router.  Both routers have the generic and the line card license, but one is missing the port license, therefore the ports are limited.</t>

<t>The resulting json with these scenario is attached next:</t>

<figure title="Toy scenario for entitlement model description" anchor="toyexample"><sourcecode type="json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "ietf-network-inventory-entitlements:network-inventory-entitlement\
s": {
    "features": {
      "entitlement-feature-class": [
        {
          "entitlement-feature-class": "basic-feature",
          "feature": [
            {
              "feature-id": "acme_router_generic_operation"
            },
            {
              "feature-id": "acme_line_card_generic_operation"
            },
            {
              "feature-id": "acme_port_400gbps_breakpout"
            }
          ]
        }
      ]
    },
    "entitlements": {
      "entitlement": [
        {
          "uid": "ff31c766-1ed1-59f7-a043-030de623f1a7",
          "state": "active",
          "product-id": "acme_router_generic_operation",
          "entitlement-attachements": {
            "holders": {
              "organizations_names": {
                "organizations": [
                  "main_organization"
                ]
              }
            },
            "assets": {
              "network-inventory": {
                "network-elements": [
                  "router_one"
                ]
              }
            }
          }
        },
        {
          "uid": "f68600ee-aaa8-55ea-be3b-d7e66c9734b1",
          "state": "active",
          "product-id": "general_component_license_operation",
          "entitlement-attachements": {
            "holders": {
              "organizations_names": {
                "organizations": [
                  "main_organization"
                ]
              }
            }
          }
        },
        {
          "uid": "fb8a776a-0c8e-553a-a5cc-bf97e1a949b5",
          "state": "active",
          "product-id": "line_card_full_port_license",
          "restrictions": {
            "entitlment-restriction-class": [
              {
                "entitlement-restriction-class": "entitlement-global\
-restriction-generic",
                "restriction": [
                  {
                    "description": "Number of times the license has \
been use in assets",
                    "units": "number_of_installed_licenses",
                    "max-value": 5,
                    "current-value": 1,
                    "restriction-id": "restriction_0"
                  }
                ]
              }
            ]
          },
          "entitlement-attachements": {
            "holders": {
              "organizations_names": {
                "organizations": [
                  "main_organization"
                ]
              }
            }
          }
        }
      ]
    }
  },
  "ietf-network-inventory:network-inventory": {
    "network-elements": {
      "network-element": [
        {
          "ne-id": "router_one",
          "components": {
            "component": [
              {
                "component-id": "acme_router_one_line_card",
                "class": "iana-hardware:module"
              },
              {
                "component-id": "acme_router_one_port_400gbps",
                "class": "iana-hardware:module"
              }
            ]
          },
          "ietf-network-inventory-entitlements:entitlement-informati\
on": {
            "entitlements": {
              "entitlment": [
                {
                  "entitlement-id": "ff31c766-1ed1-59f7-a043-030de62\
3f1a7"
                },
                {
                  "entitlement-id": "f68600ee-aaa8-55ea-be3b-d7e66c9\
734b1",
                  "component-id": "acme_router_one_line_card"
                },
                {
                  "entitlement-id": "fb8a776a-0c8e-553a-a5cc-bf97e1a\
949b5",
                  "component-id": "acme_router_one_line_card"
                }
              ]
            },
            "feature-information": {
              "feature-use": [
                {
                  "feature-class": "basic-feature",
                  "feature-id": "acme_router_generic_operation",
                  "in-use": true,
                  "allowed": true,
                  "supporting-entitlements": {
                    "entitlement": [
                      {
                        "entitlement-id": "ff31c766-1ed1-59f7-a043-0\
30de623f1a7"
                      }
                    ]
                  }
                },
                {
                  "feature-class": "basic-feature",
                  "feature-id": "acme_line_card_generic_operation",
                  "in-use": true,
                  "allowed": true,
                  "supporting-entitlements": {
                    "entitlement": [
                      {
                        "entitlement-id": "f68600ee-aaa8-55ea-be3b-d\
7e66c9734b1"
                      }
                    ]
                  },
                  "component-id": "acme_router_one_line_card"
                },
                {
                  "feature-class": "basic-feature",
                  "feature-id": "acme_port_400gbps_breakpout",
                  "in-use": true,
                  "allowed": true,
                  "supporting-entitlements": {
                    "entitlement": [
                      {
                        "entitlement-id": "fb8a776a-0c8e-553a-a5cc-b\
f97e1a949b5"
                      }
                    ]
                  },
                  "component-id": "acme_router_one_port_400gbps"
                }
              ]
            }
          }
        },
        {
          "ne-id": "router_two",
          "components": {
            "component": [
              {
                "component-id": "acme_router_two_line_card",
                "class": "iana-hardware:module"
              },
              {
                "component-id": "acme_router_two_port_400gbps",
                "class": "iana-hardware:module"
              }
            ]
          },
          "ietf-network-inventory-entitlements:entitlement-informati\
on": {
            "entitlements": {
              "entitlment": [
                {
                  "entitlement-id": "ff31c766-1ed1-59f7-a043-030de62\
3f1a7"
                },
                {
                  "entitlement-id": "f68600ee-aaa8-55ea-be3b-d7e66c9\
734b1",
                  "component-id": "acme_router_two_line_card"
                }
              ]
            },
            "feature-information": {
              "feature-use": [
                {
                  "feature-class": "basic-feature",
                  "feature-id": "acme_router_generic_operation",
                  "in-use": true,
                  "allowed": true,
                  "supporting-entitlements": {
                    "entitlement": [
                      {
                        "entitlement-id": "ff31c766-1ed1-59f7-a043-0\
30de623f1a7"
                      }
                    ]
                  }
                },
                {
                  "feature-class": "basic-feature",
                  "feature-id": "acme_line_card_generic_operation",
                  "in-use": true,
                  "allowed": true,
                  "supporting-entitlements": {
                    "entitlement": [
                      {
                        "entitlement-id": "f68600ee-aaa8-55ea-be3b-d\
7e66c9734b1"
                      }
                    ]
                  },
                  "component-id": "acme_router_two_line_card"
                },
                {
                  "feature-class": "basic-feature",
                  "feature-id": "acme_port_400gbps_breakpout",
                  "in-use": false,
                  "allowed": false,
                  "supporting-entitlements": {
                    "entitlement": []
                  },
                  "component-id": "acme_router_two_port_400gbps"
                }
              ]
            },
            "asset-restrictions": {
              "asset-restriction-class": [
                {
                  "asset-restriction-class": "entitlement-asset-rest\
riction-basic",
                  "asset-restriction": [
                    {
                      "description": "Bandwidth limit",
                      "units": "Gbps",
                      "max-value": 100,
                      "current-value": 79,
                      "component-id": "acme_router_two_port_400gbps",
                      "asset-restriction-id": "restriction_0"
                    }
                  ]
                }
              ]
            }
          }
        }
      ]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="what-entitlements-are-administeredowned-by-the-organization-entitlements-inventory"><name>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 directly under the network-inventory-entitlements container of the model.</t>

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

<t>Note that the model uses lists based on classes on multiple parts to be able to extend functionality. We will provide examples of how this can be done in posterior releases of this document.</t>

<t>The entitlements and features list do not specify which the assets (network elments or components) are actually assigned the entitlements, either through an installation  or a similar operation. For this, we augment the network elements form the network-inventory <xref target="I-D.draft-ietf-ivy-network-inventory-yang-03"/> model with a new container called entitlement-information. This container  hold information of the state of entitlmenets in the asset.</t>

<t>The entiltment container holds a container called entitlement-attachements which relates  how the entitlement is COMMERCIALLY linked to holders or assets. Note that there is a difference between an entilement being attached to an asset and an entilement being installed in the asset. In the former, we mean that the license was issued only for one (or more) assets.  Some licenses actually can be open but have a limited number of installation, just as we have in our toy example. Other licenses might be openly contraint to geography localtion. We are not deailing with these complex cases now, but the container can be expanded for this in the future.</t>

<t>In our toy example, we can extract the information in a single table. We show the summary in the next figure.</t>

<figure title="Entitlement report for toy case" anchor="entitlmenet_report"><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

Entry 0:
  name: ent_acme_router_generic_operation_one
  product_id: acme_router_generic_operation
  state: active
  attached_assets: router_one
  assets_where_is_installed: router_one,router_two
  restrictions_apply: False

Entry 1:
  name: ent_acme_line_card_generic_operation
  product_id: general_component_license_operation
  state: active
  attached_assets: 
  assets_where_is_installed: router_one-acme_router_one_line_card,ro\
uter_two-
    acme_router_two_line_card
  restrictions_apply: False

Entry 2:
  name: ent_acme_line_card_full_ports
  product_id: line_card_full_port_license
  state: active
  attached_assets: 
  assets_where_is_installed: router_one-acme_router_one_line_card
  restrictions_apply: True
]]></artwork></figure>

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

<t>Some entitlements are inherently associated with an holder, such as organization or an 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. Some entitlements could be assigned to a more abstract description of holders, such as people under a juristiction a geographical area. The model contains basic information about this, but it can be extended in the future to be more descriptive.</t>

</section>
<section anchor="what-is-the-link-between-a-entitlement-and-assets"><name>What is the link between a entitlement and assets?</name>

<t>Entitlements and assets are linked in the model in two ways. Entitlemenets might be "attached" to assets, and assets include (or have installed) entitlements. The former is included under the network-inventory-entitlements list container, while the former is included as an augmenetation in the network element.</t>

<t>When an asset lists an entitlement, it means that the entitlement is installed in the asset. An entitlement that is not listed by any asset means that is not being used (even if it is attached to an asset, as we will see later).</t>

<t>Attaching an entitlement to one or multiple asset means that the entitlement is exclusively used by that asset. However, this is not mandatory and there are many licenses that are open and can be installed at any asset of certain type.</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 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>

<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>The list of attached assets, and the assets where the entitlements are installed is included already in the figure <xref target="entitlmenet_report"/>.</t>

</section>
<section anchor="what-constraints-do-assets-under-the-current-entitlements-impose-on-the-actors-use-of-the-assets-features"><name>What constraints do assets, under the current entitlements, impose on the actors' use of the asset's features?</name>

<t>Assets provide various features, which may be restricted based on the availability of proper entitlements. A entitlement manager might be interested in the features that are not available to use on the assets, and the features that are available.</t>

<t>The model includes this information on the entitlement-information/feature-information/feature-use which is the entitlement-model adds to the network-elements from the network inventory model..</t>

<t>An entitlement  grants permission to access specific features associated with an asset. However, in some cases, there are limitations or restrictions on the use of these features. 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 title="Features report for toy case" anchor="feature_report"><artwork><![CDATA[
Entry 0:
  feature_name: acme_line_card_generic_operation
  allowed: True
  in_use: True
  supporting_entitlements: ent_acme_line_card_generic_operation
  restrictions_apply: False
  asset: router_one-acme_router_one_line_card

Entry 1:
  feature_name: acme_line_card_generic_operation
  allowed: True
  in_use: True
  supporting_entitlements: ent_acme_line_card_generic_operation
  restrictions_apply: False
  asset: router_two-acme_router_two_line_card

Entry 2:
  feature_name: acme_port_400gbps_breakpout
  allowed: True
  in_use: True
  supporting_entitlements: ent_acme_line_card_full_ports
  restrictions_apply: False
  asset: router_one-acme_router_one_port_400gbps

Entry 3:
  feature_name: acme_port_400gbps_breakpout
  allowed: False
  in_use: False
  supporting_entitlements: 
  restrictions_apply: False
  asset: router_two-acme_router_two_port_400gbps

Entry 4:
  feature_name: acme_router_generic_operation
  allowed: True
  in_use: True
  supporting_entitlements: ent_acme_router_generic_operation_one
  restrictions_apply: False
  asset: router_one

Entry 5:
  feature_name: acme_router_generic_operation
  allowed: True
  in_use: True
  supporting_entitlements: ent_acme_router_generic_operation_one
  restrictions_apply: False
  asset: router_two
]]></artwork></figure>

</section>
<section anchor="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"><name>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.</name>

<figure title="Restrictions  report for toy case" anchor="asset_restrictions"><artwork><![CDATA[
Entry 0:
  description: Bandwidth limit
  units: Gbps
  max-value: 100
  current-value: 79
  asset: router_two-acme_router_two_port_400gbps
]]></artwork></figure>

</section>
</section>
<section anchor="MODEL"><name>Entitlements model</name>

<t>Here is the tree for the entitlement model.</t>

<figure title="Tree of entitlement model" anchor="tree"><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

module: ietf-network-inventory
  +--rw network-inventory
     +--rw network-elements
        +--rw network-element* [ne-id]
           +--rw ne-id                           string
           +--ro ne-type?                        identityref
           +--ro uuid?                           yang:uuid
           +--rw name?                           string
           +--rw description?                    string
           +--rw alias?                          string
           +--ro hardware-rev?                   string
           +--ro software-rev?                   string
           +--ro software-patch-rev*             string
           +--ro mfg-name?                       string
           +--ro mfg-date?                       yang:date-and-time
           +--ro serial-number?                  string
           +--ro product-name?                   string
           +--rw components
           |  +--rw component* [component-id]
           |     +--rw component-id             string
           |     +--ro class                    union
           |     +--ro uuid?                    yang:uuid
           |     +--rw name?                    string
           |     +--rw description?             string
           |     +--rw alias?                   string
           |     +--ro child-component-ref
           |     +--ro parent-rel-pos?          int32
           |     +--ro parent-component-ref
           |     +--ro hardware-rev?            string
           |     +--ro firmware-rev?            string
           |     +--ro software-rev?            string
           |     +--ro software-patch-rev*      string
           |     +--ro serial-num?              string
           |     +--ro mfg-name?                string
           |     +--ro part-number?             string
           |     +--ro product-name?            string
           |     +--ro asset-id?                string
           |     +--ro is-fru?                  boolean
           |     +--ro mfg-date?                yang:date-and-time
           |     +--ro uri*                     inet:uri
           |     +--ro chassis-specific-info
           |     +--ro slot-specific-info
           |     +--ro board-specific-info
           |     +--ro port-specific-info
           +--rw nwie:entitlement-information
              +--rw nwie:entitlements
              |  +--rw nwie:entitlment* [entitlement-id]
              |     +--rw nwie:entitlement-id    -> /network-invento\
ry-entitlements/entitlements/entitlement/uid
              |     +--rw nwie:component-id?     -> ../../../../nwi:\
components/nwi:component/nwi:component-id
              +--rw nwie:feature-information
              |  +--rw nwie:feature-use* [feature-class feature-id]
              |     +--rw nwie:feature-class              -> /networ\
k-inventory-entitlements/features/entitlement-feature-class/entitlem\
ent-feature-class
              |     +--rw nwie:feature-id                 -> /networ\
k-inventory-entitlements/features/entitlement-feature-class[entitlem\
ent-feature-class=current()/../feature-class]/feature/feature-id
              |     +--rw nwie:component-id?              -> ../../.\
./../nwi:components/nwi:component/nwi:component-id
              |     +--rw nwie:supporting-entitlements
              |     |  +--rw nwie:entitlement* [entitlement-id]
              |     |     +--rw nwie:entitlement-id    -> ../../../.\
./../entitlements/entitlment/entitlement-id
              |     +--rw nwie:allowed?                   boolean
              |     +--rw nwie:in-use?                    boolean
              +--rw nwie:asset-restrictions
                 +--rw nwie:asset-restriction-class* [asset-restrict\
ion-class]
                    +--rw nwie:asset-restriction-class    identityref
                    +--rw nwie:asset-restriction* [asset-restriction\
-id]
                       +--rw nwie:asset-restriction-id    string
                       +--rw nwie:component-id?           -> ../../.\
./../../nwi:components/nwi:component/nwi:component-id
                       +--rw nwie:description?            string
                       +--rw nwie:resource-name?          string
                       +--rw nwie:units?                  string
                       +--rw nwie:max-value?              int32
                       +--rw nwie:current-value?          int32
                       +--rw nwie:feature-class?          -> ../../.\
./../feature-information/feature-use/feature-class
                       +--rw nwie:feature-id?             -> ../../.\
./../feature-information/feature-use[feature-class=current()/../feat\
ure-class]/feature-id

module: iana-hardware

module: ietf-network-inventory-entitlements-features
  +--rw network-inventory-entitlements
     +--rw features
     |  +--rw entitlement-feature-class* [entitlement-feature-class]
     |     +--rw entitlement-feature-class    identityref
     |     +--rw feature* [feature-id]
     |        +--rw feature-id                      string
     |        +--rw extended-feature-description?   string
     +--rw entitlements
        +--rw entitlement* [uid]
           +--rw uid                         string
           +--rw product-id?                 string
           +--rw state?                      entitlement-state-t
           +--rw renewal-profile
           |  +--rw activation-date?   yang:date-and-time
           |  +--rw expiration-date?   yang:date-and-time
           +--rw restrictions
           |  +--rw entitlment-restriction-class* [entitlement-restr\
iction-class]
           |     +--rw entitlement-restriction-class    identityref
           |     +--rw restriction* [restriction-id]
           |        +--rw restriction-id    string
           |        +--rw description?      string
           |        +--rw units?            string
           |        +--rw max-value?        int32
           |        +--rw current-value?    int32
           +--rw capabilities
           |  +--rw capability-class* [capability-class]
           |     +--rw capability-class    identityref
           |     +--rw capability* [capability-id]
           |        +--rw capability-id           string
           |        +--rw feature-class?          -> /network-invent\
ory-entitlements/features/entitlement-feature-class/entitlement-feat\
ure-class
           |        +--rw feature-id?             -> /network-invent\
ory-entitlements/features/entitlement-feature-class[entitlement-feat\
ure-class=current()/../feature-class]/feature/feature-id
           |        +--rw resource-description?   string
           |        +--rw resource-units?         string
           |        +--rw resource-amount?        int32
           +--rw parent-entitlement-uid?     -> ../../entitlement/uid
           +--rw entitlement-attachements
              +--rw universal-access?   boolean
              +--rw holders!
              |  +--rw organizations_names
              |  |  +--rw organizations*   string
              |  +--rw users_names
              |     +--rw users*   string
              +--rw assets
                 +--rw network-inventory
                    +--rw network-elements*   string
                    +--rw components
                       +--rw component* [network-element component-i\
d]
                          +--rw network-element    string
                          +--rw component-id       string

  augment /nwi:network-inventory/nwi:network-elements/nwi:network-el\
ement:
    +--rw entitlement-information
       +--rw entitlements
       |  +--rw entitlment* [entitlement-id]
       |     +--rw entitlement-id    -> /network-inventory-entitleme\
nts/entitlements/entitlement/uid
       |     +--rw component-id?     -> ../../../../nwi:components/n\
wi:component/nwi:component-id
       +--rw feature-information
       |  +--rw feature-use* [feature-class feature-id]
       |     +--rw feature-class              -> /network-inventory-\
entitlements/features/entitlement-feature-class/entitlement-feature-\
class
       |     +--rw feature-id                 -> /network-inventory-\
entitlements/features/entitlement-feature-class[entitlement-feature-\
class=current()/../feature-class]/feature/feature-id
       |     +--rw component-id?              -> ../../../../nwi:com\
ponents/nwi:component/nwi:component-id
       |     +--rw supporting-entitlements
       |     |  +--rw entitlement* [entitlement-id]
       |     |     +--rw entitlement-id    -> ../../../../../entitle\
ments/entitlment/entitlement-id
       |     +--rw allowed?                   boolean
       |     +--rw in-use?                    boolean
       +--rw asset-restrictions
          +--rw asset-restriction-class* [asset-restriction-class]
             +--rw asset-restriction-class    identityref
             +--rw asset-restriction* [asset-restriction-id]
                +--rw component-id?           -> ../../../../../nwi:\
components/nwi:component/nwi:component-id
                +--rw asset-restriction-id    string
                +--rw description?            string
  augment /nwi:network-inventory/nwi:network-elements/nwi:network-el\
ement/entitlement-information/asset-restrictions/asset-restriction-c\
lass/asset-restriction:
    +--rw resource-name?   string
    +--rw units?           string
    +--rw max-value?       int32
    +--rw current-value?   int32
  augment /nwi:network-inventory/nwi:network-elements/nwi:network-el\
ement/entitlement-information/asset-restrictions/asset-restriction-c\
lass/asset-restriction:
    +--rw feature-class?   -> ../../../../feature-information/featur\
e-use/feature-class
    +--rw feature-id?      -> ../../../../feature-information/featur\
e-use[feature-class=current()/../feature-class]/feature-id
]]></artwork></figure>

<t>The full entitlement model comes in the next figure.</t>

<figure title="Complete entitlement model" anchor="full_model"><sourcecode type="yang"><![CDATA[
=============== NOTE: '\\' line wrapping per RFC 8792 ===============

module ietf-network-inventory-entitlements-features {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-network-inventory-enti\
\tlements-features";
  prefix nwie;

  import ietf-yang-types {
    prefix yang;
  }
  import ietf-network-inventory {
    prefix nwi;
    reference
      "RFCxxxx: IETF Network Inventory";
  }

  organization
    "IETF IVY Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/>
     WG List:  <mailto:inventory-yang@ietf.org>

     Editor:   Marisol Palmero
               <a>

     Editor:   Camilo Cardona
               <>

     Editor:   Diego
               <>";
  description
    "This module defines a base model for retrieving network
     inventory.

     The model fully conforms to the Network Management
     Datastore Architecture (NMDA).

     Copyright (c) 2024 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.: update the date below with the date of RFC publication
  // and remove this note.

  revision 2024-04-09 {
    description
      "Initial version";
    reference
      "RFC XXXX:.";
  }

  identity entitlement-capability-description {
    description
      "Base identity for classes of LMO. Provides just an id, and a";
  }

  identity entitlement-global-restriction {
    description
      "Base identify for restriction. It does not provide anything m\
\eaninful.";
  }

  identity entitlement-feature {
    description
      "Base identity for classes of LMO. Provides just an id, and a
       extended description";
  }

  identity basic-feature {
    base entitlement-feature;
    description
      "Base identity for classes of LMO. Provides just an id, and a
       extended description";
  }

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

  identity test {
    base nwi:non-hardware-component-class;
  }

  container network-inventory-entitlements {
    container features {
      list entitlement-feature-class {
        description
          "Optional list of features known by this data server. ";
        key "entitlement-feature-class";
        leaf entitlement-feature-class {
          type identityref {
            base entitlement-feature;
          }
          must "derived-from-or-self(current(), "
             + " 'entitlement-feature')";
        }
        list feature {
          key "feature-id";
          leaf feature-id {
            type string;
            description
              "Feature ID.";
          }
          leaf extended-feature-description {
            type string;
            description
              "Extended feature description of the feature, if neede\
\d";
          }
        }
      }
    }
    container entitlements {
      list entitlement {
        key "uid";
        description
          "The container includes attributes for entitlements";
        leaf uid {
          type string;
          description
            "Unique Entitlement Identifier";
        }
        leaf product-id {
          type string;
          description
            "An optional product id for the entitlemnet, if one exis\
\ts";
        }
        leaf state {
          type 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 restrictions {
          description
            "Global entitlement usage restrictions";
          list entitlment-restriction-class {
            key "entitlement-restriction-class";
            leaf entitlement-restriction-class {
              type identityref {
                base entitlement-global-restriction;
              }
              must "derived-from-or-self(current(), "
                 + " 'entitlement-global-restriction')";
            }
            list restriction {
              key "restriction-id";
              leaf restriction-id {
                description
                  "A string that uniquelly identifies the restrictio\
\ns. It might not be meaninfully.";
                type string;
              }
            }
          }
        }
        // TODO:  We could have a list of features the entitlement c\
\overs, but this would be 
        // only for description purposes since an entitlement is onl\
\y meaningful when 
        // allowing a feature under an asset
        container capabilities {
          description
            "Descriptive list of features the entitlement grants";
          list capability-class {
            key "capability-class";
            leaf capability-class {
              type identityref {
                base entitlement-capability-description;
              }
              must "derived-from-or-self(current(), "
                 + " 'entitlement-capability-description')";
              description
                "Feature type";
            }
            list capability {
              key "capability-id";
              leaf capability-id {
                description
                  "A string that uniquelly identifies the restrictio\
\ns. It might not be meaninfully.";
                type string;
              }
            }
          }
        }

      leaf parent-entitlement-uid {
        type leafref {
          path "../../entitlement/uid";
        }
        must '. != current()/../../entitlement/uid' {
          error-message "An entitlement cannot be its own parent.";
        }
        description
          "Some entitlements are delivered in 'packages'. The parent\
\-entitlement relationship aims
           at covering this case. If the package has an id, it can b\
\e modeled as an entitlement
           covering multiple ones. This can also cover the case of a\
\n entilement that can 
           be divided in multiple parts";
      }
      container entitlement-attachements {
        description
          "An entilement entitles an entity to the use of a feature \
\under an
           asset.";

        leaf universal-access {
          type boolean;
          default "false";
          description "Optional flag to signal that the entitlment i\
\s not attached to any holder, that is, the permissions granted are \
\for everybody.";
        }

        container holders {

          presence "The holders container should be created only whe\
\n the data server
          can provide information of the holder of the entitlement.";

          must "not(../universal-access = 'true')" {
            error-message "The 'holders' container cannot exist when\
\ universal-access is set.";
          }

          description
            "The entities to which the entilements grants permissios\
\n to.
             There can be multiple of them. 
             The container SHOULD NOT exist if the data server does \
\not known
             of the holders of the entitlement. An empty holders SHO\
\ULD be avoided, instead
             the universal-access flag should be set.
             It might be expanded to cover selection cases e.g. all \
\users in
             a special country.";

          container organizations_names {
            leaf-list organizations {
              type string;
            }
          }
          container users_names {
            leaf-list users {
              type string;
            }
          }
          // We could expand this to more generic selections of users
          // or organizations, or in general add a flexible way of e\
\xpanding it
          // via keying by a instance
        }
        container assets {
          container network-inventory {
            leaf-list network-elements {
              type string;
            }
            container components {
              list component {
                key "network-element component-id";
                leaf network-element {
                  type string;
                }
                leaf component-id {
                  type string;
                }

              }
            }
          }
          // We could expand this to more generic selections of users
          // or organizations, or in general add a flexible way of e\
\xpanding it
          // via keying by a instance
        }
        // We could have other container with more descriptive set o\
\f assets
        // such as "all laptops in school Y (site license)"

      }
      }
    }
  }

  // Let us define the entitlement capabilities for feature and reso\
\ures
  // An entitlmeent capability will add a feature
  // We leave open many things here, that's why iti s only descripti\
\ve

  identity entitlement-capability-feature-description {
    base entitlement-capability-description;
  }

  augment "/network-inventory-entitlements/entitlements/entitlement/\
\capabilities/capability-class/capability" {
    when "derived-from-or-self(../capability-class, "
       + " 'entitlement-capability-feature-description')";
    leaf feature-class {
      type leafref {
        path "/network-inventory-entitlements/features/entitlement-f\
\eature-class/entitlement-feature-class";
      }
      description
        "Class of feature to enable";
    }
    leaf feature-id {
      type leafref {
        path "/network-inventory-entitlements/features/entitlement-f\
\eature-class[entitlement-feature-class="
           + "current()/../feature-class]/feature/feature-id";
      }
      description
        "Feature that this entitlement enables on the asset";
    }
  }

  // A resource capability will extend the resources of an asset
  // here we dont provide much context, it is just for simple cases

  identity entitlement-capability-resource-description {
    base entitlement-capability-description;
  }

  augment "/network-inventory-entitlements/entitlements/entitlement/\
\capabilities/capability-class/capability" {
    when "derived-from-or-self(../capability-class, "
       + " 'entitlement-capability-resource-description')";
    leaf resource-description {
      type string;
      description
        "Description of the resource capability";
    }
    leaf resource-units {
      type string;
    }
    leaf resource-amount {
      type int32;
    }
  }

  identity entitlement-global-restriction-generic {
    description
      "A generic restriction with a maximum of a resource, and its c\
\urrent value.";
    base entitlement-global-restriction;
  }

  augment "/network-inventory-entitlements/entitlements/entitlement/\
\restrictions/entitlment-restriction-class/restriction" {
    when "derived-from-or-self(../entitlement-restriction-class, "
       + "'entitlement-global-restriction-generic')";
    leaf description {
      type string;
      description
        "Description of the resource capability";
    }
    leaf units {
      type string;
    }
    leaf max-value {
      type int32;
    }
    leaf current-value {
      type int32;
    }
  }

  identity entitlement-asset-restriction {
    description "Restriction for an asset";
  }


  augment "/nwi:network-inventory/nwi:network-elements/nwi:network-e\
\lement" {
    description
      "Aguments a component with entitlement information";
    container entitlement-information {
      description
        "Containing holding information about entitlements and the
         features/capabilities they grant";
      container entitlements {
        description
          "List of entitlements installed in the asset";
        list entitlment {
          description
            "Entitlement installed in the asset.";
          key "entitlement-id";
          leaf entitlement-id {
            type leafref {
              path "/network-inventory-entitlements/entitlements/ent\
\itlement/uid";
            }
          }

            leaf component-id {
              description "If the entitlement is specificly for a  c\
\omponent of the 
              network-element, specify it";
              type leafref {
                path "../../../../nwi:components/nwi:component/nwi:c\
\omponent-id";
              }
            }
        }
      }
      container feature-information {
        list feature-use {
          key "feature-class feature-id";
          description "Contains information of the use of a feature \
\within an asset";
          leaf feature-class {
            type leafref {
              path "/network-inventory-entitlements/features/entitle\
\ment-feature-class/entitlement-feature-class";
            }
            description
              "Class of feature to enable";
          }
          leaf feature-id {
            type leafref {
              path "/network-inventory-entitlements/features/entitle\
\ment-feature-class[entitlement-feature-class="
                 + "current()/../feature-class]/feature/feature-id";
            }
            description
              "Feature that this entitlement enables on the asset";
          }

            leaf component-id {
              description "If the restriction is for a specific comp\
\onent of the 
              network-element, specify it";
              type leafref {
                path "../../../../nwi:components/nwi:component/nwi:c\
\omponent-id";
              }
            }

          container supporting-entitlements {
            description
              "An optional list of entitlements allowing the use of \
\the feature";
            list entitlement {
              key "entitlement-id";
              description
                "Subfeature ID";
              leaf entitlement-id {
                type leafref {
                  path "../../../../../entitlements/entitlment/entit\
\lement-id";
                }
                description
                  "Reference to almo-class";
              }
            }
          }
          leaf allowed {
            type boolean;
            description
              "Whther the level of usage of the feature will leave it
               to infrigement if the entilement in entitlements is r\
\emoved";
          }
          leaf in-use {
            type boolean;
            description
              "Optional argument.Whether the feature use is infrigin\
\g its entilement level.
               It means the feature is in use iwthout an entitlement\
\, or going over a level.
               It should explicitly be set if the asset can report. \
\not reporting this 
               value means its value is not determined by the asset";
          }
        }
      }

      container asset-restrictions {
        list asset-restriction-class {
          key "asset-restriction-class";
          leaf  asset-restriction-class {
            type identityref {
              base entitlement-asset-restriction;
            }
            must "derived-from-or-self(current(), "
               + " 'entitlement-asset-restriction')";
          }

          list asset-restriction {
            key "asset-restriction-id";

            leaf component-id {
              description "If the feature is applied to a specific c\
\omponent of the 
              network-element, specify it";
              type leafref {
                path "../../../../../nwi:components/nwi:component/nw\
\i:component-id";
              }
            }

            leaf asset-restriction-id {
              type string;
              description "Restriction id. It can be meaningless";
            }

            leaf description {
              type string;
              description "A description of the restriction. It shou\
\ld quickly communicate what's being restricted in the asset.";
            }

          }


        }
      }

    }
  }

  identity entitlement-asset-restriction-basic {
    description "Restriction for an asset based on a feature";
    base entitlement-asset-restriction;
  }

  augment "/nwi:network-inventory/nwi:network-elements/nwi:network-e\
\lement/"
        + "entitlement-information/asset-restrictions/asset-restrict\
\ion-class/asset-restriction" {
    when "derived-from-or-self(../asset-restriction-class, "
       + " 'entitlement-asset-restriction-basic')";

      leaf resource-name {
        type string;
      }

      leaf units {
        type string;
      }

      leaf max-value {
        type int32;
      }

      leaf current-value {
        type int32;
      }

    }

  identity entitlement-asset-restriction-feature {
    description "Restriction for an asset based on a feature";
    base entitlement-asset-restriction-basic;
  }

  augment "/nwi:network-inventory/nwi:network-elements/nwi:network-e\
\lement/"
        + "entitlement-information/asset-restrictions/asset-restrict\
\ion-class/asset-restriction" {
    when "derived-from-or-self(../asset-restriction-class, "
       + " 'entitlement-asset-restriction-feature')";

      leaf feature-class {
        type leafref {
          path "../../../../feature-information/feature-use/feature-\
\class";
        }
        description
          "Class of feature to enable";
      }
      leaf feature-id {
        type leafref {
          path "../../../../feature-information/feature-use[feature-\
\class="
          + "current()/../feature-class]/feature-id";
        }
        description
          "Feature that this entitlement enables on the asset";
      }

    }

}
]]></sourcecode></figure>

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

<t>In this section we will describe use cases, an example of how they could be modelled by the model, and show how each of the questions that we have explored in this draft can be answered by the model.</t>

<t>TODO in next versions.</t>

</section>
<section anchor="IANA"><name>IANA Considerations</name>

<t>TODO</t>

</section>
<section anchor="Security"><name>Security Considerations</name>

<t>TODO</t>

</section>
<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><list style="symbols">
  <t>Reference to <xref target="I-D.draft-palmero-ivy-ps-ALMO"/> draft and <xref target="I-D.draft-palmero-ivy-DMALMO"/></t>
</list></t>

</section>
<section numbered="false" anchor="contributors"><name>Contributors</name>

<t>This document was created by meaningful contributions (by alphabetical order) from Jan Lindblad.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-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' anchor="sec-informative-references">




<reference anchor="I-D.draft-ietf-ivy-network-inventory-yang-03">
   <front>
      <title>A YANG Data Model for Network Inventory</title>
      <author fullname="Chaode Yu" initials="C." surname="Yu">
         <organization>Huawei Technologies</organization>
      </author>
      <author fullname="Sergio Belotti" initials="S." surname="Belotti">
         <organization>Nokia</organization>
      </author>
      <author fullname="Jean-Francois Bouquier" initials="J." surname="Bouquier">
         <organization>Vodafone</organization>
      </author>
      <author fullname="Fabio Peruzzini" initials="F." surname="Peruzzini">
         <organization>TIM</organization>
      </author>
      <author fullname="Phil Bedard" initials="P." surname="Bedard">
         <organization>Cisco</organization>
      </author>
      <date day="7" month="July" year="2024"/>
      <abstract>
	 <t>   This document defines a base YANG data model for network inventory
   that is application- and technology-agnostic.  This data model can be
   augmented with application-specific and technology-specific details
   in other, more specific network inventory data models.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-ivy-network-inventory-yang-03"/>
   
</reference>

<reference anchor='I-D.draft-palmero-ivy-ps-ALMO'> <front> <title>*** BROKEN REFERENCE ***</title> <author> <organization/> </author> <date/> </front> </reference>
<reference anchor='I-D.draft-palmero-ivy-DMALMO'> <front> <title>*** BROKEN REFERENCE ***</title> <author> <organization/> </author> <date/> </front> </reference>



    </references>

</references>



  </back>

<!-- ##markdown-source:
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

-->

</rfc>

