Add xran datamodels 64/2864/4
authordemx8as6 <martin.skorupski@highstreet-technologies.com>
Thu, 19 Mar 2020 11:51:57 +0000 (12:51 +0100)
committerMartin Skorupski <martin.skorupski@highstreet-technologies.com>
Thu, 19 Mar 2020 12:54:33 +0000 (12:54 +0000)
a copy of published xran data models withou modifications

IssueID: OAM-74
Change-Id: Id06de75cff1fb1cafac52f8ace991a53d38399d0
Signed-off-by: demx8as6 <martin.skorupski@highstreet-technologies.com>
36 files changed:
data-model/yang/published/xran/iana-hardware.yang [new symlink]
data-model/yang/published/xran/iana-if-type.yang [new symlink]
data-model/yang/published/xran/ietf-dhcpv6-types.yang [new symlink]
data-model/yang/published/xran/ietf-hardware.yang [new symlink]
data-model/yang/published/xran/ietf-inet-types.yang [new symlink]
data-model/yang/published/xran/ietf-interfaces.yang [new symlink]
data-model/yang/published/xran/ietf-ip.yang [new symlink]
data-model/yang/published/xran/ietf-yang-types.yang [new symlink]
data-model/yang/published/xran/org-openroadm-user-mgmt@2017-12-15.yang [new symlink]
data-model/yang/published/xran/xran-alarm-id.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-ald-port.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-ald.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-beamforming.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-delay-management.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-dhcp.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-ecpri-delay.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-externalio.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-fan.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-file-management.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-fm.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-hardware.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-interfaces.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-lbm.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-module-cap.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-mplane-int.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-operations.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-performance-management.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-processing-element.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-software-management.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-supervision.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-sync.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-transceiver.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-troubleshooting.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-udp-echo.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-uplane-conf.yang [new file with mode: 0644]
data-model/yang/published/xran/xran-usermgmt.yang [new file with mode: 0644]

