Merge changes I11d22718,I359a9bf2
authorMartin Skorupski <martin.skorupski@highstreet-technologies.com>
Wed, 31 Aug 2022 11:50:18 +0000 (11:50 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Wed, 31 Aug 2022 11:50:18 +0000 (11:50 +0000)
* changes:
  Develop a data model: o1-notify-pnf-registration
  Develop a data model: o1-notify-pnf-registration

17 files changed:
data-model/yang/published/opnfv/yang-based-event-stream.yang [new file with mode: 0644]
data-model/yang/published/opnfv/yes-attribute-value-change.yang [new file with mode: 0644]
data-model/yang/published/opnfv/yes-fault.yang [new file with mode: 0644]
data-model/yang/published/opnfv/yes-heartbeat.yang [new file with mode: 0644]
data-model/yang/published/opnfv/yes-object-creation.yang [new file with mode: 0644]
data-model/yang/published/opnfv/yes-object-deletion.yang [new file with mode: 0644]
data-model/yang/published/opnfv/yes-performance-monitoring.yang [new file with mode: 0644]
data-model/yang/published/opnfv/yes-pm-types-g826.yang [new file with mode: 0644]
data-model/yang/published/opnfv/yes-pm-types-openroadm.yang [new file with mode: 0644]
data-model/yang/published/opnfv/yes-pnf-registration.yang [new file with mode: 0644]
data-model/yang/published/opnfv/yes-types.yang [new file with mode: 0644]
data-model/yang/working/o-ran-sc/template/iana-hardware.yang
data-model/yang/working/o-ran-sc/template/ietf-alarms.yang
data-model/yang/working/o-ran-sc/template/ietf-hardware.yang
data-model/yang/working/o-ran-sc/template/ietf-inet-types.yang
data-model/yang/working/o-ran-sc/template/ietf-interfaces.yang
data-model/yang/working/o-ran-sc/template/ietf-yang-types.yang

diff --git a/data-model/yang/published/opnfv/yang-based-event-stream.yang b/data-model/yang/published/opnfv/yang-based-event-stream.yang
new file mode 100644 (file)
index 0000000..417061a
--- /dev/null
@@ -0,0 +1,244 @@
+module yang-based-event-stream {
+  yang-version 1.1;
+  namespace "urn:opnfv:params:xml:ns:yang:yang-based-event-stream";
+  prefix yes;
+
+  import yes-types {
+    prefix yt;
+    reference
+      "wiki.opnfv.org/display/ves/VES+goes+YES";
+  }
+  import ietf-yang-types {
+    prefix yang;
+    reference
+      "RFC 6991: Common YANG Data Types.";
+  }
+
+  organization
+    "Open Platform for NFV (OPNFV) - Virtual Event Streaming (VES) project";
+  contact
+    "wiki.opnfv.org/display/ves";
+  description
+    "This module is inspired by VES 7.1.1 but uses YANG concepts and types to
+     describe the exchanged data format.
+
+     Copyright 2020 highstreet technologies GmbH and others.
+
+     Licensed under the Apache License, Version 2.0 (the 'License');
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an 'AS IS' BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.";
+
+  revision 2020-06-28 {
+    description
+      "Initial version";
+    reference
+      "ONAP SDN-R: wiki.onap.org/display/DW/SDN-R
+       VES: wiki.opnfv.org/display/ves/VES+Home
+            docs.onap.org/en/frankfurt/submodules/dcaegen2.git/docs/sections/services/ves-http
+       YES: wiki.opnfv.org/display/ves/VES+goes+YES";
+  }
+
+  /*
+   * Feature
+   */
+
+  feature event-history {
+    description
+      "This feature means that the server supports local
+        storage (memory, flash, or disk) of send event
+        messages.";
+  }
+
+  /*
+   * Groupings
+   */
+
+  grouping header-grp {
+    leaf domain {
+      type yt:domain-id;
+      mandatory true;
+      description
+        "The eventing domain associated with the event";
+    }
+    leaf event-id {
+      type string {
+        length "1..255";
+      }
+      mandatory true;
+      description
+        "The event key that is unique to the event source.";
+    }
+    leaf event-name {
+      type string;
+      mandatory true;
+      description
+        "A unique event name. A names space ensures the uniqueness
+         between the data-models.";
+    }
+    leaf event-type {
+      type yt:event-type-id;
+      description
+        "Copy from VES description
+         'for example - applicationNf, guestOS, hostOS, platform.'
+
+         TODO: Open! How should this field by used and what is the
+         difference to 'yes:domain'? From the VES description it looks,
+         more like a VNF type than an event-type.";
+    }
+    leaf last-epoch {
+      type yang:date-and-time;
+      mandatory true;
+      description
+        "The latest time aka epoch time associated with the event from any component.";
+    }
+    leaf nfc-naming-code {
+      type string {
+        length "3";
+      }
+      description
+        "The network function component type, aligned with vfc naming
+         standards.
+
+         TODO: Add a reference to the VFC naming standard.";
+    }
+    leaf nf-naming-code {
+      type string {
+        length "4";
+      }
+      description
+        "The network function type, aligned with network-function (NF)
+         naming standards.
+
+         TODO: Add a reference to the NF naming standard.";
+    }
+    choice nf-vendor {
+      case nf-vendor-private-enterprise-number {
+        leaf nf-vendor-pen {
+          type uint32;
+          description
+            "Network function vendor IANA private enterprise number.";
+        }
+      }
+      case name {
+        leaf nf-vendor-name {
+          type string;
+          description
+            "Network function vendor name according to IANA Private Enterprise Numbers";
+        }
+      }
+      description
+        "The network function vendor can be identified by its name or by its
+         IANA private enterprise number (PEN)";
+      reference
+        "IANA Private Enterprise Numbers
+          http://www.iana.org/assignments/enterprise-numbers/enterprise-numbers";
+    }
+    leaf priority {
+      type yt:priority;
+      mandatory true;
+      description
+        "The event priority to control the processing of the event.";
+    }
+    leaf reporting-entity-id {
+      type yang:uuid;
+      description
+        "The entity reporting the event, for example an OAM VM.";
+    }
+    leaf reporting-entity-name {
+      type string {
+        length "1..255";
+      }
+      mandatory true;
+      description
+        "The name of the entity reporting the event, for example, an EMS
+         name; may be the same as 'source-name'.";
+    }
+    leaf sequence {
+      type uint64;
+      mandatory true;
+      description
+        "Ordering of events communicated by an event source instance or 0, if not needed.";
+    }
+    leaf source-id {
+      type yang:uuid;
+      description
+        "UUID identifying the entity experiencing the event issue.";
+    }
+    leaf source-name {
+      type string;
+      mandatory true;
+      description
+        "The name of the entity experiencing the event issue,";
+    }
+    leaf start-epoch {
+      type yang:date-and-time;
+      mandatory true;
+      description
+        "The earliest time aka epoch time associated with the event from
+         any component.";
+    }
+    description
+      "An object class containing common parameters to all types of
+       events.";
+  }
+
+  grouping event-grp {
+    container header {
+      uses header-grp;
+      description
+        "This contains all the parameters which are common to all
+         events.";
+    }
+    description
+      "An object class defining the data structure of a single
+       event. An event is an asynchronous message send from the system to its
+       manager.";
+  }
+
+  /*
+   * Data
+   */
+
+  container event-history {
+    if-feature "event-history";
+    config false;
+    leaf maximum-number-of-entries {
+      type uint16 {
+        range "10..max";
+      }
+      default "255";
+      description
+        "The maximum number of item in the event list supported by
+         the server.";
+    }
+    list event {
+      description
+        "This contains the set of asynchronous messages.";
+      uses event-grp;
+    }
+    description
+      "The root container of an event log. ";
+  }
+
+  /*
+   * Notifications
+   */
+
+  notification yang-based-event-stream {
+    description
+      "This notification contains list of events.";
+    list event {
+      description
+        "This contains the set of asynchronous messages.";
+      uses event-grp;
+    }
+  }
+}
diff --git a/data-model/yang/published/opnfv/yes-attribute-value-change.yang b/data-model/yang/published/opnfv/yes-attribute-value-change.yang
new file mode 100644 (file)
index 0000000..75c1a7e
--- /dev/null
@@ -0,0 +1,117 @@
+module yes-attribute-value-change {
+    yang-version 1.1;
+    namespace "urn:opnfv:params:xml:ns:yang:attribute-value-change";
+    prefix yavc;
+
+    import yang-based-event-stream {
+        prefix yes;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+    import yes-types {
+        prefix yt;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    organization
+      "Open Platform for NFV (OPNFV) - Virtual Event Streaming (VES) project";
+    contact
+      "wiki.opnfv.org/display/ves";
+    description
+      "This module contains a collection of YANG definitions for sending an
+       attribute value change notification.
+
+       Copyright 2020 highstreet technologies GmbH and others.
+
+       Licensed under the Apache License, Version 2.0 (the 'License');
+       you may not use this file except in compliance with the License.
+       You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing, software
+       distributed under the License is distributed on an 'AS IS' BASIS,
+       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+       See the License for the specific language governing permissions and
+       limitations under the License.";
+
+    revision 2020-07-04 {
+        description
+          "Initial version";
+        reference
+          "ONAP SDN-R: wiki.onap.org/display/DW/SDN-R
+           VES: wiki.opnfv.org/display/ves/VES+Home
+                docs.onap.org/en/frankfurt/submodules/dcaegen2.git/docs/sections/services/ves-http
+           YES: wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    /*
+     * Groupings
+     */
+    grouping attribute-value-change-grp {
+        leaf object-reference {
+            type instance-identifier {
+                require-instance false;
+            }
+            mandatory true;
+            description
+              "A reference to the object containing the attribute (leaf).";
+        }
+        container schema {
+            uses yt:schema-grp;
+            description
+              "The YANG module, which defines the type of the attribute
+               identified by its namespace.";
+        }
+        anydata new-value {
+            description
+              "The new value which should be use on client datastores.
+               It must be ensured that the value is defined by a yang module.
+               if the new value is not delivered the manager (NMS;
+               SDN-Controller, SMO, MnS, ...) must send a GET of GET-CONFIG
+               request to the API provider. ";
+        }
+        anydata old-value {
+            description
+              "The new value which should be use on client datastores.
+               It must be ensured that the value is defined by a yang module.";
+        }
+        description
+          "An object class containing pnf-registration specific parameters.";
+    }
+
+    /*
+     * Augmentation of YES
+     */
+    augment "/yes:event-history/yes:event" {
+        when "derived-from-or-self(/yes:event-history/yes:event/yes:header/yes:domain, 'yavc:attribute-value-change')" {
+            description
+              "The event header must indicate 'attribute-value-change'.";
+        }
+        if-feature yes:event-history;
+        list attribute-value-change {
+            uses attribute-value-change-grp;
+            description
+              "A single object for specific parameters, used for the any change
+               of value change.";
+        }
+        description
+          "Adds to YES the specifics of attribute-value-change notifications.";
+    }
+
+    augment "/yes:yang-based-event-stream/yes:event" {
+        when "derived-from-or-self(/yes:yang-based-event-stream/yes:event/yes:header/yes:domain, 'yavc:attribute-value-change')" {
+            description
+              "The event header must indicate 'attribute-value-change'.";
+        }
+        list attribute-value-change {
+            uses attribute-value-change-grp;
+            description
+              "A single object for specific parameters, used for the any change
+               of value change.";
+        }
+        description
+          "Adds to YES the specifics of attribute-value-change notifications.";
+    }
+}
diff --git a/data-model/yang/published/opnfv/yes-fault.yang b/data-model/yang/published/opnfv/yes-fault.yang
new file mode 100644 (file)
index 0000000..08e9bee
--- /dev/null
@@ -0,0 +1,224 @@
+module yes-fault {
+    yang-version 1.1;
+    namespace "urn:opnfv:params:xml:ns:yang:yes-fault";
+    prefix yf;
+
+    import yang-based-event-stream {
+        prefix yes;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+    import yes-types {
+        prefix yt;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+    import ietf-alarms {
+        prefix al;
+        reference
+          "RFC 8632: A YANG Data Model for Alarm Management";
+    }
+
+    organization
+      "Open Platform for NFV (OPNFV) - Virtual Event Streaming (VES) project";
+    contact
+      "wiki.opnfv.org/display/ves";
+    description
+      "This module is inspired by VES 7.1.1 but uses YANG concepts and types to
+       describe the exchanged data format.
+
+       Copyright 2020 highstreet technologies GmbH and others.
+
+       Licensed under the Apache License, Version 2.0 (the 'License');
+       you may not use this file except in compliance with the License.
+       You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing, software
+       distributed under the License is distributed on an 'AS IS' BASIS,
+       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+       See the License for the specific language governing permissions and
+       limitations under the License.";
+
+    revision 2020-06-28 {
+        description
+          "Initial version";
+        reference
+          "ONAP SDN-R: wiki.onap.org/display/DW/SDN-R
+           VES: wiki.opnfv.org/display/ves/VES+Home
+                docs.onap.org/en/frankfurt/submodules/dcaegen2.git/docs/sections/services/ves-http
+           YES: wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    /*
+     * Identities
+     */
+    identity fault {
+        base yt:domain-id;
+        description
+          "Indicates, that the event body contains fault(s) related asynchronous
+           message context.";
+    }
+
+    identity category-id {
+        description
+          "Base identity for the alarm category.  A unique identification of the
+           alarm category.
+
+           This identity is abstract and MUST NOT be used for alarm categories.";
+    }
+
+    identity license {
+        base category-id;
+        description
+          "The alarm is related to a license.";
+    }
+
+    identity hardware {
+        base category-id;
+        description
+          "The alarm is related to hardware.";
+    }
+
+    identity link {
+        base category-id;
+        description
+          "The alarm is related to telecommunication and/or infrastructure
+           link.";
+    }
+
+    identity routing {
+        base category-id;
+        description
+          "The alarm is related to packet routing.";
+    }
+
+    identity security {
+        base category-id;
+        description
+          "The alarm is related to security.";
+    }
+    identity signaling {
+        base category-id;
+        description
+          "The alarm is related to network signaling.";
+    }
+
+    /*
+     * Type definitions
+     */
+    typedef category-id {
+        type identityref {
+            base category-id;
+        }
+        description
+          "Identifies an alarm category. The description of the alarm category
+           identifier MUST indicate if the alarm category identifier is abstract
+           or not.
+           An abstract alarm category identifier is used as a base for other
+           alarm category ids and will not be used as a value for a category or
+           be present in the fault event.";
+    }
+
+    /*
+     * Groupings
+     */
+    grouping fault-grp {
+        leaf condition {
+            type string {
+                length "255";
+            }
+            mandatory true;
+            description
+              "The alarm condition reported by the network function.";
+        }
+        leaf interface {
+            type al:resource;
+            description
+              "The card, port, channel or interface name of the network function
+               generating the alarm:
+
+               TODO: Shouldn't this leaf be mandatory for alarm correlation?";
+        }
+        leaf category {
+            type category-id;
+            description
+              "Event category, for example: license, link, routing, security,
+               signaling.";
+        }
+        leaf severity {
+            type al:severity-with-clear;
+            mandatory true;
+            description
+              "The event severity.";
+        }
+        leaf source-type {
+            type string {
+                length "255";
+            }
+            mandatory true;
+            description
+              "Type of event source; examples: card, host, other, port,
+               portThreshold, router, slotThreshold, switch, virtualMachine,
+               virtualNetworkFunction.
+
+               TODO: Is this needed? or What is the difference to category?";
+        }
+        leaf specific-problem {
+            type string {
+                length "255";
+            }
+            description
+              "A short description of the alarm or problem.";
+        }
+        leaf network-function-status {
+            type enumeration {
+                enum enabled {
+                    description
+                      "The network function is operational.";
+                }
+                enum disabled {
+                    description
+                      "The network function is not operational.";
+                }
+            }
+            description
+              "The operational status of the network function.";
+        }
+        description
+          "An object class containing all fault specific parameters.";
+    }
+
+    /*
+     * Augmentation of YES
+     */
+    augment "/yes:event-history/yes:event" {
+        when "derived-from-or-self(/yes:event-history/yes:event/yes:header/yes:domain, 'yf:fault')" {
+            description
+              "The event header must indicate 'fault'.";
+        }
+        if-feature yes:event-history;
+        list fault {
+            uses fault-grp;
+            description
+              "A list for fault objects.";
+        }
+        description
+          "Adds to YES the specifics of fault notifications.";
+    }
+
+    augment "/yes:yang-based-event-stream/yes:event" {
+        when "derived-from-or-self(/yes:yang-based-event-stream/yes:event/yes:header/yes:domain, 'yf:fault')" {
+            description
+              "The event header must indicate 'fault'.";
+        }
+        list fault {
+            uses fault-grp;
+            description
+              "A list for fault objects.";
+        }
+        description
+          "Adds to YES the specifics of fault notifications.";
+    }
+}
diff --git a/data-model/yang/published/opnfv/yes-heartbeat.yang b/data-model/yang/published/opnfv/yes-heartbeat.yang
new file mode 100644 (file)
index 0000000..fc15ecf
--- /dev/null
@@ -0,0 +1,113 @@
+module yes-heartbeat {
+    yang-version 1.1;
+    namespace "urn:opnfv:params:xml:ns:yang:yes-heartbeat";
+    prefix yh;
+
+    import yang-based-event-stream {
+        prefix yes;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+    import yes-types {
+        prefix yt;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    organization
+      "Open Platform for NFV (OPNFV) - Virtual Event Streaming (VES) project";
+    contact
+      "wiki.opnfv.org/display/ves";
+    description
+      "This module is inspired by VES 7.1.1 but uses YANG concepts and types to
+       describe the exchanged data format.
+       The module yes-heartbeat is only required, if the network function sends
+       HTTP-POST RESTCONF messages to the SMO, otherwise the native NETCONF
+       capabilities will be sufficient.
+
+       Copyright 2020 highstreet technologies GmbH and others.
+
+       Licensed under the Apache License, Version 2.0 (the 'License');
+       you may not use this file except in compliance with the License.
+       You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing, software
+       distributed under the License is distributed on an 'AS IS' BASIS,
+       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+       See the License for the specific language governing permissions and
+       limitations under the License.";
+
+    revision 2020-06-28 {
+        description
+          "Initial version";
+        reference
+          "ONAP SDN-R: wiki.onap.org/display/DW/SDN-R
+           VES: wiki.opnfv.org/display/ves/VES+Home
+                docs.onap.org/en/frankfurt/submodules/dcaegen2.git/docs/sections/services/ves-http
+           YES: wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    /*
+     * Identities
+     */
+    identity heartbeat {
+        base yt:domain-id;
+        description
+          "Indicates, that the event body contains heartbeat asynchronous
+           message context.";
+    }
+
+    /*
+     * Groupings
+     */
+    grouping heartbeat-grp {
+        leaf interval {
+            type uint32 {
+                range "60 .. 84600";
+            }
+            units "s";
+            mandatory true;
+            description
+              "The current heartbeat interval in seconds. The minimal heartbeat
+               interval is 1 minute avoiding overloading the management plane
+               network. The maximal interval is 24h to ensure a daily
+               heartbeat.";
+        }
+        description
+          "An object class containing heartbeat specific parameters.";
+    }
+
+    /*
+     * Augmentation of YES
+     */
+    augment "/yes:event-history/yes:event" {
+        when "derived-from-or-self(/yes:event-history/yes:event/yes:header/yes:domain, 'yh:heartbeat')" {
+            description
+              "The event header must indicate 'heartbeat'.";
+        }
+        if-feature yes:event-history;
+        container heartbeat {
+            uses heartbeat-grp;
+            description
+              "A single object for heartbeat specific parameters.";
+        }
+        description
+          "Adds to YES the specifics of heartbeat notifications.";
+    }
+
+    augment "/yes:yang-based-event-stream/yes:event" {
+        when "derived-from-or-self(/yes:yang-based-event-stream/yes:event/yes:header/yes:domain, 'yh:heartbeat')" {
+            description
+              "The event header must indicate 'heartbeat'.";
+        }
+        container heartbeat {
+            uses heartbeat-grp;
+            description
+              "A single object for heartbeat specific parameters.";
+        }
+        description
+          "Adds to YES the specifics of heartbeat notifications.";
+    }
+}
diff --git a/data-model/yang/published/opnfv/yes-object-creation.yang b/data-model/yang/published/opnfv/yes-object-creation.yang
new file mode 100644 (file)
index 0000000..87b0cec
--- /dev/null
@@ -0,0 +1,108 @@
+module yes-object-creation {
+    yang-version 1.1;
+    namespace "urn:opnfv:params:xml:ns:yang:object-creation";
+    prefix yoc;
+
+    import yang-based-event-stream {
+        prefix yes;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+    import yes-types {
+        prefix yt;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    organization
+      "Open Platform for NFV (OPNFV) - Virtual Event Streaming (VES) project";
+    contact
+      "wiki.opnfv.org/display/ves";
+    description
+      "This module contains a collection of YANG definitions for sending an
+       object creation notification.
+
+       Copyright 2020 highstreet technologies GmbH and others.
+
+       Licensed under the Apache License, Version 2.0 (the 'License');
+       you may not use this file except in compliance with the License.
+       You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing, software
+       distributed under the License is distributed on an 'AS IS' BASIS,
+       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+       See the License for the specific language governing permissions and
+       limitations under the License.";
+
+    revision 2020-07-04 {
+        description
+          "Initial version";
+        reference
+          "ONAP SDN-R: wiki.onap.org/display/DW/SDN-R
+           VES: wiki.opnfv.org/display/ves/VES+Home
+                docs.onap.org/en/frankfurt/submodules/dcaegen2.git/docs/sections/services/ves-http
+           YES: wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    /*
+     * Groupings
+     */
+    grouping object-creation-grp {
+        leaf object-reference {
+            type instance-identifier {
+                require-instance false;
+            }
+            mandatory true;
+            description
+              "A reference to the object containing the attribute (leaf).";
+        }
+        container schema {
+            uses yt:schema-grp;
+            description
+              "The YANG module, which defines the type of the attribute
+               identified by its namespace.";
+        }
+        anydata data {
+            description
+              "A set of data representing the new created object instance.";
+        }
+        description
+          "An object class containing specific parameters of object creation.";
+    }
+
+    /*
+     * Augmentation of YES
+     */
+    augment "/yes:event-history/yes:event" {
+        when "derived-from-or-self(/yes:event-history/yes:event/yes:header/yes:domain, 'yoc:object-creation')" {
+            description
+              "The event header must indicate 'object-creation'.";
+        }
+        if-feature yes:event-history;
+        list object-creation {
+            uses object-creation-grp;
+            description
+              "A single object for specific parameters, used for the any object
+               creation (list item or container).";
+        }
+        description
+          "Adds to YES the specifics of object-creation notifications.";
+    }
+
+    augment "/yes:yang-based-event-stream/yes:event" {
+        when "derived-from-or-self(/yes:yang-based-event-stream/yes:event/yes:header/yes:domain, 'yoc:object-creation')" {
+            description
+              "The event header must indicate 'object-creation'.";
+        }
+        list object-creation {
+            uses object-creation-grp;
+            description
+              "A single object for specific parameters, used for the any object
+               creation (list item or container).";
+        }
+        description
+          "Adds to YES the specifics of object-creation notifications.";
+    }
+}
diff --git a/data-model/yang/published/opnfv/yes-object-deletion.yang b/data-model/yang/published/opnfv/yes-object-deletion.yang
new file mode 100644 (file)
index 0000000..407fb80
--- /dev/null
@@ -0,0 +1,109 @@
+module yes-object-deletion {
+    yang-version 1.1;
+    namespace "urn:opnfv:params:xml:ns:yang:object-deletion";
+    prefix yod;
+
+    import yang-based-event-stream {
+        prefix yes;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+    import yes-types {
+        prefix yt;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    organization
+      "Open Platform for NFV (OPNFV) - Virtual Event Streaming (VES) project";
+    contact
+      "wiki.opnfv.org/display/ves";
+    description
+      "This module contains a collection of YANG definitions for sending an
+       object creation notification.
+
+       Copyright 2020 highstreet technologies GmbH and others.
+
+       Licensed under the Apache License, Version 2.0 (the 'License');
+       you may not use this file except in compliance with the License.
+       You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing, software
+       distributed under the License is distributed on an 'AS IS' BASIS,
+       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+       See the License for the specific language governing permissions and
+       limitations under the License.";
+
+    revision 2020-07-04 {
+        description
+          "Initial version";
+        reference
+          "ONAP SDN-R: wiki.onap.org/display/DW/SDN-R
+           VES: wiki.opnfv.org/display/ves/VES+Home
+                docs.onap.org/en/frankfurt/submodules/dcaegen2.git/docs/sections/services/ves-http
+           YES: wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    /*
+     * Groupings
+     */
+    grouping object-deletion-grp {
+        leaf object-reference {
+            type instance-identifier {
+                require-instance false;
+            }
+            mandatory true;
+            description
+              "A reference to the object containing the attribute (leaf).";
+        }
+        container schema {
+            uses yt:schema-grp;
+            description
+              "The YANG module, which defines the type of the attribute
+               identified by its namespace.";
+        }
+        anydata data {
+            description
+              "A set of data representing the deleted object instance.
+               TODO: does this make any sense?";
+        }
+        description
+          "An object class containing parameters for object deletion.";
+    }
+
+    /*
+     * Augmentation of YES
+     */
+    augment "/yes:event-history/yes:event" {
+        when "derived-from-or-self(/yes:event-history/yes:event/yes:header/yes:domain, 'yod:object-deletion')" {
+            description
+              "The event header must indicate 'object-deletion'.";
+        }
+        if-feature yes:event-history;
+        list object-deletion {
+            uses object-deletion-grp;
+            description
+              "A single object for specific parameters, used for the any object
+               deletion (list item or container).";
+        }
+        description
+          "Adds to YES the specifics of object-deletion notifications.";
+    }
+
+    augment "/yes:yang-based-event-stream/yes:event" {
+        when "derived-from-or-self(/yes:yang-based-event-stream/yes:event/yes:header/yes:domain, 'yod:object-deletion')" {
+            description
+              "The event header must indicate 'object-deletion'.";
+        }
+        list object-deletion {
+            uses object-deletion-grp;
+            description
+              "A single object for specific parameters, used for the any object
+               deletion (list item or container).";
+        }
+        description
+          "Adds to YES the specifics of object-deletion notifications.";
+    }
+}
diff --git a/data-model/yang/published/opnfv/yes-performance-monitoring.yang b/data-model/yang/published/opnfv/yes-performance-monitoring.yang
new file mode 100644 (file)
index 0000000..8c8e813
--- /dev/null
@@ -0,0 +1,184 @@
+module yes-performance-monitoring {
+    yang-version 1.1;
+    namespace "urn:opnfv:params:xml:ns:yang:yes-performance-monitoring";
+    prefix ypm;
+
+    import yang-based-event-stream {
+        prefix yes;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+    import yes-types {
+        prefix yt;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+    import ietf-yang-types {
+        prefix yang;
+        reference
+          "RFC 6991: Common YANG Data Types.";
+    }
+
+    organization
+      "Open Platform for NFV (OPNFV) - Virtual Event Streaming (VES) project";
+    contact
+      "wiki.opnfv.org/display/ves";
+    description
+      "This module is inspired by VES 7.1.1 but uses YANG concepts and types to
+       describe the exchanged data format.
+
+       Copyright 2020 highstreet technologies GmbH and others.
+
+       Licensed under the Apache License, Version 2.0 (the 'License');
+       you may not use this file except in compliance with the License.
+       You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing, software
+       distributed under the License is distributed on an 'AS IS' BASIS,
+       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+       See the License for the specific language governing permissions and
+       limitations under the License.";
+
+    revision 2020-06-28 {
+        description
+          "Initial version";
+        reference
+          "ONAP SDN-R: wiki.onap.org/display/DW/SDN-R
+           VES: wiki.opnfv.org/display/ves/VES+Home
+                docs.onap.org/en/frankfurt/submodules/dcaegen2.git/docs/sections/services/ves-http
+           YES: wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    /*
+     * Identities
+     */
+    identity performance-monitoring {
+        base yt:domain-id;
+        description
+          "Indicates, that the event body contains performance-monitoring
+           related asynchronous message context.";
+    }
+
+    identity granularity-period-id {
+        description
+          "Base identity for the granularity period.  A unique identification of
+           the granularity period. The description of the granularity period
+           value MUST indicate if the granularity period is abstract or not.
+
+           This identity is abstract and MUST NOT be used for granularity
+           period.";
+    }
+
+    identity gp15min {
+        base granularity-period-id;
+        description
+          "Indicates a period length of 900s. The display value is '15min'.";
+    }
+
+    identity gp24h {
+        base granularity-period-id;
+        description
+          "Indicates a period length of maximal 86400s. The display value is
+           '24h'.";
+    }
+
+    /*
+     * Type definitions
+     */
+    typedef granularity-period-type {
+        type identityref {
+            base granularity-period-id;
+        }
+        description
+          "The enumeration with the options for granularity period of the
+           performance measurement data.";
+    }
+
+    /*
+     * Groupings
+     */
+    grouping pm-measurement-grp {
+        leaf pm-key {
+            type yt:performance-measurement-type-id;
+            description
+              "The local identifier of a pm-measurement object.";
+        }
+        leaf pm-value {
+            type yt:pm-value-type;
+            mandatory true;
+            description
+              "The performance measurement value, measured in a certain interval.";
+        }
+        leaf pm-unit {
+            type yt:performance-measurement-unit-id;
+            description
+              "A representing of the unit og the pm-value.";
+        }
+        description
+          "An abstract object class representing a key-value pair for
+           pm-measurement.";
+    }
+
+    grouping performance-monitoring-grp {
+        leaf granularity-period {
+            type granularity-period-type;
+            config false;
+            description
+              "Time period between reset of the underlying counter.";
+        }
+        leaf suspect-interval-flag {
+            type boolean;
+            config false;
+            description
+              "This attribute indicates that the data collected during the interval is suspect.";
+        }
+        leaf period-end-time {
+            type yang:date-and-time;
+            config false;
+            description
+              "Time when the counter values have been recorded and the counter reset.";
+        }
+        list measurement {
+            key pm-key;
+            uses pm-measurement-grp;
+            description
+              "A set of measurement data for this interval.";
+        }
+        description
+          "An object class containing all performance-monitoring specific parameters.";
+    }
+
+    /*
+     * Augmentation of YES
+     */
+    augment "/yes:event-history/yes:event" {
+        when "derived-from-or-self(/yes:event-history/yes:event/yes:header/yes:domain, 'ypm:performance-monitoring')" {
+            description
+              "The event header must indicate 'performance-monitoring'.";
+        }
+        if-feature yes:event-history;
+        list performance-monitoring {
+            uses performance-monitoring-grp;
+            description
+              "A list for performance-monitoring objects.";
+        }
+        description
+          "Adds to YES the specifics of performance-monitoring notifications.";
+    }
+
+    augment "/yes:yang-based-event-stream/yes:event" {
+        when "derived-from-or-self(/yes:yang-based-event-stream/yes:event/yes:header/yes:domain, 'ypm:performance-monitoring')" {
+            description
+              "The event header must indicate 'performance-monitoring'.";
+        }
+        list performance-monitoring {
+            uses performance-monitoring-grp;
+            description
+              "A list for performance-monitoring objects.";
+        }
+        description
+          "Adds to YES the specifics of performance-monitoring notifications.";
+    }
+}
diff --git a/data-model/yang/published/opnfv/yes-pm-types-g826.yang b/data-model/yang/published/opnfv/yes-pm-types-g826.yang
new file mode 100644 (file)
index 0000000..9a268db
--- /dev/null
@@ -0,0 +1,97 @@
+module yes-pm-types-g826 {
+
+    yang-version 1.1;
+    namespace "urn:opendaylight:params:xml:ns:yang:yes-pm-types-g826";
+    prefix ypmtg;
+
+    import yes-types {
+        prefix yt;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    organization
+      "Open Platform for NFV (OPNFV) - Virtual Event Streaming (VES) project";
+    contact
+      "wiki.opnfv.org/display/ves";
+
+    description
+      "This module defines the performance measurement name identities
+       for yang based event streaming.
+
+       Copyright 2020 highstreet technologies GmbH and others.
+
+       Licensed under the Apache License, Version 2.0 (the 'License');
+       you may not use this file except in compliance with the License.
+       You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing, software
+       distributed under the License is distributed on an 'AS IS' BASIS,
+       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+       See the License for the specific language governing permissions and
+       limitations under the License.";
+
+    revision 2020-04-13 {
+        description
+          "Initial revision";
+        reference
+          "ITU T-REC-G.826 2002-12";
+    }
+
+    // --- typedef
+    identity performance-measurement-type-id {
+        base yt:performance-measurement-type-id;
+        description
+          "An abstract base performance measurement type which must not be
+           used as reference in data objects.";
+    }
+
+    identity errored-block {
+        base performance-measurement-type-id;
+        description
+          "errored block (EB):
+           A block in which one or more bits are in error.";
+    }
+
+    identity errored-second {
+        base performance-measurement-type-id;
+        description
+          "errored second (ES):
+           A one-second period with one or more errored blocks or at least
+           one defect.";
+    }
+
+    identity severely-errored-second {
+        base performance-measurement-type-id;
+        description
+          "severely errored second (SES):
+           A one-second period which contains ≥30% errored blocks or at least
+           one defect. SES is a subset of ES.";
+    }
+
+    identity errored-second-ratio {
+        base performance-measurement-type-id;
+        description
+          "errored second ratio (ESR):
+           The ratio of ES to total seconds in available time during a fixed
+           measurement interval. ";
+    }
+
+    identity severely-errored-second-ratio {
+        base performance-measurement-type-id;
+        description
+          "severely errored second ratio (SESR):
+           The ratio of SES to total seconds in available time during a fixed
+           measurement interval.";
+    }
+
+    identity background-block-error-ratio {
+        base performance-measurement-type-id;
+        description
+          "background block error ratio (BBER):
+           The ratio of Background Block Errors (BBE) to total blocks in
+           available time during a fixed measurement interval.";
+    }
+}
diff --git a/data-model/yang/published/opnfv/yes-pm-types-openroadm.yang b/data-model/yang/published/opnfv/yes-pm-types-openroadm.yang
new file mode 100644 (file)
index 0000000..2dea824
--- /dev/null
@@ -0,0 +1,612 @@
+module yes-pm-types-openroadm {
+
+    yang-version 1.1;
+    namespace "urn:opendaylight:params:xml:ns:yang:yes-pm-types-openroadm";
+    prefix ypmto;
+
+    import yes-types {
+        prefix yt;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    organization
+      "Open Platform for NFV (OPNFV) - Virtual Event Streaming (VES) project";
+    contact
+      "wiki.opnfv.org/display/ves";
+
+    description
+      "This module defines the performance measurement name identities
+       for yang based event streaming.
+
+       This yang module converts the OpenROADM yang:enumeration into
+       yang:identities.
+
+       Copyright 2020 highstreet technologies GmbH and others.
+
+       Licensed under the Apache License, Version 2.0 (the 'License');
+       you may not use this file except in compliance with the License.
+       You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing, software
+       distributed under the License is distributed on an 'AS IS' BASIS,
+       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+       See the License for the specific language governing permissions and
+       limitations under the License.";
+
+    revision 2020-04-13 {
+        description
+          "Initial revision";
+        reference
+          "https://jira.onap.org/browse/SDNC-???";
+    }
+
+    // --- typedef
+    identity performance-measurement-type-id {
+        base yt:performance-measurement-type-id;
+        description
+          "An abstract base performance measurement type which must not be used as
+           reference in data objects.";
+    }
+
+    // [sko] no need to define vendor extension - yang augment should be used
+    //       SDN Controller will ignore such values.
+    // identity vendorExtension {
+    //     base performance-measurement-type-id;
+    //     description
+    //       "vendor extension";
+    // }
+
+    identity bitErrorRate {
+        base performance-measurement-type-id;
+        description
+          "Bit error rate (BER)";
+    }
+    identity opticalPowerOutput {
+        base performance-measurement-type-id;
+        description
+          "Optical Power Output (OPOUT-OTS, OPOUT-OMS, OPT-OCH). Total optical power includes Variable Optical Attenuator (VOA) attenuation";
+    }
+    identity opticalReturnLoss {
+        base performance-measurement-type-id;
+        description
+          "Optical Return Loss (ORL-OTS) - at MW port(s) B";
+    }
+    identity opticalPowerInput {
+        base performance-measurement-type-id;
+        description
+          "Optical Power Input (OPIN-OTS, OPIN-OMS, OPR-OCH). Total optical power";
+    }
+    identity codeViolations {
+        base performance-measurement-type-id;
+        description
+          "Code Violations (CV)";
+    }
+
+    // [sko] exists already in G826
+    // identity erroredSeconds {
+    //     base performance-measurement-type-id;
+    //     description
+    //       "Errored Seconds (ES)";
+    // }
+
+    // [sko] exists already in G826
+    // identity severelyErroredSeconds {
+    //     base performance-measurement-type-id;
+    //     description
+    //       "Severely Errored Seconds (SES)";
+    // }
+
+    identity unavailableSeconds {
+        base performance-measurement-type-id;
+        description
+          "Unavailable Seconds (UAS)";
+    }
+    identity inFrames {
+        base performance-measurement-type-id;
+        description
+          "In frames (INFRAMES-E)";
+    }
+    identity inFramesErrored {
+        base performance-measurement-type-id;
+        description
+          "In frames errored (INFRAMESERR-E)";
+    }
+    identity outFrames {
+        base performance-measurement-type-id;
+        description
+          "Out frames (OUTFRAMES-E)";
+    }
+    identity erroredSecondsEthernet {
+        base performance-measurement-type-id;
+        description
+          "Errored Seconds Ethernet (ES-E)";
+    }
+    identity severelyErroredSecondsEthernet {
+        base performance-measurement-type-id;
+        description
+          "Severely Errored Seconds, Ethernet (SES-E)";
+    }
+    identity unavailableSecondsEthernet {
+        base performance-measurement-type-id;
+        description
+          "Unavailable Seconds, Ethernet (UAS-E)";
+    }
+    identity erroredBlockCount {
+        base performance-measurement-type-id;
+        description
+          "Errored block count";
+    }
+    identity delay {
+        base performance-measurement-type-id;
+        description
+          "Number of frames between a DMValue toggle event and the received DMp signal value toggle event";
+    }
+    identity defectSeconds {
+        base performance-measurement-type-id;
+        description
+          "Defect Seconds (DS)";
+    }
+    identity backwardIncomingAlignmentError {
+        base performance-measurement-type-id;
+        description
+          "Backward Incoming Alignment Error (BIAE)";
+    }
+    identity incomingAlignmentError {
+        base performance-measurement-type-id;
+        description
+          "Incoming Alignment Error (IAE)";
+    }
+    identity opticalPowerOutputMin {
+        base performance-measurement-type-id;
+        description
+          "Minimum Optical Power Output (OPOUT-OTS). Total optical power includes Variable Optical Attenuator (VOA) attenuation";
+    }
+    identity opticalPowerOutputMax {
+        base performance-measurement-type-id;
+        description
+          "Maximum Optical Power Output (OPOUT-OTS). Total optical power includes Variable Optical Attenuator (VOA) attenuation";
+    }
+    identity opticalPowerOutputAvg {
+        base performance-measurement-type-id;
+        description
+          "Average Optical Power Output (OPOUT-OTS). Total optical power includes Variable Optical Attenuator (VOA) attenuation";
+    }
+    identity opticalPowerInputMin {
+        base performance-measurement-type-id;
+        description
+          "Minimum Optical Power Input (OPIN-OTS). Total optical power";
+    }
+    identity opticalPowerInputMax {
+        base performance-measurement-type-id;
+        description
+          "Maximum Optical Power Input (OPIN-OTS). Total optical power";
+    }
+    identity opticalPowerInputAvg {
+        base performance-measurement-type-id;
+        description
+          "Average Optical Power Input (OPIN-OTS). Total optical power";
+    }
+    identity opticalPowerOutputOSC {
+        base performance-measurement-type-id;
+        description
+          "OSC Optical Power Output (OPT-OSC). OSC Transmit power on MW port";
+    }
+    identity opticalPowerOutputOSCMin {
+        base performance-measurement-type-id;
+        description
+          "Minimum OSC Optical Power Output (OPT-OSC). OSC Transmit power on MW port";
+    }
+    identity opticalPowerOutputOSCMax {
+        base performance-measurement-type-id;
+        description
+          "Maximum OSC Optical Power Output (OPT-OSC). OSC Transmit power on MW port";
+    }
+    identity opticalPowerOutputOSCAvg {
+        base performance-measurement-type-id;
+        description
+          "Average OSC Optical Power Output (OPT-OSC). OSC Transmit power on MW port";
+    }
+    identity opticalPowerInputOSC {
+        base performance-measurement-type-id;
+        description
+          "OSC Optical Power Input (OPR-OSC). OSC Receive power on MW port";
+    }
+    identity opticalPowerInputOSCMin {
+        base performance-measurement-type-id;
+        description
+          "Minimum OSC Optical Power Input (OPR-OSC). OSC Receive power on MW port";
+    }
+    identity opticalPowerInputOSCMax {
+        base performance-measurement-type-id;
+        description
+          "Maximum OSC Optical Power Input (OPR-OSC). OSC Receive power on MW port";
+    }
+    identity opticalPowerInputOSCAvg {
+        base performance-measurement-type-id;
+        description
+          "Average OSC Optical Power Input (OPR-OSC). OSC Receive power on MW port";
+    }
+    identity preFECCorrectedErrors {
+        base performance-measurement-type-id;
+        description
+          "pFEC corrected Errors";
+    }
+    identity totalOpticalPowerInput {
+        base performance-measurement-type-id;
+        description
+          "Total Optical Power Input.";
+    }
+    identity totalOpticalPowerInputMin {
+        base performance-measurement-type-id;
+        description
+          "Minimum Total Optical Power Input.";
+    }
+    identity totalOpticalPowerInputMax {
+        base performance-measurement-type-id;
+        description
+          "Maximum Total Optical Power Input.";
+    }
+    identity totalOpticalPowerInputAvg {
+        base performance-measurement-type-id;
+        description
+          "Average Total Optical Power Input.";
+    }
+    identity FECCorrectableBlocks {
+        base performance-measurement-type-id;
+        description
+          "FEC Correctable Blocks.";
+    }
+    identity FECUncorrectableBlocks {
+        base performance-measurement-type-id;
+        description
+          "FEC Uncorrectable Blocks.";
+    }
+    identity BIPErrorCounter {
+        base performance-measurement-type-id;
+        description
+          "BIP Error Counter";
+    }
+    identity protectionSwitchingCount {
+        base performance-measurement-type-id;
+        description
+          "Protection Switching Count (PSC)";
+    }
+    identity protectionSwitchingDuration {
+        base performance-measurement-type-id;
+        description
+          "Protection Switching Duration in seconds (PSD)";
+    }
+    identity erroredBlockCountTCM1-up {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM1 up direction.";
+    }
+    identity erroredBlockCountTCM2-up {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM2 up direction.";
+    }
+    identity erroredBlockCountTCM3-up {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM3 up direction.";
+    }
+    identity erroredBlockCountTCM4-up {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM4 up direction.";
+    }
+    identity erroredBlockCountTCM5-up {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM5 up direction.";
+    }
+    identity erroredBlockCountTCM6-up {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM6 up direction.";
+    }
+    identity delayTCM1-up {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM1 up direction.";
+    }
+    identity delayTCM2-up {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM2 up direction.";
+    }
+    identity delayTCM3-up {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM3 up direction.";
+    }
+    identity delayTCM4-up {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM4 up direction.";
+    }
+    identity delayTCM5-up {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM5 up direction.";
+    }
+    identity delayTCM6-up {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM6 up direction.";
+    }
+    identity erroredBlockCountTCM1-down {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM1 down direction.";
+    }
+    identity erroredBlockCountTCM2-down {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM2 down direction.";
+    }
+    identity erroredBlockCountTCM3-down {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM3 down direction.";
+    }
+    identity erroredBlockCountTCM4-down {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM4 down direction.";
+    }
+    identity erroredBlockCountTCM5-down {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM5 down direction.";
+    }
+    identity erroredBlockCountTCM6-down {
+        base performance-measurement-type-id;
+        description
+          "errored Blocks Count on TCM6 down direction.";
+    }
+    identity delayTCM1-down {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM1 down direction.";
+    }
+    identity delayTCM2-down {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM2 down direction.";
+    }
+    identity delayTCM3-down {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM3 down direction.";
+    }
+    identity delayTCM4-down {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM4 down direction.";
+    }
+    identity delayTCM5-down {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM5 down direction.";
+    }
+    identity delayTCM6-down {
+        base performance-measurement-type-id;
+        description
+          "Delay on TCM6 down direction.";
+    }
+    identity partialRateDiscard {
+        base performance-measurement-type-id;
+        description
+          "Discarded packet as a result of policing or rate limiting for subrate ethernet.";
+    }
+    identity erroredSecondsTCM1-up {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM1 up direction.";
+    }
+    identity erroredSecondsTCM2-up {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM2 up direction.";
+    }
+    identity erroredSecondsTCM3-up {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM3 up direction.";
+    }
+    identity erroredSecondsTCM4-up {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM4 up direction.";
+    }
+    identity erroredSecondsTCM5-up {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM5 up direction.";
+    }
+    identity erroredSecondsTCM6-up {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM6 up direction.";
+    }
+    identity severelyErroredSecondsTCM1-up {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM1 up direction.";
+    }
+    identity severelyErroredSecondsTCM2-up {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM2 up direction.";
+    }
+    identity severelyErroredSecondsTCM3-up {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM3 up direction.";
+    }
+    identity severelyErroredSecondsTCM4-up {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM4 up direction.";
+    }
+    identity severelyErroredSecondsTCM5-up {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM5 up direction.";
+    }
+    identity severelyErroredSecondsTCM6-up {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM6 up direction.";
+    }
+    identity unavailableSecondsTCM1-up {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM1 up direction.";
+    }
+    identity unavailableSecondsTCM2-up {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM2 up direction.";
+    }
+    identity unavailableSecondsTCM3-up {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM3 up direction.";
+    }
+    identity unavailableSecondsTCM4-up {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM4 up direction.";
+    }
+    identity unavailableSecondsTCM5-up {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM5 up direction.";
+    }
+    identity unavailableSecondsTCM6-up {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM6 up direction.";
+    }
+    identity erroredSecondsTCM1-down {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM1 down direction.";
+    }
+    identity erroredSecondsTCM2-down {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM2 down direction.";
+    }
+    identity erroredSecondsTCM3-down {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM3 down direction.";
+    }
+    identity erroredSecondsTCM4-down {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM4 down direction.";
+    }
+    identity erroredSecondsTCM5-down {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM5 down direction.";
+    }
+    identity erroredSecondsTCM6-down {
+        base performance-measurement-type-id;
+        description
+          "errored Seconds Count on TCM6 down direction.";
+    }
+    identity severelyErroredSecondsTCM1-down {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM1 down direction.";
+    }
+    identity severelyErroredSecondsTCM2-down {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM2 down direction.";
+    }
+    identity severelyErroredSecondsTCM3-down {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM3 down direction.";
+    }
+    identity severelyErroredSecondsTCM4-down {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM4 down direction.";
+    }
+    identity severelyErroredSecondsTCM5-down {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM5 down direction.";
+    }
+    identity severelyErroredSecondsTCM6-down {
+        base performance-measurement-type-id;
+        description
+          "severely Errored Seconds Count on TCM6 down direction.";
+    }
+    identity unavailableSecondsTCM1-down {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM1 down direction.";
+    }
+    identity unavailableSecondsTCM2-down {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM2 down direction.";
+    }
+    identity unavailableSecondsTCM3-down {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM3 down direction.";
+    }
+    identity unavailableSecondsTCM4-down {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM4 down direction.";
+    }
+    identity unavailableSecondsTCM5-down {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM5 down direction.";
+    }
+    identity unavailableSecondsTCM6-down {
+        base performance-measurement-type-id;
+        description
+          "unavailable Seconds Count on TCM6 down direction.";
+    }
+    identity fecCorrectedCodewords {
+        base performance-measurement-type-id;
+        description
+          "FEC Corrected Codewords Counter";
+    }
+    identity fecUncorrectedCodewords {
+        base performance-measurement-type-id;
+        description
+          "FEC Uncorrected Codewords Counter";
+    }
+    identity fecSymbolErrors {
+        base performance-measurement-type-id;
+        description
+          "FEC Symbol Error Counter";
+    }
+    identity localFaultSeconds {
+        base performance-measurement-type-id;
+        description
+          "Local Fault Seconds";
+    }
+    identity remoteFaultSeconds {
+        base performance-measurement-type-id;
+        description
+          "Remote Fault Seconds";
+    }
+}
diff --git a/data-model/yang/published/opnfv/yes-pnf-registration.yang b/data-model/yang/published/opnfv/yes-pnf-registration.yang
new file mode 100644 (file)
index 0000000..c1dedb9
--- /dev/null
@@ -0,0 +1,182 @@
+module yes-pnf-registration {
+    yang-version 1.1;
+    namespace "urn:opnfv:params:xml:ns:yang:yes-pnf-registration";
+    prefix ypr;
+
+    import yang-based-event-stream {
+        prefix yes;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+    import yes-types {
+        prefix yt;
+        reference
+          "wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+    import ietf-inet-types {
+        prefix inet;
+        reference
+          "RFC 6991: YANG data types for Internet addresses and related
+           things.";
+    }
+    import ietf-yang-types {
+        prefix yang;
+        reference
+          "RFC 6991: Common YANG Data Types.";
+    }
+
+    organization
+      "Open Platform for NFV (OPNFV) - Virtual Event Streaming (VES) project";
+    contact
+      "wiki.opnfv.org/display/ves";
+    description
+      "This module is inspired by VES 7.1.1 but uses YANG concepts and types to
+       describe the exchanged data format.
+       The module yes-pnf-registration is only required, if the network function
+       does not support NETCONF CALL HOME but RESTCONF asynchronous messages.
+
+       Copyright 2020 highstreet technologies GmbH and others.
+
+       Licensed under the Apache License, Version 2.0 (the 'License');
+       you may not use this file except in compliance with the License.
+       You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing, software
+       distributed under the License is distributed on an 'AS IS' BASIS,
+       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+       See the License for the specific language governing permissions and
+       limitations under the License.";
+
+    revision 2020-06-28 {
+        description
+          "Initial version";
+        reference
+          "ONAP SDN-R: wiki.onap.org/display/DW/SDN-R
+           VES: wiki.opnfv.org/display/ves/VES+Home
+                docs.onap.org/en/frankfurt/submodules/dcaegen2.git/docs/sections/services/ves-http
+           YES: wiki.opnfv.org/display/ves/VES+goes+YES";
+    }
+
+    /*
+     * Identities
+     */
+    identity pnf-registration {
+        base yt:domain-id;
+        description
+          "Indicates, that the event body contains pnf-registration asynchronous
+           message context.";
+    }
+
+    /*
+     * Groupings
+     */
+    grouping pnf-registration-grp {
+        // TODO align with ietf-hardware, ONAP AAI, ONF manufactured-thing
+        leaf last-service-date {
+            type yang:date-and-time;
+            description
+              "Date when the field operation stuff way on-side.";
+        }
+        leaf mac-address {
+            type yang:mac-address;
+            description
+              "The MAC address of OAM interface of the network function.";
+        }
+        leaf manufacture-date {
+            type yang:date-and-time;
+            description
+              "Manufacture date of the network function.";
+        }
+        leaf model-number {
+            type string {
+                length "255";
+            }
+            description
+              "Version of the network function from vendor.";
+        }
+        leaf oam-host {
+            type inet:host;
+            description
+              "The m-plane fully qualified domain name (host) or IP address to
+               be used by the manager to contact the PNF.";
+        }
+        leaf oam-port {
+            type inet:port-number;
+            description
+              "The port number the PNF listens for OAM commands..";
+        }
+        leaf serial-number {
+            type string {
+                length "255";
+            }
+            description
+              "The serial number of the network function.";
+        }
+        leaf software-version {
+            type string {
+                length "255";
+            }
+            description
+              "The active software version running on the network function.";
+        }
+        leaf family {
+            type string {
+                length "255";
+            }
+            description
+              "The general type of hardware.";
+        }
+        leaf network-function-type {
+            type string {
+                length "255";
+            }
+            description
+              "Vendor name for the network function";
+        }
+        leaf vendor-name {
+            type string {
+                length "255";
+            }
+            description
+              "The company name of manufacturer.";
+        }
+        description
+          "An object class containing pnf-registration specific parameters.";
+    }
+
+    /*
+     * Augmentation of YES
+     */
+    augment "/yes:event-history/yes:event" {
+        when "derived-from-or-self(/yes:event-history/yes:event/yes:header/yes:domain, 'ypr:pnf-registration')" {
+            description
+              "The event header must indicate 'pnf-registration'.";
+        }
+        if-feature yes:event-history;
+        container pnf-registration {
+            uses pnf-registration-grp;
+            description
+              "A single object for specific parameters, used for the registration of
+               physical network functions (PNF).";
+        }
+        description
+          "Adds to YES the specifics of pnf-registration notifications.";
+    }
+
+    augment "/yes:yang-based-event-stream/yes:event" {
+        when "derived-from-or-self(/yes:yang-based-event-stream/yes:event/yes:header/yes:domain, 'ypr:pnf-registration')" {
+            description
+              "The event header must indicate 'pnf-registration'.";
+        }
+        container pnf-registration {
+            uses pnf-registration-grp;
+            description
+              "A single object for specific parameters, used for the registration of
+               physical network functions (PNF).";
+        }
+        description
+          "Adds to YES the specifics of pnf-registration notifications.";
+    }
+}
diff --git a/data-model/yang/published/opnfv/yes-types.yang b/data-model/yang/published/opnfv/yes-types.yang
new file mode 100644 (file)
index 0000000..bcb14e6
--- /dev/null
@@ -0,0 +1,326 @@
+module yes-types {
+  yang-version 1.1;
+  namespace "urn:opnfv:params:xml:ns:yang:yes-types";
+  prefix yt;
+
+  import ietf-yang-types {
+    prefix yang;
+    reference
+      "RFC 6991: Common YANG Data Types.";
+  }
+
+  organization
+    "Open Platform for NFV (OPNFV) - Virtual Event Streaming (VES) project";
+  contact
+    "wiki.opnfv.org/display/ves";
+  description
+    "This module contains common type definitions and groupings of the
+     yang-based-event-stream (YES). Such definitions could be used also outside of
+     YES if appropriate.
+
+     Copyright 2020 highstreet technologies GmbH and others.
+
+     Licensed under the Apache License, Version 2.0 (the 'License');
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an 'AS IS' BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.";
+
+  revision 2020-06-28 {
+    description
+      "Initial version";
+    reference
+      "ONAP SDN-R: wiki.onap.org/display/DW/SDN-R
+       VES: wiki.opnfv.org/display/ves/VES+Home
+            docs.onap.org/en/frankfurt/submodules/dcaegen2.git/docs/sections/services/ves-http
+       YES: wiki.opnfv.org/display/ves/VES+goes+YES";
+  }
+
+  /*
+   * Identities
+   */
+
+  identity domain-id {
+    description
+      "Base identity for the event domain.  A unique identification of the
+       event domain.
+
+       This identity is abstract and MUST NOT be used for domains.";
+  }
+
+  identity event-type-id {
+    description
+      "Base identity for the event type.  A unique identification of the
+       event type.
+
+       This identity is abstract and MUST NOT be used for event types.";
+  }
+
+  identity application {
+    base event-type-id;
+    description
+      "Indicates that the event is raised by a software application.";
+    reference
+      "https://en.wikipedia.org/wiki/Application_software";
+  }
+
+  identity micro-service {
+    base event-type-id;
+    description
+      "Indicates that the event is raised by a software micro-service.";
+    reference
+      "https://en.wikipedia.org/wiki/Microservices";
+  }
+
+  identity guest-operating-system {
+    base event-type-id;
+    description
+      "Indicates that the event is raised by the operating system of a
+       guest virtual network function.";
+  }
+
+  identity host-operating-system {
+    base event-type-id;
+    description
+      "Indicates that the event is raised by the operating system of a
+       host system running virtual network functions.";
+  }
+
+  identity platform {
+    base event-type-id;
+    description
+      "Indicates that the event is raised by the cloud and/or data center
+       itself.";
+  }
+
+  identity physical-network-function {
+    base event-type-id;
+    description
+      "Indicates that the event is raised by a physical network function.";
+  }
+
+  identity performance-measurement-type-id {
+    description
+      "Base identity for performance measurement types. A unique identification
+       of the performance measurement value, not including the resource.
+       Different resources can share performance measurement types. If the
+       resource reports the same performance measurement type, it is to be
+       considered to be the same performance measurement.
+
+       This identity is abstract and MUST NOT be used for performance
+       measurement.";
+  }
+
+  identity performance-measurement-unit-id {
+    description
+      "Base identity for performance measurement units.
+
+       This identity is abstract and MUST NOT be used for performance
+       measurement.";
+  }
+
+  identity celsius {
+    base performance-measurement-unit-id;
+    description
+      "°C: Grad Celsius";
+  }
+
+  identity dBm {
+    base performance-measurement-unit-id;
+    description
+      "dBm is unit of level used to indicate that a power ratio is expressed in
+       decibels (dB) with reference to one milliwatt (mW).";
+  }
+
+  identity dB {
+    base performance-measurement-unit-id;
+    description
+      "dB: decibels";
+  }
+
+  identity fahrenheit {
+    base performance-measurement-unit-id;
+    description
+      "°F: Grad Fahrenheit";
+  }
+
+  identity mW {
+    base performance-measurement-unit-id;
+    description
+      "mW: milliwatt";
+  }
+
+  identity kHz {
+    base performance-measurement-unit-id;
+    description
+      "kHz: kilohertz";
+  }
+
+  /*
+   * Type definitions
+   */
+
+  typedef domain-id {
+    type identityref {
+      base domain-id;
+    }
+    description
+      "Identifies an event domain. The description of the domain
+       identifier MUST indicate if the domain identifier is abstract or not.
+       An abstract domain identifier is used as a base for other domain ids
+       and will not be used as a value for a domain or be present in
+       the event.";
+  }
+
+  typedef event-type-id {
+    type identityref {
+      base event-type-id;
+    }
+    description
+      "Identifies an event type. The description of the event type
+       MUST indicate if the event type is abstract or not.
+       An abstract event type is used as a base for other event types
+       and will not be used as a value for an event.";
+  }
+
+  typedef pm-value-type {
+    type union {
+      type uint64;
+      type int64;
+      type decimal64 {
+        fraction-digits 2;
+      }
+      type decimal64 {
+        fraction-digits 17;
+      }
+    }
+    description
+      "Inspired and copied from OpenROADM. A generic type definition
+       for performance monitoring values.";
+  }
+
+  typedef performance-measurement-type-id {
+    type identityref {
+      base performance-measurement-type-id;
+    }
+    description
+      "Identifies an performance-measurement type. The description of the
+       performance measurement type id MUST indicate if the performance
+       measurement type is abstract or not. An abstract performance measurement
+       type is used as a base for other performance measurement type ids
+       and will not be used as a value for an performance measurement or be
+       present in the performance measurement inventory.";
+  }
+
+  typedef performance-measurement-unit-id {
+    type identityref {
+      base performance-measurement-unit-id;
+    }
+    description
+      "Identifies an performance-measurement unit. The description of the
+       performance measurement unit id MUST indicate if the performance
+       measurement unit is abstract or not. An abstract performance measurement
+       unit is used as a base for other performance measurement unit ids
+       and will not be used as a value for an performance measurement or be
+       present in the performance measurement inventory.";
+  }
+
+  typedef priority {
+    type enumeration {
+      enum high {
+        description
+          "Indicates the highest priority of an event. This value SHOULD
+           be used only in very rare cases, where it must be ensured,
+           that the event SHOULD be processed immediately by-passing any
+           queue. ";
+      }
+      enum medium {
+        description
+          "This value SHOULD be used to indicate that the event SHOULD
+           be processed faster than default. ";
+      }
+      enum normal {
+        description
+          "The default value of a event priority.";
+      }
+      enum low {
+        description
+          "Indicates that such event can be process, when the processing
+           system is idle.";
+      }
+    }
+    description
+      "A non-extensible enumeration defining the different priority levels.
+       In case of resource constrainer and overload scenarios an event with
+       a higher priority SHOULD be handled first.";
+  }
+
+  typedef resource {
+    type union {
+      type instance-identifier {
+        require-instance false;
+      }
+      type yang:object-identifier;
+      type string;
+      type yang:uuid;
+    }
+    description
+      "This is an identification of the event emitting resource, such as an
+       interface.  It should be as fine-grained as possible both to
+       guide the operator and to guarantee uniqueness of the event emitting
+       resource.
+
+       If the resource is modeled in YANG, this type will
+       be an instance-identifier.
+
+       If the resource is an SNMP object, the type will be an
+       object-identifier.
+
+       If the resource is anything else, for example a distinguished
+       name or a CIM path, this type will be a string.
+
+       If the alarming object is identified by a UUID use the uuid
+       type.  Be cautious when using this type, since a UUID is hard
+       to use for an operator.
+
+       If the server supports several models, the precedence should
+       be in the order as given in the union definition.";
+    reference
+      "RRC 8632: Type Definition 'resource'";
+  }
+
+  /*
+   * Groupings
+   */
+
+  grouping schema-grp {
+    leaf namespace {
+      type string {
+        length "1..255";
+      }
+      mandatory true;
+      description
+        "The (YANG-) schema namespace as as unique reference.";
+    }
+    leaf module {
+      type string {
+        length "1..255";
+      }
+      description
+        "The (YANG-) module name.";
+    }
+    leaf revision {
+      type yang:date-and-time;
+      description
+        "The revision date of the (YANG-) schema.";
+    }
+    description
+      "An object class to reference a (YANG-) schema.";
+  }
+}
index 39d3b0e..d3eeca7 120000 (symlink)
@@ -1 +1 @@
-../../../published/ietf/iana-hardware.yang
\ No newline at end of file
+../../../published/ietf/iana-hardware@2018-03-13.yang
\ No newline at end of file
index 24bb77a..6cc91d0 120000 (symlink)
@@ -1 +1 @@
-../../../published/ietf/ietf-alarms.yang
\ No newline at end of file
+../../../published/ietf/ietf-alarms@2019-09-11.yang
\ No newline at end of file
index ff01a3c..858050a 120000 (symlink)
@@ -1 +1 @@
-../../../published/ietf/ietf-hardware.yang
\ No newline at end of file
+../../../published/ietf/ietf-hardware@2018-03-13.yang
\ No newline at end of file
index 9f90ca6..c7ed68d 120000 (symlink)
@@ -1 +1 @@
-../../../published/ietf/ietf-inet-types.yang
\ No newline at end of file
+../../../published/ietf/ietf-inet-types@2013-07-15.yang
\ No newline at end of file
index a2954d0..de28fbe 120000 (symlink)
@@ -1 +1 @@
-../../../published/ietf/ietf-interfaces.yang
\ No newline at end of file
+../../../published/ietf/ietf-interfaces@2018-02-20.yang
\ No newline at end of file
index 2353b09..2eb3eac 120000 (symlink)
@@ -1 +1 @@
-../../../published/ietf/ietf-yang-types.yang
\ No newline at end of file
+../../../published/ietf/ietf-yang-types@2013-07-15.yang
\ No newline at end of file