<?xml version="1.0" encoding="US-ASCII"?>
<!-- This is built from a template for a generic Internet Draft. Suggestions for
     improvement welcome - write to Brian Carpenter, brian.e.carpenter @ gmail.com 
     This can be converted using the Web service at http://xml.resource.org/ -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<!-- You want a table of contents -->
<!-- Use symbolic labels for references -->
<!-- This sorts the references -->
<!-- Change to "yes" if someone has disclosed IPR for the draft -->
<!-- This defines the specific filename and version number of your draft (and inserts the appropriate IETF boilerplate -->
<?rfc sortrefs="yes"?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc topblock="yes"?>
<?rfc comments="no"?>
<rfc category="std"
     docName="draft-wzwb-opsawg-network-inventory-management-00"
     ipr="trust200902">
  <front>
    <title abbrev="Network Inventory Management">An Inventory Management Model
    for Enterprise Networks</title>

    <author fullname="Bo Wu" initials="B." surname="Wu">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>

          <city>Nanjing</city>

          <region>Jiangsu</region>

          <code>210012</code>

          <country>China</country>
        </postal>

        <email>lana.wubo@huawei.com</email>
      </address>
    </author>

    <author fullname="Cheng Zhou" initials="C." surname="Zhou">
      <organization>China Mobile</organization>

      <address>
        <postal>
          <street/>

          <city>Beijing</city>

          <code>100053</code>

          <country>China</country>
        </postal>

        <email>zhouchengyjy@chinamobile.com</email>
      </address>
    </author>

    <author fullname="Qin Wu" initials="Q." surname="Wu">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>

          <city>Nanjing</city>

          <region>Jiangsu</region>

          <code>210012</code>

          <country>China</country>
        </postal>

        <email>bill.wu@huawei.com</email>
      </address>
    </author>

    <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
      <organization>Orange</organization>

      <address>
        <postal>
          <street>Rennes 35000</street>

          <country>France</country>
        </postal>

        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>

    <!---->

    <date year="2022"/>

    <area>OPS Area</area>

    <workgroup>OPSAWG</workgroup>

    <keyword>Network Inventory Management</keyword>

    <abstract>
      <t>This document defines a YANG model for network inventory management,
      which provides consistent representation and reporting of network nodes
      (including endpoints) inventory and enable a network orchestrator in the
      enterprise network to maintain a centralized view of all the endpoint
      types across multiple domains of the underlying network to implement a
      coherent control strategy.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>Enterprise networks are becoming heterogenous and supporting a
      variety of device types, such as BYOD vs. enterprise-supplied devices,
      Internet of things (IoT) devices, IP phones, printers, IP cameras), OT
      (Operation Technology) devices (e.g., sensors), etc. Also, these
      networks are designed to support both localized applications and
      cloud-based applications (e.g., public cloud computing, storage, etc.),
      or hybrid applications. Also, means to access network resources are not
      anymore from within specific sites, but access can be granted from
      anywhere. Dedicated gateways and authorization procedures are being
      generalized. </t>

      <t>This trend is observed for the medical, power, manufacturing, or
      other infrastructure industries. These networks host a large number of
      multi-vendor IoT or OT devices, with frequent additions and changes.
      These complex environments often expose unknown safety and reliability
      blind spots.</t>

      <t>The endpoints connected to an Enterprise network lack unified
      modelling and lifecycle management, and different services are modelled,
      collected, processed, and stored separately. The same category of
      network device and network endpoints may be (repeatedly) discovered,
      processed, and stored. Therefore, the inventory is difficult to manage
      when they are tracked in different places. Maintaining a centralized and
      up-to-date inventory is a technical enabler in order to implement a
      coherent control strategy for all endpoint types connected to an
      Enterprise network.</t>

      <t><xref target="RFC8345"/> defines a network topology model that can be
      used for network inventory extensions. The SAP network model <xref
      target="I-D.ietf-opsawg-sap"/> provides inventory data associated with
      Service Attachment Points (SAPs), which maintains an inventory of nodes
      contained in a network relying upon <xref target="RFC8345"/>. For the
      enterprise networks, the network endpoint and the network context with
      the endpoints need to be further defined. </t>

      <t>This document defines a YANG network model for inventory management,
      which provide consistent representation and reporting of network
      inventory types.</t>

      <t>Note: The following needs to be clarified:</t>

      <t>X. Why This Model Is Needed? </t>

      <t>&lt;&lt;Include a summary of why existing models do not fit the
      need&gt;&gt; </t>

      <t> <xref target="RFC8345"/> defines a network topology model that can
      be used for network inventory extensions. The SAP network model <xref
      target="I-D.ietf-opsawg-sap"/> provides inventory data associated with
      Service Attachment Points (SAPs), which maintains an inventory of nodes
      contained in a network relying upon <xref target="RFC8345"/>. </t>

      <t>X. Why This Model is Specific to Enterprises? </t>

      <t>&lt;&lt;include a discussion on the specificity of endpoints&gt;&gt;
      </t>
    </section>

    <section title="Requirements Language">
      <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>

      <t>This document defines the following term:<list style="hanging">
          <t hangText="Network Inventory:">Provides a representation of
          entities either as a network device, security device or network
          endpoint device, which include physical or virtual. It provides
          information related to devices, which could include hardware
          components, software/firmware information and management information
          relevant for the device. Network endpoints, physical or virtual,
          include physical computing equipment, e.g. physical servers in data
          centers, desktop computers, mobile devices, laptops, printers,
          sensors, and cloud-based endpoints, such as Software-as-a-Service
          (SaaS) applications, IaaS computing, storage, etc.</t>
        </list></t>
    </section>

    <section title="Sample Use Cases">
      <t>The YANG model of network inventory is used to provide abstract
      interfaces to obtain network inventory under each network management
      systems or network controllers of different domains of an enterprise.
      </t>

      <t>The Enterprise network inventory model is used to provide abstract
      interfaces to obtain network inventory under each network management
      systems or network controllers of different domains of an enterprise.
      </t>

      <t><xref target="orchestration"/> shows an example of an enterprise
      network consisting of two campus network domains. The inventory data in
      the network can include network infrastructure devices (such as routers,
      switchs, security devices) and network endpoints (such as IoT/OT
      devices, servers, laptop, mobile devices). The management systems or
      network controllers in different domains can automatically collect or
      discover the inventory by multiple approaches. </t>

      <figure anchor="orchestration"
              title="An Example of Enterprise Network Management">
        <artwork><![CDATA[            +-------------------------------------+
            | Service/network   Orchestration     |
            +-------------------------------------+
                |                               |
                |     network inventory model   |
                |                               |
                |                               |
        +----------------+              +----------------+
        | Campus manager |              | SD-WAN manager |
        +----------------+              +-------+--------+
                |                               |
                |                               |
                |                               |
  +-------------------------+            +------+--------------------+
  |     Campus Domain #1    |            |     Cloud network         |
  |                         |            |                           |
  |-------+  +-----------+  |            | +-----------+   +-------+ |
  |+IT/OTs+- +  Router   +--+---------   +-+vRouter    +---+Service| |
  |-------+  +-----------+  |            | ------------+   +-------+ |
  |                         |            |                           |
  |Site A                   |            |             Cloud Site B  |
  +-------------------------+            +---------------------------+
]]></artwork>
      </figure>

      <t>With the inventory data collected from the underlying network, the
      network orchestration system can centrally manage security and network
      policies related to network endpoints. <xref target="model"/> shows an
      enterprise network function abstraction, in which centralized network
      policy management is on top of the network inventory and other network
      and security functions to achieve a specific set of network outcomes.
      For example, the use cases can continuously ensure the security of
      enterprise networks or optimized traffic engineering in order to meet
      the performance requirements of business critical applications.</t>

      <figure anchor="model" title="Enterprise Network Abstraction">
        <artwork><![CDATA[    +---------------+  +-------------+
    |               |  |             |
    |Access Policies|  |Service SLA  |
    |               |  |Policies     |
    |               |  |             |
    +---------------+  +-------------+
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Security 
   +--------------+      +-------------+
   |              |      |             |
   |              |      |             |
   |Authentication|      | Security    |
   |              |      | Functions   |
   +--------------+      +-------------+
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Network 
   +------------+  +-------------+  +-------------+  +-------------+
   |            |  |             |  |             |                |
   |            |  |             |  |Traffic      |  |Cloud connect |
   | Topologies |  |Segmentation |  |engineering  |  |             |
   |            |  |             |  |             |  |SaaS IaaS    |
   +------------+  +-------------+  +-------------+  +-------------+
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Network Inventory model
    +---------+ +----------+ +-----------------------------------+
    |         | |          | | Endpoint                          |
    | Network | | Security | | servers,desktop computers,        |
    | devices | | devices  | | mobile devices,cloud endpoints ...|
    +---------+ +----------+ +-----------------------------------+

]]></artwork>
      </figure>

      <t/>

      <section title="Inventory Classification and Characteristics">
        <t>The network inventory defined in this document can be further
        classified into network nodes and network endpoints. The network nodes
        include network devices (e.g., routers, security devices). The network
        endpoints include IT devices, IoT devices, OT devices, personal owned
        devices, or cloud applications. The inventory can be managed with
        better control by categorizing and organizing them into custom groups
        based on a set of criteria local to each Enterprise.</t>

        <t>The network inventory provides a set of common device attributes,
        configuration information, and network context. Device attributes
        include both hardware and software data. The hardware data is from
        IETF hardware YANG which includes hardware specifications, firmware
        and software versions installed on them, asset-ids, and status.
        Software data could be license expiry, OS, etc.</t>

        <t>Examples of configuration information include, but not limited to,
        IP address, or geo-location information. Network context provides the
        interconnection relationship between network devices and the location
        or underlaying devices of the network endpoint to access the
        network.</t>
      </section>

      <section title="Inventory Management Process">
        <t>Systems that provide network inventory usually involves the
        following steps:<list style="hanging">
            <t>Identification: The first step is to create a detailed
            inventory of all network devices and network endpoints. The
            systems should automatically discover each device or endpoint when
            connected. </t>

            <t>Tracking: This involves continuously monitoring, including
            gathering status, identifying new devices in the network,and
            traffic patterns. By establishing the process, the system gets
            real-time data on the state of all the inventory.</t>
          </list></t>
      </section>

      <section title="Network Wide Policy Management">
        <t>Policy Management provides policy-based access control on requested
        resources, such as user, device access, east west communication
        between network endpoints. </t>

        <t>Knowing the list of software or hardware/firmware installed on
        network devices and network endpoints, is useful to understand and
        maintain the security state and healthy state of a network
        infrastructure. For example, if an enterprise policy requires the
        presence of certain software and prohibits the presence of other
        software, reported software installation information can be used to
        indicate compliance and non-compliance with these requirements.
        Software/hardware/firmware installation inventory lists can further be
        used to determine a network equipment's exposure to attack based on
        comparison of vulnerability or threat alerts against identified
        security profile data.</t>
      </section>

      <section title="The example Digital Twin Network">
        <t><xref target="I-D.irtf-nmrg-network-digital-twin-arch"/> defines
        "digital twin network" as a virtual representation of the physical
        network. Such virtual representation of the network is meant to be
        used to analyze, diagnose, emulate, and then manage the physical
        network based on data, models, and interfaces. A digital twin network
        architecture is proposed as follows. </t>

        <t><figure>
            <artwork><![CDATA[        +---------------------------------------------------------+
        |   +-------+   +-------+          +-------+              |
        |   | App 1 |   | App 2 |   ...    | App n |   Application|
        |   +-------+   +-------+          +-------+              |
        +-------------^-------------------+-----------------------+
                      |Capability Exposure| Intent Input
                      |                   |
        +-------------+-------------------v-----------------------+
        |                        Instance of Digital Twin Network |
        |  +--------+   +------------------------+   +--------+   |
        |  |        |   | Service Mapping Models |   |        |   |
        |  |        |   |  +------------------+  |   |        |   |
        |  | Data   +--->  |Functional Models |  +---> Digital|   |
        |  | Repo-  |   |  +-----+-----^------+  |   | Twin   |   |
        |  | sitory |   |        |     |         |   | Network|   |
        |  |        |   |  +-----v-----+------+  |   |  Mgmt  |   |
        |  |        <---+  |  Basic Models    |  <---+        |   |
        |  |        |   |  +------------------+  |   |        |   |
        |  +--------+   +------------------------+   +--------+   |
        +--------^----------------------------+-------------------+
                 |                            |
                 | data collection            | control
        +--------+----------------------------v-------------------+
        |                   Physical Network                      |
        |                                                         |
        +---------------------------------------------------------+]]></artwork>
          </figure>The service orchestration system can use digital twin
        platform to build visual relationship maps for users, networks and
        endpoints with relationship types and dependencies, and identify
        potential impacts on configuration management information from
        incidents, problems, and changes.</t>

        <t>The inventory model can, for example, be used to emulate several
        what-if scenario such as the impact of EOL or depletion of a hardware
        component on the network resilience and service availability.</t>
      </section>
    </section>

    <section title="Model Overview">
      <t>The following tree diagram <xref target="RFC8340"/> provides an
      overview of the data model for "ietf-network-inventory" module.</t>

      <figure>
        <artwork><![CDATA[module: ietf-network-inventory
  augment /nw:networks/nw:network/nw:node:
    +--rw node-type?            identityref
    +--rw device-configs
    |  +--rw system-config
    |     +--rw root?   <anydata>
    +--rw software-component
    |  +--rw software-instance* [software-type version]
    |     +--ro software-type    identityref
    |     +--ro version          string
    |     +--ro last-changed?    yang:date-and-time
    |     +--rw licenses
    |        +--rw license* [name]
    |           +--rw name                string
    |           +--ro description?        string
    |           +--ro license-filename?   string
    |           +--ro active-state?       string
    |           +--ro esn?                string
    |           +--ro status?             string
    |           +--ro issue-date?         yang:date-and-time
    |           +--ro expired-date?       string
    |           +--ro type?               string
    +--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 endpoints
       +--rw endpoint* [endpoint-id]
          +--rw endpoint-id             string
          +--rw endpoint-type?          identityref
          +--rw endpoint-ip-address?    inet:host
          +--rw endpoint-mac-address?   yang:mac-address
          +--rw hardware-components
          |  +--rw hardware-component* [name]
          |     +--rw name          string
          |     +--rw class         component-class
          |     +--rw parent?
          |     |       -> ../../hardware-component/name
          |     +--ro serial-num?   string
          |     +--ro mfg-name?     string
          |     +--ro model-name?   string
          +--rw software-component
          |  +--rw software-instance* [software-type version]
          |     +--ro software-type    identityref
          |     +--ro version          string
          |     +--ro last-changed?    yang:date-and-time
          |     +--rw licenses
          |        +--rw license* [name]
          |           +--rw name                string
          |           +--ro description?        string
          |           +--ro license-filename?   string
          |           +--ro active-state?       string
          |           +--ro esn?                string
          |           +--ro status?             string
          |           +--ro issue-date?
          |           |       yang:date-and-time
          |           +--ro expired-date?       string
          |           +--ro type?               string
          +--rw user* [user-id]
          |  +--rw user-id    string
          +--rw application* [application-id]
             +--rw application-id    string]]></artwork>
      </figure>
    </section>

    <section title="YANG Data model for Network Inventory Management">
      <figure>
        <artwork><![CDATA[<CODE BEGINS> file="ietf-network-inventory@2022-10-24.yang"
module ietf-network-inventory {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-digital-asset-map";
  prefix nw-inv;

  import ietf-yang-schema-mount {
    prefix yangmnt;
    reference
      "RFC 8528: YANG Schema Mount";
  }
  import ietf-network {
    prefix nw;
    reference
      "RFC 8345: A YANG Data Model for Network Topologies";
  }
  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import iana-hardware {
    prefix ianahw;
    reference
      "RFC 8348: A YANG Data Model for Hardware Management";
  }
  import ietf-geo-location {
    prefix geo;
    reference
      "RFC 9179: A YANG Grouping for Geographic Locations";
  }

  organization
    "IETF OPSAWG (Operations and Management Area Working Group)";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>

     Editor: Bo Wu
          <lana.wubo@huawei.com>
     Editor: Cheng Zhou
          <zhouchengyjy@chinamobile.com>
     Editor: Qin Wu
          <bill.wu@huawei.com>
     Editor: Mohamed Boucadair
          <mohamed.boucadair@orange.com>";
  description
    "This YANG module defines XXX.

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

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

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

  revision 2022-10-24 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: A Network Inventory Management Model for
       Enterprise Networks ";
  }

  identity inventory-software-type {
    description
      "Base identity of the software type.";
  }

  identity os-software {
    base inventory-software-type;
    description
      "OS software type.";
  }

  identity firmware {
    base inventory-software-type;
    description
      "Firmware type.";
  }

  identity endpoint-type {
    description
      "Base identity for endpoint type.";
  }

  identity server {
    base endpoint-type;
    description
      "Identity for computing server device.";
  }

  identity vm {
    base endpoint-type;
    description
      "Identity for VM node.";
  }

  identity iot_device {
    base endpoint-type;
    description
      "Identity for IoT device.";
  }

  identity cell-phone {
    base endpoint-type;
    description
      "Identity for mobile phone.";
  }

  identity node-type {
    description
      "Base identity for node device type.";
  }

  identity hub {
    base node-type;
    description
      "Identity for hub device.";
  }

  identity switch {
    base node-type;
    description
      "Identity for switch device.";
  }

  identity router {
    base node-type;
    description
      "Identity for router device.";
  }

  identity gateway {
    base node-type;
    description
      "Identity for gateway device.";
  }

  identity security {
    base node-type;
    description
      "Identity for access-point device.";
  }

  identity virtual-gateway {
    base node-type;
    description
      "Identity for virtual gateway device.";
  }

  identity virtual-router {
    base node-type;
    description
      "Identity for virtual router device.";
  }

  identity virtual-switch {
    base node-type;
    description
      "Identity for virtual switch device.";
  }

  identity virtual-security {
    base node-type;
    description
      "Identity for virtual security device.";
  }

  identity access-point {
    base node-type;
    description
      "Identity for access-point device.";
  }

  typedef software-class {
    type string;
    description
      "Software name for the software component.";
  }

  typedef component-class {
    type union {
      type identityref {
        base ianahw:hardware-class;
      }
      type software-class;
    }
    description
      "Definition for the type of hardware or software
       component class.";
  }

  /* Groupings */

  grouping system-config {
    description
      "Grouping for node system configuration.";  
	  
    container system-config {
    description
      "Container for system configuration mount-point, 
	  e.g. ietf-hardware, ietf-interface, etc.";		
      anydata root {
        yangmnt:mount-point "root";
        description
          "Mount-point to system configuration, which is applied to
           a network device or a security device.";
      }
    }

  }

  grouping software-component {
    description
      "Grouping for software components.";
    container software-component {
      description
        "The software components within the device.";
      list software-instance {
        key "software-type version";
        description
          "The list of software instances contained within the
           device.";
        leaf software-type {
          type identityref {
            base inventory-software-type;
          }
          config false;
          description
            "The type of software.";
        }
        leaf version {
          type string;
          config false;
          description
            "The current version of the software in the device.";
        }
        leaf last-changed {
          type yang:date-and-time;
          config false;
          description
            "The date and time the current version last changed.";
        }
        uses license-info;
      }
    }
  }

  grouping license-info {
    description
      "Grouping for license information.";
    container licenses {
      description
        "All license items.";
      list license {
        key "name";
        description
          "License item.";
        leaf name {
          type string {
            length "1..31";
          }
          description
            "License item name.";
        }
        leaf license-description {
          type string {
            length "1..255";
          }
          config false;
          description
            "The description of a license item.";
        }
        leaf license-filename {
          type string {
            length "5..127";
          }
          config false;
          description
            "The name of a license file.";
        }
        leaf active-state {
          type string {
            length "1..49";
          }
          config false;
          description
            "To indicate the license activating state of the system,
             the value can be 'normal' or 'default'.";
        }
        leaf esn {
          type string {
            length "1..2047";
          }
          config false;
          description
            "The License ESN.";
        }
        leaf license-status {
          type string {
            length "1..49";
          }
          config false;
          description
            "The status of a license item.";
        }
        leaf issue-date {
          type yang:date-and-time;
          config false;
          description
            "The issued date of a license item.";
        }
        leaf expired-date {
          type string {
            length "1..71";
          }
          config false;
          description
            "The expired date of a license item.";
        }
        leaf type {
          type string {
            length "1..49";
          }
          config false;
          description
            "The type of a license item.";
        }
      }
    }
  }

  // grouping license-info
  // Device Management Information
  /* Main blocks */

  augment "/nw:networks/nw:network/nw:node" {
    description
      "Augment used to define attach the node configuration";
    leaf node-type {
      type identityref {
        base node-type;
        description
          "Node type.";
      }
    }
    container device-configs {
      description
        "Device hardware and interface configuration.";
      uses system-config;
    }
    uses software-component;
    uses geo:geo-location;
    container endpoints {
      description
        "This container provides a list of network endpoints
         for management purposes.";
      list endpoint {
        key "endpoint-id";
        description
          "The key of the endpoint list.";
        leaf endpoint-id {
          type string;
          description
            "Endpoint identifier.";
        }
        leaf endpoint-type {
          type identityref {
            base endpoint-type;
            description
              "Endpoint type.";
          }
        }
        leaf endpoint-ip-address {
          type inet:host;
          description
            "The IP address or DNS domain name of the device.";
        }
        leaf endpoint-mac-address {
          type yang:mac-address;
          description
            "The MAC address of the device.";
        }
        container hardware-components {
          description
            "Endpoint hardware information.";
          list hardware-component {
            key "name";
            description
              "An entry in this list represents a component.";
            leaf name {
              type string;
              description
                "The component name.";
            }
            leaf class {
              type component-class;
              mandatory true;
              description
                "An indication of the general hardware type of the
                 component.";
            }
            leaf parent {
              type leafref {
                path "../../hardware-component/name";
                require-instance false;
              }
              description
                "The name of the component that physically contains
                 this component.
                 If this leaf is not instantiated, it indicates that
                 this component is not contained in any other
                 component.
                 In the event that a physical component is contained
                 by more than one physical component, this node
                 contains the name of one of these components.
                 An implementation should use the same name
                 every time this node is instantiated.";
            }
            leaf serial-num {
              type string;
              config false;
              description
                "The vendor-specific serial number string for the
                 component.
                 The preferred value is the serial number string
                 acctually printed on the component itself
                 (if present).";
            }
            leaf mfg-name {
              type string;
              config false;
              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).";
            }
            leaf model-name {
              type string;
              config false;
              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.";
            }
          }
        }
        uses software-component;
        list user {
          key "user-id";
          description
            "The user information.";
          leaf user-id {
            type string;
            description
              "The identifier of the user";
          }
        }
        list application {
          key "application-id";
          description
            "The application information.";
          leaf application-id {
            type string;
            description
              "The identifier of the application";
          }
        }
      }
    }
  }
}