diff --git a/data-model/yang/published/xran/iana-hardware.yang b/data-model/yang/published/xran/iana-hardware.yang
new file mode 120000 (symlink)
index 0000000..b2d1ef3
--- /dev/null
@@ -0,0 +1 @@
+../ietf/iana-hardware.yang
\ No newline at end of file
diff --git a/data-model/yang/published/xran/iana-if-type.yang b/data-model/yang/published/xran/iana-if-type.yang
new file mode 120000 (symlink)
index 0000000..2dd0a83
--- /dev/null
@@ -0,0 +1 @@
+../ietf/iana-if-type.yang
\ No newline at end of file
diff --git a/data-model/yang/published/xran/ietf-dhcpv6-types.yang b/data-model/yang/published/xran/ietf-dhcpv6-types.yang
new file mode 120000 (symlink)
index 0000000..cfa5b3c
--- /dev/null
@@ -0,0 +1 @@
+../ietf/ietf-dhcpv6-types.yang
\ No newline at end of file
diff --git a/data-model/yang/published/xran/ietf-hardware.yang b/data-model/yang/published/xran/ietf-hardware.yang
new file mode 120000 (symlink)
index 0000000..9e0106e
--- /dev/null
@@ -0,0 +1 @@
+../ietf/ietf-hardware.yang
\ No newline at end of file
diff --git a/data-model/yang/published/xran/ietf-inet-types.yang b/data-model/yang/published/xran/ietf-inet-types.yang
new file mode 120000 (symlink)
index 0000000..0f3f946
--- /dev/null
@@ -0,0 +1 @@
+../ietf/ietf-inet-types.yang
\ No newline at end of file
diff --git a/data-model/yang/published/xran/ietf-interfaces.yang b/data-model/yang/published/xran/ietf-interfaces.yang
new file mode 120000 (symlink)
index 0000000..c514ec4
--- /dev/null
@@ -0,0 +1 @@
+../ietf/ietf-interfaces.yang
\ No newline at end of file
diff --git a/data-model/yang/published/xran/ietf-ip.yang b/data-model/yang/published/xran/ietf-ip.yang
new file mode 120000 (symlink)
index 0000000..fde2303
--- /dev/null
@@ -0,0 +1 @@
+../ietf/ietf-ip.yang
\ No newline at end of file
diff --git a/data-model/yang/published/xran/ietf-yang-types.yang b/data-model/yang/published/xran/ietf-yang-types.yang
new file mode 120000 (symlink)
index 0000000..eb32011
--- /dev/null
@@ -0,0 +1 @@
+../ietf/ietf-yang-types.yang
\ No newline at end of file
diff --git a/data-model/yang/published/xran/org-openroadm-user-mgmt@2017-12-15.yang b/data-model/yang/published/xran/org-openroadm-user-mgmt@2017-12-15.yang
new file mode 120000 (symlink)
index 0000000..a8817b2
--- /dev/null
@@ -0,0 +1 @@
+../openroadm/org-openroadm-user-mgmt@2017-12-15.yang
\ No newline at end of file
diff --git a/data-model/yang/published/xran/xran-alarm-id.yang b/data-model/yang/published/xran/xran-alarm-id.yang
new file mode 100644 (file)
index 0000000..f87fcea
--- /dev/null
@@ -0,0 +1,178 @@
+module xran-alarm-id {
+  yang-version 1.1;
+  namespace "urn:xran:alarms:1.0";
+  prefix "xran-alarms";
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the alarm identities for the RU.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  typedef alarm-id {
+    type enumeration {
+      enum XRAN_HIGH_TEMP_ALARM {
+        value 1;
+        description "A temperature is higher than expected";
+      }
+      enum XRAN_OVERHEATING_ALARM {
+        value 2;
+        description "A temperature is dangerously high";
+      }
+      enum XRAN_AMBIENT_TEMP_ALARM {
+        value 3;
+        description "A temperature related alarm due to ambient temperature
+        value going outside the allowed ambient temperature range";
+      }
+      enum XRAN_TEMP_TOO_LOW_ALARM {
+        value 4;
+        description "A temperature related alarm due to the temperature inside
+        the unit being too low";
+      }
+      enum XRAN_BROKEN_FAN_ALARM {
+        value 5;
+        description "A broken fan";
+      }
+      enum XRAN_FAN_NOT_DETECTED_ALARM {
+        value 6;
+        description "A fan not detected";
+      }
+      enum XRAN_TUNING_ALARM {
+        value 7;
+        description "A tuning failure.";
+      }
+      enum XRAN_FILTER_ALARM {
+        value 8;
+        description "A faulty filter.";
+      }
+      enum XRAN_TX_QUALITY_ALARM {
+        value 9;
+        description "A transmission quality.";
+      }
+      enum XRAN_OVERVOLTAGE_ALARM {
+        value 10;
+        description "A RF  overvoltage protection.";
+      }
+      enum XRAN_CONFIG_ALARM {
+        value 11;
+        description "A configuration failed.";
+      }
+      enum XRAN_CRITICAL_FILE_ALARM {
+        value 12;
+        description "A Critical file not found.";
+      }
+      enum XRAN_FILE_ALARM {
+        value 13;
+        description "A non-critical file not found.";
+      }
+      enum XRAN_CORRUPT_FILE_ALARM {
+        value 14;
+        description "A corrupt configuration file.";
+      }
+      enum XRAN_OPERATION_ALARM {
+        value 15;
+        description "A unit out of order.";
+      }
+      enum XRAN_NO_IDENTITY_ALARM {
+        value 16;
+        description "A unit cannot be identified.";
+      }
+      enum XRAN_NO_EXT_SYNC_SOURCE {
+        value 17;
+        description "An RU has no external sync source.";
+      }
+      enum XRAN_SYNC_ALARM {
+        value 18;
+        description "A unit is out of synchronization.";
+      }
+      enum XRAN_TX_OUT_OF_ORDER_ALARM {
+        value 19;
+        description "A TX path is not usable.";
+      }
+      enum XRAN_RX_OUT_OF_ORDER_ALARM {
+        value 20;
+        description "A RX path is not usable.";
+      }
+      enum XRAN_OPTICAL_BER_ALARM {
+        value 21;
+        description "An increased bit error rate on the optical link";
+      }
+      enum XRAN_SELF_TEST_ALARM {
+        value 22;
+        description "A power-on self test";
+      }
+      enum XRAN_FPGA_UPDATE_ALARM {
+        value 23;
+        description "An FPGA software update";
+      }
+      enum XRAN_UNIT_BLOCKED_ALARM {
+        value 24;
+        description "A unit is blocked";
+      }
+      enum XRAN_RESET_REQUEST_ALARM {
+        value 25;
+        description "A unit requires a reset";
+      }
+      enum XRAN_POWER_SUPPLY_FAULTY {
+        value 26;
+        description "A power supply unit has a fault";
+      }
+      enum XRAN_POWER_AMPLIFIER_FAULTY {
+        value 27;
+        description "A power amplifier unit has a fault";
+      }
+      enum XRAN_C_U_PLANE_LOGICAL_CONNECTION_FAULTY {
+        value 28;
+        description "A C/U-plane logical connection has a fault";
+      }
+      enum XRAN_TRANSCEIVER_FAULT {
+        value 29;
+        description "A transceiver unit has a fault";
+      }
+      enum XRAN_INTERFACE_FAULT {
+        value 30;
+        description "An interface unit has a fault";
+      }
+    }
+    description
+      "A typedef defining an enumerated list of XRAN alarms which corresponds to
+      the fault-id in the xran management plane specification.";
+  }
+}
diff --git a/data-model/yang/published/xran/xran-ald-port.yang b/data-model/yang/published/xran/xran-ald-port.yang
new file mode 100644 (file)
index 0000000..ab3a4b9
--- /dev/null
@@ -0,0 +1,158 @@
+module xran-ald-port {
+  yang-version 1.1;
+  namespace "urn:xran:ald-port:1.0";
+  prefix "xran-ald-port";
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the input state and output configuration for
+    the xRAN Radio Unit Antenna Line Device capability.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  feature OVERCURRENT-SUPPORTED {
+    description
+      "This feature indicates that the RU supports the over-current notification
+      capability.";
+  }
+
+  container ald-ports-io {
+    description
+      "ALD port information.
+       ALD port of the RU that can be used to connect External Equipment (Antenna Line Devices).
+       Communication uses AISG over HDLC.
+       Physical connection depends on connector type offered by the port (RS-485 or antenna line)
+       Note: Single instance of ALD Port can point to more than one antenna line devices.";
+
+    leaf over-current-supported {
+      type boolean;
+      default false;
+      description
+           "Set to TRUE when the RU supports over curent notifications";
+    }
+
+    list ald-port {
+      key "name";
+      description
+        "Leaf nodes describing ALD Port";
+      leaf name {
+        type string {
+          length "1..255";
+        }
+        description
+          "A name that is unique across the RU that identifies a ald port instance.
+          This name may be used in fault management to refer to a fault source
+          or affected object";
+      }
+
+      leaf port-id {
+        type uint8;
+                   config false;
+                   mandatory true;
+
+                   description
+          "A number which identifies an ALD Port.
+          The number of the Physical ALD port connector in the module.
+          If the module supports 2 ALD Port connectors, use 0 and 1.";
+      }
+
+      leaf dc-control-support{
+        type boolean;
+        config false;
+                   mandatory true;
+
+                   description
+          "It is shown that on/off in the DC power supply is possible.
+          In case of False, power supply is always on.";
+      }
+
+      leaf dc-enabled{
+                   when "./../dc-control-support = 'true'";
+        type boolean;
+
+                   description
+          "If dc-control-support is true case, this leaf is effective.
+          In case of true, the power supply is turned on.";
+      }
+
+      leaf supported-connector{
+        type enumeration {
+                     enum ANTENNA_CONNECTOR {
+                       description
+                               "This ald port is related to antenna connector";
+                     }
+                     enum RS485_PORT {
+                       description
+                               "This ald port is related to RS485 port";
+                     }
+                   }
+        config false;
+                   mandatory true;
+
+                   description
+          "Informs about the connectors of Module which ALDs are connected to.
+          This value is depending on HW design.";
+      }
+    }
+  }
+
+  notification overcurrent-report {
+    if-feature OVERCURRENT-SUPPORTED;
+
+         description
+      "The RU is able to report overcurrent condition about Port.
+      This function is depending on HW design.
+      The notification depend on power consumption which connected ALD devices and module.";
+
+         container overload-condition {
+      description
+             "Container used in notification";
+
+           leaf-list overloaded-ports {
+        type leafref {
+          path "/ald-ports-io/ald-port/name";
+        }
+
+        description
+                     "List of overloaded ports";
+      }
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-ald.yang b/data-model/yang/published/xran/xran-ald.yang
new file mode 100644 (file)
index 0000000..4580992
--- /dev/null
@@ -0,0 +1,144 @@
+module xran-ald {
+  yang-version 1.1;
+  namespace "urn:xran:ald:1.0";
+  prefix "xran-ald";
+
+  import xran-ald-port {
+    prefix "ap";
+  }
+
+  organization "xRAN Alliance";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the module for the ald communication.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  // rpc-statements
+  rpc ald-communication {
+    description
+      "Rpc to support communication between lls-CU and Antenna Line Devices";
+
+       input {
+      leaf port-id {
+           type leafref {
+                 path "/ap:ald-ports-io/ap:ald-port/ap:port-id";
+               }
+        mandatory true;
+        description
+          "Unique ALD port identifier reported by radio";
+      }
+
+         leaf ald-req-msg {
+           type binary {
+                 length "0..1200";
+               }
+
+               description
+                 "Response message to be forwarded to ALD in type of binary-string";
+         }
+    }
+
+       output {
+      leaf port-id {
+           type leafref {
+                 path "/ap:ald-ports-io/ap:ald-port/ap:port-id";
+               }
+        mandatory true;
+        description
+          "Unique ALD port identifier reported by radio";
+      }
+
+      leaf status {
+        type enumeration {
+          enum ACCEPTED {
+                   description
+                         "Operation was accepted, message was processed towards ALD and response is provided";
+                 }
+          enum REJECTED {
+                   description
+                         "Operation was rejected by RU";
+                 }
+        }
+        mandatory true;
+
+        description
+                 "Status of RPC handling seen from RU perspective";
+      }
+
+      leaf error-message {
+        when "../status='REJECTED'";
+        type string;
+
+               description
+                 "Detailed error message when the status is rejected. E.g. wrong ALD port identifier was used in RPC received from Netconf Client";
+      }
+
+         leaf ald-resp-msg {
+           type binary {
+                 length "0..1200";
+               }
+
+               description
+                 "Response message forwarded from ALD in type of binary-string";
+         }
+
+         leaf frames-with-wrong-crc {
+           type uint32;
+
+               description
+                 "Number of frames with incorrect CRC (FCS) received from ALD - running counter";
+         }
+
+         leaf frames-without-stop-flag {
+           type uint32;
+
+               description
+                 "Number of frames without stop flag received from ALD - running counter";
+         }
+
+         leaf number-of-received-octets {
+           type uint32;
+
+               description
+                 "Number of octets received from HDLC bus - running counter";
+         }
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-beamforming.yang b/data-model/yang/published/xran/xran-beamforming.yang
new file mode 100644 (file)
index 0000000..3e6c995
--- /dev/null
@@ -0,0 +1,325 @@
+module xran-beamforming {
+  yang-version 1.1;
+  namespace "urn:xran:beamforming:1.0";
+  prefix "xran-bf";
+
+  import xran-uplane-conf {
+    prefix up;
+  }
+
+  import xran-module-cap {
+    prefix "mcap";
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the beamforming capabilitites of an RU.
+    Only RUs that support beamforming shall support this module.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  feature MODIFY-BF-CONFIG {
+    description
+      "This feature indicates that the RU supports an optional feature to
+      modify beamforming configuration information";
+  }
+
+  typedef beam-reference {
+    type leafref {
+      path "/xran-bf:beamforming-config/xran-bf:per-band-config/xran-bf:beam-information/xran-bf:beamforming-properties/xran-bf:beam-id";
+    }
+    description
+      "This type is used by data models that need to reference a beam.";
+  }
+  container beamforming-config {
+    config false;
+    description
+      "A set of configuration data for the RU's beam forming functionality";
+
+    list per-band-config {
+      key band-number;
+      description "beamforming information per band";
+      leaf band-number {
+        type leafref {
+          path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+        }
+        description
+          "band information for the beamforming information
+           related to the band number of module capabilities";
+      }
+
+      leaf-list tx-array {
+        type leafref {
+          path "/up:user-plane-configuration/up:tx-arrays/up:name";
+        }
+        description "tx arrays belonging to this band number";
+      }
+      leaf-list rx-array {
+        type leafref {
+          path "/up:user-plane-configuration/up:rx-arrays/up:name";
+        }
+        description "rx arrays belonging to this band number";
+      }
+      container static-properties {
+        description
+          "the static beamforming related information";
+        leaf beamforming-type {
+          type enumeration {
+            enum COMMON {
+              description "A common beam ID is used for entire band";
+            }
+            enum DIFFERENT {
+              description "Different beam IDs can be assigned for each PRB/RE";
+            }
+          }
+          description
+            "This value indicates supporting beamforming type in RU";
+        }
+
+        leaf number-of-beams {
+          type uint16;
+          description
+            "This value indicates the number of beam patterns RU can generate
+            and apply to the signal of each RU port (both DL and UL).
+            This value is equivalent to the maximum number of used beam IDs.";
+        }
+
+        leaf number-of-polarizations {
+          type uint8;
+          description
+            "This value indicates the number of polarizations supported at RU.";
+        }
+
+        leaf number-of-panels {
+          type uint8;
+          description
+            "This value indicates the number of antenna panels supported at RU.";
+        }
+      }
+
+      container beam-information {
+        description
+          "beam information which relates to the current beamforming configuration";
+        leaf number-of-beamforming-properties {
+          type uint16;
+          description
+            "This parameter indicates the number of beamFormingProperties entries.";
+        }
+
+        list beamforming-properties {
+          key beam-id;
+          description
+            "Array for the beamforming properties at RU.
+            These parameters can be used by the beamforming control by the NETCONF client.
+            'numberOfBeamformingProperties' indicaets the size of the array.";
+
+
+          leaf beam-id {
+            type uint16;
+            description
+              "This value indicates the beam ID whose beamforming properties are
+              described in the container.";
+          }
+
+          container beamforming-property {
+            description
+              "Structure containing single set of beamforming properties.";
+
+            leaf coarse-fine {
+              type enumeration {
+                enum COARSE-BEAM {
+                  description "the beam-id corresponds to a coarse beam";
+                }
+                enum FINE-BEAM {
+                  description "the beam-id corresponds to a fine beam";
+                }
+              }
+              description
+                "This value indicates the beam resolution.";
+            }
+
+            leaf beam-groups-id {
+              type uint16;
+              description
+                "Beams with same beamGroupsID can be transmitted simultaneously.";
+            }
+
+            leaf-list coarse-fine-beam-relation {
+              type beam-reference;
+              description
+                "list of related coarse/fine beam.";
+
+            }
+
+            leaf-list neighbor-beam {
+              type beam-reference;
+              description
+                "A list of neighbor beams which might restrict co-scheduling due
+                to interference.";
+            }
+          }
+        }
+      }
+    }
+    container ue-specific-beamforming {
+      presence
+        "Indicates that the RU supports optional Section Type '6' Fields
+        (used for sending channel information for a specific UE";
+      config false;
+      description
+        "Information related to supput by the RU of Section Type 6 for
+        signalling UE-specific channel information to the RU";
+      leaf max-number-of-ues {
+        type uint8;
+        description
+          "Indicates tha maximum number of UE -specific channel information
+          data sets supported by the RU";
+      }
+    }
+    container operational-properties {
+      if-feature MODIFY-BF-CONFIG;
+      description "properties for dynamic beam weight/attribute support";
+
+      leaf number-of-writeable-beamforming-files {
+        type uint8  {
+          range "1 .. max";
+        }
+        mandatory true;
+        description
+          "This leaf indicates the maximum number of writeable beamforming files
+          containing beamweights and/or attributes that the RU can store, taking
+          into account the maximum number of beam-IDs as defined by 3GPP
+          TS38.214 v15.x.x";
+      }
+
+      leaf update-bf-non-delete {
+        type boolean;
+        default false;
+        description
+          "When set to TRUE, indicates that an RU supports the capability
+          to apply the modified beamforming weight information by using rpc
+          activate-beamforming-weight without deletion of tx-array-carriers and
+          rx-array-carriers in advance, i.e., to a deactivated carrier";
+      }
+
+      leaf persistent-bf-files {
+        type boolean;
+        default false;
+        description
+          "When set to TRUE, indicates that the RU supports the capability
+           to store the modified beamforming weight information file in the
+           reset persistent memory";
+      }
+    }
+
+         leaf beamforming-trough-attributes-supported {
+           type boolean;
+           description
+             "Informs if beamforming can be controlled providing attributes to RU
+                   (like angles, beamwidth).";
+         }
+
+         leaf beamforming-trough-ue-channel-info-supported {
+           type boolean;
+           description
+             "Informs if beamforming can be controlled by UE information.";
+         }
+  }
+
+  rpc activate-beamforming-config {
+    if-feature MODIFY-BF-CONFIG;
+    description
+      "rpc to activate beamforming config information by indicating the file
+      stored in the folder xRAN/beam-weights in advance";
+    input {
+      leaf beamforming-config-file {
+        type string;
+        mandatory true;
+        description
+          "file name stored in xRAN/beamforming/ folder is indicated";
+      }
+      leaf band-number {
+        type leafref {
+          path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+        }
+        description
+          "The band to which the beam configuration applies";
+      }
+    }
+    output {
+      leaf status {
+        type enumeration {
+          enum ACCEPTED {
+            description "RU has accepted the beamforming weight/attribute file";
+          }
+          enum REJECTED {
+            description
+              "RU has rejected the beamforming weight/attribute file. The RU
+              should then use the default beamforming file.";
+          }
+        }
+        mandatory true;
+        description "Status of activation of beamforming config information";
+      }
+      leaf error-message {
+        when "../status='REJECTED'";
+        type string;
+        description
+          "Detailed error Message when the status is rejected, e.g.,
+           because new beam forming file is attempted to be applied to a
+           carrier which is still active, or the beam-id does not exist.";
+      }
+    }
+  }
+
+  //notification statement
+  notification beamforming-information-update {
+    leaf band-number {
+      type leafref {
+        path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+      }
+      description
+        "The band to which the beamforming information is updated";
+    }
+    description
+      "this notification indicates that the beamforming properties are updated";
+
+  }
+}
diff --git a/data-model/yang/published/xran/xran-delay-management.yang b/data-model/yang/published/xran/xran-delay-management.yang
new file mode 100644 (file)
index 0000000..e21cf93
--- /dev/null
@@ -0,0 +1,264 @@
+module xran-delay-management {
+  yang-version 1.1;
+  namespace "urn:xran:delay:1.0";
+  prefix "xran-delay";
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module covers off aspects of lls-CU to RU delay management,
+    including config data related to RU transmission and reception
+    windows.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  feature ADAPTIVE-RU-PROFILE {
+    description
+      "This feature indicates that the RU supports adaptive RU delay profile
+      based on information provided by the NETCONF client.";
+  }
+
+  container delay-management {
+    description "top level tree covering off lls-CU to RU delay management";
+
+    list bandwidth-scs-delay-state {
+      key "bandwidth subcarrier-spacing";
+      description
+        "Array of structures containing sets of parameters for delay management.";
+
+      leaf bandwidth {
+        type uint32 {
+          range "200 | 1400 | 3000 | 5000 | 10000 | 15000 | 20000 | 25000 |
+                30000 | 40000 | 50000 | 60000 | 70000 | 80000 | 90000 | 100000
+                | 200000 | 400000" ;
+        }
+        units kilohertz;
+        description
+          "transmission bandwidth configuration in units of kHz -
+          covering NBIoT through to New Radio - see 38.104";
+      }
+      leaf subcarrier-spacing {
+        type uint32 {
+          range "0 .. 240000 ";
+        }
+        units Hertz;
+        description "subcarrier spacing in Hz";
+      }
+
+      container ru-delay-profile {
+        config false;
+        description "container for RU delay parameters";
+        leaf t2a-min-up {
+          type uint32;
+          units nanoseconds;
+          mandatory true;
+          description
+            "the minimum RU data processing delay between receiving IQ data
+            message over the fronthaul interface and transmitting
+            the corresponding first IQ sample at the antenna";
+        }
+        leaf t2a-max-up {
+          type uint32;
+          units nanoseconds;
+          mandatory true;
+          description
+            "the earliest allowable time when a data packet is received before
+            the corresponding first IQ sample is transmitted at the antenna";
+        }
+        leaf t2a-min-cp-dl {
+          type uint32;
+          units nanoseconds;
+          mandatory true;
+          description
+            "the minimum RU data processing delay between receiving downlink
+            real time control plane message over the fronthaul interface and
+            transmitting the corresponding first IQ sample at the antenna";
+        }
+        leaf t2a-max-cp-dl {
+          type uint32;
+          units nanoseconds;
+          mandatory true;
+          description
+            "the earliest allowable time when a downlink real time control message
+            is received before the corresponding first IQ sample is transmitted at
+            the antenna";
+        }
+        leaf tadv-cp-dl {
+          type uint32;
+          units nanoseconds;
+          mandatory true;
+          description
+            "the time difference (advance) between the reception window for
+            downlink real time Control messages and reception window for the
+            corresponding IQ data messages.";
+        }
+        leaf ta3-min {
+          type uint32;
+          units nanoseconds;
+          mandatory true;
+          description
+            "the minimum RU data processing delay between receiving an IQ sample
+            at the antenna and transmitting the last data sample over the
+            fronthaul interface";
+        }
+        leaf ta3-max {
+          type uint32;
+          units nanoseconds;
+          mandatory true;
+          description
+            "the maximum RU data processing delay between receiving an IQ sample
+            at the antenna and transmitting the first data sample over the
+            fronthaul interface";
+        }
+        leaf t2a-min-cp-ul {
+          type uint32;
+          units nanoseconds;
+          mandatory true;
+          description
+            "the minimum RU data processing delay between receiving real time
+            up-link control plane message over the fronthaul interface and
+            recieving the first IQ sample at the antenna";
+        }
+        leaf t2a-max-cp-ul {
+          type uint32;
+          units nanoseconds;
+          mandatory true;
+          description
+            "the earliest allowable time when a real time up-link control message
+            is received before the corresponding first IQ sample is received  at
+            the antenna";
+        }
+      }
+    }
+
+    container adaptive-delay-configuration {
+      if-feature ADAPTIVE-RU-PROFILE;
+      description "container for adaptive delay parameters";
+      list bandwidth-scs-delay-state {
+        key "bandwidth subcarrier-spacing";
+        description
+          "Array of structures containing sets of parameters for delay management.";
+
+        leaf bandwidth {
+          type uint32 {
+            range "200 | 1400 | 3000 | 5000 | 10000 | 15000 | 20000 | 25000 |
+                  30000 | 40000 | 50000 | 60000 | 70000 | 80000 | 90000 | 100000
+                  | 200000 | 400000" ;
+          }
+          units kilohertz;
+          description
+            "transmission bandwidth configuration in units of kHz -
+            covering NBIoT through to New Radio - see 38.104";
+        }
+        leaf subcarrier-spacing {
+          type uint32 {
+            range "0 .. 240000 ";
+          }
+          units Hertz;
+          description "subcarrier spacing in Hz";
+        }
+        container lls-cu-delay-profile {
+          description
+            "lls-CU provided delay profile for adaptive delay configuration";
+          leaf t1a-max-up-lls-cu {
+            type uint32;
+            units nanoseconds;
+            description
+              "the earliest possible time which the lls-CU can support transmiting
+              an IQ data message prior to transmission of the corresponding IQ
+              samples at the antenna";
+          }
+          leaf tx-max-lls-cu {
+            type uint32;
+            units nanoseconds;
+            description
+              "The maximum amount of time which the lls-CU requires to transmit
+              all downlink user plane IQ data message for a symbol";
+          }
+          leaf ta4-max-lls-cu {
+            type uint32;
+            units nanoseconds;
+            description
+              "the latest possible time which the lls-CU can support receiving the
+              last uplink user plane IQ data message for a symbol.";
+          }
+          leaf rx-max-lls-cu {
+            type uint32;
+            units nanoseconds;
+            description
+              "The maximum time difference the lls-CU can support between
+              receiving the first user plane IQ data message for a symbol and
+              receiving the last user plane IQ data message for the same symbol";
+          }
+        }
+      }
+
+      container transport-delay {
+        description
+          "lls-CU provided transport-delay parameters";
+        leaf t12-min {
+          type uint32;
+          units nanoseconds;
+          description
+            "the minimum measured delay between CU port-ID and RU port-ID";
+        }
+        leaf t34-min {
+          type uint32;
+          units nanoseconds;
+          description
+            "the minimum measured delay between RU port-ID and CU port-ID";
+        }
+// additional leaf added by Samsung
+        leaf t12-max {
+          type uint32;
+          units nanoseconds;
+          description
+            "the maximum measured delay between CU port-ID and RU port-ID";
+        }
+// additional leaf added by Samsung
+        leaf t34-max {
+          type uint32;
+          units nanoseconds;
+          description
+            "the maximum measured delay between RU port-ID and CU port-ID";
+        }
+      }
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-dhcp.yang b/data-model/yang/published/xran/xran-dhcp.yang
new file mode 100644 (file)
index 0000000..8b2a94e
--- /dev/null
@@ -0,0 +1,183 @@
+module xran-dhcp {
+  yang-version 1.1;
+  namespace "urn:xran:dhcp:1.0";
+  prefix "xran-dhcp";
+
+  import ietf-interfaces {
+    prefix "if";
+  }
+
+  import ietf-inet-types {
+    prefix "inet";
+  }
+
+  import ietf-dhcpv6-types {
+    prefix dhcpv6-type;
+    revision-date 2018-01-30;
+  }
+
+  organization "xRAN Alliance";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the YANG definitions for managng the DHCP client on
+    the xRAN Radio Unit.
+
+    Copyright 2018 Members of the xRAN alliance.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  typedef netconf-client-id {
+    type union {
+      type inet:ip-address;
+      type inet:uri;
+    }
+    description "A NETCONF client identifier";
+  }
+
+  grouping netconf-clients {
+    description "the netconf clients discovered using DHCP";
+    list netconf-clients{
+      key client;
+      description "A list of IP addresses or URIs for NETCONF clients";
+      leaf client{
+        type netconf-client-id;
+        description "the client identifier";
+      }
+      leaf optional-port {
+        type inet:port-number;
+        description "an optional (non-default) port";
+      }
+    }
+  }
+
+  grouping dhcpv4-option {
+    description "DHCPv4 Configuration options";
+
+    leaf dhcp-server-identifier {
+      type  inet:ip-address;
+      description "DHCP server identifier";
+    }
+    leaf domain-name {
+      type  string;
+      description "Name of the domain";
+    }
+    leaf-list domain-name-servers {
+      type  inet:ip-address;
+      description "A list of DNS servers";
+    }
+    leaf interface-mtu {
+      type  uint32 {
+        range "0..65535";
+      }
+      description "Minimum Transmission Unit (MTU) of the interface";
+    }
+    leaf-list default-gateways{
+      type inet:ip-address;
+      description "the list of default gateways on the RUs subnet";
+    }
+    leaf vendor-specific-option {
+      type string;
+      description "The vendor specific option #43";
+    }
+    uses netconf-clients;
+  }
+
+  grouping dhcpv6-option {
+    description "DHCPv6 Configuration options";
+
+    container dhcp-server-identifier{
+      description "dhcpv6 server identifief";
+      uses dhcpv6-type:duid;
+    }
+    leaf domain-name {
+      type  string;
+      description "Name of the domain";
+    }
+    leaf-list domain-name-servers {
+      type  inet:ip-address;
+      description "A list of DNS servers";
+    }
+    uses netconf-clients;
+  }
+
+  container dhcp {
+    config false;
+    description
+      "DHCP client configuration";
+
+    list interfaces {
+      key "interface";
+      description "Interface configuration";
+
+      leaf interface {
+        type if:interface-ref;
+        description "Name of the interface";
+      }
+
+      container dhcpv4 {
+        description "DHCPv4 information";
+        leaf client-id {
+          type string;
+          description "DHCP client identifier";
+        }
+        uses dhcpv4-option;
+      }
+      container dhcpv6 {
+        description "DHCPv6 information";
+        container dhcp-client-identifier{
+          description "dhcpv6 client identifief";
+          uses dhcpv6-type:duid;
+        }
+        uses dhcpv6-option;
+      }
+    }
+
+    container m-plane-dhcp {
+      description "leafs covering off DHCP aspects of m-plane operations";
+      leaf private-enterprise-number {
+        type uint16;
+        description "the private eneteprrise number allocated to xRAN";
+      }
+      leaf vendor-class-data {
+        type string;
+        description
+          "The string used in DHCPv4 option 60 or DHCPv4 option 124 and
+          DHCPv6 option 16";
+      }
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-ecpri-delay.yang b/data-model/yang/published/xran/xran-ecpri-delay.yang
new file mode 100644 (file)
index 0000000..4929a32
--- /dev/null
@@ -0,0 +1,125 @@
+module xran-ecpri-delay {
+  yang-version 1.1;
+  namespace "urn:xran:message5:1.0";
+  prefix "xran-msg5";
+
+  import xran-processing-element {
+    prefix "element";
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module is an optional module for supporting eCPRI message 5 handling
+    used for eCPRI based delay measurements.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  container ecpri-delay-message {
+    description "top level tree covering off lls-CU to RU msg5 delay measurement";
+
+    container ru-compensation {
+      config false;
+      description
+        "leafs for ru timing compensation based on message 5 handling";
+      leaf tcv2 {
+        type uint32;
+        units nanoseconds;
+        description
+          "a compensation value to account for expected delay from packet
+          receipt at R2 to timestamping in the RU";
+      }
+      leaf tcv1 {
+        type uint32;
+        units nanoseconds;
+        description
+          "a compensation value to account for expected processing time from
+          timestamping in the RU until actual packet transmission at R3";
+      }
+    }
+
+    leaf enable-message5 {
+      type boolean;
+      default false;
+      description
+        "whether RU's eCPRI message 5 handling is enabled.";
+    }
+
+    container message5-sessions {
+      description "session information for eCPRI message 5";
+
+      list session-parameters {
+        key "session-id";
+        description "list of MSG5 session information";
+        leaf session-id {
+          type uint32;
+          description "Session ID for MSG5 responder";
+        }
+        leaf processing-element-name {
+          type leafref {
+            path "/element:processing-elements/element:ru-elements/element:name";
+          }
+          description "the name of the processing element used for MSG5";
+        }
+        container flow-state {
+          config false;
+          description "MSG5 flow state";
+          leaf responses-transmitted {
+            type uint32;
+            description
+              "The total number of eCPRI mesage 5 response messages transmitted by
+              the RU.";
+          }
+          leaf requests-transmitted {
+            type uint32;
+            description
+              "The total number of eCPRI mesage 5 request messages transmitted by
+              the RU.";
+          }
+          leaf followups-transmitted {
+            type uint32;
+            description
+              "The total number of eCPRI mesage 5 follow up messages transmitted by
+              the RU.";
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-externalio.yang b/data-model/yang/published/xran/xran-externalio.yang
new file mode 100644 (file)
index 0000000..a78a710
--- /dev/null
@@ -0,0 +1,144 @@
+module xran-externalio {
+  yang-version 1.1;
+  namespace "urn:xran:external-io:1.0";
+  prefix "xran-io";
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the input state and output configuration for
+    the xRAN Radio Unit external IO.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  container external-io {
+    description
+      "External IO information.";
+    list input {
+      key "name";
+      config false;
+      description
+        "Leaf nodes describing external line inputs";
+      leaf name {
+        type string {
+          length "1..255";
+        }
+        description
+        "A name that is unique across the RU that identifies an input port instance.
+        This name may be used in fault management to refer to a fault source
+        or affected object";
+      }
+      leaf port-in {
+        type uint8;
+        description
+          "A number which identifies an external input port.";
+      }
+
+      leaf line-in {
+        type boolean;
+        default true;
+        description
+          "Value TRUE indicates that circuit is open.
+           Value FALSE indicates that circuit is closed.
+
+           Usually when nothing is connected to the line the value is TRUE.
+           The details of external line-in implementation are HW specific.";
+      }
+    }
+
+    list output {
+      key "name";
+      description
+        "Leaf nodes describing external line outputs";
+      leaf name {
+        type string {
+          length "1..255";
+        }
+        description
+          "A name that is unique across the RU that identifies an output port instance.
+          This name may be used in fault management to refer to a fault source
+          or affected object";
+      }
+      leaf port-out {
+        type uint8;
+        mandatory true;
+        description
+          "A number which identifies an external output port.";
+      }
+
+      leaf line-out {
+        type boolean;
+        default true;
+        description
+          "Value TRUE indicates that circuit is in its natural state.
+           Value FALSE indicates that circuit is not in its natural state.";
+      }
+    }
+  }
+
+  notification external-input-change {
+    description
+      "Notification used to indicate that external line input has changed state";
+    container current-input-notification {
+      description "a container for the state of the input ports";
+      list external-input {
+        key "name";
+        description "a list of the input ports and their state";
+        leaf name{
+          type leafref{
+            path "/external-io/input/name";
+          }
+          description "the name of the ald-port";
+        }
+        leaf io-port {
+          type leafref{
+            path  "/external-io/input/port-in";
+          }
+          description "the external input port";
+        }
+        leaf line-in {
+          type leafref{
+            path  "/external-io/input/line-in";
+          }
+          description "the state of the external input port";
+        }
+      }
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-fan.yang b/data-model/yang/published/xran/xran-fan.yang
new file mode 100644 (file)
index 0000000..251f32f
--- /dev/null
@@ -0,0 +1,110 @@
+module xran-fan {
+  yang-version 1.1;
+  namespace "urn:xran:fan:1.0";
+  prefix "xran-fan";
+
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the state of the RU's fans.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  typedef percent {
+   type uint16 {
+     range "0 .. 100";
+   }
+   description "Percentage";
+  }
+
+  container fan-tray {
+    config false;
+    description "top level tree covering off operational state of the fans";
+    list fan-state {
+      key name;
+      description "a list of the fans based on their unique names";
+      leaf name {
+        type string {
+          length "1..255";
+        }
+        description
+          "A name that is unique across the RU that identifies a fan instance.
+          This name may be used in fault management to refer to a fault source
+          or affected object";
+      }
+      leaf fan-location {
+        type uint8;
+        description "A number indicating the location of the FAN in the fan tray";
+      }
+      leaf present-and-operating {
+        type boolean;
+        mandatory true;
+        description
+          "Indicates if a fan is present and operating in the location";
+      }
+      leaf vendor-code {
+        when "../present-and-operating = 'true'";
+        type uint8 {
+          range "0..7";
+        }
+        description
+          "Indicates fan vendor code. Fan vendors are detected with ID pins
+          using 3 bits digital inputs.
+
+          Optional node included when the NETCONF Server has determined
+          the fan vendor code.";
+      }
+      leaf fan-speed {
+        when "../present-and-operating = 'true'";
+        type percent;
+        description
+          "Measured fan speed. Expressed as percentage of max fan speed.
+
+          Optional node included when the fan speed can be measured.";
+      }
+      leaf target-speed {
+        when "../present-and-operating = 'true'";
+        type uint16;
+        units rpm;
+        description "the target speed of the fan";
+      }
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-file-management.yang b/data-model/yang/published/xran/xran-file-management.yang
new file mode 100644 (file)
index 0000000..c63ffd0
--- /dev/null
@@ -0,0 +1,174 @@
+module xran-file-management {
+  yang-version 1.1;
+  namespace "urn:xran:file-management:1.0";
+  prefix "xran-file-mgmt";
+
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the configuration and operations for handling upload.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  grouping file-path-grouping {
+    description "Complete logical path of the file on the RU to upload/download
+       (no wildcard is allowed) ex : /xRAN/log/syslog.1";
+
+    leaf local-logical-file-path {
+      type string;
+      mandatory true;
+         description "Local logical file path";
+    }
+
+    leaf remote-file-path {
+      type string;
+      mandatory true;
+         description "URI specifying the remote-file-path on lls-CU/NMS.
+      Format:sftp://user[:password]@host[:port]/path";
+    }
+  }
+
+  grouping output-status-grouping {
+    description "Status grouping";
+
+    leaf status {
+      type enumeration {
+        enum SUCCESS {
+                       description "";}
+        enum FAILURE {
+                       description "";}
+      }
+      description "Operation status";
+         }
+
+    leaf reject-reason {
+      when "../status = 'FAILURE'";
+         type string;
+         description "";
+       }
+  }
+
+  grouping credential-information{
+    description "Type of authentication to use for SFTP upload or download.";
+    choice credentials {
+      case password {
+        container password {
+          presence true;
+          leaf password {
+            type string;
+            mandatory true;
+            description
+              "password needed for authentication.";
+          }
+          description
+          "password authentication method in use";
+        }
+      }
+      case certificate {
+        container certificate {
+          presence true;
+          description
+            "certificate authentication method in use";
+        }
+      }
+        description "";
+    }
+  }
+
+  rpc file-upload {
+    description "File upload over SFTP from RU to NETCONF client";
+    input {
+      uses file-path-grouping;
+      uses credential-information;
+    }
+    output {
+      uses output-status-grouping;
+    }
+  }
+
+  rpc retrieve-file-list {
+    description "List all the files in the logical xRAN unit (* is allowed as wild-card).";
+    input {
+      leaf logical-path {
+        type string;
+        mandatory true;
+               description "xRAN unit of which the files are to be listed.
+        ex :  xRAN/log, xRAN/PM, xRAN/transceiver";
+      }
+      leaf file-name-filter {
+        type string;
+               description "Filter which are to be applied on the result list of file names (* is allowed as wild-card).";
+      }
+
+    }
+    output {
+      uses output-status-grouping;
+      leaf-list file-list {
+        when "../status = 'SUCCESS'";
+        type string;
+               description "List of files in the xRAN unit with the filter applied.";
+      }
+    }
+  }
+
+  notification file-upload-notification {
+    uses file-path-grouping;
+    uses output-status-grouping;
+       description "";
+  }
+
+  rpc file-download {
+    description
+      "Management plane triggered to generate the download file of RU.";
+    input {
+      uses file-path-grouping;
+      uses credential-information;
+    }
+    output {
+      uses output-status-grouping;
+    }
+  }
+
+  notification file-download-event {
+    uses file-path-grouping;
+    uses output-status-grouping;
+       description "";
+  }
+}
diff --git a/data-model/yang/published/xran/xran-fm.yang b/data-model/yang/published/xran/xran-fm.yang
new file mode 100644 (file)
index 0000000..9e034e9
--- /dev/null
@@ -0,0 +1,165 @@
+module xran-fm {
+  yang-version 1.1;
+  namespace "urn:xran:fm:1.0";
+  prefix "xran-fm";
+
+  import ietf-yang-types {
+    prefix yang;
+    revision-date 2013-07-15;
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines alarm reporting mechanism.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  grouping alarm {
+    description
+      "Gropuping which can uniquely identify alarm";
+
+    leaf fault-id {
+      type uint16;
+      mandatory true;
+
+      description
+        "Fault specific Id that identifies the fault.";
+    }
+
+    leaf fault-source {
+      type string {
+        length "1..255";
+      }
+      mandatory true;
+
+      description
+        "Represents the Object or source that is suspected to be faulty.";
+    }
+
+    list affected-objects {
+      leaf name {
+        type string {
+          length "1..255";
+        }
+        mandatory true;
+
+        description
+          "Represents the Object or source that is suspected to be affected by this fault";
+      }
+      min-elements 1;
+      max-elements 100;
+
+      description
+        "List of affected-objects";
+    }
+
+    leaf fault-severity {
+      type enumeration {
+        enum CRITICAL {
+          description
+            "Critical alarm means that this device is not able to perform any further service";
+        }
+        enum MAJOR {
+          description
+            "Major alarm appeared on the device";
+        }
+        enum MINOR {
+          description
+            "Minor alarm appeared on the device";
+        }
+        enum WARNING {
+          description
+            "Warning is being reported by the device";
+        }
+      }
+      mandatory true;
+
+      description
+        "Fault severity defines the severity level of the fault. A notification, whose fault severity has the value 'warning',
+        is a special type of an alarm notification. For these alarm notifications,
+        the Master Agent does not expect to receive a clear alarm notification.";
+    }
+
+    leaf is-cleared {
+      type boolean;
+      mandatory true;
+
+      description
+        "Fault state determines the type of the event. Not used if faultSeverity is WARNING.";
+    }
+
+    leaf fault-text {
+      type string {
+        length "0..255";
+      }
+
+      description
+        "Textual description of the fault.";
+    }
+
+    leaf event-time {
+      type yang:date-and-time;
+      mandatory true;
+
+      description
+        "Timestamp to indicate the time when the fault is detected/cleared.";
+    }
+  }
+
+  container active-alarm-list {
+    list active-alarms {
+      uses alarm;
+
+      description
+        "List of currenty active alarms";
+    }
+    config false;
+
+    description
+      "List of currently active alarms. An alarm is removed from this table when the state transitions to clear.";
+  }
+
+  notification alarm-notif {
+    uses alarm;
+
+    description
+      "Notification sent on initial alarm creation, as well as any time the alarm changes state, including clear";
+  }
+}
diff --git a/data-model/yang/published/xran/xran-hardware.yang b/data-model/yang/published/xran/xran-hardware.yang
new file mode 100644 (file)
index 0000000..7788cb1
--- /dev/null
@@ -0,0 +1,211 @@
+module xran-hardware {
+  yang-version 1.1;
+  namespace "urn:xran:hardware:1.0";
+  prefix "xran-hw";
+
+  import ietf-hardware {
+    prefix hw;
+  }
+  import iana-hardware {
+    prefix ianahw;
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the YANG definitions for managng the xRAN Radio Unit
+     hardware.
+
+     Copyright 2018 the xRAN Forum.
+
+     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+     ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+     LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+     CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+     SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+     INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+     POSSIBILITY OF SUCH DAMAGE.
+
+     Redistribution and use in source and binary forms, with or without
+     modification, are permitted provided that the following conditions are met:
+
+     * Redistributions of source code must retain the above copyright notice,
+     this list of conditions and the above disclaimer.
+     * Redistributions in binary form must reproduce the above copyright notice,
+     this list of conditions and the above disclaimer in the documentation
+     and/or other materials provided with the distribution.
+     * Neither the Members of the xRAN Forum nor the names of its
+     contributors may be used to endorse or promote products derived from
+     this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  feature ENERGYSAVING {
+    description
+      "Indicates that the Radio Unit supports energy saving state.";
+  }
+
+  // identity statements
+  identity XRAN-RADIO {
+    base ianahw:module;
+    description
+      "Module used as it represents a self-contained sub-system
+      used in /hw:/hardware/hw:component/hw:class";
+  }
+
+  // typedef statements
+  typedef energysaving-state {
+    type enumeration {
+      enum UNKNOWN {
+        description "The Radio Unit is unable to report energy saving state.";
+      }
+      enum SLEEPING {
+        description
+          "The Radio Unit is in a sleep state. The NETCONF management plane
+           connection is functioning. Other functions and hardware which are
+           not needed for management plane may be in energy saving mode.";
+      }
+      enum AWAKE {
+        description
+          "The Radio Unit is not in an energy saving state.";
+      }
+    }
+    description
+      "new typedef since ietf-hardware only covers pwer-state
+      for redundancy purposes and not power saving operations.";
+  }
+
+  typedef availability-type {
+    type enumeration {
+      enum UNKNOWN {
+        description "The Radio Unit is unable to report its availability state.";
+      }
+      enum NORMAL {
+        description
+          "The RU is functioning correctly.";
+      }
+      enum DEGRADED {
+        description
+          "The RU may be reporting a major alarm or may be reporting a critical
+           alarm that is only impacting one or more subcomponent, but where the
+           RU's implementation permit it to continue operation (server traffic)
+           in a degraded state.
+
+           Used for example, when the RU has M identical sub-components and
+           when a critical alarm is imapcting only N subcomponents, where N<M.";
+      }
+      enum FAULTY {
+        description
+          "The (sub-)components impacted by the critical alarm(s) impact the
+          ability of the RU to continue operation (serve traffic).";
+      }
+    }
+    description
+      "RU’s availability-state is derived by matching active faults
+       and their impact to module’s operation and enables an RU to indicate
+       that even though it may have one or more critical alarms, it can continue
+       to serve traffic.";
+  }
+
+  deviation /hw:hardware/hw:component/hw:name {
+    description
+      "Deviations for oryginal ietf-hardware/component/name to check if its pattern
+      and length mathes xRAN limitation
+
+      A name that is unique across the RU that identifies the RU instance.
+      This name may be used in fault management to refer to a fault source or
+      affected object corresponding to the generic RU.";
+
+      deviate add {
+      must "re-match(current(),'[a-zA-Z0-9]{1,255}')" {
+        error-message "Name must match pattern and length.";
+         }
+    }
+  }
+
+  augment "/hw:hardware/hw:component" {
+    when "derived-from-or-self(hw:class, 'XRAN-RADIO')";
+    description "New xRAN parameters for xran hardware";
+    container label-content {
+      config false;
+      description
+        "Which set of attributes are printed on the Radio Unit's label";
+      leaf model-name {
+        type boolean;
+        description
+          "indicates whether model-name is included on the RU's label";
+      }
+      leaf serial-number {
+        type boolean;
+        description
+          "indicates whether serial number is included on the RU's label";
+      }
+      // add in other leafs according to manufacturer feedback on labels
+    }
+    leaf product-code {
+      type string;
+      config false;
+      description
+        "xRAN term that is distinct from model-name in ietf-hardware.";
+    }
+  }
+
+  augment "/hw:hardware/hw:component/hw:state"  {
+    when "derived-from-or-self(../hw:class, 'XRAN-RADIO')";
+    description
+      "new xRAN defined state";
+    leaf power-state {
+      if-feature "ENERGYSAVING";
+      type energysaving-state;
+      description
+        "The current power saving state for this component.
+        Note - hw:/hardware/compnent/state/standby-state defined in RFC 4268 is
+        used for redundancy purposes and not power saving operations.";
+    }
+    leaf availability-state {
+      type availability-type;
+      config false;
+      description
+        "RU’s availability-state is derived by matching active faults
+         and their impact to module’s operation and enables an RU to indicate
+         that even though it may have one or more critical alarms, it can continue
+         to serve traffic.";
+    }
+  }
+
+  augment "/hw:hardware-state-oper-enabled"  {
+    description "new availability state";
+    leaf availability-state {
+      type leafref {
+        path "/hw:hardware/hw:component/hw:state/xran-hw:availability-state";
+      }
+      description
+        "The availability-state of the RU.";
+    }
+  }
+
+  augment "/hw:hardware-state-oper-disabled"  {
+    description "new availability state";
+    leaf availability-state {
+      type leafref {
+        path "/hw:hardware/hw:component/hw:state/xran-hw:availability-state";
+      }
+      description
+        "The availability-state of the RU.";
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-interfaces.yang b/data-model/yang/published/xran/xran-interfaces.yang
new file mode 100644 (file)
index 0000000..a4a0aaa
--- /dev/null
@@ -0,0 +1,385 @@
+module xran-interfaces {
+  yang-version 1.1;
+  namespace "urn:xran:interfaces:1.0";
+  prefix "xran-int";
+
+
+  import ietf-inet-types {
+    prefix "inet";
+  }
+
+  import iana-if-type {
+    prefix "ianaift";
+  }
+
+  import ietf-interfaces {
+    prefix "if";
+  }
+
+  import ietf-ip {
+    prefix "ip";
+  }
+
+  import ietf-hardware {
+    prefix "hw";
+  }
+
+  import ietf-yang-types {
+    prefix "yang";
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the YANG definitions for managng the xRAN Radio Unit
+     interfaces.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  identity XRAN-INTERFACE-TYPE {
+    base if:interface-type;
+    description
+      "This identity is used as a base for all interface types
+       defined by xRAN.";
+  }
+
+  identity ALIASMAC-INTERFACE {
+    base XRAN-INTERFACE-TYPE;
+    description
+      "Identity type for alias MAC based CU plane interface,
+      whwere multiple MAC addresses are used on the same Ethernet interface. ";
+  }
+
+  identity ETH-INTERFACE {
+    base XRAN-INTERFACE-TYPE;
+    description
+      "identity type for ethernet plus vlan based CU plane interface. ";
+  }
+
+  identity UDPIP-INTERFACE {
+    base XRAN-INTERFACE-TYPE;
+    description
+      "identity type for UDP/IP based CU plane interface. ";
+  }
+
+  feature UDPIP-BASED-CU-PLANE {
+    description
+      "This feature indicates that the RU supports the UDP/IP based transport
+      for the CU plane.";
+  }
+
+  feature ALIASMAC-BASED-CU-PLANE {
+    description
+      "This feature indicates that the RU supports the alias MAC address
+       based transport for the CU plane.";
+  }
+
+
+  typedef pcp {
+    type uint8 {
+      range "0..7";
+    }
+    description
+      "Priority Code Point. PCP is a 3-bit field that refers to the
+      class of service applied to a VLAN tagged frame.  The
+      field specifies a priority value between 0 and 7, these values
+      can be used by quality of service (QoS) to prioritize
+      different classes of traffic.";
+    reference
+     "IEEE 802.1Q-2014: Virtual Bridged Local Area Networks";
+  }
+
+  grouping cos-marking {
+    description
+      "Configuration data for CU Plane ethernet CoS marking";
+    leaf u-plane-marking {
+      type pcp;
+      default 7;
+      description "7 represents highest priority for u-plane marking";
+    }
+    leaf c-plane-marking {
+      type pcp;
+      default 7;
+      description "7 represents highest priority for c-plane marking";
+    }
+    leaf m-plane-marking {
+      type pcp;
+      default 2;
+      description "2 represents highest excellent effort for m-plane marking";
+    }
+       leaf s-plane-marking {
+      type pcp;
+      default 7;
+      description "7 represents highest priority for s-plane marking";
+       }
+       leaf other-marking {
+      type pcp;
+      default 1;
+      description "1 represents best effort for other marking";
+       }
+  }
+
+  grouping xran-dscp-marking {
+    description
+      "Configuration data for CU Plane DSCP CoS marking";
+    leaf u-plane-marking {
+      type inet:dscp;
+      default 46;
+      description "46 represents expedited forwarding";
+    }
+    leaf c-plane-marking {
+      type inet:dscp;
+      default 46;
+      description "46 represents expedited forwarding";
+    }
+    leaf m-plane-marking {
+      type inet:dscp;
+      default 18;
+      description "18 represents AF21 or 'immediate traffic'";
+    }
+       leaf s-plane-marking {
+      type inet:dscp;
+      default 46;
+      description "46 represents expedited forwarding";
+       }
+       leaf other-marking {
+      type inet:dscp;
+      default 0;
+      description "0 represents best effort forwarding";
+       }
+  }
+
+
+  augment '/if:interfaces/if:interface' {
+    when "derived-from-or-self(if:type, 'xran-int:XRAN-INTERFACE-TYPE')";
+    description
+      "Applicable for xran interfaces which use references to a port
+      component.";
+
+    container port-reference {
+      description
+        "a port reference used by other xRAN modules";
+      leaf xran-port-name {
+        type leafref {
+          path '/hw:hardware/hw:component/hw:name';
+        }
+        description
+          "xRAN interfaces use a reference to a physical port component";
+      }
+      leaf xran-port-number {
+        type uint8;
+        description
+          "A number allocated by the server which identifies a port.
+          Port number value is 0 to N-1 where N is number of ports
+          in the device.
+
+          This value is fixed for the lifetime of the RU, i.e., cannot be
+          changed suring RU reboots.";
+      }
+    }
+    leaf last-cleared {
+      type yang:date-and-time;
+      config false;
+      description
+        "Timestamp of the last time the interface counters were
+        cleared.";
+    }
+  }
+
+  // Augmentation for lower layer definition
+
+  augment '/if:interfaces/if:interface' {
+    when "derived-from-or-self(if:type, 'xran-int:XRAN-INTERFACE-TYPE') and
+          not(if:lower-layer-if)" {
+      description
+        "Data specific for an xRAN bottom level interface, i.e.,
+        use relative path to check the current interface does not have any
+        lower-layer-if defined";
+    }
+    description
+      "Augments interfaces/interface with xRAN information .";
+    container physical-int {
+      description "container for physical interface";
+      leaf maximum-speed {
+        type enumeration {
+          enum 1000BASE {
+            description "1GbE";
+          }
+          enum 2.5GBASE {
+            description "2.5GbE";
+          }
+          enum 5GBASE{
+            description "5GbE";
+          }
+          enum 10GBASE{
+            description "10GbE";
+          }
+          enum 25GBASE{
+            description "25GbE";
+          }
+          enum 40GBASE{
+            description "40GbE";
+          }
+          enum 50GBASE{
+            description "50GbE";
+          }
+          enum 100GBASE{
+            description "100GbE";
+          }
+        }
+        config false;
+        description "maximum speed of physical interface";
+      }
+      leaf cable-type {
+        type enumeration {
+            enum TWISTED-PAIR{
+              description "twisted pair";
+            }
+            enum FIBER-OPTIC{
+              description "fiber optic";
+            }
+        }
+        config false;
+        description "type of cable";
+      }
+    }
+  }
+
+// Augmentation for basic Ethernet leafs
+
+  augment "/if:interfaces/if:interface" {
+    when "derived-from-or-self(if:type, 'ianaift:ethernetCsmacd') or
+          derived-from-or-self(if:type, 'ianaift:l2vlan')" {
+      description "Applies to Ethernet interfaces";
+    }
+    description
+      "Augment the interface model with parameters for all
+      Ethernet-like interfaces
+
+      Contains parameters for interfaces that use Ethernet framing
+      and expose an Ethernet MAC layer";
+    leaf l2-mtu {
+      type uint16 {
+        range "64 .. 65535";
+      }
+      units bytes;
+      default 1500;
+      description
+        "The maximum size of layer 2 frames that may be transmitted
+        or received on the interface (excluding any FCS overhead).
+        For Ethernet interfaces it also excludes the
+        4-8 byte overhead of any known (i.e. explicitly matched by
+        a child sub-interface) 801.1Q VLAN tags.";
+    }
+    leaf mac-address {
+      type yang:mac-address;
+      description
+        "The MAC address of the interface.";
+    }
+    leaf bia-mac-address {
+      type yang:mac-address;
+      config false;
+      description
+        "The 'burnt-in' MAC address.  I.e the default MAC address
+        assigned to the interface if no MAC address has been
+        explicitly configured on it.";
+    }
+    leaf-list alias-macs {
+      when "derived-from-or-self(../if:type, 'xran-int:ALIASMAC-INTERFACE')";
+      if-feature ALIASMAC-BASED-CU-PLANE;
+      type yang:mac-address;
+      config false;
+      description
+        "Augments interfaces with range of alias MAC addresses.";
+    }
+    leaf vlan-tagging {
+      type boolean;
+      default true;
+      description
+        "Indicates if VLAN tagging is used.
+        Default true is used to enable an RU to auonomously discover that it is
+        connected to a trunk port.";
+    }
+    uses cos-marking;
+  }
+
+// augmentation for VLAN definition
+
+  augment "/if:interfaces/if:interface" {
+    when "derived-from-or-self (if:type, 'ianaift:l2vlan')";
+    description "augments for VLAN definition";
+    leaf base-interface {
+      type if:interface-ref;
+      must "/if:interfaces/if:interface[if:name = current()]"
+            + "/xran-int:vlan-tagging = 'true'" {
+        description
+          "The base interface must have VLAN tagging enabled.";
+      }
+      description
+        "The base interface for the VLAN sub-interafce.";
+    }
+    leaf vlan-id {
+      type uint16 {
+        range "1..4094";
+      }
+      description
+        "The VLAN-ID.";
+    }
+  }
+
+  // Augmention to ietf-ip covering DSCP
+
+  augment "/if:interfaces/if:interface/ip:ipv4" {
+    when "derived-from-or-self(../if:type, 'xran-int:UDPIP-INTERFACE')";
+    if-feature UDPIP-BASED-CU-PLANE;
+    description "augments for IPv4 based transport";
+    uses xran-dscp-marking;
+  }
+  augment "/if:interfaces/if:interface/ip:ipv6" {
+    when "derived-from-or-self(../if:type, 'xran-int:UDPIP-INTERFACE')";
+    if-feature UDPIP-BASED-CU-PLANE;
+    description "augments for IPv6 based transport";
+    uses xran-dscp-marking;
+  }
+
+  rpc reset-interface-counters {
+    description
+      "Management plane triggered restart of the interface counters.";
+  }
+}
diff --git a/data-model/yang/published/xran/xran-lbm.yang b/data-model/yang/published/xran/xran-lbm.yang
new file mode 100644 (file)
index 0000000..65ea7fb
--- /dev/null
@@ -0,0 +1,269 @@
+module xran-lbm {\r
+  yang-version 1.1;\r
+  namespace "urn:xran:lbm:1.0";\r
+  prefix "xran-lbm";\r
+\r
+  import ietf-yang-types {\r
+    prefix yang;\r
+    revision-date 2013-07-15;\r
+  }\r
+\r
+  organization "xRAN Forum";\r
+\r
+  contact\r
+    "www.xran.org";\r
+\r
+  description\r
+    "This module defines the module capabilities for\r
+    the xRAN Radio loop-back protocol (IEEE 802.1ag).\r
+    It is derived from MEF-38 (Service OAM Fault Management YANG Modules, April 2012)\r
+\r
+    Copyright 2018 the xRAN Forum.\r
+\r
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+    POSSIBILITY OF SUCH DAMAGE.\r
+\r
+    Redistribution and use in source and binary forms, with or without\r
+    modification, are permitted provided that the following conditions are met:\r
+\r
+    * Redistributions of source code must retain the above copyright notice,\r
+    this list of conditions and the above disclaimer.\r
+    * Redistributions in binary form must reproduce the above copyright notice,\r
+    this list of conditions and the above disclaimer in the documentation\r
+    and/or other materials provided with the distribution.\r
+    * Neither the Members of the xRAN Forum nor the names of its\r
+    contributors may be used to endorse or promote products derived from\r
+    this software without specific prior written permission.";\r
+\r
+  revision "2018-07-20" {\r
+    description\r
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.\r
+\r
+      This version of the model supports v01.00 of the corrsponding xRAN\r
+      M-Plane Specification.";\r
+    reference "XRAN-FH.MP.0-v01.00";\r
+  }\r
+\r
+  typedef priority-type {\r
+    type uint32 {\r
+      range "0..7";\r
+    }\r
+    description\r
+      "A 3 bit priority value to be used in the VLAN tag, if present\r
+       in the transmitted frame.";\r
+    reference "[802.1q] 12.14.7.3.2:e";\r
+  }\r
+\r
+\r
+  typedef mep-id-type {\r
+    type uint16 {\r
+      range "1..8191";\r
+    }\r
+    description\r
+      "Maintenance association End Point Identifier (MEPID): A small integer,\r
+       unique over a given Maintenance Association, identifying a\r
+       specific MEP.";\r
+    reference "[802.1q] 3.19 and 19.2.1";\r
+  }\r
+  typedef vlan-id-type {\r
+    type uint16 {\r
+      range "1..4094";\r
+    }\r
+    description\r
+      "The VLAN-ID that uniquely identifies a VLAN.  This is the 12-bit VLAN-ID\r
+       used in the VLAN Tag header.";\r
+    reference "[802.1q] 9.6";\r
+  }\r
+\r
+  typedef md-level-type {\r
+    type int32 {\r
+      range "0..7";\r
+    }\r
+    description\r
+      "Maintenance Domain Level (MD Level) identifier.  Higher numbers\r
+       correspond to higher Maintenance Domains, those with the greatest\r
+       physical reach, with the highest values for customers' CFM PDUs.\r
+       Lower numbers correspond to lower Maintenance Domains, those with\r
+       more limited physical reach, with the lowest values for CFM PDUs\r
+       protecting single bridges or physical links.";\r
+    reference "[802.1q] 18.3, 21.4.1, IEEE8021-CFM-MIB.Dot1agCfmMDLevel";\r
+  }\r
+\r
+  typedef lbm-transaction-id-type {\r
+    type uint32;\r
+    description\r
+      "A loopback transaction identifier";\r
+    reference "[802.1q] 21.7.3";\r
+  }\r
+\r
+  list maintenance-domain {\r
+    key "id";\r
+    description\r
+      "A Maintenance Domain managed object is required in order to create an MA\r
+       with a MAID that includes that Maintenance Domain’s Name. From\r
+       this Maintenance Domain managed object, all Maintenance\r
+       Association managed objects associated with that Maintenance\r
+       Domain managed object can be accessed, and thus controlled.";\r
+    reference "[802.1q] 12.14.5";\r
+    leaf id {\r
+      type string;\r
+      description\r
+        "A unique identifier of a Maintenance Domain";\r
+      reference "[802.1q] 12.14.5";\r
+    }\r
+\r
+    leaf name {\r
+      type string;\r
+      description\r
+        "The value for the Maintenance Domain Name. Only the name-type\r
+               'character-string' is supported";\r
+      reference "[802.1q] 21.6.5.1 (Table 21-19), 12.14.5.3.2:a";\r
+    }\r
+\r
+    leaf md-level {\r
+      type md-level-type;\r
+      default 0;\r
+      description\r
+        "Integer identifying the Maintenance Domain Level (MD Level).  Higher\r
+         numbers correspond to higher Maintenance Domains, those with the\r
+         greatest physical reach, with the highest values for customers'\r
+         CFM PDUs.  Lower numbers correspond to lower Maintenance\r
+         Domains, those with more limited physical reach, with the lowest\r
+         values for CFM PDUs protecting single bridges or physical links.";\r
+      reference "[802.1q] 12.14.5.1.3:b";\r
+    }\r
+\r
+    list maintenance-association {\r
+      key "id";\r
+      description\r
+        "This list represents Maintenance Entity Groups (Y.1731) or\r
+         Maintenance Associations (802.1ag). MEGs/MAs are sets of\r
+         MEPs, each configured to the same service inside a common\r
+         OAM domain.";\r
+      leaf id {\r
+        type string;\r
+        description\r
+          "A unique identifier of a Maintenance Association";\r
+        reference "[802.1q] 12.14.6";\r
+      }\r
+      leaf name {\r
+       type string;\r
+\r
+        description\r
+          "The value for the Maintenance Association Name. Only the name-type\r
+               'character-string' is supported";\r
+        reference "[802.1q] 12.14.5.3.2:b, Table 21-20";\r
+      }\r
+\r
+      list component-list {\r
+        key "component-id";\r
+        description\r
+          "A list of components each of which can be managed in a manner\r
+           essentially equivalent to an 802.1Q bridge.";\r
+        reference "[802.1q] IEEE8021-CFM-V2-MIB.ieee8021CfmMaCompTable";\r
+        leaf component-id {\r
+          type uint32;\r
+          description\r
+            "The bridge component within the system to which the information\r
+             in this maintenance-association applies";\r
+          reference "[802.1q] IEEE8021-CFM-V2-MIB.ieee8021CfmMaComponentId";\r
+        }\r
+       leaf name {\r
+         type string;\r
+\r
+         description\r
+           "The value for the Maintenance Association Name. Only the name-type\r
+               'character-string' is supported";\r
+         reference "[802.1q] 12.14.5.3.2:b, Table 21-20";\r
+       }\r
+\r
+       leaf-list vid {\r
+          type vlan-id-type;\r
+          min-elements 1;\r
+          ordered-by user;\r
+          description\r
+            "The VID(s) monitored by this MA, or 0, if the MA is not attached to any\r
+             VID. The first VID returned is the MA's Primary VID";\r
+          reference "[802.1q] 12.14.5.3.2:b";\r
+        }\r
+\r
+       leaf-list remote-meps {\r
+         type mep-id-type;\r
+         description\r
+           "A list of the MEPIDs of the MEPs in the MA.";\r
+         reference "[802.1q] 12.14.6.1.3:g";\r
+       }\r
+       list maintenance-association-end-point {\r
+         key "mep-identifier";\r
+         description\r
+           "The list of Maintenance association End Points in a specific Maintance\r
+           Association.";\r
+         leaf mep-identifier {\r
+           type mep-id-type;\r
+           description\r
+             "Integer that is unique among all the MEPs in the same MA. Other\r
+             definition is: a small integer, unique over a given\r
+             Maintenance Association, identifying a specific Maintenance\r
+             association End Point.";\r
+           reference "[802.1q] 12.14.6.3.2:b";\r
+         }\r
+         leaf interface {\r
+           type string;\r
+           mandatory true;\r
+           description\r
+             "An interface, either a Bridge Port or an aggregated IEEE 802.3 port\r
+             within a Bridge Port, to which the MEP is attached. Each interface in\r
+             the system is uniquely identified by an interface-name. The structure\r
+             and content of the name is outside the scope of this specification.";\r
+           reference "[802.1q] 12.14.7.1.3:b";\r
+         }\r
+         leaf primary-vid {\r
+           type vlan-id-type;\r
+           mandatory true;\r
+           description\r
+             "The Primary VID of the MEP. The value 0 indicates that either the\r
+             Primary VID is that of the MEP's MA or that the MEP's MA is\r
+             associated with no VID";\r
+           reference "[802.1q] 12.14.7.1.3:d";\r
+         }\r
+         leaf administrative-state {\r
+           type boolean;\r
+           mandatory true;\r
+           description\r
+             "The administrative state of the MEP";\r
+           reference "[802.1q] 12.14.7.1.3:e";\r
+         }\r
+         leaf mac-address {\r
+           type yang:mac-address;\r
+           config false;\r
+           description\r
+             "The MAC address of the MEP";\r
+           reference "[802.1q] 12.14.7.1.3:i";\r
+         }\r
+         container loopback {\r
+           config false;\r
+           description\r
+             "Data definitions related to the Loopback function.";\r
+           leaf replies-transmitted {\r
+             type yang:counter32;\r
+             config false;\r
+             mandatory true;\r
+             description\r
+               "The total number of LBRs transmitted.";\r
+             reference "[802.1q] 12.14.7.1.3:ad";\r
+           }\r
+         }\r
+       }\r
+      }\r
+    }\r
+  }\r
+}\r
diff --git a/data-model/yang/published/xran/xran-module-cap.yang b/data-model/yang/published/xran/xran-module-cap.yang
new file mode 100644 (file)
index 0000000..21965cb
--- /dev/null
@@ -0,0 +1,533 @@
+module xran-module-cap {
+  yang-version 1.1;
+  namespace "urn:xran:module-cap:1.0";
+  prefix "xran-module-cap";
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the module capabilities for
+    the xRAN Radio Unit.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  grouping compression-method-grouping {
+    description
+         "Grouping for compression method.";
+
+    leaf compression-method {
+      type enumeration {
+        enum BLOCK_FLOATING_POINT {
+          description
+            "Block floating point compression and decompression will be used";
+        }
+
+        enum BLOCK_SCALING {
+          description
+            "Block scaling compression and decompresion will be used";
+        }
+
+        enum U_LAW {
+          description
+            "u-Law compression and decompresion method will be used";
+        }
+
+        enum BEAMSPACE {
+          description
+            "Beamspace compression and decompression will be used";
+        }
+
+        enum MODULATION {
+          description
+            "Modulation compression and decompression will be used";
+        }
+      }
+         description
+           "Compresion method which can be supported by the RU";
+    }
+  }
+
+  container module-capability {
+    config false;
+    description
+      "module capability object responsible for providing module capability.";
+
+    container ru-capabilities {
+      description
+        "Structure representing set of capabilities.";
+
+      leaf ru-supported-category {
+        type enumeration {
+          enum CAT_A {
+            description
+              "Informs that precoding is supported in lls-CU";
+          }
+          enum CAT_B {
+            description
+              "Informs that precoding is supported in RU";
+          }
+        }
+
+        description
+          "Informs about which category RU supports";
+      }
+
+      leaf number-of-ru-ports {
+        type uint8;
+        description
+          "This value indicates the maximum number of simultaneous beams per RU.
+          This value is derived by the products of “numberOfPolarizations” and “numberOfPanels”
+          and “the maximum number of simultaneous beams per sub-carrier”.";
+      }
+
+      leaf number-of-antenna-ports {
+        type uint8;
+        description
+          "This value indicates the number of antenna ports supported at RU.
+          This parameter is used by the precoding control between lls-CU and UE.
+          This value conforms to 3GPP TS38.214, Section 5.2. Value 0 means “unused”.";
+      }
+
+      leaf max-power-per-pa-antenna {
+        type decimal64{
+          fraction-digits 4;
+        }
+        description
+          "This value indicates Maximum Power per PA per antenna. Value unit is dBm.";
+      }
+
+      leaf min-power-per-pa-antenna {
+        type decimal64{
+          fraction-digits 4;
+        }
+        description
+          "This value indicates Minimum Power per PA per antenna. Value unit is dBm.";
+      }
+
+      leaf fronthaul-split-option {
+        type uint8 {
+          range "7";
+        }
+        description
+          "This value indicates the Fronthaul Split Option, i.e., 2 or 7 in this release.";
+      }
+
+      container format-of-iq-sample {
+        description
+          "Indicates module capabilities about IQ samples";
+
+        leaf dynamic-compression-supported {
+          type boolean;
+
+          description
+            "Informs if radio supports dynamic compression method";
+        }
+
+        leaf-list supported-bitwidths {
+          type uint8 {
+            range "1..16";
+          }
+
+          description
+            "List of supported bitwidths";
+        }
+
+        leaf realtime-variable-bit-width-supported {
+          type boolean;
+
+          description
+            "Informs if RU supports realtime variable bit with";
+        }
+
+        list compression-method-supported {
+          uses compression-method-grouping;
+
+          description
+            "List of supported compression methods by RU";
+        }
+
+        leaf variable-bit-width-per-channel-supported {
+          when "/module-capability/ru-capabilities/format-of-iq-sample/realtime-variable-bit-width-supported = 'true'";
+          type boolean;
+
+          description
+            "Informs if variable bit width per channel is supported or not";
+        }
+
+        leaf syminc-supported {
+          type boolean;
+
+          description
+            "Informs if symbol number increment command in a C-Plane is
+             supported or not";
+        }
+      }
+
+      list ul-mixed-num-required-guard-rbs {
+        key "scs-a scs-b";
+        description
+          "Required number of guard resource blocks for the combination of
+          subcarrier spacing values for uplink";
+        leaf scs-a{
+          type enumeration {
+            enum KHZ_15 {
+              value 0;
+                    description
+                    "15kHz sub carrier spacing";
+            }
+            enum KHZ_30 {
+              value 1;
+                  description
+                    "30kHz sub carrier spacing";
+            }
+            enum KHZ_60 {
+              value 2;
+                  description
+                    "60kHz sub carrier spacing";
+            }
+            enum KHZ_120 {
+              value 3;
+                  description
+                    "120kHz sub carrier spacing";
+            }
+            enum KHZ_240 {
+              value 4;
+                  description
+                    "240kHz sub carrier spacing";
+            }
+            enum KHZ_1_25 {
+              value 12;
+                    description
+                    "1,25kHz sub carrier spacing";
+            }
+            enum KHZ_5 {
+              value 14;
+                  description
+                    "5kHz sub carrier spacing";
+            }
+          }
+          description
+            "Sub-carrier spacing configuration";
+        }
+        leaf scs-b{
+          type enumeration {
+            enum KHZ_15 {
+              value 0;
+                    description
+                    "15kHz sub carrier spacing";
+            }
+            enum KHZ_30 {
+              value 1;
+                  description
+                    "30kHz sub carrier spacing";
+            }
+            enum KHZ_60 {
+              value 2;
+                  description
+                    "60kHz sub carrier spacing";
+            }
+            enum KHZ_120 {
+              value 3;
+                  description
+                    "120kHz sub carrier spacing";
+            }
+            enum KHZ_240 {
+              value 4;
+                  description
+                    "240kHz sub carrier spacing";
+            }
+            enum KHZ_1_25 {
+              value 12;
+                    description
+                    "1,25kHz sub carrier spacing";
+            }
+            enum KHZ_5 {
+              value 14;
+                  description
+                    "5kHz sub carrier spacing";
+            }
+          }
+          description
+            "Sub-carrier spacing configuration";
+        }
+        leaf number-of-guard-rbs-ul{
+          type uint8;
+          description
+            "This value indicates the required number of guard resource blocks
+             between the mixed numerologies, the RB using scs-a and the RB
+             using scs-b. It's number is based on scs-a";
+        }
+      }
+      list dl-mixed-num-required-guard-rbs {
+        key "scs-a scs-b";
+        description
+          "Required number of guard resource blocks for the combination of
+          subcarrier spacing values for downlink";
+          leaf scs-a{
+            type enumeration {
+              enum KHZ_15 {
+                value 0;
+                      description
+                      "15kHz sub carrier spacing";
+              }
+              enum KHZ_30 {
+                value 1;
+                    description
+                      "30kHz sub carrier spacing";
+              }
+              enum KHZ_60 {
+                value 2;
+                    description
+                      "60kHz sub carrier spacing";
+              }
+              enum KHZ_120 {
+                value 3;
+                    description
+                      "120kHz sub carrier spacing";
+              }
+              enum KHZ_240 {
+                value 4;
+                    description
+                      "240kHz sub carrier spacing";
+              }
+              enum KHZ_1_25 {
+                value 12;
+                      description
+                      "1,25kHz sub carrier spacing";
+              }
+              enum KHZ_5 {
+                value 14;
+                    description
+                      "5kHz sub carrier spacing";
+              }
+            }
+            description
+              "Sub-carrier spacing configuration";
+          }
+          leaf scs-b{
+            type enumeration {
+              enum KHZ_15 {
+                value 0;
+                      description
+                      "15kHz sub carrier spacing";
+              }
+              enum KHZ_30 {
+                value 1;
+                    description
+                      "30kHz sub carrier spacing";
+              }
+              enum KHZ_60 {
+                value 2;
+                    description
+                      "60kHz sub carrier spacing";
+              }
+              enum KHZ_120 {
+                value 3;
+                    description
+                      "120kHz sub carrier spacing";
+              }
+              enum KHZ_240 {
+                value 4;
+                    description
+                      "240kHz sub carrier spacing";
+              }
+              enum KHZ_1_25 {
+                value 12;
+                      description
+                      "1,25kHz sub carrier spacing";
+              }
+              enum KHZ_5 {
+                value 14;
+                    description
+                      "5kHz sub carrier spacing";
+              }
+            }
+            description
+              "Sub-carrier spacing configuration";
+          }
+        leaf number-of-guard-rbs-dl{
+          type uint8;
+          description
+            "This value indicates the required number of guard resource blocks
+             between the mixed numerologies, the RB using scs-a and the RB
+             using scs-b. It's number is based on scs-a";
+        }
+      }
+    }
+    list band-capabilities {
+      key band-number;
+      description
+        "Capabilities that are needed to be defined per each band";
+
+      leaf band-number {
+        type uint16;
+        description
+          "Band number";
+      }
+
+      leaf max-supported-frequency-dl {
+        type uint64;
+        description
+          "This value indicates Maximum supported downlink frequency. Value unit is Hz.";
+      }
+
+      leaf min-supported-frequency-dl {
+        type uint64;
+        description
+          "This value indicates Minimum supported downlink frequency. Value unit is Hz.";
+      }
+
+      leaf max-supported-bandwidth-dl {
+        type uint64;
+        description
+          "This value indicates Maximum total downlink bandwidth in module. Value unit is Hz.";
+      }
+
+      leaf max-num-carriers-dl {
+        type uint32;
+        description
+          "This value indicates Maximum number of downlink carriers in module.";
+      }
+
+      leaf max-carrier-bandwidth-dl {
+        type uint64;
+        description
+          "This value indicates Maximum bandwidth per downlink carrier. Value unit is Hz.";
+      }
+
+      leaf min-carrier-bandwidth-dl {
+        type uint64;
+        description
+          "This value indicates Minimum bandwidth per downlink carrier. Value unit is Hz.";
+      }
+
+      leaf max-supported-frequency-ul {
+        type uint64;
+        description
+          "This value indicates Maximum supported uplink frequency. Value unit is Hz.";
+      }
+
+      leaf min-supported-frequency-ul {
+        type uint64;
+        description
+          "This value indicates Minimum supported uplink frequency. Value unit is Hz.";
+      }
+
+      leaf max-supported-bandwidth-ul {
+        type uint64;
+        description
+          "This value indicates Maximum total uplink bandwidth in module. Value unit is Hz.";
+      }
+
+      leaf max-num-carriers-ul {
+        type uint32;
+        description
+          "This value indicates Maximum number of uplink carriers in module.";
+      }
+
+      leaf max-carrier-bandwidth-ul {
+        type uint64;
+        description
+          "This value indicates Maximum bandwidth per uplink carrier. Value unit is Hz.";
+      }
+
+      leaf min-carrier-bandwidth-ul {
+        type uint64;
+        description
+          "This value indicates Minimum bandwidth per uplink carrier. Value unit is Hz.";
+      }
+//      leaf number-of-supported-streams {
+//        when "/module-capability/ru-capabilities/ru-supported-category = 'CAT_A'"
+//        type uint8;
+//        description
+//          "Number of supported spatial stream in case CAT-A is supported";
+//      }
+// Fixed me if they are necessary.
+
+      leaf max-num-component-carriers {
+        type uint8;
+        description "maximum number of component carriers supported by the RU";
+      }
+
+      leaf max-num-bands {
+        type uint16;
+        description "maximum number of bands supported by the RU";
+      }
+
+      leaf max-num-sectors {
+        type uint8;
+        description "maximum number of sectors supported by the RU";
+      }
+
+      leaf max-power-per-antenna {
+        type decimal64{
+          fraction-digits 4;
+        }
+        description
+          "This value indicates Maximum Power per band per antenna. Value unit is dBm.";
+      }
+
+      leaf min-power-per-antenna {
+        type decimal64{
+          fraction-digits 4;
+        }
+        description
+          "This value indicates Minimum Power per band per antenna. Value unit is dBm.";
+      }
+
+         leaf codebook-configuration_ng {
+          type uint8;
+          description
+            "This parameter informs the precoder codebook_ng that are used for precoding";
+        }
+
+         leaf codebook-configuration_n1 {
+          type uint8;
+          description
+            "This parameter informs the precoder codebook_n1 that are used for precoding";
+        }
+
+         leaf codebook-configuration_n2 {
+          type uint8;
+          description
+            "This parameter informs the precoder codebook_n2 that are used for precoding";
+      }
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-mplane-int.yang b/data-model/yang/published/xran/xran-mplane-int.yang
new file mode 100644 (file)
index 0000000..778d37a
--- /dev/null
@@ -0,0 +1,171 @@
+module xran-mplane-int {
+  yang-version 1.1;
+  namespace "urn:xran:mplane-interfaces:1.0";
+  prefix "xran-mplane-int";
+
+  import ietf-inet-types {
+    prefix "inet";
+  }
+
+  import ietf-interfaces {
+    prefix "if";
+  }
+
+  import xran-interfaces {
+    prefix "xran-int";
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the YANG definitions for managng the xRAN Radio Unit
+     management plane interface.
+
+     Copyright 2018 the xRAN Forum.
+
+     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+     ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+     LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+     CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+     SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+     INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+     POSSIBILITY OF SUCH DAMAGE.
+
+     Redistribution and use in source and binary forms, with or without
+     modification, are permitted provided that the following conditions are met:
+
+     * Redistributions of source code must retain the above copyright notice,
+     this list of conditions and the above disclaimer.
+     * Redistributions in binary form must reproduce the above copyright notice,
+     this list of conditions and the above disclaimer in the documentation
+     and/or other materials provided with the distribution.
+     * Neither the Members of the xRAN Forum nor the names of its
+     contributors may be used to endorse or promote products derived from
+     this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  typedef vlan-id {
+    type uint16 {
+      range 1..4094;
+    }
+    description
+      "Type definition representing a single-tagged VLAN";
+  }
+  container mplane-info {
+    description "top level container for management plane information";
+    container searchable-mplane-access-vlans-info {
+      description
+        "These parameters shall be stored by the RU in reset persistant memory
+        to enable it to be re-used to optimize VALN discovery procerdures.";
+      leaf-list searchable-access-vlans {
+        type vlan-id;
+        description
+          "A list of access VLANs that may be operational on the transport
+          network. Can be used by the RU to optimize its VLAN searching - for
+          M-plane operations.";
+      }
+      container vlan-range {
+        description "the range of VLAN IDs that may be configured for M-Plane";
+        leaf lowest-vlan-id {
+          type vlan-id;
+          description
+            "Value of this parameter informs RU about lowest VID to be used
+            in VLAN scan procedure";
+        }
+        leaf highest-vlan-id {
+          type vlan-id;
+          description
+            "Value of this parameter informs RU about highest VID to be used
+            in VLAN scan procedure";
+        }
+      }
+    }
+
+    container m-plane-interfaces {
+      description "information concerning m-plane interfaces";
+      list m-plane-sub-interfaces {
+        key "interface-name sub-interface";
+        description "list of m-plane information";
+        leaf interface-name {
+          type leafref {
+            path "/if:interfaces/if:interface/if:name";
+          }
+          description "the name of the interface";
+        }
+        leaf sub-interface {
+          type leafref {
+            path "/if:interfaces/if:interface[if:name = current()/../interface-name]/xran-int:vlan-id";
+          }
+          description
+            "vlans used to communicate with management plane servers.";
+        }
+        container client-info {
+          description "the NETCONF client information";
+          list mplane-ipv4-info {
+            key mplane-ipv4;
+            description "list of IPv4 NETCONF clients";
+            leaf mplane-ipv4 {
+              type inet:ipv4-address;
+              description "The IPv4 address of M-Plane client discovered by the RU
+              or manually configured.";
+            }
+            leaf port {
+              type inet:port-number;
+              default "4334";
+              description
+                "The port number the call home server listens on.";
+            }
+          }
+          list mplane-ipv6-info {
+            key mplane-ipv6;
+            description "list of IPv6 NETCONF clients";
+            leaf mplane-ipv6 {
+              type inet:ipv6-address;
+              description "The IPv6 address of M-Plane client discovered by the RU
+              or manually configured.";
+            }
+            leaf port {
+              type inet:port-number;
+              default "4334";
+              description
+                "The port number the call home server listens on.";
+            }
+          }
+          leaf-list mplane-fqdn {
+            type inet:domain-name;
+            description "The discovered FQDN(s) of M-Plane client(s).";
+          }
+        }
+      }
+
+      container m-plane-ssh-ports {
+        description "leafs for managing SSH ports";
+        leaf call-home-ssh-port {
+          type inet:port-number;
+          default 4334;
+          description "call home server port number";
+        }
+        leaf server-ssh-port {
+          type inet:port-number;
+          default 830;
+          description "SSH server port number";
+        }
+      }
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-operations.yang b/data-model/yang/published/xran/xran-operations.yang
new file mode 100644 (file)
index 0000000..490ceb5
--- /dev/null
@@ -0,0 +1,151 @@
+module xran-operations {
+  yang-version 1.1;
+  namespace "urn:xran:operations:1.0";
+  prefix "xran-ops";
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the YANG model used for RU operations.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  typedef xran-version {
+    type string {
+      pattern '[0-9]+(\.[0-9]+)';
+    }
+    description
+      "this type definition is used to represent the version of the xRAN
+      fronthaul interface.";
+  }
+
+  container operational-info{
+    config false;
+    description
+      "a collection of operational infor for the RU";
+
+    container xran-split {
+      description
+        "details about the xran split ";
+      leaf interface-version {
+        type xran-version;
+        default "1.0";
+        description "current version of the xRAN split sdupported by the RU";
+      }
+      leaf optional-header-support {
+        type enumeration {
+          enum NONE {
+            description
+              "Indicates that an RU only supports eCPRI C/U plane headers";
+          }
+          enum 1914POINT3 {
+            description
+              "Indicates that an RU supports the optional 1914.3 header format
+               for the C/U plane";
+          }
+        }
+        default NONE;
+        description
+          "Placeholder to enable future management plane aspects of 1914.3
+           headers to be included.";
+      }
+      leaf ecpri-concatenation-support {
+        type boolean;
+        default false;
+        description
+          "This leaf is used to indicate whether the RU supports the optional
+          eCPRI concatenation capability";
+      }
+    }
+
+    container operational-state {
+      description
+        "Operational state for the Radio Unit";
+      leaf restart-cause {
+        type enumeration {
+          enum POWER-ON {
+            description
+              "RU restarted because it was powered on";
+          }
+          enum SUPERVISION-WATCHDOG {
+            description
+              "RU restarted because it's supervision wathcdog timer wasn't reset
+              by a NETCONF client (inferring loss of NETCONF connectivity)";
+          }
+          enum MPLANE-TRIGGERED-RESTART {
+            description
+              "RU restarted because of an M-plane issued  rpc";
+          }
+          enum SOFTWARE-FAILURE {
+            description
+              "RU restarted because of software failure";
+          }
+          enum OTHER-WATCHDOG-TIMER {
+            description
+              "RU restarted because of some other non NETCONF watchdog timer";
+          }
+          enum UNKNOWN {
+            description
+              "The restart reason for the RU is unknown";
+          }
+        }
+        description "the cause for the last restart of the RU";
+      }
+    }
+
+    leaf re-call-home-no-ssh-timer {
+      type uint16;
+      units seconds;
+      default 60;
+      description
+        "The timer used by the xRAN Radio Unit to repeatedley call home to
+        identified call home servers if it has not already an established SSH
+        connection to the identified server.";
+    }
+  }
+
+  rpc reset {
+    // TODO add nacm statement, e.g., nacm:default-deny-all;
+    description
+      "Management plane triggered restart of the radio unit.
+       A server SHOULD send an rpc reply to the client before
+       restarting the system.";
+
+  }
+}
diff --git a/data-model/yang/published/xran/xran-performance-management.yang b/data-model/yang/published/xran/xran-performance-management.yang
new file mode 100644 (file)
index 0000000..7faefa0
--- /dev/null
@@ -0,0 +1,664 @@
+module xran-performance-management {
+  yang-version 1.1;
+  namespace "urn:xran:performance-management:1.0";
+  prefix "xran-pm";
+
+  import ietf-yang-types {
+    prefix "yang-types";
+    revision-date 2013-07-15;
+  }
+
+  // import idetifier for RU
+  import ietf-hardware {
+    prefix "hw";
+  }
+
+  // import ietf-interface
+  import ietf-interfaces {
+    prefix "if";
+  }
+
+  // import ietf-inet-type
+  import ietf-inet-types {
+    prefix "inet";
+  }
+
+  // import xran-port-number
+  import xran-interfaces {
+    prefix "xran-int";
+  }
+
+  // import ru-mac-address, lls-cu-mac-address and vlan-id
+  import xran-processing-element {
+    prefix "xran-elements";
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the configuration for performance measurement for
+    transceiver and rx-window measurement objects.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+
+  feature GRANULARITY-TRANSPORT-MEASUREMENT {
+    description
+      "This feature indicates that the RU supports an optional object-unit TRANSPORT in rx-window-measurement.";
+  }
+  feature GRANULARITY-EAXC-ID-MEASUREMENT {
+    description
+      "This feature indicates that the RU supports an optional object-unit EAXC_ID in rx-window-measurement.";
+  }
+
+  grouping start-and-end-time {
+       description
+         "Definition for start and end time for an event";
+
+    leaf start-time {
+      type yang-types:date-and-time;
+      description
+        "Start time for measurement of object stats";
+    }
+    leaf end-time {
+      type yang-types:date-and-time;
+      description
+        "End time for measurement of object stats";
+    }
+  }
+
+  grouping transceiver-measurement-result-grouping {
+    description
+      "transceiver-measurement-result are listed per port-number";
+
+    list transceiver-measurement-result {
+      key "object-unit-id";
+      config false;
+      leaf object-unit-id {
+        type leafref {
+          path "/if:interfaces/if:interface/xran-int:port-reference/xran-int:xran-port-number";
+        }
+
+        description
+          "port-number is used for the object-unit-id for the
+           transceiver-measurement-result, for which object-unit is
+           PORT_NUMBER only";
+      }
+      container min {
+        description
+          "minimum value with recorded time are included for the
+           measurement-object";
+
+        leaf value {
+          type decimal64 {
+            fraction-digits 4;
+          }
+
+          description
+            "minimum value for the measurment-object";
+        }
+        leaf time {
+          type yang-types:date-and-time;
+
+          description
+            "recorded time for the minimum value";
+        }
+      }
+      container max {
+        description
+        "maximum value with recorded time are included for the
+         measurement-object";
+
+        leaf value {
+          type decimal64 {
+            fraction-digits 4;
+          }
+
+          description
+            "maximum value for the measurment-object";
+        }
+        leaf time {
+          type yang-types:date-and-time;
+
+          description
+            "recorded time for the maximum value";
+        }
+      }
+      container first {
+        description
+          "first value with the recorded time are included for the
+           measurement-object";
+
+        leaf value {
+          type decimal64 {
+            fraction-digits 4;
+          }
+
+          description
+            "first value of the measurement-object";
+        }
+        leaf time {
+          type yang-types:date-and-time;
+
+          description
+            "recorded time for the first value";
+        }
+      }
+      container latest {
+        description
+          "latest value with the recorded time are included for the
+           measurement-object";
+
+        leaf value {
+          type decimal64 {
+            fraction-digits 4;
+          }
+
+          description
+            "latest value of the measurement-object";
+        }
+        leaf time {
+          type yang-types:date-and-time;
+
+          description
+            "recorded time for the latest value";
+        }
+      }
+      leaf-list frequeny-table {
+        type uint32;
+
+        description
+          "frequency-table for the measurment-object are included per bin.
+           The configuration parameters for this frequency-table are defined
+           by bin-count, lower-bound and upper-bound";
+      }
+
+         description
+           "List of transceiver measurement results";
+    }
+  }
+
+  grouping rx-window-measurement-result-grouping{
+    description
+         "Group of measurement reasults for rx window measurements";
+
+    choice object-unit-id {
+      config false;
+      case RU {
+        leaf name{
+          type leafref {
+            path "/hw:hardware/hw:component/hw:name";
+          }
+
+          description
+            "the name of RU in ietf-hardware/component is used
+             when RU is selected as object-unit for the reception window
+             stats.";
+        }
+        leaf count {
+          type uint64;
+          mandatory true;
+
+          description
+            "the number of data packet are counted for the reception
+             window stats per RU.";
+        }
+      }
+
+      case TRANSPORT {
+        list tr-measured-result{
+          leaf name{
+            type leafref{
+              path "/xran-elements:processing-elements/xran-elements:ru-elements/xran-elements:name";
+            }
+
+            description
+              "the name of ru-elements in xran-processing-elements
+               when TRANSPORT is selected as object-unit for the reception
+               window stats.";
+          }
+          leaf count {
+            type uint64;
+            mandatory true;
+
+            description
+              "the number of data packet are counted for the reception
+               window stats.";
+          }
+
+          description
+            "the number of data packet are counted for the reception
+             window stats per TRANSPORT.";
+        }
+      }
+
+      case EAXC_ID {
+        list eaxc-measured-result {
+          leaf eaxc-id{
+            type uint16;
+
+            description
+              "eaxc-id is used
+               when EAXC_ID is selected as object-unit for the reception
+               window stats.
+               EAXC_ID consists of CU-Port-Id, Band-Selector, CC-id and
+               RU-Port-Id to be used in header of C/U-plane data packet.";
+          }
+          leaf count {
+            type uint64;
+            mandatory true;
+
+            description
+              "the number of data packet are counted for the reception
+               window stats.";
+          }
+          leaf transport-name {
+            type leafref{
+              path "/xran-elements:processing-elements/xran-elements:ru-elements/xran-elements:name";
+            }
+
+            description
+              "the name of ru-elements in xran-processing-elements for the
+               transport information corresponding to this eaxc-id";
+          }
+
+          description
+            "the number of data packet are counted for the reception
+             window stats per EAXC-ID.";
+        }
+      }
+
+      description
+        "measurement-result for the reception window stats depends on the
+         configured object-unit, RU, TRANSPORT or EAXC_ID";
+    }
+  }
+
+  container performance-measurement-objects {
+    description
+      "configuration for performance management and measurement-result are
+       included";
+
+    leaf enable-SFTP-upload {
+      type boolean;
+      default false;
+      description
+        "Flag to enable upload of performance measurement result files.";
+    }
+
+    leaf enable-random-file-upload {
+      type boolean;
+      default false;
+      description
+        "Flag to enable upload of performance measurement result files at
+         random within file-upload-interval.";
+    }
+
+    list remote-SFTP-uploads {
+      key remote-SFTP-upload-path;
+      description
+        "SFTP upload can be done to one or more than one SFTP servers";
+
+      leaf remote-SFTP-upload-path {
+        type inet:uri;
+        description
+          "URI specifying the remote location where the files are to uploaded.
+          The following format is possible:
+          sftp://<username>@<host>[:<port>]";
+      }
+
+      choice credentials {
+        description
+          "Type of authentication to use for SFTP upload.";
+
+        case password {
+          container password {
+            presence true;
+            leaf password {
+              type string;
+              mandatory true;
+
+              description
+                "password needed for authentication.";
+            }
+            description
+              "password authentication method in use";
+          }
+        }
+        case certificate {
+          container certificate {
+            presence true;
+            description
+              "certificate authentication method in use";
+          }
+        }
+      }
+    }
+
+    leaf transceiver-measurement-interval {
+      type uint16;
+      description
+        "measurement interval to measure the performance of transceiver
+         measurement objects periodically.";
+    }
+
+    leaf rx-window-measurement-interval {
+      type uint16;
+      description
+        "measurement interval to measure the performance of reception
+         window measurement objects periodically.";
+    }
+
+    leaf notification-interval {
+      type uint16;
+      description
+        "notification interval for the measurement result to be notified
+         periodically.";
+    }
+
+    leaf file-upload-interval {
+      type uint16;
+      description
+        "file upload interval for the measurement result file to be
+         uploaded periodically.";
+    }
+
+    list transceiver-measurement-objects {
+      key "measurement-object";
+      leaf measurement-object {
+        type enumeration {
+          enum RX_POWER {
+            description
+              "Measured Rx input power in mW";
+          }
+          enum TX_POPWER {
+            description
+              "Measured Tx input power in mW.";
+          }
+          enum TX_BIAS_COUNT {
+            description
+              "Internally measured Tx Bias Current in mA";
+          }
+          enum VOLTAGE {
+            description
+              "Internally measured transceiver supply voltage in mV";
+          }
+          enum TEMPERATURE {
+            description
+              "Internally measured optional laser temperature in degrees Celsius.";
+          }
+        }
+        description "Target metric to measure the performance";
+      }
+
+      leaf active {
+        type boolean;
+        default false;
+        description
+          "Enable/disable the performance measurement per Object";
+      }
+
+      leaf-list report-info {
+        type enumeration {
+          enum MAXIMUM {
+            description
+              "to report maximum value and its recorded time within the
+               measurement-interval for the measurement-object.";
+          }
+          enum MINIMUM {
+            description
+              "to report minimum value and its recorded time within the
+               measurement-interval for the measurement-object.";
+          }
+          enum FIRST {
+            description
+              "to report first value and its recorded time within the
+               measurement-interval for the measurement-object.";
+          }
+          enum LATEST {
+            description
+              "to report latest value and its recorded time within the
+               measurement-interval for the measurement-object.";
+          }
+          enum FREQUENCY_TABLE {
+            description
+              "to report frequency bin table within the
+               measurement-interval for the measurement-object.";
+          }
+        }
+        description "The reporting info to the measurement object.";
+      }
+
+      leaf object-unit {
+        type enumeration {
+          enum PORT_NUMBER {
+            description
+              "unit to measure the performance per object-id";
+          }
+        }
+        mandatory true;
+        description "unit to measure the performance per object-id.";
+      }
+
+      leaf function {
+        type enumeration {
+          enum RAW {
+            description
+              "the value is expressed by real value.";
+          }
+          enum LOG_10 {
+            description
+              "the value is expressed by logarithm with base 10.";
+          }
+        }
+
+        description
+          "the value to be recorded for transceiver-measurement
+           by real value or log 10.";
+      }
+
+      leaf bin-count {
+        type uint32;
+
+        description
+          "the number of bin for the frequency table.";
+      }
+
+      leaf lower-bound {
+        type decimal64 {
+          fraction-digits 4;
+        }
+
+        description
+          "the lower value of the first bin of frequency table.";
+      }
+
+      leaf upper-bound {
+        type decimal64 {
+          fraction-digits 4;
+        }
+
+        description
+          "the upper value of the last bin of frequency table.";
+      }
+      uses transceiver-measurement-result-grouping;
+
+      description
+        "configuration and measurement result for the transceiver-measurement.";
+    }
+
+    list rx-window-measurement-objects {
+      key "measurement-object";
+      leaf measurement-object {
+        type enumeration {
+          enum RX_ON_TIME {
+            description
+              "the number of data packets, received on time within
+               the reception window.";
+          }
+          enum RX_EARLY {
+            description
+              "the number of data packets, received before
+               the reception window.";
+          }
+          enum RX_LATE {
+            description
+              "the number of data packets, received after
+               the reception window.";
+          }
+          enum RX_CORRUPT {
+            description
+              "the number of data packets, which are corrupt or whose header
+               is incorrect.";
+          }
+          enum RX_DUPL {
+            description
+              "the number of data packets, which is duplicated with other packets,
+               received within the measurement period.";
+          }
+          enum RX_TOTAL {
+            description
+              "the total number of received data packets.";
+          }
+        }
+        description
+          "target reception window metric to measure the performance.";
+      }
+
+      leaf active {
+        type boolean;
+        default false;
+        description
+          "Enable/disable the performance measurement per reception window
+           measurement object.";
+      }
+
+      leaf object-unit {
+        type enumeration {
+          enum RU {
+            description
+              "the reception window stats are counted per RU.";
+          }
+          enum TRANSPORT {
+            if-feature GRANULARITY-TRANSPORT-MEASUREMENT;
+            description
+              "the reception window stats are counted per transport flow.
+              When there are multiple transport flows between lls-CU and RU,
+               e.g. multiple sets of lls-cu mac address, ru mac address and
+                    vlan-id, the reception window stats per transport flow
+                    are counted in this case.
+              This configuration is allowed only when RU supports
+              a feature GRANULARITY-TRANSPORT-MEASUREMENT.";
+          }
+          enum EAXC_ID {
+            if-feature GRANULARITY-EAXC-ID-MEASUREMENT;
+
+            description
+              "the reception window stats are counted per eAxC ID, which is
+               used in the header of receivd data packet.
+              This configuration is allowed only when RU supports
+              a feature GRANULARITY-EAXC-ID-MEASUREMENT.";
+          }
+        }
+        description
+          "unit to measure the performance per object-id.";
+      }
+
+      leaf report-info {
+        type enumeration {
+          enum COUNT {
+            description
+              "the number of data packet are counted for the reception
+               window stats.";
+          }
+        }
+        description
+          "The reporting info to the measurement object.";
+      }
+
+      uses rx-window-measurement-result-grouping;
+
+      description
+        "configuration and measurement result for the reception window stats";
+    }
+  }
+
+  notification measurement-result-stats {
+    list transceiver-stats {
+      key "measurement-object";
+      leaf measurement-object {
+        type leafref {
+          path "/performance-measurement-objects/transceiver-measurement-objects/measurement-object";
+        }
+
+        description
+          "measurement-object for the transceiver-measurement";
+      }
+
+      uses start-and-end-time;
+      uses transceiver-measurement-result-grouping;
+
+      description
+        "measurement result of transceiver-measurement per measurement-object";
+    }
+
+    list rx-window-stats {
+      key "measurement-object";
+      leaf measurement-object {
+        type leafref {
+          path "/performance-measurement-objects/rx-window-measurement-objects/measurement-object";
+        }
+
+        description
+          "measurement-object for the reception window measurement";
+      }
+      uses start-and-end-time;
+      uses rx-window-measurement-result-grouping;
+
+      description
+        "measurement result for the reception window measurement per
+         measurement-object";
+
+    }
+
+    description
+      "notification may contain measurement result for transceiver-stats
+       and/or rx-window-stats";
+  }
+}
diff --git a/data-model/yang/published/xran/xran-processing-element.yang b/data-model/yang/published/xran/xran-processing-element.yang
new file mode 100644 (file)
index 0000000..c3809ab
--- /dev/null
@@ -0,0 +1,237 @@
+module xran-processing-element {
+  yang-version 1.1;
+  namespace "urn:xran:processing-element:1.0";
+  prefix "xran-elements";
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  import ietf-inet-types {
+    prefix "inet";
+  }
+
+  import ietf-interfaces {
+    prefix "if";
+  }
+
+  import ietf-ip {
+    prefix "ip";
+  }
+
+  import xran-interfaces {
+    prefix "xran-int";
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the YANG definitions for mapping of transport flows to
+    processing elements. Three options are supported:
+    i) virtual MAC based mapping
+    ii) MAC addrress + VLAN-ID based mapping
+    iii) UDP/IP based mapping
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  identity XRAN-INTERFACE-TYPE {
+    base if:interface-type;
+    description
+      "This identity is used as a base for all interface types
+       defined by xRAN.";
+  }
+
+  identity ALIASMAC-INTERFACE {
+    base XRAN-INTERFACE-TYPE;
+    description
+      "Identity type for alias MAC based CU plane interface,
+      whwere multiple MAC addresses are used on the same Ethernet interface. ";
+  }
+
+  identity ETH-INTERFACE {
+    base XRAN-INTERFACE-TYPE;
+    description
+      "identity type for ethernet plus vlan based CU plane interface. ";
+  }
+
+  identity UDPIP-INTERFACE {
+    base XRAN-INTERFACE-TYPE;
+    description
+      "identity type for UDP/IP based CU plane interface. ";
+  }
+
+  container processing-elements {
+    description
+      "a model defining the mapping between transport flows and arbitrary
+      xRAN processing elements. A processing element may be then defined for
+      handling connectivity or delay procedures, or defined with a corresponding
+      eaxcid for CU plane operations";
+    leaf transport-session-type {
+      type identityref {
+        base XRAN-INTERFACE-TYPE;
+      }
+      description
+        "the type of transport session used for identifying different processing
+        elements";
+    }
+    list ru-elements {
+      key "name";
+      description
+        "the list of transport definitions for each processing element";
+      leaf name {
+        type string {
+          length "1..255";
+        }
+        description
+          "A name that is unique across the RU that identifies a processing
+          element instance.
+
+          This name may be used in fault management to refer to a fault source
+          or affected object";
+      }
+      container transport-flow {
+        description
+          "container for the transport-flow used for CU plane";
+        leaf interface-name {
+          type leafref {
+            path "/if:interfaces/if:interface/if:name";
+          }
+          description "the interface name ";
+        }
+        container aliasmac-flow {
+          when "derived-from(../../../transport-session-type, 'ALIASMAC-INTERFACE')";
+          if-feature xran-int:ALIASMAC-BASED-CU-PLANE;
+          description "leafs for virtual mac type data flows";
+          leaf ru-aliasmac-address {
+            type leafref {
+              path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/xran-int:alias-macs";
+            }
+            config false;
+            mandatory true;
+            description
+              "RU's alias MAC address used for alias MAC based flow";
+          }
+          leaf vlan-id {
+            type leafref {
+              path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/xran-int:vlan-id";
+            }
+            description
+              "RU's VLAN-ID used for alias MAC based flow";
+          }
+          leaf llscu-mac-address {
+            type yang:mac-address;
+            mandatory true;
+            description
+              "lls-CU's MAC address used for alias MAC based flow";
+          }
+        }
+        container eth-flow {
+          when "derived-from(../../../transport-session-type, 'ETH-INTERFACE')";
+          description "leafs for mac + vlan-id type data flows";
+          leaf ru-mac-address {
+            type leafref {
+              path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/xran-int:mac-address";
+            }
+            mandatory true;
+            description
+              "RU's MAC address used for Ethernet based flow";
+          }
+          leaf vlan-id {
+            type leafref {
+              path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/xran-int:vlan-id";
+            }
+            mandatory true;
+            description
+              "RU's VLAN-ID used for Ethernet based flow";
+          }
+          leaf llscu-mac-address {
+            type yang:mac-address;
+            mandatory true;
+            description
+              "lls-CU's MAC address used for alias MAC based flow";
+          }
+        }
+        container udpip-flow {
+          when "derived-from(../../../transport-session-type, 'UDPIP-INTERFACE')";
+          if-feature xran-int:UDPIP-BASED-CU-PLANE;
+          description "leafs for UDP/IP type data flows";
+          choice address {
+            leaf ru-ipv4-address {
+              type leafref {
+                path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/ip:ipv4/ip:address/ip:ip";
+              }
+              description "RU's IPv4 address";
+            }
+            leaf ru-ipv6-address {
+              type leafref {
+                path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/ip:ipv6/ip:address/ip:ip";
+              }
+              description "RU's IPv6 address";
+            }
+            mandatory true;
+            description "choice of RU IPv4 or IPv6 address";
+          }
+          leaf llscu-ip-address {
+            type inet:ip-address;
+            mandatory true;
+            description "lls-CU's IPv address";
+          }
+          leaf ru-ephemeral-udp-port {
+            type inet:port-number;
+            mandatory true;
+            description
+              "ephemeral port used by RU";
+          }
+          leaf llscu-ephemeral-udp-port {
+            type inet:port-number;
+            mandatory true;
+            description
+              "ephemeral port used by lls-CU";
+          }
+          leaf destination-udp {
+            type inet:port-number;
+            mandatory true;
+            description "the well known UDP port number used by eCPRI";
+            // fixme - add in a default when allocated by IANA
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-software-management.yang b/data-model/yang/published/xran/xran-software-management.yang
new file mode 100644 (file)
index 0000000..0759cd6
--- /dev/null
@@ -0,0 +1,539 @@
+module xran-software-management {
+  yang-version 1.1;
+  namespace "urn:xran:software-management:1.0";
+  prefix xran-swm;
+
+  import ietf-inet-types {
+    prefix "inet";
+    revision-date 2013-07-15;
+  }
+
+  import ietf-hardware {
+    prefix "hw";
+  }
+
+  import xran-hardware {
+    prefix "xran-hw";
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines operations and configuration for the management of software packages.
+    This module is derived out of opencpe-firmware-mgmt@2014-02-06.yang
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  // typedef statements
+
+  container software-inventory {
+    config false;
+    description
+      "Contains information about each software slot and its content.";
+
+    list software-slot {
+      key name;
+      min-elements 2;
+
+      description
+        "Information about available software-slots and their software.";
+
+      leaf name {
+        type string;
+
+        description
+          "Name of the software package. This shall be unique to identify the software-slot.";
+      }
+
+      leaf status {
+        type enumeration {
+          enum VALID {
+            description
+              "Slot Contains software build considered as proven valid";
+          }
+          enum INVALID {
+            description
+              "software build is not currently used by RU. The software is considered by RU as damaged (e.g. wrong CRC)";
+          }
+          enum EMPTY {
+            description
+              "W slot does not contain software package.";
+          }
+        }
+        config false;
+        mandatory true;
+
+        description "Indicates the status of the software slot";
+      }
+
+      leaf active {
+          type boolean;
+      must "../status = 'VALID'";
+        config false;
+          description
+            "informs if software stored in particular slot is activated at the moment";
+      }
+
+      leaf running {
+          type boolean;
+      must "../status = 'VALID'";
+        config false;
+          description
+            "informs if software stored in particular slot is used at the moment";
+      }
+
+      leaf access {
+        type enumeration {
+          enum READ_ONLY {
+            description
+              "slot intended only for factory software,
+              activation of such software slot means getting back to factory defaults";
+          }
+          enum READ_WRITE {
+            description
+              "slot used for updating software";
+          }
+        }
+        default READ_WRITE;
+        config false;
+
+        description
+          "Indicates the writability of the slot.
+          A Read-Only software slot is one which has a factory installed software-slot";
+      }
+
+      leaf product-code {
+        type leafref {
+               path "/hw:hardware/hw:component/xran-hw:product-code";
+               }
+        config false;
+
+        description "product code provided by the vendor, specific to the product. This is derived from manifest file.";
+      }
+
+      leaf vendor-code {
+        type string {
+          length 1..2;
+        }
+        config false;
+
+        description
+          "Unique code of the vendor. This is derived from manifest file.";
+      }
+
+      leaf build-id {
+        type string;
+        config false;
+
+        description
+          "Identity associated with the software build. This is derived from manifest file.";
+      }
+
+      leaf build-name {
+        type string;
+        config false;
+
+        description
+          "Name of the build. This is derived from manifest file.";
+      }
+
+      leaf build-version {
+        type leafref{
+               path "/hw:hardware/hw:component/hw:software-rev";
+               }
+        description "Version of the software build. This is derived from manifest file.";
+      }
+
+      list files {
+        key "name";
+        config false;
+
+        description "List of all the files present in the software package.";
+
+        leaf name {
+          type string;
+
+          description
+            "Name of the file installed in the slot.";
+        }
+
+        leaf version {
+          type string;
+
+          description
+            "Version of the file installed in the slot";
+        }
+        leaf local-path {
+          type string;
+          mandatory true;
+
+          description
+            "Complete path of the file stored locally";
+        }
+
+        leaf integrity {
+          type enumeration {
+            enum OK {
+              description "OK - indicates that file integrity is correct";
+            }
+            enum NOK {
+              description "NOK - indicates corrupted file";
+            }
+          }
+          config false;
+
+          description
+            "Result of the file integrity check (checksum calculation) during installation.";
+        }
+      }
+    }
+  }
+    // rpc statements
+
+  rpc software-download {
+    description
+      "Rpc needed to perform software download operation.";
+
+    input {
+      leaf remote-file-path {
+        type inet:uri;
+        mandatory true;
+        description
+          "URI of the software image including username.
+          The following format is possible:
+          sftp://<username>@<host>[:<port>]";
+      }
+
+      choice credentials {
+        description
+          "Type of authentication to use for software downloads.";
+
+        case password {
+          container password {
+            presence true;
+            leaf password {
+              type string;
+              mandatory true;
+
+              description
+                "password needed for authentication.";
+            }
+
+            description
+              "password authentication method in use";
+          }
+        }
+        case certificate {
+          container certificate {
+            presence true;
+            description
+              "certificate authentication method in use";
+          }
+        }
+      }
+    }
+    output {
+      leaf status {
+        type enumeration {
+          enum STARTED {
+            description
+              "Operation has been started without error.";
+          }
+          enum FAILED {
+            description
+              "Operation cannot be started because of error, more detailed information can be found in error-message.";
+          }
+        }
+        mandatory true;
+
+        description
+          "Status of the software files download";
+      }
+      leaf error-message {
+        when "../status = 'FAILED'";
+        type string;
+
+        description
+          "Detailed error Message when the status is failed.";
+      }
+
+      leaf notification-timeout {
+        type int32;
+        units seconds;
+        default 30;
+
+        description
+          "Notification timeout is the time NETCONF client shall
+          wait for a 'download-event' notification from RU. If there is no
+          'download-event' notification received within notification-timeout,
+          NETCONF client shall assume the download timeout/failure, and follow necessary steps.";
+      }
+    }
+  }
+
+  rpc software-install {
+    description
+      "Install a previously downloaded software package.";
+
+    input {
+      leaf slot-name {
+        type leafref {
+          path "/software-inventory/software-slot/name";
+          }
+        must "/software-inventory/software-slot[name = current()][active = 'false' and running = 'false']" {
+          error-message "software-install may be requested only against active::false and running::false slot!";
+        }
+        mandatory true;
+
+        description
+          "software-slot to which the software shall be installed to.";
+      }
+
+      leaf-list file-names {
+        type string;
+
+        description
+          "Names of the files within software package to be installed";
+      }
+    }
+    output {
+      leaf status {
+        type enumeration {
+          enum STARTED {
+            description
+              "Operation has been started without error.";
+          }
+          enum FAILED {
+            description
+              "Operation cannot be started because of error, more detailed information can be found in error-message.";
+          }
+        }
+        mandatory true;
+
+        description
+          "Status of the software package install.";
+      }
+      leaf error-message {
+        when "../status = 'FAILED'";
+        type string;
+
+        description
+          "Detailed error Message when the status is failed.";
+      }
+    }
+  }
+
+  rpc software-activate {
+    description
+      "Activate a previously installed software.";
+    input {
+      leaf slot-name {
+        type leafref {
+          path "/software-inventory/software-slot/name";
+        }
+        mandatory true;
+
+        description
+          "Slot name on which software has to be activated.";
+      }
+    }
+    output {
+      leaf status {
+        type enumeration {
+          enum STARTED {
+            description
+              "Operation has been started without error.";
+          }
+          enum FAILED {
+            description
+              "Operation cannot be started because of error, more detailed information can be found in error-message.";
+          }
+        }
+        mandatory true;
+
+        description
+          "Status of the software files activation";
+      }
+      leaf error-message {
+        when "../status = 'FAILED'";
+        type string;
+
+        description
+          "Detailed error Message when the status is failed.";
+      }
+
+      leaf notification-timeout {
+        type int32;
+        units seconds;
+        default 30;
+
+        description
+          "Timeout on client waiting for the activate event";
+      }
+    }
+  }
+
+    // notification definitions
+  notification download-event {
+    description "Notification event structure for download completion";
+    leaf file-name {
+      type string;
+      mandatory true;
+
+      description
+        "File name of downloaded software package";
+    }
+
+    leaf status {
+      type enumeration {
+        enum COMPLETED {
+          description
+            "Operation completed succesfully";
+        }
+        enum AUTHENTICATION_ERROR {
+          description "source available, wrong credentials";
+        }
+        enum PROTOCOL_ERROR {
+          description "SFTP errors";
+        }
+        enum FILE_NOT_FOUND {
+          description "source not available.";
+        }
+        enum APPLICATION_ERROR {
+          description "Application related errors";
+        }
+        enum TIMEOUT {
+          description "Timeout waiting for download";
+        }
+      }
+
+      description
+        "Status of finished operation execution";
+    }
+    leaf error-message {
+      when "../status != 'COMPLETED'";
+      type string;
+
+      description
+        "Detailed description of faulty situation";
+    }
+
+  }
+
+  notification install-event {
+    description "Notification event structure for installation completion";
+    leaf slot-name {
+      type leafref {
+        path "/software-inventory/software-slot/name";
+      }
+
+      description
+        "Name of the slot to which software was installed.";
+    }
+    leaf status {
+      type enumeration {
+        enum COMPLETED {
+          description
+            "Operation completed succesfully";
+        }
+        enum FILE_ERROR {
+          description "operation on the file resulted in in error, disk failure, not enough disk space,
+                      incompatible file format";
+        }
+        enum INTEGRITY_ERROR {
+          description "file is corrupted";
+        }
+        enum APPLICATION_ERROR {
+          description "operation failed due to internal reason";
+        }
+      }
+
+      description
+        "Status of finished operation execution";
+    }
+    leaf error-message {
+      when "../status != 'COMPLETED'";
+      type string;
+
+      description
+        "Detailed description of faulty situation";
+    }
+  }
+
+  notification activation-event {
+    description "Notification event structure for activation completion";
+    leaf slot-name {
+      type leafref {
+        path "/software-inventory/software-slot/name";
+      }
+
+      description
+        "Name of the slot which was activated";
+    }
+
+    leaf status {
+      type enumeration {
+        enum COMPLETED {
+          description
+            "Operation completed succesfully";
+        }
+        enum APPLICATION_ERROR {
+          description
+            "Operation finished with error, more details can by found in error-message";
+        }
+      }
+
+      description
+        "Status of finished operation execution";
+    }
+    leaf return-code {
+      type uint8;
+
+      description
+        "status code return when the software is tried to activate";
+    }
+    leaf error-message {
+      when "../status != 'COMPLETED'";
+      type string;
+
+      description
+        "Detailed description of faulty situation";
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-supervision.yang b/data-model/yang/published/xran/xran-supervision.yang
new file mode 100644 (file)
index 0000000..72bfb1d
--- /dev/null
@@ -0,0 +1,103 @@
+module xran-supervision {\r
+  yang-version 1.1;\r
+  namespace "urn:xran:supervision:1.0";\r
+  prefix "xran-supervision";\r
+\r
+  import ietf-yang-types {\r
+    prefix yang;\r
+  }\r
+\r
+  organization "xRAN Forum";\r
+\r
+  contact\r
+    "www.xran.org";\r
+\r
+  description\r
+    "This module defines the configuration data and supervision RPCs that are\r
+    used by the NETCONF client and NETCONF server to detect loss of NETCONF\r
+    connectivity.\r
+\r
+    Copyright 2018 the xRAN Forum.\r
+\r
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+    POSSIBILITY OF SUCH DAMAGE.\r
+\r
+    Redistribution and use in source and binary forms, with or without\r
+    modification, are permitted provided that the following conditions are met:\r
+\r
+    * Redistributions of source code must retain the above copyright notice,\r
+    this list of conditions and the above disclaimer.\r
+    * Redistributions in binary form must reproduce the above copyright notice,\r
+    this list of conditions and the above disclaimer in the documentation\r
+    and/or other materials provided with the distribution.\r
+    * Neither the Members of the xRAN Forum nor the names of its\r
+    contributors may be used to endorse or promote products derived from\r
+    this software without specific prior written permission.";\r
+\r
+  revision "2018-07-20" {\r
+    description\r
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.\r
+\r
+      This version of the model supports v01.00 of the corrsponding xRAN\r
+      M-Plane Specification.";\r
+    reference "XRAN-FH.MP.0-v01.00";\r
+  }\r
+\r
+  rpc supervision-watchdog-reset {\r
+    description\r
+      "rpc to reset the watchdog timer";\r
+    input {\r
+\r
+      leaf supervision-notification-interval {\r
+        type uint16;\r
+        units seconds;\r
+        default 60;\r
+        description\r
+          "The interval in seconds at which supervision notifications are sent.\r
+          If not specified the default value of 60 seconds shall apply.";\r
+      }\r
+      leaf guard-timer-overhead {\r
+        type uint16;\r
+        units seconds;\r
+        default 10;\r
+        description\r
+          "This is overhead added to the supervision timer used to calculate the\r
+           supervision wathcdog timer. i.e.,\r
+\r
+           supervision timer = notification timer + guard-timer-overhead\r
+\r
+           If not specified the default value of 10 seconds shall apply.\r
+\r
+           Failure to send this rpc again within the timeout sets the radio into\r
+           'loss of supervision' state.\r
+\r
+           NOTE - The supervision timer MUST not be less that the confimed\r
+           timeout timer (when the feature is supported).\r
+\r
+           This type of constraint (using an RPCs input) cannot be formally\r
+           expressed in YANG.";\r
+      }\r
+    }\r
+  }\r
+\r
+  notification supervision-notification {\r
+    description\r
+      "Notification to indicate that NETCONF management interface is up\r
+      and also indicate the values of the timers for this NETCONF session";\r
+\r
+    leaf next-update-at {\r
+      type yang:date-and-time;\r
+      description\r
+        "Indicates the time when the next supervision notification is expected.";\r
+    }\r
+  }\r
+}\r
diff --git a/data-model/yang/published/xran/xran-sync.yang b/data-model/yang/published/xran/xran-sync.yang
new file mode 100644 (file)
index 0000000..e38b9be
--- /dev/null
@@ -0,0 +1,662 @@
+module xran-sync {
+  yang-version 1.1;
+  namespace "urn:xran:sync:1.0";
+  prefix "xran-sync";
+
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines synchronization mechanism for the xRAN Radio Unit.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  typedef geographic-coordinate-degree {
+           type decimal64 {
+             fraction-digits 8;
+           }
+           description
+             "Decimal degree (DD) used to express latitude and longitude
+              geographic coordinates.";
+       }
+
+  feature GNSS {
+    description
+      "This feature indicates that the RU supports integrated GNSS functionality.";
+  }
+
+  container sync {
+    description
+      "Main containter for sync related parameters";
+
+    container sync-status {
+      config false;
+
+      description
+        "Object of this class provides synchronization state of the module.";
+
+      leaf sync-state {
+        type enumeration {
+          enum LOCKED {
+            description
+              "RU is in the locked mode, as defined in ITU-T G.810";
+          }
+          enum HOLDOVER {
+            description
+              "RU clock is in holdover mode";
+          }
+          enum FREERUN {
+            description
+              "RU clock isn’t locked to an input reference, and is not in the holdover mode";
+          }
+        }
+        mandatory true;
+        description
+          "State of DU synchronization";
+      }
+
+      list supported-reference-types {
+        key item;
+        min-elements 1;
+        description
+          "Type of a synchronization supported source.";
+        leaf item {
+          type enumeration {
+            enum GNSS {
+              description
+                "GPS can be taken as a synchronization source";
+            }
+            enum PTP {
+              description
+                "Precision Time Protocol can be taken as a synchronization source";
+            }
+            enum SYNCE {
+              description
+                "Synchronous Ethernet can be taken as a synchronization source";
+            }
+          }
+          mandatory true;
+
+          description
+            "supported reference-type";
+        }
+      }
+    }
+
+    container sync-capability {
+      config false;
+
+      description
+        "Object of this class provides synchronization capabilities of the module.";
+
+      leaf sync-t-tsc {
+        type enumeration {
+          enum STANDARD {
+            description
+              "Standard accuracy for synchronization is supported by the device";
+          }
+          enum ENCHANCED {
+            description
+              "Enchanced accuracy for synchronization is supported by the device";
+          }
+        }
+        mandatory true;
+        description
+          "This will provide information about T-TSC capability";
+
+        reference "T-TSC: ITU-T G.8275.1/Y.1369.1";
+      }
+    }
+
+    container ptp-config {
+      description
+        "This MO defines configuration of Precise Time Protocol.";
+      leaf domain-number {
+        type uint8;
+        default 24;
+        description
+          "This parameter indicates Domain Number for PTP announce messages.";
+      }
+
+      leaf multicast-mac-address {
+        type enumeration {
+          enum FORWARDABLE {
+            description
+              "means, that PTP shall use 01-80-C2-00-00-0E destination MAC address";
+          }
+          enum NONFORWARDABLE {
+            description
+              "means, that PTP shall use 01-1B-19-00-00-00 destination MAC address";
+          }
+        }
+        default FORWARDABLE;
+        description
+          "The parameter defines destination MAC address, used by the DU in the egress PTP messages.";
+      }
+
+      list accepted-clock-classes {
+        key clock-classes;
+        leaf clock-classes {
+          type uint8;
+          description
+            "PTP Clock Class accepted by the RU";
+        }
+        description
+          "Contains list of PTP acceptable Clock Classes, sorted in the descending order.";
+      }
+
+      leaf delay-asymmetry {
+        type int16 {
+          range -10000..10000;
+        }
+        default 0;
+        description
+          "Defines static phase error in the recovered PTP timing signal to be compensated at the RU.
+          The error is defined in units of nanoseconds in the range ±10 000 ns.";
+      }
+    }
+
+    container ptp-status {
+      description
+        "ptp status container";
+      leaf reporting-period {
+        type uint8;
+        default 10;
+        description
+          "This parameter defines minimum period in seconds between reports,
+          sent by the NETCONF Client, for parameters in this container.";
+      }
+      leaf lock-state {
+        type enumeration {
+          enum LOCKED {
+            description
+              "The integrated ordinary clock is synchronizing to the reference, recovered from PTP flow";
+          }
+          enum UNLOCKED {
+            description
+              "The integrated ordinary clock is not synchronizing to the reference, recovered from PTP flow";
+          }
+        }
+        config false;
+        description
+          "This parameter indicates, whether the integrated ordinary clock is
+          synchronizing to the reference, recovered from PTP signal.
+          The exact definition when to indicate locked or unlocked is up to specific
+          implementation.";
+      }
+
+      leaf clock-class {
+        type uint8;
+        config false;
+        description
+          "This parameter contains the clock class of the clock, controlled by the RU";
+      }
+
+      leaf clock-identity {
+        type string {
+          length 18;
+          pattern "0[xX][0-9a-fA-F]";
+        }
+        config false;
+        description
+          "This parameter contains identity of the clock,
+            according to IEEE 1588-2008 defintion, controlled by the RU.
+          The string shall be formatted as an 8-octet hex value with the “0x” prefix.";
+      }
+
+         leaf partial-timing-supported {
+           type boolean;
+
+               description
+                 "Provides information wheter G.8275.2 (partial timing support from network) is supported.";
+         }
+
+      list sources {
+        key local-port-number;
+        config false;
+
+        description
+          "Synchronisation sources";
+
+        leaf local-port-number {
+          type uint16;
+      // fixme - change to a leafref once interface design is agreed
+          description
+            "This is reference to portNumber of ExternalEthernetPort to identify the port,
+            where the PTP signal is located.";
+        }
+
+        leaf state {
+          type enumeration {
+            enum PARENT {
+              description
+                "Indicates that this source is the current master clock, i.e. the clock,
+                which the clock, controlled by the Netconf Server, is synchronized to";
+            }
+            enum OK {
+              description
+                "Indicates that this source is an alternate master, which the clock,
+                controlled by the Netconf Server, can potentially synchronize to,
+                i.e. clock class and priority, announced by the master clock is lower,
+                compared to those of the clock, controlled by the Netconf Server,
+                and and the clock class is accepted";
+            }
+            enum NOK {
+              description
+                "Indicates that this source is an alternate master, which the clock,
+                controlled by the Netconf Server, has an operational connection to,
+                but the class or priority of the master clock is higher or equal
+                to those of the clock, controlled by the Netconf Server,
+                or the clock class is not accepted";
+            }
+            enum DISABLED {
+              description
+                "Indicates that this source is an alternate master, which the clock,
+                controlled by the Netconf Server, has no operational connection to";
+            }
+          }
+          description
+            "This parameter indicates status of the PTP source";
+        }
+
+        leaf two-step-flag {
+          type boolean;
+          description
+            "This parameter reflects status of the twoStepFlag attribute in Sync messages,
+            received from the PTP source.";
+        }
+
+        leaf leap61 {
+          type boolean;
+          description
+            "This parameter reflects status of the leap61 flag in Announce messages,
+            received from the PTP source.
+            When true, the last minute of the current UTC day contains 61 seconds.";
+        }
+
+        leaf leap59 {
+          type boolean;
+          description
+            "This parameter reflects status of the leap59 flag in Announce messages,
+            received from the PTP source.
+            When true, the last minute of the current UTC day contains 59 seconds.";
+        }
+
+        leaf current-utc-offset-valid {
+          type boolean;
+          description
+            "This parameter reflects status of the currentUtcOffsetValid flag in
+            Announce messages, received from the PTP source.
+            When true, the current UTC offset is valid.";
+        }
+
+        leaf ptp-timescale {
+          type boolean;
+          description
+            "This parameter reflects status of the ptpTimescale flag in Announce
+            messages, received from the PTP source.
+
+            When set, the clock timescale of the grandmaster clock is PTP;
+            otherwise, the timescale is ARB (arbitrary)";
+        }
+
+        leaf time-traceable {
+          type boolean;
+          description
+            "This parameter reflects status of the timeTraceable flag in Announce
+            messages, received from the PTP source.
+
+            When true, the timescale and the currentUtcOffset are traceable to a
+            primary reference";
+        }
+
+        leaf frequency-traceable {
+          type boolean;
+          description
+            "This parameter reflects status of the frequencyTraceable flag in
+            Announce messages, received from the PTP source.
+
+            When true, the frequency determining the timescale is traceable to a
+            primary reference";
+        }
+
+        leaf source-clock-identity {
+          type string {
+            length 18;
+            pattern "0[xX][0-9a-fA-F]";
+          }
+          description
+            "This parameter reflects value of the sourceClockIdentity attribute in
+            Announce messages, received from the PTP source.
+
+            The string shall be formatted as an 8-octet hex value with the “0x”
+            prefix.";
+        }
+
+        leaf source-port-number {
+          type uint16;
+          description
+            "This parameter reflects value of the sourcePortNumber attribute in
+            Announce messages, received from the PTP source.";
+        }
+
+        leaf current-utc-offset {
+          type int16;
+          description
+            "The offset between TAI and UTC when the epoch of the PTP system is
+            the PTP epoch, i.e., when ptp-timescale is TRUE; otherwise, the value
+            has no meaning";
+        }
+
+        leaf priority1 {
+          type int8;
+          description
+            "This parameter reflects value of the priority1 attribute in Announce
+            messages, received from the PTP source.";
+        }
+
+        leaf clock-class {
+          type int8;
+          description
+            "This parameter reflects value of the clockClass attribute in
+            Announce messages, received from the PTP source.";
+        }
+
+        leaf clock-accuracy {
+          type int8;
+          description
+            "This parameter reflects value of the clockAccuracy attribute in
+            Announce messages, received from the PTP source.";
+        }
+
+        leaf offset-scaled-log-variance {
+          type uint16;
+          description
+            "This parameter reflects value of the offsetScaledLogVariance
+            attribute in Announce messages, received from the PTP source.";
+        }
+
+        leaf priority2 {
+          type uint8;
+          description
+            "This parameter reflects value of the priority2 attribute in Announce
+            messages, received from the PTP source.";
+        }
+
+        leaf grandmaster-clock-identity {
+          type string;
+          description
+            "This parameter reflects value of the grandmasterClockIdentity
+            attribute in Announce messages, received from the PTP source.
+
+            The string shall be formatted as an 8-octet hex value with the “0x”
+            prefix.";
+        }
+
+        leaf steps-removed {
+          type uint16;
+          description
+            "This parameter reflects value of the stepsRemoved attribute in
+            Announce messages, received from the PTP source.
+
+            It indicates the number of communication paths traversed
+            between the local clock and the grandmaster clock.";
+        }
+
+        leaf time-source {
+          type uint8;
+          description
+            "This parameter reflects value of the timeSource attribute in
+            Announce messages, received from the PTP source.";
+        }
+      }
+    }
+
+    container synce-status {
+      description
+        "SyncE status container";
+
+      leaf reporting-period {
+          type uint8;
+          default 10;
+          description
+            "This parameter defines minimum period in seconds between reports,
+             sent by the NETCONF client, for parameters in this container.";
+      }
+
+      leaf lock-state {
+        type enumeration {
+          enum LOCKED {
+            description
+              "The integrated ordinary clock is synchronizing to the reference, recovered from SyncE signal";
+          }
+          enum UNLOCKED {
+            description
+              "The integrated ordinary clock is not synchronizing to the reference, recovered from SyncE signal";
+          }
+        }
+        config false;
+        description
+          "This parameter indicates, whether the integrated ordinary clock is
+          synchronizing to the reference, recovered from SyncE signal.
+
+          The exact definition when to indicate locked or unlocked is up to
+          specific implementation.";
+      }
+
+      list sources {
+        key local-port-number;
+        config false;
+        leaf local-port-number {
+          type uint16;
+      //fixme - change to leafref once interfaces ae agreed
+          description
+            "This is reference to portNumber of ExternalEthernetPort to identify
+            the port, where the SyncE signal is located.";
+        }
+
+        leaf state {
+          type enumeration {
+            enum PARENT {
+              description
+                "Indicates that this source is the current master clock, i.e. the clock,
+                which the clock, controlled by the Netconf Server, is synchronized to";
+            }
+            enum OK {
+              description
+                "Indicates that this source is an alternate master, which the clock,
+                controlled by the Netconf Server, can potentially synchronize to,
+                i.e. clock class and priority, announced by the master clock is lower,
+                compared to those of the clock, controlled by the Netconf Server,
+                and and the clock class is accepted";
+            }
+            enum NOK {
+              description
+                "Indicates that this source is an alternate master, which the clock,
+                controlled by the Netconf Server, has an operational connection to,
+                but the class or priority of the master clock is higher or equal
+                to those of the clock, controlled by the Netconf Server,
+                or the clock class is not accepted";
+            }
+            enum DISABLED {
+              description
+                "Indicates that this source is an alternate master, which the clock,
+                controlled by the Netconf Server, has no operational connection to";
+            }
+          }
+          description
+            "This parameter indicates status of the SyncE source";
+        }
+
+        leaf quality-level {
+          type uint8 {
+            range 0..15;
+          }
+          description
+            "This parameter contains value of the SSM clock quality level,
+            received in SSM messages from the SyncE source.";
+        }
+        min-elements 1;
+        description
+          "This parameter contains characteristics of SyncE sources of the clock, controlled by the RU.";
+      }
+    }
+    container gnss-state {
+      if-feature GNSS;
+      config false;
+      description
+        "Provides information about state of gps receiver";
+      leaf name {
+        type string {
+          length "1..255";
+        }
+        description
+        "A name that is unique across the RU that identifies a GNSS instance.
+        This name may be used in fault management to refer to a
+        fault source or affected object";
+      }
+      leaf gnss-status {
+        type enumeration {
+          enum SYNCHRONIZED {
+            description "GNSS functionality is synchronized";
+          }
+          enum ACQUIRING-SYNC {
+            description "GNSS functionality is acquiring sync";
+          }
+          enum ANTENNA-DISCONNECTED {
+            description "GNSS functionality has its antenna disconnected";
+          }
+          enum BOOTING {
+            description "GNSS functionality is booting";
+          }
+          enum ANTENNA-SHORT-CIRCUIT {
+            description "GNSS functionality has an antenna short circuit";
+          }
+        }
+        description "when available, indicates the status of the gnss receiver.";
+      }
+      container gnss-data {
+        when "../gnss-status='SYNCHRONIZED'";
+        description
+          "GPS data contained";
+        leaf satellites-tracked {
+          type uint8;
+          description "Number of satellites tracked";
+        }
+        container location {
+          description
+            "Containes information about geo location";
+          leaf altitude {
+            type int64;
+            units millimeter;
+            description
+              "Distance above the sea level.";
+          }
+          leaf latitude {
+            type geographic-coordinate-degree {
+              range "-90..90";
+            }
+            description
+              "Relative position north or south on the Earth's surface.";
+          }
+          leaf longitude {
+            type geographic-coordinate-degree {
+              range "-180..180";
+            }
+            description
+              "Angular distance east or west on the Earth's surface.";
+          }
+        }
+      }
+    }
+  }
+
+  //notification statement
+  notification synchronization-state-change {
+    description
+         "Notification used to inform about synchronization state change";
+
+    leaf sync-state {
+      type leafref {
+        path "/sync/sync-status/sync-state";
+      }
+      description
+        "State of RU synchronization is notified at state change";
+    }
+  }
+
+  notification ptp-state-change {
+    description
+         "Notification used to inform about ptp synchronization state change";
+
+    leaf ptp-state{
+      type leafref{
+        path "/sync/ptp-status/lock-state";
+      }
+      description
+        "ptp-state-change notification is signalled from RU at state change";
+    }
+  }
+  notification synce-state-change {
+    description
+         "Notification used to inform about synce synchronization state change";
+
+    leaf synce-state{
+      type leafref{
+        path "/sync/synce-status/lock-state";
+      }
+      description
+        "synce-state change notification is signalled from RU at state change";
+    }
+  }
+  notification gnss-state-change {
+    if-feature GNSS;
+    description
+         "Notification used to inform about gnss synchronization state change";
+
+    leaf gnss-state{
+      type leafref{
+        path "/sync/gnss-state/gnss-status";
+      }
+      description
+        "gnss-state-change notification is signalled from RU at state change";
+    }
+  }
+
+}
diff --git a/data-model/yang/published/xran/xran-transceiver.yang b/data-model/yang/published/xran/xran-transceiver.yang
new file mode 100644 (file)
index 0000000..df0cb36
--- /dev/null
@@ -0,0 +1,369 @@
+module xran-transceiver {
+  yang-version 1.1;
+  namespace "urn:xran:transceiver:1.0";
+  prefix "xran-transceiver";
+
+  import xran-interfaces {
+    prefix "xran-int";
+  }
+
+  import ietf-interfaces {
+    prefix "if";
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the operational state data for SFP transceivers used in
+    an xRAN Radio Unit.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  container port-transceivers {
+    description
+      "Container for Port transceiver information.
+      Leaf nodes providing  parameters status and diagnostic
+      information for pluggable transceiver module (like SFP,
+      SFP+, SFP28)";
+    list port-transceiver-data {
+      key "interface-name port-number";
+      description "data recovered from port transceivers";
+      leaf interface-name {
+        type leafref {
+          path "/if:interfaces/if:interface/if:name";
+        }
+        description "Name of interface";
+      }
+      leaf port-number {
+        type leafref {
+          path "/if:interfaces/if:interface[if:name = current()/../interface-name]/xran-int:port-reference/xran-int:xran-port-number";
+        }
+        description
+        "A number which identifies a port. In case of SFP/SFP+
+        port, port number value is 0 to N-1 where N is number of ports
+        in the device. Numbers 0 to N-1 are assigned to ports in order
+        following order of labels on the device (labels for ports are
+        not necessarily numbers starting from zero)";
+      }
+
+      leaf name {
+        type string {
+          length "1..255";
+        }
+        description
+          "A name that is unique across the RU that identifies a transceiver instance.
+          This name may be used in fault management to refer to a fault source
+          or affected object";
+      }
+
+      leaf present {
+        type boolean;
+        config false;
+        mandatory true;
+        description
+          "Indicates if pluggable transceiver module is present.";
+      }
+
+      leaf vendor-id {
+        type string {
+          length 1..16;
+        }
+        config false;
+        description
+          "Name of the transciever vendor Full name of transceiver vendor,
+          that contains ASCII characters, left-aligned with
+          any padding on the right with ASCII spaces (20h), or ASCII nul
+          (00h) removed, and ASCII less-than (3Ch) replaced with ASCII
+          open-brace (7Bh) and ASCII more-than (3Eh) replaced with ASCII
+          close-brace (7Dh).
+
+          Optional node included when the NETCONF Server has determined
+          the vendor ID.";
+      }
+
+      leaf vendor-part {
+        type string {
+          length 1..16;
+        }
+        config false;
+        description
+          "Transceiver vendors part number, that contains ASCII characters,
+          left-aligned with any padding on the right with ASCII spaces
+          (20h), or ASCII nul (00h) removed, and ASCII less-than (3Ch)
+          replaced with ASCII open-brace (7Bh) and ASCII more-than (3Eh)
+          replaced with ASCII close-brace (7Dh).
+
+          Optional node included when the NETCONF Server has determined
+          the vendor part number.";
+      }
+
+      leaf vendor-rev {
+        type string {
+          length 1..2;
+        }
+        config false;
+        description
+          "Transceiver vendors revision number. 2-octet field that
+          contains ASCII characters.
+
+          Optional node included when the NETCONF Server has determined
+          the vendor revision number";
+      }
+
+      leaf serial-no {
+        type string {
+          length 1..16;
+        }
+        config false;
+        description
+          "Transceiver serial number encoded using ASCII characters,
+          left-aligned with any padding on the right with ASCII spaces
+          (20h), or ASCII nul (00h) removed, and ASCII less-than (3Ch)
+          replaced with ASCII open-brace (7Bh) and ASCII more-than (3Eh)
+          replaced with ASCII close-brace (7Dh).
+
+          Optional node included when the NETCONF Server has determined
+          the serial number.";
+      }
+
+      leaf SFF8472-compliance-code {
+        type enumeration {
+          enum diagnostics-undefined {
+            description "undefined compliance code";
+          }
+          enum rev9.3-diagnostics {
+            description "diagnostics published 08-01-02";
+          }
+          enum rev9.5-diagnostics{
+            description "diagnostics published 06-01-04";
+          }
+          enum rev10.2-diagnostics{
+            description "diagnostics published 06-01-07";
+          }
+          enum rev11.0-diagnostics{
+            description "diagnostics published 05-21-10";
+          }
+          enum rev11.3-diagnostics{
+            description "diagnostics published 06-11-13";
+          }
+          enum rev11.4-diagnostics{
+            description "diagnostics published 07-24-14";
+          }
+          enum rev12.0-diagnostics{
+            description "diagnostics published 08-28-14";
+          }
+        }
+        config false;
+        description
+          "Indication of which feature set(s) are
+          implemented in the transceiver from Byte 94 of address A0h
+          https://ta.snia.org/higherlogic/ws/public/download/294/SFF-8472.PDF";
+
+          // FIXME is this optional or mandatory?
+        reference "https://ta.snia.org/higherlogic/ws/public/download/294/SFF-8472.PDF";
+      }
+
+       leaf connector-type {
+        type enumeration {
+          enum unknown {
+            description "encoded as 00h in Table 4-3 of SFF-8024";
+          }
+          enum subscrber-connector {
+            description "encoded as 01h in Table 4-3 of SFF-8024";
+          }
+          enum fiber-jack {
+            description "encoded as 06h in Table 4-3 of SFF-8024";
+          }
+          enum lucent-connector {
+            description "encoded as 07h in Table 4-3 of SFF-8024";
+          }
+          enum mt-rj {
+            description "encoded as 08h in Table 4-3 of SFF-8024";
+          }
+          enum multiple-optical {
+            description "encoded as 09h in Table 4-3 of SFF-8024";
+          }
+          enum sg {
+            description "encoded as 0Ah in Table 4-3 of SFF-8024";
+          }
+          enum optical-pigtail {
+            description "encoded as 0Bh in Table 4-3 of SFF-8024";
+          }
+          enum multi-fiber-parralel-optic-1x12 {
+            description "encoded as 0Ch in Table 4-3 of SFF-8024";
+          }
+          enum multi-fiber-parralel-optic-2x16 {
+            description "encoded as 0Dh in Table 4-3 of SFF-8024";
+          }
+          enum hssdc_2{
+            description "encoded as 20h in Table 4-3 of SFF-8024";
+          }
+          enum copper-pigtail{
+            description "encoded as 21h in Table 4-3 of SFF-8024";
+          }
+          enum rj45{
+            description "encoded as 22h in Table 4-3 of SFF-8024";
+          }
+          enum no-separable-connector{
+            description "encoded as 23h in Table 4-3 of SFF-8024";
+          }
+          enum mxc-2x16{
+            description "encoded as 24h in Table 4-3 of SFF-8024";
+          }
+        }
+        config false;
+        // TOCHECK: Remove any enumerations which are not applicable
+        description
+          "Connector-type indicates the external optical or electrical cable
+          connector provided as the media interface as defined in the connector
+          types derived from table 4-3 in SFF-8024.";
+          // FIXME is this optional or mandatory?
+        reference "https://ta.snia.org/higherlogic/ws/public/document?document_id=944";
+      }
+
+      leaf nominal-bitrate {
+        type uint32;
+        config false;
+        description
+          "Nominal bitrate in Mb/s (10^6 bits per second).
+          If needed actual value is rounded to nearest integer.
+
+          Optional node included when the NETCONF Server has determined
+          the nominal bit rate.";
+      }
+
+      leaf low-bitrate-margin {
+        type uint8;
+        config false;
+        description
+          "Minimum supported bitrate as percentage of nominal bitrate
+          below nominal bitrate.
+
+          Optional node included when the NETCONF Server has determined
+          the low bit rate margin";
+      }
+
+      leaf high-bitrate-margin {
+        type uint8;
+        config false;
+        description
+          "Maximum supported bitrate as percentage of nominal bitrate
+          above nominal bitrate.
+
+          Optional node included when the NETCONF Server has determined
+          the high bitrate margin.";
+      }
+
+      leaf rx-power-type {
+        type enumeration {
+          enum oma {
+            description "oma = optical modulation amplitude";
+          }
+          enum avp{
+            description "avp = average power";
+          }
+        }
+        config false;
+        description
+          "Receieved power measurement type
+          oma = optical modulation amplitude
+          avp = average power";
+          // FIXME is this optional or mandatory?
+      }
+
+      leaf rx-power {
+        type decimal64{
+          fraction-digits 4;
+        }
+        config false;
+        description
+          "Measured RX input power in mW.
+
+          Optional node included when the NETCONF Server has determined
+          the measured RX power.";
+      }
+
+      leaf tx-power {
+        type decimal64{
+          fraction-digits 4;
+        }
+        config false;
+        description
+          "Measured coupled TX output power in mW.
+
+          Optional node included when the NETCONF Server has determined
+          the measured coupled TX power.";
+      }
+
+      leaf tx-bias-current {
+        type decimal64{
+          fraction-digits 4;
+        }
+        config false;
+        description
+          "Measured transmitter laser bias current in mA.
+
+          Optional node included when the NETCONF Server has determined
+          the tx bias current.";
+      }
+
+      leaf voltage {
+        type decimal64{
+          fraction-digits 4;
+        }
+        config false;
+        description
+          "Internally measured supply voltage in mV.
+
+          Optional node included when the NETCONF Server has determined
+          the internally measured voltage.";
+      }
+
+      leaf temperature {
+        type decimal64 {
+          fraction-digits 4;
+        }
+        config false;
+        description
+          "Internally measured module temperature in degrees Celcius.";
+          // FIXME is this optional or mandatory?
+      }
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-troubleshooting.yang b/data-model/yang/published/xran/xran-troubleshooting.yang
new file mode 100644 (file)
index 0000000..587369f
--- /dev/null
@@ -0,0 +1,95 @@
+module xran-troubleshooting {
+  yang-version 1.1;
+  namespace "urn:xran:troubleshooting:1.0";
+  prefix "xran-trblsht";
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the operations for the troubleshooting logs on the RU.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+
+  grouping troubleshooting-status-grouping {
+    description "grouping used for troubleshooting RPCs";
+    leaf status {
+      type enumeration {
+        enum SUCCESS {
+          description "rpc completed correctly";
+        }
+        enum FAILURE {
+          description "rpc failed";
+        }
+      }
+      description "result of rpc operation";
+    }
+    leaf failure-reason {
+      when "../status = 'FAILURE'";
+      type string;
+      description "free form text description why error occurred";
+    }
+  }
+
+  rpc start-troubleshooting-logs {
+    description
+      "Management plane triggered to start collecting the troubleshooting logs files of RU.";
+      output {
+        uses troubleshooting-status-grouping;
+      }
+  }
+
+  rpc stop-troubleshooting-logs {
+    description
+      "Management plane triggered to stop collecting the troubleshooting logs files of RU.";
+      output {
+        uses troubleshooting-status-grouping;
+      }
+  }
+
+  notification troubleshooting-log-generated {
+    description
+      "When new log file generated, send this notification.";
+    leaf-list log-file-name {
+      type string;
+      description
+        "The list of troubleshooting log file names on the RU.";
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-udp-echo.yang b/data-model/yang/published/xran/xran-udp-echo.yang
new file mode 100644 (file)
index 0000000..cf1d725
--- /dev/null
@@ -0,0 +1,88 @@
+module xran-udp-echo {
+  yang-version 1.1;
+  namespace "urn:xran:udpecho:1.0";
+  prefix "xran-echo";
+
+  import xran-interfaces {
+    prefix "xran-int";
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module covers off aspects of llss-CU to RU interface transport
+    verification for UDP/IP based C/U plane connections based on UDP Echo.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  container udp-echo-configuration {
+    if-feature xran-int:UDPIP-BASED-CU-PLANE;
+    description "container for the configuration of udp echo";
+
+    leaf enable-udp-echo {
+      type boolean;
+      default false;
+      description
+        "whether RU's UDP ech server is enabled";
+    }
+
+    leaf dscp-config {
+      type enumeration {
+        enum REFLECTIVE {
+          description
+            "DSCP in echoed datagrams is copied from received datagram";
+        }
+        enum EF {
+          description
+            "DSCP in echoed datagrams is always be set to expeditied
+            forwarding Per Hop Behaviour.";
+        }
+      }
+      default EF;
+      description "configuration of UDP echo DSCP";
+    }
+
+    leaf echo-replies-transmitted {
+      type uint32;
+      config false;
+      description
+        "The total number of UDP echo replies transmitted by the RU.";
+    }
+  }
+}
diff --git a/data-model/yang/published/xran/xran-uplane-conf.yang b/data-model/yang/published/xran/xran-uplane-conf.yang
new file mode 100644 (file)
index 0000000..5ca7e3c
--- /dev/null
@@ -0,0 +1,948 @@
+module xran-uplane-conf {
+  yang-version 1.1;
+  namespace "urn:xran:uplane-conf:1.0";
+  prefix "xran-uplane-conf";
+
+  import xran-processing-element {
+    prefix "xran-pe";
+  }
+
+  import ietf-interfaces {
+    prefix "if";
+  }
+
+  import xran-module-cap {
+    prefix "mcap";
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the module capabilities for
+    the xRAN Radio Unit U-Plane configuration.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  grouping  eaxc {
+    description
+      "One eAxC identifier (eAxC ID) comprises a band and sector
+      identifier (BandSector_ID), a component-carrier identifier (CC_ID) and a
+      spatial stream identifier (RU_Port_ID).
+
+      In this version of the specification, one eAxC contains only one spatial
+      stream (i.e. one beam per subcarrier) at a time.
+
+      Bit allocation is subdivided as follows:
+      *    CU_Port_ID: Used to differentiate processing units at lls-CU
+      *    BandSector_ID: Aggregated cell identifier
+      *    CC_ID: distinguishes Carrier Components
+      *    RU_Port_ID: Used to differentiate spatial streams or beams on the RU
+
+      The bitwidth of each of the above fields is variable this model is supposed to check
+        if we are occpying bits continuously but we do not have to occupy all 16 bits";
+
+
+    leaf cu-port-bitmask {
+      type uint16;
+         mandatory true;
+      description
+        "mask for eaxc-id bits used to encode CU Port ID";
+    }
+
+    leaf band-sector-bitmask {
+      type uint16;
+      mandatory true;
+      description
+        "mask for eaxc-id bits used to encode the band sector ID";
+    }
+
+    leaf ccid-bitmask {
+      type uint16;
+         mandatory true;
+      description
+        "mask for eaxc-id bits used to encode the component carrier id";
+    }
+
+    leaf ru-port-bitmask {
+      type uint16;
+         mandatory true;
+      description
+        "mask for eaxc-id bits used to encode the RU Port ID";
+    }
+
+    leaf eaxc-id {
+      type uint16;
+         mandatory true;
+      description
+        "encoded value of eaxcid to be read by CU-Plane";
+    }
+  }
+
+  container user-plane-configuration {
+    description "top level container for user plane configuration";
+
+    container compression {
+         description
+           "Container which consists of global configurable parameters for compression";
+
+      leaf compression-type {
+        type enumeration {
+          enum STATIC {
+            description
+              "Indicates that static compression method will be used (both compression and IQ bitwidth)";
+          }
+
+          enum DYNAMIC {
+            description
+              "Indicates that dynamic compresion method will be used";
+          }
+        }
+               description
+                 "Compression type that lls-CU wants to be supported";
+      }
+
+      leaf bitwidth {
+        when "./../compression-type = 'STATIC'";
+        type uint8;
+        description
+          "Bitwidth to be used in compression";
+      }
+
+      leaf compression-method {
+        when "./../compression-type = 'STATIC'";
+        type enumeration {
+          enum BLOCK_FLOATING_POINT {
+            description
+              "Block floating point compression and decompression will be used";
+          }
+
+          enum BLOCK_SCALING {
+            description
+              "Block scaling compression and decompresion will be used";
+          }
+
+          enum U_LAW {
+            description
+              "u-Law compression and decompresion method will be used";
+          }
+
+          enum BEAMSPACE {
+            description
+              "Beamspace compression and decompression will be used";
+          }
+
+          enum MODULATION {
+            description
+              "Modulation compression and decompression will be used";
+          }
+        }
+           description
+             "Compresion method which can be supported by the RU";
+      }
+    }
+
+    list low-level-tx-links {
+      key name;
+      description
+        "Object model for low-level-tx-link configuration";
+
+      leaf name {
+        type string;
+        description
+          "Unique name of low-level-tx-link object.";
+      }
+
+      leaf processing-element {
+        type leafref {
+          path "/xran-pe:processing-elements/xran-pe:ru-elements/xran-pe:name";
+        }
+        mandatory true;
+        description
+          "Contains name of processing-element to be used as transport by low-level-tx-link";
+      }
+
+      leaf tx-array-carrier {
+        type leafref {
+          path "/user-plane-configuration/tx-array-carriers/name";
+        }
+        mandatory true;
+        description
+          "Contains name of tx-array-carriers MO to be used as transport by low-level-tx-link";
+      }
+
+      leaf low-level-tx-endpoint {
+        type string;
+        must "boolean(../../low-level-tx-endpoints[name = current()])" {
+          error-message "low-level-tx-endpoint you want to set does not exists in /low-level-tx-endpoints/name";
+        }
+        mandatory true;
+        description
+          "Contains name of low-level-tx-endpoints MO to be used as transport by low-level-tx-link";
+      }
+
+      container remote-address {
+        uses eaxc;
+
+        must "( cu-port-bitmask + band-sector-bitmask + ccid-bitmask + ru-port-bitmask ) =
+              '(0 | 1 | 3 | 7 | 15 | 31 | 63 | 127 | 255 | 511 | 1023 | 2047 | 4095 | 8191 | 16383 | 32767 | 65535)'" {
+          error-message "Bitmasks for eaxc-id is badly formatted";
+        }
+
+        description
+          "Contains address of remote TX endpoint served by NETCONF client.";
+      }
+    }
+
+    list low-level-rx-links {
+      key name;
+      description
+        "Object model for low-level-rx-links configuration";
+
+      leaf name {
+        type string;
+
+        description
+          "Unique name of low-level-rx-links object.";
+      }
+
+      leaf processing-element {
+        type leafref {
+          path "/xran-pe:processing-elements/xran-pe:ru-elements/xran-pe:name";
+        }
+        mandatory true;
+        description
+          "Contains name of processing-element to be used as transport by LowLevelTxLink";
+      }
+
+      leaf rx-array-carrier {
+        type leafref {
+          path "/user-plane-configuration/rx-array-carriers/name";
+        }
+        mandatory true;
+
+        description
+          "Contains name of rx-array-carriers MO to be used as transport by low-level-rx-links";
+      }
+
+      leaf low-level-rx-endpoint {
+        type string;
+        must "boolean(../../low-level-rx-endpoints[name = current()])" {
+          error-message "low-level-rx-endpoint you want to set does not exists in /low-level-rx-endpoints/name";
+        }
+        mandatory true;
+
+        description
+          "Contains name of low-level-rx-endpoints MO to be used as transport by low-level-rx-links";
+      }
+
+      container remote-address {
+        uses eaxc;
+
+        must "( cu-port-bitmask + band-sector-bitmask +ccid-bitmask + ru-port-bitmask ) =
+              '(0 | 1 | 3 | 7 | 15 | 31 | 63 | 127 | 255 | 511 | 1023 | 2047 | 4095 | 8191 | 16383 | 32767 | 65535)'" {
+          error-message "Bitmasks for eaxc-id is badly formatted";
+        }
+
+        description
+          "Contains address of remote RX endpoint served by Netconf client.";
+      }
+
+         leaf priority {
+           type enumeration {
+                 enum HIGH {
+                   description
+                            "Means high priority for link";
+                 }
+                 enum LOW {
+                   description
+                            "Means low priority for link";
+                 }
+           }
+
+               description
+                 "Parameter to set priority for this link";
+         }
+    }
+
+    list static-low-level-tx-endpoints {
+      key name;
+      config false;
+      description
+        "Object model for static-low-level-tx-endpoints configuration";
+
+      leaf name {
+        type string;
+
+        description
+          "Unique name of static-low-level-tx-endpoints object.";
+      }
+
+      leaf interface {
+        type string;
+        must "boolean(/if:interfaces/if:interface[if:name = current()])" {
+          error-message "ethernet-interface you want to set does not exists in /interfaces/interface/name";
+        }
+
+        description
+          "Contains name of ietf:interface to be used as transport by low-level-tx-endpoints";
+      }
+
+      leaf array {
+        type leafref {
+          path "/user-plane-configuration/tx-arrays/name";
+        }
+        description
+          "Contains distname of tx-arrays, particular low-level-tx-endpoints is in hardware dependency with.
+          Note: single instance of tx-arrays can be referenced by many instances of low-level-tx-endpoints
+          (e.g. to allow DU to handle multiple fronthauls and multiple component carriers).";
+      }
+    }
+
+    list static-low-level-rx-endpoints {
+      key name;
+      config false;
+      description
+        "Object model for static-low-level-rx-endpoints configuration";
+
+      leaf name {
+        type string;
+
+        description
+          "Unique name of static-low-level-rx-endpoints object.";
+      }
+
+      leaf interface {
+        type string;
+        must "boolean(/if:interfaces/if:interface[if:name = current()])" {
+          error-message "interface you want to set does not exists in /interfaces/interface/name";
+        }
+
+        description
+          "Contains name of ietf:interface to be used as transport by low-level-rx-endpoints";
+      }
+
+      leaf array {
+        type leafref {
+          path "/user-plane-configuration/rx-arrays/name";
+        }
+        description
+          "Contains distname of rx-arrays, particular low-level-rx-endpoints is in hardware dependency with.
+          Note: single instance of rx-arrays can be referenced by many instances of low-level-rx-endpoints
+          (e.g. to allow DU to handle multiple fronthauls and multiple component carriers).";
+      }
+    }
+
+    list low-level-tx-endpoints {
+      key name;
+      description
+        "Object model for low-level-tx-endpoints configuration - augmented static-low-level-tx-endpoints by local-address
+        which cannot be added to static low-level-tx-endpoints as we cannot have modificable element in static object";
+
+      leaf name {
+        type string;
+        must "boolean(../../static-low-level-tx-endpoints[name = current()])" {
+          error-message "name you want to set does not exist in /static-low-level-tx-endpoints/name";
+        }
+
+        description
+          "Unique name of low-level-tx-endpoint object.";
+      }
+
+      container local-address {
+        uses eaxc;
+
+        must "( cu-port-bitmask + band-sector-bitmask + ccid-bitmask + ru-port-bitmask ) =
+              '(0 | 1 | 3 | 7 | 15 | 31 | 63 | 127 | 255 | 511 | 1023 | 2047 | 4095 | 8191 | 16383 | 32767 | 65535)'" {
+          error-message "Bitmasks for eaxc-id is badly formatted";
+        }
+        description
+          "Contains local address of low level TX endpoint offered by Netconf server.";
+      }
+    }
+
+
+    list low-level-rx-endpoints {
+      key name;
+      description
+        "Object model for low-level-rx-endpoint configuration - augmented static-low-level-rx-endpoints by local-address
+        which cannot be added to static low-level-rx-endpoints as we cannot have modificable element in static object";
+
+      leaf name {
+        type string;
+        must "boolean(../../static-low-level-rx-endpoints[name = current()])" {
+          error-message "name you want to set does not exist in /static-low-level-rx-endpoints/name";
+        }
+
+        description
+          "Unique name of low-level-rx-endpoint object.";
+      }
+
+      container local-address {
+        uses eaxc;
+
+        must "( cu-port-bitmask + band-sector-bitmask + ccid-bitmask + ru-port-bitmask ) =
+              '(0 | 1 | 3 | 7 | 15 | 31 | 63 | 127 | 255 | 511 | 1023 | 2047 | 4095 | 8191 | 16383 | 32767 | 65535)'" {
+          error-message "Bitmasks for eaxc-id is badly formatted";
+        }
+
+        description
+          "Contains local address of low level RX endpoint offered by Netconf server.";
+      }
+    }
+
+    list tx-array-carriers {
+      key name;
+      description
+        "Object model for tx-array-carriers configuration";
+
+      leaf name {
+        type string;
+
+        description
+          "Unique name of tx-array-carriers object.";
+      }
+
+      leaf absolute-frequency-center {
+        type uint32;
+        mandatory true;
+        description
+          "Absolute Radio Frequency Channel Number - indirectly indicates RF center carrier frequency of downlink signal.";
+      }
+
+      leaf center-of-channel-bandwidth {
+        type uint64;
+                   units Hz;
+        mandatory true;
+        description
+          "Center frequency of channel bandwidth in Hz. Common for all numerologies.";
+      }
+
+      leaf channel-bandwidth {
+        type uint64;
+        units Hz;
+        mandatory true;
+
+        description
+          "Width of carrier given in Hertz";
+      }
+
+
+      leaf power {
+        type decimal64 {
+          fraction-digits 4;
+        }
+        mandatory true;
+
+        description
+          "Transmission power in dBm. Value applicable to each array element carrier belonging to array carrier.";
+      }
+
+      leaf active {
+        type enumeration {
+          enum INACTIVE {
+                description
+                  "carrier does not provide signal - transmission is disabled";
+              }
+          enum SLEEP{
+                description
+                  "carrier is fully configured and was active but is energy saving mode";
+              }
+          enum ACTIVE{
+                description
+                  "carrier is fully configured and properly providing the signal";
+              }
+        }
+        default INACTIVE;
+
+        description
+          "Indicates if transmission is enabled for this tx-array-carriers. Note that Netconf server uses state parameter
+          to indicate actual state of tx-array-carriers operation. When tx-array-carriers is in sleep status,
+          Netconf server rejects all other operation request to tx-array-carriers object except either request to change from sleep
+          to active status or delete MO operation (see 4.8) to the object.";
+      }
+
+      leaf state {
+        type enumeration {
+          enum DISABLED {
+            description
+              "tx-array-carrier is not active - transmission of signal is disabled.";
+          }
+          enum BUSY {
+            description
+              "tx-array-carrier is processing an operation requested by change of active parameter.
+              When tx-array-carriers is BUSY the transmission of signal is not guaranteed.";
+          }
+          enum READY {
+            description
+              "tx-array-carrier had completed activation operation - is active and transmission of signal is ongoing.";
+          }
+        }
+        config false;
+
+        description
+          "Indicates state of tx-array-carriers activation operation";
+      }
+
+      leaf type {
+        type enumeration {
+          enum NR {
+                description
+                  "5G technology";
+              }
+        }
+        config false;
+
+        description
+          "Type of carrier. Indicates array-carrier technology.";
+      }
+
+      leaf fft-size {
+        type uint32;
+
+        description
+            "The FFT size defines the number of bins used for dividing the window into equal strips, or bins.
+              Hence, a bin is a spectrum sample, and defines the frequency resolution of the window.";
+      }
+
+      leaf downlink-radio-frame-offset {
+        type uint32 {
+          range 0..12288000;
+        }
+        mandatory true;
+
+        description
+          "This parameter is used for offsetting the starting position of 10ms radio frame.
+          Note: The value should have same value within DU to all tx-array-carrierss that have same frequency and bandwidth.
+          Note2: Unit is 1/1.2288e9 Hz and accuracy is 1/4 Tc. Then, its range is calculated 0..12288000.";
+      }
+
+      leaf downlink-sfn-offset {
+        type int16 {
+          range -32768..32767;
+        }
+        mandatory true;
+
+        description
+          "This parameter is used for offsetting SFN value.
+          Unit is in 10ms.
+          Note: The value should have same value within DU to all tx-array-carrierss that have same frequency and bandwidth.";
+      }
+
+      leaf default-scs {
+               type enumeration {
+          enum KHZ_15 {
+           value 0;
+            description
+            "15kHz sub carrier spacing";
+          }
+          enum KHZ_30 {
+            value 1;
+                description
+                  "30kHz sub carrier spacing";
+          }
+          enum KHZ_60 {
+            value 2;
+                description
+                  "60kHz sub carrier spacing";
+          }
+          enum KHZ_120 {
+            value 3;
+                description
+                  "120kHz sub carrier spacing";
+          }
+          enum KHZ_240 {
+            value 4;
+                description
+                  "240kHz sub carrier spacing";
+          }
+          enum KHZ_1_25 {
+            value 12;
+                  description
+                  "1,25kHz sub carrier spacing";
+          }
+          enum KHZ_5 {
+            value 14;
+                description
+                  "5kHz sub carrier spacing";
+          }
+        }
+
+           mandatory true;
+
+        description
+          "Sub-carrier spacing configuration";
+         }
+
+               list scs-specific-config {
+                       key scs;
+                       description
+                               "List of scs-specific configurations";
+                               uses scs-config;
+                       }
+        leaf cp-length {
+          type uint32;
+            description
+              "CP length woud be determined by deployment types that has different
+                delay spread requirements, and/or determined by frequency bands, service type
+                or determined by whether beam forming technology is used or not";
+        }
+      }
+
+    list rx-array-carriers {
+      key name;
+      description
+        "Object model for rx-array-carriers configuration";
+
+               leaf name {
+                 type string;
+            description
+            "Unique name of rx-array-carriers object.";
+      }
+
+
+      leaf absolute-frequency-center {
+        type uint32;
+        mandatory true;
+        description
+         "Absolute Radio Frequency Channel Number - indirectly indicates RF center carrier frequency of downlink signal.";
+      }
+      leaf center-of-channel-bandwidth {
+        type uint64;
+                   units Hz;
+        mandatory true;
+        description
+          "Center frequency of channel bandwidth. Common for all numerologies.";
+      }
+      leaf channel-bandwidth {
+        type uint64;
+        units Hz;
+        mandatory true;
+        description
+          "Width of carrier given in Hertz";
+      }
+
+
+      leaf active {
+        type enumeration {
+          enum INACTIVE {
+                description
+                  "carrier does not provide signal - transmission is disabled";
+              }
+          enum SLEEP{
+                description
+                  "carrier is fully configured and was active but is energy saving mode";
+              }
+          enum ACTIVE{
+                description
+                  "carrier is fully configured and properly providing the signal";
+              }
+        }
+        default INACTIVE;
+        description
+          "Indicates if transmission is enabled for this rx-array-carriers. Note that Netconf server uses state parameter
+          to indicate actual state of rx-array-carriers operation. When rx-array-carriers is in sleep status,
+          Netconf server rejects all other operation request to rx-array-carriers object except either request to change from sleep
+          to active status or delete MO operation (see 4.8) to the object.";
+      }
+
+      leaf state {
+        type enumeration {
+          enum DISABLED {
+            description
+              "rx-array-carrier is not active - transmission of signal is disabled.";
+          }
+          enum BUSY {
+            description
+              "rx-array-carrier is processing an operation requested by change of active parameter.
+              When tx-array-carriers is BUSY the transmission of signal is not guaranteed.";
+          }
+          enum READY {
+            description
+              "rx-array-carrier had completed activation operation - is active and transmission of signal is ongoing.";
+          }
+        }
+        config false;
+
+        description
+          "Indicates state of rx-array-carriers activation operation";
+      }
+
+      leaf type {
+        type enumeration {
+          enum NR {
+                description
+                  "5G technology";
+              }
+        }
+        config false;
+
+        description
+          "Type of carrier. Indicates array-carrier technology.";
+      }
+
+      leaf fft-size {
+        type uint32;
+          description
+            "FFT size";
+      }
+
+      leaf ul-fft-sampling-offset {
+        type uint32;
+            description
+              "uplink FFT sampling offset";
+      }
+
+      leaf n-ta-offset {
+        type uint32;
+        description
+          "Value of configurable N-TA offset";
+      }
+      leaf default-scs {
+           type enumeration {
+          enum KHZ_15 {
+            value 0;
+            description
+              "15kHz sub carrier spacing";
+          }
+          enum KHZ_30 {
+            value 1;
+                description
+                  "30kHz sub carrier spacing";
+          }
+          enum KHZ_60 {
+            value 2;
+                description
+                  "60kHz sub carrier spacing";
+          }
+          enum KHZ_120 {
+            value 3;
+                description
+                  "120kHz sub carrier spacing";
+          }
+          enum KHZ_240 {
+            value 4;
+                description
+                  "240kHz sub carrier spacing";
+          }
+          enum KHZ_1_25 {
+            value 12;
+                  description
+                  "1,25kHz sub carrier spacing";
+          }
+          enum KHZ_5 {
+            value 14;
+                description
+                  "5kHz sub carrier spacing";
+          }
+        }
+        mandatory true;
+
+        description
+          "Sub-carrier spacing configuration";
+         }
+
+         list scs-specific-config {
+               key scs;
+               description
+                 "List of static scs-specific configurations";
+                 uses scs-config;
+               }
+
+
+      leaf cp-length {
+        type uint32;
+          description
+            "CP length woud be determined by deployment types that has different
+              delay spread requirements, and/or determined by frequency bands, service type
+              or determined by whether beam forming technology is used or not";
+      }
+
+    }
+
+    list tx-arrays {
+      key name;
+      config false;
+      description
+        "Object model for tx-arrays configuration";
+
+      leaf name {
+        type string;
+        description
+          "Unique name of tx-arrays object.";
+      }
+
+      leaf polarisation {
+        type int8 {
+          range "-45 | 0 | 45 | 90";
+        }
+          description
+            "This parameter informing which polarization is served by particular antenna array
+              as per HW design. Expected values are +45 deg, -45 deg, 0 deg and 90 deg.
+              Note: In case of multi-band RU orthogonality is assumed to exist per band, meaning:
+              either pair of +45 deg and -45 deg or pair of 0 deg and 90 deg are expected per band.
+              Non-orthogonal pairs like e.g 0 deg and +45 deg are not expected.";
+      }
+
+      leaf panel-id {
+        type uint8;
+          description
+            "This parameter informing panel particular antenna array is built into.
+              Intended use is to indicate if two orthogonal arrays occupy the same physical panel (e.g. as cross-polarized
+              radiators) or if arrays of different polarizations are built into physically separated panels.";
+      }
+
+      leaf band-number {
+        type leafref {
+          path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+        }
+        description
+          "This parameter informing which frequency band particular antenna
+           array is serving for.
+           Intended use is to deal with multiband solutions.";
+      }
+    }
+
+    list rx-arrays {
+      key name;
+      config false;
+      description
+        "Object model for rx-arrays configuration";
+
+      leaf name {
+        type string;
+        description
+          "Unique name of rx-arrays object.";
+      }
+
+      leaf polarisation {
+        type int8 {
+          range "-45 | 0 | 45 | 90";
+        }
+        description
+          "This parameter informing which polarization is served by  particular antenna array
+          as per HW design. Expected values are +45 deg, -45 deg, 0 deg and 90 deg.
+          Note: In case of multi-band RU orthogonality is assumed to exist per band, meaning:
+          either pair of +45 deg and -45 deg or pair of 0 deg and 90 deg are expected per band.
+          Non-orthogonal pairs like e.g 0 deg and +45 deg are not expected.";
+      }
+
+      leaf panel-id {
+        type uint8;
+        description
+          "This parameter informing panel particular antenna array is built
+           into.
+           Intended use is to indicate if two orthogonal arrays occupy the same
+           physical panel (e.g. as cross-polarized radiators) or if arrays of
+           different polarizations are built into physically separated panels.";
+      }
+
+      leaf band-number {
+        type leafref {
+          path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+        }
+        description
+          "This parameter informing which frequency band particular antenna
+           array is serving for.
+           Intended use is to deal with multiband solutions.";
+      }
+    }
+  }
+
+   grouping scs-config {
+    description
+         "It groups all parameters related to SCS configuration";
+
+    leaf scs {
+      type enumeration {
+        enum KHZ_15 {
+          value 0;
+              description
+                "15kHz sub carrier spacing";
+        }
+        enum KHZ_30 {
+          value 1;
+              description
+                "30kHz sub carrier spacing";
+        }
+        enum KHZ_60 {
+          value 2;
+              description
+                "60kHz sub carrier spacing";
+        }
+        enum KHZ_120 {
+          value 3;
+              description
+                "120kHz sub carrier spacing";
+        }
+        enum KHZ_240 {
+          value 4;
+              description
+                "240kHz sub carrier spacing";
+        }
+        enum KHZ_1_25 {
+          value 12;
+                description
+                "1,25kHz sub carrier spacing";
+        }
+        enum KHZ_5 {
+          value 14;
+              description
+                "5kHz sub carrier spacing";
+        }
+      }
+        description
+          "Sub-carrier spacing configuration";
+    }
+    leaf offset-to-absolute-frequency-center {
+      type int32;
+      mandatory true;
+      description
+        "Offset to center-of-carrier-bandwidth. Mostly negative value. Granularity of this parameter is 0.5 SCS";
+    }
+
+    leaf number-of-prbs {
+      type uint32;
+      mandatory true;
+      description
+        "Number of physical resource blocks.";
+    }
+  }
+
+
+}
diff --git a/data-model/yang/published/xran/xran-usermgmt.yang b/data-model/yang/published/xran/xran-usermgmt.yang
new file mode 100644 (file)
index 0000000..9de1d90
--- /dev/null
@@ -0,0 +1,101 @@
+module xran-usermgmt {
+  yang-version 1.1;
+  namespace "urn:xran:user-mgmt:1.0";
+  prefix "xran-usermgmt";
+
+  // import openroadm user management
+  import org-openroadm-user-mgmt {
+    prefix openroadm;
+    revision-date 2017-12-15;
+  }
+
+  organization "xRAN Forum";
+
+  contact
+    "www.xran.org";
+
+  description
+    "This module defines the user management model for the xRAN Radio Unit.
+    The model is an augmentation of the user management model defined by
+    the openroadm MSA.
+
+    Copyright 2018 the xRAN Forum.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the xRAN Forum nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2018-07-20" {
+    description
+      "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+      This version of the model supports v01.00 of the corrsponding xRAN
+      M-Plane Specification.";
+    reference "XRAN-FH.MP.0-v01.00";
+  }
+
+  grouping extended-xran-groups {
+    description
+      "New user permissions defined by xran.
+      Imported openroadm model only supports 'sudo' superuser permissions.";
+    leaf-list xran-group {
+      type enumeration {
+        enum nms {
+          description "Network Management System permissions";
+        }
+        enum fm-pm {
+          description
+            "permissions for fault and  performance management.";
+        }
+        enum swm {
+          description
+            "permissions for software managemet.";
+        }
+      }
+      description
+        "new group privileges defined by xRAN - a non sudo account may have
+        multiple group privileges.
+
+        See the xRAN management Plane specification for a list of YANG module
+        privileges";
+    }
+  }
+
+  container xran-user-profile {
+    description "baseline open-roadm user profile";
+    uses openroadm:user-profile;
+  }
+
+  augment "/xran-usermgmt:xran-user-profile/xran-usermgmt:user" {
+    description "add in new xran user group permissions";
+    uses extended-xran-groups;
+    leaf enabled {
+      type boolean;
+      must "count(../enabled='true') > 0" {
+        error-message "At least one account needs to be enabled.";
+      }
+      description
+        "Indicates whether an account is enabled or disabled.";
+    }
+  }
+}