A YANG Data Model for Network Inventory
Internet-Draft draft-ietf-ivy-network-inventory-yang-03
Chaode Yu
Huawei Technologies
yuchaode@huawei.com
Sergio Belotti
Nokia
sergio.belotti@nokia.com
Jean-Francois Bouquier
Vodafone
jeff.bouquier@vodafone.com
Fabio Peruzzini
TIM
fabio.peruzzini@telecomitalia.it
Phil Bedard
Cisco
phbedard@cisco.com
07 July 2024
next generation
unicorn
sparkling distributed ledger
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.
About This Document
The latest revision of this draft can be found at https://ietf-ivy-wg.github.io/network-inventory-yang/draft-ietf-ivy-network-inventory-yang.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-ietf-ivy-network-inventory-yang/.
Source for this draft and an issue tracker can be found at https://github.com/ietf-ivy-wg/network-inventory-yang.
Introduction
The purpose of this document is to define a base network inventory YANG data model that is application- and technology-agnostic. The base data model can be augmented to describe application-specific or technology-specific information.
Network Inventory management is a key component in operators' OSS architectures.
Network Inventory is a fundamental functionality in network management and was specified many years ago. Given the emergence of data models and their deployment in operator's management and control systems, the traditional function of inventory management is also requested to be defined as a data model.
Network Inventory management and monitoring is a critical part for ensuring the network stays healthy, well-planned, and functioning in the operator's network. Network Inventory management allows the operator to keep track of which physical devices are deployed in the network including relevant software and hardware versions.
The Network Inventory management also helps the operator to know when to acquire new assets and what is needed, or to decommission old or faulty ones, which can help to improve network performance and capacity planning.
In [I-D.ietf-teas-actn-poi-applicability] a gap was identified regarding the lack of a YANG data model that could be used at ACTN MPI interface level to report whole/partial network hardware inventory information available at domain controller level towards north-bound systems (e.g., MDSC or OSS layer).
[RFC8345] initial goal was to make possible the augmentation of the YANG data model with Network Inventory data model but this was never developed and the scope was kept limited to network topology data only.
It is key for operators to drive the industry towards the use of a standard YANG data model for Network Inventory data instead of using vendors proprietary APIs (e.g., REST API).
In the ACTN architecture, this would bring also clear benefits at MDSC level for packet over optical integration scenarios since this would enable the correlation of the HW network inventory information with the links information reported in the network topology model. This represent a priority for operators to implement this with a standard YANG data model that could be used as soon as possible in multi-vendor integrations of PNCs with MDSCs.
The intention is to define a generic YANG base data model that would be as much as possible technology agnostic (valid for IP, optical and microwave networks) and that could be augmented, when required, to include some technology-specific inventory details together with specific HW or SW component's attributes.
[RFC8348] defines a YANG data model for the management of the hardware on a single server and therefore it is more applicable to the domain controller South Bound Interface (SBI) towards the network elements rather than at the domain controller's northbound. However, the YANG data model defined in [RFC8348] has been used as a reference for defining the YANG network inventory data model presented in this draft.
The proposed YANG data model has been analyzed at the present stage to cover the common requirements for both HW and SW use cases for Network Inventory.
Network Inventory is a collection of data for network devices and their components managed by a specific management system. Per the definition of [RFC8969],the network inventory model is a network model.
This document defines one YANG module "ietf-network-inventory" in Section 5.
Section 3 provides a set of augmentation considerations for extensions of hardware, software, entitlement, and inventory topology mapping.
The YANG data model defined in this document conforms to the Network Management Datastore Architecture [RFC8342].
Terminology and Notations
The following terms are defined in [RFC7950] and are not redefined here:
- client
- server
- augment
- data model
- data node
The following terms are defined in [RFC6241] and are not redefined here:
- configuration data
- state data
The terminology for describing YANG data models is found in [RFC7950].
TBD: Recap the concept of chassis/slot/component/board/... in [TMF_SD2-20].
Following terms are used for the representation of the hierarchies in the network inventory.
Network Inventory:
- a collection of data for network devices and their components managed by a specific management system.
Network Element:
- a manageable network entity that contains hardware and software units, e.g. a network device installed on one or several chassis
Chassis:
- a holder of the device installation.
Slot:
- a holder of the board.
Component:
- a unit of the network element, e.g. hardware components like chassis, card, port, software components like software-patch, bios, and boot-loader
Board/Card:
- a pluggable equipment can be inserted into one or several slots/sub-slots and can afford a specific transmission function independently.
Port:
- an interface on board
Container: > Within this document , with the term "container" we consider an hardware component class capable of containing one or more removable physical entities, e.g. a slot in a chassis is containing a board.
Requirements Notation
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
Tree Diagram
A simplified graphical representation of the data model is used in Section 4 of this document. The meaning of the symbols in this diagram is defined in [RFC8340].
Prefix in Data Node Names
In this document, names of data nodes and other data model objects are prefixed using the standard prefix associated with the corresponding YANG imported modules, as shown in the following table.
Prefixes and corresponding YANG modules
Prefix | Yang Module | Reference
inet | ietf-inet-types | [RFC6991]
yang | ietf-yang-types | [RFC6991]
ianahw | iana-hardware | [IANA_YANG]
ni | ietf-network-inventory | RFC XXXX
RFC Editor Note: Please replace XXXX with the RFC number assigned to this document. Please remove this note.
YANG Data Model for Network Inventory Overview
The network element definition is generalized to support physical devices and other types of inventory objects (e.g., virtual network elements) that can be managed as physical network elements from an inventory perspective. The data model for Network Element presented in this document uses a flat list of network element.
The "ne-type" is defined as a YANG identity to describe the type of the network element. This document defines only the "physical-network-element" identity.
The component definition is also generalized to support any types of component, such as hardware, software, or firmware.
Different types of components can be distinguished by the class of component. The component "class" is defined as a union between the hardware class identity, defined in "iana-hardware", and the "non-hardware" identity, defined in this document. Attributes related to specific class of component can be found in the component-specific-info structure.
The identity definition of additional types of "ne-type" and "non- hardware" identity of component are outside the scope of this document and could be defined in application-specific or technology- specific companion augmentation data models, such as [I-D.wzwb-ivy-network-inventory-software].
In [RFC8348], rack, chassis, slot, sub-slot, board and port are defined as components of network elements with generic attributes.
While [RFC8348] is used to manage the hardware of a single server (e.g., a network element), the Network Inventory YANG data model is used to retrieve the base network inventory information that a controller discovers from all the network elements under its control.
However, the YANG data model defined in [RFC8348] has been used as a reference for defining the YANG network inventory data model. This approach can simplify the implementation of this network inventory model when the controller uses the YANG data model defined in [RFC8348] to retrieve the hardware from the network elements under its control.

  +--rw network-elements
     +--rw network-element* [ne-id]
        +--rw ne-id            string
        ............................................
        +--rw components
           +--rw component* [component-id]
              +--rw component-id            string
              ......................................

