Merge changes from topic "OAM-289"
authorMartin Skorupski <martin.skorupski@highstreet-technologies.com>
Wed, 31 Aug 2022 11:49:43 +0000 (11:49 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Wed, 31 Aug 2022 11:49:43 +0000 (11:49 +0000)
* changes:
  Import OPNVF Yang based Event Stream
  Import OPNVF Yang based Event Stream
  Import OPNVF Yang based Event Stream
  Import OPNVF Yang based Event Stream
  Import OPNVF Yang based Event Stream
  Import OPNVF Yang based Event Stream
  Import OPNVF Yang based Event Stream
  Import OPNVF Yang based Event Stream
  Import OPNVF Yang based Event Stream
  Import OPNVF Yang based Event Stream
  Import OPNVF Yang based Event Stream

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]

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