From 959fe0ae609e1cb265cf81615bc035ebc9ce16d8 Mon Sep 17 00:00:00 2001 From: herbert Date: Tue, 10 Mar 2020 18:37:27 +0100 Subject: [PATCH] Add x-ran devicemanager initial x-ran devicemanager Issue-ID: OAM-59 Signed-off-by: herbert Change-Id: If44aabb3dfd013e61dd9ada0c782ca24daccb59a Signed-off-by: herbert --- features/devicemanager/.gitignore | 16 + features/devicemanager/x-ran/ru-fh/feature/pom.xml | 50 + .../devicemanager/x-ran/ru-fh/installer/pom.xml | 127 ++ .../src/assembly/assemble_mvnrepo_zip.xml | 47 + features/devicemanager/x-ran/ru-fh/model/pom.xml | 72 + .../model/src/main/yang/devicemanager-xran.yang | 36 + features/devicemanager/x-ran/ru-fh/pom.xml | 53 + .../devicemanager/x-ran/ru-fh/provider/copyright | 17 + .../devicemanager/x-ran/ru-fh/provider/pom.xml | 117 ++ .../xran/impl/DeviceManagerXRanImpl.java | 89 ++ .../wt/devicemanager/xran/impl/NullableHelper.java | 36 + .../xran/impl/XRanChangeNotificationListener.java | 99 ++ .../xran/impl/XRanFaultNotificationListener.java | 35 + .../xran/impl/XRanNetworkElement.java | 146 ++ .../xran/impl/XRanNetworkElementFactory.java | 44 + .../xran/impl/XRanToInternalDataModel.java | 79 + .../alarms/rev190911/OperatorStateBuilder.java | 23 + .../ietf/alarms/rev190911/ResourceBuilder.java | 23 + .../alarms/rev190911/ResourceMatchBuilder.java | 23 + .../alarms/rev190911/SeverityWithClearBuilder.java | 23 + .../ControlMaxAlarmStatusChangesBuilder.java | 23 + .../_1/_0/rev180720/NetconfClientIdBuilder.java | 23 + .../org/opendaylight/blueprint/impl-blueprint.xml | 38 + .../provider/src/main/resources/version.properties | 24 + .../main/yang/1-0-0/interfaces/xran-ald-port.yang | 158 ++ .../src/main/yang/1-0-0/interfaces/xran-dhcp.yang | 183 +++ .../yang/1-0-0/interfaces/xran-externalio.yang | 144 ++ .../yang/1-0-0/interfaces/xran-interfaces.yang | 385 +++++ .../yang/1-0-0/interfaces/xran-mplane-int.yang | 171 +++ .../1-0-0/interfaces/xran-processing-element.yang | 237 +++ .../yang/1-0-0/interfaces/xran-transceiver.yang | 369 +++++ .../src/main/yang/1-0-0/operations/xran-ald.yang | 144 ++ .../yang/1-0-0/operations/xran-ecpri-delay.yang | 125 ++ .../1-0-0/operations/xran-file-management.yang | 174 +++ .../src/main/yang/1-0-0/operations/xran-lbm.yang | 269 ++++ .../yang/1-0-0/operations/xran-operations.yang | 151 ++ .../operations/xran-performance-management.yang | 664 ++++++++ .../1-0-0/operations/xran-software-management.yang | 539 +++++++ .../1-0-0/operations/xran-troubleshooting.yang | 95 ++ .../main/yang/1-0-0/operations/xran-udp-echo.yang | 88 ++ .../yang/1-0-0/operations/xran-uplane-conf.yang | 948 ++++++++++++ .../main/yang/1-0-0/radio/xran-beamforming.yang | 325 ++++ .../yang/1-0-0/radio/xran-delay-management.yang | 264 ++++ .../src/main/yang/1-0-0/radio/xran-module-cap.yang | 533 +++++++ .../ru-fh/provider/src/main/yang/1-0-0/readme.txt | 52 + .../src/main/yang/1-0-0/sync/xran-sync.yang | 662 ++++++++ .../src/main/yang/1-0-0/system/xran-alarm-id.yang | 178 +++ .../src/main/yang/1-0-0/system/xran-fan.yang | 110 ++ .../src/main/yang/1-0-0/system/xran-fm.yang | 165 ++ .../src/main/yang/1-0-0/system/xran-hardware.yang | 211 +++ .../main/yang/1-0-0/system/xran-supervision.yang | 103 ++ .../src/main/yang/1-0-0/system/xran-usermgmt.yang | 101 ++ .../provider/src/main/yang/iana-hardware.yang | 180 +++ .../src/main/yang/ietf-alarms@2019-09-11.yang | 1530 +++++++++++++++++++ .../provider/src/main/yang/ietf-hardware.yang | 1141 ++++++++++++++ .../provider/src/main/yang/ietf-interfaces.yang | 1073 +++++++++++++ .../provider/src/main/yang/plus/iana-if-type.yang | 1611 ++++++++++++++++++++ .../src/main/yang/plus/ietf-dhcpv6-types.yang | 207 +++ .../ru-fh/provider/src/main/yang/plus/ietf-ip.yang | 860 +++++++++++ .../main/yang/plus/org-openroadm-user-mgmt.yang | 153 ++ .../xran/TestDeviceManagerXRanImpl.java | 78 + .../wt/devicemanager/xran/TestHardwareClass.java | 7 + .../xran/TestXORanNetworkElementFactory.java | 72 + .../xran/TestXRanChangeNotificationListener.java | 87 ++ .../xran/TestXRanFaultNotificationListener.java | 30 + .../devicemanager/xran/TestXRanNetworkElement.java | 83 + .../xran/TestXRanToInternalDataModel.java | 83 + .../xran/mock/NetconfAccessorMock.java | 92 ++ .../xran/mock/NetconfConfigChangeMock.java | 62 + .../xran/mock/TransactionUtilsMock.java | 47 + .../src/test/resources/simplelogger.properties | 61 + 71 files changed, 16268 insertions(+) create mode 100644 features/devicemanager/.gitignore create mode 100644 features/devicemanager/x-ran/ru-fh/feature/pom.xml create mode 100755 features/devicemanager/x-ran/ru-fh/installer/pom.xml create mode 100644 features/devicemanager/x-ran/ru-fh/installer/src/assembly/assemble_mvnrepo_zip.xml create mode 100644 features/devicemanager/x-ran/ru-fh/model/pom.xml create mode 100644 features/devicemanager/x-ran/ru-fh/model/src/main/yang/devicemanager-xran.yang create mode 100755 features/devicemanager/x-ran/ru-fh/pom.xml create mode 100644 features/devicemanager/x-ran/ru-fh/provider/copyright create mode 100644 features/devicemanager/x-ran/ru-fh/provider/pom.xml create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/DeviceManagerXRanImpl.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/NullableHelper.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanChangeNotificationListener.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanFaultNotificationListener.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElement.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElementFactory.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanToInternalDataModel.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/OperatorStateBuilder.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceBuilder.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceMatchBuilder.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/SeverityWithClearBuilder.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/alarms/ControlMaxAlarmStatusChangesBuilder.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/xran/dhcp/_1/_0/rev180720/NetconfClientIdBuilder.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/resources/version.properties create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-ald-port.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-dhcp.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-externalio.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-interfaces.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-mplane-int.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-processing-element.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-transceiver.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ald.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ecpri-delay.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-file-management.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-lbm.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-operations.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-performance-management.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-software-management.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-troubleshooting.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-udp-echo.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-uplane-conf.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-beamforming.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-delay-management.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-module-cap.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/readme.txt create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/sync/xran-sync.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-alarm-id.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fan.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fm.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-hardware.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-supervision.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-usermgmt.yang create mode 100755 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/iana-hardware.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-alarms@2019-09-11.yang create mode 100755 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-hardware.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-interfaces.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/iana-if-type.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-dhcpv6-types.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-ip.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/org-openroadm-user-mgmt.yang create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestDeviceManagerXRanImpl.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestHardwareClass.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXORanNetworkElementFactory.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanChangeNotificationListener.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanFaultNotificationListener.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanNetworkElement.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanToInternalDataModel.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfAccessorMock.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfConfigChangeMock.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/TransactionUtilsMock.java create mode 100644 features/devicemanager/x-ran/ru-fh/provider/src/test/resources/simplelogger.properties diff --git a/features/devicemanager/.gitignore b/features/devicemanager/.gitignore new file mode 100644 index 0000000..94227c1 --- /dev/null +++ b/features/devicemanager/.gitignore @@ -0,0 +1,16 @@ +target/ +target-ide/ +yang-gen-sal/ +.checkstyle +.classpath +.project +.settings +.factorypath +.metadata +*.swp +dist/ +*/**/bin/ +etc/ +node_modules/ +.fbExcludeFilterFile +*.md.html diff --git a/features/devicemanager/x-ran/ru-fh/feature/pom.xml b/features/devicemanager/x-ran/ru-fh/feature/pom.xml new file mode 100644 index 0000000..0f98176 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/feature/pom.xml @@ -0,0 +1,50 @@ + + + + + 4.0.0 + + + org.onap.ccsdk.parent + single-feature-parent + 1.5.2-SNAPSHOT + + + + org.onap.ccsdk.features.sdnr.wt + sdnr-wt-devicemanager-xran-ru-fh-feature + 0.7.1-SNAPSHOT + feature + + ccsdk-features :: ${project.artifactId} + + + + ${project.groupId} + sdnr-wt-devicemanager-xran-ru-fh-provider + ${project.version} + + + diff --git a/features/devicemanager/x-ran/ru-fh/installer/pom.xml b/features/devicemanager/x-ran/ru-fh/installer/pom.xml new file mode 100755 index 0000000..2cd323f --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/installer/pom.xml @@ -0,0 +1,127 @@ + + + + + 4.0.0 + + + org.onap.ccsdk.parent + odlparent-lite + 1.5.2-SNAPSHOT + + + + org.onap.ccsdk.features.sdnr.wt + sdnr-wt-devicemanager-xran-ru-fh-installer + 0.7.1-SNAPSHOT + pom + + ccsdk-features :: ${project.artifactId} + + + sdnr-wt-devicemanager-xran-ru-fh + false + + + + + + org.opendaylight.controller + mdsal-artifacts + ${odl.controller.mdsal.version} + pom + import + + + + + + org.onap.ccsdk.features.sdnr.wt + ${application.name}-feature + ${project.version} + xml + features + + + * + * + + + + + org.onap.ccsdk.features.sdnr.wt + ${application.name}-provider + ${project.version} + + + + + + + maven-assembly-plugin + + + maven-repo-zip + + single + + package + + true + stage/${application.name}-${project.version} + + src/assembly/assemble_mvnrepo_zip.xml + + true + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-nested-dependencies + + copy-dependencies + + prepare-package + + true + ${project.build.directory}/assembly/system + false + true + true + true + false + false + + + + + + + diff --git a/features/devicemanager/x-ran/ru-fh/installer/src/assembly/assemble_mvnrepo_zip.xml b/features/devicemanager/x-ran/ru-fh/installer/src/assembly/assemble_mvnrepo_zip.xml new file mode 100644 index 0000000..dfe5060 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/installer/src/assembly/assemble_mvnrepo_zip.xml @@ -0,0 +1,47 @@ + + + + + + repo + + zip + + + + false + + + + target/assembly/ + . + + + + + + diff --git a/features/devicemanager/x-ran/ru-fh/model/pom.xml b/features/devicemanager/x-ran/ru-fh/model/pom.xml new file mode 100644 index 0000000..654dcd2 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/model/pom.xml @@ -0,0 +1,72 @@ + + + + + 4.0.0 + + + org.onap.ccsdk.parent + binding-parent + 1.5.2-SNAPSHOT + + + + org.onap.ccsdk.features.sdnr.wt + sdnr-wt-devicemanager-xran-ru-fh-model + 0.7.1-SNAPSHOT + bundle + + ccsdk-features :: ${project.artifactId} + + + Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0 + + + + + true + + + + + + + + + org.jacoco + jacoco-maven-plugin + + + **/gen/** + **/generated-sources/** + **/yang-gen-sal/** + **/pax/** + + + + + + diff --git a/features/devicemanager/x-ran/ru-fh/model/src/main/yang/devicemanager-xran.yang b/features/devicemanager/x-ran/ru-fh/model/src/main/yang/devicemanager-xran.yang new file mode 100644 index 0000000..bf1fc79 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/model/src/main/yang/devicemanager-xran.yang @@ -0,0 +1,36 @@ +module devicemanager-xran { + + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:devicemanager-xran"; + prefix devicemanager-xran; + + organization + "highstreet technologies GmbH"; + contact + "Web: "; + + description + "DeviceManager X RAN Api Module + + Copyright 2020 highstreet technologies GmbH Intellectual Property. + All rights reserved. + + Licensed under the Apache License, Version 2.0 (the 'License'); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an 'AS IS' BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License."; + + revision 2020-03-09 { + description + "Initial revision"; + reference + ""; + } +} diff --git a/features/devicemanager/x-ran/ru-fh/pom.xml b/features/devicemanager/x-ran/ru-fh/pom.xml new file mode 100755 index 0000000..b73c7ad --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/pom.xml @@ -0,0 +1,53 @@ + + + + + 4.0.0 + + + org.onap.ccsdk.parent + odlparent-lite + 1.5.2-SNAPSHOT + + + + org.onap.ccsdk.features.sdnr.wt + sdnr-wt-devicemanager-xran-ru-fh-top + 0.7.1-SNAPSHOT + pom + + ccsdk-features :: ${project.artifactId} + + + model + provider + feature + installer + + + + sdnr-wt-devicemanager-xran-ru-fh + + diff --git a/features/devicemanager/x-ran/ru-fh/provider/copyright b/features/devicemanager/x-ran/ru-fh/provider/copyright new file mode 100644 index 0000000..754b621 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/copyright @@ -0,0 +1,17 @@ +/** + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ diff --git a/features/devicemanager/x-ran/ru-fh/provider/pom.xml b/features/devicemanager/x-ran/ru-fh/provider/pom.xml new file mode 100644 index 0000000..029f18e --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/pom.xml @@ -0,0 +1,117 @@ + + + + + 4.0.0 + + + org.onap.ccsdk.parent + binding-parent + 1.5.2-SNAPSHOT + + + + org.onap.ccsdk.features.sdnr.wt + sdnr-wt-devicemanager-xran-ru-fh-provider + 0.7.1-SNAPSHOT + bundle + + ccsdk-features :: ${project.artifactId} + + + Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0 + + + + + true + true + yyyy-MM-dd HH:mm + ${maven.build.timestamp} UTC + 49400 + + + + + + org.mockito + mockito-core + test + + + + + ${project.groupId} + sdnr-wt-devicemanager-xran-ru-fh-model + ${project.version} + + + org.onap.ccsdk.features.sdnr.wt + sdnr-wt-devicemanager-model + ${project.version} + provided + + + ${project.groupId} + sdnr-wt-netconfnode-state-service-model + ${project.version} + provided + + + org.opendaylight.netconf + sal-netconf-connector + provided + + + org.opendaylight.mdsal + mdsal-singleton-common-api + provided + + + + + + + src/main/resources + true + + + + + org.jacoco + jacoco-maven-plugin + + + **/gen/** + **/generated-sources/** + **/yang-gen-sal/** + **/pax/** + + + + + + diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/DeviceManagerXRanImpl.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/DeviceManagerXRanImpl.java new file mode 100644 index 0000000..252dd31 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/DeviceManagerXRanImpl.java @@ -0,0 +1,89 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl; + +import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.factory.FactoryRegistration; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NetconfNetworkElementService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DeviceManagerXRanImpl implements AutoCloseable { + + private static final Logger LOG = LoggerFactory.getLogger(DeviceManagerXRanImpl.class); + private static final String APPLICATION_NAME = "DeviceManagerXRan"; + @SuppressWarnings("unused") + private static final String CONFIGURATIONFILE = "etc/devicemanager-xran.properties"; + + + private NetconfNetworkElementService netconfNetworkElementService; + + private HtDatabaseClient htDatabaseClient; + private Boolean devicemanagerInitializationOk = false; + private FactoryRegistration resXRan; + + // Blueprint begin + public DeviceManagerXRanImpl() { + LOG.info("Creating provider for {}", APPLICATION_NAME); + resXRan = null; + } + + public void setNetconfNetworkElementService(NetconfNetworkElementService netconfNetworkElementService) { + this.netconfNetworkElementService = netconfNetworkElementService; + } + + public void init() throws Exception { + + LOG.info("Session Initiated start {}", APPLICATION_NAME); + + resXRan = netconfNetworkElementService.registerNetworkElementFactory(new XRanNetworkElementFactory()); + + + netconfNetworkElementService.writeToEventLog(APPLICATION_NAME, "startup", "done"); + this.devicemanagerInitializationOk = true; + + LOG.info("Session Initiated end. Initialization done {}", devicemanagerInitializationOk); + } + // Blueprint end + + @Override + public void close() throws Exception { + LOG.info("closing ..."); + close(htDatabaseClient); + close(resXRan); + LOG.info("closing done"); + } + + /** + * Used to close all Services, that should support AutoCloseable Pattern + * + * @param toClose + * @throws Exception + */ + private void close(AutoCloseable... toCloseList) { + for (AutoCloseable element : toCloseList) { + if (element != null) { + try { + element.close(); + } catch (Exception e) { + LOG.warn("Fail during close: ", e); + } + } + } + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/NullableHelper.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/NullableHelper.java new file mode 100644 index 0000000..9484024 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/NullableHelper.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; + +public class NullableHelper { + + private static final @NonNull Uuid DEFAULT_Uuid = new Uuid("ad3545a5-1dd0-4293-b2d9-90366357a032"); + + public static @NonNull Uuid nnGetUuid(@Nullable Uuid x) { + return x == null ? DEFAULT_Uuid : x; + } + + public static @NonNull Integer nnGetInteger(@Nullable Integer x) { + return x == null ? -1 : x; + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanChangeNotificationListener.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanChangeNotificationListener.java new file mode 100644 index 0000000..7aeaaf7 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanChangeNotificationListener.java @@ -0,0 +1,99 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl; + +import java.util.List; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.IetfNetconfNotificationsListener; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChange; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfConfigChange; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfConfirmedCommit; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfSessionEnd; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfSessionStart; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.netconf.config.change.Edit; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Listener for change notifications + */ +public class XRanChangeNotificationListener implements IetfNetconfNotificationsListener { + + private static final Logger log = LoggerFactory.getLogger(XRanChangeNotificationListener.class); + + private final NetconfAccessor netconfAccessor; + private final DataProvider databaseService; + + public XRanChangeNotificationListener(NetconfAccessor netconfAccessor, DataProvider databaseService) { + this.netconfAccessor = netconfAccessor; + this.databaseService = databaseService; + } + + @Override + public void onNetconfConfirmedCommit(NetconfConfirmedCommit notification) { + log.info("onNetconfConfirmedCommit ", notification); + } + + @Override + public void onNetconfSessionStart(NetconfSessionStart notification) { + log.info("onNetconfSessionStart ", notification); + } + + @Override + public void onNetconfSessionEnd(NetconfSessionEnd notification) { + log.info("onNetconfSessionEnd ", notification); + } + + @Override + public void onNetconfCapabilityChange(NetconfCapabilityChange notification) { + log.info("onNetconfCapabilityChange ", notification); + } + + @Override + public void onNetconfConfigChange(NetconfConfigChange notification) { + log.info("onNetconfConfigChange (1) {}", notification); + StringBuffer sb = new StringBuffer(); + List editList = notification.nonnullEdit(); + for (Edit edit : editList) { + if (sb.length() > 0) { + sb.append(", "); + } + sb.append(edit); + + EventlogBuilder eventlogBuilder = new EventlogBuilder(); + + InstanceIdentifier target = edit.getTarget(); + if (target != null) { + eventlogBuilder.setObjectId(target.toString()); + log.info("TARGET: {} {} {}", target.getClass(), target.getTargetType()); + for (PathArgument pa : target.getPathArguments()) { + log.info("PathArgument {}", pa); + } + } + eventlogBuilder.setNodeId(netconfAccessor.getNodeId().getValue()); + eventlogBuilder.setNewValue(String.valueOf(edit.getOperation())); + databaseService.writeEventLog(eventlogBuilder.build()); + } + log.info("onNetconfConfigChange (2) {}", sb); + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanFaultNotificationListener.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanFaultNotificationListener.java new file mode 100644 index 0000000..4ba7605 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanFaultNotificationListener.java @@ -0,0 +1,35 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl; + +import org.opendaylight.yang.gen.v1.urn.xran.fm._1._0.rev180720.AlarmNotif; +import org.opendaylight.yang.gen.v1.urn.xran.fm._1._0.rev180720.XranFmListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class XRanFaultNotificationListener implements XranFmListener { + + private static final Logger log = LoggerFactory.getLogger(XRanFaultNotificationListener.class); + + @Override + public void onAlarmNotif(AlarmNotif notification) { + + log.info("onAlarmNotif {}", notification); + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElement.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElement.java new file mode 100644 index 0000000..13574d2 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElement.java @@ -0,0 +1,146 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl; + +import java.util.List; +import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElementService; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.Hardware; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.Component; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementDeviceType; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.NotificationListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + */ +public class XRanNetworkElement implements NetworkElement { + + private static final Logger log = LoggerFactory.getLogger(XRanNetworkElement.class); + + private final NetconfAccessor netconfAccessor; + + private final DataProvider databaseService; + + private final XRanToInternalDataModel xRanMapper; + + private ListenerRegistration xRanListenerRegistrationResult; + private @NonNull final XRanChangeNotificationListener xRanListener; + private ListenerRegistration xRanFaultListenerRegistrationResult; + private @NonNull final XRanFaultNotificationListener xRanFaultListener; + + XRanNetworkElement(NetconfAccessor netconfAccess, DataProvider databaseService) { + log.info("Create {}",XRanNetworkElement.class.getSimpleName()); + this.netconfAccessor = netconfAccess; + this.databaseService = databaseService; + + this.xRanListenerRegistrationResult = null; + this.xRanListener = new XRanChangeNotificationListener(netconfAccessor, databaseService); + + this.xRanFaultListenerRegistrationResult = null; + this.xRanFaultListener = new XRanFaultNotificationListener(); + + this.xRanMapper = new XRanToInternalDataModel(); + + } + + public void initialReadFromNetworkElement() { + Hardware hardware = readHardware(netconfAccessor); + if (hardware != null) { + List componentList = hardware.getComponent(); + if (componentList != null) { + for (Component component : componentList) { + databaseService.writeInventory( xRanMapper.getInternalEquipment(netconfAccessor.getNodeId(), component)); + } + } + } + } + + @Override + public NetworkElementDeviceType getDeviceType() { + return NetworkElementDeviceType.RAN; + } + + private Hardware readHardware(NetconfAccessor accessData) { + + final Class clazzPac = Hardware.class; + + log.info("DBRead Get equipment for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(), + accessData.getNodeId().getValue()); + + InstanceIdentifier hardwareIID = + InstanceIdentifier.builder(clazzPac).build(); + + Hardware res = accessData.getTransactionUtils().readData(accessData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, + hardwareIID); + + return res; + } + + @Override + public void register() { + + initialReadFromNetworkElement(); + // Register call back class for receiving notifications + this.xRanListenerRegistrationResult = netconfAccessor.doRegisterNotificationListener(xRanListener); + this.xRanFaultListenerRegistrationResult = netconfAccessor.doRegisterNotificationListener(xRanFaultListener); + // Register netconf stream + netconfAccessor.registerNotificationsStream(NetconfAccessor.DefaultNotificationsStream); + + + } + + @Override + public void deregister() { + if (xRanListenerRegistrationResult != null) { + this.xRanListenerRegistrationResult.close(); + } + if (xRanFaultListenerRegistrationResult != null) { + this.xRanFaultListenerRegistrationResult.close(); + }; + } + + + @Override + public NodeId getNodeId() { + return netconfAccessor.getNodeId(); + } + + @Override + public Optional getService(Class clazz) { + return Optional.empty(); + } + + @Override + public void warmstart() { + } + + @Override + public Optional getAcessor() { + return Optional.of(netconfAccessor); + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElementFactory.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElementFactory.java new file mode 100644 index 0000000..034e393 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElementFactory.java @@ -0,0 +1,44 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ + +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl; + +import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.factory.NetworkElementFactory; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor; +import org.opendaylight.yang.gen.v1.urn.xran.hardware._1._0.rev180720.XRANRADIO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class XRanNetworkElementFactory implements NetworkElementFactory { + + private static final Logger log = LoggerFactory.getLogger(XRanNetworkElementFactory.class); + + @Override + public Optional create(@NonNull NetconfAccessor acessor, @NonNull DeviceManagerServiceProvider serviceProvider) { + if (acessor.getCapabilites().isSupportingNamespace(XRANRADIO.QNAME)) { + log.info("Create device {} ",XRanNetworkElement.class.getName()); + return Optional.of(new XRanNetworkElement(acessor, serviceProvider.getDataProvider())); + } else { + return Optional.empty(); + } + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanToInternalDataModel.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanToInternalDataModel.java new file mode 100644 index 0000000..35ea42c --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanToInternalDataModel.java @@ -0,0 +1,79 @@ +/** + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl; + +import java.util.ArrayList; +import java.util.List; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.hardware.rev180313.HardwareClass; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.Component; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.InventoryBuilder; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; + +public class XRanToInternalDataModel { + + + public Inventory getInternalEquipment(NodeId nodeId, @NonNull Component component) { + + InventoryBuilder inventoryBuilder = new InventoryBuilder(); + + // General + inventoryBuilder.setNodeId(nodeId.getValue()); + inventoryBuilder.setParentUuid(component.getParent()); + inventoryBuilder.setTreeLevel( + Long.valueOf( + NullableHelper.nnGetInteger( + component.getParentRelPos()))); + + inventoryBuilder.setUuid(NullableHelper.nnGetUuid(component.getUuid()).getValue()); + // -- String list with ids of holders + List containerHolderKeyList = new ArrayList<>(); + List containerHolderList = component.getContainsChild(); + if (containerHolderList != null) { + for (String containerHolder : containerHolderList) { + containerHolderKeyList.add(containerHolder); + } + } + inventoryBuilder.setContainedHolder(containerHolderKeyList); + // -- Manufacturer related things + inventoryBuilder.setManufacturerName(component.getName()); + + // Equipment type + inventoryBuilder.setDescription(component.getDescription()); + inventoryBuilder.setModelIdentifier(component.getModelName()); + + Class xmlClass = component.getXmlClass(); + if (xmlClass != null) { + inventoryBuilder.setPartTypeId(xmlClass.getName()); + } + inventoryBuilder.setTypeName(component.getName()); + inventoryBuilder.setVersion(component.getHardwareRev()); + + // Equipment instance + DateAndTime mfgDate = component.getMfgDate(); + if (mfgDate != null) { + inventoryBuilder.setDate(mfgDate.getValue()); + } + inventoryBuilder.setSerial(component.getSerialNum()); + + return inventoryBuilder.build(); + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/OperatorStateBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/OperatorStateBuilder.java new file mode 100644 index 0000000..7e8327a --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/OperatorStateBuilder.java @@ -0,0 +1,23 @@ +package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911; +import java.lang.String; +import java.lang.UnsupportedOperationException; + +/** + * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation. + * In some cases it is very difficult to automate it since there can be unions such as (uint32 - uint16), or (string - uint32). + * + * The reason behind putting it under src/main/java is: + * This class is generated in form of a stub and needs to be finished by the user. This class is generated only once to prevent + * loss of user code. + * + */ +public class OperatorStateBuilder { + private OperatorStateBuilder() { + //Exists only to defeat instantiation. + } + + public static OperatorState getDefaultInstance(String defaultValue) { + throw new UnsupportedOperationException("Not yet implemented"); + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceBuilder.java new file mode 100644 index 0000000..7c4a63d --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceBuilder.java @@ -0,0 +1,23 @@ +package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911; +import java.lang.String; +import java.lang.UnsupportedOperationException; + +/** + * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation. + * In some cases it is very difficult to automate it since there can be unions such as (uint32 - uint16), or (string - uint32). + * + * The reason behind putting it under src/main/java is: + * This class is generated in form of a stub and needs to be finished by the user. This class is generated only once to prevent + * loss of user code. + * + */ +public class ResourceBuilder { + private ResourceBuilder() { + //Exists only to defeat instantiation. + } + + public static Resource getDefaultInstance(String defaultValue) { + throw new UnsupportedOperationException("Not yet implemented"); + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceMatchBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceMatchBuilder.java new file mode 100644 index 0000000..282a6a2 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceMatchBuilder.java @@ -0,0 +1,23 @@ +package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911; +import java.lang.String; +import java.lang.UnsupportedOperationException; + +/** + * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation. + * In some cases it is very difficult to automate it since there can be unions such as (uint32 - uint16), or (string - uint32). + * + * The reason behind putting it under src/main/java is: + * This class is generated in form of a stub and needs to be finished by the user. This class is generated only once to prevent + * loss of user code. + * + */ +public class ResourceMatchBuilder { + private ResourceMatchBuilder() { + //Exists only to defeat instantiation. + } + + public static ResourceMatch getDefaultInstance(String defaultValue) { + throw new UnsupportedOperationException("Not yet implemented"); + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/SeverityWithClearBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/SeverityWithClearBuilder.java new file mode 100644 index 0000000..8139192 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/SeverityWithClearBuilder.java @@ -0,0 +1,23 @@ +package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911; +import java.lang.String; +import java.lang.UnsupportedOperationException; + +/** + * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation. + * In some cases it is very difficult to automate it since there can be unions such as (uint32 - uint16), or (string - uint32). + * + * The reason behind putting it under src/main/java is: + * This class is generated in form of a stub and needs to be finished by the user. This class is generated only once to prevent + * loss of user code. + * + */ +public class SeverityWithClearBuilder { + private SeverityWithClearBuilder() { + //Exists only to defeat instantiation. + } + + public static SeverityWithClear getDefaultInstance(String defaultValue) { + throw new UnsupportedOperationException("Not yet implemented"); + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/alarms/ControlMaxAlarmStatusChangesBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/alarms/ControlMaxAlarmStatusChangesBuilder.java new file mode 100644 index 0000000..9f10ae8 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/alarms/ControlMaxAlarmStatusChangesBuilder.java @@ -0,0 +1,23 @@ +package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911.alarms; +import java.lang.String; +import java.lang.UnsupportedOperationException; + +/** + * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation. + * In some cases it is very difficult to automate it since there can be unions such as (uint32 - uint16), or (string - uint32). + * + * The reason behind putting it under src/main/java is: + * This class is generated in form of a stub and needs to be finished by the user. This class is generated only once to prevent + * loss of user code. + * + */ +public class ControlMaxAlarmStatusChangesBuilder { + private ControlMaxAlarmStatusChangesBuilder() { + //Exists only to defeat instantiation. + } + + public static Control.MaxAlarmStatusChanges getDefaultInstance(String defaultValue) { + throw new UnsupportedOperationException("Not yet implemented"); + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/xran/dhcp/_1/_0/rev180720/NetconfClientIdBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/xran/dhcp/_1/_0/rev180720/NetconfClientIdBuilder.java new file mode 100644 index 0000000..910d92b --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/xran/dhcp/_1/_0/rev180720/NetconfClientIdBuilder.java @@ -0,0 +1,23 @@ +package org.opendaylight.yang.gen.v1.urn.xran.dhcp._1._0.rev180720; +import java.lang.String; +import java.lang.UnsupportedOperationException; + +/** + * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation. + * In some cases it is very difficult to automate it since there can be unions such as (uint32 - uint16), or (string - uint32). + * + * The reason behind putting it under src/main/java is: + * This class is generated in form of a stub and needs to be finished by the user. This class is generated only once to prevent + * loss of user code. + * + */ +public class NetconfClientIdBuilder { + private NetconfClientIdBuilder() { + //Exists only to defeat instantiation. + } + + public static NetconfClientId getDefaultInstance(String defaultValue) { + throw new UnsupportedOperationException("Not yet implemented"); + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml new file mode 100644 index 0000000..21b761c --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/version.properties b/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/version.properties new file mode 100644 index 0000000..6638c04 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/version.properties @@ -0,0 +1,24 @@ +# +# ============LICENSE_START======================================================= +# ONAP : ccsdk features +# ================================================================================ +# Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END======================================================= +# +# + +# Properties filled in by maven during build process +version = ${project.version} +build = ${buildtime} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-ald-port.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-ald-port.yang new file mode 100644 index 0000000..ab3a4b9 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-ald-port.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-dhcp.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-dhcp.yang new file mode 100644 index 0000000..8b2a94e --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-dhcp.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-externalio.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-externalio.yang new file mode 100644 index 0000000..a78a710 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-externalio.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-interfaces.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-interfaces.yang new file mode 100644 index 0000000..a4a0aaa --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-interfaces.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-mplane-int.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-mplane-int.yang new file mode 100644 index 0000000..778d37a --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-mplane-int.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-processing-element.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-processing-element.yang new file mode 100644 index 0000000..c3809ab --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-processing-element.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-transceiver.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-transceiver.yang new file mode 100644 index 0000000..df0cb36 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-transceiver.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ald.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ald.yang new file mode 100644 index 0000000..4580992 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ald.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ecpri-delay.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ecpri-delay.yang new file mode 100644 index 0000000..4929a32 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ecpri-delay.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-file-management.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-file-management.yang new file mode 100644 index 0000000..c63ffd0 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-file-management.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-lbm.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-lbm.yang new file mode 100644 index 0000000..65ea7fb --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-lbm.yang @@ -0,0 +1,269 @@ +module xran-lbm { + yang-version 1.1; + namespace "urn:xran:lbm:1.0"; + prefix "xran-lbm"; + + import ietf-yang-types { + prefix yang; + revision-date 2013-07-15; + } + + organization "xRAN Forum"; + + contact + "www.xran.org"; + + description + "This module defines the module capabilities for + the xRAN Radio loop-back protocol (IEEE 802.1ag). + It is derived from MEF-38 (Service OAM Fault Management YANG Modules, April 2012) + + 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 priority-type { + type uint32 { + range "0..7"; + } + description + "A 3 bit priority value to be used in the VLAN tag, if present + in the transmitted frame."; + reference "[802.1q] 12.14.7.3.2:e"; + } + + + typedef mep-id-type { + type uint16 { + range "1..8191"; + } + description + "Maintenance association End Point Identifier (MEPID): A small integer, + unique over a given Maintenance Association, identifying a + specific MEP."; + reference "[802.1q] 3.19 and 19.2.1"; + } + typedef vlan-id-type { + type uint16 { + range "1..4094"; + } + description + "The VLAN-ID that uniquely identifies a VLAN. This is the 12-bit VLAN-ID + used in the VLAN Tag header."; + reference "[802.1q] 9.6"; + } + + typedef md-level-type { + type int32 { + range "0..7"; + } + description + "Maintenance Domain Level (MD Level) identifier. Higher numbers + correspond to higher Maintenance Domains, those with the greatest + physical reach, with the highest values for customers' CFM PDUs. + Lower numbers correspond to lower Maintenance Domains, those with + more limited physical reach, with the lowest values for CFM PDUs + protecting single bridges or physical links."; + reference "[802.1q] 18.3, 21.4.1, IEEE8021-CFM-MIB.Dot1agCfmMDLevel"; + } + + typedef lbm-transaction-id-type { + type uint32; + description + "A loopback transaction identifier"; + reference "[802.1q] 21.7.3"; + } + + list maintenance-domain { + key "id"; + description + "A Maintenance Domain managed object is required in order to create an MA + with a MAID that includes that Maintenance Domain’s Name. From + this Maintenance Domain managed object, all Maintenance + Association managed objects associated with that Maintenance + Domain managed object can be accessed, and thus controlled."; + reference "[802.1q] 12.14.5"; + leaf id { + type string; + description + "A unique identifier of a Maintenance Domain"; + reference "[802.1q] 12.14.5"; + } + + leaf name { + type string; + description + "The value for the Maintenance Domain Name. Only the name-type + 'character-string' is supported"; + reference "[802.1q] 21.6.5.1 (Table 21-19), 12.14.5.3.2:a"; + } + + leaf md-level { + type md-level-type; + default 0; + description + "Integer identifying the Maintenance Domain Level (MD Level). Higher + numbers correspond to higher Maintenance Domains, those with the + greatest physical reach, with the highest values for customers' + CFM PDUs. Lower numbers correspond to lower Maintenance + Domains, those with more limited physical reach, with the lowest + values for CFM PDUs protecting single bridges or physical links."; + reference "[802.1q] 12.14.5.1.3:b"; + } + + list maintenance-association { + key "id"; + description + "This list represents Maintenance Entity Groups (Y.1731) or + Maintenance Associations (802.1ag). MEGs/MAs are sets of + MEPs, each configured to the same service inside a common + OAM domain."; + leaf id { + type string; + description + "A unique identifier of a Maintenance Association"; + reference "[802.1q] 12.14.6"; + } + leaf name { + type string; + + description + "The value for the Maintenance Association Name. Only the name-type + 'character-string' is supported"; + reference "[802.1q] 12.14.5.3.2:b, Table 21-20"; + } + + list component-list { + key "component-id"; + description + "A list of components each of which can be managed in a manner + essentially equivalent to an 802.1Q bridge."; + reference "[802.1q] IEEE8021-CFM-V2-MIB.ieee8021CfmMaCompTable"; + leaf component-id { + type uint32; + description + "The bridge component within the system to which the information + in this maintenance-association applies"; + reference "[802.1q] IEEE8021-CFM-V2-MIB.ieee8021CfmMaComponentId"; + } + leaf name { + type string; + + description + "The value for the Maintenance Association Name. Only the name-type + 'character-string' is supported"; + reference "[802.1q] 12.14.5.3.2:b, Table 21-20"; + } + + leaf-list vid { + type vlan-id-type; + min-elements 1; + ordered-by user; + description + "The VID(s) monitored by this MA, or 0, if the MA is not attached to any + VID. The first VID returned is the MA's Primary VID"; + reference "[802.1q] 12.14.5.3.2:b"; + } + + leaf-list remote-meps { + type mep-id-type; + description + "A list of the MEPIDs of the MEPs in the MA."; + reference "[802.1q] 12.14.6.1.3:g"; + } + list maintenance-association-end-point { + key "mep-identifier"; + description + "The list of Maintenance association End Points in a specific Maintance + Association."; + leaf mep-identifier { + type mep-id-type; + description + "Integer that is unique among all the MEPs in the same MA. Other + definition is: a small integer, unique over a given + Maintenance Association, identifying a specific Maintenance + association End Point."; + reference "[802.1q] 12.14.6.3.2:b"; + } + leaf interface { + type string; + mandatory true; + description + "An interface, either a Bridge Port or an aggregated IEEE 802.3 port + within a Bridge Port, to which the MEP is attached. Each interface in + the system is uniquely identified by an interface-name. The structure + and content of the name is outside the scope of this specification."; + reference "[802.1q] 12.14.7.1.3:b"; + } + leaf primary-vid { + type vlan-id-type; + mandatory true; + description + "The Primary VID of the MEP. The value 0 indicates that either the + Primary VID is that of the MEP's MA or that the MEP's MA is + associated with no VID"; + reference "[802.1q] 12.14.7.1.3:d"; + } + leaf administrative-state { + type boolean; + mandatory true; + description + "The administrative state of the MEP"; + reference "[802.1q] 12.14.7.1.3:e"; + } + leaf mac-address { + type yang:mac-address; + config false; + description + "The MAC address of the MEP"; + reference "[802.1q] 12.14.7.1.3:i"; + } + container loopback { + config false; + description + "Data definitions related to the Loopback function."; + leaf replies-transmitted { + type yang:counter32; + config false; + mandatory true; + description + "The total number of LBRs transmitted."; + reference "[802.1q] 12.14.7.1.3:ad"; + } + } + } + } + } + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-operations.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-operations.yang new file mode 100644 index 0000000..490ceb5 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-operations.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-performance-management.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-performance-management.yang new file mode 100644 index 0000000..7faefa0 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-performance-management.yang @@ -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://@[:]"; + } + + 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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-software-management.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-software-management.yang new file mode 100644 index 0000000..0759cd6 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-software-management.yang @@ -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://@[:]"; + } + + 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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-troubleshooting.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-troubleshooting.yang new file mode 100644 index 0000000..587369f --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-troubleshooting.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-udp-echo.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-udp-echo.yang new file mode 100644 index 0000000..cf1d725 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-udp-echo.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-uplane-conf.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-uplane-conf.yang new file mode 100644 index 0000000..5ca7e3c --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-uplane-conf.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-beamforming.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-beamforming.yang new file mode 100644 index 0000000..3e6c995 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-beamforming.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-delay-management.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-delay-management.yang new file mode 100644 index 0000000..e21cf93 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-delay-management.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-module-cap.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-module-cap.yang new file mode 100644 index 0000000..21965cb --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-module-cap.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/readme.txt b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/readme.txt new file mode 100644 index 0000000..1674d38 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/readme.txt @@ -0,0 +1,52 @@ +xRAN Forum YANG Models + +xRAN has defined an open, interoperable and efficient fronthaul interface. +The definition of this interface includes the xRAN control, user and +synchronization (CUS) plane specification . + +To complement the CUS plane specification, xRAN has also defined the management +plane specification . Significantly, the management plane specification uses +NETCONF/YANG as the network management protocol and data modelling language. + +The M-Plane specification describes how to use a set of xRAN defined YANG models +for managing the xRAN defined RU. This zip file contains the YANG models for +the xRAN defined Radio Unit (RU). + +Directory of YANG models + +All revisions of YANG models are available in this directory, with the revision +being embedded in the path for a particular model. For example all v1.0.0 models +are available using the directory path  + +http://www.xran.org/resources/yang/1-0-0/ + +Under the directory, the is a zip file that contains several sub-directories +used to organize the models according to the functionality they support: + +         Interfaces: Covering models for handling the RU’s Ethernet and IP + interfaces +         Operations: Covering models for operational aspects, including S/W, + performance and file management +         Radio: Covering models used to support the CU Plane lower PHY + functionality +         Sync: Covering models for synchronisation, including GNSS, PTP + and SyncE +         System: Covering models for hardware management, NETCONF + supervision, user account management and fan operation + +Validation + +The YANG files have been tested for compilation with pyang version 1.7.4. + +Known Issues + +A list of functionalities not currently supported by these YANG models is +defined in the M-Plane specification. + +Future Revisions + +Revisions to these YANG models are expected to be made to correct errors and +enable support for new functionalities. The YANG revisions statement will be +used to describe those changes to the YANG model that are backwards compatible. +Backwards incompatible changes will be addressed by using a major version number +as part of the model name and namespace. diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/sync/xran-sync.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/sync/xran-sync.yang new file mode 100644 index 0000000..e38b9be --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/sync/xran-sync.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-alarm-id.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-alarm-id.yang new file mode 100644 index 0000000..f87fcea --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-alarm-id.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fan.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fan.yang new file mode 100644 index 0000000..251f32f --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fan.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fm.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fm.yang new file mode 100644 index 0000000..9e034e9 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fm.yang @@ -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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-hardware.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-hardware.yang new file mode 100644 index 0000000..7788cb1 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-hardware.yang @@ -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 0" { + error-message "At least one account needs to be enabled."; + } + description + "Indicates whether an account is enabled or disabled."; + } + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/iana-hardware.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/iana-hardware.yang new file mode 100755 index 0000000..52bcaf3 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/iana-hardware.yang @@ -0,0 +1,180 @@ +module iana-hardware { +yang-version 1.1; +namespace "urn:ietf:params:xml:ns:yang:iana-hardware"; +prefix ianahw; + +organization "IANA"; +contact + " Internet Assigned Numbers Authority + Postal: ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094-2536 + United States of America + Tel: +1 310 301 5800 + E-Mail: iana@iana.org>"; + +description + "IANA-defined identities for hardware class. + The latest revision of this YANG module can be obtained from + the IANA website. + Requests for new values should be made to IANA via + email (iana@iana.org). + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + The initial version of this YANG module is part of RFC 8348; + see the RFC itself for full legal notices."; +reference + "https://www.iana.org/assignments/yang-parameters"; + +revision 2018-03-13 { + description + "Initial revision."; + reference + "RFC 8348: A YANG Data Model for Hardware Management"; +} + +/* + * Identities + */ + +identity hardware-class { + description + "This identity is the base for all hardware class + identifiers."; +} + +identity unknown { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is unknown + to the server."; +} + +identity chassis { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is an + overall container for networking equipment. Any class of + physical component, except a stack, may be contained within a + chassis; a chassis may only be contained within a stack."; +} + +identity backplane { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is some sort + of device for aggregating and forwarding networking traffic, + such as a shared backplane in a modular ethernet switch. Note + that an implementation may model a backplane as a single + physical component, which is actually implemented as multiple + discrete physical components (within a chassis or stack)."; +} + +identity container { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is capable + of containing one or more removable physical entities, + possibly of different types. For example, each (empty or + full) slot in a chassis will be modeled as a container. Note + that all removable physical components should be modeled + within a container component, such as field-replaceable + modules, fans, or power supplies. Note that all known + containers should be modeled by the agent, including empty + containers."; +} + +identity power-supply { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is a + power-supplying component."; +} + +identity fan { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is a fan or + other heat-reduction component."; +} + +identity sensor { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is some sort + of sensor, such as a temperature sensor within a router + chassis."; +} + +identity module { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is some sort + of self-contained sub-system. If a module component is + removable, then it should be modeled within a container + component; otherwise, it should be modeled directly within + another physical component (e.g., a chassis or another + module)."; +} + +identity port { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is some sort + of networking port capable of receiving and/or transmitting + networking traffic."; +} + +identity stack { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is some sort + of super-container (possibly virtual) intended to group + together multiple chassis entities. A stack may be realized + by a virtual cable, a real interconnect cable attached to + multiple chassis, or multiple interconnect cables. A stack + should not be modeled within any other physical components, + but a stack may be contained within another stack. Only + chassis components should be contained within a stack."; +} + +identity cpu { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is some sort + of central processing unit."; +} + +identity energy-object { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is some sort + of energy object, i.e., it is a piece of equipment that is + part of or attached to a communications network that is + monitored, it is controlled, or it aids in the management of + another device for Energy Management."; +} + +identity battery { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is some sort + of battery."; +} + +identity storage-drive { + base ianahw:hardware-class; + description + "This identity is applicable if the hardware class is some sort + of component with data storage capability as its main + functionality, e.g., hard disk drive (HDD), solid-state device + (SSD), solid-state hybrid drive (SSHD), object storage device + (OSD), or other."; +} +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-alarms@2019-09-11.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-alarms@2019-09-11.yang new file mode 100644 index 0000000..a6f51bb --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-alarms@2019-09-11.yang @@ -0,0 +1,1530 @@ +module ietf-alarms { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-alarms"; + prefix al; + + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types."; + } + + organization + "IETF CCAMP Working Group"; + contact + "WG Web: + WG List: + + Editor: Stefan Vallin + + + Editor: Martin Bjorklund + "; + description + "This module defines an interface for managing alarms. Main + inputs to the module design are the 3GPP Alarm Integration + Reference Point (IRP), ITU-T X.733, and ANSI/ISA-18.2 alarm + standards. + + Main features of this module include: + + * Alarm list: + A list of all alarms. Cleared alarms stay in + the list until explicitly purged. + + * Operator actions on alarms: + Acknowledging and closing alarms. + + * Administrative actions on alarms: + Purging alarms from the list according to specific + criteria. + + * Alarm inventory: + A management application can read all + alarm types implemented by the system. + + * Alarm shelving: + Shelving (blocking) alarms according + to specific criteria. + + * Alarm profiles: + A management system can attach further + information to alarm types, for example, + overriding system-default severity + levels. + + This module uses a stateful view on alarms. An alarm is a state + for a specific resource (note that an alarm is not a + notification). An alarm type is a possible alarm state for a + resource. For example, the tuple: + + ('link-alarm', 'GigabitEthernet0/25') + + is an alarm of type 'link-alarm' on the resource + 'GigabitEthernet0/25'. + + Alarm types are identified using YANG identities and an optional + string-based qualifier. The string-based qualifier allows for + dynamic extension of the statically defined alarm types. Alarm + types identify a possible alarm state and not the individual + notifications. For example, the traditional 'link-down' and + 'link-up' notifications are two notifications referring to the + same alarm type 'link-alarm'. + + With this design, there is no ambiguity about how alarm and + alarm clear correlation should be performed; notifications that + report the same resource and alarm type are considered updates + + of the same alarm, e.g., clearing an active alarm or changing + the severity of an alarm. The instrumentation can update the + severity and alarm text on an existing alarm. The above alarm + example can therefore look like the following: + + (('link-alarm', 'GigabitEthernet0/25'), + warning, + 'interface down while interface admin state is up') + + There is a clear separation between updates on the alarm from + the underlying resource, like clear, and updates from an + operator, like acknowledging or closing an alarm: + + (('link-alarm', 'GigabitEthernet0/25'), + warning, + 'interface down while interface admin state is up', + cleared, + closed) + + Administrative actions like removing closed alarms older than a + given time is supported. + + This YANG module does not define how the underlying + instrumentation detects and clears the specific alarms. That + belongs to the Standards Development Organization (SDO) or + enterprise that owns that specific technology. + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here. + + Copyright (c) 2019 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject to + the license terms contained in, the Simplified BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8632; see + the RFC itself for full legal notices."; + + revision 2019-09-11 { + description + "Initial revision."; + reference + "RFC 8632: A YANG Data Model for Alarm Management"; + } + + /* + * Features + */ + + feature operator-actions { + description + "This feature indicates that the system supports operator + states on alarms."; + } + + feature alarm-shelving { + description + "This feature indicates that the system supports shelving + (blocking) alarms. + + Alarm shelving may have an impact on server processing + resources in order to match alarms against shelf + criteria."; + } + + feature alarm-history { + description + "This feature indicates that the server maintains a history + of state changes for each alarm. For example, if an alarm + toggles between cleared and active 10 times, these state + changes are present in a separate list in the alarm. + + Keeping the alarm history may have an impact on server + memory resources."; + } + + feature alarm-summary { + description + "This feature indicates that the server summarizes the number + of alarms per severity and operator state."; + } + + feature alarm-profile { + description + "The system enables clients to configure further information + to each alarm type."; + } + + feature severity-assignment { + description + "The system supports configurable alarm severity levels."; + reference + "ITU-T Recommendation M.3100: + Generic network information model + ITU-T Recommendation M.3160: + Generic, protocol-neutral management information model"; + } + + feature root-cause-analysis { + description + "The system supports identifying candidate root-cause + resources for an alarm, for example, a disk partition + root cause for a logger failure alarm."; + } + + feature service-impact-analysis { + description + "The system supports identifying candidate-impacted + resources for an alarm, for example, an interface state change + resulting in a link alarm, which can refer to a link as being + impacted."; + } + + feature alarm-correlation { + description + "The system supports correlating/grouping alarms + that belong together."; + } + + /* + * Identities + */ + + identity alarm-type-id { + description + "Base identity for alarm types. A unique identification of + the alarm, not including the resource. Different resources + can share alarm types. If the resource reports the same + alarm type, it is considered to be the same alarm. The alarm + type is a simplification of the different X.733 and 3GPP Alarm + IRP correlation mechanisms, and it allows for + hierarchical extensions. + + A string-based qualifier can be used in addition to the + identity in order to have different alarm types based on + information not known at design time, such as values in + + textual SNMP Notification varbinds. + + Standards and vendors can define sub-identities to clearly + identify specific alarm types. + + This identity is abstract and MUST NOT be used for alarms."; + } + + /* + * Common types + */ + + typedef resource { + type union { + type instance-identifier { + require-instance false; + } + type yang:object-identifier; + type string; + type yang:uuid; + } + description + "This is an identification of the alarming resource, such as an + interface. It should be as fine-grained as possible to both + guide the operator and guarantee uniqueness of the alarms. + + If the alarming resource is modeled in YANG, this type will + be an instance-identifier. + + If the resource is an SNMP object, the type will be an + 'object-identifier'. + + If the resource is anything else, for example, a distinguished + name or a Common Information Model (CIM) path, this type will + be a string. + + If the alarming object is identified by a Universally Unique + Identifier (UUID), use the uuid type. Be cautious when using + this type, since a UUID is hard to use for an operator. + + If the server supports several models, the precedence should + be in the order as given in the union definition."; + } + + typedef resource-match { + type union { + type yang:xpath1.0; + type yang:object-identifier; + type string; + } + description + "This type is used to match resources of type 'resource'. + Since the type 'resource' is a union of different types, the + 'resource-match' type is also a union of corresponding types. + + If the type is given as an XPath 1.0 expression, a resource + of type 'instance-identifier' matches if the instance is part + of the node set that is the result of evaluating the XPath 1.0 + expression. For example, the XPath 1.0 expression: + + /ietf-interfaces:interfaces/ietf-interfaces:interface + [ietf-interfaces:type='ianaift:ethernetCsmacd'] + + would match the resource instance-identifier: + + /if:interfaces/if:interface[if:name='eth1'], + + assuming that the interface 'eth1' is of type + 'ianaift:ethernetCsmacd'. + + If the type is given as an object identifier, a resource of + type 'object-identifier' matches if the match object + identifier is a prefix of the resource's object identifier. + For example, the value: + + 1.3.6.1.2.1.2.2 + + would match the resource object identifier: + + 1.3.6.1.2.1.2.2.1.1.5 + + If the type is given as an UUID or a string, it is interpreted + as an XML Schema regular expression, which matches a resource + of type 'yang:uuid' or 'string' if the given regular + expression matches the resource string. + + If the type is given as an XPath expression, it is evaluated + in the following XPath context: + + o The set of namespace declarations is the set of prefix + and namespace pairs for all YANG modules implemented by + the server, where the prefix is the YANG module name and + the namespace is as defined by the 'namespace' statement + in the YANG module. + + If a leaf of this type is encoded in XML, all namespace + + declarations in scope on the leaf element are added to + the set of namespace declarations. If a prefix found in + the XML is already present in the set of namespace + declarations, the namespace in the XML is used. + + o The set of variable bindings is empty. + + o The function library is the core function library, and + the functions are defined in Section 10 of RFC 7950. + + o The context node is the root node in the data tree."; + reference + "XML Schema Part 2: Datatypes Second Edition, + World Wide Web Consortium Recommendation + REC-xmlschema-2-20041028"; + } + + typedef alarm-text { + type string; + description + "The string used to inform operators about the alarm. This + MUST contain enough information for an operator to be able to + understand the problem and how to resolve it. If this string + contains structure, this format should be clearly documented + for programs to be able to parse that information."; + } + + typedef severity { + type enumeration { + enum indeterminate { + value 2; + description + "Indicates that the severity level could not be + determined. This level SHOULD be avoided."; + } + enum warning { + value 3; + description + "The 'warning' severity level indicates the detection of a + potential or impending service-affecting fault, before any + significant effects have been felt. Action should be + taken to further diagnose (if necessary) and correct the + problem in order to prevent it from becoming a more + serious service-affecting fault."; + } + enum minor { + value 4; + description + "The 'minor' severity level indicates the existence of a + non-service-affecting fault condition and that corrective + action should be taken in order to prevent a more serious + (for example, service-affecting) fault. Such a severity + can be reported, for example, when the detected alarm + condition is not currently degrading the capacity of the + resource."; + } + enum major { + value 5; + description + "The 'major' severity level indicates that a service- + affecting condition has developed and an urgent corrective + action is required. Such a severity can be reported, for + example, when there is a severe degradation in the + capability of the resource and its full capability must be + restored."; + } + enum critical { + value 6; + description + "The 'critical' severity level indicates that a service- + affecting condition has occurred and an immediate + corrective action is required. Such a severity can be + reported, for example, when a resource becomes totally out + of service and its capability must be restored."; + } + } + description + "The severity level of the alarm. Note well that the value + 'clear' is not included. Whether or not an alarm is cleared + is a separate boolean flag."; + reference + "ITU-T Recommendation X.733: Information Technology + - Open Systems Interconnection + - System Management: Alarm Reporting Function"; + } + + typedef severity-with-clear { + type union { + type enumeration { + enum cleared { + value 1; + description + "The alarm is cleared by the instrumentation."; + } + } + type severity; + } + description + "The severity level of the alarm including clear. This is used + only in notifications reporting state changes for an alarm."; + } + + typedef writable-operator-state { + type enumeration { + enum none { + value 1; + description + "The alarm is not being taken care of."; + } + enum ack { + value 2; + description + "The alarm is being taken care of. Corrective action not + taken yet or has failed"; + } + enum closed { + value 3; + description + "Corrective action taken successfully."; + } + } + description + "Operator states on an alarm. The 'closed' state indicates + that an operator considers the alarm being resolved. This is + separate from the alarm's 'is-cleared' leaf."; + } + + typedef operator-state { + type union { + type writable-operator-state; + type enumeration { + enum shelved { + value 4; + description + "The alarm is shelved. Alarms in /alarms/shelved-alarms/ + MUST be assigned this operator state by the server as + the last entry in the 'operator-state-change' list. The + text for that entry SHOULD include the shelf name."; + } + enum un-shelved { + value 5; + description + "The alarm is moved back to 'alarm-list' from a shelf. + Alarms that are moved from /alarms/shelved-alarms/ to + /alarms/alarm-list MUST be assigned this state by the + server as the last entry in the 'operator-state-change' + list. The text for that entry SHOULD include the shelf + name."; + } + } + } + description + "Operator states on an alarm. The 'closed' state indicates + that an operator considers the alarm being resolved. This is + separate from the alarm's 'is-cleared' leaf."; + } + + /* Alarm type */ + + typedef alarm-type-id { + type identityref { + base alarm-type-id; + } + description + "Identifies an alarm type. The description of the alarm type + id MUST indicate whether or not the alarm type is abstract. + An abstract alarm type is used as a base for other alarm type + ids and will not be used as a value for an alarm or be present + in the alarm inventory."; + } + + typedef alarm-type-qualifier { + type string; + description + "If an alarm type cannot be fully specified at design time by + 'alarm-type-id', this string qualifier is used in addition to + fully define a unique alarm type. + + The definition of alarm qualifiers is considered to be part of + the instrumentation and is out of scope for this module. An + empty string is used when this is part of a key."; + } + + /* + * Groupings + */ + + grouping common-alarm-parameters { + description + "Common parameters for an alarm. + + This grouping is used both in the alarm list and in the + notification representing an alarm-state change."; + leaf resource { + type resource; + mandatory true; + description + "The alarming resource. See also 'alt-resource'. This could + be, for example, a reference to the alarming interface"; + } + leaf alarm-type-id { + type alarm-type-id; + mandatory true; + description + "This leaf and the leaf 'alarm-type-qualifier' together + provide a unique identification of the alarm type."; + } + leaf alarm-type-qualifier { + type alarm-type-qualifier; + description + "This leaf is used when the 'alarm-type-id' leaf cannot + uniquely identify the alarm type. Normally, this is not the + case, and this leaf is the empty string."; + } + leaf-list alt-resource { + type resource; + description + "Used if the alarming resource is available over other + interfaces. This field can contain SNMP OIDs, CIM paths, or + 3GPP distinguished names, for example."; + } + list related-alarm { + if-feature "alarm-correlation"; + key "resource alarm-type-id alarm-type-qualifier"; + description + "References to related alarms. Note that the related alarm + might have been purged from the alarm list."; + leaf resource { + type leafref { + path "/alarms/alarm-list/alarm/resource"; + require-instance false; + } + description + "The alarming resource for the related alarm."; + } + leaf alarm-type-id { + type leafref { + path "/alarms/alarm-list/alarm" + + "[resource=current()/../resource]" + + "/alarm-type-id"; + require-instance false; + } + description + "The alarm type identifier for the related alarm."; + } + leaf alarm-type-qualifier { + type leafref { + path "/alarms/alarm-list/alarm" + + "[resource=current()/../resource]" + + "[alarm-type-id=current()/../alarm-type-id]" + + "/alarm-type-qualifier"; + require-instance false; + } + description + "The alarm qualifier for the related alarm."; + } + } + leaf-list impacted-resource { + if-feature "service-impact-analysis"; + type resource; + description + "Resources that might be affected by this alarm. If the + system creates an alarm on a resource and also has a mapping + to other resources that might be impacted, these resources + can be listed in this leaf-list. In this way, the system + can create one alarm instead of several. For example, if an + interface has an alarm, the 'impacted-resource' can + reference the aggregated port channels."; + } + leaf-list root-cause-resource { + if-feature "root-cause-analysis"; + type resource; + description + "Resources that are candidates for causing the alarm. If the + system has a mechanism to understand the candidate root + causes of an alarm, this leaf-list can be used to list the + root-cause candidate resources. In this way, the system can + create one alarm instead of several. An example might be a + logging system (alarm resource) that fails; the alarm can + reference the file system in the 'root-cause-resource' + leaf-list. Note that the intended use is not to also send + an alarm with the 'root-cause-resource' as an alarming + resource. The 'root-cause-resource' leaf-list is a hint and + should not also generate an alarm for the same problem."; + } + } + + grouping alarm-state-change-parameters { + description + "Parameters for an alarm-state change. + + This grouping is used both in the alarm list's status-change + list and in the notification representing an alarm-state + change."; + leaf time { + type yang:date-and-time; + mandatory true; + description + "The time the status of the alarm changed. The value + represents the time the real alarm-state change appeared in + the resource and not when it was added to the alarm + list. The /alarm-list/alarm/last-changed MUST be set to the + same value."; + } + leaf perceived-severity { + type severity-with-clear; + mandatory true; + description + "The severity of the alarm as defined by X.733. Note that + this may not be the original severity since the alarm may + have changed severity."; + reference + "ITU-T Recommendation X.733: Information Technology + - Open Systems Interconnection + - System Management: Alarm Reporting Function"; + } + leaf alarm-text { + type alarm-text; + mandatory true; + description + "A user-friendly text describing the alarm-state change."; + reference + "ITU-T Recommendation X.733: Information Technology + - Open Systems Interconnection + - System Management: Alarm Reporting Function"; + } + } + + grouping operator-parameters { + description + "This grouping defines parameters that can be changed by an + operator."; + leaf time { + type yang:date-and-time; + mandatory true; + description + "Timestamp for operator action on the alarm."; + } + leaf operator { + type string; + mandatory true; + description + "The name of the operator that has acted on this alarm."; + } + leaf state { + type operator-state; + mandatory true; + description + "The operator's view of the alarm state."; + } + leaf text { + type string; + description + "Additional optional textual information provided by the + operator."; + } + } + + grouping resource-alarm-parameters { + description + "Alarm parameters that originate from the resource view."; + leaf is-cleared { + type boolean; + mandatory true; + description + "Indicates the current clearance state of the alarm. An + alarm might toggle from active alarm to cleared alarm and + back to active again."; + } + leaf last-raised { + type yang:date-and-time; + mandatory true; + description + "An alarm may change severity level and toggle between + active and cleared during its lifetime. This leaf indicates + the last time it was raised ('is-cleared' = 'false')."; + } + leaf last-changed { + type yang:date-and-time; + mandatory true; + description + "A timestamp when the 'status-change' or + 'operator-state-change' list was last changed."; + } + leaf perceived-severity { + type severity; + mandatory true; + description + "The last severity of the alarm. + + If an alarm was raised with severity 'warning' but later + changed to 'major', this leaf will show 'major'."; + } + leaf alarm-text { + type alarm-text; + mandatory true; + description + "The last reported alarm text. This text should contain + information for an operator to be able to understand the + problem and how to resolve it."; + } + list status-change { + if-feature "alarm-history"; + key "time"; + min-elements 1; + description + "A list of status-change events for this alarm. + + The entry with latest timestamp in this list MUST + correspond to the leafs 'is-cleared', 'perceived-severity', + and 'alarm-text' for the alarm. + + This list is ordered according to the timestamps of alarm + state changes. The first item corresponds to the latest + state change. + + The following state changes create an entry in this + list: + - changed severity (warning, minor, major, critical) + - clearance status; this also updates the 'is-cleared' + leaf + - alarm-text update"; + uses alarm-state-change-parameters; + } + } + + grouping filter-input { + description + "Grouping to specify a filter construct on alarm information."; + leaf alarm-clearance-status { + type enumeration { + enum any { + description + "Ignore alarm-clearance status."; + } + enum cleared { + description + "Filter cleared alarms."; + } + enum not-cleared { + description + "Filter not-cleared alarms."; + } + } + mandatory true; + description + "The clearance status of the alarm."; + } + container older-than { + presence "Age specification"; + description + "Matches the 'last-status-change' leaf in the alarm."; + choice age-spec { + description + "Filter using date and time age."; + case seconds { + leaf seconds { + type uint16; + description + "Age expressed in seconds."; + } + } + case minutes { + leaf minutes { + type uint16; + description + "Age expressed in minutes."; + } + } + case hours { + leaf hours { + type uint16; + description + "Age expressed in hours."; + } + } + case days { + leaf days { + type uint16; + description + "Age expressed in days."; + } + } + case weeks { + leaf weeks { + type uint16; + description + "Age expressed in weeks."; + } + } + } + } + container severity { + presence "Severity filter"; + choice sev-spec { + description + "Filter based on severity level."; + leaf below { + type severity; + description + "Severity less than this leaf."; + } + leaf is { + type severity; + description + "Severity level equal to this leaf."; + } + leaf above { + type severity; + description + "Severity level higher than this leaf."; + } + } + description + "Filter based on severity."; + } + container operator-state-filter { + if-feature "operator-actions"; + presence "Operator state filter"; + leaf state { + type operator-state; + description + "Filter on operator state."; + } + leaf user { + type string; + description + "Filter based on which operator."; + } + description + "Filter based on operator state."; + } + } + + /* + * The /alarms data tree + */ + + container alarms { + description + "The top container for this module."; + container control { + description + "Configuration to control the alarm behavior."; + leaf max-alarm-status-changes { + type union { + type uint16; + type enumeration { + enum infinite { + description + "The status-change entries are accumulated + infinitely."; + } + } + } + default "32"; + description + "The 'status-change' entries are kept in a circular list + per alarm. When this number is exceeded, the oldest + status change entry is automatically removed. If the + value is 'infinite', the status-change entries are + accumulated infinitely."; + } + leaf notify-status-changes { + type enumeration { + enum all-state-changes { + description + "Send notifications for all status changes."; + } + enum raise-and-clear { + description + "Send notifications only for raise, clear, and + re-raise. Notifications for severity-level changes or + alarm-text changes are not sent."; + } + enum severity-level { + description + "Only send notifications for alarm-state changes + crossing the level specified in + 'notify-severity-level'. Always send clear + notifications."; + } + } + must '. != "severity-level" or ../notify-severity-level' { + description + "When notify-status-changes is 'severity-level', a value + must be given for 'notify-severity-level'."; + } + default "all-state-changes"; + description + "This leaf controls the notifications sent for alarm status + updates. There are three options: + + 1. Notifications are sent for all updates, severity-level + changes, and alarm-text changes. + + 2. Notifications are only sent for alarm raise and clear. + + 3. Notifications are sent for status changes equal to or + above the specified severity level. Clear + notifications shall always be sent. Notifications + shall also be sent for state changes that make an + alarm less severe than the specified level. + + For example, in option 3, assume that the severity level + is set to major and that the alarm has the following state + changes: + + [(Time, severity, clear)]: + [(T1, major, -), (T2, minor, -), (T3, warning, -), + (T4, minor, -), (T5, major, -), (T6, critical, -), + (T7, major. -), (T8, major, clear)] + + In that case, notifications will be sent at times + T1, T2, T5, T6, T7, and T8."; + } + leaf notify-severity-level { + when '../notify-status-changes = "severity-level"'; + type severity; + description + "Only send notifications for alarm-state changes crossing + the specified level. Always send clear notifications."; + } + container alarm-shelving { + if-feature "alarm-shelving"; + description + "The 'alarm-shelving/shelf' list is used to shelve + (block/filter) alarms. The conditions in the shelf + criteria are logically ANDed. The first matching shelf is + used, and an alarm is shelved only for this first match. + Matching alarms MUST appear in the + /alarms/shelved-alarms/shelved-alarm list, and + non-matching /alarms MUST appear in the + /alarms/alarm-list/alarm list. The server does not send + any notifications for shelved alarms. + + The server MUST maintain states (e.g., severity + changes) for the shelved alarms. + + Alarms that match the criteria shall have an + operator state 'shelved'. When the shelf + configuration removes an alarm from the shelf, the server + shall add the operator state 'un-shelved'."; + list shelf { + key "name"; + ordered-by user; + leaf name { + type string; + description + "An arbitrary name for the alarm shelf."; + } + description + "Each entry defines the criteria for shelving alarms. + Criteria are ANDed. If no criteria are specified, + all alarms will be shelved."; + leaf-list resource { + type resource-match; + description + "Shelve alarms for matching resources."; + } + list alarm-type { + key "alarm-type-id alarm-type-qualifier-match"; + description + "Any alarm matching the combined criteria of + 'alarm-type-id' and 'alarm-type-qualifier-match' + MUST be matched."; + leaf alarm-type-id { + type alarm-type-id; + description + "Shelve all alarms that have an 'alarm-type-id' that + is equal to or derived from the given + 'alarm-type-id'."; + } + leaf alarm-type-qualifier-match { + type string; + description + "An XML Schema regular expression that is used to + match an alarm type qualifier. Shelve all alarms + that match this regular expression for the alarm + type qualifier."; + reference + "XML Schema Part 2: Datatypes Second Edition, + World Wide Web Consortium Recommendation + REC-xmlschema-2-20041028"; + } + } + leaf description { + type string; + description + "An optional textual description of the shelf. This + description should include the reason for shelving + these alarms."; + } + } + } + } + container alarm-inventory { + config false; + description + "The 'alarm-inventory/alarm-type' list contains all possible + alarm types for the system. + + If the system knows for which resources a specific alarm + type can appear, it is also identified in the inventory. + The list also tells if each alarm type has a corresponding + clear state. The inventory shall only contain concrete + alarm types. + + The alarm inventory MUST be updated by the system when new + alarms can appear. This can be the case when installing new + software modules or inserting new card types. A + notification 'alarm-inventory-changed' is sent when the + inventory is changed."; + list alarm-type { + key "alarm-type-id alarm-type-qualifier"; + description + "An entry in this list defines a possible alarm."; + leaf alarm-type-id { + type alarm-type-id; + description + "The statically defined alarm type identifier for this + possible alarm."; + } + leaf alarm-type-qualifier { + type alarm-type-qualifier; + description + "The optionally dynamically defined alarm type identifier + for this possible alarm."; + } + leaf-list resource { + type resource-match; + description + "Optionally, specifies for which resources the alarm type + is valid."; + } + leaf will-clear { + type boolean; + mandatory true; + description + "This leaf tells the operator if the alarm will be + cleared when the correct corrective action has been + taken. Implementations SHOULD strive for detecting the + cleared state for all alarm types. + + If this leaf is 'true', the operator can monitor the + alarm until it becomes cleared after the corrective + action has been taken. + + If this leaf is 'false', the operator needs to validate + that the alarm is no longer active using other + mechanisms. Alarms can lack a corresponding clear due + to missing instrumentation or no logical + corresponding clear state."; + } + leaf-list severity-level { + type severity; + description + "This leaf-list indicates the possible severity levels of + this alarm type. Note well that 'clear' is not part of + the severity type. In general, the severity level + should be defined by the instrumentation based on the + dynamic state, rather than being defined statically by + the alarm type, in order to provide a relevant severity + level based on dynamic state and context. However, most + alarm types have a defined set of possible severity + levels, and this should be provided here."; + } + leaf description { + type string; + mandatory true; + description + "A description of the possible alarm. It SHOULD include + information on possible underlying root causes and + corrective actions."; + } + } + } + container summary { + if-feature "alarm-summary"; + config false; + description + "This container gives a summary of the number of alarms."; + list alarm-summary { + key "severity"; + description + "A global summary of all alarms in the system. The summary + does not include shelved alarms."; + leaf severity { + type severity; + description + "Alarm summary for this severity level."; + } + leaf total { + type yang:gauge32; + description + "Total number of alarms of this severity level."; + } + leaf not-cleared { + type yang:gauge32; + description + "Total number of alarms of this severity level + that are not cleared."; + } + leaf cleared { + type yang:gauge32; + description + "For this severity level, the number of alarms that are + cleared."; + } + leaf cleared-not-closed { + if-feature "operator-actions"; + type yang:gauge32; + description + "For this severity level, the number of alarms that are + cleared but not closed."; + } + leaf cleared-closed { + if-feature "operator-actions"; + type yang:gauge32; + description + "For this severity level, the number of alarms that are + cleared and closed."; + } + leaf not-cleared-closed { + if-feature "operator-actions"; + type yang:gauge32; + description + "For this severity level, the number of alarms that are + not cleared but closed."; + } + leaf not-cleared-not-closed { + if-feature "operator-actions"; + type yang:gauge32; + description + "For this severity level, the number of alarms that are + not cleared and not closed."; + } + } + leaf shelves-active { + if-feature "alarm-shelving"; + type empty; + description + "This is a hint to the operator that there are active + alarm shelves. This leaf MUST exist if the + /alarms/shelved-alarms/number-of-shelved-alarms is > 0."; + } + } + container alarm-list { + config false; + description + "The alarms in the system."; + leaf number-of-alarms { + type yang:gauge32; + description + "This object shows the total number of + alarms in the system, i.e., the total number + of entries in the alarm list."; + } + leaf last-changed { + type yang:date-and-time; + description + "A timestamp when the alarm list was last + changed. The value can be used by a manager to + initiate an alarm resynchronization procedure."; + } + list alarm { + key "resource alarm-type-id alarm-type-qualifier"; + description + "The list of alarms. Each entry in the list holds one + alarm for a given alarm type and resource. An alarm can + be updated from the underlying resource or by the user. + The following leafs are maintained by the resource: + 'is-cleared', 'last-change', 'perceived-severity', and + 'alarm-text'. An operator can change 'operator-state' and + 'operator-text'. + + Entries appear in the alarm list the first time an alarm + becomes active for a given alarm type and resource. + Entries do not get deleted when the alarm is cleared. + Clear status is represented as a boolean flag. + + Alarm entries are removed, i.e., purged, from the list by + an explicit purge action. For example, purge all alarms + that are cleared and in closed operator state that are + older than 24 hours. Purged alarms are removed from the + alarm list. If the alarm resource state changes after a + purge, the alarm will reappear in the alarm list. + + Systems may also remove alarms based on locally configured + policies; this is out of scope for this module."; + uses common-alarm-parameters; + leaf time-created { + type yang:date-and-time; + mandatory true; + description + "The timestamp when this alarm entry was created. This + represents the first time the alarm appeared; it can + also represent that the alarm reappeared after a purge. + Further state changes of the same alarm do not change + this leaf; these changes will update the 'last-changed' + leaf."; + } + uses resource-alarm-parameters; + list operator-state-change { + if-feature "operator-actions"; + key "time"; + description + "This list is used by operators to indicate the state of + human intervention on an alarm. For example, if an + operator has seen an alarm, the operator can add a new + item to this list indicating that the alarm is + acknowledged."; + uses operator-parameters; + } + action set-operator-state { + if-feature "operator-actions"; + description + "This is a means for the operator to indicate the level + of human intervention on an alarm."; + input { + leaf state { + type writable-operator-state; + mandatory true; + description + "Set this operator state."; + } + leaf text { + type string; + description + "Additional optional textual information."; + } + } + } + notification operator-action { + if-feature "operator-actions"; + description + "This notification is used to report that an operator + acted upon an alarm."; + uses operator-parameters; + } + } + action purge-alarms { + description + "This operation requests that the server delete entries + from the alarm list according to the supplied criteria. + + Typically, this operation is used to delete alarms that + are in closed operator state and older than a specified + time. + + The number of purged alarms is returned as an output + parameter."; + input { + uses filter-input; + } + output { + leaf purged-alarms { + type uint32; + description + "Number of purged alarms."; + } + } + } + action compress-alarms { + if-feature "alarm-history"; + description + "This operation requests that the server compress + entries in the alarm list by removing all but the + latest 'status-change' entry for all matching alarms. + Conditions in the input are logically ANDed. If no + input condition is given, all alarms are compressed."; + input { + leaf resource { + type resource-match; + description + "Compress the alarms matching this resource."; + } + leaf alarm-type-id { + type leafref { + path "/alarms/alarm-list/alarm/alarm-type-id"; + require-instance false; + } + description + "Compress alarms with this 'alarm-type-id'."; + } + leaf alarm-type-qualifier { + type leafref { + path "/alarms/alarm-list/alarm/alarm-type-qualifier"; + require-instance false; + } + description + "Compress the alarms with this + 'alarm-type-qualifier'."; + } + } + output { + leaf compressed-alarms { + type uint32; + description + "Number of compressed alarm entries."; + } + } + } + } + container shelved-alarms { + if-feature "alarm-shelving"; + config false; + description + "The shelved alarms. Alarms appear here if they match the + criteria in /alarms/control/alarm-shelving. This list does + not generate any notifications. The list represents alarms + that are considered not relevant by the operator. Alarms in + this list have an 'operator-state' of 'shelved'. This + cannot be changed."; + leaf number-of-shelved-alarms { + type yang:gauge32; + description + "This object shows the total number of current + alarms, i.e., the total number of entries + in the alarm list."; + } + leaf shelved-alarms-last-changed { + type yang:date-and-time; + description + "A timestamp when the shelved-alarm list was last changed. + The value can be used by a manager to initiate an alarm + resynchronization procedure."; + } + list shelved-alarm { + key "resource alarm-type-id alarm-type-qualifier"; + description + "The list of shelved alarms. Shelved alarms can only be + updated from the underlying resource; no operator actions + are supported."; + uses common-alarm-parameters; + leaf shelf-name { + type leafref { + path "/alarms/control/alarm-shelving/shelf/name"; + require-instance false; + } + description + "The name of the shelf."; + } + uses resource-alarm-parameters; + list operator-state-change { + if-feature "operator-actions"; + key "time"; + description + "This list is used by operators to indicate the state of + human intervention on an alarm. For shelved alarms, the + system has set the list item in the list to 'shelved'."; + uses operator-parameters; + } + } + action purge-shelved-alarms { + description + "This operation requests that the server delete entries from + the shelved-alarm list according to the supplied criteria. + In the shelved-alarm list, it makes sense to delete alarms + that are not relevant anymore. + + The number of purged alarms is returned as an output + parameter."; + input { + uses filter-input; + } + output { + leaf purged-alarms { + type uint32; + description + "Number of purged alarms."; + } + } + } + action compress-shelved-alarms { + if-feature "alarm-history"; + description + "This operation requests that the server compress entries + in the shelved-alarm list by removing all but the latest + 'status-change' entry for all matching shelved alarms. + Conditions in the input are logically ANDed. If no input + condition is given, all alarms are compressed."; + input { + leaf resource { + type leafref { + path "/alarms/shelved-alarms/shelved-alarm/resource"; + require-instance false; + } + description + "Compress the alarms with this resource."; + } + leaf alarm-type-id { + type leafref { + path "/alarms/shelved-alarms/shelved-alarm" + + "/alarm-type-id"; + require-instance false; + } + description + "Compress alarms with this 'alarm-type-id'."; + } + leaf alarm-type-qualifier { + type leafref { + path "/alarms/shelved-alarms/shelved-alarm" + + "/alarm-type-qualifier"; + require-instance false; + } + description + "Compress the alarms with this + 'alarm-type-qualifier'."; + } + } + output { + leaf compressed-alarms { + type uint32; + description + "Number of compressed alarm entries."; + } + } + } + } + list alarm-profile { + if-feature "alarm-profile"; + key "alarm-type-id alarm-type-qualifier-match resource"; + ordered-by user; + description + "This list is used to assign further information or + configuration for each alarm type. This module supports a + mechanism where the client can override the system-default + alarm severity levels. The 'alarm-profile' is also a useful + augmentation point for specific additions to alarm types."; + leaf alarm-type-id { + type alarm-type-id; + description + "The alarm type identifier to match."; + } + leaf alarm-type-qualifier-match { + type string; + description + "An XML Schema regular expression that is used to match the + alarm type qualifier."; + reference + "XML Schema Part 2: Datatypes Second Edition, + World Wide Web Consortium Recommendation + REC-xmlschema-2-20041028"; + } + leaf resource { + type resource-match; + description + "Specifies which resources to match."; + } + leaf description { + type string; + mandatory true; + description + "A description of the alarm profile."; + } + container alarm-severity-assignment-profile { + if-feature "severity-assignment"; + description + "The client can override the system-default severity + level."; + reference + "ITU-T Recommendation M.3100: + Generic network information model + ITU-T Recommendation M.3160: + Generic, protocol-neutral management information model"; + leaf-list severity-level { + type severity; + ordered-by user; + description + "Specifies the configured severity level(s) for the + matching alarm. If the alarm has several severity + levels, the leaf-list shall be given in rising severity + order. The original M3100/M3160 ASAP function only + allows for a one-to-one mapping between alarm type and + severity, but since YANG module supports stateful + alarms, the mapping must allow for several severity + levels. + + Assume a high-utilization alarm type with two thresholds + with the system-default severity levels of threshold1 = + warning and threshold2 = minor. Setting this leaf-list + to (minor, major) will assign the severity levels as + threshold1 = minor and threshold2 = major"; + } + } + } + } + + /* + * Notifications + */ + + notification alarm-notification { + description + "This notification is used to report a state change for an + alarm. The same notification is used for reporting a newly + raised alarm, a cleared alarm, or changing the text and/or + severity of an existing alarm."; + uses common-alarm-parameters; + uses alarm-state-change-parameters; + } + + notification alarm-inventory-changed { + description + "This notification is used to report that the list of possible + alarms has changed. This can happen when, for example, a new + software module is installed or a new physical card is + inserted."; + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-hardware.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-hardware.yang new file mode 100755 index 0000000..f444e26 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-hardware.yang @@ -0,0 +1,1141 @@ +module ietf-hardware { +yang-version 1.1; +namespace "urn:ietf:params:xml:ns:yang:ietf-hardware"; +prefix hw; + +import ietf-inet-types { + prefix inet; +} +import ietf-yang-types { + prefix yang; +} +import iana-hardware { + prefix ianahw; +} + +organization + "IETF NETMOD (Network Modeling) Working Group"; + +contact + "WG Web: + WG List: + Editor: Andy Bierman + + Editor: Martin Bjorklund + + Editor: Jie Dong + + Editor: Dan Romascanu + "; + +description + "This module contains a collection of YANG definitions for + managing hardware. + This data model is designed for the Network Management Datastore + Architecture (NMDA) defined in RFC 8342. + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + This version of this YANG module is part of RFC 8348; see + the RFC itself for full legal notices."; + +revision 2018-03-13 { + description + "Initial revision."; + reference + "RFC 8348: A YANG Data Model for Hardware Management"; +} + +/* + * Features + */ + +feature entity-mib { + description + "This feature indicates that the device implements + the ENTITY-MIB."; + reference + "RFC 6933: Entity MIB (Version 4)"; +} + +feature hardware-state { + description + "Indicates that ENTITY-STATE-MIB objects are supported"; + reference + "RFC 4268: Entity State MIB"; +} + +feature hardware-sensor { + description + "Indicates that ENTITY-SENSOR-MIB objects are supported"; + reference + "RFC 3433: Entity Sensor Management Information Base"; +} + +/* + * Typedefs + */ + +typedef admin-state { + type enumeration { + enum unknown { + value 1; + description + "The resource is unable to report administrative state."; + } + enum locked { + value 2; + description + "The resource is administratively prohibited from use."; + } + enum shutting-down { + value 3; + description + "The resource usage is administratively limited to current + instances of use."; + } + enum unlocked { + value 4; + description + "The resource is not administratively prohibited from + use."; + } + } + description + "Represents the various possible administrative states."; + reference + "RFC 4268: Entity State MIB - EntityAdminState"; +} + +typedef oper-state { + type enumeration { + enum unknown { + value 1; + description + "The resource is unable to report its operational state."; + } + enum disabled { + value 2; + description + "The resource is totally inoperable."; + } + enum enabled { + value 3; + + description + "The resource is partially or fully operable."; + } + enum testing { + value 4; + description + "The resource is currently being tested and cannot + therefore report whether or not it is operational."; + } + } + description + "Represents the possible values of operational states."; + reference + "RFC 4268: Entity State MIB - EntityOperState"; +} + +typedef usage-state { + type enumeration { + enum unknown { + value 1; + description + "The resource is unable to report usage state."; + } + enum idle { + value 2; + description + "The resource is servicing no users."; + } + enum active { + value 3; + description + "The resource is currently in use, and it has sufficient + spare capacity to provide for additional users."; + } + enum busy { + value 4; + description + "The resource is currently in use, but it currently has no + spare capacity to provide for additional users."; + } + } + description + "Represents the possible values of usage states."; + reference + "RFC 4268: Entity State MIB - EntityUsageState"; +} + +typedef alarm-state { + type bits { + bit unknown { + position 0; + description + "The resource is unable to report alarm state."; + } + bit under-repair { + position 1; + description + "The resource is currently being repaired, which, depending + on the implementation, may make the other values in this + bit string not meaningful."; + } + bit critical { + position 2; + description + "One or more critical alarms are active against the + resource."; + } + bit major { + position 3; + description + "One or more major alarms are active against the + resource."; + } + bit minor { + position 4; + description + "One or more minor alarms are active against the + resource."; + } + bit warning { + position 5; + description + "One or more warning alarms are active against the + resource."; + } + bit indeterminate { + position 6; + description + "One or more alarms of whose perceived severity cannot be + determined are active against this resource."; + } + } + description + "Represents the possible values of alarm states. An alarm is a + persistent indication of an error or warning condition. + When no bits of this attribute are set, then no active alarms + are known against this component and it is not under repair."; + reference + "RFC 4268: Entity State MIB - EntityAlarmStatus"; +} + +typedef standby-state { + type enumeration { + enum unknown { + value 1; + description + "The resource is unable to report standby state."; + } + enum hot-standby { + value 2; + description + "The resource is not providing service, but it will be + immediately able to take over the role of the resource to + be backed up, without the need for initialization + activity, and will contain the same information as the + resource to be backed up."; + } + enum cold-standby { + value 3; + description + "The resource is to back up another resource, but it will + not be immediately able to take over the role of a + resource to be backed up and will require some + initialization activity."; + } + enum providing-service { + value 4; + description + "The resource is providing service."; + } + } + description + "Represents the possible values of standby states."; + reference + "RFC 4268: Entity State MIB - EntityStandbyStatus"; +} + +typedef sensor-value-type { + type enumeration { + enum other { + value 1; + description + "A measure other than those listed below."; + } + enum unknown { + value 2; + description + "An unknown measurement or arbitrary, relative numbers"; + } + enum volts-AC { + value 3; + description + "A measure of electric potential (alternating current)."; + } + enum volts-DC { + value 4; + description + "A measure of electric potential (direct current)."; + } + enum amperes { + value 5; + description + "A measure of electric current."; + } + enum watts { + value 6; + description + "A measure of power."; + } + enum hertz { + value 7; + description + "A measure of frequency."; + } + enum celsius { + value 8; + description + "A measure of temperature."; + } + enum percent-RH { + value 9; + description + "A measure of percent relative humidity."; + } + enum rpm { + value 10; + description + "A measure of shaft revolutions per minute."; + } + enum cmm { + value 11; + description + "A measure of cubic meters per minute (airflow)."; + } + enum truth-value { + value 12; + description + "Value is one of 1 (true) or 2 (false)"; + } + } + description + "A node using this data type represents the sensor measurement + data type associated with a physical sensor value. The actual + data units are determined by examining a node of this type + together with the associated sensor-value-scale node. + A node of this type SHOULD be defined together with nodes of + type sensor-value-scale and type sensor-value-precision. + These three types are used to identify the semantics of a node + of type sensor-value."; + reference + "RFC 3433: Entity Sensor Management Information Base - + EntitySensorDataType"; +} + +typedef sensor-value-scale { + type enumeration { + enum yocto { + value 1; + description + "Data scaling factor of 10^-24."; + } + enum zepto { + value 2; + description + "Data scaling factor of 10^-21."; + } + enum atto { + value 3; + description + "Data scaling factor of 10^-18."; + } + enum femto { + value 4; + description + "Data scaling factor of 10^-15."; + } + enum pico { + value 5; + description + "Data scaling factor of 10^-12."; + } + enum nano { + value 6; + description + "Data scaling factor of 10^-9."; + } + enum micro { + value 7; + description + "Data scaling factor of 10^-6."; + } + enum milli { + value 8; + description + "Data scaling factor of 10^-3."; + } + enum units { + value 9; + description + "Data scaling factor of 10^0."; + } + enum kilo { + value 10; + description + "Data scaling factor of 10^3."; + } + enum mega { + value 11; + description + "Data scaling factor of 10^6."; + } + enum giga { + value 12; + description + "Data scaling factor of 10^9."; + } + enum tera { + value 13; + description + "Data scaling factor of 10^12."; + } + enum peta { + value 14; + description + "Data scaling factor of 10^15."; + } + enum exa { + value 15; + description + "Data scaling factor of 10^18."; + } + enum zetta { + value 16; + description + "Data scaling factor of 10^21."; + } + enum yotta { + value 17; + description + "Data scaling factor of 10^24."; + } + } + description + "A node using this data type represents a data scaling factor, + represented with an International System of Units (SI) prefix. + The actual data units are determined by examining a node of + this type together with the associated sensor-value-type. + A node of this type SHOULD be defined together with nodes of + type sensor-value-type and type sensor-value-precision. + Together, associated nodes of these three types are used to + identify the semantics of a node of type sensor-value."; + reference + "RFC 3433: Entity Sensor Management Information Base - + EntitySensorDataScale"; +} + +typedef sensor-value-precision { + type int8 { + range "-8 .. 9"; + } + description + "A node using this data type represents a sensor value + precision range. + A node of this type SHOULD be defined together with nodes of + type sensor-value-type and type sensor-value-scale. Together, + associated nodes of these three types are used to identify the + semantics of a node of type sensor-value. + If a node of this type contains a value in the range 1 to 9, + it represents the number of decimal places in the fractional + part of an associated sensor-value fixed-point number. + If a node of this type contains a value in the range -8 to -1, + it represents the number of accurate digits in the associated + sensor-value fixed-point number. + The value zero indicates the associated sensor-value node is + not a fixed-point number. + Server implementers must choose a value for the associated + sensor-value-precision node so that the precision and accuracy + of the associated sensor-value node is correctly indicated. + For example, a component representing a temperature sensor + that can measure 0 to 100 degrees C in 0.1 degree + increments, +/- 0.05 degrees, would have a + sensor-value-precision value of '1', a sensor-value-scale + value of 'units', and a sensor-value ranging from '0' to + '1000'. The sensor-value would be interpreted as + 'degrees C * 10'."; + reference + "RFC 3433: Entity Sensor Management Information Base - + EntitySensorPrecision"; +} + +typedef sensor-value { + type int32 { + range "-1000000000 .. 1000000000"; + } + description + "A node using this data type represents a sensor value. + A node of this type SHOULD be defined together with nodes of + type sensor-value-type, type sensor-value-scale, and + type sensor-value-precision. Together, associated nodes of + those three types are used to identify the semantics of a node + of this data type. + The semantics of a node using this data type are determined by + the value of the associated sensor-value-type node. + If the associated sensor-value-type node is equal to 'voltsAC', + 'voltsDC', 'amperes', 'watts', 'hertz', 'celsius', or 'cmm', + then a node of this type MUST contain a fixed-point number + ranging from -999,999,999 to +999,999,999. The value + -1000000000 indicates an underflow error. The value + +1000000000 indicates an overflow error. The + sensor-value-precision indicates how many fractional digits + are represented in the associated sensor-value node. + If the associated sensor-value-type node is equal to + 'percentRH', then a node of this type MUST contain a number + ranging from 0 to 100. + If the associated sensor-value-type node is equal to 'rpm', + then a node of this type MUST contain a number ranging from + -999,999,999 to +999,999,999. + If the associated sensor-value-type node is equal to + 'truth-value', then a node of this type MUST contain either the + value 1 (true) or the value 2 (false). + If the associated sensor-value-type node is equal to 'other' or + 'unknown', then a node of this type MUST contain a number + ranging from -1000000000 to 1000000000."; + reference + "RFC 3433: Entity Sensor Management Information Base - + EntitySensorValue"; +} + +typedef sensor-status { + type enumeration { + enum ok { + value 1; + description + "Indicates that the server can obtain the sensor value."; + } + enum unavailable { + value 2; + description + "Indicates that the server presently cannot obtain the + sensor value."; + } + enum nonoperational { + value 3; + description + "Indicates that the server believes the sensor is broken. + The sensor could have a hard failure (disconnected wire) + or a soft failure such as out-of-range, jittery, or wildly + fluctuating readings."; + } + } + description + "A node using this data type represents the operational status + of a physical sensor."; + reference + "RFC 3433: Entity Sensor Management Information Base - + EntitySensorStatus"; +} + +/* + * Data nodes + */ + +container hardware { + description + "Data nodes representing components. + If the server supports configuration of hardware components, + then this data model is instantiated in the configuration + datastores supported by the server. The leaf-list 'datastore' + for the module 'ietf-hardware' in the YANG library provides + this information."; + + leaf last-change { + type yang:date-and-time; + config false; + description + "The time the '/hardware/component' list changed in the + operational state."; + } + + list component { + key name; + description + "List of components. + When the server detects a new hardware component, it + initializes a list entry in the operational state. + If the server does not support configuration of hardware + components, list entries in the operational state are + initialized with values for all nodes as detected by the + implementation. + Otherwise, this procedure is followed: + 1. If there is an entry in the '/hardware/component' list + in the intended configuration with values for the nodes + 'class', 'parent', and 'parent-rel-pos' that are equal + to the detected values, then the list entry in the + operational state is initialized with the configured + values, including the 'name'. + 2. Otherwise (i.e., there is no matching configuration + entry), the list entry in the operational state is + initialized with values for all nodes as detected by + the implementation. + If the '/hardware/component' list in the intended + configuration is modified, then the system MUST behave as if + it re-initializes itself and follow the procedure in (1)."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalEntry"; + + leaf name { + type string; + description + "The name assigned to this component. + This name is not required to be the same as + entPhysicalName."; + } + + leaf class { + type identityref { + base ianahw:hardware-class; + } + mandatory true; + description + "An indication of the general hardware type of the + component."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalClass"; + } + + leaf physical-index { + if-feature entity-mib; + type int32 { + range "1..2147483647"; + } + config false; + description + "The entPhysicalIndex for the entPhysicalEntry represented + by this list entry."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalIndex"; + } + + leaf description { + type string; + config false; + description + "A textual description of the component. This node should + contain a string that identifies the manufacturer's name + for the component and should be set to a distinct value + for each version or model of the component."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalDescr"; + } + + leaf parent { + type leafref { + path "../../component/name"; + require-instance false; + } + description + "The name of the component that physically contains this + component. + If this leaf is not instantiated, it indicates that this + component is not contained in any other component. + In the event that a physical component is contained by + more than one physical component (e.g., double-wide + modules), this node contains the name of one of these + components. An implementation MUST use the same name + every time this node is instantiated."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalContainedIn"; + } + + leaf parent-rel-pos { + type int32 { + range "0 .. 2147483647"; + } + description + "An indication of the relative position of this child + component among all its sibling components. Sibling + components are defined as components that: + o share the same value of the 'parent' node and + o share a common base identity for the 'class' node. + Note that the last rule gives implementations flexibility + in how components are numbered. For example, some + implementations might have a single number series for all + components derived from 'ianahw:port', while some others + might have different number series for different + components with identities derived from 'ianahw:port' (for + example, one for registered jack 45 (RJ45) and one for + small form-factor pluggable (SFP))."; + + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalParentRelPos"; + } + + leaf-list contains-child { + type leafref { + path "../../component/name"; + } + config false; + description + "The name of the contained component."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalChildIndex"; + } + + leaf hardware-rev { + type string; + config false; + description + "The vendor-specific hardware revision string for the + component. The preferred value is the hardware revision + identifier actually printed on the component itself (if + present)."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalHardwareRev"; + } + + leaf firmware-rev { + type string; + config false; + description + "The vendor-specific firmware revision string for the + component."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalFirmwareRev"; + } + + leaf software-rev { + type string; + config false; + + description + "The vendor-specific software revision string for the + component."; + reference + "RFC 6933: Entity MIB (Version 4) - + entPhysicalSoftwareRev"; + } + + leaf serial-num { + type string; + config false; + description + "The vendor-specific serial number string for the + component. The preferred value is the serial number + string actually printed on the component itself (if + present)."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalSerialNum"; + } + + leaf mfg-name { + type string; + config false; + description + "The name of the manufacturer of this physical component. + The preferred value is the manufacturer name string + actually printed on the component itself (if present). + Note that comparisons between instances of the + 'model-name', 'firmware-rev', 'software-rev', and + 'serial-num' nodes are only meaningful amongst components + with the same value of 'mfg-name'. + If the manufacturer name string associated with the + physical component is unknown to the server, then this + node is not instantiated."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalMfgName"; + } + + leaf model-name { + type string; + config false; + description + "The vendor-specific model name identifier string + associated with this physical component. The preferred + value is the customer-visible part number, which may be + printed on the component itself. + If the model name string associated with the physical + component is unknown to the server, then this node is not + instantiated."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalModelName"; + } + + leaf alias { + type string; + description + "An 'alias' name for the component, as specified by a + network manager, that provides a non-volatile 'handle' for + the component. + If no configured value exists, the server MAY set the + value of this node to a locally unique value in the + operational state. + A server implementation MAY map this leaf to the + entPhysicalAlias MIB object. Such an implementation needs + to use some mechanism to handle the differences in size + and characters allowed between this leaf and + entPhysicalAlias. The definition of such a mechanism is + outside the scope of this document."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalAlias"; + } + + leaf asset-id { + type string; + description + "This node is a user-assigned asset tracking identifier for + the component. + A server implementation MAY map this leaf to the + entPhysicalAssetID MIB object. Such an implementation + needs to use some mechanism to handle the differences in + size and characters allowed between this leaf and + entPhysicalAssetID. The definition of such a mechanism is + outside the scope of this document."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalAssetID"; + } + + leaf is-fru { + type boolean; + config false; + + description + "This node indicates whether or not this component is + considered a 'field-replaceable unit' by the vendor. If + this node contains the value 'true', then this component + identifies a field-replaceable unit. For all components + that are permanently contained within a field-replaceable + unit, the value 'false' should be returned for this + node."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalIsFRU"; + } + + leaf mfg-date { + type yang:date-and-time; + config false; + description + "The date of manufacturing of the managed component."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalMfgDate"; + } + + leaf-list uri { + type inet:uri; + description + "This node contains identification information about the + component."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalUris"; + } + + leaf uuid { + type yang:uuid; + config false; + description + "A Universally Unique Identifier of the component."; + reference + "RFC 6933: Entity MIB (Version 4) - entPhysicalUUID"; + } + + container state { + if-feature hardware-state; + description + "State-related nodes"; + reference + "RFC 4268: Entity State MIB"; + + leaf state-last-changed { + type yang:date-and-time; + config false; + description + "The date and time when the value of any of the + admin-state, oper-state, usage-state, alarm-state, or + standby-state changed for this component. + If there has been no change since the last + re-initialization of the local system, this node + contains the date and time of local system + initialization. If there has been no change since the + component was added to the local system, this node + contains the date and time of the insertion."; + reference + "RFC 4268: Entity State MIB - entStateLastChanged"; + } + + leaf admin-state { + type admin-state; + description + "The administrative state for this component. + This node refers to a component's administrative + permission to service both other components within its + containment hierarchy as well other users of its + services defined by means outside the scope of this + module. + Some components exhibit only a subset of the remaining + administrative state values. Some components cannot be + locked; hence, this node exhibits only the 'unlocked' + state. Other components cannot be shut down gracefully; + hence, this node does not exhibit the 'shutting-down' + state."; + reference + "RFC 4268: Entity State MIB - entStateAdmin"; + } + + leaf oper-state { + type oper-state; + config false; + description + "The operational state for this component. + Note that this node does not follow the administrative + state. An administrative state of 'down' does not + predict an operational state of 'disabled'. + Note that some implementations may not be able to + accurately report oper-state while the admin-state node + has a value other than 'unlocked'. In these cases, this + node MUST have a value of 'unknown'."; + reference + "RFC 4268: Entity State MIB - entStateOper"; + } + + leaf usage-state { + type usage-state; + config false; + description + "The usage state for this component. + This node refers to a component's ability to service + more components in a containment hierarchy. + Some components will exhibit only a subset of the usage + state values. Components that are unable to ever + service any components within a containment hierarchy + will always have a usage state of 'busy'. In some + cases, a component will be able to support only one + other component within its containment hierarchy and + will therefore only exhibit values of 'idle' and + 'busy'."; + reference + "RFC 4268: Entity State MIB - entStateUsage"; + } + + leaf alarm-state { + type alarm-state; + config false; + description + "The alarm state for this component. It does not + include the alarms raised on child components within its + containment hierarchy."; + reference + "RFC 4268: Entity State MIB - entStateAlarm"; + } + + leaf standby-state { + type standby-state; + config false; + description + "The standby state for this component. + Some components will exhibit only a subset of the + remaining standby state values. If this component + cannot operate in a standby role, the value of this node + will always be 'providing-service'."; + reference + "RFC 4268: Entity State MIB - entStateStandby"; + } + } + + container sensor-data { + when 'derived-from-or-self(../class, + "ianahw:sensor")' { + description + "Sensor data nodes present for any component of type + 'sensor'"; + } + if-feature hardware-sensor; + config false; + + description + "Sensor-related nodes."; + reference + "RFC 3433: Entity Sensor Management Information Base"; + + leaf value { + type sensor-value; + description + "The most recent measurement obtained by the server + for this sensor. + A client that periodically fetches this node should also + fetch the nodes 'value-type', 'value-scale', and + 'value-precision', since they may change when the value + is changed."; + reference + "RFC 3433: Entity Sensor Management Information Base - + entPhySensorValue"; + } + + leaf value-type { + type sensor-value-type; + description + "The type of data units associated with the + sensor value"; + reference + "RFC 3433: Entity Sensor Management Information Base - + entPhySensorType"; + } + leaf value-scale { + type sensor-value-scale; + description + "The (power of 10) scaling factor associated + with the sensor value"; + reference + "RFC 3433: Entity Sensor Management Information Base - + entPhySensorScale"; + } + + leaf value-precision { + type sensor-value-precision; + description + "The number of decimal places of precision + associated with the sensor value"; + reference + "RFC 3433: Entity Sensor Management Information Base - + entPhySensorPrecision"; + } + + leaf oper-status { + type sensor-status; + description + "The operational status of the sensor."; + reference + "RFC 3433: Entity Sensor Management Information Base - + entPhySensorOperStatus"; + } + + leaf units-display { + type string; + description + "A textual description of the data units that should be + used in the display of the sensor value."; + reference + "RFC 3433: Entity Sensor Management Information Base - + entPhySensorUnitsDisplay"; + } + + leaf value-timestamp { + type yang:date-and-time; + description + "The time the status and/or value of this sensor was last + obtained by the server."; + reference + "RFC 3433: Entity Sensor Management Information Base - + entPhySensorValueTimeStamp"; + } + leaf value-update-rate { + type uint32; + units "milliseconds"; + description + "An indication of the frequency that the server updates + the associated 'value' node, represented in + milliseconds. The value zero indicates: + - the sensor value is updated on demand (e.g., + when polled by the server for a get-request), + - the sensor value is updated when the sensor + value changes (event-driven), or + - the server does not know the update rate."; + reference + "RFC 3433: Entity Sensor Management Information Base - + entPhySensorValueUpdateRate"; + } + } + } +} + +/* + * Notifications + */ + +notification hardware-state-change { + description + "A hardware-state-change notification is generated when the + value of /hardware/last-change changes in the operational + state."; + reference + "RFC 6933: Entity MIB (Version 4) - entConfigChange"; +} + +notification hardware-state-oper-enabled { + if-feature hardware-state; + description + "A hardware-state-oper-enabled notification signifies that a + component has transitioned into the 'enabled' state."; + + leaf name { + type leafref { + path "/hardware/component/name"; + } + + description + "The name of the component that has transitioned into the + 'enabled' state."; + } + leaf admin-state { + type leafref { + path "/hardware/component/state/admin-state"; + } + description + "The administrative state for the component."; + } + leaf alarm-state { + type leafref { + path "/hardware/component/state/alarm-state"; + } + description + "The alarm state for the component."; + } + reference + "RFC 4268: Entity State MIB - entStateOperEnabled"; +} + +notification hardware-state-oper-disabled { + if-feature hardware-state; + description + "A hardware-state-oper-disabled notification signifies that a + component has transitioned into the 'disabled' state."; + + leaf name { + type leafref { + path "/hardware/component/name"; + } + description + "The name of the component that has transitioned into the + 'disabled' state."; + } + leaf admin-state { + type leafref { + path "/hardware/component/state/admin-state"; + } + description + "The administrative state for the component."; + } + leaf alarm-state { + type leafref { + path "/hardware/component/state/alarm-state"; + } + + description + "The alarm state for the component."; + } + reference + "RFC 4268: Entity State MIB - entStateOperDisabled"; +} + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-interfaces.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-interfaces.yang new file mode 100644 index 0000000..8dae9d3 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-interfaces.yang @@ -0,0 +1,1073 @@ +module ietf-interfaces { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-interfaces"; + prefix if; + + import ietf-yang-types { + prefix yang; + } + + organization + "IETF NETMOD (Network Modeling) Working Group"; + + contact + "WG Web: + WG List: + Editor: Martin Bjorklund + "; + + description + "This module contains a collection of YANG definitions for + managing network interfaces. + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + This version of this YANG module is part of RFC 8343; see + the RFC itself for full legal notices."; + + revision 2018-02-20 { + description + "Updated to support NMDA."; + reference + "RFC 8343: A YANG Data Model for Interface Management"; + } + + revision 2014-05-08 { + description + "Initial revision."; + reference + "RFC 7223: A YANG Data Model for Interface Management"; + } + + /* + * Typedefs + */ + + typedef interface-ref { + type leafref { + path "/if:interfaces/if:interface/if:name"; + } + description + "This type is used by data models that need to reference + interfaces."; + } + + /* + * Identities + */ + + identity interface-type { + description + "Base identity from which specific interface types are + derived."; + } + + /* + * Features + */ + + feature arbitrary-names { + description + "This feature indicates that the device allows user-controlled + interfaces to be named arbitrarily."; + } + feature pre-provisioning { + description + "This feature indicates that the device supports + pre-provisioning of interface configuration, i.e., it is + possible to configure an interface whose physical interface + hardware is not present on the device."; + } + feature if-mib { + description + "This feature indicates that the device implements + the IF-MIB."; + reference + "RFC 2863: The Interfaces Group MIB"; + } + + /* + * Data nodes + */ + + container interfaces { + description + "Interface parameters."; + + list interface { + key "name"; + + description + "The list of interfaces on the device. + The status of an interface is available in this list in the + operational state. If the configuration of a + system-controlled interface cannot be used by the system + (e.g., the interface hardware present does not match the + interface type), then the configuration is not applied to + the system-controlled interface shown in the operational + state. If the configuration of a user-controlled interface + cannot be used by the system, the configured interface is + not instantiated in the operational state. + System-controlled interfaces created by the system are + always present in this list in the operational state, + whether or not they are configured."; + + leaf name { + type string; + description + "The name of the interface. + A device MAY restrict the allowed values for this leaf, + possibly depending on the type of the interface. + For system-controlled interfaces, this leaf is the + device-specific name of the interface. + If a client tries to create configuration for a + system-controlled interface that is not present in the + operational state, the server MAY reject the request if + the implementation does not support pre-provisioning of + interfaces or if the name refers to an interface that can + never exist in the system. A Network Configuration + Protocol (NETCONF) server MUST reply with an rpc-error + with the error-tag 'invalid-value' in this case. + If the device supports pre-provisioning of interface + configuration, the 'pre-provisioning' feature is + advertised. + If the device allows arbitrarily named user-controlled + interfaces, the 'arbitrary-names' feature is advertised. + When a configured user-controlled interface is created by + the system, it is instantiated with the same name in the + operational state. + A server implementation MAY map this leaf to the ifName + MIB object. Such an implementation needs to use some + mechanism to handle the differences in size and characters + allowed between this leaf and ifName. The definition of + such a mechanism is outside the scope of this document."; + reference + "RFC 2863: The Interfaces Group MIB - ifName"; + } + + leaf description { + type string; + description + "A textual description of the interface. + A server implementation MAY map this leaf to the ifAlias + MIB object. Such an implementation needs to use some + mechanism to handle the differences in size and characters + allowed between this leaf and ifAlias. The definition of + such a mechanism is outside the scope of this document. + Since ifAlias is defined to be stored in non-volatile + storage, the MIB implementation MUST map ifAlias to the + value of 'description' in the persistently stored + configuration."; + reference + "RFC 2863: The Interfaces Group MIB - ifAlias"; + } + + leaf type { + type identityref { + base interface-type; + } + mandatory true; + description + "The type of the interface. + When an interface entry is created, a server MAY + initialize the type leaf with a valid value, e.g., if it + is possible to derive the type from the name of the + interface. + If a client tries to set the type of an interface to a + value that can never be used by the system, e.g., if the + type is not supported or if the type does not match the + name of the interface, the server MUST reject the request. + A NETCONF server MUST reply with an rpc-error with the + error-tag 'invalid-value' in this case."; + reference + "RFC 2863: The Interfaces Group MIB - ifType"; + } + + leaf enabled { + type boolean; + default "true"; + description + "This leaf contains the configured, desired state of the + interface. + Systems that implement the IF-MIB use the value of this + leaf in the intended configuration to set + IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry + has been initialized, as described in RFC 2863. + Changes in this leaf in the intended configuration are + reflected in ifAdminStatus."; + reference + "RFC 2863: The Interfaces Group MIB - ifAdminStatus"; + } + + leaf link-up-down-trap-enable { + if-feature if-mib; + type enumeration { + enum enabled { + value 1; + description + "The device will generate linkUp/linkDown SNMP + notifications for this interface."; + } + enum disabled { + value 2; + description + "The device will not generate linkUp/linkDown SNMP + notifications for this interface."; + } + } + description + "Controls whether linkUp/linkDown SNMP notifications + should be generated for this interface. + If this node is not configured, the value 'enabled' is + operationally used by the server for interfaces that do + not operate on top of any other interface (i.e., there are + no 'lower-layer-if' entries), and 'disabled' otherwise."; + reference + "RFC 2863: The Interfaces Group MIB - + ifLinkUpDownTrapEnable"; + } + + leaf admin-status { + if-feature if-mib; + type enumeration { + enum up { + value 1; + description + "Ready to pass packets."; + } + enum down { + value 2; + description + "Not ready to pass packets and not in some test mode."; + } + enum testing { + value 3; + description + "In some test mode."; + } + } + config false; + mandatory true; + description + "The desired state of the interface. + This leaf has the same read semantics as ifAdminStatus."; + reference + "RFC 2863: The Interfaces Group MIB - ifAdminStatus"; + } + + leaf oper-status { + type enumeration { + enum up { + value 1; + description + "Ready to pass packets."; + } + enum down { + value 2; + + description + "The interface does not pass any packets."; + } + enum testing { + value 3; + description + "In some test mode. No operational packets can + be passed."; + } + enum unknown { + value 4; + description + "Status cannot be determined for some reason."; + } + enum dormant { + value 5; + description + "Waiting for some external event."; + } + enum not-present { + value 6; + description + "Some component (typically hardware) is missing."; + } + enum lower-layer-down { + value 7; + description + "Down due to state of lower-layer interface(s)."; + } + } + config false; + mandatory true; + description + "The current operational state of the interface. + This leaf has the same semantics as ifOperStatus."; + reference + "RFC 2863: The Interfaces Group MIB - ifOperStatus"; + } + + leaf last-change { + type yang:date-and-time; + config false; + description + "The time the interface entered its current operational + state. If the current state was entered prior to the + last re-initialization of the local network management + subsystem, then this node is not present."; + reference + "RFC 2863: The Interfaces Group MIB - ifLastChange"; + } + + leaf if-index { + if-feature if-mib; + type int32 { + range "1..2147483647"; + } + config false; + mandatory true; + description + "The ifIndex value for the ifEntry represented by this + interface."; + reference + "RFC 2863: The Interfaces Group MIB - ifIndex"; + } + + leaf phys-address { + type yang:phys-address; + config false; + description + "The interface's address at its protocol sub-layer. For + example, for an 802.x interface, this object normally + contains a Media Access Control (MAC) address. The + interface's media-specific modules must define the bit + and byte ordering and the format of the value of this + object. For interfaces that do not have such an address + (e.g., a serial line), this node is not present."; + reference + "RFC 2863: The Interfaces Group MIB - ifPhysAddress"; + } + + leaf-list higher-layer-if { + type interface-ref; + config false; + description + "A list of references to interfaces layered on top of this + interface."; + reference + "RFC 2863: The Interfaces Group MIB - ifStackTable"; + } + + leaf-list lower-layer-if { + type interface-ref; + config false; + + description + "A list of references to interfaces layered underneath this + interface."; + reference + "RFC 2863: The Interfaces Group MIB - ifStackTable"; + } + + leaf speed { + type yang:gauge64; + units "bits/second"; + config false; + description + "An estimate of the interface's current bandwidth in bits + per second. For interfaces that do not vary in + bandwidth or for those where no accurate estimation can + be made, this node should contain the nominal bandwidth. + For interfaces that have no concept of bandwidth, this + node is not present."; + reference + "RFC 2863: The Interfaces Group MIB - + ifSpeed, ifHighSpeed"; + } + + container statistics { + config false; + description + "A collection of interface-related statistics objects."; + + leaf discontinuity-time { + type yang:date-and-time; + mandatory true; + description + "The time on the most recent occasion at which any one or + more of this interface's counters suffered a + discontinuity. If no such discontinuities have occurred + since the last re-initialization of the local management + subsystem, then this node contains the time the local + management subsystem re-initialized itself."; + } + + leaf in-octets { + type yang:counter64; + description + "The total number of octets received on the interface, + including framing characters. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCInOctets"; + } + + leaf in-unicast-pkts { + type yang:counter64; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were not addressed to a + multicast or broadcast address at this sub-layer. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts"; + } + + leaf in-broadcast-pkts { + type yang:counter64; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were addressed to a broadcast + address at this sub-layer. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCInBroadcastPkts"; + } + + leaf in-multicast-pkts { + type yang:counter64; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were addressed to a multicast + address at this sub-layer. For a MAC-layer protocol, + this includes both Group and Functional addresses. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCInMulticastPkts"; + } + + leaf in-discards { + type yang:counter32; + description + "The number of inbound packets that were chosen to be + discarded even though no errors had been detected to + prevent their being deliverable to a higher-layer + protocol. One possible reason for discarding such a + packet could be to free up buffer space. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInDiscards"; + } + + leaf in-errors { + type yang:counter32; + description + "For packet-oriented interfaces, the number of inbound + packets that contained errors preventing them from being + deliverable to a higher-layer protocol. For character- + oriented or fixed-length interfaces, the number of + inbound transmission units that contained errors + preventing them from being deliverable to a higher-layer + protocol. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInErrors"; + } + + leaf in-unknown-protos { + type yang:counter32; + + description + "For packet-oriented interfaces, the number of packets + received via the interface that were discarded because + of an unknown or unsupported protocol. For + character-oriented or fixed-length interfaces that + support protocol multiplexing, the number of + transmission units received via the interface that were + discarded because of an unknown or unsupported protocol. + For any interface that does not support protocol + multiplexing, this counter is not present. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos"; + } + + leaf out-octets { + type yang:counter64; + description + "The total number of octets transmitted out of the + interface, including framing characters. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCOutOctets"; + } + + leaf out-unicast-pkts { + type yang:counter64; + description + "The total number of packets that higher-level protocols + requested be transmitted and that were not addressed + to a multicast or broadcast address at this sub-layer, + including those that were discarded or not sent. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts"; + } + + leaf out-broadcast-pkts { + type yang:counter64; + description + "The total number of packets that higher-level protocols + requested be transmitted and that were addressed to a + broadcast address at this sub-layer, including those + that were discarded or not sent. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCOutBroadcastPkts"; + } + + leaf out-multicast-pkts { + type yang:counter64; + description + "The total number of packets that higher-level protocols + requested be transmitted and that were addressed to a + multicast address at this sub-layer, including those + that were discarded or not sent. For a MAC-layer + protocol, this includes both Group and Functional + addresses. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCOutMulticastPkts"; + } + + leaf out-discards { + type yang:counter32; + description + "The number of outbound packets that were chosen to be + discarded even though no errors had been detected to + prevent their being transmitted. One possible reason + for discarding such a packet could be to free up buffer + space. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifOutDiscards"; + } + + leaf out-errors { + type yang:counter32; + description + "For packet-oriented interfaces, the number of outbound + packets that could not be transmitted because of errors. + For character-oriented or fixed-length interfaces, the + number of outbound transmission units that could not be + transmitted because of errors. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifOutErrors"; + } + } + + } + } + + /* + * Legacy typedefs + */ + + typedef interface-state-ref { + type leafref { + path "/if:interfaces-state/if:interface/if:name"; + } + status deprecated; + description + "This type is used by data models that need to reference + the operationally present interfaces."; + } + + /* + * Legacy operational state data nodes + */ + + container interfaces-state { + config false; + status deprecated; + description + "Data nodes for the operational state of interfaces."; + + list interface { + key "name"; + status deprecated; + + description + "The list of interfaces on the device. + System-controlled interfaces created by the system are + always present in this list, whether or not they are + configured."; + + leaf name { + type string; + status deprecated; + description + "The name of the interface. + A server implementation MAY map this leaf to the ifName + MIB object. Such an implementation needs to use some + mechanism to handle the differences in size and characters + allowed between this leaf and ifName. The definition of + such a mechanism is outside the scope of this document."; + reference + "RFC 2863: The Interfaces Group MIB - ifName"; + } + + leaf type { + type identityref { + base interface-type; + } + mandatory true; + status deprecated; + description + "The type of the interface."; + reference + "RFC 2863: The Interfaces Group MIB - ifType"; + } + + leaf admin-status { + if-feature if-mib; + type enumeration { + enum up { + value 1; + description + "Ready to pass packets."; + } + enum down { + value 2; + description + "Not ready to pass packets and not in some test mode."; + } + enum testing { + value 3; + description + "In some test mode."; + } + } + mandatory true; + status deprecated; + description + "The desired state of the interface. + This leaf has the same read semantics as ifAdminStatus."; + reference + "RFC 2863: The Interfaces Group MIB - ifAdminStatus"; + } + + leaf oper-status { + type enumeration { + enum up { + value 1; + description + "Ready to pass packets."; + } + enum down { + value 2; + description + "The interface does not pass any packets."; + } + enum testing { + value 3; + description + "In some test mode. No operational packets can + be passed."; + } + enum unknown { + value 4; + description + "Status cannot be determined for some reason."; + } + enum dormant { + value 5; + description + "Waiting for some external event."; + } + enum not-present { + value 6; + description + "Some component (typically hardware) is missing."; + } + enum lower-layer-down { + value 7; + description + "Down due to state of lower-layer interface(s)."; + } + } + mandatory true; + status deprecated; + description + "The current operational state of the interface. + This leaf has the same semantics as ifOperStatus."; + reference + "RFC 2863: The Interfaces Group MIB - ifOperStatus"; + } + + leaf last-change { + type yang:date-and-time; + status deprecated; + description + "The time the interface entered its current operational + state. If the current state was entered prior to the + last re-initialization of the local network management + subsystem, then this node is not present."; + reference + "RFC 2863: The Interfaces Group MIB - ifLastChange"; + } + + leaf if-index { + if-feature if-mib; + type int32 { + range "1..2147483647"; + } + mandatory true; + status deprecated; + description + "The ifIndex value for the ifEntry represented by this + interface."; + + reference + "RFC 2863: The Interfaces Group MIB - ifIndex"; + } + + leaf phys-address { + type yang:phys-address; + status deprecated; + description + "The interface's address at its protocol sub-layer. For + example, for an 802.x interface, this object normally + contains a Media Access Control (MAC) address. The + interface's media-specific modules must define the bit + and byte ordering and the format of the value of this + object. For interfaces that do not have such an address + (e.g., a serial line), this node is not present."; + reference + "RFC 2863: The Interfaces Group MIB - ifPhysAddress"; + } + + leaf-list higher-layer-if { + type interface-state-ref; + status deprecated; + description + "A list of references to interfaces layered on top of this + interface."; + reference + "RFC 2863: The Interfaces Group MIB - ifStackTable"; + } + + leaf-list lower-layer-if { + type interface-state-ref; + status deprecated; + description + "A list of references to interfaces layered underneath this + interface."; + reference + "RFC 2863: The Interfaces Group MIB - ifStackTable"; + } + + leaf speed { + type yang:gauge64; + units "bits/second"; + status deprecated; + description + "An estimate of the interface's current bandwidth in bits + per second. For interfaces that do not vary in + bandwidth or for those where no accurate estimation can + be made, this node should contain the nominal bandwidth. + For interfaces that have no concept of bandwidth, this + node is not present."; + reference + "RFC 2863: The Interfaces Group MIB - + ifSpeed, ifHighSpeed"; + } + + container statistics { + status deprecated; + description + "A collection of interface-related statistics objects."; + + leaf discontinuity-time { + type yang:date-and-time; + mandatory true; + status deprecated; + description + "The time on the most recent occasion at which any one or + more of this interface's counters suffered a + discontinuity. If no such discontinuities have occurred + since the last re-initialization of the local management + subsystem, then this node contains the time the local + management subsystem re-initialized itself."; + } + + leaf in-octets { + type yang:counter64; + status deprecated; + description + "The total number of octets received on the interface, + including framing characters. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCInOctets"; + } + + leaf in-unicast-pkts { + type yang:counter64; + status deprecated; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were not addressed to a + multicast or broadcast address at this sub-layer. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts"; + } + + leaf in-broadcast-pkts { + type yang:counter64; + status deprecated; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were addressed to a broadcast + address at this sub-layer. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCInBroadcastPkts"; + } + + leaf in-multicast-pkts { + type yang:counter64; + status deprecated; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were addressed to a multicast + address at this sub-layer. For a MAC-layer protocol, + this includes both Group and Functional addresses. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCInMulticastPkts"; + } + + leaf in-discards { + type yang:counter32; + status deprecated; + + description + "The number of inbound packets that were chosen to be + discarded even though no errors had been detected to + prevent their being deliverable to a higher-layer + protocol. One possible reason for discarding such a + packet could be to free up buffer space. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInDiscards"; + } + + leaf in-errors { + type yang:counter32; + status deprecated; + description + "For packet-oriented interfaces, the number of inbound + packets that contained errors preventing them from being + deliverable to a higher-layer protocol. For character- + oriented or fixed-length interfaces, the number of + inbound transmission units that contained errors + preventing them from being deliverable to a higher-layer + protocol. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInErrors"; + } + + leaf in-unknown-protos { + type yang:counter32; + status deprecated; + description + "For packet-oriented interfaces, the number of packets + received via the interface that were discarded because + of an unknown or unsupported protocol. For + character-oriented or fixed-length interfaces that + support protocol multiplexing, the number of + transmission units received via the interface that were + discarded because of an unknown or unsupported protocol. + For any interface that does not support protocol + multiplexing, this counter is not present. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos"; + } + + leaf out-octets { + type yang:counter64; + status deprecated; + description + "The total number of octets transmitted out of the + interface, including framing characters. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCOutOctets"; + } + + leaf out-unicast-pkts { + type yang:counter64; + status deprecated; + description + "The total number of packets that higher-level protocols + requested be transmitted and that were not addressed + to a multicast or broadcast address at this sub-layer, + including those that were discarded or not sent. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts"; + } + + leaf out-broadcast-pkts { + type yang:counter64; + status deprecated; + + description + "The total number of packets that higher-level protocols + requested be transmitted and that were addressed to a + broadcast address at this sub-layer, including those + that were discarded or not sent. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCOutBroadcastPkts"; + } + + leaf out-multicast-pkts { + type yang:counter64; + status deprecated; + description + "The total number of packets that higher-level protocols + requested be transmitted and that were addressed to a + multicast address at this sub-layer, including those + that were discarded or not sent. For a MAC-layer + protocol, this includes both Group and Functional + addresses. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCOutMulticastPkts"; + } + + leaf out-discards { + type yang:counter32; + status deprecated; + description + "The number of outbound packets that were chosen to be + discarded even though no errors had been detected to + prevent their being transmitted. One possible reason + for discarding such a packet could be to free up buffer + space. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifOutDiscards"; + } + + leaf out-errors { + type yang:counter32; + status deprecated; + description + "For packet-oriented interfaces, the number of outbound + packets that could not be transmitted because of errors. + For character-oriented or fixed-length interfaces, the + number of outbound transmission units that could not be + transmitted because of errors. + Discontinuities in the value of this counter can occur + at re-initialization of the management system and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifOutErrors"; + } + } + } + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/iana-if-type.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/iana-if-type.yang new file mode 100644 index 0000000..24d04e6 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/iana-if-type.yang @@ -0,0 +1,1611 @@ +module iana-if-type { + namespace "urn:ietf:params:xml:ns:yang:iana-if-type"; + prefix ianaift; + + import ietf-interfaces { + prefix if; + } + + organization "IANA"; + contact + " Internet Assigned Numbers Authority + Postal: ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094-2536 + United States + Tel: +1 310 301 5800 + "; + description + "This YANG module defines YANG identities for IANA-registered + interface types. + This YANG module is maintained by IANA and reflects the + 'ifType definitions' registry. + The latest revision of this YANG module can be obtained from + the IANA web site. + Requests for new values should be made to IANA via + email (iana&iana.org). + Copyright (c) 2014 IETF Trust and the persons identified as + authors of the code. All rights reserved. + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + The initial version of this YANG module is part of RFC 7224; + see the RFC itself for full legal notices."; + reference + "IANA 'ifType definitions' registry. + "; + + revision 2017-01-19 { + description + "Registered ifType 289."; + } + + revision 2016-11-23 { + description + "Registered ifTypes 283-288."; + } + + revision 2016-06-09 { + description + "Registered ifType 282."; + } + revision 2016-05-03 { + description + "Registered ifType 281."; + } + revision 2015-06-12 { + description + "Corrected formatting issue."; + } + revision 2014-09-24 { + description + "Registered ifType 280."; + } + revision 2014-09-19 { + description + "Registered ifType 279."; + } + revision 2014-07-03 { + description + "Registered ifTypes 277-278."; + } + revision 2014-05-19 { + description + "Updated the contact address."; + } + revision 2014-05-08 { + description + "Initial revision."; + reference + "RFC 7224: IANA Interface Type YANG Module"; + } + + identity iana-interface-type { + base if:interface-type; + description + "This identity is used as a base for all interface types + defined in the 'ifType definitions' registry."; + } + + identity other { + base iana-interface-type; + } + identity regular1822 { + base iana-interface-type; + } + identity hdh1822 { + base iana-interface-type; + } + identity ddnX25 { + base iana-interface-type; + } + identity rfc877x25 { + base iana-interface-type; + reference + "RFC 1382 - SNMP MIB Extension for the X.25 Packet Layer"; + } + identity ethernetCsmacd { + base iana-interface-type; + description + "For all Ethernet-like interfaces, regardless of speed, + as per RFC 3635."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity iso88023Csmacd { + base iana-interface-type; + status deprecated; + description + "Deprecated via RFC 3635. + Use ethernetCsmacd(6) instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity iso88024TokenBus { + base iana-interface-type; + } + identity iso88025TokenRing { + base iana-interface-type; + } + identity iso88026Man { + base iana-interface-type; + } + identity starLan { + base iana-interface-type; + status deprecated; + description + "Deprecated via RFC 3635. + Use ethernetCsmacd(6) instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity proteon10Mbit { + base iana-interface-type; + } + identity proteon80Mbit { + base iana-interface-type; + } + identity hyperchannel { + base iana-interface-type; + } + identity fddi { + base iana-interface-type; + reference + "RFC 1512 - FDDI Management Information Base"; + } + identity lapb { + base iana-interface-type; + reference + "RFC 1381 - SNMP MIB Extension for X.25 LAPB"; + } + identity sdlc { + base iana-interface-type; + } + identity ds1 { + base iana-interface-type; + description + "DS1-MIB."; + reference + "RFC 4805 - Definitions of Managed Objects for the + DS1, J1, E1, DS2, and E2 Interface Types"; + } + identity e1 { + base iana-interface-type; + status obsolete; + description + "Obsolete; see DS1-MIB."; + reference + "RFC 4805 - Definitions of Managed Objects for the + DS1, J1, E1, DS2, and E2 Interface Types"; + } + identity basicISDN { + base iana-interface-type; + description + "No longer used. See also RFC 2127."; + } + identity primaryISDN { + base iana-interface-type; + description + "No longer used. See also RFC 2127."; + } + identity propPointToPointSerial { + base iana-interface-type; + description + "Proprietary serial."; + } + identity ppp { + base iana-interface-type; + } + identity softwareLoopback { + base iana-interface-type; + } + identity eon { + base iana-interface-type; + description + "CLNP over IP."; + } + identity ethernet3Mbit { + base iana-interface-type; + } + identity nsip { + base iana-interface-type; + description + "XNS over IP."; + } + identity slip { + base iana-interface-type; + description + "Generic SLIP."; + } + identity ultra { + base iana-interface-type; + description + "Ultra Technologies."; + } + identity ds3 { + base iana-interface-type; + description + "DS3-MIB."; + reference + "RFC 3896 - Definitions of Managed Objects for the + DS3/E3 Interface Type"; + } + identity sip { + base iana-interface-type; + description + "SMDS, coffee."; + reference + "RFC 1694 - Definitions of Managed Objects for SMDS + Interfaces using SMIv2"; + } + identity frameRelay { + base iana-interface-type; + description + "DTE only."; + reference + "RFC 2115 - Management Information Base for Frame Relay + DTEs Using SMIv2"; + } + identity rs232 { + base iana-interface-type; + reference + "RFC 1659 - Definitions of Managed Objects for RS-232-like + Hardware Devices using SMIv2"; + } + identity para { + base iana-interface-type; + description + "Parallel-port."; + reference + "RFC 1660 - Definitions of Managed Objects for + Parallel-printer-like Hardware Devices using + SMIv2"; + } + identity arcnet { + base iana-interface-type; + description + "ARCnet."; + } + identity arcnetPlus { + base iana-interface-type; + description + "ARCnet Plus."; + } + identity atm { + base iana-interface-type; + description + "ATM cells."; + } + identity miox25 { + base iana-interface-type; + reference + "RFC 1461 - SNMP MIB extension for Multiprotocol + Interconnect over X.25"; + } + identity sonet { + base iana-interface-type; + description + "SONET or SDH."; + } + identity x25ple { + base iana-interface-type; + reference + "RFC 2127 - ISDN Management Information Base using SMIv2"; + } + identity iso88022llc { + base iana-interface-type; + } + identity localTalk { + base iana-interface-type; + } + identity smdsDxi { + base iana-interface-type; + } + identity frameRelayService { + base iana-interface-type; + description + "FRNETSERV-MIB."; + reference + "RFC 2954 - Definitions of Managed Objects for Frame + Relay Service"; + } + identity v35 { + base iana-interface-type; + } + identity hssi { + base iana-interface-type; + } + identity hippi { + base iana-interface-type; + } + identity modem { + base iana-interface-type; + description + "Generic modem."; + } + identity aal5 { + base iana-interface-type; + description + "AAL5 over ATM."; + } + identity sonetPath { + base iana-interface-type; + } + identity sonetVT { + base iana-interface-type; + } + identity smdsIcip { + base iana-interface-type; + description + "SMDS InterCarrier Interface."; + } + identity propVirtual { + base iana-interface-type; + description + "Proprietary virtual/internal."; + reference + "RFC 2863 - The Interfaces Group MIB"; + } + identity propMultiplexor { + base iana-interface-type; + description + "Proprietary multiplexing."; + reference + "RFC 2863 - The Interfaces Group MIB"; + } + identity ieee80212 { + base iana-interface-type; + description + "100BaseVG."; + } + identity fibreChannel { + base iana-interface-type; + description + "Fibre Channel."; + } + identity hippiInterface { + base iana-interface-type; + description + "HIPPI interfaces."; + } + identity frameRelayInterconnect { + base iana-interface-type; + status obsolete; + description + "Obsolete; use either + frameRelay(32) or frameRelayService(44)."; + } + identity aflane8023 { + base iana-interface-type; + description + "ATM Emulated LAN for 802.3."; + } + identity aflane8025 { + base iana-interface-type; + description + "ATM Emulated LAN for 802.5."; + } + identity cctEmul { + base iana-interface-type; + description + "ATM Emulated circuit."; + } + identity fastEther { + base iana-interface-type; + status deprecated; + description + "Obsoleted via RFC 3635. + ethernetCsmacd(6) should be used instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity isdn { + base iana-interface-type; + description + "ISDN and X.25."; + reference + "RFC 1356 - Multiprotocol Interconnect on X.25 and ISDN + in the Packet Mode"; + } + identity v11 { + base iana-interface-type; + description + "CCITT V.11/X.21."; + } + identity v36 { + base iana-interface-type; + description + "CCITT V.36."; + } + identity g703at64k { + base iana-interface-type; + description + "CCITT G703 at 64Kbps."; + } + identity g703at2mb { + base iana-interface-type; + status obsolete; + description + "Obsolete; see DS1-MIB."; + } + identity qllc { + base iana-interface-type; + description + "SNA QLLC."; + } + identity fastEtherFX { + base iana-interface-type; + status deprecated; + description + "Obsoleted via RFC 3635. + ethernetCsmacd(6) should be used instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity channel { + base iana-interface-type; + description + "Channel."; + } + identity ieee80211 { + base iana-interface-type; + description + "Radio spread spectrum."; + } + identity ibm370parChan { + base iana-interface-type; + description + "IBM System 360/370 OEMI Channel."; + } + identity escon { + base iana-interface-type; + description + "IBM Enterprise Systems Connection."; + } + identity dlsw { + base iana-interface-type; + description + "Data Link Switching."; + } + identity isdns { + base iana-interface-type; + description + "ISDN S/T interface."; + } + identity isdnu { + base iana-interface-type; + description + "ISDN U interface."; + } + identity lapd { + base iana-interface-type; + description + "Link Access Protocol D."; + } + identity ipSwitch { + base iana-interface-type; + description + "IP Switching Objects."; + } + identity rsrb { + base iana-interface-type; + description + "Remote Source Route Bridging."; + } + identity atmLogical { + base iana-interface-type; + description + "ATM Logical Port."; + reference + "RFC 3606 - Definitions of Supplemental Managed Objects + for ATM Interface"; + } + identity ds0 { + base iana-interface-type; + description + "Digital Signal Level 0."; + reference + "RFC 2494 - Definitions of Managed Objects for the DS0 + and DS0 Bundle Interface Type"; + } + identity ds0Bundle { + base iana-interface-type; + description + "Group of ds0s on the same ds1."; + reference + "RFC 2494 - Definitions of Managed Objects for the DS0 + and DS0 Bundle Interface Type"; + } + identity bsc { + base iana-interface-type; + description + "Bisynchronous Protocol."; + } + identity async { + base iana-interface-type; + description + "Asynchronous Protocol."; + } + identity cnr { + base iana-interface-type; + description + "Combat Net Radio."; + } + identity iso88025Dtr { + base iana-interface-type; + description + "ISO 802.5r DTR."; + } + identity eplrs { + base iana-interface-type; + description + "Ext Pos Loc Report Sys."; + } + identity arap { + base iana-interface-type; + description + "Appletalk Remote Access Protocol."; + } + identity propCnls { + base iana-interface-type; + description + "Proprietary Connectionless Protocol."; + } + identity hostPad { + base iana-interface-type; + description + "CCITT-ITU X.29 PAD Protocol."; + } + identity termPad { + base iana-interface-type; + description + "CCITT-ITU X.3 PAD Facility."; + } + identity frameRelayMPI { + base iana-interface-type; + description + "Multiproto Interconnect over FR."; + } + identity x213 { + base iana-interface-type; + description + "CCITT-ITU X213."; + } + identity adsl { + base iana-interface-type; + description + "Asymmetric Digital Subscriber Loop."; + } + identity radsl { + base iana-interface-type; + description + "Rate-Adapt. Digital Subscriber Loop."; + } + identity sdsl { + base iana-interface-type; + description + "Symmetric Digital Subscriber Loop."; + } + identity vdsl { + base iana-interface-type; + description + "Very H-Speed Digital Subscrib. Loop."; + } + identity iso88025CRFPInt { + base iana-interface-type; + description + "ISO 802.5 CRFP."; + } + identity myrinet { + base iana-interface-type; + description + "Myricom Myrinet."; + } + identity voiceEM { + base iana-interface-type; + description + "Voice recEive and transMit."; + } + identity voiceFXO { + base iana-interface-type; + description + "Voice Foreign Exchange Office."; + } + identity voiceFXS { + base iana-interface-type; + description + "Voice Foreign Exchange Station."; + } + identity voiceEncap { + base iana-interface-type; + description + "Voice encapsulation."; + } + identity voiceOverIp { + base iana-interface-type; + description + "Voice over IP encapsulation."; + } + identity atmDxi { + base iana-interface-type; + description + "ATM DXI."; + } + identity atmFuni { + base iana-interface-type; + description + "ATM FUNI."; + } + identity atmIma { + base iana-interface-type; + description + "ATM IMA."; + } + identity pppMultilinkBundle { + base iana-interface-type; + description + "PPP Multilink Bundle."; + } + identity ipOverCdlc { + base iana-interface-type; + description + "IBM ipOverCdlc."; + } + identity ipOverClaw { + base iana-interface-type; + description + "IBM Common Link Access to Workstn."; + } + identity stackToStack { + base iana-interface-type; + description + "IBM stackToStack."; + } + identity virtualIpAddress { + base iana-interface-type; + description + "IBM VIPA."; + } + identity mpc { + base iana-interface-type; + description + "IBM multi-protocol channel support."; + } + identity ipOverAtm { + base iana-interface-type; + description + "IBM ipOverAtm."; + reference + "RFC 2320 - Definitions of Managed Objects for Classical IP + and ARP Over ATM Using SMIv2 (IPOA-MIB)"; + } + identity iso88025Fiber { + base iana-interface-type; + description + "ISO 802.5j Fiber Token Ring."; + } + identity tdlc { + base iana-interface-type; + description + "IBM twinaxial data link control."; + } + identity gigabitEthernet { + base iana-interface-type; + status deprecated; + description + "Obsoleted via RFC 3635. + ethernetCsmacd(6) should be used instead."; + reference + "RFC 3635 - Definitions of Managed Objects for the + Ethernet-like Interface Types"; + } + identity hdlc { + base iana-interface-type; + description + "HDLC."; + } + identity lapf { + base iana-interface-type; + description + "LAP F."; + } + identity v37 { + base iana-interface-type; + description + "V.37."; + } + identity x25mlp { + base iana-interface-type; + description + "Multi-Link Protocol."; + } + identity x25huntGroup { + base iana-interface-type; + description + "X25 Hunt Group."; + } + identity transpHdlc { + base iana-interface-type; + description + "Transp HDLC."; + } + identity interleave { + base iana-interface-type; + description + "Interleave channel."; + } + identity fast { + base iana-interface-type; + description + "Fast channel."; + } + identity ip { + base iana-interface-type; + description + "IP (for APPN HPR in IP networks)."; + } + identity docsCableMaclayer { + base iana-interface-type; + description + "CATV Mac Layer."; + } + identity docsCableDownstream { + base iana-interface-type; + description + "CATV Downstream interface."; + } + identity docsCableUpstream { + base iana-interface-type; + description + "CATV Upstream interface."; + } + identity a12MppSwitch { + base iana-interface-type; + description + "Avalon Parallel Processor."; + } + identity tunnel { + base iana-interface-type; + description + "Encapsulation interface."; + } + identity coffee { + base iana-interface-type; + description + "Coffee pot."; + reference + "RFC 2325 - Coffee MIB"; + } + identity ces { + base iana-interface-type; + description + "Circuit Emulation Service."; + } + identity atmSubInterface { + base iana-interface-type; + description + "ATM Sub Interface."; + } + identity l2vlan { + base iana-interface-type; + description + "Layer 2 Virtual LAN using 802.1Q."; + } + identity l3ipvlan { + base iana-interface-type; + description + "Layer 3 Virtual LAN using IP."; + } + identity l3ipxvlan { + base iana-interface-type; + description + "Layer 3 Virtual LAN using IPX."; + } + identity digitalPowerline { + base iana-interface-type; + description + "IP over Power Lines."; + } + identity mediaMailOverIp { + base iana-interface-type; + description + "Multimedia Mail over IP."; + } + identity dtm { + base iana-interface-type; + description + "Dynamic synchronous Transfer Mode."; + } + identity dcn { + base iana-interface-type; + description + "Data Communications Network."; + } + identity ipForward { + base iana-interface-type; + description + "IP Forwarding Interface."; + } + identity msdsl { + base iana-interface-type; + description + "Multi-rate Symmetric DSL."; + } + identity ieee1394 { + base iana-interface-type; + + description + "IEEE1394 High Performance Serial Bus."; + } + identity if-gsn { + base iana-interface-type; + description + "HIPPI-6400."; + } + identity dvbRccMacLayer { + base iana-interface-type; + description + "DVB-RCC MAC Layer."; + } + identity dvbRccDownstream { + base iana-interface-type; + description + "DVB-RCC Downstream Channel."; + } + identity dvbRccUpstream { + base iana-interface-type; + description + "DVB-RCC Upstream Channel."; + } + identity atmVirtual { + base iana-interface-type; + description + "ATM Virtual Interface."; + } + identity mplsTunnel { + base iana-interface-type; + description + "MPLS Tunnel Virtual Interface."; + } + identity srp { + base iana-interface-type; + description + "Spatial Reuse Protocol."; + } + identity voiceOverAtm { + base iana-interface-type; + description + "Voice over ATM."; + } + identity voiceOverFrameRelay { + base iana-interface-type; + description + "Voice Over Frame Relay."; + } + identity idsl { + base iana-interface-type; + description + "Digital Subscriber Loop over ISDN."; + } + identity compositeLink { + base iana-interface-type; + description + "Avici Composite Link Interface."; + } + identity ss7SigLink { + base iana-interface-type; + description + "SS7 Signaling Link."; + } + identity propWirelessP2P { + base iana-interface-type; + description + "Prop. P2P wireless interface."; + } + identity frForward { + base iana-interface-type; + description + "Frame Forward Interface."; + } + identity rfc1483 { + base iana-interface-type; + description + "Multiprotocol over ATM AAL5."; + reference + "RFC 1483 - Multiprotocol Encapsulation over ATM + Adaptation Layer 5"; + } + identity usb { + base iana-interface-type; + description + "USB Interface."; + } + identity ieee8023adLag { + base iana-interface-type; + description + "IEEE 802.3ad Link Aggregate."; + } + identity bgppolicyaccounting { + base iana-interface-type; + description + "BGP Policy Accounting."; + } + identity frf16MfrBundle { + base iana-interface-type; + description + "FRF.16 Multilink Frame Relay."; + } + identity h323Gatekeeper { + base iana-interface-type; + description + "H323 Gatekeeper."; + } + identity h323Proxy { + base iana-interface-type; + description + "H323 Voice and Video Proxy."; + } + identity mpls { + base iana-interface-type; + description + "MPLS."; + } + identity mfSigLink { + base iana-interface-type; + description + "Multi-frequency signaling link."; + } + identity hdsl2 { + base iana-interface-type; + description + "High Bit-Rate DSL - 2nd generation."; + } + identity shdsl { + base iana-interface-type; + description + "Multirate HDSL2."; + } + identity ds1FDL { + base iana-interface-type; + description + "Facility Data Link (4Kbps) on a DS1."; + } + identity pos { + base iana-interface-type; + description + "Packet over SONET/SDH Interface."; + } + identity dvbAsiIn { + base iana-interface-type; + description + "DVB-ASI Input."; + } + identity dvbAsiOut { + base iana-interface-type; + description + "DVB-ASI Output."; + } + identity plc { + base iana-interface-type; + description + "Power Line Communications."; + } + identity nfas { + base iana-interface-type; + description + "Non-Facility Associated Signaling."; + } + identity tr008 { + base iana-interface-type; + description + "TR008."; + } + identity gr303RDT { + base iana-interface-type; + description + "Remote Digital Terminal."; + } + identity gr303IDT { + base iana-interface-type; + description + "Integrated Digital Terminal."; + } + identity isup { + base iana-interface-type; + description + "ISUP."; + } + identity propDocsWirelessMaclayer { + base iana-interface-type; + description + "Cisco proprietary Maclayer."; + } + identity propDocsWirelessDownstream { + base iana-interface-type; + description + "Cisco proprietary Downstream."; + } + identity propDocsWirelessUpstream { + base iana-interface-type; + description + "Cisco proprietary Upstream."; + } + identity hiperlan2 { + base iana-interface-type; + description + "HIPERLAN Type 2 Radio Interface."; + } + identity propBWAp2Mp { + base iana-interface-type; + description + "PropBroadbandWirelessAccesspt2Multipt (use of this value + for IEEE 802.16 WMAN interfaces as per IEEE Std 802.16f + is deprecated, and ieee80216WMAN(237) should be used + instead)."; + } + identity sonetOverheadChannel { + base iana-interface-type; + description + "SONET Overhead Channel."; + } + identity digitalWrapperOverheadChannel { + base iana-interface-type; + description + "Digital Wrapper."; + } + identity aal2 { + base iana-interface-type; + description + "ATM adaptation layer 2."; + } + identity radioMAC { + base iana-interface-type; + description + "MAC layer over radio links."; + } + identity atmRadio { + base iana-interface-type; + description + "ATM over radio links."; + } + identity imt { + base iana-interface-type; + description + "Inter-Machine Trunks."; + } + identity mvl { + base iana-interface-type; + description + "Multiple Virtual Lines DSL."; + } + identity reachDSL { + base iana-interface-type; + description + "Long Reach DSL."; + } + identity frDlciEndPt { + base iana-interface-type; + description + "Frame Relay DLCI End Point."; + } + identity atmVciEndPt { + base iana-interface-type; + description + "ATM VCI End Point."; + } + identity opticalChannel { + base iana-interface-type; + description + "Optical Channel."; + } + identity opticalTransport { + base iana-interface-type; + description + "Optical Transport."; + } + identity propAtm { + base iana-interface-type; + description + "Proprietary ATM."; + } + identity voiceOverCable { + base iana-interface-type; + description + "Voice Over Cable Interface."; + } + identity infiniband { + base iana-interface-type; + description + "Infiniband."; + } + identity teLink { + base iana-interface-type; + description + "TE Link."; + } + identity q2931 { + base iana-interface-type; + description + "Q.2931."; + } + identity virtualTg { + base iana-interface-type; + description + "Virtual Trunk Group."; + } + identity sipTg { + base iana-interface-type; + description + "SIP Trunk Group."; + } + identity sipSig { + base iana-interface-type; + description + "SIP Signaling."; + } + identity docsCableUpstreamChannel { + base iana-interface-type; + description + "CATV Upstream Channel."; + } + identity econet { + base iana-interface-type; + description + "Acorn Econet."; + } + identity pon155 { + base iana-interface-type; + description + "FSAN 155Mb Symetrical PON interface."; + } + identity pon622 { + base iana-interface-type; + description + "FSAN 622Mb Symetrical PON interface."; + } + identity bridge { + base iana-interface-type; + description + "Transparent bridge interface."; + } + identity linegroup { + base iana-interface-type; + description + "Interface common to multiple lines."; + } + identity voiceEMFGD { + base iana-interface-type; + description + "Voice E&M Feature Group D."; + } + identity voiceFGDEANA { + base iana-interface-type; + description + "Voice FGD Exchange Access North American."; + } + identity voiceDID { + base iana-interface-type; + description + "Voice Direct Inward Dialing."; + } + identity mpegTransport { + base iana-interface-type; + description + "MPEG transport interface."; + } + identity sixToFour { + base iana-interface-type; + status deprecated; + description + "6to4 interface (DEPRECATED)."; + reference + "RFC 4087 - IP Tunnel MIB"; + } + identity gtp { + base iana-interface-type; + description + "GTP (GPRS Tunneling Protocol)."; + } + identity pdnEtherLoop1 { + base iana-interface-type; + description + "Paradyne EtherLoop 1."; + } + identity pdnEtherLoop2 { + base iana-interface-type; + description + "Paradyne EtherLoop 2."; + } + identity opticalChannelGroup { + base iana-interface-type; + description + "Optical Channel Group."; + } + identity homepna { + base iana-interface-type; + description + "HomePNA ITU-T G.989."; + } + identity gfp { + base iana-interface-type; + description + "Generic Framing Procedure (GFP)."; + } + identity ciscoISLvlan { + base iana-interface-type; + description + "Layer 2 Virtual LAN using Cisco ISL."; + } + identity actelisMetaLOOP { + base iana-interface-type; + description + "Acteleis proprietary MetaLOOP High Speed Link."; + } + identity fcipLink { + base iana-interface-type; + description + "FCIP Link."; + } + identity rpr { + base iana-interface-type; + description + "Resilient Packet Ring Interface Type."; + } + identity qam { + base iana-interface-type; + description + "RF Qam Interface."; + } + identity lmp { + base iana-interface-type; + description + "Link Management Protocol."; + reference + "RFC 4327 - Link Management Protocol (LMP) Management + Information Base (MIB)"; + } + identity cblVectaStar { + base iana-interface-type; + description + "Cambridge Broadband Networks Limited VectaStar."; + } + identity docsCableMCmtsDownstream { + base iana-interface-type; + description + "CATV Modular CMTS Downstream Interface."; + } + identity adsl2 { + base iana-interface-type; + status deprecated; + description + "Asymmetric Digital Subscriber Loop Version 2 + (DEPRECATED/OBSOLETED - please use adsl2plus(238) + instead)."; + reference + "RFC 4706 - Definitions of Managed Objects for Asymmetric + Digital Subscriber Line 2 (ADSL2)"; + } + identity macSecControlledIF { + base iana-interface-type; + description + "MACSecControlled."; + } + identity macSecUncontrolledIF { + base iana-interface-type; + description + "MACSecUncontrolled."; + } + identity aviciOpticalEther { + base iana-interface-type; + description + "Avici Optical Ethernet Aggregate."; + } + identity atmbond { + base iana-interface-type; + description + "atmbond."; + } + identity voiceFGDOS { + base iana-interface-type; + description + "Voice FGD Operator Services."; + } + identity mocaVersion1 { + base iana-interface-type; + description + "MultiMedia over Coax Alliance (MoCA) Interface + as documented in information provided privately to IANA."; + } + identity ieee80216WMAN { + base iana-interface-type; + description + "IEEE 802.16 WMAN interface."; + } + identity adsl2plus { + base iana-interface-type; + description + "Asymmetric Digital Subscriber Loop Version 2 - + Version 2 Plus and all variants."; + } + identity dvbRcsMacLayer { + base iana-interface-type; + description + "DVB-RCS MAC Layer."; + reference + "RFC 5728 - The SatLabs Group DVB-RCS MIB"; + } + identity dvbTdm { + base iana-interface-type; + description + "DVB Satellite TDM."; + reference + "RFC 5728 - The SatLabs Group DVB-RCS MIB"; + } + identity dvbRcsTdma { + base iana-interface-type; + description + "DVB-RCS TDMA."; + reference + "RFC 5728 - The SatLabs Group DVB-RCS MIB"; + } + identity x86Laps { + base iana-interface-type; + description + "LAPS based on ITU-T X.86/Y.1323."; + } + identity wwanPP { + base iana-interface-type; + description + "3GPP WWAN."; + } + identity wwanPP2 { + base iana-interface-type; + description + "3GPP2 WWAN."; + } + identity voiceEBS { + base iana-interface-type; + description + "Voice P-phone EBS physical interface."; + } + identity ifPwType { + base iana-interface-type; + description + "Pseudowire interface type."; + reference + "RFC 5601 - Pseudowire (PW) Management Information Base (MIB)"; + } + identity ilan { + base iana-interface-type; + description + "Internal LAN on a bridge per IEEE 802.1ap."; + } + identity pip { + base iana-interface-type; + description + "Provider Instance Port on a bridge per IEEE 802.1ah PBB."; + } + identity aluELP { + base iana-interface-type; + description + "Alcatel-Lucent Ethernet Link Protection."; + } + identity gpon { + base iana-interface-type; + description + "Gigabit-capable passive optical networks (G-PON) as per + ITU-T G.948."; + } + identity vdsl2 { + base iana-interface-type; + description + "Very high speed digital subscriber line Version 2 + (as per ITU-T Recommendation G.993.2)."; + reference + "RFC 5650 - Definitions of Managed Objects for Very High + Speed Digital Subscriber Line 2 (VDSL2)"; + } + identity capwapDot11Profile { + base iana-interface-type; + description + "WLAN Profile Interface."; + reference + "RFC 5834 - Control and Provisioning of Wireless Access + Points (CAPWAP) Protocol Binding MIB for + IEEE 802.11"; + } + identity capwapDot11Bss { + base iana-interface-type; + description + "WLAN BSS Interface."; + reference + "RFC 5834 - Control and Provisioning of Wireless Access + Points (CAPWAP) Protocol Binding MIB for + IEEE 802.11"; + } + identity capwapWtpVirtualRadio { + base iana-interface-type; + description + "WTP Virtual Radio Interface."; + reference + "RFC 5833 - Control and Provisioning of Wireless Access + Points (CAPWAP) Protocol Base MIB"; + } + identity bits { + base iana-interface-type; + description + "bitsport."; + } + identity docsCableUpstreamRfPort { + base iana-interface-type; + description + "DOCSIS CATV Upstream RF Port."; + } + identity cableDownstreamRfPort { + base iana-interface-type; + description + "CATV downstream RF Port."; + } + identity vmwareVirtualNic { + base iana-interface-type; + description + "VMware Virtual Network Interface."; + } + identity ieee802154 { + base iana-interface-type; + description + "IEEE 802.15.4 WPAN interface."; + reference + "IEEE 802.15.4-2006"; + } + identity otnOdu { + base iana-interface-type; + description + "OTN Optical Data Unit."; + } + identity otnOtu { + base iana-interface-type; + description + "OTN Optical channel Transport Unit."; + } + identity ifVfiType { + base iana-interface-type; + description + "VPLS Forwarding Instance Interface Type."; + } + identity g9981 { + base iana-interface-type; + description + "G.998.1 bonded interface."; + } + identity g9982 { + base iana-interface-type; + description + "G.998.2 bonded interface."; + } + identity g9983 { + base iana-interface-type; + description + "G.998.3 bonded interface."; + } + + identity aluEpon { + base iana-interface-type; + description + "Ethernet Passive Optical Networks (E-PON)."; + } + identity aluEponOnu { + base iana-interface-type; + description + "EPON Optical Network Unit."; + } + identity aluEponPhysicalUni { + base iana-interface-type; + description + "EPON physical User to Network interface."; + } + identity aluEponLogicalLink { + base iana-interface-type; + description + "The emulation of a point-to-point link over the EPON + layer."; + } + identity aluGponOnu { + base iana-interface-type; + description + "GPON Optical Network Unit."; + reference + "ITU-T G.984.2"; + } + identity aluGponPhysicalUni { + base iana-interface-type; + description + "GPON physical User to Network interface."; + reference + "ITU-T G.984.2"; + } + identity vmwareNicTeam { + base iana-interface-type; + description + "VMware NIC Team."; + } + identity docsOfdmDownstream { + base iana-interface-type; + description + "CATV Downstream OFDM interface."; + } + identity docsOfdmaUpstream { + base iana-interface-type; + description + "CATV Upstream OFDMA interface."; + } + identity gfast { + base iana-interface-type; + description + "G.fast port."; + reference + "ITU-T G.9701"; + } + identity sdci { + base iana-interface-type; + description + "SDCI (IO-Link)."; + reference + "IEC 61131-9 Edition 1.0 2013-09"; + } + identity xboxWireless { + base iana-interface-type; + description + "Xbox wireless."; + } + identity fastdsl { + base iana-interface-type; + description + "FastDSL."; + reference + "BBF TR-355"; + } + identity docsCableScte55d1FwdOob { + base iana-interface-type; + description + "Cable SCTE 55-1 OOB Forward Channel."; + } + identity docsCableScte55d1RetOob { + base iana-interface-type; + description + "Cable SCTE 55-1 OOB Return Channel."; + } + identity docsCableScte55d2DsOob { + base iana-interface-type; + description + "Cable SCTE 55-2 OOB Downstream Channel."; + } + identity docsCableScte55d2UsOob { + base iana-interface-type; + description + "Cable SCTE 55-2 OOB Upstream Channel."; + } + identity docsCableNdf { + base iana-interface-type; + description + "Cable Narrowband Digital Forward."; + } + identity docsCableNdr { + base iana-interface-type; + description + "Cable Narrowband Digital Return."; + } + identity ptm { + base iana-interface-type; + description + "Packet Transfer Mode."; + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-dhcpv6-types.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-dhcpv6-types.yang new file mode 100644 index 0000000..c0d7193 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-dhcpv6-types.yang @@ -0,0 +1,207 @@ +module ietf-dhcpv6-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types"; + prefix "dhcpv6-types"; + + import ietf-inet-types { + prefix inet; + } + import ietf-yang-types { + prefix yang; + } + + organization "DHC WG"; + contact + "cuiyong@tsinghua.edu.cn + lh.sunlinh@gmail.com + ian.farrer@telekom.de + sladjana.zechlin@telekom.de + hezihao9512@gmail.com"; + + description "This model defines a YANG data model that can be + used to define some commonly used DHCPv6 types"; + + revision 2018-01-30 { + description "Initial revision"; + reference "I-D: draft-ietf-dhc-dhcpv6-yang"; + } + + /* + * Grouping + */ + grouping vendor-infor { + description "Vendor information."; + container vendor-info { + description ""; + leaf ent-num { + type uint32; + mandatory true; + description "enterprise number"; + } + leaf-list data { + type string; + description "specific vendor info"; + } + } + } + + grouping duid { + description + "Each server and client has only one DUID (DHCP Unique Identifier). + The DUID here identifies a unique DHCPv6 server for clients. DUID + consists of a two-octet type field and an arbitrary length (no more + than 128 bytes) content field. Currently there are four defined types + of DUIDs in RFC3315 and RFC6355 - DUID-LLT, DUID-EN, DUID-LL and + DUID-UUID. DUID-Uknown represents those unconventional DUIDs."; + reference "RFC3315: Section 9 and RFC6355: Section 4"; + leaf type-code { + type uint16; + default 65535; + description "Type code of this DUID"; + } + choice duid-type { + default duid-unknown; + description "Selects the format for the DUID."; + case duid-llt { + description "DUID Based on Link-layer Address Plus Time + (Type 1 - DUID-LLT)"; + reference "RFC3315 Section 9.2"; + leaf duid-llt-hardware-type { + type uint16; + description "Hardware type as assigned by IANA (RFC826)."; + } + leaf duid-llt-time { + type yang:timeticks; + description "The time value is the time that the DUID is + generated represented in seconds since midnight (UTC), + January 1, 2000, modulo 2^32."; + } + leaf duid-llt-link-layer-addr { + type yang:mac-address; + description "Link-layer address as described in RFC2464"; + } + } + case duid-en { + description "DUID Assigned by Vendor Based on Enterprise Number + (Type 2 - DUID-EN)"; + reference "RFC3315 Section 9.3"; + leaf duid-en-enterprise-number { + type uint32; + description "Vendor's registered Private Enterprise Number as + maintained by IANA"; + } + leaf duid-en-identifier { + type string; + description "Indentifier, unique to the device that is + using it"; + } + } + case duid-ll { + description "DUID Based on Link-layer Address (Type 3 - DUID-LL)"; + reference "RFC3315 Section 9.4"; + leaf duid-ll-hardware-type { + type uint16; + description "Hardware type as assigned by IANA (RFC826)."; + } + leaf duid-ll-link-layer-addr { + type yang:mac-address; + description "Link-layer address as described in RFC2464"; + } + } + case duid-uuid { + description "DUID Based on Universally Unique Identifier + (Type 4 - DUID-UUID)"; + reference "RFC6335 Defination of the UUID-Based Unique Identifier"; + leaf uuid { + type yang:uuid; + description "A Universally Unique IDentifier in the string + representation defined in RFC 4122. The canonical + representation uses lowercase characters"; + } + } + case duid-unknown { + description "DUID based on free raw bytes"; + leaf data { + type binary; + description "The bits to be used as the identifier"; + } + } + } + } + + grouping portset-para { + description "portset parameters"; + container port-parameter { + description "port parameter"; + leaf offset { + type uint8; + mandatory true; + description "offset in a port set"; + } + leaf psid-len { + type uint8; + mandatory true; + description "length of a psid"; + } + leaf psid { + type uint16; + mandatory true; + description "psid value"; + } + } + } + + grouping iaid { + description "IA is a construct through which a server and a + client can identify, group, and manage a set of related IPv6 + addresses. The key of the list is a 4-byte number IAID defined + in [RFC3315]."; + list identity-association { + config "false"; + description "IA"; + leaf iaid { + type uint32; + mandatory true; + description "IAID"; + } + leaf ia-type { + type string; + mandatory true; + description "IA type"; + } + leaf-list ipv6-addr { + type inet:ipv6-address; + description "ipv6 address"; + } + leaf-list ipv6-prefix { + type inet:ipv6-prefix; + description "ipv6 prefix"; + } + leaf-list prefix-length { + type uint8; + description "ipv6 prefix length"; + } + leaf t1-time { + type yang:timeticks; + mandatory true; + description "t1 time"; + } + leaf t2-time { + type yang:timeticks; + mandatory true; + description "t2 time"; + } + leaf preferred-lifetime { + type yang:timeticks; + mandatory true; + description "preferred lifetime"; + } + leaf valid-lifetime { + type yang:timeticks; + mandatory true; + description "valid lifetime"; + } + } + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-ip.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-ip.yang new file mode 100644 index 0000000..449081b --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-ip.yang @@ -0,0 +1,860 @@ +module ietf-ip { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ip"; + prefix ip; + + import ietf-interfaces { + prefix if; + } + import ietf-inet-types { + prefix inet; + } + import ietf-yang-types { + prefix yang; + } + + organization + "IETF NETMOD (Network Modeling) Working Group"; + + contact + "WG Web: + WG List: + Editor: Martin Bjorklund + "; + description + "This module contains a collection of YANG definitions for + managing IP implementations. + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + This version of this YANG module is part of RFC 8344; see + the RFC itself for full legal notices."; + + revision 2018-02-22 { + description + "Updated to support NMDA."; + reference + "RFC 8344: A YANG Data Model for IP Management"; + } + + revision 2014-06-16 { + description + "Initial revision."; + reference + "RFC 7277: A YANG Data Model for IP Management"; + } + + /* + * Features + */ + + feature ipv4-non-contiguous-netmasks { + description + "Indicates support for configuring non-contiguous + subnet masks."; + } + + feature ipv6-privacy-autoconf { + description + "Indicates support for privacy extensions for stateless address + autoconfiguration in IPv6."; + reference + "RFC 4941: Privacy Extensions for Stateless Address + Autoconfiguration in IPv6"; + } + + /* + * Typedefs + */ + + typedef ip-address-origin { + type enumeration { + enum other { + description + "None of the following."; + } + + enum static { + description + "Indicates that the address has been statically + configured -- for example, using the Network Configuration + Protocol (NETCONF) or a command line interface."; + } + enum dhcp { + description + "Indicates an address that has been assigned to this + system by a DHCP server."; + } + enum link-layer { + description + "Indicates an address created by IPv6 stateless + autoconfiguration that embeds a link-layer address in its + interface identifier."; + } + enum random { + description + "Indicates an address chosen by the system at + random, e.g., an IPv4 address within 169.254/16, a + temporary address as described in RFC 4941, or a + semantically opaque address as described in RFC 7217."; + reference + "RFC 4941: Privacy Extensions for Stateless Address + Autoconfiguration in IPv6 + RFC 7217: A Method for Generating Semantically Opaque + Interface Identifiers with IPv6 Stateless + Address Autoconfiguration (SLAAC)"; + } + } + description + "The origin of an address."; + } + + typedef neighbor-origin { + type enumeration { + enum other { + description + "None of the following."; + } + enum static { + description + "Indicates that the mapping has been statically + configured -- for example, using NETCONF or a command line + interface."; + } + + enum dynamic { + description + "Indicates that the mapping has been dynamically resolved + using, for example, IPv4 ARP or the IPv6 Neighbor + Discovery protocol."; + } + } + description + "The origin of a neighbor entry."; + } + + /* + * Data nodes + */ + + augment "/if:interfaces/if:interface" { + description + "IP parameters on interfaces. + If an interface is not capable of running IP, the server + must not allow the client to configure these parameters."; + + container ipv4 { + presence + "Enables IPv4 unless the 'enabled' leaf + (which defaults to 'true') is set to 'false'"; + description + "Parameters for the IPv4 address family."; + + leaf enabled { + type boolean; + default true; + description + "Controls whether IPv4 is enabled or disabled on this + interface. When IPv4 is enabled, this interface is + connected to an IPv4 stack, and the interface can send + and receive IPv4 packets."; + } + leaf forwarding { + type boolean; + default false; + description + "Controls IPv4 packet forwarding of datagrams received by, + but not addressed to, this interface. IPv4 routers + forward datagrams. IPv4 hosts do not (except those + source-routed via the host)."; + } + + leaf mtu { + type uint16 { + range "68..max"; + } + units "octets"; + description + "The size, in octets, of the largest IPv4 packet that the + interface will send and receive. + The server may restrict the allowed values for this leaf, + depending on the interface's type. + If this leaf is not configured, the operationally used MTU + depends on the interface's type."; + reference + "RFC 791: Internet Protocol"; + } + list address { + key "ip"; + description + "The list of IPv4 addresses on the interface."; + + leaf ip { + type inet:ipv4-address-no-zone; + description + "The IPv4 address on the interface."; + } + choice subnet { + mandatory true; + description + "The subnet can be specified as a prefix length or, + if the server supports non-contiguous netmasks, as + a netmask."; + leaf prefix-length { + type uint8 { + range "0..32"; + } + description + "The length of the subnet prefix."; + } + leaf netmask { + if-feature ipv4-non-contiguous-netmasks; + type yang:dotted-quad; + description + "The subnet specified as a netmask."; + } + } + + leaf origin { + type ip-address-origin; + config false; + description + "The origin of this address."; + } + } + list neighbor { + key "ip"; + description + "A list of mappings from IPv4 addresses to + link-layer addresses. + Entries in this list in the intended configuration are + used as static entries in the ARP Cache. + In the operational state, this list represents the ARP + Cache."; + reference + "RFC 826: An Ethernet Address Resolution Protocol"; + + leaf ip { + type inet:ipv4-address-no-zone; + description + "The IPv4 address of the neighbor node."; + } + leaf link-layer-address { + type yang:phys-address; + mandatory true; + description + "The link-layer address of the neighbor node."; + } + leaf origin { + type neighbor-origin; + config false; + description + "The origin of this neighbor entry."; + } + } + } + + container ipv6 { + presence + "Enables IPv6 unless the 'enabled' leaf + (which defaults to 'true') is set to 'false'"; + description + "Parameters for the IPv6 address family."; + + leaf enabled { + type boolean; + default true; + description + "Controls whether IPv6 is enabled or disabled on this + interface. When IPv6 is enabled, this interface is + connected to an IPv6 stack, and the interface can send + and receive IPv6 packets."; + } + leaf forwarding { + type boolean; + default false; + description + "Controls IPv6 packet forwarding of datagrams received by, + but not addressed to, this interface. IPv6 routers + forward datagrams. IPv6 hosts do not (except those + source-routed via the host)."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) + Section 6.2.1, IsRouter"; + } + leaf mtu { + type uint32 { + range "1280..max"; + } + units "octets"; + description + "The size, in octets, of the largest IPv6 packet that the + interface will send and receive. + The server may restrict the allowed values for this leaf, + depending on the interface's type. + If this leaf is not configured, the operationally used MTU + depends on the interface's type."; + reference + "RFC 8200: Internet Protocol, Version 6 (IPv6) + Specification + Section 5"; + } + + list address { + key "ip"; + description + "The list of IPv6 addresses on the interface."; + + leaf ip { + type inet:ipv6-address-no-zone; + description + "The IPv6 address on the interface."; + } + leaf prefix-length { + type uint8 { + range "0..128"; + } + mandatory true; + description + "The length of the subnet prefix."; + } + leaf origin { + type ip-address-origin; + config false; + description + "The origin of this address."; + } + leaf status { + type enumeration { + enum preferred { + description + "This is a valid address that can appear as the + destination or source address of a packet."; + } + enum deprecated { + description + "This is a valid but deprecated address that should + no longer be used as a source address in new + communications, but packets addressed to such an + address are processed as expected."; + } + enum invalid { + description + "This isn't a valid address, and it shouldn't appear + as the destination or source address of a packet."; + } + + enum inaccessible { + description + "The address is not accessible because the interface + to which this address is assigned is not + operational."; + } + enum unknown { + description + "The status cannot be determined for some reason."; + } + enum tentative { + description + "The uniqueness of the address on the link is being + verified. Addresses in this state should not be + used for general communication and should only be + used to determine the uniqueness of the address."; + } + enum duplicate { + description + "The address has been determined to be non-unique on + the link and so must not be used."; + } + enum optimistic { + description + "The address is available for use, subject to + restrictions, while its uniqueness on a link is + being verified."; + } + } + config false; + description + "The status of an address. Most of the states correspond + to states from the IPv6 Stateless Address + Autoconfiguration protocol."; + reference + "RFC 4293: Management Information Base for the + Internet Protocol (IP) + - IpAddressStatusTC + RFC 4862: IPv6 Stateless Address Autoconfiguration"; + } + } + + list neighbor { + key "ip"; + description + "A list of mappings from IPv6 addresses to + link-layer addresses. + Entries in this list in the intended configuration are + used as static entries in the Neighbor Cache. + In the operational state, this list represents the + Neighbor Cache."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)"; + + leaf ip { + type inet:ipv6-address-no-zone; + description + "The IPv6 address of the neighbor node."; + } + leaf link-layer-address { + type yang:phys-address; + mandatory true; + description + "The link-layer address of the neighbor node. + In the operational state, if the neighbor's 'state' leaf + is 'incomplete', this leaf is not instantiated."; + } + leaf origin { + type neighbor-origin; + config false; + description + "The origin of this neighbor entry."; + } + leaf is-router { + type empty; + config false; + description + "Indicates that the neighbor node acts as a router."; + } + + leaf state { + type enumeration { + enum incomplete { + description + "Address resolution is in progress, and the + link-layer address of the neighbor has not yet been + determined."; + } + enum reachable { + description + "Roughly speaking, the neighbor is known to have been + reachable recently (within tens of seconds ago)."; + } + enum stale { + description + "The neighbor is no longer known to be reachable, but + until traffic is sent to the neighbor no attempt + should be made to verify its reachability."; + } + enum delay { + description + "The neighbor is no longer known to be reachable, and + traffic has recently been sent to the neighbor. + Rather than probe the neighbor immediately, however, + delay sending probes for a short while in order to + give upper-layer protocols a chance to provide + reachability confirmation."; + } + enum probe { + description + "The neighbor is no longer known to be reachable, and + unicast Neighbor Solicitation probes are being sent + to verify reachability."; + } + } + config false; + description + "The Neighbor Unreachability Detection state of this + entry."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) + Section 7.3.2"; + } + } + + leaf dup-addr-detect-transmits { + type uint32; + default 1; + description + "The number of consecutive Neighbor Solicitation messages + sent while performing Duplicate Address Detection on a + tentative address. A value of zero indicates that + Duplicate Address Detection is not performed on + tentative addresses. A value of one indicates a single + transmission with no follow-up retransmissions."; + reference + "RFC 4862: IPv6 Stateless Address Autoconfiguration"; + } + container autoconf { + description + "Parameters to control the autoconfiguration of IPv6 + addresses, as described in RFC 4862."; + reference + "RFC 4862: IPv6 Stateless Address Autoconfiguration"; + + leaf create-global-addresses { + type boolean; + default true; + description + "If enabled, the host creates global addresses as + described in RFC 4862."; + reference + "RFC 4862: IPv6 Stateless Address Autoconfiguration + Section 5.5"; + } + leaf create-temporary-addresses { + if-feature ipv6-privacy-autoconf; + type boolean; + default false; + description + "If enabled, the host creates temporary addresses as + described in RFC 4941."; + reference + "RFC 4941: Privacy Extensions for Stateless Address + Autoconfiguration in IPv6"; + } + + leaf temporary-valid-lifetime { + if-feature ipv6-privacy-autoconf; + type uint32; + units "seconds"; + default 604800; + description + "The time period during which the temporary address + is valid."; + reference + "RFC 4941: Privacy Extensions for Stateless Address + Autoconfiguration in IPv6 + - TEMP_VALID_LIFETIME"; + } + leaf temporary-preferred-lifetime { + if-feature ipv6-privacy-autoconf; + type uint32; + units "seconds"; + default 86400; + description + "The time period during which the temporary address is + preferred."; + reference + "RFC 4941: Privacy Extensions for Stateless Address + Autoconfiguration in IPv6 + - TEMP_PREFERRED_LIFETIME"; + } + } + } + } + + /* + * Legacy operational state data nodes + */ + + augment "/if:interfaces-state/if:interface" { + status deprecated; + description + "Data nodes for the operational state of IP on interfaces."; + + container ipv4 { + presence + "Present if IPv4 is enabled on this interface"; + config false; + status deprecated; + description + "Interface-specific parameters for the IPv4 address family."; + + leaf forwarding { + type boolean; + status deprecated; + description + "Indicates whether IPv4 packet forwarding is enabled or + disabled on this interface."; + } + leaf mtu { + type uint16 { + range "68..max"; + } + units "octets"; + status deprecated; + description + "The size, in octets, of the largest IPv4 packet that the + interface will send and receive."; + reference + "RFC 791: Internet Protocol"; + } + list address { + key "ip"; + status deprecated; + description + "The list of IPv4 addresses on the interface."; + + leaf ip { + type inet:ipv4-address-no-zone; + status deprecated; + description + "The IPv4 address on the interface."; + } + choice subnet { + status deprecated; + description + "The subnet can be specified as a prefix length or, + if the server supports non-contiguous netmasks, as + a netmask."; + leaf prefix-length { + type uint8 { + range "0..32"; + } + status deprecated; + description + "The length of the subnet prefix."; + } + leaf netmask { + if-feature ipv4-non-contiguous-netmasks; + type yang:dotted-quad; + status deprecated; + description + "The subnet specified as a netmask."; + } + } + leaf origin { + type ip-address-origin; + status deprecated; + description + "The origin of this address."; + } + } + list neighbor { + key "ip"; + status deprecated; + description + "A list of mappings from IPv4 addresses to + link-layer addresses. + This list represents the ARP Cache."; + reference + "RFC 826: An Ethernet Address Resolution Protocol"; + + leaf ip { + type inet:ipv4-address-no-zone; + status deprecated; + description + "The IPv4 address of the neighbor node."; + } + + leaf link-layer-address { + type yang:phys-address; + status deprecated; + description + "The link-layer address of the neighbor node."; + } + leaf origin { + type neighbor-origin; + status deprecated; + description + "The origin of this neighbor entry."; + } + } + } + + container ipv6 { + presence + "Present if IPv6 is enabled on this interface"; + config false; + status deprecated; + description + "Parameters for the IPv6 address family."; + + leaf forwarding { + type boolean; + default false; + status deprecated; + description + "Indicates whether IPv6 packet forwarding is enabled or + disabled on this interface."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) + Section 6.2.1, IsRouter"; + } + leaf mtu { + type uint32 { + range "1280..max"; + } + units "octets"; + status deprecated; + description + "The size, in octets, of the largest IPv6 packet that the + interface will send and receive."; + reference + "RFC 8200: Internet Protocol, Version 6 (IPv6) + Specification + Section 5"; + } + list address { + key "ip"; + status deprecated; + description + "The list of IPv6 addresses on the interface."; + + leaf ip { + type inet:ipv6-address-no-zone; + status deprecated; + description + "The IPv6 address on the interface."; + } + leaf prefix-length { + type uint8 { + range "0..128"; + } + mandatory true; + status deprecated; + description + "The length of the subnet prefix."; + } + leaf origin { + type ip-address-origin; + status deprecated; + description + "The origin of this address."; + } + leaf status { + type enumeration { + enum preferred { + description + "This is a valid address that can appear as the + destination or source address of a packet."; + } + enum deprecated { + description + "This is a valid but deprecated address that should + no longer be used as a source address in new + communications, but packets addressed to such an + address are processed as expected."; + } + enum invalid { + description + "This isn't a valid address, and it shouldn't appear + as the destination or source address of a packet."; + } + + enum inaccessible { + description + "The address is not accessible because the interface + to which this address is assigned is not + operational."; + } + enum unknown { + description + "The status cannot be determined for some reason."; + } + enum tentative { + description + "The uniqueness of the address on the link is being + verified. Addresses in this state should not be + used for general communication and should only be + used to determine the uniqueness of the address."; + } + enum duplicate { + description + "The address has been determined to be non-unique on + the link and so must not be used."; + } + enum optimistic { + description + "The address is available for use, subject to + restrictions, while its uniqueness on a link is + being verified."; + } + } + status deprecated; + description + "The status of an address. Most of the states correspond + to states from the IPv6 Stateless Address + Autoconfiguration protocol."; + reference + "RFC 4293: Management Information Base for the + Internet Protocol (IP) + - IpAddressStatusTC + RFC 4862: IPv6 Stateless Address Autoconfiguration"; + } + } + + list neighbor { + key "ip"; + status deprecated; + description + "A list of mappings from IPv6 addresses to + link-layer addresses. + This list represents the Neighbor Cache."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)"; + + leaf ip { + type inet:ipv6-address-no-zone; + status deprecated; + description + "The IPv6 address of the neighbor node."; + } + leaf link-layer-address { + type yang:phys-address; + status deprecated; + description + "The link-layer address of the neighbor node."; + } + leaf origin { + type neighbor-origin; + status deprecated; + description + "The origin of this neighbor entry."; + } + leaf is-router { + type empty; + status deprecated; + description + "Indicates that the neighbor node acts as a router."; + } + leaf state { + type enumeration { + enum incomplete { + description + "Address resolution is in progress, and the + link-layer address of the neighbor has not yet been + determined."; + } + enum reachable { + description + "Roughly speaking, the neighbor is known to have been + reachable recently (within tens of seconds ago)."; + } + enum stale { + description + "The neighbor is no longer known to be reachable, but + until traffic is sent to the neighbor no attempt + should be made to verify its reachability."; + } + enum delay { + description + "The neighbor is no longer known to be reachable, and + traffic has recently been sent to the neighbor. + Rather than probe the neighbor immediately, however, + delay sending probes for a short while in order to + give upper-layer protocols a chance to provide + reachability confirmation."; + } + enum probe { + description + "The neighbor is no longer known to be reachable, and + unicast Neighbor Solicitation probes are being sent + to verify reachability."; + } + } + status deprecated; + description + "The Neighbor Unreachability Detection state of this + entry."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) + Section 7.3.2"; + } + } + } + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/org-openroadm-user-mgmt.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/org-openroadm-user-mgmt.yang new file mode 100644 index 0000000..7e3227d --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/org-openroadm-user-mgmt.yang @@ -0,0 +1,153 @@ +module org-openroadm-user-mgmt { + namespace "http://org/openroadm/user-mgmt"; + prefix org-openroadm-user-mgmt; + + organization + "Open ROADM MSA"; + contact + "OpenROADM.org"; + description + "YANG definitions of user managements. + + Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, + AT&T Intellectual Property. All other rights reserved. + + 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 following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + * Neither the Members of the Open ROADM MSA Agreement nor the names of its + contributors may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA AGREEMENT ''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 THE MEMBERS OF THE OPEN ROADM MSA AGREEMENT 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"; + + revision 2017-12-15 { + description + "Version 2.2"; + } + revision 2017-09-29 { + description + "Version 2.1"; + } + revision 2017-06-26 { + description + "Version 2.0"; + } + revision 2016-10-14 { + description + "Version 1.2"; + } + + typedef username-type { + type string { + length "3..32"; + pattern "[a-z][a-z0-9]{2,31}" { + error-message + "A username must begin with a lowercase letter, The remainder + of the string may contain lowercase letters, or numbers 0 through 9."; + } + } + description + "The user name string identifying this entry."; + } + + typedef password-type { + type string { + length "8..128"; + pattern "[a-zA-Z0-9!$%\\^()\\[\\]_\\-~{}.+]*" { + error-message "Password content does not meet the requirements"; + } + } + description + "The password for this entry. This shouldn't be in clear text + The Password must contain at least 2 characters from + each of the following groups: + a) Lower case alphabetic (a-z) + b) Upper case alphabetic (A-Z) + c) Numeric 0-9 + d) Special characters Allowed !$%^()[]_-~{}.+ + Password must not contain Username."; + } + + grouping user-profile { + list user { + key "name"; + description + "The list of local users configured on this device."; + leaf name { + type username-type; + description + "The user name string identifying this entry."; + } + leaf password { + type password-type; + description + "The password for this entry."; + } + leaf group { + type enumeration { + enum "sudo"; + } + description + "The group to which the user is associated to."; + } + } + } + + rpc chg-password { + input { + leaf currentPassword { + type password-type; + mandatory true; + description + "provide the current password"; + } + leaf newPassword { + type password-type; + mandatory true; + description + "provide a new password"; + } + leaf newPasswordConfirm { + type password-type; + mandatory true; + description + "re-enter the new password "; + } + } + output { + leaf status { + type enumeration { + enum "Successful" { + value 1; + } + enum "Failed" { + value 2; + } + } + mandatory true; + description + "Successful or Failed"; + } + leaf status-message { + type string; + description + "Gives a more detailed reason for success / failure"; + } + } + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestDeviceManagerXRanImpl.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestDeviceManagerXRanImpl.java new file mode 100644 index 0000000..a45a5ea --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestDeviceManagerXRanImpl.java @@ -0,0 +1,78 @@ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.DeviceManagerXRanImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TestDeviceManagerXRanImpl { + private static Path KARAF_ETC = Paths.get("etc"); + private static final Logger LOG = LoggerFactory.getLogger(TestDeviceManagerXRanImpl.class); + DeviceManagerXRanImpl devMgrXran; + + @Before + public void init() throws InterruptedException, IOException { + /*System.out.println("Logger: " + LOG.getClass().getName() + " " + LOG.getName()); + Path etc = KARAF_ETC; + delete(etc); + + System.out.println("Create empty:" + etc.toString()); + Files.createDirectories(etc);*/ + } + + @Test + public void test() throws Exception { + devMgrXran = new DeviceManagerXRanImpl(); + /*DeviceManagerImpl devMgr = new DeviceManagerImpl(); + + try { + devMgr.init(); + devMgrOran.setNetconfNetworkElementService(devMgr); + devMgrOran.init(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }*/ + /* + * devMgrOran.setNetconfNetworkElementService(null); devMgrOran.init(); + * NetconfNetworkElementService netConfNetworkElementService = + * mock(NetconfNetworkElementService.class); devMgrOran = + * mock(DeviceManagerORanImpl.class); + * when(netConfNetworkElementService.registerNetworkElementFactory(new + * ORanNetworkElementFactory())).thenReturn(null); + */ + + + } + + @After + public void cleanUp() throws Exception { + devMgrXran.close(); + } + + private static void delete(Path etc) throws IOException { + if (Files.exists(etc)) { + System.out.println("Found, removing:" + etc.toString()); + delete(etc.toFile()); + } + } + + private static void delete(File f) throws IOException { + if (f.isDirectory()) { + for (File c : f.listFiles()) { + delete(c); + } + } + if (!f.delete()) { + throw new FileNotFoundException("Failed to delete file: " + f); + } + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestHardwareClass.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestHardwareClass.java new file mode 100644 index 0000000..a42f35b --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestHardwareClass.java @@ -0,0 +1,7 @@ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran; + +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.hardware.rev180313.HardwareClass; + +public interface TestHardwareClass extends HardwareClass { + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXORanNetworkElementFactory.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXORanNetworkElementFactory.java new file mode 100644 index 0000000..6ffdab7 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXORanNetworkElementFactory.java @@ -0,0 +1,72 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran; + +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import org.junit.After; +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.XRanNetworkElementFactory; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock.NetconfAccessorMock; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor; +import org.opendaylight.yang.gen.v1.urn.xran.hardware._1._0.rev180720.XRANRADIO; +import org.opendaylight.yangtools.yang.common.QName; + +public class TestXORanNetworkElementFactory { + + static NetconfAccessor accessor; + static DeviceManagerServiceProvider serviceProvider; + static Capabilities capabilities; + QName qCapability; + + @BeforeClass + public static void init() throws InterruptedException, IOException { + capabilities = mock(Capabilities.class); + accessor = mock(NetconfAccessorMock.class); + serviceProvider = mock(DeviceManagerServiceProvider.class); + + when(accessor.getCapabilites()).thenReturn(capabilities); + when(serviceProvider.getDataProvider()).thenReturn(null); + } + + @Test + public void testCreateORANHWComponent() throws Exception { + when(accessor.getCapabilites().isSupportingNamespace(XRANRADIO.QNAME)).thenReturn(true); + XRanNetworkElementFactory factory = new XRanNetworkElementFactory(); + assertTrue(factory.create(accessor, serviceProvider).isPresent()); + } + + @Test + public void testCreateNone() throws Exception { + when(accessor.getCapabilites().isSupportingNamespace(XRANRADIO.QNAME)).thenReturn(false); + XRanNetworkElementFactory factory = new XRanNetworkElementFactory(); + assertTrue(!factory.create(accessor, serviceProvider).isPresent()); + } + + @After + public void cleanUp() throws Exception { + + } +} + diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanChangeNotificationListener.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanChangeNotificationListener.java new file mode 100644 index 0000000..ddb60b5 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanChangeNotificationListener.java @@ -0,0 +1,87 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ + +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran; + +import static org.mockito.Mockito.*; + +import java.util.Arrays; +import java.util.List; + +import org.eclipse.jdt.annotation.NonNull; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.XRanChangeNotificationListener; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.EditOperationType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfConfigChange; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.netconf.config.change.Edit; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.netconf.config.change.EditBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; + +public class TestXRanChangeNotificationListener { + + private static final String NODEID = "node1"; + + @Test + public void test() { + + NetconfAccessor netconfAccessor = mock(NetconfAccessor.class); + DataProvider databaseService = mock(DataProvider.class); + XRanChangeNotificationListener notifListener = new XRanChangeNotificationListener(netconfAccessor, + databaseService); + when(netconfAccessor.getNodeId()).thenReturn(new NodeId(NODEID)); + Iterable pathArguments = Arrays.asList(new PathArgument() { + + @Override + public int compareTo(PathArgument arg0) { + return 0; + } + + @Override + public Class getType() { + return DataObject.class; + } + }); + InstanceIdentifier target = InstanceIdentifier.create(pathArguments); + + notifListener.onNetconfConfigChange(createNotification(EditOperationType.Create,target)); + EventlogEntity event = new EventlogBuilder().setNodeId(NODEID) + .setNewValue(String.valueOf(EditOperationType.Create)).setObjectId(target.toString()).build(); + verify(databaseService).writeEventLog(event); + + } + + /** + * @param type + * @return + */ + private static NetconfConfigChange createNotification(EditOperationType type,InstanceIdentifier target) { + NetconfConfigChange change = mock(NetconfConfigChange.class); + + @SuppressWarnings("null") + final @NonNull List edits = Arrays.asList(new EditBuilder().setOperation(type).setTarget(target).build()); + when(change.nonnullEdit()).thenReturn(edits); + return change; + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanFaultNotificationListener.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanFaultNotificationListener.java new file mode 100644 index 0000000..eea02bb --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanFaultNotificationListener.java @@ -0,0 +1,30 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran; + +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.XRanFaultNotificationListener; + +public class TestXRanFaultNotificationListener { + + @Test + public void test() { + XRanFaultNotificationListener faultListener = new XRanFaultNotificationListener(); + faultListener.onAlarmNotif(null); + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanNetworkElement.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanNetworkElement.java new file mode 100644 index 0000000..f87ea28 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanNetworkElement.java @@ -0,0 +1,83 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; + +import java.util.Optional; +import java.io.IOException; +import org.junit.After; +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yang.gen.v1.urn.xran.hardware._1._0.rev180720.XRANRADIO; +import org.opendaylight.yangtools.yang.common.QName; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.XRanNetworkElementFactory; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock.NetconfAccessorMock; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock.TransactionUtilsMock; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities; + +public class TestXRanNetworkElement { + + static NetconfAccessorMock accessor; + static DeviceManagerServiceProvider serviceProvider; + static Capabilities capabilities; + QName qCapability; + + @BeforeClass + public static void init() throws InterruptedException, IOException { + capabilities = mock(Capabilities.class); + //accessor = mock(NetconfAccessorMock.class); + accessor = spy(new NetconfAccessorMock(null, null, null, null)); + serviceProvider = mock(DeviceManagerServiceProvider.class); + + NodeId nNodeId = new NodeId("nSky"); + when(accessor.getCapabilites()).thenReturn(capabilities); + when (accessor.getNodeId()).thenReturn(nNodeId); + when (accessor.getTransactionUtils()).thenReturn(new TransactionUtilsMock()); + + DataProvider dataProvider = mock(DataProvider.class); + when(serviceProvider.getDataProvider()).thenReturn(dataProvider); + } + + @Test + public void test() { + Optional oRanNe; + when(accessor.getCapabilites().isSupportingNamespace(XRANRADIO.QNAME)).thenReturn(true); + XRanNetworkElementFactory factory = new XRanNetworkElementFactory(); + oRanNe = factory.create(accessor, serviceProvider); + assertTrue(factory.create(accessor, serviceProvider).isPresent()); + oRanNe.get().register(); + oRanNe.get().deregister(); + oRanNe.get().getAcessor(); + oRanNe.get().getDeviceType(); + assertEquals(oRanNe.get().getNodeId().getValue(), "nSky"); + } + + @After + public void cleanUp() throws Exception { + + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanToInternalDataModel.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanToInternalDataModel.java new file mode 100644 index 0000000..f2413b9 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanToInternalDataModel.java @@ -0,0 +1,83 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.List; +import java.io.IOException; +import java.util.ArrayList; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.hardware.rev180313.HardwareClass; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.Component; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.TestHardwareClass; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.XRanToInternalDataModel; + +public class TestXRanToInternalDataModel { + + NodeId nodeId; + Component component; + + @Before + public void init() throws InterruptedException, IOException { + nodeId = mock(NodeId.class); + component = mock(Component.class); + + when(nodeId.getValue()).thenReturn("ORan-1000"); + when(component.getParent()).thenReturn("Shelf"); + when(component.getParentRelPos()).thenReturn(0); + when(component.getUuid()).thenReturn(new Uuid("0Aabcdef-0abc-0cfD-0abC-0123456789AB")); + + List list = new ArrayList<>(); + list.add("Card-01A"); + list.add("Card-01B"); + + when (component.getContainsChild()).thenReturn(list); + when (component.getName()).thenReturn("Nokia"); + when (component.getDescription()).thenReturn("ORAN Network Element NO-456"); + Class hwClass = TestHardwareClass.class; + Mockito.>when(component.getXmlClass()).thenReturn(hwClass); + + DateAndTime dt = new DateAndTime("2020-02-05T12:30:45.283Z"); + when (component.getMfgDate()).thenReturn(dt); + + } + + @Test + public void test() throws Exception { + XRanToInternalDataModel model = new XRanToInternalDataModel(); + model.getInternalEquipment(nodeId, component); + assertEquals(component.getUuid().getValue(), "0Aabcdef-0abc-0cfD-0abC-0123456789AB"); + assertEquals(component.getMfgDate().getValue(), "2020-02-05T12:30:45.283Z"); + + } + + @After + public void cleanUp() throws Exception { + + } +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfAccessorMock.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfAccessorMock.java new file mode 100644 index 0000000..2b3d079 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfAccessorMock.java @@ -0,0 +1,92 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock; + +import com.google.common.util.concurrent.ListenableFuture; +import org.eclipse.jdt.annotation.NonNull; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.MountPoint; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.NotificationListener; +import org.opendaylight.yangtools.yang.common.RpcResult; + +/** + */ +public class NetconfAccessorMock implements NetconfAccessor { + + private final NodeId nNodeId; + private final NetconfNode netconfNode; + private final MountPoint mountpoint; + private final DataBroker netconfNodeDataBroker; + + public NetconfAccessorMock(NodeId nNodeId, NetconfNode netconfNode, MountPoint mountpoint, + DataBroker netconfNodeDataBroker) { + this.nNodeId = nNodeId; + this.netconfNode = netconfNode; + this.mountpoint = mountpoint; + this.netconfNodeDataBroker = netconfNodeDataBroker; + } + + @Override + public NodeId getNodeId() { + return nNodeId; + } + + @Override + public NetconfNode getNetconfNode() { + return netconfNode; + } + + @Override + public Capabilities getCapabilites() { + return null; + } + + @Override + public DataBroker getDataBroker() { + return netconfNodeDataBroker; + } + + @Override + public MountPoint getMountpoint() { + return mountpoint; + } + + @Override + public TransactionUtils getTransactionUtils() { + return null; + } + + @Override + public ListenerRegistration doRegisterNotificationListener( + @NonNull T listener) { + return null; + } + + @Override + public ListenableFuture> registerNotificationsStream(String streamName) { + return null; + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfConfigChangeMock.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfConfigChangeMock.java new file mode 100644 index 0000000..41a6085 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfConfigChangeMock.java @@ -0,0 +1,62 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfConfigChange; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.changed.by.parms.ChangedBy; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.netconf.config.change.Edit; +import org.opendaylight.yangtools.yang.binding.Augmentation; +import org.opendaylight.yangtools.yang.binding.DataContainer; + +public class NetconfConfigChangeMock implements NetconfConfigChange { + + @Override + public Class getImplementedInterface() { + // TODO Auto-generated method stub + return null; + } + + @Override + public > @Nullable E$$ augmentation(Class augmentationType) { + // TODO Auto-generated method stub + return null; + } + + @Override + public @Nullable ChangedBy getChangedBy() { + // TODO Auto-generated method stub + return null; + } + + @Override + public @Nullable Datastore getDatastore() { + // TODO Auto-generated method stub + return null; + } + + @Override + public @Nullable List getEdit() { + List list = new ArrayList(); + return list; + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/TransactionUtilsMock.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/TransactionUtilsMock.java new file mode 100644 index 0000000..f8c0944 --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/TransactionUtilsMock.java @@ -0,0 +1,47 @@ +/* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock; + +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; + +import org.eclipse.jdt.annotation.Nullable; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class TransactionUtilsMock implements TransactionUtils { + + @Override + public @Nullable T readData(DataBroker dataBroker, LogicalDatastoreType dataStoreType, + InstanceIdentifier iid) { + // TODO Auto-generated method stub + return null; + } + + @Override + public @Nullable T readDataOptionalWithStatus(DataBroker dataBroker, + LogicalDatastoreType dataStoreType, InstanceIdentifier iid, AtomicBoolean noErrorIndication, + AtomicReference statusIndicator) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/resources/simplelogger.properties b/features/devicemanager/x-ran/ru-fh/provider/src/test/resources/simplelogger.properties new file mode 100644 index 0000000..9af26dc --- /dev/null +++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/resources/simplelogger.properties @@ -0,0 +1,61 @@ +# +# ============LICENSE_START======================================================= +# ONAP : ccsdk features +# ================================================================================ +# Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END======================================================= +# +# + +# SLF4J's SimpleLogger configuration file +# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err. + +# Default logging detail level for all instances of SimpleLogger. +# Must be one of ("trace", "debug", "info", "warn", or "error"). +# If not specified, defaults to "info". +org.slf4j.simpleLogger.defaultLogLevel=info + +# Logging detail level for a SimpleLogger instance named "xxx.yyy.zzz". +# Must be one of ("trace", "debug", "info", "warn", or "error"). +# If not specified, the default logging detail level is used. +# org.slf4j.simpleLogger.log.xxx.yyy=debug +org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager=info +org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.test=debug +org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.database=debug +org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.archiveservice=info +org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Resources=info +org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container=info + +# Set to true if you want the current date and time to be included in output messages. +# Default is false, and will output the number of milliseconds elapsed since startup. +#org.slf4j.simpleLogger.showDateTime=false + +# The date and time format to be used in the output messages. +# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat. +# If the format is not specified or is invalid, the default format is used. +# The default format is yyyy-MM-dd HH:mm:ss:SSS Z. +#org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z + +# Set to true if you want to output the current thread name. +# Defaults to true. +#org.slf4j.simpleLogger.showThreadName=true + +# Set to true if you want the Logger instance name to be included in output messages. +# Defaults to true. +#org.slf4j.simpleLogger.showLogName=true + +# Set to true if you want the last component of the name to be included in output messages. +# Defaults to false. +#org.slf4j.simpleLogger.showShortLogName=false -- 2.16.6