Common Design for All Inventory Objects
For all the inventory objects, there are some common attributes existing. Such as:
Identifier: here we suggest to use uuid format which is widely implemented with systems. It is guaranteed to be globally unique.
Name: name is a human-readable label information which could be used to present on GUI. This name is suggested to be provided by server.
Alias: alias is also a human-readable label information which could be modified by user. It could also be present on GUI instead of name.
Description: description is a human-readable information which could be also input by user. Description provides more detailed information to prompt users when performing maintenance operations.

  +--rw network-elements
     +--rw network-element* [ne-id]
        +--rw ne-id            string
        +--rw ne-type?         identityref
        +--rw uuid?            yang:uuid
        +--rw name?            string
        +--rw description?     string
        +--rw alias?           string
        ...................................
        +--rw components
           +--rw component* [component-id]
              +--rw component-id            string
              +--rw uuid?                   yang:uuid
              +--rw name?                   string
              +--rw description?            string
              +--rw alias?                  string
              +--rw class                   union
              ...................................

Network Element
To be consistent with the component definition, some of the attributes defined in [RFC8348] for components are reused for network elements. These attributes include:

  +--rw network-elements
     +--rw network-element* [ne-id]
        ...................................
        +--rw hardware-rev?    string
        +--rw software-rev?    string
        +--rw mfg-name?        string
        +--rw mfg-date?        yang:date-and-time
        +--rw part-number?     string
        +--rw serial-number?   string
        +--rw product-name?    string
        ...................................

