Merge changes I11d22718,I359a9bf2

* changes:
  Develop a data model: o1-notify-pnf-registration
  Develop a data model: o1-notify-pnf-registration
diff --git a/data-model/yang/working/o-ran-sc/template/yes-o1-notify-pnf-registration-additional-fields.yang b/data-model/yang/working/o-ran-sc/template/yes-o1-notify-pnf-registration-additional-fields.yang
new file mode 100644
index 0000000..1777b2c
--- /dev/null
+++ b/data-model/yang/working/o-ran-sc/template/yes-o1-notify-pnf-registration-additional-fields.yang
@@ -0,0 +1,192 @@
+module yes-o1-notify-pnf-registration-additional-fields {
+  yang-version 1.1;
+  namespace "urn:o-ran-sc:params:xml:ns:yang:yes-o1-notify-pnf-registration-additional-fields";
+  prefix ypra;
+
+  import yang-based-event-stream {
+    prefix yes;
+    reference
+      "wiki.opnfv.org/display/ves/VES+goes+YES";
+  }
+  import yes-o1-notify-pnf-registration {
+    prefix ypr;
+    reference
+      "O-RAN Operations and Maintenance Interface Specification (O-RAN.WG10.O1-Interface.0-v07.00)
+       section 2.7.2.4 Operations and Notifications";
+  }
+
+  organization
+    "O-RAN Software Community";
+  contact
+    "www.o-ran-sc.org";
+  description
+    "This module is inspired by VES 7.1.1 but uses YANG concepts and types to
+     describe the exchanged data format.
+     This module augments yes-o1-notify-pnf-registration for vendor specific
+     additional fields.
+
+     Copyright 2022 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 2022-08-24 {
+    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
+       O-RAN Operations and Maintenance Interface Specification (O-RAN.WG10.O1-Interface.0-v07.00)
+             section 2.7.2.4 Operations and Notifications";
+  }
+
+  /*
+   * Groupings
+   */
+
+  grouping o1-notify-pnf-registration-additional-fields-grp {
+    // TODO align with ietf-hardware, ONAP AAI, ONF manufactured-thing
+    leaf transport-protocol {
+      type enumeration {
+        enum ssh {
+          description
+            "NETCONF via SSH";
+        }
+        enum tls {
+          description
+            "NETCONF via TLS";
+          reference
+            "RFC7589: Using the NETCONF Protocol over Transport Layer Security (TLS)
+                      with Mutual X.509 Authentication";
+        }
+      }
+      default "ssh";
+      description
+        "Defines the security protocol for NETCONF";
+    }
+    leaf username {
+      type string {
+        length "3..255";
+      }
+      description
+        "The username for the connection.";
+    }
+    choice transport-protocol-details {
+      case ssh {
+        leaf password {
+          type string {
+            length "8..255";
+          }
+          description
+            "The user's password for the SSH session.";
+        }
+        leaf host-key {
+          type string;
+          description
+            "BASE-64 encoded public key which is used by the network-function
+              during the connection.";
+        }
+      }
+      case tls {
+        leaf key-reference {
+          type string;
+          description
+            "Key identifier inside the NETCONF server's keystore.
+              It is used during two-way TLS authentication.";
+          reference
+            "ietf-keystore.yang";
+        }
+      }
+      description
+        "Provides connectivity details for one of the supported transport protocols";
+    }
+    leaf reconnect-on-changed-schema {
+      type boolean;
+      default "false";
+      description
+        "Defines if the NETCONF client should reconnect to the network
+         function, if new YANG capabilities are exposed.";
+    }
+    leaf connection-timeout {
+      type uint32;
+      units "ms";
+      default "20000";
+      description
+        "Defines the NETCONF client timeout to indicate that the connection
+         was lost.";
+    }
+    leaf max-connection-attempts {
+      type uint32;
+      default "0";
+      description
+        "Defines the number of attempts by the NETCONF client to connect
+         to the NETCONF server, before the automated connection function, by
+         the NETCONF client is switched off. The value 0 means 'infinity'.";
+    }
+    leaf between-attempts-timeout {
+      type uint32;
+      units "ms";
+      default "2000";
+      description
+        "Defines the first delay time in milliseconds to try a new reconnect
+         by the NETCONF client. For the next attempts the values is
+         multiplied with the 'sleep-factor'.";
+    }
+    leaf sleep-factor {
+      type decimal64 {
+        fraction-digits 1;
+        range "1.0 .. 10.0";
+      }
+      default "1.5";
+      description
+        "Defines the factor to increase the reconnect attempt.";
+    }
+    leaf keepalive-delay {
+      type uint32;
+      units "s";
+      default "120";
+      description
+        "Defines the time in seconds between two 'empty' NETCONF request to
+         check if the NETCONF server is functional or can be reached. The
+         value 0 turns of such function.";
+    }
+    description
+      "An object class containing o1-notify-pnf-registration additional fields.";
+  }
+
+  /*
+   * Augmentation of o1-notify-pnf-registration
+   */
+
+  augment "/yes:event-history/yes:event/ypr:o1-notify-pnf-registration" {
+    when "derived-from-or-self(/yes:event-history/yes:event/yes:header/yes:domain, 'ypr:o1-notify-pnf-registration')" {
+      description
+        "The event header must indicate 'o1-notify-pnf-registration'.";
+    }
+    if-feature "yes:event-history";
+    uses o1-notify-pnf-registration-additional-fields-grp;
+    description
+      "Adds additional fields to o1-notify-pnf-registration notifications.";
+  }
+
+  augment "/yes:yang-based-event-stream/yes:event/ypr:o1-notify-pnf-registration" {
+    when "derived-from-or-self(/yes:yang-based-event-stream/yes:event/yes:header/yes:domain, 'ypr:o1-notify-pnf-registration')" {
+      description
+        "The event header must indicate 'o1-notify-pnf-registration'.";
+    }
+    uses o1-notify-pnf-registration-additional-fields-grp;
+    description
+      "Adds additional fields to o1-notify-pnf-registration notifications.";
+  }
+}
diff --git a/data-model/yang/working/o-ran-sc/template/yes-o1-notify-pnf-registration.yang b/data-model/yang/working/o-ran-sc/template/yes-o1-notify-pnf-registration.yang
new file mode 100644
index 0000000..9800908
--- /dev/null
+++ b/data-model/yang/working/o-ran-sc/template/yes-o1-notify-pnf-registration.yang
@@ -0,0 +1,307 @@
+module yes-o1-notify-pnf-registration {
+  yang-version 1.1;
+  namespace "urn:o-ran-sc:params:xml:ns:yang:yes-o1-notify-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
+    "O-RAN Software Community";
+  contact
+    "www.o-ran-sc.org";
+  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-o1-notify-pnf-registration is only required, if the
+     network function does not support NETCONF CALL HOME but RESTCONF
+     asynchronous messages.
+
+     Copyright 2022 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 2022-08-24 {
+    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
+       O-RAN Operations and Maintenance Interface Specification (O-RAN.WG10.O1-Interface.0-v07.00)
+             section 2.7.2.4 Operations and Notifications";
+  }
+
+  /*
+   * Identities
+   */
+
+  identity o1-notify-pnf-registration {
+    base yt:domain-id;
+    description
+      "Indicates, that the event body contains o1-notify-nf-registration
+       asynchron message context.";
+  }
+
+  /*
+   * Groupings
+   */
+
+  grouping o1-notify-pnf-registration-grp {
+    // TODO align with ietf-hardware, ONAP AAI, ONF manufactured-thing
+    // Parameter Name	S	Information Type	Comment
+    // objectClass	M	ManagedEntity.objectClass 	Class of the managed object, registering for service.
+    leaf object-class {
+      type string {
+        length "3..255";
+      }
+      mandatory true;
+      description
+        "The name of the object class describing a PNF in the context of
+         PNF registration. ";
+    }
+    // objectInstance	M	ManagedEntity.objectInstance
+    // 	Instance of the managed object, registering for service.
+    leaf object-instance {
+      type yt:resource;
+      mandatory true;
+      description
+        "Reference to the object representing the PNF.";
+    }
+    // notificationId	M	NotificationId	Notification identifier as defined in ITU-T Rec. X. 733
+    leaf notification-identifier {
+      type uint64;
+      mandatory true;
+      description
+        "An notification identifier of this event as defined in ITU-T Rec. X.733.";
+      reference
+        "ITU-T Rec. X.733 - section 8.1.2.8.";
+    }
+    // notificationType	M	"o1notifyPnfRegistration"
+    leaf notification-type {
+      type yt:domain-id;
+      mandatory true;
+      description
+        "Only the domain identity 'o1-notify-pnf-registration' is allowed.";
+    }
+    // eventTime	M	DateTime	Time when the NF is sending the registration.
+    leaf event-time {
+      type yang:date-and-time;
+      mandatory true;
+      description
+        "The earliest time aka epoch time associated with the event from
+         any component.";
+    }
+    // systemDN	M	SystemDN	DN of the MnS provider of the notification
+    leaf system-distinguished-name {
+      type string;
+      mandatory true;
+      description
+        "Distinguished Name of the management service provider of the notification";
+    }
+    // o1SpecVersion	M	number	Version of the O1 Specification defining the format of this PNF registration notification
+    leaf o1-specification-version {
+      type string {
+        length "1..5";
+      }
+      mandatory true;
+      description
+        "The version of the O1 Specification defining the format of this PNF registration notification";
+    }
+    // serialNumber	M	string	3GPP TS 28.632 [43] serialNumber = serial number of the unit
+    leaf serial-number {
+      type string {
+        length "3..255";
+      }
+      mandatory true;
+      description
+        "The serial number of the network function.";
+      reference
+        "3GPP TS 28.632 serialNumber";
+    }
+    // vendorName	M	string	3GPP TS 28.632 [43] vendorName = name of the NF vendor.
+    choice vendor {
+      case vendor-private-enterprise-number {
+        leaf vendor-pen {
+          type uint32;
+          description
+            "Network function vendor IANA private enterprise number.";
+        }
+      }
+      case name {
+        leaf 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 vendor-name {
+      //   type string {
+      //       length "1..255";
+      //   }
+      //   mandatory true;
+      //   description
+      //     "The company name of manufacturer.";
+      //   reference
+      //     "3GPP TS 28.632 vendorName";
+    }
+    // oamV4IpAddress	CM	string	IPv4 m-plane IP address to be used by the manager to contact the NF.
+    // oamV6IpAddress	CM	string	IPv6 m-plane IP address to be used by the manager to contact the NF.
+    leaf oam-host {
+      type inet:host;
+      mandatory true;
+      description
+        "The m-plane fully qualified domain name (host) or IP address to
+         be used by the manager to contact the PNF.";
+      reference
+        "O-RAN Operations and Maintenance Interface Specification (O-RAN.WG10.O1-Interface.0-v07.00)
+           section 2.7.2.4 Operations and Notifications - oamV4IpAddress and oamV6IpAddress";
+    }
+    leaf oam-port {
+      type inet:port-number;
+      default "830";
+      description
+        "The port number the PNF listens for OAM commands..";
+    }
+    // macAddress	O	string	MAC address of the OAM of the unit
+    leaf mac-address {
+      type yang:mac-address;
+      description
+        "The MAC address of OAM interface of the network function.";
+    }
+    // unitFamily	O	string	3GPP TS 28.632 [43] vendorUnitFamilyType = general type of HW unit
+    leaf unit-family {
+      type string {
+        length "1..255";
+      }
+      description
+        "The general type of hardware.";
+      reference
+        "3GPP TS 28.632 vendorUnitFamilyType";
+    }
+    // unitType	O	string	3GPP TS 28.632 [43] vendorUnitTypeNumber = vendor name for the unit
+    leaf unit-type {
+      type string {
+        length "1..255";
+      }
+      description
+        "Vendor name for the network function";
+      reference
+        "3GPP TS 28.632 vendorUnitTypeNumber";
+    }
+    // modelNumber	O	string	3GPP TS 28.632 [43] versionNumber = version of the unit from the vendor
+    leaf model-number {
+      type string {
+        length "1..255";
+      }
+      description
+        "Version of the network function from the vendor.";
+      reference
+        "3GPP TS 28.632 versionNumber";
+    }
+    // softwareVersion	O	string	3GPP TS 28.632 [43] swName = software release name.  This is the software provided by the vendor at onboarding to be run on this version of the NF and can contain multiple underlying software images.
+    leaf software-version {
+      type string {
+        length "1..255";
+      }
+      description
+        "The active software version running on the network function.";
+      reference
+        "3GPP TS 28.632 swName";
+    }
+    // restartReason	O	string	Reason the NF restarted, if known
+    leaf restart-reason {
+      type string {
+        length "1..255";
+      }
+      description
+        "The reason the network function restarted.";
+    }
+    // manufactureDate	O	string	3GPP TS 28.632 [43] dateOfManufacture = manufacture date of the unit in ISO 8601 format; e.g.,2016-04-23
+    leaf manufacture-date {
+      type yang:date-and-time;
+      description
+        "Manufacture date of the network function.";
+    }
+    // lastServiceDate	O	string	3GPP TS 28.632 [43] dateOfLastService = date of last service in ISO 8601 format; e.g., 2017-02-15
+    leaf last-service-date {
+      type yang:date-and-time;
+      description
+        "Date when the field operation stuff way on-side.";
+    }
+    // additionalFields	O	hashMap	Additional registration fields if needed, provided as key-value pairs.
+    description
+      "An object class containing o1-notify-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:o1-notify-pnf-registration')" {
+      description
+        "The event header must indicate 'o1-notify-pnf-registration'.";
+    }
+    if-feature "yes:event-history";
+    container o1-notify-pnf-registration {
+      uses o1-notify-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 o1-notify-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:o1-notify-pnf-registration')" {
+      description
+        "The event header must indicate 'o1-notify-pnf-registration'.";
+    }
+    container o1-notify-pnf-registration {
+      uses o1-notify-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 o1-notify-pnf-registration notifications.";
+  }
+}