<CODE ENDS>]]></artwork>
      </figure>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>The YANG module specified in this document defines a data schema
      designed to be accessed through network management protocols such as
      NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the
      secure transport layer, and the required secure transport is Secure
      Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the
      required secure transport is TLS [RFC8446].</t>

      <t>The Network Configuration Access Control Model (NACM) [RFC8341]
      provides a means of restricting access to specific NETCONF or RESTCONF
      users to a preconfigured subset of all available NETCONF or RESTCONF
      protocol operations and contents. Thus, NACM SHOULD be used to restrict
      the NSF registration from unauthorized users.</t>

      <t>There are a number of data nodes defined in this YANG module that are
      writable, creatable, and deletable (i.e., config true, which is the
      default). These data nodes may be considered sensitive or vulnerable in
      some network environments. Write operations to these data nodes could
      have a negative effect on network and security operations.</t>

      <t>Some of the readable data nodes in this YANG module may be considered
      sensitive or vulnerable in some network environments. It is thus
      important to control read access (e.g., via get, get-config, or
      notification) to these data nodes. These are the subtrees and data nodes
      and their sensitivity/vulnerability: </t>

      <t>&lt;&lt;&lt;to be completed&gt;&gt;&gt;</t>
    </section>

    <section title="Privacy Considerations">
      <t>The model includes sensitive PII data. More to be discussed:<list
          style="symbols">
          <t>Data related to BYOD devices</t>

          <t>How to prevent the model is used to track users&rsquo;
          activity</t>

          <t>...</t>
        </list></t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document registers a URI in the "IETF XML Registry" <xref
      target="RFC3688"/>. Following the format in <xref target="RFC3688"/>,
      the following registration has been made.</t>

      <figure>
        <artwork><![CDATA[     URI: urn:ietf:params:xml:ns:yang:ietf-network-inventory

     Registrant Contact: The IESG.

     XML: N/A, the requested URI is an XML namespace.]]></artwork>
      </figure>

      <t>This document registers a YANG module in the "YANG Module Names"
      registry<xref target="RFC7950"/> .</t>

      <figure>
        <artwork><![CDATA[     name:         ietf-network-inventory
     namespace:    urn:ietf:params:xml:ns:yang:ietf-network-inventory
     prefix:       nw-inv
     maintained by IANA: N
     reference:    RFC xxxx]]></artwork>
      </figure>
    </section>

    <section title="Acknowledgements">
      <t>TBD</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include='reference.RFC.3688'?>

      <?rfc include='reference.RFC.6242'?>

      <?rfc include='reference.RFC.7950'?>

      <?rfc include='reference.RFC.8040'?>

      <?rfc include='reference.RFC.8446'?>

      <?rfc include='reference.RFC.8341'?>

      <?rfc include="reference.RFC.8174"?>

      <?rfc include="reference.RFC.6241"?>

      <?rfc include="reference.RFC.8345"?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.I-D.ietf-opsawg-sap'?>

      <?rfc include="reference.RFC.8340"?>

      <?rfc include='reference.I-D.irtf-nmrg-network-digital-twin-arch'?>
    </references>
  </back>
</rfc>