Note: Not all the attributes defined in [RFC8348] are applicable for network element. And there could also be some missing attributes which are not recognized by [RFC8348]. More extensions could be introduced in later revisions after the missing attributes are fully discussed.
Components
The YANG data model for network inventory mainly follows the same approach of [RFC8348] and reports the network hardware inventory as a list of components with different types (e.g., chassis, module, port).
The component definition is generalized to both hardware components and non-hardware components (e.g., software components).

  +--rw components
      +--rw component* [component-id]
        +--rw component-id            string
        +--rw uuid?                   yang:uuid
        +--rw name?                   string
        +--rw description?            string
        +--rw alias?                  string
        +--rw class                   union
        +--rw child-component-ref
        +--rw parent-rel-pos?         int32
        +--rw parent-component-ref
        +--rw hardware-rev?           string
        +--rw firmware-rev?           string
        +--rw software-rev?           string
        +--rw serial-num?             string
        +--rw mfg-name?               string
        +--rw part-number?            string
        +--rw asset-id?               string
        +--rw is-fru?                 boolean
        +--rw mfg-date?               yang:date-and-time
        +--rw uri*                    inet:uri

For state data like admin-state, oper-state and so on, we consider they are related to device hardware management and not network inventory. Therefore, they are outside of scope of this document. Same for the sensor-data, they should be defined in some other performance monitoring data models instead of inventory data model.
Hardware Components
Based on TMF classification in [TMF_SD2-20], hardware components can be divided into two groups, holder group and equipment group. The holder group contains rack, chassis, slot, sub-slot while the equipment group contains network-element, board and port.
The relationship between typical inventory objects in a physical network element can be described by Figure 1 below:
Relationship between typical inventory objects in physical network elements

                            +-----------------+
                            | network element |
                            +-----------------+
                                    ||
                                    ||
                                    ||
                                    ||1:M
                                    ||
                                    ||
                                    ||
                                    \/
                              +-------------+
                              |   chassis/  |---+
                              | sub-chassis |<--|
                              +-------------+
                                    ||
                     ______1:N______||_____1:M_______
                     ||------------------ ---------||
                     \/                            \/
              +--------------+               +-----------+
          +---|     slot     |               |   board   |
          |-->|  /sub-slot   |               |           |
              +--------------+               +-----------+
                                                   ||
                                                   ||1:N
                                                   \/
                                             +-----------+
                                             |    port   |
                                             +-----------+

