Add ietf-hardware model 13/74613/13
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 28 Jul 2018 17:48:51 +0000 (19:48 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 7 Aug 2018 14:14:43 +0000 (16:14 +0200)
This adds ietf-hardware model, updating previously-defined features.
Unfortunately, this does not wuite work yet, as MDSAL-352 needs to
be fixed.

Change-Id: I6ce999e20cca870e043e42da42f264d9242dc872
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
model/artifacts/pom.xml
model/features/features-mdsal-model/pom.xml
model/features/odl-mdsal-model-rfc8348-non-nmda/pom.xml [new file with mode: 0644]
model/features/odl-mdsal-model-rfc8348/pom.xml
model/features/pom.xml
model/ietf/pom.xml
model/ietf/rfc8348-ietf-hardware-state/pom.xml [new file with mode: 0644]
model/ietf/rfc8348-ietf-hardware-state/src/main/yang-disabled/ietf-hardware-state@2018-03-13.yang [new file with mode: 0644]
model/ietf/rfc8348-ietf-hardware/pom.xml [new file with mode: 0644]
model/ietf/rfc8348-ietf-hardware/src/main/yang-disabled/ietf-hardware@2018-03-13.yang [new file with mode: 0644]
model/ietf/rfc8348/pom.xml [new file with mode: 0644]

index b791a757110ea6571757720dfd3d73dfbccfe2b2..2c980ab6e9d0b2ff4fbb2ce6219e7254e9be2f75 100644 (file)
             </dependency>
 
             <!-- RFC8348 -->
+            <dependency>
+                <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+                <artifactId>rfc8348</artifactId>
+                <version>1.0.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+                <artifactId>rfc8348-ietf-hardware</artifactId>
+                <version>1.0.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+                <artifactId>rfc8348-ietf-hardware-state</artifactId>
+                <version>1.0.0-SNAPSHOT</version>
+            </dependency>
             <dependency>
                 <groupId>org.opendaylight.mdsal.binding.model.iana</groupId>
                 <artifactId>iana-hardware</artifactId>
                 <classifier>features</classifier>
                 <type>xml</type>
             </dependency>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.model</groupId>
+                <artifactId>odl-mdsal-model-rfc8348-non-nmda</artifactId>
+                <version>1.0.0-SNAPSHOT</version>
+                <classifier>features</classifier>
+                <type>xml</type>
+            </dependency>
             <dependency>
                 <groupId>org.opendaylight.mdsal.model</groupId>
                 <artifactId>odl-mdsal-model-rfc8349</artifactId>
index 377b03bae9f8fbc2f8424379a87b8e92760bec34..a246f6f783ac23e82c5f7a2d9b5de56f019dc8b7 100644 (file)
             <classifier>features</classifier>
             <type>xml</type>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.model</groupId>
+            <artifactId>odl-mdsal-model-rfc8348-non-nmda</artifactId>
+            <classifier>features</classifier>
+            <type>xml</type>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal.model</groupId>
             <artifactId>odl-mdsal-model-rfc8349</artifactId>
diff --git a/model/features/odl-mdsal-model-rfc8348-non-nmda/pom.xml b/model/features/odl-mdsal-model-rfc8348-non-nmda/pom.xml
new file mode 100644 (file)
index 0000000..19b2f69
--- /dev/null
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright © 2018 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.opendaylight.odlparent</groupId>
+        <artifactId>single-feature-parent</artifactId>
+        <version>3.1.3</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.opendaylight.mdsal.model</groupId>
+    <artifactId>odl-mdsal-model-rfc8348-non-nmda</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>feature</packaging>
+
+    <name>OpenDaylight :: MD-SAL :: Model :: RFC8348 :: NON-NMDA</name>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.model</groupId>
+                <artifactId>mdsal-model-artifacts</artifactId>
+                <version>0.13.0-SNAPSHOT</version>
+                <scope>import</scope>
+                <type>pom</type>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.model</groupId>
+            <artifactId>odl-mdsal-model-rfc8348</artifactId>
+            <classifier>features</classifier>
+            <type>xml</type>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8348-ietf-hardware-state</artifactId>
+        </dependency>
+    </dependencies>
+</project>
index d32bcfea7ece3bf6a2883986df2c9413867ed7fd..f6a324d925bf16af211156f1e025cbae5ac54384 100644 (file)
@@ -43,8 +43,8 @@
             <type>xml</type>
         </dependency>
         <dependency>
-            <groupId>org.opendaylight.mdsal.binding.model.iana</groupId>
-            <artifactId>iana-hardware</artifactId>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8348</artifactId>
         </dependency>
     </dependencies>
 </project>
index c6779eb147ed0e43746094cf249d00711beac5c2..9a4295392075ed71ef61617342943bcedc3fe885 100644 (file)
@@ -38,6 +38,7 @@
         <module>odl-mdsal-model-rfc8345</module>
         <module>odl-mdsal-model-rfc8345-non-nmda</module>
         <module>odl-mdsal-model-rfc8348</module>
+        <module>odl-mdsal-model-rfc8348-non-nmda</module>
         <module>odl-mdsal-model-rfc8349</module>
 
         <!-- IETF drafts -->
index 51d83f1112011ace5227def8749f449b1c6c8e04..e99096ede8d957b0a0fbb0203bb0445076072821 100644 (file)
         <module>rfc8345-ietf-network-topology</module>
         <module>rfc8345-ietf-network-topology-state</module>
 
+        <!-- RFC8348 Hardware Management -->
+        <module>rfc8348</module>
+        <module>rfc8348-ietf-hardware</module>
+        <module>rfc8348-ietf-hardware-state</module>
+
         <!-- RFC8349 Routing Management -->
         <module>rfc8349</module>
         <module>rfc8349-ietf-routing</module>
diff --git a/model/ietf/rfc8348-ietf-hardware-state/pom.xml b/model/ietf/rfc8348-ietf-hardware-state/pom.xml
new file mode 100644 (file)
index 0000000..9411c46
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2018 Pantheon Technologies, s.ro. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.mdsal</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>0.13.0-SNAPSHOT</version>
+        <relativePath>../../../binding/binding-parent</relativePath>
+    </parent>
+
+    <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+    <artifactId>rfc8348-ietf-hardware-state</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>${project.artifactId}</name>
+    <description>RFC8348 ietf-hardware-state</description>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.model</groupId>
+                <artifactId>mdsal-model-artifacts</artifactId>
+                <version>0.13.0-SNAPSHOT</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8348-ietf-hardware</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/model/ietf/rfc8348-ietf-hardware-state/src/main/yang-disabled/ietf-hardware-state@2018-03-13.yang b/model/ietf/rfc8348-ietf-hardware-state/src/main/yang-disabled/ietf-hardware-state@2018-03-13.yang
new file mode 100644 (file)
index 0000000..ec6742e
--- /dev/null
@@ -0,0 +1,766 @@
+module ietf-hardware-state {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-hardware-state";
+  prefix hw-state;
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import iana-hardware {
+    prefix ianahw;
+  }
+  import ietf-hardware {
+    prefix hw;
+  }
+
+  organization
+    "IETF NETMOD (Network Modeling) Working Group";
+
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
+     WG List:  <mailto:netmod@ietf.org>
+
+     Editor:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>
+
+     Editor:   Jie Dong
+               <mailto:jie.dong@huawei.com>
+     Editor:   Dan Romascanu
+               <mailto:dromasca@gmail.com>";
+
+  description
+    "This module contains a collection of YANG definitions for
+     monitoring hardware.
+
+     This data model is designed as a temporary solution for
+     implementations that do not yet support the Network Management
+     Datastore Architecture (NMDA) defined in RFC 8342.  Such an
+     implementation cannot implement the module 'ietf-hardware'
+     properly, since without NMDA support, it is not possible to
+     distinguish between instances of nodes in the running
+     configuration and operational states.
+
+     The data model in this module is the same as the data model in
+     'ietf-hardware', except all nodes are marked as 'config false'.
+
+     If a server that implements this module but doesn't support NMDA
+     also supports configuration of hardware components, it SHOULD
+     also implement the module 'ietf-hardware' in the configuration
+     datastores.  The corresponding state data is found in the
+     '/hw-state:hardware' subtree.
+
+     Copyright (c) 2018 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 8348; see
+     the RFC itself for full legal notices.";
+
+  revision 2018-03-13 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 8348: A YANG Data Model for Hardware Management";
+  }
+
+  /*
+   * Features
+   */
+
+  feature entity-mib {
+    status deprecated;
+    description
+      "This feature indicates that the device implements
+       the ENTITY-MIB.";
+    reference
+      "RFC 6933: Entity MIB (Version 4)";
+  }
+
+  feature hardware-state {
+    status deprecated;
+    description
+      "Indicates that ENTITY-STATE-MIB objects are supported";
+    reference
+      "RFC 4268: Entity State MIB";
+  }
+
+  feature hardware-sensor {
+    status deprecated;
+    description
+      "Indicates that ENTITY-SENSOR-MIB objects are supported";
+    reference
+      "RFC 3433: Entity Sensor Management Information Base";
+  }
+
+  /*
+   * Data nodes
+   */
+
+  container hardware {
+    config false;
+    status deprecated;
+    description
+      "Data nodes representing components.";
+
+    leaf last-change {
+      type yang:date-and-time;
+      status deprecated;
+      description
+        "The time the '/hardware/component' list changed in the
+         operational state.";
+    }
+
+    list component {
+      key name;
+      status deprecated;
+      description
+        "List of components.
+         When the server detects a new hardware component, it
+         initializes a list entry in the operational state.
+
+         If the server does not support configuration of hardware
+         components, list entries in the operational state are
+         initialized with values for all nodes as detected by the
+         implementation.
+
+         Otherwise, this procedure is followed:
+
+           1. If there is an entry in the '/hardware/component' list
+              in the intended configuration with values for the nodes
+              'class', 'parent', and 'parent-rel-pos' that are equal
+              to the detected values, then:
+
+           1a. If the configured entry has a value for 'mfg-name'
+               that is equal to the detected value or if the
+               'mfg-name' value cannot be detected, then the list
+               entry in the operational state is initialized with the
+               configured values for all configured nodes, including
+               the 'name'.
+
+               Otherwise, the list entry in the operational state is
+               initialized with values for all nodes as detected by
+               the implementation.  The implementation may raise an
+               alarm that informs about the 'mfg-name' mismatch
+               condition.  How this is done is outside the scope of
+               this document.
+
+           1b. Otherwise (i.e., there is no matching configuration
+               entry), the list entry in the operational state is
+               initialized with values for all nodes as detected by
+               the implementation.
+
+         If the '/hardware/component' list in the intended
+         configuration is modified, then the system MUST behave as if
+         it re-initializes itself and follow the procedure in (1).";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalEntry";
+
+      leaf name {
+        type string;
+        status deprecated;
+        description
+          "The name assigned to this component.
+
+           This name is not required to be the same as
+           entPhysicalName.";
+      }
+
+      leaf class {
+        type identityref {
+          base ianahw:hardware-class;
+        }
+        mandatory true;
+        status deprecated;
+        description
+          "An indication of the general hardware type of the
+           component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalClass";
+      }
+
+      leaf physical-index {
+        if-feature entity-mib;
+        type int32 {
+          range "1..2147483647";
+        }
+        status deprecated;
+        description
+          "The entPhysicalIndex for the entPhysicalEntry represented
+           by this list entry.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalIndex";
+      }
+
+      leaf description {
+        type string;
+        status deprecated;
+        description
+          "A textual description of the component.  This node should
+           contain a string that identifies the manufacturer's name
+           for the component and should be set to a distinct value
+           for each version or model of the component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalDescr";
+      }
+
+      leaf parent {
+        type leafref {
+          path "../../component/name";
+          require-instance false;
+        }
+        status deprecated;
+
+        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 (e.g., double-wide
+           modules), this node contains the name of one of these
+           components.  An implementation MUST use the same name
+           every time this node is instantiated.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) -
+                     entPhysicalContainedIn";
+      }
+
+      leaf parent-rel-pos {
+        type int32 {
+          range "0 .. 2147483647";
+        }
+        status deprecated;
+        description
+          "An indication of the relative position of this child
+           component among all its sibling components.  Sibling
+           components are defined as components that:
+
+             o share the same value of the 'parent' node and
+
+             o share a common base identity for the 'class' node.
+
+           Note that the last rule gives implementations flexibility
+           in how components are numbered.  For example, some
+           implementations might have a single number series for all
+           components derived from 'ianahw:port', while some others
+           might have different number series for different
+           components with identities derived from 'ianahw:port' (for
+           example, one for RJ45 and one for SFP).";
+
+        reference
+          "RFC 6933: Entity MIB (Version 4) -
+                     entPhysicalParentRelPos";
+      }
+
+      leaf-list contains-child {
+        type leafref {
+          path "../../component/name";
+        }
+        status deprecated;
+        description
+          "The name of the contained component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalChildIndex";
+      }
+
+      leaf hardware-rev {
+        type string;
+        status deprecated;
+        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;
+        status deprecated;
+        description
+          "The vendor-specific firmware revision string for the
+           component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) -
+                     entPhysicalFirmwareRev";
+      }
+
+      leaf software-rev {
+        type string;
+        status deprecated;
+        description
+          "The vendor-specific software revision string for the
+           component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) -
+                     entPhysicalSoftwareRev";
+      }
+
+      leaf serial-num {
+        type string;
+        status deprecated;
+
+        description
+          "The vendor-specific serial number string for the
+           component.  The preferred value is the serial number
+           string actually printed on the component itself (if
+           present).";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalSerialNum";
+      }
+
+      leaf mfg-name {
+        type string;
+        status deprecated;
+        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 model-name {
+        type string;
+        status deprecated;
+        description
+          "The vendor-specific model name identifier string
+           associated with this physical component.  The preferred
+           value is the customer-visible part number, which may be
+           printed on the component itself.
+
+           If the model name string associated with the physical
+           component is unknown to the server, then this node is not
+           instantiated.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalModelName";
+      }
+
+      leaf alias {
+        type string;
+        status deprecated;
+        description
+          "An 'alias' name for the component, as specified by a
+           network manager, that provides a non-volatile 'handle' for
+           the component.
+
+           If no configured value exists, the server MAY set the
+           value of this node to a locally unique value in the
+           operational state.
+
+           A server implementation MAY map this leaf to the
+           entPhysicalAlias MIB object.  Such an implementation needs
+           to use some mechanism to handle the differences in size
+           and characters allowed between this leaf and
+           entPhysicalAlias.  The definition of such a mechanism is
+           outside the scope of this document.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalAlias";
+      }
+
+      leaf asset-id {
+        type string;
+        status deprecated;
+        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;
+        status deprecated;
+        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;
+        status deprecated;
+        description
+          "The date of manufacturing of the managed component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalMfgDate";
+      }
+
+      leaf-list uri {
+        type inet:uri;
+        status deprecated;
+        description
+          "This node contains identification information about the
+           component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalUris";
+      }
+
+      leaf uuid {
+        type yang:uuid;
+        status deprecated;
+        description
+          "A Universally Unique Identifier of the component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalUUID";
+      }
+
+      container state {
+        if-feature hardware-state;
+        status deprecated;
+        description
+          "State-related nodes";
+        reference
+          "RFC 4268: Entity State MIB";
+
+        leaf state-last-changed {
+          type yang:date-and-time;
+          status deprecated;
+          description
+            "The date and time when the value of any of the
+             admin-state, oper-state, usage-state, alarm-state, or
+             standby-state changed for this component.
+
+             If there has been no change since the last
+             re-initialization of the local system, this node
+             contains the date and time of local system
+             initialization.  If there has been no change since the
+             component was added to the local system, this node
+             contains the date and time of the insertion.";
+          reference
+            "RFC 4268: Entity State MIB - entStateLastChanged";
+        }
+
+        leaf admin-state {
+          type hw:admin-state;
+          status deprecated;
+          description
+            "The administrative state for this component.
+
+             This node refers to a component's administrative
+             permission to service both other components within its
+             containment hierarchy as well as other users of its
+             services defined by means outside the scope of this
+             module.
+
+             Some components exhibit only a subset of the remaining
+             administrative state values.  Some components cannot be
+             locked; hence, this node exhibits only the 'unlocked'
+             state.  Other components cannot be shut down gracefully;
+             hence, this node does not exhibit the 'shutting-down'
+             state.";
+          reference
+            "RFC 4268: Entity State MIB - entStateAdmin";
+        }
+
+        leaf oper-state {
+          type hw:oper-state;
+          status deprecated;
+          description
+            "The operational state for this component.
+
+             Note that this node does not follow the administrative
+             state.  An administrative state of 'down' does not
+             predict an operational state of 'disabled'.
+
+             Note that some implementations may not be able to
+             accurately report oper-state while the admin-state node
+             has a value other than 'unlocked'.  In these cases, this
+             node MUST have a value of 'unknown'.";
+          reference
+            "RFC 4268: Entity State MIB - entStateOper";
+        }
+
+        leaf usage-state {
+          type hw:usage-state;
+          status deprecated;
+          description
+            "The usage state for this component.
+
+             This node refers to a component's ability to service
+             more components in a containment hierarchy.
+
+             Some components will exhibit only a subset of the usage
+             state values.  Components that are unable to ever
+             service any components within a containment hierarchy
+             will always have a usage state of 'busy'.  In some
+             cases, a component will be able to support only one
+             other component within its containment hierarchy and
+             will therefore only exhibit values of 'idle' and
+             'busy'.";
+          reference
+            "RFC 4268: Entity State MIB - entStateUsage";
+        }
+
+        leaf alarm-state {
+          type hw:alarm-state;
+          status deprecated;
+          description
+            "The alarm state for this component.  It does not
+             include the alarms raised on child components within its
+             containment hierarchy.";
+          reference
+            "RFC 4268: Entity State MIB - entStateAlarm";
+        }
+
+        leaf standby-state {
+          type hw:standby-state;
+          status deprecated;
+          description
+            "The standby state for this component.
+
+             Some components will exhibit only a subset of the
+             remaining standby state values.  If this component
+             cannot operate in a standby role, the value of this node
+             will always be 'providing-service'.";
+          reference
+            "RFC 4268: Entity State MIB - entStateStandby";
+        }
+      }
+      container sensor-data {
+        when 'derived-from-or-self(../class,
+                                   "ianahw:sensor")' {
+          description
+            "Sensor data nodes present for any component of type
+             'sensor'";
+        }
+        if-feature hardware-sensor;
+        status deprecated;
+
+        description
+          "Sensor-related nodes.";
+        reference
+          "RFC 3433: Entity Sensor Management Information Base";
+
+        leaf value {
+          type hw:sensor-value;
+          status deprecated;
+          description
+            "The most recent measurement obtained by the server
+             for this sensor.
+
+             A client that periodically fetches this node should also
+             fetch the nodes 'value-type', 'value-scale', and
+             'value-precision', since they may change when the value
+             is changed.";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorValue";
+        }
+
+        leaf value-type {
+          type hw:sensor-value-type;
+          status deprecated;
+          description
+            "The type of data units associated with the
+             sensor value";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorType";
+        }
+
+        leaf value-scale {
+          type hw:sensor-value-scale;
+          status deprecated;
+          description
+            "The (power of 10) scaling factor associated
+             with the sensor value";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorScale";
+        }
+
+        leaf value-precision {
+          type hw:sensor-value-precision;
+          status deprecated;
+          description
+            "The number of decimal places of precision
+             associated with the sensor value";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorPrecision";
+        }
+
+        leaf oper-status {
+          type hw:sensor-status;
+          status deprecated;
+          description
+            "The operational status of the sensor.";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorOperStatus";
+        }
+
+        leaf units-display {
+          type string;
+          status deprecated;
+          description
+            "A textual description of the data units that should be
+             used in the display of the sensor value.";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorUnitsDisplay";
+        }
+
+        leaf value-timestamp {
+          type yang:date-and-time;
+          status deprecated;
+          description
+            "The time the status and/or value of this sensor was last
+             obtained by the server.";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorValueTimeStamp";
+        }
+
+        leaf value-update-rate {
+          type uint32;
+          units "milliseconds";
+          status deprecated;
+          description
+            "An indication of the frequency that the server updates
+             the associated 'value' node, represented in
+             milliseconds.  The value zero indicates:
+
+              - the sensor value is updated on demand (e.g.,
+                when polled by the server for a get-request),
+
+              - the sensor value is updated when the sensor
+                value changes (event-driven), or
+
+              - the server does not know the update rate.";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorValueUpdateRate";
+        }
+      }
+    }
+  }
+
+  /*
+   * Notifications
+   */
+
+  notification hardware-state-change {
+    status deprecated;
+    description
+      "A hardware-state-change notification is generated when the
+       value of /hardware/last-change changes in the operational
+       state.";
+    reference
+      "RFC 6933: Entity MIB (Version 4) - entConfigChange";
+  }
+
+  notification hardware-state-oper-enabled {
+    if-feature hardware-state;
+    status deprecated;
+    description
+      "A hardware-state-oper-enabled notification signifies that a
+       component has transitioned into the 'enabled' state.";
+
+    leaf name {
+      type leafref {
+        path "/hardware/component/name";
+      }
+      status deprecated;
+      description
+        "The name of the component that has transitioned into the
+         'enabled' state.";
+    }
+    leaf admin-state {
+      type leafref {
+        path "/hardware/component/state/admin-state";
+      }
+      status deprecated;
+      description
+        "The administrative state for the component.";
+    }
+    leaf alarm-state {
+      type leafref {
+        path "/hardware/component/state/alarm-state";
+      }
+      status deprecated;
+      description
+        "The alarm state for the component.";
+    }
+    reference
+      "RFC 4268: Entity State MIB - entStateOperEnabled";
+  }
+
+  notification hardware-state-oper-disabled {
+    if-feature hardware-state;
+    status deprecated;
+    description
+      "A hardware-state-oper-disabled notification signifies that a
+       component has transitioned into the 'disabled' state.";
+
+    leaf name {
+      type leafref {
+        path "/hardware/component/name";
+      }
+      status deprecated;
+      description
+        "The name of the component that has transitioned into the
+         'disabled' state.";
+    }
+    leaf admin-state {
+      type leafref {
+        path "/hardware/component/state/admin-state";
+      }
+      status deprecated;
+
+      description
+        "The administrative state for the component.";
+    }
+    leaf alarm-state {
+      type leafref {
+        path "/hardware/component/state/alarm-state";
+      }
+      status deprecated;
+      description
+        "The alarm state for the component.";
+    }
+    reference
+      "RFC 4268: Entity State MIB - entStateOperDisabled";
+  }
+
+}
diff --git a/model/ietf/rfc8348-ietf-hardware/pom.xml b/model/ietf/rfc8348-ietf-hardware/pom.xml
new file mode 100644 (file)
index 0000000..dc5ba53
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2018 Pantheon Technologies, s.ro. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.mdsal</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>0.13.0-SNAPSHOT</version>
+        <relativePath>../../../binding/binding-parent</relativePath>
+    </parent>
+
+    <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+    <artifactId>rfc8348-ietf-hardware</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>${project.artifactId}</name>
+    <description>RFC8348 ietf-hardware</description>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.model</groupId>
+                <artifactId>mdsal-model-artifacts</artifactId>
+                <version>0.13.0-SNAPSHOT</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.model</groupId>
+            <artifactId>ietf-inet-types-2013-07-15</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.model</groupId>
+            <artifactId>ietf-yang-types-20130715</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.iana</groupId>
+            <artifactId>iana-hardware</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/model/ietf/rfc8348-ietf-hardware/src/main/yang-disabled/ietf-hardware@2018-03-13.yang b/model/ietf/rfc8348-ietf-hardware/src/main/yang-disabled/ietf-hardware@2018-03-13.yang
new file mode 100644 (file)
index 0000000..4f984b6
--- /dev/null
@@ -0,0 +1,1194 @@
+module ietf-hardware {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-hardware";
+  prefix hw;
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import iana-hardware {
+    prefix ianahw;
+  }
+
+  organization
+    "IETF NETMOD (Network Modeling) Working Group";
+
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
+     WG List:  <mailto:netmod@ietf.org>
+
+     Editor:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>
+
+     Editor:   Jie Dong
+               <mailto:jie.dong@huawei.com>
+
+     Editor:   Dan Romascanu
+               <mailto:dromasca@gmail.com>";
+
+  description
+    "This module contains a collection of YANG definitions for
+     managing hardware.
+
+     This data model is designed for the Network Management Datastore
+     Architecture (NMDA) defined in RFC 8342.
+     Copyright (c) 2018 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 8348; see
+     the RFC itself for full legal notices.";
+
+  revision 2018-03-13 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 8348: A YANG Data Model for Hardware Management";
+  }
+
+  /*
+   * Features
+   */
+
+  feature entity-mib {
+    description
+      "This feature indicates that the device implements
+       the ENTITY-MIB.";
+    reference
+      "RFC 6933: Entity MIB (Version 4)";
+  }
+
+  feature hardware-state {
+    description
+      "Indicates that ENTITY-STATE-MIB objects are supported";
+    reference
+      "RFC 4268: Entity State MIB";
+  }
+
+  feature hardware-sensor {
+    description
+      "Indicates that ENTITY-SENSOR-MIB objects are supported";
+    reference
+      "RFC 3433: Entity Sensor Management Information Base";
+  }
+
+  /*
+   * Typedefs
+   */
+
+  typedef admin-state {
+    type enumeration {
+      enum unknown {
+        value 1;
+        description
+          "The resource is unable to report administrative state.";
+      }
+      enum locked {
+        value 2;
+        description
+          "The resource is administratively prohibited from use.";
+      }
+      enum shutting-down {
+        value 3;
+        description
+          "The resource usage is administratively limited to current
+           instances of use.";
+      }
+      enum unlocked {
+        value 4;
+        description
+          "The resource is not administratively prohibited from
+           use.";
+      }
+    }
+    description
+      "Represents the various possible administrative states.";
+    reference
+      "RFC 4268: Entity State MIB - EntityAdminState";
+  }
+
+  typedef oper-state {
+    type enumeration {
+      enum unknown {
+        value 1;
+        description
+          "The resource is unable to report its operational state.";
+      }
+      enum disabled {
+        value 2;
+        description
+          "The resource is totally inoperable.";
+      }
+      enum enabled {
+        value 3;
+
+        description
+          "The resource is partially or fully operable.";
+      }
+      enum testing {
+        value 4;
+        description
+          "The resource is currently being tested and cannot
+           therefore report whether or not it is operational.";
+      }
+    }
+    description
+      "Represents the possible values of operational states.";
+    reference
+      "RFC 4268: Entity State MIB - EntityOperState";
+  }
+
+  typedef usage-state {
+    type enumeration {
+      enum unknown {
+        value 1;
+        description
+          "The resource is unable to report usage state.";
+      }
+      enum idle {
+        value 2;
+        description
+          "The resource is servicing no users.";
+      }
+      enum active {
+        value 3;
+        description
+          "The resource is currently in use, and it has sufficient
+           spare capacity to provide for additional users.";
+      }
+      enum busy {
+        value 4;
+        description
+          "The resource is currently in use, but it currently has no
+           spare capacity to provide for additional users.";
+      }
+    }
+    description
+      "Represents the possible values of usage states.";
+    reference
+      "RFC 4268: Entity State MIB -  EntityUsageState";
+  }
+
+  typedef alarm-state {
+    type bits {
+      bit unknown {
+        position 0;
+        description
+          "The resource is unable to report alarm state.";
+      }
+      bit under-repair {
+        position 1;
+        description
+          "The resource is currently being repaired, which, depending
+           on the implementation, may make the other values in this
+           bit string not meaningful.";
+      }
+      bit critical {
+        position 2;
+        description
+          "One or more critical alarms are active against the
+           resource.";
+      }
+      bit major {
+        position 3;
+        description
+          "One or more major alarms are active against the
+           resource.";
+      }
+      bit minor {
+        position 4;
+        description
+          "One or more minor alarms are active against the
+           resource.";
+      }
+      bit warning {
+        position 5;
+        description
+          "One or more warning alarms are active against the
+           resource.";
+      }
+      bit indeterminate {
+        position 6;
+        description
+          "One or more alarms of whose perceived severity cannot be
+           determined are active against this resource.";
+      }
+    }
+    description
+      "Represents the possible values of alarm states.  An alarm is a
+       persistent indication of an error or warning condition.
+
+       When no bits of this attribute are set, then no active alarms
+       are known against this component and it is not under repair.";
+    reference
+      "RFC 4268: Entity State MIB - EntityAlarmStatus";
+  }
+
+  typedef standby-state {
+    type enumeration {
+      enum unknown {
+        value 1;
+        description
+          "The resource is unable to report standby state.";
+      }
+      enum hot-standby {
+        value 2;
+        description
+          "The resource is not providing service, but it will be
+           immediately able to take over the role of the resource to
+           be backed up, without the need for initialization
+           activity, and will contain the same information as the
+           resource to be backed up.";
+      }
+      enum cold-standby {
+        value 3;
+        description
+          "The resource is to back up another resource, but it will
+           not be immediately able to take over the role of a
+           resource to be backed up and will require some
+           initialization activity.";
+      }
+      enum providing-service {
+        value 4;
+        description
+          "The resource is providing service.";
+      }
+    }
+    description
+      "Represents the possible values of standby states.";
+    reference
+      "RFC 4268: Entity State MIB - EntityStandbyStatus";
+  }
+
+  typedef sensor-value-type {
+    type enumeration {
+      enum other {
+        value 1;
+        description
+          "A measure other than those listed below.";
+      }
+      enum unknown {
+        value 2;
+        description
+          "An unknown measurement or arbitrary, relative numbers";
+      }
+      enum volts-AC {
+        value 3;
+        description
+          "A measure of electric potential (alternating current).";
+      }
+      enum volts-DC {
+        value 4;
+        description
+          "A measure of electric potential (direct current).";
+      }
+      enum amperes {
+        value 5;
+        description
+          "A measure of electric current.";
+      }
+      enum watts {
+        value 6;
+        description
+          "A measure of power.";
+      }
+      enum hertz {
+        value 7;
+        description
+          "A measure of frequency.";
+      }
+      enum celsius {
+        value 8;
+        description
+          "A measure of temperature.";
+      }
+      enum percent-RH {
+        value 9;
+        description
+          "A measure of percent relative humidity.";
+      }
+      enum rpm {
+        value 10;
+        description
+          "A measure of shaft revolutions per minute.";
+      }
+      enum cmm {
+        value 11;
+        description
+          "A measure of cubic meters per minute (airflow).";
+      }
+      enum truth-value {
+        value 12;
+        description
+          "Value is one of 1 (true) or 2 (false)";
+      }
+    }
+    description
+      "A node using this data type represents the sensor measurement
+       data type associated with a physical sensor value.  The actual
+       data units are determined by examining a node of this type
+       together with the associated sensor-value-scale node.
+
+       A node of this type SHOULD be defined together with nodes of
+       type sensor-value-scale and type sensor-value-precision.
+       These three types are used to identify the semantics of a node
+       of type sensor-value.";
+    reference
+      "RFC 3433: Entity Sensor Management Information Base -
+                 EntitySensorDataType";
+  }
+
+  typedef sensor-value-scale {
+    type enumeration {
+      enum yocto {
+        value 1;
+        description
+          "Data scaling factor of 10^-24.";
+      }
+      enum zepto {
+        value 2;
+        description
+          "Data scaling factor of 10^-21.";
+      }
+      enum atto {
+        value 3;
+        description
+          "Data scaling factor of 10^-18.";
+      }
+      enum femto {
+        value 4;
+        description
+          "Data scaling factor of 10^-15.";
+      }
+      enum pico {
+        value 5;
+        description
+          "Data scaling factor of 10^-12.";
+      }
+      enum nano {
+        value 6;
+        description
+          "Data scaling factor of 10^-9.";
+      }
+      enum micro {
+        value 7;
+        description
+          "Data scaling factor of 10^-6.";
+      }
+      enum milli {
+        value 8;
+        description
+          "Data scaling factor of 10^-3.";
+      }
+      enum units {
+        value 9;
+        description
+          "Data scaling factor of 10^0.";
+      }
+      enum kilo {
+        value 10;
+        description
+          "Data scaling factor of 10^3.";
+      }
+      enum mega {
+        value 11;
+        description
+          "Data scaling factor of 10^6.";
+      }
+      enum giga {
+        value 12;
+        description
+          "Data scaling factor of 10^9.";
+      }
+      enum tera {
+        value 13;
+        description
+          "Data scaling factor of 10^12.";
+      }
+      enum peta {
+        value 14;
+        description
+          "Data scaling factor of 10^15.";
+      }
+      enum exa {
+        value 15;
+        description
+          "Data scaling factor of 10^18.";
+      }
+      enum zetta {
+        value 16;
+        description
+          "Data scaling factor of 10^21.";
+      }
+      enum yotta {
+        value 17;
+        description
+          "Data scaling factor of 10^24.";
+      }
+    }
+    description
+      "A node using this data type represents a data scaling factor,
+       represented with an International System of Units (SI) prefix.
+       The actual data units are determined by examining a node of
+       this type together with the associated sensor-value-type.
+
+       A node of this type SHOULD be defined together with nodes of
+       type sensor-value-type and type sensor-value-precision.
+       Together, associated nodes of these three types are used to
+       identify the semantics of a node of type sensor-value.";
+    reference
+      "RFC 3433: Entity Sensor Management Information Base -
+                 EntitySensorDataScale";
+  }
+
+  typedef sensor-value-precision {
+    type int8 {
+      range "-8 .. 9";
+    }
+    description
+      "A node using this data type represents a sensor value
+       precision range.
+
+       A node of this type SHOULD be defined together with nodes of
+       type sensor-value-type and type sensor-value-scale.  Together,
+       associated nodes of these three types are used to identify the
+       semantics of a node of type sensor-value.
+
+       If a node of this type contains a value in the range 1 to 9,
+       it represents the number of decimal places in the fractional
+       part of an associated sensor-value fixed-point number.
+
+       If a node of this type contains a value in the range -8 to -1,
+       it represents the number of accurate digits in the associated
+       sensor-value fixed-point number.
+
+       The value zero indicates the associated sensor-value node is
+       not a fixed-point number.
+
+       Server implementers must choose a value for the associated
+       sensor-value-precision node so that the precision and accuracy
+       of the associated sensor-value node is correctly indicated.
+
+       For example, a component representing a temperature sensor
+       that can measure 0 to 100 degrees C in 0.1 degree
+       increments, +/- 0.05 degrees, would have a
+       sensor-value-precision value of '1', a sensor-value-scale
+       value of 'units', and a sensor-value ranging from '0' to
+       '1000'.  The sensor-value would be interpreted as
+       'degrees C * 10'.";
+    reference
+      "RFC 3433: Entity Sensor Management Information Base -
+                 EntitySensorPrecision";
+  }
+
+  typedef sensor-value {
+    type int32 {
+      range "-1000000000 .. 1000000000";
+    }
+    description
+     "A node using this data type represents a sensor value.
+
+      A node of this type SHOULD be defined together with nodes of
+      type sensor-value-type, type sensor-value-scale, and
+      type sensor-value-precision.  Together, associated nodes of
+      those three types are used to identify the semantics of a node
+      of this data type.
+
+      The semantics of a node using this data type are determined by
+      the value of the associated sensor-value-type node.
+
+      If the associated sensor-value-type node is equal to 'voltsAC',
+      'voltsDC', 'amperes', 'watts', 'hertz', 'celsius', or 'cmm',
+      then a node of this type MUST contain a fixed-point number
+      ranging from -999,999,999 to +999,999,999.  The value
+      -1000000000 indicates an underflow error.  The value
+      +1000000000 indicates an overflow error.  The
+      sensor-value-precision indicates how many fractional digits
+      are represented in the associated sensor-value node.
+
+      If the associated sensor-value-type node is equal to
+      'percentRH', then a node of this type MUST contain a number
+      ranging from 0 to 100.
+
+      If the associated sensor-value-type node is equal to 'rpm',
+      then a node of this type MUST contain a number ranging from
+      -999,999,999 to +999,999,999.
+
+      If the associated sensor-value-type node is equal to
+      'truth-value', then a node of this type MUST contain either the
+      value 1 (true) or the value 2 (false).
+
+      If the associated sensor-value-type node is equal to 'other' or
+      'unknown', then a node of this type MUST contain a number
+      ranging from -1000000000 to 1000000000.";
+    reference
+      "RFC 3433: Entity Sensor Management Information Base -
+                 EntitySensorValue";
+  }
+
+  typedef sensor-status {
+    type enumeration {
+      enum ok {
+        value 1;
+        description
+          "Indicates that the server can obtain the sensor value.";
+      }
+      enum unavailable {
+        value 2;
+        description
+          "Indicates that the server presently cannot obtain the
+           sensor value.";
+      }
+      enum nonoperational {
+        value 3;
+        description
+          "Indicates that the server believes the sensor is broken.
+           The sensor could have a hard failure (disconnected wire)
+           or a soft failure such as out-of-range, jittery, or wildly
+           fluctuating readings.";
+      }
+    }
+    description
+      "A node using this data type represents the operational status
+       of a physical sensor.";
+    reference
+      "RFC 3433: Entity Sensor Management Information Base -
+                 EntitySensorStatus";
+  }
+
+  /*
+   * Data nodes
+   */
+
+  container hardware {
+    description
+      "Data nodes representing components.
+
+       If the server supports configuration of hardware components,
+       then this data model is instantiated in the configuration
+       datastores supported by the server.  The leaf-list 'datastore'
+       for the module 'ietf-hardware' in the YANG library provides
+       this information.";
+
+    leaf last-change {
+      type yang:date-and-time;
+      config false;
+      description
+        "The time the '/hardware/component' list changed in the
+         operational state.";
+    }
+
+    list component {
+      key name;
+      description
+        "List of components.
+
+         When the server detects a new hardware component, it
+         initializes a list entry in the operational state.
+
+         If the server does not support configuration of hardware
+         components, list entries in the operational state are
+         initialized with values for all nodes as detected by the
+         implementation.
+
+         Otherwise, this procedure is followed:
+
+           1. If there is an entry in the '/hardware/component' list
+              in the intended configuration with values for the nodes
+              'class', 'parent', and 'parent-rel-pos' that are equal
+              to the detected values, then the list entry in the
+              operational state is initialized with the configured
+              values, including the 'name'.
+
+           2. Otherwise (i.e., there is no matching configuration
+              entry), the list entry in the operational state is
+              initialized with values for all nodes as detected by
+              the implementation.
+
+         If the '/hardware/component' list in the intended
+         configuration is modified, then the system MUST behave as if
+         it re-initializes itself and follow the procedure in (1).";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalEntry";
+
+      leaf name {
+        type string;
+        description
+          "The name assigned to this component.
+
+           This name is not required to be the same as
+           entPhysicalName.";
+      }
+
+      leaf class {
+        type identityref {
+          base ianahw:hardware-class;
+        }
+        mandatory true;
+        description
+          "An indication of the general hardware type of the
+           component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalClass";
+      }
+
+      leaf physical-index {
+        if-feature entity-mib;
+        type int32 {
+          range "1..2147483647";
+        }
+        config false;
+        description
+          "The entPhysicalIndex for the entPhysicalEntry represented
+           by this list entry.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalIndex";
+      }
+
+      leaf description {
+        type string;
+        config false;
+        description
+          "A textual description of the component.  This node should
+           contain a string that identifies the manufacturer's name
+           for the component and should be set to a distinct value
+           for each version or model of the component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalDescr";
+      }
+
+      leaf parent {
+        type leafref {
+          path "../../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 (e.g., double-wide
+           modules), this node contains the name of one of these
+           components.  An implementation MUST use the same name
+           every time this node is instantiated.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalContainedIn";
+      }
+
+      leaf parent-rel-pos {
+        type int32 {
+          range "0 .. 2147483647";
+        }
+        description
+          "An indication of the relative position of this child
+           component among all its sibling components.  Sibling
+           components are defined as components that:
+
+             o share the same value of the 'parent' node and
+
+             o share a common base identity for the 'class' node.
+
+           Note that the last rule gives implementations flexibility
+           in how components are numbered.  For example, some
+           implementations might have a single number series for all
+           components derived from 'ianahw:port', while some others
+           might have different number series for different
+           components with identities derived from 'ianahw:port' (for
+           example, one for registered jack 45 (RJ45) and one for
+           small form-factor pluggable (SFP)).";
+
+        reference
+          "RFC 6933: Entity MIB (Version 4) -
+                     entPhysicalParentRelPos";
+      }
+
+      leaf-list contains-child {
+        type leafref {
+          path "../../component/name";
+        }
+        config false;
+        description
+          "The name of the contained component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalChildIndex";
+      }
+
+      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 serial-num {
+        type string;
+        config false;
+        description
+          "The vendor-specific serial number string for the
+           component.  The preferred value is the serial number
+           string actually printed on the component itself (if
+           present).";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalSerialNum";
+      }
+
+      leaf mfg-name {
+        type string;
+        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 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.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalModelName";
+      }
+
+      leaf alias {
+        type string;
+        description
+          "An 'alias' name for the component, as specified by a
+           network manager, that provides a non-volatile 'handle' for
+           the component.
+
+           If no configured value exists, the server MAY set the
+           value of this node to a locally unique value in the
+           operational state.
+
+           A server implementation MAY map this leaf to the
+           entPhysicalAlias MIB object.  Such an implementation needs
+           to use some mechanism to handle the differences in size
+           and characters allowed between this leaf and
+           entPhysicalAlias.  The definition of such a mechanism is
+           outside the scope of this document.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalAlias";
+      }
+
+      leaf asset-id {
+        type string;
+        description
+          "This node is a user-assigned asset tracking identifier for
+           the component.
+
+           A server implementation MAY map this leaf to the
+           entPhysicalAssetID MIB object.  Such an implementation
+           needs to use some mechanism to handle the differences in
+           size and characters allowed between this leaf and
+           entPhysicalAssetID.  The definition of such a mechanism is
+           outside the scope of this document.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalAssetID";
+      }
+
+      leaf is-fru {
+        type boolean;
+        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;
+        description
+          "This node contains identification information about the
+           component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalUris";
+      }
+
+      leaf uuid {
+        type yang:uuid;
+        config false;
+        description
+          "A Universally Unique Identifier of the component.";
+        reference
+          "RFC 6933: Entity MIB (Version 4) - entPhysicalUUID";
+      }
+
+      container state {
+        if-feature hardware-state;
+        description
+          "State-related nodes";
+        reference
+          "RFC 4268: Entity State MIB";
+
+        leaf state-last-changed {
+          type yang:date-and-time;
+          config false;
+          description
+            "The date and time when the value of any of the
+             admin-state, oper-state, usage-state, alarm-state, or
+             standby-state changed for this component.
+
+             If there has been no change since the last
+             re-initialization of the local system, this node
+             contains the date and time of local system
+             initialization.  If there has been no change since the
+             component was added to the local system, this node
+             contains the date and time of the insertion.";
+          reference
+            "RFC 4268: Entity State MIB - entStateLastChanged";
+        }
+
+        leaf admin-state {
+          type admin-state;
+          description
+            "The administrative state for this component.
+
+             This node refers to a component's administrative
+             permission to service both other components within its
+             containment hierarchy as well other users of its
+             services defined by means outside the scope of this
+             module.
+
+             Some components exhibit only a subset of the remaining
+             administrative state values.  Some components cannot be
+             locked; hence, this node exhibits only the 'unlocked'
+             state.  Other components cannot be shut down gracefully;
+             hence, this node does not exhibit the 'shutting-down'
+             state.";
+          reference
+            "RFC 4268: Entity State MIB - entStateAdmin";
+        }
+
+        leaf oper-state {
+          type oper-state;
+          config false;
+          description
+            "The operational state for this component.
+
+             Note that this node does not follow the administrative
+             state.  An administrative state of 'down' does not
+             predict an operational state of 'disabled'.
+
+             Note that some implementations may not be able to
+             accurately report oper-state while the admin-state node
+             has a value other than 'unlocked'.  In these cases, this
+             node MUST have a value of 'unknown'.";
+          reference
+            "RFC 4268: Entity State MIB - entStateOper";
+        }
+
+        leaf usage-state {
+          type usage-state;
+          config false;
+          description
+            "The usage state for this component.
+
+             This node refers to a component's ability to service
+             more components in a containment hierarchy.
+
+             Some components will exhibit only a subset of the usage
+             state values.  Components that are unable to ever
+             service any components within a containment hierarchy
+             will always have a usage state of 'busy'.  In some
+             cases, a component will be able to support only one
+             other component within its containment hierarchy and
+             will therefore only exhibit values of 'idle' and
+             'busy'.";
+          reference
+            "RFC 4268: Entity State MIB - entStateUsage";
+        }
+
+        leaf alarm-state {
+          type alarm-state;
+          config false;
+          description
+            "The alarm state for this component.  It does not
+             include the alarms raised on child components within its
+             containment hierarchy.";
+          reference
+            "RFC 4268: Entity State MIB - entStateAlarm";
+        }
+
+        leaf standby-state {
+          type standby-state;
+          config false;
+          description
+            "The standby state for this component.
+
+             Some components will exhibit only a subset of the
+             remaining standby state values.  If this component
+             cannot operate in a standby role, the value of this node
+             will always be 'providing-service'.";
+          reference
+            "RFC 4268: Entity State MIB - entStateStandby";
+        }
+      }
+
+      container sensor-data {
+        when 'derived-from-or-self(../class,
+                                   "ianahw:sensor")' {
+          description
+            "Sensor data nodes present for any component of type
+             'sensor'";
+        }
+        if-feature hardware-sensor;
+        config false;
+
+        description
+          "Sensor-related nodes.";
+        reference
+          "RFC 3433: Entity Sensor Management Information Base";
+
+        leaf value {
+          type sensor-value;
+          description
+            "The most recent measurement obtained by the server
+             for this sensor.
+
+             A client that periodically fetches this node should also
+             fetch the nodes 'value-type', 'value-scale', and
+             'value-precision', since they may change when the value
+             is changed.";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorValue";
+        }
+
+        leaf value-type {
+          type sensor-value-type;
+          description
+            "The type of data units associated with the
+             sensor value";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorType";
+        }
+        leaf value-scale {
+          type sensor-value-scale;
+          description
+            "The (power of 10) scaling factor associated
+             with the sensor value";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorScale";
+        }
+
+        leaf value-precision {
+          type sensor-value-precision;
+          description
+            "The number of decimal places of precision
+             associated with the sensor value";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorPrecision";
+        }
+
+        leaf oper-status {
+          type sensor-status;
+          description
+            "The operational status of the sensor.";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorOperStatus";
+        }
+
+        leaf units-display {
+          type string;
+          description
+            "A textual description of the data units that should be
+             used in the display of the sensor value.";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorUnitsDisplay";
+        }
+
+        leaf value-timestamp {
+          type yang:date-and-time;
+          description
+            "The time the status and/or value of this sensor was last
+             obtained by the server.";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorValueTimeStamp";
+        }
+        leaf value-update-rate {
+          type uint32;
+          units "milliseconds";
+          description
+            "An indication of the frequency that the server updates
+             the associated 'value' node, represented in
+             milliseconds.  The value zero indicates:
+
+              - the sensor value is updated on demand (e.g.,
+                when polled by the server for a get-request),
+
+              - the sensor value is updated when the sensor
+                value changes (event-driven), or
+
+              - the server does not know the update rate.";
+          reference
+            "RFC 3433: Entity Sensor Management Information Base -
+                       entPhySensorValueUpdateRate";
+        }
+      }
+    }
+  }
+
+  /*
+   * Notifications
+   */
+
+  notification hardware-state-change {
+    description
+      "A hardware-state-change notification is generated when the
+       value of /hardware/last-change changes in the operational
+       state.";
+    reference
+      "RFC 6933: Entity MIB (Version 4) - entConfigChange";
+  }
+
+  notification hardware-state-oper-enabled {
+    if-feature hardware-state;
+    description
+      "A hardware-state-oper-enabled notification signifies that a
+       component has transitioned into the 'enabled' state.";
+
+    leaf name {
+      type leafref {
+        path "/hardware/component/name";
+      }
+
+      description
+        "The name of the component that has transitioned into the
+         'enabled' state.";
+    }
+    leaf admin-state {
+      type leafref {
+        path "/hardware/component/state/admin-state";
+      }
+      description
+        "The administrative state for the component.";
+    }
+    leaf alarm-state {
+      type leafref {
+        path "/hardware/component/state/alarm-state";
+      }
+      description
+        "The alarm state for the component.";
+    }
+    reference
+      "RFC 4268: Entity State MIB - entStateOperEnabled";
+  }
+
+  notification hardware-state-oper-disabled {
+    if-feature hardware-state;
+    description
+      "A hardware-state-oper-disabled notification signifies that a
+       component has transitioned into the 'disabled' state.";
+
+    leaf name {
+      type leafref {
+        path "/hardware/component/name";
+      }
+      description
+        "The name of the component that has transitioned into the
+         'disabled' state.";
+    }
+    leaf admin-state {
+      type leafref {
+        path "/hardware/component/state/admin-state";
+      }
+      description
+        "The administrative state for the component.";
+    }
+    leaf alarm-state {
+      type leafref {
+        path "/hardware/component/state/alarm-state";
+      }
+
+      description
+        "The alarm state for the component.";
+    }
+    reference
+      "RFC 4268: Entity State MIB - entStateOperDisabled";
+  }
+
+}
diff --git a/model/ietf/rfc8348/pom.xml b/model/ietf/rfc8348/pom.xml
new file mode 100644 (file)
index 0000000..98d3f47
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2018 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.odlparent</groupId>
+        <artifactId>bundle-parent</artifactId>
+        <version>3.1.3</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+    <artifactId>rfc8348</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>${project.artifactId}</name>
+    <description>RFC8348 Hardware Management</description>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.model</groupId>
+                <artifactId>mdsal-model-artifacts</artifactId>
+                <version>0.13.0-SNAPSHOT</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8348-ietf-hardware</artifactId>
+        </dependency>
+    </dependencies>
+</project>