The "iana-hardware" module [IANA_YANG] defines YANG identities for the hardware component types in the IANA-maintained "IANA-ENTITY-MIB" registry.
Some of the definitions taken from [RFC8348] are actually based on the ENTITY-MIB [RFC6933].
For the additional attributes of specific hardware, such as CPU, storage, port, power supply is defined in the hardware extension.
Software Components
This document defines "software-rev" of NEs and components, which are basic software attributes of a Network Element.
The software and hardware components share the same attributes of the component and have similar replaceable requirements. Generally, the device also has other software data, for example, one or more software patch information.
The software components of other classes, such as platform software, BIOS, bootloader, and software patch information, are outside the scope of this document and defined other documents such as [I-D.wzwb-ivy-network-inventory-software].
Changes with respect to RFC8348
We re-defined some attributes listed in [RFC8348], based on some integration experience for network wide inventory data.
New Parent Identifiers' Reference
[RFC8348] provided a "parent-ref" attribute, which was an identifier reference to its parent component. When the MDSC or OSS systems want to find this component's grandparent or higher level component in the hierarchy, they need to retrieve this parent-ref step by step. To reduce this iterative work, we decided to provide a list of hierarchical parent components' identifier references.

  +--ro components
     +--ro component* [component-id]
        ...................................
        +--ro parent-component-references
        |   +--ro component-reference* [index]
        |      +--ro index    uint8
        |      +--ro class?   -> ../../../class
        |      +--ro uuid?    -> ../../../uuid
        ...................................

The hierarchical components' identifier could be found by the "component-reference" list. The "index" attribute is used to order the list by the hierarchical relationship from topmost component (with the "index" set to 0) to bottom component.
Component-Specific Info Design
According to the management requirements from operators, some important attributes are not defined in [RFC8348]. These attributes could be component-specific and are not suitable to define under the component list node. So, the model can be augmented with HW-specific-info grouping containing attributes applicable to HW e.g. boards/slot components only. Other component-specific attributes, such as SW-specific-info, may be defined in companion augmentation data models, such as [I-D.wzwb-ivy-network-inventory-software] and are out of the scope of this model.

+--rw components
   +--rw component* [component-id]
   |  +--rw component-id            string
   |   .......................................
   |  +--ro chassis-specific-info
   |  +--ro slot-specific-info
   |  +--ro board-specific-info
   |  +--ro port-specific-info

Part Number
According to the description in [RFC8348], the attribute named "model-name" under the component, is preferred to have a customer-visible part number value. "Model-name" is not straightforward to understand and we suggest to rename it as "part-number" directly.

  +--ro components
     +--ro component* [uuid]
        ...................................
        +--ro part-number?           string
        ...................................

Extending Network Inventory
This document defines the basic network inventory attributes applicable to typical network scenarios. For finer-grained and specific management scenarios, the relationship between this model and other models is illustrated in Figure 4.

             +-------------------------+
             |                         |
             | Base Network Inventory  |
             |                         |
             +------------+------------+
                          |
       +------------------+-------------------+
       |                  |                   |
+------V------+    +------V------      +------V------    +-------------+
|             |    |             |     |             |   |             |
| Hardware    |    |  Software   |     |             |   |  Inventory  |
| Extensions  |    |  Extensions |     | Entitlement |   |  Topology   |
| e.g. Power  |    |  e.g.       |     |             |   |  Mapping    |
| supply unit |    |  SW patch   |     |             |   |             |
+-------------+    +-------------+     +-------------+   +-------------+

Network Inventory Tree Diagram
Figure 2 below shows the tree diagram of the YANG data model defined in module "ietf-network-inventory" (Section 5).
Network inventory tree diagram

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

YANG Data Model for Network Inventory
Network inventory YANG module

module ietf-network-inventory {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-network-inventory";
  prefix ni;

  import iana-hardware {
    prefix ianahw;
    reference
      "https://www.iana.org/assignments/yang-parameters";
  }
  import ietf-yang-types {
    prefix yang;
    reference
      "RFC6991: Common YANG Data Types.";
  }
  import ietf-inet-types {
    prefix inet;
    reference
      "RFC6991: Common YANG Data Types.";
  }

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

     Editor:   Chaode Yu
               <yuchaode@huawei.com>

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

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

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

     Editor:   Phil Bedard
               <phbedard@cisco.com>";
  description
    "This module defines a base model for retrieving network
     inventory.

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

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

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

     This version of this YANG module is part of RFC XXXX; see
     the RFC itself for full legal notices.

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

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

  revision 2024-04-09 {
    description
      "Initial version";
    reference
      "RFC XXXX: A YANG Data Model for Network Inventory.";
    //RFC Editor: replace XXXX with actual RFC number, update date
    //information and remove this note
  }

  identity non-hardware-component-class {
    description
      "Base identity for non hardware components (e.g., software
       components) in a managed device.";
  }

  identity ne-type {
    description
      "Base identity for network element (NE) types.";
  }

  identity ne-physical {
    base ni:ne-type;
    description
      "A physical network element (NE). ";
  }

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

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

  grouping ne-specific-info-grouping {
    description
      "Attributes applicable to network elements.";
    leaf hardware-rev {
      type string;
      config false;
      description
        "The vendor-specific hardware revision string for the NE.";
    }
    leaf software-rev {
      type string;
      config false;
      description
        "The vendor-specific software revision string for the NE.";
    }
    leaf-list software-patch-rev {
      type string;
      config false;
      description
        "The vendor-specific patch software revision string for the
         NE.";
    }
    leaf mfg-name {
      type string;
      config false;
      description
        "The name of the manufacturer of this NE";
    }
    leaf mfg-date {
      type yang:date-and-time;
      config false;
      description
        "The date of manufacturing of the NE.";
    }
    leaf serial-number {
      type string;
      config false;
      description
        "The vendor-specific serial number of the network element
         instance. It is expected that vendors assign unique serial
         numbers to different network element instances within the
         scope of the product name.";
    }
    leaf product-name {
      type string;
      config false;
      description
        "The vendor-specific and human-interpretable string
         describing the network element type. It is expected that
         vendors assign unique product names to different NE types
         within the scope of the vendor.";
    }
  }

  grouping component-specific-info-grouping {
    description
      "Provide component-specific attributes for different
       components.";
    container chassis-specific-info {
      when "../class = 'ianahw:chassis'";
      config false;
      description
        "This container contains some attributes belong to
         chassis only.";
      uses chassis-specific-info-grouping;
    }
    container slot-specific-info {
      when "../class = 'ianahw:container'";
      config false;
      description
        "This container contains some attributes belong to
         slot only.";
      uses slot-specific-info-grouping;
    }
    container board-specific-info {
      when "../class = 'ianahw:module'";
      config false;
      description
        "This container contains some attributes belong to
         board only.";
      uses board-specific-info-grouping;
    }
    container port-specific-info {
      when "../class = 'ianahw:port'";
      config false;
      description
        "This container contains some attributes belong to
         port only.";
      uses port-specific-info-grouping;
    }
  }

  grouping chassis-specific-info-grouping {
    //To be enriched in the future.
    description
      "Specific attributes applicable to chassis only.";
  }

  grouping slot-specific-info-grouping {
    //To be enriched in the future.
    description
      "Specific attributes applicable to slots only.";
  }

  grouping board-specific-info-grouping {
    //To be enriched in the future.
    description
      "Specific attributes applicable to boards only.";
  }

  grouping port-specific-info-grouping {
    //To be enriched in the future.
    description
      "Specific attributes applicable to ports only.";
  }

  grouping ne-info-grouping {
    description
      "Grouping for network elements.";
    container network-elements {
      description
        "The top-level container for the list of network elements
         within the network.";
      list network-element {
        key "ne-id";
        description
          "The list of network elements within the network.";
        leaf ne-id {
          type string;
          description
            "Network Element (NE) identifier.";
        }
        leaf ne-type {
          type identityref {
            base ne-type;
          }
          default "ne-physical";
          config false;
          description
            "The type of network element (NE).";
        }
        uses common-entity-attributes;
        uses ne-specific-info-grouping;
        container components {
          description
            "The top-level container for the list of components
             within a network element.";
          list component {
            key "component-id";
            description
              "The list of components within a network element.";
            leaf component-id {
              type string;
              description
                "Component identifier";
            }
            leaf class {
              type union {
                type identityref {
                  base ianahw:hardware-class;
                }
                type identityref {
                  base non-hardware-component-class;
                }
              }
              config false;
              mandatory true;
              description
                "The type of the component.";
            }
            uses common-entity-attributes;
            container child-component-ref {
              config false;
              description
                "A placeholder for adding the reference to child
                 component(s): to further discuss whether to define
                 a child leaf-list as RFC8348 or a list of
                 sub-components as openconfig-platform.";
            }
            leaf parent-rel-pos {
              type int32 {
                range "0 .. 2147483647";
              }
              config false;
              description
                "The relative position with respect to the parent
                 component among all the sibling components.";
              reference
                "RFC 6933: Entity MIB (Version 4) -
                          entPhysicalParentRelPos";
            }
            container parent-component-ref {
              config false;
              description
                "A placeholder for adding the reference to parent
                 component(s): to further discuss whether to define
                 a parent attribute as RFC8348 or a
                 parent-component-references container as in
                 draft-ietf-ccamp-network-inventory-yang-02.";
            }
            leaf hardware-rev {
              type string;
              config false;
              description
                "The vendor-specific hardware revision string for the
                 component.  The preferred value is the hardware
                 revision identifier actually printed on the
                 component itself (if present).";
              reference
                "RFC 6933: Entity MIB (Version 4) -
                          entPhysicalHardwareRev";
            }
            leaf firmware-rev {
              type string;
              config false;
              description
                "The vendor-specific firmware revision string for the
                 component.";
              reference
                "RFC 6933: Entity MIB (Version 4) -
                          entPhysicalFirmwareRev";
            }
            leaf software-rev {
              type string;
              config false;
              description
                "The vendor-specific software revision string for the
                 component.";
              reference
                "RFC 6933: Entity MIB (Version 4) -
                          entPhysicalSoftwareRev";
            }
            leaf-list software-patch-rev {
              type string;
              config false;
              description
                "The vendor-specific patch software revision string
                 for the component.";
            }
            leaf serial-num {
              type string;
              config false;
              description
                "The vendor-specific serial number of the component
                 instance. It is expected that vendors assign unique
                 serial numbers to different component instances
                 within the scope of the part number.";
            }
            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).

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

                 If the manufacturer name string associated with the
                 physical component is unknown to the server, then
                 this node is not instantiated.";
              reference
                "RFC 6933: Entity MIB (Version 4) -
                 entPhysicalMfgName";
            }
            leaf part-number {
              type string;
              config false;
              description
                "The vendor-specific part number of the component
                 type. It is expected that vendors assign unique part
                 numbers to different component types within the
                 scope of the vendor.";
            }
            leaf product-name {
              type string;
              config false;
              description
                "The vendor-specific and human-interpretable string
                 describing the component type. It is expected that
                 vendors assign unique product names to different
                 component types within the scope of the vendor.";
            }
            leaf asset-id {
              type string;
              config false;
              description
                "This node is a user-assigned asset tracking
                 identifier for the component.

                 A server implementation MAY map this leaf to the
                 entPhysicalAssetID MIB object.  Such an
                 implementation needs to use some mechanism to handle
                 the differences in size and characters allowed
                 between this leaf and entPhysicalAssetID.

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

  container network-inventory {
    description
      "Top-level container for network inventory.";
    uses ne-info-grouping;
  }
}

Manageability Considerations
<Add any manageability considerations>
Security Considerations
<Add any security considerations>
IANA Considerations
<Add any IANA considerations>
References
Normative References
[TMF_SD2-20]

SD2-20_Equipment Model
TM Forum
May 2008
TMF MTOSI 4.0, Network Resource Fulfilment (NRF), SD2-20
[IANA_YANG]

YANG Parameters
IANA
n.d.
[RFC8348]

A YANG Data Model for Hardware Management
A. Bierman
M. Bjorklund
J. Dong
D. Romascanu
March 2018
RFC 8348
DOI 10.17487/RFC8348
[RFC8342]

Network Management Datastore Architecture (NMDA)
M. Bjorklund
J. Schoenwaelder
P. Shafer
K. Watsen
R. Wilton
March 2018
RFC 8342
DOI 10.17487/RFC8342
[RFC7950]

The YANG 1.1 Data Modeling Language
M. Bjorklund, Ed.
August 2016
RFC 7950
DOI 10.17487/RFC7950
[RFC6241]

Network Configuration Protocol (NETCONF)
R. Enns, Ed.
M. Bjorklund, Ed.
J. Schoenwaelder, Ed.
A. Bierman, Ed.
June 2011
RFC 6241
DOI 10.17487/RFC6241
[RFC2119]

Key words for use in RFCs to Indicate Requirement Levels
S. Bradner
March 1997
BCP 14
RFC 2119
DOI 10.17487/RFC2119
[RFC8174]

Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words
B. Leiba
May 2017
BCP 14
RFC 8174
DOI 10.17487/RFC8174
[RFC8340]

YANG Tree Diagrams
M. Bjorklund
L. Berger, Ed.
March 2018
BCP 215
RFC 8340
DOI 10.17487/RFC8340
[RFC6991]

Common YANG Data Types
J. Schoenwaelder, Ed.
July 2013
RFC 6991
DOI 10.17487/RFC6991
[RFC6933]

Entity MIB (Version 4)
A. Bierman
D. Romascanu
J. Quittek
M. Chandramouli
May 2013
RFC 6933
DOI 10.17487/RFC6933
Informative References
[I-D.ietf-teas-actn-poi-applicability]

Applicability of Abstraction and Control of Traffic Engineered Networks (ACTN) to Packet Optical Integration (POI)
Fabio Peruzzini
TIM
Jean-Francois Bouquier
Vodafone
Italo Busi
Huawei
Daniel King
Old Dog Consulting
Daniele Ceccarelli
Cisco
5 July 2024
Internet-Draft draft-ietf-teas-actn-poi-applicability-12
[RFC8345]

A YANG Data Model for Network Topologies
A. Clemm
J. Medved
R. Varga
N. Bahadur
H. Ananthakrishnan
X. Liu
March 2018
RFC 8345
DOI 10.17487/RFC8345
[RFC8969]

A Framework for Automating Service and Network Management with YANG
Q. Wu, Ed.
M. Boucadair, Ed.
D. Lopez
C. Xie
L. Geng
January 2021
RFC 8969
DOI 10.17487/RFC8969
[I-D.wzwb-ivy-network-inventory-software]

A YANG Network Data Model of Network Inventory Software Extensions
Bo Wu
Huawei
Cheng Zhou
China Mobile
Qin Wu
Huawei
Mohamed Boucadair
Orange
30 April 2024
Internet-Draft draft-wzwb-ivy-network-inventory-software-01
Comparison With Openconfig-platform Data Model
Since more and more devices can be managed by domain controller through OpenConfig, to ensure that our inventory data model can cover these devices' inventory data, we have compared our inventory data model with the "openconfig-platform" model which is the data model used to manage inventory information in OpenConfig.
Openconfig-platform data model is NE-level and uses a generic component concept to describe its inner devices and containers, which is similar to "ietf-hardware" model in [RFC8348]. Since we have also reused the component concept of [RFC8348] in our inventory data model, we can compare the component's attributes between "openconfig-platform" and our model directly , which is stated below:
Comparison between openconfig platform and inventory data models
Attributes in oc-platform | Attributes in our model | remark
name | name |
type | class |
id | uuid |
location | location |
description | description |
mfg-name | mfg-name |
mfg-date | mfg-date |
hardware-version | hardware-rev |
firmware-version | firmware-rev |
software-version | software-rev |
serial-no | serial-num |
part-no | part-number |
clei-code | | TBD
removable | is-fru |
oper-status | | state data
empty | contained-child? | If there is no contained child, it is empty.
parent | parent-references |
redundant-role | | TBD
last-switchover-reason | | state data
last-switchover-time | | state data
last-reboot-reason | | state data
last-reboot-time | | state data
switchover-ready | | state data
temperature | | performance data
memory | | performance data
allocated-power | | TBD
used-power | | TBD
pcie | | alarm data
properties | | TBD
subcomponents | contained-child |
chassis | chassis-specific-info |
port | port-specific-info |
power-supply | | TBD
fan | | Fan is considered as a specific board. And no need to define as a single component
fabric | | TBD
storage | | For Optical and IP technology, no need to manage storage on network element
cpu | | For Optical and IP technology, no need to manage CPU on network element
integrated-circuit | board-specific-info |
backplane | | Backplane is considered as a part of board. And no need to define as a single component
software-module | | TBD
controller-card | | Controller card is considered as a specific functional board. And no need to define as a single component
As it mentioned in Section 2.3 that state data and performance data are out of scope of our data model, it is same for alarm data and it should be defined in some other alarm data models separately. And for some component specific structures in "openconfig-platform", we consider some of them can be contained by our existing structure, such as fan, backplane, and controller-card, while some others do not need to be included in this network inventory model like storage and cpu.
Mostly, our inventory data model can cover the attributes from OpenConfig.
Efficiency Issue
During the integration with OSS in some operators, some efficiency/scalability concerns have been discovered when synchronizing network inventory data for big networks. More discussions are needed to address these concerns.
Considering that relational databases are widely used by traditional OSS systems and also by some network controllers, the inventory objects are most likely to be saved in different tables. With the model defined in current draft, when doing a full synchronization, network controller needs to convert all inventory objects of each NE into component objects and combine them together into a single list, and then construct a response and send to OSS or MDSC. The OSS or MDSC needs to classify the component list and divide them into different groups, in order to save them in different tables. The combining-regrouping steps are impacting the network controller & OSS/MDSC processing, which may result in efficiency/scalability limitations in large scale networks.
An alternative YANG model structure, which defines the inventory objects directly, instead of defining generic components, has also been analyzed. However, also with this model, there still could be some scalability limitations when synchronizing full inventory resources in large scale of networks. This scalability limitation is caused by the limited transmission capabilities of HTTP protocol. We think that this scalability limitation should be solved at protocol level rather than data model level.
The model proposed by this draft is designed to be as generic as possible so to cover future special types of inventory objects that could be used in other technologies, that have not been identified yet. If the inventory objects were to be defined directly with fixed hierarchical relationships in YANG model, this new type of inventory objects needs to be manually defined, which is not a backward compatible change and therefore is not an acceptable approach for implementation. With a generic model, it is only needed to augment a new component class and extend some specific attributes for this new inventory component class, which is more flexible. We consider that this generic data model, enabling a flexible and backward compatible approach for other technologies, represents the main scope of this draft. Solution description to efficiency/scalability limitations mentioned above is considered as out-of-scope.
Acknowledgments
The authors of this document would like to thank the authors of [I-D.ietf-teas-actn-poi-applicability] for having identified the gap and requirements to trigger this work.
This document was prepared using kramdown.
Contributors
Italo Busi
Huawei Technologies
italo.busi@huawei.com
Aihua Guo
Futurewei Technologies
aihuaguo.ietf@gmail.com、
Victor Lopez
Nokia
victor.lopez@nokia.com
Bo Wu
Huawei Technologies
lana.wubo@huawei.com
Chenfang Zhang
China Unicom
zhangcf80@chinaunicom.cn
Oscar Gonzalez de Dios
Telefonica
oscar.gonzalezdedios@telefonica.com
Nigel Davis
Ciena
ndavis@ciena.com